view-ui-plus-derive 0.1.3 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,13 +13,11 @@ or
13
13
  yarn add view-ui-plus-derive
14
14
  ```
15
15
 
16
- [TOC]
17
-
18
16
  ### CDN引入
19
17
 
20
18
  ```html
21
- <link rel="stylesheet" href="https://unpkg.com/view-ui-plus/dist/styles/viewuiplus.css">
22
- <link rel="stylesheet" href="https://unpkg.com/view-ui-plus-derive/dist/umd/index.css">
19
+ <link rel="stylesheet" href="https://unpkg.com/view-ui-plus/dist/styles/viewuiplus.css" />
20
+ <link rel="stylesheet" href="https://unpkg.com/view-ui-plus-derive/dist/umd/index.css" />
23
21
  <script src="https://unpkg.com/vue"></script>
24
22
  <script src="https://unpkg.com/view-ui-plus"></script>
25
23
  <script src="https://unpkg.com/view-ui-plus-derive/dist/umd/index.js"></script>
@@ -27,7 +25,7 @@ yarn add view-ui-plus-derive
27
25
  <!-- <script src="https://unpkg.com/view-ui-plus-derive/dist/umd/en-US.js"></script> -->
28
26
 
29
27
  <script>
30
- Vue.createApp().use(ViewUIPlus).use(iviewDerive /*,{msg: iviewDeriveENUS} */).mount('#app')
28
+ Vue.createApp().use(ViewUIPlus).use(iviewDerive /*,{msg: iviewDeriveEnUs} */).mount('#app')
31
29
  </script>
32
30
  ```
33
31
 
@@ -45,10 +43,9 @@ import App from './App.vue'
45
43
  createApp(App).use(ViewUIPlus).use(iviewDerive).mount('#app')
46
44
  ```
47
45
 
48
- #### 自定义组件名前缀
46
+ #### 自定义组件前缀
49
47
 
50
- 为免容易变得冗长,组件名及其样式class默认无前缀,若需要自定义,可传入prefix参数
51
- 该参数通过全局provide提供以便访问,对应的key为 `Symbol('vupdPrefix')` ,不会与其它全局provide冲突
48
+ 为免容易变得冗长,组件名及其样式class默认无前缀,若需要自定义,可传入prefix参数
52
49
 
53
50
  ```js
54
51
  import { createApp } from 'vue'
@@ -65,7 +62,8 @@ createApp(App)
65
62
  .mount('#app')
66
63
  ```
67
64
 
68
- **此时需要再修改组件共用的less变量以适配前缀**,无需前缀时建议直接引入`view-ui-plus-derive/style`中的css
65
+ **此时需要再修改组件共用的less变量以适配前缀**,无需前缀时建议直接引入`view-ui-plus-derive/style`中的css
66
+
69
67
  `App.vue`
70
68
 
71
69
  ```less
@@ -99,7 +97,7 @@ createApp(App).use(ViewUIPlus).component(Combi.name, Combi).mount('#app')
99
97
  仅部分组件需要对应样式,如图
100
98
  ![css](./assets/import%20component%20css.png)
101
99
 
102
- ### 多语言
100
+ ## 国际化
103
101
 
104
102
  目前提供中英翻译,默认显示简体中文。在安装插件时可传入需要显示的语言,若使用vue-i18n,则只需传入vue-i18n实例
105
103
 
@@ -228,7 +226,7 @@ createApp(App)
228
226
  .mount('#app')
229
227
  ```
230
228
 
231
- ### 更多优化
229
+ ## 调优
232
230
 
233
231
  - 为多选模式的iview Select添加全选功能。**若全局安装了插件则无需再次注册指令**
234
232
 
@@ -251,26 +249,59 @@ import { iviewSelect as vIviewSelect } from "view-ui-plus-derive";
251
249
  <Select v-iview-select:all="true" multiple></Select>
252
250
  ```
253
251
 
254
- - 调整iview的InputNumber默认值为null,避免在值为undefined时显示 1
255
- - 为InputNumber添加propunset,用于设置在清空时的默认值
252
+ - 调整iview的 InputNumber 默认值为null,避免在值为undefined时显示 1
253
+ - 为 InputNumber 添加prop:`unset`,用于设置在清空时的默认值
256
254
 
257
255
  ```js
258
256
  import 'view-ui-plus-derive/iview-mods/input-number'
259
257
  ```
260
258
 
261
- - 修复iview Select启用filterable时在过滤后可能只显示之前所选项的bug
259
+ - 修复 iview Select 启用filterable时在过滤后可能只显示之前所选项的bug
262
260
 
263
261
  ```js
264
262
  import 'view-ui-plus-derive/iview-mods/select'
265
263
  ```
266
264
 
267
- - 修复Table在某些情况下表头/固定列与内容错位
265
+ - 修复 Table 在某些情况下表头/固定列与内容错位
268
266
 
269
267
  ```js
270
268
  import 'view-ui-plus-derive/iview-mods/table'
271
269
  ```
272
270
 
273
- 也可以一次性引入iview-mods下的input-number、select、table
271
+ - 为 Table 添加prop:`cache-cols`,启用列宽缓存功能
272
+
273
+ ```js
274
+ import 'view-ui-plus-derive/iview-mods/table-cache-cols'
275
+ ```
276
+
277
+ ```vue
278
+ <template>
279
+ <Table border :columns="columns" :cache-cols="cacheCols"></Table>
280
+ </template>
281
+
282
+ <script setup>
283
+ const columns = [
284
+ {
285
+ prop: 'name',
286
+ label: '名称',
287
+ resizable: true
288
+ },
289
+ {
290
+ prop: 'age',
291
+ label: '年龄'
292
+ }
293
+ ]
294
+ // keys 决定存储路径,cols 为列配置
295
+ const cacheCols = {
296
+ // 若路径较深,建议适当扁平以简化存取的对象结构
297
+ // 如下会以 app.userA['page.list.cols'] 的形式读写 localStorage。若去掉中括号,对象将为 app.userA.page.list.cols 的形式
298
+ keys: 'app.userA.[page.list.cols]', // 或者不使用点,如 'app.userA.page_list_cols' | 'app.userA.page-list-cols'
299
+ cols: columns
300
+ }
301
+ </script>
302
+ ```
303
+
304
+ 也可以一次性引入iview-mods下的所有mod:input-number、select、table、cache-cols等
274
305
 
275
306
  ```js
276
307
  // 本地引入
@@ -295,1629 +326,50 @@ import 'view-ui-plus-derive/iview-mod.css'
295
326
 
