vxe-table 4.12.0-beta.2 → 4.12.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/es/grid/src/grid.js +61 -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/edit/hook.js +8 -10
  24. package/es/table/module/filter/panel.js +12 -2
  25. package/es/table/module/keyboard/hook.js +47 -4
  26. package/es/table/module/validator/hook.js +2 -2
  27. package/es/table/render/index.js +91 -60
  28. package/es/table/src/body.js +22 -17
  29. package/es/table/src/cell.js +25 -20
  30. package/es/table/src/footer.js +9 -4
  31. package/es/table/src/header.js +2 -2
  32. package/es/table/src/props.js +4 -0
  33. package/es/table/src/table.js +616 -411
  34. package/es/table/src/util.js +58 -3
  35. package/es/ui/index.js +1 -1
  36. package/es/ui/src/log.js +1 -1
  37. package/helper/vetur/attributes.json +1 -1
  38. package/helper/vetur/tags.json +1 -1
  39. package/lib/grid/src/grid.js +58 -48
  40. package/lib/grid/src/grid.min.js +1 -1
  41. package/lib/index.umd.js +1281 -12149
  42. package/lib/index.umd.min.js +1 -1
  43. package/lib/locale/lang/ar-EG.js +7 -1
  44. package/lib/locale/lang/ar-EG.min.js +1 -1
  45. package/lib/locale/lang/de-DE.js +7 -1
  46. package/lib/locale/lang/de-DE.min.js +1 -1
  47. package/lib/locale/lang/en-US.js +7 -1
  48. package/lib/locale/lang/en-US.min.js +1 -1
  49. package/lib/locale/lang/en-US.umd.js +7 -1
  50. package/lib/locale/lang/es-ES.js +7 -1
  51. package/lib/locale/lang/es-ES.min.js +1 -1
  52. package/lib/locale/lang/es-ES.umd.js +7 -1
  53. package/lib/locale/lang/fr-FR.js +7 -1
  54. package/lib/locale/lang/fr-FR.min.js +1 -1
  55. package/lib/locale/lang/hu-HU.js +7 -1
  56. package/lib/locale/lang/hu-HU.min.js +1 -1
  57. package/lib/locale/lang/hu-HU.umd.js +7 -1
  58. package/lib/locale/lang/hy-AM.js +7 -1
  59. package/lib/locale/lang/hy-AM.min.js +1 -1
  60. package/lib/locale/lang/id-ID.js +7 -1
  61. package/lib/locale/lang/id-ID.min.js +1 -1
  62. package/lib/locale/lang/it-IT.js +7 -1
  63. package/lib/locale/lang/it-IT.min.js +1 -1
  64. package/lib/locale/lang/ja-JP.js +7 -1
  65. package/lib/locale/lang/ja-JP.min.js +1 -1
  66. package/lib/locale/lang/ja-JP.umd.js +7 -1
  67. package/lib/locale/lang/ko-KR.js +7 -1
  68. package/lib/locale/lang/ko-KR.min.js +1 -1
  69. package/lib/locale/lang/ko-KR.umd.js +7 -1
  70. package/lib/locale/lang/nb-NO.js +7 -1
  71. package/lib/locale/lang/nb-NO.min.js +1 -1
  72. package/lib/locale/lang/pt-BR.js +7 -1
  73. package/lib/locale/lang/pt-BR.min.js +1 -1
  74. package/lib/locale/lang/pt-BR.umd.js +7 -1
  75. package/lib/locale/lang/ru-RU.js +7 -1
  76. package/lib/locale/lang/ru-RU.min.js +1 -1
  77. package/lib/locale/lang/ru-RU.umd.js +7 -1
  78. package/lib/locale/lang/th-TH.js +7 -1
  79. package/lib/locale/lang/th-TH.min.js +1 -1
  80. package/lib/locale/lang/ug-CN.js +7 -1
  81. package/lib/locale/lang/ug-CN.min.js +1 -1
  82. package/lib/locale/lang/uk-UA.js +7 -1
  83. package/lib/locale/lang/uk-UA.min.js +1 -1
  84. package/lib/locale/lang/uk-UA.umd.js +7 -1
  85. package/lib/locale/lang/vi-VN.js +7 -1
  86. package/lib/locale/lang/vi-VN.min.js +1 -1
  87. package/lib/locale/lang/zh-CHT.js +7 -1
  88. package/lib/locale/lang/zh-CHT.min.js +1 -1
  89. package/lib/locale/lang/zh-CN.js +7 -1
  90. package/lib/locale/lang/zh-CN.min.js +1 -1
  91. package/lib/locale/lang/zh-CN.umd.js +7 -1
  92. package/lib/style.css +1 -1
  93. package/lib/table/module/edit/hook.js +10 -11
  94. package/lib/table/module/edit/hook.min.js +1 -1
  95. package/lib/table/module/filter/panel.js +8 -2
  96. package/lib/table/module/filter/panel.min.js +1 -1
  97. package/lib/table/module/keyboard/hook.js +51 -4
  98. package/lib/table/module/keyboard/hook.min.js +1 -1
  99. package/lib/table/module/validator/hook.js +3 -3
  100. package/lib/table/module/validator/hook.min.js +1 -1
  101. package/lib/table/render/index.js +100 -65
  102. package/lib/table/render/index.min.js +1 -1
  103. package/lib/table/src/body.js +27 -17
  104. package/lib/table/src/body.min.js +1 -1
  105. package/lib/table/src/cell.js +37 -21
  106. package/lib/table/src/cell.min.js +1 -1
  107. package/lib/table/src/footer.js +9 -3
  108. package/lib/table/src/footer.min.js +1 -1
  109. package/lib/table/src/header.js +2 -1
  110. package/lib/table/src/header.min.js +1 -1
  111. package/lib/table/src/props.js +4 -0
  112. package/lib/table/src/props.min.js +1 -1
  113. package/lib/table/src/table.js +727 -445
  114. package/lib/table/src/table.min.js +1 -1
  115. package/lib/table/src/util.js +65 -6
  116. package/lib/table/src/util.min.js +1 -1
  117. package/lib/ui/index.js +1 -1
  118. package/lib/ui/index.min.js +1 -1
  119. package/lib/ui/src/log.js +1 -1
  120. package/lib/ui/src/log.min.js +1 -1
  121. package/package.json +2 -2
  122. package/packages/grid/src/grid.ts +65 -50
  123. package/packages/locale/lang/ar-EG.ts +7 -1
  124. package/packages/locale/lang/de-DE.ts +7 -1
  125. package/packages/locale/lang/en-US.ts +7 -1
  126. package/packages/locale/lang/es-ES.ts +7 -1
  127. package/packages/locale/lang/fr-FR.ts +7 -1
  128. package/packages/locale/lang/hu-HU.ts +7 -1
  129. package/packages/locale/lang/hy-AM.ts +7 -1
  130. package/packages/locale/lang/id-ID.ts +7 -1
  131. package/packages/locale/lang/it-IT.ts +7 -1
  132. package/packages/locale/lang/ja-JP.ts +7 -1
  133. package/packages/locale/lang/ko-KR.ts +7 -1
  134. package/packages/locale/lang/nb-NO.ts +7 -1
  135. package/packages/locale/lang/pt-BR.ts +7 -1
  136. package/packages/locale/lang/ru-RU.ts +7 -1
  137. package/packages/locale/lang/th-TH.ts +7 -1
  138. package/packages/locale/lang/ug-CN.ts +7 -1
  139. package/packages/locale/lang/uk-UA.ts +7 -1
  140. package/packages/locale/lang/vi-VN.ts +7 -1
  141. package/packages/locale/lang/zh-CHT.ts +7 -1
  142. package/packages/locale/lang/zh-CN.ts +7 -1
  143. package/packages/table/module/edit/hook.ts +8 -10
  144. package/packages/table/module/filter/panel.ts +12 -2
  145. package/packages/table/module/keyboard/hook.ts +47 -6
  146. package/packages/table/module/validator/hook.ts +2 -2
  147. package/packages/table/render/index.ts +90 -59
  148. package/packages/table/src/body.ts +21 -16
  149. package/packages/table/src/cell.ts +25 -20
  150. package/packages/table/src/footer.ts +9 -4
  151. package/packages/table/src/header.ts +2 -2
  152. package/packages/table/src/props.ts +4 -0
  153. package/packages/table/src/table.ts +625 -411
  154. package/packages/table/src/util.ts +66 -3
  155. /package/es/{iconfont.1741080000843.ttf → iconfont.1742437957812.ttf} +0 -0
  156. /package/es/{iconfont.1741080000843.woff → iconfont.1742437957812.woff} +0 -0
  157. /package/es/{iconfont.1741080000843.woff2 → iconfont.1742437957812.woff2} +0 -0
  158. /package/lib/{iconfont.1741080000843.ttf → iconfont.1742437957812.ttf} +0 -0
  159. /package/lib/{iconfont.1741080000843.woff → iconfont.1742437957812.woff} +0 -0
  160. /package/lib/{iconfont.1741080000843.woff2 → iconfont.1742437957812.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, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth } 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,
