vxe-table 4.12.0-beta.8 → 4.12.0

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 (185) hide show
  1. package/es/grid/src/grid.js +58 -44
  2. package/es/locale/lang/ar-EG.js +7 -1
  3. package/es/locale/lang/de-DE.js +7 -1
  4. package/es/locale/lang/en-US.js +7 -1
  5. package/es/locale/lang/es-ES.js +7 -1
  6. package/es/locale/lang/fr-FR.js +7 -1
  7. package/es/locale/lang/hu-HU.js +7 -1
  8. package/es/locale/lang/hy-AM.js +7 -1
  9. package/es/locale/lang/id-ID.js +7 -1
  10. package/es/locale/lang/it-IT.js +7 -1
  11. package/es/locale/lang/ja-JP.js +7 -1
  12. package/es/locale/lang/ko-KR.js +7 -1
  13. package/es/locale/lang/nb-NO.js +7 -1
  14. package/es/locale/lang/pt-BR.js +7 -1
  15. package/es/locale/lang/ru-RU.js +7 -1
  16. package/es/locale/lang/th-TH.js +7 -1
  17. package/es/locale/lang/ug-CN.js +7 -1
  18. package/es/locale/lang/uk-UA.js +7 -1
  19. package/es/locale/lang/vi-VN.js +7 -1
  20. package/es/locale/lang/zh-CHT.js +7 -1
  21. package/es/locale/lang/zh-CN.js +7 -1
  22. package/es/style.css +1 -1
  23. package/es/table/module/custom/hook.js +1 -1
  24. package/es/table/module/custom/panel.js +4 -2
  25. package/es/table/module/edit/hook.js +11 -12
  26. package/es/table/module/export/export-panel.js +3 -2
  27. package/es/table/module/export/import-panel.js +3 -2
  28. package/es/table/module/filter/panel.js +12 -2
  29. package/es/table/module/keyboard/hook.js +105 -30
  30. package/es/table/module/menu/hook.js +2 -1
  31. package/es/table/module/validator/hook.js +4 -3
  32. package/es/table/render/index.js +3 -3
  33. package/es/table/src/body.js +40 -21
  34. package/es/table/src/cell.js +43 -24
  35. package/es/table/src/columnInfo.js +2 -2
  36. package/es/table/src/footer.js +12 -7
  37. package/es/table/src/header.js +12 -7
  38. package/es/table/src/props.js +4 -0
  39. package/es/table/src/table.js +444 -423
  40. package/es/table/src/util.js +34 -6
  41. package/es/ui/index.js +2 -1
  42. package/es/ui/src/log.js +1 -1
  43. package/helper/vetur/attributes.json +1 -1
  44. package/helper/vetur/tags.json +1 -1
  45. package/lib/grid/src/grid.js +55 -48
  46. package/lib/grid/src/grid.min.js +1 -1
  47. package/lib/index.umd.js +515 -302
  48. package/lib/index.umd.min.js +1 -1
  49. package/lib/locale/lang/ar-EG.js +7 -1
  50. package/lib/locale/lang/ar-EG.min.js +1 -1
  51. package/lib/locale/lang/de-DE.js +7 -1
  52. package/lib/locale/lang/de-DE.min.js +1 -1
  53. package/lib/locale/lang/en-US.js +7 -1
  54. package/lib/locale/lang/en-US.min.js +1 -1
  55. package/lib/locale/lang/en-US.umd.js +7 -1
  56. package/lib/locale/lang/es-ES.js +7 -1
  57. package/lib/locale/lang/es-ES.min.js +1 -1
  58. package/lib/locale/lang/es-ES.umd.js +7 -1
  59. package/lib/locale/lang/fr-FR.js +7 -1
  60. package/lib/locale/lang/fr-FR.min.js +1 -1
  61. package/lib/locale/lang/hu-HU.js +7 -1
  62. package/lib/locale/lang/hu-HU.min.js +1 -1
  63. package/lib/locale/lang/hu-HU.umd.js +7 -1
  64. package/lib/locale/lang/hy-AM.js +7 -1
  65. package/lib/locale/lang/hy-AM.min.js +1 -1
  66. package/lib/locale/lang/id-ID.js +7 -1
  67. package/lib/locale/lang/id-ID.min.js +1 -1
  68. package/lib/locale/lang/it-IT.js +7 -1
  69. package/lib/locale/lang/it-IT.min.js +1 -1
  70. package/lib/locale/lang/ja-JP.js +7 -1
  71. package/lib/locale/lang/ja-JP.min.js +1 -1
  72. package/lib/locale/lang/ja-JP.umd.js +7 -1
  73. package/lib/locale/lang/ko-KR.js +7 -1
  74. package/lib/locale/lang/ko-KR.min.js +1 -1
  75. package/lib/locale/lang/ko-KR.umd.js +7 -1
  76. package/lib/locale/lang/nb-NO.js +7 -1
  77. package/lib/locale/lang/nb-NO.min.js +1 -1
  78. package/lib/locale/lang/pt-BR.js +7 -1
  79. package/lib/locale/lang/pt-BR.min.js +1 -1
  80. package/lib/locale/lang/pt-BR.umd.js +7 -1
  81. package/lib/locale/lang/ru-RU.js +7 -1
  82. package/lib/locale/lang/ru-RU.min.js +1 -1
  83. package/lib/locale/lang/ru-RU.umd.js +7 -1
  84. package/lib/locale/lang/th-TH.js +7 -1
  85. package/lib/locale/lang/th-TH.min.js +1 -1
  86. package/lib/locale/lang/ug-CN.js +7 -1
  87. package/lib/locale/lang/ug-CN.min.js +1 -1
  88. package/lib/locale/lang/uk-UA.js +7 -1
  89. package/lib/locale/lang/uk-UA.min.js +1 -1
  90. package/lib/locale/lang/uk-UA.umd.js +7 -1
  91. package/lib/locale/lang/vi-VN.js +7 -1
  92. package/lib/locale/lang/vi-VN.min.js +1 -1
  93. package/lib/locale/lang/zh-CHT.js +7 -1
  94. package/lib/locale/lang/zh-CHT.min.js +1 -1
  95. package/lib/locale/lang/zh-CN.js +7 -1
  96. package/lib/locale/lang/zh-CN.min.js +1 -1
  97. package/lib/locale/lang/zh-CN.umd.js +7 -1
  98. package/lib/style.css +1 -1
  99. package/lib/table/module/custom/hook.js +1 -1
  100. package/lib/table/module/custom/hook.min.js +1 -1
  101. package/lib/table/module/custom/panel.js +4 -2
  102. package/lib/table/module/custom/panel.min.js +1 -1
  103. package/lib/table/module/edit/hook.js +13 -13
  104. package/lib/table/module/edit/hook.min.js +1 -1
  105. package/lib/table/module/export/export-panel.js +3 -2
  106. package/lib/table/module/export/export-panel.min.js +1 -1
  107. package/lib/table/module/export/import-panel.js +3 -2
  108. package/lib/table/module/export/import-panel.min.js +1 -1
  109. package/lib/table/module/filter/panel.js +8 -2
  110. package/lib/table/module/filter/panel.min.js +1 -1
  111. package/lib/table/module/keyboard/hook.js +113 -31
  112. package/lib/table/module/keyboard/hook.min.js +1 -1
  113. package/lib/table/module/menu/hook.js +2 -1
  114. package/lib/table/module/menu/hook.min.js +1 -1
  115. package/lib/table/module/validator/hook.js +5 -4
  116. package/lib/table/module/validator/hook.min.js +1 -1
  117. package/lib/table/render/index.js +4 -3
  118. package/lib/table/render/index.min.js +1 -1
  119. package/lib/table/src/body.js +48 -20
  120. package/lib/table/src/body.min.js +1 -1
  121. package/lib/table/src/cell.js +49 -25
  122. package/lib/table/src/cell.min.js +1 -1
  123. package/lib/table/src/columnInfo.js +2 -4
  124. package/lib/table/src/columnInfo.min.js +1 -1
  125. package/lib/table/src/footer.js +12 -5
  126. package/lib/table/src/footer.min.js +1 -1
  127. package/lib/table/src/header.js +12 -5
  128. package/lib/table/src/header.min.js +1 -1
  129. package/lib/table/src/props.js +4 -0
  130. package/lib/table/src/props.min.js +1 -1
  131. package/lib/table/src/table.js +534 -459
  132. package/lib/table/src/table.min.js +1 -1
  133. package/lib/table/src/util.js +36 -6
  134. package/lib/table/src/util.min.js +1 -1
  135. package/lib/ui/index.js +2 -1
  136. package/lib/ui/index.min.js +1 -1
  137. package/lib/ui/src/log.js +1 -1
  138. package/lib/ui/src/log.min.js +1 -1
  139. package/package.json +2 -2
  140. package/packages/grid/src/grid.ts +62 -50
  141. package/packages/locale/lang/ar-EG.ts +7 -1
  142. package/packages/locale/lang/de-DE.ts +7 -1
  143. package/packages/locale/lang/en-US.ts +7 -1
  144. package/packages/locale/lang/es-ES.ts +7 -1
  145. package/packages/locale/lang/fr-FR.ts +7 -1
  146. package/packages/locale/lang/hu-HU.ts +7 -1
  147. package/packages/locale/lang/hy-AM.ts +7 -1
  148. package/packages/locale/lang/id-ID.ts +7 -1
  149. package/packages/locale/lang/it-IT.ts +7 -1
  150. package/packages/locale/lang/ja-JP.ts +7 -1
  151. package/packages/locale/lang/ko-KR.ts +7 -1
  152. package/packages/locale/lang/nb-NO.ts +7 -1
  153. package/packages/locale/lang/pt-BR.ts +7 -1
  154. package/packages/locale/lang/ru-RU.ts +7 -1
  155. package/packages/locale/lang/th-TH.ts +7 -1
  156. package/packages/locale/lang/ug-CN.ts +7 -1
  157. package/packages/locale/lang/uk-UA.ts +7 -1
  158. package/packages/locale/lang/vi-VN.ts +7 -1
  159. package/packages/locale/lang/zh-CHT.ts +7 -1
  160. package/packages/locale/lang/zh-CN.ts +7 -1
  161. package/packages/table/module/custom/hook.ts +1 -1
  162. package/packages/table/module/custom/panel.ts +6 -2
  163. package/packages/table/module/edit/hook.ts +12 -12
  164. package/packages/table/module/export/export-panel.ts +4 -2
  165. package/packages/table/module/export/import-panel.ts +4 -2
  166. package/packages/table/module/filter/panel.ts +12 -2
  167. package/packages/table/module/keyboard/hook.ts +106 -32
  168. package/packages/table/module/menu/hook.ts +3 -1
  169. package/packages/table/module/validator/hook.ts +5 -3
  170. package/packages/table/render/index.ts +3 -4
  171. package/packages/table/src/body.ts +41 -21
  172. package/packages/table/src/cell.ts +43 -24
  173. package/packages/table/src/columnInfo.ts +3 -2
  174. package/packages/table/src/footer.ts +13 -7
  175. package/packages/table/src/header.ts +13 -7
  176. package/packages/table/src/props.ts +4 -0
  177. package/packages/table/src/table.ts +451 -421
  178. package/packages/table/src/util.ts +39 -6
  179. package/packages/ui/index.ts +1 -0
  180. /package/es/{iconfont.1741333670965.ttf → iconfont.1742955995631.ttf} +0 -0
  181. /package/es/{iconfont.1741333670965.woff → iconfont.1742955995631.woff} +0 -0
  182. /package/es/{iconfont.1741333670965.woff2 → iconfont.1742955995631.woff2} +0 -0
  183. /package/lib/{iconfont.1741333670965.ttf → iconfont.1742955995631.ttf} +0 -0
  184. /package/lib/{iconfont.1741333670965.woff → iconfont.1742955995631.woff} +0 -0
  185. /package/lib/{iconfont.1741333670965.woff2 → iconfont.1742955995631.woff2} +0 -0
@@ -9,7 +9,7 @@ import TableHeaderComponent from './header';
9
9
  import TableFooterComponent from './footer';
10
10
  import tableProps from './props';
11
11
  import tableEmits from './emits';
12
- import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, updateDeepRowKey, updateFastRowKey } from './util';
12
+ import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId } from './util';
13
13
  import { getSlotVNs } from '../../ui/src/vn';
14
14
  import { warnLog, errLog } from '../../ui/src/log';
15
15
  import TableCustomPanelComponent from '../module/custom/panel';
@@ -18,6 +18,7 @@ import TableImportPanelComponent from '../module/export/import-panel';
18
18
  import TableExportPanelComponent from '../module/export/export-panel';
19
19
  import TableMenuPanelComponent from '../module/menu/panel';
20
20
  const { getConfig, getIcon, getI18n, renderer, formats, createEvent, globalResize, interceptor, hooks, globalEvents, GLOBAL_EVENT_KEYS, useFns, renderEmptyElement } = VxeUI;
21
+ const supportMaxRow = 5e6;
21
22
  const customStorageKey = 'VXE_CUSTOM_STORE';
22
23
  const maxYHeight = 5e6;
23
24
  const maxXWidth = 5e6;