296
327
  ```html
297
328
  <!-- CDN引入 -->
298
- <link rel="stylesheet" href="https://unpkg.com/view-ui-plus-derive/dist/iview-mod.css">
329
+ <link rel="stylesheet" href="https://unpkg.com/view-ui-plus-derive/dist/iview-mod.css" />
299
330
  ```
300
331
 
301
- ### 组件
302
-
303
- #### AllCheckbox
332
+ ## 组件
304
333
 
334
+ [AllCheckbox](./md/AllCheckbox.md)
305
335
  提供全选功能的CheckboxGroup
306
336
 
307
- ```html
308
- <template>
309
- <AllCheckbox v-model="checkeds" v-model:all="checkAll" :list="list"></AllCheckbox>
310
- </template>
311
- <script setup>
312
- import { ref, shallowRef } from 'vue'
313
-
314
- const checkeds = shallowRef(['1', '3']),
315
- checkAll = ref(),
316
- list = Object.entries({
317
- 1: '周一',
318
- 2: '周二',
319
- 3: '周三',
320
- 4: '周四',
321
- 5: '周五',
322
- 6: '周六',
323
- 7: '周日'
324
- })
325
- </script>
326
- ```
327
-
328
- **props**
329
-
330
- ```js
331
- // v-model双向绑定选中值
332
- modelValue: Array
333
-
334
- // 全选框显示文本,默认“全选”
335
- title: String
336
-
337
- // 选项数组,数组成员可以是数组或对象
338
- list: Array
339
-
340
- // 各选项值对应list中的value键。如list是[{v:1,k:2}],valueKey为 v 且 labelKey为 k, 则选项绑定值为 1,显示文本是 2
341
- valueKey: {
342
- type: [String, Number],
343
- default: 0
344
- }
345
-
346
- // 各选项值对应list中的label键。如list是[{v:1,k:2}],valueKey为 v 且 labelKey为 k, 则选项绑定值为 1,显示文本是 2
347
- labelKey: {
348
- type: [String, Number],
349
- default: 1
350
- }
351
-
352
- // 同时设置valueKey & labelKey,优先级相对更高
353
- keyMap: {
354
- type: Object,
355
- default(props) {
356
- return {
357
- value: props.valueKey,
358
- label: props.labelKey
359
- }
360
- }
361
- }
362
-
363
- // 是否隐藏全选框
364
- hideAll: Boolean
365
-
366
- // 配合v-model:all双向绑定全选框的值,若全选中应为 true,否则 false
367
- all: Boolean
368
- ```
369
-
370
- **emits**
371
-
372
- ```js
373
- /**
374
- * 更改checkbox时触发
375
- * @param value 选中值
376
- * @param checkAll 是否全部选中
377
- */
378
- emit('change', value, checkAll)
379
- ```
380
-
381
- **slots**
382
-
383
- ```js
384
- /**
385
- * checkbox选项文本
386
- * @param item 数组项
387
- */
388
- default({item})
389
- ```
390
-
391
- #### BaseSwitch
392
-
337
+ [BaseSwitch](./md/BaseSwitch.md)
393
338
  更易于使用的Switch
394
339
 
395
- ```html
396
- <template>
397
- <BaseSwitch v-model="toggle" true-label="开" false-label="关"></BaseSwitch>
398
- </template>
399
- <script setup>
400
- import { ref } from 'vue'
401
-
402
- const toggle = ref('T')
403
- </script>
404
- ```
405
-
406
- **props**
407
- 除以下prop,可传递Switch的其它prop
408
-
409
- ```js
410
- // v-model双向绑定值
411
- modelValue: [String, Number, Boolean]
412
-
413
- // 打开状态对应值,默认 'T'
414
- trueValue: {
415
- type: [String, Number, Boolean],
416
- default: 'T'
417
- }
418
-
419
- // 关闭状态对应值,默认 'F'
420
- falseValue: {
421
- type: [String, Number, Boolean],
422
- default: 'F'
423
- }
424
-
425
- // 打开状态对应文本
426
- trueLabel: String
427
-
428
- // 关闭状态对应文本
429
- falseLabel: String
430
- ```
431
-
432
- **emits**
433
- 除以下事件,可监听Switch的其它事件
434
-
435
- ```js
436
- /**
437
- * 切换状态时触发
438
- * @param value 当前状态
439
- */
440
- emit('change', value)
441
- ```
442
-
443
- **slots**
444
-
445
- ```js
446
- // 打开状态对应文本
447
- open()
448
- // 关闭状态对应文本
449
- close()
450
- ```
451
-
452
- #### RemoteSelect
453
-
454
- 远程Select
455
-
456
- ```html
457
- <template>
458
- <RemoteSelect
459
- v-model="selectModel"
460
- :method="getList"
461
- filterable
462
- style="width: 200px"
463
- @on-change="$Message.info($event)"></RemoteSelect>
464
- </template>
465
- <script setup>
466
- import { ref } from 'vue'
467
-
468
- const selectModel = ref(''),
469
- getList = () => new Promise(resolve => {
470
- setTimeout(() => {
471
- resolve([
472
- {value: 'a', label: '一'}
473
- {value: 'b', label: '二'}
474
- {value: 'c', label: '三'}
475
- ])
476
- }, 2000)
477
- })
478
- </script>
479
- ```
480
-
481
- **props**
482
- 除以下prop,可传递Select的其它prop,如filterable
483
-
484
- ```js
485
- // v-model双向绑定选中值
486
- modelValue: [String, Array, Number]
487
-
488
- // 可通过v-model:list双向绑定选项列表
489
- list: Array
490
-
491
- // 是否多选
492
- multiple: Boolean
493
-
494
- // 是否将选项的value作为Option的key,默认以v-for的index作为key
495
- valueAsKey: Boolean
496
-
497
- // 选项对应value的key
498
- valueKey: {
499
- type: String,
500
- default: 'value'
501
- }
502
-
503
- // 选项对应文本的key
504
- labelKey: {
505
- type: String,
506
- default: 'label'
507
- }
508
-
509
- // 同时设置 valueKey 与 labelKey,优先级更高
510
- keyMap: {
511
- type: Object,
512
- default(props) {
513
- return {
514
- value: props.valueKey,
515
- label: props.labelKey
516
- }
517
- }
518
- }
519
-
520
- // 查询数据的函数/方法,结果为Falsy则认为请求失败,可返回一个Promise<result>。例如使用axios.get()
521
- method: Function
522
-
523
- // 可通过v-model:refresh获取组件内部的查询方法
524
- refresh: Function
525
-
526
- // 处理 method 成功返回后的结果
527
- process: Function
528
-
529
- // 调用method时的参数
530
- param: [Object, Function, String]
531
-
532
- // 通过v-model:chosen获取选中对象
533
- chosen: [Object, Array]
534
-
535
- // 是否挂载后立即请求,否则在点开时请求
536
- autoGet: Boolean
537
-
538
- // 修改Option的label,参数分别为:当前项,当前项索引
539
- formatLabel: Function
540
-
541
- // 点开获取数据时根据该函数返回值确定可否发送请求
542
- check: Function
543
-
544
- // 是否仅显示选中项的文本
545
- textMode: Boolean
546
-
547
- // 修改当启用textMode时显示的文本,参数:选中项
548
- textFormat: Function
549
-
550
- /**
551
- * 关联值,该值变化后会清空绑定值与选项
552
- *
553
- * @example 当 some 变化后,<RemoteSelect>的值与选项都会清空
554
- * <Select v-model="some" ><Option value="1">1</Option></Select>
555
- * <RemoteSelect :parentCode="some" />
556
- */
557
- parentCode: [String, Array, Number]
558
-
559
- // 用于判断是否禁用每一项Option,参数:当前项,当前项索引
560
- optionDisabled: Function
561
-
562
- // 用于设置Option的tag,参数:当前项,当前项索引
563
- optionTag: Function
564
-
565
- // 手动处理获取选中项的过程,参数:{ multiple, keyMap, list, value }
566
- getSelected: Function
567
-
568
- // 启用则根据绑定的list判断是否需要在展开时发送请求
569
- cache: Boolean
570
-
571
- // 手动获取数据,此时method和param不生效
572
- loader: Function
573
-
574
- // 开启后则展开时仅当parentCode有效才会发送请求
575
- strict: Boolean
576
-
577
- // 是否使用 v-iview-select:all 增加一键全选功能,仅多选模式生效
578
- all: {
579
- type: Boolean,
580
- default: false
581
- }
582
- ```
583
-
584
- **emits**
585
- 除以下事件,可监听Select的其它事件,如on-change
586
-
587
- ```js
588
- /**
589
- * 成功加载数据后触发
590
- * @param value 返回的列表结果,应该是数组
591
- */
592
- emit('load', value)
593
- ```
594
-
595
- ##### **slots**
596
-
597
- ```js
598
- /**
599
- * 选项显示的内容
600
- * @param item 单个选项
601
- * @param index 选项index
602
- */
603
- default({ item, index })
604
-
605
- /**
606
- * 替换<Select><Option /></Select>中的整个Option
607
- * @param list 选项数组
608
- */
609
- dropdown( { list })
610
-
611
- /**
612
- * textMode对应的文本内容
613
- * @param text 选中项
614
- */
615
- text( { text })
616
- ```
617
-
618
- #### CacheSelect
340
+ [RemoteSelect](./md/RemoteSelect.md)
341
+ 获取远程数据的Select,默认在展开时才触发请求
619
342
 