@@ -344,6 +335,18 @@ export default defineComponent({
344
335
  fullColumnIdData: {},
345
336
  fullColumnFieldData: {},
346
337
  // prevDragRow: null,
338
+ // 已展开的行集合
339
+ rowExpandedMaps: {},
340
+ // 懒加载中的展开行的集合
341
+ rowExpandLazyLoadedMaps: {},
342
+ // 已展开树节点集合
343
+ treeExpandedMaps: {},
344
+ // 懒加载中的树节点的集合
345
+ treeExpandLazyLoadedMaps: {},
346
+ // 复选框属性,已选中的行集合
347
+ selectCheckboxMaps: {},
348
+ // 已标记的对象集
349
+ pendingRowMaps: {},
347
350
  inited: false,
348
351
  tooltipTimeout: null,
349
352
  initStatus: false,
@@ -464,18 +467,36 @@ export default defineComponent({
464
467
  const computeColumnOpts = computed(() => {
465
468
  return Object.assign({}, getConfig().table.columnConfig, props.columnConfig);
466
469
  });
470
+ const computeCurrentColumnOpts = computed(() => {
471
+ return Object.assign({}, getConfig().table.currentColumnConfig, props.currentColumnConfig);
472
+ });
467
473
  const computeCellOpts = computed(() => {
468
- return Object.assign({}, getConfig().table.cellConfig, props.cellConfig);
474
+ const cellOpts = Object.assign({}, getConfig().table.cellConfig, props.cellConfig);
475
+ if (cellOpts.height) {
476
+ cellOpts.height = XEUtils.toNumber(cellOpts.height);
477
+ }
478
+ return cellOpts;
469
479
  });
470
480
  const computeHeaderCellOpts = computed(() => {
471
- return Object.assign({}, getConfig().table.headerCellConfig, props.headerCellConfig);
481
+ const headerCellOpts = Object.assign({}, getConfig().table.headerCellConfig, props.headerCellConfig);
482
+ if (headerCellOpts.height) {
483
+ headerCellOpts.height = XEUtils.toNumber(headerCellOpts.height);
484
+ }
485
+ return headerCellOpts;
472
486
  });
473
487
  const computeFooterCellOpts = computed(() => {
474
- return Object.assign({}, getConfig().table.footerCellConfig, props.footerCellConfig);
488
+ const footerCellOpts = Object.assign({}, getConfig().table.footerCellConfig, props.footerCellConfig);
489
+ if (footerCellOpts.height) {
490
+ footerCellOpts.height = XEUtils.toNumber(footerCellOpts.height);
491
+ }
492
+ return footerCellOpts;
475
493
  });
476
494
  const computeRowOpts = computed(() => {
477
495
  return Object.assign({}, getConfig().table.rowConfig, props.rowConfig);
478
496
  });
497
+ const computeCurrentRowOpts = computed(() => {
498
+ return Object.assign({}, getConfig().table.currentRowConfig, props.currentRowConfig);
499
+ });
479
500
  const computeRowDragOpts = computed(() => {
480
501
  return Object.assign({}, getConfig().table.rowDragConfig, props.rowDragConfig);
481
502
  });
@@ -616,12 +637,14 @@ export default defineComponent({
616
637
  return Object.assign({}, getConfig().table.customConfig, props.customConfig);
617
638
  });
618
639
  const computeTableRowExpandedList = computed(() => {
619
- const { rowExpandedMaps, tableData, expandColumn } = reactData;
640
+ const { rowExpandedFlag, tableData, expandColumn } = reactData;
641
+ const { rowExpandedMaps } = internalData;
642
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
620
643
  const expandList = [];
621
- if (expandColumn) {
644
+ if (expandColumn && rowExpandedFlag) {
622
645
  const rowKeys = {};
623
646
  tableData.forEach(row => {
624
- rowKeys[getRowid($xeTable, row)] = true;
647
+ rowKeys[handleGetRowId(row)] = true;
625
648
  });
626
649
  XEUtils.each(rowExpandedMaps, (row, rowid) => {
627
650
  if (rowKeys[rowid]) {
@@ -734,13 +757,16 @@ export default defineComponent({
734
757
  computeScrollbarXToTop,
735
758
  computeScrollbarYToLeft,
736
759
  computeColumnOpts,
760
+ computeCurrentColumnOpts,
737
761
  computeScrollXThreshold,
738
762
  computeScrollYThreshold,
763
+ computeRowHeightMaps,
739
764
  computeDefaultRowHeight,
740
765
  computeCellOpts,
741
766
  computeHeaderCellOpts,
742
767
  computeFooterCellOpts,
743
768
  computeRowOpts,
769
+ computeCurrentRowOpts,
744
770
  computeRowDragOpts,
745
771
  computeColumnDragOpts,
746
772
  computeResizeOpts,
@@ -942,12 +968,13 @@ export default defineComponent({
942
968
  visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1;
943
969
  }
944
970
  else {
971
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
945
972
  let leftIndex = 0;
946
973
  let rightIndex = afterFullData.length;
947
974
  while (leftIndex < rightIndex) {
948
975
  const rIndex = Math.floor((leftIndex + rightIndex) / 2);
949
976
  const row = afterFullData[rIndex];
950
- const rowid = getRowid($xeTable, row);
977
+ const rowid = handleGetRowId(row);
951
978
  const rowRest = fullAllDataRowIdData[rowid] || {};
952
979
  if (rowRest.oTop <= startTop) {
953
980
  leftIndex = rIndex + 1;
@@ -959,7 +986,7 @@ export default defineComponent({
959
986
  toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0);
960
987
  for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
961
988
  const row = afterFullData[rIndex];
962
- const rowid = getRowid($xeTable, row);
989
+ const rowid = handleGetRowId(row);
963
990
  const rowRest = fullAllDataRowIdData[rowid] || {};
964
991
  visibleSize++;
965
992
  if (rowRest.oTop > endTop || visibleSize >= 100) {
@@ -1198,7 +1225,7 @@ export default defineComponent({
1198
1225
  }
1199
1226
  else {
1200
1227
  if ((storage && !type) || (columnOpts.drag && (isCrossDrag || isSelfToChildDrag))) {
1201
- errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field`]);
1228
+ errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field=?`]);
1202
1229
  }
1203
1230
  }
1204
1231
  if (!hasFixed && fixed) {
@@ -1467,9 +1494,10 @@ export default defineComponent({
1467
1494
  const defaultRowHeight = computeDefaultRowHeight.value;
1468
1495
  const el = refElem.value;
1469
1496
  if (!isAllOverflow && scrollYLoad && el) {
1497
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1470
1498
  el.setAttribute('data-calc-row', 'Y');
1471
1499
  tableData.forEach(row => {
1472
- const rowid = getRowid($xeTable, row);
1500
+ const rowid = handleGetRowId(row);
1473
1501
  const rowRest = fullAllDataRowIdData[rowid];
1474
1502
  if (rowRest) {
1475
1503
  const reHeight = calcCellAutoHeight(rowRest, el);
@@ -1505,9 +1533,10 @@ export default defineComponent({
1505
1533
  const updateAfterListIndex = () => {
1506
1534
  const { treeConfig } = props;
1507
1535
  const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData;
1536
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1508
1537
  const fullMaps = {};
1509
1538
  afterFullData.forEach((row, index) => {
1510
- const rowid = getRowid($xeTable, row);
1539
+ const rowid = handleGetRowId(row);
1511
1540
  const rowRest = fullAllDataRowIdData[rowid];
1512
1541
  const seq = index + 1;
1513
1542
  if (rowRest) {
@@ -1537,8 +1566,9 @@ export default defineComponent({
1537
1566
  const childrenField = treeOpts.children || treeOpts.childrenField;
1538
1567
  const fullMaps = {};
1539
1568
  if (treeConfig) {
1569
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1540
1570
  XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
1541
- const rowid = getRowid($xeTable, row);
1571
+ const rowid = handleGetRowId(row);
1542
1572
  const rowRest = fullAllDataRowIdData[rowid];
1543
1573
  const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('');
1544
1574
  if (rowRest) {
@@ -1565,16 +1595,16 @@ export default defineComponent({
1565
1595
  */
1566
1596
  const handleVirtualTreeToList = () => {
1567
1597
  const { treeConfig } = props;
1568
- const { treeExpandedMaps } = reactData;
1569
- const { fullAllDataRowIdData } = internalData;
1598
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
1570
1599
  const treeOpts = computeTreeOpts.value;
1571
1600
  const childrenField = treeOpts.children || treeOpts.childrenField;
1572
1601
  if (treeConfig && treeOpts.transform) {
1602
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1573
1603
  const fullData = [];
1574
1604
  const expandMaps = {};
1575
1605
  XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
1576
- const rowid = getRowid($xeTable, row);
1577
- const parentRowid = getRowid($xeTable, parentRow);
1606
+ const rowid = handleGetRowId(row);
1607
+ const parentRowid = handleGetRowId(parentRow);
1578
1608
  if (!parentRow || (expandMaps[parentRowid] && treeExpandedMaps[parentRowid])) {
1579
1609
  const rowRest = fullAllDataRowIdData[rowid];
1580
1610
  if (rowRest) {
@@ -2232,12 +2262,13 @@ export default defineComponent({
2232
2262
  };
2233
2263
  const handleCheckedAllCheckboxRow = (checked, isForce) => {
2234
2264
  const { treeConfig } = props;
2235
- const { selectCheckboxMaps } = reactData;
2236
- const { afterFullData, checkboxReserveRowMap } = internalData;
2265
+ const { afterFullData, checkboxReserveRowMap, selectCheckboxMaps } = internalData;
2237
2266
  const treeOpts = computeTreeOpts.value;
2238
2267
  const childrenField = treeOpts.children || treeOpts.childrenField;
2239
2268
  const checkboxOpts = computeCheckboxOpts.value;
2240
2269
  const { checkField, reserve, checkMethod } = checkboxOpts;
2270
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
2271
+ // indeterminateField 仅支持读取
2241
2272
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
2242
2273
  const selectRowMaps = {};
2243
2274
  /**
@@ -2248,7 +2279,7 @@ export default defineComponent({
2248
2279
  const checkValFn = (row) => {
2249
2280
  if (isForce || (!checkMethod || checkMethod({ row }))) {
2250
2281
  if (checked) {
2251
- selectRowMaps[getRowid($xeTable, row)] = row;
2282
+ selectRowMaps[handleGetRowId(row)] = row;
2252
2283
  }
2253
2284
  XEUtils.set(row, checkField, checked);
2254
2285
  }
@@ -2278,7 +2309,8 @@ export default defineComponent({
2278
2309
  */
2279
2310
  XEUtils.eachTree(afterFullData, (row) => {
2280
2311
  if (isForce || (!checkMethod || checkMethod({ row }))) {
2281
- selectRowMaps[getRowid($xeTable, row)] = row;
2312
+ const rowid = handleGetRowId(row);
2313
+ selectRowMaps[rowid] = row;
2282
2314
  }
2283
2315
  }, { children: childrenField });
2284
2316
  }
@@ -2289,7 +2321,7 @@ export default defineComponent({
2289
2321
  */
2290
2322
  if (!isForce && checkMethod) {
2291
2323
  XEUtils.eachTree(afterFullData, (row) => {
2292
- const rowid = getRowid($xeTable, row);
2324
+ const rowid = handleGetRowId(row);
2293
2325
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
2294
2326
  selectRowMaps[rowid] = row;
2295
2327
  }
@@ -2306,7 +2338,7 @@ export default defineComponent({
2306
2338
  */
2307
2339
  if (!isForce && checkMethod) {
2308
2340
  afterFullData.forEach((row) => {
2309
- const rowid = getRowid($xeTable, row);
2341
+ const rowid = handleGetRowId(row);
2310
2342
  if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
2311
2343
  selectRowMaps[rowid] = row;
2312
2344
  }
@@ -2314,7 +2346,8 @@ export default defineComponent({
2314
2346
  }
2315
2347
  else {
2316
2348
  afterFullData.forEach(row => {
2317
- selectRowMaps[getRowid($xeTable, row)] = row;
2349
+ const rowid = handleGetRowId(row);
2350
+ selectRowMaps[rowid] = row;
2318
2351
  });
2319
2352
  }
2320
2353
  }
@@ -2326,7 +2359,7 @@ export default defineComponent({
2326
2359
  */
2327
2360
  if (!isForce && checkMethod) {
2328
2361
  afterFullData.forEach((row) => {
2329
- const rowid = getRowid($xeTable, row);
2362
+ const rowid = handleGetRowId(row);
2330
2363
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
2331
2364
  selectRowMaps[rowid] = row;
2332
2365
  }
@@ -2345,10 +2378,10 @@ export default defineComponent({
2345
2378
  afterFullData.forEach((row) => handleCheckboxReserveRow(row, false));
2346
2379
  }
2347
2380
  }
2348
- reactData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
2381
+ reactData.updateCheckboxFlag++;
2382
+ internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
2349
2383
  reactData.isAllSelected = checked;
2350
2384
  reactData.isIndeterminate = false;
2351
- reactData.treeIndeterminateMaps = {};
2352
2385
  internalData.treeIndeterminateRowMaps = {};
2353
2386
  $xeTable.checkSelectionStatus();
2354
2387
  return nextTick();
@@ -2356,8 +2389,8 @@ export default defineComponent({
2356
2389
  // 还原展开、选中等相关状态
2357
2390
  const handleReserveStatus = () => {
2358
2391
  const { treeConfig } = props;
2359
- const { expandColumn, currentRow, selectCheckboxMaps, selectRadioRow, rowExpandedMaps, treeExpandedMaps } = reactData;
2360
- const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData;
2392
+ const { expandColumn, currentRow, selectRadioRow } = reactData;
2393
+ const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow, selectCheckboxMaps, treeExpandedMaps, rowExpandedMaps } = internalData;
2361
2394
  const expandOpts = computeExpandOpts.value;
2362
2395
  const treeOpts = computeTreeOpts.value;
2363
2396
  const radioOpts = computeRadioOpts.value;
@@ -2374,7 +2407,8 @@ export default defineComponent({
2374
2407
  }
2375
2408
  }
2376
2409
  // 复选框
2377
- reactData.selectCheckboxMaps = getRecoverRowMaps(selectCheckboxMaps); // 刷新多选行状态
2410
+ internalData.selectCheckboxMaps = getRecoverRowMaps(selectCheckboxMaps); // 刷新多选行状态
2411
+ reactData.updateCheckboxFlag++;
2378
2412
  // 还原保留选中状态
2379
2413
  if (checkboxOpts.reserve) {
2380
2414
  handleCheckedCheckboxRow(handleReserveRow(internalData.checkboxReserveRowMap), true, true);
@@ -2383,13 +2417,15 @@ export default defineComponent({
2383
2417
  reactData.currentRow = null; // 刷新当前行状态
2384
2418
  }
2385
2419
  // 行展开
2386
- reactData.rowExpandedMaps = expandColumn ? getRecoverRowMaps(rowExpandedMaps) : {}; // 刷新行展开状态
2420
+ internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps(rowExpandedMaps) : {}; // 刷新行展开状态
2421
+ reactData.rowExpandedFlag++;
2387
2422
  // 还原保留状态
2388
2423
  if (expandColumn && expandOpts.reserve) {
2389
2424
  $xeTable.setRowExpand(handleReserveRow(internalData.rowExpandedReserveRowMap), true);
2390
2425
  }
2391
2426
  // 树展开
2392
- reactData.treeExpandedMaps = treeConfig ? getRecoverRowMaps(treeExpandedMaps) : {}; // 刷新树展开状态
2427
+ internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps(treeExpandedMaps) : {}; // 刷新树展开状态
2428
+ reactData.treeExpandedFlag++;
2393
2429
  if (treeConfig && treeOpts.reserve) {
2394
2430
  $xeTable.setTreeExpand(handleReserveRow(internalData.treeExpandedReserveRowMap), true);
2395
2431
  }
@@ -2405,7 +2441,7 @@ export default defineComponent({
2405
2441
  const { expandAll, expandRowKeys } = treeOpts;
2406
2442
  const childrenField = treeOpts.children || treeOpts.childrenField;
2407
2443
  if (expandAll) {
2408
- tableMethods.setAllTreeExpand(true);
2444
+ $xeTable.setAllTreeExpand(true);
2409
2445
  }
2410
2446
  else if (expandRowKeys) {
2411
2447
  const defExpandeds = [];
@@ -2416,7 +2452,7 @@ export default defineComponent({
2416
2452
  defExpandeds.push(matchObj.item);
2417
2453
  }
2418
2454
  });
2419
- tableMethods.setTreeExpand(defExpandeds, true);
2455
+ $xeTable.setTreeExpand(defExpandeds, true);
2420
2456
  }
2421
2457
  }
2422
2458
  };
@@ -2427,8 +2463,7 @@ export default defineComponent({
2427
2463
  const { checkStrictly } = checkboxOpts;
2428
2464
  return new Promise(resolve => {
2429
2465
  if (loadMethod) {
2430
- const { treeExpandLazyLoadedMaps } = reactData;
2431
- const { fullAllDataRowIdData } = internalData;
2466
+ const { fullAllDataRowIdData, treeExpandLazyLoadedMaps } = internalData;
2432
2467
  const rowid = getRowid($xeTable, row);
2433
2468
  const rowRest = fullAllDataRowIdData[rowid];
2434
2469
  treeExpandLazyLoadedMaps[rowid] = row;
@@ -2443,18 +2478,19 @@ export default defineComponent({
2443
2478
  childRecords = [];
2444
2479
  }
2445
2480
  if (childRecords) {
2446
- return tableMethods.loadTreeChildren(row, childRecords).then(childRows => {
2447
- const { treeExpandedMaps } = reactData;
2481
+ return $xeTable.loadTreeChildren(row, childRecords).then(childRows => {
2482
+ const { treeExpandedMaps } = internalData;
2448
2483
  if (childRows.length && !treeExpandedMaps[rowid]) {
2449
2484
  treeExpandedMaps[rowid] = row;
2450
2485
  }
2486
+ reactData.treeExpandedFlag++;
2451
2487
  // 如果当前节点已选中,则展开后子节点也被选中
2452
- if (!checkStrictly && tableMethods.isCheckedByCheckboxRow(row)) {
2488
+ if (!checkStrictly && $xeTable.isCheckedByCheckboxRow(row)) {
2453
2489
  handleCheckedCheckboxRow(childRows, true);
2454
2490
  }
2455
2491
  return nextTick().then(() => {
2456
2492
  if (transform) {
2457
- tablePrivateMethods.handleTableData();
2493
+ $xeTable.handleTableData();
2458
2494
  updateAfterDataIndex();
2459
2495
  return nextTick();
2460
2496
  }
@@ -2462,7 +2498,7 @@ export default defineComponent({
2462
2498
  });
2463
2499
  }
2464
2500
  }).catch(() => {
2465
- const { treeExpandLazyLoadedMaps } = reactData;
2501
+ const { treeExpandLazyLoadedMaps } = internalData;
2466
2502
  if (rowRest) {
2467
2503
  rowRest.treeLoaded = false;
2468
2504
  }
@@ -2470,7 +2506,8 @@ export default defineComponent({
2470
2506
  delete treeExpandLazyLoadedMaps[rowid];
2471
2507
  }
2472
2508
  }).finally(() => {
2473
- nextTick().then(() => tableMethods.recalculate()).then(() => resolve());
2509
+ reactData.treeExpandedFlag++;
2510
+ nextTick().then(() => $xeTable.recalculate()).then(() => resolve());
2474
2511
  });
2475
2512
  }
2476
2513
  else {
@@ -2496,29 +2533,27 @@ export default defineComponent({
2496
2533
  const expandOpts = computeExpandOpts.value;
2497
2534
  const { loadMethod } = expandOpts;
2498
2535
  if (loadMethod) {
2499
- const { fullAllDataRowIdData } = internalData;
2500
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
2536
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
2501
2537
  const rowid = getRowid($xeTable, row);
2502
2538
  const rowRest = fullAllDataRowIdData[rowid];
2503
- rExpandLazyLoadedMaps[rowid] = row;
2504
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
2505
- loadMethod({ $table: $xeTable, row, rowIndex: tableMethods.getRowIndex(row), $rowIndex: tableMethods.getVMRowIndex(row) }).then(() => {
2506
- const rowTempExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
2539
+ rowExpandLazyLoadedMaps[rowid] = row;
2540
+ loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
2541
+ const { rowExpandedMaps } = internalData;
2507
2542
  if (rowRest) {
2508
2543
  rowRest.expandLoaded = true;
2509
2544
  }
2510
- rowTempExpandedMaps[rowid] = row;
2511
- reactData.rowExpandedMaps = rowTempExpandedMaps;
2545
+ rowExpandedMaps[rowid] = row;
2546
+ reactData.rowExpandedFlag++;
2512
2547
  }).catch(() => {
2513
2548
  if (rowRest) {
2514
2549
  rowRest.expandLoaded = false;
2515
2550
  }
2516
2551
  }).finally(() => {
2517
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
2518
- if (rExpandLazyLoadedMaps[rowid]) {
2519
- delete rExpandLazyLoadedMaps[rowid];
2552
+ const { rowExpandLazyLoadedMaps } = internalData;
2553
+ if (rowExpandLazyLoadedMaps[rowid]) {
2554
+ delete rowExpandLazyLoadedMaps[rowid];
2520
2555
  }
2521
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
2556
+ reactData.rowExpandedFlag++;
2522
2557
  nextTick()
2523
2558
  .then(() => $xeTable.recalculate())
2524
2559
  .then(() => $xeTable.updateCellAreas())
@@ -2621,9 +2656,6 @@ export default defineComponent({
2621
2656
  calcCellWidth();
2622
2657
  autoCellWidth();
2623
2658
  updateStyle();
2624
- if (reFull) {
2625
- updateRowOffsetTop();
2626
- }
2627
2659
  updateRowExpandStyle();
2628
2660
  return computeScrollLoad().then(() => {
2629
2661
  if (reFull === true) {
@@ -2651,7 +2683,10 @@ export default defineComponent({
2651
2683
  const { transform } = treeOpts;
2652
2684
  const childrenField = treeOpts.children || treeOpts.childrenField;
2653
2685
  let treeData = [];
2654
- let fullData = reactive(datas ? datas.slice(0) : []); // 转为响应式
2686
+ let fullData = reactive(datas ? datas.slice(0) : []); // 转为响应式数据
2687
+ if (fullData.length > supportMaxRow) {
2688
+ errLog('vxe.error.errMaxRow', [supportMaxRow]);
2689
+ }
2655
2690
  if (treeConfig) {
2656
2691
  if (transform) {
2657
2692
  // 树结构自动转换
@@ -2746,7 +2781,7 @@ export default defineComponent({
2746
2781
  // warnLog('vxe.error.reqProp', ['table.show-overflow'])
2747
2782
  // }
2748
2783
  if (props.spanMethod) {
2749
- warnLog('vxe.error.scrollErrProp', ['table.span-method']);
2784
+ errLog('vxe.error.scrollErrProp', ['table.span-method']);
2750
2785
  }
2751
2786
  }
2752
2787
  handleReserveStatus();
@@ -3054,9 +3089,8 @@ export default defineComponent({
3054
3089
  * @returns
3055
3090
  */
3056
3091
  const handleBaseTreeExpand = (rows, expanded) => {
3057
- const { treeExpandedMaps, treeExpandLazyLoadedMaps, treeNodeColumn } = reactData;
3058
- const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
3059
- const { fullAllDataRowIdData, tableFullData } = internalData;
3092
+ const { treeNodeColumn } = reactData;
3093
+ const { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData;
3060
3094
  const treeOpts = computeTreeOpts.value;
3061
3095
  const { reserve, lazy, accordion, toggleMethod } = treeOpts;
3062
3096
  const childrenField = treeOpts.children || treeOpts.childrenField;
@@ -3064,6 +3098,7 @@ export default defineComponent({
3064
3098
  const result = [];
3065
3099
  const columnIndex = tableMethods.getColumnIndex(treeNodeColumn);
3066
3100
  const $columnIndex = tableMethods.getVMColumnIndex(treeNodeColumn);
3101
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
3067
3102
  let validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows;
3068
3103
  if (accordion) {
3069
3104
  validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
@@ -3071,17 +3106,17 @@ export default defineComponent({
3071
3106
  const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField });
3072
3107
  if (matchObj) {
3073
3108
  matchObj.items.forEach(item => {
3074
- const rowid = getRowid($xeTable, item);
3075
- if (treeTempExpandedMaps[rowid]) {
3076
- delete treeTempExpandedMaps[rowid];
3109
+ const rowid = handleGetRowId(item);
3110
+ if (treeExpandedMaps[rowid]) {
3111
+ delete treeExpandedMaps[rowid];
3077
3112
  }
3078
3113
  });
3079
3114
  }
3080
3115
  }
3081
3116
  if (expanded) {
3082
3117
  validRows.forEach((row) => {
3083
- const rowid = getRowid($xeTable, row);
3084
- if (!treeTempExpandedMaps[rowid]) {
3118
+ const rowid = handleGetRowId(row);
3119
+ if (!treeExpandedMaps[rowid]) {
3085
3120
  const rowRest = fullAllDataRowIdData[rowid];
3086
3121
  if (rowRest) {
3087
3122
  const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
@@ -3091,7 +3126,7 @@ export default defineComponent({
3091
3126
  }
3092
3127
  else {
3093
3128
  if (row[childrenField] && row[childrenField].length) {
3094
- treeTempExpandedMaps[rowid] = row;
3129
+ treeExpandedMaps[rowid] = row;
3095
3130
  }
3096
3131
  }
3097
3132
  }
@@ -3100,16 +3135,16 @@ export default defineComponent({
3100
3135
  }
3101
3136
  else {
3102
3137
  validRows.forEach(item => {
3103
- const rowid = getRowid($xeTable, item);
3104
- if (treeTempExpandedMaps[rowid]) {
3105
- delete treeTempExpandedMaps[rowid];
3138
+ const rowid = handleGetRowId(item);
3139
+ if (treeExpandedMaps[rowid]) {
3140
+ delete treeExpandedMaps[rowid];
3106
3141
  }
3107
3142
  });
3108
3143
  }
3109
3144
  if (reserve) {
3110
3145
  validRows.forEach((row) => handleTreeExpandReserve(row, expanded));
3111
3146
  }
3112
- reactData.treeExpandedMaps = treeTempExpandedMaps;
3147
+ reactData.treeExpandedFlag++;
3113
3148
  return Promise.all(result).then(() => {
3114
3149
  return tableMethods.recalculate();
3115
3150
  });
@@ -3138,9 +3173,9 @@ export default defineComponent({
3138
3173
  handleCheckedAllCheckboxRow(value);
3139
3174
  if (evnt) {
3140
3175
  dispatchEvent('checkbox-all', {
3141
- records: $xeTable.getCheckboxRecords(),
3142
- reserves: $xeTable.getCheckboxReserveRecords(),
3143
- indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
3176
+ records: () => $xeTable.getCheckboxRecords(),
3177
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
3178
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
3144
3179
  checked: value
3145
3180
  }, evnt);
3146
3181
  }
@@ -3171,10 +3206,11 @@ export default defineComponent({
3171
3206
  }
3172
3207
  };
3173
3208
  const createGetRowCacheProp = (prop) => {
3209
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
3174
3210
  return function (row) {
3175
3211
  const { fullAllDataRowIdData } = internalData;
3176
3212
  if (row) {
3177
- const rowid = getRowid($xeTable, row);
3213
+ const rowid = handleGetRowId(row);
3178
3214
  const rowRest = fullAllDataRowIdData[rowid];
3179
3215
  if (rowRest) {
3180
3216
  return rowRest[prop];
@@ -3325,7 +3361,7 @@ export default defineComponent({
3325
3361
  };
3326
3362
  const handleUpdateColResize = (evnt, params) => {
3327
3363
  $xeTable.analyColumnWidth();
3328
- $xeTable.recalculate(true).then(() => {
3364
+ $xeTable.recalculate().then(() => {
3329
3365
  $xeTable.saveCustomStore('update:width');
3330
3366
  $xeTable.updateCellAreas();
3331
3367
  $xeTable.dispatchEvent('column-resizable-change', params, evnt);
@@ -3336,7 +3372,7 @@ export default defineComponent({
3336
3372
  };
3337
3373
  const handleUpdateRowResize = (evnt, params) => {
3338
3374
  reactData.resizeHeightFlag++;
3339
- $xeTable.recalculate(true).then(() => {
3375
+ $xeTable.recalculate().then(() => {
3340
3376
  $xeTable.updateCellAreas();
3341
3377
  $xeTable.dispatchEvent('row-resizable-change', params, evnt);
3342
3378
  setTimeout(() => $xeTable.recalculate(true), 300);
@@ -3354,16 +3390,17 @@ export default defineComponent({
3354
3390
  }
3355
3391
  };
3356
3392
  const updateRowOffsetTop = () => {
3357
- const { expandColumn, rowExpandedMaps } = reactData;
3358
- const { afterFullData, fullAllDataRowIdData } = internalData;
3393
+ const { expandColumn } = reactData;
3394
+ const { afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
3359
3395
  const expandOpts = computeExpandOpts.value;
3360
3396
  const rowOpts = computeRowOpts.value;
3361
3397
  const cellOpts = computeCellOpts.value;
3362
3398
  const defaultRowHeight = computeDefaultRowHeight.value;
3399
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
3363
3400
  let offsetTop = 0;
3364
3401
  for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
3365
3402
  const row = afterFullData[rIndex];
3366
- const rowid = getRowid($xeTable, row);
3403
+ const rowid = handleGetRowId(row);
3367
3404
  const rowRest = fullAllDataRowIdData[rowid] || {};
3368
3405
  rowRest.oTop = offsetTop;
3369
3406
  offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
@@ -3438,6 +3475,9 @@ export default defineComponent({
3438
3475
  };
3439
3476
  tableMethods = {
3440
3477
  dispatchEvent,
3478
+ getEl() {
3479
+ return refElem.value;
3480
+ },
3441
3481
  /**
3442
3482
  * 重置表格的一切数据状态
3443
3483
  */
@@ -3740,12 +3780,15 @@ export default defineComponent({
3740
3780
  */
3741
3781
  revertData(rows, field) {
3742
3782
  const { keepSource, treeConfig } = props;
3743
- const { fullAllDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
3783
+ const { editStore } = reactData;
3784
+ const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
3785
+ const removeTempMaps = Object.assign({}, editStore.removeMaps);
3744
3786
  const treeOpts = computeTreeOpts.value;
3745
3787
  const { transform } = treeOpts;
3788
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
3746
3789
  if (!keepSource) {
3747
3790
  if (process.env.NODE_ENV === 'development') {
3748
- warnLog('vxe.error.reqProp', ['keep-source']);
3791
+ errLog('vxe.error.reqProp', ['keep-source']);
3749
3792
  }
3750
3793
  return nextTick();
3751
3794
  }
@@ -3760,23 +3803,24 @@ export default defineComponent({
3760
3803
  }
3761
3804
  let reDelFlag = false;
3762
3805
  if (targetRows.length) {
3763
- targetRows.forEach((row) => {
3764
- if (!$xeTable.isInsertByRow(row)) {
3765
- const rowid = getRowid($xeTable, row);
3766
- const oRow = sourceDataRowIdData[rowid];
3767
- if (oRow && row) {
3768
- if (field) {
3769
- XEUtils.set(row, field, XEUtils.clone(XEUtils.get(oRow, field), true));
3770
- }
3771
- else {
3772
- XEUtils.destructuring(row, XEUtils.clone(oRow, true));
3773
- }
3774
- if ($xeTable.isRemoveByRow(row)) {
3775
- const rowRest = fullAllDataRowIdData[rowid];
3776
- if (rowRest) {
3777
- const reRow = rowRest.row;
3778
- tableFullData.unshift(reRow);
3779
- afterFullData.unshift(reRow);
3806
+ targetRows.forEach((item) => {
3807
+ const rowid = handleGetRowId(item);
3808
+ const rowRest = fullAllDataRowIdData[rowid];
3809
+ if (rowRest) {
3810
+ const row = rowRest.row;
3811
+ if (!$xeTable.isInsertByRow(row)) {
3812
+ const oRow = sourceDataRowIdData[rowid];
3813
+ if (oRow && row) {
3814
+ if (field) {
3815
+ XEUtils.set(row, field, XEUtils.clone(XEUtils.get(oRow, field), true));
3816
+ }
3817
+ else {
3818
+ XEUtils.destructuring(row, XEUtils.clone(oRow, true));
3819
+ }
3820
+ if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
3821
+ delete removeTempMaps[rowid];
3822
+ tableFullData.unshift(row);
3823
+ afterFullData.unshift(row);
3780
3824
  reDelFlag = true;
3781
3825
  }
3782
3826
  }
@@ -3786,6 +3830,7 @@ export default defineComponent({
3786
3830
  }
3787
3831
  if (rows) {
3788
3832
  if (reDelFlag) {
3833
+ editStore.removeMaps = removeTempMaps;
3789
3834
  $xeTable.updateFooter();
3790
3835
  $xeTable.cacheRowMap(false);
3791
3836
  $xeTable.handleTableData(treeConfig && transform);
@@ -3938,18 +3983,20 @@ export default defineComponent({
3938
3983
  },
3939
3984
  /**
3940
3985
  * 检查行或列数据是否发生改变
3941
- * @param {Row} row 行对象
3986
+ * @param {Row} rowidOrRow 行对象、行主键
3942
3987
  * @param {String} field 字段名
3943
3988
  */
3944
- isUpdateByRow(row, field) {
3989
+ isUpdateByRow(rowidOrRow, field) {
3945
3990
  const { keepSource } = props;
3946
3991
  const { tableFullColumn, fullDataRowIdData, sourceDataRowIdData } = internalData;
3947
3992
  if (keepSource) {
3948
- const rowid = getRowid($xeTable, row);
3993
+ const rowid = XEUtils.isString(rowidOrRow) || XEUtils.isNumber(rowidOrRow) ? rowidOrRow : getRowid($xeTable, rowidOrRow);
3994
+ const rowRest = fullDataRowIdData[rowid];
3949
3995
  // 新增的数据不需要检测
3950
- if (!fullDataRowIdData[rowid]) {
3996
+ if (!rowRest) {
3951
3997
  return false;
3952
3998
  }
3999
+ const row = rowRest.row;
3953
4000
  const oRow = sourceDataRowIdData[rowid];
3954
4001
  if (oRow) {
3955
4002
  if (arguments.length > 1) {
@@ -4013,6 +4060,94 @@ export default defineComponent({
4013
4060
  tableColumn: reactData.tableColumn.slice(0)
4014
4061
  };
4015
4062
  },
4063
+ /**
4064
+ * 移动列到指定列的位置
4065
+ * @param fieldOrColumn
4066
+ * @param targetFieldOrColumn
4067
+ * @param options
4068
+ */
4069
+ moveColumnTo(fieldOrColumn, targetFieldOrColumn, options) {
4070
+ const { fullColumnIdData, visibleColumn } = internalData;
4071
+ const { dragToChild, dragPos, isCrossDrag } = Object.assign({}, options);
4072
+ const dragCol = handleFieldOrColumn($xeTable, fieldOrColumn);
4073
+ let prevDragCol = null;
4074
+ const colRest = dragCol ? fullColumnIdData[dragCol.id] : null;
4075
+ let defPos = 'left';
4076
+ if (XEUtils.isNumber(targetFieldOrColumn)) {
4077
+ if (colRest && targetFieldOrColumn) {
4078
+ let currList = colRest.items;
4079
+ let offsetIndex = colRest._index + targetFieldOrColumn;
4080
+ if (isCrossDrag) {
4081
+ currList = visibleColumn;
4082
+ offsetIndex = colRest._index + targetFieldOrColumn;
4083
+ }
4084
+ if (offsetIndex > 0 && offsetIndex < currList.length - 1) {
4085
+ prevDragCol = currList[offsetIndex];
4086
+ }
4087
+ if (targetFieldOrColumn > 0) {
4088
+ defPos = 'right';
4089
+ }
4090
+ }
4091
+ }
4092
+ else {
4093
+ prevDragCol = handleFieldOrColumn($xeTable, targetFieldOrColumn);
4094
+ const targetColRest = prevDragCol ? fullColumnIdData[prevDragCol.id] : null;
4095
+ if (colRest && targetColRest) {
4096
+ if (targetColRest._index > colRest._index) {
4097
+ defPos = 'right';
4098
+ }
4099
+ }
4100
+ }
4101
+ return $xeTable.handleColDragSwapEvent(null, true, dragCol, prevDragCol, dragPos || defPos, dragToChild === true);
4102
+ },
4103
+ /**
4104
+ * 移动行到指定行的位置
4105
+ * @param rowidOrRow
4106
+ * @param targetRowidOrRow
4107
+ * @param options
4108
+ */
4109
+ moveRowTo(rowidOrRow, targetRowidOrRow, options) {
4110
+ const { treeConfig } = props;
4111
+ const { fullAllDataRowIdData, afterFullData } = internalData;
4112
+ const { dragToChild, dragPos, isCrossDrag } = Object.assign({}, options);
4113
+ const treeOpts = computeTreeOpts.value;
4114
+ const dragRow = handleRowidOrRow($xeTable, rowidOrRow);
4115
+ let prevDragRow = null;
4116
+ let defPos = 'top';
4117
+ const rowRest = dragRow ? fullAllDataRowIdData[getRowid($xeTable, dragRow)] : null;
4118
+ if (XEUtils.isNumber(targetRowidOrRow)) {
4119
+ if (rowRest && targetRowidOrRow) {
4120
+ let currList = afterFullData;
4121
+ let offsetIndex = rowRest._index + targetRowidOrRow;
4122
+ if (treeConfig) {
4123
+ currList = rowRest.items;
4124
+ if (treeOpts.transform) {
4125
+ offsetIndex = rowRest.treeIndex + targetRowidOrRow;
4126
+ if (isCrossDrag) {
4127
+ currList = afterFullData;
4128
+ offsetIndex = rowRest._index + targetRowidOrRow;
4129
+ }
4130
+ }
4131
+ }
4132
+ if (offsetIndex >= 0 && offsetIndex <= currList.length - 1) {
4133
+ prevDragRow = currList[offsetIndex];
4134
+ }
4135
+ if (targetRowidOrRow > 0) {
4136
+ defPos = 'bottom';
4137
+ }
4138
+ }
4139
+ }
4140
+ else {
4141
+ prevDragRow = handleRowidOrRow($xeTable, targetRowidOrRow);
4142
+ const targetRowRest = prevDragRow ? fullAllDataRowIdData[getRowid($xeTable, prevDragRow)] : null;
4143
+ if (rowRest && targetRowRest) {
4144
+ if (targetRowRest._index > rowRest._index) {
4145
+ defPos = 'bottom';
4146
+ }
4147
+ }
4148
+ }
4149
+ return $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
4150
+ },
4016
4151
  /**
4017
4152
  * 获取表格的全量列
4018
4153
  */
@@ -4032,24 +4167,24 @@ export default defineComponent({
4032
4167
  */
4033
4168
  getCheckboxRecords(isFull) {
4034
4169
  const { treeConfig } = props;
4035
- const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData;
4170
+ const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
4036
4171
  const treeOpts = computeTreeOpts.value;
4037
4172
  const checkboxOpts = computeCheckboxOpts.value;
4038
4173
  const { transform, mapChildrenField } = treeOpts;
4039
4174
  const { checkField } = checkboxOpts;
4040
4175
  const childrenField = treeOpts.children || treeOpts.childrenField;
4041
4176
  let rowList = [];
4042
- const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData);
4043
4177
  if (checkField) {
4044
4178
  if (treeConfig) {
4179
+ const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData);
4045
4180
  rowList = XEUtils.filterTree(currTableData, row => XEUtils.get(row, checkField), { children: transform ? mapChildrenField : childrenField });
4046
4181
  }
4047
4182
  else {
4183
+ const currTableData = isFull ? tableFullData : afterFullData;
4048
4184
  rowList = currTableData.filter((row) => XEUtils.get(row, checkField));
4049
4185
  }
4050
4186
  }
4051
4187
  else {
4052
- const { selectCheckboxMaps } = reactData;
4053
4188
  XEUtils.each(selectCheckboxMaps, (row, rowid) => {
4054
4189
  if (isFull) {
4055
4190
  if (fullDataRowIdData[rowid]) {
@@ -4362,12 +4497,13 @@ export default defineComponent({
4362
4497
  },
4363
4498
  getRowHeightConf(isFull) {
4364
4499
  const { fullAllDataRowIdData, afterFullData } = internalData;
4500
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4365
4501
  const rowOpts = computeRowOpts.value;
4366
4502
  const cellOpts = computeCellOpts.value;
4367
4503
  const defaultRowHeight = computeDefaultRowHeight.value;
4368
4504
  const rest = {};
4369
4505
  afterFullData.forEach(row => {
4370
- const rowid = getRowid($xeTable, row);
4506
+ const rowid = handleGetRowId(row);
4371
4507
  const rowRest = fullAllDataRowIdData[rowid];
4372
4508
  if (rowRest) {
4373
4509
  const resizeHeight = rowRest.resizeHeight;
@@ -4391,8 +4527,9 @@ export default defineComponent({
4391
4527
  rHeight = Math.floor(rHeight * bodyHeight);
4392
4528
  }
4393
4529
  if (rHeight) {
4530
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4394
4531
  rows.forEach(row => {
4395
- const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : getRowid($xeTable, row);
4532
+ const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row);
4396
4533
  const rowRest = fullAllDataRowIdData[rowid];
4397
4534
  if (rowRest) {
4398
4535
  rowRest.resizeHeight = rHeight;
@@ -4541,12 +4678,11 @@ export default defineComponent({
4541
4678
  */
4542
4679
  getCheckboxIndeterminateRecords(isFull) {
4543
4680
  const { treeConfig } = props;
4544
- const { fullDataRowIdData } = internalData;
4545
- const { treeIndeterminateMaps } = reactData;
4681
+ const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData;
4546
4682
  if (treeConfig) {
4547
4683
  const fullRest = [];
4548
4684
  const defRest = [];
4549
- XEUtils.each(treeIndeterminateMaps, (item, rowid) => {
4685
+ XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
4550
4686
  if (item) {
4551
4687
  fullRest.push(item);
4552
4688
  if (fullDataRowIdData[rowid]) {
@@ -4587,17 +4723,18 @@ export default defineComponent({
4587
4723
  return handleCheckedCheckboxRow(rows, checked, true);
4588
4724
  },
4589
4725
  isCheckedByCheckboxRow(row) {
4590
- const { selectCheckboxMaps } = reactData;
4726
+ const { updateCheckboxFlag } = reactData;
4727
+ const { selectCheckboxMaps } = internalData;
4591
4728
  const checkboxOpts = computeCheckboxOpts.value;
4592
4729
  const { checkField } = checkboxOpts;
4593
4730
  if (checkField) {
4594
4731
  return XEUtils.get(row, checkField);
4595
4732
  }
4596
- return !!selectCheckboxMaps[getRowid($xeTable, row)];
4733
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)];
4597
4734
  },
4598
4735
  isCheckedByCheckboxRowKey(rowid) {
4599
- const { selectCheckboxMaps } = reactData;
4600
- const { fullAllDataRowIdData } = internalData;
4736
+ const { updateCheckboxFlag } = reactData;
4737
+ const { fullAllDataRowIdData, selectCheckboxMaps } = internalData;
4601
4738
  const checkboxOpts = computeCheckboxOpts.value;
4602
4739
  const { checkField } = checkboxOpts;
4603
4740
  if (checkField) {
@@ -4607,21 +4744,21 @@ export default defineComponent({
4607
4744
  }
4608
4745
  return false;
4609
4746
  }
4610
- return !!selectCheckboxMaps[rowid];
4747
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
4611
4748
  },
4612
4749
  isIndeterminateByCheckboxRow(row) {
4613
- const { treeIndeterminateMaps } = reactData;
4614
- return !!treeIndeterminateMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
4750
+ const { treeIndeterminateRowMaps } = internalData;
4751
+ return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
4615
4752
  },
4616
4753
  isIndeterminateByCheckboxRowKey(rowid) {
4617
- const { treeIndeterminateMaps } = reactData;
4618
- return !!treeIndeterminateMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
4754
+ const { treeIndeterminateRowMaps } = internalData;
4755
+ return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
4619
4756
  },
4620
4757
  /**
4621
4758
  * 多选,切换某一行的选中状态
4622
4759
  */
4623
4760
  toggleCheckboxRow(row) {
4624
- const { selectCheckboxMaps } = reactData;
4761
+ const { selectCheckboxMaps } = internalData;
4625
4762
  const checkboxOpts = computeCheckboxOpts.value;
4626
4763
  const { checkField } = checkboxOpts;
4627
4764
  const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
@@ -4684,15 +4821,16 @@ export default defineComponent({
4684
4821
  const childrenField = treeOpts.children || treeOpts.childrenField;
4685
4822
  const reserveSelection = [];
4686
4823
  if (checkboxOpts.reserve) {
4824
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4687
4825
  const afterFullIdMaps = {};
4688
4826
  if (treeConfig) {
4689
4827
  XEUtils.eachTree(afterFullData, row => {
4690
- afterFullIdMaps[getRowid($xeTable, row)] = 1;
4828
+ afterFullIdMaps[handleGetRowId(row)] = 1;
4691
4829
  }, { children: childrenField });
4692
4830
  }
4693
4831
  else {
4694
4832
  afterFullData.forEach(row => {
4695
- afterFullIdMaps[getRowid($xeTable, row)] = 1;
4833
+ afterFullIdMaps[handleGetRowId(row)] = 1;
4696
4834
  });
4697
4835
  }
4698
4836
  XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
@@ -4734,6 +4872,7 @@ export default defineComponent({
4734
4872
  const childrenField = treeOpts.children || treeOpts.childrenField;
4735
4873
  const checkboxOpts = computeCheckboxOpts.value;
4736
4874
  const { checkField, reserve } = checkboxOpts;
4875
+ // indeterminateField 仅支持读取
4737
4876
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
4738
4877
  if (checkField) {
4739
4878
  const handleClearChecked = (item) => {
@@ -4754,8 +4893,9 @@ export default defineComponent({
4754
4893
  }
4755
4894
  reactData.isAllSelected = false;
4756
4895
  reactData.isIndeterminate = false;
4757
- reactData.selectCheckboxMaps = {};
4758
- reactData.treeIndeterminateMaps = {};
4896
+ internalData.selectCheckboxMaps = {};
4897
+ internalData.treeIndeterminateRowMaps = {};
4898
+ reactData.updateCheckboxFlag++;
4759
4899
  return nextTick();
4760
4900
  },
4761
4901
  /**
@@ -4863,13 +5003,20 @@ export default defineComponent({
4863
5003
  * 用于当前列,设置某列行为高亮状态
4864
5004
  */
4865
5005
  setCurrentColumn(fieldOrColumn) {
5006
+ const { mouseConfig } = props;
5007
+ const mouseOpts = computeMouseOpts.value;
5008
+ const isMouseSelected = mouseConfig && mouseOpts.selected;
4866
5009
  const column = handleFieldOrColumn($xeTable, fieldOrColumn);
4867
5010
  if (column) {
4868
- // tableMethods.clearCurrentRow()
4869
- tableMethods.clearCurrentColumn();
5011
+ $xeTable.clearCurrentColumn();
4870
5012
  reactData.currentColumn = column;
4871
5013
  }
4872
- return nextTick();
5014
+ return nextTick().then(() => {
5015
+ // 更新状选中态
5016
+ if (isMouseSelected) {
5017
+ $xeTable.addCellSelectedClass();
5018
+ }
5019
+ });
4873
5020
  },
4874
5021
  /**
4875
5022
  * 用于当前列,手动清空当前高亮的状态
@@ -4879,59 +5026,60 @@ export default defineComponent({
4879
5026
  return nextTick();
4880
5027
  },
4881
5028
  setPendingRow(rows, status) {
4882
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps);
5029
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5030
+ const { pendingRowMaps } = internalData;
4883
5031
  if (rows && !XEUtils.isArray(rows)) {
4884
5032
  rows = [rows];
4885
5033
  }
4886
5034
  if (status) {
4887
5035
  rows.forEach((row) => {
4888
- const rowid = getRowid($xeTable, row);
4889
- if (rowid && !pendingMaps[rowid]) {
4890
- pendingMaps[rowid] = row;
5036
+ const rowid = handleGetRowId(row);
5037
+ if (rowid && !pendingRowMaps[rowid]) {
5038
+ pendingRowMaps[rowid] = row;
4891
5039
  }
4892
5040
  });
4893
5041
  }
4894
5042
  else {
4895
5043
  rows.forEach((row) => {
4896
- const rowid = getRowid($xeTable, row);
4897
- if (rowid && pendingMaps[rowid]) {
4898
- delete pendingMaps[rowid];
5044
+ const rowid = handleGetRowId(row);
5045
+ if (rowid && pendingRowMaps[rowid]) {
5046
+ delete pendingRowMaps[rowid];
4899
5047
  }
4900
5048
  });
4901
5049
  }
4902
- reactData.pendingRowMaps = pendingMaps;
5050
+ reactData.pendingRowFlag++;
4903
5051
  return nextTick();
4904
5052
  },
4905
5053
  togglePendingRow(rows) {
4906
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps);
5054
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5055
+ const { pendingRowMaps } = internalData;
4907
5056
  if (rows && !XEUtils.isArray(rows)) {
4908
5057
  rows = [rows];
4909
5058
  }
4910
5059
  rows.forEach((row) => {
4911
- const rowid = getRowid($xeTable, row);
5060
+ const rowid = handleGetRowId(row);
4912
5061
  if (rowid) {
4913
- if (pendingMaps[rowid]) {
4914
- delete pendingMaps[rowid];
5062
+ if (pendingRowMaps[rowid]) {
5063
+ delete pendingRowMaps[rowid];
4915
5064
  }
4916
5065
  else {
4917
- pendingMaps[rowid] = row;
5066
+ pendingRowMaps[rowid] = row;
4918
5067
  }
4919
5068
  }
4920
5069
  });
4921
- reactData.pendingRowMaps = pendingMaps;
5070
+ reactData.pendingRowFlag++;
4922
5071
  return nextTick();
4923
5072
  },
4924
5073
  hasPendingByRow(row) {
4925
5074
  return tableMethods.isPendingByRow(row);
4926
5075
  },
4927
5076
  isPendingByRow(row) {
4928
- const { pendingRowMaps } = reactData;
5077
+ const { pendingRowMaps } = internalData;
4929
5078
  const rowid = getRowid($xeTable, row);
4930
5079
  return !!pendingRowMaps[rowid];
4931
5080
  },
4932
5081
  getPendingRecords() {
4933
- const { pendingRowMaps } = reactData;
4934
- const { fullAllDataRowIdData } = internalData;
5082
+ const { fullAllDataRowIdData, pendingRowMaps } = internalData;
4935
5083
  const insertRecords = [];
4936
5084
  XEUtils.each(pendingRowMaps, (row, rowid) => {
4937
5085
  if (fullAllDataRowIdData[rowid]) {
@@ -4941,7 +5089,8 @@ export default defineComponent({
4941
5089
  return insertRecords;
4942
5090
  },
4943
5091
  clearPendingRow() {
4944
- reactData.pendingRowMaps = {};
5092
+ internalData.pendingRowMaps = {};
5093
+ reactData.pendingRowFlag++;
4945
5094
  return nextTick();
4946
5095
  },
4947
5096
  sort(sortConfs, sortOrder) {
@@ -5090,7 +5239,13 @@ export default defineComponent({
5090
5239
  visible: false
5091
5240
  });
5092
5241
  if (visible) {
5093
- dispatchEvent('filter-visible', { column, property: column.field, field: column.field, filterList: $xeTable.getCheckedFilters(), visible: false }, null);
5242
+ dispatchEvent('filter-visible', {
5243
+ column,
5244
+ property: column.field,
5245
+ field: column.field,
5246
+ filterList: () => $xeTable.getCheckedFilters(),
5247
+ visible: false
5248
+ }, null);
5094
5249
  }
5095
5250
  return nextTick();
5096
5251
  },
@@ -5118,17 +5273,16 @@ export default defineComponent({
5118
5273
  return rowRest && !!rowRest.expandLoaded;
5119
5274
  },
5120
5275
  clearRowExpandLoaded(row) {
5121
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
5122
- const { fullAllDataRowIdData } = internalData;
5276
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
5123
5277
  const expandOpts = computeExpandOpts.value;
5124
5278
  const { lazy } = expandOpts;
5125
5279
  const rowid = getRowid($xeTable, row);
5126
5280
  const rowRest = fullAllDataRowIdData[rowid];
5127
5281
  if (lazy && rowRest) {
5128
5282
  rowRest.expandLoaded = false;
5129
- delete rExpandLazyLoadedMaps[rowid];
5283
+ delete rowExpandLazyLoadedMaps[rowid];
5130
5284
  }
5131
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
5285
+ reactData.rowExpandedFlag++;
5132
5286
  return nextTick();
5133
5287
  },
5134
5288
  /**
@@ -5136,12 +5290,12 @@ export default defineComponent({
5136
5290
  * @param {Row} row 行对象
5137
5291
  */
5138
5292
  reloadRowExpand(row) {
5139
- const { rowExpandLazyLoadedMaps } = reactData;
5293
+ const { rowExpandLazyLoadedMaps } = internalData;
5140
5294
  const expandOpts = computeExpandOpts.value;
5141
5295
  const { lazy } = expandOpts;
5142
5296
  const rowid = getRowid($xeTable, row);
5143
5297
  if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
5144
- tableMethods.clearRowExpandLoaded(row)
5298
+ $xeTable.clearRowExpandLoaded(row)
5145
5299
  .then(() => handleAsyncRowExpand(row));
5146
5300
  }
5147
5301
  return nextTick();
@@ -5151,13 +5305,13 @@ export default defineComponent({
5151
5305
  warnLog('vxe.error.delFunc', ['reloadExpandContent', 'reloadRowExpand']);
5152
5306
  }
5153
5307
  // 即将废弃
5154
- return tableMethods.reloadRowExpand(row);
5308
+ return $xeTable.reloadRowExpand(row);
5155
5309
  },
5156
5310
  /**
5157
5311
  * 切换展开行
5158
5312
  */
5159
5313
  toggleRowExpand(row) {
5160
- return tableMethods.setRowExpand(row, !tableMethods.isRowExpandByRow(row));
5314
+ return $xeTable.setRowExpand(row, !$xeTable.isRowExpandByRow(row));
5161
5315
  },
5162
5316
  /**
5163
5317
  * 设置所有行的展开与否
@@ -5186,9 +5340,9 @@ export default defineComponent({
5186
5340
  * @param {Boolean} expanded 是否展开
5187
5341
  */
5188
5342
  setRowExpand(rows, expanded) {
5189
- const { rowExpandedMaps, rowExpandLazyLoadedMaps, expandColumn } = reactData;
5190
- const { fullAllDataRowIdData } = internalData;
5191
- let rExpandedMaps = Object.assign({}, rowExpandedMaps);
5343
+ const { expandColumn } = reactData;
5344
+ let { fullAllDataRowIdData, rowExpandedMaps, rowExpandLazyLoadedMaps } = internalData;
5345
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5192
5346
  const expandOpts = computeExpandOpts.value;
5193
5347
  const { reserve, lazy, accordion, toggleMethod } = expandOpts;
5194
5348
  const lazyRests = [];
@@ -5200,30 +5354,31 @@ export default defineComponent({
5200
5354
  }
5201
5355
  if (accordion) {
5202
5356
  // 只能同时展开一个
5203
- rExpandedMaps = {};
5357
+ rowExpandedMaps = {};
5358
+ internalData.rowExpandedMaps = rowExpandedMaps;
5204
5359
  rows = rows.slice(rows.length - 1, rows.length);
5205
5360
  }
5206
5361
  const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: tableMethods.getRowIndex(row), $rowIndex: tableMethods.getVMRowIndex(row) })) : rows;
5207
5362
  if (expanded) {
5208
5363
  validRows.forEach((row) => {
5209
- const rowid = getRowid($xeTable, row);
5210
- if (!rExpandedMaps[rowid]) {
5364
+ const rowid = handleGetRowId(row);
5365
+ if (!rowExpandedMaps[rowid]) {
5211
5366
  const rowRest = fullAllDataRowIdData[rowid];
5212
5367
  const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
5213
5368
  if (isLoad) {
5214
5369
  lazyRests.push(handleAsyncRowExpand(row));
5215
5370
  }
5216
5371
  else {
5217
- rExpandedMaps[rowid] = row;
5372
+ rowExpandedMaps[rowid] = row;
5218
5373
  }
5219
5374
  }
5220
5375
  });
5221
5376
  }
5222
5377
  else {
5223
5378
  validRows.forEach(item => {
5224
- const rowid = getRowid($xeTable, item);
5225
- if (rExpandedMaps[rowid]) {
5226
- delete rExpandedMaps[rowid];
5379
+ const rowid = handleGetRowId(item);
5380
+ if (rowExpandedMaps[rowid]) {
5381
+ delete rowExpandedMaps[rowid];
5227
5382
  }
5228
5383
  });
5229
5384
  }
@@ -5231,7 +5386,7 @@ export default defineComponent({
5231
5386
  validRows.forEach((row) => handleRowExpandReserve(row, expanded));
5232
5387
  }
5233
5388
  }
5234
- reactData.rowExpandedMaps = rExpandedMaps;
5389
+ reactData.rowExpandedFlag++;
5235
5390
  return Promise.all(lazyRests)
5236
5391
  .then(() => nextTick())
5237
5392
  .then(() => $xeTable.recalculate(true))
@@ -5247,9 +5402,10 @@ export default defineComponent({
5247
5402
  * @param {Row} row 行对象
5248
5403
  */
5249
5404
  isRowExpandByRow(row) {
5250
- const { rowExpandedMaps } = reactData;
5405
+ const { rowExpandedFlag } = reactData;
5406
+ const { rowExpandedMaps } = internalData;
5251
5407
  const rowid = getRowid($xeTable, row);
5252
- return !!rowExpandedMaps[rowid];
5408
+ return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
5253
5409
  },
5254
5410
  isExpandByRow(row) {
5255
5411
  // 已废弃
@@ -5266,7 +5422,8 @@ export default defineComponent({
5266
5422
  const expandOpts = computeExpandOpts.value;
5267
5423
  const { reserve } = expandOpts;
5268
5424
  const expList = $xeTable.getRowExpandRecords();
5269
- reactData.rowExpandedMaps = {};
5425
+ internalData.rowExpandedMaps = {};
5426
+ reactData.rowExpandedFlag++;
5270
5427
  if (reserve) {
5271
5428
  tableFullData.forEach((row) => handleRowExpandReserve(row, false));
5272
5429
  }
@@ -5287,7 +5444,7 @@ export default defineComponent({
5287
5444
  },
5288
5445
  getRowExpandRecords() {
5289
5446
  const rest = [];
5290
- XEUtils.each(reactData.rowExpandedMaps, item => {
5447
+ XEUtils.each(internalData.rowExpandedMaps, item => {
5291
5448
  if (item) {
5292
5449
  rest.push(item);
5293
5450
  }
@@ -5296,7 +5453,7 @@ export default defineComponent({
5296
5453
  },
5297
5454
  getTreeExpandRecords() {
5298
5455
  const rest = [];
5299
- XEUtils.each(reactData.treeExpandedMaps, item => {
5456
+ XEUtils.each(internalData.treeExpandedMaps, item => {
5300
5457
  if (item) {
5301
5458
  rest.push(item);
5302
5459
  }
@@ -5313,12 +5470,10 @@ export default defineComponent({
5313
5470
  return rowRest && !!rowRest.treeLoaded;
5314
5471
  },
5315
5472
  clearTreeExpandLoaded(rows) {
5316
- const { fullAllDataRowIdData } = internalData;
5473
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
5317
5474
  const treeOpts = computeTreeOpts.value;
5318
5475
  const { transform } = treeOpts;
5319
- let tExpandedMaps = {};
5320
5476
  if (rows) {
5321
- tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
5322
5477
  if (!XEUtils.isArray(rows)) {
5323
5478
  rows = [rows];
5324
5479
  }
@@ -5327,8 +5482,8 @@ export default defineComponent({
5327
5482
  const rowRest = fullAllDataRowIdData[rowid];
5328
5483
  if (rowRest) {
5329
5484
  rowRest.treeLoaded = false;
5330
- if (tExpandedMaps[rowid]) {
5331
- delete tExpandedMaps[rowid];
5485
+ if (treeExpandedMaps[rowid]) {
5486
+ delete treeExpandedMaps[rowid];
5332
5487
  }
5333
5488
  }
5334
5489
  });
@@ -5338,7 +5493,8 @@ export default defineComponent({
5338
5493
  rowRest.treeLoaded = false;
5339
5494
  });
5340
5495
  }
5341
- reactData.treeExpandedMaps = {};
5496
+ internalData.treeExpandedMaps = {};
5497
+ reactData.treeExpandedFlag++;
5342
5498
  if (transform) {
5343
5499
  handleVirtualTreeToList();
5344
5500
  return $xeTable.handleTableData();
@@ -5350,7 +5506,7 @@ export default defineComponent({
5350
5506
  * @param {Row} row 行对象
5351
5507
  */
5352
5508
  reloadTreeExpand(row) {
5353
- const { treeExpandLazyLoadedMaps } = reactData;
5509
+ const { treeExpandLazyLoadedMaps } = internalData;
5354
5510
  const treeOpts = computeTreeOpts.value;
5355
5511
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
5356
5512
  const { transform, lazy } = treeOpts;
@@ -5436,8 +5592,9 @@ export default defineComponent({
5436
5592
  * @param {Row} row 行对象
5437
5593
  */
5438
5594
  isTreeExpandByRow(row) {
5439
- const { treeExpandedMaps } = reactData;
5440
- return !!treeExpandedMaps[getRowid($xeTable, row)];
5595
+ const { treeExpandedFlag } = reactData;
5596
+ const { treeExpandedMaps } = internalData;
5597
+ return !!treeExpandedFlag && !!treeExpandedMaps[getRowid($xeTable, row)];
5441
5598
  },
5442
5599
  /**
5443
5600
  * 手动清空树形节点的展开状态,数据会恢复成未展开的状态
@@ -5447,19 +5604,20 @@ export default defineComponent({
5447
5604
  const treeOpts = computeTreeOpts.value;
5448
5605
  const childrenField = treeOpts.children || treeOpts.childrenField;
5449
5606
  const { transform, reserve } = treeOpts;
5450
- const expList = tableMethods.getTreeExpandRecords();
5451
- reactData.treeExpandedMaps = {};
5607
+ const expList = $xeTable.getTreeExpandRecords();
5608
+ internalData.treeExpandedMaps = {};
5609
+ reactData.treeExpandedFlag++;
5452
5610
  if (reserve) {
5453
5611
  XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve(row, false), { children: childrenField });
5454
5612
  }
5455
- return tablePrivateMethods.handleTableData().then(() => {
5613
+ return $xeTable.handleTableData().then(() => {
5456
5614
  if (transform) {
5457
5615
  handleVirtualTreeToList();
5458
- return tablePrivateMethods.handleTableData();
5616
+ return $xeTable.handleTableData();
5459
5617
  }
5460
5618
  }).then(() => {
5461
5619
  if (expList.length) {
5462
- return tableMethods.recalculate();
5620
+ return $xeTable.recalculate();
5463
5621
  }
5464
5622
  });
5465
5623
  },
@@ -5714,7 +5872,13 @@ export default defineComponent({
5714
5872
  const { id } = props;
5715
5873
  const customOpts = computeCustomOpts.value;
5716
5874
  const { collectColumn } = internalData;
5717
- const { checkMethod } = customOpts;
5875
+ const { storage, checkMethod } = customOpts;
5876
+ const isAllCustom = storage === true;
5877
+ const storageOpts = isAllCustom ? {} : Object.assign({}, storage || {});
5878
+ const isCustomResizable = isAllCustom || storageOpts.resizable;
5879
+ const isCustomVisible = isAllCustom || storageOpts.visible;
5880
+ const isCustomFixed = isAllCustom || storageOpts.fixed;
5881
+ const isCustomSort = isAllCustom || storageOpts.sort;
5718
5882
  const resizableData = {};
5719
5883
  const sortData = {};
5720
5884
  const visibleData = {};
@@ -5734,44 +5898,34 @@ export default defineComponent({
5734
5898
  let hasFixed = 0;
5735
5899
  let hasVisible = 0;
5736
5900
  XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => {
5901
+ const colKey = column.getKey();
5902
+ if (!colKey) {
5903
+ errLog('vxe.error.reqProp', [`${column.getTitle() || column.type || ''} -> column.field=?`]);
5904
+ return;
5905
+ }
5737
5906
  // 只支持一级
5738
5907
  if (!parentColumn) {
5739
- collectColumn.forEach((column) => {
5740
- const colKey = column.getKey();
5741
- if (colKey) {
5742
- hasSort = 1;
5743
- sortData[colKey] = column.renderSortNumber;
5744
- }
5745
- });
5746
- if (column.fixed !== column.defaultFixed) {
5747
- const colKey = column.getKey();
5748
- if (colKey) {
5749
- hasFixed = 1;
5750
- fixedData[colKey] = column.fixed;
5751
- }
5908
+ if (isCustomSort) {
5909
+ hasSort = 1;
5910
+ sortData[colKey] = column.renderSortNumber;
5752
5911
  }
5753
- }
5754
- if (column.resizeWidth) {
5755
- const colKey = column.getKey();
5756
- if (colKey) {
5757
- hasResizable = 1;
5758
- resizableData[colKey] = column.renderWidth;
5912
+ if (isCustomFixed && column.fixed !== column.defaultFixed) {
5913
+ hasFixed = 1;
5914
+ fixedData[colKey] = column.fixed;
5759
5915
  }
5760
5916
  }
5761
- if (!checkMethod || checkMethod({ column })) {
5917
+ if (isCustomResizable && column.resizeWidth) {
5918
+ hasResizable = 1;
5919
+ resizableData[colKey] = column.renderWidth;
5920
+ }
5921
+ if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
5762
5922
  if (!column.visible && column.defaultVisible) {
5763
- const colKey = column.getKey();
5764
- if (colKey) {
5765
- hasVisible = 1;
5766
- visibleData[colKey] = false;
5767
- }
5923
+ hasVisible = 1;
5924
+ visibleData[colKey] = false;
5768
5925
  }
5769
5926
  else if (column.visible && !column.defaultVisible) {
5770
- const colKey = column.getKey();
5771
- if (colKey) {
5772
- hasVisible = 1;
5773
- visibleData[colKey] = true;
5774
- }
5927
+ hasVisible = 1;
5928
+ visibleData[colKey] = true;
5775
5929
  }
5776
5930
  }
5777
5931
  });
@@ -6015,7 +6169,7 @@ export default defineComponent({
6015
6169
  // 该行为只对当前激活的表格有效
6016
6170
  if (internalData.isActivated) {
6017
6171
  tablePrivateMethods.preventEvent(evnt, 'event.keydown', null, () => {
6018
- const { mouseConfig, keyboardConfig, treeConfig, editConfig, highlightCurrentRow } = props;
6172
+ const { mouseConfig, keyboardConfig, treeConfig, editConfig, highlightCurrentRow, highlightCurrentColumn } = props;
6019
6173
  const { ctxMenuStore, editStore, currentRow } = reactData;
6020
6174
  const { afterFullData } = internalData;
6021
6175
  const isMenu = computeIsMenu.value;
@@ -6026,6 +6180,7 @@ export default defineComponent({
6026
6180
  const treeOpts = computeTreeOpts.value;
6027
6181
  const menuList = computeMenuList.value;
6028
6182
  const rowOpts = computeRowOpts.value;
6183
+ const columnOpts = computeColumnOpts.value;
6029
6184
  const { selected, actived } = editStore;
6030
6185
  const childrenField = treeOpts.children || treeOpts.childrenField;
6031
6186
  const keyCode = evnt.keyCode;
@@ -6199,10 +6354,14 @@ export default defineComponent({
6199
6354
  if (selected.row && selected.column) {
6200
6355
  $xeTable.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
6201
6356
  }
6202
- else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
6203
- // 当前行按键上下移动
6357
+ // 当前行按键上下移动
6358
+ if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
6204
6359
  $xeTable.moveCurrentRow(isUpArrow, isDwArrow, evnt);
6205
6360
  }
6361
+ // 当前行按键左右移动
6362
+ if ((isLeftArrow || isRightArrow) && (columnOpts.isCurrent || highlightCurrentColumn)) {
6363
+ $xeTable.moveCurrentColumn(isLeftArrow, isRightArrow, evnt);
6364
+ }
6206
6365
  }
6207
6366
  }
6208
6367
  else if (isTab && keyboardConfig && keyboardOpts.isTab) {
@@ -6649,7 +6808,16 @@ export default defineComponent({
6649
6808
  if (el) {
6650
6809
  const parentElem = el.parentNode;
6651
6810
  const parentPaddingSize = height === '100%' || height === 'auto' ? getPaddingTopBottomSize(parentElem) : 0;
6652
- return Math.floor($xeGrid ? $xeGrid.getParentHeight() : XEUtils.toNumber(getComputedStyle(parentElem).height) - parentPaddingSize);
6811
+ let parentWrapperHeight = 0;
6812
+ if (parentElem) {
6813
+ if ($xeGrid && hasClass(parentElem, 'vxe-grid--table-wrapper')) {
6814
+ parentWrapperHeight = $xeGrid.getParentHeight();
6815
+ }
6816
+ else {
6817
+ parentWrapperHeight = parentElem.clientHeight;
6818
+ }
6819
+ }
6820
+ return Math.floor(parentWrapperHeight - parentPaddingSize);
6653
6821
  }
6654
6822
  return 0;
6655
6823
  },
@@ -6736,37 +6904,20 @@ export default defineComponent({
6736
6904
  */
6737
6905
  cacheRowMap() {
6738
6906
  const { treeConfig } = props;
6739
- const { treeExpandedMaps } = reactData;
6740
- const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData;
6907
+ const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData;
6741
6908
  const treeOpts = computeTreeOpts.value;
6742
6909
  const childrenField = treeOpts.children || treeOpts.childrenField;
6743
6910
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
6744
- const rowkey = getRowkey($xeTable);
6911
+ const { lazy } = treeOpts;
6745
6912
  const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
6746
6913
  const fullDataRowIdMaps = {};
6747
- const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
6748
- const handleRow = (row, index, items, path, parentRow, nodes) => {
6749
- let rowid = getRowid($xeTable, row);
6750
- const seq = treeConfig && path ? toTreePathSeq(path) : index + 1;
6751
- const level = nodes ? nodes.length - 1 : 0;
6752
- if (eqEmptyValue(rowid)) {
6753
- rowid = getRowUniqueId();
6754
- XEUtils.set(row, rowkey, rowid);
6755
- }
6756
- if (treeConfig && treeOpts.lazy) {
6757
- const treeExpRest = treeExpandedMaps[rowid];
6758
- if (row[hasChildField] && XEUtils.isUndefined(row[childrenField])) {
6759
- row[childrenField] = null;
6760
- }
6761
- if (treeExpRest) {
6762
- if (!row[childrenField] || !row[childrenField].length) {
6763
- delete treeTempExpandedMaps[rowid];
6764
- }
6765
- }
6766
- }
6767
- let rowRest = fullAllDataRowIdData[rowid];
6914
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
6915
+ const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
6916
+ let rowRest = fullAllDataRowIdMaps[rowid];
6768
6917
  if (!rowRest) {
6769
6918
  rowRest = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
6919
+ fullDataRowIdMaps[rowid] = rowRest;
6920
+ fullAllDataRowIdMaps[rowid] = rowRest;
6770
6921
  }
6771
6922
  rowRest.treeLoaded = false;
6772
6923
  rowRest.expandLoaded = false;
@@ -6774,34 +6925,45 @@ export default defineComponent({
6774
6925
  rowRest.items = items;
6775
6926
  rowRest.parent = parentRow;
6776
6927
  rowRest.level = level;
6777
- rowRest.index = treeConfig && parentRow ? -1 : index;
6928
+ rowRest.index = currIndex;
6929
+ rowRest.treeIndex = index;
6778
6930
  fullDataRowIdMaps[rowid] = rowRest;
6779
6931
  fullAllDataRowIdMaps[rowid] = rowRest;
6780
6932
  };
6781
6933
  if (treeConfig) {
6782
- XEUtils.eachTree(tableFullTreeData, handleRow, { children: childrenField });
6934
+ XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
6935
+ const rowid = handleUpdateRowId(row);
6936
+ if (treeConfig && lazy) {
6937
+ if (row[hasChildField] && row[childrenField] === undefined) {
6938
+ row[childrenField] = null;
6939
+ }
6940
+ if (treeExpandedMaps[rowid]) {
6941
+ if (!row[childrenField] || !row[childrenField].length) {
6942
+ delete treeExpandedMaps[rowid];
6943
+ }
6944
+ }
6945
+ }
6946
+ handleRowCache(row, index, items, parentRow ? -1 : index, parentRow, rowid, nodes.length - 1, toTreePathSeq(path));
6947
+ }, { children: childrenField });
6783
6948
  }
6784
6949
  else {
6785
- tableFullData.forEach(handleRow);
6950
+ tableFullData.forEach((row, index, items) => {
6951
+ handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
6952
+ });
6786
6953
  }
6787
6954
  internalData.fullDataRowIdData = fullDataRowIdMaps;
6788
6955
  internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
6789
- reactData.treeExpandedMaps = treeTempExpandedMaps;
6956
+ reactData.treeExpandedFlag++;
6790
6957
  },
6791
6958
  cacheSourceMap(fullData) {
6792
6959
  const { treeConfig } = props;
6793
6960
  const treeOpts = computeTreeOpts.value;
6794
- let { sourceDataRowIdData } = internalData;
6795
6961
  const sourceData = XEUtils.clone(fullData, true);
6796
- const rowkey = getRowkey($xeTable);
6797
- sourceDataRowIdData = internalData.sourceDataRowIdData = {};
6962
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
6963
+ const sourceRowIdData = {};
6798
6964
  const handleSourceRow = (row) => {
6799
- let rowid = getRowid($xeTable, row);
6800
- if (eqEmptyValue(rowid)) {
6801
- rowid = getRowUniqueId();
6802
- XEUtils.set(row, rowkey, rowid);
6803
- }
6804
- sourceDataRowIdData[rowid] = row;
6965
+ const rowid = handleUpdateRowId(row);
6966
+ sourceRowIdData[rowid] = row;
6805
6967
  };
6806
6968
  // 源数据缓存
6807
6969
  if (treeConfig) {
@@ -6811,6 +6973,7 @@ export default defineComponent({
6811
6973
  else {
6812
6974
  sourceData.forEach(handleSourceRow);
6813
6975
  }
6976
+ internalData.sourceDataRowIdData = sourceRowIdData;
6814
6977
  internalData.tableSourceData = sourceData;
6815
6978
  },
6816
6979
  /**
@@ -7262,8 +7425,22 @@ export default defineComponent({
7262
7425
  }
7263
7426
  }
7264
7427
  // 兼容老版本
7265
- let rest;
7266
- if (!evntList.some((func) => func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args)) === false)) {
7428
+ let rest = null;
7429
+ let isStop = false;
7430
+ for (let i = 0; i < evntList.length; i++) {
7431
+ const func = evntList[i];
7432
+ const fnRest = func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args));
7433
+ if (fnRest === false) {
7434
+ isStop = true;
7435
+ break;
7436
+ }
7437
+ else if (fnRest && fnRest.status === false) {
7438
+ rest = fnRest.result;
7439
+ isStop = true;
7440
+ break;
7441
+ }
7442
+ }
7443
+ if (!isStop) {
7267
7444
  if (next) {
7268
7445
  rest = next();
7269
7446
  }
@@ -7275,9 +7452,7 @@ export default defineComponent({
7275
7452
  },
7276
7453
  updateCheckboxStatus() {
7277
7454
  const { treeConfig } = props;
7278
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData;
7279
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
7280
- const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
7455
+ const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
7281
7456
  const treeOpts = computeTreeOpts.value;
7282
7457
  const { transform, mapChildrenField } = treeOpts;
7283
7458
  const childrenField = treeOpts.children || treeOpts.childrenField;
@@ -7289,10 +7464,11 @@ export default defineComponent({
7289
7464
  }
7290
7465
  // 树结构
7291
7466
  if (treeConfig) {
7467
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7292
7468
  const childRowMaps = {};
7293
7469
  const childRowList = [];
7294
7470
  XEUtils.eachTree(afterTreeFullData, (row) => {
7295
- const rowid = getRowid($xeTable, row);
7471
+ const rowid = handleGetRowId(row);
7296
7472
  const childList = row[transform ? mapChildrenField : childrenField];
7297
7473
  if (childList && childList.length && !childRowMaps[rowid]) {
7298
7474
  childRowMaps[rowid] = 1;
@@ -7308,13 +7484,13 @@ export default defineComponent({
7308
7484
  let vLen = 0; // 有效行
7309
7485
  childList.forEach(checkMethod
7310
7486
  ? (item) => {
7311
- const childRowid = getRowid($xeTable, item);
7312
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
7487
+ const childRowid = handleGetRowId(item);
7488
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
7313
7489
  if (checkMethod({ row: item })) {
7314
7490
  if (isSelect) {
7315
7491
  sLen++;
7316
7492
  }
7317
- else if (halfRowMaps[childRowid]) {
7493
+ else if (treeIndeterminateRowMaps[childRowid]) {
7318
7494
  hLen++;
7319
7495
  }
7320
7496
  vLen++;
@@ -7323,18 +7499,18 @@ export default defineComponent({
7323
7499
  if (isSelect) {
7324
7500
  sLen++;
7325
7501
  }
7326
- else if (halfRowMaps[childRowid]) {
7502
+ else if (treeIndeterminateRowMaps[childRowid]) {
7327
7503
  hLen++;
7328
7504
  }
7329
7505
  }
7330
7506
  }
7331
7507
  : item => {
7332
- const childRowid = getRowid($xeTable, item);
7333
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
7508
+ const childRowid = handleGetRowId(item);
7509
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
7334
7510
  if (isSelect) {
7335
7511
  sLen++;
7336
7512
  }
7337
- else if (halfRowMaps[childRowid]) {
7513
+ else if (treeIndeterminateRowMaps[childRowid]) {
7338
7514
  hLen++;
7339
7515
  }
7340
7516
  vLen++;
@@ -7346,51 +7522,50 @@ export default defineComponent({
7346
7522
  }
7347
7523
  if (isSelected) {
7348
7524
  if (!checkField) {
7349
- selectRowMaps[rowid] = row;
7525
+ selectCheckboxMaps[rowid] = row;
7350
7526
  }
7351
- if (halfRowMaps[rowid]) {
7352
- delete halfRowMaps[rowid];
7527
+ if (treeIndeterminateRowMaps[rowid]) {
7528
+ delete treeIndeterminateRowMaps[rowid];
7353
7529
  }
7354
7530
  }
7355
7531
  else {
7356
7532
  if (!checkField) {
7357
- if (selectRowMaps[rowid]) {
7358
- delete selectRowMaps[rowid];
7533
+ if (selectCheckboxMaps[rowid]) {
7534
+ delete selectCheckboxMaps[rowid];
7359
7535
  }
7360
7536
  }
7361
7537
  if (halfSelect) {
7362
- halfRowMaps[rowid] = row;
7538
+ treeIndeterminateRowMaps[rowid] = row;
7363
7539
  }
7364
7540
  else {
7365
- if (halfRowMaps[rowid]) {
7366
- delete halfRowMaps[rowid];
7541
+ if (treeIndeterminateRowMaps[rowid]) {
7542
+ delete treeIndeterminateRowMaps[rowid];
7367
7543
  }
7368
7544
  }
7369
7545
  }
7370
7546
  });
7371
7547
  }
7372
- reactData.selectCheckboxMaps = selectRowMaps;
7373
- reactData.treeIndeterminateMaps = halfRowMaps;
7548
+ reactData.updateCheckboxFlag++;
7374
7549
  },
7375
7550
  updateAllCheckboxStatus() {
7376
7551
  const { treeConfig } = props;
7377
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData;
7552
+ const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
7378
7553
  const checkboxOpts = computeCheckboxOpts.value;
7379
7554
  const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
7380
- const { afterFullData, afterTreeFullData, checkboxReserveRowMap } = internalData;
7555
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7381
7556
  let sLen = 0; // 已选
7382
7557
  let hLen = 0; // 半选
7383
7558
  let vLen = 0; // 有效行
7384
7559
  const rootList = (treeConfig ? afterTreeFullData : afterFullData);
7385
7560
  rootList.forEach(checkMethod
7386
7561
  ? row => {
7387
- const childRowid = getRowid($xeTable, row);
7562
+ const childRowid = handleGetRowId(row);
7388
7563
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
7389
7564
  if (checkMethod({ row })) {
7390
7565
  if (selected) {
7391
7566
  sLen++;
7392
7567
  }
7393
- else if (treeIndeterminateMaps[childRowid]) {
7568
+ else if (treeIndeterminateRowMaps[childRowid]) {
7394
7569
  hLen++;
7395
7570
  }
7396
7571
  vLen++;
@@ -7399,18 +7574,18 @@ export default defineComponent({
7399
7574
  if (selected) {
7400
7575
  sLen++;
7401
7576
  }
7402
- else if (treeIndeterminateMaps[childRowid]) {
7577
+ else if (treeIndeterminateRowMaps[childRowid]) {
7403
7578
  hLen++;
7404
7579
  }
7405
7580
  }
7406
7581
  }
7407
7582
  : row => {
7408
- const childRowid = getRowid($xeTable, row);
7583
+ const childRowid = handleGetRowId(row);
7409
7584
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
7410
7585
  if (selected) {
7411
7586
  sLen++;
7412
7587
  }
7413
- else if (treeIndeterminateMaps[childRowid]) {
7588
+ else if (treeIndeterminateRowMaps[childRowid]) {
7414
7589
  hLen++;
7415
7590
  }
7416
7591
  vLen++;
@@ -7434,13 +7609,14 @@ export default defineComponent({
7434
7609
  */
7435
7610
  handleBatchSelectRows(rows, checked, isForce) {
7436
7611
  const { treeConfig } = props;
7437
- const { selectCheckboxMaps } = reactData;
7438
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
7612
+ const { selectCheckboxMaps } = internalData;
7439
7613
  const treeOpts = computeTreeOpts.value;
7440
7614
  const { transform, mapChildrenField } = treeOpts;
7441
7615
  const childrenField = treeOpts.children || treeOpts.childrenField;
7442
7616
  const checkboxOpts = computeCheckboxOpts.value;
7443
7617
  const { checkField, checkStrictly, checkMethod } = checkboxOpts;
7618
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7619
+ // indeterminateField 仅支持读取
7444
7620
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
7445
7621
  if (checkField) {
7446
7622
  // 树结构
@@ -7455,59 +7631,57 @@ export default defineComponent({
7455
7631
  handleCheckboxReserveRow(row, checked);
7456
7632
  }
7457
7633
  }, { children: transform ? mapChildrenField : childrenField });
7458
- reactData.selectCheckboxMaps = selectRowMaps;
7634
+ reactData.updateCheckboxFlag++;
7459
7635
  return;
7460
7636
  }
7461
- else {
7462
- // 列表
7463
- rows.forEach(row => {
7464
- if (isForce || (!checkMethod || checkMethod({ row }))) {
7465
- XEUtils.set(row, checkField, checked);
7466
- handleCheckboxReserveRow(row, checked);
7467
- }
7468
- });
7469
- }
7470
- reactData.selectCheckboxMaps = selectRowMaps;
7637
+ // 列表
7638
+ rows.forEach(row => {
7639
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
7640
+ XEUtils.set(row, checkField, checked);
7641
+ handleCheckboxReserveRow(row, checked);
7642
+ }
7643
+ });
7644
+ reactData.updateCheckboxFlag++;
7471
7645
  return;
7472
7646
  }
7473
7647
  // 树结构
7474
7648
  if (treeConfig && !checkStrictly) {
7475
7649
  // 更新子节点状态
7476
7650
  XEUtils.eachTree(rows, (row) => {
7477
- const rowid = getRowid($xeTable, row);
7651
+ const rowid = handleGetRowId(row);
7478
7652
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7479
7653
  if (checked) {
7480
- selectRowMaps[rowid] = row;
7654
+ selectCheckboxMaps[rowid] = row;
7481
7655
  }
7482
7656
  else {
7483
- if (selectRowMaps[rowid]) {
7484
- delete selectRowMaps[rowid];
7657
+ if (selectCheckboxMaps[rowid]) {
7658
+ delete selectCheckboxMaps[rowid];
7485
7659
  }
7486
7660
  }
7487
7661
  handleCheckboxReserveRow(row, checked);
7488
7662
  }
7489
7663
  }, { children: transform ? mapChildrenField : childrenField });
7490
- reactData.selectCheckboxMaps = selectRowMaps;
7664
+ reactData.updateCheckboxFlag++;
7491
7665
  return;
7492
7666
  }
7493
7667
  // 列表
7494
7668
  rows.forEach(row => {
7495
- const rowid = getRowid($xeTable, row);
7669
+ const rowid = handleGetRowId(row);
7496
7670
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7497
7671
  if (checked) {
7498
- if (!selectRowMaps[rowid]) {
7499
- selectRowMaps[rowid] = row;
7672
+ if (!selectCheckboxMaps[rowid]) {
7673
+ selectCheckboxMaps[rowid] = row;
7500
7674
  }
7501
7675
  }
7502
7676
  else {
7503
- if (selectRowMaps[rowid]) {
7504
- delete selectRowMaps[rowid];
7677
+ if (selectCheckboxMaps[rowid]) {
7678
+ delete selectCheckboxMaps[rowid];
7505
7679
  }
7506
7680
  }
7507
7681
  handleCheckboxReserveRow(row, checked);
7682
+ reactData.updateCheckboxFlag++;
7508
7683
  }
7509
7684
  });
7510
- reactData.selectCheckboxMaps = selectRowMaps;
7511
7685
  },
7512
7686
  /**
7513
7687
  * 即将移除
@@ -7619,17 +7793,18 @@ export default defineComponent({
7619
7793
  const { _lastResizeTime } = internalData;
7620
7794
  const sortOpts = computeSortOpts.value;
7621
7795
  const columnOpts = computeColumnOpts.value;
7796
+ const currentColumnOpts = computeCurrentColumnOpts.value;
7622
7797
  const { column } = params;
7623
7798
  const cell = evnt.currentTarget;
7624
7799
  const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
7625
7800
  const triggerSort = getEventTargetNode(evnt, cell, 'vxe-cell--sort').flag;
7626
7801
  const triggerFilter = getEventTargetNode(evnt, cell, 'vxe-cell--filter').flag;
7627
7802
  if (sortOpts.trigger === 'cell' && !(triggerResizable || triggerSort || triggerFilter)) {
7628
- tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column));
7803
+ $xeTable.triggerSortEvent(evnt, column, getNextSortOrder(column));
7629
7804
  }
7630
7805
  dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
7631
- if (columnOpts.isCurrent || props.highlightCurrentColumn) {
7632
- tablePrivateMethods.triggerCurrentColumnEvent(evnt, params);
7806
+ if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
7807
+ $xeTable.triggerCurrentColumnEvent(evnt, params);
7633
7808
  }
7634
7809
  },
7635
7810
  triggerHeaderCellDblclickEvent(evnt, params) {
@@ -7641,7 +7816,7 @@ export default defineComponent({
7641
7816
  * 如果是双击模式,则单击后选中状态
7642
7817
  */
7643
7818
  triggerCellClickEvent(evnt, params) {
7644
- const { highlightCurrentRow, editConfig } = props;
7819
+ const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props;
7645
7820
  const { editStore, isDragResize } = reactData;
7646
7821
  if (isDragResize) {
7647
7822
  return;
@@ -7653,6 +7828,8 @@ export default defineComponent({
7653
7828
  const checkboxOpts = computeCheckboxOpts.value;
7654
7829
  const keyboardOpts = computeKeyboardOpts.value;
7655
7830
  const rowOpts = computeRowOpts.value;
7831
+ const columnOpts = computeColumnOpts.value;
7832
+ const currentColumnOpts = computeCurrentColumnOpts.value;
7656
7833
  const { actived, focused } = editStore;
7657
7834
  const { row, column } = params;
7658
7835
  const { type, treeNode } = column;
@@ -7668,29 +7845,35 @@ export default defineComponent({
7668
7845
  if (!triggerCheckbox && !triggerRadio) {
7669
7846
  // 如果是展开行
7670
7847
  if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
7671
- tablePrivateMethods.triggerRowExpandEvent(evnt, params);
7848
+ $xeTable.triggerRowExpandEvent(evnt, params);
7672
7849
  }
7673
7850
  // 如果是树形表格
7674
7851
  if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
7675
- tablePrivateMethods.triggerTreeExpandEvent(evnt, params);
7852
+ $xeTable.triggerTreeExpandEvent(evnt, params);
7676
7853
  }
7677
7854
  }
7678
7855
  // 如果点击了树节点
7679
7856
  if (!triggerTreeNode) {
7680
7857
  if (!triggerExpandNode) {
7681
- // 如果是高亮行
7858
+ // 如果是当前行
7682
7859
  if (rowOpts.isCurrent || highlightCurrentRow) {
7683
7860
  if (!triggerCheckbox && !triggerRadio) {
7684
- tablePrivateMethods.triggerCurrentRowEvent(evnt, params);
7861
+ $xeTable.triggerCurrentRowEvent(evnt, params);
7862
+ }
7863
+ }
7864
+ // 如果是当前列
7865
+ if ((columnOpts.isCurrent || highlightCurrentColumn) && (!currentColumnOpts.trigger || ['cell', 'default'].includes(currentColumnOpts.trigger))) {
7866
+ if (!triggerCheckbox && !triggerRadio) {
7867
+ $xeTable.triggerCurrentColumnEvent(evnt, params);
7685
7868
  }
7686
7869
  }
7687
7870
  // 如果是单选框
7688
7871
  if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
7689
- tablePrivateMethods.triggerRadioRowEvent(evnt, params);
7872
+ $xeTable.triggerRadioRowEvent(evnt, params);
7690
7873
  }
7691
7874
  // 如果是复选框
7692
7875
  if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
7693
- tablePrivateMethods.handleToggleCheckRowEvent(evnt, params);
7876
+ $xeTable.handleToggleCheckRowEvent(evnt, params);
7694
7877
  }
7695
7878
  }
7696
7879
  // 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
@@ -7769,7 +7952,7 @@ export default defineComponent({
7769
7952
  dispatchEvent('cell-dblclick', params, evnt);
7770
7953
  },
7771
7954
  handleToggleCheckRowEvent(evnt, params) {
7772
- const { selectCheckboxMaps } = reactData;
7955
+ const { selectCheckboxMaps } = internalData;
7773
7956
  const checkboxOpts = computeCheckboxOpts.value;
7774
7957
  const { checkField, trigger } = checkboxOpts;
7775
7958
  const { row } = params;
@@ -7784,44 +7967,46 @@ export default defineComponent({
7784
7967
  checked = !selectCheckboxMaps[getRowid($xeTable, row)];
7785
7968
  }
7786
7969
  if (evnt) {
7787
- tablePrivateMethods.triggerCheckRowEvent(evnt, params, checked);
7970
+ $xeTable.triggerCheckRowEvent(evnt, params, checked);
7788
7971
  }
7789
7972
  else {
7790
- tablePrivateMethods.handleBatchSelectRows([row], checked);
7791
- tablePrivateMethods.checkSelectionStatus();
7973
+ $xeTable.handleBatchSelectRows([row], checked);
7974
+ $xeTable.checkSelectionStatus();
7792
7975
  }
7793
7976
  },
7794
7977
  triggerCheckRowEvent(evnt, params, checked) {
7795
- const checkboxOpts = computeCheckboxOpts.value;
7796
7978
  const { row } = params;
7797
7979
  const { afterFullData } = internalData;
7980
+ const checkboxOpts = computeCheckboxOpts.value;
7798
7981
  const { checkMethod, trigger } = checkboxOpts;
7799
7982
  if (trigger === 'manual') {
7800
7983
  return;
7801
7984
  }
7802
7985
  evnt.stopPropagation();
7803
7986
  if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
7804
- const checkboxRecords = tableMethods.getCheckboxRecords();
7987
+ const checkboxRecords = $xeTable.getCheckboxRecords();
7805
7988
  if (checkboxRecords.length) {
7806
7989
  const firstRow = checkboxRecords[0];
7807
- const _rowIndex = tableMethods.getVTRowIndex(row);
7808
- const _firstRowIndex = tableMethods.getVTRowIndex(firstRow);
7990
+ const _rowIndex = $xeTable.getVTRowIndex(row);
7991
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
7809
7992
  if (_rowIndex !== _firstRowIndex) {
7810
- tableMethods.setAllCheckboxRow(false);
7993
+ $xeTable.setAllCheckboxRow(false);
7811
7994
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
7812
- handleCheckedCheckboxRow(rangeRows, true, false);
7995
+ nextTick(() => {
7996
+ handleCheckedCheckboxRow(rangeRows, true, false);
7997
+ });
7813
7998
  dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
7814
7999
  return;
7815
8000
  }
7816
8001
  }
7817
8002
  }
7818
8003
  if (!checkMethod || checkMethod({ row })) {
7819
- tablePrivateMethods.handleBatchSelectRows([row], checked);
7820
- tablePrivateMethods.checkSelectionStatus();
8004
+ $xeTable.handleBatchSelectRows([row], checked);
8005
+ $xeTable.checkSelectionStatus();
7821
8006
  dispatchEvent('checkbox-change', Object.assign({
7822
- records: tableMethods.getCheckboxRecords(),
7823
- reserves: tableMethods.getCheckboxReserveRecords(),
7824
- indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
8007
+ records: () => $xeTable.getCheckboxRecords(),
8008
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
8009
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
7825
8010
  checked
7826
8011
  }, params), evnt);
7827
8012
  }
@@ -7893,7 +8078,8 @@ export default defineComponent({
7893
8078
  * 展开行事件
7894
8079
  */
7895
8080
  triggerRowExpandEvent(evnt, params) {
7896
- const { rowExpandLazyLoadedMaps, expandColumn: column } = reactData;
8081
+ const { expandColumn: column } = reactData;
8082
+ const { rowExpandLazyLoadedMaps } = internalData;
7897
8083
  const expandOpts = computeExpandOpts.value;
7898
8084
  const { row } = params;
7899
8085
  const { lazy, trigger } = expandOpts;
@@ -7903,18 +8089,18 @@ export default defineComponent({
7903
8089
  evnt.stopPropagation();
7904
8090
  const rowid = getRowid($xeTable, row);
7905
8091
  if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
7906
- const expanded = !tableMethods.isRowExpandByRow(row);
7907
- const columnIndex = tableMethods.getColumnIndex(column);
7908
- const $columnIndex = tableMethods.getVMColumnIndex(column);
7909
- tableMethods.setRowExpand(row, expanded);
8092
+ const expanded = !$xeTable.isRowExpandByRow(row);
8093
+ const columnIndex = $xeTable.getColumnIndex(column);
8094
+ const $columnIndex = $xeTable.getVMColumnIndex(column);
8095
+ $xeTable.setRowExpand(row, expanded);
7910
8096
  dispatchEvent('toggle-row-expand', {
7911
8097
  expanded,
7912
8098
  column,
7913
8099
  columnIndex,
7914
8100
  $columnIndex,
7915
8101
  row,
7916
- rowIndex: tableMethods.getRowIndex(row),
7917
- $rowIndex: tableMethods.getVMRowIndex(row)
8102
+ rowIndex: $xeTable.getRowIndex(row),
8103
+ $rowIndex: $xeTable.getVMRowIndex(row)
7918
8104
  }, evnt);
7919
8105
  }
7920
8106
  },
@@ -7922,7 +8108,7 @@ export default defineComponent({
7922
8108
  * 展开树节点事件
7923
8109
  */
7924
8110
  triggerTreeExpandEvent(evnt, params) {
7925
- const { treeExpandLazyLoadedMaps } = reactData;
8111
+ const { treeExpandLazyLoadedMaps } = internalData;
7926
8112
  const treeOpts = computeTreeOpts.value;
7927
8113
  const { row, column } = params;
7928
8114
  const { lazy, trigger } = treeOpts;
@@ -7932,10 +8118,10 @@ export default defineComponent({
7932
8118
  evnt.stopPropagation();
7933
8119
  const rowid = getRowid($xeTable, row);
7934
8120
  if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
7935
- const expanded = !tableMethods.isTreeExpandByRow(row);
7936
- const columnIndex = tableMethods.getColumnIndex(column);
7937
- const $columnIndex = tableMethods.getVMColumnIndex(column);
7938
- tableMethods.setTreeExpand(row, expanded);
8121
+ const expanded = !$xeTable.isTreeExpandByRow(row);
8122
+ const columnIndex = $xeTable.getColumnIndex(column);
8123
+ const $columnIndex = $xeTable.getVMColumnIndex(column);
8124
+ $xeTable.setTreeExpand(row, expanded);
7939
8125
  dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
7940
8126
  }
7941
8127
  },
@@ -8080,14 +8266,16 @@ export default defineComponent({
8080
8266
  handleRowDragSwapEvent(evnt, isSyncRow, dragRow, prevDragRow, prevDragPos, prevDragToChild) {
8081
8267
  const { treeConfig, dragConfig } = props;
8082
8268
  const rowDragOpts = computeRowDragOpts.value;
8083
- const { fullAllDataRowIdData } = internalData;
8269
+ const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData;
8084
8270
  const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
8085
8271
  const treeOpts = computeTreeOpts.value;
8086
8272
  const { transform, rowField, mapChildrenField, parentField } = treeOpts;
8087
8273
  const childrenField = treeOpts.children || treeOpts.childrenField;
8088
- const { afterFullData, tableFullData } = internalData;
8089
8274
  const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
8090
8275
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
8276
+ const errRest = {
8277
+ status: false
8278
+ };
8091
8279
  if (prevDragRow && dragRow) {
8092
8280
  // 判断是否有拖动
8093
8281
  if (prevDragRow !== dragRow) {
@@ -8102,7 +8290,7 @@ export default defineComponent({
8102
8290
  const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
8103
8291
  return Promise.resolve(dEndMethod ? dEndMethod(dragParams) : true).then((status) => {
8104
8292
  if (!status) {
8105
- return;
8293
+ return errRest;
8106
8294
  }
8107
8295
  let oafIndex = -1;
8108
8296
  let nafIndex = -1;
@@ -8127,12 +8315,12 @@ export default defineComponent({
8127
8315
  if (isPeerDrag && !isCrossDrag) {
8128
8316
  if (oldRest.row[parentField] !== newRest.row[parentField]) {
8129
8317
  // 非同级
8130
- return;
8318
+ return errRest;
8131
8319
  }
8132
8320
  }
8133
8321
  else {
8134
8322
  if (!isCrossDrag) {
8135
- return;
8323
+ return errRest;
8136
8324
  }
8137
8325
  if (oldAllMaps[newRowid]) {
8138
8326
  isSelfToChildStatus = true;
@@ -8143,7 +8331,7 @@ export default defineComponent({
8143
8331
  content: getI18n('vxe.error.treeDragChild')
8144
8332
  });
8145
8333
  }
8146
- return;
8334
+ return errRest;
8147
8335
  }
8148
8336
  }
8149
8337
  }
@@ -8151,13 +8339,13 @@ export default defineComponent({
8151
8339
  else if (oldLevel) {
8152
8340
  // 子到根
8153
8341
  if (!isCrossDrag) {
8154
- return;
8342
+ return errRest;
8155
8343
  }
8156
8344
  }
8157
8345
  else if (newLevel) {
8158
8346
  // 根到子
8159
8347
  if (!isCrossDrag) {
8160
- return;
8348
+ return errRest;
8161
8349
  }
8162
8350
  if (oldAllMaps[newRowid]) {
8163
8351
  isSelfToChildStatus = true;
@@ -8168,7 +8356,7 @@ export default defineComponent({
8168
8356
  content: getI18n('vxe.error.treeDragChild')
8169
8357
  });
8170
8358
  }
8171
- return;
8359
+ return errRest;
8172
8360
  }
8173
8361
  }
8174
8362
  }
@@ -8228,27 +8416,34 @@ export default defineComponent({
8228
8416
  if (reactData.scrollYLoad) {
8229
8417
  $xeTable.updateScrollYSpace();
8230
8418
  }
8231
- nextTick().then(() => {
8419
+ if (evnt) {
8420
+ dispatchEvent('row-dragend', {
8421
+ oldRow: dragRow,
8422
+ newRow: prevDragRow,
8423
+ dragRow,
8424
+ dragPos: prevDragPos,
8425
+ dragToChild: isDragToChildFlag,
8426
+ offsetIndex: dragOffsetIndex,
8427
+ _index: {
8428
+ newIndex: nafIndex,
8429
+ oldIndex: oafIndex
8430
+ }
8431
+ }, evnt);
8432
+ }
8433
+ return nextTick().then(() => {
8232
8434
  $xeTable.updateCellAreas();
8233
8435
  $xeTable.recalculate();
8436
+ }).then(() => {
8437
+ return {
8438
+ status: true
8439
+ };
8234
8440
  });
8235
- dispatchEvent('row-dragend', {
8236
- oldRow: dragRow,
8237
- newRow: prevDragRow,
8238
- dragRow,
8239
- dragPos: prevDragPos,
8240
- dragToChild: isDragToChildFlag,
8241
- offsetIndex: dragOffsetIndex,
8242
- _index: {
8243
- newIndex: nafIndex,
8244
- oldIndex: oafIndex
8245
- }
8246
- }, evnt);
8247
8441
  }).catch(() => {
8442
+ return errRest;
8248
8443
  });
8249
8444
  }
8250
8445
  }
8251
- return Promise.resolve();
8446
+ return Promise.resolve(errRest);
8252
8447
  },
8253
8448
  handleRowDragDragendEvent(evnt) {
8254
8449
  const { treeConfig } = props;
@@ -8375,6 +8570,9 @@ export default defineComponent({
8375
8570
  const { isPeerDrag, isCrossDrag, isSelfToChildDrag, isToChildDrag, dragEndMethod, dragToChildMethod } = columnDragOpts;
8376
8571
  const { collectColumn } = internalData;
8377
8572
  const dragOffsetIndex = prevDragPos === 'right' ? 1 : 0;
8573
+ const errRest = {
8574
+ status: false
8575
+ };
8378
8576
  if (prevDragCol && dragCol) {
8379
8577
  // 判断是否有拖动
8380
8578
  if (prevDragCol !== dragCol) {
@@ -8391,7 +8589,7 @@ export default defineComponent({
8391
8589
  const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
8392
8590
  return Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then((status) => {
8393
8591
  if (!status) {
8394
- return;
8592
+ return errRest;
8395
8593
  }
8396
8594
  let oafIndex = -1;
8397
8595
  let nafIndex = -1;
@@ -8405,12 +8603,12 @@ export default defineComponent({
8405
8603
  if (isPeerDrag && !isCrossDrag) {
8406
8604
  if (dragColumn.parentId !== newColumn.parentId) {
8407
8605
  // 非同级
8408
- return;
8606
+ return errRest;
8409
8607
  }
8410
8608
  }
8411
8609
  else {
8412
8610
  if (!isCrossDrag) {
8413
- return;
8611
+ return errRest;
8414
8612
  }
8415
8613
  if (oldAllMaps[newColumn.id]) {
8416
8614
  isSelfToChildStatus = true;
@@ -8421,7 +8619,7 @@ export default defineComponent({
8421
8619
  content: getI18n('vxe.error.treeDragChild')
8422
8620
  });
8423
8621
  }
8424
- return;
8622
+ return errRest;
8425
8623
  }
8426
8624
  }
8427
8625
  }
@@ -8429,13 +8627,13 @@ export default defineComponent({
8429
8627
  else if (dragColumn.parentId) {
8430
8628
  // 子到根
8431
8629
  if (!isCrossDrag) {
8432
- return;
8630
+ return errRest;
8433
8631
  }
8434
8632
  }
8435
8633
  else if (newColumn.parentId) {
8436
8634
  // 根到子
8437
8635
  if (!isCrossDrag) {
8438
- return;
8636
+ return errRest;
8439
8637
  }
8440
8638
  if (oldAllMaps[newColumn.id]) {
8441
8639
  isSelfToChildStatus = true;
@@ -8446,7 +8644,7 @@ export default defineComponent({
8446
8644
  content: getI18n('vxe.error.treeDragChild')
8447
8645
  });
8448
8646
  }
8449
- return;
8647
+ return errRest;
8450
8648
  }
8451
8649
  }
8452
8650
  }
@@ -8507,26 +8705,32 @@ export default defineComponent({
8507
8705
  $xeTable.clearCopyCellArea();
8508
8706
  }
8509
8707
  }
8510
- dispatchEvent('column-dragend', {
8511
- oldColumn: dragColumn,
8512
- newColumn,
8513
- dragColumn,
8514
- dragPos: prevDragPos,
8515
- dragToChild: isDragToChildFlag,
8516
- offsetIndex: dragOffsetIndex,
8517
- _index: {
8518
- newIndex: nafIndex,
8519
- oldIndex: oafIndex
8520
- }
8521
- }, evnt);
8708
+ if (evnt) {
8709
+ dispatchEvent('column-dragend', {
8710
+ oldColumn: dragColumn,
8711
+ newColumn,
8712
+ dragColumn,
8713
+ dragPos: prevDragPos,
8714
+ dragToChild: isDragToChildFlag,
8715
+ offsetIndex: dragOffsetIndex,
8716
+ _index: {
8717
+ newIndex: nafIndex,
8718
+ oldIndex: oafIndex
8719
+ }
8720
+ }, evnt);
8721
+ }
8522
8722
  if (isSyncColumn) {
8523
8723
  $xeTable.handleColDragSwapColumn();
8524
8724
  }
8725
+ return {
8726
+ status: true
8727
+ };
8525
8728
  }).catch(() => {
8729
+ return errRest;
8526
8730
  });
8527
8731
  }
8528
8732
  }
8529
- return Promise.resolve();
8733
+ return Promise.resolve(errRest);
8530
8734
  },
8531
8735
  handleHeaderCellDragDragendEvent(evnt) {
8532
8736
  const { dragCol } = reactData;
@@ -8920,10 +9124,10 @@ export default defineComponent({
8920
9124
  return;
8921
9125
  }
8922
9126
  const { highlightHoverRow } = tableProps;
8923
- const { scrollXLoad, scrollYLoad } = reactData;
9127
+ const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
8924
9128
  const leftFixedWidth = computeLeftFixedWidth.value;
8925
9129
  const rightFixedWidth = computeRightFixedWidth.value;
8926
- if (!(scrollYLoad || leftFixedWidth || rightFixedWidth)) {
9130
+ if (!(scrollYLoad || leftFixedWidth || rightFixedWidth || expandColumn)) {
8927
9131
  return;
8928
9132
  }
8929
9133
  const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
@@ -9165,8 +9369,8 @@ export default defineComponent({
9165
9369
  },
9166
9370
  // 更新纵向 Y 可视渲染上下剩余空间大小
9167
9371
  updateScrollYSpace() {
9168
- const { isAllOverflow, scrollYLoad, expandColumn, rowExpandedMaps } = reactData;
9169
- const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData;
9372
+ const { isAllOverflow, scrollYLoad, expandColumn } = reactData;
9373
+ const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
9170
9374
  const { startIndex } = scrollYStore;
9171
9375
  const expandOpts = computeExpandOpts.value;
9172
9376
  const rowOpts = computeRowOpts.value;
@@ -9511,6 +9715,7 @@ export default defineComponent({
9511
9715
  })
9512
9716
  ];
9513
9717
  if (expandColumn) {
9718
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
9514
9719
  tableRowExpandedList.forEach((row) => {
9515
9720
  const expandOpts = computeExpandOpts.value;
9516
9721
  const { height: expandHeight, padding } = expandOpts;
@@ -9518,7 +9723,7 @@ export default defineComponent({
9518
9723
  const treeOpts = computeTreeOpts.value;
9519
9724
  const { transform, seqMode } = treeOpts;
9520
9725
  const cellStyle = {};
9521
- const rowid = getRowid($xeTable, row);
9726
+ const rowid = handleGetRowId(row);
9522
9727
  const rest = fullAllDataRowIdData[rowid];
9523
9728
  let rowLevel = 0;
9524
9729
  let seq = -1;