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.
Files changed (45) hide show
  1. package/es/style.css +1 -1
  2. package/es/table/module/edit/mixin.js +14 -9
  3. package/es/table/module/validator/mixin.js +2 -2
  4. package/es/table/src/body.js +10 -10
  5. package/es/table/src/cell.js +15 -11
  6. package/es/table/src/methods.js +509 -458
  7. package/es/table/src/table.js +46 -26
  8. package/es/table/src/util.js +2 -2
  9. package/es/ui/index.js +1 -1
  10. package/es/ui/src/log.js +1 -1
  11. package/lib/index.umd.js +761 -670
  12. package/lib/index.umd.min.js +1 -1
  13. package/lib/style.css +1 -1
  14. package/lib/table/module/edit/mixin.js +16 -11
  15. package/lib/table/module/edit/mixin.min.js +1 -1
  16. package/lib/table/module/validator/mixin.js +3 -3
  17. package/lib/table/module/validator/mixin.min.js +1 -1
  18. package/lib/table/src/body.js +16 -11
  19. package/lib/table/src/body.min.js +1 -1
  20. package/lib/table/src/cell.js +22 -13
  21. package/lib/table/src/cell.min.js +1 -1
  22. package/lib/table/src/methods.js +623 -559
  23. package/lib/table/src/methods.min.js +1 -1
  24. package/lib/table/src/table.js +51 -25
  25. package/lib/table/src/table.min.js +1 -1
  26. package/lib/table/src/util.js +2 -2
  27. package/lib/table/src/util.min.js +1 -1
  28. package/lib/ui/index.js +1 -1
  29. package/lib/ui/index.min.js +1 -1
  30. package/lib/ui/src/log.js +1 -1
  31. package/lib/ui/src/log.min.js +1 -1
  32. package/package.json +2 -2
  33. package/packages/table/module/edit/mixin.ts +17 -12
  34. package/packages/table/module/validator/mixin.ts +2 -2
  35. package/packages/table/src/body.ts +10 -10
  36. package/packages/table/src/cell.ts +15 -11
  37. package/packages/table/src/methods.ts +559 -481
  38. package/packages/table/src/table.ts +53 -31
  39. package/packages/table/src/util.ts +2 -2
  40. /package/es/{iconfont.1742353673989.ttf → iconfont.1742437924038.ttf} +0 -0
  41. /package/es/{iconfont.1742353673989.woff → iconfont.1742437924038.woff} +0 -0
  42. /package/es/{iconfont.1742353673989.woff2 → iconfont.1742437924038.woff2} +0 -0
  43. /package/lib/{iconfont.1742353673989.ttf → iconfont.1742437924038.ttf} +0 -0
  44. /package/lib/{iconfont.1742353673989.woff → iconfont.1742437924038.woff} +0 -0
  45. /package/lib/{iconfont.1742353673989.woff2 → iconfont.1742437924038.woff2} +0 -0