343
+ [CacheSelect](./md/CacheSelect.md)
620
344
  避免重复调用远程接口的RemoteSelect,同一个cacheId对应只触发一次请求
621
345
 
622
- ```html
623
- <template>
624
- <CacheSelect
625
- v-model="selectModel"
626
- :method="getList"
627
- style="width: 200px"
628
- @on-change="$Message.info($event)"></CacheSelect>
629
- <CacheSelect
630
- v-model="selectModel"
631
- :method="getList"
632
- style="width: 200px"
633
- @on-change="$Message.info($event)"></CacheSelect>
634
- </template>
635
- <script setup>
636
- import { ref } from 'vue'
637
-
638
- const selectModel = ref(''),
639
- getList = () => new Promise(resolve => {
640
- setTimeout(() => {
641
- resolve([
642
- {value: 'a', label: '一'}
643
- {value: 'b', label: '二'}
644
- {value: 'c', label: '三'}
645
- ])
646
- })
647
- }, 2000)
648
- </script>
649
- ```
650
-
651
- **props**
652
- 除以下prop,可传递RemoteSelect与Select的其它prop
653
-
654
- ```js
655
- // v-model双向绑定选中值
656
- modelValue: [String, Array, Number]
657
-
658
- // 缓存的唯一键,当页面上同时用到多个不同数据源的CacheSelect时需传入不同值
659
- cacheId: {
660
- type: String,
661
- default: 'list'
662
- }
663
- ```
664
-
665
- **emits**
666
- 除以下事件,可监听RemoteSelect与Select的其它事件
667
-
668
- ```js
669
- /**
670
- * 更改选中项时触发
671
- * @param value 当前选中项
672
- */
673
- emit('change', value)
674
- ```
675
-
676
- **slots**
677
- 同RemoteSelect [slots](#slots)
678
-
679
- #### Combi
680
-
681
- 类似iview Input[append prepend]的组合框
682
-
683
- ```jsx
684
- <template>
685
- <Combi>
686
- <template #prepend>
687
- <Select clearable style="width: 4em">
688
- <Option value="111">111</Option>
689
- <Option value="222">222</Option>
690
- </Select>
691
- </template>
692
- <Select clearable>
693
- <Option value="2">2</Option>
694
- </Select>
695
- <template #append>
696
- <Icon type="md-arrow-dropright-circle" />
697
- </template>
698
- </Combi>
699
- </template>
700
- ```
701
-
702
- **props**
703
-
704
- ```js
705
- // 前置文本
706
- prepend: String
707
- // 后置文本
708
- append: String
709
- ```
710
-
711
- **slots**
712
-
713
- ```js
714
- default()
715
- // 前置内容
716
- prepend()
717
- // 后置内容
718
- append()
719
- ```
720
-
721
- #### CountRange
346
+ [Combi](./md/Combi.md)
347
+ 类似iview Input[append prepend]样式的组合框
722
348
 
349
+ [CountRange](./md/CountRange.md)
723
350
  数值范围组件
724
351
 
725
- ```html
726
- <template>
727
- <CountRange
728
- v-model:begin="minNum"
729
- v-model:end="maxNum"
730
- @change-min="(v) => console.log(v)"></CountRange>
731
- </template>
732
- <script setup>
733
- import { ref } from 'vue'
734
-
735
- const minNum = ref(),
736
- maxNum = ref()
737
- </script>
738
- ```
739
-
740
- **props**
741
-
742
- ```js
743
- // v-model:begin双向绑定最小值
744
- begin: {
745
- type: Number,
746
- default: null
747
- }
748
-
749
- // v-model:end双向绑定最大值
750
- end: {
751
- type: Number,
752
- default: null
753
- }
754
-
755
- // 允许的最小值,默认0
756
- min: {
757
- type: Number,
758
- default: 0
759
- }
760
-
761
- // 允许的最大值,默认9999999999
762
- max: {
763
- type: Number,
764
- default: 9999999999
765
- }
766
-
767
- // 禁用整个组件
768
- disabled: Boolean
769
-
770
- // 禁用最小值
771
- minDisabled: Boolean
772
-
773
- // 禁用最大值
774
- maxDisabled: Boolean
775
-
776
- // 最小值组件class
777
- minClass: [String, Array, Object]
778
-
779
- // 最大值组件class
780
- maxClass: [String, Array, Object]
781
-
782
- // 最小值占位文本
783
- minHolder: String
784
-
785
- // 最大值占位文本
786
- maxHolder: String
787
-
788
- // 传递给最小值组件的props
789
- minAttr: Object
790
-
791
- // 传递给最大值组件的props
792
- maxAttr: Object
793
-
794
- // 中间连接部分class
795
- joinerClass: [String, Object]
796
-
797
- // 是否隐藏连接部分
798
- hideJoiner: Boolean
799
-
800
- // 以下为InputNumber的同名prop
801
- controlsOutside: Boolean
802
- step: Number
803
- readonly: Boolean
804
- editable: {
805
- type: Boolean,
806
- default: true
807
- }
808
- precision: Number
809
- formatter: Function
810
- parser: Function
811
- activeChange: {
812
- type: Boolean,
813
- default: true
814
- }
815
- ```
816
-
817
- **emits**
818
-
819
- ```js
820
- /**
821
- * 最小值变化后触发
822
- * @param value 最小值
823
- */
824
- emit('change-min', value)
825
-
826
- /**
827
- * 最大值变化后触发
828
- * @param value 最大值
829
- */
830
- emit('change-max', value)
831
-
832
- /**
833
- * 任一值变化后触发
834
- * @param begin 最小值
835
- * @param end 最大值
836
- * @param isMax 是否修改的最大值
837
- */
838
- emit('change', begin, end, isMax)
839
- ```
840
-
841
- #### CurdTable
842
-
352
+ [CurdTable](./md/CurdTable.md)
843
353
  具有增删功能的Table
844
354
 
845
- ```html
846
- <template>
847
- <CurdTable
848
- v-model="table.list"
849
- :columns="table.columns"
850
- size="small"
851
- :action-width="130"
852
- :add-row="table.add">
853
- <template #num="{ row, index }">
854
- <Input v-model.trim="table.list[index].num"></Input>
855
- </template>
856
- <template #moreAction="{ row }">
857
- <Button size="small" class="ivu-mr-8">查看</Button>
858
- </template>
859
- </CurdTable>
860
- </template>
861
- <script setup>
862
- const table = {
863
- columns: [
864
- {
865
- title: 'emoji',
866
- key: 'emoji',
867
- type: 'selection'
868
- },
869
- {
870
- title: 'exp',
871
- key: 'exp'
872
- },
873
- {
874
- title: 'num',
875
- key: 'num',
876
- slot: 'num',
877
- renderHeader: (h, { column }) => (
878
- <>
879
- {column.title}
880
- <input value={column.title} onInput={(e) => column.title = e.target.value} />
881
- </>
882
- )
883
- },
884
- {
885
- title: 'time',
886
- key: 'time'
887
- }
888
- ],
889
- list: [
890
- {
891
- emoji: '😶‍🌫️🤨😐',
892
- exp: 'ԅ(¯﹃¯ԅ)',
893
- num: Math.random(),
894
- time: new Date().toLocaleString()
895
- },
896
- {
897
- emoji: '😠😪',
898
- exp: 'ヾ(•ω•`)o',
899
- num: Math.random(),
900
- time: new Date().toLocaleString()
901
- }
902
- ],
903
- add: () => [
904
- {
905
- emoji: ' 😏🤤',
906
- exp: 'Σ(っ °Д °;)っ',
907
- num: Math.random(),
908
- time: new Date().toLocaleString()
909
- }
910
- ]
911
- }
912
- </script>
913
- ```
914
-
915
- **props**
916
-
917
- ```js
918
- // v-model双向绑定列表数据
919
- modelValue: {
920
- type: Array,
921
- default: () => []
922
- }
923
-
924
- // iview Table columns
925
- columns: {
926
- type: Array,
927
- default: () => []
928
- }
929
-
930
- // 隐藏控制列
931
- disabled: Boolean
932
-
933
- // 可否增加数据,默认true
934
- addable: {
935
- type: Boolean,
936
- default: true
937
- }
938
-
939
- // 控制列宽度,默认90px
940
- actionWidth: {
941
- type: Number,
942
- default: 90
943
- }
944
-
945
- // 控制列水平对齐,默认居中
946
- actionAlign: {
947
- type: String,
948
- default: 'center'
949
- }
950
-
951
- // 控制列是否固定
952
- actionFixed: String
953
-
954
- // 控制列表头文本
955
- actionText: String
956
-
957
- // 右侧控制列
958
- actionCol: {
959
- type: Object,
960
- default(props) {
961
- return {
962
- slot: 'action',
963
- width: props.actionWidth,
964
- align: props.actionAlign,
965
- fixed: props.actionFixed
966
- }
967
- }
968
- }
969
-
970
- // 新增行时需要添加的数据
971
- addRow: {
972
- type: Function,
973
- default: () => []
974
- }
975
-
976
- // Table的border
977
- border: Boolean
978
- // Table的size
979
- size: String
980
-
981
- // 返回Promise以决定何时新增数据
982
- beforeAdd: Function
983
-
984
- // 返回Promise以决定何时删除数据
985
- beforeRemove: Function
986
-
987
- // 新增按钮type
988
- addBtnType: {
989
- type: String,
990
- default: 'dashed'
991
- }
992
- // 新增按钮size
993
- addBtnSize: String
994
-
995
- // 新增按钮的ghost
996
- addBtnGhost: {
997
- type: Boolean,
998
- default: false
999
- }
1000
-
1001
- // 新增按钮的disabled
1002
- addBtnDisabled: {
1003
- type: Boolean,
1004
- default(props) {
1005
- return !props.addable
1006
- }
1007
- }
1008
-
1009
- // 传给新增Button的prop
1010
- addBtn: Object
1011
-
1012
- // 删除按钮type
1013
- delBtnType: {
1014
- type: String,
1015
- default: 'warning'
1016
- }
1017
-
1018
- // 删除按钮size
1019
- delBtnSize: {
1020
- type: String,
1021
- default: 'small'
1022
- }
1023
-
1024
- // 删除按钮的ghost
1025
- delBtnGhost: {
1026
- type: Boolean,
1027
- default: true
1028
- }
1029
-
1030
- // 传给删除按钮的prop
1031
- delBtn: Object
1032
-
1033
- // 新增按钮文本
1034
- addText: String
1035
-
1036
- // 是否隐藏每行的删除按钮,通过函数返回值决定
1037
- hideDelBtn: Function
1038
-
1039
- // 是否禁用每行删除按钮,通过函数返回值决定
1040
- delBtnDisabled: {
1041
- type: Function,
1042
- default() {
1043
- return false
1044
- }
1045
- }
1046
- ```
1047
-
1048
- **emits**
1049
-
1050
- ```js
1051
- /**
1052
- * 新增后触发
1053
- * @param row 新增的行
1054
- */
1055
- emit('add', row)
1056
-
1057
- /**
1058
- * 删除后触发
1059
- * @param row 删除的行
1060
- */
1061
- emit('remove', row)
1062
-
1063
- /**
1064
- * 增加或删除后触发
1065
- * @param isAdd 是否新增了数据
1066
- */
1067
- emit('change', isAdd)
1068
- ```
1069
-
1070
- **slots**
1071
-
1072
- ```js
1073
- // 传给Table的动态slot,需要列配置中指定slot
1074
- e.g.
1075
- [
1076
- {
1077
- title: '名称',
1078
- key: 'name',
1079
- slot: 'name'
1080
- }
1081
- ]
1082
- 则可使用 <template #name="{row, index}"></template>
1083
-
1084
- /**
1085
- * 每行删除按钮旁的更多内容
1086
- * @param row 行
1087
- * @param index
1088
- */
1089
- moreAction({ row, index })
1090
- ```
1091
-
1092
- #### DateRange
1093
-
355
+ [DateRange](./md/DateRange.md)
1094
356
  组合形式的日期范围组件
1095
357
 
1096
- ```html
1097
- <template>
1098
- <DateRange
1099
- v-model:begin="beginDate"
1100
- v-model:end="endDate"
1101
- clearable
1102
- style="width: 240px"></DateRange>
1103
- </template>
1104
- <script setup>
1105
- import { ref } from 'vue'
1106
-
1107
- const beginDate = ref(''),
1108
- endDate = ref('')
1109
- </script>
1110
- ```
1111
-
1112
- **props**
1113
-
1114
- ```js
1115
- // v-model:begin双向绑定开始时间
1116
- begin: {
1117
- type: [Date, String],
1118
- default: ''
1119
- }
1120
-
1121
- // v-model:end双向绑定结束时间
1122
- end: {
1123
- type: [Date, String],
1124
- default: ''
1125
- }
1126
-
1127
- // 可选的日期类型:date | month | year | datetime
1128
- type: {
1129
- type: String,
1130
- default: 'date'
1131
- }
1132
-
1133
- // 禁用开始时间
1134
- beginDisabled: Boolean
1135
-
1136
- // 禁用结束时间
1137
- endDisabled: Boolean
1138
-
1139
- // 是否当所选开始日期大于结束日期时自动将结束日期置为开始日期后一天
1140
- autoNext: {
1141
- type: Boolean,
1142
- default: true
1143
- }
1144
-
1145
- // 是否默认限制开始时间
1146
- limitBegin: {
1147
- type: Boolean,
1148
- default: true
1149
- }
1150
-
1151
- // 开始组件的class
1152
- beginClass: [String, Array, Object]
1153
-
1154
- // 结束组件的class
1155
- endClass: [String, Array, Object]
1156
-
1157
- // 开始时间placeholder
1158
- beginHolder: String
1159
-
1160
- // 结束时间placeholder
1161
- endHolder: String
1162
-
1163
- // 一次性传给开始组件的prop
1164
- beginAttr: Object
1165
-
1166
- // 一次性传给结束组件的prop
1167
- endAttr: Object
1168
-
1169
- // 中间连接符的class
1170
- joinerClass: [String, Object]
1171
-
1172
- // 是否禁止选择当天
1173
- disableToday: Boolean
1174
-
1175
- // 是否隐藏连接符
1176
- hideJoiner: Boolean
1177
-
1178
- // iview DatePicer的日期格式
1179
- format: String
1180
-
1181
- // 以下为DatePicker的同名prop
1182
- clearable: Boolean
1183
- disabled: Boolean
1184
- transfer: Boolean
1185
- ```
1186
-
1187
- **emits**
1188
-
1189
- ```js
1190
- /**
1191
- * 更改开始时间时触发
1192
- * @param begin 开始时间
1193
- */
1194
- emit('change-begin', begin)
1195
-
1196
- /**
1197
- * 更改结束时间时触发
1198
- * @param end 结束时间
1199
- */
1200
- emit('change-end', end)
1201
-
1202
- /**
1203
- * 更改时间时触发
1204
- * @param begin 开始时间
1205
- * @param end 结束时间
1206
- * @param isEnd 是否修改的结束时间
1207
- */
1208
- emit('change', begin, end, isEnd)
1209
- ```
1210
-
1211
- #### DateRangePicker
1212
-
358
+ [DateRangePicker](./md/DateRangePicker.md)
1213
359
  基于DatePicer[type=daterange],绑定的值转为string
1214
360
 
1215
- ```html
1216
- <template>
1217
- <DateRangePicker v-model:begin="rangeBegin" v-model:end="rangeEnd"></DateRangePicker>
1218
- </template>
1219
- <script setup>
1220
- import { ref } from 'vue'
1221
-
1222
- const rangeBegin = ref(''),
1223
- rangeEnd = ref('')
1224
- </script>
1225
- ```
1226
-
1227
- **props**
1228
-
1229
- ```js
1230
- // v-model:begin双向绑定开始时间
1231
- begin: {
1232
- type: [Date, String],
1233
- default: ''
1234
- }
1235
-
1236
- // v-model:end双向绑定结束时间
1237
- end: {
1238
- type: [Date, String],
1239
- default: ''
1240
- }
1241
- // 可选的日期类型:daterange | datetimerange
1242
- type: {
1243
- type: String,
1244
- default: 'daterange'
1245
- }
1246
-
1247
- // 是否默认限制开始时间
1248
- limitBegin: {
1249
- type: Boolean,
1250
- default: true
1251
- }
1252
-
1253
- // 是否禁止选择今天
1254
- disableToday: Boolean
1255
-
1256
- // 用于格式化绑定时间,默认 YYYY-MM-DD
1257
- valueFormat: {
1258
- type: String,
1259
- default: 'YYYY-MM-DD'
1260
- }
1261
-
1262
- // 以下为DatePicker的同名prop
1263
- options: Object,
1264
- clearable: {
1265
- type: Boolean,
1266
- default: true
1267
- },
1268
- splitPanels: Boolean,
1269
- transfer: Boolean,
1270
- placeholder: String,
1271
- disabled: Boolean,
1272
- placement: String,
1273
- ```
1274
-
1275
- **emits**
1276
-
1277
- ```js
1278
- /**
1279
- * 修改时触发
1280
- * @param dates 开始结束时间组成的数组
1281
- * @param type 当前日期类型 daterange | datetimerange
1282
- */
1283
- emit('change', dates, type)
1284
- ```
1285
-
1286
- #### MCalendar
1287
-
361
+ [MCalendar](./md/MCalendar.md)
1288
362
  月度日历组件
1289
363
 
1290
- ```html
1291
- <template>
1292
- <MCalendar v-model:range="calendar.range" :date="calendar.date" has-range>
1293
- <template #cell="{ day }"> <Badge status="success"></Badge>{{ day._text }} </template>
1294
- </MCalendar>
1295
- </template>
1296
- <script setup>
1297
- import { shallowReactive } from 'vue'
1298
-
1299
- const caledar = shallowReactive({
1300
- range: [
1301
- { _date: new Date(Date.now() - 86400000 * 7) },
1302
- { _date: new Date(Date.now() - 86400000) }
1303
- ],
1304
- date: new Date('2000-01-01')
1305
- })
1306
- </script>
1307
- ```
1308
-
1309
- **props**
1310
-
1311
- ```js
1312
- // 指定日期,默认显示该日期所在月份
1313
- date: Date
1314
- /**
1315
- * 传入的额外日期数据
1316
- * 组件始终展示一段日期,但业务上有时需要根据返回的一组日期进行渲染,如 [{date:'2000-01-01',xxx:false},{date:'2000-01-02',xxx:true}]
1317
- */
1318
- dates: Array
1319
-
1320
- // 周起始日,默认星期一
1321
- startDay: {
1322
- type: Number,
1323
- default: 1
1324
- }
1325
-
1326
- /**
1327
- * 休息日,默认周六周日
1328
- * @example [5,6] 休息日变为周五周六
1329
- */
1330
- offDay: {
1331
- type: Array,
1332
- default: () => [6, 0]
1333
- }
1334
-
1335
- // 传入dates里日期值对应的key,默认“date”
1336
- dateKey: {
1337
- type: String,
1338
- default: 'date'
1339
- }
1340
-
1341
- // 单元格标题class
1342
- titleClass: Function
1343
-
1344
- // 每一天单元格class
1345
- dateClass: Function
1346
-
1347
- // 加载状态
1348
- loading: Boolean
1349
-
1350
- // 单元格日期[格式](https://day.js.org/docs/en/display/format),默认 YYYY-MM-DD
1351
- textFormat: {
1352
- type: String,
1353
- default: 'YYYY-MM-DD'
1354
- }
1355
-
1356
- // 是否将指定date放在第一行,而不是按传统模式将每月1号放在第一行,此时可能不会显示完整的单一月份
1357
- isOnFirstLine: Boolean
1358
-
1359
- // 是否开启范围选择
1360
- hasRange: Boolean
1361
-
1362
- // 非当前有效时间范围内的日期是否可被选入范围
1363
- outerInRange: Boolean
1364
-
1365
- // 选择一个范围后,再选择时是否先将已选范围清除,即是否可清除已选范围
1366
- clearable: {
1367
- type: Boolean,
1368
- default: true
1369
- }
1370
-
1371
- /**
1372
- * 已选范围
1373
- * @example [{_date: '2020-01-01'}, {_date: new Date('2020-01-10')}]
1374
- */
1375
- range: Array
1376
-
1377
- /**
1378
- * 周标题内容类型,可选mini、short、long
1379
- * @example
1380
- * weekType=mini 对应显示成 一、二、三。。。
1381
- * weekType=short对应显示成 周一、周二、周三。。。
1382
- * weekType=long 对应显示成 星期一、星期二、星期三。。。
1383
- */
1384
- weekType: {
1385
- type: String,
1386
- default: 'mini'
1387
- }
1388
-
1389
- /**
1390
- * 周一到周日对应的映射,若传入有效对象则以该对象的key显示星期标题
1391
- * @example
1392
- * 周六周日标题会分别显示成 “星期6” 和 “星期天”,忽略对应的翻译文本
1393
- * :weekMap={0: '星期天', 6: '星期6'} *
1394
- */
1395
- weekMap: Object
1396
- ```
1397
-
1398
- **emits**
1399
-
1400
- ```js
1401
- /**
1402
- * 点击日期单元格触发
1403
- * @param item 点中日期单元
1404
- * @param index
1405
- */
1406
- emit('click-day', item, index)
1407
-
1408
- /**
1409
- * 选择范围后触发
1410
- * @param begin:范围开始,end:范围结束
1411
- * @param ranged 包含起止范围的所有日期
1412
- */
1413
- emit('select-range', [begin, end], ranged)
1414
-
1415
- /**
1416
- * 双击日期单元格触发
1417
- * @param item 点中日期单元
1418
- * @param index
1419
- */
1420
- emit('dblclick-day', item, index)
1421
- ```
1422
-
1423
- **slots**
1424
-
1425
- ```js
1426
- /**
1427
- * 单元格内容
1428
- * @param item 单个日期
1429
- * @param index
1430
- */
1431
- cell({ item, index })
1432
- ```
1433
-
1434
- #### ModalFooter
1435
-
364
+ [ModalFooter](./md/ModalFooter.md)
1436
365
  代替Modal自带的底栏部分,按钮易于控制,自定义度更高
1437
366
 
1438
- ```jsx
1439
- <template>
1440
- <Button @click="modal.show = true">show Modal</Button>
1441
- <Modal v-model="modal.show" title="modal footer">
1442
- <h1>modal content</h1>
1443
- <template #footer>
1444
- <ModalFooter
1445
- v-model="modal.show"
1446
- :ok-loading="modal.loading"
1447
- @ok="confirm"
1448
- @cancel="cancel"></ModalFooter>
1449
- </template>
1450
- </Modal>
1451
- </template>
1452
- <script setup>
1453
- import { reactive } from 'vue'
1454
-
1455
- const modal = reactive({
1456
- show: false,
1457
- loading: false
1458
- }),
1459
- confirm = () => {
1460
- modal.loading = true
1461
- setTimeout(() => {
1462
- modal.show = false
1463
- setTimeout(() => {
1464
- modal.loading = false
1465
- }, 200)
1466
- }, 2000)
1467
- },
1468
- cancel = () => {
1469
- alert('cancel')
1470
- modal.show = false
1471
- }
1472
- </script>
1473
- ```
1474
-
1475
- **props**
1476
-
1477
- ```js
1478
- // 双向绑定Modal的modelValue
1479
- modelValue: Boolean
1480
-
1481
- // 确定按钮文本
1482
- okText: String
1483
-
1484
- // 确定按钮禁用状态
1485
- okDisabled: Boolean
1486
-
1487
- // 确定按钮加载状态
1488
- okLoading: Boolean
1489
-
1490
- // 传递给确定按钮的props
1491
- ok: Object
1492
-
1493
- // 取消按钮文本
1494
- cancelText: String
1495
-
1496
- // 取消按钮加载状态
1497
- cancelLoading: Boolean
1498
-
1499
- // 取消按钮禁用状态
1500
- cancelDisabled: Boolean
1501
-
1502
- // 传递给取消按钮的props
1503
- cancel: Object
1504
-
1505
- // 取消按钮type,默认 text
1506
- cancelType: {
1507
- type: String,
1508
- default: 'text'
1509
- }
1510
-
1511
- // 是否把取消按钮放到确定按钮右边
1512
- rightCancel: Boolean
1513
-
1514
- // 是否显示确定按钮
1515
- hasOk: {
1516
- type: Boolean,
1517
- default: true
1518
- }
1519
- ```
1520
-
1521
- **emits**
1522
-
1523
- ```js
1524
- // 点击确定按钮触发
1525
- emit('ok')
1526
-
1527
- // 点击取消按钮触发。未监听该事件时会直接关闭Modal
1528
- emit('cancel')
1529
- ```
1530
-
1531
- **slots**
1532
-
1533
- ```js
1534
- // 显示在右下角按钮旁边的内容
1535
- other()
1536
- // 显示在底栏左侧的内容
1537
- action()
1538
- ```
1539
-
1540
- #### PageTable
1541
-
367
+ [PageTable](./md/PageTable.md)
1542
368
  远程分页/本地分页的Table
1543
369
 
1544
- ```html
1545
- <template>
1546
- <Button :loading="pageTable.loading" @click="search">查询</Button>
1547
- <PageTable
1548
- ref="pageTableRef"
1549
- v-model:selection="pageTable.selection"
1550
- v-model:loading="pageTable.loading"
1551
- :columns="pageTable.columns"
1552
- :method="getList"
1553
- page-key="current"
1554
- size-key="size"
1555
- data-key="list"
1556
- total-key="total"
1557
- use-page-num
1558
- :max-height="400"
1559
- show-header
1560
- border
1561
- stripe>
1562
- <template #num="{ column }">{{ column.title }}</template>
1563
- </PageTable>
1564
- </template>
1565
- <script setup>
1566
- import { shallowReactive, useTemplateRef } from 'vue'
1567
-
1568
- const refPageTable = useTemplateRef('pageTableRef')
1569
- const pageTable = shallowReactive({
1570
- loading: false,
1571
- selection: [],
1572
- columns: [
1573
- {
1574
- title: 'num',
1575
- key: 'num'
1576
- },
1577
- {
1578
- title: 'date',
1579
- key: 'date'
1580
- },
1581
- {
1582
- title: 'time',
1583
- key: 'time'
1584
- }
1585
- ]
1586
- })
1587
- function search() {
1588
- refPageTable.value.search()
1589
- }
1590
- function getList() {
1591
- return new Promise((resolve) => {
1592
- setTimeout(() => {
1593
- resolve({
1594
- ress: new Array(30).fill(0).map((e, i) => ({ num: i, date: '1010', time: '----' })),
1595
- total: 30
1596
- })
1597
- })
1598
- })
1599
- }
1600
- </script>
1601
- ```
1602
-
1603
- **props**
1604
- 除以下prop,可传递Table的其它prop
1605
-
1606
- ```js
1607
- // Table的columns
1608
- columns: {
1609
- type: Array,
1610
- default: () => []
1611
- }
1612
-
1613
- // v-model绑定Table的data
1614
- modelValue: {
1615
- type: Array as PropType<Obj[]>,
1616
- default: () => []
1617
- }
1618
-
1619
- /**
1620
- * 远程请求方法
1621
- * @example
1622
- * const getResult = () => axios.get('').then(res => res.data)
1623
- * <PageTable :method="getResult" />
1624
- */
1625
- method: Function
1626
-
1627
- // 调用 method 时传入的参数或者返回参数的函数
1628
- param: [Object, Function]
1629
-
1630
- /**
1631
- * 返回值中对应的列表数据key
1632
- * @example 如返回结构是 { result: [1,2,3], total: 100 },则dataKey='result'
1633
- */
1634
- dataKey: String
1635
-
1636
- /**
1637
- * 返回值中对应的分页总条数key *
1638
- * @example 如返回结构是 { result: [1,2,3], total: 100 },则totalKey='total'
1639
- */
1640
- totalKey: String
1641
-
1642
- /**
1643
- * 请求时传递的分页参数中 first 对应 key
1644
- * 后端分页一般要求指定起始数据索引或者“页码”,以及获取多少条数据
1645
- * @example
1646
- * 如后端接口给定的分页参数是 firstIndex 对应起始索引
1647
- * pageKey='firstIndex'
1648
- */
1649
- pageKey: String
1650
-
1651
- /**
1652
- * 请求时传递的分页参数中 size 对应 key
1653
- * 后端分页一般要求指定起始数据索引或者“页码”,以及获取多少条数据
1654
- * @example
1655
- * 如后端接口给定的分页参数是 amount 对应需要获取的条数
1656
- * sizeKey='amount'
1657
- */
1658
- sizeKey: String
1659
-
1660
- // 对象形式传递分页参数映射
1661
- pageMap: {
1662
- type: Object,
1663
- default(props) {
1664
- return {
1665
- first: props.pageKey,
1666
- pageSize: props.sizeKey
1667
- }
1668
- }
1669
- }
1670
-
1671
- // 处理接口返回列表数据的函数
1672
- process: Function
1673
-
1674
- // 是否本地分页
1675
- isLocal: Boolean
1676
-
1677
- // 分页条数选项
1678
- pageSizeOpts: {
1679
- type: Array,
1680
- default: () => [30, 50, 100, 200]
1681
- }
1682
-
1683
- // 查询失败时不清除之前获取到的结果
1684
- autoRemain: Boolean
1685
-
1686
- /**
1687
- * 计算Table的maxHeight时,Table距离视口底部的距离
1688
- * @default 80
1689
- */
1690
- bottomDis: {
1691
- type: [Number, String],
1692
- default: 80
1693
- }
1694
-
1695
- border: Boolean
1696
-
1697
- // v-model:selection获取勾选项
1698
- selection: Array
1699
-
1700
- // 初始分页条数
1701
- initSize: Number
1702
-
1703
- // 远程查询时额外检测的方法,返回Falsy则不进行搜索
1704
- check: Function
1705
-
1706
- // 查询时是否用页码而不是用当页第一条的索引
1707
- usePageNum: Boolean
1708
-
1709
- // 是否点击行即更改Checkbox状态
1710
- clickToCheck: Boolean
1711
-
1712
- // 获取的勾选项是否去除_checked等内部属性
1713
- pure: Boolean
1714
-
1715
- // head title
1716
- title: String
1717
-
1718
- // 是否显示带有功能项的header
1719
- showHeader: Boolean
1720
-
1721
- // 内部使用的Tooltip等iview组件的transfer
1722
- transfer: {
1723
- type: Boolean,
1724
- default: true
1725
- }
1726
-
1727
- // 最大化时是否全屏
1728
- fullscreen: Boolean
1729
-
1730
- // 传至ToggleColumn组件的storeAt
1731
- storeAt: String
1732
-
1733
- // 自动设置Table的maxHeight
1734
- autoMaxHeight: {
1735
- type: Boolean,
1736
- default: true
1737
- }
1738
-
1739
- // Table的maxHeight
1740
- maxHeight: [Number, String]
1741
-
1742
- // Table的height
1743
- height: [Number, String]
1744
-
1745
- // 自动设置Table的height
1746
- autoHeight: Boolean
1747
-
1748
- // 最大化时自动计算哪种高度
1749
- maximizeHeightType: {
1750
- type: String as PropType<'height' | 'maxHeight'>,
1751
- default: 'maxHeight'
1752
- }
1753
- ```
1754
-
1755
- **emits**
1756
- 除以下事件,可监听Table的其它事件
1757
-
1758
- ```js
1759
- /**
1760
- * 成功加载列表后触发
1761
- * @param res 获取到的结果
1762
- */
1763
- emit('load', res)
1764
-
1765
- /**
1766
- * 点击刷新图标触发,仅本地分页时生效
1767
- */
1768
- emit('reload')
1769
-
1770
- /**
1771
- * 勾选项变更后触发
1772
- * @param selections 勾选项
1773
- */
1774
- emit('selection-change', selections)
1775
-
1776
- /**
1777
- * 更改全选框后触发
1778
- * @param selections 勾选项
1779
- */
1780
- emit('select-all', selections)
1781
-
1782
- /**
1783
- * 更改单个选项框触发
1784
- * @param row 单个勾选项
1785
- * @param checked 选中状态
1786
- */
1787
- emit('select', row, checked)
1788
-
1789
- /**
1790
- * 内部组件切换列后触发
1791
- * @param checked 切换的列
1792
- */
1793
- emit('change-col', checked)
1794
-
1795
- /**
1796
- * 切换最大化后触发
1797
- * @param maximized 是否最大化
1798
- */
1799
- emit('maximize-change', maximized)
1800
- ```
1801
-
1802
- **slots**
1803
-
1804
- ```js
1805
- // 左上角的标题
1806
- title()
1807
- // 右上角功能区
1808
- headerAction()
1809
- // Table的header
1810
- header()
1811
- // Table的footer
1812
- footer()
1813
-
1814
- // 传给Table的动态slot,需要列配置中指定slot
1815
- e.g.
1816
- [
1817
- {
1818
- title: '名称',
1819
- key: 'name',
1820
- slot: 'name'
1821
- }
1822
- ]
1823
- 则可使用 <template #name="{row, index}"></template>
1824
- ```
1825
-
1826
- #### ToggleColumn
1827
-
370
+ [ToggleColumn](./md/ToggleColumn.md)
1828
371
  用于切换Table列的显示状态
1829
372
 
1830
- ```jsx
1831
- <template>
1832
- <ToggleColumn v-model="table.columns"></ToggleColumn>
1833
- <Table :columns="table.columns" :data="table.list"></Table>
1834
- </template>
1835
- <script setup>
1836
- import { reactive } from 'vue'
1837
-
1838
- const table = reactive({
1839
- list: [
1840
- {
1841
- year: 2000,
1842
- date: '2000-01-01'
1843
- },
1844
- {
1845
- year: 1000,
1846
- date: '1000-01-01'
1847
- }
1848
- ],
1849
- columns: [
1850
- {
1851
- type: 'selection',
1852
- key: 'selection',
1853
- width: 60,
1854
- _switchable: false // 让该列不可被切换
1855
- },
1856
- {
1857
- title: 'year',
1858
- key: 'year'
1859
- },
1860
- {
1861
- title: 'date',
1862
- key: 'date'
1863
- }
1864
- ]
1865
- })
1866
- </script>
1867
- ```
1868
-
1869
- **props**
1870
-
1871
- ```js
1872
- // v-model双向绑定Table列
1873
- modelValue: {
1874
- type: Array
1875
- }
1876
-
1877
- // 全选框文本
1878
- title: String
1879
-
1880
- // 传入iview icon名则仅显示图标
1881
- icon: String
1882
-
1883
- // 绑定columns对应的唯一标识,一般在v-for中绑定了固定某列且列配置中带有 _visible:false 时用到
1884
- cacheId: [String, Number]
1885
-
1886
- // 是否显示全选框
1887
- all: {
1888
- type: Boolean,
1889
- default: true
1890
- }
1891
-
1892
- // Dropdown的transfer
1893
- transfer: Boolean
1894
-
1895
- /**
1896
- * 将状态缓存至localStorage中的key,支持a.b形式
1897
- * @example
1898
- * // 组件会尝试将显示状态读写至 localStorage.app.main.cols
1899
- * storeAt='app.main.cols'
1900
- */
1901
- storeAt: String
1902
- ```
1903
-
1904
- **emits**
1905
-
1906
- ```js
1907
- /**
1908
- * 切换列状态时触发
1909
- * @param value 切换的列
1910
- */
1911
- emit('change', value)
1912
- ```
1913
-
1914
- **slots**
1915
-
1916
- ```js
1917
- // 替换默认显示的Button
1918
- default()
1919
- ```
1920
-
1921
373
  ## License
1922
374
 
1923
375
  MIT