vxe-table 3.14.0-beta.20 → 3.14.0-beta.21
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/style.css +1 -1
- package/es/table/module/edit/mixin.js +14 -9
- package/es/table/module/validator/mixin.js +2 -2
- package/es/table/src/body.js +10 -10
- package/es/table/src/cell.js +15 -11
- package/es/table/src/methods.js +509 -458
- package/es/table/src/table.js +46 -26
- package/es/table/src/util.js +2 -2
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/lib/index.umd.js +761 -670
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/table/module/edit/mixin.js +16 -11
- package/lib/table/module/edit/mixin.min.js +1 -1
- package/lib/table/module/validator/mixin.js +3 -3
- package/lib/table/module/validator/mixin.min.js +1 -1
- package/lib/table/src/body.js +16 -11
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/cell.js +22 -13
- package/lib/table/src/cell.min.js +1 -1
- package/lib/table/src/methods.js +623 -559
- package/lib/table/src/methods.min.js +1 -1
- package/lib/table/src/table.js +51 -25
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +2 -2
- package/lib/table/src/util.min.js +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/package.json +2 -2
- package/packages/table/module/edit/mixin.ts +17 -12
- package/packages/table/module/validator/mixin.ts +2 -2
- package/packages/table/src/body.ts +10 -10
- package/packages/table/src/cell.ts +15 -11
- package/packages/table/src/methods.ts +559 -481
- package/packages/table/src/table.ts +53 -31
- package/packages/table/src/util.ts +2 -2
- /package/es/{iconfont.1742353673989.ttf → iconfont.1742437924038.ttf} +0 -0
- /package/es/{iconfont.1742353673989.woff → iconfont.1742437924038.woff} +0 -0
- /package/es/{iconfont.1742353673989.woff2 → iconfont.1742437924038.woff2} +0 -0
- /package/lib/{iconfont.1742353673989.ttf → iconfont.1742437924038.ttf} +0 -0
- /package/lib/{iconfont.1742353673989.woff → iconfont.1742437924038.woff} +0 -0
- /package/lib/{iconfont.1742353673989.woff2 → iconfont.1742437924038.woff2} +0 -0
package/es/table/src/methods.js
CHANGED
|
@@ -318,9 +318,10 @@ function updateAfterListIndex($xeTable) {
|
|
|
318
318
|
const internalData = $xeTable;
|
|
319
319
|
const { treeConfig } = props;
|
|
320
320
|
const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData;
|
|
321
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
321
322
|
const fullMaps = {};
|
|
322
323
|
afterFullData.forEach((row, index) => {
|
|
323
|
-
const rowid =
|
|
324
|
+
const rowid = handleGetRowId(row);
|
|
324
325
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
325
326
|
const seq = index + 1;
|
|
326
327
|
if (rowRest) {
|
|
@@ -352,8 +353,9 @@ function updateAfterDataIndex($xeTable) {
|
|
|
352
353
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
353
354
|
const fullMaps = {};
|
|
354
355
|
if (treeConfig) {
|
|
356
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
355
357
|
XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
|
|
356
|
-
const rowid =
|
|
358
|
+
const rowid = handleGetRowId(row);
|
|
357
359
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
358
360
|
const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('');
|
|
359
361
|
if (rowRest) {
|
|
@@ -380,19 +382,18 @@ function updateAfterDataIndex($xeTable) {
|
|
|
380
382
|
*/
|
|
381
383
|
function handleVirtualTreeToList($xeTable) {
|
|
382
384
|
const props = $xeTable;
|
|
383
|
-
const reactData = $xeTable;
|
|
384
385
|
const internalData = $xeTable;
|
|
385
386
|
const { treeConfig } = props;
|
|
386
|
-
const { treeExpandedMaps } =
|
|
387
|
-
const { fullAllDataRowIdData } = internalData;
|
|
387
|
+
const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
|
|
388
388
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
389
389
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
390
390
|
if (treeConfig && treeOpts.transform) {
|
|
391
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
391
392
|
const fullData = [];
|
|
392
393
|
const expandMaps = {};
|
|
393
394
|
XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
|
|
394
|
-
const rowid =
|
|
395
|
-
const parentRowid =
|
|
395
|
+
const rowid = handleGetRowId(row);
|
|
396
|
+
const parentRowid = handleGetRowId(parentRow);
|
|
396
397
|
if (!parentRow || (expandMaps[parentRowid] && treeExpandedMaps[parentRowid])) {
|
|
397
398
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
398
399
|
if (rowRest) {
|
|
@@ -814,8 +815,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
814
815
|
const reactData = $xeTable;
|
|
815
816
|
const internalData = $xeTable;
|
|
816
817
|
const { treeConfig } = props;
|
|
817
|
-
const { selectCheckboxMaps } =
|
|
818
|
-
const { afterFullData, checkboxReserveRowMap } = internalData;
|
|
818
|
+
const { afterFullData, checkboxReserveRowMap, selectCheckboxMaps } = internalData;
|
|
819
819
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
820
820
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
821
821
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
@@ -832,7 +832,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
832
832
|
const checkValFn = (row) => {
|
|
833
833
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
834
834
|
if (checked) {
|
|
835
|
-
selectRowMaps[
|
|
835
|
+
selectRowMaps[handleGetRowId(row)] = row;
|
|
836
836
|
}
|
|
837
837
|
XEUtils.set(row, checkField, checked);
|
|
838
838
|
}
|
|
@@ -931,10 +931,10 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
931
931
|
afterFullData.forEach((row) => handleCheckboxReserveRow($xeTable, row, false));
|
|
932
932
|
}
|
|
933
933
|
}
|
|
934
|
-
reactData.
|
|
934
|
+
reactData.updateCheckboxFlag++;
|
|
935
|
+
internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
|
|
935
936
|
reactData.isAllSelected = checked;
|
|
936
937
|
reactData.isIndeterminate = false;
|
|
937
|
-
reactData.treeIndeterminateMaps = {};
|
|
938
938
|
internalData.treeIndeterminateRowMaps = {};
|
|
939
939
|
$xeTable.checkSelectionStatus();
|
|
940
940
|
return $xeTable.$nextTick();
|
|
@@ -945,8 +945,8 @@ function handleReserveStatus($xeTable) {
|
|
|
945
945
|
const reactData = $xeTable;
|
|
946
946
|
const internalData = $xeTable;
|
|
947
947
|
const { treeConfig } = props;
|
|
948
|
-
const { expandColumn, currentRow,
|
|
949
|
-
const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData;
|
|
948
|
+
const { expandColumn, currentRow, selectRadioRow } = reactData;
|
|
949
|
+
const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow, selectCheckboxMaps, treeExpandedMaps, rowExpandedMaps } = internalData;
|
|
950
950
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
951
951
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
952
952
|
const radioOpts = $xeTable.computeRadioOpts;
|
|
@@ -963,7 +963,8 @@ function handleReserveStatus($xeTable) {
|
|
|
963
963
|
}
|
|
964
964
|
}
|
|
965
965
|
// 复选框
|
|
966
|
-
|
|
966
|
+
internalData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
|
|
967
|
+
reactData.updateCheckboxFlag++;
|
|
967
968
|
// 还原保留选中状态
|
|
968
969
|
if (checkboxOpts.reserve) {
|
|
969
970
|
handleCheckedCheckboxRow($xeTable, handleReserveRow($xeTable, internalData.checkboxReserveRowMap), true, true);
|
|
@@ -972,17 +973,161 @@ function handleReserveStatus($xeTable) {
|
|
|
972
973
|
reactData.currentRow = null; // 刷新当前行状态
|
|
973
974
|
}
|
|
974
975
|
// 行展开
|
|
975
|
-
|
|
976
|
+
internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
|
|
977
|
+
reactData.rowExpandedFlag++;
|
|
976
978
|
// 还原保留状态
|
|
977
979
|
if (expandColumn && expandOpts.reserve) {
|
|
978
980
|
$xeTable.setRowExpand(handleReserveRow($xeTable, internalData.rowExpandedReserveRowMap), true);
|
|
979
981
|
}
|
|
980
982
|
// 树展开
|
|
981
|
-
|
|
983
|
+
internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
|
|
984
|
+
reactData.treeExpandedFlag++;
|
|
982
985
|
if (treeConfig && treeOpts.reserve) {
|
|
983
986
|
$xeTable.setTreeExpand(handleReserveRow($xeTable, internalData.treeExpandedReserveRowMap), true);
|
|
984
987
|
}
|
|
985
988
|
}
|
|
989
|
+
/**
|
|
990
|
+
* 处理默认展开树节点
|
|
991
|
+
*/
|
|
992
|
+
const handleDefaultTreeExpand = ($xeTable) => {
|
|
993
|
+
const props = $xeTable;
|
|
994
|
+
const internalData = $xeTable;
|
|
995
|
+
const { treeConfig } = props;
|
|
996
|
+
if (treeConfig) {
|
|
997
|
+
const { tableFullData } = internalData;
|
|
998
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
999
|
+
const { expandAll, expandRowKeys } = treeOpts;
|
|
1000
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
1001
|
+
if (expandAll) {
|
|
1002
|
+
$xeTable.setAllTreeExpand(true);
|
|
1003
|
+
}
|
|
1004
|
+
else if (expandRowKeys) {
|
|
1005
|
+
const defExpandeds = [];
|
|
1006
|
+
const rowkey = getRowkey($xeTable);
|
|
1007
|
+
expandRowKeys.forEach((rowid) => {
|
|
1008
|
+
const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
|
|
1009
|
+
if (matchObj) {
|
|
1010
|
+
defExpandeds.push(matchObj.item);
|
|
1011
|
+
}
|
|
1012
|
+
});
|
|
1013
|
+
$xeTable.setTreeExpand(defExpandeds, true);
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
};
|
|
1017
|
+
const handleAsyncTreeExpandChilds = ($xeTable, row) => {
|
|
1018
|
+
const reactData = $xeTable;
|
|
1019
|
+
const internalData = $xeTable;
|
|
1020
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
1021
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
1022
|
+
const { transform, loadMethod } = treeOpts;
|
|
1023
|
+
const { checkStrictly } = checkboxOpts;
|
|
1024
|
+
return new Promise(resolve => {
|
|
1025
|
+
if (loadMethod) {
|
|
1026
|
+
const { fullAllDataRowIdData, treeExpandLazyLoadedMaps } = internalData;
|
|
1027
|
+
const rowid = getRowid($xeTable, row);
|
|
1028
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
1029
|
+
treeExpandLazyLoadedMaps[rowid] = row;
|
|
1030
|
+
Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
|
|
1031
|
+
if (rowRest) {
|
|
1032
|
+
rowRest.treeLoaded = true;
|
|
1033
|
+
}
|
|
1034
|
+
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
1035
|
+
delete treeExpandLazyLoadedMaps[rowid];
|
|
1036
|
+
}
|
|
1037
|
+
if (!XEUtils.isArray(childRecords)) {
|
|
1038
|
+
childRecords = [];
|
|
1039
|
+
}
|
|
1040
|
+
if (childRecords) {
|
|
1041
|
+
return $xeTable.loadTreeChildren(row, childRecords).then(childRows => {
|
|
1042
|
+
const { treeExpandedMaps } = internalData;
|
|
1043
|
+
if (childRows.length && !treeExpandedMaps[rowid]) {
|
|
1044
|
+
treeExpandedMaps[rowid] = row;
|
|
1045
|
+
}
|
|
1046
|
+
reactData.treeExpandedFlag++;
|
|
1047
|
+
// 如果当前节点已选中,则展开后子节点也被选中
|
|
1048
|
+
if (!checkStrictly && $xeTable.isCheckedByCheckboxRow(row)) {
|
|
1049
|
+
handleCheckedCheckboxRow($xeTable, childRows, true);
|
|
1050
|
+
}
|
|
1051
|
+
return $xeTable.$nextTick().then(() => {
|
|
1052
|
+
if (transform) {
|
|
1053
|
+
$xeTable.handleTableData();
|
|
1054
|
+
updateAfterDataIndex($xeTable);
|
|
1055
|
+
return $xeTable.$nextTick();
|
|
1056
|
+
}
|
|
1057
|
+
});
|
|
1058
|
+
});
|
|
1059
|
+
}
|
|
1060
|
+
}).catch(() => {
|
|
1061
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
1062
|
+
if (rowRest) {
|
|
1063
|
+
rowRest.treeLoaded = false;
|
|
1064
|
+
}
|
|
1065
|
+
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
1066
|
+
delete treeExpandLazyLoadedMaps[rowid];
|
|
1067
|
+
}
|
|
1068
|
+
}).finally(() => {
|
|
1069
|
+
reactData.treeExpandedFlag++;
|
|
1070
|
+
$xeTable.$nextTick().then(() => $xeTable.recalculate()).then(() => resolve());
|
|
1071
|
+
});
|
|
1072
|
+
}
|
|
1073
|
+
else {
|
|
1074
|
+
resolve();
|
|
1075
|
+
}
|
|
1076
|
+
});
|
|
1077
|
+
};
|
|
1078
|
+
const handleTreeExpandReserve = ($xeTable, row, expanded) => {
|
|
1079
|
+
const internalData = $xeTable;
|
|
1080
|
+
const { treeExpandedReserveRowMap } = internalData;
|
|
1081
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
1082
|
+
if (treeOpts.reserve) {
|
|
1083
|
+
const rowid = getRowid($xeTable, row);
|
|
1084
|
+
if (expanded) {
|
|
1085
|
+
treeExpandedReserveRowMap[rowid] = row;
|
|
1086
|
+
}
|
|
1087
|
+
else if (treeExpandedReserveRowMap[rowid]) {
|
|
1088
|
+
delete treeExpandedReserveRowMap[rowid];
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
};
|
|
1092
|
+
const handleAsyncRowExpand = ($xeTable, row) => {
|
|
1093
|
+
const reactData = $xeTable;
|
|
1094
|
+
const internalData = $xeTable;
|
|
1095
|
+
return new Promise(resolve => {
|
|
1096
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
1097
|
+
const { loadMethod } = expandOpts;
|
|
1098
|
+
if (loadMethod) {
|
|
1099
|
+
const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
|
|
1100
|
+
const rowid = getRowid($xeTable, row);
|
|
1101
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
1102
|
+
rowExpandLazyLoadedMaps[rowid] = row;
|
|
1103
|
+
loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
|
|
1104
|
+
const { rowExpandedMaps } = internalData;
|
|
1105
|
+
if (rowRest) {
|
|
1106
|
+
rowRest.expandLoaded = true;
|
|
1107
|
+
}
|
|
1108
|
+
rowExpandedMaps[rowid] = row;
|
|
1109
|
+
reactData.rowExpandedFlag++;
|
|
1110
|
+
}).catch(() => {
|
|
1111
|
+
if (rowRest) {
|
|
1112
|
+
rowRest.expandLoaded = false;
|
|
1113
|
+
}
|
|
1114
|
+
}).finally(() => {
|
|
1115
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
1116
|
+
if (rowExpandLazyLoadedMaps[rowid]) {
|
|
1117
|
+
delete rowExpandLazyLoadedMaps[rowid];
|
|
1118
|
+
}
|
|
1119
|
+
reactData.rowExpandedFlag++;
|
|
1120
|
+
$xeTable.$nextTick()
|
|
1121
|
+
.then(() => $xeTable.recalculate())
|
|
1122
|
+
.then(() => $xeTable.updateCellAreas())
|
|
1123
|
+
.then(() => resolve());
|
|
1124
|
+
});
|
|
1125
|
+
}
|
|
1126
|
+
else {
|
|
1127
|
+
resolve();
|
|
1128
|
+
}
|
|
1129
|
+
});
|
|
1130
|
+
};
|
|
986
1131
|
function calcVarRowHeightConfig($xeTable, sizeKey, sizeEl) {
|
|
987
1132
|
const reactData = $xeTable;
|
|
988
1133
|
const { rowHeightStore } = reactData;
|
|
@@ -1045,12 +1190,13 @@ function handleVirtualYVisible($xeTable) {
|
|
|
1045
1190
|
visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1;
|
|
1046
1191
|
}
|
|
1047
1192
|
else {
|
|
1193
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1048
1194
|
let leftIndex = 0;
|
|
1049
1195
|
let rightIndex = afterFullData.length;
|
|
1050
1196
|
while (leftIndex < rightIndex) {
|
|
1051
1197
|
const rIndex = Math.floor((leftIndex + rightIndex) / 2);
|
|
1052
1198
|
const row = afterFullData[rIndex];
|
|
1053
|
-
const rowid =
|
|
1199
|
+
const rowid = handleGetRowId(row);
|
|
1054
1200
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
1055
1201
|
if (rowRest.oTop <= startTop) {
|
|
1056
1202
|
leftIndex = rIndex + 1;
|
|
@@ -1062,7 +1208,7 @@ function handleVirtualYVisible($xeTable) {
|
|
|
1062
1208
|
toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0);
|
|
1063
1209
|
for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
1064
1210
|
const row = afterFullData[rIndex];
|
|
1065
|
-
const rowid =
|
|
1211
|
+
const rowid = handleGetRowId(row);
|
|
1066
1212
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
1067
1213
|
visibleSize++;
|
|
1068
1214
|
if (rowRest.oTop > endTop || visibleSize >= 100) {
|
|
@@ -1092,9 +1238,12 @@ function calculateMergerOffsetIndex(list, offsetItem, type) {
|
|
|
1092
1238
|
}
|
|
1093
1239
|
}
|
|
1094
1240
|
}
|
|
1095
|
-
function setMerges(
|
|
1241
|
+
function setMerges($xeTable, merges, mList, rowList) {
|
|
1242
|
+
const props = $xeTable;
|
|
1243
|
+
const internalData = $xeTable;
|
|
1096
1244
|
if (merges) {
|
|
1097
|
-
const { treeConfig
|
|
1245
|
+
const { treeConfig } = props;
|
|
1246
|
+
const { visibleColumn } = internalData;
|
|
1098
1247
|
if (!XEUtils.isArray(merges)) {
|
|
1099
1248
|
merges = [merges];
|
|
1100
1249
|
}
|
|
@@ -1140,10 +1289,13 @@ function setMerges(_vm, merges, mList, rowList) {
|
|
|
1140
1289
|
});
|
|
1141
1290
|
}
|
|
1142
1291
|
}
|
|
1143
|
-
function removeMerges(
|
|
1292
|
+
function removeMerges($xeTable, merges, mList, rowList) {
|
|
1293
|
+
const props = $xeTable;
|
|
1294
|
+
const internalData = $xeTable;
|
|
1144
1295
|
const rest = [];
|
|
1145
1296
|
if (merges) {
|
|
1146
|
-
const { treeConfig
|
|
1297
|
+
const { treeConfig } = props;
|
|
1298
|
+
const { visibleColumn } = internalData;
|
|
1147
1299
|
if (!XEUtils.isArray(merges)) {
|
|
1148
1300
|
merges = [merges];
|
|
1149
1301
|
}
|
|
@@ -1350,8 +1502,9 @@ const calcCellHeight = ($xeTable) => {
|
|
|
1350
1502
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
1351
1503
|
const el = $xeTable.$refs.refElem;
|
|
1352
1504
|
if (!isAllOverflow && scrollYLoad && el) {
|
|
1505
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1353
1506
|
tableData.forEach(row => {
|
|
1354
|
-
const rowid =
|
|
1507
|
+
const rowid = handleGetRowId(row);
|
|
1355
1508
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
1356
1509
|
if (rowRest) {
|
|
1357
1510
|
const height = calcCellAutoHeight(rowRest, el);
|
|
@@ -1998,6 +2151,35 @@ function loadScrollYData($xeTable) {
|
|
|
1998
2151
|
}
|
|
1999
2152
|
}
|
|
2000
2153
|
}
|
|
2154
|
+
const createGetRowCacheProp = (prop) => {
|
|
2155
|
+
return function (row) {
|
|
2156
|
+
const $xeTable = this;
|
|
2157
|
+
const internalData = $xeTable;
|
|
2158
|
+
const { fullAllDataRowIdData } = internalData;
|
|
2159
|
+
if (row) {
|
|
2160
|
+
const rowid = getRowid($xeTable, row);
|
|
2161
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
2162
|
+
if (rowRest) {
|
|
2163
|
+
return rowRest[prop];
|
|
2164
|
+
}
|
|
2165
|
+
}
|
|
2166
|
+
return -1;
|
|
2167
|
+
};
|
|
2168
|
+
};
|
|
2169
|
+
const createGetColumnCacheProp = (prop) => {
|
|
2170
|
+
return function (column) {
|
|
2171
|
+
const $xeTable = this;
|
|
2172
|
+
const internalData = $xeTable;
|
|
2173
|
+
const { fullColumnIdData } = internalData;
|
|
2174
|
+
if (column) {
|
|
2175
|
+
const colRest = fullColumnIdData[column.id];
|
|
2176
|
+
if (colRest) {
|
|
2177
|
+
return colRest[prop];
|
|
2178
|
+
}
|
|
2179
|
+
}
|
|
2180
|
+
return -1;
|
|
2181
|
+
};
|
|
2182
|
+
};
|
|
2001
2183
|
function lazyScrollXData($xeTable) {
|
|
2002
2184
|
const internalData = $xeTable;
|
|
2003
2185
|
const { lxTimeout, lxRunTime, scrollXStore } = internalData;
|
|
@@ -2155,7 +2337,7 @@ function calcCellWidth($xeTable) {
|
|
|
2155
2337
|
}
|
|
2156
2338
|
function handleUpdateColResize($xeTable, evnt, params) {
|
|
2157
2339
|
$xeTable.analyColumnWidth();
|
|
2158
|
-
$xeTable.recalculate(
|
|
2340
|
+
$xeTable.recalculate().then(() => {
|
|
2159
2341
|
$xeTable.saveCustomStore('update:width');
|
|
2160
2342
|
$xeTable.updateCellAreas();
|
|
2161
2343
|
$xeTable.dispatchEvent('column-resizable-change', params, evnt);
|
|
@@ -2167,7 +2349,7 @@ function handleUpdateColResize($xeTable, evnt, params) {
|
|
|
2167
2349
|
function handleUpdateRowResize($xeTable, evnt, params) {
|
|
2168
2350
|
const reactData = $xeTable;
|
|
2169
2351
|
reactData.resizeHeightFlag++;
|
|
2170
|
-
$xeTable.recalculate(
|
|
2352
|
+
$xeTable.recalculate().then(() => {
|
|
2171
2353
|
$xeTable.updateCellAreas();
|
|
2172
2354
|
$xeTable.dispatchEvent('row-resizable-change', params, evnt);
|
|
2173
2355
|
setTimeout(() => $xeTable.recalculate(true), 300);
|
|
@@ -2188,16 +2370,17 @@ function updateColumnOffsetLeft($xeTable) {
|
|
|
2188
2370
|
function updateRowOffsetTop($xeTable) {
|
|
2189
2371
|
const reactData = $xeTable;
|
|
2190
2372
|
const internalData = $xeTable;
|
|
2191
|
-
const { expandColumn
|
|
2192
|
-
const { afterFullData, fullAllDataRowIdData } = internalData;
|
|
2373
|
+
const { expandColumn } = reactData;
|
|
2374
|
+
const { afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
2193
2375
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
2194
2376
|
const rowOpts = $xeTable.computeRowOpts;
|
|
2195
2377
|
const cellOpts = $xeTable.computeCellOpts;
|
|
2196
2378
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
2379
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
2197
2380
|
let offsetTop = 0;
|
|
2198
2381
|
for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
2199
2382
|
const row = afterFullData[rIndex];
|
|
2200
|
-
const rowid =
|
|
2383
|
+
const rowid = handleGetRowId(row);
|
|
2201
2384
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
2202
2385
|
rowRest.oTop = offsetTop;
|
|
2203
2386
|
offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
|
|
@@ -2210,47 +2393,43 @@ function updateRowOffsetTop($xeTable) {
|
|
|
2210
2393
|
function updateRowExpandStyle($xeTable) {
|
|
2211
2394
|
const reactData = $xeTable;
|
|
2212
2395
|
const internalData = $xeTable;
|
|
2213
|
-
const { expandColumn, scrollYLoad,
|
|
2396
|
+
const { expandColumn, scrollYLoad, scrollYTop, isScrollYBig } = reactData;
|
|
2214
2397
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
2215
2398
|
const rowOpts = $xeTable.computeRowOpts;
|
|
2216
2399
|
const cellOpts = $xeTable.computeCellOpts;
|
|
2217
2400
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
2218
2401
|
const { mode } = expandOpts;
|
|
2219
2402
|
if (expandColumn && mode === 'fixed') {
|
|
2220
|
-
const { elemStore,
|
|
2403
|
+
const { elemStore, fullAllDataRowIdData } = internalData;
|
|
2221
2404
|
const rowExpandEl = $xeTable.$refs.refRowExpandElem;
|
|
2222
2405
|
const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
|
|
2223
2406
|
if (rowExpandEl && bodyScrollElem) {
|
|
2224
2407
|
let isUpdateHeight = false;
|
|
2225
|
-
if (scrollYLoad) {
|
|
2226
|
-
let offsetTop = 0;
|
|
2227
|
-
for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
2228
|
-
const row = afterFullData[rIndex];
|
|
2229
|
-
const rowid = getRowid($xeTable, row);
|
|
2230
|
-
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
2231
|
-
rowRest.oTop = offsetTop;
|
|
2232
|
-
offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
|
|
2233
|
-
// 是否展开行
|
|
2234
|
-
if (expandColumn && rowExpandedMaps[rowid]) {
|
|
2235
|
-
offsetTop += rowRest.expandHeight || expandOpts.height || 0;
|
|
2236
|
-
}
|
|
2237
|
-
}
|
|
2238
|
-
}
|
|
2239
2408
|
XEUtils.arrayEach(rowExpandEl.children, reEl => {
|
|
2240
2409
|
const expandEl = reEl;
|
|
2241
2410
|
const rowid = expandEl.getAttribute('rowid') || '';
|
|
2242
2411
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
2243
2412
|
if (rowRest) {
|
|
2244
2413
|
const expandHeight = expandEl.offsetHeight + 1;
|
|
2414
|
+
const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
|
|
2415
|
+
let offsetTop = 0;
|
|
2245
2416
|
if (scrollYLoad) {
|
|
2246
|
-
|
|
2417
|
+
if (isScrollYBig && trEl) {
|
|
2418
|
+
offsetTop = trEl.offsetTop + trEl.offsetHeight;
|
|
2419
|
+
}
|
|
2420
|
+
else {
|
|
2421
|
+
offsetTop = rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight);
|
|
2422
|
+
}
|
|
2247
2423
|
}
|
|
2248
2424
|
else {
|
|
2249
|
-
const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
|
|
2250
2425
|
if (trEl) {
|
|
2251
|
-
|
|
2426
|
+
offsetTop = trEl.offsetTop + trEl.offsetHeight;
|
|
2252
2427
|
}
|
|
2253
2428
|
}
|
|
2429
|
+
if (isScrollYBig) {
|
|
2430
|
+
offsetTop += scrollYTop;
|
|
2431
|
+
}
|
|
2432
|
+
expandEl.style.top = toCssUnit(offsetTop);
|
|
2254
2433
|
if (!isUpdateHeight) {
|
|
2255
2434
|
if (rowRest.expandHeight !== expandHeight) {
|
|
2256
2435
|
isUpdateHeight = true;
|
|
@@ -2261,6 +2440,9 @@ function updateRowExpandStyle($xeTable) {
|
|
|
2261
2440
|
});
|
|
2262
2441
|
if (isUpdateHeight) {
|
|
2263
2442
|
reactData.rowExpandHeightFlag++;
|
|
2443
|
+
$xeTable.$nextTick(() => {
|
|
2444
|
+
updateRowOffsetTop($xeTable);
|
|
2445
|
+
});
|
|
2264
2446
|
}
|
|
2265
2447
|
}
|
|
2266
2448
|
}
|
|
@@ -2654,15 +2836,13 @@ const Methods = {
|
|
|
2654
2836
|
const reactData = $xeTable;
|
|
2655
2837
|
const internalData = $xeTable;
|
|
2656
2838
|
const { treeConfig } = props;
|
|
2657
|
-
const { treeExpandedMaps } =
|
|
2658
|
-
const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData;
|
|
2839
|
+
const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData;
|
|
2659
2840
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
2660
2841
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2661
2842
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
2662
2843
|
const { lazy } = treeOpts;
|
|
2663
2844
|
const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
|
|
2664
2845
|
const fullDataRowIdMaps = {};
|
|
2665
|
-
const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
|
|
2666
2846
|
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2667
2847
|
const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
|
|
2668
2848
|
let rowRest = fullAllDataRowIdMaps[rowid];
|
|
@@ -2684,13 +2864,12 @@ const Methods = {
|
|
|
2684
2864
|
XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
|
|
2685
2865
|
const rowid = handleUpdateRowId(row);
|
|
2686
2866
|
if (treeConfig && lazy) {
|
|
2687
|
-
const treeExpRest = treeTempExpandedMaps[rowid];
|
|
2688
2867
|
if (row[hasChildField] && row[childrenField] === undefined) {
|
|
2689
2868
|
row[childrenField] = null;
|
|
2690
2869
|
}
|
|
2691
|
-
if (
|
|
2870
|
+
if (treeExpandedMaps[rowid]) {
|
|
2692
2871
|
if (!row[childrenField] || !row[childrenField].length) {
|
|
2693
|
-
delete
|
|
2872
|
+
delete treeExpandedMaps[rowid];
|
|
2694
2873
|
}
|
|
2695
2874
|
}
|
|
2696
2875
|
}
|
|
@@ -2704,7 +2883,7 @@ const Methods = {
|
|
|
2704
2883
|
}
|
|
2705
2884
|
internalData.fullDataRowIdData = fullDataRowIdMaps;
|
|
2706
2885
|
internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
|
|
2707
|
-
reactData.
|
|
2886
|
+
reactData.treeExpandedFlag++;
|
|
2708
2887
|
},
|
|
2709
2888
|
cacheSourceMap(fullData) {
|
|
2710
2889
|
const $xeTable = this;
|
|
@@ -2815,47 +2994,22 @@ const Methods = {
|
|
|
2815
2994
|
* 根据 row 获取序号
|
|
2816
2995
|
* @param {Row} row 行对象
|
|
2817
2996
|
*/
|
|
2818
|
-
getRowSeq(
|
|
2819
|
-
const { fullAllDataRowIdData } = this;
|
|
2820
|
-
if (row) {
|
|
2821
|
-
const rowid = getRowid(this, row);
|
|
2822
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2823
|
-
if (rest) {
|
|
2824
|
-
return rest.seq;
|
|
2825
|
-
}
|
|
2826
|
-
}
|
|
2827
|
-
return -1;
|
|
2828
|
-
},
|
|
2997
|
+
getRowSeq: createGetRowCacheProp('seq'),
|
|
2829
2998
|
/**
|
|
2830
2999
|
* 根据 row 获取相对于 data 中的索引
|
|
2831
3000
|
* @param {Row} row 行对象
|
|
2832
3001
|
*/
|
|
2833
|
-
getRowIndex(
|
|
2834
|
-
const { fullAllDataRowIdData } = this;
|
|
2835
|
-
if (row) {
|
|
2836
|
-
const rowid = getRowid(this, row);
|
|
2837
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2838
|
-
if (rest) {
|
|
2839
|
-
return rest.index;
|
|
2840
|
-
}
|
|
2841
|
-
}
|
|
2842
|
-
return -1;
|
|
2843
|
-
},
|
|
3002
|
+
getRowIndex: createGetRowCacheProp('index'),
|
|
2844
3003
|
/**
|
|
2845
3004
|
* 根据 row 获取相对于当前数据中的索引
|
|
2846
3005
|
* @param {Row} row 行对象
|
|
2847
3006
|
*/
|
|
2848
|
-
getVTRowIndex(
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
return rest._index;
|
|
2855
|
-
}
|
|
2856
|
-
}
|
|
2857
|
-
return -1;
|
|
2858
|
-
},
|
|
3007
|
+
getVTRowIndex: createGetRowCacheProp('_index'),
|
|
3008
|
+
/**
|
|
3009
|
+
* 根据 row 获取渲染中的虚拟索引
|
|
3010
|
+
* @param {Row} row 行对象
|
|
3011
|
+
*/
|
|
3012
|
+
getVMRowIndex: createGetRowCacheProp('$index'),
|
|
2859
3013
|
// 在 v3 中废弃
|
|
2860
3014
|
_getRowIndex(row) {
|
|
2861
3015
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2863,21 +3017,6 @@ const Methods = {
|
|
|
2863
3017
|
}
|
|
2864
3018
|
return this.getVTRowIndex(row);
|
|
2865
3019
|
},
|
|
2866
|
-
/**
|
|
2867
|
-
* 根据 row 获取渲染中的虚拟索引
|
|
2868
|
-
* @param {Row} row 行对象
|
|
2869
|
-
*/
|
|
2870
|
-
getVMRowIndex(row) {
|
|
2871
|
-
const { fullAllDataRowIdData } = this;
|
|
2872
|
-
if (row) {
|
|
2873
|
-
const rowid = getRowid(this, row);
|
|
2874
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2875
|
-
if (rest) {
|
|
2876
|
-
return rest.$index;
|
|
2877
|
-
}
|
|
2878
|
-
}
|
|
2879
|
-
return -1;
|
|
2880
|
-
},
|
|
2881
3020
|
// 在 v3 中废弃
|
|
2882
3021
|
$getRowIndex(row) {
|
|
2883
3022
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2889,30 +3028,17 @@ const Methods = {
|
|
|
2889
3028
|
* 根据 column 获取相对于 columns 中的索引
|
|
2890
3029
|
* @param {ColumnInfo} column 列配置
|
|
2891
3030
|
*/
|
|
2892
|
-
getColumnIndex(
|
|
2893
|
-
const { fullColumnIdData } = this;
|
|
2894
|
-
if (column) {
|
|
2895
|
-
const rest = fullColumnIdData[column.id];
|
|
2896
|
-
if (rest) {
|
|
2897
|
-
return rest.index;
|
|
2898
|
-
}
|
|
2899
|
-
}
|
|
2900
|
-
return -1;
|
|
2901
|
-
},
|
|
3031
|
+
getColumnIndex: createGetColumnCacheProp('index'),
|
|
2902
3032
|
/**
|
|
2903
3033
|
* 根据 column 获取相对于当前表格列中的索引
|
|
2904
3034
|
* @param {ColumnInfo} column 列配置
|
|
2905
3035
|
*/
|
|
2906
|
-
getVTColumnIndex(
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
}
|
|
2913
|
-
}
|
|
2914
|
-
return -1;
|
|
2915
|
-
},
|
|
3036
|
+
getVTColumnIndex: createGetColumnCacheProp('_index'),
|
|
3037
|
+
/**
|
|
3038
|
+
* 根据 column 获取渲染中的虚拟索引
|
|
3039
|
+
* @param {ColumnInfo} column 列配置
|
|
3040
|
+
*/
|
|
3041
|
+
getVMColumnIndex: createGetColumnCacheProp('$index'),
|
|
2916
3042
|
// 在 v3 中废弃
|
|
2917
3043
|
_getColumnIndex(column) {
|
|
2918
3044
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2920,20 +3046,6 @@ const Methods = {
|
|
|
2920
3046
|
}
|
|
2921
3047
|
return this.getVTColumnIndex(column);
|
|
2922
3048
|
},
|
|
2923
|
-
/**
|
|
2924
|
-
* 根据 column 获取渲染中的虚拟索引
|
|
2925
|
-
* @param {ColumnInfo} column 列配置
|
|
2926
|
-
*/
|
|
2927
|
-
getVMColumnIndex(column) {
|
|
2928
|
-
const { fullColumnIdData } = this;
|
|
2929
|
-
if (column) {
|
|
2930
|
-
const rest = fullColumnIdData[column.id];
|
|
2931
|
-
if (rest) {
|
|
2932
|
-
return rest.$index;
|
|
2933
|
-
}
|
|
2934
|
-
}
|
|
2935
|
-
return -1;
|
|
2936
|
-
},
|
|
2937
3049
|
// 在 v3 中废弃
|
|
2938
3050
|
$getColumnIndex(column) {
|
|
2939
3051
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -3032,6 +3144,7 @@ const Methods = {
|
|
|
3032
3144
|
const removeTempMaps = Object.assign({}, editStore.removeMaps);
|
|
3033
3145
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3034
3146
|
const { transform } = treeOpts;
|
|
3147
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
3035
3148
|
if (!keepSource) {
|
|
3036
3149
|
if (process.env.NODE_ENV === 'development') {
|
|
3037
3150
|
errLog('vxe.error.reqProp', ['keep-source']);
|
|
@@ -3050,7 +3163,7 @@ const Methods = {
|
|
|
3050
3163
|
let reDelFlag = false;
|
|
3051
3164
|
if (targetRows.length) {
|
|
3052
3165
|
targetRows.forEach((item) => {
|
|
3053
|
-
const rowid =
|
|
3166
|
+
const rowid = handleGetRowId(item);
|
|
3054
3167
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
3055
3168
|
if (rowRest) {
|
|
3056
3169
|
const row = rowRest.row;
|
|
@@ -3434,11 +3547,9 @@ const Methods = {
|
|
|
3434
3547
|
getCheckboxRecords(isFull) {
|
|
3435
3548
|
const $xeTable = this;
|
|
3436
3549
|
const props = $xeTable;
|
|
3437
|
-
const reactData = $xeTable;
|
|
3438
3550
|
const internalData = $xeTable;
|
|
3439
3551
|
const { treeConfig } = props;
|
|
3440
|
-
const { selectCheckboxMaps } =
|
|
3441
|
-
const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData;
|
|
3552
|
+
const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
|
|
3442
3553
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3443
3554
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
3444
3555
|
const { transform, mapChildrenField } = treeOpts;
|
|
@@ -3771,6 +3882,7 @@ const Methods = {
|
|
|
3771
3882
|
* 默认执行一次,除非被重置
|
|
3772
3883
|
*/
|
|
3773
3884
|
handleLoadDefaults() {
|
|
3885
|
+
const $xeTable = this;
|
|
3774
3886
|
if (this.checkboxConfig) {
|
|
3775
3887
|
this.handleDefaultSelectionChecked();
|
|
3776
3888
|
}
|
|
@@ -3781,7 +3893,7 @@ const Methods = {
|
|
|
3781
3893
|
this.handleDefaultRowExpand();
|
|
3782
3894
|
}
|
|
3783
3895
|
if (this.treeConfig) {
|
|
3784
|
-
|
|
3896
|
+
handleDefaultTreeExpand($xeTable);
|
|
3785
3897
|
}
|
|
3786
3898
|
if (this.mergeCells) {
|
|
3787
3899
|
this.handleDefaultMergeCells();
|
|
@@ -4597,12 +4709,13 @@ const Methods = {
|
|
|
4597
4709
|
const $xeTable = this;
|
|
4598
4710
|
const internalData = $xeTable;
|
|
4599
4711
|
const { fullAllDataRowIdData, afterFullData } = internalData;
|
|
4712
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4600
4713
|
const rowOpts = $xeTable.computeRowOpts;
|
|
4601
4714
|
const cellOpts = $xeTable.computeCellOpts;
|
|
4602
4715
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
4603
4716
|
const rest = {};
|
|
4604
4717
|
afterFullData.forEach(row => {
|
|
4605
|
-
const rowid =
|
|
4718
|
+
const rowid = handleGetRowId(row);
|
|
4606
4719
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4607
4720
|
if (rowRest) {
|
|
4608
4721
|
const resizeHeight = rowRest.resizeHeight;
|
|
@@ -4629,8 +4742,9 @@ const Methods = {
|
|
|
4629
4742
|
rHeight = Math.floor(rHeight * bodyHeight);
|
|
4630
4743
|
}
|
|
4631
4744
|
if (rHeight) {
|
|
4745
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4632
4746
|
rows.forEach(row => {
|
|
4633
|
-
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row :
|
|
4747
|
+
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row);
|
|
4634
4748
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4635
4749
|
if (rowRest) {
|
|
4636
4750
|
rowRest.resizeHeight = rHeight;
|
|
@@ -5477,11 +5591,15 @@ const Methods = {
|
|
|
5477
5591
|
* 获取复选框半选状态的行数据
|
|
5478
5592
|
*/
|
|
5479
5593
|
getCheckboxIndeterminateRecords(isFull) {
|
|
5480
|
-
const
|
|
5594
|
+
const $xeTable = this;
|
|
5595
|
+
const props = $xeTable;
|
|
5596
|
+
const internalData = $xeTable;
|
|
5597
|
+
const { treeConfig } = props;
|
|
5598
|
+
const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData;
|
|
5481
5599
|
if (treeConfig) {
|
|
5482
5600
|
const fullRest = [];
|
|
5483
5601
|
const defRest = [];
|
|
5484
|
-
XEUtils.each(
|
|
5602
|
+
XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
|
|
5485
5603
|
if (item) {
|
|
5486
5604
|
fullRest.push(item);
|
|
5487
5605
|
if (fullDataRowIdData[rowid]) {
|
|
@@ -5551,20 +5669,22 @@ const Methods = {
|
|
|
5551
5669
|
isCheckedByCheckboxRow(row) {
|
|
5552
5670
|
const $xeTable = this;
|
|
5553
5671
|
const reactData = $xeTable;
|
|
5554
|
-
const
|
|
5672
|
+
const internalData = $xeTable;
|
|
5673
|
+
const { updateCheckboxFlag } = reactData;
|
|
5674
|
+
const { selectCheckboxMaps } = internalData;
|
|
5555
5675
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5556
5676
|
const { checkField } = checkboxOpts;
|
|
5557
5677
|
if (checkField) {
|
|
5558
5678
|
return XEUtils.get(row, checkField);
|
|
5559
5679
|
}
|
|
5560
|
-
return !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5680
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5561
5681
|
},
|
|
5562
5682
|
isCheckedByCheckboxRowKey(rowid) {
|
|
5563
5683
|
const $xeTable = this;
|
|
5564
5684
|
const reactData = $xeTable;
|
|
5565
5685
|
const internalData = $xeTable;
|
|
5566
|
-
const {
|
|
5567
|
-
const { fullAllDataRowIdData } = internalData;
|
|
5686
|
+
const { updateCheckboxFlag } = reactData;
|
|
5687
|
+
const { fullAllDataRowIdData, selectCheckboxMaps } = internalData;
|
|
5568
5688
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5569
5689
|
const { checkField } = checkboxOpts;
|
|
5570
5690
|
if (checkField) {
|
|
@@ -5574,19 +5694,19 @@ const Methods = {
|
|
|
5574
5694
|
}
|
|
5575
5695
|
return false;
|
|
5576
5696
|
}
|
|
5577
|
-
return !!selectCheckboxMaps[rowid];
|
|
5697
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
|
|
5578
5698
|
},
|
|
5579
5699
|
isIndeterminateByCheckboxRow(row) {
|
|
5580
5700
|
const $xeTable = this;
|
|
5581
|
-
const
|
|
5582
|
-
const {
|
|
5583
|
-
return !!
|
|
5701
|
+
const internalData = $xeTable;
|
|
5702
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5703
|
+
return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
|
|
5584
5704
|
},
|
|
5585
5705
|
isIndeterminateByCheckboxRowKey(rowid) {
|
|
5586
5706
|
const $xeTable = this;
|
|
5587
|
-
const
|
|
5588
|
-
const {
|
|
5589
|
-
return !!
|
|
5707
|
+
const internalData = $xeTable;
|
|
5708
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5709
|
+
return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
|
|
5590
5710
|
},
|
|
5591
5711
|
/**
|
|
5592
5712
|
* 切换选中
|
|
@@ -5596,9 +5716,9 @@ const Methods = {
|
|
|
5596
5716
|
const $xeTable = this;
|
|
5597
5717
|
const props = $xeTable;
|
|
5598
5718
|
const reactData = $xeTable;
|
|
5719
|
+
const internalData = $xeTable;
|
|
5599
5720
|
const { treeConfig } = props;
|
|
5600
|
-
const { selectCheckboxMaps } =
|
|
5601
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5721
|
+
const { selectCheckboxMaps } = internalData;
|
|
5602
5722
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5603
5723
|
const { transform, mapChildrenField } = treeOpts;
|
|
5604
5724
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
@@ -5620,19 +5740,17 @@ const Methods = {
|
|
|
5620
5740
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5621
5741
|
}
|
|
5622
5742
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5623
|
-
reactData.
|
|
5743
|
+
reactData.updateCheckboxFlag++;
|
|
5624
5744
|
return;
|
|
5625
5745
|
}
|
|
5626
|
-
|
|
5627
|
-
|
|
5628
|
-
|
|
5629
|
-
|
|
5630
|
-
|
|
5631
|
-
|
|
5632
|
-
|
|
5633
|
-
|
|
5634
|
-
}
|
|
5635
|
-
reactData.selectCheckboxMaps = selectRowMaps;
|
|
5746
|
+
// 列表
|
|
5747
|
+
rows.forEach(row => {
|
|
5748
|
+
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5749
|
+
XEUtils.set(row, checkField, checked);
|
|
5750
|
+
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5751
|
+
}
|
|
5752
|
+
});
|
|
5753
|
+
reactData.updateCheckboxFlag++;
|
|
5636
5754
|
return;
|
|
5637
5755
|
}
|
|
5638
5756
|
// 树结构
|
|
@@ -5642,17 +5760,17 @@ const Methods = {
|
|
|
5642
5760
|
const rowid = handleGetRowId(row);
|
|
5643
5761
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5644
5762
|
if (checked) {
|
|
5645
|
-
|
|
5763
|
+
selectCheckboxMaps[rowid] = row;
|
|
5646
5764
|
}
|
|
5647
5765
|
else {
|
|
5648
|
-
if (
|
|
5649
|
-
delete
|
|
5766
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5767
|
+
delete selectCheckboxMaps[rowid];
|
|
5650
5768
|
}
|
|
5651
5769
|
}
|
|
5652
5770
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5653
5771
|
}
|
|
5654
5772
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5655
|
-
reactData.
|
|
5773
|
+
reactData.updateCheckboxFlag++;
|
|
5656
5774
|
return;
|
|
5657
5775
|
}
|
|
5658
5776
|
// 列表
|
|
@@ -5660,19 +5778,19 @@ const Methods = {
|
|
|
5660
5778
|
const rowid = handleGetRowId(row);
|
|
5661
5779
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5662
5780
|
if (checked) {
|
|
5663
|
-
if (!
|
|
5664
|
-
|
|
5781
|
+
if (!selectCheckboxMaps[rowid]) {
|
|
5782
|
+
selectCheckboxMaps[rowid] = row;
|
|
5665
5783
|
}
|
|
5666
5784
|
}
|
|
5667
5785
|
else {
|
|
5668
|
-
if (
|
|
5669
|
-
delete
|
|
5786
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5787
|
+
delete selectCheckboxMaps[rowid];
|
|
5670
5788
|
}
|
|
5671
5789
|
}
|
|
5672
5790
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5791
|
+
reactData.updateCheckboxFlag++;
|
|
5673
5792
|
}
|
|
5674
5793
|
});
|
|
5675
|
-
reactData.selectCheckboxMaps = selectRowMaps;
|
|
5676
5794
|
},
|
|
5677
5795
|
/**
|
|
5678
5796
|
* 即将移除
|
|
@@ -5684,8 +5802,8 @@ const Methods = {
|
|
|
5684
5802
|
},
|
|
5685
5803
|
handleToggleCheckRowEvent(evnt, params) {
|
|
5686
5804
|
const $xeTable = this;
|
|
5687
|
-
const
|
|
5688
|
-
const { selectCheckboxMaps } =
|
|
5805
|
+
const internalData = $xeTable;
|
|
5806
|
+
const { selectCheckboxMaps } = internalData;
|
|
5689
5807
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5690
5808
|
const { checkField, trigger } = checkboxOpts;
|
|
5691
5809
|
const { row } = params;
|
|
@@ -5697,18 +5815,19 @@ const Methods = {
|
|
|
5697
5815
|
checked = !XEUtils.get(row, checkField);
|
|
5698
5816
|
}
|
|
5699
5817
|
else {
|
|
5700
|
-
checked = !selectCheckboxMaps[getRowid(
|
|
5818
|
+
checked = !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5701
5819
|
}
|
|
5702
5820
|
if (evnt) {
|
|
5703
5821
|
$xeTable.triggerCheckRowEvent(evnt, params, checked);
|
|
5704
5822
|
}
|
|
5705
5823
|
else {
|
|
5706
|
-
$xeTable.handleBatchSelectRows(
|
|
5824
|
+
$xeTable.handleBatchSelectRows([row], checked);
|
|
5707
5825
|
$xeTable.checkSelectionStatus();
|
|
5708
5826
|
}
|
|
5709
5827
|
},
|
|
5710
5828
|
triggerCheckRowEvent(evnt, params, checked) {
|
|
5711
5829
|
const $xeTable = this;
|
|
5830
|
+
const props = $xeTable;
|
|
5712
5831
|
const internalData = $xeTable;
|
|
5713
5832
|
const { row } = params;
|
|
5714
5833
|
const { afterFullData } = internalData;
|
|
@@ -5718,7 +5837,7 @@ const Methods = {
|
|
|
5718
5837
|
return;
|
|
5719
5838
|
}
|
|
5720
5839
|
evnt.stopPropagation();
|
|
5721
|
-
if (checkboxOpts.isShiftKey && evnt.shiftKey && !
|
|
5840
|
+
if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
|
|
5722
5841
|
const checkboxRecords = $xeTable.getCheckboxRecords();
|
|
5723
5842
|
if (checkboxRecords.length) {
|
|
5724
5843
|
const firstRow = checkboxRecords[0];
|
|
@@ -5727,14 +5846,16 @@ const Methods = {
|
|
|
5727
5846
|
if (_rowIndex !== _firstRowIndex) {
|
|
5728
5847
|
$xeTable.setAllCheckboxRow(false);
|
|
5729
5848
|
const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
|
|
5730
|
-
|
|
5849
|
+
$xeTable.$nextTick(() => {
|
|
5850
|
+
handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
|
|
5851
|
+
});
|
|
5731
5852
|
$xeTable.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
|
|
5732
5853
|
return;
|
|
5733
5854
|
}
|
|
5734
5855
|
}
|
|
5735
5856
|
}
|
|
5736
5857
|
if (!checkMethod || checkMethod({ row })) {
|
|
5737
|
-
$xeTable.handleBatchSelectRows(
|
|
5858
|
+
$xeTable.handleBatchSelectRows([row], checked);
|
|
5738
5859
|
$xeTable.checkSelectionStatus();
|
|
5739
5860
|
$xeTable.dispatchEvent('checkbox-change', Object.assign({
|
|
5740
5861
|
records: () => $xeTable.getCheckboxRecords(),
|
|
@@ -5749,7 +5870,9 @@ const Methods = {
|
|
|
5749
5870
|
*/
|
|
5750
5871
|
toggleCheckboxRow(row) {
|
|
5751
5872
|
const $xeTable = this;
|
|
5752
|
-
const
|
|
5873
|
+
const internalData = $xeTable;
|
|
5874
|
+
const { selectCheckboxMaps } = internalData;
|
|
5875
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5753
5876
|
const { checkField } = checkboxOpts;
|
|
5754
5877
|
const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5755
5878
|
$xeTable.handleBatchSelectRows([row], checked, true);
|
|
@@ -5770,9 +5893,7 @@ const Methods = {
|
|
|
5770
5893
|
const reactData = $xeTable;
|
|
5771
5894
|
const internalData = $xeTable;
|
|
5772
5895
|
const { treeConfig } = props;
|
|
5773
|
-
const { selectCheckboxMaps,
|
|
5774
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5775
|
-
const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
|
|
5896
|
+
const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5776
5897
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5777
5898
|
const { transform, mapChildrenField } = treeOpts;
|
|
5778
5899
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
@@ -5805,12 +5926,12 @@ const Methods = {
|
|
|
5805
5926
|
childList.forEach(checkMethod
|
|
5806
5927
|
? (item) => {
|
|
5807
5928
|
const childRowid = handleGetRowId(item);
|
|
5808
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5929
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5809
5930
|
if (checkMethod({ row: item })) {
|
|
5810
5931
|
if (isSelect) {
|
|
5811
5932
|
sLen++;
|
|
5812
5933
|
}
|
|
5813
|
-
else if (
|
|
5934
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5814
5935
|
hLen++;
|
|
5815
5936
|
}
|
|
5816
5937
|
vLen++;
|
|
@@ -5819,18 +5940,18 @@ const Methods = {
|
|
|
5819
5940
|
if (isSelect) {
|
|
5820
5941
|
sLen++;
|
|
5821
5942
|
}
|
|
5822
|
-
else if (
|
|
5943
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5823
5944
|
hLen++;
|
|
5824
5945
|
}
|
|
5825
5946
|
}
|
|
5826
5947
|
}
|
|
5827
5948
|
: item => {
|
|
5828
5949
|
const childRowid = handleGetRowId(item);
|
|
5829
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5950
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5830
5951
|
if (isSelect) {
|
|
5831
5952
|
sLen++;
|
|
5832
5953
|
}
|
|
5833
|
-
else if (
|
|
5954
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5834
5955
|
hLen++;
|
|
5835
5956
|
}
|
|
5836
5957
|
vLen++;
|
|
@@ -5842,31 +5963,30 @@ const Methods = {
|
|
|
5842
5963
|
}
|
|
5843
5964
|
if (isSelected) {
|
|
5844
5965
|
if (!checkField) {
|
|
5845
|
-
|
|
5966
|
+
selectCheckboxMaps[rowid] = row;
|
|
5846
5967
|
}
|
|
5847
|
-
if (
|
|
5848
|
-
delete
|
|
5968
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5969
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5849
5970
|
}
|
|
5850
5971
|
}
|
|
5851
5972
|
else {
|
|
5852
5973
|
if (!checkField) {
|
|
5853
|
-
if (
|
|
5854
|
-
delete
|
|
5974
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5975
|
+
delete selectCheckboxMaps[rowid];
|
|
5855
5976
|
}
|
|
5856
5977
|
}
|
|
5857
5978
|
if (halfSelect) {
|
|
5858
|
-
|
|
5979
|
+
treeIndeterminateRowMaps[rowid] = row;
|
|
5859
5980
|
}
|
|
5860
5981
|
else {
|
|
5861
|
-
if (
|
|
5862
|
-
delete
|
|
5982
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5983
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5863
5984
|
}
|
|
5864
5985
|
}
|
|
5865
5986
|
}
|
|
5866
5987
|
});
|
|
5867
5988
|
}
|
|
5868
|
-
reactData.
|
|
5869
|
-
reactData.treeIndeterminateMaps = halfRowMaps;
|
|
5989
|
+
reactData.updateCheckboxFlag++;
|
|
5870
5990
|
},
|
|
5871
5991
|
updateAllCheckboxStatus() {
|
|
5872
5992
|
const $xeTable = this;
|
|
@@ -5874,10 +5994,9 @@ const Methods = {
|
|
|
5874
5994
|
const reactData = $xeTable;
|
|
5875
5995
|
const internalData = $xeTable;
|
|
5876
5996
|
const { treeConfig } = props;
|
|
5877
|
-
const { selectCheckboxMaps,
|
|
5997
|
+
const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5878
5998
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5879
5999
|
const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
|
|
5880
|
-
const { afterFullData, afterTreeFullData, checkboxReserveRowMap } = internalData;
|
|
5881
6000
|
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5882
6001
|
let sLen = 0; // 已选
|
|
5883
6002
|
let hLen = 0; // 半选
|
|
@@ -5891,7 +6010,7 @@ const Methods = {
|
|
|
5891
6010
|
if (selected) {
|
|
5892
6011
|
sLen++;
|
|
5893
6012
|
}
|
|
5894
|
-
else if (
|
|
6013
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5895
6014
|
hLen++;
|
|
5896
6015
|
}
|
|
5897
6016
|
vLen++;
|
|
@@ -5900,7 +6019,7 @@ const Methods = {
|
|
|
5900
6019
|
if (selected) {
|
|
5901
6020
|
sLen++;
|
|
5902
6021
|
}
|
|
5903
|
-
else if (
|
|
6022
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5904
6023
|
hLen++;
|
|
5905
6024
|
}
|
|
5906
6025
|
}
|
|
@@ -5911,7 +6030,7 @@ const Methods = {
|
|
|
5911
6030
|
if (selected) {
|
|
5912
6031
|
sLen++;
|
|
5913
6032
|
}
|
|
5914
|
-
else if (
|
|
6033
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5915
6034
|
hLen++;
|
|
5916
6035
|
}
|
|
5917
6036
|
vLen++;
|
|
@@ -5968,19 +6087,26 @@ const Methods = {
|
|
|
5968
6087
|
* 获取复选框保留选中的行
|
|
5969
6088
|
*/
|
|
5970
6089
|
getCheckboxReserveRecords(isFull) {
|
|
5971
|
-
const
|
|
6090
|
+
const $xeTable = this;
|
|
6091
|
+
const props = $xeTable;
|
|
6092
|
+
const internalData = $xeTable;
|
|
6093
|
+
const { treeConfig } = props;
|
|
6094
|
+
const { afterFullData, fullDataRowIdData, checkboxReserveRowMap } = internalData;
|
|
6095
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6096
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
5972
6097
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5973
6098
|
const reserveSelection = [];
|
|
5974
6099
|
if (checkboxOpts.reserve) {
|
|
6100
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5975
6101
|
const afterFullIdMaps = {};
|
|
5976
6102
|
if (treeConfig) {
|
|
5977
6103
|
XEUtils.eachTree(afterFullData, row => {
|
|
5978
|
-
afterFullIdMaps[
|
|
6104
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5979
6105
|
}, { children: childrenField });
|
|
5980
6106
|
}
|
|
5981
6107
|
else {
|
|
5982
6108
|
afterFullData.forEach((row) => {
|
|
5983
|
-
afterFullIdMaps[
|
|
6109
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5984
6110
|
});
|
|
5985
6111
|
}
|
|
5986
6112
|
XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
|
|
@@ -6055,9 +6181,16 @@ const Methods = {
|
|
|
6055
6181
|
* 清空行为不管是否被禁用还是保留记录,都将彻底清空选中状态
|
|
6056
6182
|
*/
|
|
6057
6183
|
clearCheckboxRow() {
|
|
6058
|
-
const
|
|
6059
|
-
const
|
|
6184
|
+
const $xeTable = this;
|
|
6185
|
+
const props = $xeTable;
|
|
6186
|
+
const reactData = $xeTable;
|
|
6187
|
+
const internalData = $xeTable;
|
|
6188
|
+
const { treeConfig } = props;
|
|
6189
|
+
const { tableFullData } = internalData;
|
|
6190
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
6060
6191
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6192
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6193
|
+
const { checkField, reserve } = checkboxOpts;
|
|
6061
6194
|
// indeterminateField 仅支持读取
|
|
6062
6195
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
6063
6196
|
if (checkField) {
|
|
@@ -6077,10 +6210,11 @@ const Methods = {
|
|
|
6077
6210
|
if (reserve) {
|
|
6078
6211
|
tableFullData.forEach((row) => this.handleCheckboxReserveRow(row, false));
|
|
6079
6212
|
}
|
|
6080
|
-
|
|
6081
|
-
|
|
6082
|
-
|
|
6083
|
-
|
|
6213
|
+
reactData.isAllSelected = false;
|
|
6214
|
+
reactData.isIndeterminate = false;
|
|
6215
|
+
internalData.selectCheckboxMaps = {};
|
|
6216
|
+
internalData.treeIndeterminateRowMaps = {};
|
|
6217
|
+
reactData.updateCheckboxFlag++;
|
|
6084
6218
|
return this.$nextTick();
|
|
6085
6219
|
},
|
|
6086
6220
|
/**
|
|
@@ -6659,12 +6793,11 @@ const Methods = {
|
|
|
6659
6793
|
const internalData = $xeTable;
|
|
6660
6794
|
const { treeConfig, dragConfig } = props;
|
|
6661
6795
|
const rowDragOpts = $xeTable.computeRowDragOpts;
|
|
6662
|
-
const { fullAllDataRowIdData } = internalData;
|
|
6796
|
+
const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData;
|
|
6663
6797
|
const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
|
|
6664
6798
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
6665
6799
|
const { transform, rowField, mapChildrenField, parentField } = treeOpts;
|
|
6666
6800
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6667
|
-
const { afterFullData, tableFullData } = internalData;
|
|
6668
6801
|
const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
|
|
6669
6802
|
const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
|
|
6670
6803
|
const errRest = {
|
|
@@ -7268,48 +7401,52 @@ const Methods = {
|
|
|
7268
7401
|
setPendingRow(rows, status) {
|
|
7269
7402
|
const $xeTable = this;
|
|
7270
7403
|
const reactData = $xeTable;
|
|
7271
|
-
const
|
|
7404
|
+
const internalData = $xeTable;
|
|
7405
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7406
|
+
const { pendingRowMaps } = internalData;
|
|
7272
7407
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7273
7408
|
rows = [rows];
|
|
7274
7409
|
}
|
|
7275
7410
|
if (status) {
|
|
7276
7411
|
rows.forEach((row) => {
|
|
7277
|
-
const rowid =
|
|
7278
|
-
if (rowid && !
|
|
7279
|
-
|
|
7412
|
+
const rowid = handleGetRowId(row);
|
|
7413
|
+
if (rowid && !pendingRowMaps[rowid]) {
|
|
7414
|
+
pendingRowMaps[rowid] = row;
|
|
7280
7415
|
}
|
|
7281
7416
|
});
|
|
7282
7417
|
}
|
|
7283
7418
|
else {
|
|
7284
7419
|
rows.forEach((row) => {
|
|
7285
|
-
const rowid =
|
|
7286
|
-
if (rowid &&
|
|
7287
|
-
delete
|
|
7420
|
+
const rowid = handleGetRowId(row);
|
|
7421
|
+
if (rowid && pendingRowMaps[rowid]) {
|
|
7422
|
+
delete pendingRowMaps[rowid];
|
|
7288
7423
|
}
|
|
7289
7424
|
});
|
|
7290
7425
|
}
|
|
7291
|
-
reactData.
|
|
7426
|
+
reactData.pendingRowFlag++;
|
|
7292
7427
|
return $xeTable.$nextTick();
|
|
7293
7428
|
},
|
|
7294
7429
|
togglePendingRow(rows) {
|
|
7295
7430
|
const $xeTable = this;
|
|
7296
7431
|
const reactData = $xeTable;
|
|
7297
|
-
const
|
|
7432
|
+
const internalData = $xeTable;
|
|
7433
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7434
|
+
const { pendingRowMaps } = internalData;
|
|
7298
7435
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7299
7436
|
rows = [rows];
|
|
7300
7437
|
}
|
|
7301
7438
|
rows.forEach((row) => {
|
|
7302
|
-
const rowid =
|
|
7439
|
+
const rowid = handleGetRowId(row);
|
|
7303
7440
|
if (rowid) {
|
|
7304
|
-
if (
|
|
7305
|
-
delete
|
|
7441
|
+
if (pendingRowMaps[rowid]) {
|
|
7442
|
+
delete pendingRowMaps[rowid];
|
|
7306
7443
|
}
|
|
7307
7444
|
else {
|
|
7308
|
-
|
|
7445
|
+
pendingRowMaps[rowid] = row;
|
|
7309
7446
|
}
|
|
7310
7447
|
}
|
|
7311
7448
|
});
|
|
7312
|
-
reactData.
|
|
7449
|
+
reactData.pendingRowFlag++;
|
|
7313
7450
|
return $xeTable.$nextTick();
|
|
7314
7451
|
},
|
|
7315
7452
|
hasPendingByRow(row) {
|
|
@@ -7325,10 +7462,8 @@ const Methods = {
|
|
|
7325
7462
|
},
|
|
7326
7463
|
getPendingRecords() {
|
|
7327
7464
|
const $xeTable = this;
|
|
7328
|
-
const reactData = $xeTable;
|
|
7329
7465
|
const internalData = $xeTable;
|
|
7330
|
-
const { pendingRowMaps } =
|
|
7331
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7466
|
+
const { fullAllDataRowIdData, pendingRowMaps } = internalData;
|
|
7332
7467
|
const insertRecords = [];
|
|
7333
7468
|
XEUtils.each(pendingRowMaps, (row, rowid) => {
|
|
7334
7469
|
if (fullAllDataRowIdData[rowid]) {
|
|
@@ -7338,8 +7473,12 @@ const Methods = {
|
|
|
7338
7473
|
return insertRecords;
|
|
7339
7474
|
},
|
|
7340
7475
|
clearPendingRow() {
|
|
7341
|
-
|
|
7342
|
-
|
|
7476
|
+
const $xeTable = this;
|
|
7477
|
+
const reactData = $xeTable;
|
|
7478
|
+
const internalData = $xeTable;
|
|
7479
|
+
internalData.pendingRowMaps = {};
|
|
7480
|
+
reactData.pendingRowFlag++;
|
|
7481
|
+
return $xeTable.$nextTick();
|
|
7343
7482
|
},
|
|
7344
7483
|
sort(sortConfs, sortOrder) {
|
|
7345
7484
|
const $xeTable = this;
|
|
@@ -7540,17 +7679,16 @@ const Methods = {
|
|
|
7540
7679
|
const $xeTable = this;
|
|
7541
7680
|
const reactData = $xeTable;
|
|
7542
7681
|
const internalData = $xeTable;
|
|
7543
|
-
const
|
|
7544
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7682
|
+
const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
|
|
7545
7683
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7546
7684
|
const { lazy } = expandOpts;
|
|
7547
7685
|
const rowid = getRowid($xeTable, row);
|
|
7548
7686
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7549
7687
|
if (lazy && rowRest) {
|
|
7550
7688
|
rowRest.expandLoaded = false;
|
|
7551
|
-
delete
|
|
7689
|
+
delete rowExpandLazyLoadedMaps[rowid];
|
|
7552
7690
|
}
|
|
7553
|
-
reactData.
|
|
7691
|
+
reactData.rowExpandedFlag++;
|
|
7554
7692
|
return $xeTable.$nextTick();
|
|
7555
7693
|
},
|
|
7556
7694
|
/**
|
|
@@ -7558,14 +7696,17 @@ const Methods = {
|
|
|
7558
7696
|
* @param {Row} row 行对象
|
|
7559
7697
|
*/
|
|
7560
7698
|
reloadRowExpand(row) {
|
|
7561
|
-
const
|
|
7699
|
+
const $xeTable = this;
|
|
7700
|
+
const internalData = $xeTable;
|
|
7701
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
7702
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7562
7703
|
const { lazy } = expandOpts;
|
|
7563
7704
|
const rowid = getRowid(this, row);
|
|
7564
7705
|
if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
|
|
7565
|
-
|
|
7566
|
-
.then(() =>
|
|
7706
|
+
$xeTable.clearRowExpandLoaded(row)
|
|
7707
|
+
.then(() => handleAsyncRowExpand($xeTable, row));
|
|
7567
7708
|
}
|
|
7568
|
-
return
|
|
7709
|
+
return $xeTable.$nextTick();
|
|
7569
7710
|
},
|
|
7570
7711
|
reloadExpandContent(row) {
|
|
7571
7712
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7578,20 +7719,33 @@ const Methods = {
|
|
|
7578
7719
|
* 展开行事件
|
|
7579
7720
|
*/
|
|
7580
7721
|
triggerRowExpandEvent(evnt, params) {
|
|
7581
|
-
const
|
|
7722
|
+
const $xeTable = this;
|
|
7723
|
+
const reactData = $xeTable;
|
|
7724
|
+
const internalData = $xeTable;
|
|
7725
|
+
const { expandColumn: column } = reactData;
|
|
7726
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
7727
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7582
7728
|
const { row } = params;
|
|
7583
7729
|
const { lazy, trigger } = expandOpts;
|
|
7584
7730
|
if (trigger === 'manual') {
|
|
7585
7731
|
return;
|
|
7586
7732
|
}
|
|
7587
7733
|
evnt.stopPropagation();
|
|
7588
|
-
const rowid = getRowid(
|
|
7734
|
+
const rowid = getRowid($xeTable, row);
|
|
7589
7735
|
if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
|
|
7590
|
-
const expanded =
|
|
7591
|
-
const columnIndex =
|
|
7592
|
-
const $columnIndex =
|
|
7593
|
-
|
|
7594
|
-
|
|
7736
|
+
const expanded = !$xeTable.isRowExpandByRow(row);
|
|
7737
|
+
const columnIndex = $xeTable.getColumnIndex(column);
|
|
7738
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
7739
|
+
$xeTable.setRowExpand(row, expanded);
|
|
7740
|
+
$xeTable.dispatchEvent('toggle-row-expand', {
|
|
7741
|
+
expanded,
|
|
7742
|
+
column,
|
|
7743
|
+
columnIndex,
|
|
7744
|
+
$columnIndex,
|
|
7745
|
+
row,
|
|
7746
|
+
rowIndex: $xeTable.getRowIndex(row),
|
|
7747
|
+
$rowIndex: $xeTable.getVMRowIndex(row)
|
|
7748
|
+
}, evnt);
|
|
7595
7749
|
}
|
|
7596
7750
|
},
|
|
7597
7751
|
/**
|
|
@@ -7637,48 +7791,6 @@ const Methods = {
|
|
|
7637
7791
|
}
|
|
7638
7792
|
return this.setRowExpand(expandedRows, expanded);
|
|
7639
7793
|
},
|
|
7640
|
-
handleAsyncRowExpand(row) {
|
|
7641
|
-
const $xeTable = this;
|
|
7642
|
-
const reactData = $xeTable;
|
|
7643
|
-
const internalData = $xeTable;
|
|
7644
|
-
return new Promise(resolve => {
|
|
7645
|
-
const { expandOpts } = this;
|
|
7646
|
-
const { loadMethod } = expandOpts;
|
|
7647
|
-
if (loadMethod) {
|
|
7648
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7649
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7650
|
-
const rowid = getRowid($xeTable, row);
|
|
7651
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7652
|
-
rExpandLazyLoadedMaps[rowid] = row;
|
|
7653
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7654
|
-
loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
|
|
7655
|
-
const rExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
|
|
7656
|
-
if (rowRest) {
|
|
7657
|
-
rowRest.expandLoaded = true;
|
|
7658
|
-
}
|
|
7659
|
-
rExpandedMaps[rowid] = row;
|
|
7660
|
-
reactData.rowExpandedMaps = rExpandedMaps;
|
|
7661
|
-
}).catch(() => {
|
|
7662
|
-
if (rowRest) {
|
|
7663
|
-
rowRest.expandLoaded = false;
|
|
7664
|
-
}
|
|
7665
|
-
}).finally(() => {
|
|
7666
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7667
|
-
if (rExpandLazyLoadedMaps[rowid]) {
|
|
7668
|
-
delete rExpandLazyLoadedMaps[rowid];
|
|
7669
|
-
}
|
|
7670
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7671
|
-
$xeTable.$nextTick()
|
|
7672
|
-
.then(() => $xeTable.recalculate())
|
|
7673
|
-
.then(() => $xeTable.updateCellAreas())
|
|
7674
|
-
.then(() => resolve());
|
|
7675
|
-
});
|
|
7676
|
-
}
|
|
7677
|
-
else {
|
|
7678
|
-
resolve();
|
|
7679
|
-
}
|
|
7680
|
-
});
|
|
7681
|
-
},
|
|
7682
7794
|
/**
|
|
7683
7795
|
* 设置展开行,二个参数设置这一行展开与否
|
|
7684
7796
|
* 支持单行
|
|
@@ -7688,8 +7800,12 @@ const Methods = {
|
|
|
7688
7800
|
*/
|
|
7689
7801
|
setRowExpand(rows, expanded) {
|
|
7690
7802
|
const $xeTable = this;
|
|
7691
|
-
const
|
|
7692
|
-
|
|
7803
|
+
const reactData = $xeTable;
|
|
7804
|
+
const internalData = $xeTable;
|
|
7805
|
+
const { expandColumn } = reactData;
|
|
7806
|
+
let { fullAllDataRowIdData, rowExpandedMaps, rowExpandLazyLoadedMaps } = internalData;
|
|
7807
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7808
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7693
7809
|
const { reserve, lazy, accordion, toggleMethod } = expandOpts;
|
|
7694
7810
|
const lazyRests = [];
|
|
7695
7811
|
const columnIndex = $xeTable.getColumnIndex(expandColumn);
|
|
@@ -7700,30 +7816,31 @@ const Methods = {
|
|
|
7700
7816
|
}
|
|
7701
7817
|
if (accordion) {
|
|
7702
7818
|
// 只能同时展开一个
|
|
7703
|
-
|
|
7819
|
+
rowExpandedMaps = {};
|
|
7820
|
+
internalData.rowExpandedMaps = rowExpandedMaps;
|
|
7704
7821
|
rows = rows.slice(rows.length - 1, rows.length);
|
|
7705
7822
|
}
|
|
7706
|
-
const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) })) : rows;
|
|
7823
|
+
const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) })) : rows;
|
|
7707
7824
|
if (expanded) {
|
|
7708
7825
|
validRows.forEach((row) => {
|
|
7709
|
-
const rowid =
|
|
7710
|
-
if (!
|
|
7826
|
+
const rowid = handleGetRowId(row);
|
|
7827
|
+
if (!rowExpandedMaps[rowid]) {
|
|
7711
7828
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7712
7829
|
const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
|
|
7713
7830
|
if (isLoad) {
|
|
7714
|
-
lazyRests.push(
|
|
7831
|
+
lazyRests.push(handleAsyncRowExpand($xeTable, row));
|
|
7715
7832
|
}
|
|
7716
7833
|
else {
|
|
7717
|
-
|
|
7834
|
+
rowExpandedMaps[rowid] = row;
|
|
7718
7835
|
}
|
|
7719
7836
|
}
|
|
7720
7837
|
});
|
|
7721
7838
|
}
|
|
7722
7839
|
else {
|
|
7723
7840
|
validRows.forEach((item) => {
|
|
7724
|
-
const rowid =
|
|
7725
|
-
if (
|
|
7726
|
-
delete
|
|
7841
|
+
const rowid = handleGetRowId(item);
|
|
7842
|
+
if (rowExpandedMaps[rowid]) {
|
|
7843
|
+
delete rowExpandedMaps[rowid];
|
|
7727
7844
|
}
|
|
7728
7845
|
});
|
|
7729
7846
|
}
|
|
@@ -7731,7 +7848,7 @@ const Methods = {
|
|
|
7731
7848
|
validRows.forEach((row) => handleRowExpandReserve($xeTable, row, expanded));
|
|
7732
7849
|
}
|
|
7733
7850
|
}
|
|
7734
|
-
|
|
7851
|
+
reactData.rowExpandedFlag++;
|
|
7735
7852
|
return Promise.all(lazyRests)
|
|
7736
7853
|
.then(() => $xeTable.$nextTick())
|
|
7737
7854
|
.then(() => $xeTable.recalculate(true))
|
|
@@ -7747,9 +7864,13 @@ const Methods = {
|
|
|
7747
7864
|
* @param {Row} row 行对象
|
|
7748
7865
|
*/
|
|
7749
7866
|
isRowExpandByRow(row) {
|
|
7750
|
-
const
|
|
7867
|
+
const $xeTable = this;
|
|
7868
|
+
const reactData = $xeTable;
|
|
7869
|
+
const internalData = $xeTable;
|
|
7870
|
+
const { rowExpandedFlag } = reactData;
|
|
7871
|
+
const { rowExpandedMaps } = internalData;
|
|
7751
7872
|
const rowid = getRowid(this, row);
|
|
7752
|
-
return !!rowExpandedMaps[rowid];
|
|
7873
|
+
return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
|
|
7753
7874
|
},
|
|
7754
7875
|
isExpandByRow(row) {
|
|
7755
7876
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7769,7 +7890,8 @@ const Methods = {
|
|
|
7769
7890
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7770
7891
|
const { reserve } = expandOpts;
|
|
7771
7892
|
const expList = $xeTable.getRowExpandRecords();
|
|
7772
|
-
|
|
7893
|
+
internalData.rowExpandedMaps = {};
|
|
7894
|
+
reactData.rowExpandedFlag++;
|
|
7773
7895
|
if (reserve) {
|
|
7774
7896
|
tableFullData.forEach((row) => handleRowExpandReserve($xeTable, row, false));
|
|
7775
7897
|
}
|
|
@@ -7789,8 +7911,10 @@ const Methods = {
|
|
|
7789
7911
|
return this.$nextTick();
|
|
7790
7912
|
},
|
|
7791
7913
|
getRowExpandRecords() {
|
|
7914
|
+
const $xeTable = this;
|
|
7915
|
+
const internalData = $xeTable;
|
|
7792
7916
|
const rest = [];
|
|
7793
|
-
XEUtils.each(
|
|
7917
|
+
XEUtils.each(internalData.rowExpandedMaps, item => {
|
|
7794
7918
|
if (item) {
|
|
7795
7919
|
rest.push(item);
|
|
7796
7920
|
}
|
|
@@ -7798,8 +7922,10 @@ const Methods = {
|
|
|
7798
7922
|
return rest;
|
|
7799
7923
|
},
|
|
7800
7924
|
getTreeExpandRecords() {
|
|
7925
|
+
const $xeTable = this;
|
|
7926
|
+
const internalData = $xeTable;
|
|
7801
7927
|
const rest = [];
|
|
7802
|
-
XEUtils.each(
|
|
7928
|
+
XEUtils.each(internalData.treeExpandedMaps, item => {
|
|
7803
7929
|
if (item) {
|
|
7804
7930
|
rest.push(item);
|
|
7805
7931
|
}
|
|
@@ -7832,12 +7958,10 @@ const Methods = {
|
|
|
7832
7958
|
const $xeTable = this;
|
|
7833
7959
|
const reactData = $xeTable;
|
|
7834
7960
|
const internalData = $xeTable;
|
|
7835
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7961
|
+
const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
|
|
7836
7962
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
7837
7963
|
const { transform } = treeOpts;
|
|
7838
|
-
let tExpandedMaps = {};
|
|
7839
7964
|
if (rows) {
|
|
7840
|
-
tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
|
|
7841
7965
|
if (!XEUtils.isArray(rows)) {
|
|
7842
7966
|
rows = [rows];
|
|
7843
7967
|
}
|
|
@@ -7846,8 +7970,8 @@ const Methods = {
|
|
|
7846
7970
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7847
7971
|
if (rowRest) {
|
|
7848
7972
|
rowRest.treeLoaded = false;
|
|
7849
|
-
if (
|
|
7850
|
-
delete
|
|
7973
|
+
if (treeExpandedMaps[rowid]) {
|
|
7974
|
+
delete treeExpandedMaps[rowid];
|
|
7851
7975
|
}
|
|
7852
7976
|
}
|
|
7853
7977
|
});
|
|
@@ -7857,7 +7981,8 @@ const Methods = {
|
|
|
7857
7981
|
rowRest.treeLoaded = false;
|
|
7858
7982
|
});
|
|
7859
7983
|
}
|
|
7860
|
-
|
|
7984
|
+
internalData.treeExpandedMaps = {};
|
|
7985
|
+
reactData.treeExpandedFlag++;
|
|
7861
7986
|
if (transform) {
|
|
7862
7987
|
handleVirtualTreeToList($xeTable);
|
|
7863
7988
|
return $xeTable.handleTableData();
|
|
@@ -7870,36 +7995,42 @@ const Methods = {
|
|
|
7870
7995
|
*/
|
|
7871
7996
|
reloadTreeExpand(row) {
|
|
7872
7997
|
const $xeTable = this;
|
|
7873
|
-
const
|
|
7998
|
+
const internalData = $xeTable;
|
|
7999
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
8000
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7874
8001
|
const { transform, lazy } = treeOpts;
|
|
7875
8002
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7876
|
-
const rowid = getRowid(
|
|
8003
|
+
const rowid = getRowid($xeTable, row);
|
|
7877
8004
|
if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
|
|
7878
|
-
return
|
|
7879
|
-
return
|
|
8005
|
+
return $xeTable.clearTreeExpandLoaded(row).then(() => {
|
|
8006
|
+
return handleAsyncTreeExpandChilds($xeTable, row);
|
|
7880
8007
|
}).then(() => {
|
|
7881
8008
|
if (transform) {
|
|
7882
8009
|
handleVirtualTreeToList($xeTable);
|
|
7883
|
-
return
|
|
8010
|
+
return $xeTable.handleTableData();
|
|
7884
8011
|
}
|
|
7885
8012
|
}).then(() => {
|
|
7886
|
-
return
|
|
8013
|
+
return $xeTable.recalculate();
|
|
7887
8014
|
});
|
|
7888
8015
|
}
|
|
7889
|
-
return
|
|
8016
|
+
return $xeTable.$nextTick();
|
|
7890
8017
|
},
|
|
7891
8018
|
reloadTreeChilds(row) {
|
|
8019
|
+
const $xeTable = this;
|
|
7892
8020
|
if (process.env.NODE_ENV === 'development') {
|
|
7893
8021
|
warnLog('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand']);
|
|
7894
8022
|
}
|
|
7895
8023
|
// 即将废弃
|
|
7896
|
-
return
|
|
8024
|
+
return $xeTable.reloadTreeExpand(row);
|
|
7897
8025
|
},
|
|
7898
8026
|
/**
|
|
7899
8027
|
* 展开树节点事件
|
|
7900
8028
|
*/
|
|
7901
8029
|
triggerTreeExpandEvent(evnt, params) {
|
|
7902
|
-
const
|
|
8030
|
+
const $xeTable = this;
|
|
8031
|
+
const internalData = $xeTable;
|
|
8032
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
8033
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7903
8034
|
const { row, column } = params;
|
|
7904
8035
|
const { lazy, trigger } = treeOpts;
|
|
7905
8036
|
if (trigger === 'manual') {
|
|
@@ -7908,11 +8039,11 @@ const Methods = {
|
|
|
7908
8039
|
evnt.stopPropagation();
|
|
7909
8040
|
const rowid = getRowid(this, row);
|
|
7910
8041
|
if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
|
|
7911
|
-
const expanded =
|
|
7912
|
-
const columnIndex =
|
|
7913
|
-
const $columnIndex =
|
|
7914
|
-
|
|
7915
|
-
|
|
8042
|
+
const expanded = !$xeTable.isTreeExpandByRow(row);
|
|
8043
|
+
const columnIndex = $xeTable.getColumnIndex(column);
|
|
8044
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
8045
|
+
$xeTable.setTreeExpand(row, expanded);
|
|
8046
|
+
$xeTable.dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
|
|
7916
8047
|
}
|
|
7917
8048
|
},
|
|
7918
8049
|
/**
|
|
@@ -7921,87 +8052,6 @@ const Methods = {
|
|
|
7921
8052
|
toggleTreeExpand(row) {
|
|
7922
8053
|
return this.setTreeExpand(row, !this.isTreeExpandByRow(row));
|
|
7923
8054
|
},
|
|
7924
|
-
/**
|
|
7925
|
-
* 处理默认展开树节点
|
|
7926
|
-
*/
|
|
7927
|
-
handleDefaultTreeExpand() {
|
|
7928
|
-
const { treeConfig, treeOpts, tableFullData } = this;
|
|
7929
|
-
if (treeConfig) {
|
|
7930
|
-
const { expandAll, expandRowKeys } = treeOpts;
|
|
7931
|
-
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7932
|
-
if (expandAll) {
|
|
7933
|
-
this.setAllTreeExpand(true);
|
|
7934
|
-
}
|
|
7935
|
-
else if (expandRowKeys) {
|
|
7936
|
-
const defExpandeds = [];
|
|
7937
|
-
const rowkey = getRowkey(this);
|
|
7938
|
-
expandRowKeys.forEach((rowid) => {
|
|
7939
|
-
const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
|
|
7940
|
-
if (matchObj) {
|
|
7941
|
-
defExpandeds.push(matchObj.item);
|
|
7942
|
-
}
|
|
7943
|
-
});
|
|
7944
|
-
this.setTreeExpand(defExpandeds, true);
|
|
7945
|
-
}
|
|
7946
|
-
}
|
|
7947
|
-
},
|
|
7948
|
-
handleAsyncTreeExpandChilds(row) {
|
|
7949
|
-
const $xeTable = this;
|
|
7950
|
-
const { treeOpts, checkboxOpts } = this;
|
|
7951
|
-
const { transform, loadMethod } = treeOpts;
|
|
7952
|
-
const { checkStrictly } = checkboxOpts;
|
|
7953
|
-
return new Promise(resolve => {
|
|
7954
|
-
if (loadMethod) {
|
|
7955
|
-
const { treeExpandLazyLoadedMaps, fullAllDataRowIdData } = this;
|
|
7956
|
-
const rowid = getRowid($xeTable, row);
|
|
7957
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7958
|
-
treeExpandLazyLoadedMaps[rowid] = row;
|
|
7959
|
-
Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
|
|
7960
|
-
if (rowRest) {
|
|
7961
|
-
rowRest.treeLoaded = true;
|
|
7962
|
-
}
|
|
7963
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7964
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7965
|
-
}
|
|
7966
|
-
if (!XEUtils.isArray(childRecords)) {
|
|
7967
|
-
childRecords = [];
|
|
7968
|
-
}
|
|
7969
|
-
if (childRecords) {
|
|
7970
|
-
return this.loadTreeChildren(row, childRecords).then((childRows) => {
|
|
7971
|
-
const { treeExpandedMaps } = this;
|
|
7972
|
-
if (childRows.length && !treeExpandedMaps[rowid]) {
|
|
7973
|
-
treeExpandedMaps[rowid] = row;
|
|
7974
|
-
}
|
|
7975
|
-
// 如果当前节点已选中,则展开后子节点也被选中
|
|
7976
|
-
if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
|
|
7977
|
-
handleCheckedCheckboxRow($xeTable, childRows, true);
|
|
7978
|
-
}
|
|
7979
|
-
return this.$nextTick().then(() => {
|
|
7980
|
-
if (transform) {
|
|
7981
|
-
this.handleTableData();
|
|
7982
|
-
updateAfterDataIndex($xeTable);
|
|
7983
|
-
return this.$nextTick();
|
|
7984
|
-
}
|
|
7985
|
-
});
|
|
7986
|
-
});
|
|
7987
|
-
}
|
|
7988
|
-
}).catch(() => {
|
|
7989
|
-
const { treeExpandLazyLoadedMaps } = this;
|
|
7990
|
-
if (rowRest) {
|
|
7991
|
-
rowRest.treeLoaded = false;
|
|
7992
|
-
}
|
|
7993
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7994
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7995
|
-
}
|
|
7996
|
-
}).finally(() => {
|
|
7997
|
-
this.$nextTick().then(() => this.recalculate()).then(() => resolve());
|
|
7998
|
-
});
|
|
7999
|
-
}
|
|
8000
|
-
else {
|
|
8001
|
-
resolve();
|
|
8002
|
-
}
|
|
8003
|
-
});
|
|
8004
|
-
},
|
|
8005
8055
|
/**
|
|
8006
8056
|
* 设置所有树节点的展开与否
|
|
8007
8057
|
* @param {Boolean} expanded 是否展开
|
|
@@ -8026,42 +8076,47 @@ const Methods = {
|
|
|
8026
8076
|
* @returns
|
|
8027
8077
|
*/
|
|
8028
8078
|
handleBaseTreeExpand(rows, expanded) {
|
|
8029
|
-
const
|
|
8079
|
+
const $xeTable = this;
|
|
8080
|
+
const reactData = $xeTable;
|
|
8081
|
+
const internalData = $xeTable;
|
|
8082
|
+
const { treeNodeColumn } = reactData;
|
|
8083
|
+
const { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData;
|
|
8084
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
8030
8085
|
const { reserve, lazy, accordion, toggleMethod } = treeOpts;
|
|
8031
|
-
const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
|
|
8032
8086
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
8033
8087
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
8034
8088
|
const result = [];
|
|
8035
|
-
const columnIndex =
|
|
8036
|
-
const $columnIndex =
|
|
8037
|
-
|
|
8089
|
+
const columnIndex = $xeTable.getColumnIndex(treeNodeColumn);
|
|
8090
|
+
const $columnIndex = $xeTable.getVMColumnIndex(treeNodeColumn);
|
|
8091
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
8092
|
+
let validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows;
|
|
8038
8093
|
if (accordion) {
|
|
8039
8094
|
validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
|
|
8040
8095
|
// 同一级只能展开一个
|
|
8041
8096
|
const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField });
|
|
8042
8097
|
if (matchObj) {
|
|
8043
8098
|
matchObj.items.forEach(item => {
|
|
8044
|
-
const rowid =
|
|
8045
|
-
if (
|
|
8046
|
-
delete
|
|
8099
|
+
const rowid = handleGetRowId(item);
|
|
8100
|
+
if (treeExpandedMaps[rowid]) {
|
|
8101
|
+
delete treeExpandedMaps[rowid];
|
|
8047
8102
|
}
|
|
8048
8103
|
});
|
|
8049
8104
|
}
|
|
8050
8105
|
}
|
|
8051
8106
|
if (expanded) {
|
|
8052
8107
|
validRows.forEach((row) => {
|
|
8053
|
-
const rowid =
|
|
8054
|
-
if (!
|
|
8108
|
+
const rowid = handleGetRowId(row);
|
|
8109
|
+
if (!treeExpandedMaps[rowid]) {
|
|
8055
8110
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
8056
8111
|
if (rowRest) {
|
|
8057
8112
|
const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
|
|
8058
8113
|
// 是否使用懒加载
|
|
8059
8114
|
if (isLoad) {
|
|
8060
|
-
result.push(
|
|
8115
|
+
result.push(handleAsyncTreeExpandChilds($xeTable, row));
|
|
8061
8116
|
}
|
|
8062
8117
|
else {
|
|
8063
8118
|
if (row[childrenField] && row[childrenField].length) {
|
|
8064
|
-
|
|
8119
|
+
treeExpandedMaps[rowid] = row;
|
|
8065
8120
|
}
|
|
8066
8121
|
}
|
|
8067
8122
|
}
|
|
@@ -8070,18 +8125,18 @@ const Methods = {
|
|
|
8070
8125
|
}
|
|
8071
8126
|
else {
|
|
8072
8127
|
validRows.forEach((item) => {
|
|
8073
|
-
const rowid =
|
|
8074
|
-
if (
|
|
8075
|
-
delete
|
|
8128
|
+
const rowid = handleGetRowId(item);
|
|
8129
|
+
if (treeExpandedMaps[rowid]) {
|
|
8130
|
+
delete treeExpandedMaps[rowid];
|
|
8076
8131
|
}
|
|
8077
8132
|
});
|
|
8078
8133
|
}
|
|
8079
8134
|
if (reserve) {
|
|
8080
|
-
validRows.forEach((row) =>
|
|
8135
|
+
validRows.forEach((row) => handleTreeExpandReserve($xeTable, row, expanded));
|
|
8081
8136
|
}
|
|
8082
|
-
|
|
8137
|
+
reactData.treeExpandedFlag++;
|
|
8083
8138
|
return Promise.all(result).then(() => {
|
|
8084
|
-
return
|
|
8139
|
+
return $xeTable.recalculate();
|
|
8085
8140
|
});
|
|
8086
8141
|
},
|
|
8087
8142
|
/**
|
|
@@ -8135,30 +8190,38 @@ const Methods = {
|
|
|
8135
8190
|
* @param {Row} row 行对象
|
|
8136
8191
|
*/
|
|
8137
8192
|
isTreeExpandByRow(row) {
|
|
8138
|
-
const
|
|
8139
|
-
|
|
8193
|
+
const $xeTable = this;
|
|
8194
|
+
const reactData = $xeTable;
|
|
8195
|
+
const internalData = $xeTable;
|
|
8196
|
+
const { treeExpandedFlag } = reactData;
|
|
8197
|
+
const { treeExpandedMaps } = internalData;
|
|
8198
|
+
return !!treeExpandedFlag && !!treeExpandedMaps[getRowid($xeTable, row)];
|
|
8140
8199
|
},
|
|
8141
8200
|
/**
|
|
8142
8201
|
* 手动清空树形节点的展开状态,数据会恢复成未展开的状态
|
|
8143
8202
|
*/
|
|
8144
8203
|
clearTreeExpand() {
|
|
8145
8204
|
const $xeTable = this;
|
|
8146
|
-
const
|
|
8147
|
-
const
|
|
8205
|
+
const reactData = $xeTable;
|
|
8206
|
+
const internalData = $xeTable;
|
|
8207
|
+
const { tableFullTreeData } = internalData;
|
|
8208
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
8148
8209
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
8149
|
-
const
|
|
8150
|
-
|
|
8210
|
+
const { transform, reserve } = treeOpts;
|
|
8211
|
+
const expList = $xeTable.getTreeExpandRecords();
|
|
8212
|
+
internalData.treeExpandedMaps = {};
|
|
8213
|
+
reactData.treeExpandedFlag++;
|
|
8151
8214
|
if (reserve) {
|
|
8152
|
-
XEUtils.eachTree(
|
|
8215
|
+
XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), { children: childrenField });
|
|
8153
8216
|
}
|
|
8154
|
-
return
|
|
8217
|
+
return $xeTable.handleTableData().then(() => {
|
|
8155
8218
|
if (transform) {
|
|
8156
8219
|
handleVirtualTreeToList($xeTable);
|
|
8157
|
-
return
|
|
8220
|
+
return $xeTable.handleTableData();
|
|
8158
8221
|
}
|
|
8159
8222
|
}).then(() => {
|
|
8160
8223
|
if (expList.length) {
|
|
8161
|
-
|
|
8224
|
+
$xeTable.recalculate();
|
|
8162
8225
|
}
|
|
8163
8226
|
});
|
|
8164
8227
|
},
|
|
@@ -8166,18 +8229,6 @@ const Methods = {
|
|
|
8166
8229
|
this.treeExpandedReserveRowMap = {};
|
|
8167
8230
|
return this.$nextTick();
|
|
8168
8231
|
},
|
|
8169
|
-
handleTreeExpandReserve(row, expanded) {
|
|
8170
|
-
const { treeExpandedReserveRowMap, treeOpts } = this;
|
|
8171
|
-
if (treeOpts.reserve) {
|
|
8172
|
-
const rowid = getRowid(this, row);
|
|
8173
|
-
if (expanded) {
|
|
8174
|
-
treeExpandedReserveRowMap[rowid] = row;
|
|
8175
|
-
}
|
|
8176
|
-
else if (treeExpandedReserveRowMap[rowid]) {
|
|
8177
|
-
delete treeExpandedReserveRowMap[rowid];
|
|
8178
|
-
}
|
|
8179
|
-
}
|
|
8180
|
-
},
|
|
8181
8232
|
/**
|
|
8182
8233
|
* 获取表格的滚动状态
|
|
8183
8234
|
*/
|
|
@@ -8750,8 +8801,8 @@ const Methods = {
|
|
|
8750
8801
|
const $xeTable = this;
|
|
8751
8802
|
const reactData = $xeTable;
|
|
8752
8803
|
const internalData = $xeTable;
|
|
8753
|
-
const { isAllOverflow, scrollYLoad, expandColumn
|
|
8754
|
-
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData;
|
|
8804
|
+
const { isAllOverflow, scrollYLoad, expandColumn } = reactData;
|
|
8805
|
+
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
8755
8806
|
const { startIndex } = scrollYStore;
|
|
8756
8807
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
8757
8808
|
const rowOpts = $xeTable.computeRowOpts;
|
|
@@ -9078,7 +9129,7 @@ const Methods = {
|
|
|
9078
9129
|
if (this.footerSpanMethod) {
|
|
9079
9130
|
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
9080
9131
|
}
|
|
9081
|
-
setMerges(this, merges, this.mergeFooterList
|
|
9132
|
+
setMerges(this, merges, this.mergeFooterList);
|
|
9082
9133
|
return this.$nextTick().then(() => {
|
|
9083
9134
|
this.updateCellAreas();
|
|
9084
9135
|
return updateStyle($xeTable);
|