@@ -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 = getRowid($xeTable, row);
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 = getRowid($xeTable, row);
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 } = reactData;
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 = getRowid($xeTable, row);
395
- const parentRowid = getRowid($xeTable, parentRow);
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 } = reactData;
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[getRowid($xeTable, row)] = row;
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.selectCheckboxMaps = checkField ? {} : selectRowMaps;
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, selectCheckboxMaps, selectRadioRow, rowExpandedMaps, treeExpandedMaps } = reactData;
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
- reactData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
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
- reactData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
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
- reactData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
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 = getRowid($xeTable, row);
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 = getRowid($xeTable, row);
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(_vm, merges, mList, rowList) {
1241
+ function setMerges($xeTable, merges, mList, rowList) {
1242
+ const props = $xeTable;
1243
+ const internalData = $xeTable;
1096
1244
  if (merges) {
1097
- const { treeConfig, visibleColumn } = _vm;
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(_vm, merges, mList, rowList) {
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, visibleColumn } = _vm;
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 = getRowid($xeTable, row);
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(true).then(() => {
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(true).then(() => {
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, rowExpandedMaps } = reactData;
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 = getRowid($xeTable, row);
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, rowExpandedMaps } = reactData;
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, afterFullData, fullAllDataRowIdData } = internalData;
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
- expandEl.style.top = toCssUnit(rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight));
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
- expandEl.style.top = toCssUnit(trEl.offsetTop + trEl.offsetHeight);
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 } = reactData;
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 (treeExpRest) {
2870
+ if (treeExpandedMaps[rowid]) {
2692
2871
  if (!row[childrenField] || !row[childrenField].length) {
2693
- delete treeTempExpandedMaps[rowid];
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.treeExpandedMaps = treeTempExpandedMaps;
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(row) {
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(row) {
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(row) {
2849
- const { fullAllDataRowIdData } = this;
2850
- if (row) {
2851
- const rowid = getRowid(this, row);
2852
- const rest = fullAllDataRowIdData[rowid];
2853
- if (rest) {
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(column) {
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(column) {
2907
- const { fullColumnIdData } = this;
2908
- if (column) {
2909
- const rest = fullColumnIdData[column.id];
2910
- if (rest) {
2911
- return rest._index;
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 = getRowid($xeTable, item);
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 } = reactData;
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
- this.handleDefaultTreeExpand();
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 = getRowid($xeTable, row);
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 : getRowid($xeTable, 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 { treeConfig, treeIndeterminateMaps, fullDataRowIdData } = this;
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(treeIndeterminateMaps, (item, rowid) => {
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 { selectCheckboxMaps } = reactData;
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 { selectCheckboxMaps } = reactData;
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 reactData = $xeTable;
5582
- const { treeIndeterminateMaps } = reactData;
5583
- return !!treeIndeterminateMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
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 reactData = $xeTable;
5588
- const { treeIndeterminateMaps } = reactData;
5589
- return !!treeIndeterminateMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
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 } = reactData;
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.selectCheckboxMaps = selectRowMaps;
5743
+ reactData.updateCheckboxFlag++;
5624
5744
  return;
5625
5745
  }
5626
- else {
5627
- // 列表
5628
- rows.forEach(row => {
5629
- if (isForce || (!checkMethod || checkMethod({ row }))) {
5630
- XEUtils.set(row, checkField, checked);
5631
- handleCheckboxReserveRow($xeTable, row, checked);
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
- selectRowMaps[rowid] = row;
5763
+ selectCheckboxMaps[rowid] = row;
5646
5764
  }
5647
5765
  else {
5648
- if (selectRowMaps[rowid]) {
5649
- delete selectRowMaps[rowid];
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.selectCheckboxMaps = selectRowMaps;
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 (!selectRowMaps[rowid]) {
5664
- selectRowMaps[rowid] = row;
5781
+ if (!selectCheckboxMaps[rowid]) {
5782
+ selectCheckboxMaps[rowid] = row;
5665
5783
  }
5666
5784
  }
5667
5785
  else {
5668
- if (selectRowMaps[rowid]) {
5669
- delete selectRowMaps[rowid];
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 reactData = $xeTable;
5688
- const { selectCheckboxMaps } = reactData;
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(this, row)];
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(params, checked);
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 && !this.treeConfig) {
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
- handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
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(params, checked);
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 { selectCheckboxMaps, checkboxOpts } = this;
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, treeIndeterminateMaps } = reactData;
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) : selectRowMaps[childRowid];
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 (halfRowMaps[childRowid]) {
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 (halfRowMaps[childRowid]) {
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) : selectRowMaps[childRowid];
5950
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
5830
5951
  if (isSelect) {
5831
5952
  sLen++;
5832
5953
  }
5833
- else if (halfRowMaps[childRowid]) {
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
- selectRowMaps[rowid] = row;
5966
+ selectCheckboxMaps[rowid] = row;
5846
5967
  }
5847
- if (halfRowMaps[rowid]) {
5848
- delete halfRowMaps[rowid];
5968
+ if (treeIndeterminateRowMaps[rowid]) {
5969
+ delete treeIndeterminateRowMaps[rowid];
5849
5970
  }
5850
5971
  }
5851
5972
  else {
5852
5973
  if (!checkField) {
5853
- if (selectRowMaps[rowid]) {
5854
- delete selectRowMaps[rowid];
5974
+ if (selectCheckboxMaps[rowid]) {
5975
+ delete selectCheckboxMaps[rowid];
5855
5976
  }
5856
5977
  }
5857
5978
  if (halfSelect) {
5858
- halfRowMaps[rowid] = row;
5979
+ treeIndeterminateRowMaps[rowid] = row;
5859
5980
  }
5860
5981
  else {
5861
- if (halfRowMaps[rowid]) {
5862
- delete halfRowMaps[rowid];
5982
+ if (treeIndeterminateRowMaps[rowid]) {
5983
+ delete treeIndeterminateRowMaps[rowid];
5863
5984
  }
5864
5985
  }
5865
5986
  }
5866
5987
  });
5867
5988
  }
5868
- reactData.selectCheckboxMaps = selectRowMaps;
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, treeIndeterminateMaps } = reactData;
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 (treeIndeterminateMaps[childRowid]) {
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 (treeIndeterminateMaps[childRowid]) {
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 (treeIndeterminateMaps[childRowid]) {
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 { fullDataRowIdData, afterFullData, checkboxReserveRowMap, checkboxOpts, treeConfig, treeOpts } = this;
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[getRowid(this, row)] = 1;
6104
+ afterFullIdMaps[handleGetRowId(row)] = 1;
5979
6105
  }, { children: childrenField });
5980
6106
  }
5981
6107
  else {
5982
6108
  afterFullData.forEach((row) => {
5983
- afterFullIdMaps[getRowid(this, row)] = 1;
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 { tableFullData, treeConfig, treeOpts, checkboxOpts } = this;
6059
- const { checkField, reserve } = checkboxOpts;
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
- this.isAllSelected = false;
6081
- this.isIndeterminate = false;
6082
- this.selectCheckboxMaps = {};
6083
- this.treeIndeterminateMaps = {};
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 pendingMaps = Object.assign({}, reactData.pendingRowMaps);
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 = getRowid($xeTable, row);
7278
- if (rowid && !pendingMaps[rowid]) {
7279
- pendingMaps[rowid] = row;
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 = getRowid($xeTable, row);
7286
- if (rowid && pendingMaps[rowid]) {
7287
- delete pendingMaps[rowid];
7420
+ const rowid = handleGetRowId(row);
7421
+ if (rowid && pendingRowMaps[rowid]) {
7422
+ delete pendingRowMaps[rowid];
7288
7423
  }
7289
7424
  });
7290
7425
  }
7291
- reactData.pendingRowMaps = pendingMaps;
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 pendingMaps = Object.assign({}, reactData.pendingRowMaps);
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 = getRowid($xeTable, row);
7439
+ const rowid = handleGetRowId(row);
7303
7440
  if (rowid) {
7304
- if (pendingMaps[rowid]) {
7305
- delete pendingMaps[rowid];
7441
+ if (pendingRowMaps[rowid]) {
7442
+ delete pendingRowMaps[rowid];
7306
7443
  }
7307
7444
  else {
7308
- pendingMaps[rowid] = row;
7445
+ pendingRowMaps[rowid] = row;
7309
7446
  }
7310
7447
  }
7311
7448
  });
7312
- reactData.pendingRowMaps = pendingMaps;
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 } = reactData;
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
- this.pendingRowMaps = {};
7342
- return this.$nextTick();
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 rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
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 rExpandLazyLoadedMaps[rowid];
7689
+ delete rowExpandLazyLoadedMaps[rowid];
7552
7690
  }
7553
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
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 { expandOpts, rowExpandLazyLoadedMaps } = this;
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
- this.clearRowExpandLoaded(row)
7566
- .then(() => this.handleAsyncRowExpand(row));
7706
+ $xeTable.clearRowExpandLoaded(row)
7707
+ .then(() => handleAsyncRowExpand($xeTable, row));
7567
7708
  }
7568
- return this.$nextTick();
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 { expandOpts, rowExpandLazyLoadedMaps, expandColumn: column } = this;
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(this, row);
7734
+ const rowid = getRowid($xeTable, row);
7589
7735
  if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
7590
- const expanded = !this.isRowExpandByRow(row);
7591
- const columnIndex = this.getColumnIndex(column);
7592
- const $columnIndex = this.getVMColumnIndex(column);
7593
- this.setRowExpand(row, expanded);
7594
- this.emitEvent('toggle-row-expand', { expanded, column, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) }, evnt);
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 { rowExpandedMaps, fullAllDataRowIdData, rowExpandLazyLoadedMaps, expandOpts, expandColumn } = this;
7692
- let rExpandedMaps = Object.assign({}, rowExpandedMaps);
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
- rExpandedMaps = {};
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 = getRowid(this, row);
7710
- if (!rExpandedMaps[rowid]) {
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(this.handleAsyncRowExpand(row));
7831
+ lazyRests.push(handleAsyncRowExpand($xeTable, row));
7715
7832
  }
7716
7833
  else {
7717
- rExpandedMaps[rowid] = row;
7834
+ rowExpandedMaps[rowid] = row;
7718
7835
  }
7719
7836
  }
7720
7837
  });
7721
7838
  }
7722
7839
  else {
7723
7840
  validRows.forEach((item) => {
7724
- const rowid = getRowid(this, item);
7725
- if (rExpandedMaps[rowid]) {
7726
- delete rExpandedMaps[rowid];
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
- this.rowExpandedMaps = rExpandedMaps;
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 { rowExpandedMaps } = this;
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
- reactData.rowExpandedMaps = {};
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(this.rowExpandedMaps, item => {
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(this.treeExpandedMaps, item => {
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 (tExpandedMaps[rowid]) {
7850
- delete tExpandedMaps[rowid];
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
- reactData.treeExpandedMaps = {};
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 { treeOpts, treeExpandLazyLoadedMaps } = this;
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(this, row);
8003
+ const rowid = getRowid($xeTable, row);
7877
8004
  if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
7878
- return this.clearTreeExpandLoaded(row).then(() => {
7879
- return this.handleAsyncTreeExpandChilds(row);
8005
+ return $xeTable.clearTreeExpandLoaded(row).then(() => {
8006
+ return handleAsyncTreeExpandChilds($xeTable, row);
7880
8007
  }).then(() => {
7881
8008
  if (transform) {
7882
8009
  handleVirtualTreeToList($xeTable);
7883
- return this.handleTableData();
8010
+ return $xeTable.handleTableData();
7884
8011
  }
7885
8012
  }).then(() => {
7886
- return this.recalculate();
8013
+ return $xeTable.recalculate();
7887
8014
  });
7888
8015
  }
7889
- return this.$nextTick();
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 this.reloadTreeExpand(row);
8024
+ return $xeTable.reloadTreeExpand(row);
7897
8025
  },
7898
8026
  /**
7899
8027
  * 展开树节点事件
7900
8028
  */
7901
8029
  triggerTreeExpandEvent(evnt, params) {
7902
- const { treeOpts, treeExpandLazyLoadedMaps } = this;
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 = !this.isTreeExpandByRow(row);
7912
- const columnIndex = this.getColumnIndex(column);
7913
- const $columnIndex = this.getVMColumnIndex(column);
7914
- this.setTreeExpand(row, expanded);
7915
- this.emitEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
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 { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeOpts, treeExpandLazyLoadedMaps, treeNodeColumn } = this;
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 = this.getColumnIndex(treeNodeColumn);
8036
- const $columnIndex = this.getVMColumnIndex(treeNodeColumn);
8037
- let validRows = toggleMethod ? rows.filter((row) => toggleMethod({ expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows;
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 = getRowid(this, item);
8045
- if (treeTempExpandedMaps[rowid]) {
8046
- delete treeTempExpandedMaps[rowid];
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 = getRowid(this, row);
8054
- if (!treeTempExpandedMaps[rowid]) {
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(this.handleAsyncTreeExpandChilds(row));
8115
+ result.push(handleAsyncTreeExpandChilds($xeTable, row));
8061
8116
  }
8062
8117
  else {
8063
8118
  if (row[childrenField] && row[childrenField].length) {
8064
- treeTempExpandedMaps[rowid] = row;
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 = getRowid(this, item);
8074
- if (treeTempExpandedMaps[rowid]) {
8075
- delete treeTempExpandedMaps[rowid];
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) => this.handleTreeExpandReserve(row, expanded));
8135
+ validRows.forEach((row) => handleTreeExpandReserve($xeTable, row, expanded));
8081
8136
  }
8082
- this.treeExpandedMaps = treeTempExpandedMaps;
8137
+ reactData.treeExpandedFlag++;
8083
8138
  return Promise.all(result).then(() => {
8084
- return this.recalculate();
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 { treeExpandedMaps } = this;
8139
- return !!treeExpandedMaps[getRowid(this, row)];
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 { treeOpts, tableFullData } = this;
8147
- const { transform, reserve } = treeOpts;
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 expList = this.getTreeExpandRecords();
8150
- this.treeExpandedMaps = {};
8210
+ const { transform, reserve } = treeOpts;
8211
+ const expList = $xeTable.getTreeExpandRecords();
8212
+ internalData.treeExpandedMaps = {};
8213
+ reactData.treeExpandedFlag++;
8151
8214
  if (reserve) {
8152
- XEUtils.eachTree(tableFullData, row => this.handleTreeExpandReserve(row, false), { children: childrenField });
8215
+ XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), { children: childrenField });
8153
8216
  }
8154
- return this.handleTableData().then(() => {
8217
+ return $xeTable.handleTableData().then(() => {
8155
8218
  if (transform) {
8156
8219
  handleVirtualTreeToList($xeTable);
8157
- return this.handleTableData();
8220
+ return $xeTable.handleTableData();
8158
8221
  }
8159
8222
  }).then(() => {
8160
8223
  if (expList.length) {
8161
- this.recalculate();
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, rowExpandedMaps } = reactData;
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, null);
9132
+ setMerges(this, merges, this.mergeFooterList);
9082
9133
  return this.$nextTick().then(() => {
9083
9134
  this.updateCellAreas();
9084
9135
  return updateStyle($xeTable);