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 +64 -1612
- package/dist/index.d.ts +97 -324
- package/dist/index.js +1247 -1238
- package/dist/iview-mod.js +1 -0
- package/dist/iview-mods/index.d.ts +4 -0
- package/dist/iview-mods/table-cache-cols.js +48 -0
- package/dist/umd/en-US.js +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/iview-mod.js +1 -1
- package/dist/umd/zh-CN.js +1 -1
- package/package.json +25 -17
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:
|
|
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
|

|
|
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添加prop
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
396
|
-
|
|
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
|
-
|
|
623
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|