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.
@@ -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
- border-right: 0 none;
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
- &:last-child {
297
- border-right: 0 none;
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
 
package/src/index.js CHANGED
@@ -212,7 +212,7 @@ if (typeof window !== 'undefined' && window.Vue) {
212
212
  }
213
213
 
214
214
  export default {
215
- version: '2.15.31',
215
+ version: '2.15.32',
216
216
  locale: locale.use,
217
217
  i18n: locale.i18n,
218
218
  install,