vxe-table 4.12.0-beta.9 → 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 +45 -36
  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 +435 -420
  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 +42 -40
  46. package/lib/grid/src/grid.min.js +1 -1
  47. package/lib/index.umd.js +500 -292
  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 +523 -456
  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 +49 -42
  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 +441 -418
  178. package/packages/table/src/util.ts +39 -6
  179. package/packages/ui/index.ts +1 -0
  180. /package/es/{iconfont.1741337003908.ttf → iconfont.1742955995631.ttf} +0 -0
  181. /package/es/{iconfont.1741337003908.woff → iconfont.1742955995631.woff} +0 -0
  182. /package/es/{iconfont.1741337003908.woff2 → iconfont.1742955995631.woff2} +0 -0
  183. /package/lib/{iconfont.1741337003908.ttf → iconfont.1742955995631.ttf} +0 -0
  184. /package/lib/{iconfont.1741337003908.woff → iconfont.1742955995631.woff} +0 -0
  185. /package/lib/{iconfont.1741337003908.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
@@ -3898,6 +3893,7 @@ export default defineComponent({
3898
3893
  const removeTempMaps = { ...editStore.removeMaps }
3899
3894
  const treeOpts = computeTreeOpts.value
3900
3895
  const { transform } = treeOpts
3896
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
3901
3897
  if (!keepSource) {
3902
3898
  if (process.env.VUE_APP_VXE_ENV === 'development') {
3903
3899
  errLog('vxe.error.reqProp', ['keep-source'])
@@ -3915,7 +3911,7 @@ export default defineComponent({
3915
3911
  let reDelFlag = false
3916
3912
  if (targetRows.length) {
3917
3913
  targetRows.forEach((item: any) => {
3918
- const rowid = getRowid($xeTable, item)
3914
+ const rowid = handleGetRowId(item)
3919
3915
  const rowRest = fullAllDataRowIdData[rowid]
3920
3916
  if (rowRest) {
3921
3917
  const row = rowRest.row
@@ -4270,8 +4266,7 @@ export default defineComponent({
4270
4266
  */
4271
4267
  getCheckboxRecords (isFull) {
4272
4268
  const { treeConfig } = props
4273
- const { selectCheckboxMaps } = reactData
4274
- const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData
4269
+ const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData
4275
4270
  const treeOpts = computeTreeOpts.value
4276
4271
  const checkboxOpts = computeCheckboxOpts.value
4277
4272
  const { transform, mapChildrenField } = treeOpts
@@ -4599,12 +4594,13 @@ export default defineComponent({
4599
4594
  },
4600
4595
  getRowHeightConf (isFull) {
4601
4596
  const { fullAllDataRowIdData, afterFullData } = internalData
4597
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
4602
4598
  const rowOpts = computeRowOpts.value
4603
4599
  const cellOpts = computeCellOpts.value
4604
4600
  const defaultRowHeight = computeDefaultRowHeight.value
4605
4601
  const rest: Record<string, number> = {}
4606
4602
  afterFullData.forEach(row => {
4607
- const rowid = getRowid($xeTable, row)
4603
+ const rowid = handleGetRowId(row)
4608
4604
  const rowRest = fullAllDataRowIdData[rowid]
4609
4605
  if (rowRest) {
4610
4606
  const resizeHeight = rowRest.resizeHeight
@@ -4628,8 +4624,9 @@ export default defineComponent({
4628
4624
  rHeight = Math.floor(rHeight * bodyHeight)
4629
4625
  }
4630
4626
  if (rHeight) {
4627
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
4631
4628
  rows.forEach(row => {
4632
- const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : getRowid($xeTable, row)
4629
+ const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row)
4633
4630
  const rowRest = fullAllDataRowIdData[rowid]
4634
4631
  if (rowRest) {
4635
4632
  rowRest.resizeHeight = rHeight
@@ -4781,12 +4778,11 @@ export default defineComponent({
4781
4778
  */
4782
4779
  getCheckboxIndeterminateRecords (isFull) {
4783
4780
  const { treeConfig } = props
4784
- const { fullDataRowIdData } = internalData
4785
- const { treeIndeterminateMaps } = reactData
4781
+ const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData
4786
4782
  if (treeConfig) {
4787
4783
  const fullRest: any[] = []
4788
4784
  const defRest: any[] = []
4789
- XEUtils.each(treeIndeterminateMaps, (item, rowid) => {
4785
+ XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
4790
4786
  if (item) {
4791
4787
  fullRest.push(item)
4792
4788
  if (fullDataRowIdData[rowid]) {
@@ -4827,17 +4823,18 @@ export default defineComponent({
4827
4823
  return handleCheckedCheckboxRow(rows, checked, true)
4828
4824
  },
4829
4825
  isCheckedByCheckboxRow (row) {
4830
- const { selectCheckboxMaps } = reactData
4826
+ const { updateCheckboxFlag } = reactData
4827
+ const { selectCheckboxMaps } = internalData
4831
4828
  const checkboxOpts = computeCheckboxOpts.value
4832
4829
  const { checkField } = checkboxOpts
4833
4830
  if (checkField) {
4834
4831
  return XEUtils.get(row, checkField)
4835
4832
  }
4836
- return !!selectCheckboxMaps[getRowid($xeTable, row)]
4833
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)]
4837
4834
  },
4838
4835
  isCheckedByCheckboxRowKey (rowid: any) {
4839
- const { selectCheckboxMaps } = reactData
4840
- const { fullAllDataRowIdData } = internalData
4836
+ const { updateCheckboxFlag } = reactData
4837
+ const { fullAllDataRowIdData, selectCheckboxMaps } = internalData
4841
4838
  const checkboxOpts = computeCheckboxOpts.value
4842
4839
  const { checkField } = checkboxOpts
4843
4840
  if (checkField) {
@@ -4847,21 +4844,21 @@ export default defineComponent({
4847
4844
  }
4848
4845
  return false
4849
4846
  }
4850
- return !!selectCheckboxMaps[rowid]
4847
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid]
4851
4848
  },
4852
4849
  isIndeterminateByCheckboxRow (row) {
4853
- const { treeIndeterminateMaps } = reactData
4854
- return !!treeIndeterminateMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row)
4850
+ const { treeIndeterminateRowMaps } = internalData
4851
+ return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row)
4855
4852
  },
4856
4853
  isIndeterminateByCheckboxRowKey (rowid: any) {
4857
- const { treeIndeterminateMaps } = reactData
4858
- return !!treeIndeterminateMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid)
4854
+ const { treeIndeterminateRowMaps } = internalData
4855
+ return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid)
4859
4856
  },
4860
4857
  /**
4861
4858
  * 多选,切换某一行的选中状态
4862
4859
  */
4863
4860
  toggleCheckboxRow (row) {
4864
- const { selectCheckboxMaps } = reactData
4861
+ const { selectCheckboxMaps } = internalData
4865
4862
  const checkboxOpts = computeCheckboxOpts.value
4866
4863
  const { checkField } = checkboxOpts
4867
4864
  const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)]
@@ -4922,14 +4919,15 @@ export default defineComponent({
4922
4919
  const childrenField = treeOpts.children || treeOpts.childrenField
4923
4920
  const reserveSelection: any[] = []
4924
4921
  if (checkboxOpts.reserve) {
4922
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
4925
4923
  const afterFullIdMaps: { [key: string]: number } = {}
4926
4924
  if (treeConfig) {
4927
4925
  XEUtils.eachTree(afterFullData, row => {
4928
- afterFullIdMaps[getRowid($xeTable, row)] = 1
4926
+ afterFullIdMaps[handleGetRowId(row)] = 1
4929
4927
  }, { children: childrenField })
4930
4928
  } else {
4931
4929
  afterFullData.forEach(row => {
4932
- afterFullIdMaps[getRowid($xeTable, row)] = 1
4930
+ afterFullIdMaps[handleGetRowId(row)] = 1
4933
4931
  })
4934
4932
  }
4935
4933
  XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
@@ -4990,8 +4988,9 @@ export default defineComponent({
4990
4988
  }
4991
4989
  reactData.isAllSelected = false
4992
4990
  reactData.isIndeterminate = false
4993
- reactData.selectCheckboxMaps = {}
4994
- reactData.treeIndeterminateMaps = {}
4991
+ internalData.selectCheckboxMaps = {}
4992
+ internalData.treeIndeterminateRowMaps = {}
4993
+ reactData.updateCheckboxFlag++
4995
4994
  return nextTick()
4996
4995
  },
4997
4996
  /**
@@ -5098,13 +5097,20 @@ export default defineComponent({
5098
5097
  * 用于当前列,设置某列行为高亮状态
5099
5098
  */
5100
5099
  setCurrentColumn (fieldOrColumn) {
5100
+ const { mouseConfig } = props
5101
+ const mouseOpts = computeMouseOpts.value
5102
+ const isMouseSelected = mouseConfig && mouseOpts.selected
5101
5103
  const column = handleFieldOrColumn($xeTable, fieldOrColumn)
5102
5104
  if (column) {
5103
- // tableMethods.clearCurrentRow()
5104
- tableMethods.clearCurrentColumn()
5105
+ $xeTable.clearCurrentColumn()
5105
5106
  reactData.currentColumn = column
5106
5107
  }
5107
- return nextTick()
5108
+ return nextTick().then(() => {
5109
+ // 更新状选中态
5110
+ if (isMouseSelected) {
5111
+ $xeTable.addCellSelectedClass()
5112
+ }
5113
+ })
5108
5114
  },
5109
5115
  /**
5110
5116
  * 用于当前列,手动清空当前高亮的状态
@@ -5114,57 +5120,58 @@ export default defineComponent({
5114
5120
  return nextTick()
5115
5121
  },
5116
5122
  setPendingRow (rows: any | any[], status: boolean) {
5117
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps)
5123
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
5124
+ const { pendingRowMaps } = internalData
5118
5125
  if (rows && !XEUtils.isArray(rows)) {
5119
5126
  rows = [rows]
5120
5127
  }
5121
5128
  if (status) {
5122
5129
  rows.forEach((row: any) => {
5123
- const rowid = getRowid($xeTable, row)
5124
- if (rowid && !pendingMaps[rowid]) {
5125
- pendingMaps[rowid] = row
5130
+ const rowid = handleGetRowId(row)
5131
+ if (rowid && !pendingRowMaps[rowid]) {
5132
+ pendingRowMaps[rowid] = row
5126
5133
  }
5127
5134
  })
5128
5135
  } else {
5129
5136
  rows.forEach((row: any) => {
5130
- const rowid = getRowid($xeTable, row)
5131
- if (rowid && pendingMaps[rowid]) {
5132
- delete pendingMaps[rowid]
5137
+ const rowid = handleGetRowId(row)
5138
+ if (rowid && pendingRowMaps[rowid]) {
5139
+ delete pendingRowMaps[rowid]
5133
5140
  }
5134
5141
  })
5135
5142
  }
5136
- reactData.pendingRowMaps = pendingMaps
5143
+ reactData.pendingRowFlag++
5137
5144
  return nextTick()
5138
5145
  },
5139
5146
  togglePendingRow (rows: any | any[]) {
5140
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps)
5147
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
5148
+ const { pendingRowMaps } = internalData
5141
5149
  if (rows && !XEUtils.isArray(rows)) {
5142
5150
  rows = [rows]
5143
5151
  }
5144
5152
  rows.forEach((row: any) => {
5145
- const rowid = getRowid($xeTable, row)
5153
+ const rowid = handleGetRowId(row)
5146
5154
  if (rowid) {
5147
- if (pendingMaps[rowid]) {
5148
- delete pendingMaps[rowid]
5155
+ if (pendingRowMaps[rowid]) {
5156
+ delete pendingRowMaps[rowid]
5149
5157
  } else {
5150
- pendingMaps[rowid] = row
5158
+ pendingRowMaps[rowid] = row
5151
5159
  }
5152
5160
  }
5153
5161
  })
5154
- reactData.pendingRowMaps = pendingMaps
5162
+ reactData.pendingRowFlag++
5155
5163
  return nextTick()
5156
5164
  },
5157
5165
  hasPendingByRow (row) {
5158
5166
  return tableMethods.isPendingByRow(row)
5159
5167
  },
5160
5168
  isPendingByRow (row) {
5161
- const { pendingRowMaps } = reactData
5169
+ const { pendingRowMaps } = internalData
5162
5170
  const rowid = getRowid($xeTable, row)
5163
5171
  return !!pendingRowMaps[rowid]
5164
5172
  },
5165
5173
  getPendingRecords () {
5166
- const { pendingRowMaps } = reactData
5167
- const { fullAllDataRowIdData } = internalData
5174
+ const { fullAllDataRowIdData, pendingRowMaps } = internalData
5168
5175
  const insertRecords: any[] = []
5169
5176
  XEUtils.each(pendingRowMaps, (row, rowid) => {
5170
5177
  if (fullAllDataRowIdData[rowid]) {
@@ -5174,7 +5181,8 @@ export default defineComponent({
5174
5181
  return insertRecords
5175
5182
  },
5176
5183
  clearPendingRow () {
5177
- reactData.pendingRowMaps = {}
5184
+ internalData.pendingRowMaps = {}
5185
+ reactData.pendingRowFlag++
5178
5186
  return nextTick()
5179
5187
  },
5180
5188
  sort (sortConfs: any, sortOrder?: VxeTablePropTypes.SortOrder) {
@@ -5322,7 +5330,13 @@ export default defineComponent({
5322
5330
  visible: false
5323
5331
  })
5324
5332
  if (visible) {
5325
- 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)
5326
5340
  }
5327
5341
  return nextTick()
5328
5342
  },
@@ -5350,17 +5364,16 @@ export default defineComponent({
5350
5364
  return rowRest && !!rowRest.expandLoaded
5351
5365
  },
5352
5366
  clearRowExpandLoaded (row) {
5353
- const rExpandLazyLoadedMaps = { ...reactData.rowExpandLazyLoadedMaps }
5354
- const { fullAllDataRowIdData } = internalData
5367
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData
5355
5368
  const expandOpts = computeExpandOpts.value
5356
5369
  const { lazy } = expandOpts
5357
5370
  const rowid = getRowid($xeTable, row)
5358
5371
  const rowRest = fullAllDataRowIdData[rowid]
5359
5372
  if (lazy && rowRest) {
5360
5373
  rowRest.expandLoaded = false
5361
- delete rExpandLazyLoadedMaps[rowid]
5374
+ delete rowExpandLazyLoadedMaps[rowid]
5362
5375
  }
5363
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps
5376
+ reactData.rowExpandedFlag++
5364
5377
  return nextTick()
5365
5378
  },
5366
5379
  /**
@@ -5368,12 +5381,12 @@ export default defineComponent({
5368
5381
  * @param {Row} row 行对象
5369
5382
  */
5370
5383
  reloadRowExpand (row) {
5371
- const { rowExpandLazyLoadedMaps } = reactData
5384
+ const { rowExpandLazyLoadedMaps } = internalData
5372
5385
  const expandOpts = computeExpandOpts.value
5373
5386
  const { lazy } = expandOpts
5374
5387
  const rowid = getRowid($xeTable, row)
5375
5388
  if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
5376
- tableMethods.clearRowExpandLoaded(row)
5389
+ $xeTable.clearRowExpandLoaded(row)
5377
5390
  .then(() => handleAsyncRowExpand(row))
5378
5391
  }
5379
5392
  return nextTick()
@@ -5383,13 +5396,13 @@ export default defineComponent({
5383
5396
  warnLog('vxe.error.delFunc', ['reloadExpandContent', 'reloadRowExpand'])
5384
5397
  }
5385
5398
  // 即将废弃
5386
- return tableMethods.reloadRowExpand(row)
5399
+ return $xeTable.reloadRowExpand(row)
5387
5400
  },
5388
5401
  /**
5389
5402
  * 切换展开行
5390
5403
  */
5391
5404
  toggleRowExpand (row) {
5392
- return tableMethods.setRowExpand(row, !tableMethods.isRowExpandByRow(row))
5405
+ return $xeTable.setRowExpand(row, !$xeTable.isRowExpandByRow(row))
5393
5406
  },
5394
5407
  /**
5395
5408
  * 设置所有行的展开与否
@@ -5417,9 +5430,9 @@ export default defineComponent({
5417
5430
  * @param {Boolean} expanded 是否展开
5418
5431
  */
5419
5432
  setRowExpand (rows, expanded) {
5420
- const { rowExpandedMaps, rowExpandLazyLoadedMaps, expandColumn } = reactData
5421
- const { fullAllDataRowIdData } = internalData
5422
- let rExpandedMaps = { ...rowExpandedMaps }
5433
+ const { expandColumn } = reactData
5434
+ let { fullAllDataRowIdData, rowExpandedMaps, rowExpandLazyLoadedMaps } = internalData
5435
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
5423
5436
  const expandOpts = computeExpandOpts.value
5424
5437
  const { reserve, lazy, accordion, toggleMethod } = expandOpts
5425
5438
  const lazyRests: any[] = []
@@ -5431,28 +5444,29 @@ export default defineComponent({
5431
5444
  }
5432
5445
  if (accordion) {
5433
5446
  // 只能同时展开一个
5434
- rExpandedMaps = {}
5447
+ rowExpandedMaps = {}
5448
+ internalData.rowExpandedMaps = rowExpandedMaps
5435
5449
  rows = rows.slice(rows.length - 1, rows.length)
5436
5450
  }
5437
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
5438
5452
  if (expanded) {
5439
5453
  validRows.forEach((row: any) => {
5440
- const rowid = getRowid($xeTable, row)
5441
- if (!rExpandedMaps[rowid]) {
5454
+ const rowid = handleGetRowId(row)
5455
+ if (!rowExpandedMaps[rowid]) {
5442
5456
  const rowRest = fullAllDataRowIdData[rowid]
5443
5457
  const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid]
5444
5458
  if (isLoad) {
5445
5459
  lazyRests.push(handleAsyncRowExpand(row))
5446
5460
  } else {
5447
- rExpandedMaps[rowid] = row
5461
+ rowExpandedMaps[rowid] = row
5448
5462
  }
5449
5463
  }
5450
5464
  })
5451
5465
  } else {
5452
5466
  validRows.forEach(item => {
5453
- const rowid = getRowid($xeTable, item)
5454
- if (rExpandedMaps[rowid]) {
5455
- delete rExpandedMaps[rowid]
5467
+ const rowid = handleGetRowId(item)
5468
+ if (rowExpandedMaps[rowid]) {
5469
+ delete rowExpandedMaps[rowid]
5456
5470
  }
5457
5471
  })
5458
5472
  }
@@ -5460,7 +5474,7 @@ export default defineComponent({
5460
5474
  validRows.forEach((row) => handleRowExpandReserve(row, expanded))
5461
5475
  }
5462
5476
  }
5463
- reactData.rowExpandedMaps = rExpandedMaps
5477
+ reactData.rowExpandedFlag++
5464
5478
  return Promise.all(lazyRests)
5465
5479
  .then(() => nextTick())
5466
5480
  .then(() => $xeTable.recalculate(true))
@@ -5476,9 +5490,10 @@ export default defineComponent({
5476
5490
  * @param {Row} row 行对象
5477
5491
  */
5478
5492
  isRowExpandByRow (row) {
5479
- const { rowExpandedMaps } = reactData
5493
+ const { rowExpandedFlag } = reactData
5494
+ const { rowExpandedMaps } = internalData
5480
5495
  const rowid = getRowid($xeTable, row)
5481
- return !!rowExpandedMaps[rowid]
5496
+ return !!rowExpandedFlag && !!rowExpandedMaps[rowid]
5482
5497
  },
5483
5498
  isExpandByRow (row) {
5484
5499
  // 已废弃
@@ -5495,7 +5510,8 @@ export default defineComponent({
5495
5510
  const expandOpts = computeExpandOpts.value
5496
5511
  const { reserve } = expandOpts
5497
5512
  const expList = $xeTable.getRowExpandRecords()
5498
- reactData.rowExpandedMaps = {}
5513
+ internalData.rowExpandedMaps = {}
5514
+ reactData.rowExpandedFlag++
5499
5515
  if (reserve) {
5500
5516
  tableFullData.forEach((row) => handleRowExpandReserve(row, false))
5501
5517
  }
@@ -5516,7 +5532,7 @@ export default defineComponent({
5516
5532
  },
5517
5533
  getRowExpandRecords () {
5518
5534
  const rest: any[] = []
5519
- XEUtils.each(reactData.rowExpandedMaps, item => {
5535
+ XEUtils.each(internalData.rowExpandedMaps, item => {
5520
5536
  if (item) {
5521
5537
  rest.push(item)
5522
5538
  }
@@ -5525,7 +5541,7 @@ export default defineComponent({
5525
5541
  },
5526
5542
  getTreeExpandRecords () {
5527
5543
  const rest: any[] = []
5528
- XEUtils.each(reactData.treeExpandedMaps, item => {
5544
+ XEUtils.each(internalData.treeExpandedMaps, item => {
5529
5545
  if (item) {
5530
5546
  rest.push(item)
5531
5547
  }
@@ -5542,12 +5558,10 @@ export default defineComponent({
5542
5558
  return rowRest && !!rowRest.treeLoaded
5543
5559
  },
5544
5560
  clearTreeExpandLoaded (rows: any) {
5545
- const { fullAllDataRowIdData } = internalData
5561
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData
5546
5562
  const treeOpts = computeTreeOpts.value
5547
5563
  const { transform } = treeOpts
5548
- let tExpandedMaps: Record<string, any> = {}
5549
5564
  if (rows) {
5550
- tExpandedMaps = { ...reactData.treeExpandedMaps }
5551
5565
  if (!XEUtils.isArray(rows)) {
5552
5566
  rows = [rows]
5553
5567
  }
@@ -5556,8 +5570,8 @@ export default defineComponent({
5556
5570
  const rowRest = fullAllDataRowIdData[rowid]
5557
5571
  if (rowRest) {
5558
5572
  rowRest.treeLoaded = false
5559
- if (tExpandedMaps[rowid]) {
5560
- delete tExpandedMaps[rowid]
5573
+ if (treeExpandedMaps[rowid]) {
5574
+ delete treeExpandedMaps[rowid]
5561
5575
  }
5562
5576
  }
5563
5577
  })
@@ -5566,7 +5580,8 @@ export default defineComponent({
5566
5580
  rowRest.treeLoaded = false
5567
5581
  })
5568
5582
  }
5569
- reactData.treeExpandedMaps = {}
5583
+ internalData.treeExpandedMaps = {}
5584
+ reactData.treeExpandedFlag++
5570
5585
  if (transform) {
5571
5586
  handleVirtualTreeToList()
5572
5587
  return $xeTable.handleTableData()
@@ -5578,7 +5593,7 @@ export default defineComponent({
5578
5593
  * @param {Row} row 行对象
5579
5594
  */
5580
5595
  reloadTreeExpand (row) {
5581
- const { treeExpandLazyLoadedMaps } = reactData
5596
+ const { treeExpandLazyLoadedMaps } = internalData
5582
5597
  const treeOpts = computeTreeOpts.value
5583
5598
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
5584
5599
  const { transform, lazy } = treeOpts
@@ -5663,8 +5678,9 @@ export default defineComponent({
5663
5678
  * @param {Row} row 行对象
5664
5679
  */
5665
5680
  isTreeExpandByRow (row) {
5666
- const { treeExpandedMaps } = reactData
5667
- return !!treeExpandedMaps[getRowid($xeTable, row)]
5681
+ const { treeExpandedFlag } = reactData
5682
+ const { treeExpandedMaps } = internalData
5683
+ return !!treeExpandedFlag && !!treeExpandedMaps[getRowid($xeTable, row)]
5668
5684
  },
5669
5685
  /**
5670
5686
  * 手动清空树形节点的展开状态,数据会恢复成未展开的状态
@@ -5674,19 +5690,20 @@ export default defineComponent({
5674
5690
  const treeOpts = computeTreeOpts.value
5675
5691
  const childrenField = treeOpts.children || treeOpts.childrenField
5676
5692
  const { transform, reserve } = treeOpts
5677
- const expList = tableMethods.getTreeExpandRecords()
5678
- reactData.treeExpandedMaps = {}
5693
+ const expList = $xeTable.getTreeExpandRecords()
5694
+ internalData.treeExpandedMaps = {}
5695
+ reactData.treeExpandedFlag++
5679
5696
  if (reserve) {
5680
5697
  XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve(row, false), { children: childrenField })
5681
5698
  }
5682
- return tablePrivateMethods.handleTableData().then(() => {
5699
+ return $xeTable.handleTableData().then(() => {
5683
5700
  if (transform) {
5684
5701
  handleVirtualTreeToList()
5685
- return tablePrivateMethods.handleTableData()
5702
+ return $xeTable.handleTableData()
5686
5703
  }
5687
5704
  }).then(() => {
5688
5705
  if (expList.length) {
5689
- return tableMethods.recalculate()
5706
+ return $xeTable.recalculate()
5690
5707
  }
5691
5708
  })
5692
5709
  },
@@ -5945,7 +5962,13 @@ export default defineComponent({
5945
5962
  const { id } = props
5946
5963
  const customOpts = computeCustomOpts.value
5947
5964
  const { collectColumn } = internalData
5948
- 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
5949
5972
  const resizableData: Record<string, number> = {}
5950
5973
  const sortData: Record<string, number> = {}
5951
5974
  const visibleData: Record<string, boolean> = {}
@@ -5965,43 +5988,33 @@ export default defineComponent({
5965
5988
  let hasFixed = 0
5966
5989
  let hasVisible = 0
5967
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
+ }
5968
5996
  // 只支持一级
5969
5997
  if (!parentColumn) {
5970
- collectColumn.forEach((column) => {
5971
- const colKey = column.getKey()
5972
- if (colKey) {
5973
- hasSort = 1
5974
- sortData[colKey] = column.renderSortNumber
5975
- }
5976
- })
5977
- if (column.fixed !== column.defaultFixed) {
5978
- const colKey = column.getKey()
5979
- if (colKey) {
5980
- hasFixed = 1
5981
- fixedData[colKey] = column.fixed
5982
- }
5998
+ if (isCustomSort) {
5999
+ hasSort = 1
6000
+ sortData[colKey] = column.renderSortNumber
5983
6001
  }
5984
- }
5985
- if (column.resizeWidth) {
5986
- const colKey = column.getKey()
5987
- if (colKey) {
5988
- hasResizable = 1
5989
- resizableData[colKey] = column.renderWidth
6002
+ if (isCustomFixed && column.fixed !== column.defaultFixed) {
6003
+ hasFixed = 1
6004
+ fixedData[colKey] = column.fixed
5990
6005
  }
5991
6006
  }
5992
- if (!checkMethod || checkMethod({ column })) {
6007
+ if (isCustomResizable && column.resizeWidth) {
6008
+ hasResizable = 1
6009
+ resizableData[colKey] = column.renderWidth
6010
+ }
6011
+ if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
5993
6012
  if (!column.visible && column.defaultVisible) {
5994
- const colKey = column.getKey()
5995
- if (colKey) {
5996
- hasVisible = 1
5997
- visibleData[colKey] = false
5998
- }
6013
+ hasVisible = 1
6014
+ visibleData[colKey] = false
5999
6015
  } else if (column.visible && !column.defaultVisible) {
6000
- const colKey = column.getKey()
6001
- if (colKey) {
6002
- hasVisible = 1
6003
- visibleData[colKey] = true
6004
- }
6016
+ hasVisible = 1
6017
+ visibleData[colKey] = true
6005
6018
  }
6006
6019
  }
6007
6020
  })
@@ -6351,7 +6364,7 @@ export default defineComponent({
6351
6364
  if (keyboardOpts.enterToTab) {
6352
6365
  $xeTable.moveTabSelected(activeParams, hasShiftKey, evnt)
6353
6366
  } else {
6354
- $xeTable.moveSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt)
6367
+ $xeTable.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt)
6355
6368
  }
6356
6369
  } else {
6357
6370
  if (keyboardOpts.enterToTab) {
@@ -6383,7 +6396,7 @@ export default defineComponent({
6383
6396
  return
6384
6397
  }
6385
6398
  }
6386
- $xeTable.moveSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt)
6399
+ $xeTable.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt)
6387
6400
  if (enterMethod) {
6388
6401
  enterMethod(etrParams)
6389
6402
  }
@@ -6412,10 +6425,7 @@ export default defineComponent({
6412
6425
  if (!isEditStatus) {
6413
6426
  // 如果按下了方向键
6414
6427
  if (selected.row && selected.column) {
6415
- $xeTable.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt)
6416
- } else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
6417
- // 当前行按键上下移动
6418
- $xeTable.moveCurrentRow(isUpArrow, isDwArrow, evnt)
6428
+ $xeTable.moveArrowSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt)
6419
6429
  }
6420
6430
  }
6421
6431
  } else if (isTab && keyboardConfig && keyboardOpts.isTab) {
@@ -6793,8 +6803,9 @@ export default defineComponent({
6793
6803
  * @param {Event} evnt 事件
6794
6804
  * @param {Row} row 行对象
6795
6805
  */
6796
- const handleTooltip = (evnt: MouseEvent, tdEl: HTMLTableCellElement, overflowElem: HTMLElement, tipElem: HTMLElement | null, params: any) => {
6797
- if (!overflowElem) {
6806
+ const handleTooltip = (evnt: MouseEvent, tdEl: HTMLTableCellElement, overflowElem: HTMLElement | null, params: any) => {
6807
+ const tipOverEl = overflowElem || tdEl
6808
+ if (!tipOverEl) {
6798
6809
  return nextTick()
6799
6810
  }
6800
6811
  params.cell = tdEl
@@ -6804,9 +6815,8 @@ export default defineComponent({
6804
6815
  const { showAll, contentMethod } = tooltipOpts
6805
6816
  const customContent = contentMethod ? contentMethod(params) : null
6806
6817
  const useCustom = contentMethod && !XEUtils.eqNull(customContent)
6807
- const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? overflowElem.innerText : overflowElem.textContent).trim()
6808
- const isCellOverflow = overflowElem.scrollWidth > overflowElem.clientWidth
6809
- 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))) {
6810
6820
  Object.assign(tooltipStore, {
6811
6821
  row,
6812
6822
  column,
@@ -6816,7 +6826,7 @@ export default defineComponent({
6816
6826
  nextTick(() => {
6817
6827
  const $tooltip = refTooltip.value
6818
6828
  if ($tooltip && $tooltip.open) {
6819
- $tooltip.open(isCellOverflow ? overflowElem : (tipElem || overflowElem), formatText(content))
6829
+ $tooltip.open(tipOverEl, formatText(content))
6820
6830
  }
6821
6831
  })
6822
6832
  }
@@ -6958,19 +6968,15 @@ export default defineComponent({
6958
6968
  */
6959
6969
  cacheRowMap () {
6960
6970
  const { treeConfig } = props
6961
- const { treeExpandedMaps } = reactData
6962
- const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData
6971
+ const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData
6963
6972
  const treeOpts = computeTreeOpts.value
6964
6973
  const childrenField = treeOpts.children || treeOpts.childrenField
6965
6974
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
6966
6975
  const { lazy } = treeOpts
6967
- const rowkey = getRowkey($xeTable)
6968
- const isDeepKey = rowkey.indexOf('.') > -1
6969
6976
  const fullAllDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = { ...fullAllDataRowIdData } // 存在已删除数据
6970
6977
  const fullDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = {}
6971
- const treeTempExpandedMaps = { ...treeExpandedMaps }
6972
6978
 
6973
- const handleRowId = isDeepKey ? updateDeepRowKey : updateFastRowKey
6979
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable)
6974
6980
  const handleRowCache = (row: any, index: number, items: any, currIndex: number, parentRow: any, rowid: string, level: number, seq: string | number) => {
6975
6981
  let rowRest = fullAllDataRowIdMaps[rowid]
6976
6982
  if (!rowRest) {
@@ -6994,15 +7000,14 @@ export default defineComponent({
6994
7000
 
6995
7001
  if (treeConfig) {
6996
7002
  XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
6997
- const rowid = handleRowId(row, rowkey)
7003
+ const rowid = handleUpdateRowId(row)
6998
7004
  if (treeConfig && lazy) {
6999
- const treeExpRest = treeTempExpandedMaps[rowid]
7000
7005
  if (row[hasChildField] && row[childrenField] === undefined) {
7001
7006
  row[childrenField] = null
7002
7007
  }
7003
- if (treeExpRest) {
7008
+ if (treeExpandedMaps[rowid]) {
7004
7009
  if (!row[childrenField] || !row[childrenField].length) {
7005
- delete treeTempExpandedMaps[rowid]
7010
+ delete treeExpandedMaps[rowid]
7006
7011
  }
7007
7012
  }
7008
7013
  }
@@ -7010,28 +7015,23 @@ export default defineComponent({
7010
7015
  }, { children: childrenField })
7011
7016
  } else {
7012
7017
  tableFullData.forEach((row, index, items) => {
7013
- handleRowCache(row, index, items, index, null, handleRowId(row, rowkey), 0, index + 1)
7018
+ handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1)
7014
7019
  })
7015
7020
  }
7016
7021
 
7017
7022
  internalData.fullDataRowIdData = fullDataRowIdMaps
7018
7023
  internalData.fullAllDataRowIdData = fullAllDataRowIdMaps
7019
- reactData.treeExpandedMaps = treeTempExpandedMaps
7024
+ reactData.treeExpandedFlag++
7020
7025
  },
7021
7026
  cacheSourceMap (fullData) {
7022
7027
  const { treeConfig } = props
7023
7028
  const treeOpts = computeTreeOpts.value
7024
- let { sourceDataRowIdData } = internalData
7025
7029
  const sourceData = XEUtils.clone(fullData, true)
7026
- const rowkey = getRowkey($xeTable)
7027
- sourceDataRowIdData = internalData.sourceDataRowIdData = {}
7030
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable)
7031
+ const sourceRowIdData: Record<string, any> = {}
7028
7032
  const handleSourceRow = (row: any) => {
7029
- let rowid = getRowid($xeTable, row)
7030
- if (eqEmptyValue(rowid)) {
7031
- rowid = getRowUniqueId()
7032
- XEUtils.set(row, rowkey, rowid)
7033
- }
7034
- sourceDataRowIdData[rowid] = row
7033
+ const rowid = handleUpdateRowId(row)
7034
+ sourceRowIdData[rowid] = row
7035
7035
  }
7036
7036
  // 源数据缓存
7037
7037
  if (treeConfig) {
@@ -7040,6 +7040,7 @@ export default defineComponent({
7040
7040
  } else {
7041
7041
  sourceData.forEach(handleSourceRow)
7042
7042
  }
7043
+ internalData.sourceDataRowIdData = sourceRowIdData
7043
7044
  internalData.tableSourceData = sourceData
7044
7045
  },
7045
7046
  /**
@@ -7486,8 +7487,21 @@ export default defineComponent({
7486
7487
  }
7487
7488
  // 兼容老版本
7488
7489
 
7489
- let rest
7490
- 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) {
7491
7505
  if (next) {
7492
7506
  rest = next()
7493
7507
  }
@@ -7499,9 +7513,7 @@ export default defineComponent({
7499
7513
  },
7500
7514
  updateCheckboxStatus () {
7501
7515
  const { treeConfig } = props
7502
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData
7503
- const selectRowMaps = Object.assign({}, selectCheckboxMaps)
7504
- const halfRowMaps = Object.assign({}, treeIndeterminateMaps)
7516
+ const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData
7505
7517
  const treeOpts = computeTreeOpts.value
7506
7518
  const { transform, mapChildrenField } = treeOpts
7507
7519
  const childrenField = treeOpts.children || treeOpts.childrenField
@@ -7513,10 +7525,11 @@ export default defineComponent({
7513
7525
  }
7514
7526
  // 树结构
7515
7527
  if (treeConfig) {
7528
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
7516
7529
  const childRowMaps: Record<string, number> = {}
7517
7530
  const childRowList: any[][] = []
7518
7531
  XEUtils.eachTree(afterTreeFullData, (row) => {
7519
- const rowid = getRowid($xeTable, row)
7532
+ const rowid = handleGetRowId(row)
7520
7533
  const childList = row[transform ? mapChildrenField : childrenField]
7521
7534
  if (childList && childList.length && !childRowMaps[rowid]) {
7522
7535
  childRowMaps[rowid] = 1
@@ -7533,29 +7546,29 @@ export default defineComponent({
7533
7546
  childList.forEach(
7534
7547
  checkMethod
7535
7548
  ? (item) => {
7536
- const childRowid = getRowid($xeTable, item)
7537
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid]
7549
+ const childRowid = handleGetRowId(item)
7550
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid]
7538
7551
  if (checkMethod({ row: item })) {
7539
7552
  if (isSelect) {
7540
7553
  sLen++
7541
- } else if (halfRowMaps[childRowid]) {
7554
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7542
7555
  hLen++
7543
7556
  }
7544
7557
  vLen++
7545
7558
  } else {
7546
7559
  if (isSelect) {
7547
7560
  sLen++
7548
- } else if (halfRowMaps[childRowid]) {
7561
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7549
7562
  hLen++
7550
7563
  }
7551
7564
  }
7552
7565
  }
7553
7566
  : item => {
7554
- const childRowid = getRowid($xeTable, item)
7555
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid]
7567
+ const childRowid = handleGetRowId(item)
7568
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid]
7556
7569
  if (isSelect) {
7557
7570
  sLen++
7558
- } else if (halfRowMaps[childRowid]) {
7571
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7559
7572
  hLen++
7560
7573
  }
7561
7574
  vLen++
@@ -7568,36 +7581,35 @@ export default defineComponent({
7568
7581
  }
7569
7582
  if (isSelected) {
7570
7583
  if (!checkField) {
7571
- selectRowMaps[rowid] = row
7584
+ selectCheckboxMaps[rowid] = row
7572
7585
  }
7573
- if (halfRowMaps[rowid]) {
7574
- delete halfRowMaps[rowid]
7586
+ if (treeIndeterminateRowMaps[rowid]) {
7587
+ delete treeIndeterminateRowMaps[rowid]
7575
7588
  }
7576
7589
  } else {
7577
7590
  if (!checkField) {
7578
- if (selectRowMaps[rowid]) {
7579
- delete selectRowMaps[rowid]
7591
+ if (selectCheckboxMaps[rowid]) {
7592
+ delete selectCheckboxMaps[rowid]
7580
7593
  }
7581
7594
  }
7582
7595
  if (halfSelect) {
7583
- halfRowMaps[rowid] = row
7596
+ treeIndeterminateRowMaps[rowid] = row
7584
7597
  } else {
7585
- if (halfRowMaps[rowid]) {
7586
- delete halfRowMaps[rowid]
7598
+ if (treeIndeterminateRowMaps[rowid]) {
7599
+ delete treeIndeterminateRowMaps[rowid]
7587
7600
  }
7588
7601
  }
7589
7602
  }
7590
7603
  })
7591
7604
  }
7592
- reactData.selectCheckboxMaps = selectRowMaps
7593
- reactData.treeIndeterminateMaps = halfRowMaps
7605
+ reactData.updateCheckboxFlag++
7594
7606
  },
7595
7607
  updateAllCheckboxStatus () {
7596
7608
  const { treeConfig } = props
7597
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData
7609
+ const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData
7598
7610
  const checkboxOpts = computeCheckboxOpts.value
7599
7611
  const { checkField, checkMethod, showReserveStatus } = checkboxOpts
7600
- const { afterFullData, afterTreeFullData, checkboxReserveRowMap } = internalData
7612
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
7601
7613
 
7602
7614
  let sLen = 0 // 已选
7603
7615
  let hLen = 0 // 半选
@@ -7606,29 +7618,29 @@ export default defineComponent({
7606
7618
  const rootList = (treeConfig ? afterTreeFullData : afterFullData)
7607
7619
  rootList.forEach(checkMethod
7608
7620
  ? row => {
7609
- const childRowid = getRowid($xeTable, row)
7621
+ const childRowid = handleGetRowId(row)
7610
7622
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid]
7611
7623
  if (checkMethod({ row })) {
7612
7624
  if (selected) {
7613
7625
  sLen++
7614
- } else if (treeIndeterminateMaps[childRowid]) {
7626
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7615
7627
  hLen++
7616
7628
  }
7617
7629
  vLen++
7618
7630
  } else {
7619
7631
  if (selected) {
7620
7632
  sLen++
7621
- } else if (treeIndeterminateMaps[childRowid]) {
7633
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7622
7634
  hLen++
7623
7635
  }
7624
7636
  }
7625
7637
  }
7626
7638
  : row => {
7627
- const childRowid = getRowid($xeTable, row)
7639
+ const childRowid = handleGetRowId(row)
7628
7640
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid]
7629
7641
  if (selected) {
7630
7642
  sLen++
7631
- } else if (treeIndeterminateMaps[childRowid]) {
7643
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7632
7644
  hLen++
7633
7645
  }
7634
7646
  vLen++
@@ -7655,13 +7667,13 @@ export default defineComponent({
7655
7667
  */
7656
7668
  handleBatchSelectRows (rows, checked, isForce) {
7657
7669
  const { treeConfig } = props
7658
- const { selectCheckboxMaps } = reactData
7659
- const selectRowMaps = Object.assign({}, selectCheckboxMaps)
7670
+ const { selectCheckboxMaps } = internalData
7660
7671
  const treeOpts = computeTreeOpts.value
7661
7672
  const { transform, mapChildrenField } = treeOpts
7662
7673
  const childrenField = treeOpts.children || treeOpts.childrenField
7663
7674
  const checkboxOpts = computeCheckboxOpts.value
7664
7675
  const { checkField, checkStrictly, checkMethod } = checkboxOpts
7676
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
7665
7677
  // indeterminateField 仅支持读取
7666
7678
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
7667
7679
  if (checkField) {
@@ -7677,18 +7689,17 @@ export default defineComponent({
7677
7689
  handleCheckboxReserveRow(row, checked)
7678
7690
  }
7679
7691
  }, { children: transform ? mapChildrenField : childrenField })
7680
- reactData.selectCheckboxMaps = selectRowMaps
7692
+ reactData.updateCheckboxFlag++
7681
7693
  return
7682
- } else {
7683
- // 列表
7684
- rows.forEach(row => {
7685
- if (isForce || (!checkMethod || checkMethod({ row }))) {
7686
- XEUtils.set(row, checkField, checked)
7687
- handleCheckboxReserveRow(row, checked)
7688
- }
7689
- })
7690
7694
  }
7691
- 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++
7692
7703
  return
7693
7704
  }
7694
7705
 
@@ -7696,39 +7707,39 @@ export default defineComponent({
7696
7707
  if (treeConfig && !checkStrictly) {
7697
7708
  // 更新子节点状态
7698
7709
  XEUtils.eachTree(rows, (row) => {
7699
- const rowid = getRowid($xeTable, row)
7710
+ const rowid = handleGetRowId(row)
7700
7711
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7701
7712
  if (checked) {
7702
- selectRowMaps[rowid] = row
7713
+ selectCheckboxMaps[rowid] = row
7703
7714
  } else {
7704
- if (selectRowMaps[rowid]) {
7705
- delete selectRowMaps[rowid]
7715
+ if (selectCheckboxMaps[rowid]) {
7716
+ delete selectCheckboxMaps[rowid]
7706
7717
  }
7707
7718
  }
7708
7719
  handleCheckboxReserveRow(row, checked)
7709
7720
  }
7710
7721
  }, { children: transform ? mapChildrenField : childrenField })
7711
- reactData.selectCheckboxMaps = selectRowMaps
7722
+ reactData.updateCheckboxFlag++
7712
7723
  return
7713
7724
  }
7714
7725
 
7715
7726
  // 列表
7716
7727
  rows.forEach(row => {
7717
- const rowid = getRowid($xeTable, row)
7728
+ const rowid = handleGetRowId(row)
7718
7729
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7719
7730
  if (checked) {
7720
- if (!selectRowMaps[rowid]) {
7721
- selectRowMaps[rowid] = row
7731
+ if (!selectCheckboxMaps[rowid]) {
7732
+ selectCheckboxMaps[rowid] = row
7722
7733
  }
7723
7734
  } else {
7724
- if (selectRowMaps[rowid]) {
7725
- delete selectRowMaps[rowid]
7735
+ if (selectCheckboxMaps[rowid]) {
7736
+ delete selectCheckboxMaps[rowid]
7726
7737
  }
7727
7738
  }
7728
7739
  handleCheckboxReserveRow(row, checked)
7740
+ reactData.updateCheckboxFlag++
7729
7741
  }
7730
7742
  })
7731
- reactData.selectCheckboxMaps = selectRowMaps
7732
7743
  },
7733
7744
  /**
7734
7745
  * 即将移除
@@ -7776,7 +7787,7 @@ export default defineComponent({
7776
7787
  return
7777
7788
  }
7778
7789
  if (tooltipStore.column !== column || !tooltipStore.visible) {
7779
- handleTooltip(evnt, thEl, cellEl, null, params)
7790
+ handleTooltip(evnt, thEl, thEl.querySelector<HTMLElement>('.vxe-cell--title') || cellEl, params)
7780
7791
  }
7781
7792
  },
7782
7793
  /**
@@ -7803,7 +7814,7 @@ export default defineComponent({
7803
7814
  }
7804
7815
  }
7805
7816
  if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
7806
- 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)
7807
7818
  }
7808
7819
  },
7809
7820
  /**
@@ -7812,10 +7823,10 @@ export default defineComponent({
7812
7823
  triggerFooterTooltipEvent (evnt, params) {
7813
7824
  const { column } = params
7814
7825
  const { tooltipStore } = reactData
7815
- const cell = evnt.currentTarget as HTMLTableCellElement
7826
+ const tdEl = evnt.currentTarget as HTMLTableCellElement
7816
7827
  handleTargetEnterEvent(tooltipStore.column !== column || !!tooltipStore.row)
7817
7828
  if (tooltipStore.column !== column || !tooltipStore.visible) {
7818
- 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)
7819
7830
  }
7820
7831
  },
7821
7832
  handleTargetLeaveEvent () {
@@ -7839,17 +7850,18 @@ export default defineComponent({
7839
7850
  const { _lastResizeTime } = internalData
7840
7851
  const sortOpts = computeSortOpts.value
7841
7852
  const columnOpts = computeColumnOpts.value
7853
+ const currentColumnOpts = computeCurrentColumnOpts.value
7842
7854
  const { column } = params
7843
7855
  const cell = evnt.currentTarget
7844
7856
  const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300
7845
7857
  const triggerSort = getEventTargetNode(evnt, cell, 'vxe-cell--sort').flag
7846
7858
  const triggerFilter = getEventTargetNode(evnt, cell, 'vxe-cell--filter').flag
7847
7859
  if (sortOpts.trigger === 'cell' && !(triggerResizable || triggerSort || triggerFilter)) {
7848
- tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column))
7860
+ $xeTable.triggerSortEvent(evnt, column, getNextSortOrder(column))
7849
7861
  }
7850
7862
  dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt)
7851
- if (columnOpts.isCurrent || props.highlightCurrentColumn) {
7852
- tablePrivateMethods.triggerCurrentColumnEvent(evnt, params)
7863
+ if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
7864
+ $xeTable.triggerCurrentColumnEvent(evnt, params)
7853
7865
  }
7854
7866
  },
7855
7867
  triggerHeaderCellDblclickEvent (evnt, params) {
@@ -7861,7 +7873,7 @@ export default defineComponent({
7861
7873
  * 如果是双击模式,则单击后选中状态
7862
7874
  */
7863
7875
  triggerCellClickEvent (evnt, params) {
7864
- const { highlightCurrentRow, editConfig } = props
7876
+ const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props
7865
7877
  const { editStore, isDragResize } = reactData
7866
7878
  if (isDragResize) {
7867
7879
  return
@@ -7873,6 +7885,8 @@ export default defineComponent({
7873
7885
  const checkboxOpts = computeCheckboxOpts.value
7874
7886
  const keyboardOpts = computeKeyboardOpts.value
7875
7887
  const rowOpts = computeRowOpts.value
7888
+ const columnOpts = computeColumnOpts.value
7889
+ const currentColumnOpts = computeCurrentColumnOpts.value
7876
7890
  const { actived, focused } = editStore
7877
7891
  const { row, column } = params
7878
7892
  const { type, treeNode } = column
@@ -7888,29 +7902,35 @@ export default defineComponent({
7888
7902
  if (!triggerCheckbox && !triggerRadio) {
7889
7903
  // 如果是展开行
7890
7904
  if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
7891
- tablePrivateMethods.triggerRowExpandEvent(evnt, params)
7905
+ $xeTable.triggerRowExpandEvent(evnt, params)
7892
7906
  }
7893
7907
  // 如果是树形表格
7894
7908
  if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
7895
- tablePrivateMethods.triggerTreeExpandEvent(evnt, params)
7909
+ $xeTable.triggerTreeExpandEvent(evnt, params)
7896
7910
  }
7897
7911
  }
7898
7912
  // 如果点击了树节点
7899
7913
  if (!triggerTreeNode) {
7900
7914
  if (!triggerExpandNode) {
7901
- // 如果是高亮行
7915
+ // 如果是当前行
7902
7916
  if (rowOpts.isCurrent || highlightCurrentRow) {
7903
7917
  if (!triggerCheckbox && !triggerRadio) {
7904
- 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)
7905
7925
  }
7906
7926
  }
7907
7927
  // 如果是单选框
7908
7928
  if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
7909
- tablePrivateMethods.triggerRadioRowEvent(evnt, params)
7929
+ $xeTable.triggerRadioRowEvent(evnt, params)
7910
7930
  }
7911
7931
  // 如果是复选框
7912
7932
  if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
7913
- tablePrivateMethods.handleToggleCheckRowEvent(evnt, params)
7933
+ $xeTable.handleToggleCheckRowEvent(evnt, params)
7914
7934
  }
7915
7935
  }
7916
7936
  // 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
@@ -7985,7 +8005,7 @@ export default defineComponent({
7985
8005
  dispatchEvent('cell-dblclick', params, evnt)
7986
8006
  },
7987
8007
  handleToggleCheckRowEvent (evnt, params) {
7988
- const { selectCheckboxMaps } = reactData
8008
+ const { selectCheckboxMaps } = internalData
7989
8009
  const checkboxOpts = computeCheckboxOpts.value
7990
8010
  const { checkField, trigger } = checkboxOpts
7991
8011
  const { row } = params
@@ -7999,43 +8019,45 @@ export default defineComponent({
7999
8019
  checked = !selectCheckboxMaps[getRowid($xeTable, row)]
8000
8020
  }
8001
8021
  if (evnt) {
8002
- tablePrivateMethods.triggerCheckRowEvent(evnt, params, checked)
8022
+ $xeTable.triggerCheckRowEvent(evnt, params, checked)
8003
8023
  } else {
8004
- tablePrivateMethods.handleBatchSelectRows([row], checked)
8005
- tablePrivateMethods.checkSelectionStatus()
8024
+ $xeTable.handleBatchSelectRows([row], checked)
8025
+ $xeTable.checkSelectionStatus()
8006
8026
  }
8007
8027
  },
8008
8028
  triggerCheckRowEvent (evnt: MouseEvent, params, checked) {
8009
- const checkboxOpts = computeCheckboxOpts.value
8010
8029
  const { row } = params
8011
8030
  const { afterFullData } = internalData
8031
+ const checkboxOpts = computeCheckboxOpts.value
8012
8032
  const { checkMethod, trigger } = checkboxOpts
8013
8033
  if (trigger === 'manual') {
8014
8034
  return
8015
8035
  }
8016
8036
  evnt.stopPropagation()
8017
8037
  if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
8018
- const checkboxRecords = tableMethods.getCheckboxRecords()
8038
+ const checkboxRecords = $xeTable.getCheckboxRecords()
8019
8039
  if (checkboxRecords.length) {
8020
8040
  const firstRow = checkboxRecords[0]
8021
- const _rowIndex = tableMethods.getVTRowIndex(row)
8022
- const _firstRowIndex = tableMethods.getVTRowIndex(firstRow)
8041
+ const _rowIndex = $xeTable.getVTRowIndex(row)
8042
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow)
8023
8043
  if (_rowIndex !== _firstRowIndex) {
8024
- tableMethods.setAllCheckboxRow(false)
8044
+ $xeTable.setAllCheckboxRow(false)
8025
8045
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1)
8026
- handleCheckedCheckboxRow(rangeRows, true, false)
8046
+ nextTick(() => {
8047
+ handleCheckedCheckboxRow(rangeRows, true, false)
8048
+ })
8027
8049
  dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt)
8028
8050
  return
8029
8051
  }
8030
8052
  }
8031
8053
  }
8032
8054
  if (!checkMethod || checkMethod({ row })) {
8033
- tablePrivateMethods.handleBatchSelectRows([row], checked)
8034
- tablePrivateMethods.checkSelectionStatus()
8055
+ $xeTable.handleBatchSelectRows([row], checked)
8056
+ $xeTable.checkSelectionStatus()
8035
8057
  dispatchEvent('checkbox-change', Object.assign({
8036
- records: tableMethods.getCheckboxRecords(),
8037
- reserves: tableMethods.getCheckboxReserveRecords(),
8038
- indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
8058
+ records: () => $xeTable.getCheckboxRecords(),
8059
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
8060
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
8039
8061
  checked
8040
8062
  }, params), evnt)
8041
8063
  }
@@ -8106,7 +8128,8 @@ export default defineComponent({
8106
8128
  * 展开行事件
8107
8129
  */
8108
8130
  triggerRowExpandEvent (evnt, params) {
8109
- const { rowExpandLazyLoadedMaps, expandColumn: column } = reactData
8131
+ const { expandColumn: column } = reactData
8132
+ const { rowExpandLazyLoadedMaps } = internalData
8110
8133
  const expandOpts = computeExpandOpts.value
8111
8134
  const { row } = params
8112
8135
  const { lazy, trigger } = expandOpts
@@ -8116,18 +8139,18 @@ export default defineComponent({
8116
8139
  evnt.stopPropagation()
8117
8140
  const rowid = getRowid($xeTable, row)
8118
8141
  if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
8119
- const expanded = !tableMethods.isRowExpandByRow(row)
8120
- const columnIndex = tableMethods.getColumnIndex(column)
8121
- const $columnIndex = tableMethods.getVMColumnIndex(column)
8122
- 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)
8123
8146
  dispatchEvent('toggle-row-expand', {
8124
8147
  expanded,
8125
8148
  column,
8126
8149
  columnIndex,
8127
8150
  $columnIndex,
8128
8151
  row,
8129
- rowIndex: tableMethods.getRowIndex(row),
8130
- $rowIndex: tableMethods.getVMRowIndex(row)
8152
+ rowIndex: $xeTable.getRowIndex(row),
8153
+ $rowIndex: $xeTable.getVMRowIndex(row)
8131
8154
  }, evnt)
8132
8155
  }
8133
8156
  },
@@ -8135,7 +8158,7 @@ export default defineComponent({
8135
8158
  * 展开树节点事件
8136
8159
  */
8137
8160
  triggerTreeExpandEvent (evnt, params) {
8138
- const { treeExpandLazyLoadedMaps } = reactData
8161
+ const { treeExpandLazyLoadedMaps } = internalData
8139
8162
  const treeOpts = computeTreeOpts.value
8140
8163
  const { row, column } = params
8141
8164
  const { lazy, trigger } = treeOpts
@@ -8145,10 +8168,10 @@ export default defineComponent({
8145
8168
  evnt.stopPropagation()
8146
8169
  const rowid = getRowid($xeTable, row)
8147
8170
  if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
8148
- const expanded = !tableMethods.isTreeExpandByRow(row)
8149
- const columnIndex = tableMethods.getColumnIndex(column)
8150
- const $columnIndex = tableMethods.getVMColumnIndex(column)
8151
- 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)
8152
8175
  dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt)
8153
8176
  }
8154
8177
  },
@@ -8292,12 +8315,11 @@ export default defineComponent({
8292
8315
  handleRowDragSwapEvent (evnt, isSyncRow, dragRow, prevDragRow, prevDragPos, prevDragToChild) {
8293
8316
  const { treeConfig, dragConfig } = props
8294
8317
  const rowDragOpts = computeRowDragOpts.value
8295
- const { fullAllDataRowIdData } = internalData
8318
+ const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData
8296
8319
  const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts
8297
8320
  const treeOpts = computeTreeOpts.value
8298
8321
  const { transform, rowField, mapChildrenField, parentField } = treeOpts
8299
8322
  const childrenField = treeOpts.children || treeOpts.childrenField
8300
- const { afterFullData, tableFullData } = internalData
8301
8323
  const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null)
8302
8324
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0
8303
8325
  const errRest = {
@@ -9040,6 +9062,7 @@ export default defineComponent({
9040
9062
  return
9041
9063
  }
9042
9064
  }
9065
+
9043
9066
  let scrollTop = yHandleEl.scrollTop
9044
9067
  let scrollLeft = xHandleEl.scrollLeft
9045
9068
  if (leftScrollElem && fixedType === 'left') {
@@ -9169,10 +9192,10 @@ export default defineComponent({
9169
9192
  }
9170
9193
 
9171
9194
  const { highlightHoverRow } = tableProps
9172
- const { scrollXLoad, scrollYLoad } = reactData
9195
+ const { scrollXLoad, scrollYLoad, expandColumn } = reactData
9173
9196
  const leftFixedWidth = computeLeftFixedWidth.value
9174
9197
  const rightFixedWidth = computeRightFixedWidth.value
9175
- if (!(scrollYLoad || leftFixedWidth || rightFixedWidth)) {
9198
+ if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
9176
9199
  return
9177
9200
  }
9178
9201
 
@@ -9206,7 +9229,6 @@ export default defineComponent({
9206
9229
  if (isTopWheel ? currScrollTop <= 0 : currScrollTop >= bodyScrollElem.scrollHeight - bodyScrollElem.clientHeight) {
9207
9230
  return
9208
9231
  }
9209
-
9210
9232
  const scrollTop = currScrollTop + deltaTop
9211
9233
  const scrollLeft = bodyScrollElem.scrollLeft + deltaLeft
9212
9234
  const isRollX = scrollLeft !== lastScrollLeft
@@ -9425,8 +9447,8 @@ export default defineComponent({
9425
9447
  },
9426
9448
  // 更新纵向 Y 可视渲染上下剩余空间大小
9427
9449
  updateScrollYSpace () {
9428
- const { isAllOverflow, scrollYLoad, expandColumn, rowExpandedMaps } = reactData
9429
- const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData
9450
+ const { isAllOverflow, scrollYLoad, expandColumn } = reactData
9451
+ const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData
9430
9452
  const { startIndex } = scrollYStore
9431
9453
  const expandOpts = computeExpandOpts.value
9432
9454
  const rowOpts = computeRowOpts.value
@@ -9775,6 +9797,7 @@ export default defineComponent({
9775
9797
  ]
9776
9798
 
9777
9799
  if (expandColumn) {
9800
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
9778
9801
  tableRowExpandedList.forEach((row) => {
9779
9802
  const expandOpts = computeExpandOpts.value
9780
9803
  const { height: expandHeight, padding } = expandOpts
@@ -9782,7 +9805,7 @@ export default defineComponent({
9782
9805
  const treeOpts = computeTreeOpts.value
9783
9806
  const { transform, seqMode } = treeOpts
9784
9807
  const cellStyle: Record<string, string> = {}
9785
- const rowid = getRowid($xeTable, row)
9808
+ const rowid = handleGetRowId(row)
9786
9809
  const rest = fullAllDataRowIdData[rowid]
9787
9810
  let rowLevel = 0
9788
9811
  let seq: string | number = -1