vxe-table 3.15.5 → 3.15.6
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 +977 -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 +1729 -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 +1158 -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 +1010 -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.1745197894601.ttf} +0 -0
- /package/es/{iconfont.1744880837792.woff → iconfont.1745197894601.woff} +0 -0
- /package/es/{iconfont.1744880837792.woff2 → iconfont.1745197894601.woff2} +0 -0
- /package/lib/{iconfont.1744880837792.ttf → iconfont.1745197894601.ttf} +0 -0
- /package/lib/{iconfont.1744880837792.woff → iconfont.1745197894601.woff} +0 -0
- /package/lib/{iconfont.1744880837792.woff2 → iconfont.1745197894601.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,275 @@ 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.insertRowMaps = {};
|
|
3147
|
+
internalData.removeRowMaps = {};
|
|
3148
|
+
const sYLoad = updateScrollYStatus($xeTable, fullData);
|
|
3149
|
+
reactData.isDragColMove = false;
|
|
3150
|
+
reactData.isDragRowMove = false;
|
|
3151
|
+
// 全量数据
|
|
3152
|
+
internalData.tableFullData = fullData;
|
|
3153
|
+
internalData.tableFullTreeData = isRGroup ? [] : treeData;
|
|
3154
|
+
internalData.tableFullGroupData = isRGroup ? treeData : [];
|
|
3155
|
+
// 缓存数据
|
|
3156
|
+
$xeTable.cacheRowMap(isReset);
|
|
3157
|
+
// 原始数据
|
|
3158
|
+
internalData.tableSynchData = datas;
|
|
3159
|
+
if (isReset) {
|
|
3160
|
+
internalData.isResizeCellHeight = false;
|
|
3161
|
+
}
|
|
3162
|
+
// 克隆原数据,用于显示编辑状态,与编辑值做对比
|
|
3163
|
+
if (keepSource) {
|
|
3164
|
+
$xeTable.cacheSourceMap(fullData);
|
|
3165
|
+
}
|
|
3166
|
+
if ($xeTable.clearCellAreas && props.mouseConfig) {
|
|
3167
|
+
$xeTable.clearCellAreas();
|
|
3168
|
+
$xeTable.clearCopyCellArea();
|
|
3169
|
+
}
|
|
3170
|
+
$xeTable.clearMergeCells();
|
|
3171
|
+
$xeTable.clearMergeFooterItems();
|
|
3172
|
+
$xeTable.handleTableData(true);
|
|
3173
|
+
$xeTable.updateFooter();
|
|
3174
|
+
$xeTable.handleUpdateBodyMerge();
|
|
3175
|
+
return $xeTable.$nextTick().then(() => {
|
|
3176
|
+
updateHeight($xeTable);
|
|
3177
|
+
updateStyle($xeTable);
|
|
3178
|
+
}).then(() => {
|
|
3179
|
+
computeScrollLoad($xeTable);
|
|
3180
|
+
}).then(() => {
|
|
3181
|
+
// 是否启用了虚拟滚动
|
|
3182
|
+
if (sYLoad) {
|
|
3183
|
+
scrollYStore.endIndex = scrollYStore.visibleSize;
|
|
3184
|
+
}
|
|
3185
|
+
if (sYLoad) {
|
|
3186
|
+
if (reactData.expandColumn && expandOpts.mode !== 'fixed') {
|
|
3187
|
+
(0, _log.errLog)('vxe.error.notConflictProp', ['column.type="expand', 'expand-config.mode="fixed"']);
|
|
3188
|
+
}
|
|
3189
|
+
// if (showOverflow) {
|
|
3190
|
+
// if (!rowOpts.height) {
|
|
3191
|
+
// const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false)
|
|
3192
|
+
// if (errColumn) {
|
|
3193
|
+
// errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
|
|
3194
|
+
// }
|
|
3195
|
+
// }
|
|
3196
|
+
// }
|
|
3197
|
+
if (!(props.height || props.maxHeight)) {
|
|
3198
|
+
(0, _log.errLog)('vxe.error.reqProp', ['table.height | table.max-height | table.scroll-y={enabled: false}']);
|
|
3199
|
+
}
|
|
3200
|
+
// if (!props.showOverflow) {
|
|
3201
|
+
// warnLog('vxe.error.reqProp', ['table.show-overflow'])
|
|
3202
|
+
// }
|
|
3203
|
+
if (props.spanMethod) {
|
|
3204
|
+
(0, _log.errLog)('vxe.error.scrollErrProp', ['table.span-method']);
|
|
3205
|
+
}
|
|
3206
|
+
}
|
|
3207
|
+
handleReserveStatus($xeTable);
|
|
3208
|
+
$xeTable.checkSelectionStatus();
|
|
3209
|
+
return new Promise(resolve => {
|
|
3210
|
+
$xeTable.$nextTick().then(() => handleRecalculateLayout($xeTable, false)).then(() => {
|
|
3211
|
+
calcCellHeight($xeTable);
|
|
3212
|
+
updateRowOffsetTop($xeTable);
|
|
3213
|
+
return handleRecalculateLayout($xeTable, false);
|
|
3214
|
+
}).then(() => {
|
|
3215
|
+
let targetScrollLeft = lastScrollLeft;
|
|
3216
|
+
let targetScrollTop = lastScrollTop;
|
|
3217
|
+
const virtualXOpts = $xeTable.computeVirtualXOpts;
|
|
3218
|
+
const virtualYOpts = $xeTable.computeVirtualYOpts;
|
|
3219
|
+
// 是否在更新数据之后自动滚动重置滚动条
|
|
3220
|
+
if (virtualXOpts.scrollToLeftOnChange) {
|
|
3221
|
+
targetScrollLeft = 0;
|
|
3222
|
+
}
|
|
3223
|
+
if (virtualYOpts.scrollToTopOnChange) {
|
|
3224
|
+
targetScrollTop = 0;
|
|
3225
|
+
}
|
|
3226
|
+
reactData.isRowLoading = false;
|
|
3227
|
+
handleRecalculateLayout($xeTable, false);
|
|
3228
|
+
// 是否变更虚拟滚动
|
|
3229
|
+
if (oldScrollYLoad === sYLoad) {
|
|
3230
|
+
(0, _util.restoreScrollLocation)($xeTable, targetScrollLeft, targetScrollTop).then(() => {
|
|
3231
|
+
resolve();
|
|
3232
|
+
});
|
|
3233
|
+
} else {
|
|
3234
|
+
setTimeout(() => {
|
|
3235
|
+
(0, _util.restoreScrollLocation)($xeTable, targetScrollLeft, targetScrollTop).then(() => {
|
|
3236
|
+
resolve();
|
|
3237
|
+
});
|
|
3238
|
+
});
|
|
3239
|
+
}
|
|
3240
|
+
});
|
|
3241
|
+
});
|
|
3242
|
+
});
|
|
3243
|
+
}
|
|
3244
|
+
/**
|
|
3245
|
+
* 处理数据加载默认行为
|
|
2494
3246
|
* 默认执行一次,除非被重置
|
|
2495
3247
|
*/
|
|
2496
3248
|
function handleLoadDefaults($xeTable) {
|
|
@@ -3246,16 +3998,23 @@ const Methods = {
|
|
|
3246
3998
|
clearAll() {
|
|
3247
3999
|
return (0, _util.clearTableAllStatus)(this);
|
|
3248
4000
|
},
|
|
4001
|
+
handleUpdateRowGroup(groupFields) {
|
|
4002
|
+
const $xeTable = this;
|
|
4003
|
+
handleUpdateRowGroup($xeTable, groupFields);
|
|
4004
|
+
},
|
|
3249
4005
|
/**
|
|
3250
4006
|
* 同步 data 数据(即将废弃)
|
|
3251
4007
|
* 如果用了该方法,那么组件将不再记录增删改的状态,只能自行实现对应逻辑
|
|
3252
4008
|
* 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
|
|
3253
4009
|
*/
|
|
3254
4010
|
syncData() {
|
|
4011
|
+
const $xeTable = this;
|
|
4012
|
+
const reactData = $xeTable;
|
|
4013
|
+
const internalData = $xeTable;
|
|
3255
4014
|
(0, _log.errLog)('vxe.error.delFunc', ['syncData', 'getData']);
|
|
3256
|
-
return
|
|
3257
|
-
|
|
3258
|
-
return
|
|
4015
|
+
return $xeTable.$nextTick().then(() => {
|
|
4016
|
+
reactData.tableData = [];
|
|
4017
|
+
return $xeTable.$nextTick().then(() => loadTableData($xeTable, internalData.tableFullData, true));
|
|
3259
4018
|
});
|
|
3260
4019
|
},
|
|
3261
4020
|
/**
|
|
@@ -3303,23 +4062,23 @@ const Methods = {
|
|
|
3303
4062
|
// 是否进行数据处理
|
|
3304
4063
|
if (force) {
|
|
3305
4064
|
// 更新数据,处理筛选和排序
|
|
3306
|
-
|
|
4065
|
+
updateAfterFullData($xeTable);
|
|
3307
4066
|
// 如果为虚拟树,将树结构拍平
|
|
3308
4067
|
fullList = handleVirtualTreeToList($xeTable);
|
|
3309
4068
|
}
|
|
3310
4069
|
const tableData = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
|
|
3311
4070
|
const visibleDataRowIdMaps = {};
|
|
3312
4071
|
tableData.forEach((row, $index) => {
|
|
3313
|
-
const rowid = (0, _util.getRowid)(
|
|
4072
|
+
const rowid = (0, _util.getRowid)($xeTable, row);
|
|
3314
4073
|
const rest = fullDataRowIdData[rowid];
|
|
3315
4074
|
if (rest) {
|
|
3316
4075
|
rest.$index = $index;
|
|
3317
4076
|
}
|
|
3318
4077
|
visibleDataRowIdMaps[rowid] = row;
|
|
3319
4078
|
});
|
|
3320
|
-
|
|
4079
|
+
reactData.tableData = tableData;
|
|
3321
4080
|
internalData.visibleDataRowIdData = visibleDataRowIdMaps;
|
|
3322
|
-
return
|
|
4081
|
+
return $xeTable.$nextTick();
|
|
3323
4082
|
},
|
|
3324
4083
|
/**
|
|
3325
4084
|
* 加载表格数据
|
|
@@ -3327,169 +4086,7 @@ const Methods = {
|
|
|
3327
4086
|
*/
|
|
3328
4087
|
loadTableData(datas, isReset) {
|
|
3329
4088
|
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
|
-
});
|
|
4089
|
+
return loadTableData($xeTable, datas, isReset);
|
|
3493
4090
|
},
|
|
3494
4091
|
/**
|
|
3495
4092
|
* 重新加载数据,不会清空表格状态
|
|
@@ -3500,7 +4097,7 @@ const Methods = {
|
|
|
3500
4097
|
const {
|
|
3501
4098
|
initStatus
|
|
3502
4099
|
} = this;
|
|
3503
|
-
return
|
|
4100
|
+
return loadTableData($xeTable, datas, false).then(() => {
|
|
3504
4101
|
this.inited = true;
|
|
3505
4102
|
this.initStatus = true;
|
|
3506
4103
|
if (!initStatus) {
|
|
@@ -3518,7 +4115,7 @@ const Methods = {
|
|
|
3518
4115
|
return this.clearAll().then(() => {
|
|
3519
4116
|
this.inited = true;
|
|
3520
4117
|
this.initStatus = true;
|
|
3521
|
-
return
|
|
4118
|
+
return loadTableData($xeTable, datas, true);
|
|
3522
4119
|
}).then(() => {
|
|
3523
4120
|
handleLoadDefaults($xeTable);
|
|
3524
4121
|
return this.recalculate();
|
|
@@ -3608,18 +4205,16 @@ const Methods = {
|
|
|
3608
4205
|
const {
|
|
3609
4206
|
treeConfig
|
|
3610
4207
|
} = props;
|
|
4208
|
+
const {
|
|
4209
|
+
isRowGroupStatus
|
|
4210
|
+
} = reactData;
|
|
3611
4211
|
const {
|
|
3612
4212
|
fullAllDataRowIdData,
|
|
3613
4213
|
tableFullData,
|
|
3614
4214
|
tableFullTreeData,
|
|
4215
|
+
tableFullGroupData,
|
|
3615
4216
|
treeExpandedMaps
|
|
3616
4217
|
} = 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
4218
|
const fullAllDataRowIdMaps = isReset ? {} : Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
|
|
3624
4219
|
const fullDataRowIdMaps = {};
|
|
3625
4220
|
const {
|
|
@@ -3657,6 +4252,12 @@ const Methods = {
|
|
|
3657
4252
|
fullAllDataRowIdMaps[rowid] = rowRest;
|
|
3658
4253
|
};
|
|
3659
4254
|
if (treeConfig) {
|
|
4255
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
4256
|
+
const {
|
|
4257
|
+
lazy
|
|
4258
|
+
} = treeOpts;
|
|
4259
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
4260
|
+
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
3660
4261
|
_xeUtils.default.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
|
|
3661
4262
|
const rowid = handleUpdateRowId(row);
|
|
3662
4263
|
if (treeConfig && lazy) {
|
|
@@ -3673,6 +4274,17 @@ const Methods = {
|
|
|
3673
4274
|
}, {
|
|
3674
4275
|
children: childrenField
|
|
3675
4276
|
});
|
|
4277
|
+
} else if (isRowGroupStatus) {
|
|
4278
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
4279
|
+
const {
|
|
4280
|
+
mapChildrenField
|
|
4281
|
+
} = rowGroupOpts;
|
|
4282
|
+
_xeUtils.default.eachTree(tableFullGroupData, (row, index, items, path, parentRow, nodes) => {
|
|
4283
|
+
const rowid = handleUpdateRowId(row);
|
|
4284
|
+
handleRowCache(row, index, items, parentRow ? -1 : index, parentRow, rowid, nodes.length - 1, (0, _util.toTreePathSeq)(path));
|
|
4285
|
+
}, {
|
|
4286
|
+
children: mapChildrenField
|
|
4287
|
+
});
|
|
3676
4288
|
} else {
|
|
3677
4289
|
tableFullData.forEach((row, index, items) => {
|
|
3678
4290
|
handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
|
|
@@ -4501,277 +5113,32 @@ const Methods = {
|
|
|
4501
5113
|
} = checkboxOpts;
|
|
4502
5114
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
4503
5115
|
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
|
|
5116
|
+
if (updateCheckboxFlag) {
|
|
5117
|
+
if (checkField) {
|
|
5118
|
+
if (treeConfig) {
|
|
5119
|
+
const currTableData = isFull ? transform ? tableFullTreeData : tableFullData : transform ? tableFullTreeData : afterFullData;
|
|
5120
|
+
rowList = _xeUtils.default.filterTree(currTableData, row => _xeUtils.default.get(row, checkField), {
|
|
5121
|
+
children: transform ? mapChildrenField : childrenField
|
|
4674
5122
|
});
|
|
4675
|
-
tableData = tableTree;
|
|
4676
5123
|
} else {
|
|
4677
|
-
|
|
4678
|
-
|
|
5124
|
+
const currTableData = isFull ? tableFullData : afterFullData;
|
|
5125
|
+
rowList = currTableData.filter(row => _xeUtils.default.get(row, checkField));
|
|
4679
5126
|
}
|
|
4680
5127
|
} 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;
|
|
5128
|
+
_xeUtils.default.each(selectCheckboxMaps, (row, rowid) => {
|
|
5129
|
+
if (isFull) {
|
|
5130
|
+
if (fullDataRowIdData[rowid]) {
|
|
5131
|
+
rowList.push(fullDataRowIdData[rowid].row);
|
|
5132
|
+
}
|
|
4730
5133
|
} 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]));
|
|
5134
|
+
if (afterFullRowMaps[rowid]) {
|
|
5135
|
+
rowList.push(afterFullRowMaps[rowid]);
|
|
4748
5136
|
}
|
|
4749
|
-
tableData = _xeUtils.default.orderBy(tableData, orderColumns.map(({
|
|
4750
|
-
column,
|
|
4751
|
-
order
|
|
4752
|
-
}) => [getOrderField($xeTable, column), order]));
|
|
4753
5137
|
}
|
|
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
5138
|
});
|
|
4766
|
-
tableData = tableTree;
|
|
4767
|
-
} else {
|
|
4768
|
-
tableData = treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0);
|
|
4769
|
-
tableTree = tableData;
|
|
4770
5139
|
}
|
|
4771
5140
|
}
|
|
4772
|
-
|
|
4773
|
-
internalData.afterTreeFullData = tableTree;
|
|
4774
|
-
updateAfterDataIndex($xeTable);
|
|
5141
|
+
return rowList;
|
|
4775
5142
|
},
|
|
4776
5143
|
/**
|
|
4777
5144
|
* 预编译
|
|
@@ -5155,6 +5522,7 @@ const Methods = {
|
|
|
5155
5522
|
const storeData = getCustomStorageMap(tableId);
|
|
5156
5523
|
if (restoreStore) {
|
|
5157
5524
|
return Promise.resolve(restoreStore({
|
|
5525
|
+
$table: $xeTable,
|
|
5158
5526
|
id: tableId,
|
|
5159
5527
|
type: 'restore',
|
|
5160
5528
|
storeData
|
|
@@ -5230,6 +5598,7 @@ const Methods = {
|
|
|
5230
5598
|
resizableData[colKey] = column.renderWidth;
|
|
5231
5599
|
}
|
|
5232
5600
|
if (isCustomVisible && (!checkMethod || checkMethod({
|
|
5601
|
+
$table: $xeTable,
|
|
5233
5602
|
column
|
|
5234
5603
|
}))) {
|
|
5235
5604
|
if (!column.visible && column.defaultVisible) {
|
|
@@ -5290,6 +5659,7 @@ const Methods = {
|
|
|
5290
5659
|
} : this.getCustomStoreData();
|
|
5291
5660
|
if (updateStore) {
|
|
5292
5661
|
return updateStore({
|
|
5662
|
+
$table: $xeTable,
|
|
5293
5663
|
id: tableId,
|
|
5294
5664
|
type,
|
|
5295
5665
|
storeData
|
|
@@ -6283,8 +6653,7 @@ const Methods = {
|
|
|
6283
6653
|
const hasDeleteKey = keyCode === 46;
|
|
6284
6654
|
const isF2 = keyCode === 113;
|
|
6285
6655
|
const isContextMenu = keyCode === 93;
|
|
6286
|
-
const
|
|
6287
|
-
const hasCtrlKey = evnt.ctrlKey;
|
|
6656
|
+
const isControlKey = (0, _dom.hasControlKey)(evnt);
|
|
6288
6657
|
const hasShiftKey = evnt.shiftKey;
|
|
6289
6658
|
const hasAltKey = evnt.altKey;
|
|
6290
6659
|
const operArrow = isLeftArrow || isUpArrow || isRightArrow || isDwArrow;
|
|
@@ -6350,7 +6719,7 @@ const Methods = {
|
|
|
6350
6719
|
enterMethod
|
|
6351
6720
|
} = keyboardOpts;
|
|
6352
6721
|
// 退出选中
|
|
6353
|
-
if (
|
|
6722
|
+
if (isControlKey) {
|
|
6354
6723
|
// 如果是激活编辑状态,则取消编辑
|
|
6355
6724
|
if (actived.row) {
|
|
6356
6725
|
const params = actived.args;
|
|
@@ -6525,7 +6894,7 @@ const Methods = {
|
|
|
6525
6894
|
};
|
|
6526
6895
|
$xeTable.setTreeExpand(parentRow, false).then(() => $xeTable.scrollToRow(parentRow)).then(() => $xeTable.triggerCurrentRowEvent(evnt, params));
|
|
6527
6896
|
}
|
|
6528
|
-
} else if (keyboardConfig && keyboardOpts.isEdit && !
|
|
6897
|
+
} 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
6898
|
const {
|
|
6530
6899
|
editMethod
|
|
6531
6900
|
} = keyboardOpts;
|
|
@@ -6975,9 +7344,13 @@ const Methods = {
|
|
|
6975
7344
|
const {
|
|
6976
7345
|
treeConfig
|
|
6977
7346
|
} = props;
|
|
7347
|
+
const {
|
|
7348
|
+
isRowGroupStatus
|
|
7349
|
+
} = reactData;
|
|
6978
7350
|
const {
|
|
6979
7351
|
selectCheckboxMaps
|
|
6980
7352
|
} = internalData;
|
|
7353
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
6981
7354
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
6982
7355
|
const {
|
|
6983
7356
|
transform,
|
|
@@ -6997,10 +7370,11 @@ const Methods = {
|
|
|
6997
7370
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
6998
7371
|
if (checkField) {
|
|
6999
7372
|
// 树结构
|
|
7000
|
-
if (treeConfig && !checkStrictly) {
|
|
7373
|
+
if ((treeConfig || isRowGroupStatus) && !checkStrictly) {
|
|
7001
7374
|
// 更新子节点状态
|
|
7002
7375
|
_xeUtils.default.eachTree(rows, row => {
|
|
7003
7376
|
if (isForce || !checkMethod || checkMethod({
|
|
7377
|
+
$table: $xeTable,
|
|
7004
7378
|
row
|
|
7005
7379
|
})) {
|
|
7006
7380
|
_xeUtils.default.set(row, checkField, checked);
|
|
@@ -7018,6 +7392,7 @@ const Methods = {
|
|
|
7018
7392
|
// 列表
|
|
7019
7393
|
rows.forEach(row => {
|
|
7020
7394
|
if (isForce || !checkMethod || checkMethod({
|
|
7395
|
+
$table: $xeTable,
|
|
7021
7396
|
row
|
|
7022
7397
|
})) {
|
|
7023
7398
|
_xeUtils.default.set(row, checkField, checked);
|
|
@@ -7028,32 +7403,58 @@ const Methods = {
|
|
|
7028
7403
|
return;
|
|
7029
7404
|
}
|
|
7030
7405
|
// 树结构
|
|
7031
|
-
if (
|
|
7032
|
-
|
|
7033
|
-
|
|
7034
|
-
|
|
7035
|
-
|
|
7036
|
-
|
|
7037
|
-
|
|
7038
|
-
|
|
7039
|
-
|
|
7040
|
-
|
|
7041
|
-
|
|
7042
|
-
|
|
7406
|
+
if (!checkStrictly) {
|
|
7407
|
+
if (isRowGroupStatus) {
|
|
7408
|
+
// 更新行分组节点状态
|
|
7409
|
+
_xeUtils.default.eachTree(rows, row => {
|
|
7410
|
+
const rowid = handleGetRowId(row);
|
|
7411
|
+
if (isForce || !checkMethod || checkMethod({
|
|
7412
|
+
$table: $xeTable,
|
|
7413
|
+
row
|
|
7414
|
+
})) {
|
|
7415
|
+
if (checked) {
|
|
7416
|
+
selectCheckboxMaps[rowid] = row;
|
|
7417
|
+
} else {
|
|
7418
|
+
if (selectCheckboxMaps[rowid]) {
|
|
7419
|
+
delete selectCheckboxMaps[rowid];
|
|
7420
|
+
}
|
|
7043
7421
|
}
|
|
7422
|
+
handleCheckboxReserveRow($xeTable, row, checked);
|
|
7044
7423
|
}
|
|
7045
|
-
|
|
7046
|
-
|
|
7047
|
-
|
|
7048
|
-
|
|
7049
|
-
|
|
7050
|
-
|
|
7051
|
-
|
|
7424
|
+
}, {
|
|
7425
|
+
children: rowGroupOpts.mapChildrenField
|
|
7426
|
+
});
|
|
7427
|
+
reactData.updateCheckboxFlag++;
|
|
7428
|
+
return;
|
|
7429
|
+
} else if (treeConfig) {
|
|
7430
|
+
// 更新子节点状态
|
|
7431
|
+
_xeUtils.default.eachTree(rows, row => {
|
|
7432
|
+
const rowid = handleGetRowId(row);
|
|
7433
|
+
if (isForce || !checkMethod || checkMethod({
|
|
7434
|
+
$table: $xeTable,
|
|
7435
|
+
row
|
|
7436
|
+
})) {
|
|
7437
|
+
if (checked) {
|
|
7438
|
+
selectCheckboxMaps[rowid] = row;
|
|
7439
|
+
} else {
|
|
7440
|
+
if (selectCheckboxMaps[rowid]) {
|
|
7441
|
+
delete selectCheckboxMaps[rowid];
|
|
7442
|
+
}
|
|
7443
|
+
}
|
|
7444
|
+
handleCheckboxReserveRow($xeTable, row, checked);
|
|
7445
|
+
}
|
|
7446
|
+
}, {
|
|
7447
|
+
children: transform ? mapChildrenField : childrenField
|
|
7448
|
+
});
|
|
7449
|
+
reactData.updateCheckboxFlag++;
|
|
7450
|
+
return;
|
|
7451
|
+
}
|
|
7052
7452
|
}
|
|
7053
7453
|
// 列表
|
|
7054
7454
|
rows.forEach(row => {
|
|
7055
7455
|
const rowid = handleGetRowId(row);
|
|
7056
7456
|
if (isForce || !checkMethod || checkMethod({
|
|
7457
|
+
$table: $xeTable,
|
|
7057
7458
|
row
|
|
7058
7459
|
})) {
|
|
7059
7460
|
if (checked) {
|
|
@@ -7113,10 +7514,17 @@ const Methods = {
|
|
|
7113
7514
|
triggerCheckRowEvent(evnt, params, checked) {
|
|
7114
7515
|
const $xeTable = this;
|
|
7115
7516
|
const props = $xeTable;
|
|
7517
|
+
const reactData = $xeTable;
|
|
7116
7518
|
const internalData = $xeTable;
|
|
7519
|
+
const {
|
|
7520
|
+
treeConfig
|
|
7521
|
+
} = props;
|
|
7117
7522
|
const {
|
|
7118
7523
|
row
|
|
7119
7524
|
} = params;
|
|
7525
|
+
const {
|
|
7526
|
+
isRowGroupStatus
|
|
7527
|
+
} = reactData;
|
|
7120
7528
|
const {
|
|
7121
7529
|
afterFullData
|
|
7122
7530
|
} = internalData;
|
|
@@ -7129,7 +7537,7 @@ const Methods = {
|
|
|
7129
7537
|
return;
|
|
7130
7538
|
}
|
|
7131
7539
|
evnt.stopPropagation();
|
|
7132
|
-
if (checkboxOpts.isShiftKey && evnt.shiftKey && !
|
|
7540
|
+
if (checkboxOpts.isShiftKey && evnt.shiftKey && !(treeConfig || isRowGroupStatus)) {
|
|
7133
7541
|
const checkboxRecords = $xeTable.getCheckboxRecords();
|
|
7134
7542
|
if (checkboxRecords.length) {
|
|
7135
7543
|
const firstRow = checkboxRecords[0];
|
|
@@ -7149,6 +7557,7 @@ const Methods = {
|
|
|
7149
7557
|
}
|
|
7150
7558
|
}
|
|
7151
7559
|
if (!checkMethod || checkMethod({
|
|
7560
|
+
$table: $xeTable,
|
|
7152
7561
|
row
|
|
7153
7562
|
})) {
|
|
7154
7563
|
$xeTable.handleBatchSelectRows([row], checked);
|
|
@@ -7196,14 +7605,16 @@ const Methods = {
|
|
|
7196
7605
|
treeConfig
|
|
7197
7606
|
} = props;
|
|
7198
7607
|
const {
|
|
7608
|
+
isRowGroupStatus
|
|
7609
|
+
} = reactData;
|
|
7610
|
+
const {
|
|
7611
|
+
afterTreeFullData,
|
|
7612
|
+
afterGroupFullData,
|
|
7199
7613
|
selectCheckboxMaps,
|
|
7200
7614
|
treeIndeterminateRowMaps
|
|
7201
7615
|
} = internalData;
|
|
7616
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
7202
7617
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
7203
|
-
const {
|
|
7204
|
-
transform,
|
|
7205
|
-
mapChildrenField
|
|
7206
|
-
} = treeOpts;
|
|
7207
7618
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7208
7619
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
7209
7620
|
const {
|
|
@@ -7211,29 +7622,47 @@ const Methods = {
|
|
|
7211
7622
|
checkStrictly,
|
|
7212
7623
|
checkMethod
|
|
7213
7624
|
} = checkboxOpts;
|
|
7214
|
-
const {
|
|
7215
|
-
afterTreeFullData
|
|
7216
|
-
} = internalData;
|
|
7217
7625
|
if (checkStrictly) {
|
|
7218
7626
|
return;
|
|
7219
7627
|
}
|
|
7220
|
-
|
|
7221
|
-
if (treeConfig) {
|
|
7628
|
+
if (isRowGroupStatus || treeConfig) {
|
|
7222
7629
|
const {
|
|
7223
7630
|
handleGetRowId
|
|
7224
7631
|
} = (0, _util.createHandleGetRowId)($xeTable);
|
|
7225
7632
|
const childRowMaps = {};
|
|
7226
7633
|
const childRowList = [];
|
|
7227
|
-
|
|
7228
|
-
|
|
7229
|
-
const
|
|
7230
|
-
if (
|
|
7231
|
-
|
|
7232
|
-
|
|
7634
|
+
if (isRowGroupStatus) {
|
|
7635
|
+
// 行分组
|
|
7636
|
+
const mapChildrenField = rowGroupOpts.mapChildrenField;
|
|
7637
|
+
if (mapChildrenField) {
|
|
7638
|
+
_xeUtils.default.eachTree(afterGroupFullData, row => {
|
|
7639
|
+
const rowid = handleGetRowId(row);
|
|
7640
|
+
const childList = row[mapChildrenField];
|
|
7641
|
+
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
7642
|
+
childRowMaps[rowid] = 1;
|
|
7643
|
+
childRowList.unshift([row, rowid, childList]);
|
|
7644
|
+
}
|
|
7645
|
+
}, {
|
|
7646
|
+
children: mapChildrenField
|
|
7647
|
+
});
|
|
7233
7648
|
}
|
|
7234
|
-
}
|
|
7235
|
-
|
|
7236
|
-
|
|
7649
|
+
} else if (treeConfig) {
|
|
7650
|
+
// 树结构
|
|
7651
|
+
const {
|
|
7652
|
+
transform,
|
|
7653
|
+
mapChildrenField
|
|
7654
|
+
} = treeOpts;
|
|
7655
|
+
_xeUtils.default.eachTree(afterTreeFullData, row => {
|
|
7656
|
+
const rowid = handleGetRowId(row);
|
|
7657
|
+
const childList = row[transform ? mapChildrenField : childrenField];
|
|
7658
|
+
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
7659
|
+
childRowMaps[rowid] = 1;
|
|
7660
|
+
childRowList.unshift([row, rowid, childList]);
|
|
7661
|
+
}
|
|
7662
|
+
}, {
|
|
7663
|
+
children: transform ? mapChildrenField : childrenField
|
|
7664
|
+
});
|
|
7665
|
+
}
|
|
7237
7666
|
childRowList.forEach(vals => {
|
|
7238
7667
|
const row = vals[0];
|
|
7239
7668
|
const rowid = vals[1];
|
|
@@ -7245,6 +7674,7 @@ const Methods = {
|
|
|
7245
7674
|
const childRowid = handleGetRowId(item);
|
|
7246
7675
|
const isSelect = checkField ? _xeUtils.default.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
7247
7676
|
if (checkMethod({
|
|
7677
|
+
$table: $xeTable,
|
|
7248
7678
|
row: item
|
|
7249
7679
|
})) {
|
|
7250
7680
|
if (isSelect) {
|
|
@@ -7308,9 +7738,13 @@ const Methods = {
|
|
|
7308
7738
|
const {
|
|
7309
7739
|
treeConfig
|
|
7310
7740
|
} = props;
|
|
7741
|
+
const {
|
|
7742
|
+
isRowGroupStatus
|
|
7743
|
+
} = reactData;
|
|
7311
7744
|
const {
|
|
7312
7745
|
afterFullData,
|
|
7313
7746
|
afterTreeFullData,
|
|
7747
|
+
afterGroupFullData,
|
|
7314
7748
|
checkboxReserveRowMap,
|
|
7315
7749
|
selectCheckboxMaps,
|
|
7316
7750
|
treeIndeterminateRowMaps
|
|
@@ -7327,11 +7761,12 @@ const Methods = {
|
|
|
7327
7761
|
let sLen = 0; // 已选
|
|
7328
7762
|
let hLen = 0; // 半选
|
|
7329
7763
|
let vLen = 0; // 有效行
|
|
7330
|
-
const rootList = treeConfig ? afterTreeFullData : afterFullData;
|
|
7764
|
+
const rootList = treeConfig ? afterTreeFullData : isRowGroupStatus ? afterGroupFullData : afterFullData;
|
|
7331
7765
|
rootList.forEach(checkMethod ? row => {
|
|
7332
7766
|
const childRowid = handleGetRowId(row);
|
|
7333
7767
|
const selected = checkField ? _xeUtils.default.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
7334
7768
|
if (checkMethod({
|
|
7769
|
+
$table: $xeTable,
|
|
7335
7770
|
row
|
|
7336
7771
|
})) {
|
|
7337
7772
|
if (selected) {
|
|
@@ -7920,6 +8355,7 @@ const Methods = {
|
|
|
7920
8355
|
const radioOpts = $xeTable.computeRadioOpts;
|
|
7921
8356
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
7922
8357
|
const keyboardOpts = $xeTable.computeKeyboardOpts;
|
|
8358
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
7923
8359
|
const rowOpts = $xeTable.computeRowOpts;
|
|
7924
8360
|
const columnOpts = $xeTable.computeColumnOpts;
|
|
7925
8361
|
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
@@ -7933,7 +8369,8 @@ const Methods = {
|
|
|
7933
8369
|
} = params;
|
|
7934
8370
|
const {
|
|
7935
8371
|
type,
|
|
7936
|
-
treeNode
|
|
8372
|
+
treeNode,
|
|
8373
|
+
rowGroupNode
|
|
7937
8374
|
} = column;
|
|
7938
8375
|
const isRadioType = type === 'radio';
|
|
7939
8376
|
const isCheckboxType = type === 'checkbox';
|
|
@@ -7941,8 +8378,9 @@ const Methods = {
|
|
|
7941
8378
|
const cell = evnt.currentTarget;
|
|
7942
8379
|
const triggerRadio = isRadioType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--radio').flag;
|
|
7943
8380
|
const triggerCheckbox = isCheckboxType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--checkbox').flag;
|
|
7944
|
-
const triggerTreeNode = treeNode && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-tree
|
|
8381
|
+
const triggerTreeNode = treeNode && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--tree-btn').flag;
|
|
7945
8382
|
const triggerExpandNode = isExpandType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-table--expanded').flag;
|
|
8383
|
+
const triggerRowGroupNode = isExpandType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-row-group--node-btn').flag;
|
|
7946
8384
|
params = Object.assign({
|
|
7947
8385
|
cell,
|
|
7948
8386
|
triggerRadio,
|
|
@@ -7959,11 +8397,15 @@ const Methods = {
|
|
|
7959
8397
|
if (treeOpts.trigger === 'row' || treeNode && treeOpts.trigger === 'cell') {
|
|
7960
8398
|
$xeTable.triggerTreeExpandEvent(evnt, params);
|
|
7961
8399
|
}
|
|
8400
|
+
// 如果是行分组
|
|
8401
|
+
if (rowGroupOpts.trigger === 'row' || rowGroupNode && rowGroupOpts.trigger === 'cell') {
|
|
8402
|
+
$xeTable.triggerRowGroupExpandEvent(evnt, params);
|
|
8403
|
+
}
|
|
7962
8404
|
}
|
|
7963
8405
|
// 如果点击了树节点
|
|
7964
8406
|
if (!triggerTreeNode) {
|
|
7965
|
-
if (!triggerExpandNode) {
|
|
7966
|
-
//
|
|
8407
|
+
if (!triggerExpandNode && !triggerRowGroupNode) {
|
|
8408
|
+
// 如果是当前行
|
|
7967
8409
|
if (rowOpts.isCurrent || highlightCurrentRow) {
|
|
7968
8410
|
if (!triggerCheckbox && !triggerRadio) {
|
|
7969
8411
|
$xeTable.triggerCurrentRowEvent(evnt, params);
|
|
@@ -8229,7 +8671,7 @@ const Methods = {
|
|
|
8229
8671
|
const triggerInput = cell && cell.tagName && cell.tagName.toLowerCase() === 'input';
|
|
8230
8672
|
const triggerRadio = isRadioType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--radio').flag;
|
|
8231
8673
|
const triggerCheckbox = isCheckboxType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--checkbox').flag;
|
|
8232
|
-
const triggerTreeNode = treeNode && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-tree
|
|
8674
|
+
const triggerTreeNode = treeNode && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-cell--tree-btn').flag;
|
|
8233
8675
|
const triggerExpandNode = isExpandType && (0, _dom.getEventTargetNode)(evnt, cell, 'vxe-table--expanded').flag;
|
|
8234
8676
|
let isColDragCell = false;
|
|
8235
8677
|
if (rowOpts.drag) {
|
|
@@ -8546,7 +8988,7 @@ const Methods = {
|
|
|
8546
8988
|
evnt.preventDefault();
|
|
8547
8989
|
return;
|
|
8548
8990
|
}
|
|
8549
|
-
const
|
|
8991
|
+
const isControlKey = (0, _dom.hasControlKey)(evnt);
|
|
8550
8992
|
const trEl = evnt.currentTarget;
|
|
8551
8993
|
const rowid = trEl.getAttribute('rowid') || '';
|
|
8552
8994
|
const rest = fullAllDataRowIdData[rowid];
|
|
@@ -8560,10 +9002,10 @@ const Methods = {
|
|
|
8560
9002
|
} = reactData;
|
|
8561
9003
|
const offsetY = evnt.clientY - trEl.getBoundingClientRect().y;
|
|
8562
9004
|
const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom';
|
|
8563
|
-
internalData.prevDragToChild = !!(treeConfig && transform && isToChildDrag &&
|
|
9005
|
+
internalData.prevDragToChild = !!(treeConfig && transform && isToChildDrag && isControlKey);
|
|
8564
9006
|
internalData.prevDragRow = row;
|
|
8565
9007
|
internalData.prevDragPos = dragPos;
|
|
8566
|
-
if ($xeTable.eqRow(dragRow, row) ||
|
|
9008
|
+
if ($xeTable.eqRow(dragRow, row) || isControlKey && treeConfig && lazy && row[hasChildField] && rowRest && !rowRest.treeLoaded || !isCrossDrag && treeConfig && transform && (isPeerDrag ? dragRow[parentField] !== row[parentField] : rest.level)) {
|
|
8567
9009
|
showDropTip($xeTable, evnt, trEl, null, false, dragPos);
|
|
8568
9010
|
return;
|
|
8569
9011
|
}
|
|
@@ -8862,7 +9304,7 @@ const Methods = {
|
|
|
8862
9304
|
evnt.preventDefault();
|
|
8863
9305
|
return;
|
|
8864
9306
|
}
|
|
8865
|
-
const
|
|
9307
|
+
const isControlKey = (0, _dom.hasControlKey)(evnt);
|
|
8866
9308
|
const thEl = evnt.currentTarget;
|
|
8867
9309
|
const colid = thEl.getAttribute('colid');
|
|
8868
9310
|
const column = $xeTable.getColumnById(colid);
|
|
@@ -8873,7 +9315,7 @@ const Methods = {
|
|
|
8873
9315
|
} = evnt;
|
|
8874
9316
|
const offsetX = clientX - thEl.getBoundingClientRect().x;
|
|
8875
9317
|
const dragPos = offsetX < thEl.clientWidth / 2 ? 'left' : 'right';
|
|
8876
|
-
internalData.prevDragToChild = !!(isCrossDrag && isToChildDrag &&
|
|
9318
|
+
internalData.prevDragToChild = !!(isCrossDrag && isToChildDrag && isControlKey);
|
|
8877
9319
|
internalData.prevDragCol = column;
|
|
8878
9320
|
internalData.prevDragPos = dragPos;
|
|
8879
9321
|
if (column.fixed || dragCol && dragCol.id === column.id || !isCrossDrag && (isPeerDrag ? dragCol.parentId !== column.parentId : column.parentId)) {
|
|
@@ -9336,7 +9778,7 @@ const Methods = {
|
|
|
9336
9778
|
const reactData = $xeTable;
|
|
9337
9779
|
const internalData = $xeTable;
|
|
9338
9780
|
const {
|
|
9339
|
-
expandColumn
|
|
9781
|
+
expandColumn
|
|
9340
9782
|
} = reactData;
|
|
9341
9783
|
const {
|
|
9342
9784
|
rowExpandLazyLoadedMaps
|
|
@@ -9356,12 +9798,12 @@ const Methods = {
|
|
|
9356
9798
|
const rowid = (0, _util.getRowid)($xeTable, row);
|
|
9357
9799
|
if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
|
|
9358
9800
|
const expanded = !$xeTable.isRowExpandByRow(row);
|
|
9359
|
-
const columnIndex = $xeTable.getColumnIndex(
|
|
9360
|
-
const $columnIndex = $xeTable.getVMColumnIndex(
|
|
9801
|
+
const columnIndex = expandColumn ? $xeTable.getColumnIndex(expandColumn) : -1;
|
|
9802
|
+
const $columnIndex = expandColumn ? $xeTable.getVMColumnIndex(expandColumn) : -1;
|
|
9361
9803
|
$xeTable.setRowExpand(row, expanded);
|
|
9362
9804
|
$xeTable.dispatchEvent('toggle-row-expand', {
|
|
9363
9805
|
expanded,
|
|
9364
|
-
column,
|
|
9806
|
+
column: expandColumn,
|
|
9365
9807
|
columnIndex,
|
|
9366
9808
|
$columnIndex,
|
|
9367
9809
|
row,
|
|
@@ -9430,8 +9872,8 @@ const Methods = {
|
|
|
9430
9872
|
toggleMethod
|
|
9431
9873
|
} = expandOpts;
|
|
9432
9874
|
const lazyRests = [];
|
|
9433
|
-
const columnIndex = $xeTable.getColumnIndex(expandColumn);
|
|
9434
|
-
const $columnIndex = $xeTable.getVMColumnIndex(expandColumn);
|
|
9875
|
+
const columnIndex = expandColumn ? $xeTable.getColumnIndex(expandColumn) : -1;
|
|
9876
|
+
const $columnIndex = expandColumn ? $xeTable.getVMColumnIndex(expandColumn) : -1;
|
|
9435
9877
|
if (rows) {
|
|
9436
9878
|
if (!_xeUtils.default.isArray(rows)) {
|
|
9437
9879
|
rows = [rows];
|
|
@@ -9555,6 +9997,104 @@ const Methods = {
|
|
|
9555
9997
|
});
|
|
9556
9998
|
return rest;
|
|
9557
9999
|
},
|
|
10000
|
+
setRowGroups(fieldOrColumns) {
|
|
10001
|
+
const $xeTable = this;
|
|
10002
|
+
const props = $xeTable;
|
|
10003
|
+
const internalData = $xeTable;
|
|
10004
|
+
const {
|
|
10005
|
+
rowGroupConfig
|
|
10006
|
+
} = props;
|
|
10007
|
+
if (!rowGroupConfig) {
|
|
10008
|
+
(0, _log.errLog)('vxe.error.reqProp', ['row-group-config']);
|
|
10009
|
+
return $xeTable.$nextTick();
|
|
10010
|
+
}
|
|
10011
|
+
if (fieldOrColumns) {
|
|
10012
|
+
handleUpdateRowGroup($xeTable, (_xeUtils.default.isArray(fieldOrColumns) ? fieldOrColumns : [fieldOrColumns]).map(fieldOrColumn => {
|
|
10013
|
+
return _xeUtils.default.isString(fieldOrColumn) ? fieldOrColumn : fieldOrColumn.field;
|
|
10014
|
+
}));
|
|
10015
|
+
return loadTableData($xeTable, internalData.tableSynchData, true);
|
|
10016
|
+
}
|
|
10017
|
+
return $xeTable.$nextTick();
|
|
10018
|
+
},
|
|
10019
|
+
clearRowGroups() {
|
|
10020
|
+
const $xeTable = this;
|
|
10021
|
+
const props = $xeTable;
|
|
10022
|
+
const internalData = $xeTable;
|
|
10023
|
+
const {
|
|
10024
|
+
rowGroupConfig
|
|
10025
|
+
} = props;
|
|
10026
|
+
if (!rowGroupConfig) {
|
|
10027
|
+
(0, _log.errLog)('vxe.error.reqProp', ['row-group-config']);
|
|
10028
|
+
return $xeTable.$nextTick();
|
|
10029
|
+
}
|
|
10030
|
+
handleUpdateRowGroup($xeTable, []);
|
|
10031
|
+
return loadTableData($xeTable, internalData.tableSynchData, true);
|
|
10032
|
+
},
|
|
10033
|
+
isRowGroupRecord(row) {
|
|
10034
|
+
const $xeTable = this;
|
|
10035
|
+
const reactData = $xeTable;
|
|
10036
|
+
const {
|
|
10037
|
+
isRowGroupStatus
|
|
10038
|
+
} = reactData;
|
|
10039
|
+
return isRowGroupStatus && row.isAggregate;
|
|
10040
|
+
},
|
|
10041
|
+
isRowGroupExpandByRow(row) {
|
|
10042
|
+
const $xeTable = this;
|
|
10043
|
+
const reactData = $xeTable;
|
|
10044
|
+
const internalData = $xeTable;
|
|
10045
|
+
const {
|
|
10046
|
+
rowGroupExpandedFlag
|
|
10047
|
+
} = reactData;
|
|
10048
|
+
const {
|
|
10049
|
+
rowGroupExpandedMaps
|
|
10050
|
+
} = internalData;
|
|
10051
|
+
return !!rowGroupExpandedFlag && !!rowGroupExpandedMaps[(0, _util.getRowid)($xeTable, row)];
|
|
10052
|
+
},
|
|
10053
|
+
setRowGroupExpand(rows, expanded) {
|
|
10054
|
+
const $xeTable = this;
|
|
10055
|
+
if (rows) {
|
|
10056
|
+
if (!_xeUtils.default.isArray(rows)) {
|
|
10057
|
+
rows = [rows];
|
|
10058
|
+
}
|
|
10059
|
+
return handleRowGroupVirtualExpand($xeTable, rows, expanded);
|
|
10060
|
+
}
|
|
10061
|
+
return $xeTable.$nextTick();
|
|
10062
|
+
},
|
|
10063
|
+
setAllRowGroupExpand(expanded) {
|
|
10064
|
+
const $xeTable = this;
|
|
10065
|
+
const reactData = $xeTable;
|
|
10066
|
+
const internalData = $xeTable;
|
|
10067
|
+
const {
|
|
10068
|
+
tableFullGroupData
|
|
10069
|
+
} = internalData;
|
|
10070
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
10071
|
+
const {
|
|
10072
|
+
mapChildrenField
|
|
10073
|
+
} = rowGroupOpts;
|
|
10074
|
+
const rgExpandedMaps = {};
|
|
10075
|
+
if (expanded && mapChildrenField) {
|
|
10076
|
+
_xeUtils.default.eachTree(tableFullGroupData, row => {
|
|
10077
|
+
if (row[mapChildrenField] && row[mapChildrenField].length) {
|
|
10078
|
+
rgExpandedMaps[(0, _util.getRowid)($xeTable, row)] = row;
|
|
10079
|
+
}
|
|
10080
|
+
}, {
|
|
10081
|
+
children: mapChildrenField
|
|
10082
|
+
});
|
|
10083
|
+
}
|
|
10084
|
+
internalData.rowGroupExpandedMaps = rgExpandedMaps;
|
|
10085
|
+
handleVirtualTreeToList($xeTable);
|
|
10086
|
+
reactData.rowGroupExpandedFlag++;
|
|
10087
|
+
return $xeTable.handleTableData();
|
|
10088
|
+
},
|
|
10089
|
+
clearRowGroupExpand() {
|
|
10090
|
+
const $xeTable = this;
|
|
10091
|
+
const reactData = $xeTable;
|
|
10092
|
+
const internalData = $xeTable;
|
|
10093
|
+
internalData.rowGroupExpandedMaps = {};
|
|
10094
|
+
handleVirtualTreeToList($xeTable);
|
|
10095
|
+
reactData.rowGroupExpandedFlag++;
|
|
10096
|
+
return $xeTable.handleTableData();
|
|
10097
|
+
},
|
|
9558
10098
|
getTreeExpandRecords() {
|
|
9559
10099
|
const $xeTable = this;
|
|
9560
10100
|
const internalData = $xeTable;
|
|
@@ -9622,11 +10162,11 @@ const Methods = {
|
|
|
9622
10162
|
});
|
|
9623
10163
|
}
|
|
9624
10164
|
internalData.treeExpandedMaps = {};
|
|
9625
|
-
reactData.treeExpandedFlag++;
|
|
9626
10165
|
if (transform) {
|
|
9627
10166
|
handleVirtualTreeToList($xeTable);
|
|
9628
|
-
|
|
10167
|
+
$xeTable.handleTableData();
|
|
9629
10168
|
}
|
|
10169
|
+
reactData.treeExpandedFlag++;
|
|
9630
10170
|
return $xeTable.$nextTick();
|
|
9631
10171
|
},
|
|
9632
10172
|
/**
|
|
@@ -9635,6 +10175,7 @@ const Methods = {
|
|
|
9635
10175
|
*/
|
|
9636
10176
|
reloadTreeExpand(row) {
|
|
9637
10177
|
const $xeTable = this;
|
|
10178
|
+
const reactData = $xeTable;
|
|
9638
10179
|
const internalData = $xeTable;
|
|
9639
10180
|
const {
|
|
9640
10181
|
treeExpandLazyLoadedMaps
|
|
@@ -9652,8 +10193,9 @@ const Methods = {
|
|
|
9652
10193
|
}).then(() => {
|
|
9653
10194
|
if (transform) {
|
|
9654
10195
|
handleVirtualTreeToList($xeTable);
|
|
9655
|
-
|
|
10196
|
+
$xeTable.handleTableData();
|
|
9656
10197
|
}
|
|
10198
|
+
reactData.treeExpandedFlag++;
|
|
9657
10199
|
}).then(() => {
|
|
9658
10200
|
return $xeTable.recalculate();
|
|
9659
10201
|
});
|
|
@@ -9668,6 +10210,40 @@ const Methods = {
|
|
|
9668
10210
|
// 即将废弃
|
|
9669
10211
|
return $xeTable.reloadTreeExpand(row);
|
|
9670
10212
|
},
|
|
10213
|
+
/**
|
|
10214
|
+
* 行分组事件
|
|
10215
|
+
*/
|
|
10216
|
+
triggerRowGroupExpandEvent(evnt, params) {
|
|
10217
|
+
const $xeTable = this;
|
|
10218
|
+
const internalData = $xeTable;
|
|
10219
|
+
const {
|
|
10220
|
+
rowGroupExpandedMaps
|
|
10221
|
+
} = internalData;
|
|
10222
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
10223
|
+
const {
|
|
10224
|
+
row,
|
|
10225
|
+
column
|
|
10226
|
+
} = params;
|
|
10227
|
+
const {
|
|
10228
|
+
trigger
|
|
10229
|
+
} = rowGroupOpts;
|
|
10230
|
+
if (trigger === 'manual') {
|
|
10231
|
+
return;
|
|
10232
|
+
}
|
|
10233
|
+
evnt.stopPropagation();
|
|
10234
|
+
const rowid = (0, _util.getRowid)($xeTable, row);
|
|
10235
|
+
const expanded = !rowGroupExpandedMaps[rowid];
|
|
10236
|
+
const columnIndex = $xeTable.getColumnIndex(column);
|
|
10237
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
10238
|
+
$xeTable.setRowGroupExpand(row, expanded);
|
|
10239
|
+
$xeTable.dispatchEvent('toggle-row-group-expand', {
|
|
10240
|
+
expanded,
|
|
10241
|
+
column,
|
|
10242
|
+
columnIndex,
|
|
10243
|
+
$columnIndex,
|
|
10244
|
+
row
|
|
10245
|
+
}, evnt);
|
|
10246
|
+
},
|
|
9671
10247
|
/**
|
|
9672
10248
|
* 展开树节点事件
|
|
9673
10249
|
*/
|
|
@@ -9728,11 +10304,15 @@ const Methods = {
|
|
|
9728
10304
|
* @param {Boolean} expanded 是否展开
|
|
9729
10305
|
*/
|
|
9730
10306
|
setAllTreeExpand(expanded) {
|
|
10307
|
+
const $xeTable = this;
|
|
10308
|
+
const reactData = $xeTable;
|
|
10309
|
+
const internalData = $xeTable;
|
|
9731
10310
|
const {
|
|
9732
|
-
tableFullData
|
|
9733
|
-
|
|
9734
|
-
|
|
10311
|
+
tableFullData
|
|
10312
|
+
} = internalData;
|
|
10313
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
9735
10314
|
const {
|
|
10315
|
+
transform,
|
|
9736
10316
|
lazy
|
|
9737
10317
|
} = treeOpts;
|
|
9738
10318
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
@@ -9745,7 +10325,13 @@ const Methods = {
|
|
|
9745
10325
|
}, {
|
|
9746
10326
|
children: childrenField
|
|
9747
10327
|
});
|
|
9748
|
-
return
|
|
10328
|
+
return $xeTable.setTreeExpand(expandeds, expanded).then(() => {
|
|
10329
|
+
if (transform) {
|
|
10330
|
+
handleVirtualTreeToList($xeTable);
|
|
10331
|
+
reactData.treeExpandedFlag++;
|
|
10332
|
+
return $xeTable.recalculate();
|
|
10333
|
+
}
|
|
10334
|
+
});
|
|
9749
10335
|
},
|
|
9750
10336
|
/**
|
|
9751
10337
|
* 设置展开树形节点,二个参数设置这一行展开与否
|
|
@@ -9811,7 +10397,6 @@ const Methods = {
|
|
|
9811
10397
|
} = treeOpts;
|
|
9812
10398
|
const expList = $xeTable.getTreeExpandRecords();
|
|
9813
10399
|
internalData.treeExpandedMaps = {};
|
|
9814
|
-
reactData.treeExpandedFlag++;
|
|
9815
10400
|
if (reserve) {
|
|
9816
10401
|
_xeUtils.default.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), {
|
|
9817
10402
|
children: childrenField
|
|
@@ -9820,8 +10405,9 @@ const Methods = {
|
|
|
9820
10405
|
return $xeTable.handleTableData().then(() => {
|
|
9821
10406
|
if (transform) {
|
|
9822
10407
|
handleVirtualTreeToList($xeTable);
|
|
9823
|
-
|
|
10408
|
+
$xeTable.handleTableData();
|
|
9824
10409
|
}
|
|
10410
|
+
reactData.treeExpandedFlag++;
|
|
9825
10411
|
}).then(() => {
|
|
9826
10412
|
if (expList.length) {
|
|
9827
10413
|
$xeTable.recalculate();
|
|
@@ -10712,27 +11298,37 @@ const Methods = {
|
|
|
10712
11298
|
* @param {Row} row 行对象
|
|
10713
11299
|
*/
|
|
10714
11300
|
scrollToTreeRow(row) {
|
|
11301
|
+
const $xeTable = this;
|
|
11302
|
+
const props = $xeTable;
|
|
11303
|
+
const reactData = $xeTable;
|
|
11304
|
+
const internalData = $xeTable;
|
|
10715
11305
|
const {
|
|
10716
|
-
|
|
10717
|
-
|
|
10718
|
-
|
|
10719
|
-
|
|
10720
|
-
|
|
11306
|
+
treeConfig
|
|
11307
|
+
} = props;
|
|
11308
|
+
const {
|
|
11309
|
+
isRowGroupStatus
|
|
11310
|
+
} = reactData;
|
|
11311
|
+
const {
|
|
11312
|
+
tableFullData
|
|
11313
|
+
} = internalData;
|
|
10721
11314
|
const rests = [];
|
|
10722
|
-
if (treeConfig) {
|
|
10723
|
-
const
|
|
10724
|
-
|
|
11315
|
+
if (treeConfig || isRowGroupStatus) {
|
|
11316
|
+
const rowGroupOpts = $xeTable.computeRowGroupOpts;
|
|
11317
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
11318
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
11319
|
+
const matchObj = _xeUtils.default.findTree(tableFullData, item => $xeTable.eqRow(item, row), {
|
|
11320
|
+
children: isRowGroupStatus ? rowGroupOpts.mapChildrenField : childrenField
|
|
10725
11321
|
});
|
|
10726
11322
|
if (matchObj) {
|
|
10727
11323
|
const nodes = matchObj.nodes;
|
|
10728
11324
|
nodes.forEach((row, index) => {
|
|
10729
|
-
if (index < nodes.length - 1 &&
|
|
10730
|
-
rests.push(
|
|
11325
|
+
if (index < nodes.length - 1 && !$xeTable.isTreeExpandByRow(row)) {
|
|
11326
|
+
rests.push($xeTable.setTreeExpand(row, true));
|
|
10731
11327
|
}
|
|
10732
11328
|
});
|
|
10733
11329
|
}
|
|
10734
11330
|
}
|
|
10735
|
-
return Promise.all(rests).then(() => (0, _util.rowToVisible)(
|
|
11331
|
+
return Promise.all(rests).then(() => (0, _util.rowToVisible)($xeTable, row));
|
|
10736
11332
|
},
|
|
10737
11333
|
/**
|
|
10738
11334
|
* 手动清除滚动相关信息,还原到初始状态
|