iov-design 2.15.31 → 2.15.32
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/lib/calendar.js +2 -2
- package/lib/cascader-panel.js +8 -8
- package/lib/cascader.js +2 -2
- package/lib/color-picker.js +4 -4
- package/lib/date-picker.js +6 -6
- package/lib/image.js +8 -8
- package/lib/index.js +1 -1
- package/lib/iov-design.common.js +333 -12
- package/lib/loading.js +8 -8
- package/lib/message-box.js +10 -10
- package/lib/message.js +8 -8
- package/lib/notification.js +8 -8
- package/lib/pagination.js +2 -2
- package/lib/popover.js +8 -8
- package/lib/select.js +8 -8
- package/lib/table-column.js +76 -6
- package/lib/table.js +273 -22
- package/lib/theme-chalk/index.css +1 -1
- package/lib/theme-chalk/table.css +1 -1
- package/lib/time-picker.js +11 -11
- package/lib/time-select.js +8 -8
- package/lib/tooltip.js +2 -2
- package/lib/transfer.js +8 -8
- package/lib/upload.js +8 -8
- package/package.json +1 -1
- package/packages/table/src/config.js +32 -4
- package/packages/table/src/store/watcher.js +65 -5
- package/packages/table/src/table-header.js +149 -0
- package/packages/table/src/table.vue +6 -0
- package/packages/theme-chalk/src/table.scss +34 -8
- package/src/index.js +1 -1
|
@@ -4,6 +4,7 @@ import ElCheckbox from 'iov-design/packages/checkbox';
|
|
|
4
4
|
import FilterPanel from './filter-panel.vue';
|
|
5
5
|
import LayoutObserver from './layout-observer';
|
|
6
6
|
import { mapStates } from './store/helper';
|
|
7
|
+
import { toggleRowStatus } from './util';
|
|
7
8
|
|
|
8
9
|
const getAllColumns = (columns) => {
|
|
9
10
|
const result = [];
|
|
@@ -187,6 +188,52 @@ export default {
|
|
|
187
188
|
})
|
|
188
189
|
},
|
|
189
190
|
|
|
191
|
+
watch: {
|
|
192
|
+
'store.states.data': {
|
|
193
|
+
handler() {
|
|
194
|
+
const { states } = this.store;
|
|
195
|
+
const { data = [], selection } = states;
|
|
196
|
+
const { rowKey } = this.table;
|
|
197
|
+
// 全选所有页
|
|
198
|
+
if (this.store.states.isCrossPageSelection) {
|
|
199
|
+
|
|
200
|
+
states.isAllSelected = true;
|
|
201
|
+
|
|
202
|
+
data.forEach((row, index) => {
|
|
203
|
+
if (states.selectable) {
|
|
204
|
+
if (states.selectable.call(null, row, index)) {
|
|
205
|
+
// 如果已勾选数据中不包含当前页数据(如跳转至新的一页), 则勾选
|
|
206
|
+
if (!selection.some(o => o[rowKey] === row[rowKey])) {
|
|
207
|
+
toggleRowStatus(selection, row, true);
|
|
208
|
+
}
|
|
209
|
+
if (states.unSelectedRow.some(o => o[rowKey] === row[rowKey])) {
|
|
210
|
+
// 如果取消勾选数据中包含当前页数据项, 则取消勾选
|
|
211
|
+
toggleRowStatus(selection, row, false);
|
|
212
|
+
states.isAllSelected = false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
} else {
|
|
216
|
+
// 如果已勾选数据中不包含当前页数据(如跳转至新的一页), 则勾选
|
|
217
|
+
if (!selection.some(o => o[rowKey] === row[rowKey])) {
|
|
218
|
+
toggleRowStatus(selection, row, true);
|
|
219
|
+
}
|
|
220
|
+
// 如果取消勾选数据中包含当前页数据项, 则取消勾选
|
|
221
|
+
if (states.unSelectedRow.some(o => o[rowKey] === row[rowKey])) {
|
|
222
|
+
toggleRowStatus(selection, row, false);
|
|
223
|
+
states.isAllSelected = false;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
// console.log(states, 'states===========================');
|
|
228
|
+
} else {
|
|
229
|
+
// states.isAllSelected = false;
|
|
230
|
+
states.selection = [];
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
deep: true
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
|
|
190
237
|
created() {
|
|
191
238
|
this.filterPanels = {};
|
|
192
239
|
},
|
|
@@ -295,6 +342,108 @@ export default {
|
|
|
295
342
|
this.store.commit('toggleAllSelection');
|
|
296
343
|
},
|
|
297
344
|
|
|
345
|
+
/**
|
|
346
|
+
* 下拉框出现/隐藏事件
|
|
347
|
+
* @param {bol} visible 出现/隐藏
|
|
348
|
+
*/
|
|
349
|
+
onVisibleChange(v) {
|
|
350
|
+
this.store.states.showSelectionDropdown = v;
|
|
351
|
+
},
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* 选择数据事件
|
|
355
|
+
* @param {num} command 选择事件类型 1-全选当前页 2-清空当前页 3-全选所有页 4-清空所有页
|
|
356
|
+
*/
|
|
357
|
+
onCommand(command) {
|
|
358
|
+
this.store.states.selectionType = command;
|
|
359
|
+
const { states } = this.store;
|
|
360
|
+
const { data = [], selection } = states;
|
|
361
|
+
// console.log(this, 'this===========================');
|
|
362
|
+
|
|
363
|
+
switch (command) {
|
|
364
|
+
// 全选当前页
|
|
365
|
+
case 1:
|
|
366
|
+
states.isAllSelected = true;
|
|
367
|
+
data.forEach((row, index) => {
|
|
368
|
+
if (states.selectable) {
|
|
369
|
+
if (states.selectable.call(null, row, index)) {
|
|
370
|
+
toggleRowStatus(selection, row, true);
|
|
371
|
+
}
|
|
372
|
+
} else {
|
|
373
|
+
toggleRowStatus(selection, row, true);
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
// console.log(states, 'states1===========================');
|
|
377
|
+
// 先点击跨页全选,再点击清空当前页/取消几条勾选数据, 最后点击全选当前页
|
|
378
|
+
if (states.isCrossPageSelection) {
|
|
379
|
+
// 重新计算未选中数据
|
|
380
|
+
this.store.getUnSelectedRow(states.selection);
|
|
381
|
+
// 触发el-table的'selection-change'事件
|
|
382
|
+
this.table.$listeners['selection-change'](states.unSelectedRow, true);
|
|
383
|
+
} else {
|
|
384
|
+
this.table.$listeners['selection-change'](this.table.selection, false);
|
|
385
|
+
}
|
|
386
|
+
break;
|
|
387
|
+
// 清空当前页
|
|
388
|
+
case 2:
|
|
389
|
+
// 先点击跨页选择,再点击清空当前页
|
|
390
|
+
if (states.isCrossPageSelection) {
|
|
391
|
+
// 标记当前页未选中, 如果有选中的数据,清空选中数据
|
|
392
|
+
states.isAllSelected = false;
|
|
393
|
+
const oldSelection = states.selection;
|
|
394
|
+
// 表格中有选中的数据项是disabled状态时,清空时保留该数据
|
|
395
|
+
const isDisabledSelection = states.data.filter((row, index) => {
|
|
396
|
+
// 判断selectable是不可选中状态, 且当前数据项已被选中
|
|
397
|
+
if (states.selectable && !states.selectable.call(null, row, index) && oldSelection.some(item => item[states.rowKey] === row[states.rowKey])) {
|
|
398
|
+
return row;
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
if (oldSelection.length) {
|
|
402
|
+
states.selection = isDisabledSelection;
|
|
403
|
+
}
|
|
404
|
+
// 重新计算未选中数据
|
|
405
|
+
this.store.getUnSelectedRow(states.selection);
|
|
406
|
+
// 触发el-table的'selection-change'事件
|
|
407
|
+
this.table.$listeners['selection-change'](states.unSelectedRow, true);
|
|
408
|
+
} else {
|
|
409
|
+
states.unSelectedRow = [];
|
|
410
|
+
this.table.clearSelection();
|
|
411
|
+
}
|
|
412
|
+
// console.log(states, 'states2===========================');
|
|
413
|
+
break;
|
|
414
|
+
// 全选所有页
|
|
415
|
+
case 3:
|
|
416
|
+
states.isCrossPageSelection = true;
|
|
417
|
+
states.unSelectedRow = [];
|
|
418
|
+
states.isAllSelected = true;
|
|
419
|
+
data.forEach((row, index) => {
|
|
420
|
+
if (states.selectable) {
|
|
421
|
+
if (states.selectable.call(null, row, index)) {
|
|
422
|
+
toggleRowStatus(selection, row, true);
|
|
423
|
+
}
|
|
424
|
+
} else {
|
|
425
|
+
toggleRowStatus(selection, row, true);
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
// console.log(states, 'states3===========================');
|
|
429
|
+
// 重新计算未选中数据
|
|
430
|
+
this.store.getUnSelectedRow(states.selection);
|
|
431
|
+
// 触发el-table的'selection-change'事件
|
|
432
|
+
this.table.$listeners['selection-change'](states.unSelectedRow, true);
|
|
433
|
+
break;
|
|
434
|
+
// 清空所有页
|
|
435
|
+
case 4:
|
|
436
|
+
states.isCrossPageSelection = false;
|
|
437
|
+
states.unSelectedRow = [];
|
|
438
|
+
// console.log(states, 'states4===========================');
|
|
439
|
+
this.table.clearSelection();
|
|
440
|
+
break;
|
|
441
|
+
default:
|
|
442
|
+
break;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
},
|
|
446
|
+
|
|
298
447
|
handleFilterClick(event, column) {
|
|
299
448
|
event.stopPropagation();
|
|
300
449
|
const target = event.target;
|
|
@@ -325,6 +325,11 @@
|
|
|
325
325
|
default: true
|
|
326
326
|
},
|
|
327
327
|
|
|
328
|
+
crossPageSelection: {
|
|
329
|
+
type: Boolean,
|
|
330
|
+
default: false
|
|
331
|
+
},
|
|
332
|
+
|
|
328
333
|
indent: {
|
|
329
334
|
type: Number,
|
|
330
335
|
default: 16
|
|
@@ -676,6 +681,7 @@
|
|
|
676
681
|
});
|
|
677
682
|
|
|
678
683
|
this.$ready = true;
|
|
684
|
+
|
|
679
685
|
},
|
|
680
686
|
|
|
681
687
|
destroyed() {
|
|
@@ -36,6 +36,20 @@
|
|
|
36
36
|
pointer-events: none;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
|
|
40
|
+
// 跨页选择
|
|
41
|
+
@include e(cross-page-selection) {
|
|
42
|
+
.iov-icon-arrow-down {
|
|
43
|
+
color: $--color-fill-6;
|
|
44
|
+
cursor: pointer;
|
|
45
|
+
transition: all ease .2s;
|
|
46
|
+
&.show-selection-dropdown {
|
|
47
|
+
transform: rotate(180deg);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
|
|
39
53
|
// 展开行
|
|
40
54
|
@include e(expand-column) {
|
|
41
55
|
.cell {
|
|
@@ -285,18 +299,18 @@
|
|
|
285
299
|
.has-gutter {
|
|
286
300
|
.el-table__cell {
|
|
287
301
|
border-bottom: 0 none;
|
|
288
|
-
&:nth-last-child(2) {
|
|
289
|
-
|
|
290
|
-
}
|
|
302
|
+
// &:nth-last-child(2) {
|
|
303
|
+
// border-right: 0 none;
|
|
304
|
+
// }
|
|
291
305
|
}
|
|
292
306
|
}
|
|
293
307
|
|
|
294
308
|
.el-table__row {
|
|
295
|
-
.el-table__cell {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
309
|
+
// .el-table__cell {
|
|
310
|
+
// &:last-child {
|
|
311
|
+
// border-right: 0 none;
|
|
312
|
+
// }
|
|
313
|
+
// }
|
|
300
314
|
&:last-child {
|
|
301
315
|
.el-table__cell {
|
|
302
316
|
border-bottom: 0 none;
|
|
@@ -384,6 +398,18 @@
|
|
|
384
398
|
.el-table__fixed-footer-wrapper {
|
|
385
399
|
left: auto;
|
|
386
400
|
right: 0;
|
|
401
|
+
.el-table__row {
|
|
402
|
+
.el-table__cell {
|
|
403
|
+
&:last-child {
|
|
404
|
+
border-right: 0 none;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
&:last-child {
|
|
408
|
+
.el-table__cell {
|
|
409
|
+
border-bottom: 0 none;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
387
413
|
}
|
|
388
414
|
}
|
|
389
415
|
|