@@ -67,8 +68,6 @@ export default defineComponent({
67
68
  isAllSelected: false,
68
69
  // 复选框属性,有选中且非全选状态
69
70
  isIndeterminate: false,
70
- // 复选框属性,已选中的行集合
71
- selectCheckboxMaps: {},
72
71
  // 当前行
73
72
  currentRow: null,
74
73
  // 单选框属性,选中列
@@ -82,16 +81,6 @@ export default defineComponent({
82
81
  // 树节点列信息
83
82
  treeNodeColumn: null,
84
83
  hasFixedColumn: false,
85
- // 已展开的行集合
86
- rowExpandedMaps: {},
87
- // 懒加载中的展开行的集合
88
- rowExpandLazyLoadedMaps: {},
89
- // 已展开树节点集合
90
- treeExpandedMaps: {},
91
- // 懒加载中的树节点的集合
92
- treeExpandLazyLoadedMaps: {},
93
- // 树节点不确定状态的集合
94
- treeIndeterminateMaps: {},
95
84
  // 合并单元格的对象集
96
85
  mergeList: [],
97
86
  // 合并表尾数据的对象集
@@ -100,8 +89,6 @@ export default defineComponent({
100
89
  upDataFlag: 0,
101
90
  // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
102
91
  reColumnFlag: 0,
103
- // 已标记的对象集
104
- pendingRowMaps: {},
105
92
  // 初始化标识
106
93
  initStore: {
107
94
  filter: false,
@@ -245,6 +232,10 @@ export default defineComponent({
245
232
  isHeader: false,
246
233
  isFooter: false
247
234
  },
235
+ rowExpandedFlag: 1,
236
+ treeExpandedFlag: 1,
237
+ updateCheckboxFlag: 1,
238
+ pendingRowFlag: 1,
248
239
  rowHeightStore: {
249
240
  default: 48,
250
241
  medium: 44,
@@ -261,6 +252,7 @@ export default defineComponent({
261
252
  rowExpandHeightFlag: 1,
262
253
  calcCellHeightFlag: 1,
263
254
  resizeHeightFlag: 1,
255
+ resizeWidthFlag: 1,
264
256
  isCustomStatus: false,
265
257
  isDragRowMove: false,
266
258
  dragRow: null,
@@ -344,6 +336,18 @@ export default defineComponent({
344
336
  fullColumnIdData: {},
345
337
  fullColumnFieldData: {},
346
338
  // prevDragRow: null,
339
+ // 已展开的行集合
340
+ rowExpandedMaps: {},
341
+ // 懒加载中的展开行的集合
342
+ rowExpandLazyLoadedMaps: {},
343
+ // 已展开树节点集合
344
+ treeExpandedMaps: {},
345
+ // 懒加载中的树节点的集合
346
+ treeExpandLazyLoadedMaps: {},
347
+ // 复选框属性,已选中的行集合
348
+ selectCheckboxMaps: {},
349
+ // 已标记的对象集
350
+ pendingRowMaps: {},
347
351
  inited: false,
348
352
  tooltipTimeout: null,
349
353
  initStatus: false,
@@ -464,18 +468,36 @@ export default defineComponent({
464
468
  const computeColumnOpts = computed(() => {
465
469
  return Object.assign({}, getConfig().table.columnConfig, props.columnConfig);
466
470
  });
471
+ const computeCurrentColumnOpts = computed(() => {
472
+ return Object.assign({}, getConfig().table.currentColumnConfig, props.currentColumnConfig);
473
+ });
467
474
  const computeCellOpts = computed(() => {
468
- return Object.assign({}, getConfig().table.cellConfig, props.cellConfig);
475
+ const cellOpts = Object.assign({}, getConfig().table.cellConfig, props.cellConfig);
476
+ if (cellOpts.height) {
477
+ cellOpts.height = XEUtils.toNumber(cellOpts.height);
478
+ }
479
+ return cellOpts;
469
480
  });
470
481
  const computeHeaderCellOpts = computed(() => {
471
- return Object.assign({}, getConfig().table.headerCellConfig, props.headerCellConfig);
482
+ const headerCellOpts = Object.assign({}, getConfig().table.headerCellConfig, props.headerCellConfig);
483
+ if (headerCellOpts.height) {
484
+ headerCellOpts.height = XEUtils.toNumber(headerCellOpts.height);
485
+ }
486
+ return headerCellOpts;
472
487
  });
473
488
  const computeFooterCellOpts = computed(() => {
474
- return Object.assign({}, getConfig().table.footerCellConfig, props.footerCellConfig);
489
+ const footerCellOpts = Object.assign({}, getConfig().table.footerCellConfig, props.footerCellConfig);
490
+ if (footerCellOpts.height) {
491
+ footerCellOpts.height = XEUtils.toNumber(footerCellOpts.height);
492
+ }
493
+ return footerCellOpts;
475
494
  });
476
495
  const computeRowOpts = computed(() => {
477
496
  return Object.assign({}, getConfig().table.rowConfig, props.rowConfig);
478
497
  });
498
+ const computeCurrentRowOpts = computed(() => {
499
+ return Object.assign({}, getConfig().table.currentRowConfig, props.currentRowConfig);
500
+ });
479
501
  const computeRowDragOpts = computed(() => {
480
502
  return Object.assign({}, getConfig().table.rowDragConfig, props.rowDragConfig);
481
503
  });
@@ -616,12 +638,14 @@ export default defineComponent({
616
638
  return Object.assign({}, getConfig().table.customConfig, props.customConfig);
617
639
  });
618
640
  const computeTableRowExpandedList = computed(() => {
619
- const { rowExpandedMaps, tableData, expandColumn } = reactData;
641
+ const { rowExpandedFlag, tableData, expandColumn } = reactData;
642
+ const { rowExpandedMaps } = internalData;
643
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
620
644
  const expandList = [];
621
- if (expandColumn) {
645
+ if (expandColumn && rowExpandedFlag) {
622
646
  const rowKeys = {};
623
647
  tableData.forEach(row => {
624
- rowKeys[getRowid($xeTable, row)] = true;
648
+ rowKeys[handleGetRowId(row)] = true;
625
649
  });
626
650
  XEUtils.each(rowExpandedMaps, (row, rowid) => {
627
651
  if (rowKeys[rowid]) {
@@ -734,13 +758,16 @@ export default defineComponent({
734
758
  computeScrollbarXToTop,
735
759
  computeScrollbarYToLeft,
736
760
  computeColumnOpts,
761
+ computeCurrentColumnOpts,
737
762
  computeScrollXThreshold,
738
763
  computeScrollYThreshold,
764
+ computeRowHeightMaps,
739
765
  computeDefaultRowHeight,
740
766
  computeCellOpts,
741
767
  computeHeaderCellOpts,
742
768
  computeFooterCellOpts,
743
769
  computeRowOpts,
770
+ computeCurrentRowOpts,
744
771
  computeRowDragOpts,
745
772
  computeColumnDragOpts,
746
773
  computeResizeOpts,
@@ -788,6 +815,7 @@ export default defineComponent({
788
815
  internalData,
789
816
  getRefMaps: () => refMaps,
790
817
  getComputeMaps: () => computeMaps,
818
+ xeGrid: $xeGrid,
791
819
  xegrid: $xeGrid
792
820
  };
793
821
  const eqCellValue = (row1, row2, field) => {
@@ -942,12 +970,13 @@ export default defineComponent({
942
970
  visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1;
943
971
  }
944
972
  else {
973
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
945
974
  let leftIndex = 0;
946
975
  let rightIndex = afterFullData.length;
947
976
  while (leftIndex < rightIndex) {
948
977
  const rIndex = Math.floor((leftIndex + rightIndex) / 2);
949
978
  const row = afterFullData[rIndex];
950
- const rowid = getRowid($xeTable, row);
979
+ const rowid = handleGetRowId(row);
951
980
  const rowRest = fullAllDataRowIdData[rowid] || {};
952
981
  if (rowRest.oTop <= startTop) {
953
982
  leftIndex = rIndex + 1;
@@ -959,7 +988,7 @@ export default defineComponent({
959
988
  toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0);
960
989
  for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
961
990
  const row = afterFullData[rIndex];
962
- const rowid = getRowid($xeTable, row);
991
+ const rowid = handleGetRowId(row);
963
992
  const rowRest = fullAllDataRowIdData[rowid] || {};
964
993
  visibleSize++;
965
994
  if (rowRest.oTop > endTop || visibleSize >= 100) {
@@ -1198,7 +1227,7 @@ export default defineComponent({
1198
1227
  }
1199
1228
  else {
1200
1229
  if ((storage && !type) || (columnOpts.drag && (isCrossDrag || isSelfToChildDrag))) {
1201
- errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field`]);
1230
+ errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field=?`]);
1202
1231
  }
1203
1232
  }
1204
1233
  if (!hasFixed && fixed) {
@@ -1442,6 +1471,7 @@ export default defineComponent({
1442
1471
  internalData.headerHeight = headerHeight;
1443
1472
  internalData.footerHeight = footerHeight;
1444
1473
  reactData.overflowX = overflowX;
1474
+ reactData.resizeWidthFlag++;
1445
1475
  updateColumnOffsetLeft();
1446
1476
  updateHeight();
1447
1477
  reactData.parentHeight = Math.max(internalData.headerHeight + footerHeight + 20, $xeTable.getParentHeight());
@@ -1467,9 +1497,10 @@ export default defineComponent({
1467
1497
  const defaultRowHeight = computeDefaultRowHeight.value;
1468
1498
  const el = refElem.value;
1469
1499
  if (!isAllOverflow && scrollYLoad && el) {
1500
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1470
1501
  el.setAttribute('data-calc-row', 'Y');
1471
1502
  tableData.forEach(row => {
1472
- const rowid = getRowid($xeTable, row);
1503
+ const rowid = handleGetRowId(row);
1473
1504
  const rowRest = fullAllDataRowIdData[rowid];
1474
1505
  if (rowRest) {
1475
1506
  const reHeight = calcCellAutoHeight(rowRest, el);
@@ -1505,9 +1536,10 @@ export default defineComponent({
1505
1536
  const updateAfterListIndex = () => {
1506
1537
  const { treeConfig } = props;
1507
1538
  const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData;
1539
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1508
1540
  const fullMaps = {};
1509
1541
  afterFullData.forEach((row, index) => {
1510
- const rowid = getRowid($xeTable, row);
1542
+ const rowid = handleGetRowId(row);
1511
1543
  const rowRest = fullAllDataRowIdData[rowid];
1512
1544
  const seq = index + 1;
1513
1545
  if (rowRest) {
@@ -1537,8 +1569,9 @@ export default defineComponent({
1537
1569
  const childrenField = treeOpts.children || treeOpts.childrenField;
1538
1570
  const fullMaps = {};
1539
1571
  if (treeConfig) {
1572
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1540
1573
  XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
1541
- const rowid = getRowid($xeTable, row);
1574
+ const rowid = handleGetRowId(row);
1542
1575
  const rowRest = fullAllDataRowIdData[rowid];
1543
1576
  const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('');
1544
1577
  if (rowRest) {
@@ -1565,16 +1598,16 @@ export default defineComponent({
1565
1598
  */
1566
1599
  const handleVirtualTreeToList = () => {
1567
1600
  const { treeConfig } = props;
1568
- const { treeExpandedMaps } = reactData;
1569
- const { fullAllDataRowIdData } = internalData;
1601
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
1570
1602
  const treeOpts = computeTreeOpts.value;
1571
1603
  const childrenField = treeOpts.children || treeOpts.childrenField;
1572
1604
  if (treeConfig && treeOpts.transform) {
1605
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1573
1606
  const fullData = [];
1574
1607
  const expandMaps = {};
1575
1608
  XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
1576
- const rowid = getRowid($xeTable, row);
1577
- const parentRowid = getRowid($xeTable, parentRow);
1609
+ const rowid = handleGetRowId(row);
1610
+ const parentRowid = handleGetRowId(parentRow);
1578
1611
  if (!parentRow || (expandMaps[parentRowid] && treeExpandedMaps[parentRowid])) {
1579
1612
  const rowRest = fullAllDataRowIdData[rowid];
1580
1613
  if (rowRest) {
@@ -1602,7 +1635,7 @@ export default defineComponent({
1602
1635
  const treeOpts = computeTreeOpts.value;
1603
1636
  const childrenField = treeOpts.children || treeOpts.childrenField;
1604
1637
  const { transform, rowField, parentField, mapChildrenField } = treeOpts;
1605
- const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
1638
+ const { isEvery, remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
1606
1639
  const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts;
1607
1640
  let tableData = [];
1608
1641
  let tableTree = [];
@@ -1661,7 +1694,7 @@ export default defineComponent({
1661
1694
  // 筛选虚拟树
1662
1695
  tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
1663
1696
  original: true,
1664
- isEvery: true,
1697
+ isEvery,
1665
1698
  children: mapChildrenField,
1666
1699
  mapChildren: childrenField
1667
1700
  });
@@ -1677,7 +1710,7 @@ export default defineComponent({
1677
1710
  // 还原虚拟树
1678
1711
  tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
1679
1712
  original: true,
1680
- isEvery: true,
1713
+ isEvery,
1681
1714
  children: mapChildrenField,
1682
1715
  mapChildren: childrenField
1683
1716
  });
@@ -1727,7 +1760,7 @@ export default defineComponent({
1727
1760
  // 还原虚拟树
1728
1761
  tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
1729
1762
  original: true,
1730
- isEvery: true,
1763
+ isEvery,
1731
1764
  children: treeOpts.mapChildrenField,
1732
1765
  mapChildren: childrenField
1733
1766
  });
@@ -1745,7 +1778,7 @@ export default defineComponent({
1745
1778
  const updateStyle = () => {
1746
1779
  const { border, showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props;
1747
1780
  const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn } = reactData;
1748
- const { visibleColumn, fullColumnIdData, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData;
1781
+ const { visibleColumn, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData;
1749
1782
  const el = refElem.value;
1750
1783
  if (!el) {
1751
1784
  return;
@@ -1754,7 +1787,6 @@ export default defineComponent({
1754
1787
  const osbWidth = overflowY ? scrollbarWidth : 0;
1755
1788
  const osbHeight = overflowX ? scrollbarHeight : 0;
1756
1789
  const emptyPlaceholderElem = refEmptyPlaceholder.value;
1757
- const cellOffsetWidth = computeCellOffsetWidth.value;
1758
1790
  const mouseOpts = computeMouseOpts.value;
1759
1791
  const expandOpts = computeExpandOpts.value;
1760
1792
  const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper']);
@@ -2022,56 +2054,6 @@ export default defineComponent({
2022
2054
  tableElem.style.width = tWidth ? `${tWidth}px` : '';
2023
2055
  }
2024
2056
  }
2025
- const colgroupElem = getRefElem(elemStore[`${name}-${layout}-colgroup`]);
2026
- if (colgroupElem) {
2027
- XEUtils.arrayEach(colgroupElem.children, (colElem) => {
2028
- const colid = colElem.getAttribute('name');
2029
- if (fullColumnIdData[colid]) {
2030
- const colRest = fullColumnIdData[colid];
2031
- const column = colRest.column;
2032
- const { showHeaderOverflow, showFooterOverflow, showOverflow } = column;
2033
- let cellOverflow;
2034
- colElem.style.width = `${column.renderWidth}px`;
2035
- if (layout === 'header') {
2036
- cellOverflow = XEUtils.isUndefined(showHeaderOverflow) || XEUtils.isNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow;
2037
- }
2038
- else if (layout === 'footer') {
2039
- cellOverflow = XEUtils.isUndefined(showFooterOverflow) || XEUtils.isNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow;
2040
- }
2041
- else {
2042
- cellOverflow = XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow) ? isAllOverflow : showOverflow;
2043
- }
2044
- const showEllipsis = cellOverflow === 'ellipsis';
2045
- const showTitle = cellOverflow === 'title';
2046
- const showTooltip = cellOverflow === true || cellOverflow === 'tooltip';
2047
- let hasEllipsis = showTitle || showTooltip || showEllipsis;
2048
- const listElem = getRefElem(elemStore[`${name}-${layout}-list`]);
2049
- // 纵向虚拟滚动不支持动态行高
2050
- if (scrollYLoad && !hasEllipsis) {
2051
- hasEllipsis = true;
2052
- }
2053
- if (listElem) {
2054
- XEUtils.arrayEach(listElem.querySelectorAll(`.${column.id}`), (elem) => {
2055
- const colspan = parseInt(elem.getAttribute('colspan') || 1);
2056
- const cellElem = elem.querySelector('.vxe-cell');
2057
- let colWidth = column.renderWidth;
2058
- if (cellElem) {
2059
- if (colspan > 1) {
2060
- const columnIndex = $xeTable.getColumnIndex(column);
2061
- for (let index = 1; index < colspan; index++) {
2062
- const nextColumn = $xeTable.getColumns(columnIndex + index);
2063
- if (nextColumn) {
2064
- colWidth += nextColumn.renderWidth;
2065
- }
2066
- }
2067
- }
2068
- cellElem.style.width = hasEllipsis ? `${colWidth - (cellOffsetWidth * colspan)}px` : '';
2069
- }
2070
- });
2071
- }
2072
- }
2073
- });
2074
- }
2075
2057
  });
2076
2058
  });
2077
2059
  if (currentRow) {
@@ -2232,12 +2214,12 @@ export default defineComponent({
2232
2214
  };
2233
2215
  const handleCheckedAllCheckboxRow = (checked, isForce) => {
2234
2216
  const { treeConfig } = props;
2235
- const { selectCheckboxMaps } = reactData;
2236
- const { afterFullData, checkboxReserveRowMap } = internalData;
2217
+ const { afterFullData, checkboxReserveRowMap, selectCheckboxMaps } = internalData;
2237
2218
  const treeOpts = computeTreeOpts.value;
2238
2219
  const childrenField = treeOpts.children || treeOpts.childrenField;
2239
2220
  const checkboxOpts = computeCheckboxOpts.value;
2240
2221
  const { checkField, reserve, checkMethod } = checkboxOpts;
2222
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
2241
2223
  // indeterminateField 仅支持读取
2242
2224
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
2243
2225
  const selectRowMaps = {};
@@ -2249,7 +2231,7 @@ export default defineComponent({
2249
2231
  const checkValFn = (row) => {
2250
2232
  if (isForce || (!checkMethod || checkMethod({ row }))) {
2251
2233
  if (checked) {
2252
- selectRowMaps[getRowid($xeTable, row)] = row;
2234
+ selectRowMaps[handleGetRowId(row)] = row;
2253
2235
  }
2254
2236
  XEUtils.set(row, checkField, checked);
2255
2237
  }
@@ -2279,7 +2261,8 @@ export default defineComponent({
2279
2261
  */
2280
2262
  XEUtils.eachTree(afterFullData, (row) => {
2281
2263
  if (isForce || (!checkMethod || checkMethod({ row }))) {
2282
- selectRowMaps[getRowid($xeTable, row)] = row;
2264
+ const rowid = handleGetRowId(row);
2265
+ selectRowMaps[rowid] = row;
2283
2266
  }
2284
2267
  }, { children: childrenField });
2285
2268
  }
@@ -2290,7 +2273,7 @@ export default defineComponent({
2290
2273
  */
2291
2274
  if (!isForce && checkMethod) {
2292
2275
  XEUtils.eachTree(afterFullData, (row) => {
2293
- const rowid = getRowid($xeTable, row);
2276
+ const rowid = handleGetRowId(row);
2294
2277
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
2295
2278
  selectRowMaps[rowid] = row;
2296
2279
  }
@@ -2307,7 +2290,7 @@ export default defineComponent({
2307
2290
  */
2308
2291
  if (!isForce && checkMethod) {
2309
2292
  afterFullData.forEach((row) => {
2310
- const rowid = getRowid($xeTable, row);
2293
+ const rowid = handleGetRowId(row);
2311
2294
  if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
2312
2295
  selectRowMaps[rowid] = row;
2313
2296
  }
@@ -2315,7 +2298,8 @@ export default defineComponent({
2315
2298
  }
2316
2299
  else {
2317
2300
  afterFullData.forEach(row => {
2318
- selectRowMaps[getRowid($xeTable, row)] = row;
2301
+ const rowid = handleGetRowId(row);
2302
+ selectRowMaps[rowid] = row;
2319
2303
  });
2320
2304
  }
2321
2305
  }
@@ -2327,7 +2311,7 @@ export default defineComponent({
2327
2311
  */
2328
2312
  if (!isForce && checkMethod) {
2329
2313
  afterFullData.forEach((row) => {
2330
- const rowid = getRowid($xeTable, row);
2314
+ const rowid = handleGetRowId(row);
2331
2315
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
2332
2316
  selectRowMaps[rowid] = row;
2333
2317
  }
@@ -2346,10 +2330,10 @@ export default defineComponent({
2346
2330
  afterFullData.forEach((row) => handleCheckboxReserveRow(row, false));
2347
2331
  }
2348
2332
  }
2349
- reactData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
2333
+ reactData.updateCheckboxFlag++;
2334
+ internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
2350
2335
  reactData.isAllSelected = checked;
2351
2336
  reactData.isIndeterminate = false;
2352
- reactData.treeIndeterminateMaps = {};
2353
2337
  internalData.treeIndeterminateRowMaps = {};
2354
2338
  $xeTable.checkSelectionStatus();
2355
2339
  return nextTick();
@@ -2357,8 +2341,8 @@ export default defineComponent({
2357
2341
  // 还原展开、选中等相关状态
2358
2342
  const handleReserveStatus = () => {
2359
2343
  const { treeConfig } = props;
2360
- const { expandColumn, currentRow, selectCheckboxMaps, selectRadioRow, rowExpandedMaps, treeExpandedMaps } = reactData;
2361
- const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData;
2344
+ const { expandColumn, currentRow, selectRadioRow } = reactData;
2345
+ const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow, selectCheckboxMaps, treeExpandedMaps, rowExpandedMaps } = internalData;
2362
2346
  const expandOpts = computeExpandOpts.value;
2363
2347
  const treeOpts = computeTreeOpts.value;
2364
2348
  const radioOpts = computeRadioOpts.value;
@@ -2375,7 +2359,8 @@ export default defineComponent({
2375
2359
  }
2376
2360
  }
2377
2361
  // 复选框
2378
- reactData.selectCheckboxMaps = getRecoverRowMaps(selectCheckboxMaps); // 刷新多选行状态
2362
+ internalData.selectCheckboxMaps = getRecoverRowMaps(selectCheckboxMaps); // 刷新多选行状态
2363
+ reactData.updateCheckboxFlag++;
2379
2364
  // 还原保留选中状态
2380
2365
  if (checkboxOpts.reserve) {
2381
2366
  handleCheckedCheckboxRow(handleReserveRow(internalData.checkboxReserveRowMap), true, true);
@@ -2384,13 +2369,15 @@ export default defineComponent({
2384
2369
  reactData.currentRow = null; // 刷新当前行状态
2385
2370
  }
2386
2371
  // 行展开
2387
- reactData.rowExpandedMaps = expandColumn ? getRecoverRowMaps(rowExpandedMaps) : {}; // 刷新行展开状态
2372
+ internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps(rowExpandedMaps) : {}; // 刷新行展开状态
2373
+ reactData.rowExpandedFlag++;
2388
2374
  // 还原保留状态
2389
2375
  if (expandColumn && expandOpts.reserve) {
2390
2376
  $xeTable.setRowExpand(handleReserveRow(internalData.rowExpandedReserveRowMap), true);
2391
2377
  }
2392
2378
  // 树展开
2393
- reactData.treeExpandedMaps = treeConfig ? getRecoverRowMaps(treeExpandedMaps) : {}; // 刷新树展开状态
2379
+ internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps(treeExpandedMaps) : {}; // 刷新树展开状态
2380
+ reactData.treeExpandedFlag++;
2394
2381
  if (treeConfig && treeOpts.reserve) {
2395
2382
  $xeTable.setTreeExpand(handleReserveRow(internalData.treeExpandedReserveRowMap), true);
2396
2383
  }
@@ -2406,7 +2393,7 @@ export default defineComponent({
2406
2393
  const { expandAll, expandRowKeys } = treeOpts;
2407
2394
  const childrenField = treeOpts.children || treeOpts.childrenField;
2408
2395
  if (expandAll) {
2409
- tableMethods.setAllTreeExpand(true);
2396
+ $xeTable.setAllTreeExpand(true);
2410
2397
  }
2411
2398
  else if (expandRowKeys) {
2412
2399
  const defExpandeds = [];
@@ -2417,7 +2404,7 @@ export default defineComponent({
2417
2404
  defExpandeds.push(matchObj.item);
2418
2405
  }
2419
2406
  });
2420
- tableMethods.setTreeExpand(defExpandeds, true);
2407
+ $xeTable.setTreeExpand(defExpandeds, true);
2421
2408
  }
2422
2409
  }
2423
2410
  };
@@ -2428,8 +2415,7 @@ export default defineComponent({
2428
2415
  const { checkStrictly } = checkboxOpts;
2429
2416
  return new Promise(resolve => {
2430
2417
  if (loadMethod) {
2431
- const { treeExpandLazyLoadedMaps } = reactData;
2432
- const { fullAllDataRowIdData } = internalData;
2418
+ const { fullAllDataRowIdData, treeExpandLazyLoadedMaps } = internalData;
2433
2419
  const rowid = getRowid($xeTable, row);
2434
2420
  const rowRest = fullAllDataRowIdData[rowid];
2435
2421
  treeExpandLazyLoadedMaps[rowid] = row;
@@ -2444,18 +2430,19 @@ export default defineComponent({
2444
2430
  childRecords = [];
2445
2431
  }
2446
2432
  if (childRecords) {
2447
- return tableMethods.loadTreeChildren(row, childRecords).then(childRows => {
2448
- const { treeExpandedMaps } = reactData;
2433
+ return $xeTable.loadTreeChildren(row, childRecords).then(childRows => {
2434
+ const { treeExpandedMaps } = internalData;
2449
2435
  if (childRows.length && !treeExpandedMaps[rowid]) {
2450
2436
  treeExpandedMaps[rowid] = row;
2451
2437
  }
2438
+ reactData.treeExpandedFlag++;
2452
2439
  // 如果当前节点已选中,则展开后子节点也被选中
2453
- if (!checkStrictly && tableMethods.isCheckedByCheckboxRow(row)) {
2440
+ if (!checkStrictly && $xeTable.isCheckedByCheckboxRow(row)) {
2454
2441
  handleCheckedCheckboxRow(childRows, true);
2455
2442
  }
2456
2443
  return nextTick().then(() => {
2457
2444
  if (transform) {
2458
- tablePrivateMethods.handleTableData();
2445
+ $xeTable.handleTableData();
2459
2446
  updateAfterDataIndex();
2460
2447
  return nextTick();
2461
2448
  }
@@ -2463,7 +2450,7 @@ export default defineComponent({
2463
2450
  });
2464
2451
  }
2465
2452
  }).catch(() => {
2466
- const { treeExpandLazyLoadedMaps } = reactData;
2453
+ const { treeExpandLazyLoadedMaps } = internalData;
2467
2454
  if (rowRest) {
2468
2455
  rowRest.treeLoaded = false;
2469
2456
  }
@@ -2471,7 +2458,8 @@ export default defineComponent({
2471
2458
  delete treeExpandLazyLoadedMaps[rowid];
2472
2459
  }
2473
2460
  }).finally(() => {
2474
- nextTick().then(() => tableMethods.recalculate()).then(() => resolve());
2461
+ reactData.treeExpandedFlag++;
2462
+ nextTick().then(() => $xeTable.recalculate()).then(() => resolve());
2475
2463
  });
2476
2464
  }
2477
2465
  else {
@@ -2497,29 +2485,27 @@ export default defineComponent({
2497
2485
  const expandOpts = computeExpandOpts.value;
2498
2486
  const { loadMethod } = expandOpts;
2499
2487
  if (loadMethod) {
2500
- const { fullAllDataRowIdData } = internalData;
2501
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
2488
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
2502
2489
  const rowid = getRowid($xeTable, row);
2503
2490
  const rowRest = fullAllDataRowIdData[rowid];
2504
- rExpandLazyLoadedMaps[rowid] = row;
2505
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
2506
- loadMethod({ $table: $xeTable, row, rowIndex: tableMethods.getRowIndex(row), $rowIndex: tableMethods.getVMRowIndex(row) }).then(() => {
2507
- const rowTempExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
2491
+ rowExpandLazyLoadedMaps[rowid] = row;
2492
+ loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
2493
+ const { rowExpandedMaps } = internalData;
2508
2494
  if (rowRest) {
2509
2495
  rowRest.expandLoaded = true;
2510
2496
  }
2511
- rowTempExpandedMaps[rowid] = row;
2512
- reactData.rowExpandedMaps = rowTempExpandedMaps;
2497
+ rowExpandedMaps[rowid] = row;
2498
+ reactData.rowExpandedFlag++;
2513
2499
  }).catch(() => {
2514
2500
  if (rowRest) {
2515
2501
  rowRest.expandLoaded = false;
2516
2502
  }
2517
2503
  }).finally(() => {
2518
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
2519
- if (rExpandLazyLoadedMaps[rowid]) {
2520
- delete rExpandLazyLoadedMaps[rowid];
2504
+ const { rowExpandLazyLoadedMaps } = internalData;
2505
+ if (rowExpandLazyLoadedMaps[rowid]) {
2506
+ delete rowExpandLazyLoadedMaps[rowid];
2521
2507
  }
2522
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
2508
+ reactData.rowExpandedFlag++;
2523
2509
  nextTick()
2524
2510
  .then(() => $xeTable.recalculate())
2525
2511
  .then(() => $xeTable.updateCellAreas())
@@ -2622,9 +2608,6 @@ export default defineComponent({
2622
2608
  calcCellWidth();
2623
2609
  autoCellWidth();
2624
2610
  updateStyle();
2625
- if (reFull) {
2626
- updateRowOffsetTop();
2627
- }
2628
2611
  updateRowExpandStyle();
2629
2612
  return computeScrollLoad().then(() => {
2630
2613
  if (reFull === true) {
@@ -2653,6 +2636,9 @@ export default defineComponent({
2653
2636
  const childrenField = treeOpts.children || treeOpts.childrenField;
2654
2637
  let treeData = [];
2655
2638
  let fullData = reactive(datas ? datas.slice(0) : []); // 转为响应式数据
2639
+ if (fullData.length > supportMaxRow) {
2640
+ errLog('vxe.error.errMaxRow', [supportMaxRow]);
2641
+ }
2656
2642
  if (treeConfig) {
2657
2643
  if (transform) {
2658
2644
  // 树结构自动转换
@@ -2860,8 +2846,8 @@ export default defineComponent({
2860
2846
  return result;
2861
2847
  };
2862
2848
  const parseColumns = (isReset) => {
2863
- const { showOverflow } = props;
2864
- const rowOpts = computeRowOpts.value;
2849
+ // const { showOverflow } = props
2850
+ // const rowOpts = computeRowOpts.value
2865
2851
  const leftList = [];
2866
2852
  const centerList = [];
2867
2853
  const rightList = [];
@@ -2934,28 +2920,28 @@ export default defineComponent({
2934
2920
  reactData.hasFixedColumn = leftList.length > 0 || rightList.length > 0;
2935
2921
  Object.assign(columnStore, { leftList, centerList, rightList });
2936
2922
  if (scrollXLoad) {
2937
- if (showOverflow) {
2938
- if (!rowOpts.height) {
2939
- const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false);
2940
- if (errColumn) {
2941
- errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true']);
2942
- }
2943
- }
2923
+ // if (showOverflow) {
2924
+ // if (!rowOpts.height) {
2925
+ // const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false)
2926
+ // if (errColumn) {
2927
+ // errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
2928
+ // }
2929
+ // }
2930
+ // }
2931
+ // if (process.env.NODE_ENV === 'development') {
2932
+ // if (props.showHeader && !props.showHeaderOverflow) {
2933
+ // warnLog('vxe.error.reqProp', ['show-header-overflow'])
2934
+ // }
2935
+ // if (props.showFooter && !props.showFooterOverflow) {
2936
+ // warnLog('vxe.error.reqProp', ['show-footer-overflow'])
2937
+ // }
2938
+ if (props.spanMethod) {
2939
+ warnLog('vxe.error.scrollErrProp', ['span-method']);
2944
2940
  }
2945
- if (process.env.NODE_ENV === 'development') {
2946
- // if (props.showHeader && !props.showHeaderOverflow) {
2947
- // warnLog('vxe.error.reqProp', ['show-header-overflow'])
2948
- // }
2949
- // if (props.showFooter && !props.showFooterOverflow) {
2950
- // warnLog('vxe.error.reqProp', ['show-footer-overflow'])
2951
- // }
2952
- if (props.spanMethod) {
2953
- warnLog('vxe.error.scrollErrProp', ['span-method']);
2954
- }
2955
- if (props.footerSpanMethod) {
2956
- warnLog('vxe.error.scrollErrProp', ['footer-span-method']);
2957
- }
2941
+ if (props.footerSpanMethod) {
2942
+ warnLog('vxe.error.scrollErrProp', ['footer-span-method']);
2958
2943
  }
2944
+ // }
2959
2945
  if (isReset) {
2960
2946
  const { visibleSize } = handleVirtualXVisible();
2961
2947
  scrollXStore.startIndex = 0;
@@ -3055,9 +3041,8 @@ export default defineComponent({
3055
3041
  * @returns
3056
3042
  */
3057
3043
  const handleBaseTreeExpand = (rows, expanded) => {
3058
- const { treeExpandedMaps, treeExpandLazyLoadedMaps, treeNodeColumn } = reactData;
3059
- const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
3060
- const { fullAllDataRowIdData, tableFullData } = internalData;
3044
+ const { treeNodeColumn } = reactData;
3045
+ const { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData;
3061
3046
  const treeOpts = computeTreeOpts.value;
3062
3047
  const { reserve, lazy, accordion, toggleMethod } = treeOpts;
3063
3048
  const childrenField = treeOpts.children || treeOpts.childrenField;
@@ -3065,6 +3050,7 @@ export default defineComponent({
3065
3050
  const result = [];
3066
3051
  const columnIndex = tableMethods.getColumnIndex(treeNodeColumn);
3067
3052
  const $columnIndex = tableMethods.getVMColumnIndex(treeNodeColumn);
3053
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
3068
3054
  let validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows;
3069
3055
  if (accordion) {
3070
3056
  validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
@@ -3072,17 +3058,17 @@ export default defineComponent({
3072
3058
  const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField });
3073
3059
  if (matchObj) {
3074
3060
  matchObj.items.forEach(item => {
3075
- const rowid = getRowid($xeTable, item);
3076
- if (treeTempExpandedMaps[rowid]) {
3077
- delete treeTempExpandedMaps[rowid];
3061
+ const rowid = handleGetRowId(item);
3062
+ if (treeExpandedMaps[rowid]) {
3063
+ delete treeExpandedMaps[rowid];
3078
3064
  }
3079
3065
  });
3080
3066
  }
3081
3067
  }
3082
3068
  if (expanded) {
3083
3069
  validRows.forEach((row) => {
3084
- const rowid = getRowid($xeTable, row);
3085
- if (!treeTempExpandedMaps[rowid]) {
3070
+ const rowid = handleGetRowId(row);
3071
+ if (!treeExpandedMaps[rowid]) {
3086
3072
  const rowRest = fullAllDataRowIdData[rowid];
3087
3073
  if (rowRest) {
3088
3074
  const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
@@ -3092,7 +3078,7 @@ export default defineComponent({
3092
3078
  }
3093
3079
  else {
3094
3080
  if (row[childrenField] && row[childrenField].length) {
3095
- treeTempExpandedMaps[rowid] = row;
3081
+ treeExpandedMaps[rowid] = row;
3096
3082
  }
3097
3083
  }
3098
3084
  }
@@ -3101,16 +3087,16 @@ export default defineComponent({
3101
3087
  }
3102
3088
  else {
3103
3089
  validRows.forEach(item => {
3104
- const rowid = getRowid($xeTable, item);
3105
- if (treeTempExpandedMaps[rowid]) {
3106
- delete treeTempExpandedMaps[rowid];
3090
+ const rowid = handleGetRowId(item);
3091
+ if (treeExpandedMaps[rowid]) {
3092
+ delete treeExpandedMaps[rowid];
3107
3093
  }
3108
3094
  });
3109
3095
  }
3110
3096
  if (reserve) {
3111
3097
  validRows.forEach((row) => handleTreeExpandReserve(row, expanded));
3112
3098
  }
3113
- reactData.treeExpandedMaps = treeTempExpandedMaps;
3099
+ reactData.treeExpandedFlag++;
3114
3100
  return Promise.all(result).then(() => {
3115
3101
  return tableMethods.recalculate();
3116
3102
  });
@@ -3139,9 +3125,9 @@ export default defineComponent({
3139
3125
  handleCheckedAllCheckboxRow(value);
3140
3126
  if (evnt) {
3141
3127
  dispatchEvent('checkbox-all', {
3142
- records: $xeTable.getCheckboxRecords(),
3143
- reserves: $xeTable.getCheckboxReserveRecords(),
3144
- indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
3128
+ records: () => $xeTable.getCheckboxRecords(),
3129
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
3130
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
3145
3131
  checked: value
3146
3132
  }, evnt);
3147
3133
  }
@@ -3172,10 +3158,11 @@ export default defineComponent({
3172
3158
  }
3173
3159
  };
3174
3160
  const createGetRowCacheProp = (prop) => {
3161
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
3175
3162
  return function (row) {
3176
3163
  const { fullAllDataRowIdData } = internalData;
3177
3164
  if (row) {
3178
- const rowid = getRowid($xeTable, row);
3165
+ const rowid = handleGetRowId(row);
3179
3166
  const rowRest = fullAllDataRowIdData[rowid];
3180
3167
  if (rowRest) {
3181
3168
  return rowRest[prop];
@@ -3326,7 +3313,7 @@ export default defineComponent({
3326
3313
  };
3327
3314
  const handleUpdateColResize = (evnt, params) => {
3328
3315
  $xeTable.analyColumnWidth();
3329
- $xeTable.recalculate(true).then(() => {
3316
+ $xeTable.recalculate().then(() => {
3330
3317
  $xeTable.saveCustomStore('update:width');
3331
3318
  $xeTable.updateCellAreas();
3332
3319
  $xeTable.dispatchEvent('column-resizable-change', params, evnt);
@@ -3337,7 +3324,7 @@ export default defineComponent({
3337
3324
  };
3338
3325
  const handleUpdateRowResize = (evnt, params) => {
3339
3326
  reactData.resizeHeightFlag++;
3340
- $xeTable.recalculate(true).then(() => {
3327
+ $xeTable.recalculate().then(() => {
3341
3328
  $xeTable.updateCellAreas();
3342
3329
  $xeTable.dispatchEvent('row-resizable-change', params, evnt);
3343
3330
  setTimeout(() => $xeTable.recalculate(true), 300);
@@ -3355,16 +3342,17 @@ export default defineComponent({
3355
3342
  }
3356
3343
  };
3357
3344
  const updateRowOffsetTop = () => {
3358
- const { expandColumn, rowExpandedMaps } = reactData;
3359
- const { afterFullData, fullAllDataRowIdData } = internalData;
3345
+ const { expandColumn } = reactData;
3346
+ const { afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
3360
3347
  const expandOpts = computeExpandOpts.value;
3361
3348
  const rowOpts = computeRowOpts.value;
3362
3349
  const cellOpts = computeCellOpts.value;
3363
3350
  const defaultRowHeight = computeDefaultRowHeight.value;
3351
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
3364
3352
  let offsetTop = 0;
3365
3353
  for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
3366
3354
  const row = afterFullData[rIndex];
3367
- const rowid = getRowid($xeTable, row);
3355
+ const rowid = handleGetRowId(row);
3368
3356
  const rowRest = fullAllDataRowIdData[rowid] || {};
3369
3357
  rowRest.oTop = offsetTop;
3370
3358
  offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
@@ -3744,9 +3732,12 @@ export default defineComponent({
3744
3732
  */
3745
3733
  revertData(rows, field) {
3746
3734
  const { keepSource, treeConfig } = props;
3735
+ const { editStore } = reactData;
3747
3736
  const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
3737
+ const removeTempMaps = Object.assign({}, editStore.removeMaps);
3748
3738
  const treeOpts = computeTreeOpts.value;
3749
3739
  const { transform } = treeOpts;
3740
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
3750
3741
  if (!keepSource) {
3751
3742
  if (process.env.NODE_ENV === 'development') {
3752
3743
  errLog('vxe.error.reqProp', ['keep-source']);
@@ -3765,7 +3756,7 @@ export default defineComponent({
3765
3756
  let reDelFlag = false;
3766
3757
  if (targetRows.length) {
3767
3758
  targetRows.forEach((item) => {
3768
- const rowid = getRowid($xeTable, item);
3759
+ const rowid = handleGetRowId(item);
3769
3760
  const rowRest = fullAllDataRowIdData[rowid];
3770
3761
  if (rowRest) {
3771
3762
  const row = rowRest.row;
@@ -3779,6 +3770,7 @@ export default defineComponent({
3779
3770
  XEUtils.destructuring(row, XEUtils.clone(oRow, true));
3780
3771
  }
3781
3772
  if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
3773
+ delete removeTempMaps[rowid];
3782
3774
  tableFullData.unshift(row);
3783
3775
  afterFullData.unshift(row);
3784
3776
  reDelFlag = true;
@@ -3790,6 +3782,7 @@ export default defineComponent({
3790
3782
  }
3791
3783
  if (rows) {
3792
3784
  if (reDelFlag) {
3785
+ editStore.removeMaps = removeTempMaps;
3793
3786
  $xeTable.updateFooter();
3794
3787
  $xeTable.cacheRowMap(false);
3795
3788
  $xeTable.handleTableData(treeConfig && transform);
@@ -3942,14 +3935,14 @@ export default defineComponent({
3942
3935
  },
3943
3936
  /**
3944
3937
  * 检查行或列数据是否发生改变
3945
- * @param {Row} rowOrId 行对象、行主键
3938
+ * @param {Row} rowidOrRow 行对象、行主键
3946
3939
  * @param {String} field 字段名
3947
3940
  */
3948
- isUpdateByRow(rowOrId, field) {
3941
+ isUpdateByRow(rowidOrRow, field) {
3949
3942
  const { keepSource } = props;
3950
3943
  const { tableFullColumn, fullDataRowIdData, sourceDataRowIdData } = internalData;
3951
3944
  if (keepSource) {
3952
- const rowid = XEUtils.isString(rowOrId) || XEUtils.isNumber(rowOrId) ? rowOrId : getRowid($xeTable, rowOrId);
3945
+ const rowid = XEUtils.isString(rowidOrRow) || XEUtils.isNumber(rowidOrRow) ? rowidOrRow : getRowid($xeTable, rowidOrRow);
3953
3946
  const rowRest = fullDataRowIdData[rowid];
3954
3947
  // 新增的数据不需要检测
3955
3948
  if (!rowRest) {
@@ -4126,8 +4119,7 @@ export default defineComponent({
4126
4119
  */
4127
4120
  getCheckboxRecords(isFull) {
4128
4121
  const { treeConfig } = props;
4129
- const { selectCheckboxMaps } = reactData;
4130
- const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData;
4122
+ const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
4131
4123
  const treeOpts = computeTreeOpts.value;
4132
4124
  const checkboxOpts = computeCheckboxOpts.value;
4133
4125
  const { transform, mapChildrenField } = treeOpts;
@@ -4457,12 +4449,13 @@ export default defineComponent({
4457
4449
  },
4458
4450
  getRowHeightConf(isFull) {
4459
4451
  const { fullAllDataRowIdData, afterFullData } = internalData;
4452
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4460
4453
  const rowOpts = computeRowOpts.value;
4461
4454
  const cellOpts = computeCellOpts.value;
4462
4455
  const defaultRowHeight = computeDefaultRowHeight.value;
4463
4456
  const rest = {};
4464
4457
  afterFullData.forEach(row => {
4465
- const rowid = getRowid($xeTable, row);
4458
+ const rowid = handleGetRowId(row);
4466
4459
  const rowRest = fullAllDataRowIdData[rowid];
4467
4460
  if (rowRest) {
4468
4461
  const resizeHeight = rowRest.resizeHeight;
@@ -4486,8 +4479,9 @@ export default defineComponent({
4486
4479
  rHeight = Math.floor(rHeight * bodyHeight);
4487
4480
  }
4488
4481
  if (rHeight) {
4482
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4489
4483
  rows.forEach(row => {
4490
- const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : getRowid($xeTable, row);
4484
+ const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row);
4491
4485
  const rowRest = fullAllDataRowIdData[rowid];
4492
4486
  if (rowRest) {
4493
4487
  rowRest.resizeHeight = rHeight;
@@ -4636,12 +4630,11 @@ export default defineComponent({
4636
4630
  */
4637
4631
  getCheckboxIndeterminateRecords(isFull) {
4638
4632
  const { treeConfig } = props;
4639
- const { fullDataRowIdData } = internalData;
4640
- const { treeIndeterminateMaps } = reactData;
4633
+ const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData;
4641
4634
  if (treeConfig) {
4642
4635
  const fullRest = [];
4643
4636
  const defRest = [];
4644
- XEUtils.each(treeIndeterminateMaps, (item, rowid) => {
4637
+ XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
4645
4638
  if (item) {
4646
4639
  fullRest.push(item);
4647
4640
  if (fullDataRowIdData[rowid]) {
@@ -4682,17 +4675,18 @@ export default defineComponent({
4682
4675
  return handleCheckedCheckboxRow(rows, checked, true);
4683
4676
  },
4684
4677
  isCheckedByCheckboxRow(row) {
4685
- const { selectCheckboxMaps } = reactData;
4678
+ const { updateCheckboxFlag } = reactData;
4679
+ const { selectCheckboxMaps } = internalData;
4686
4680
  const checkboxOpts = computeCheckboxOpts.value;
4687
4681
  const { checkField } = checkboxOpts;
4688
4682
  if (checkField) {
4689
4683
  return XEUtils.get(row, checkField);
4690
4684
  }
4691
- return !!selectCheckboxMaps[getRowid($xeTable, row)];
4685
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)];
4692
4686
  },
4693
4687
  isCheckedByCheckboxRowKey(rowid) {
4694
- const { selectCheckboxMaps } = reactData;
4695
- const { fullAllDataRowIdData } = internalData;
4688
+ const { updateCheckboxFlag } = reactData;
4689
+ const { fullAllDataRowIdData, selectCheckboxMaps } = internalData;
4696
4690
  const checkboxOpts = computeCheckboxOpts.value;
4697
4691
  const { checkField } = checkboxOpts;
4698
4692
  if (checkField) {
@@ -4702,21 +4696,21 @@ export default defineComponent({
4702
4696
  }
4703
4697
  return false;
4704
4698
  }
4705
- return !!selectCheckboxMaps[rowid];
4699
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
4706
4700
  },
4707
4701
  isIndeterminateByCheckboxRow(row) {
4708
- const { treeIndeterminateMaps } = reactData;
4709
- return !!treeIndeterminateMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
4702
+ const { treeIndeterminateRowMaps } = internalData;
4703
+ return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
4710
4704
  },
4711
4705
  isIndeterminateByCheckboxRowKey(rowid) {
4712
- const { treeIndeterminateMaps } = reactData;
4713
- return !!treeIndeterminateMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
4706
+ const { treeIndeterminateRowMaps } = internalData;
4707
+ return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
4714
4708
  },
4715
4709
  /**
4716
4710
  * 多选,切换某一行的选中状态
4717
4711
  */
4718
4712
  toggleCheckboxRow(row) {
4719
- const { selectCheckboxMaps } = reactData;
4713
+ const { selectCheckboxMaps } = internalData;
4720
4714
  const checkboxOpts = computeCheckboxOpts.value;
4721
4715
  const { checkField } = checkboxOpts;
4722
4716
  const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
@@ -4779,15 +4773,16 @@ export default defineComponent({
4779
4773
  const childrenField = treeOpts.children || treeOpts.childrenField;
4780
4774
  const reserveSelection = [];
4781
4775
  if (checkboxOpts.reserve) {
4776
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4782
4777
  const afterFullIdMaps = {};
4783
4778
  if (treeConfig) {
4784
4779
  XEUtils.eachTree(afterFullData, row => {
4785
- afterFullIdMaps[getRowid($xeTable, row)] = 1;
4780
+ afterFullIdMaps[handleGetRowId(row)] = 1;
4786
4781
  }, { children: childrenField });
4787
4782
  }
4788
4783
  else {
4789
4784
  afterFullData.forEach(row => {
4790
- afterFullIdMaps[getRowid($xeTable, row)] = 1;
4785
+ afterFullIdMaps[handleGetRowId(row)] = 1;
4791
4786
  });
4792
4787
  }
4793
4788
  XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
@@ -4850,8 +4845,9 @@ export default defineComponent({
4850
4845
  }
4851
4846
  reactData.isAllSelected = false;
4852
4847
  reactData.isIndeterminate = false;
4853
- reactData.selectCheckboxMaps = {};
4854
- reactData.treeIndeterminateMaps = {};
4848
+ internalData.selectCheckboxMaps = {};
4849
+ internalData.treeIndeterminateRowMaps = {};
4850
+ reactData.updateCheckboxFlag++;
4855
4851
  return nextTick();
4856
4852
  },
4857
4853
  /**
@@ -4959,13 +4955,20 @@ export default defineComponent({
4959
4955
  * 用于当前列,设置某列行为高亮状态
4960
4956
  */
4961
4957
  setCurrentColumn(fieldOrColumn) {
4958
+ const { mouseConfig } = props;
4959
+ const mouseOpts = computeMouseOpts.value;
4960
+ const isMouseSelected = mouseConfig && mouseOpts.selected;
4962
4961
  const column = handleFieldOrColumn($xeTable, fieldOrColumn);
4963
4962
  if (column) {
4964
- // tableMethods.clearCurrentRow()
4965
- tableMethods.clearCurrentColumn();
4963
+ $xeTable.clearCurrentColumn();
4966
4964
  reactData.currentColumn = column;
4967
4965
  }
4968
- return nextTick();
4966
+ return nextTick().then(() => {
4967
+ // 更新状选中态
4968
+ if (isMouseSelected) {
4969
+ $xeTable.addCellSelectedClass();
4970
+ }
4971
+ });
4969
4972
  },
4970
4973
  /**
4971
4974
  * 用于当前列,手动清空当前高亮的状态
@@ -4975,59 +4978,60 @@ export default defineComponent({
4975
4978
  return nextTick();
4976
4979
  },
4977
4980
  setPendingRow(rows, status) {
4978
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps);
4981
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4982
+ const { pendingRowMaps } = internalData;
4979
4983
  if (rows && !XEUtils.isArray(rows)) {
4980
4984
  rows = [rows];
4981
4985
  }
4982
4986
  if (status) {
4983
4987
  rows.forEach((row) => {
4984
- const rowid = getRowid($xeTable, row);
4985
- if (rowid && !pendingMaps[rowid]) {
4986
- pendingMaps[rowid] = row;
4988
+ const rowid = handleGetRowId(row);
4989
+ if (rowid && !pendingRowMaps[rowid]) {
4990
+ pendingRowMaps[rowid] = row;
4987
4991
  }
4988
4992
  });
4989
4993
  }
4990
4994
  else {
4991
4995
  rows.forEach((row) => {
4992
- const rowid = getRowid($xeTable, row);
4993
- if (rowid && pendingMaps[rowid]) {
4994
- delete pendingMaps[rowid];
4996
+ const rowid = handleGetRowId(row);
4997
+ if (rowid && pendingRowMaps[rowid]) {
4998
+ delete pendingRowMaps[rowid];
4995
4999
  }
4996
5000
  });
4997
5001
  }
4998
- reactData.pendingRowMaps = pendingMaps;
5002
+ reactData.pendingRowFlag++;
4999
5003
  return nextTick();
5000
5004
  },
5001
5005
  togglePendingRow(rows) {
5002
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps);
5006
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5007
+ const { pendingRowMaps } = internalData;
5003
5008
  if (rows && !XEUtils.isArray(rows)) {
5004
5009
  rows = [rows];
5005
5010
  }
5006
5011
  rows.forEach((row) => {
5007
- const rowid = getRowid($xeTable, row);
5012
+ const rowid = handleGetRowId(row);
5008
5013
  if (rowid) {
5009
- if (pendingMaps[rowid]) {
5010
- delete pendingMaps[rowid];
5014
+ if (pendingRowMaps[rowid]) {
5015
+ delete pendingRowMaps[rowid];
5011
5016
  }
5012
5017
  else {
5013
- pendingMaps[rowid] = row;
5018
+ pendingRowMaps[rowid] = row;
5014
5019
  }
5015
5020
  }
5016
5021
  });
5017
- reactData.pendingRowMaps = pendingMaps;
5022
+ reactData.pendingRowFlag++;
5018
5023
  return nextTick();
5019
5024
  },
5020
5025
  hasPendingByRow(row) {
5021
5026
  return tableMethods.isPendingByRow(row);
5022
5027
  },
5023
5028
  isPendingByRow(row) {
5024
- const { pendingRowMaps } = reactData;
5029
+ const { pendingRowMaps } = internalData;
5025
5030
  const rowid = getRowid($xeTable, row);
5026
5031
  return !!pendingRowMaps[rowid];
5027
5032
  },
5028
5033
  getPendingRecords() {
5029
- const { pendingRowMaps } = reactData;
5030
- const { fullAllDataRowIdData } = internalData;
5034
+ const { fullAllDataRowIdData, pendingRowMaps } = internalData;
5031
5035
  const insertRecords = [];
5032
5036
  XEUtils.each(pendingRowMaps, (row, rowid) => {
5033
5037
  if (fullAllDataRowIdData[rowid]) {
@@ -5037,7 +5041,8 @@ export default defineComponent({
5037
5041
  return insertRecords;
5038
5042
  },
5039
5043
  clearPendingRow() {
5040
- reactData.pendingRowMaps = {};
5044
+ internalData.pendingRowMaps = {};
5045
+ reactData.pendingRowFlag++;
5041
5046
  return nextTick();
5042
5047
  },
5043
5048
  sort(sortConfs, sortOrder) {
@@ -5186,7 +5191,13 @@ export default defineComponent({
5186
5191
  visible: false
5187
5192
  });
5188
5193
  if (visible) {
5189
- dispatchEvent('filter-visible', { column, property: column.field, field: column.field, filterList: $xeTable.getCheckedFilters(), visible: false }, null);
5194
+ dispatchEvent('filter-visible', {
5195
+ column,
5196
+ property: column.field,
5197
+ field: column.field,
5198
+ filterList: () => $xeTable.getCheckedFilters(),
5199
+ visible: false
5200
+ }, null);
5190
5201
  }
5191
5202
  return nextTick();
5192
5203
  },
@@ -5214,17 +5225,16 @@ export default defineComponent({
5214
5225
  return rowRest && !!rowRest.expandLoaded;
5215
5226
  },
5216
5227
  clearRowExpandLoaded(row) {
5217
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
5218
- const { fullAllDataRowIdData } = internalData;
5228
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
5219
5229
  const expandOpts = computeExpandOpts.value;
5220
5230
  const { lazy } = expandOpts;
5221
5231
  const rowid = getRowid($xeTable, row);
5222
5232
  const rowRest = fullAllDataRowIdData[rowid];
5223
5233
  if (lazy && rowRest) {
5224
5234
  rowRest.expandLoaded = false;
5225
- delete rExpandLazyLoadedMaps[rowid];
5235
+ delete rowExpandLazyLoadedMaps[rowid];
5226
5236
  }
5227
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
5237
+ reactData.rowExpandedFlag++;
5228
5238
  return nextTick();
5229
5239
  },
5230
5240
  /**
@@ -5232,12 +5242,12 @@ export default defineComponent({
5232
5242
  * @param {Row} row 行对象
5233
5243
  */
5234
5244
  reloadRowExpand(row) {
5235
- const { rowExpandLazyLoadedMaps } = reactData;
5245
+ const { rowExpandLazyLoadedMaps } = internalData;
5236
5246
  const expandOpts = computeExpandOpts.value;
5237
5247
  const { lazy } = expandOpts;
5238
5248
  const rowid = getRowid($xeTable, row);
5239
5249
  if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
5240
- tableMethods.clearRowExpandLoaded(row)
5250
+ $xeTable.clearRowExpandLoaded(row)
5241
5251
  .then(() => handleAsyncRowExpand(row));
5242
5252
  }
5243
5253
  return nextTick();
@@ -5247,13 +5257,13 @@ export default defineComponent({
5247
5257
  warnLog('vxe.error.delFunc', ['reloadExpandContent', 'reloadRowExpand']);
5248
5258
  }
5249
5259
  // 即将废弃
5250
- return tableMethods.reloadRowExpand(row);
5260
+ return $xeTable.reloadRowExpand(row);
5251
5261
  },
5252
5262
  /**
5253
5263
  * 切换展开行
5254
5264
  */
5255
5265
  toggleRowExpand(row) {
5256
- return tableMethods.setRowExpand(row, !tableMethods.isRowExpandByRow(row));
5266
+ return $xeTable.setRowExpand(row, !$xeTable.isRowExpandByRow(row));
5257
5267
  },
5258
5268
  /**
5259
5269
  * 设置所有行的展开与否
@@ -5282,9 +5292,9 @@ export default defineComponent({
5282
5292
  * @param {Boolean} expanded 是否展开
5283
5293
  */
5284
5294
  setRowExpand(rows, expanded) {
5285
- const { rowExpandedMaps, rowExpandLazyLoadedMaps, expandColumn } = reactData;
5286
- const { fullAllDataRowIdData } = internalData;
5287
- let rExpandedMaps = Object.assign({}, rowExpandedMaps);
5295
+ const { expandColumn } = reactData;
5296
+ let { fullAllDataRowIdData, rowExpandedMaps, rowExpandLazyLoadedMaps } = internalData;
5297
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5288
5298
  const expandOpts = computeExpandOpts.value;
5289
5299
  const { reserve, lazy, accordion, toggleMethod } = expandOpts;
5290
5300
  const lazyRests = [];
@@ -5296,30 +5306,31 @@ export default defineComponent({
5296
5306
  }
5297
5307
  if (accordion) {
5298
5308
  // 只能同时展开一个
5299
- rExpandedMaps = {};
5309
+ rowExpandedMaps = {};
5310
+ internalData.rowExpandedMaps = rowExpandedMaps;
5300
5311
  rows = rows.slice(rows.length - 1, rows.length);
5301
5312
  }
5302
5313
  const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: tableMethods.getRowIndex(row), $rowIndex: tableMethods.getVMRowIndex(row) })) : rows;
5303
5314
  if (expanded) {
5304
5315
  validRows.forEach((row) => {
5305
- const rowid = getRowid($xeTable, row);
5306
- if (!rExpandedMaps[rowid]) {
5316
+ const rowid = handleGetRowId(row);
5317
+ if (!rowExpandedMaps[rowid]) {
5307
5318
  const rowRest = fullAllDataRowIdData[rowid];
5308
5319
  const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
5309
5320
  if (isLoad) {
5310
5321
  lazyRests.push(handleAsyncRowExpand(row));
5311
5322
  }
5312
5323
  else {
5313
- rExpandedMaps[rowid] = row;
5324
+ rowExpandedMaps[rowid] = row;
5314
5325
  }
5315
5326
  }
5316
5327
  });
5317
5328
  }
5318
5329
  else {
5319
5330
  validRows.forEach(item => {
5320
- const rowid = getRowid($xeTable, item);
5321
- if (rExpandedMaps[rowid]) {
5322
- delete rExpandedMaps[rowid];
5331
+ const rowid = handleGetRowId(item);
5332
+ if (rowExpandedMaps[rowid]) {
5333
+ delete rowExpandedMaps[rowid];
5323
5334
  }
5324
5335
  });
5325
5336
  }
@@ -5327,7 +5338,7 @@ export default defineComponent({
5327
5338
  validRows.forEach((row) => handleRowExpandReserve(row, expanded));
5328
5339
  }
5329
5340
  }
5330
- reactData.rowExpandedMaps = rExpandedMaps;
5341
+ reactData.rowExpandedFlag++;
5331
5342
  return Promise.all(lazyRests)
5332
5343
  .then(() => nextTick())
5333
5344
  .then(() => $xeTable.recalculate(true))
@@ -5343,9 +5354,10 @@ export default defineComponent({
5343
5354
  * @param {Row} row 行对象
5344
5355
  */
5345
5356
  isRowExpandByRow(row) {
5346
- const { rowExpandedMaps } = reactData;
5357
+ const { rowExpandedFlag } = reactData;
5358
+ const { rowExpandedMaps } = internalData;
5347
5359
  const rowid = getRowid($xeTable, row);
5348
- return !!rowExpandedMaps[rowid];
5360
+ return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
5349
5361
  },
5350
5362
  isExpandByRow(row) {
5351
5363
  // 已废弃
@@ -5362,7 +5374,8 @@ export default defineComponent({
5362
5374
  const expandOpts = computeExpandOpts.value;
5363
5375
  const { reserve } = expandOpts;
5364
5376
  const expList = $xeTable.getRowExpandRecords();
5365
- reactData.rowExpandedMaps = {};
5377
+ internalData.rowExpandedMaps = {};
5378
+ reactData.rowExpandedFlag++;
5366
5379
  if (reserve) {
5367
5380
  tableFullData.forEach((row) => handleRowExpandReserve(row, false));
5368
5381
  }
@@ -5383,7 +5396,7 @@ export default defineComponent({
5383
5396
  },
5384
5397
  getRowExpandRecords() {
5385
5398
  const rest = [];
5386
- XEUtils.each(reactData.rowExpandedMaps, item => {
5399
+ XEUtils.each(internalData.rowExpandedMaps, item => {
5387
5400
  if (item) {
5388
5401
  rest.push(item);
5389
5402
  }
@@ -5392,7 +5405,7 @@ export default defineComponent({
5392
5405
  },
5393
5406
  getTreeExpandRecords() {
5394
5407
  const rest = [];
5395
- XEUtils.each(reactData.treeExpandedMaps, item => {
5408
+ XEUtils.each(internalData.treeExpandedMaps, item => {
5396
5409
  if (item) {
5397
5410
  rest.push(item);
5398
5411
  }
@@ -5409,12 +5422,10 @@ export default defineComponent({
5409
5422
  return rowRest && !!rowRest.treeLoaded;
5410
5423
  },
5411
5424
  clearTreeExpandLoaded(rows) {
5412
- const { fullAllDataRowIdData } = internalData;
5425
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
5413
5426
  const treeOpts = computeTreeOpts.value;
5414
5427
  const { transform } = treeOpts;
5415
- let tExpandedMaps = {};
5416
5428
  if (rows) {
5417
- tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
5418
5429
  if (!XEUtils.isArray(rows)) {
5419
5430
  rows = [rows];
5420
5431
  }
@@ -5423,8 +5434,8 @@ export default defineComponent({
5423
5434
  const rowRest = fullAllDataRowIdData[rowid];
5424
5435
  if (rowRest) {
5425
5436
  rowRest.treeLoaded = false;
5426
- if (tExpandedMaps[rowid]) {
5427
- delete tExpandedMaps[rowid];
5437
+ if (treeExpandedMaps[rowid]) {
5438
+ delete treeExpandedMaps[rowid];
5428
5439
  }
5429
5440
  }
5430
5441
  });
@@ -5434,7 +5445,8 @@ export default defineComponent({
5434
5445
  rowRest.treeLoaded = false;
5435
5446
  });
5436
5447
  }
5437
- reactData.treeExpandedMaps = {};
5448
+ internalData.treeExpandedMaps = {};
5449
+ reactData.treeExpandedFlag++;
5438
5450
  if (transform) {
5439
5451
  handleVirtualTreeToList();
5440
5452
  return $xeTable.handleTableData();
@@ -5446,7 +5458,7 @@ export default defineComponent({
5446
5458
  * @param {Row} row 行对象
5447
5459
  */
5448
5460
  reloadTreeExpand(row) {
5449
- const { treeExpandLazyLoadedMaps } = reactData;
5461
+ const { treeExpandLazyLoadedMaps } = internalData;
5450
5462
  const treeOpts = computeTreeOpts.value;
5451
5463
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
5452
5464
  const { transform, lazy } = treeOpts;
@@ -5532,8 +5544,9 @@ export default defineComponent({
5532
5544
  * @param {Row} row 行对象
5533
5545
  */
5534
5546
  isTreeExpandByRow(row) {
5535
- const { treeExpandedMaps } = reactData;
5536
- return !!treeExpandedMaps[getRowid($xeTable, row)];
5547
+ const { treeExpandedFlag } = reactData;
5548
+ const { treeExpandedMaps } = internalData;
5549
+ return !!treeExpandedFlag && !!treeExpandedMaps[getRowid($xeTable, row)];
5537
5550
  },
5538
5551
  /**
5539
5552
  * 手动清空树形节点的展开状态,数据会恢复成未展开的状态
@@ -5543,19 +5556,20 @@ export default defineComponent({
5543
5556
  const treeOpts = computeTreeOpts.value;
5544
5557
  const childrenField = treeOpts.children || treeOpts.childrenField;
5545
5558
  const { transform, reserve } = treeOpts;
5546
- const expList = tableMethods.getTreeExpandRecords();
5547
- reactData.treeExpandedMaps = {};
5559
+ const expList = $xeTable.getTreeExpandRecords();
5560
+ internalData.treeExpandedMaps = {};
5561
+ reactData.treeExpandedFlag++;
5548
5562
  if (reserve) {
5549
5563
  XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve(row, false), { children: childrenField });
5550
5564
  }
5551
- return tablePrivateMethods.handleTableData().then(() => {
5565
+ return $xeTable.handleTableData().then(() => {
5552
5566
  if (transform) {
5553
5567
  handleVirtualTreeToList();
5554
- return tablePrivateMethods.handleTableData();
5568
+ return $xeTable.handleTableData();
5555
5569
  }
5556
5570
  }).then(() => {
5557
5571
  if (expList.length) {
5558
- return tableMethods.recalculate();
5572
+ return $xeTable.recalculate();
5559
5573
  }
5560
5574
  });
5561
5575
  },
@@ -5810,7 +5824,13 @@ export default defineComponent({
5810
5824
  const { id } = props;
5811
5825
  const customOpts = computeCustomOpts.value;
5812
5826
  const { collectColumn } = internalData;
5813
- const { checkMethod } = customOpts;
5827
+ const { storage, checkMethod } = customOpts;
5828
+ const isAllCustom = storage === true;
5829
+ const storageOpts = isAllCustom ? {} : Object.assign({}, storage || {});
5830
+ const isCustomResizable = isAllCustom || storageOpts.resizable;
5831
+ const isCustomVisible = isAllCustom || storageOpts.visible;
5832
+ const isCustomFixed = isAllCustom || storageOpts.fixed;
5833
+ const isCustomSort = isAllCustom || storageOpts.sort;
5814
5834
  const resizableData = {};
5815
5835
  const sortData = {};
5816
5836
  const visibleData = {};
@@ -5830,44 +5850,34 @@ export default defineComponent({
5830
5850
  let hasFixed = 0;
5831
5851
  let hasVisible = 0;
5832
5852
  XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => {
5853
+ const colKey = column.getKey();
5854
+ if (!colKey) {
5855
+ errLog('vxe.error.reqProp', [`${column.getTitle() || column.type || ''} -> column.field=?`]);
5856
+ return;
5857
+ }
5833
5858
  // 只支持一级
5834
5859
  if (!parentColumn) {
5835
- collectColumn.forEach((column) => {
5836
- const colKey = column.getKey();
5837
- if (colKey) {
5838
- hasSort = 1;
5839
- sortData[colKey] = column.renderSortNumber;
5840
- }
5841
- });
5842
- if (column.fixed !== column.defaultFixed) {
5843
- const colKey = column.getKey();
5844
- if (colKey) {
5845
- hasFixed = 1;
5846
- fixedData[colKey] = column.fixed;
5847
- }
5860
+ if (isCustomSort) {
5861
+ hasSort = 1;
5862
+ sortData[colKey] = column.renderSortNumber;
5848
5863
  }
5849
- }
5850
- if (column.resizeWidth) {
5851
- const colKey = column.getKey();
5852
- if (colKey) {
5853
- hasResizable = 1;
5854
- resizableData[colKey] = column.renderWidth;
5864
+ if (isCustomFixed && column.fixed !== column.defaultFixed) {
5865
+ hasFixed = 1;
5866
+ fixedData[colKey] = column.fixed;
5855
5867
  }
5856
5868
  }
5857
- if (!checkMethod || checkMethod({ column })) {
5869
+ if (isCustomResizable && column.resizeWidth) {
5870
+ hasResizable = 1;
5871
+ resizableData[colKey] = column.renderWidth;
5872
+ }
5873
+ if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
5858
5874
  if (!column.visible && column.defaultVisible) {
5859
- const colKey = column.getKey();
5860
- if (colKey) {
5861
- hasVisible = 1;
5862
- visibleData[colKey] = false;
5863
- }
5875
+ hasVisible = 1;
5876
+ visibleData[colKey] = false;
5864
5877
  }
5865
5878
  else if (column.visible && !column.defaultVisible) {
5866
- const colKey = column.getKey();
5867
- if (colKey) {
5868
- hasVisible = 1;
5869
- visibleData[colKey] = true;
5870
- }
5879
+ hasVisible = 1;
5880
+ visibleData[colKey] = true;
5871
5881
  }
5872
5882
  }
5873
5883
  });
@@ -6228,7 +6238,7 @@ export default defineComponent({
6228
6238
  $xeTable.moveTabSelected(activeParams, hasShiftKey, evnt);
6229
6239
  }
6230
6240
  else {
6231
- $xeTable.moveSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt);
6241
+ $xeTable.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt);
6232
6242
  }
6233
6243
  }
6234
6244
  else {
@@ -6262,7 +6272,7 @@ export default defineComponent({
6262
6272
  return;
6263
6273
  }
6264
6274
  }
6265
- $xeTable.moveSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt);
6275
+ $xeTable.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt);
6266
6276
  if (enterMethod) {
6267
6277
  enterMethod(etrParams);
6268
6278
  }
@@ -6293,11 +6303,7 @@ export default defineComponent({
6293
6303
  if (!isEditStatus) {
6294
6304
  // 如果按下了方向键
6295
6305
  if (selected.row && selected.column) {
6296
- $xeTable.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
6297
- }
6298
- else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
6299
- // 当前行按键上下移动
6300
- $xeTable.moveCurrentRow(isUpArrow, isDwArrow, evnt);
6306
+ $xeTable.moveArrowSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
6301
6307
  }
6302
6308
  }
6303
6309
  }
@@ -6676,8 +6682,9 @@ export default defineComponent({
6676
6682
  * @param {Event} evnt 事件
6677
6683
  * @param {Row} row 行对象
6678
6684
  */
6679
- const handleTooltip = (evnt, tdEl, overflowElem, tipElem, params) => {
6680
- if (!overflowElem) {
6685
+ const handleTooltip = (evnt, tdEl, overflowElem, params) => {
6686
+ const tipOverEl = overflowElem || tdEl;
6687
+ if (!tipOverEl) {
6681
6688
  return nextTick();
6682
6689
  }
6683
6690
  params.cell = tdEl;
@@ -6687,9 +6694,8 @@ export default defineComponent({
6687
6694
  const { showAll, contentMethod } = tooltipOpts;
6688
6695
  const customContent = contentMethod ? contentMethod(params) : null;
6689
6696
  const useCustom = contentMethod && !XEUtils.eqNull(customContent);
6690
- const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? overflowElem.innerText : overflowElem.textContent).trim();
6691
- const isCellOverflow = overflowElem.scrollWidth > overflowElem.clientWidth;
6692
- if (content && (showAll || useCustom || isCellOverflow)) {
6697
+ const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? tipOverEl.innerText : tipOverEl.textContent).trim();
6698
+ if (content && (showAll || useCustom || (tipOverEl.scrollWidth > tipOverEl.clientWidth))) {
6693
6699
  Object.assign(tooltipStore, {
6694
6700
  row,
6695
6701
  column,
@@ -6699,7 +6705,7 @@ export default defineComponent({
6699
6705
  nextTick(() => {
6700
6706
  const $tooltip = refTooltip.value;
6701
6707
  if ($tooltip && $tooltip.open) {
6702
- $tooltip.open(isCellOverflow ? overflowElem : (tipElem || overflowElem), formatText(content));
6708
+ $tooltip.open(tipOverEl, formatText(content));
6703
6709
  }
6704
6710
  });
6705
6711
  }
@@ -6841,18 +6847,14 @@ export default defineComponent({
6841
6847
  */
6842
6848
  cacheRowMap() {
6843
6849
  const { treeConfig } = props;
6844
- const { treeExpandedMaps } = reactData;
6845
- const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData;
6850
+ const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData;
6846
6851
  const treeOpts = computeTreeOpts.value;
6847
6852
  const childrenField = treeOpts.children || treeOpts.childrenField;
6848
6853
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
6849
6854
  const { lazy } = treeOpts;
6850
- const rowkey = getRowkey($xeTable);
6851
- const isDeepKey = rowkey.indexOf('.') > -1;
6852
6855
  const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
6853
6856
  const fullDataRowIdMaps = {};
6854
- const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
6855
- const handleRowId = isDeepKey ? updateDeepRowKey : updateFastRowKey;
6857
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
6856
6858
  const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
6857
6859
  let rowRest = fullAllDataRowIdMaps[rowid];
6858
6860
  if (!rowRest) {
@@ -6868,18 +6870,19 @@ export default defineComponent({
6868
6870
  rowRest.level = level;
6869
6871
  rowRest.index = currIndex;
6870
6872
  rowRest.treeIndex = index;
6873
+ fullDataRowIdMaps[rowid] = rowRest;
6874
+ fullAllDataRowIdMaps[rowid] = rowRest;
6871
6875
  };
6872
6876
  if (treeConfig) {
6873
6877
  XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
6874
- const rowid = handleRowId(row, rowkey);
6878
+ const rowid = handleUpdateRowId(row);
6875
6879
  if (treeConfig && lazy) {
6876
- const treeExpRest = treeTempExpandedMaps[rowid];
6877
6880
  if (row[hasChildField] && row[childrenField] === undefined) {
6878
6881
  row[childrenField] = null;
6879
6882
  }
6880
- if (treeExpRest) {
6883
+ if (treeExpandedMaps[rowid]) {
6881
6884
  if (!row[childrenField] || !row[childrenField].length) {
6882
- delete treeTempExpandedMaps[rowid];
6885
+ delete treeExpandedMaps[rowid];
6883
6886
  }
6884
6887
  }
6885
6888
  }
@@ -6888,27 +6891,22 @@ export default defineComponent({
6888
6891
  }
6889
6892
  else {
6890
6893
  tableFullData.forEach((row, index, items) => {
6891
- handleRowCache(row, index, items, index, null, handleRowId(row, rowkey), 0, index + 1);
6894
+ handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
6892
6895
  });
6893
6896
  }
6894
6897
  internalData.fullDataRowIdData = fullDataRowIdMaps;
6895
6898
  internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
6896
- reactData.treeExpandedMaps = treeTempExpandedMaps;
6899
+ reactData.treeExpandedFlag++;
6897
6900
  },
6898
6901
  cacheSourceMap(fullData) {
6899
6902
  const { treeConfig } = props;
6900
6903
  const treeOpts = computeTreeOpts.value;
6901
- let { sourceDataRowIdData } = internalData;
6902
6904
  const sourceData = XEUtils.clone(fullData, true);
6903
- const rowkey = getRowkey($xeTable);
6904
- sourceDataRowIdData = internalData.sourceDataRowIdData = {};
6905
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
6906
+ const sourceRowIdData = {};
6905
6907
  const handleSourceRow = (row) => {
6906
- let rowid = getRowid($xeTable, row);
6907
- if (eqEmptyValue(rowid)) {
6908
- rowid = getRowUniqueId();
6909
- XEUtils.set(row, rowkey, rowid);
6910
- }
6911
- sourceDataRowIdData[rowid] = row;
6908
+ const rowid = handleUpdateRowId(row);
6909
+ sourceRowIdData[rowid] = row;
6912
6910
  };
6913
6911
  // 源数据缓存
6914
6912
  if (treeConfig) {
@@ -6918,6 +6916,7 @@ export default defineComponent({
6918
6916
  else {
6919
6917
  sourceData.forEach(handleSourceRow);
6920
6918
  }
6919
+ internalData.sourceDataRowIdData = sourceRowIdData;
6921
6920
  internalData.tableSourceData = sourceData;
6922
6921
  },
6923
6922
  /**
@@ -7369,8 +7368,22 @@ export default defineComponent({
7369
7368
  }
7370
7369
  }
7371
7370
  // 兼容老版本
7372
- let rest;
7373
- if (!evntList.some((func) => func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args)) === false)) {
7371
+ let rest = null;
7372
+ let isStop = false;
7373
+ for (let i = 0; i < evntList.length; i++) {
7374
+ const func = evntList[i];
7375
+ const fnRest = func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args));
7376
+ if (fnRest === false) {
7377
+ isStop = true;
7378
+ break;
7379
+ }
7380
+ else if (fnRest && fnRest.status === false) {
7381
+ rest = fnRest.result;
7382
+ isStop = true;
7383
+ break;
7384
+ }
7385
+ }
7386
+ if (!isStop) {
7374
7387
  if (next) {
7375
7388
  rest = next();
7376
7389
  }
@@ -7382,9 +7395,7 @@ export default defineComponent({
7382
7395
  },
7383
7396
  updateCheckboxStatus() {
7384
7397
  const { treeConfig } = props;
7385
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData;
7386
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
7387
- const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
7398
+ const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
7388
7399
  const treeOpts = computeTreeOpts.value;
7389
7400
  const { transform, mapChildrenField } = treeOpts;
7390
7401
  const childrenField = treeOpts.children || treeOpts.childrenField;
@@ -7396,10 +7407,11 @@ export default defineComponent({
7396
7407
  }
7397
7408
  // 树结构
7398
7409
  if (treeConfig) {
7410
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7399
7411
  const childRowMaps = {};
7400
7412
  const childRowList = [];
7401
7413
  XEUtils.eachTree(afterTreeFullData, (row) => {
7402
- const rowid = getRowid($xeTable, row);
7414
+ const rowid = handleGetRowId(row);
7403
7415
  const childList = row[transform ? mapChildrenField : childrenField];
7404
7416
  if (childList && childList.length && !childRowMaps[rowid]) {
7405
7417
  childRowMaps[rowid] = 1;
@@ -7415,13 +7427,13 @@ export default defineComponent({
7415
7427
  let vLen = 0; // 有效行
7416
7428
  childList.forEach(checkMethod
7417
7429
  ? (item) => {
7418
- const childRowid = getRowid($xeTable, item);
7419
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
7430
+ const childRowid = handleGetRowId(item);
7431
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
7420
7432
  if (checkMethod({ row: item })) {
7421
7433
  if (isSelect) {
7422
7434
  sLen++;
7423
7435
  }
7424
- else if (halfRowMaps[childRowid]) {
7436
+ else if (treeIndeterminateRowMaps[childRowid]) {
7425
7437
  hLen++;
7426
7438
  }
7427
7439
  vLen++;
@@ -7430,18 +7442,18 @@ export default defineComponent({
7430
7442
  if (isSelect) {
7431
7443
  sLen++;
7432
7444
  }
7433
- else if (halfRowMaps[childRowid]) {
7445
+ else if (treeIndeterminateRowMaps[childRowid]) {
7434
7446
  hLen++;
7435
7447
  }
7436
7448
  }
7437
7449
  }
7438
7450
  : item => {
7439
- const childRowid = getRowid($xeTable, item);
7440
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
7451
+ const childRowid = handleGetRowId(item);
7452
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
7441
7453
  if (isSelect) {
7442
7454
  sLen++;
7443
7455
  }
7444
- else if (halfRowMaps[childRowid]) {
7456
+ else if (treeIndeterminateRowMaps[childRowid]) {
7445
7457
  hLen++;
7446
7458
  }
7447
7459
  vLen++;
@@ -7453,51 +7465,50 @@ export default defineComponent({
7453
7465
  }
7454
7466
  if (isSelected) {
7455
7467
  if (!checkField) {
7456
- selectRowMaps[rowid] = row;
7468
+ selectCheckboxMaps[rowid] = row;
7457
7469
  }
7458
- if (halfRowMaps[rowid]) {
7459
- delete halfRowMaps[rowid];
7470
+ if (treeIndeterminateRowMaps[rowid]) {
7471
+ delete treeIndeterminateRowMaps[rowid];
7460
7472
  }
7461
7473
  }
7462
7474
  else {
7463
7475
  if (!checkField) {
7464
- if (selectRowMaps[rowid]) {
7465
- delete selectRowMaps[rowid];
7476
+ if (selectCheckboxMaps[rowid]) {
7477
+ delete selectCheckboxMaps[rowid];
7466
7478
  }
7467
7479
  }
7468
7480
  if (halfSelect) {
7469
- halfRowMaps[rowid] = row;
7481
+ treeIndeterminateRowMaps[rowid] = row;
7470
7482
  }
7471
7483
  else {
7472
- if (halfRowMaps[rowid]) {
7473
- delete halfRowMaps[rowid];
7484
+ if (treeIndeterminateRowMaps[rowid]) {
7485
+ delete treeIndeterminateRowMaps[rowid];
7474
7486
  }
7475
7487
  }
7476
7488
  }
7477
7489
  });
7478
7490
  }
7479
- reactData.selectCheckboxMaps = selectRowMaps;
7480
- reactData.treeIndeterminateMaps = halfRowMaps;
7491
+ reactData.updateCheckboxFlag++;
7481
7492
  },
7482
7493
  updateAllCheckboxStatus() {
7483
7494
  const { treeConfig } = props;
7484
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData;
7495
+ const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
7485
7496
  const checkboxOpts = computeCheckboxOpts.value;
7486
7497
  const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
7487
- const { afterFullData, afterTreeFullData, checkboxReserveRowMap } = internalData;
7498
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7488
7499
  let sLen = 0; // 已选
7489
7500
  let hLen = 0; // 半选
7490
7501
  let vLen = 0; // 有效行
7491
7502
  const rootList = (treeConfig ? afterTreeFullData : afterFullData);
7492
7503
  rootList.forEach(checkMethod
7493
7504
  ? row => {
7494
- const childRowid = getRowid($xeTable, row);
7505
+ const childRowid = handleGetRowId(row);
7495
7506
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
7496
7507
  if (checkMethod({ row })) {
7497
7508
  if (selected) {
7498
7509
  sLen++;
7499
7510
  }
7500
- else if (treeIndeterminateMaps[childRowid]) {
7511
+ else if (treeIndeterminateRowMaps[childRowid]) {
7501
7512
  hLen++;
7502
7513
  }
7503
7514
  vLen++;
@@ -7506,18 +7517,18 @@ export default defineComponent({
7506
7517
  if (selected) {
7507
7518
  sLen++;
7508
7519
  }
7509
- else if (treeIndeterminateMaps[childRowid]) {
7520
+ else if (treeIndeterminateRowMaps[childRowid]) {
7510
7521
  hLen++;
7511
7522
  }
7512
7523
  }
7513
7524
  }
7514
7525
  : row => {
7515
- const childRowid = getRowid($xeTable, row);
7526
+ const childRowid = handleGetRowId(row);
7516
7527
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
7517
7528
  if (selected) {
7518
7529
  sLen++;
7519
7530
  }
7520
- else if (treeIndeterminateMaps[childRowid]) {
7531
+ else if (treeIndeterminateRowMaps[childRowid]) {
7521
7532
  hLen++;
7522
7533
  }
7523
7534
  vLen++;
@@ -7541,13 +7552,13 @@ export default defineComponent({
7541
7552
  */
7542
7553
  handleBatchSelectRows(rows, checked, isForce) {
7543
7554
  const { treeConfig } = props;
7544
- const { selectCheckboxMaps } = reactData;
7545
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
7555
+ const { selectCheckboxMaps } = internalData;
7546
7556
  const treeOpts = computeTreeOpts.value;
7547
7557
  const { transform, mapChildrenField } = treeOpts;
7548
7558
  const childrenField = treeOpts.children || treeOpts.childrenField;
7549
7559
  const checkboxOpts = computeCheckboxOpts.value;
7550
7560
  const { checkField, checkStrictly, checkMethod } = checkboxOpts;
7561
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7551
7562
  // indeterminateField 仅支持读取
7552
7563
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
7553
7564
  if (checkField) {
@@ -7563,59 +7574,57 @@ export default defineComponent({
7563
7574
  handleCheckboxReserveRow(row, checked);
7564
7575
  }
7565
7576
  }, { children: transform ? mapChildrenField : childrenField });
7566
- reactData.selectCheckboxMaps = selectRowMaps;
7577
+ reactData.updateCheckboxFlag++;
7567
7578
  return;
7568
7579
  }
7569
- else {
7570
- // 列表
7571
- rows.forEach(row => {
7572
- if (isForce || (!checkMethod || checkMethod({ row }))) {
7573
- XEUtils.set(row, checkField, checked);
7574
- handleCheckboxReserveRow(row, checked);
7575
- }
7576
- });
7577
- }
7578
- reactData.selectCheckboxMaps = selectRowMaps;
7580
+ // 列表
7581
+ rows.forEach(row => {
7582
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
7583
+ XEUtils.set(row, checkField, checked);
7584
+ handleCheckboxReserveRow(row, checked);
7585
+ }
7586
+ });
7587
+ reactData.updateCheckboxFlag++;
7579
7588
  return;
7580
7589
  }
7581
7590
  // 树结构
7582
7591
  if (treeConfig && !checkStrictly) {
7583
7592
  // 更新子节点状态
7584
7593
  XEUtils.eachTree(rows, (row) => {
7585
- const rowid = getRowid($xeTable, row);
7594
+ const rowid = handleGetRowId(row);
7586
7595
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7587
7596
  if (checked) {
7588
- selectRowMaps[rowid] = row;
7597
+ selectCheckboxMaps[rowid] = row;
7589
7598
  }
7590
7599
  else {
7591
- if (selectRowMaps[rowid]) {
7592
- delete selectRowMaps[rowid];
7600
+ if (selectCheckboxMaps[rowid]) {
7601
+ delete selectCheckboxMaps[rowid];
7593
7602
  }
7594
7603
  }
7595
7604
  handleCheckboxReserveRow(row, checked);
7596
7605
  }
7597
7606
  }, { children: transform ? mapChildrenField : childrenField });
7598
- reactData.selectCheckboxMaps = selectRowMaps;
7607
+ reactData.updateCheckboxFlag++;
7599
7608
  return;
7600
7609
  }
7601
7610
  // 列表
7602
7611
  rows.forEach(row => {
7603
- const rowid = getRowid($xeTable, row);
7612
+ const rowid = handleGetRowId(row);
7604
7613
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7605
7614
  if (checked) {
7606
- if (!selectRowMaps[rowid]) {
7607
- selectRowMaps[rowid] = row;
7615
+ if (!selectCheckboxMaps[rowid]) {
7616
+ selectCheckboxMaps[rowid] = row;
7608
7617
  }
7609
7618
  }
7610
7619
  else {
7611
- if (selectRowMaps[rowid]) {
7612
- delete selectRowMaps[rowid];
7620
+ if (selectCheckboxMaps[rowid]) {
7621
+ delete selectCheckboxMaps[rowid];
7613
7622
  }
7614
7623
  }
7615
7624
  handleCheckboxReserveRow(row, checked);
7625
+ reactData.updateCheckboxFlag++;
7616
7626
  }
7617
7627
  });
7618
- reactData.selectCheckboxMaps = selectRowMaps;
7619
7628
  },
7620
7629
  /**
7621
7630
  * 即将移除
@@ -7663,7 +7672,7 @@ export default defineComponent({
7663
7672
  return;
7664
7673
  }
7665
7674
  if (tooltipStore.column !== column || !tooltipStore.visible) {
7666
- handleTooltip(evnt, thEl, cellEl, null, params);
7675
+ handleTooltip(evnt, thEl, thEl.querySelector('.vxe-cell--title') || cellEl, params);
7667
7676
  }
7668
7677
  },
7669
7678
  /**
@@ -7690,7 +7699,7 @@ export default defineComponent({
7690
7699
  }
7691
7700
  }
7692
7701
  if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
7693
- handleTooltip(evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper'), null, params);
7702
+ handleTooltip(evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
7694
7703
  }
7695
7704
  },
7696
7705
  /**
@@ -7699,10 +7708,10 @@ export default defineComponent({
7699
7708
  triggerFooterTooltipEvent(evnt, params) {
7700
7709
  const { column } = params;
7701
7710
  const { tooltipStore } = reactData;
7702
- const cell = evnt.currentTarget;
7711
+ const tdEl = evnt.currentTarget;
7703
7712
  handleTargetEnterEvent(tooltipStore.column !== column || !!tooltipStore.row);
7704
7713
  if (tooltipStore.column !== column || !tooltipStore.visible) {
7705
- handleTooltip(evnt, cell, cell.querySelector('.vxe-cell--wrapper') || cell.children[0], null, params);
7714
+ handleTooltip(evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
7706
7715
  }
7707
7716
  },
7708
7717
  handleTargetLeaveEvent() {
@@ -7727,17 +7736,18 @@ export default defineComponent({
7727
7736
  const { _lastResizeTime } = internalData;
7728
7737
  const sortOpts = computeSortOpts.value;
7729
7738
  const columnOpts = computeColumnOpts.value;
7739
+ const currentColumnOpts = computeCurrentColumnOpts.value;
7730
7740
  const { column } = params;
7731
7741
  const cell = evnt.currentTarget;
7732
7742
  const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
7733
7743
  const triggerSort = getEventTargetNode(evnt, cell, 'vxe-cell--sort').flag;
7734
7744
  const triggerFilter = getEventTargetNode(evnt, cell, 'vxe-cell--filter').flag;
7735
7745
  if (sortOpts.trigger === 'cell' && !(triggerResizable || triggerSort || triggerFilter)) {
7736
- tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column));
7746
+ $xeTable.triggerSortEvent(evnt, column, getNextSortOrder(column));
7737
7747
  }
7738
7748
  dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
7739
- if (columnOpts.isCurrent || props.highlightCurrentColumn) {
7740
- tablePrivateMethods.triggerCurrentColumnEvent(evnt, params);
7749
+ if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
7750
+ $xeTable.triggerCurrentColumnEvent(evnt, params);
7741
7751
  }
7742
7752
  },
7743
7753
  triggerHeaderCellDblclickEvent(evnt, params) {
@@ -7749,7 +7759,7 @@ export default defineComponent({
7749
7759
  * 如果是双击模式,则单击后选中状态
7750
7760
  */
7751
7761
  triggerCellClickEvent(evnt, params) {
7752
- const { highlightCurrentRow, editConfig } = props;
7762
+ const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props;
7753
7763
  const { editStore, isDragResize } = reactData;
7754
7764
  if (isDragResize) {
7755
7765
  return;
@@ -7761,6 +7771,8 @@ export default defineComponent({
7761
7771
  const checkboxOpts = computeCheckboxOpts.value;
7762
7772
  const keyboardOpts = computeKeyboardOpts.value;
7763
7773
  const rowOpts = computeRowOpts.value;
7774
+ const columnOpts = computeColumnOpts.value;
7775
+ const currentColumnOpts = computeCurrentColumnOpts.value;
7764
7776
  const { actived, focused } = editStore;
7765
7777
  const { row, column } = params;
7766
7778
  const { type, treeNode } = column;
@@ -7776,29 +7788,35 @@ export default defineComponent({
7776
7788
  if (!triggerCheckbox && !triggerRadio) {
7777
7789
  // 如果是展开行
7778
7790
  if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
7779
- tablePrivateMethods.triggerRowExpandEvent(evnt, params);
7791
+ $xeTable.triggerRowExpandEvent(evnt, params);
7780
7792
  }
7781
7793
  // 如果是树形表格
7782
7794
  if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
7783
- tablePrivateMethods.triggerTreeExpandEvent(evnt, params);
7795
+ $xeTable.triggerTreeExpandEvent(evnt, params);
7784
7796
  }
7785
7797
  }
7786
7798
  // 如果点击了树节点
7787
7799
  if (!triggerTreeNode) {
7788
7800
  if (!triggerExpandNode) {
7789
- // 如果是高亮行
7801
+ // 如果是当前行
7790
7802
  if (rowOpts.isCurrent || highlightCurrentRow) {
7791
7803
  if (!triggerCheckbox && !triggerRadio) {
7792
- tablePrivateMethods.triggerCurrentRowEvent(evnt, params);
7804
+ $xeTable.triggerCurrentRowEvent(evnt, params);
7805
+ }
7806
+ }
7807
+ // 如果是当前列
7808
+ if ((columnOpts.isCurrent || highlightCurrentColumn) && (!currentColumnOpts.trigger || ['cell', 'default'].includes(currentColumnOpts.trigger))) {
7809
+ if (!triggerCheckbox && !triggerRadio) {
7810
+ $xeTable.triggerCurrentColumnEvent(evnt, params);
7793
7811
  }
7794
7812
  }
7795
7813
  // 如果是单选框
7796
7814
  if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
7797
- tablePrivateMethods.triggerRadioRowEvent(evnt, params);
7815
+ $xeTable.triggerRadioRowEvent(evnt, params);
7798
7816
  }
7799
7817
  // 如果是复选框
7800
7818
  if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
7801
- tablePrivateMethods.handleToggleCheckRowEvent(evnt, params);
7819
+ $xeTable.handleToggleCheckRowEvent(evnt, params);
7802
7820
  }
7803
7821
  }
7804
7822
  // 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
@@ -7877,7 +7895,7 @@ export default defineComponent({
7877
7895
  dispatchEvent('cell-dblclick', params, evnt);
7878
7896
  },
7879
7897
  handleToggleCheckRowEvent(evnt, params) {
7880
- const { selectCheckboxMaps } = reactData;
7898
+ const { selectCheckboxMaps } = internalData;
7881
7899
  const checkboxOpts = computeCheckboxOpts.value;
7882
7900
  const { checkField, trigger } = checkboxOpts;
7883
7901
  const { row } = params;
@@ -7892,44 +7910,46 @@ export default defineComponent({
7892
7910
  checked = !selectCheckboxMaps[getRowid($xeTable, row)];
7893
7911
  }
7894
7912
  if (evnt) {
7895
- tablePrivateMethods.triggerCheckRowEvent(evnt, params, checked);
7913
+ $xeTable.triggerCheckRowEvent(evnt, params, checked);
7896
7914
  }
7897
7915
  else {
7898
- tablePrivateMethods.handleBatchSelectRows([row], checked);
7899
- tablePrivateMethods.checkSelectionStatus();
7916
+ $xeTable.handleBatchSelectRows([row], checked);
7917
+ $xeTable.checkSelectionStatus();
7900
7918
  }
7901
7919
  },
7902
7920
  triggerCheckRowEvent(evnt, params, checked) {
7903
- const checkboxOpts = computeCheckboxOpts.value;
7904
7921
  const { row } = params;
7905
7922
  const { afterFullData } = internalData;
7923
+ const checkboxOpts = computeCheckboxOpts.value;
7906
7924
  const { checkMethod, trigger } = checkboxOpts;
7907
7925
  if (trigger === 'manual') {
7908
7926
  return;
7909
7927
  }
7910
7928
  evnt.stopPropagation();
7911
7929
  if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
7912
- const checkboxRecords = tableMethods.getCheckboxRecords();
7930
+ const checkboxRecords = $xeTable.getCheckboxRecords();
7913
7931
  if (checkboxRecords.length) {
7914
7932
  const firstRow = checkboxRecords[0];
7915
- const _rowIndex = tableMethods.getVTRowIndex(row);
7916
- const _firstRowIndex = tableMethods.getVTRowIndex(firstRow);
7933
+ const _rowIndex = $xeTable.getVTRowIndex(row);
7934
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
7917
7935
  if (_rowIndex !== _firstRowIndex) {
7918
- tableMethods.setAllCheckboxRow(false);
7936
+ $xeTable.setAllCheckboxRow(false);
7919
7937
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
7920
- handleCheckedCheckboxRow(rangeRows, true, false);
7938
+ nextTick(() => {
7939
+ handleCheckedCheckboxRow(rangeRows, true, false);
7940
+ });
7921
7941
  dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
7922
7942
  return;
7923
7943
  }
7924
7944
  }
7925
7945
  }
7926
7946
  if (!checkMethod || checkMethod({ row })) {
7927
- tablePrivateMethods.handleBatchSelectRows([row], checked);
7928
- tablePrivateMethods.checkSelectionStatus();
7947
+ $xeTable.handleBatchSelectRows([row], checked);
7948
+ $xeTable.checkSelectionStatus();
7929
7949
  dispatchEvent('checkbox-change', Object.assign({
7930
- records: tableMethods.getCheckboxRecords(),
7931
- reserves: tableMethods.getCheckboxReserveRecords(),
7932
- indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
7950
+ records: () => $xeTable.getCheckboxRecords(),
7951
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
7952
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
7933
7953
  checked
7934
7954
  }, params), evnt);
7935
7955
  }
@@ -8001,7 +8021,8 @@ export default defineComponent({
8001
8021
  * 展开行事件
8002
8022
  */
8003
8023
  triggerRowExpandEvent(evnt, params) {
8004
- const { rowExpandLazyLoadedMaps, expandColumn: column } = reactData;
8024
+ const { expandColumn: column } = reactData;
8025
+ const { rowExpandLazyLoadedMaps } = internalData;
8005
8026
  const expandOpts = computeExpandOpts.value;
8006
8027
  const { row } = params;
8007
8028
  const { lazy, trigger } = expandOpts;
@@ -8011,18 +8032,18 @@ export default defineComponent({
8011
8032
  evnt.stopPropagation();
8012
8033
  const rowid = getRowid($xeTable, row);
8013
8034
  if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
8014
- const expanded = !tableMethods.isRowExpandByRow(row);
8015
- const columnIndex = tableMethods.getColumnIndex(column);
8016
- const $columnIndex = tableMethods.getVMColumnIndex(column);
8017
- tableMethods.setRowExpand(row, expanded);
8035
+ const expanded = !$xeTable.isRowExpandByRow(row);
8036
+ const columnIndex = $xeTable.getColumnIndex(column);
8037
+ const $columnIndex = $xeTable.getVMColumnIndex(column);
8038
+ $xeTable.setRowExpand(row, expanded);
8018
8039
  dispatchEvent('toggle-row-expand', {
8019
8040
  expanded,
8020
8041
  column,
8021
8042
  columnIndex,
8022
8043
  $columnIndex,
8023
8044
  row,
8024
- rowIndex: tableMethods.getRowIndex(row),
8025
- $rowIndex: tableMethods.getVMRowIndex(row)
8045
+ rowIndex: $xeTable.getRowIndex(row),
8046
+ $rowIndex: $xeTable.getVMRowIndex(row)
8026
8047
  }, evnt);
8027
8048
  }
8028
8049
  },
@@ -8030,7 +8051,7 @@ export default defineComponent({
8030
8051
  * 展开树节点事件
8031
8052
  */
8032
8053
  triggerTreeExpandEvent(evnt, params) {
8033
- const { treeExpandLazyLoadedMaps } = reactData;
8054
+ const { treeExpandLazyLoadedMaps } = internalData;
8034
8055
  const treeOpts = computeTreeOpts.value;
8035
8056
  const { row, column } = params;
8036
8057
  const { lazy, trigger } = treeOpts;
@@ -8040,10 +8061,10 @@ export default defineComponent({
8040
8061
  evnt.stopPropagation();
8041
8062
  const rowid = getRowid($xeTable, row);
8042
8063
  if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
8043
- const expanded = !tableMethods.isTreeExpandByRow(row);
8044
- const columnIndex = tableMethods.getColumnIndex(column);
8045
- const $columnIndex = tableMethods.getVMColumnIndex(column);
8046
- tableMethods.setTreeExpand(row, expanded);
8064
+ const expanded = !$xeTable.isTreeExpandByRow(row);
8065
+ const columnIndex = $xeTable.getColumnIndex(column);
8066
+ const $columnIndex = $xeTable.getVMColumnIndex(column);
8067
+ $xeTable.setTreeExpand(row, expanded);
8047
8068
  dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
8048
8069
  }
8049
8070
  },
@@ -8188,12 +8209,11 @@ export default defineComponent({
8188
8209
  handleRowDragSwapEvent(evnt, isSyncRow, dragRow, prevDragRow, prevDragPos, prevDragToChild) {
8189
8210
  const { treeConfig, dragConfig } = props;
8190
8211
  const rowDragOpts = computeRowDragOpts.value;
8191
- const { fullAllDataRowIdData } = internalData;
8212
+ const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData;
8192
8213
  const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
8193
8214
  const treeOpts = computeTreeOpts.value;
8194
8215
  const { transform, rowField, mapChildrenField, parentField } = treeOpts;
8195
8216
  const childrenField = treeOpts.children || treeOpts.childrenField;
8196
- const { afterFullData, tableFullData } = internalData;
8197
8217
  const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
8198
8218
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
8199
8219
  const errRest = {
@@ -9047,10 +9067,10 @@ export default defineComponent({
9047
9067
  return;
9048
9068
  }
9049
9069
  const { highlightHoverRow } = tableProps;
9050
- const { scrollXLoad, scrollYLoad } = reactData;
9070
+ const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
9051
9071
  const leftFixedWidth = computeLeftFixedWidth.value;
9052
9072
  const rightFixedWidth = computeRightFixedWidth.value;
9053
- if (!(scrollYLoad || leftFixedWidth || rightFixedWidth)) {
9073
+ if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
9054
9074
  return;
9055
9075
  }
9056
9076
  const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
@@ -9292,8 +9312,8 @@ export default defineComponent({
9292
9312
  },
9293
9313
  // 更新纵向 Y 可视渲染上下剩余空间大小
9294
9314
  updateScrollYSpace() {
9295
- const { isAllOverflow, scrollYLoad, expandColumn, rowExpandedMaps } = reactData;
9296
- const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData;
9315
+ const { isAllOverflow, scrollYLoad, expandColumn } = reactData;
9316
+ const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
9297
9317
  const { startIndex } = scrollYStore;
9298
9318
  const expandOpts = computeExpandOpts.value;
9299
9319
  const rowOpts = computeRowOpts.value;
@@ -9638,6 +9658,7 @@ export default defineComponent({
9638
9658
  })
9639
9659
  ];
9640
9660
  if (expandColumn) {
9661
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
9641
9662
  tableRowExpandedList.forEach((row) => {
9642
9663
  const expandOpts = computeExpandOpts.value;
9643
9664
  const { height: expandHeight, padding } = expandOpts;
@@ -9645,7 +9666,7 @@ export default defineComponent({
9645
9666
  const treeOpts = computeTreeOpts.value;
9646
9667
  const { transform, seqMode } = treeOpts;
9647
9668
  const cellStyle = {};
9648
- const rowid = getRowid($xeTable, row);
9669
+ const rowid = handleGetRowId(row);
9649
9670
  const rest = fullAllDataRowIdData[rowid];
9650
9671
  let rowLevel = 0;
9651
9672
  let seq = -1;