vxe-table 4.12.0-beta.8 → 4.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/es/grid/src/grid.js +58 -44
  2. package/es/locale/lang/ar-EG.js +7 -1
  3. package/es/locale/lang/de-DE.js +7 -1
  4. package/es/locale/lang/en-US.js +7 -1
  5. package/es/locale/lang/es-ES.js +7 -1
  6. package/es/locale/lang/fr-FR.js +7 -1
  7. package/es/locale/lang/hu-HU.js +7 -1
  8. package/es/locale/lang/hy-AM.js +7 -1
  9. package/es/locale/lang/id-ID.js +7 -1
  10. package/es/locale/lang/it-IT.js +7 -1
  11. package/es/locale/lang/ja-JP.js +7 -1
  12. package/es/locale/lang/ko-KR.js +7 -1
  13. package/es/locale/lang/nb-NO.js +7 -1
  14. package/es/locale/lang/pt-BR.js +7 -1
  15. package/es/locale/lang/ru-RU.js +7 -1
  16. package/es/locale/lang/th-TH.js +7 -1
  17. package/es/locale/lang/ug-CN.js +7 -1
  18. package/es/locale/lang/uk-UA.js +7 -1
  19. package/es/locale/lang/vi-VN.js +7 -1
  20. package/es/locale/lang/zh-CHT.js +7 -1
  21. package/es/locale/lang/zh-CN.js +7 -1
  22. package/es/style.css +1 -1
  23. package/es/table/module/custom/hook.js +1 -1
  24. package/es/table/module/custom/panel.js +4 -2
  25. package/es/table/module/edit/hook.js +11 -12
  26. package/es/table/module/export/export-panel.js +3 -2
  27. package/es/table/module/export/import-panel.js +3 -2
  28. package/es/table/module/filter/panel.js +12 -2
  29. package/es/table/module/keyboard/hook.js +105 -30
  30. package/es/table/module/menu/hook.js +2 -1
  31. package/es/table/module/validator/hook.js +4 -3
  32. package/es/table/render/index.js +3 -3
  33. package/es/table/src/body.js +40 -21
  34. package/es/table/src/cell.js +43 -24
  35. package/es/table/src/columnInfo.js +2 -2
  36. package/es/table/src/footer.js +12 -7
  37. package/es/table/src/header.js +12 -7
  38. package/es/table/src/props.js +4 -0
  39. package/es/table/src/table.js +444 -423
  40. package/es/table/src/util.js +34 -6
  41. package/es/ui/index.js +2 -1
  42. package/es/ui/src/log.js +1 -1
  43. package/helper/vetur/attributes.json +1 -1
  44. package/helper/vetur/tags.json +1 -1
  45. package/lib/grid/src/grid.js +55 -48
  46. package/lib/grid/src/grid.min.js +1 -1
  47. package/lib/index.umd.js +515 -302
  48. package/lib/index.umd.min.js +1 -1
  49. package/lib/locale/lang/ar-EG.js +7 -1
  50. package/lib/locale/lang/ar-EG.min.js +1 -1
  51. package/lib/locale/lang/de-DE.js +7 -1
  52. package/lib/locale/lang/de-DE.min.js +1 -1
  53. package/lib/locale/lang/en-US.js +7 -1
  54. package/lib/locale/lang/en-US.min.js +1 -1
  55. package/lib/locale/lang/en-US.umd.js +7 -1
  56. package/lib/locale/lang/es-ES.js +7 -1
  57. package/lib/locale/lang/es-ES.min.js +1 -1
  58. package/lib/locale/lang/es-ES.umd.js +7 -1
  59. package/lib/locale/lang/fr-FR.js +7 -1
  60. package/lib/locale/lang/fr-FR.min.js +1 -1
  61. package/lib/locale/lang/hu-HU.js +7 -1
  62. package/lib/locale/lang/hu-HU.min.js +1 -1
  63. package/lib/locale/lang/hu-HU.umd.js +7 -1
  64. package/lib/locale/lang/hy-AM.js +7 -1
  65. package/lib/locale/lang/hy-AM.min.js +1 -1
  66. package/lib/locale/lang/id-ID.js +7 -1
  67. package/lib/locale/lang/id-ID.min.js +1 -1
  68. package/lib/locale/lang/it-IT.js +7 -1
  69. package/lib/locale/lang/it-IT.min.js +1 -1
  70. package/lib/locale/lang/ja-JP.js +7 -1
  71. package/lib/locale/lang/ja-JP.min.js +1 -1
  72. package/lib/locale/lang/ja-JP.umd.js +7 -1
  73. package/lib/locale/lang/ko-KR.js +7 -1
  74. package/lib/locale/lang/ko-KR.min.js +1 -1
  75. package/lib/locale/lang/ko-KR.umd.js +7 -1
  76. package/lib/locale/lang/nb-NO.js +7 -1
  77. package/lib/locale/lang/nb-NO.min.js +1 -1
  78. package/lib/locale/lang/pt-BR.js +7 -1
  79. package/lib/locale/lang/pt-BR.min.js +1 -1
  80. package/lib/locale/lang/pt-BR.umd.js +7 -1
  81. package/lib/locale/lang/ru-RU.js +7 -1
  82. package/lib/locale/lang/ru-RU.min.js +1 -1
  83. package/lib/locale/lang/ru-RU.umd.js +7 -1
  84. package/lib/locale/lang/th-TH.js +7 -1
  85. package/lib/locale/lang/th-TH.min.js +1 -1
  86. package/lib/locale/lang/ug-CN.js +7 -1
  87. package/lib/locale/lang/ug-CN.min.js +1 -1
  88. package/lib/locale/lang/uk-UA.js +7 -1
  89. package/lib/locale/lang/uk-UA.min.js +1 -1
  90. package/lib/locale/lang/uk-UA.umd.js +7 -1
  91. package/lib/locale/lang/vi-VN.js +7 -1
  92. package/lib/locale/lang/vi-VN.min.js +1 -1
  93. package/lib/locale/lang/zh-CHT.js +7 -1
  94. package/lib/locale/lang/zh-CHT.min.js +1 -1
  95. package/lib/locale/lang/zh-CN.js +7 -1
  96. package/lib/locale/lang/zh-CN.min.js +1 -1
  97. package/lib/locale/lang/zh-CN.umd.js +7 -1
  98. package/lib/style.css +1 -1
  99. package/lib/table/module/custom/hook.js +1 -1
  100. package/lib/table/module/custom/hook.min.js +1 -1
  101. package/lib/table/module/custom/panel.js +4 -2
  102. package/lib/table/module/custom/panel.min.js +1 -1
  103. package/lib/table/module/edit/hook.js +13 -13
  104. package/lib/table/module/edit/hook.min.js +1 -1
  105. package/lib/table/module/export/export-panel.js +3 -2
  106. package/lib/table/module/export/export-panel.min.js +1 -1
  107. package/lib/table/module/export/import-panel.js +3 -2
  108. package/lib/table/module/export/import-panel.min.js +1 -1
  109. package/lib/table/module/filter/panel.js +8 -2
  110. package/lib/table/module/filter/panel.min.js +1 -1
  111. package/lib/table/module/keyboard/hook.js +113 -31
  112. package/lib/table/module/keyboard/hook.min.js +1 -1
  113. package/lib/table/module/menu/hook.js +2 -1
  114. package/lib/table/module/menu/hook.min.js +1 -1
  115. package/lib/table/module/validator/hook.js +5 -4
  116. package/lib/table/module/validator/hook.min.js +1 -1
  117. package/lib/table/render/index.js +4 -3
  118. package/lib/table/render/index.min.js +1 -1
  119. package/lib/table/src/body.js +48 -20
  120. package/lib/table/src/body.min.js +1 -1
  121. package/lib/table/src/cell.js +49 -25
  122. package/lib/table/src/cell.min.js +1 -1
  123. package/lib/table/src/columnInfo.js +2 -4
  124. package/lib/table/src/columnInfo.min.js +1 -1
  125. package/lib/table/src/footer.js +12 -5
  126. package/lib/table/src/footer.min.js +1 -1
  127. package/lib/table/src/header.js +12 -5
  128. package/lib/table/src/header.min.js +1 -1
  129. package/lib/table/src/props.js +4 -0
  130. package/lib/table/src/props.min.js +1 -1
  131. package/lib/table/src/table.js +534 -459
  132. package/lib/table/src/table.min.js +1 -1
  133. package/lib/table/src/util.js +36 -6
  134. package/lib/table/src/util.min.js +1 -1
  135. package/lib/ui/index.js +2 -1
  136. package/lib/ui/index.min.js +1 -1
  137. package/lib/ui/src/log.js +1 -1
  138. package/lib/ui/src/log.min.js +1 -1
  139. package/package.json +2 -2
  140. package/packages/grid/src/grid.ts +62 -50
  141. package/packages/locale/lang/ar-EG.ts +7 -1
  142. package/packages/locale/lang/de-DE.ts +7 -1
  143. package/packages/locale/lang/en-US.ts +7 -1
  144. package/packages/locale/lang/es-ES.ts +7 -1
  145. package/packages/locale/lang/fr-FR.ts +7 -1
  146. package/packages/locale/lang/hu-HU.ts +7 -1
  147. package/packages/locale/lang/hy-AM.ts +7 -1
  148. package/packages/locale/lang/id-ID.ts +7 -1
  149. package/packages/locale/lang/it-IT.ts +7 -1
  150. package/packages/locale/lang/ja-JP.ts +7 -1
  151. package/packages/locale/lang/ko-KR.ts +7 -1
  152. package/packages/locale/lang/nb-NO.ts +7 -1
  153. package/packages/locale/lang/pt-BR.ts +7 -1
  154. package/packages/locale/lang/ru-RU.ts +7 -1
  155. package/packages/locale/lang/th-TH.ts +7 -1
  156. package/packages/locale/lang/ug-CN.ts +7 -1
  157. package/packages/locale/lang/uk-UA.ts +7 -1
  158. package/packages/locale/lang/vi-VN.ts +7 -1
  159. package/packages/locale/lang/zh-CHT.ts +7 -1
  160. package/packages/locale/lang/zh-CN.ts +7 -1
  161. package/packages/table/module/custom/hook.ts +1 -1
  162. package/packages/table/module/custom/panel.ts +6 -2
  163. package/packages/table/module/edit/hook.ts +12 -12
  164. package/packages/table/module/export/export-panel.ts +4 -2
  165. package/packages/table/module/export/import-panel.ts +4 -2
  166. package/packages/table/module/filter/panel.ts +12 -2
  167. package/packages/table/module/keyboard/hook.ts +106 -32
  168. package/packages/table/module/menu/hook.ts +3 -1
  169. package/packages/table/module/validator/hook.ts +5 -3
  170. package/packages/table/render/index.ts +3 -4
  171. package/packages/table/src/body.ts +41 -21
  172. package/packages/table/src/cell.ts +43 -24
  173. package/packages/table/src/columnInfo.ts +3 -2
  174. package/packages/table/src/footer.ts +13 -7
  175. package/packages/table/src/header.ts +13 -7
  176. package/packages/table/src/props.ts +4 -0
  177. package/packages/table/src/table.ts +451 -421
  178. package/packages/table/src/util.ts +39 -6
  179. package/packages/ui/index.ts +1 -0
  180. /package/es/{iconfont.1741333670965.ttf → iconfont.1742955995631.ttf} +0 -0
  181. /package/es/{iconfont.1741333670965.woff → iconfont.1742955995631.woff} +0 -0
  182. /package/es/{iconfont.1741333670965.woff2 → iconfont.1742955995631.woff2} +0 -0
  183. /package/lib/{iconfont.1741333670965.ttf → iconfont.1742955995631.ttf} +0 -0
  184. /package/lib/{iconfont.1741333670965.woff → iconfont.1742955995631.woff} +0 -0
  185. /package/lib/{iconfont.1741333670965.woff2 → iconfont.1742955995631.woff2} +0 -0
@@ -9,7 +9,7 @@ import TableHeaderComponent from './header'
9
9
  import TableFooterComponent from './footer'
10
10
  import tableProps from './props'
11
11
  import tableEmits from './emits'
12
- import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, updateDeepRowKey, updateFastRowKey } from './util'
12
+ import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId } from './util'
13
13
  import { getSlotVNs } from '../../ui/src/vn'
14
14
  import { warnLog, errLog } from '../../ui/src/log'
15
15
  import TableCustomPanelComponent from '../module/custom/panel'
