vxe-table 3.15.5 → 3.15.7
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/es/index.css +1 -1
- package/es/index.min.css +1 -1
- package/es/locale/lang/ar-EG.js +3 -2
- package/es/locale/lang/de-DE.js +3 -2
- package/es/locale/lang/en-US.js +2 -1
- package/es/locale/lang/es-ES.js +3 -2
- package/es/locale/lang/fr-FR.js +2 -1
- package/es/locale/lang/hu-HU.js +2 -1
- package/es/locale/lang/hy-AM.js +2 -1
- package/es/locale/lang/id-ID.js +2 -1
- package/es/locale/lang/it-IT.js +2 -1
- package/es/locale/lang/ja-JP.js +2 -1
- package/es/locale/lang/ko-KR.js +2 -1
- package/es/locale/lang/nb-NO.js +2 -1
- package/es/locale/lang/pt-BR.js +2 -1
- package/es/locale/lang/ru-RU.js +2 -1
- package/es/locale/lang/th-TH.js +2 -1
- package/es/locale/lang/ug-CN.js +2 -1
- package/es/locale/lang/uk-UA.js +2 -1
- package/es/locale/lang/vi-VN.js +2 -1
- package/es/locale/lang/zh-CHT.js +2 -1
- package/es/locale/lang/zh-CN.js +2 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/module/custom/mixin.js +62 -37
- package/es/table/module/custom/panel.js +7 -7
- package/es/table/module/export/mixin.js +13 -12
- package/es/table/module/keyboard/mixin.js +3 -2
- package/es/table/src/body.js +49 -16
- package/es/table/src/cell.js +137 -45
- package/es/table/src/column.js +2 -0
- package/es/table/src/columnInfo.js +1 -0
- package/es/table/src/methods.js +983 -495
- package/es/table/src/props.js +9 -7
- package/es/table/src/table.js +108 -35
- package/es/table/style.css +70 -40
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +13 -1
- package/es/ui/src/dom.js +3 -0
- package/es/ui/src/log.js +1 -1
- package/es/vxe-table/style.css +70 -40
- package/es/vxe-table/style.min.css +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +1735 -858
- package/lib/index.umd.min.js +1 -1
- package/lib/locale/lang/ar-EG.js +3 -2
- package/lib/locale/lang/ar-EG.min.js +1 -1
- package/lib/locale/lang/de-DE.js +3 -2
- package/lib/locale/lang/de-DE.min.js +1 -1
- package/lib/locale/lang/en-US.js +2 -1
- package/lib/locale/lang/en-US.min.js +1 -1
- package/lib/locale/lang/en-US.umd.js +2 -1
- package/lib/locale/lang/es-ES.js +3 -2
- package/lib/locale/lang/es-ES.min.js +1 -1
- package/lib/locale/lang/es-ES.umd.js +3 -2
- package/lib/locale/lang/fr-FR.js +2 -1
- package/lib/locale/lang/fr-FR.min.js +1 -1
- package/lib/locale/lang/hu-HU.js +2 -1
- package/lib/locale/lang/hu-HU.min.js +1 -1
- package/lib/locale/lang/hu-HU.umd.js +2 -1
- package/lib/locale/lang/hy-AM.js +2 -1
- package/lib/locale/lang/hy-AM.min.js +1 -1
- package/lib/locale/lang/id-ID.js +2 -1
- package/lib/locale/lang/id-ID.min.js +1 -1
- package/lib/locale/lang/it-IT.js +2 -1
- package/lib/locale/lang/it-IT.min.js +1 -1
- package/lib/locale/lang/ja-JP.js +2 -1
- package/lib/locale/lang/ja-JP.min.js +1 -1
- package/lib/locale/lang/ja-JP.umd.js +2 -1
- package/lib/locale/lang/ko-KR.js +2 -1
- package/lib/locale/lang/ko-KR.min.js +1 -1
- package/lib/locale/lang/ko-KR.umd.js +2 -1
- package/lib/locale/lang/nb-NO.js +2 -1
- package/lib/locale/lang/nb-NO.min.js +1 -1
- package/lib/locale/lang/pt-BR.js +2 -1
- package/lib/locale/lang/pt-BR.min.js +1 -1
- package/lib/locale/lang/pt-BR.umd.js +2 -1
- package/lib/locale/lang/ru-RU.js +2 -1
- package/lib/locale/lang/ru-RU.min.js +1 -1
- package/lib/locale/lang/ru-RU.umd.js +2 -1
- package/lib/locale/lang/th-TH.js +2 -1
- package/lib/locale/lang/th-TH.min.js +1 -1
- package/lib/locale/lang/ug-CN.js +2 -1
- package/lib/locale/lang/ug-CN.min.js +1 -1
- package/lib/locale/lang/uk-UA.js +2 -1
- package/lib/locale/lang/uk-UA.min.js +1 -1
- package/lib/locale/lang/uk-UA.umd.js +2 -1
- package/lib/locale/lang/vi-VN.js +2 -1
- package/lib/locale/lang/vi-VN.min.js +1 -1
- package/lib/locale/lang/zh-CHT.js +2 -1
- package/lib/locale/lang/zh-CHT.min.js +1 -1
- package/lib/locale/lang/zh-CHT.umd.js +2 -1
- package/lib/locale/lang/zh-CN.js +2 -1
- package/lib/locale/lang/zh-CN.min.js +1 -1
- package/lib/locale/lang/zh-CN.umd.js +2 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/custom/mixin.js +74 -48
- package/lib/table/module/custom/mixin.min.js +1 -1
- package/lib/table/module/custom/panel.js +6 -2
- package/lib/table/module/custom/panel.min.js +1 -1
- package/lib/table/module/export/mixin.js +13 -5
- package/lib/table/module/export/mixin.min.js +1 -1
- package/lib/table/module/keyboard/mixin.js +2 -1
- package/lib/table/module/keyboard/mixin.min.js +1 -1
- package/lib/table/src/body.js +39 -15
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/cell.js +157 -36
- package/lib/table/src/cell.min.js +1 -1
- package/lib/table/src/column.js +2 -0
- package/lib/table/src/column.min.js +1 -1
- package/lib/table/src/columnInfo.js +1 -0
- package/lib/table/src/columnInfo.min.js +1 -1
- package/lib/table/src/methods.js +1164 -562
- package/lib/table/src/methods.min.js +1 -1
- package/lib/table/src/props.js +9 -7
- package/lib/table/src/props.min.js +1 -1
- package/lib/table/src/table.js +104 -34
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/style/style.css +70 -40
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +13 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/dom.js +4 -0
- package/lib/ui/src/dom.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-table/style/style.css +70 -40
- package/lib/vxe-table/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/locale/lang/ar-EG.ts +3 -2
- package/packages/locale/lang/de-DE.ts +3 -2
- package/packages/locale/lang/en-US.ts +2 -1
- package/packages/locale/lang/es-ES.ts +3 -2
- package/packages/locale/lang/fr-FR.ts +2 -1
- package/packages/locale/lang/hu-HU.ts +2 -1
- package/packages/locale/lang/hy-AM.ts +2 -1
- package/packages/locale/lang/id-ID.ts +2 -1
- package/packages/locale/lang/it-IT.ts +2 -1
- package/packages/locale/lang/ja-JP.ts +2 -1
- package/packages/locale/lang/ko-KR.ts +2 -1
- package/packages/locale/lang/nb-NO.ts +2 -1
- package/packages/locale/lang/pt-BR.ts +2 -1
- package/packages/locale/lang/ru-RU.ts +2 -1
- package/packages/locale/lang/th-TH.ts +2 -1
- package/packages/locale/lang/ug-CN.ts +2 -1
- package/packages/locale/lang/uk-UA.ts +2 -1
- package/packages/locale/lang/vi-VN.ts +2 -1
- package/packages/locale/lang/zh-CHT.ts +2 -1
- package/packages/locale/lang/zh-CN.ts +2 -1
- package/packages/table/module/custom/mixin.ts +85 -51
- package/packages/table/module/custom/panel.ts +8 -8
- package/packages/table/module/export/mixin.ts +19 -18
- package/packages/table/module/keyboard/mixin.ts +3 -2
- package/packages/table/src/body.ts +50 -17
- package/packages/table/src/cell.ts +136 -45
- package/packages/table/src/column.ts +2 -0
- package/packages/table/src/columnInfo.ts +1 -0
- package/packages/table/src/methods.ts +1016 -512
- package/packages/table/src/props.ts +9 -7
- package/packages/table/src/table.ts +122 -38
- package/packages/ui/index.ts +12 -0
- package/packages/ui/src/dom.ts +4 -0
- package/styles/components/table.scss +131 -92
- /package/es/{iconfont.1744880837792.ttf → iconfont.1745290222894.ttf} +0 -0
- /package/es/{iconfont.1744880837792.woff → iconfont.1745290222894.woff} +0 -0
- /package/es/{iconfont.1744880837792.woff2 → iconfont.1745290222894.woff2} +0 -0
- /package/lib/{iconfont.1744880837792.ttf → iconfont.1745290222894.ttf} +0 -0
- /package/lib/{iconfont.1744880837792.woff → iconfont.1745290222894.woff} +0 -0
- /package/lib/{iconfont.1744880837792.woff2 → iconfont.1745290222894.woff2} +0 -0
package/lib/table/src/methods.js
CHANGED
|
@@ -214,6 +214,7 @@ function restoreCustomStorage($xeTable) {
|
|
|
214
214
|
const storeData = getCustomStorageMap(tableId);
|
|
215
215
|
if (restoreStore) {
|
|
216
216
|
return Promise.resolve(restoreStore({
|
|
217
|
+
$table: $xeTable,
|
|
217
218
|
id: tableId,
|
|
218
219
|
type: 'restore',
|
|
219
220
|
storeData
|
|
@@ -257,6 +258,7 @@ function cacheColumnMap($xeTable) {
|
|
|
257
258
|
const rowOpts = $xeTable.computeRowOpts;
|
|
258
259
|
const isGroup = collectColumn.some(_utils.hasChildrenList);
|
|
259
260
|
let isAllOverflow = !!props.showOverflow;
|
|
261
|
+
let rowGroupColumn;
|
|
260
262
|
let expandColumn;
|
|
261
263
|
let treeNodeColumn;
|
|
262
264
|
let checkboxColumn;
|
|
@@ -269,7 +271,8 @@ function cacheColumnMap($xeTable) {
|
|
|
269
271
|
field,
|
|
270
272
|
fixed,
|
|
271
273
|
type,
|
|
272
|
-
treeNode
|
|
274
|
+
treeNode,
|
|
275
|
+
rowGroupNode
|
|
273
276
|
} = column;
|
|
274
277
|
const rest = {
|
|
275
278
|
$index: -1,
|
|
@@ -305,7 +308,16 @@ function cacheColumnMap($xeTable) {
|
|
|
305
308
|
if (!treeNodeColumn) {
|
|
306
309
|
treeNodeColumn = column;
|
|
307
310
|
}
|
|
308
|
-
}
|
|
311
|
+
}
|
|
312
|
+
if (rowGroupNode) {
|
|
313
|
+
if (treeNodeColumn) {
|
|
314
|
+
(0, _log.warnLog)('vxe.error.colRepet', ['row-group-node', rowGroupNode]);
|
|
315
|
+
}
|
|
316
|
+
if (!rowGroupColumn) {
|
|
317
|
+
rowGroupColumn = column;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
if (type === 'expand') {
|
|
309
321
|
if (expandColumn) {
|
|
310
322
|
(0, _log.warnLog)('vxe.error.colRepet', ['type', type]);
|
|
311
323
|
}
|
|
@@ -356,6 +368,7 @@ function cacheColumnMap($xeTable) {
|
|
|
356
368
|
}
|
|
357
369
|
}
|
|
358
370
|
reactData.isGroup = isGroup;
|
|
371
|
+
reactData.rowGroupColumn = rowGroupColumn;
|
|
359
372
|
reactData.treeNodeColumn = treeNodeColumn;
|
|
360
373
|
reactData.expandColumn = expandColumn;
|
|
361
374
|
reactData.isAllOverflow = isAllOverflow;
|
|
@@ -392,7 +405,7 @@ function handleBaseTreeExpand($xeTable, rows, expanded) {
|
|
|
392
405
|
} = reactData;
|
|
393
406
|
const {
|
|
394
407
|
fullAllDataRowIdData,
|
|
395
|
-
|
|
408
|
+
tableFullTreeData,
|
|
396
409
|
treeExpandedMaps,
|
|
397
410
|
treeExpandLazyLoadedMaps
|
|
398
411
|
} = internalData;
|
|
@@ -422,7 +435,7 @@ function handleBaseTreeExpand($xeTable, rows, expanded) {
|
|
|
422
435
|
if (accordion) {
|
|
423
436
|
validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
|
|
424
437
|
// 同一级只能展开一个
|
|
425
|
-
const matchObj = _xeUtils.default.findTree(
|
|
438
|
+
const matchObj = _xeUtils.default.findTree(tableFullTreeData, item => item === validRows[0], {
|
|
426
439
|
children: childrenField
|
|
427
440
|
});
|
|
428
441
|
if (matchObj) {
|
|
@@ -475,9 +488,96 @@ function handleBaseTreeExpand($xeTable, rows, expanded) {
|
|
|
475
488
|
* @returns
|
|
476
489
|
*/
|
|
477
490
|
function handleVirtualTreeExpand($xeTable, rows, expanded) {
|
|
491
|
+
const reactData = $xeTable;
|
|
478
492
|
return handleBaseTreeExpand($xeTable, rows, expanded).then(() => {
|
|
479
493
|
handleVirtualTreeToList($xeTable);
|
|
480
494
|
$xeTable.handleTableData();
|
|
495
|
+
reactData.treeExpandedFlag++;
|
|
496
|
+
updateAfterDataIndex($xeTable);
|
|
497
|
+
return $xeTable.$nextTick();
|
|
498
|
+
}).then(() => {
|
|
499
|
+
return $xeTable.recalculate(true);
|
|
500
|
+
}).then(() => {
|
|
501
|
+
setTimeout(() => {
|
|
502
|
+
$xeTable.updateCellAreas();
|
|
503
|
+
}, 30);
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* 展开与收起行分组节点
|
|
508
|
+
* @param rows
|
|
509
|
+
* @param expanded
|
|
510
|
+
* @returns
|
|
511
|
+
*/
|
|
512
|
+
function handleRowGroupBaseExpand($xeTable, rows, expanded) {
|
|
513
|
+
const reactData = $xeTable;
|
|
514
|
+
const internalData = $xeTable;
|
|
515
|
+
const {
|
|
516
|
+
fullAllDataRowIdData,
|
|
517
|
+
tableFullGroupData,
|
|
518
|
+
rowGroupExpandedMaps
|
|
519
|
+
} = internalData;
|
|
520
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
521
|
+
const {
|
|
522
|
+
mapChildrenField,
|
|
523
|
+
accordion
|
|
524
|
+
} = rowGroupOpts;
|
|
525
|
+
const {
|
|
526
|
+
handleGetRowId
|
|
527
|
+
} = (0, _util.createHandleGetRowId)($xeTable);
|
|
528
|
+
let validRows = rows;
|
|
529
|
+
if (mapChildrenField) {
|
|
530
|
+
if (accordion) {
|
|
531
|
+
validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
|
|
532
|
+
// 同一级只能展开一个
|
|
533
|
+
const matchObj = _xeUtils.default.findTree(tableFullGroupData, item => (0, _util.getRowid)($xeTable, item) === (0, _util.getRowid)($xeTable, validRows[0]), {
|
|
534
|
+
children: mapChildrenField
|
|
535
|
+
});
|
|
536
|
+
if (matchObj) {
|
|
537
|
+
matchObj.items.forEach(item => {
|
|
538
|
+
const rowid = handleGetRowId(item);
|
|
539
|
+
if (rowGroupExpandedMaps[rowid]) {
|
|
540
|
+
delete rowGroupExpandedMaps[rowid];
|
|
541
|
+
}
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
if (expanded) {
|
|
546
|
+
validRows.forEach(row => {
|
|
547
|
+
const rowid = handleGetRowId(row);
|
|
548
|
+
if (!rowGroupExpandedMaps[rowid]) {
|
|
549
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
550
|
+
if (rowRest) {
|
|
551
|
+
if (row[mapChildrenField] && row[mapChildrenField].length) {
|
|
552
|
+
rowGroupExpandedMaps[rowid] = row;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
});
|
|
557
|
+
} else {
|
|
558
|
+
validRows.forEach(item => {
|
|
559
|
+
const rowid = handleGetRowId(item);
|
|
560
|
+
if (rowGroupExpandedMaps[rowid]) {
|
|
561
|
+
delete rowGroupExpandedMaps[rowid];
|
|
562
|
+
}
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
reactData.rowGroupExpandedFlag++;
|
|
567
|
+
return $xeTable.recalculate();
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* 行分组的展开与收起
|
|
571
|
+
* @param rows
|
|
572
|
+
* @param expanded
|
|
573
|
+
* @returns
|
|
574
|
+
*/
|
|
575
|
+
function handleRowGroupVirtualExpand($xeTable, rows, expanded) {
|
|
576
|
+
const reactData = $xeTable;
|
|
577
|
+
return handleRowGroupBaseExpand($xeTable, rows, expanded).then(() => {
|
|
578
|
+
handleVirtualTreeToList($xeTable);
|
|
579
|
+
$xeTable.handleTableData();
|
|
580
|
+
reactData.rowGroupExpandedFlag++;
|
|
481
581
|
updateAfterDataIndex($xeTable);
|
|
482
582
|
return $xeTable.$nextTick();
|
|
483
583
|
}).then(() => {
|
|
@@ -599,27 +699,33 @@ function updateAfterDataIndex($xeTable) {
|
|
|
599
699
|
}
|
|
600
700
|
}
|
|
601
701
|
/**
|
|
602
|
-
*
|
|
702
|
+
* 如果为虚拟树、行分组、则将树结构拍平
|
|
603
703
|
* @returns
|
|
604
704
|
*/
|
|
605
705
|
function handleVirtualTreeToList($xeTable) {
|
|
606
706
|
const props = $xeTable;
|
|
707
|
+
const reactData = $xeTable;
|
|
607
708
|
const internalData = $xeTable;
|
|
608
709
|
const {
|
|
609
710
|
treeConfig
|
|
610
711
|
} = props;
|
|
712
|
+
const {
|
|
713
|
+
isRowGroupStatus
|
|
714
|
+
} = reactData;
|
|
611
715
|
const {
|
|
612
716
|
fullAllDataRowIdData,
|
|
613
|
-
treeExpandedMaps
|
|
717
|
+
treeExpandedMaps,
|
|
718
|
+
rowGroupExpandedMaps
|
|
614
719
|
} = internalData;
|
|
720
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
615
721
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
616
|
-
const
|
|
722
|
+
const {
|
|
723
|
+
handleGetRowId
|
|
724
|
+
} = (0, _util.createHandleGetRowId)($xeTable);
|
|
725
|
+
const fullData = [];
|
|
726
|
+
const expandMaps = {};
|
|
617
727
|
if (treeConfig && treeOpts.transform) {
|
|
618
|
-
const
|
|
619
|
-
handleGetRowId
|
|
620
|
-
} = (0, _util.createHandleGetRowId)($xeTable);
|
|
621
|
-
const fullData = [];
|
|
622
|
-
const expandMaps = {};
|
|
728
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
623
729
|
_xeUtils.default.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
|
|
624
730
|
const rowid = handleGetRowId(row);
|
|
625
731
|
const parentRowid = handleGetRowId(parentRow);
|
|
@@ -637,9 +743,336 @@ function handleVirtualTreeToList($xeTable) {
|
|
|
637
743
|
internalData.afterFullData = fullData;
|
|
638
744
|
updateScrollYStatus($xeTable, fullData);
|
|
639
745
|
return fullData;
|
|
746
|
+
} else if (isRowGroupStatus) {
|
|
747
|
+
const {
|
|
748
|
+
childrenField
|
|
749
|
+
} = rowGroupOpts;
|
|
750
|
+
_xeUtils.default.eachTree(internalData.afterGroupFullData, (row, index, items, path, parentRow) => {
|
|
751
|
+
const rowid = handleGetRowId(row);
|
|
752
|
+
const parentRowid = handleGetRowId(parentRow);
|
|
753
|
+
if (!parentRow || expandMaps[parentRowid] && rowGroupExpandedMaps[parentRowid]) {
|
|
754
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
755
|
+
if (rowRest) {
|
|
756
|
+
rowRest._index = fullData.length;
|
|
757
|
+
}
|
|
758
|
+
expandMaps[rowid] = 1;
|
|
759
|
+
fullData.push(row);
|
|
760
|
+
}
|
|
761
|
+
}, {
|
|
762
|
+
children: childrenField
|
|
763
|
+
});
|
|
764
|
+
internalData.afterFullData = fullData;
|
|
765
|
+
updateScrollYStatus($xeTable, fullData);
|
|
766
|
+
return fullData;
|
|
640
767
|
}
|
|
641
768
|
return internalData.afterFullData;
|
|
642
769
|
}
|
|
770
|
+
/**
|
|
771
|
+
* 编译处理后全量的表格数据
|
|
772
|
+
* 如果存在筛选条件,继续处理
|
|
773
|
+
*/
|
|
774
|
+
function updateAfterFullData($xeTable) {
|
|
775
|
+
const props = $xeTable;
|
|
776
|
+
const reactData = $xeTable;
|
|
777
|
+
const internalData = $xeTable;
|
|
778
|
+
const {
|
|
779
|
+
treeConfig
|
|
780
|
+
} = props;
|
|
781
|
+
const {
|
|
782
|
+
isRowGroupStatus
|
|
783
|
+
} = reactData;
|
|
784
|
+
const {
|
|
785
|
+
tableFullColumn,
|
|
786
|
+
tableFullData,
|
|
787
|
+
tableFullTreeData,
|
|
788
|
+
tableFullGroupData
|
|
789
|
+
} = internalData;
|
|
790
|
+
const filterOpts = $xeTable.computeFilterOpts;
|
|
791
|
+
const sortOpts = $xeTable.computeSortOpts;
|
|
792
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
793
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
794
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
795
|
+
const {
|
|
796
|
+
transform,
|
|
797
|
+
rowField,
|
|
798
|
+
parentField,
|
|
799
|
+
mapChildrenField
|
|
800
|
+
} = treeOpts;
|
|
801
|
+
const {
|
|
802
|
+
isEvery,
|
|
803
|
+
remote: allRemoteFilter,
|
|
804
|
+
filterMethod: allFilterMethod
|
|
805
|
+
} = filterOpts;
|
|
806
|
+
const {
|
|
807
|
+
remote: allRemoteSort,
|
|
808
|
+
sortMethod: allSortMethod,
|
|
809
|
+
multiple: sortMultiple,
|
|
810
|
+
chronological
|
|
811
|
+
} = sortOpts;
|
|
812
|
+
let tableData = [];
|
|
813
|
+
let tableTree = [];
|
|
814
|
+
// 处理数据
|
|
815
|
+
if (!allRemoteFilter || !allRemoteSort) {
|
|
816
|
+
const filterColumns = [];
|
|
817
|
+
let orderColumns = [];
|
|
818
|
+
tableFullColumn.forEach(column => {
|
|
819
|
+
const {
|
|
820
|
+
field,
|
|
821
|
+
sortable,
|
|
822
|
+
order,
|
|
823
|
+
filters
|
|
824
|
+
} = column;
|
|
825
|
+
if (!allRemoteFilter && filters && filters.length) {
|
|
826
|
+
const valueList = [];
|
|
827
|
+
const itemList = [];
|
|
828
|
+
filters.forEach(item => {
|
|
829
|
+
if (item.checked) {
|
|
830
|
+
itemList.push(item);
|
|
831
|
+
valueList.push(item.value);
|
|
832
|
+
}
|
|
833
|
+
});
|
|
834
|
+
if (itemList.length) {
|
|
835
|
+
filterColumns.push({
|
|
836
|
+
column,
|
|
837
|
+
valueList,
|
|
838
|
+
itemList
|
|
839
|
+
});
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
if (!allRemoteSort && sortable && order) {
|
|
843
|
+
orderColumns.push({
|
|
844
|
+
column,
|
|
845
|
+
field,
|
|
846
|
+
property: field,
|
|
847
|
+
order: order,
|
|
848
|
+
sortTime: column.sortTime
|
|
849
|
+
});
|
|
850
|
+
}
|
|
851
|
+
});
|
|
852
|
+
if (sortMultiple && chronological && orderColumns.length > 1) {
|
|
853
|
+
orderColumns = _xeUtils.default.orderBy(orderColumns, 'sortTime');
|
|
854
|
+
}
|
|
855
|
+
// 处理筛选
|
|
856
|
+
// 支持单列、多列、组合筛选
|
|
857
|
+
if (!allRemoteFilter && filterColumns.length) {
|
|
858
|
+
const handleFilter = row => {
|
|
859
|
+
return filterColumns.every(({
|
|
860
|
+
column,
|
|
861
|
+
valueList,
|
|
862
|
+
itemList
|
|
863
|
+
}) => {
|
|
864
|
+
const {
|
|
865
|
+
filterMethod,
|
|
866
|
+
filterRender
|
|
867
|
+
} = column;
|
|
868
|
+
const compConf = (0, _utils.isEnableConf)(filterRender) ? renderer.get(filterRender.name) : null;
|
|
869
|
+
const compFilterMethod = compConf ? compConf.tableFilterMethod || compConf.filterMethod : null;
|
|
870
|
+
const tdFilterMethod = compConf ? compConf.tableFilterDefaultMethod || compConf.defaultTableFilterMethod || compConf.defaultFilterMethod : null;
|
|
871
|
+
const cellValue = (0, _util.getCellValue)(row, column);
|
|
872
|
+
if (filterMethod) {
|
|
873
|
+
return itemList.some(item => filterMethod({
|
|
874
|
+
value: item.value,
|
|
875
|
+
option: item,
|
|
876
|
+
cellValue,
|
|
877
|
+
row,
|
|
878
|
+
column,
|
|
879
|
+
$table: $xeTable
|
|
880
|
+
}));
|
|
881
|
+
} else if (compFilterMethod) {
|
|
882
|
+
return itemList.some(item => compFilterMethod({
|
|
883
|
+
value: item.value,
|
|
884
|
+
option: item,
|
|
885
|
+
cellValue,
|
|
886
|
+
row,
|
|
887
|
+
column,
|
|
888
|
+
$table: $xeTable
|
|
889
|
+
}));
|
|
890
|
+
} else if (allFilterMethod) {
|
|
891
|
+
return allFilterMethod({
|
|
892
|
+
$table: $xeTable,
|
|
893
|
+
options: itemList,
|
|
894
|
+
values: valueList,
|
|
895
|
+
cellValue,
|
|
896
|
+
row,
|
|
897
|
+
column
|
|
898
|
+
});
|
|
899
|
+
} else if (tdFilterMethod) {
|
|
900
|
+
return itemList.some(item => tdFilterMethod({
|
|
901
|
+
value: item.value,
|
|
902
|
+
option: item,
|
|
903
|
+
cellValue,
|
|
904
|
+
row,
|
|
905
|
+
column,
|
|
906
|
+
$table: $xeTable
|
|
907
|
+
}));
|
|
908
|
+
}
|
|
909
|
+
return valueList.indexOf(_xeUtils.default.get(row, column.field)) > -1;
|
|
910
|
+
});
|
|
911
|
+
};
|
|
912
|
+
if (isRowGroupStatus) {
|
|
913
|
+
// 行分组
|
|
914
|
+
tableTree = _xeUtils.default.searchTree(tableFullGroupData, handleFilter, {
|
|
915
|
+
original: true,
|
|
916
|
+
isEvery: true,
|
|
917
|
+
children: rowGroupOpts.mapChildrenField,
|
|
918
|
+
mapChildren: rowGroupOpts.childrenField
|
|
919
|
+
});
|
|
920
|
+
tableData = tableTree;
|
|
921
|
+
} else if (treeConfig && transform) {
|
|
922
|
+
// 筛选虚拟树
|
|
923
|
+
tableTree = _xeUtils.default.searchTree(tableFullTreeData, handleFilter, {
|
|
924
|
+
original: true,
|
|
925
|
+
isEvery,
|
|
926
|
+
children: mapChildrenField,
|
|
927
|
+
mapChildren: childrenField
|
|
928
|
+
});
|
|
929
|
+
tableData = tableTree;
|
|
930
|
+
} else {
|
|
931
|
+
tableData = treeConfig ? tableFullTreeData.filter(handleFilter) : tableFullData.filter(handleFilter);
|
|
932
|
+
tableTree = tableData;
|
|
933
|
+
}
|
|
934
|
+
} else {
|
|
935
|
+
if (isRowGroupStatus) {
|
|
936
|
+
// 还原行分组
|
|
937
|
+
tableTree = _xeUtils.default.searchTree(tableFullGroupData, () => true, {
|
|
938
|
+
original: true,
|
|
939
|
+
isEvery: true,
|
|
940
|
+
children: rowGroupOpts.mapChildrenField,
|
|
941
|
+
mapChildren: rowGroupOpts.childrenField
|
|
942
|
+
});
|
|
943
|
+
tableData = tableTree;
|
|
944
|
+
} else if (treeConfig && transform) {
|
|
945
|
+
// 还原虚拟树
|
|
946
|
+
tableTree = _xeUtils.default.searchTree(tableFullTreeData, () => true, {
|
|
947
|
+
original: true,
|
|
948
|
+
isEvery,
|
|
949
|
+
children: mapChildrenField,
|
|
950
|
+
mapChildren: childrenField
|
|
951
|
+
});
|
|
952
|
+
tableData = tableTree;
|
|
953
|
+
} else {
|
|
954
|
+
tableData = treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0);
|
|
955
|
+
tableTree = tableData;
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
// 处理排序
|
|
959
|
+
// 支持单列、多列、组合排序
|
|
960
|
+
if (!allRemoteSort && orderColumns.length) {
|
|
961
|
+
if (isRowGroupStatus) {
|
|
962
|
+
// 行分组的排序
|
|
963
|
+
if (allSortMethod) {
|
|
964
|
+
const sortRests = allSortMethod({
|
|
965
|
+
data: tableTree,
|
|
966
|
+
sortList: orderColumns,
|
|
967
|
+
$table: $xeTable
|
|
968
|
+
});
|
|
969
|
+
tableTree = _xeUtils.default.isArray(sortRests) ? sortRests : tableTree;
|
|
970
|
+
} else {
|
|
971
|
+
const treeList = _xeUtils.default.toTreeArray(tableTree, {
|
|
972
|
+
key: rowGroupOpts.rowField,
|
|
973
|
+
parentKey: rowGroupOpts.parentField,
|
|
974
|
+
children: rowGroupOpts.mapChildrenField
|
|
975
|
+
});
|
|
976
|
+
tableTree = _xeUtils.default.toArrayTree(_xeUtils.default.orderBy(treeList, orderColumns.map(({
|
|
977
|
+
column,
|
|
978
|
+
order
|
|
979
|
+
}) => [getOrderField($xeTable, column), order])), {
|
|
980
|
+
key: rowGroupOpts.rowField,
|
|
981
|
+
parentKey: rowGroupOpts.parentField,
|
|
982
|
+
children: rowGroupOpts.childrenField,
|
|
983
|
+
mapChildren: rowGroupOpts.mapChildrenField
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
tableData = tableTree;
|
|
987
|
+
} else if (treeConfig && transform) {
|
|
988
|
+
// 虚拟树的排序
|
|
989
|
+
if (allSortMethod) {
|
|
990
|
+
const sortRests = allSortMethod({
|
|
991
|
+
data: tableTree,
|
|
992
|
+
sortList: orderColumns,
|
|
993
|
+
$table: $xeTable
|
|
994
|
+
});
|
|
995
|
+
tableTree = _xeUtils.default.isArray(sortRests) ? sortRests : tableTree;
|
|
996
|
+
} else {
|
|
997
|
+
const treeList = _xeUtils.default.toTreeArray(tableTree, {
|
|
998
|
+
children: mapChildrenField
|
|
999
|
+
});
|
|
1000
|
+
tableTree = _xeUtils.default.toArrayTree(_xeUtils.default.orderBy(treeList, orderColumns.map(({
|
|
1001
|
+
column,
|
|
1002
|
+
order
|
|
1003
|
+
}) => [getOrderField($xeTable, column), order])), {
|
|
1004
|
+
key: rowField,
|
|
1005
|
+
parentKey: parentField,
|
|
1006
|
+
children: childrenField,
|
|
1007
|
+
mapChildren: mapChildrenField
|
|
1008
|
+
});
|
|
1009
|
+
}
|
|
1010
|
+
tableData = tableTree;
|
|
1011
|
+
} else {
|
|
1012
|
+
if (allSortMethod) {
|
|
1013
|
+
const sortRests = allSortMethod({
|
|
1014
|
+
data: tableData,
|
|
1015
|
+
sortList: orderColumns,
|
|
1016
|
+
$table: $xeTable
|
|
1017
|
+
});
|
|
1018
|
+
tableData = _xeUtils.default.isArray(sortRests) ? sortRests : tableData;
|
|
1019
|
+
} else {
|
|
1020
|
+
// 兼容 v4
|
|
1021
|
+
if (sortMultiple) {
|
|
1022
|
+
tableData = _xeUtils.default.orderBy(tableData, orderColumns.map(({
|
|
1023
|
+
column,
|
|
1024
|
+
order
|
|
1025
|
+
}) => [getOrderField($xeTable, column), order]));
|
|
1026
|
+
} else {
|
|
1027
|
+
const firstOrderColumn = orderColumns[0];
|
|
1028
|
+
let sortByConfs;
|
|
1029
|
+
// 已废弃,兼容 v2,在 v4 中废弃, sortBy 不能为数组
|
|
1030
|
+
if (_xeUtils.default.isArray(firstOrderColumn.sortBy)) {
|
|
1031
|
+
sortByConfs = firstOrderColumn.sortBy.map(item => [item, firstOrderColumn.order]);
|
|
1032
|
+
}
|
|
1033
|
+
tableData = _xeUtils.default.orderBy(tableData, sortByConfs || [firstOrderColumn].map(({
|
|
1034
|
+
column,
|
|
1035
|
+
order
|
|
1036
|
+
}) => [getOrderField($xeTable, column), order]));
|
|
1037
|
+
}
|
|
1038
|
+
tableData = _xeUtils.default.orderBy(tableData, orderColumns.map(({
|
|
1039
|
+
column,
|
|
1040
|
+
order
|
|
1041
|
+
}) => [getOrderField($xeTable, column), order]));
|
|
1042
|
+
}
|
|
1043
|
+
tableTree = tableData;
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
} else {
|
|
1047
|
+
if (isRowGroupStatus) {
|
|
1048
|
+
// 还原行分组
|
|
1049
|
+
// 还原虚拟树
|
|
1050
|
+
tableTree = _xeUtils.default.searchTree(tableFullGroupData, () => true, {
|
|
1051
|
+
original: true,
|
|
1052
|
+
isEvery: true,
|
|
1053
|
+
children: rowGroupOpts.mapChildrenField,
|
|
1054
|
+
mapChildren: rowGroupOpts.childrenField
|
|
1055
|
+
});
|
|
1056
|
+
tableData = tableTree;
|
|
1057
|
+
} else if (treeConfig && transform) {
|
|
1058
|
+
// 还原虚拟树
|
|
1059
|
+
tableTree = _xeUtils.default.searchTree(tableFullTreeData, () => true, {
|
|
1060
|
+
original: true,
|
|
1061
|
+
isEvery,
|
|
1062
|
+
children: mapChildrenField,
|
|
1063
|
+
mapChildren: childrenField
|
|
1064
|
+
});
|
|
1065
|
+
tableData = tableTree;
|
|
1066
|
+
} else {
|
|
1067
|
+
tableData = treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0);
|
|
1068
|
+
tableTree = tableData;
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
internalData.afterFullData = tableData;
|
|
1072
|
+
internalData.afterTreeFullData = tableTree;
|
|
1073
|
+
internalData.afterGroupFullData = tableTree;
|
|
1074
|
+
updateAfterDataIndex($xeTable);
|
|
1075
|
+
}
|
|
643
1076
|
function updateStyle($xeTable) {
|
|
644
1077
|
const props = $xeTable;
|
|
645
1078
|
const reactData = $xeTable;
|
|
@@ -1098,6 +1531,7 @@ function handleCheckedRadioRow($xeTable, row, isForce) {
|
|
|
1098
1531
|
checkMethod
|
|
1099
1532
|
} = radioOpts;
|
|
1100
1533
|
if (row && (isForce || !checkMethod || checkMethod({
|
|
1534
|
+
$table: $xeTable,
|
|
1101
1535
|
row
|
|
1102
1536
|
}))) {
|
|
1103
1537
|
reactData.selectRadioRow = row;
|
|
@@ -1120,12 +1554,18 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
1120
1554
|
const {
|
|
1121
1555
|
treeConfig
|
|
1122
1556
|
} = props;
|
|
1557
|
+
const {
|
|
1558
|
+
isRowGroupStatus
|
|
1559
|
+
} = reactData;
|
|
1123
1560
|
const {
|
|
1124
1561
|
afterFullData,
|
|
1562
|
+
afterTreeFullData,
|
|
1563
|
+
afterGroupFullData,
|
|
1125
1564
|
checkboxReserveRowMap,
|
|
1126
1565
|
selectCheckboxMaps
|
|
1127
1566
|
} = internalData;
|
|
1128
1567
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
1568
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
1129
1569
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
1130
1570
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
1131
1571
|
const {
|
|
@@ -1140,12 +1580,13 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
1140
1580
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
1141
1581
|
const selectRowMaps = {};
|
|
1142
1582
|
/**
|
|
1143
|
-
*
|
|
1583
|
+
* 绑定属性方式(有污染)
|
|
1144
1584
|
* 必须在行数据存在对应的属性,否则将不响应
|
|
1145
1585
|
*/
|
|
1146
1586
|
if (checkField) {
|
|
1147
1587
|
const checkValFn = row => {
|
|
1148
1588
|
if (isForce || !checkMethod || checkMethod({
|
|
1589
|
+
$table: $xeTable,
|
|
1149
1590
|
row
|
|
1150
1591
|
})) {
|
|
1151
1592
|
if (checked) {
|
|
@@ -1153,13 +1594,13 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
1153
1594
|
}
|
|
1154
1595
|
_xeUtils.default.set(row, checkField, checked);
|
|
1155
1596
|
}
|
|
1156
|
-
if (treeConfig && indeterminateField) {
|
|
1597
|
+
if ((treeConfig || isRowGroupStatus) && indeterminateField) {
|
|
1157
1598
|
_xeUtils.default.set(row, indeterminateField, false);
|
|
1158
1599
|
}
|
|
1159
1600
|
};
|
|
1160
1601
|
// 如果存在选中方法
|
|
1161
1602
|
// 如果方法成立,则更新值,否则忽略该数据
|
|
1162
|
-
if (treeConfig) {
|
|
1603
|
+
if (treeConfig || isRowGroupStatus) {
|
|
1163
1604
|
_xeUtils.default.eachTree(afterFullData, checkValFn, {
|
|
1164
1605
|
children: childrenField
|
|
1165
1606
|
});
|
|
@@ -1168,17 +1609,54 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
1168
1609
|
}
|
|
1169
1610
|
} else {
|
|
1170
1611
|
/**
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
if (
|
|
1612
|
+
* 默认方式(无污染)
|
|
1613
|
+
* 无需任何属性,直接绑定
|
|
1614
|
+
*/
|
|
1615
|
+
if (isRowGroupStatus) {
|
|
1175
1616
|
if (checked) {
|
|
1176
1617
|
/**
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
_xeUtils.default.eachTree(
|
|
1618
|
+
* 如果是行分组勾选
|
|
1619
|
+
* 如果方法成立,则添加到临时集合中
|
|
1620
|
+
*/
|
|
1621
|
+
_xeUtils.default.eachTree(afterGroupFullData, row => {
|
|
1181
1622
|
if (isForce || !checkMethod || checkMethod({
|
|
1623
|
+
$table: $xeTable,
|
|
1624
|
+
row
|
|
1625
|
+
})) {
|
|
1626
|
+
const rowid = handleGetRowId(row);
|
|
1627
|
+
selectRowMaps[rowid] = row;
|
|
1628
|
+
}
|
|
1629
|
+
}, {
|
|
1630
|
+
children: rowGroupOpts.mapChildrenField
|
|
1631
|
+
});
|
|
1632
|
+
} else {
|
|
1633
|
+
/**
|
|
1634
|
+
* 如果是树取消
|
|
1635
|
+
* 如果方法成立,则不添加到临时集合中
|
|
1636
|
+
*/
|
|
1637
|
+
if (!isForce && checkMethod) {
|
|
1638
|
+
_xeUtils.default.eachTree(afterGroupFullData, row => {
|
|
1639
|
+
const rowid = handleGetRowId(row);
|
|
1640
|
+
if (checkMethod({
|
|
1641
|
+
$table: $xeTable,
|
|
1642
|
+
row
|
|
1643
|
+
}) ? false : selectCheckboxMaps[rowid]) {
|
|
1644
|
+
selectRowMaps[rowid] = row;
|
|
1645
|
+
}
|
|
1646
|
+
}, {
|
|
1647
|
+
children: rowGroupOpts.mapChildrenField
|
|
1648
|
+
});
|
|
1649
|
+
}
|
|
1650
|
+
}
|
|
1651
|
+
} else if (treeConfig) {
|
|
1652
|
+
if (checked) {
|
|
1653
|
+
/**
|
|
1654
|
+
* 如果是树勾选
|
|
1655
|
+
* 如果方法成立,则添加到临时集合中
|
|
1656
|
+
*/
|
|
1657
|
+
_xeUtils.default.eachTree(afterTreeFullData, row => {
|
|
1658
|
+
if (isForce || !checkMethod || checkMethod({
|
|
1659
|
+
$table: $xeTable,
|
|
1182
1660
|
row
|
|
1183
1661
|
})) {
|
|
1184
1662
|
const rowid = handleGetRowId(row);
|
|
@@ -1189,15 +1667,16 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
1189
1667
|
});
|
|
1190
1668
|
} else {
|
|
1191
1669
|
/**
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1670
|
+
* 如果是树取消
|
|
1671
|
+
* 如果方法成立,则不添加到临时集合中
|
|
1672
|
+
*/
|
|
1195
1673
|
if (!isForce && checkMethod) {
|
|
1196
|
-
_xeUtils.default.eachTree(
|
|
1674
|
+
_xeUtils.default.eachTree(afterTreeFullData, row => {
|
|
1197
1675
|
const rowid = handleGetRowId(row);
|
|
1198
1676
|
if (checkMethod({
|
|
1677
|
+
$table: $xeTable,
|
|
1199
1678
|
row
|
|
1200
|
-
}) ?
|
|
1679
|
+
}) ? false : selectCheckboxMaps[rowid]) {
|
|
1201
1680
|
selectRowMaps[rowid] = row;
|
|
1202
1681
|
}
|
|
1203
1682
|
}, {
|
|
@@ -1208,14 +1687,15 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
1208
1687
|
} else {
|
|
1209
1688
|
if (checked) {
|
|
1210
1689
|
/**
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1690
|
+
* 如果是行勾选
|
|
1691
|
+
* 如果存在选中方法且成立或者本身已勾选,则添加到临时集合中
|
|
1692
|
+
* 如果不存在选中方法,则添加所有数据到临时集合中
|
|
1693
|
+
*/
|
|
1215
1694
|
if (!isForce && checkMethod) {
|
|
1216
1695
|
afterFullData.forEach(row => {
|
|
1217
1696
|
const rowid = handleGetRowId(row);
|
|
1218
1697
|
if (selectCheckboxMaps[rowid] || checkMethod({
|
|
1698
|
+
$table: $xeTable,
|
|
1219
1699
|
row
|
|
1220
1700
|
})) {
|
|
1221
1701
|
selectRowMaps[rowid] = row;
|
|
@@ -1229,16 +1709,17 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
1229
1709
|
}
|
|
1230
1710
|
} else {
|
|
1231
1711
|
/**
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1712
|
+
* 如果是行取消
|
|
1713
|
+
* 如果方法成立,则不添加到临时集合中;如果方法不成立则判断当前是否已勾选,如果已被勾选则添加到新集合中
|
|
1714
|
+
* 如果不存在选中方法,无需处理,临时集合默认为空
|
|
1715
|
+
*/
|
|
1236
1716
|
if (!isForce && checkMethod) {
|
|
1237
1717
|
afterFullData.forEach(row => {
|
|
1238
1718
|
const rowid = handleGetRowId(row);
|
|
1239
1719
|
if (checkMethod({
|
|
1720
|
+
$table: $xeTable,
|
|
1240
1721
|
row
|
|
1241
|
-
}) ?
|
|
1722
|
+
}) ? false : selectCheckboxMaps[rowid]) {
|
|
1242
1723
|
selectRowMaps[rowid] = row;
|
|
1243
1724
|
}
|
|
1244
1725
|
});
|
|
@@ -2113,9 +2594,11 @@ function updateRowDropTipContent($xeTable, tdEl) {
|
|
|
2113
2594
|
const rTooltipMethod = tooltipMethod || (dragConfig ? dragConfig.rowTooltipMethod : null);
|
|
2114
2595
|
let tipContent = '';
|
|
2115
2596
|
if (rTooltipMethod) {
|
|
2116
|
-
|
|
2597
|
+
const rtParams = {
|
|
2598
|
+
$table: $xeTable,
|
|
2117
2599
|
row: dragRow
|
|
2118
|
-
}
|
|
2600
|
+
};
|
|
2601
|
+
tipContent = `${rTooltipMethod(rtParams) || ''}`;
|
|
2119
2602
|
} else {
|
|
2120
2603
|
tipContent = getI18n('vxe.table.dragTip', [tdEl.textContent || '']);
|
|
2121
2604
|
}
|
|
@@ -2155,9 +2638,11 @@ function updateColDropTipContent($xeTable, tdEl) {
|
|
|
2155
2638
|
} = columnDragOpts;
|
|
2156
2639
|
let tipContent = '';
|
|
2157
2640
|
if (tooltipMethod) {
|
|
2158
|
-
|
|
2641
|
+
const dtParams = {
|
|
2642
|
+
$table: $xeTable,
|
|
2159
2643
|
column: dragCol
|
|
2160
|
-
}
|
|
2644
|
+
};
|
|
2645
|
+
tipContent = `${tooltipMethod(dtParams) || ''}`;
|
|
2161
2646
|
} else {
|
|
2162
2647
|
tipContent = getI18n('vxe.table.dragTip', [tdEl.textContent || '']);
|
|
2163
2648
|
}
|
|
@@ -2489,8 +2974,281 @@ function handleRecalculateLayout($xeTable, reFull) {
|
|
|
2489
2974
|
}
|
|
2490
2975
|
});
|
|
2491
2976
|
}
|
|
2492
|
-
|
|
2493
|
-
|
|
2977
|
+
const handleUpdateRowGroup = ($xeTable, groupFields) => {
|
|
2978
|
+
const reactData = $xeTable;
|
|
2979
|
+
reactData.rowGroupList = groupFields ? (_xeUtils.default.isArray(groupFields) ? groupFields : [groupFields]).map(field => {
|
|
2980
|
+
return {
|
|
2981
|
+
field
|
|
2982
|
+
};
|
|
2983
|
+
}) : [];
|
|
2984
|
+
};
|
|
2985
|
+
function handleGroupData($xeTable, list, rowGroups) {
|
|
2986
|
+
let fullData = list;
|
|
2987
|
+
let treeData = list;
|
|
2988
|
+
if (rowGroups) {
|
|
2989
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
2990
|
+
const {
|
|
2991
|
+
rowField,
|
|
2992
|
+
parentField,
|
|
2993
|
+
childrenField,
|
|
2994
|
+
mapChildrenField
|
|
2995
|
+
} = rowGroupOpts;
|
|
2996
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
2997
|
+
const {
|
|
2998
|
+
checkField
|
|
2999
|
+
} = checkboxOpts;
|
|
3000
|
+
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
3001
|
+
const rgItem = rowGroups[0];
|
|
3002
|
+
if (rgItem && rowField && parentField && childrenField && mapChildrenField) {
|
|
3003
|
+
fullData = [];
|
|
3004
|
+
treeData = [];
|
|
3005
|
+
const groupField = rgItem.field;
|
|
3006
|
+
const groupColumn = $xeTable.getColumnByField(groupField);
|
|
3007
|
+
const groupMaps = {};
|
|
3008
|
+
const rowkey = (0, _util.getRowkey)($xeTable);
|
|
3009
|
+
list.forEach(row => {
|
|
3010
|
+
const cellValue = groupColumn ? $xeTable.getCellLabel(row, groupColumn) : _xeUtils.default.get(row, groupField);
|
|
3011
|
+
const groupValue = _xeUtils.default.eqNull(cellValue) ? '' : cellValue;
|
|
3012
|
+
let childList = groupMaps[groupValue];
|
|
3013
|
+
if (!childList) {
|
|
3014
|
+
childList = [];
|
|
3015
|
+
groupMaps[groupValue] = childList;
|
|
3016
|
+
}
|
|
3017
|
+
if (row.isAggregate) {
|
|
3018
|
+
row.isAggregate = undefined;
|
|
3019
|
+
}
|
|
3020
|
+
childList.push(row);
|
|
3021
|
+
});
|
|
3022
|
+
_xeUtils.default.objectEach(groupMaps, (childList, groupValue) => {
|
|
3023
|
+
const {
|
|
3024
|
+
fullData: childFullData,
|
|
3025
|
+
treeData: childTreeData
|
|
3026
|
+
} = handleGroupData($xeTable, childList, rowGroups.slice(1));
|
|
3027
|
+
const groupRow = {
|
|
3028
|
+
isAggregate: true,
|
|
3029
|
+
groupContent: groupValue,
|
|
3030
|
+
groupField,
|
|
3031
|
+
[rowField]: (0, _util.getRowUniqueId)(),
|
|
3032
|
+
[parentField]: null,
|
|
3033
|
+
[rowkey]: (0, _util.getRowUniqueId)(),
|
|
3034
|
+
[childrenField]: childTreeData,
|
|
3035
|
+
[mapChildrenField]: childTreeData
|
|
3036
|
+
};
|
|
3037
|
+
if (checkField) {
|
|
3038
|
+
groupRow[checkField] = false;
|
|
3039
|
+
}
|
|
3040
|
+
if (indeterminateField) {
|
|
3041
|
+
groupRow[indeterminateField] = false;
|
|
3042
|
+
}
|
|
3043
|
+
treeData.push(groupRow);
|
|
3044
|
+
fullData.push(groupRow);
|
|
3045
|
+
if (childFullData.length) {
|
|
3046
|
+
fullData.push(...childFullData);
|
|
3047
|
+
}
|
|
3048
|
+
});
|
|
3049
|
+
}
|
|
3050
|
+
}
|
|
3051
|
+
return {
|
|
3052
|
+
treeData,
|
|
3053
|
+
fullData
|
|
3054
|
+
};
|
|
3055
|
+
}
|
|
3056
|
+
/**
|
|
3057
|
+
* 加载表格数据
|
|
3058
|
+
* @param {Array} datas 数据
|
|
3059
|
+
*/
|
|
3060
|
+
function loadTableData($xeTable, datas, isReset) {
|
|
3061
|
+
const props = $xeTable;
|
|
3062
|
+
const reactData = $xeTable;
|
|
3063
|
+
const internalData = $xeTable;
|
|
3064
|
+
const {
|
|
3065
|
+
keepSource,
|
|
3066
|
+
treeConfig,
|
|
3067
|
+
rowGroupConfig
|
|
3068
|
+
} = props;
|
|
3069
|
+
const {
|
|
3070
|
+
rowGroupList,
|
|
3071
|
+
scrollYLoad: oldScrollYLoad
|
|
3072
|
+
} = reactData;
|
|
3073
|
+
const {
|
|
3074
|
+
scrollYStore,
|
|
3075
|
+
scrollXStore,
|
|
3076
|
+
lastScrollLeft,
|
|
3077
|
+
lastScrollTop
|
|
3078
|
+
} = internalData;
|
|
3079
|
+
const rowOpts = $xeTable.computeRowOpts;
|
|
3080
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
3081
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
3082
|
+
const {
|
|
3083
|
+
transform
|
|
3084
|
+
} = treeOpts;
|
|
3085
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
3086
|
+
let treeData = [];
|
|
3087
|
+
let fullData = datas ? datas.slice(0) : []; // 转为响应式数据
|
|
3088
|
+
if (fullData.length > supportMaxRow) {
|
|
3089
|
+
(0, _log.errLog)('vxe.error.errMaxRow', [supportMaxRow]);
|
|
3090
|
+
}
|
|
3091
|
+
if (treeConfig && rowGroupList.length) {
|
|
3092
|
+
(0, _log.errLog)('vxe.error.noTree', ['row-group-config']);
|
|
3093
|
+
return $xeTable.$nextTick();
|
|
3094
|
+
}
|
|
3095
|
+
if (rowOpts.drag && rowGroupList.length) {
|
|
3096
|
+
(0, _log.errLog)('vxe.error.errConflicts', ['row-config.drag', 'row-group-config']);
|
|
3097
|
+
return $xeTable.$nextTick();
|
|
3098
|
+
}
|
|
3099
|
+
let isRGroup = false;
|
|
3100
|
+
if (treeConfig) {
|
|
3101
|
+
if (transform) {
|
|
3102
|
+
// 树结构自动转换
|
|
3103
|
+
if (!treeOpts.rowField) {
|
|
3104
|
+
(0, _log.errLog)('vxe.error.reqProp', ['tree-config.rowField']);
|
|
3105
|
+
}
|
|
3106
|
+
if (!treeOpts.parentField) {
|
|
3107
|
+
(0, _log.errLog)('vxe.error.reqProp', ['tree-config.parentField']);
|
|
3108
|
+
}
|
|
3109
|
+
if (!childrenField) {
|
|
3110
|
+
(0, _log.errLog)('vxe.error.reqProp', ['tree-config.childrenField']);
|
|
3111
|
+
}
|
|
3112
|
+
if (!treeOpts.mapChildrenField) {
|
|
3113
|
+
(0, _log.errLog)('vxe.error.reqProp', ['tree-config.mapChildrenField']);
|
|
3114
|
+
}
|
|
3115
|
+
if (childrenField === treeOpts.mapChildrenField) {
|
|
3116
|
+
(0, _log.errLog)('vxe.error.errConflicts', ['tree-config.childrenField', 'tree-config.mapChildrenField']);
|
|
3117
|
+
}
|
|
3118
|
+
// fullData.forEach(row => {
|
|
3119
|
+
// if (row[treeOpts.children] && row[treeOpts.children].length) {
|
|
3120
|
+
// warnLog('vxe.error.errConflicts', ['tree-config.transform', `row.${treeOpts.children}`])
|
|
3121
|
+
// }
|
|
3122
|
+
// })
|
|
3123
|
+
treeData = _xeUtils.default.toArrayTree(fullData, {
|
|
3124
|
+
key: treeOpts.rowField,
|
|
3125
|
+
parentKey: treeOpts.parentField,
|
|
3126
|
+
children: childrenField,
|
|
3127
|
+
mapChildren: treeOpts.mapChildrenField
|
|
3128
|
+
});
|
|
3129
|
+
fullData = treeData.slice(0);
|
|
3130
|
+
} else {
|
|
3131
|
+
treeData = fullData.slice(0);
|
|
3132
|
+
}
|
|
3133
|
+
} else if (rowGroupConfig && rowGroupList.length) {
|
|
3134
|
+
const groupRest = handleGroupData($xeTable, fullData, rowGroupList);
|
|
3135
|
+
treeData = groupRest.treeData;
|
|
3136
|
+
fullData = groupRest.fullData;
|
|
3137
|
+
isRGroup = true;
|
|
3138
|
+
}
|
|
3139
|
+
reactData.isRowGroupStatus = isRGroup;
|
|
3140
|
+
scrollYStore.startIndex = 0;
|
|
3141
|
+
scrollYStore.endIndex = 1;
|
|
3142
|
+
scrollXStore.startIndex = 0;
|
|
3143
|
+
scrollXStore.endIndex = 1;
|
|
3144
|
+
reactData.isRowLoading = true;
|
|
3145
|
+
reactData.scrollVMLoading = false;
|
|
3146
|
+
internalData.treeExpandedMaps = {};
|
|
3147
|
+
reactData.treeExpandedFlag++;
|
|
3148
|
+
internalData.rowExpandedMaps = {};
|
|
3149
|
+
reactData.rowExpandedFlag++;
|
|
3150
|
+
internalData.insertRowMaps = {};
|
|
3151
|
+
reactData.insertRowFlag++;
|
|
3152
|
+
internalData.removeRowMaps = {};
|
|
3153
|
+
reactData.removeRowFlag++;
|
|
3154
|
+
const sYLoad = updateScrollYStatus($xeTable, fullData);
|
|
3155
|
+
reactData.isDragColMove = false;
|
|
3156
|
+
reactData.isDragRowMove = false;
|
|
3157
|
+
// 全量数据
|
|
3158
|
+
internalData.tableFullData = fullData;
|
|
3159
|
+
internalData.tableFullTreeData = isRGroup ? [] : treeData;
|
|
3160
|
+
internalData.tableFullGroupData = isRGroup ? treeData : [];
|
|
3161
|
+
// 缓存数据
|
|
3162
|
+
$xeTable.cacheRowMap(isReset);
|
|
3163
|
+
// 原始数据
|
|
3164
|
+
internalData.tableSynchData = datas;
|
|
3165
|
+
if (isReset) {
|
|
3166
|
+
internalData.isResizeCellHeight = false;
|
|
3167
|
+
}
|
|
3168
|
+
// 克隆原数据,用于显示编辑状态,与编辑值做对比
|
|
3169
|
+
if (keepSource) {
|
|
3170
|
+
$xeTable.cacheSourceMap(fullData);
|
|
3171
|
+
}
|
|
3172
|
+
if ($xeTable.clearCellAreas && props.mouseConfig) {
|
|
3173
|
+
$xeTable.clearCellAreas();
|
|
3174
|
+
$xeTable.clearCopyCellArea();
|
|
3175
|
+
}
|
|
3176
|
+
$xeTable.clearMergeCells();
|
|
3177
|
+
$xeTable.clearMergeFooterItems();
|
|
3178
|
+
$xeTable.handleTableData(true);
|
|
3179
|
+
$xeTable.updateFooter();
|
|
3180
|
+
$xeTable.handleUpdateBodyMerge();
|
|
3181
|
+
return $xeTable.$nextTick().then(() => {
|
|
3182
|
+
updateHeight($xeTable);
|
|
3183
|
+
updateStyle($xeTable);
|
|
3184
|
+
}).then(() => {
|
|
3185
|
+
computeScrollLoad($xeTable);
|
|
3186
|
+
}).then(() => {
|
|
3187
|
+
// 是否启用了虚拟滚动
|
|
3188
|
+
if (sYLoad) {
|
|
3189
|
+
scrollYStore.endIndex = scrollYStore.visibleSize;
|
|
3190
|
+
}
|
|
3191
|
+
if (sYLoad) {
|
|
3192
|
+
if (reactData.expandColumn && expandOpts.mode !== 'fixed') {
|
|
3193
|
+
(0, _log.errLog)('vxe.error.notConflictProp', ['column.type="expand', 'expand-config.mode="fixed"']);
|
|
3194
|
+
}
|
|
3195
|
+
// if (showOverflow) {
|
|
3196
|
+
// if (!rowOpts.height) {
|
|
3197
|
+
// const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false)
|
|
3198
|
+
// if (errColumn) {
|
|
3199
|
+
// errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
|
|
3200
|
+
// }
|
|
3201
|
+
// }
|
|
3202
|
+
// }
|
|
3203
|
+
if (!(props.height || props.maxHeight)) {
|
|
3204
|
+
(0, _log.errLog)('vxe.error.reqProp', ['table.height | table.max-height | table.scroll-y={enabled: false}']);
|
|
3205
|
+
}
|
|
3206
|
+
// if (!props.showOverflow) {
|
|
3207
|
+
// warnLog('vxe.error.reqProp', ['table.show-overflow'])
|
|
3208
|
+
// }
|
|
3209
|
+
if (props.spanMethod) {
|
|
3210
|
+
(0, _log.errLog)('vxe.error.scrollErrProp', ['table.span-method']);
|
|
3211
|
+
}
|
|
3212
|
+
}
|
|
3213
|
+
handleReserveStatus($xeTable);
|
|
3214
|
+
$xeTable.checkSelectionStatus();
|
|
3215
|
+
return new Promise(resolve => {
|
|
3216
|
+
$xeTable.$nextTick().then(() => handleRecalculateLayout($xeTable, false)).then(() => {
|
|
3217
|
+
calcCellHeight($xeTable);
|
|
3218
|
+
updateRowOffsetTop($xeTable);
|
|
3219
|
+
return handleRecalculateLayout($xeTable, false);
|
|
3220
|
+
}).then(() => {
|
|
3221
|
+
let targetScrollLeft = lastScrollLeft;
|
|
3222
|
+
let targetScrollTop = lastScrollTop;
|
|
3223
|
+
const virtualXOpts = $xeTable.computeVirtualXOpts;
|
|
3224
|
+
const virtualYOpts = $xeTable.computeVirtualYOpts;
|
|
3225
|
+
// 是否在更新数据之后自动滚动重置滚动条
|
|
3226
|
+
if (virtualXOpts.scrollToLeftOnChange) {
|
|
3227
|
+
targetScrollLeft = 0;
|
|
3228
|
+
}
|
|
3229
|
+
if (virtualYOpts.scrollToTopOnChange) {
|
|
3230
|
+
targetScrollTop = 0;
|
|
3231
|
+
}
|
|
3232
|
+
reactData.isRowLoading = false;
|
|
3233
|
+
handleRecalculateLayout($xeTable, false);
|
|
3234
|
+
// 是否变更虚拟滚动
|
|
3235
|
+
if (oldScrollYLoad === sYLoad) {
|
|
3236
|
+
(0, _util.restoreScrollLocation)($xeTable, targetScrollLeft, targetScrollTop).then(() => {
|
|
3237
|
+
resolve();
|
|
3238
|
+
});
|
|
3239
|
+
} else {
|
|
3240
|
+
setTimeout(() => {
|
|
3241
|
+
(0, _util.restoreScrollLocation)($xeTable, targetScrollLeft, targetScrollTop).then(() => {
|
|
3242
|
+
resolve();
|
|
3243
|
+
});
|
|
3244
|
+
});
|
|
3245
|
+
}
|
|
3246
|
+
});
|
|
3247
|
+
});
|
|
3248
|
+
});
|
|
3249
|
+
}
|
|
3250
|
+
/**
|
|
3251
|
+
* 处理数据加载默认行为
|
|
2494
3252
|
* 默认执行一次,除非被重置
|
|
2495
3253
|
*/
|
|
2496
3254
|
function handleLoadDefaults($xeTable) {
|
|
@@ -3246,16 +4004,23 @@ const Methods = {
|
|
|
3246
4004
|
clearAll() {
|
|
3247
4005
|
return (0, _util.clearTableAllStatus)(this);
|
|
3248
4006
|
},
|
|
4007
|
+
handleUpdateRowGroup(groupFields) {
|
|
4008
|
+
const $xeTable = this;
|
|
4009
|
+
handleUpdateRowGroup($xeTable, groupFields);
|
|
4010
|
+
},
|
|
3249
4011
|
/**
|
|
3250
4012
|
* 同步 data 数据(即将废弃)
|
|
3251
4013
|
* 如果用了该方法,那么组件将不再记录增删改的状态,只能自行实现对应逻辑
|
|
3252
4014
|
* 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
|
|
3253
4015
|
*/
|
|
3254
4016
|
syncData() {
|
|
4017
|
+
const $xeTable = this;
|
|
4018
|
+
const reactData = $xeTable;
|
|
4019
|
+
const internalData = $xeTable;
|
|
3255
4020
|
(0, _log.errLog)('vxe.error.delFunc', ['syncData', 'getData']);
|
|
3256
|
-
return
|
|
3257
|
-
|
|
3258
|
-
return
|
|
4021
|
+
return $xeTable.$nextTick().then(() => {
|
|
4022
|
+
reactData.tableData = [];
|
|
4023
|
+
return $xeTable.$nextTick().then(() => loadTableData($xeTable, internalData.tableFullData, true));
|
|
3259
4024
|
});
|
|
3260
4025
|
},
|
|
3261
4026
|
/**
|
|
@@ -3303,23 +4068,23 @@ const Methods = {
|
|
|
3303
4068
|
// 是否进行数据处理
|
|
3304
4069
|
if (force) {
|
|
3305
4070
|
// 更新数据,处理筛选和排序
|
|
3306
|
-
|
|
4071
|
+
updateAfterFullData($xeTable);
|
|
3307
4072
|
// 如果为虚拟树,将树结构拍平
|
|
3308
4073
|
fullList = handleVirtualTreeToList($xeTable);
|
|
3309
4074
|
}
|
|
3310
4075
|
const tableData = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
|
|
3311
4076
|
const visibleDataRowIdMaps = {};
|
|
3312
4077
|
tableData.forEach((row, $index) => {
|
|
3313
|
-
const rowid = (0, _util.getRowid)(
|
|
4078
|
+
const rowid = (0, _util.getRowid)($xeTable, row);
|
|
3314
4079
|
const rest = fullDataRowIdData[rowid];
|
|
3315
4080
|
if (rest) {
|
|
3316
4081
|
rest.$index = $index;
|
|
3317
4082
|
}
|
|
3318
4083
|
visibleDataRowIdMaps[rowid] = row;
|
|
3319
4084
|
});
|
|
3320
|
-
|
|
4085
|
+
reactData.tableData = tableData;
|
|
3321
4086
|
internalData.visibleDataRowIdData = visibleDataRowIdMaps;
|
|
3322
|
-
return
|
|
4087
|
+
return $xeTable.$nextTick();
|
|
3323
4088
|
},
|
|
3324
4089
|
/**
|
|
3325
4090
|
* 加载表格数据
|
|
@@ -3327,169 +4092,7 @@ const Methods = {
|
|
|
3327
4092
|
*/
|
|
3328
4093
|
loadTableData(datas, isReset) {
|
|
3329
4094
|
const $xeTable = this;
|
|
3330
|
-
|
|
3331
|
-
const reactData = $xeTable;
|
|
3332
|
-
const internalData = $xeTable;
|
|
3333
|
-
const {
|
|
3334
|
-
keepSource,
|
|
3335
|
-
treeConfig
|
|
3336
|
-
} = props;
|
|
3337
|
-
const {
|
|
3338
|
-
scrollYLoad: oldScrollYLoad
|
|
3339
|
-
} = reactData;
|
|
3340
|
-
const {
|
|
3341
|
-
scrollYStore,
|
|
3342
|
-
scrollXStore,
|
|
3343
|
-
lastScrollLeft,
|
|
3344
|
-
lastScrollTop
|
|
3345
|
-
} = internalData;
|
|
3346
|
-
const treeOpts = $xeTable.computeTreeOpts;
|
|
3347
|
-
const expandOpts = $xeTable.computeExpandOpts;
|
|
3348
|
-
const {
|
|
3349
|
-
transform
|
|
3350
|
-
} = treeOpts;
|
|
3351
|
-
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
3352
|
-
let treeData = [];
|
|
3353
|
-
let fullData = datas ? datas.slice(0) : [];
|
|
3354
|
-
if (fullData.length > supportMaxRow) {
|
|
3355
|
-
(0, _log.errLog)('vxe.error.errMaxRow', [supportMaxRow]);
|
|
3356
|
-
}
|
|
3357
|
-
if (treeConfig) {
|
|
3358
|
-
// 树结构自动转换
|
|
3359
|
-
if (transform) {
|
|
3360
|
-
if (!treeOpts.rowField) {
|
|
3361
|
-
(0, _log.errLog)('vxe.error.reqProp', ['table.tree-config.rowField']);
|
|
3362
|
-
}
|
|
3363
|
-
if (!treeOpts.parentField) {
|
|
3364
|
-
(0, _log.errLog)('vxe.error.reqProp', ['table.tree-config.parentField']);
|
|
3365
|
-
}
|
|
3366
|
-
if (!childrenField) {
|
|
3367
|
-
(0, _log.errLog)('vxe.error.reqProp', ['tree-config.childrenField']);
|
|
3368
|
-
}
|
|
3369
|
-
if (!treeOpts.mapChildrenField) {
|
|
3370
|
-
(0, _log.errLog)('vxe.error.reqProp', ['tree-config.mapChildrenField']);
|
|
3371
|
-
}
|
|
3372
|
-
if (childrenField === treeOpts.mapChildrenField) {
|
|
3373
|
-
(0, _log.errLog)('vxe.error.errConflicts', ['tree-config.childrenField', 'tree-config.mapChildrenField']);
|
|
3374
|
-
}
|
|
3375
|
-
// fullData.forEach(row => {
|
|
3376
|
-
// if (row[childrenField] && row[childrenField].length) {
|
|
3377
|
-
// warnLog('vxe.error.errConflicts', ['tree-config.transform', `row.${childrenField}`])
|
|
3378
|
-
// }
|
|
3379
|
-
// })
|
|
3380
|
-
treeData = _xeUtils.default.toArrayTree(fullData, {
|
|
3381
|
-
key: treeOpts.rowField,
|
|
3382
|
-
parentKey: treeOpts.parentField,
|
|
3383
|
-
children: childrenField,
|
|
3384
|
-
mapChildren: treeOpts.mapChildrenField
|
|
3385
|
-
});
|
|
3386
|
-
fullData = treeData.slice(0);
|
|
3387
|
-
} else {
|
|
3388
|
-
treeData = fullData.slice(0);
|
|
3389
|
-
}
|
|
3390
|
-
}
|
|
3391
|
-
scrollYStore.startIndex = 0;
|
|
3392
|
-
scrollYStore.endIndex = 1;
|
|
3393
|
-
scrollXStore.startIndex = 0;
|
|
3394
|
-
scrollXStore.endIndex = 1;
|
|
3395
|
-
reactData.isRowLoading = true;
|
|
3396
|
-
reactData.scrollVMLoading = false;
|
|
3397
|
-
internalData.insertRowMaps = {};
|
|
3398
|
-
internalData.removeRowMaps = {};
|
|
3399
|
-
const sYLoad = updateScrollYStatus($xeTable, fullData);
|
|
3400
|
-
reactData.isDragColMove = false;
|
|
3401
|
-
reactData.isDragRowMove = false;
|
|
3402
|
-
// 全量数据
|
|
3403
|
-
internalData.tableFullData = fullData;
|
|
3404
|
-
internalData.tableFullTreeData = treeData;
|
|
3405
|
-
// 缓存数据
|
|
3406
|
-
$xeTable.cacheRowMap(isReset);
|
|
3407
|
-
// 原始数据
|
|
3408
|
-
internalData.tableSynchData = datas;
|
|
3409
|
-
if (isReset) {
|
|
3410
|
-
internalData.isResizeCellHeight = false;
|
|
3411
|
-
}
|
|
3412
|
-
// 克隆原数据,用于显示编辑状态,与编辑值做对比
|
|
3413
|
-
if (keepSource) {
|
|
3414
|
-
$xeTable.cacheSourceMap(fullData);
|
|
3415
|
-
}
|
|
3416
|
-
if ($xeTable.clearCellAreas && props.mouseConfig) {
|
|
3417
|
-
$xeTable.clearCellAreas();
|
|
3418
|
-
$xeTable.clearCopyCellArea();
|
|
3419
|
-
}
|
|
3420
|
-
$xeTable.clearMergeCells();
|
|
3421
|
-
$xeTable.clearMergeFooterItems();
|
|
3422
|
-
$xeTable.handleTableData(true);
|
|
3423
|
-
$xeTable.updateFooter();
|
|
3424
|
-
$xeTable.handleUpdateBodyMerge();
|
|
3425
|
-
return $xeTable.$nextTick().then(() => {
|
|
3426
|
-
updateHeight($xeTable);
|
|
3427
|
-
updateStyle($xeTable);
|
|
3428
|
-
}).then(() => {
|
|
3429
|
-
computeScrollLoad($xeTable);
|
|
3430
|
-
}).then(() => {
|
|
3431
|
-
// 是否启用了虚拟滚动
|
|
3432
|
-
if (sYLoad) {
|
|
3433
|
-
scrollYStore.endIndex = scrollYStore.visibleSize;
|
|
3434
|
-
}
|
|
3435
|
-
if (sYLoad) {
|
|
3436
|
-
if (reactData.expandColumn && expandOpts.mode !== 'fixed') {
|
|
3437
|
-
(0, _log.errLog)('vxe.error.notConflictProp', ['column.type="expand', 'expand-config.mode="fixed"']);
|
|
3438
|
-
}
|
|
3439
|
-
// if (showOverflow) {
|
|
3440
|
-
// if (!rowOpts.height) {
|
|
3441
|
-
// const errColumn = internalData.tableFullColumn.find((column: any) => column.showOverflow === false)
|
|
3442
|
-
// if (errColumn) {
|
|
3443
|
-
// errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
|
|
3444
|
-
// }
|
|
3445
|
-
// }
|
|
3446
|
-
// }
|
|
3447
|
-
if (!(props.height || props.maxHeight)) {
|
|
3448
|
-
(0, _log.errLog)('vxe.error.reqProp', ['table.height | table.max-height | table.scroll-y={enabled: false}']);
|
|
3449
|
-
}
|
|
3450
|
-
// if (!props.showOverflow) {
|
|
3451
|
-
// warnLog('vxe.error.reqProp', ['table.show-overflow'])
|
|
3452
|
-
// }
|
|
3453
|
-
if (props.spanMethod) {
|
|
3454
|
-
(0, _log.errLog)('vxe.error.scrollErrProp', ['table.span-method']);
|
|
3455
|
-
}
|
|
3456
|
-
}
|
|
3457
|
-
handleReserveStatus($xeTable);
|
|
3458
|
-
$xeTable.checkSelectionStatus();
|
|
3459
|
-
return new Promise(resolve => {
|
|
3460
|
-
this.$nextTick().then(() => handleRecalculateLayout($xeTable, false)).then(() => {
|
|
3461
|
-
calcCellHeight($xeTable);
|
|
3462
|
-
updateRowOffsetTop($xeTable);
|
|
3463
|
-
return handleRecalculateLayout($xeTable, false);
|
|
3464
|
-
}).then(() => {
|
|
3465
|
-
let targetScrollLeft = lastScrollLeft;
|
|
3466
|
-
let targetScrollTop = lastScrollTop;
|
|
3467
|
-
const virtualXOpts = $xeTable.computeVirtualXOpts;
|
|
3468
|
-
const virtualYOpts = $xeTable.computeVirtualYOpts;
|
|
3469
|
-
// 是否在更新数据之后自动滚动重置滚动条
|
|
3470
|
-
if (virtualXOpts.scrollToLeftOnChange) {
|
|
3471
|
-
targetScrollLeft = 0;
|
|
3472
|
-
}
|
|
3473
|
-
if (virtualYOpts.scrollToTopOnChange) {
|
|
3474
|
-
targetScrollTop = 0;
|
|
3475
|
-
}
|
|
3476
|
-
reactData.isRowLoading = false;
|
|
3477
|
-
handleRecalculateLayout($xeTable, false);
|
|
3478
|
-
// 是否变更虚拟滚动
|
|
3479
|
-
if (oldScrollYLoad === sYLoad) {
|
|
3480
|
-
(0, _util.restoreScrollLocation)($xeTable, targetScrollLeft, targetScrollTop).then(() => {
|
|
3481
|
-
resolve();
|
|
3482
|
-
});
|
|
3483
|
-
} else {
|
|
3484
|
-
setTimeout(() => {
|
|
3485
|
-
(0, _util.restoreScrollLocation)($xeTable, targetScrollLeft, targetScrollTop).then(() => {
|
|
3486
|
-
resolve();
|
|
3487
|
-
});
|
|
3488
|
-
});
|
|
3489
|
-
}
|
|
3490
|
-
});
|
|
3491
|
-
});
|
|
3492
|
-
});
|
|
4095
|
+
return loadTableData($xeTable, datas, isReset);
|
|
3493
4096
|
},
|
|
3494
4097
|
/**
|
|
3495
4098
|
* 重新加载数据,不会清空表格状态
|
|
@@ -3500,7 +4103,7 @@ const Methods = {
|
|
|
3500
4103
|
const {
|
|
3501
4104
|
initStatus
|
|
3502
4105
|
} = this;
|
|
3503
|
-
return
|
|
4106
|
+
return loadTableData($xeTable, datas, false).then(() => {
|
|
3504
4107
|
this.inited = true;
|
|
3505
4108
|
this.initStatus = true;
|
|
3506
4109
|
if (!initStatus) {
|
|
@@ -3518,7 +4121,7 @@ const Methods = {
|
|
|
3518
4121
|
return this.clearAll().then(() => {
|
|
3519
4122
|
this.inited = true;
|
|
3520
4123
|
this.initStatus = true;
|
|
3521
|
-
return
|
|
4124
|
+
return loadTableData($xeTable, datas, true);
|
|
3522
4125
|
}).then(() => {
|
|
3523
4126
|
handleLoadDefaults($xeTable);
|
|
3524
4127
|
return this.recalculate();
|
|
@@ -3608,18 +4211,16 @@ const Methods = {
|
|
|
3608
4211
|
const {
|
|
3609
4212
|
treeConfig
|
|
3610
4213
|
} = props;
|
|
4214
|
+
const {
|
|
4215
|
+
isRowGroupStatus
|
|
4216
|
+
} = reactData;
|
|
3611
4217
|
const {
|
|
3612
4218
|
fullAllDataRowIdData,
|
|
3613
4219
|
tableFullData,
|
|
3614
4220
|
tableFullTreeData,
|
|
4221
|
+
tableFullGroupData,
|
|
3615
4222
|
treeExpandedMaps
|
|
3616
4223
|
} = internalData;
|
|
3617
|
-
const treeOpts = $xeTable.computeTreeOpts;
|
|
3618
|
-
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
3619
|
-
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
3620
|
-
const {
|
|
3621
|
-
lazy
|
|
3622
|
-
} = treeOpts;
|
|
3623
4224
|
const fullAllDataRowIdMaps = isReset ? {} : Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
|
|
3624
4225
|
const fullDataRowIdMaps = {};
|
|
3625
4226
|
const {
|
|
@@ -3657,6 +4258,12 @@ const Methods = {
|
|
|
3657
4258
|
fullAllDataRowIdMaps[rowid] = rowRest;
|
|
3658
4259
|
};
|
|
3659
4260
|
if (treeConfig) {
|
|
4261
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
4262
|
+
const {
|
|
4263
|
+
lazy
|
|
4264
|
+
} = treeOpts;
|
|
4265
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
4266
|
+
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
3660
4267
|
_xeUtils.default.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
|
|
3661
4268
|
const rowid = handleUpdateRowId(row);
|
|
3662
4269
|
if (treeConfig && lazy) {
|
|
@@ -3673,6 +4280,17 @@ const Methods = {
|
|
|
3673
4280
|
}, {
|
|
3674
4281
|
children: childrenField
|
|
3675
4282
|
});
|
|
4283
|
+
} else if (isRowGroupStatus) {
|
|
4284
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
4285
|
+
const {
|
|
4286
|
+
mapChildrenField
|
|
4287
|
+
} = rowGroupOpts;
|
|
4288
|
+
_xeUtils.default.eachTree(tableFullGroupData, (row, index, items, path, parentRow, nodes) => {
|
|
4289
|
+
const rowid = handleUpdateRowId(row);
|
|
4290
|
+
handleRowCache(row, index, items, parentRow ? -1 : index, parentRow, rowid, nodes.length - 1, (0, _util.toTreePathSeq)(path));
|
|
4291
|
+
}, {
|
|
4292
|
+
children: mapChildrenField
|
|
4293
|
+
});
|
|
3676
4294
|
} else {
|
|
3677
4295
|
tableFullData.forEach((row, index, items) => {
|
|
3678
4296
|
handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
|
|
@@ -4501,277 +5119,32 @@ const Methods = {
|
|
|
4501
5119
|
} = checkboxOpts;
|
|
4502
5120
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
4503
5121
|
let rowList = [];
|
|
4504
|
-
if (updateCheckboxFlag) {
|
|
4505
|
-
if (checkField) {
|
|
4506
|
-
if (treeConfig) {
|
|
4507
|
-
const currTableData = isFull ? transform ? tableFullTreeData : tableFullData : transform ? tableFullTreeData : afterFullData;
|
|
4508
|
-
rowList = _xeUtils.default.filterTree(currTableData, row => _xeUtils.default.get(row, checkField), {
|
|
4509
|
-
children: transform ? mapChildrenField : childrenField
|
|
4510
|
-
});
|
|
4511
|
-
} else {
|
|
4512
|
-
const currTableData = isFull ? tableFullData : afterFullData;
|
|
4513
|
-
rowList = currTableData.filter(row => _xeUtils.default.get(row, checkField));
|
|
4514
|
-
}
|
|
4515
|
-
} else {
|
|
4516
|
-
_xeUtils.default.each(selectCheckboxMaps, (row, rowid) => {
|
|
4517
|
-
if (isFull) {
|
|
4518
|
-
if (fullDataRowIdData[rowid]) {
|
|
4519
|
-
rowList.push(fullDataRowIdData[rowid].row);
|
|
4520
|
-
}
|
|
4521
|
-
} else {
|
|
4522
|
-
if (afterFullRowMaps[rowid]) {
|
|
4523
|
-
rowList.push(afterFullRowMaps[rowid]);
|
|
4524
|
-
}
|
|
4525
|
-
}
|
|
4526
|
-
});
|
|
4527
|
-
}
|
|
4528
|
-
}
|
|
4529
|
-
return rowList;
|
|
4530
|
-
},
|
|
4531
|
-
/**
|
|
4532
|
-
* 获取处理后全量的表格数据
|
|
4533
|
-
* 如果存在筛选条件,继续处理
|
|
4534
|
-
*/
|
|
4535
|
-
updateAfterFullData() {
|
|
4536
|
-
const $xeTable = this;
|
|
4537
|
-
const props = $xeTable;
|
|
4538
|
-
const internalData = $xeTable;
|
|
4539
|
-
const {
|
|
4540
|
-
treeConfig
|
|
4541
|
-
} = props;
|
|
4542
|
-
const {
|
|
4543
|
-
tableFullColumn,
|
|
4544
|
-
tableFullData,
|
|
4545
|
-
tableFullTreeData
|
|
4546
|
-
} = internalData;
|
|
4547
|
-
const filterOpts = $xeTable.computeFilterOpts;
|
|
4548
|
-
const sortOpts = $xeTable.computeSortOpts;
|
|
4549
|
-
const treeOpts = $xeTable.computeTreeOpts;
|
|
4550
|
-
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
4551
|
-
const {
|
|
4552
|
-
transform,
|
|
4553
|
-
rowField,
|
|
4554
|
-
parentField,
|
|
4555
|
-
mapChildrenField
|
|
4556
|
-
} = treeOpts;
|
|
4557
|
-
const {
|
|
4558
|
-
isEvery,
|
|
4559
|
-
remote: allRemoteFilter,
|
|
4560
|
-
filterMethod: allFilterMethod
|
|
4561
|
-
} = filterOpts;
|
|
4562
|
-
const {
|
|
4563
|
-
remote: allRemoteSort,
|
|
4564
|
-
sortMethod: allSortMethod,
|
|
4565
|
-
multiple: sortMultiple,
|
|
4566
|
-
chronological
|
|
4567
|
-
} = sortOpts;
|
|
4568
|
-
let tableData = [];
|
|
4569
|
-
let tableTree = [];
|
|
4570
|
-
// 处理数据
|
|
4571
|
-
if (!allRemoteFilter || !allRemoteSort) {
|
|
4572
|
-
const filterColumns = [];
|
|
4573
|
-
let orderColumns = [];
|
|
4574
|
-
tableFullColumn.forEach(column => {
|
|
4575
|
-
const {
|
|
4576
|
-
field,
|
|
4577
|
-
sortable,
|
|
4578
|
-
order,
|
|
4579
|
-
filters
|
|
4580
|
-
} = column;
|
|
4581
|
-
if (!allRemoteFilter && filters && filters.length) {
|
|
4582
|
-
const valueList = [];
|
|
4583
|
-
const itemList = [];
|
|
4584
|
-
filters.forEach(item => {
|
|
4585
|
-
if (item.checked) {
|
|
4586
|
-
itemList.push(item);
|
|
4587
|
-
valueList.push(item.value);
|
|
4588
|
-
}
|
|
4589
|
-
});
|
|
4590
|
-
if (itemList.length) {
|
|
4591
|
-
filterColumns.push({
|
|
4592
|
-
column,
|
|
4593
|
-
valueList,
|
|
4594
|
-
itemList
|
|
4595
|
-
});
|
|
4596
|
-
}
|
|
4597
|
-
}
|
|
4598
|
-
if (!allRemoteSort && sortable && order) {
|
|
4599
|
-
orderColumns.push({
|
|
4600
|
-
column,
|
|
4601
|
-
field,
|
|
4602
|
-
property: field,
|
|
4603
|
-
order: order,
|
|
4604
|
-
sortTime: column.sortTime
|
|
4605
|
-
});
|
|
4606
|
-
}
|
|
4607
|
-
});
|
|
4608
|
-
if (sortMultiple && chronological && orderColumns.length > 1) {
|
|
4609
|
-
orderColumns = _xeUtils.default.orderBy(orderColumns, 'sortTime');
|
|
4610
|
-
}
|
|
4611
|
-
// 处理筛选
|
|
4612
|
-
// 支持单列、多列、组合筛选
|
|
4613
|
-
if (!allRemoteFilter && filterColumns.length) {
|
|
4614
|
-
const handleFilter = row => {
|
|
4615
|
-
return filterColumns.every(({
|
|
4616
|
-
column,
|
|
4617
|
-
valueList,
|
|
4618
|
-
itemList
|
|
4619
|
-
}) => {
|
|
4620
|
-
const {
|
|
4621
|
-
filterMethod,
|
|
4622
|
-
filterRender
|
|
4623
|
-
} = column;
|
|
4624
|
-
const compConf = (0, _utils.isEnableConf)(filterRender) ? renderer.get(filterRender.name) : null;
|
|
4625
|
-
const compFilterMethod = compConf ? compConf.tableFilterMethod || compConf.filterMethod : null;
|
|
4626
|
-
const tdFilterMethod = compConf ? compConf.tableFilterDefaultMethod || compConf.defaultTableFilterMethod || compConf.defaultFilterMethod : null;
|
|
4627
|
-
const cellValue = (0, _util.getCellValue)(row, column);
|
|
4628
|
-
if (filterMethod) {
|
|
4629
|
-
return itemList.some(item => filterMethod({
|
|
4630
|
-
value: item.value,
|
|
4631
|
-
option: item,
|
|
4632
|
-
cellValue,
|
|
4633
|
-
row,
|
|
4634
|
-
column,
|
|
4635
|
-
$table: $xeTable
|
|
4636
|
-
}));
|
|
4637
|
-
} else if (compFilterMethod) {
|
|
4638
|
-
return itemList.some(item => compFilterMethod({
|
|
4639
|
-
value: item.value,
|
|
4640
|
-
option: item,
|
|
4641
|
-
cellValue,
|
|
4642
|
-
row,
|
|
4643
|
-
column,
|
|
4644
|
-
$table: $xeTable
|
|
4645
|
-
}));
|
|
4646
|
-
} else if (allFilterMethod) {
|
|
4647
|
-
return allFilterMethod({
|
|
4648
|
-
options: itemList,
|
|
4649
|
-
values: valueList,
|
|
4650
|
-
cellValue,
|
|
4651
|
-
row,
|
|
4652
|
-
column
|
|
4653
|
-
});
|
|
4654
|
-
} else if (tdFilterMethod) {
|
|
4655
|
-
return itemList.some(item => tdFilterMethod({
|
|
4656
|
-
value: item.value,
|
|
4657
|
-
option: item,
|
|
4658
|
-
cellValue,
|
|
4659
|
-
row,
|
|
4660
|
-
column,
|
|
4661
|
-
$table: $xeTable
|
|
4662
|
-
}));
|
|
4663
|
-
}
|
|
4664
|
-
return valueList.indexOf(_xeUtils.default.get(row, column.field)) > -1;
|
|
4665
|
-
});
|
|
4666
|
-
};
|
|
4667
|
-
if (treeConfig && transform) {
|
|
4668
|
-
// 筛选虚拟树
|
|
4669
|
-
tableTree = _xeUtils.default.searchTree(tableFullTreeData, handleFilter, {
|
|
4670
|
-
original: true,
|
|
4671
|
-
isEvery,
|
|
4672
|
-
children: mapChildrenField,
|
|
4673
|
-
mapChildren: childrenField
|
|
5122
|
+
if (updateCheckboxFlag) {
|
|
5123
|
+
if (checkField) {
|
|
5124
|
+
if (treeConfig) {
|
|
5125
|
+
const currTableData = isFull ? transform ? tableFullTreeData : tableFullData : transform ? tableFullTreeData : afterFullData;
|
|
5126
|
+
rowList = _xeUtils.default.filterTree(currTableData, row => _xeUtils.default.get(row, checkField), {
|
|
5127
|
+
children: transform ? mapChildrenField : childrenField
|
|
4674
5128
|
});
|
|
4675
|
-
tableData = tableTree;
|
|
4676
5129
|
} else {
|
|
4677
|
-
|
|
4678
|
-
|
|
5130
|
+
const currTableData = isFull ? tableFullData : afterFullData;
|
|
5131
|
+
rowList = currTableData.filter(row => _xeUtils.default.get(row, checkField));
|
|
4679
5132
|
}
|
|
4680
5133
|
} else {
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
children: mapChildrenField,
|
|
4687
|
-
mapChildren: childrenField
|
|
4688
|
-
});
|
|
4689
|
-
tableData = tableTree;
|
|
4690
|
-
} else {
|
|
4691
|
-
tableData = treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0);
|
|
4692
|
-
tableTree = tableData;
|
|
4693
|
-
}
|
|
4694
|
-
}
|
|
4695
|
-
// 处理排序(不能用于树形结构)
|
|
4696
|
-
// 支持单列、多列、组合排序
|
|
4697
|
-
if (!allRemoteSort && orderColumns.length) {
|
|
4698
|
-
if (treeConfig && transform) {
|
|
4699
|
-
// 虚拟树和列表一样,只能排序根级节点
|
|
4700
|
-
if (allSortMethod) {
|
|
4701
|
-
const sortRests = allSortMethod({
|
|
4702
|
-
data: tableTree,
|
|
4703
|
-
sortList: orderColumns,
|
|
4704
|
-
$table: $xeTable
|
|
4705
|
-
});
|
|
4706
|
-
tableTree = _xeUtils.default.isArray(sortRests) ? sortRests : tableTree;
|
|
4707
|
-
} else {
|
|
4708
|
-
const treeList = _xeUtils.default.toTreeArray(tableTree, {
|
|
4709
|
-
children: mapChildrenField
|
|
4710
|
-
});
|
|
4711
|
-
tableTree = _xeUtils.default.toArrayTree(_xeUtils.default.orderBy(treeList, orderColumns.map(({
|
|
4712
|
-
column,
|
|
4713
|
-
order
|
|
4714
|
-
}) => [getOrderField($xeTable, column), order])), {
|
|
4715
|
-
key: rowField,
|
|
4716
|
-
parentKey: parentField,
|
|
4717
|
-
children: childrenField,
|
|
4718
|
-
mapChildren: mapChildrenField
|
|
4719
|
-
});
|
|
4720
|
-
}
|
|
4721
|
-
tableData = tableTree;
|
|
4722
|
-
} else {
|
|
4723
|
-
if (allSortMethod) {
|
|
4724
|
-
const sortRests = allSortMethod({
|
|
4725
|
-
data: tableData,
|
|
4726
|
-
sortList: orderColumns,
|
|
4727
|
-
$table: $xeTable
|
|
4728
|
-
});
|
|
4729
|
-
tableData = _xeUtils.default.isArray(sortRests) ? sortRests : tableData;
|
|
5134
|
+
_xeUtils.default.each(selectCheckboxMaps, (row, rowid) => {
|
|
5135
|
+
if (isFull) {
|
|
5136
|
+
if (fullDataRowIdData[rowid]) {
|
|
5137
|
+
rowList.push(fullDataRowIdData[rowid].row);
|
|
5138
|
+
}
|
|
4730
5139
|
} else {
|
|
4731
|
-
|
|
4732
|
-
|
|
4733
|
-
tableData = _xeUtils.default.orderBy(tableData, orderColumns.map(({
|
|
4734
|
-
column,
|
|
4735
|
-
order
|
|
4736
|
-
}) => [getOrderField(this, column), order]));
|
|
4737
|
-
} else {
|
|
4738
|
-
const firstOrderColumn = orderColumns[0];
|
|
4739
|
-
let sortByConfs;
|
|
4740
|
-
// 已废弃,兼容 v2,在 v4 中废弃, sortBy 不能为数组
|
|
4741
|
-
if (_xeUtils.default.isArray(firstOrderColumn.sortBy)) {
|
|
4742
|
-
sortByConfs = firstOrderColumn.sortBy.map(item => [item, firstOrderColumn.order]);
|
|
4743
|
-
}
|
|
4744
|
-
tableData = _xeUtils.default.orderBy(tableData, sortByConfs || [firstOrderColumn].map(({
|
|
4745
|
-
column,
|
|
4746
|
-
order
|
|
4747
|
-
}) => [getOrderField(this, column), order]));
|
|
5140
|
+
if (afterFullRowMaps[rowid]) {
|
|
5141
|
+
rowList.push(afterFullRowMaps[rowid]);
|
|
4748
5142
|
}
|
|
4749
|
-
tableData = _xeUtils.default.orderBy(tableData, orderColumns.map(({
|
|
4750
|
-
column,
|
|
4751
|
-
order
|
|
4752
|
-
}) => [getOrderField($xeTable, column), order]));
|
|
4753
5143
|
}
|
|
4754
|
-
tableTree = tableData;
|
|
4755
|
-
}
|
|
4756
|
-
}
|
|
4757
|
-
} else {
|
|
4758
|
-
if (treeConfig && transform) {
|
|
4759
|
-
// 还原虚拟树
|
|
4760
|
-
tableTree = _xeUtils.default.searchTree(tableFullTreeData, () => true, {
|
|
4761
|
-
original: true,
|
|
4762
|
-
isEvery,
|
|
4763
|
-
children: treeOpts.mapChildrenField,
|
|
4764
|
-
mapChildren: childrenField
|
|
4765
5144
|
});
|
|
4766
|
-
tableData = tableTree;
|
|
4767
|
-
} else {
|
|
4768
|
-
tableData = treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0);
|
|
4769
|
-
tableTree = tableData;
|
|
4770
5145
|
}
|
|
4771
5146
|
}
|
|
4772
|
-
|
|
4773
|
-
internalData.afterTreeFullData = tableTree;
|
|
4774
|
-
updateAfterDataIndex($xeTable);
|
|
5147
|
+
return rowList;
|
|
4775
5148
|
},
|
|
4776
5149
|
/**
|
|
4777
5150
|
* 预编译
|
|
@@ -5155,6 +5528,7 @@ const Methods = {
|
|
|
5155
5528
|
const storeData = getCustomStorageMap(tableId);
|
|
5156
5529
|
if (restoreStore) {
|
|
5157
5530
|
return Promise.resolve(restoreStore({
|
|
5531
|
+
$table: $xeTable,
|
|
5158
5532
|
id: tableId,
|
|
5159
5533
|
type: 'restore',
|
|
5160
5534
|
storeData
|
|
@@ -5230,6 +5604,7 @@ const Methods = {
|
|
|
5230
5604
|
resizableData[colKey] = column.renderWidth;
|
|
5231
5605
|
}
|
|
5232
5606
|
if (isCustomVisible && (!checkMethod || checkMethod({
|
|
5607
|
+
$table: $xeTable,
|
|
5233
5608
|
column
|
|
5234
5609
|
}))) {
|
|
5235
5610
|
if (!column.visible && column.defaultVisible) {
|
|
@@ -5290,6 +5665,7 @@ const Methods = {
|
|
|
5290
5665
|
} : this.getCustomStoreData();
|
|
5291
5666
|
if (updateStore) {
|
|
5292
5667
|
return updateStore({
|
|
5668
|
+
$table: $xeTable,
|
|
5293
5669
|
id: tableId,
|
|
5294
5670
|
type,
|
|
5295
5671
|
storeData
|
|
@@ -6283,8 +6659,7 @@ const Methods = {
|
|
|
6283
6659
|
const hasDeleteKey = keyCode === 46;
|
|
6284
6660
|
const isF2 = keyCode === 113;
|
|
6285
6661
|
const isContextMenu = keyCode === 93;
|
|
6286
|
-
const
|
|
6287
|
-
const hasCtrlKey = evnt.ctrlKey;
|
|
6662
|
+
const isControlKey = (0, _dom.hasControlKey)(evnt);
|
|
6288
6663
|
const hasShiftKey = evnt.shiftKey;
|
|
6289
6664
|
const hasAltKey = evnt.altKey;
|
|
6290
6665
|
const operArrow = isLeftArrow || isUpArrow || isRightArrow || isDwArrow;
|
|
@@ -6350,7 +6725,7 @@ const Methods = {
|
|
|
6350
6725
|
enterMethod
|
|
6351
6726
|
} = keyboardOpts;
|
|
6352
6727
|
// 退出选中
|
|
6353
|
-
if (
|
|
6728
|
+
if (isControlKey) {
|
|
6354
6729
|
// 如果是激活编辑状态,则取消编辑
|
|
6355
6730
|
if (actived.row) {
|
|
6356
6731
|
const params = actived.args;
|
|
@@ -6525,7 +6900,7 @@ const Methods = {
|
|
|
6525
6900
|
};
|
|
6526
6901
|
$xeTable.setTreeExpand(parentRow, false).then(() => $xeTable.scrollToRow(parentRow)).then(() => $xeTable.triggerCurrentRowEvent(evnt, params));
|
|
6527
6902
|
}
|
|
6528
|
-
} else if (keyboardConfig && keyboardOpts.isEdit && !
|
|
6903
|
+
} else if (keyboardConfig && keyboardOpts.isEdit && !isControlKey && (isSpacebar || keyCode >= 48 && keyCode <= 57 || keyCode >= 65 && keyCode <= 90 || keyCode >= 96 && keyCode <= 111 || keyCode >= 186 && keyCode <= 192 || keyCode >= 219 && keyCode <= 222)) {
|
|
6529
6904
|
const {
|
|
6530
6905
|
editMethod
|
|
6531
6906
|
} = keyboardOpts;
|
|
@@ -6975,9 +7350,13 @@ const Methods = {
|
|
|
6975
7350
|
const {
|
|
6976
7351
|
treeConfig
|
|
6977
7352
|
} = props;
|
|
7353
|
+
const {
|
|
7354
|
+
isRowGroupStatus
|
|
7355
|
+
} = reactData;
|
|
6978
7356
|
const {
|
|
6979
7357
|
selectCheckboxMaps
|
|
6980
7358
|
} = internalData;
|
|
7359
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
6981
7360
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
6982
7361
|
const {
|
|
6983
7362
|
transform,
|
|
@@ -6997,10 +7376,11 @@ const Methods = {
|
|
|
6997
7376
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
6998
7377
|
if (checkField) {
|
|
6999
7378
|
// 树结构
|
|
7000
|
-
if (treeConfig && !checkStrictly) {
|
|
7379
|
+
if ((treeConfig || isRowGroupStatus) && !checkStrictly) {
|
|
7001
7380
|
// 更新子节点状态
|
|
7002
7381
|
_xeUtils.default.eachTree(rows, row => {
|
|
7003
7382
|
if (isForce || !checkMethod || checkMethod({
|
|
7383
|
+
$table: $xeTable,
|
|
7004
7384
|
row
|
|
7005
7385
|
})) {
|
|
7006
7386
|
_xeUtils.default.set(row, checkField, checked);
|
|
@@ -7018,6 +7398,7 @@ const Methods = {
|
|
|
7018
7398
|
// 列表
|
|
7019
7399
|
rows.forEach(row => {
|
|
7020
7400
|
if (isForce || !checkMethod || checkMethod({
|
|
7401
|
+
$table: $xeTable,
|
|
7021
7402
|
row
|
|
7022
7403
|
})) {
|
|
7023
7404
|
_xeUtils.default.set(row, checkField, checked);
|
|
@@ -7028,32 +7409,58 @@ const Methods = {
|
|
|
7028
7409
|
return;
|
|
7029
7410
|
}
|
|
7030
7411
|
// 树结构
|
|
7031
|
-
if (
|
|
7032
|
-
|
|
7033
|
-
|
|
7034
|
-
|
|
7035
|
-
|
|
7036
|
-
|
|
7037
|
-
|
|
7038
|
-
|
|
7039
|
-
|
|
7040
|
-
|
|
7041
|
-
|
|
7042
|
-
|
|
7412
|
+
if (!checkStrictly) {
|
|
7413
|
+
if (isRowGroupStatus) {
|
|
7414
|
+
// 更新行分组节点状态
|
|
7415
|
+
_xeUtils.default.eachTree(rows, row => {
|
|
7416
|
+
const rowid = handleGetRowId(row);
|
|
7417
|
+
if (isForce || !checkMethod || checkMethod({
|
|
7418
|
+
$table: $xeTable,
|
|
7419
|
+
row
|
|
7420
|
+
})) {
|
|
7421
|
+
if (checked) {
|
|
7422
|
+
selectCheckboxMaps[rowid] = row;
|
|
7423
|
+
} else {
|
|
7424
|
+
if (selectCheckboxMaps[rowid]) {
|
|
7425
|
+
delete selectCheckboxMaps[rowid];
|
|
7426
|
+
}
|
|
7043
7427
|
}
|
|
7428
|
+
handleCheckboxReserveRow($xeTable, row, checked);
|
|
7044
7429
|
}
|
|
7045
|
-
|
|
7046
|
-
|
|
7047
|
-
|
|
7048
|
-
|
|
7049
|
-
|
|
7050
|
-
|
|
7051
|
-
|
|
7430
|
+
}, {
|
|
7431
|
+
children: rowGroupOpts.mapChildrenField
|
|
7432
|
+
});
|
|
7433
|
+
reactData.updateCheckboxFlag++;
|
|
7434
|
+
return;
|
|
7435
|
+
} else if (treeConfig) {
|
|
7436
|
+
// 更新子节点状态
|
|
7437
|
+
_xeUtils.default.eachTree(rows, row => {
|
|
7438
|
+
const rowid = handleGetRowId(row);
|
|
7439
|
+
if (isForce || !checkMethod || checkMethod({
|
|
7440
|
+
$table: $xeTable,
|
|
7441
|
+
row
|
|
7442
|
+
})) {
|
|
7443
|
+
if (checked) {
|
|
7444
|
+
selectCheckboxMaps[rowid] = row;
|
|
7445
|
+
} else {
|
|
7446
|
+
if (selectCheckboxMaps[rowid]) {
|
|
7447
|
+
delete selectCheckboxMaps[rowid];
|
|
7448
|
+
}
|
|
7449
|
+
}
|
|
7450
|
+
handleCheckboxReserveRow($xeTable, row, checked);
|
|
7451
|
+
}
|
|
7452
|
+
}, {
|
|
7453
|
+
children: transform ? mapChildrenField : childrenField
|
|
7454
|
+
});
|
|
7455
|
+
reactData.updateCheckboxFlag++;
|
|
7456
|
+
return;
|
|
7457
|
+
}
|
|
7052
7458
|
}
|
|
7053
7459
|
// 列表
|
|
7054
7460
|
rows.forEach(row => {
|
|
7055
7461
|
const rowid = handleGetRowId(row);
|
|
7056
7462
|
if (isForce || !checkMethod || checkMethod({
|
|
7463
|
+
$table: $xeTable,
|
|
7057
7464
|
row
|
|
7058
7465
|
})) {
|
|
7059
7466
|
if (checked) {
|
|
@@ -7113,10 +7520,17 @@ const Methods = {
|
|
|
7113
7520
|
triggerCheckRowEvent(evnt, params, checked) {
|
|
7114
7521
|
const $xeTable = this;
|
|
7115
7522
|
const props = $xeTable;
|
|
7523
|
+
const reactData = $xeTable;
|
|
7116
7524
|
const internalData = $xeTable;
|
|
7525
|
+
const {
|
|
7526
|
+
treeConfig
|
|
7527
|
+
} = props;
|
|
7117
7528
|
const {
|
|
7118
7529
|
row
|
|
7119
7530
|
} = params;
|
|
7531
|
+
const {
|
|
7532
|
+
isRowGroupStatus
|
|
7533
|
+
} = reactData;
|
|
7120
7534
|
const {
|
|
7121
7535
|
afterFullData
|
|
7122
7536
|
} = internalData;
|
|
@@ -7129,7 +7543,7 @@ const Methods = {
|
|
|
7129
7543
|
return;
|
|
7130
7544
|
}
|
|
7131
7545
|
evnt.stopPropagation();
|
|
7132
|
-
if (checkboxOpts.isShiftKey && evnt.shiftKey && !
|
|
7546
|
+
if (checkboxOpts.isShiftKey && evnt.shiftKey && !(treeConfig || isRowGroupStatus)) {
|
|
7133
7547
|
const checkboxRecords = $xeTable.getCheckboxRecords();
|
|
7134
7548
|
if (checkboxRecords.length) {
|
|
7135
7549
|
const firstRow = checkboxRecords[0];
|
|
@@ -7149,6 +7563,7 @@ const Methods = {
|
|
|
7149
7563
|
}
|
|
7150
7564
|
}
|
|
7151
7565
|
if (!checkMethod || checkMethod({
|
|
7566
|
+
$table: $xeTable,
|
|
7152
7567
|
row
|
|
7153
7568
|
})) {
|
|
7154
7569
|
$xeTable.handleBatchSelectRows([row], checked);
|
|
@@ -7196,14 +7611,16 @@ const Methods = {
|
|
|
7196
7611
|
treeConfig
|
|
7197
7612
|
} = props;
|
|
7198
7613
|
const {
|
|
7614
|
+
isRowGroupStatus
|
|
7615
|
+
} = reactData;
|
|
7616
|
+
const {
|
|
7617
|
+
afterTreeFullData,
|
|
7618
|
+
afterGroupFullData,
|
|
7199
7619
|
selectCheckboxMaps,
|
|
7200
7620
|
treeIndeterminateRowMaps
|
|
7201
7621
|
} = internalData;
|
|
7622
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
7202
7623
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
7203
|
-
const {
|
|
7204
|
-
transform,
|
|
7205
|
-
mapChildrenField
|
|
7206
|
-
} = treeOpts;
|
|
7207
7624
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7208
7625
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
7209
7626
|
const {
|
|
@@ -7211,29 +7628,47 @@ const Methods = {
|
|
|
7211
7628
|
checkStrictly,
|
|
7212
7629
|
checkMethod
|
|
7213
7630
|
} = checkboxOpts;
|
|
7214
|
-
const {
|
|
7215
|
-
afterTreeFullData
|
|
7216
|
-
} = internalData;
|
|
7217
7631
|
if (checkStrictly) {
|
|
7218
7632
|
return;
|
|
7219
7633
|
}
|
|
7220
|
-
|
|
7221
|
-
if (treeConfig) {
|
|
7634
|
+
if (isRowGroupStatus || treeConfig) {
|
|
7222
7635
|
const {
|
|
7223
7636
|
handleGetRowId
|
|
7224
7637
|
} = (0, _util.createHandleGetRowId)($xeTable);
|
|
7225
7638
|
const childRowMaps = {};
|
|
7226
7639
|
const childRowList = [];
|
|
7227
|
-
|
|
7228
|
-
|
|
7229
|
-
const
|
|
7230
|
-
if (
|
|
7231
|
-
|
|
7232
|
-
|
|
7640
|
+
if (isRowGroupStatus) {
|
|
7641
|
+
// 行分组
|
|
7642
|
+
const mapChildrenField = rowGroupOpts.mapChildrenField;
|
|
7643
|
+
if (mapChildrenField) {
|
|
7644
|
+
_xeUtils.default.eachTree(afterGroupFullData, row => {
|
|
7645
|
+
const rowid = handleGetRowId(row);
|
|
7646
|
+
const childList = row[mapChildrenField];
|
|
7647
|
+
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
7648
|
+
childRowMaps[rowid] = 1;
|
|
7649
|
+
childRowList.unshift([row, rowid, childList]);
|
|
7650
|
+
}
|
|
7651
|
+
}, {
|
|
7652
|
+
children: mapChildrenField
|
|
7653
|
+
});
|
|
7233
7654
|
}
|
|
7234
|
-
}
|
|
7235
|
-
|
|
7236
|
-
|
|
7655
|
+
} else if (treeConfig) {
|
|
7656
|
+
// 树结构
|
|
7657
|
+
const {
|
|
7658
|
+
transform,
|
|
7659
|
+
mapChildrenField
|
|
7660
|
+
} = treeOpts;
|
|
7661
|
+
_xeUtils.default.eachTree(afterTreeFullData, row => {
|
|
7662
|
+
const rowid = handleGetRowId(row);
|
|
7663
|
+
const childList = row[transform ? mapChildrenField : childrenField];
|
|
7664
|
+
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
7665
|
+
childRowMaps[rowid] = 1;
|
|
7666
|
+
childRowList.unshift([row, rowid, childList]);
|
|
7667
|
+
}
|
|
7668
|
+
}, {
|
|
7669
|
+
children: transform ? mapChildrenField : childrenField
|
|
7670
|
+
});
|
|
7671
|
+
}
|
|
7237
7672
|
childRowList.forEach(vals => {
|
|
7238
7673
|
const row = vals[0];
|
|
7239
7674
|
const rowid = vals[1];
|
|
@@ -7245,6 +7680,7 @@ const Methods = {
|
|
|
7245
7680
|
const childRowid = handleGetRowId(item);
|
|
7246
7681
|
const isSelect = checkField ? _xeUtils.default.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
7247
7682
|
if (checkMethod({
|
|
7683
|
+
$table: $xeTable,
|
|
7248
7684
|
row: item
|
|
7249
7685
|
})) {
|
|
7250
7686
|
if (isSelect) {
|
|
@@ -7308,9 +7744,13 @@ const Methods = {
|
|
|
7308
7744
|
const {
|
|
7309
7745
|
treeConfig
|
|
7310
7746
|
} = props;
|
|
7747
|
+
const {
|
|
7748
|
+
isRowGroupStatus
|
|
7749
|
+
} = reactData;
|
|
7311
7750
|
const {
|
|
7312
7751
|
afterFullData,
|
|
7313
7752
|
afterTreeFullData,
|
|
7753
|
+
afterGroupFullData,
|
|
7314
7754
|
checkboxReserveRowMap,
|
|
7315
7755
|
selectCheckboxMaps,
|
|
7316
7756
|
treeIndeterminateRowMaps
|
|
@@ -7327,11 +7767,12 @@ const Methods = {
|
|
|
7327
7767
|
let sLen = 0; // 已选
|
|
7328
7768
|
let hLen = 0; // 半选
|
|
7329
7769
|
let vLen = 0; // 有效行
|
|
7330
|
-
const rootList = treeConfig ? afterTreeFullData : afterFullData;
|
|
7770
|
+
const rootList = treeConfig ? afterTreeFullData : isRowGroupStatus ? afterGroupFullData : afterFullData;
|
|
7331
7771
|
rootList.forEach(checkMethod ? row => {
|
|
7332
7772
|
const childRowid = handleGetRowId(row);
|
|
7333
7773
|
const selected = checkField ? _xeUtils.default.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
7334
7774
|
if (checkMethod({
|
|
7775
|
+
$table: $xeTable,
|
|
7335
7776
|
row
|
|
7336
7777
|
})) {
|
|
7337
7778
|
if (selected) {
|
|
@@ -7920,6 +8361,7 @@ const Methods = {
|
|
|
7920
8361
|
const radioOpts = $xeTable.computeRadioOpts;
|
|
7921
8362
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
7922
8363
|
const keyboardOpts = $xeTable.computeKeyboardOpts;
|
|
8364
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
7923
8365
|
const rowOpts = $xeTable.computeRowOpts;
|
|
7924
8366
|
const columnOpts = $xeTable.computeColumnOpts;
|
|
7925
8367
|
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
@@ -7933,7 +8375,8 @@ const Methods = {
|
|
|
7933
8375
|
} = params;
|
|
7934
8376
|
const {
|
|
7935
8377
|
type,
|
|
7936
|
-
treeNode
|
|
8378
|
+
treeNode,
|
|
8379
|
+
rowGroupNode
|
|
7937
8380
|
} = column;
|
|
7938
8381
|
const isRadioType = type === 'radio';
|
|
7939
8382
|
const isCheckboxType = type === 'checkbox';
|
|
@@ -7941,8 +8384,9 @@ const Methods = {
|
|
|
7941
8384
|
const cell = evnt.currentTarget;
|
|
7942
8385
|
const triggerRadio = isRadioType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--radio').flag;
|
|
7943
8386
|
const triggerCheckbox = isCheckboxType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--checkbox').flag;
|
|
7944
|
-
const triggerTreeNode = treeNode && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-tree
|
|
8387
|
+
const triggerTreeNode = treeNode && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--tree-btn').flag;
|
|
7945
8388
|
const triggerExpandNode = isExpandType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-table--expanded').flag;
|
|
8389
|
+
const triggerRowGroupNode = isExpandType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-row-group--node-btn').flag;
|
|
7946
8390
|
params = Object.assign({
|
|
7947
8391
|
cell,
|
|
7948
8392
|
triggerRadio,
|
|
@@ -7959,11 +8403,15 @@ const Methods = {
|
|
|
7959
8403
|
if (treeOpts.trigger === 'row' || treeNode && treeOpts.trigger === 'cell') {
|
|
7960
8404
|
$xeTable.triggerTreeExpandEvent(evnt, params);
|
|
7961
8405
|
}
|
|
8406
|
+
// 如果是行分组
|
|
8407
|
+
if (rowGroupOpts.trigger === 'row' || rowGroupNode && rowGroupOpts.trigger === 'cell') {
|
|
8408
|
+
$xeTable.triggerRowGroupExpandEvent(evnt, params);
|
|
8409
|
+
}
|
|
7962
8410
|
}
|
|
7963
8411
|
// 如果点击了树节点
|
|
7964
8412
|
if (!triggerTreeNode) {
|
|
7965
|
-
if (!triggerExpandNode) {
|
|
7966
|
-
//
|
|
8413
|
+
if (!triggerExpandNode && !triggerRowGroupNode) {
|
|
8414
|
+
// 如果是当前行
|
|
7967
8415
|
if (rowOpts.isCurrent || highlightCurrentRow) {
|
|
7968
8416
|
if (!triggerCheckbox && !triggerRadio) {
|
|
7969
8417
|
$xeTable.triggerCurrentRowEvent(evnt, params);
|
|
@@ -8229,7 +8677,7 @@ const Methods = {
|
|
|
8229
8677
|
const triggerInput = cell && cell.tagName && cell.tagName.toLowerCase() === 'input';
|
|
8230
8678
|
const triggerRadio = isRadioType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--radio').flag;
|
|
8231
8679
|
const triggerCheckbox = isCheckboxType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--checkbox').flag;
|
|
8232
|
-
const triggerTreeNode = treeNode && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-tree
|
|
8680
|
+
const triggerTreeNode = treeNode && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--tree-btn').flag;
|
|
8233
8681
|
const triggerExpandNode = isExpandType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-table--expanded').flag;
|
|
8234
8682
|
let isColDragCell = false;
|
|
8235
8683
|
if (rowOpts.drag) {
|
|
@@ -8546,7 +8994,7 @@ const Methods = {
|
|
|
8546
8994
|
evnt.preventDefault();
|
|
8547
8995
|
return;
|
|
8548
8996
|
}
|
|
8549
|
-
const
|
|
8997
|
+
const isControlKey = (0, _dom.hasControlKey)(evnt);
|
|
8550
8998
|
const trEl = evnt.currentTarget;
|
|
8551
8999
|
const rowid = trEl.getAttribute('rowid') || '';
|
|
8552
9000
|
const rest = fullAllDataRowIdData[rowid];
|
|
@@ -8560,10 +9008,10 @@ const Methods = {
|
|
|
8560
9008
|
} = reactData;
|
|
8561
9009
|
const offsetY = evnt.clientY - trEl.getBoundingClientRect().y;
|
|
8562
9010
|
const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom';
|
|
8563
|
-
internalData.prevDragToChild = !!(treeConfig && transform && isToChildDrag &&
|
|
9011
|
+
internalData.prevDragToChild = !!(treeConfig && transform && isToChildDrag && isControlKey);
|
|
8564
9012
|
internalData.prevDragRow = row;
|
|
8565
9013
|
internalData.prevDragPos = dragPos;
|
|
8566
|
-
if ($xeTable.eqRow(dragRow, row) ||
|
|
9014
|
+
if ($xeTable.eqRow(dragRow, row) || isControlKey && treeConfig && lazy && row[hasChildField] && rowRest && !rowRest.treeLoaded || !isCrossDrag && treeConfig && transform && (isPeerDrag ? dragRow[parentField] !== row[parentField] : rest.level)) {
|
|
8567
9015
|
showDropTip($xeTable, evnt, trEl, null, false, dragPos);
|
|
8568
9016
|
return;
|
|
8569
9017
|
}
|
|
@@ -8862,7 +9310,7 @@ const Methods = {
|
|
|
8862
9310
|
evnt.preventDefault();
|
|
8863
9311
|
return;
|
|
8864
9312
|
}
|
|
8865
|
-
const
|
|
9313
|
+
const isControlKey = (0, _dom.hasControlKey)(evnt);
|
|
8866
9314
|
const thEl = evnt.currentTarget;
|
|
8867
9315
|
const colid = thEl.getAttribute('colid');
|
|
8868
9316
|
const column = $xeTable.getColumnById(colid);
|
|
@@ -8873,7 +9321,7 @@ const Methods = {
|
|
|
8873
9321
|
} = evnt;
|
|
8874
9322
|
const offsetX = clientX - thEl.getBoundingClientRect().x;
|
|
8875
9323
|
const dragPos = offsetX < thEl.clientWidth / 2 ? 'left' : 'right';
|
|
8876
|
-
internalData.prevDragToChild = !!(isCrossDrag && isToChildDrag &&
|
|
9324
|
+
internalData.prevDragToChild = !!(isCrossDrag && isToChildDrag && isControlKey);
|
|
8877
9325
|
internalData.prevDragCol = column;
|
|
8878
9326
|
internalData.prevDragPos = dragPos;
|
|
8879
9327
|
if (column.fixed || dragCol && dragCol.id === column.id || !isCrossDrag && (isPeerDrag ? dragCol.parentId !== column.parentId : column.parentId)) {
|
|
@@ -9336,7 +9784,7 @@ const Methods = {
|
|
|
9336
9784
|
const reactData = $xeTable;
|
|
9337
9785
|
const internalData = $xeTable;
|
|
9338
9786
|
const {
|
|
9339
|
-
expandColumn
|
|
9787
|
+
expandColumn
|
|
9340
9788
|
} = reactData;
|
|
9341
9789
|
const {
|
|
9342
9790
|
rowExpandLazyLoadedMaps
|
|
@@ -9356,12 +9804,12 @@ const Methods = {
|
|
|
9356
9804
|
const rowid = (0, _util.getRowid)($xeTable, row);
|
|
9357
9805
|
if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
|
|
9358
9806
|
const expanded = !$xeTable.isRowExpandByRow(row);
|
|
9359
|
-
const columnIndex = $xeTable.getColumnIndex(
|
|
9360
|
-
const $columnIndex = $xeTable.getVMColumnIndex(
|
|
9807
|
+
const columnIndex = expandColumn ? $xeTable.getColumnIndex(expandColumn) : -1;
|
|
9808
|
+
const $columnIndex = expandColumn ? $xeTable.getVMColumnIndex(expandColumn) : -1;
|
|
9361
9809
|
$xeTable.setRowExpand(row, expanded);
|
|
9362
9810
|
$xeTable.dispatchEvent('toggle-row-expand', {
|
|
9363
9811
|
expanded,
|
|
9364
|
-
column,
|
|
9812
|
+
column: expandColumn,
|
|
9365
9813
|
columnIndex,
|
|
9366
9814
|
$columnIndex,
|
|
9367
9815
|
row,
|
|
@@ -9430,8 +9878,8 @@ const Methods = {
|
|
|
9430
9878
|
toggleMethod
|
|
9431
9879
|
} = expandOpts;
|
|
9432
9880
|
const lazyRests = [];
|
|
9433
|
-
const columnIndex = $xeTable.getColumnIndex(expandColumn);
|
|
9434
|
-
const $columnIndex = $xeTable.getVMColumnIndex(expandColumn);
|
|
9881
|
+
const columnIndex = expandColumn ? $xeTable.getColumnIndex(expandColumn) : -1;
|
|
9882
|
+
const $columnIndex = expandColumn ? $xeTable.getVMColumnIndex(expandColumn) : -1;
|
|
9435
9883
|
if (rows) {
|
|
9436
9884
|
if (!_xeUtils.default.isArray(rows)) {
|
|
9437
9885
|
rows = [rows];
|
|
@@ -9555,6 +10003,104 @@ const Methods = {
|
|
|
9555
10003
|
});
|
|
9556
10004
|
return rest;
|
|
9557
10005
|
},
|
|
10006
|
+
setRowGroups(fieldOrColumns) {
|
|
10007
|
+
const $xeTable = this;
|
|
10008
|
+
const props = $xeTable;
|
|
10009
|
+
const internalData = $xeTable;
|
|
10010
|
+
const {
|
|
10011
|
+
rowGroupConfig
|
|
10012
|
+
} = props;
|
|
10013
|
+
if (!rowGroupConfig) {
|
|
10014
|
+
(0, _log.errLog)('vxe.error.reqProp', ['row-group-config']);
|
|
10015
|
+
return $xeTable.$nextTick();
|
|
10016
|
+
}
|
|
10017
|
+
if (fieldOrColumns) {
|
|
10018
|
+
handleUpdateRowGroup($xeTable, (_xeUtils.default.isArray(fieldOrColumns) ? fieldOrColumns : [fieldOrColumns]).map(fieldOrColumn => {
|
|
10019
|
+
return _xeUtils.default.isString(fieldOrColumn) ? fieldOrColumn : fieldOrColumn.field;
|
|
10020
|
+
}));
|
|
10021
|
+
return loadTableData($xeTable, internalData.tableSynchData, true);
|
|
10022
|
+
}
|
|
10023
|
+
return $xeTable.$nextTick();
|
|
10024
|
+
},
|
|
10025
|
+
clearRowGroups() {
|
|
10026
|
+
const $xeTable = this;
|
|
10027
|
+
const props = $xeTable;
|
|
10028
|
+
const internalData = $xeTable;
|
|
10029
|
+
const {
|
|
10030
|
+
rowGroupConfig
|
|
10031
|
+
} = props;
|
|
10032
|
+
if (!rowGroupConfig) {
|
|
10033
|
+
(0, _log.errLog)('vxe.error.reqProp', ['row-group-config']);
|
|
10034
|
+
return $xeTable.$nextTick();
|
|
10035
|
+
}
|
|
10036
|
+
handleUpdateRowGroup($xeTable, []);
|
|
10037
|
+
return loadTableData($xeTable, internalData.tableSynchData, true);
|
|
10038
|
+
},
|
|
10039
|
+
isRowGroupRecord(row) {
|
|
10040
|
+
const $xeTable = this;
|
|
10041
|
+
const reactData = $xeTable;
|
|
10042
|
+
const {
|
|
10043
|
+
isRowGroupStatus
|
|
10044
|
+
} = reactData;
|
|
10045
|
+
return isRowGroupStatus && row.isAggregate;
|
|
10046
|
+
},
|
|
10047
|
+
isRowGroupExpandByRow(row) {
|
|
10048
|
+
const $xeTable = this;
|
|
10049
|
+
const reactData = $xeTable;
|
|
10050
|
+
const internalData = $xeTable;
|
|
10051
|
+
const {
|
|
10052
|
+
rowGroupExpandedFlag
|
|
10053
|
+
} = reactData;
|
|
10054
|
+
const {
|
|
10055
|
+
rowGroupExpandedMaps
|
|
10056
|
+
} = internalData;
|
|
10057
|
+
return !!rowGroupExpandedFlag && !!rowGroupExpandedMaps[(0, _util.getRowid)($xeTable, row)];
|
|
10058
|
+
},
|
|
10059
|
+
setRowGroupExpand(rows, expanded) {
|
|
10060
|
+
const $xeTable = this;
|
|
10061
|
+
if (rows) {
|
|
10062
|
+
if (!_xeUtils.default.isArray(rows)) {
|
|
10063
|
+
rows = [rows];
|
|
10064
|
+
}
|
|
10065
|
+
return handleRowGroupVirtualExpand($xeTable, rows, expanded);
|
|
10066
|
+
}
|
|
10067
|
+
return $xeTable.$nextTick();
|
|
10068
|
+
},
|
|
10069
|
+
setAllRowGroupExpand(expanded) {
|
|
10070
|
+
const $xeTable = this;
|
|
10071
|
+
const reactData = $xeTable;
|
|
10072
|
+
const internalData = $xeTable;
|
|
10073
|
+
const {
|
|
10074
|
+
tableFullGroupData
|
|
10075
|
+
} = internalData;
|
|
10076
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
10077
|
+
const {
|
|
10078
|
+
mapChildrenField
|
|
10079
|
+
} = rowGroupOpts;
|
|
10080
|
+
const rgExpandedMaps = {};
|
|
10081
|
+
if (expanded && mapChildrenField) {
|
|
10082
|
+
_xeUtils.default.eachTree(tableFullGroupData, row => {
|
|
10083
|
+
if (row[mapChildrenField] && row[mapChildrenField].length) {
|
|
10084
|
+
rgExpandedMaps[(0, _util.getRowid)($xeTable, row)] = row;
|
|
10085
|
+
}
|
|
10086
|
+
}, {
|
|
10087
|
+
children: mapChildrenField
|
|
10088
|
+
});
|
|
10089
|
+
}
|
|
10090
|
+
internalData.rowGroupExpandedMaps = rgExpandedMaps;
|
|
10091
|
+
handleVirtualTreeToList($xeTable);
|
|
10092
|
+
reactData.rowGroupExpandedFlag++;
|
|
10093
|
+
return $xeTable.handleTableData();
|
|
10094
|
+
},
|
|
10095
|
+
clearRowGroupExpand() {
|
|
10096
|
+
const $xeTable = this;
|
|
10097
|
+
const reactData = $xeTable;
|
|
10098
|
+
const internalData = $xeTable;
|
|
10099
|
+
internalData.rowGroupExpandedMaps = {};
|
|
10100
|
+
handleVirtualTreeToList($xeTable);
|
|
10101
|
+
reactData.rowGroupExpandedFlag++;
|
|
10102
|
+
return $xeTable.handleTableData();
|
|
10103
|
+
},
|
|
9558
10104
|
getTreeExpandRecords() {
|
|
9559
10105
|
const $xeTable = this;
|
|
9560
10106
|
const internalData = $xeTable;
|
|
@@ -9622,11 +10168,11 @@ const Methods = {
|
|
|
9622
10168
|
});
|
|
9623
10169
|
}
|
|
9624
10170
|
internalData.treeExpandedMaps = {};
|
|
9625
|
-
reactData.treeExpandedFlag++;
|
|
9626
10171
|
if (transform) {
|
|
9627
10172
|
handleVirtualTreeToList($xeTable);
|
|
9628
|
-
|
|
10173
|
+
$xeTable.handleTableData();
|
|
9629
10174
|
}
|
|
10175
|
+
reactData.treeExpandedFlag++;
|
|
9630
10176
|
return $xeTable.$nextTick();
|
|
9631
10177
|
},
|
|
9632
10178
|
/**
|
|
@@ -9635,6 +10181,7 @@ const Methods = {
|
|
|
9635
10181
|
*/
|
|
9636
10182
|
reloadTreeExpand(row) {
|
|
9637
10183
|
const $xeTable = this;
|
|
10184
|
+
const reactData = $xeTable;
|
|
9638
10185
|
const internalData = $xeTable;
|
|
9639
10186
|
const {
|
|
9640
10187
|
treeExpandLazyLoadedMaps
|
|
@@ -9652,8 +10199,9 @@ const Methods = {
|
|
|
9652
10199
|
}).then(() => {
|
|
9653
10200
|
if (transform) {
|
|
9654
10201
|
handleVirtualTreeToList($xeTable);
|
|
9655
|
-
|
|
10202
|
+
$xeTable.handleTableData();
|
|
9656
10203
|
}
|
|
10204
|
+
reactData.treeExpandedFlag++;
|
|
9657
10205
|
}).then(() => {
|
|
9658
10206
|
return $xeTable.recalculate();
|
|
9659
10207
|
});
|
|
@@ -9668,6 +10216,40 @@ const Methods = {
|
|
|
9668
10216
|
// 即将废弃
|
|
9669
10217
|
return $xeTable.reloadTreeExpand(row);
|
|
9670
10218
|
},
|
|
10219
|
+
/**
|
|
10220
|
+
* 行分组事件
|
|
10221
|
+
*/
|
|
10222
|
+
triggerRowGroupExpandEvent(evnt, params) {
|
|
10223
|
+
const $xeTable = this;
|
|
10224
|
+
const internalData = $xeTable;
|
|
10225
|
+
const {
|
|
10226
|
+
rowGroupExpandedMaps
|
|
10227
|
+
} = internalData;
|
|
10228
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
10229
|
+
const {
|
|
10230
|
+
row,
|
|
10231
|
+
column
|
|
10232
|
+
} = params;
|
|
10233
|
+
const {
|
|
10234
|
+
trigger
|
|
10235
|
+
} = rowGroupOpts;
|
|
10236
|
+
if (trigger === 'manual') {
|
|
10237
|
+
return;
|
|
10238
|
+
}
|
|
10239
|
+
evnt.stopPropagation();
|
|
10240
|
+
const rowid = (0, _util.getRowid)($xeTable, row);
|
|
10241
|
+
const expanded = !rowGroupExpandedMaps[rowid];
|
|
10242
|
+
const columnIndex = $xeTable.getColumnIndex(column);
|
|
10243
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
10244
|
+
$xeTable.setRowGroupExpand(row, expanded);
|
|
10245
|
+
$xeTable.dispatchEvent('toggle-row-group-expand', {
|
|
10246
|
+
expanded,
|
|
10247
|
+
column,
|
|
10248
|
+
columnIndex,
|
|
10249
|
+
$columnIndex,
|
|
10250
|
+
row
|
|
10251
|
+
}, evnt);
|
|
10252
|
+
},
|
|
9671
10253
|
/**
|
|
9672
10254
|
* 展开树节点事件
|
|
9673
10255
|
*/
|
|
@@ -9728,11 +10310,15 @@ const Methods = {
|
|
|
9728
10310
|
* @param {Boolean} expanded 是否展开
|
|
9729
10311
|
*/
|
|
9730
10312
|
setAllTreeExpand(expanded) {
|
|
10313
|
+
const $xeTable = this;
|
|
10314
|
+
const reactData = $xeTable;
|
|
10315
|
+
const internalData = $xeTable;
|
|
9731
10316
|
const {
|
|
9732
|
-
tableFullData
|
|
9733
|
-
|
|
9734
|
-
|
|
10317
|
+
tableFullData
|
|
10318
|
+
} = internalData;
|
|
10319
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
9735
10320
|
const {
|
|
10321
|
+
transform,
|
|
9736
10322
|
lazy
|
|
9737
10323
|
} = treeOpts;
|
|
9738
10324
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
@@ -9745,7 +10331,13 @@ const Methods = {
|
|
|
9745
10331
|
}, {
|
|
9746
10332
|
children: childrenField
|
|
9747
10333
|
});
|
|
9748
|
-
return
|
|
10334
|
+
return $xeTable.setTreeExpand(expandeds, expanded).then(() => {
|
|
10335
|
+
if (transform) {
|
|
10336
|
+
handleVirtualTreeToList($xeTable);
|
|
10337
|
+
reactData.treeExpandedFlag++;
|
|
10338
|
+
return $xeTable.recalculate();
|
|
10339
|
+
}
|
|
10340
|
+
});
|
|
9749
10341
|
},
|
|
9750
10342
|
/**
|
|
9751
10343
|
* 设置展开树形节点,二个参数设置这一行展开与否
|
|
@@ -9811,7 +10403,6 @@ const Methods = {
|
|
|
9811
10403
|
} = treeOpts;
|
|
9812
10404
|
const expList = $xeTable.getTreeExpandRecords();
|
|
9813
10405
|
internalData.treeExpandedMaps = {};
|
|
9814
|
-
reactData.treeExpandedFlag++;
|
|
9815
10406
|
if (reserve) {
|
|
9816
10407
|
_xeUtils.default.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), {
|
|
9817
10408
|
children: childrenField
|
|
@@ -9820,8 +10411,9 @@ const Methods = {
|
|
|
9820
10411
|
return $xeTable.handleTableData().then(() => {
|
|
9821
10412
|
if (transform) {
|
|
9822
10413
|
handleVirtualTreeToList($xeTable);
|
|
9823
|
-
|
|
10414
|
+
$xeTable.handleTableData();
|
|
9824
10415
|
}
|
|
10416
|
+
reactData.treeExpandedFlag++;
|
|
9825
10417
|
}).then(() => {
|
|
9826
10418
|
if (expList.length) {
|
|
9827
10419
|
$xeTable.recalculate();
|
|
@@ -10712,27 +11304,37 @@ const Methods = {
|
|
|
10712
11304
|
* @param {Row} row 行对象
|
|
10713
11305
|
*/
|
|
10714
11306
|
scrollToTreeRow(row) {
|
|
11307
|
+
const $xeTable = this;
|
|
11308
|
+
const props = $xeTable;
|
|
11309
|
+
const reactData = $xeTable;
|
|
11310
|
+
const internalData = $xeTable;
|
|
10715
11311
|
const {
|
|
10716
|
-
|
|
10717
|
-
|
|
10718
|
-
|
|
10719
|
-
|
|
10720
|
-
|
|
11312
|
+
treeConfig
|
|
11313
|
+
} = props;
|
|
11314
|
+
const {
|
|
11315
|
+
isRowGroupStatus
|
|
11316
|
+
} = reactData;
|
|
11317
|
+
const {
|
|
11318
|
+
tableFullData
|
|
11319
|
+
} = internalData;
|
|
10721
11320
|
const rests = [];
|
|
10722
|
-
if (treeConfig) {
|
|
10723
|
-
const
|
|
10724
|
-
|
|
11321
|
+
if (treeConfig || isRowGroupStatus) {
|
|
11322
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
11323
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
11324
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
11325
|
+
const matchObj = _xeUtils.default.findTree(tableFullData, item => $xeTable.eqRow(item, row), {
|
|
11326
|
+
children: isRowGroupStatus ? rowGroupOpts.mapChildrenField : childrenField
|
|
10725
11327
|
});
|
|
10726
11328
|
if (matchObj) {
|
|
10727
11329
|
const nodes = matchObj.nodes;
|
|
10728
11330
|
nodes.forEach((row, index) => {
|
|
10729
|
-
if (index < nodes.length - 1 &&
|
|
10730
|
-
rests.push(
|
|
11331
|
+
if (index < nodes.length - 1 && !$xeTable.isTreeExpandByRow(row)) {
|
|
11332
|
+
rests.push($xeTable.setTreeExpand(row, true));
|
|
10731
11333
|
}
|
|
10732
11334
|
});
|
|
10733
11335
|
}
|
|
10734
11336
|
}
|
|
10735
|
-
return Promise.all(rests).then(() => (0, _util.rowToVisible)(
|
|
11337
|
+
return Promise.all(rests).then(() => (0, _util.rowToVisible)($xeTable, row));
|
|
10736
11338
|
},
|
|
10737
11339
|
/**
|
|
10738
11340
|
* 手动清除滚动相关信息,还原到初始状态
|