@@ -23,6 +23,7 @@ import type { VxeGridConstructor, VxeGridPrivateMethods, VxeTableConstructor, Ta
23
23
 
24
24
  const { getConfig, getIcon, getI18n, renderer, formats, createEvent, globalResize, interceptor, hooks, globalEvents, GLOBAL_EVENT_KEYS, useFns, renderEmptyElement } = VxeUI
25
25
 
26
+ const supportMaxRow = 5e6
26
27
  const customStorageKey = 'VXE_CUSTOM_STORE'
27
28
  const maxYHeight = 5e6
28
29
  const maxXWidth = 5e6
@@ -78,8 +79,6 @@ export default defineComponent({
78
79
  isAllSelected: false,
79
80
  // 复选框属性,有选中且非全选状态
80
81
  isIndeterminate: false,
81
- // 复选框属性,已选中的行集合
82
- selectCheckboxMaps: {},
83
82
  // 当前行
84
83
  currentRow: null,
85
84
  // 单选框属性,选中列
@@ -93,16 +92,6 @@ export default defineComponent({
93
92
  // 树节点列信息
94
93
  treeNodeColumn: null,
95
94
  hasFixedColumn: false,
96
- // 已展开的行集合
97
- rowExpandedMaps: {},
98
- // 懒加载中的展开行的集合
99
- rowExpandLazyLoadedMaps: {},
100
- // 已展开树节点集合
101
- treeExpandedMaps: {},
102
- // 懒加载中的树节点的集合
103
- treeExpandLazyLoadedMaps: {},
104
- // 树节点不确定状态的集合
105
- treeIndeterminateMaps: {},
106
95
  // 合并单元格的对象集
107
96
  mergeList: [],
108
97
  // 合并表尾数据的对象集
@@ -111,8 +100,6 @@ export default defineComponent({
111
100
  upDataFlag: 0,
112
101
  // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
113
102
  reColumnFlag: 0,
114
- // 已标记的对象集
115
- pendingRowMaps: {},
116
103
  // 初始化标识
117
104
  initStore: {
118
105
  filter: false,
@@ -257,6 +244,11 @@ export default defineComponent({
257
244
  isFooter: false
258
245
  },
259
246
 
247
+ rowExpandedFlag: 1,
248
+ treeExpandedFlag: 1,
249
+ updateCheckboxFlag: 1,
250
+ pendingRowFlag: 1,
251
+
260
252
  rowHeightStore: {
261
253
  default: 48,
262
254
  medium: 44,
@@ -275,6 +267,7 @@ export default defineComponent({
275
267
  rowExpandHeightFlag: 1,
276
268
  calcCellHeightFlag: 1,
277
269
  resizeHeightFlag: 1,
270
+ resizeWidthFlag: 1,
278
271
 
279
272
  isCustomStatus: false,
280
273
 
@@ -363,6 +356,19 @@ export default defineComponent({
363
356
  fullColumnFieldData: {},
364
357
  // prevDragRow: null,
365
358
 
359
+ // 已展开的行集合
360
+ rowExpandedMaps: {},
361
+ // 懒加载中的展开行的集合
362
+ rowExpandLazyLoadedMaps: {},
363
+ // 已展开树节点集合
364
+ treeExpandedMaps: {},
365
+ // 懒加载中的树节点的集合
366
+ treeExpandLazyLoadedMaps: {},
367
+ // 复选框属性,已选中的行集合
368
+ selectCheckboxMaps: {},
369
+ // 已标记的对象集
370
+ pendingRowMaps: {},
371
+
366
372
  inited: false,
367
373
  tooltipTimeout: null,
368
374
  initStatus: false,
@@ -506,20 +512,40 @@ export default defineComponent({
506
512
  return Object.assign({}, getConfig().table.columnConfig, props.columnConfig) as VxeTablePropTypes.ColumnOpts
507
513
  })
508
514
 
515
+ const computeCurrentColumnOpts = computed(() => {
516
+ return Object.assign({}, getConfig().table.currentColumnConfig, props.currentColumnConfig)
517
+ })
518
+
509
519
  const computeCellOpts = computed(() => {
510
- return Object.assign({}, getConfig().table.cellConfig, props.cellConfig)
520
+ const cellOpts = Object.assign({}, getConfig().table.cellConfig, props.cellConfig)
521
+ if (cellOpts.height) {
522
+ cellOpts.height = XEUtils.toNumber(cellOpts.height)
523
+ }
524
+ return cellOpts
511
525
  })
512
526
 
513
527
  const computeHeaderCellOpts = computed(() => {
514
- return Object.assign({}, getConfig().table.headerCellConfig, props.headerCellConfig)
528
+ const headerCellOpts = Object.assign({}, getConfig().table.headerCellConfig, props.headerCellConfig)
529
+ if (headerCellOpts.height) {
530
+ headerCellOpts.height = XEUtils.toNumber(headerCellOpts.height)
531
+ }
532
+ return headerCellOpts
515
533
  })
516
534
 
517
535
  const computeFooterCellOpts = computed(() => {
518
- return Object.assign({}, getConfig().table.footerCellConfig, props.footerCellConfig)
536
+ const footerCellOpts = Object.assign({}, getConfig().table.footerCellConfig, props.footerCellConfig)
537
+ if (footerCellOpts.height) {
538
+ footerCellOpts.height = XEUtils.toNumber(footerCellOpts.height)
539
+ }
540
+ return footerCellOpts
519
541
  })
520
542
 
521
543
  const computeRowOpts = computed(() => {
522
- return Object.assign({}, getConfig().table.rowConfig, props.rowConfig) as VxeTablePropTypes.RowOpts
544
+ return Object.assign({}, getConfig().table.rowConfig, props.rowConfig)
545
+ })
546
+
547
+ const computeCurrentRowOpts = computed(() => {
548
+ return Object.assign({}, getConfig().table.currentRowConfig, props.currentRowConfig)
523
549
  })
524
550
 
525
551
  const computeRowDragOpts = computed(() => {
@@ -697,12 +723,14 @@ export default defineComponent({
697
723
  })
698
724
 
699
725
  const computeTableRowExpandedList = computed(() => {
700
- const { rowExpandedMaps, tableData, expandColumn } = reactData
726
+ const { rowExpandedFlag, tableData, expandColumn } = reactData
727
+ const { rowExpandedMaps } = internalData
728
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
701
729
  const expandList: any[] = []
702
- if (expandColumn) {
730
+ if (expandColumn && rowExpandedFlag) {
703
731
  const rowKeys: Record<string, boolean> = {}
704
732
  tableData.forEach(row => {
705
- rowKeys[getRowid($xeTable, row)] = true
733
+ rowKeys[handleGetRowId(row)] = true
706
734
  })
707
735
  XEUtils.each(rowExpandedMaps, (row, rowid) => {
708
736
  if (rowKeys[rowid]) {
@@ -823,13 +851,16 @@ export default defineComponent({
823
851
  computeScrollbarXToTop,
824
852
  computeScrollbarYToLeft,
825
853
  computeColumnOpts,
854
+ computeCurrentColumnOpts,
826
855
  computeScrollXThreshold,
827
856
  computeScrollYThreshold,
857
+ computeRowHeightMaps,
828
858
  computeDefaultRowHeight,
829
859
  computeCellOpts,
830
860
  computeHeaderCellOpts,
831
861
  computeFooterCellOpts,
832
862
  computeRowOpts,
863
+ computeCurrentRowOpts,
833
864
  computeRowDragOpts,
834
865
  computeColumnDragOpts,
835
866
  computeResizeOpts,
@@ -880,6 +911,7 @@ export default defineComponent({
880
911
  getRefMaps: () => refMaps,
881
912
  getComputeMaps: () => computeMaps,
882
913
 
914
+ xeGrid: $xeGrid,
883
915
  xegrid: $xeGrid
884
916
  } as unknown as VxeTableConstructor & VxeTableMethods & VxeTablePrivateMethods
885
917
 
@@ -1041,12 +1073,13 @@ export default defineComponent({
1041
1073
  toVisibleIndex = Math.floor(startTop / defaultRowHeight) - 1
1042
1074
  visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1
1043
1075
  } else {
1076
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1044
1077
  let leftIndex = 0
1045
1078
  let rightIndex = afterFullData.length
1046
1079
  while (leftIndex < rightIndex) {
1047
1080
  const rIndex = Math.floor((leftIndex + rightIndex) / 2)
1048
1081
  const row = afterFullData[rIndex]
1049
- const rowid = getRowid($xeTable, row)
1082
+ const rowid = handleGetRowId(row)
1050
1083
  const rowRest = fullAllDataRowIdData[rowid] || {}
1051
1084
  if (rowRest.oTop <= startTop) {
1052
1085
  leftIndex = rIndex + 1
@@ -1057,7 +1090,7 @@ export default defineComponent({
1057
1090
  toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0)
1058
1091
  for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
1059
1092
  const row = afterFullData[rIndex]
1060
- const rowid = getRowid($xeTable, row)
1093
+ const rowid = handleGetRowId(row)
1061
1094
  const rowRest = fullAllDataRowIdData[rowid] || {}
1062
1095
  visibleSize++
1063
1096
  if (rowRest.oTop > endTop || visibleSize >= 100) {
@@ -1300,7 +1333,7 @@ export default defineComponent({
1300
1333
  fullColumnFieldData[field] = rest
1301
1334
  } else {
1302
1335
  if ((storage && !type) || (columnOpts.drag && (isCrossDrag || isSelfToChildDrag))) {
1303
- errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field`])
1336
+ errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field=?`])
1304
1337
  }
1305
1338
  }
1306
1339
  if (!hasFixed && fixed) {
@@ -1548,6 +1581,7 @@ export default defineComponent({
1548
1581
  internalData.headerHeight = headerHeight
1549
1582
  internalData.footerHeight = footerHeight
1550
1583
  reactData.overflowX = overflowX
1584
+ reactData.resizeWidthFlag++
1551
1585
  updateColumnOffsetLeft()
1552
1586
  updateHeight()
1553
1587
  reactData.parentHeight = Math.max(internalData.headerHeight + footerHeight + 20, $xeTable.getParentHeight())
@@ -1575,9 +1609,10 @@ export default defineComponent({
1575
1609
  const defaultRowHeight = computeDefaultRowHeight.value
1576
1610
  const el = refElem.value
1577
1611
  if (!isAllOverflow && scrollYLoad && el) {
1612
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1578
1613
  el.setAttribute('data-calc-row', 'Y')
1579
1614
  tableData.forEach(row => {
1580
- const rowid = getRowid($xeTable, row)
1615
+ const rowid = handleGetRowId(row)
1581
1616
  const rowRest = fullAllDataRowIdData[rowid]
1582
1617
  if (rowRest) {
1583
1618
  const reHeight = calcCellAutoHeight(rowRest, el)
@@ -1612,9 +1647,10 @@ export default defineComponent({
1612
1647
  const updateAfterListIndex = () => {
1613
1648
  const { treeConfig } = props
1614
1649
  const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData
1650
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1615
1651
  const fullMaps: Record<string, any> = {}
1616
1652
  afterFullData.forEach((row, index) => {
1617
- const rowid = getRowid($xeTable, row)
1653
+ const rowid = handleGetRowId(row)
1618
1654
  const rowRest = fullAllDataRowIdData[rowid]
1619
1655
  const seq = index + 1
1620
1656
  if (rowRest) {
@@ -1644,8 +1680,9 @@ export default defineComponent({
1644
1680
  const childrenField = treeOpts.children || treeOpts.childrenField
1645
1681
  const fullMaps: Record<string, any> = {}
1646
1682
  if (treeConfig) {
1683
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1647
1684
  XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
1648
- const rowid = getRowid($xeTable, row)
1685
+ const rowid = handleGetRowId(row)
1649
1686
  const rowRest = fullAllDataRowIdData[rowid]
1650
1687
  const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('')
1651
1688
  if (rowRest) {
@@ -1671,18 +1708,18 @@ export default defineComponent({
1671
1708
  */
1672
1709
  const handleVirtualTreeToList = () => {
1673
1710
  const { treeConfig } = props
1674
- const { treeExpandedMaps } = reactData
1675
- const { fullAllDataRowIdData } = internalData
1711
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData
1676
1712
  const treeOpts = computeTreeOpts.value
1677
1713
  const childrenField = treeOpts.children || treeOpts.childrenField
1678
1714
  if (treeConfig && treeOpts.transform) {
1715
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1679
1716
  const fullData: any[] = []
1680
1717
  const expandMaps: {
1681
1718
  [key: string]: number
1682
1719
  } = {}
1683
1720
  XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
1684
- const rowid = getRowid($xeTable, row)
1685
- const parentRowid = getRowid($xeTable, parentRow)
1721
+ const rowid = handleGetRowId(row)
1722
+ const parentRowid = handleGetRowId(parentRow)
1686
1723
  if (!parentRow || (expandMaps[parentRowid] && treeExpandedMaps[parentRowid])) {
1687
1724
  const rowRest = fullAllDataRowIdData[rowid]
1688
1725
  if (rowRest) {
@@ -1711,7 +1748,7 @@ export default defineComponent({
1711
1748
  const treeOpts = computeTreeOpts.value
1712
1749
  const childrenField = treeOpts.children || treeOpts.childrenField
1713
1750
  const { transform, rowField, parentField, mapChildrenField } = treeOpts
1714
- const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts
1751
+ const { isEvery, remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts
1715
1752
  const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts
1716
1753
  let tableData: any[] = []
1717
1754
  let tableTree: any[] = []
@@ -1773,7 +1810,7 @@ export default defineComponent({
1773
1810
  // 筛选虚拟树
1774
1811
  tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
1775
1812
  original: true,
1776
- isEvery: true,
1813
+ isEvery,
1777
1814
  children: mapChildrenField,
1778
1815
  mapChildren: childrenField
1779
1816
  })
@@ -1787,7 +1824,7 @@ export default defineComponent({
1787
1824
  // 还原虚拟树
1788
1825
  tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
1789
1826
  original: true,
1790
- isEvery: true,
1827
+ isEvery,
1791
1828
  children: mapChildrenField,
1792
1829
  mapChildren: childrenField
1793
1830
  })
@@ -1836,7 +1873,7 @@ export default defineComponent({
1836
1873
  // 还原虚拟树
1837
1874
  tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
1838
1875
  original: true,
1839
- isEvery: true,
1876
+ isEvery,
1840
1877
  children: treeOpts.mapChildrenField,
1841
1878
  mapChildren: childrenField
1842
1879
  })
@@ -1854,7 +1891,7 @@ export default defineComponent({
1854
1891
  const updateStyle = () => {
1855
1892
  const { border, showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props
1856
1893
  const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn } = reactData
1857
- const { visibleColumn, fullColumnIdData, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData
1894
+ const { visibleColumn, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData
1858
1895
  const el = refElem.value
1859
1896
  if (!el) {
1860
1897
  return
@@ -1863,7 +1900,6 @@ export default defineComponent({
1863
1900
  const osbWidth = overflowY ? scrollbarWidth : 0
1864
1901
  const osbHeight = overflowX ? scrollbarHeight : 0
1865
1902
  const emptyPlaceholderElem = refEmptyPlaceholder.value
1866
- const cellOffsetWidth = computeCellOffsetWidth.value
1867
1903
  const mouseOpts = computeMouseOpts.value
1868
1904
  const expandOpts = computeExpandOpts.value
1869
1905
  const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper'])
@@ -2145,54 +2181,6 @@ export default defineComponent({
2145
2181
  tableElem.style.width = tWidth ? `${tWidth}px` : ''
2146
2182
  }
2147
2183
  }
2148
- const colgroupElem = getRefElem(elemStore[`${name}-${layout}-colgroup`])
2149
- if (colgroupElem) {
2150
- XEUtils.arrayEach(colgroupElem.children, (colElem: any) => {
2151
- const colid = colElem.getAttribute('name')
2152
- if (fullColumnIdData[colid]) {
2153
- const colRest = fullColumnIdData[colid]
2154
- const column = colRest.column
2155
- const { showHeaderOverflow, showFooterOverflow, showOverflow } = column
2156
- let cellOverflow
2157
- colElem.style.width = `${column.renderWidth}px`
2158
- if (layout === 'header') {
2159
- cellOverflow = XEUtils.isUndefined(showHeaderOverflow) || XEUtils.isNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow
2160
- } else if (layout === 'footer') {
2161
- cellOverflow = XEUtils.isUndefined(showFooterOverflow) || XEUtils.isNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow
2162
- } else {
2163
- cellOverflow = XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow) ? isAllOverflow : showOverflow
2164
- }
2165
- const showEllipsis = cellOverflow === 'ellipsis'
2166
- const showTitle = cellOverflow === 'title'
2167
- const showTooltip = cellOverflow === true || cellOverflow === 'tooltip'
2168
- let hasEllipsis = showTitle || showTooltip || showEllipsis
2169
- const listElem = getRefElem(elemStore[`${name}-${layout}-list`])
2170
- // 纵向虚拟滚动不支持动态行高
2171
- if (scrollYLoad && !hasEllipsis) {
2172
- hasEllipsis = true
2173
- }
2174
- if (listElem) {
2175
- XEUtils.arrayEach(listElem.querySelectorAll(`.${column.id}`), (elem: any) => {
2176
- const colspan = parseInt(elem.getAttribute('colspan') || 1)
2177
- const cellElem = elem.querySelector('.vxe-cell')
2178
- let colWidth = column.renderWidth
2179
- if (cellElem) {
2180
- if (colspan > 1) {
2181
- const columnIndex = $xeTable.getColumnIndex(column)
2182
- for (let index = 1; index < colspan; index++) {
2183
- const nextColumn = $xeTable.getColumns(columnIndex + index)
2184
- if (nextColumn) {
2185
- colWidth += nextColumn.renderWidth
2186
- }
2187
- }
2188
- }
2189
- cellElem.style.width = hasEllipsis ? `${colWidth - (cellOffsetWidth * colspan)}px` : ''
2190
- }
2191
- })
2192
- }
2193
- }
2194
- })
2195
- }
2196
2184
  })
2197
2185
  })
2198
2186
  if (currentRow) {
@@ -2361,15 +2349,16 @@ export default defineComponent({
2361
2349
 
2362
2350
  const handleCheckedAllCheckboxRow = (checked: boolean, isForce?: boolean) => {
2363
2351
  const { treeConfig } = props
2364
- const { selectCheckboxMaps } = reactData
2365
- const { afterFullData, checkboxReserveRowMap } = internalData
2352
+ const { afterFullData, checkboxReserveRowMap, selectCheckboxMaps } = internalData
2366
2353
  const treeOpts = computeTreeOpts.value
2367
2354
  const childrenField = treeOpts.children || treeOpts.childrenField
2368
2355
  const checkboxOpts = computeCheckboxOpts.value
2369
2356
  const { checkField, reserve, checkMethod } = checkboxOpts
2357
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
2370
2358
  // indeterminateField 仅支持读取
2371
2359
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
2372
2360
  const selectRowMaps: Record<string, any> = {}
2361
+
2373
2362
  /**
2374
2363
  * 绑定属性方式(高性能,有污染)
2375
2364
  * 必须在行数据存在对应的属性,否则将不响应
@@ -2378,7 +2367,7 @@ export default defineComponent({
2378
2367
  const checkValFn = (row: any) => {
2379
2368
  if (isForce || (!checkMethod || checkMethod({ row }))) {
2380
2369
  if (checked) {
2381
- selectRowMaps[getRowid($xeTable, row)] = row
2370
+ selectRowMaps[handleGetRowId(row)] = row
2382
2371
  }
2383
2372
  XEUtils.set(row, checkField, checked)
2384
2373
  }
@@ -2406,7 +2395,8 @@ export default defineComponent({
2406
2395
  */
2407
2396
  XEUtils.eachTree(afterFullData, (row) => {
2408
2397
  if (isForce || (!checkMethod || checkMethod({ row }))) {
2409
- selectRowMaps[getRowid($xeTable, row)] = row
2398
+ const rowid = handleGetRowId(row)
2399
+ selectRowMaps[rowid] = row
2410
2400
  }
2411
2401
  }, { children: childrenField })
2412
2402
  } else {
@@ -2416,7 +2406,7 @@ export default defineComponent({
2416
2406
  */
2417
2407
  if (!isForce && checkMethod) {
2418
2408
  XEUtils.eachTree(afterFullData, (row) => {
2419
- const rowid = getRowid($xeTable, row)
2409
+ const rowid = handleGetRowId(row)
2420
2410
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
2421
2411
  selectRowMaps[rowid] = row
2422
2412
  }
@@ -2432,14 +2422,15 @@ export default defineComponent({
2432
2422
  */
2433
2423
  if (!isForce && checkMethod) {
2434
2424
  afterFullData.forEach((row) => {
2435
- const rowid = getRowid($xeTable, row)
2425
+ const rowid = handleGetRowId(row)
2436
2426
  if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
2437
2427
  selectRowMaps[rowid] = row
2438
2428
  }
2439
2429
  })
2440
2430
  } else {
2441
2431
  afterFullData.forEach(row => {
2442
- selectRowMaps[getRowid($xeTable, row)] = row
2432
+ const rowid = handleGetRowId(row)
2433
+ selectRowMaps[rowid] = row
2443
2434
  })
2444
2435
  }
2445
2436
  } else {
@@ -2450,7 +2441,7 @@ export default defineComponent({
2450
2441
  */
2451
2442
  if (!isForce && checkMethod) {
2452
2443
  afterFullData.forEach((row) => {
2453
- const rowid = getRowid($xeTable, row)
2444
+ const rowid = handleGetRowId(row)
2454
2445
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
2455
2446
  selectRowMaps[rowid] = row
2456
2447
  }
@@ -2468,11 +2459,11 @@ export default defineComponent({
2468
2459
  afterFullData.forEach((row) => handleCheckboxReserveRow(row, false))
2469
2460
  }
2470
2461
  }
2471
- reactData.selectCheckboxMaps = checkField ? {} : selectRowMaps
2462
+ reactData.updateCheckboxFlag++
2463
+ internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps
2472
2464
 
2473
2465
  reactData.isAllSelected = checked
2474
2466
  reactData.isIndeterminate = false
2475
- reactData.treeIndeterminateMaps = {}
2476
2467
  internalData.treeIndeterminateRowMaps = {}
2477
2468
  $xeTable.checkSelectionStatus()
2478
2469
  return nextTick()
@@ -2481,8 +2472,8 @@ export default defineComponent({
2481
2472
  // 还原展开、选中等相关状态
2482
2473
  const handleReserveStatus = () => {
2483
2474
  const { treeConfig } = props
2484
- const { expandColumn, currentRow, selectCheckboxMaps, selectRadioRow, rowExpandedMaps, treeExpandedMaps } = reactData
2485
- const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData
2475
+ const { expandColumn, currentRow, selectRadioRow } = reactData
2476
+ const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow, selectCheckboxMaps, treeExpandedMaps, rowExpandedMaps } = internalData
2486
2477
  const expandOpts = computeExpandOpts.value
2487
2478
  const treeOpts = computeTreeOpts.value
2488
2479
  const radioOpts = computeRadioOpts.value
@@ -2499,7 +2490,8 @@ export default defineComponent({
2499
2490
  }
2500
2491
  }
2501
2492
  // 复选框
2502
- reactData.selectCheckboxMaps = getRecoverRowMaps(selectCheckboxMaps) // 刷新多选行状态
2493
+ internalData.selectCheckboxMaps = getRecoverRowMaps(selectCheckboxMaps) // 刷新多选行状态
2494
+ reactData.updateCheckboxFlag++
2503
2495
  // 还原保留选中状态
2504
2496
  if (checkboxOpts.reserve) {
2505
2497
  handleCheckedCheckboxRow(handleReserveRow(internalData.checkboxReserveRowMap), true, true)
@@ -2508,13 +2500,15 @@ export default defineComponent({
2508
2500
  reactData.currentRow = null // 刷新当前行状态
2509
2501
  }
2510
2502
  // 行展开
2511
- reactData.rowExpandedMaps = expandColumn ? getRecoverRowMaps(rowExpandedMaps) : {} // 刷新行展开状态
2503
+ internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps(rowExpandedMaps) : {} // 刷新行展开状态
2504
+ reactData.rowExpandedFlag++
2512
2505
  // 还原保留状态
2513
2506
  if (expandColumn && expandOpts.reserve) {
2514
2507
  $xeTable.setRowExpand(handleReserveRow(internalData.rowExpandedReserveRowMap), true)
2515
2508
  }
2516
2509
  // 树展开
2517
- reactData.treeExpandedMaps = treeConfig ? getRecoverRowMaps(treeExpandedMaps) : {} // 刷新树展开状态
2510
+ internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps(treeExpandedMaps) : {} // 刷新树展开状态
2511
+ reactData.treeExpandedFlag++
2518
2512
  if (treeConfig && treeOpts.reserve) {
2519
2513
  $xeTable.setTreeExpand(handleReserveRow(internalData.treeExpandedReserveRowMap), true)
2520
2514
  }
@@ -2531,7 +2525,7 @@ export default defineComponent({
2531
2525
  const { expandAll, expandRowKeys } = treeOpts
2532
2526
  const childrenField = treeOpts.children || treeOpts.childrenField
2533
2527
  if (expandAll) {
2534
- tableMethods.setAllTreeExpand(true)
2528
+ $xeTable.setAllTreeExpand(true)
2535
2529
  } else if (expandRowKeys) {
2536
2530
  const defExpandeds: any[] = []
2537
2531
  const rowkey = getRowkey($xeTable)
@@ -2541,7 +2535,7 @@ export default defineComponent({
2541
2535
  defExpandeds.push(matchObj.item)
2542
2536
  }
2543
2537
  })
2544
- tableMethods.setTreeExpand(defExpandeds, true)
2538
+ $xeTable.setTreeExpand(defExpandeds, true)
2545
2539
  }
2546
2540
  }
2547
2541
  }
@@ -2553,8 +2547,7 @@ export default defineComponent({
2553
2547
  const { checkStrictly } = checkboxOpts
2554
2548
  return new Promise<void>(resolve => {
2555
2549
  if (loadMethod) {
2556
- const { treeExpandLazyLoadedMaps } = reactData
2557
- const { fullAllDataRowIdData } = internalData
2550
+ const { fullAllDataRowIdData, treeExpandLazyLoadedMaps } = internalData
2558
2551
  const rowid = getRowid($xeTable, row)
2559
2552
  const rowRest = fullAllDataRowIdData[rowid]
2560
2553
  treeExpandLazyLoadedMaps[rowid] = row
@@ -2571,18 +2564,19 @@ export default defineComponent({
2571
2564
  childRecords = []
2572
2565
  }
2573
2566
  if (childRecords) {
2574
- return tableMethods.loadTreeChildren(row, childRecords).then(childRows => {
2575
- const { treeExpandedMaps } = reactData
2567
+ return $xeTable.loadTreeChildren(row, childRecords).then(childRows => {
2568
+ const { treeExpandedMaps } = internalData
2576
2569
  if (childRows.length && !treeExpandedMaps[rowid]) {
2577
2570
  treeExpandedMaps[rowid] = row
2578
2571
  }
2572
+ reactData.treeExpandedFlag++
2579
2573
  // 如果当前节点已选中,则展开后子节点也被选中
2580
- if (!checkStrictly && tableMethods.isCheckedByCheckboxRow(row)) {
2574
+ if (!checkStrictly && $xeTable.isCheckedByCheckboxRow(row)) {
2581
2575
  handleCheckedCheckboxRow(childRows, true)
2582
2576
  }
2583
2577
  return nextTick().then(() => {
2584
2578
  if (transform) {
2585
- tablePrivateMethods.handleTableData()
2579
+ $xeTable.handleTableData()
2586
2580
  updateAfterDataIndex()
2587
2581
  return nextTick()
2588
2582
  }
@@ -2590,7 +2584,7 @@ export default defineComponent({
2590
2584
  })
2591
2585
  }
2592
2586
  }).catch(() => {
2593
- const { treeExpandLazyLoadedMaps } = reactData
2587
+ const { treeExpandLazyLoadedMaps } = internalData
2594
2588
  if (rowRest) {
2595
2589
  rowRest.treeLoaded = false
2596
2590
  }
@@ -2598,7 +2592,8 @@ export default defineComponent({
2598
2592
  delete treeExpandLazyLoadedMaps[rowid]
2599
2593
  }
2600
2594
  }).finally(() => {
2601
- nextTick().then(() => tableMethods.recalculate()).then(() => resolve())
2595
+ reactData.treeExpandedFlag++
2596
+ nextTick().then(() => $xeTable.recalculate()).then(() => resolve())
2602
2597
  })
2603
2598
  } else {
2604
2599
  resolve()
@@ -2624,29 +2619,27 @@ export default defineComponent({
2624
2619
  const expandOpts = computeExpandOpts.value
2625
2620
  const { loadMethod } = expandOpts
2626
2621
  if (loadMethod) {
2627
- const { fullAllDataRowIdData } = internalData
2628
- const rExpandLazyLoadedMaps = { ...reactData.rowExpandLazyLoadedMaps }
2622
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData
2629
2623
  const rowid = getRowid($xeTable, row)
2630
2624
  const rowRest = fullAllDataRowIdData[rowid]
2631
- rExpandLazyLoadedMaps[rowid] = row
2632
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps
2633
- loadMethod({ $table: $xeTable, row, rowIndex: tableMethods.getRowIndex(row), $rowIndex: tableMethods.getVMRowIndex(row) }).then(() => {
2634
- const rowTempExpandedMaps = { ...reactData.rowExpandedMaps }
2625
+ rowExpandLazyLoadedMaps[rowid] = row
2626
+ loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
2627
+ const { rowExpandedMaps } = internalData
2635
2628
  if (rowRest) {
2636
2629
  rowRest.expandLoaded = true
2637
2630
  }
2638
- rowTempExpandedMaps[rowid] = row
2639
- reactData.rowExpandedMaps = rowTempExpandedMaps
2631
+ rowExpandedMaps[rowid] = row
2632
+ reactData.rowExpandedFlag++
2640
2633
  }).catch(() => {
2641
2634
  if (rowRest) {
2642
2635
  rowRest.expandLoaded = false
2643
2636
  }
2644
2637
  }).finally(() => {
2645
- const rExpandLazyLoadedMaps = { ...reactData.rowExpandLazyLoadedMaps }
2646
- if (rExpandLazyLoadedMaps[rowid]) {
2647
- delete rExpandLazyLoadedMaps[rowid]
2638
+ const { rowExpandLazyLoadedMaps } = internalData
2639
+ if (rowExpandLazyLoadedMaps[rowid]) {
2640
+ delete rowExpandLazyLoadedMaps[rowid]
2648
2641
  }
2649
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps
2642
+ reactData.rowExpandedFlag++
2650
2643
  nextTick()
2651
2644
  .then(() => $xeTable.recalculate())
2652
2645
  .then(() => $xeTable.updateCellAreas())
@@ -2750,9 +2743,6 @@ export default defineComponent({
2750
2743
  calcCellWidth()
2751
2744
  autoCellWidth()
2752
2745
  updateStyle()
2753
- if (reFull) {
2754
- updateRowOffsetTop()
2755
- }
2756
2746
  updateRowExpandStyle()
2757
2747
  return computeScrollLoad().then(() => {
2758
2748
  if (reFull === true) {
@@ -2782,6 +2772,9 @@ export default defineComponent({
2782
2772
  const childrenField = treeOpts.children || treeOpts.childrenField
2783
2773
  let treeData = []
2784
2774
  let fullData = reactive(datas ? datas.slice(0) : []) // 转为响应式数据
2775
+ if (fullData.length > supportMaxRow) {
2776
+ errLog('vxe.error.errMaxRow', [supportMaxRow])
2777
+ }
2785
2778
  if (treeConfig) {
2786
2779
  if (transform) {
2787
2780
  // 树结构自动转换
@@ -2997,8 +2990,8 @@ export default defineComponent({
2997
2990
  }
2998
2991
 
2999
2992
  const parseColumns = (isReset: boolean) => {
3000
- const { showOverflow } = props
3001
- const rowOpts = computeRowOpts.value
2993
+ // const { showOverflow } = props
2994
+ // const rowOpts = computeRowOpts.value
3002
2995
  const leftList: VxeTableDefines.ColumnInfo[] = []
3003
2996
  const centerList: VxeTableDefines.ColumnInfo[] = []
3004
2997
  const rightList: VxeTableDefines.ColumnInfo[] = []
@@ -3063,28 +3056,28 @@ export default defineComponent({
3063
3056
  reactData.hasFixedColumn = leftList.length > 0 || rightList.length > 0
3064
3057
  Object.assign(columnStore, { leftList, centerList, rightList })
3065
3058
  if (scrollXLoad) {
3066
- if (showOverflow) {
3067
- if (!rowOpts.height) {
3068
- const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false)
3069
- if (errColumn) {
3070
- errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
3071
- }
3072
- }
3059
+ // if (showOverflow) {
3060
+ // if (!rowOpts.height) {
3061
+ // const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false)
3062
+ // if (errColumn) {
3063
+ // errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
3064
+ // }
3065
+ // }
3066
+ // }
3067
+ // if (process.env.VUE_APP_VXE_ENV === 'development') {
3068
+ // if (props.showHeader && !props.showHeaderOverflow) {
3069
+ // warnLog('vxe.error.reqProp', ['show-header-overflow'])
3070
+ // }
3071
+ // if (props.showFooter && !props.showFooterOverflow) {
3072
+ // warnLog('vxe.error.reqProp', ['show-footer-overflow'])
3073
+ // }
3074
+ if (props.spanMethod) {
3075
+ warnLog('vxe.error.scrollErrProp', ['span-method'])
3073
3076
  }
3074
- if (process.env.VUE_APP_VXE_ENV === 'development') {
3075
- // if (props.showHeader && !props.showHeaderOverflow) {
3076
- // warnLog('vxe.error.reqProp', ['show-header-overflow'])
3077
- // }
3078
- // if (props.showFooter && !props.showFooterOverflow) {
3079
- // warnLog('vxe.error.reqProp', ['show-footer-overflow'])
3080
- // }
3081
- if (props.spanMethod) {
3082
- warnLog('vxe.error.scrollErrProp', ['span-method'])
3083
- }
3084
- if (props.footerSpanMethod) {
3085
- warnLog('vxe.error.scrollErrProp', ['footer-span-method'])
3086
- }
3077
+ if (props.footerSpanMethod) {
3078
+ warnLog('vxe.error.scrollErrProp', ['footer-span-method'])
3087
3079
  }
3080
+ // }
3088
3081
  if (isReset) {
3089
3082
  const { visibleSize } = handleVirtualXVisible()
3090
3083
  scrollXStore.startIndex = 0
@@ -3192,9 +3185,8 @@ export default defineComponent({
3192
3185
  * @returns
3193
3186
  */
3194
3187
  const handleBaseTreeExpand = (rows: any[], expanded: boolean) => {
3195
- const { treeExpandedMaps, treeExpandLazyLoadedMaps, treeNodeColumn } = reactData
3196
- const treeTempExpandedMaps = { ...treeExpandedMaps }
3197
- const { fullAllDataRowIdData, tableFullData } = internalData
3188
+ const { treeNodeColumn } = reactData
3189
+ const { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData
3198
3190
  const treeOpts = computeTreeOpts.value
3199
3191
  const { reserve, lazy, accordion, toggleMethod } = treeOpts
3200
3192
  const childrenField = treeOpts.children || treeOpts.childrenField
@@ -3202,6 +3194,7 @@ export default defineComponent({
3202
3194
  const result: any[] = []
3203
3195
  const columnIndex = tableMethods.getColumnIndex(treeNodeColumn)
3204
3196
  const $columnIndex = tableMethods.getVMColumnIndex(treeNodeColumn)
3197
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
3205
3198
  let validRows = toggleMethod ? rows.filter((row: any) => toggleMethod({ $table: $xeTable, expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows
3206
3199
  if (accordion) {
3207
3200
  validRows = validRows.length ? [validRows[validRows.length - 1]] : []
@@ -3209,17 +3202,17 @@ export default defineComponent({
3209
3202
  const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField })
3210
3203
  if (matchObj) {
3211
3204
  matchObj.items.forEach(item => {
3212
- const rowid = getRowid($xeTable, item)
3213
- if (treeTempExpandedMaps[rowid]) {
3214
- delete treeTempExpandedMaps[rowid]
3205
+ const rowid = handleGetRowId(item)
3206
+ if (treeExpandedMaps[rowid]) {
3207
+ delete treeExpandedMaps[rowid]
3215
3208
  }
3216
3209
  })
3217
3210
  }
3218
3211
  }
3219
3212
  if (expanded) {
3220
3213
  validRows.forEach((row: any) => {
3221
- const rowid = getRowid($xeTable, row)
3222
- if (!treeTempExpandedMaps[rowid]) {
3214
+ const rowid = handleGetRowId(row)
3215
+ if (!treeExpandedMaps[rowid]) {
3223
3216
  const rowRest = fullAllDataRowIdData[rowid]
3224
3217
  if (rowRest) {
3225
3218
  const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid]
@@ -3228,7 +3221,7 @@ export default defineComponent({
3228
3221
  result.push(handleAsyncTreeExpandChilds(row))
3229
3222
  } else {
3230
3223
  if (row[childrenField] && row[childrenField].length) {
3231
- treeTempExpandedMaps[rowid] = row
3224
+ treeExpandedMaps[rowid] = row
3232
3225
  }
3233
3226
  }
3234
3227
  }
@@ -3236,16 +3229,16 @@ export default defineComponent({
3236
3229
  })
3237
3230
  } else {
3238
3231
  validRows.forEach(item => {
3239
- const rowid = getRowid($xeTable, item)
3240
- if (treeTempExpandedMaps[rowid]) {
3241
- delete treeTempExpandedMaps[rowid]
3232
+ const rowid = handleGetRowId(item)
3233
+ if (treeExpandedMaps[rowid]) {
3234
+ delete treeExpandedMaps[rowid]
3242
3235
  }
3243
3236
  })
3244
3237
  }
3245
3238
  if (reserve) {
3246
3239
  validRows.forEach((row: any) => handleTreeExpandReserve(row, expanded))
3247
3240
  }
3248
- reactData.treeExpandedMaps = treeTempExpandedMaps
3241
+ reactData.treeExpandedFlag++
3249
3242
  return Promise.all(result).then(() => {
3250
3243
  return tableMethods.recalculate()
3251
3244
  })
@@ -3276,9 +3269,9 @@ export default defineComponent({
3276
3269
  handleCheckedAllCheckboxRow(value)
3277
3270
  if (evnt) {
3278
3271
  dispatchEvent('checkbox-all', {
3279
- records: $xeTable.getCheckboxRecords(),
3280
- reserves: $xeTable.getCheckboxReserveRecords(),
3281
- indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
3272
+ records: () => $xeTable.getCheckboxRecords(),
3273
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
3274
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
3282
3275
  checked: value
3283
3276
  }, evnt)
3284
3277
  }
@@ -3311,10 +3304,11 @@ export default defineComponent({
3311
3304
  }
3312
3305
 
3313
3306
  const createGetRowCacheProp = (prop: 'seq' | 'index' | '_index' | '$index') => {
3307
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
3314
3308
  return function (row: any) {
3315
3309
  const { fullAllDataRowIdData } = internalData
3316
3310
  if (row) {
3317
- const rowid = getRowid($xeTable, row)
3311
+ const rowid = handleGetRowId(row)
3318
3312
  const rowRest = fullAllDataRowIdData[rowid]
3319
3313
  if (rowRest) {
3320
3314
  return rowRest[prop]
@@ -3472,7 +3466,7 @@ export default defineComponent({
3472
3466
 
3473
3467
  const handleUpdateColResize = (evnt: MouseEvent, params: any) => {
3474
3468
  $xeTable.analyColumnWidth()
3475
- $xeTable.recalculate(true).then(() => {
3469
+ $xeTable.recalculate().then(() => {
3476
3470
  $xeTable.saveCustomStore('update:width')
3477
3471
  $xeTable.updateCellAreas()
3478
3472
  $xeTable.dispatchEvent('column-resizable-change', params, evnt)
@@ -3484,7 +3478,7 @@ export default defineComponent({
3484
3478
 
3485
3479
  const handleUpdateRowResize = (evnt: MouseEvent, params: any) => {
3486
3480
  reactData.resizeHeightFlag++
3487
- $xeTable.recalculate(true).then(() => {
3481
+ $xeTable.recalculate().then(() => {
3488
3482
  $xeTable.updateCellAreas()
3489
3483
  $xeTable.dispatchEvent('row-resizable-change', params, evnt)
3490
3484
  setTimeout(() => $xeTable.recalculate(true), 300)
@@ -3504,16 +3498,17 @@ export default defineComponent({
3504
3498
  }
3505
3499
 
3506
3500
  const updateRowOffsetTop = () => {
3507
- const { expandColumn, rowExpandedMaps } = reactData
3508
- const { afterFullData, fullAllDataRowIdData } = internalData
3501
+ const { expandColumn } = reactData
3502
+ const { afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData
3509
3503
  const expandOpts = computeExpandOpts.value
3510
3504
  const rowOpts = computeRowOpts.value
3511
3505
  const cellOpts = computeCellOpts.value
3512
3506
  const defaultRowHeight = computeDefaultRowHeight.value
3507
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
3513
3508
  let offsetTop = 0
3514
3509
  for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
3515
3510
  const row = afterFullData[rIndex]
3516
- const rowid = getRowid($xeTable, row)
3511
+ const rowid = handleGetRowId(row)
3517
3512
  const rowRest = fullAllDataRowIdData[rowid] || {}
3518
3513
  rowRest.oTop = offsetTop
3519
3514
  offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight
@@ -3893,9 +3888,12 @@ export default defineComponent({
3893
3888
  */
3894
3889
  revertData (rows: any, field) {
3895
3890
  const { keepSource, treeConfig } = props
3891
+ const { editStore } = reactData
3896
3892
  const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData
3893
+ const removeTempMaps = { ...editStore.removeMaps }
3897
3894
  const treeOpts = computeTreeOpts.value
3898
3895
  const { transform } = treeOpts
3896
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
3899
3897
  if (!keepSource) {
3900
3898
  if (process.env.VUE_APP_VXE_ENV === 'development') {
3901
3899
  errLog('vxe.error.reqProp', ['keep-source'])
@@ -3913,7 +3911,7 @@ export default defineComponent({
3913
3911
  let reDelFlag = false
3914
3912
  if (targetRows.length) {
3915
3913
  targetRows.forEach((item: any) => {
3916
- const rowid = getRowid($xeTable, item)
3914
+ const rowid = handleGetRowId(item)
3917
3915
  const rowRest = fullAllDataRowIdData[rowid]
3918
3916
  if (rowRest) {
3919
3917
  const row = rowRest.row
@@ -3926,6 +3924,7 @@ export default defineComponent({
3926
3924
  XEUtils.destructuring(row, XEUtils.clone(oRow, true))
3927
3925
  }
3928
3926
  if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
3927
+ delete removeTempMaps[rowid]
3929
3928
  tableFullData.unshift(row)
3930
3929
  afterFullData.unshift(row)
3931
3930
  reDelFlag = true
@@ -3937,6 +3936,7 @@ export default defineComponent({
3937
3936
  }
3938
3937
  if (rows) {
3939
3938
  if (reDelFlag) {
3939
+ editStore.removeMaps = removeTempMaps
3940
3940
  $xeTable.updateFooter()
3941
3941
  $xeTable.cacheRowMap(false)
3942
3942
  $xeTable.handleTableData(treeConfig && transform)
@@ -4084,14 +4084,14 @@ export default defineComponent({
4084
4084
  },
4085
4085
  /**
4086
4086
  * 检查行或列数据是否发生改变
4087
- * @param {Row} rowOrId 行对象、行主键
4087
+ * @param {Row} rowidOrRow 行对象、行主键
4088
4088
  * @param {String} field 字段名
4089
4089
  */
4090
- isUpdateByRow (rowOrId, field) {
4090
+ isUpdateByRow (rowidOrRow, field) {
4091
4091
  const { keepSource } = props
4092
4092
  const { tableFullColumn, fullDataRowIdData, sourceDataRowIdData } = internalData
4093
4093
  if (keepSource) {
4094
- const rowid = XEUtils.isString(rowOrId) || XEUtils.isNumber(rowOrId) ? rowOrId : getRowid($xeTable, rowOrId)
4094
+ const rowid = XEUtils.isString(rowidOrRow) || XEUtils.isNumber(rowidOrRow) ? rowidOrRow : getRowid($xeTable, rowidOrRow)
4095
4095
  const rowRest = fullDataRowIdData[rowid]
4096
4096
  // 新增的数据不需要检测
4097
4097
  if (!rowRest) {
@@ -4266,8 +4266,7 @@ export default defineComponent({
4266
4266
  */
4267
4267
  getCheckboxRecords (isFull) {
4268
4268
  const { treeConfig } = props
4269
- const { selectCheckboxMaps } = reactData
4270
- const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData
4269
+ const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData
4271
4270
  const treeOpts = computeTreeOpts.value
4272
4271
  const checkboxOpts = computeCheckboxOpts.value
4273
4272
  const { transform, mapChildrenField } = treeOpts
@@ -4595,12 +4594,13 @@ export default defineComponent({
4595
4594
  },
4596
4595
  getRowHeightConf (isFull) {
4597
4596
  const { fullAllDataRowIdData, afterFullData } = internalData
4597
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
4598
4598
  const rowOpts = computeRowOpts.value
4599
4599
  const cellOpts = computeCellOpts.value
4600
4600
  const defaultRowHeight = computeDefaultRowHeight.value
4601
4601
  const rest: Record<string, number> = {}
4602
4602
  afterFullData.forEach(row => {
4603
- const rowid = getRowid($xeTable, row)
4603
+ const rowid = handleGetRowId(row)
4604
4604
  const rowRest = fullAllDataRowIdData[rowid]
4605
4605
  if (rowRest) {
4606
4606
  const resizeHeight = rowRest.resizeHeight
@@ -4624,8 +4624,9 @@ export default defineComponent({
4624
4624
  rHeight = Math.floor(rHeight * bodyHeight)
4625
4625
  }
4626
4626
  if (rHeight) {
4627
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
4627
4628
  rows.forEach(row => {
4628
- const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : getRowid($xeTable, row)
4629
+ const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row)
4629
4630
  const rowRest = fullAllDataRowIdData[rowid]
4630
4631
  if (rowRest) {
4631
4632
  rowRest.resizeHeight = rHeight
@@ -4777,12 +4778,11 @@ export default defineComponent({
4777
4778
  */
4778
4779
  getCheckboxIndeterminateRecords (isFull) {
4779
4780
  const { treeConfig } = props
4780
- const { fullDataRowIdData } = internalData
4781
- const { treeIndeterminateMaps } = reactData
4781
+ const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData
4782
4782
  if (treeConfig) {
4783
4783
  const fullRest: any[] = []
4784
4784
  const defRest: any[] = []
4785
- XEUtils.each(treeIndeterminateMaps, (item, rowid) => {
4785
+ XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
4786
4786
  if (item) {
4787
4787
  fullRest.push(item)
4788
4788
  if (fullDataRowIdData[rowid]) {
@@ -4823,17 +4823,18 @@ export default defineComponent({
4823
4823
  return handleCheckedCheckboxRow(rows, checked, true)
4824
4824
  },
4825
4825
  isCheckedByCheckboxRow (row) {
4826
- const { selectCheckboxMaps } = reactData
4826
+ const { updateCheckboxFlag } = reactData
4827
+ const { selectCheckboxMaps } = internalData
4827
4828
  const checkboxOpts = computeCheckboxOpts.value
4828
4829
  const { checkField } = checkboxOpts
4829
4830
  if (checkField) {
4830
4831
  return XEUtils.get(row, checkField)
4831
4832
  }
4832
- return !!selectCheckboxMaps[getRowid($xeTable, row)]
4833
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)]
4833
4834
  },
4834
4835
  isCheckedByCheckboxRowKey (rowid: any) {
4835
- const { selectCheckboxMaps } = reactData
4836
- const { fullAllDataRowIdData } = internalData
4836
+ const { updateCheckboxFlag } = reactData
4837
+ const { fullAllDataRowIdData, selectCheckboxMaps } = internalData
4837
4838
  const checkboxOpts = computeCheckboxOpts.value
4838
4839
  const { checkField } = checkboxOpts
4839
4840
  if (checkField) {
@@ -4843,21 +4844,21 @@ export default defineComponent({
4843
4844
  }
4844
4845
  return false
4845
4846
  }
4846
- return !!selectCheckboxMaps[rowid]
4847
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid]
4847
4848
  },
4848
4849
  isIndeterminateByCheckboxRow (row) {
4849
- const { treeIndeterminateMaps } = reactData
4850
- return !!treeIndeterminateMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row)
4850
+ const { treeIndeterminateRowMaps } = internalData
4851
+ return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row)
4851
4852
  },
4852
4853
  isIndeterminateByCheckboxRowKey (rowid: any) {
4853
- const { treeIndeterminateMaps } = reactData
4854
- return !!treeIndeterminateMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid)
4854
+ const { treeIndeterminateRowMaps } = internalData
4855
+ return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid)
4855
4856
  },
4856
4857
  /**
4857
4858
  * 多选,切换某一行的选中状态
4858
4859
  */
4859
4860
  toggleCheckboxRow (row) {
4860
- const { selectCheckboxMaps } = reactData
4861
+ const { selectCheckboxMaps } = internalData
4861
4862
  const checkboxOpts = computeCheckboxOpts.value
4862
4863
  const { checkField } = checkboxOpts
4863
4864
  const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)]
@@ -4918,14 +4919,15 @@ export default defineComponent({
4918
4919
  const childrenField = treeOpts.children || treeOpts.childrenField
4919
4920
  const reserveSelection: any[] = []
4920
4921
  if (checkboxOpts.reserve) {
4922
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
4921
4923
  const afterFullIdMaps: { [key: string]: number } = {}
4922
4924
  if (treeConfig) {
4923
4925
  XEUtils.eachTree(afterFullData, row => {
4924
- afterFullIdMaps[getRowid($xeTable, row)] = 1
4926
+ afterFullIdMaps[handleGetRowId(row)] = 1
4925
4927
  }, { children: childrenField })
4926
4928
  } else {
4927
4929
  afterFullData.forEach(row => {
4928
- afterFullIdMaps[getRowid($xeTable, row)] = 1
4930
+ afterFullIdMaps[handleGetRowId(row)] = 1
4929
4931
  })
4930
4932
  }
4931
4933
  XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
@@ -4986,8 +4988,9 @@ export default defineComponent({
4986
4988
  }
4987
4989
  reactData.isAllSelected = false
4988
4990
  reactData.isIndeterminate = false
4989
- reactData.selectCheckboxMaps = {}
4990
- reactData.treeIndeterminateMaps = {}
4991
+ internalData.selectCheckboxMaps = {}
4992
+ internalData.treeIndeterminateRowMaps = {}
4993
+ reactData.updateCheckboxFlag++
4991
4994
  return nextTick()
4992
4995
  },
4993
4996
  /**
@@ -5094,13 +5097,20 @@ export default defineComponent({
5094
5097
  * 用于当前列,设置某列行为高亮状态
5095
5098
  */
5096
5099
  setCurrentColumn (fieldOrColumn) {
5100
+ const { mouseConfig } = props
5101
+ const mouseOpts = computeMouseOpts.value
5102
+ const isMouseSelected = mouseConfig && mouseOpts.selected
5097
5103
  const column = handleFieldOrColumn($xeTable, fieldOrColumn)
5098
5104
  if (column) {
5099
- // tableMethods.clearCurrentRow()
5100
- tableMethods.clearCurrentColumn()
5105
+ $xeTable.clearCurrentColumn()
5101
5106
  reactData.currentColumn = column
5102
5107
  }
5103
- return nextTick()
5108
+ return nextTick().then(() => {
5109
+ // 更新状选中态
5110
+ if (isMouseSelected) {
5111
+ $xeTable.addCellSelectedClass()
5112
+ }
5113
+ })
5104
5114
  },
5105
5115
  /**
5106
5116
  * 用于当前列,手动清空当前高亮的状态
@@ -5110,57 +5120,58 @@ export default defineComponent({
5110
5120
  return nextTick()
5111
5121
  },
5112
5122
  setPendingRow (rows: any | any[], status: boolean) {
5113
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps)
5123
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
5124
+ const { pendingRowMaps } = internalData
5114
5125
  if (rows && !XEUtils.isArray(rows)) {
5115
5126
  rows = [rows]
5116
5127
  }
5117
5128
  if (status) {
5118
5129
  rows.forEach((row: any) => {
5119
- const rowid = getRowid($xeTable, row)
5120
- if (rowid && !pendingMaps[rowid]) {
5121
- pendingMaps[rowid] = row
5130
+ const rowid = handleGetRowId(row)
5131
+ if (rowid && !pendingRowMaps[rowid]) {
5132
+ pendingRowMaps[rowid] = row
5122
5133
  }
5123
5134
  })
5124
5135
  } else {
5125
5136
  rows.forEach((row: any) => {
5126
- const rowid = getRowid($xeTable, row)
5127
- if (rowid && pendingMaps[rowid]) {
5128
- delete pendingMaps[rowid]
5137
+ const rowid = handleGetRowId(row)
5138
+ if (rowid && pendingRowMaps[rowid]) {
5139
+ delete pendingRowMaps[rowid]
5129
5140
  }
5130
5141
  })
5131
5142
  }
5132
- reactData.pendingRowMaps = pendingMaps
5143
+ reactData.pendingRowFlag++
5133
5144
  return nextTick()
5134
5145
  },
5135
5146
  togglePendingRow (rows: any | any[]) {
5136
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps)
5147
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
5148
+ const { pendingRowMaps } = internalData
5137
5149
  if (rows && !XEUtils.isArray(rows)) {
5138
5150
  rows = [rows]
5139
5151
  }
5140
5152
  rows.forEach((row: any) => {
5141
- const rowid = getRowid($xeTable, row)
5153
+ const rowid = handleGetRowId(row)
5142
5154
  if (rowid) {
5143
- if (pendingMaps[rowid]) {
5144
- delete pendingMaps[rowid]
5155
+ if (pendingRowMaps[rowid]) {
5156
+ delete pendingRowMaps[rowid]
5145
5157
  } else {
5146
- pendingMaps[rowid] = row
5158
+ pendingRowMaps[rowid] = row
5147
5159
  }
5148
5160
  }
5149
5161
  })
5150
- reactData.pendingRowMaps = pendingMaps
5162
+ reactData.pendingRowFlag++
5151
5163
  return nextTick()
5152
5164
  },
5153
5165
  hasPendingByRow (row) {
5154
5166
  return tableMethods.isPendingByRow(row)
5155
5167
  },
5156
5168
  isPendingByRow (row) {
5157
- const { pendingRowMaps } = reactData
5169
+ const { pendingRowMaps } = internalData
5158
5170
  const rowid = getRowid($xeTable, row)
5159
5171
  return !!pendingRowMaps[rowid]
5160
5172
  },
5161
5173
  getPendingRecords () {
5162
- const { pendingRowMaps } = reactData
5163
- const { fullAllDataRowIdData } = internalData
5174
+ const { fullAllDataRowIdData, pendingRowMaps } = internalData
5164
5175
  const insertRecords: any[] = []
5165
5176
  XEUtils.each(pendingRowMaps, (row, rowid) => {
5166
5177
  if (fullAllDataRowIdData[rowid]) {
@@ -5170,7 +5181,8 @@ export default defineComponent({
5170
5181
  return insertRecords
5171
5182
  },
5172
5183
  clearPendingRow () {
5173
- reactData.pendingRowMaps = {}
5184
+ internalData.pendingRowMaps = {}
5185
+ reactData.pendingRowFlag++
5174
5186
  return nextTick()
5175
5187
  },
5176
5188
  sort (sortConfs: any, sortOrder?: VxeTablePropTypes.SortOrder) {
@@ -5318,7 +5330,13 @@ export default defineComponent({
5318
5330
  visible: false
5319
5331
  })
5320
5332
  if (visible) {
5321
- dispatchEvent('filter-visible', { column, property: column.field, field: column.field, filterList: $xeTable.getCheckedFilters(), visible: false }, null)
5333
+ dispatchEvent('filter-visible', {
5334
+ column,
5335
+ property: column.field,
5336
+ field: column.field,
5337
+ filterList: () => $xeTable.getCheckedFilters(),
5338
+ visible: false
5339
+ }, null)
5322
5340
  }
5323
5341
  return nextTick()
5324
5342
  },
@@ -5346,17 +5364,16 @@ export default defineComponent({
5346
5364
  return rowRest && !!rowRest.expandLoaded
5347
5365
  },
5348
5366
  clearRowExpandLoaded (row) {
5349
- const rExpandLazyLoadedMaps = { ...reactData.rowExpandLazyLoadedMaps }
5350
- const { fullAllDataRowIdData } = internalData
5367
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData
5351
5368
  const expandOpts = computeExpandOpts.value
5352
5369
  const { lazy } = expandOpts
5353
5370
  const rowid = getRowid($xeTable, row)
5354
5371
  const rowRest = fullAllDataRowIdData[rowid]
5355
5372
  if (lazy && rowRest) {
5356
5373
  rowRest.expandLoaded = false
5357
- delete rExpandLazyLoadedMaps[rowid]
5374
+ delete rowExpandLazyLoadedMaps[rowid]
5358
5375
  }
5359
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps
5376
+ reactData.rowExpandedFlag++
5360
5377
  return nextTick()
5361
5378
  },
5362
5379
  /**
@@ -5364,12 +5381,12 @@ export default defineComponent({
5364
5381
  * @param {Row} row 行对象
5365
5382
  */
5366
5383
  reloadRowExpand (row) {
5367
- const { rowExpandLazyLoadedMaps } = reactData
5384
+ const { rowExpandLazyLoadedMaps } = internalData
5368
5385
  const expandOpts = computeExpandOpts.value
5369
5386
  const { lazy } = expandOpts
5370
5387
  const rowid = getRowid($xeTable, row)
5371
5388
  if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
5372
- tableMethods.clearRowExpandLoaded(row)
5389
+ $xeTable.clearRowExpandLoaded(row)
5373
5390
  .then(() => handleAsyncRowExpand(row))
5374
5391
  }
5375
5392
  return nextTick()
@@ -5379,13 +5396,13 @@ export default defineComponent({
5379
5396
  warnLog('vxe.error.delFunc', ['reloadExpandContent', 'reloadRowExpand'])
5380
5397
  }
5381
5398
  // 即将废弃
5382
- return tableMethods.reloadRowExpand(row)
5399
+ return $xeTable.reloadRowExpand(row)
5383
5400
  },
5384
5401
  /**
5385
5402
  * 切换展开行
5386
5403
  */
5387
5404
  toggleRowExpand (row) {
5388
- return tableMethods.setRowExpand(row, !tableMethods.isRowExpandByRow(row))
5405
+ return $xeTable.setRowExpand(row, !$xeTable.isRowExpandByRow(row))
5389
5406
  },
5390
5407
  /**
5391
5408
  * 设置所有行的展开与否
@@ -5413,9 +5430,9 @@ export default defineComponent({
5413
5430
  * @param {Boolean} expanded 是否展开
5414
5431
  */
5415
5432
  setRowExpand (rows, expanded) {
5416
- const { rowExpandedMaps, rowExpandLazyLoadedMaps, expandColumn } = reactData
5417
- const { fullAllDataRowIdData } = internalData
5418
- let rExpandedMaps = { ...rowExpandedMaps }
5433
+ const { expandColumn } = reactData
5434
+ let { fullAllDataRowIdData, rowExpandedMaps, rowExpandLazyLoadedMaps } = internalData
5435
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
5419
5436
  const expandOpts = computeExpandOpts.value
5420
5437
  const { reserve, lazy, accordion, toggleMethod } = expandOpts
5421
5438
  const lazyRests: any[] = []
@@ -5427,28 +5444,29 @@ export default defineComponent({
5427
5444
  }
5428
5445
  if (accordion) {
5429
5446
  // 只能同时展开一个
5430
- rExpandedMaps = {}
5447
+ rowExpandedMaps = {}
5448
+ internalData.rowExpandedMaps = rowExpandedMaps
5431
5449
  rows = rows.slice(rows.length - 1, rows.length)
5432
5450
  }
5433
5451
  const validRows: any[] = toggleMethod ? rows.filter((row: any) => toggleMethod({ $table: $xeTable, expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: tableMethods.getRowIndex(row), $rowIndex: tableMethods.getVMRowIndex(row) })) : rows
5434
5452
  if (expanded) {
5435
5453
  validRows.forEach((row: any) => {
5436
- const rowid = getRowid($xeTable, row)
5437
- if (!rExpandedMaps[rowid]) {
5454
+ const rowid = handleGetRowId(row)
5455
+ if (!rowExpandedMaps[rowid]) {
5438
5456
  const rowRest = fullAllDataRowIdData[rowid]
5439
5457
  const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid]
5440
5458
  if (isLoad) {
5441
5459
  lazyRests.push(handleAsyncRowExpand(row))
5442
5460
  } else {
5443
- rExpandedMaps[rowid] = row
5461
+ rowExpandedMaps[rowid] = row
5444
5462
  }
5445
5463
  }
5446
5464
  })
5447
5465
  } else {
5448
5466
  validRows.forEach(item => {
5449
- const rowid = getRowid($xeTable, item)
5450
- if (rExpandedMaps[rowid]) {
5451
- delete rExpandedMaps[rowid]
5467
+ const rowid = handleGetRowId(item)
5468
+ if (rowExpandedMaps[rowid]) {
5469
+ delete rowExpandedMaps[rowid]
5452
5470
  }
5453
5471
  })
5454
5472
  }
@@ -5456,7 +5474,7 @@ export default defineComponent({
5456
5474
  validRows.forEach((row) => handleRowExpandReserve(row, expanded))
5457
5475
  }
5458
5476
  }
5459
- reactData.rowExpandedMaps = rExpandedMaps
5477
+ reactData.rowExpandedFlag++
5460
5478
  return Promise.all(lazyRests)
5461
5479
  .then(() => nextTick())
5462
5480
  .then(() => $xeTable.recalculate(true))
@@ -5472,9 +5490,10 @@ export default defineComponent({
5472
5490
  * @param {Row} row 行对象
5473
5491
  */
5474
5492
  isRowExpandByRow (row) {
5475
- const { rowExpandedMaps } = reactData
5493
+ const { rowExpandedFlag } = reactData
5494
+ const { rowExpandedMaps } = internalData
5476
5495
  const rowid = getRowid($xeTable, row)
5477
- return !!rowExpandedMaps[rowid]
5496
+ return !!rowExpandedFlag && !!rowExpandedMaps[rowid]
5478
5497
  },
5479
5498
  isExpandByRow (row) {
5480
5499
  // 已废弃
@@ -5491,7 +5510,8 @@ export default defineComponent({
5491
5510
  const expandOpts = computeExpandOpts.value
5492
5511
  const { reserve } = expandOpts
5493
5512
  const expList = $xeTable.getRowExpandRecords()
5494
- reactData.rowExpandedMaps = {}
5513
+ internalData.rowExpandedMaps = {}
5514
+ reactData.rowExpandedFlag++
5495
5515
  if (reserve) {
5496
5516
  tableFullData.forEach((row) => handleRowExpandReserve(row, false))
5497
5517
  }
@@ -5512,7 +5532,7 @@ export default defineComponent({
5512
5532
  },
5513
5533
  getRowExpandRecords () {
5514
5534
  const rest: any[] = []
5515
- XEUtils.each(reactData.rowExpandedMaps, item => {
5535
+ XEUtils.each(internalData.rowExpandedMaps, item => {
5516
5536
  if (item) {
5517
5537
  rest.push(item)
5518
5538
  }
@@ -5521,7 +5541,7 @@ export default defineComponent({
5521
5541
  },
5522
5542
  getTreeExpandRecords () {
5523
5543
  const rest: any[] = []
5524
- XEUtils.each(reactData.treeExpandedMaps, item => {
5544
+ XEUtils.each(internalData.treeExpandedMaps, item => {
5525
5545
  if (item) {
5526
5546
  rest.push(item)
5527
5547
  }
@@ -5538,12 +5558,10 @@ export default defineComponent({
5538
5558
  return rowRest && !!rowRest.treeLoaded
5539
5559
  },
5540
5560
  clearTreeExpandLoaded (rows: any) {
5541
- const { fullAllDataRowIdData } = internalData
5561
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData
5542
5562
  const treeOpts = computeTreeOpts.value
5543
5563
  const { transform } = treeOpts
5544
- let tExpandedMaps: Record<string, any> = {}
5545
5564
  if (rows) {
5546
- tExpandedMaps = { ...reactData.treeExpandedMaps }
5547
5565
  if (!XEUtils.isArray(rows)) {
5548
5566
  rows = [rows]
5549
5567
  }
@@ -5552,8 +5570,8 @@ export default defineComponent({
5552
5570
  const rowRest = fullAllDataRowIdData[rowid]
5553
5571
  if (rowRest) {
5554
5572
  rowRest.treeLoaded = false
5555
- if (tExpandedMaps[rowid]) {
5556
- delete tExpandedMaps[rowid]
5573
+ if (treeExpandedMaps[rowid]) {
5574
+ delete treeExpandedMaps[rowid]
5557
5575
  }
5558
5576
  }
5559
5577
  })
@@ -5562,7 +5580,8 @@ export default defineComponent({
5562
5580
  rowRest.treeLoaded = false
5563
5581
  })
5564
5582
  }
5565
- reactData.treeExpandedMaps = {}
5583
+ internalData.treeExpandedMaps = {}
5584
+ reactData.treeExpandedFlag++
5566
5585
  if (transform) {
5567
5586
  handleVirtualTreeToList()
5568
5587
  return $xeTable.handleTableData()
@@ -5574,7 +5593,7 @@ export default defineComponent({
5574
5593
  * @param {Row} row 行对象
5575
5594
  */
5576
5595
  reloadTreeExpand (row) {
5577
- const { treeExpandLazyLoadedMaps } = reactData
5596
+ const { treeExpandLazyLoadedMaps } = internalData
5578
5597
  const treeOpts = computeTreeOpts.value
5579
5598
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
5580
5599
  const { transform, lazy } = treeOpts
@@ -5659,8 +5678,9 @@ export default defineComponent({
5659
5678
  * @param {Row} row 行对象
5660
5679
  */
5661
5680
  isTreeExpandByRow (row) {
5662
- const { treeExpandedMaps } = reactData
5663
- return !!treeExpandedMaps[getRowid($xeTable, row)]
5681
+ const { treeExpandedFlag } = reactData
5682
+ const { treeExpandedMaps } = internalData
5683
+ return !!treeExpandedFlag && !!treeExpandedMaps[getRowid($xeTable, row)]
5664
5684
  },
5665
5685
  /**
5666
5686
  * 手动清空树形节点的展开状态,数据会恢复成未展开的状态
@@ -5670,19 +5690,20 @@ export default defineComponent({
5670
5690
  const treeOpts = computeTreeOpts.value
5671
5691
  const childrenField = treeOpts.children || treeOpts.childrenField
5672
5692
  const { transform, reserve } = treeOpts
5673
- const expList = tableMethods.getTreeExpandRecords()
5674
- reactData.treeExpandedMaps = {}
5693
+ const expList = $xeTable.getTreeExpandRecords()
5694
+ internalData.treeExpandedMaps = {}
5695
+ reactData.treeExpandedFlag++
5675
5696
  if (reserve) {
5676
5697
  XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve(row, false), { children: childrenField })
5677
5698
  }
5678
- return tablePrivateMethods.handleTableData().then(() => {
5699
+ return $xeTable.handleTableData().then(() => {
5679
5700
  if (transform) {
5680
5701
  handleVirtualTreeToList()
5681
- return tablePrivateMethods.handleTableData()
5702
+ return $xeTable.handleTableData()
5682
5703
  }
5683
5704
  }).then(() => {
5684
5705
  if (expList.length) {
5685
- return tableMethods.recalculate()
5706
+ return $xeTable.recalculate()
5686
5707
  }
5687
5708
  })
5688
5709
  },
@@ -5941,7 +5962,13 @@ export default defineComponent({
5941
5962
  const { id } = props
5942
5963
  const customOpts = computeCustomOpts.value
5943
5964
  const { collectColumn } = internalData
5944
- const { checkMethod } = customOpts
5965
+ const { storage, checkMethod } = customOpts
5966
+ const isAllCustom = storage === true
5967
+ const storageOpts: VxeTableDefines.VxeTableCustomStorageObj = isAllCustom ? {} : Object.assign({}, storage || {})
5968
+ const isCustomResizable = isAllCustom || storageOpts.resizable
5969
+ const isCustomVisible = isAllCustom || storageOpts.visible
5970
+ const isCustomFixed = isAllCustom || storageOpts.fixed
5971
+ const isCustomSort = isAllCustom || storageOpts.sort
5945
5972
  const resizableData: Record<string, number> = {}
5946
5973
  const sortData: Record<string, number> = {}
5947
5974
  const visibleData: Record<string, boolean> = {}
@@ -5961,43 +5988,33 @@ export default defineComponent({
5961
5988
  let hasFixed = 0
5962
5989
  let hasVisible = 0
5963
5990
  XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => {
5991
+ const colKey = column.getKey()
5992
+ if (!colKey) {
5993
+ errLog('vxe.error.reqProp', [`${column.getTitle() || column.type || ''} -> column.field=?`])
5994
+ return
5995
+ }
5964
5996
  // 只支持一级
5965
5997
  if (!parentColumn) {
5966
- collectColumn.forEach((column) => {
5967
- const colKey = column.getKey()
5968
- if (colKey) {
5969
- hasSort = 1
5970
- sortData[colKey] = column.renderSortNumber
5971
- }
5972
- })
5973
- if (column.fixed !== column.defaultFixed) {
5974
- const colKey = column.getKey()
5975
- if (colKey) {
5976
- hasFixed = 1
5977
- fixedData[colKey] = column.fixed
5978
- }
5998
+ if (isCustomSort) {
5999
+ hasSort = 1
6000
+ sortData[colKey] = column.renderSortNumber
5979
6001
  }
5980
- }
5981
- if (column.resizeWidth) {
5982
- const colKey = column.getKey()
5983
- if (colKey) {
5984
- hasResizable = 1
5985
- resizableData[colKey] = column.renderWidth
6002
+ if (isCustomFixed && column.fixed !== column.defaultFixed) {
6003
+ hasFixed = 1
6004
+ fixedData[colKey] = column.fixed
5986
6005
  }
5987
6006
  }
5988
- if (!checkMethod || checkMethod({ column })) {
6007
+ if (isCustomResizable && column.resizeWidth) {
6008
+ hasResizable = 1
6009
+ resizableData[colKey] = column.renderWidth
6010
+ }
6011
+ if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
5989
6012
  if (!column.visible && column.defaultVisible) {
5990
- const colKey = column.getKey()
5991
- if (colKey) {
5992
- hasVisible = 1
5993
- visibleData[colKey] = false
5994
- }
6013
+ hasVisible = 1
6014
+ visibleData[colKey] = false
5995
6015
  } else if (column.visible && !column.defaultVisible) {
5996
- const colKey = column.getKey()
5997
- if (colKey) {
5998
- hasVisible = 1
5999
- visibleData[colKey] = true
6000
- }
6016
+ hasVisible = 1
6017
+ visibleData[colKey] = true
6001
6018
  }
6002
6019
  }
6003
6020
  })
@@ -6347,7 +6364,7 @@ export default defineComponent({
6347
6364
  if (keyboardOpts.enterToTab) {
6348
6365
  $xeTable.moveTabSelected(activeParams, hasShiftKey, evnt)
6349
6366
  } else {
6350
- $xeTable.moveSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt)
6367
+ $xeTable.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt)
6351
6368
  }
6352
6369
  } else {
6353
6370
  if (keyboardOpts.enterToTab) {
@@ -6379,7 +6396,7 @@ export default defineComponent({
6379
6396
  return
6380
6397
  }
6381
6398
  }
6382
- $xeTable.moveSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt)
6399
+ $xeTable.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt)
6383
6400
  if (enterMethod) {
6384
6401
  enterMethod(etrParams)
6385
6402
  }
@@ -6408,10 +6425,7 @@ export default defineComponent({
6408
6425
  if (!isEditStatus) {
6409
6426
  // 如果按下了方向键
6410
6427
  if (selected.row && selected.column) {
6411
- $xeTable.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt)
6412
- } else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
6413
- // 当前行按键上下移动
6414
- $xeTable.moveCurrentRow(isUpArrow, isDwArrow, evnt)
6428
+ $xeTable.moveArrowSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt)
6415
6429
  }
6416
6430
  }
6417
6431
  } else if (isTab && keyboardConfig && keyboardOpts.isTab) {
@@ -6789,8 +6803,9 @@ export default defineComponent({
6789
6803
  * @param {Event} evnt 事件
6790
6804
  * @param {Row} row 行对象
6791
6805
  */
6792
- const handleTooltip = (evnt: MouseEvent, tdEl: HTMLTableCellElement, overflowElem: HTMLElement, tipElem: HTMLElement | null, params: any) => {
6793
- if (!overflowElem) {
6806
+ const handleTooltip = (evnt: MouseEvent, tdEl: HTMLTableCellElement, overflowElem: HTMLElement | null, params: any) => {
6807
+ const tipOverEl = overflowElem || tdEl
6808
+ if (!tipOverEl) {
6794
6809
  return nextTick()
6795
6810
  }
6796
6811
  params.cell = tdEl
@@ -6800,9 +6815,8 @@ export default defineComponent({
6800
6815
  const { showAll, contentMethod } = tooltipOpts
6801
6816
  const customContent = contentMethod ? contentMethod(params) : null
6802
6817
  const useCustom = contentMethod && !XEUtils.eqNull(customContent)
6803
- const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? overflowElem.innerText : overflowElem.textContent).trim()
6804
- const isCellOverflow = overflowElem.scrollWidth > overflowElem.clientWidth
6805
- if (content && (showAll || useCustom || isCellOverflow)) {
6818
+ const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? tipOverEl.innerText : tipOverEl.textContent).trim()
6819
+ if (content && (showAll || useCustom || (tipOverEl.scrollWidth > tipOverEl.clientWidth))) {
6806
6820
  Object.assign(tooltipStore, {
6807
6821
  row,
6808
6822
  column,
@@ -6812,7 +6826,7 @@ export default defineComponent({
6812
6826
  nextTick(() => {
6813
6827
  const $tooltip = refTooltip.value
6814
6828
  if ($tooltip && $tooltip.open) {
6815
- $tooltip.open(isCellOverflow ? overflowElem : (tipElem || overflowElem), formatText(content))
6829
+ $tooltip.open(tipOverEl, formatText(content))
6816
6830
  }
6817
6831
  })
6818
6832
  }
@@ -6954,19 +6968,15 @@ export default defineComponent({
6954
6968
  */
6955
6969
  cacheRowMap () {
6956
6970
  const { treeConfig } = props
6957
- const { treeExpandedMaps } = reactData
6958
- const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData
6971
+ const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData
6959
6972
  const treeOpts = computeTreeOpts.value
6960
6973
  const childrenField = treeOpts.children || treeOpts.childrenField
6961
6974
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
6962
6975
  const { lazy } = treeOpts
6963
- const rowkey = getRowkey($xeTable)
6964
- const isDeepKey = rowkey.indexOf('.') > -1
6965
6976
  const fullAllDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = { ...fullAllDataRowIdData } // 存在已删除数据
6966
6977
  const fullDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = {}
6967
- const treeTempExpandedMaps = { ...treeExpandedMaps }
6968
6978
 
6969
- const handleRowId = isDeepKey ? updateDeepRowKey : updateFastRowKey
6979
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable)
6970
6980
  const handleRowCache = (row: any, index: number, items: any, currIndex: number, parentRow: any, rowid: string, level: number, seq: string | number) => {
6971
6981
  let rowRest = fullAllDataRowIdMaps[rowid]
6972
6982
  if (!rowRest) {
@@ -6983,19 +6993,21 @@ export default defineComponent({
6983
6993
  rowRest.level = level
6984
6994
  rowRest.index = currIndex
6985
6995
  rowRest.treeIndex = index
6996
+
6997
+ fullDataRowIdMaps[rowid] = rowRest
6998
+ fullAllDataRowIdMaps[rowid] = rowRest
6986
6999
  }
6987
7000
 
6988
7001
  if (treeConfig) {
6989
7002
  XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
6990
- const rowid = handleRowId(row, rowkey)
7003
+ const rowid = handleUpdateRowId(row)
6991
7004
  if (treeConfig && lazy) {
6992
- const treeExpRest = treeTempExpandedMaps[rowid]
6993
7005
  if (row[hasChildField] && row[childrenField] === undefined) {
6994
7006
  row[childrenField] = null
6995
7007
  }
6996
- if (treeExpRest) {
7008
+ if (treeExpandedMaps[rowid]) {
6997
7009
  if (!row[childrenField] || !row[childrenField].length) {
6998
- delete treeTempExpandedMaps[rowid]
7010
+ delete treeExpandedMaps[rowid]
6999
7011
  }
7000
7012
  }
7001
7013
  }
@@ -7003,28 +7015,23 @@ export default defineComponent({
7003
7015
  }, { children: childrenField })
7004
7016
  } else {
7005
7017
  tableFullData.forEach((row, index, items) => {
7006
- handleRowCache(row, index, items, index, null, handleRowId(row, rowkey), 0, index + 1)
7018
+ handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1)
7007
7019
  })
7008
7020
  }
7009
7021
 
7010
7022
  internalData.fullDataRowIdData = fullDataRowIdMaps
7011
7023
  internalData.fullAllDataRowIdData = fullAllDataRowIdMaps
7012
- reactData.treeExpandedMaps = treeTempExpandedMaps
7024
+ reactData.treeExpandedFlag++
7013
7025
  },
7014
7026
  cacheSourceMap (fullData) {
7015
7027
  const { treeConfig } = props
7016
7028
  const treeOpts = computeTreeOpts.value
7017
- let { sourceDataRowIdData } = internalData
7018
7029
  const sourceData = XEUtils.clone(fullData, true)
7019
- const rowkey = getRowkey($xeTable)
7020
- sourceDataRowIdData = internalData.sourceDataRowIdData = {}
7030
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable)
7031
+ const sourceRowIdData: Record<string, any> = {}
7021
7032
  const handleSourceRow = (row: any) => {
7022
- let rowid = getRowid($xeTable, row)
7023
- if (eqEmptyValue(rowid)) {
7024
- rowid = getRowUniqueId()
7025
- XEUtils.set(row, rowkey, rowid)
7026
- }
7027
- sourceDataRowIdData[rowid] = row
7033
+ const rowid = handleUpdateRowId(row)
7034
+ sourceRowIdData[rowid] = row
7028
7035
  }
7029
7036
  // 源数据缓存
7030
7037
  if (treeConfig) {
@@ -7033,6 +7040,7 @@ export default defineComponent({
7033
7040
  } else {
7034
7041
  sourceData.forEach(handleSourceRow)
7035
7042
  }
7043
+ internalData.sourceDataRowIdData = sourceRowIdData
7036
7044
  internalData.tableSourceData = sourceData
7037
7045
  },
7038
7046
  /**
@@ -7479,8 +7487,21 @@ export default defineComponent({
7479
7487
  }
7480
7488
  // 兼容老版本
7481
7489
 
7482
- let rest
7483
- if (!evntList.some((func) => func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args)) === false)) {
7490
+ let rest = null
7491
+ let isStop = false
7492
+ for (let i = 0; i < evntList.length; i++) {
7493
+ const func = evntList[i]
7494
+ const fnRest = func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args))
7495
+ if (fnRest === false) {
7496
+ isStop = true
7497
+ break
7498
+ } else if (fnRest && fnRest.status === false) {
7499
+ rest = fnRest.result
7500
+ isStop = true
7501
+ break
7502
+ }
7503
+ }
7504
+ if (!isStop) {
7484
7505
  if (next) {
7485
7506
  rest = next()
7486
7507
  }
@@ -7492,9 +7513,7 @@ export default defineComponent({
7492
7513
  },
7493
7514
  updateCheckboxStatus () {
7494
7515
  const { treeConfig } = props
7495
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData
7496
- const selectRowMaps = Object.assign({}, selectCheckboxMaps)
7497
- const halfRowMaps = Object.assign({}, treeIndeterminateMaps)
7516
+ const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData
7498
7517
  const treeOpts = computeTreeOpts.value
7499
7518
  const { transform, mapChildrenField } = treeOpts
7500
7519
  const childrenField = treeOpts.children || treeOpts.childrenField
@@ -7506,10 +7525,11 @@ export default defineComponent({
7506
7525
  }
7507
7526
  // 树结构
7508
7527
  if (treeConfig) {
7528
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
7509
7529
  const childRowMaps: Record<string, number> = {}
7510
7530
  const childRowList: any[][] = []
7511
7531
  XEUtils.eachTree(afterTreeFullData, (row) => {
7512
- const rowid = getRowid($xeTable, row)
7532
+ const rowid = handleGetRowId(row)
7513
7533
  const childList = row[transform ? mapChildrenField : childrenField]
7514
7534
  if (childList && childList.length && !childRowMaps[rowid]) {
7515
7535
  childRowMaps[rowid] = 1
@@ -7526,29 +7546,29 @@ export default defineComponent({
7526
7546
  childList.forEach(
7527
7547
  checkMethod
7528
7548
  ? (item) => {
7529
- const childRowid = getRowid($xeTable, item)
7530
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid]
7549
+ const childRowid = handleGetRowId(item)
7550
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid]
7531
7551
  if (checkMethod({ row: item })) {
7532
7552
  if (isSelect) {
7533
7553
  sLen++
7534
- } else if (halfRowMaps[childRowid]) {
7554
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7535
7555
  hLen++
7536
7556
  }
7537
7557
  vLen++
7538
7558
  } else {
7539
7559
  if (isSelect) {
7540
7560
  sLen++
7541
- } else if (halfRowMaps[childRowid]) {
7561
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7542
7562
  hLen++
7543
7563
  }
7544
7564
  }
7545
7565
  }
7546
7566
  : item => {
7547
- const childRowid = getRowid($xeTable, item)
7548
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid]
7567
+ const childRowid = handleGetRowId(item)
7568
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid]
7549
7569
  if (isSelect) {
7550
7570
  sLen++
7551
- } else if (halfRowMaps[childRowid]) {
7571
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7552
7572
  hLen++
7553
7573
  }
7554
7574
  vLen++
@@ -7561,36 +7581,35 @@ export default defineComponent({
7561
7581
  }
7562
7582
  if (isSelected) {
7563
7583
  if (!checkField) {
7564
- selectRowMaps[rowid] = row
7584
+ selectCheckboxMaps[rowid] = row
7565
7585
  }
7566
- if (halfRowMaps[rowid]) {
7567
- delete halfRowMaps[rowid]
7586
+ if (treeIndeterminateRowMaps[rowid]) {
7587
+ delete treeIndeterminateRowMaps[rowid]
7568
7588
  }
7569
7589
  } else {
7570
7590
  if (!checkField) {
7571
- if (selectRowMaps[rowid]) {
7572
- delete selectRowMaps[rowid]
7591
+ if (selectCheckboxMaps[rowid]) {
7592
+ delete selectCheckboxMaps[rowid]
7573
7593
  }
7574
7594
  }
7575
7595
  if (halfSelect) {
7576
- halfRowMaps[rowid] = row
7596
+ treeIndeterminateRowMaps[rowid] = row
7577
7597
  } else {
7578
- if (halfRowMaps[rowid]) {
7579
- delete halfRowMaps[rowid]
7598
+ if (treeIndeterminateRowMaps[rowid]) {
7599
+ delete treeIndeterminateRowMaps[rowid]
7580
7600
  }
7581
7601
  }
7582
7602
  }
7583
7603
  })
7584
7604
  }
7585
- reactData.selectCheckboxMaps = selectRowMaps
7586
- reactData.treeIndeterminateMaps = halfRowMaps
7605
+ reactData.updateCheckboxFlag++
7587
7606
  },
7588
7607
  updateAllCheckboxStatus () {
7589
7608
  const { treeConfig } = props
7590
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData
7609
+ const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData
7591
7610
  const checkboxOpts = computeCheckboxOpts.value
7592
7611
  const { checkField, checkMethod, showReserveStatus } = checkboxOpts
7593
- const { afterFullData, afterTreeFullData, checkboxReserveRowMap } = internalData
7612
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
7594
7613
 
7595
7614
  let sLen = 0 // 已选
7596
7615
  let hLen = 0 // 半选
@@ -7599,29 +7618,29 @@ export default defineComponent({
7599
7618
  const rootList = (treeConfig ? afterTreeFullData : afterFullData)
7600
7619
  rootList.forEach(checkMethod
7601
7620
  ? row => {
7602
- const childRowid = getRowid($xeTable, row)
7621
+ const childRowid = handleGetRowId(row)
7603
7622
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid]
7604
7623
  if (checkMethod({ row })) {
7605
7624
  if (selected) {
7606
7625
  sLen++
7607
- } else if (treeIndeterminateMaps[childRowid]) {
7626
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7608
7627
  hLen++
7609
7628
  }
7610
7629
  vLen++
7611
7630
  } else {
7612
7631
  if (selected) {
7613
7632
  sLen++
7614
- } else if (treeIndeterminateMaps[childRowid]) {
7633
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7615
7634
  hLen++
7616
7635
  }
7617
7636
  }
7618
7637
  }
7619
7638
  : row => {
7620
- const childRowid = getRowid($xeTable, row)
7639
+ const childRowid = handleGetRowId(row)
7621
7640
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid]
7622
7641
  if (selected) {
7623
7642
  sLen++
7624
- } else if (treeIndeterminateMaps[childRowid]) {
7643
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7625
7644
  hLen++
7626
7645
  }
7627
7646
  vLen++
@@ -7648,13 +7667,13 @@ export default defineComponent({
7648
7667
  */
7649
7668
  handleBatchSelectRows (rows, checked, isForce) {
7650
7669
  const { treeConfig } = props
7651
- const { selectCheckboxMaps } = reactData
7652
- const selectRowMaps = Object.assign({}, selectCheckboxMaps)
7670
+ const { selectCheckboxMaps } = internalData
7653
7671
  const treeOpts = computeTreeOpts.value
7654
7672
  const { transform, mapChildrenField } = treeOpts
7655
7673
  const childrenField = treeOpts.children || treeOpts.childrenField
7656
7674
  const checkboxOpts = computeCheckboxOpts.value
7657
7675
  const { checkField, checkStrictly, checkMethod } = checkboxOpts
7676
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
7658
7677
  // indeterminateField 仅支持读取
7659
7678
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
7660
7679
  if (checkField) {
@@ -7670,18 +7689,17 @@ export default defineComponent({
7670
7689
  handleCheckboxReserveRow(row, checked)
7671
7690
  }
7672
7691
  }, { children: transform ? mapChildrenField : childrenField })
7673
- reactData.selectCheckboxMaps = selectRowMaps
7692
+ reactData.updateCheckboxFlag++
7674
7693
  return
7675
- } else {
7676
- // 列表
7677
- rows.forEach(row => {
7678
- if (isForce || (!checkMethod || checkMethod({ row }))) {
7679
- XEUtils.set(row, checkField, checked)
7680
- handleCheckboxReserveRow(row, checked)
7681
- }
7682
- })
7683
7694
  }
7684
- reactData.selectCheckboxMaps = selectRowMaps
7695
+ // 列表
7696
+ rows.forEach(row => {
7697
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
7698
+ XEUtils.set(row, checkField, checked)
7699
+ handleCheckboxReserveRow(row, checked)
7700
+ }
7701
+ })
7702
+ reactData.updateCheckboxFlag++
7685
7703
  return
7686
7704
  }
7687
7705
 
@@ -7689,39 +7707,39 @@ export default defineComponent({
7689
7707
  if (treeConfig && !checkStrictly) {
7690
7708
  // 更新子节点状态
7691
7709
  XEUtils.eachTree(rows, (row) => {
7692
- const rowid = getRowid($xeTable, row)
7710
+ const rowid = handleGetRowId(row)
7693
7711
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7694
7712
  if (checked) {
7695
- selectRowMaps[rowid] = row
7713
+ selectCheckboxMaps[rowid] = row
7696
7714
  } else {
7697
- if (selectRowMaps[rowid]) {
7698
- delete selectRowMaps[rowid]
7715
+ if (selectCheckboxMaps[rowid]) {
7716
+ delete selectCheckboxMaps[rowid]
7699
7717
  }
7700
7718
  }
7701
7719
  handleCheckboxReserveRow(row, checked)
7702
7720
  }
7703
7721
  }, { children: transform ? mapChildrenField : childrenField })
7704
- reactData.selectCheckboxMaps = selectRowMaps
7722
+ reactData.updateCheckboxFlag++
7705
7723
  return
7706
7724
  }
7707
7725
 
7708
7726
  // 列表
7709
7727
  rows.forEach(row => {
7710
- const rowid = getRowid($xeTable, row)
7728
+ const rowid = handleGetRowId(row)
7711
7729
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7712
7730
  if (checked) {
7713
- if (!selectRowMaps[rowid]) {
7714
- selectRowMaps[rowid] = row
7731
+ if (!selectCheckboxMaps[rowid]) {
7732
+ selectCheckboxMaps[rowid] = row
7715
7733
  }
7716
7734
  } else {
7717
- if (selectRowMaps[rowid]) {
7718
- delete selectRowMaps[rowid]
7735
+ if (selectCheckboxMaps[rowid]) {
7736
+ delete selectCheckboxMaps[rowid]
7719
7737
  }
7720
7738
  }
7721
7739
  handleCheckboxReserveRow(row, checked)
7740
+ reactData.updateCheckboxFlag++
7722
7741
  }
7723
7742
  })
7724
- reactData.selectCheckboxMaps = selectRowMaps
7725
7743
  },
7726
7744
  /**
7727
7745
  * 即将移除
@@ -7769,7 +7787,7 @@ export default defineComponent({
7769
7787
  return
7770
7788
  }
7771
7789
  if (tooltipStore.column !== column || !tooltipStore.visible) {
7772
- handleTooltip(evnt, thEl, cellEl, null, params)
7790
+ handleTooltip(evnt, thEl, thEl.querySelector<HTMLElement>('.vxe-cell--title') || cellEl, params)
7773
7791
  }
7774
7792
  },
7775
7793
  /**
@@ -7796,7 +7814,7 @@ export default defineComponent({
7796
7814
  }
7797
7815
  }
7798
7816
  if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
7799
- handleTooltip(evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper') as HTMLElement, null, params)
7817
+ handleTooltip(evnt, tdEl, tdEl.querySelector<HTMLElement>('.vxe-cell--label') || tdEl.querySelector<HTMLElement>('.vxe-cell--wrapper'), params)
7800
7818
  }
7801
7819
  },
7802
7820
  /**
@@ -7805,10 +7823,10 @@ export default defineComponent({
7805
7823
  triggerFooterTooltipEvent (evnt, params) {
7806
7824
  const { column } = params
7807
7825
  const { tooltipStore } = reactData
7808
- const cell = evnt.currentTarget as HTMLTableCellElement
7826
+ const tdEl = evnt.currentTarget as HTMLTableCellElement
7809
7827
  handleTargetEnterEvent(tooltipStore.column !== column || !!tooltipStore.row)
7810
7828
  if (tooltipStore.column !== column || !tooltipStore.visible) {
7811
- handleTooltip(evnt, cell, cell.querySelector('.vxe-cell--wrapper') as HTMLElement || cell.children[0], null, params)
7829
+ handleTooltip(evnt, tdEl, tdEl.querySelector<HTMLElement>('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper') as HTMLElement, params)
7812
7830
  }
7813
7831
  },
7814
7832
  handleTargetLeaveEvent () {
@@ -7832,17 +7850,18 @@ export default defineComponent({
7832
7850
  const { _lastResizeTime } = internalData
7833
7851
  const sortOpts = computeSortOpts.value
7834
7852
  const columnOpts = computeColumnOpts.value
7853
+ const currentColumnOpts = computeCurrentColumnOpts.value
7835
7854
  const { column } = params
7836
7855
  const cell = evnt.currentTarget
7837
7856
  const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300
7838
7857
  const triggerSort = getEventTargetNode(evnt, cell, 'vxe-cell--sort').flag
7839
7858
  const triggerFilter = getEventTargetNode(evnt, cell, 'vxe-cell--filter').flag
7840
7859
  if (sortOpts.trigger === 'cell' && !(triggerResizable || triggerSort || triggerFilter)) {
7841
- tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column))
7860
+ $xeTable.triggerSortEvent(evnt, column, getNextSortOrder(column))
7842
7861
  }
7843
7862
  dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt)
7844
- if (columnOpts.isCurrent || props.highlightCurrentColumn) {
7845
- tablePrivateMethods.triggerCurrentColumnEvent(evnt, params)
7863
+ if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
7864
+ $xeTable.triggerCurrentColumnEvent(evnt, params)
7846
7865
  }
7847
7866
  },
7848
7867
  triggerHeaderCellDblclickEvent (evnt, params) {
@@ -7854,7 +7873,7 @@ export default defineComponent({
7854
7873
  * 如果是双击模式,则单击后选中状态
7855
7874
  */
7856
7875
  triggerCellClickEvent (evnt, params) {
7857
- const { highlightCurrentRow, editConfig } = props
7876
+ const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props
7858
7877
  const { editStore, isDragResize } = reactData
7859
7878
  if (isDragResize) {
7860
7879
  return
@@ -7866,6 +7885,8 @@ export default defineComponent({
7866
7885
  const checkboxOpts = computeCheckboxOpts.value
7867
7886
  const keyboardOpts = computeKeyboardOpts.value
7868
7887
  const rowOpts = computeRowOpts.value
7888
+ const columnOpts = computeColumnOpts.value
7889
+ const currentColumnOpts = computeCurrentColumnOpts.value
7869
7890
  const { actived, focused } = editStore
7870
7891
  const { row, column } = params
7871
7892
  const { type, treeNode } = column
@@ -7881,29 +7902,35 @@ export default defineComponent({
7881
7902
  if (!triggerCheckbox && !triggerRadio) {
7882
7903
  // 如果是展开行
7883
7904
  if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
7884
- tablePrivateMethods.triggerRowExpandEvent(evnt, params)
7905
+ $xeTable.triggerRowExpandEvent(evnt, params)
7885
7906
  }
7886
7907
  // 如果是树形表格
7887
7908
  if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
7888
- tablePrivateMethods.triggerTreeExpandEvent(evnt, params)
7909
+ $xeTable.triggerTreeExpandEvent(evnt, params)
7889
7910
  }
7890
7911
  }
7891
7912
  // 如果点击了树节点
7892
7913
  if (!triggerTreeNode) {
7893
7914
  if (!triggerExpandNode) {
7894
- // 如果是高亮行
7915
+ // 如果是当前行
7895
7916
  if (rowOpts.isCurrent || highlightCurrentRow) {
7896
7917
  if (!triggerCheckbox && !triggerRadio) {
7897
- tablePrivateMethods.triggerCurrentRowEvent(evnt, params)
7918
+ $xeTable.triggerCurrentRowEvent(evnt, params)
7919
+ }
7920
+ }
7921
+ // 如果是当前列
7922
+ if ((columnOpts.isCurrent || highlightCurrentColumn) && (!currentColumnOpts.trigger || ['cell', 'default'].includes(currentColumnOpts.trigger))) {
7923
+ if (!triggerCheckbox && !triggerRadio) {
7924
+ $xeTable.triggerCurrentColumnEvent(evnt, params)
7898
7925
  }
7899
7926
  }
7900
7927
  // 如果是单选框
7901
7928
  if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
7902
- tablePrivateMethods.triggerRadioRowEvent(evnt, params)
7929
+ $xeTable.triggerRadioRowEvent(evnt, params)
7903
7930
  }
7904
7931
  // 如果是复选框
7905
7932
  if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
7906
- tablePrivateMethods.handleToggleCheckRowEvent(evnt, params)
7933
+ $xeTable.handleToggleCheckRowEvent(evnt, params)
7907
7934
  }
7908
7935
  }
7909
7936
  // 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
@@ -7978,7 +8005,7 @@ export default defineComponent({
7978
8005
  dispatchEvent('cell-dblclick', params, evnt)
7979
8006
  },
7980
8007
  handleToggleCheckRowEvent (evnt, params) {
7981
- const { selectCheckboxMaps } = reactData
8008
+ const { selectCheckboxMaps } = internalData
7982
8009
  const checkboxOpts = computeCheckboxOpts.value
7983
8010
  const { checkField, trigger } = checkboxOpts
7984
8011
  const { row } = params
@@ -7992,43 +8019,45 @@ export default defineComponent({
7992
8019
  checked = !selectCheckboxMaps[getRowid($xeTable, row)]
7993
8020
  }
7994
8021
  if (evnt) {
7995
- tablePrivateMethods.triggerCheckRowEvent(evnt, params, checked)
8022
+ $xeTable.triggerCheckRowEvent(evnt, params, checked)
7996
8023
  } else {
7997
- tablePrivateMethods.handleBatchSelectRows([row], checked)
7998
- tablePrivateMethods.checkSelectionStatus()
8024
+ $xeTable.handleBatchSelectRows([row], checked)
8025
+ $xeTable.checkSelectionStatus()
7999
8026
  }
8000
8027
  },
8001
8028
  triggerCheckRowEvent (evnt: MouseEvent, params, checked) {
8002
- const checkboxOpts = computeCheckboxOpts.value
8003
8029
  const { row } = params
8004
8030
  const { afterFullData } = internalData
8031
+ const checkboxOpts = computeCheckboxOpts.value
8005
8032
  const { checkMethod, trigger } = checkboxOpts
8006
8033
  if (trigger === 'manual') {
8007
8034
  return
8008
8035
  }
8009
8036
  evnt.stopPropagation()
8010
8037
  if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
8011
- const checkboxRecords = tableMethods.getCheckboxRecords()
8038
+ const checkboxRecords = $xeTable.getCheckboxRecords()
8012
8039
  if (checkboxRecords.length) {
8013
8040
  const firstRow = checkboxRecords[0]
8014
- const _rowIndex = tableMethods.getVTRowIndex(row)
8015
- const _firstRowIndex = tableMethods.getVTRowIndex(firstRow)
8041
+ const _rowIndex = $xeTable.getVTRowIndex(row)
8042
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow)
8016
8043
  if (_rowIndex !== _firstRowIndex) {
8017
- tableMethods.setAllCheckboxRow(false)
8044
+ $xeTable.setAllCheckboxRow(false)
8018
8045
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1)
8019
- handleCheckedCheckboxRow(rangeRows, true, false)
8046
+ nextTick(() => {
8047
+ handleCheckedCheckboxRow(rangeRows, true, false)
8048
+ })
8020
8049
  dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt)
8021
8050
  return
8022
8051
  }
8023
8052
  }
8024
8053
  }
8025
8054
  if (!checkMethod || checkMethod({ row })) {
8026
- tablePrivateMethods.handleBatchSelectRows([row], checked)
8027
- tablePrivateMethods.checkSelectionStatus()
8055
+ $xeTable.handleBatchSelectRows([row], checked)
8056
+ $xeTable.checkSelectionStatus()
8028
8057
  dispatchEvent('checkbox-change', Object.assign({
8029
- records: tableMethods.getCheckboxRecords(),
8030
- reserves: tableMethods.getCheckboxReserveRecords(),
8031
- indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
8058
+ records: () => $xeTable.getCheckboxRecords(),
8059
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
8060
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
8032
8061
  checked
8033
8062
  }, params), evnt)
8034
8063
  }
@@ -8099,7 +8128,8 @@ export default defineComponent({
8099
8128
  * 展开行事件
8100
8129
  */
8101
8130
  triggerRowExpandEvent (evnt, params) {
8102
- const { rowExpandLazyLoadedMaps, expandColumn: column } = reactData
8131
+ const { expandColumn: column } = reactData
8132
+ const { rowExpandLazyLoadedMaps } = internalData
8103
8133
  const expandOpts = computeExpandOpts.value
8104
8134
  const { row } = params
8105
8135
  const { lazy, trigger } = expandOpts
@@ -8109,18 +8139,18 @@ export default defineComponent({
8109
8139
  evnt.stopPropagation()
8110
8140
  const rowid = getRowid($xeTable, row)
8111
8141
  if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
8112
- const expanded = !tableMethods.isRowExpandByRow(row)
8113
- const columnIndex = tableMethods.getColumnIndex(column)
8114
- const $columnIndex = tableMethods.getVMColumnIndex(column)
8115
- tableMethods.setRowExpand(row, expanded)
8142
+ const expanded = !$xeTable.isRowExpandByRow(row)
8143
+ const columnIndex = $xeTable.getColumnIndex(column)
8144
+ const $columnIndex = $xeTable.getVMColumnIndex(column)
8145
+ $xeTable.setRowExpand(row, expanded)
8116
8146
  dispatchEvent('toggle-row-expand', {
8117
8147
  expanded,
8118
8148
  column,
8119
8149
  columnIndex,
8120
8150
  $columnIndex,
8121
8151
  row,
8122
- rowIndex: tableMethods.getRowIndex(row),
8123
- $rowIndex: tableMethods.getVMRowIndex(row)
8152
+ rowIndex: $xeTable.getRowIndex(row),
8153
+ $rowIndex: $xeTable.getVMRowIndex(row)
8124
8154
  }, evnt)
8125
8155
  }
8126
8156
  },
@@ -8128,7 +8158,7 @@ export default defineComponent({
8128
8158
  * 展开树节点事件
8129
8159
  */
8130
8160
  triggerTreeExpandEvent (evnt, params) {
8131
- const { treeExpandLazyLoadedMaps } = reactData
8161
+ const { treeExpandLazyLoadedMaps } = internalData
8132
8162
  const treeOpts = computeTreeOpts.value
8133
8163
  const { row, column } = params
8134
8164
  const { lazy, trigger } = treeOpts
@@ -8138,10 +8168,10 @@ export default defineComponent({
8138
8168
  evnt.stopPropagation()
8139
8169
  const rowid = getRowid($xeTable, row)
8140
8170
  if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
8141
- const expanded = !tableMethods.isTreeExpandByRow(row)
8142
- const columnIndex = tableMethods.getColumnIndex(column)
8143
- const $columnIndex = tableMethods.getVMColumnIndex(column)
8144
- tableMethods.setTreeExpand(row, expanded)
8171
+ const expanded = !$xeTable.isTreeExpandByRow(row)
8172
+ const columnIndex = $xeTable.getColumnIndex(column)
8173
+ const $columnIndex = $xeTable.getVMColumnIndex(column)
8174
+ $xeTable.setTreeExpand(row, expanded)
8145
8175
  dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt)
8146
8176
  }
8147
8177
  },
@@ -8285,12 +8315,11 @@ export default defineComponent({
8285
8315
  handleRowDragSwapEvent (evnt, isSyncRow, dragRow, prevDragRow, prevDragPos, prevDragToChild) {
8286
8316
  const { treeConfig, dragConfig } = props
8287
8317
  const rowDragOpts = computeRowDragOpts.value
8288
- const { fullAllDataRowIdData } = internalData
8318
+ const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData
8289
8319
  const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts
8290
8320
  const treeOpts = computeTreeOpts.value
8291
8321
  const { transform, rowField, mapChildrenField, parentField } = treeOpts
8292
8322
  const childrenField = treeOpts.children || treeOpts.childrenField
8293
- const { afterFullData, tableFullData } = internalData
8294
8323
  const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null)
8295
8324
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0
8296
8325
  const errRest = {
@@ -9033,6 +9062,7 @@ export default defineComponent({
9033
9062
  return
9034
9063
  }
9035
9064
  }
9065
+
9036
9066
  let scrollTop = yHandleEl.scrollTop
9037
9067
  let scrollLeft = xHandleEl.scrollLeft
9038
9068
  if (leftScrollElem && fixedType === 'left') {
@@ -9162,10 +9192,10 @@ export default defineComponent({
9162
9192
  }
9163
9193
 
9164
9194
  const { highlightHoverRow } = tableProps
9165
- const { scrollXLoad, scrollYLoad } = reactData
9195
+ const { scrollXLoad, scrollYLoad, expandColumn } = reactData
9166
9196
  const leftFixedWidth = computeLeftFixedWidth.value
9167
9197
  const rightFixedWidth = computeRightFixedWidth.value
9168
- if (!(scrollYLoad || leftFixedWidth || rightFixedWidth)) {
9198
+ if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
9169
9199
  return
9170
9200
  }
9171
9201
 
@@ -9199,7 +9229,6 @@ export default defineComponent({
9199
9229
  if (isTopWheel ? currScrollTop <= 0 : currScrollTop >= bodyScrollElem.scrollHeight - bodyScrollElem.clientHeight) {
9200
9230
  return
9201
9231
  }
9202
-
9203
9232
  const scrollTop = currScrollTop + deltaTop
9204
9233
  const scrollLeft = bodyScrollElem.scrollLeft + deltaLeft
9205
9234
  const isRollX = scrollLeft !== lastScrollLeft
@@ -9418,8 +9447,8 @@ export default defineComponent({
9418
9447
  },
9419
9448
  // 更新纵向 Y 可视渲染上下剩余空间大小
9420
9449
  updateScrollYSpace () {
9421
- const { isAllOverflow, scrollYLoad, expandColumn, rowExpandedMaps } = reactData
9422
- const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData
9450
+ const { isAllOverflow, scrollYLoad, expandColumn } = reactData
9451
+ const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData
9423
9452
  const { startIndex } = scrollYStore
9424
9453
  const expandOpts = computeExpandOpts.value
9425
9454
  const rowOpts = computeRowOpts.value
@@ -9768,6 +9797,7 @@ export default defineComponent({
9768
9797
  ]
9769
9798
 
9770
9799
  if (expandColumn) {
9800
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
9771
9801
  tableRowExpandedList.forEach((row) => {
9772
9802
  const expandOpts = computeExpandOpts.value
9773
9803
  const { height: expandHeight, padding } = expandOpts
@@ -9775,7 +9805,7 @@ export default defineComponent({
9775
9805
  const treeOpts = computeTreeOpts.value
9776
9806
  const { transform, seqMode } = treeOpts
9777
9807
  const cellStyle: Record<string, string> = {}
9778
- const rowid = getRowid($xeTable, row)
9808
+ const rowid = handleGetRowId(row)
9779
9809
  const rest = fullAllDataRowIdData[rowid]
9780
9810
  let rowLevel = 0
9781
9811
  let seq: string | number = -1