vxe-table 4.12.0-beta.9 → 4.12.1

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 +29 -33
  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 -5
  32. package/es/table/render/index.js +3 -3
  33. package/es/table/src/body.js +45 -27
  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 +501 -512
  40. package/es/table/src/util.js +34 -6
  41. package/es/ui/index.js +4 -3
  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 +12594 -1185
  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 +36 -45
  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 +6 -10
  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 +53 -26
  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 +594 -564
  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 +4 -3
  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 +30 -33
  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 -5
  170. package/packages/table/render/index.ts +3 -4
  171. package/packages/table/src/body.ts +46 -27
  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 +513 -518
  178. package/packages/table/src/util.ts +39 -6
  179. package/packages/ui/index.ts +3 -2
  180. /package/es/{iconfont.1741337003908.ttf → iconfont.1743045589885.ttf} +0 -0
  181. /package/es/{iconfont.1741337003908.woff → iconfont.1743045589885.woff} +0 -0
  182. /package/es/{iconfont.1741337003908.woff2 → iconfont.1743045589885.woff2} +0 -0
  183. /package/lib/{iconfont.1741337003908.ttf → iconfont.1743045589885.ttf} +0 -0
  184. /package/lib/{iconfont.1741337003908.woff → iconfont.1743045589885.woff} +0 -0
  185. /package/lib/{iconfont.1741337003908.woff2 → iconfont.1743045589885.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,
@@ -196,9 +183,7 @@ export default defineComponent({
196
183
  focused: {
197
184
  row: null,
198
185
  column: null
199
- },
200
- insertMaps: {},
201
- removeMaps: {}
186
+ }
202
187
  },
203
188
  // 存放 tooltip 相关信息
204
189
  tooltipStore: {
@@ -257,6 +242,13 @@ export default defineComponent({
257
242
  isFooter: false
258
243
  },
259
244
 
245
+ rowExpandedFlag: 1,
246
+ treeExpandedFlag: 1,
247
+ updateCheckboxFlag: 1,
248
+ pendingRowFlag: 1,
249
+ insertRowFlag: 1,
250
+ removeRowFlag: 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
 
@@ -361,7 +354,23 @@ export default defineComponent({
361
354
  fullDataRowIdData: {},
362
355
  fullColumnIdData: {},
363
356
  fullColumnFieldData: {},
364
- // prevDragRow: null,
357
+
358
+ // 已展开的行集合
359
+ rowExpandedMaps: {},
360
+ // 懒加载中的展开行的集合
361
+ rowExpandLazyLoadedMaps: {},
362
+ // 已展开树节点集合
363
+ treeExpandedMaps: {},
364
+ // 懒加载中的树节点的集合
365
+ treeExpandLazyLoadedMaps: {},
366
+ // 复选框属性,已选中的行集合
367
+ selectCheckboxMaps: {},
368
+ // 已标记的对象集
369
+ pendingRowMaps: {},
370
+ // 已新增的临时行
371
+ insertRowMaps: {},
372
+ // 已删除行
373
+ removeRowMaps: {},
365
374
 
366
375
  inited: false,
367
376
  tooltipTimeout: null,
@@ -433,7 +442,7 @@ export default defineComponent({
433
442
  })
434
443
 
435
444
  const computeValidOpts = computed(() => {
436
- return Object.assign({}, getConfig().table.validConfig, props.validConfig) as VxeTablePropTypes.ValidOpts
445
+ return Object.assign({}, getConfig().table.validConfig, props.validConfig)
437
446
  })
438
447
 
439
448
  /**
@@ -441,12 +450,12 @@ export default defineComponent({
441
450
  */
442
451
  const computeSXOpts = computed(() => {
443
452
  const virtualXOpts = computeVirtualXOpts.value
444
- return virtualXOpts as VxeTablePropTypes.SXOpts
453
+ return virtualXOpts
445
454
  })
446
455
 
447
456
  const computeScrollXThreshold = computed(() => {
448
- const sXOpts = computeSXOpts.value
449
- const { threshold } = sXOpts
457
+ const virtualXOpts = computeVirtualXOpts.value
458
+ const { threshold } = virtualXOpts
450
459
  if (threshold) {
451
460
  return XEUtils.toNumber(threshold)
452
461
  }
@@ -458,15 +467,15 @@ export default defineComponent({
458
467
  */
459
468
  const computeSYOpts = computed(() => {
460
469
  const virtualYOpts = computeVirtualYOpts.value
461
- return virtualYOpts as VxeTablePropTypes.SYOpts
470
+ return virtualYOpts
462
471
  })
463
472
 
464
473
  const computeVirtualXOpts = computed(() => {
465
- return Object.assign({}, getConfig().table.scrollX, getConfig().table.virtualXConfig, props.scrollX, props.virtualXConfig) as VxeTablePropTypes.VirtualXConfig
474
+ return Object.assign({}, getConfig().table.scrollX, getConfig().table.virtualXConfig, props.scrollX, props.virtualXConfig) as VxeTablePropTypes.VirtualXConfig & { gt: number }
466
475
  })
467
476
 
468
477
  const computeVirtualYOpts = computed(() => {
469
- return Object.assign({}, getConfig().table.scrollY, getConfig().table.virtualYConfig, props.scrollY, props.virtualYConfig) as VxeTablePropTypes.VirtualYConfig
478
+ return Object.assign({}, getConfig().table.scrollY, getConfig().table.virtualYConfig, props.scrollY, props.virtualYConfig) as VxeTablePropTypes.VirtualYConfig & { gt: number }
470
479
  })
471
480
 
472
481
  const computeScrollbarOpts = computed(() => {
@@ -484,8 +493,8 @@ export default defineComponent({
484
493
  })
485
494
 
486
495
  const computeScrollYThreshold = computed(() => {
487
- const sYOpts = computeSYOpts.value
488
- const { threshold } = sYOpts
496
+ const virtualYOpts = computeVirtualYOpts.value
497
+ const { threshold } = virtualYOpts
489
498
  if (threshold) {
490
499
  return XEUtils.toNumber(threshold)
491
500
  }
@@ -503,23 +512,43 @@ export default defineComponent({
503
512
  })
504
513
 
505
514
  const computeColumnOpts = computed(() => {
506
- return Object.assign({}, getConfig().table.columnConfig, props.columnConfig) as VxeTablePropTypes.ColumnOpts
515
+ return Object.assign({}, getConfig().table.columnConfig, props.columnConfig)
516
+ })
517
+
518
+ const computeCurrentColumnOpts = computed(() => {
519
+ return Object.assign({}, getConfig().table.currentColumnConfig, props.currentColumnConfig)
507
520
  })
508
521
 
509
522
  const computeCellOpts = computed(() => {
510
- return Object.assign({}, getConfig().table.cellConfig, props.cellConfig)
523
+ const cellOpts = Object.assign({}, getConfig().table.cellConfig, props.cellConfig)
524
+ if (cellOpts.height) {
525
+ cellOpts.height = XEUtils.toNumber(cellOpts.height)
526
+ }
527
+ return cellOpts
511
528
  })
512
529
 
513
530
  const computeHeaderCellOpts = computed(() => {
514
- return Object.assign({}, getConfig().table.headerCellConfig, props.headerCellConfig)
531
+ const headerCellOpts = Object.assign({}, getConfig().table.headerCellConfig, props.headerCellConfig)
532
+ if (headerCellOpts.height) {
533
+ headerCellOpts.height = XEUtils.toNumber(headerCellOpts.height)
534
+ }
535
+ return headerCellOpts
515
536
  })
516
537
 
517
538
  const computeFooterCellOpts = computed(() => {
518
- return Object.assign({}, getConfig().table.footerCellConfig, props.footerCellConfig)
539
+ const footerCellOpts = Object.assign({}, getConfig().table.footerCellConfig, props.footerCellConfig)
540
+ if (footerCellOpts.height) {
541
+ footerCellOpts.height = XEUtils.toNumber(footerCellOpts.height)
542
+ }
543
+ return footerCellOpts
519
544
  })
520
545
 
521
546
  const computeRowOpts = computed(() => {
522
- return Object.assign({}, getConfig().table.rowConfig, props.rowConfig) as VxeTablePropTypes.RowOpts
547
+ return Object.assign({}, getConfig().table.rowConfig, props.rowConfig)
548
+ })
549
+
550
+ const computeCurrentRowOpts = computed(() => {
551
+ return Object.assign({}, getConfig().table.currentRowConfig, props.currentRowConfig)
523
552
  })
524
553
 
525
554
  const computeRowDragOpts = computed(() => {
@@ -697,12 +726,14 @@ export default defineComponent({
697
726
  })
698
727
 
699
728
  const computeTableRowExpandedList = computed(() => {
700
- const { rowExpandedMaps, tableData, expandColumn } = reactData
729
+ const { rowExpandedFlag, tableData, expandColumn } = reactData
730
+ const { rowExpandedMaps } = internalData
731
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
701
732
  const expandList: any[] = []
702
- if (expandColumn) {
733
+ if (expandColumn && rowExpandedFlag) {
703
734
  const rowKeys: Record<string, boolean> = {}
704
735
  tableData.forEach(row => {
705
- rowKeys[getRowid($xeTable, row)] = true
736
+ rowKeys[handleGetRowId(row)] = true
706
737
  })
707
738
  XEUtils.each(rowExpandedMaps, (row, rowid) => {
708
739
  if (rowKeys[rowid]) {
@@ -823,13 +854,16 @@ export default defineComponent({
823
854
  computeScrollbarXToTop,
824
855
  computeScrollbarYToLeft,
825
856
  computeColumnOpts,
857
+ computeCurrentColumnOpts,
826
858
  computeScrollXThreshold,
827
859
  computeScrollYThreshold,
860
+ computeRowHeightMaps,
828
861
  computeDefaultRowHeight,
829
862
  computeCellOpts,
830
863
  computeHeaderCellOpts,
831
864
  computeFooterCellOpts,
832
865
  computeRowOpts,
866
+ computeCurrentRowOpts,
833
867
  computeRowDragOpts,
834
868
  computeColumnDragOpts,
835
869
  computeResizeOpts,
@@ -880,6 +914,7 @@ export default defineComponent({
880
914
  getRefMaps: () => refMaps,
881
915
  getComputeMaps: () => computeMaps,
882
916
 
917
+ xeGrid: $xeGrid,
883
918
  xegrid: $xeGrid
884
919
  } as unknown as VxeTableConstructor & VxeTableMethods & VxeTablePrivateMethods
885
920
 
@@ -1041,12 +1076,13 @@ export default defineComponent({
1041
1076
  toVisibleIndex = Math.floor(startTop / defaultRowHeight) - 1
1042
1077
  visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1
1043
1078
  } else {
1079
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1044
1080
  let leftIndex = 0
1045
1081
  let rightIndex = afterFullData.length
1046
1082
  while (leftIndex < rightIndex) {
1047
1083
  const rIndex = Math.floor((leftIndex + rightIndex) / 2)
1048
1084
  const row = afterFullData[rIndex]
1049
- const rowid = getRowid($xeTable, row)
1085
+ const rowid = handleGetRowId(row)
1050
1086
  const rowRest = fullAllDataRowIdData[rowid] || {}
1051
1087
  if (rowRest.oTop <= startTop) {
1052
1088
  leftIndex = rIndex + 1
@@ -1057,7 +1093,7 @@ export default defineComponent({
1057
1093
  toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0)
1058
1094
  for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
1059
1095
  const row = afterFullData[rIndex]
1060
- const rowid = getRowid($xeTable, row)
1096
+ const rowid = handleGetRowId(row)
1061
1097
  const rowRest = fullAllDataRowIdData[rowid] || {}
1062
1098
  visibleSize++
1063
1099
  if (rowRest.oTop > endTop || visibleSize >= 100) {
@@ -1091,14 +1127,14 @@ export default defineComponent({
1091
1127
 
1092
1128
  const setMerges = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[], mList: VxeTableDefines.MergeItem[], rowList?: any[]) => {
1093
1129
  if (merges) {
1094
- const { treeConfig } = props
1130
+ // const { treeConfig } = props
1095
1131
  const { visibleColumn } = internalData
1096
1132
  if (!XEUtils.isArray(merges)) {
1097
1133
  merges = [merges]
1098
1134
  }
1099
- if (treeConfig && merges.length) {
1100
- errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1101
- }
1135
+ // if (treeConfig && merges.length) {
1136
+ // errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1137
+ // }
1102
1138
  merges.forEach((item) => {
1103
1139
  let { row, col, rowspan, colspan } = item
1104
1140
  if (rowList && XEUtils.isNumber(row)) {
@@ -1141,14 +1177,14 @@ export default defineComponent({
1141
1177
  const removeMerges = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[], mList: VxeTableDefines.MergeItem[], rowList?: any) => {
1142
1178
  const rest: VxeTableDefines.MergeItem[] = []
1143
1179
  if (merges) {
1144
- const { treeConfig } = props
1180
+ // const { treeConfig } = props
1145
1181
  const { visibleColumn } = internalData
1146
1182
  if (!XEUtils.isArray(merges)) {
1147
1183
  merges = [merges]
1148
1184
  }
1149
- if (treeConfig && merges.length) {
1150
- errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1151
- }
1185
+ // if (treeConfig && merges.length) {
1186
+ // errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1187
+ // }
1152
1188
  merges.forEach((item) => {
1153
1189
  let { row, col } = item
1154
1190
  if (rowList && XEUtils.isNumber(row)) {
@@ -1300,7 +1336,7 @@ export default defineComponent({
1300
1336
  fullColumnFieldData[field] = rest
1301
1337
  } else {
1302
1338
  if ((storage && !type) || (columnOpts.drag && (isCrossDrag || isSelfToChildDrag))) {
1303
- errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field`])
1339
+ errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field=?`])
1304
1340
  }
1305
1341
  }
1306
1342
  if (!hasFixed && fixed) {
@@ -1548,6 +1584,7 @@ export default defineComponent({
1548
1584
  internalData.headerHeight = headerHeight
1549
1585
  internalData.footerHeight = footerHeight
1550
1586
  reactData.overflowX = overflowX
1587
+ reactData.resizeWidthFlag++
1551
1588
  updateColumnOffsetLeft()
1552
1589
  updateHeight()
1553
1590
  reactData.parentHeight = Math.max(internalData.headerHeight + footerHeight + 20, $xeTable.getParentHeight())
@@ -1575,9 +1612,10 @@ export default defineComponent({
1575
1612
  const defaultRowHeight = computeDefaultRowHeight.value
1576
1613
  const el = refElem.value
1577
1614
  if (!isAllOverflow && scrollYLoad && el) {
1615
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1578
1616
  el.setAttribute('data-calc-row', 'Y')
1579
1617
  tableData.forEach(row => {
1580
- const rowid = getRowid($xeTable, row)
1618
+ const rowid = handleGetRowId(row)
1581
1619
  const rowRest = fullAllDataRowIdData[rowid]
1582
1620
  if (rowRest) {
1583
1621
  const reHeight = calcCellAutoHeight(rowRest, el)
@@ -1612,9 +1650,10 @@ export default defineComponent({
1612
1650
  const updateAfterListIndex = () => {
1613
1651
  const { treeConfig } = props
1614
1652
  const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData
1653
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1615
1654
  const fullMaps: Record<string, any> = {}
1616
1655
  afterFullData.forEach((row, index) => {
1617
- const rowid = getRowid($xeTable, row)
1656
+ const rowid = handleGetRowId(row)
1618
1657
  const rowRest = fullAllDataRowIdData[rowid]
1619
1658
  const seq = index + 1
1620
1659
  if (rowRest) {
@@ -1644,8 +1683,9 @@ export default defineComponent({
1644
1683
  const childrenField = treeOpts.children || treeOpts.childrenField
1645
1684
  const fullMaps: Record<string, any> = {}
1646
1685
  if (treeConfig) {
1686
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1647
1687
  XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
1648
- const rowid = getRowid($xeTable, row)
1688
+ const rowid = handleGetRowId(row)
1649
1689
  const rowRest = fullAllDataRowIdData[rowid]
1650
1690
  const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('')
1651
1691
  if (rowRest) {
@@ -1671,18 +1711,18 @@ export default defineComponent({
1671
1711
  */
1672
1712
  const handleVirtualTreeToList = () => {
1673
1713
  const { treeConfig } = props
1674
- const { treeExpandedMaps } = reactData
1675
- const { fullAllDataRowIdData } = internalData
1714
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData
1676
1715
  const treeOpts = computeTreeOpts.value
1677
1716
  const childrenField = treeOpts.children || treeOpts.childrenField
1678
1717
  if (treeConfig && treeOpts.transform) {
1718
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1679
1719
  const fullData: any[] = []
1680
1720
  const expandMaps: {
1681
1721
  [key: string]: number
1682
1722
  } = {}
1683
1723
  XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
1684
- const rowid = getRowid($xeTable, row)
1685
- const parentRowid = getRowid($xeTable, parentRow)
1724
+ const rowid = handleGetRowId(row)
1725
+ const parentRowid = handleGetRowId(parentRow)
1686
1726
  if (!parentRow || (expandMaps[parentRowid] && treeExpandedMaps[parentRowid])) {
1687
1727
  const rowRest = fullAllDataRowIdData[rowid]
1688
1728
  if (rowRest) {
@@ -1711,7 +1751,7 @@ export default defineComponent({
1711
1751
  const treeOpts = computeTreeOpts.value
1712
1752
  const childrenField = treeOpts.children || treeOpts.childrenField
1713
1753
  const { transform, rowField, parentField, mapChildrenField } = treeOpts
1714
- const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts
1754
+ const { isEvery, remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts
1715
1755
  const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts
1716
1756
  let tableData: any[] = []
1717
1757
  let tableTree: any[] = []
@@ -1773,7 +1813,7 @@ export default defineComponent({
1773
1813
  // 筛选虚拟树
1774
1814
  tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
1775
1815
  original: true,
1776
- isEvery: true,
1816
+ isEvery,
1777
1817
  children: mapChildrenField,
1778
1818
  mapChildren: childrenField
1779
1819
  })
@@ -1787,7 +1827,7 @@ export default defineComponent({
1787
1827
  // 还原虚拟树
1788
1828
  tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
1789
1829
  original: true,
1790
- isEvery: true,
1830
+ isEvery,
1791
1831
  children: mapChildrenField,
1792
1832
  mapChildren: childrenField
1793
1833
  })
@@ -1836,7 +1876,7 @@ export default defineComponent({
1836
1876
  // 还原虚拟树
1837
1877
  tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
1838
1878
  original: true,
1839
- isEvery: true,
1879
+ isEvery,
1840
1880
  children: treeOpts.mapChildrenField,
1841
1881
  mapChildren: childrenField
1842
1882
  })
@@ -1852,9 +1892,9 @@ export default defineComponent({
1852
1892
  }
1853
1893
 
1854
1894
  const updateStyle = () => {
1855
- const { border, showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props
1895
+ const { showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props
1856
1896
  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
1897
+ const { visibleColumn, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData
1858
1898
  const el = refElem.value
1859
1899
  if (!el) {
1860
1900
  return
@@ -1863,7 +1903,6 @@ export default defineComponent({
1863
1903
  const osbWidth = overflowY ? scrollbarWidth : 0
1864
1904
  const osbHeight = overflowX ? scrollbarHeight : 0
1865
1905
  const emptyPlaceholderElem = refEmptyPlaceholder.value
1866
- const cellOffsetWidth = computeCellOffsetWidth.value
1867
1906
  const mouseOpts = computeMouseOpts.value
1868
1907
  const expandOpts = computeExpandOpts.value
1869
1908
  const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper'])
@@ -2014,33 +2053,6 @@ export default defineComponent({
2014
2053
  if (tableElem) {
2015
2054
  tableElem.style.width = tWidth ? `${tWidth}px` : ''
2016
2055
  }
2017
-
2018
- const listElem = getRefElem(elemStore[`${name}-${layout}-list`])
2019
- if (isGroup && listElem) {
2020
- XEUtils.arrayEach(listElem.querySelectorAll('.col--group'), (thElem: any) => {
2021
- const colNode = $xeTable.getColumnNode(thElem)
2022
- if (colNode) {
2023
- const column = colNode.item
2024
- const { showHeaderOverflow } = column
2025
- const cellOverflow = XEUtils.isBoolean(showHeaderOverflow) ? showHeaderOverflow : allColumnHeaderOverflow
2026
- const showEllipsis = cellOverflow === 'ellipsis'
2027
- const showTitle = cellOverflow === 'title'
2028
- const showTooltip = cellOverflow === true || cellOverflow === 'tooltip'
2029
- const hasEllipsis = showTitle || showTooltip || showEllipsis
2030
- let childWidth = 0
2031
- let countChild = 0
2032
- if (hasEllipsis) {
2033
- XEUtils.eachTree(column.children, (item) => {
2034
- if (!item.children || !column.children.length) {
2035
- countChild++
2036
- }
2037
- childWidth += item.renderWidth
2038
- }, { children: 'children' })
2039
- }
2040
- thElem.style.width = hasEllipsis ? `${childWidth - countChild - (border ? 2 : 0)}px` : ''
2041
- }
2042
- })
2043
- }
2044
2056
  } else if (layout === 'body') {
2045
2057
  if (currScrollElem) {
2046
2058
  currScrollElem.style.maxHeight = customMaxHeight ? `${bodyMaxHeight}px` : ''
@@ -2145,54 +2157,6 @@ export default defineComponent({
2145
2157
  tableElem.style.width = tWidth ? `${tWidth}px` : ''
2146
2158
  }
2147
2159
  }
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
2160
  })
2197
2161
  })
2198
2162
  if (currentRow) {
@@ -2238,7 +2202,7 @@ export default defineComponent({
2238
2202
  (sortConfig.multiple ? defaultSort : defaultSort.slice(0, 1)).forEach((item: any, index: number) => {
2239
2203
  const { field, order } = item
2240
2204
  if (field && order) {
2241
- const column = tableMethods.getColumnByField(field)
2205
+ const column = $xeTable.getColumnByField(field)
2242
2206
  if (column && column.sortable) {
2243
2207
  column.order = order
2244
2208
  column.sortTime = Date.now() + index
@@ -2246,7 +2210,7 @@ export default defineComponent({
2246
2210
  }
2247
2211
  })
2248
2212
  if (!sortOpts.remote) {
2249
- tablePrivateMethods.handleTableData(true).then(updateStyle)
2213
+ $xeTable.handleTableData(true).then(updateStyle)
2250
2214
  }
2251
2215
  }
2252
2216
  }
@@ -2307,7 +2271,7 @@ export default defineComponent({
2307
2271
  const expandOpts = computeExpandOpts.value
2308
2272
  const { expandAll, expandRowKeys } = expandOpts
2309
2273
  if (expandAll) {
2310
- tableMethods.setAllRowExpand(true)
2274
+ $xeTable.setAllRowExpand(true)
2311
2275
  } else if (expandRowKeys) {
2312
2276
  const defExpandeds: any[] = []
2313
2277
  expandRowKeys.forEach((rowid: any) => {
@@ -2315,7 +2279,7 @@ export default defineComponent({
2315
2279
  defExpandeds.push(fullDataRowIdData[rowid].row)
2316
2280
  }
2317
2281
  })
2318
- tableMethods.setRowExpand(defExpandeds, true)
2282
+ $xeTable.setRowExpand(defExpandeds, true)
2319
2283
  }
2320
2284
  }
2321
2285
  }
@@ -2361,15 +2325,16 @@ export default defineComponent({
2361
2325
 
2362
2326
  const handleCheckedAllCheckboxRow = (checked: boolean, isForce?: boolean) => {
2363
2327
  const { treeConfig } = props
2364
- const { selectCheckboxMaps } = reactData
2365
- const { afterFullData, checkboxReserveRowMap } = internalData
2328
+ const { afterFullData, checkboxReserveRowMap, selectCheckboxMaps } = internalData
2366
2329
  const treeOpts = computeTreeOpts.value
2367
2330
  const childrenField = treeOpts.children || treeOpts.childrenField
2368
2331
  const checkboxOpts = computeCheckboxOpts.value
2369
2332
  const { checkField, reserve, checkMethod } = checkboxOpts
2333
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
2370
2334
  // indeterminateField 仅支持读取
2371
2335
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
2372
2336
  const selectRowMaps: Record<string, any> = {}
2337
+
2373
2338
  /**
2374
2339
  * 绑定属性方式(高性能,有污染)
2375
2340
  * 必须在行数据存在对应的属性,否则将不响应
@@ -2378,7 +2343,7 @@ export default defineComponent({
2378
2343
  const checkValFn = (row: any) => {
2379
2344
  if (isForce || (!checkMethod || checkMethod({ row }))) {
2380
2345
  if (checked) {
2381
- selectRowMaps[getRowid($xeTable, row)] = row
2346
+ selectRowMaps[handleGetRowId(row)] = row
2382
2347
  }
2383
2348
  XEUtils.set(row, checkField, checked)
2384
2349
  }
@@ -2406,7 +2371,8 @@ export default defineComponent({
2406
2371
  */
2407
2372
  XEUtils.eachTree(afterFullData, (row) => {
2408
2373
  if (isForce || (!checkMethod || checkMethod({ row }))) {
2409
- selectRowMaps[getRowid($xeTable, row)] = row
2374
+ const rowid = handleGetRowId(row)
2375
+ selectRowMaps[rowid] = row
2410
2376
  }
2411
2377
  }, { children: childrenField })
2412
2378
  } else {
@@ -2416,7 +2382,7 @@ export default defineComponent({
2416
2382
  */
2417
2383
  if (!isForce && checkMethod) {
2418
2384
  XEUtils.eachTree(afterFullData, (row) => {
2419
- const rowid = getRowid($xeTable, row)
2385
+ const rowid = handleGetRowId(row)
2420
2386
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
2421
2387
  selectRowMaps[rowid] = row
2422
2388
  }
@@ -2432,14 +2398,15 @@ export default defineComponent({
2432
2398
  */
2433
2399
  if (!isForce && checkMethod) {
2434
2400
  afterFullData.forEach((row) => {
2435
- const rowid = getRowid($xeTable, row)
2401
+ const rowid = handleGetRowId(row)
2436
2402
  if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
2437
2403
  selectRowMaps[rowid] = row
2438
2404
  }
2439
2405
  })
2440
2406
  } else {
2441
2407
  afterFullData.forEach(row => {
2442
- selectRowMaps[getRowid($xeTable, row)] = row
2408
+ const rowid = handleGetRowId(row)
2409
+ selectRowMaps[rowid] = row
2443
2410
  })
2444
2411
  }
2445
2412
  } else {
@@ -2450,7 +2417,7 @@ export default defineComponent({
2450
2417
  */
2451
2418
  if (!isForce && checkMethod) {
2452
2419
  afterFullData.forEach((row) => {
2453
- const rowid = getRowid($xeTable, row)
2420
+ const rowid = handleGetRowId(row)
2454
2421
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
2455
2422
  selectRowMaps[rowid] = row
2456
2423
  }
@@ -2468,11 +2435,11 @@ export default defineComponent({
2468
2435
  afterFullData.forEach((row) => handleCheckboxReserveRow(row, false))
2469
2436
  }
2470
2437
  }
2471
- reactData.selectCheckboxMaps = checkField ? {} : selectRowMaps
2438
+ reactData.updateCheckboxFlag++
2439
+ internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps
2472
2440
 
2473
2441
  reactData.isAllSelected = checked
2474
2442
  reactData.isIndeterminate = false
2475
- reactData.treeIndeterminateMaps = {}
2476
2443
  internalData.treeIndeterminateRowMaps = {}
2477
2444
  $xeTable.checkSelectionStatus()
2478
2445
  return nextTick()
@@ -2481,8 +2448,8 @@ export default defineComponent({
2481
2448
  // 还原展开、选中等相关状态
2482
2449
  const handleReserveStatus = () => {
2483
2450
  const { treeConfig } = props
2484
- const { expandColumn, currentRow, selectCheckboxMaps, selectRadioRow, rowExpandedMaps, treeExpandedMaps } = reactData
2485
- const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData
2451
+ const { expandColumn, currentRow, selectRadioRow } = reactData
2452
+ const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow, selectCheckboxMaps, treeExpandedMaps, rowExpandedMaps } = internalData
2486
2453
  const expandOpts = computeExpandOpts.value
2487
2454
  const treeOpts = computeTreeOpts.value
2488
2455
  const radioOpts = computeRadioOpts.value
@@ -2499,7 +2466,8 @@ export default defineComponent({
2499
2466
  }
2500
2467
  }
2501
2468
  // 复选框
2502
- reactData.selectCheckboxMaps = getRecoverRowMaps(selectCheckboxMaps) // 刷新多选行状态
2469
+ internalData.selectCheckboxMaps = getRecoverRowMaps(selectCheckboxMaps) // 刷新多选行状态
2470
+ reactData.updateCheckboxFlag++
2503
2471
  // 还原保留选中状态
2504
2472
  if (checkboxOpts.reserve) {
2505
2473
  handleCheckedCheckboxRow(handleReserveRow(internalData.checkboxReserveRowMap), true, true)
@@ -2508,13 +2476,15 @@ export default defineComponent({
2508
2476
  reactData.currentRow = null // 刷新当前行状态
2509
2477
  }
2510
2478
  // 行展开
2511
- reactData.rowExpandedMaps = expandColumn ? getRecoverRowMaps(rowExpandedMaps) : {} // 刷新行展开状态
2479
+ internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps(rowExpandedMaps) : {} // 刷新行展开状态
2480
+ reactData.rowExpandedFlag++
2512
2481
  // 还原保留状态
2513
2482
  if (expandColumn && expandOpts.reserve) {
2514
2483
  $xeTable.setRowExpand(handleReserveRow(internalData.rowExpandedReserveRowMap), true)
2515
2484
  }
2516
2485
  // 树展开
2517
- reactData.treeExpandedMaps = treeConfig ? getRecoverRowMaps(treeExpandedMaps) : {} // 刷新树展开状态
2486
+ internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps(treeExpandedMaps) : {} // 刷新树展开状态
2487
+ reactData.treeExpandedFlag++
2518
2488
  if (treeConfig && treeOpts.reserve) {
2519
2489
  $xeTable.setTreeExpand(handleReserveRow(internalData.treeExpandedReserveRowMap), true)
2520
2490
  }
@@ -2531,7 +2501,7 @@ export default defineComponent({
2531
2501
  const { expandAll, expandRowKeys } = treeOpts
2532
2502
  const childrenField = treeOpts.children || treeOpts.childrenField
2533
2503
  if (expandAll) {
2534
- tableMethods.setAllTreeExpand(true)
2504
+ $xeTable.setAllTreeExpand(true)
2535
2505
  } else if (expandRowKeys) {
2536
2506
  const defExpandeds: any[] = []
2537
2507
  const rowkey = getRowkey($xeTable)
@@ -2541,7 +2511,7 @@ export default defineComponent({
2541
2511
  defExpandeds.push(matchObj.item)
2542
2512
  }
2543
2513
  })
2544
- tableMethods.setTreeExpand(defExpandeds, true)
2514
+ $xeTable.setTreeExpand(defExpandeds, true)
2545
2515
  }
2546
2516
  }
2547
2517
  }
@@ -2553,8 +2523,7 @@ export default defineComponent({
2553
2523
  const { checkStrictly } = checkboxOpts
2554
2524
  return new Promise<void>(resolve => {
2555
2525
  if (loadMethod) {
2556
- const { treeExpandLazyLoadedMaps } = reactData
2557
- const { fullAllDataRowIdData } = internalData
2526
+ const { fullAllDataRowIdData, treeExpandLazyLoadedMaps } = internalData
2558
2527
  const rowid = getRowid($xeTable, row)
2559
2528
  const rowRest = fullAllDataRowIdData[rowid]
2560
2529
  treeExpandLazyLoadedMaps[rowid] = row
@@ -2571,18 +2540,19 @@ export default defineComponent({
2571
2540
  childRecords = []
2572
2541
  }
2573
2542
  if (childRecords) {
2574
- return tableMethods.loadTreeChildren(row, childRecords).then(childRows => {
2575
- const { treeExpandedMaps } = reactData
2543
+ return $xeTable.loadTreeChildren(row, childRecords).then(childRows => {
2544
+ const { treeExpandedMaps } = internalData
2576
2545
  if (childRows.length && !treeExpandedMaps[rowid]) {
2577
2546
  treeExpandedMaps[rowid] = row
2578
2547
  }
2548
+ reactData.treeExpandedFlag++
2579
2549
  // 如果当前节点已选中,则展开后子节点也被选中
2580
- if (!checkStrictly && tableMethods.isCheckedByCheckboxRow(row)) {
2550
+ if (!checkStrictly && $xeTable.isCheckedByCheckboxRow(row)) {
2581
2551
  handleCheckedCheckboxRow(childRows, true)
2582
2552
  }
2583
2553
  return nextTick().then(() => {
2584
2554
  if (transform) {
2585
- tablePrivateMethods.handleTableData()
2555
+ $xeTable.handleTableData()
2586
2556
  updateAfterDataIndex()
2587
2557
  return nextTick()
2588
2558
  }
@@ -2590,7 +2560,7 @@ export default defineComponent({
2590
2560
  })
2591
2561
  }
2592
2562
  }).catch(() => {
2593
- const { treeExpandLazyLoadedMaps } = reactData
2563
+ const { treeExpandLazyLoadedMaps } = internalData
2594
2564
  if (rowRest) {
2595
2565
  rowRest.treeLoaded = false
2596
2566
  }
@@ -2598,7 +2568,8 @@ export default defineComponent({
2598
2568
  delete treeExpandLazyLoadedMaps[rowid]
2599
2569
  }
2600
2570
  }).finally(() => {
2601
- nextTick().then(() => tableMethods.recalculate()).then(() => resolve())
2571
+ reactData.treeExpandedFlag++
2572
+ nextTick().then(() => $xeTable.recalculate()).then(() => resolve())
2602
2573
  })
2603
2574
  } else {
2604
2575
  resolve()
@@ -2624,29 +2595,27 @@ export default defineComponent({
2624
2595
  const expandOpts = computeExpandOpts.value
2625
2596
  const { loadMethod } = expandOpts
2626
2597
  if (loadMethod) {
2627
- const { fullAllDataRowIdData } = internalData
2628
- const rExpandLazyLoadedMaps = { ...reactData.rowExpandLazyLoadedMaps }
2598
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData
2629
2599
  const rowid = getRowid($xeTable, row)
2630
2600
  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 }
2601
+ rowExpandLazyLoadedMaps[rowid] = row
2602
+ loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
2603
+ const { rowExpandedMaps } = internalData
2635
2604
  if (rowRest) {
2636
2605
  rowRest.expandLoaded = true
2637
2606
  }
2638
- rowTempExpandedMaps[rowid] = row
2639
- reactData.rowExpandedMaps = rowTempExpandedMaps
2607
+ rowExpandedMaps[rowid] = row
2608
+ reactData.rowExpandedFlag++
2640
2609
  }).catch(() => {
2641
2610
  if (rowRest) {
2642
2611
  rowRest.expandLoaded = false
2643
2612
  }
2644
2613
  }).finally(() => {
2645
- const rExpandLazyLoadedMaps = { ...reactData.rowExpandLazyLoadedMaps }
2646
- if (rExpandLazyLoadedMaps[rowid]) {
2647
- delete rExpandLazyLoadedMaps[rowid]
2614
+ const { rowExpandLazyLoadedMaps } = internalData
2615
+ if (rowExpandLazyLoadedMaps[rowid]) {
2616
+ delete rowExpandLazyLoadedMaps[rowid]
2648
2617
  }
2649
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps
2618
+ reactData.rowExpandedFlag++
2650
2619
  nextTick()
2651
2620
  .then(() => $xeTable.recalculate())
2652
2621
  .then(() => $xeTable.updateCellAreas())
@@ -2674,14 +2643,14 @@ export default defineComponent({
2674
2643
  const handleDefaultMergeCells = () => {
2675
2644
  const { mergeCells } = props
2676
2645
  if (mergeCells) {
2677
- tableMethods.setMergeCells(mergeCells)
2646
+ $xeTable.setMergeCells(mergeCells)
2678
2647
  }
2679
2648
  }
2680
2649
 
2681
2650
  const handleDefaultMergeFooterItems = () => {
2682
2651
  const { mergeFooterItems } = props
2683
2652
  if (mergeFooterItems) {
2684
- tableMethods.setMergeFooterItems(mergeFooterItems)
2653
+ $xeTable.setMergeFooterItems(mergeFooterItems)
2685
2654
  }
2686
2655
  }
2687
2656
 
@@ -2750,9 +2719,6 @@ export default defineComponent({
2750
2719
  calcCellWidth()
2751
2720
  autoCellWidth()
2752
2721
  updateStyle()
2753
- if (reFull) {
2754
- updateRowOffsetTop()
2755
- }
2756
2722
  updateRowExpandStyle()
2757
2723
  return computeScrollLoad().then(() => {
2758
2724
  if (reFull === true) {
@@ -2775,13 +2741,16 @@ export default defineComponent({
2775
2741
  */
2776
2742
  const loadTableData = (datas: any[], isReset: boolean) => {
2777
2743
  const { keepSource, treeConfig } = props
2778
- const { editStore, scrollYLoad: oldScrollYLoad } = reactData
2744
+ const { scrollYLoad: oldScrollYLoad } = reactData
2779
2745
  const { scrollYStore, scrollXStore, lastScrollLeft, lastScrollTop } = internalData
2780
2746
  const treeOpts = computeTreeOpts.value
2781
2747
  const { transform } = treeOpts
2782
2748
  const childrenField = treeOpts.children || treeOpts.childrenField
2783
2749
  let treeData = []
2784
2750
  let fullData = reactive(datas ? datas.slice(0) : []) // 转为响应式数据
2751
+ if (fullData.length > supportMaxRow) {
2752
+ errLog('vxe.error.errMaxRow', [supportMaxRow])
2753
+ }
2785
2754
  if (treeConfig) {
2786
2755
  if (transform) {
2787
2756
  // 树结构自动转换
@@ -2822,8 +2791,8 @@ export default defineComponent({
2822
2791
  scrollXStore.endIndex = 1
2823
2792
  reactData.isRowLoading = true
2824
2793
  reactData.scrollVMLoading = false
2825
- editStore.insertMaps = {}
2826
- editStore.removeMaps = {}
2794
+ internalData.insertRowMaps = {}
2795
+ internalData.removeRowMaps = {}
2827
2796
  const sYLoad = updateScrollYStatus(fullData)
2828
2797
  reactData.isDragColMove = false
2829
2798
  reactData.isDragRowMove = false
@@ -2845,10 +2814,10 @@ export default defineComponent({
2845
2814
  $xeTable.clearCellAreas()
2846
2815
  $xeTable.clearCopyCellArea()
2847
2816
  }
2848
- tableMethods.clearMergeCells()
2849
- tableMethods.clearMergeFooterItems()
2850
- tablePrivateMethods.handleTableData(true)
2851
- tableMethods.updateFooter()
2817
+ $xeTable.clearMergeCells()
2818
+ $xeTable.clearMergeFooterItems()
2819
+ $xeTable.handleTableData(true)
2820
+ $xeTable.updateFooter()
2852
2821
  return nextTick().then(() => {
2853
2822
  updateHeight()
2854
2823
  updateStyle()
@@ -2882,20 +2851,20 @@ export default defineComponent({
2882
2851
  }
2883
2852
 
2884
2853
  handleReserveStatus()
2885
- tablePrivateMethods.checkSelectionStatus()
2854
+ $xeTable.checkSelectionStatus()
2886
2855
  return new Promise<void>(resolve => {
2887
2856
  nextTick()
2888
- .then(() => tableMethods.recalculate())
2857
+ .then(() => $xeTable.recalculate())
2889
2858
  .then(() => {
2890
2859
  let targetScrollLeft = lastScrollLeft
2891
2860
  let targetScrollTop = lastScrollTop
2892
- const sXOpts = computeSXOpts.value
2893
- const sYOpts = computeSYOpts.value
2861
+ const virtualXOpts = computeVirtualXOpts.value
2862
+ const virtualYOpts = computeVirtualYOpts.value
2894
2863
  // 是否在更新数据之后自动滚动重置滚动条
2895
- if (sXOpts.scrollToLeftOnChange) {
2864
+ if (virtualXOpts.scrollToLeftOnChange) {
2896
2865
  targetScrollLeft = 0
2897
2866
  }
2898
- if (sYOpts.scrollToTopOnChange) {
2867
+ if (virtualYOpts.scrollToTopOnChange) {
2899
2868
  targetScrollTop = 0
2900
2869
  }
2901
2870
  reactData.isRowLoading = false
@@ -2931,7 +2900,7 @@ export default defineComponent({
2931
2900
  handleDefaultTreeExpand()
2932
2901
  handleDefaultMergeCells()
2933
2902
  handleDefaultMergeFooterItems()
2934
- nextTick(() => setTimeout(() => tableMethods.recalculate()))
2903
+ nextTick(() => setTimeout(() => $xeTable.recalculate()))
2935
2904
  }
2936
2905
 
2937
2906
  /**
@@ -2997,13 +2966,13 @@ export default defineComponent({
2997
2966
  }
2998
2967
 
2999
2968
  const parseColumns = (isReset: boolean) => {
3000
- const { showOverflow } = props
3001
- const rowOpts = computeRowOpts.value
2969
+ // const { showOverflow } = props
2970
+ // const rowOpts = computeRowOpts.value
3002
2971
  const leftList: VxeTableDefines.ColumnInfo[] = []
3003
2972
  const centerList: VxeTableDefines.ColumnInfo[] = []
3004
2973
  const rightList: VxeTableDefines.ColumnInfo[] = []
3005
2974
  const { isGroup, columnStore } = reactData
3006
- const sXOpts = computeSXOpts.value
2975
+ const virtualXOpts = computeVirtualXOpts.value
3007
2976
  const { collectColumn, tableFullColumn, scrollXStore, fullColumnIdData } = internalData
3008
2977
  // 如果是分组表头,如果子列全部被隐藏,则根列也隐藏
3009
2978
  if (isGroup) {
@@ -3059,32 +3028,32 @@ export default defineComponent({
3059
3028
  }
3060
3029
  const visibleColumn = leftList.concat(centerList).concat(rightList)
3061
3030
  // 如果gt为0,则总是启用
3062
- const scrollXLoad = !!sXOpts.enabled && sXOpts.gt > -1 && (sXOpts.gt === 0 || sXOpts.gt < tableFullColumn.length)
3031
+ const scrollXLoad = !!virtualXOpts.enabled && virtualXOpts.gt > -1 && (virtualXOpts.gt === 0 || virtualXOpts.gt < tableFullColumn.length)
3063
3032
  reactData.hasFixedColumn = leftList.length > 0 || rightList.length > 0
3064
3033
  Object.assign(columnStore, { leftList, centerList, rightList })
3065
3034
  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
- }
3035
+ // if (showOverflow) {
3036
+ // if (!rowOpts.height) {
3037
+ // const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false)
3038
+ // if (errColumn) {
3039
+ // errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
3040
+ // }
3041
+ // }
3042
+ // }
3043
+ // if (process.env.VUE_APP_VXE_ENV === 'development') {
3044
+ // if (props.showHeader && !props.showHeaderOverflow) {
3045
+ // warnLog('vxe.error.reqProp', ['show-header-overflow'])
3046
+ // }
3047
+ // if (props.showFooter && !props.showFooterOverflow) {
3048
+ // warnLog('vxe.error.reqProp', ['show-footer-overflow'])
3049
+ // }
3050
+ if (props.spanMethod) {
3051
+ warnLog('vxe.error.scrollErrProp', ['span-method'])
3073
3052
  }
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
- }
3053
+ if (props.footerSpanMethod) {
3054
+ warnLog('vxe.error.scrollErrProp', ['footer-span-method'])
3087
3055
  }
3056
+ // }
3088
3057
  if (isReset) {
3089
3058
  const { visibleSize } = handleVirtualXVisible()
3090
3059
  scrollXStore.startIndex = 0
@@ -3175,12 +3144,12 @@ export default defineComponent({
3175
3144
 
3176
3145
  const updateScrollYStatus = (fullData?: any[]) => {
3177
3146
  const { treeConfig } = props
3178
- const sYOpts = computeSYOpts.value
3147
+ const virtualYOpts = computeVirtualYOpts.value
3179
3148
  const treeOpts = computeTreeOpts.value
3180
3149
  const { transform } = treeOpts
3181
3150
  const allList = fullData || internalData.tableFullData
3182
3151
  // 如果gt为0,则总是启用
3183
- const scrollYLoad = (transform || !treeConfig) && !!sYOpts.enabled && sYOpts.gt > -1 && (sYOpts.gt === 0 || sYOpts.gt < allList.length)
3152
+ const scrollYLoad = (transform || !treeConfig) && !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt < allList.length)
3184
3153
  reactData.scrollYLoad = scrollYLoad
3185
3154
  return scrollYLoad
3186
3155
  }
@@ -3192,9 +3161,8 @@ export default defineComponent({
3192
3161
  * @returns
3193
3162
  */
3194
3163
  const handleBaseTreeExpand = (rows: any[], expanded: boolean) => {
3195
- const { treeExpandedMaps, treeExpandLazyLoadedMaps, treeNodeColumn } = reactData
3196
- const treeTempExpandedMaps = { ...treeExpandedMaps }
3197
- const { fullAllDataRowIdData, tableFullData } = internalData
3164
+ const { treeNodeColumn } = reactData
3165
+ const { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData
3198
3166
  const treeOpts = computeTreeOpts.value
3199
3167
  const { reserve, lazy, accordion, toggleMethod } = treeOpts
3200
3168
  const childrenField = treeOpts.children || treeOpts.childrenField
@@ -3202,6 +3170,7 @@ export default defineComponent({
3202
3170
  const result: any[] = []
3203
3171
  const columnIndex = tableMethods.getColumnIndex(treeNodeColumn)
3204
3172
  const $columnIndex = tableMethods.getVMColumnIndex(treeNodeColumn)
3173
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
3205
3174
  let validRows = toggleMethod ? rows.filter((row: any) => toggleMethod({ $table: $xeTable, expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows
3206
3175
  if (accordion) {
3207
3176
  validRows = validRows.length ? [validRows[validRows.length - 1]] : []
@@ -3209,17 +3178,17 @@ export default defineComponent({
3209
3178
  const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField })
3210
3179
  if (matchObj) {
3211
3180
  matchObj.items.forEach(item => {
3212
- const rowid = getRowid($xeTable, item)
3213
- if (treeTempExpandedMaps[rowid]) {
3214
- delete treeTempExpandedMaps[rowid]
3181
+ const rowid = handleGetRowId(item)
3182
+ if (treeExpandedMaps[rowid]) {
3183
+ delete treeExpandedMaps[rowid]
3215
3184
  }
3216
3185
  })
3217
3186
  }
3218
3187
  }
3219
3188
  if (expanded) {
3220
3189
  validRows.forEach((row: any) => {
3221
- const rowid = getRowid($xeTable, row)
3222
- if (!treeTempExpandedMaps[rowid]) {
3190
+ const rowid = handleGetRowId(row)
3191
+ if (!treeExpandedMaps[rowid]) {
3223
3192
  const rowRest = fullAllDataRowIdData[rowid]
3224
3193
  if (rowRest) {
3225
3194
  const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid]
@@ -3228,7 +3197,7 @@ export default defineComponent({
3228
3197
  result.push(handleAsyncTreeExpandChilds(row))
3229
3198
  } else {
3230
3199
  if (row[childrenField] && row[childrenField].length) {
3231
- treeTempExpandedMaps[rowid] = row
3200
+ treeExpandedMaps[rowid] = row
3232
3201
  }
3233
3202
  }
3234
3203
  }
@@ -3236,16 +3205,16 @@ export default defineComponent({
3236
3205
  })
3237
3206
  } else {
3238
3207
  validRows.forEach(item => {
3239
- const rowid = getRowid($xeTable, item)
3240
- if (treeTempExpandedMaps[rowid]) {
3241
- delete treeTempExpandedMaps[rowid]
3208
+ const rowid = handleGetRowId(item)
3209
+ if (treeExpandedMaps[rowid]) {
3210
+ delete treeExpandedMaps[rowid]
3242
3211
  }
3243
3212
  })
3244
3213
  }
3245
3214
  if (reserve) {
3246
3215
  validRows.forEach((row: any) => handleTreeExpandReserve(row, expanded))
3247
3216
  }
3248
- reactData.treeExpandedMaps = treeTempExpandedMaps
3217
+ reactData.treeExpandedFlag++
3249
3218
  return Promise.all(result).then(() => {
3250
3219
  return tableMethods.recalculate()
3251
3220
  })
@@ -3276,9 +3245,9 @@ export default defineComponent({
3276
3245
  handleCheckedAllCheckboxRow(value)
3277
3246
  if (evnt) {
3278
3247
  dispatchEvent('checkbox-all', {
3279
- records: $xeTable.getCheckboxRecords(),
3280
- reserves: $xeTable.getCheckboxReserveRecords(),
3281
- indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
3248
+ records: () => $xeTable.getCheckboxRecords(),
3249
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
3250
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
3282
3251
  checked: value
3283
3252
  }, evnt)
3284
3253
  }
@@ -3311,10 +3280,11 @@ export default defineComponent({
3311
3280
  }
3312
3281
 
3313
3282
  const createGetRowCacheProp = (prop: 'seq' | 'index' | '_index' | '$index') => {
3283
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
3314
3284
  return function (row: any) {
3315
3285
  const { fullAllDataRowIdData } = internalData
3316
3286
  if (row) {
3317
- const rowid = getRowid($xeTable, row)
3287
+ const rowid = handleGetRowId(row)
3318
3288
  const rowRest = fullAllDataRowIdData[rowid]
3319
3289
  if (rowRest) {
3320
3290
  return rowRest[prop]
@@ -3472,7 +3442,7 @@ export default defineComponent({
3472
3442
 
3473
3443
  const handleUpdateColResize = (evnt: MouseEvent, params: any) => {
3474
3444
  $xeTable.analyColumnWidth()
3475
- $xeTable.recalculate(true).then(() => {
3445
+ $xeTable.recalculate().then(() => {
3476
3446
  $xeTable.saveCustomStore('update:width')
3477
3447
  $xeTable.updateCellAreas()
3478
3448
  $xeTable.dispatchEvent('column-resizable-change', params, evnt)
@@ -3484,7 +3454,7 @@ export default defineComponent({
3484
3454
 
3485
3455
  const handleUpdateRowResize = (evnt: MouseEvent, params: any) => {
3486
3456
  reactData.resizeHeightFlag++
3487
- $xeTable.recalculate(true).then(() => {
3457
+ $xeTable.recalculate().then(() => {
3488
3458
  $xeTable.updateCellAreas()
3489
3459
  $xeTable.dispatchEvent('row-resizable-change', params, evnt)
3490
3460
  setTimeout(() => $xeTable.recalculate(true), 300)
@@ -3504,16 +3474,17 @@ export default defineComponent({
3504
3474
  }
3505
3475
 
3506
3476
  const updateRowOffsetTop = () => {
3507
- const { expandColumn, rowExpandedMaps } = reactData
3508
- const { afterFullData, fullAllDataRowIdData } = internalData
3477
+ const { expandColumn } = reactData
3478
+ const { afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData
3509
3479
  const expandOpts = computeExpandOpts.value
3510
3480
  const rowOpts = computeRowOpts.value
3511
3481
  const cellOpts = computeCellOpts.value
3512
3482
  const defaultRowHeight = computeDefaultRowHeight.value
3483
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
3513
3484
  let offsetTop = 0
3514
3485
  for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
3515
3486
  const row = afterFullData[rIndex]
3516
- const rowid = getRowid($xeTable, row)
3487
+ const rowid = handleGetRowId(row)
3517
3488
  const rowRest = fullAllDataRowIdData[rowid] || {}
3518
3489
  rowRest.oTop = offsetTop
3519
3490
  offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight
@@ -3893,11 +3864,10 @@ export default defineComponent({
3893
3864
  */
3894
3865
  revertData (rows: any, field) {
3895
3866
  const { keepSource, treeConfig } = props
3896
- const { editStore } = reactData
3897
- const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData
3898
- const removeTempMaps = { ...editStore.removeMaps }
3867
+ const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData, removeRowMaps } = internalData
3899
3868
  const treeOpts = computeTreeOpts.value
3900
3869
  const { transform } = treeOpts
3870
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
3901
3871
  if (!keepSource) {
3902
3872
  if (process.env.VUE_APP_VXE_ENV === 'development') {
3903
3873
  errLog('vxe.error.reqProp', ['keep-source'])
@@ -3915,7 +3885,7 @@ export default defineComponent({
3915
3885
  let reDelFlag = false
3916
3886
  if (targetRows.length) {
3917
3887
  targetRows.forEach((item: any) => {
3918
- const rowid = getRowid($xeTable, item)
3888
+ const rowid = handleGetRowId(item)
3919
3889
  const rowRest = fullAllDataRowIdData[rowid]
3920
3890
  if (rowRest) {
3921
3891
  const row = rowRest.row
@@ -3928,7 +3898,9 @@ export default defineComponent({
3928
3898
  XEUtils.destructuring(row, XEUtils.clone(oRow, true))
3929
3899
  }
3930
3900
  if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
3931
- delete removeTempMaps[rowid]
3901
+ if (removeRowMaps[rowid]) {
3902
+ delete removeRowMaps[rowid]
3903
+ }
3932
3904
  tableFullData.unshift(row)
3933
3905
  afterFullData.unshift(row)
3934
3906
  reDelFlag = true
@@ -3940,7 +3912,7 @@ export default defineComponent({
3940
3912
  }
3941
3913
  if (rows) {
3942
3914
  if (reDelFlag) {
3943
- editStore.removeMaps = removeTempMaps
3915
+ reactData.removeRowFlag++
3944
3916
  $xeTable.updateFooter()
3945
3917
  $xeTable.cacheRowMap(false)
3946
3918
  $xeTable.handleTableData(treeConfig && transform)
@@ -4068,22 +4040,19 @@ export default defineComponent({
4068
4040
  * @param {Row} row 行对象
4069
4041
  */
4070
4042
  isInsertByRow (row) {
4071
- const { editStore } = reactData
4072
4043
  const rowid = getRowid($xeTable, row)
4073
- return !!editStore.insertMaps[rowid]
4044
+ return !!reactData.insertRowFlag && !!internalData.insertRowMaps[rowid]
4074
4045
  },
4075
4046
  isRemoveByRow (row) {
4076
- const { editStore } = reactData
4077
4047
  const rowid = getRowid($xeTable, row)
4078
- return !!editStore.removeMaps[rowid]
4048
+ return !!reactData.removeRowFlag && !!internalData.removeRowMaps[rowid]
4079
4049
  },
4080
4050
  /**
4081
4051
  * 删除所有新增的临时数据
4082
4052
  * @returns
4083
4053
  */
4084
4054
  removeInsertRow () {
4085
- const { editStore } = reactData
4086
- editStore.insertMaps = {}
4055
+ internalData.insertRowMaps = {}
4087
4056
  return $xeTable.remove($xeTable.getInsertRecords())
4088
4057
  },
4089
4058
  /**
@@ -4122,8 +4091,8 @@ export default defineComponent({
4122
4091
  * @param {Number} columnIndex 索引
4123
4092
  */
4124
4093
  getColumns (columnIndex?: number): any {
4125
- const columns = internalData.visibleColumn
4126
- return XEUtils.isUndefined(columnIndex) ? columns.slice(0) : columns[columnIndex]
4094
+ const { visibleColumn } = internalData
4095
+ return XEUtils.isUndefined(columnIndex) ? visibleColumn.slice(0) : visibleColumn[columnIndex]
4127
4096
  },
4128
4097
  /**
4129
4098
  * 根据列获取列的唯一主键
@@ -4137,7 +4106,7 @@ export default defineComponent({
4137
4106
  * @param {String} colid 列主键
4138
4107
  */
4139
4108
  getColumnById (colid) {
4140
- const fullColumnIdData = internalData.fullColumnIdData
4109
+ const { fullColumnIdData } = internalData
4141
4110
  return colid && fullColumnIdData[colid] ? fullColumnIdData[colid].column : null
4142
4111
  },
4143
4112
  /**
@@ -4149,7 +4118,7 @@ export default defineComponent({
4149
4118
  return field && fullColumnFieldData[field] ? fullColumnFieldData[field].column : null
4150
4119
  },
4151
4120
  getParentColumn (fieldOrColumn) {
4152
- const fullColumnIdData = internalData.fullColumnIdData
4121
+ const { fullColumnIdData } = internalData
4153
4122
  const column = handleFieldOrColumn($xeTable, fieldOrColumn)
4154
4123
  return column && column.parentId && fullColumnIdData[column.parentId] ? fullColumnIdData[column.parentId].column : null
4155
4124
  },
@@ -4270,8 +4239,7 @@ export default defineComponent({
4270
4239
  */
4271
4240
  getCheckboxRecords (isFull) {
4272
4241
  const { treeConfig } = props
4273
- const { selectCheckboxMaps } = reactData
4274
- const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData
4242
+ const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData
4275
4243
  const treeOpts = computeTreeOpts.value
4276
4244
  const checkboxOpts = computeCheckboxOpts.value
4277
4245
  const { transform, mapChildrenField } = treeOpts
@@ -4599,12 +4567,13 @@ export default defineComponent({
4599
4567
  },
4600
4568
  getRowHeightConf (isFull) {
4601
4569
  const { fullAllDataRowIdData, afterFullData } = internalData
4570
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
4602
4571
  const rowOpts = computeRowOpts.value
4603
4572
  const cellOpts = computeCellOpts.value
4604
4573
  const defaultRowHeight = computeDefaultRowHeight.value
4605
4574
  const rest: Record<string, number> = {}
4606
4575
  afterFullData.forEach(row => {
4607
- const rowid = getRowid($xeTable, row)
4576
+ const rowid = handleGetRowId(row)
4608
4577
  const rowRest = fullAllDataRowIdData[rowid]
4609
4578
  if (rowRest) {
4610
4579
  const resizeHeight = rowRest.resizeHeight
@@ -4628,8 +4597,9 @@ export default defineComponent({
4628
4597
  rHeight = Math.floor(rHeight * bodyHeight)
4629
4598
  }
4630
4599
  if (rHeight) {
4600
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
4631
4601
  rows.forEach(row => {
4632
- const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : getRowid($xeTable, row)
4602
+ const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row)
4633
4603
  const rowRest = fullAllDataRowIdData[rowid]
4634
4604
  if (rowRest) {
4635
4605
  rowRest.resizeHeight = rHeight
@@ -4781,12 +4751,11 @@ export default defineComponent({
4781
4751
  */
4782
4752
  getCheckboxIndeterminateRecords (isFull) {
4783
4753
  const { treeConfig } = props
4784
- const { fullDataRowIdData } = internalData
4785
- const { treeIndeterminateMaps } = reactData
4754
+ const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData
4786
4755
  if (treeConfig) {
4787
4756
  const fullRest: any[] = []
4788
4757
  const defRest: any[] = []
4789
- XEUtils.each(treeIndeterminateMaps, (item, rowid) => {
4758
+ XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
4790
4759
  if (item) {
4791
4760
  fullRest.push(item)
4792
4761
  if (fullDataRowIdData[rowid]) {
@@ -4827,17 +4796,18 @@ export default defineComponent({
4827
4796
  return handleCheckedCheckboxRow(rows, checked, true)
4828
4797
  },
4829
4798
  isCheckedByCheckboxRow (row) {
4830
- const { selectCheckboxMaps } = reactData
4799
+ const { updateCheckboxFlag } = reactData
4800
+ const { selectCheckboxMaps } = internalData
4831
4801
  const checkboxOpts = computeCheckboxOpts.value
4832
4802
  const { checkField } = checkboxOpts
4833
4803
  if (checkField) {
4834
4804
  return XEUtils.get(row, checkField)
4835
4805
  }
4836
- return !!selectCheckboxMaps[getRowid($xeTable, row)]
4806
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)]
4837
4807
  },
4838
4808
  isCheckedByCheckboxRowKey (rowid: any) {
4839
- const { selectCheckboxMaps } = reactData
4840
- const { fullAllDataRowIdData } = internalData
4809
+ const { updateCheckboxFlag } = reactData
4810
+ const { fullAllDataRowIdData, selectCheckboxMaps } = internalData
4841
4811
  const checkboxOpts = computeCheckboxOpts.value
4842
4812
  const { checkField } = checkboxOpts
4843
4813
  if (checkField) {
@@ -4847,21 +4817,21 @@ export default defineComponent({
4847
4817
  }
4848
4818
  return false
4849
4819
  }
4850
- return !!selectCheckboxMaps[rowid]
4820
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid]
4851
4821
  },
4852
4822
  isIndeterminateByCheckboxRow (row) {
4853
- const { treeIndeterminateMaps } = reactData
4854
- return !!treeIndeterminateMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row)
4823
+ const { treeIndeterminateRowMaps } = internalData
4824
+ return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row)
4855
4825
  },
4856
4826
  isIndeterminateByCheckboxRowKey (rowid: any) {
4857
- const { treeIndeterminateMaps } = reactData
4858
- return !!treeIndeterminateMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid)
4827
+ const { treeIndeterminateRowMaps } = internalData
4828
+ return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid)
4859
4829
  },
4860
4830
  /**
4861
4831
  * 多选,切换某一行的选中状态
4862
4832
  */
4863
4833
  toggleCheckboxRow (row) {
4864
- const { selectCheckboxMaps } = reactData
4834
+ const { selectCheckboxMaps } = internalData
4865
4835
  const checkboxOpts = computeCheckboxOpts.value
4866
4836
  const { checkField } = checkboxOpts
4867
4837
  const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)]
@@ -4922,14 +4892,15 @@ export default defineComponent({
4922
4892
  const childrenField = treeOpts.children || treeOpts.childrenField
4923
4893
  const reserveSelection: any[] = []
4924
4894
  if (checkboxOpts.reserve) {
4895
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
4925
4896
  const afterFullIdMaps: { [key: string]: number } = {}
4926
4897
  if (treeConfig) {
4927
4898
  XEUtils.eachTree(afterFullData, row => {
4928
- afterFullIdMaps[getRowid($xeTable, row)] = 1
4899
+ afterFullIdMaps[handleGetRowId(row)] = 1
4929
4900
  }, { children: childrenField })
4930
4901
  } else {
4931
4902
  afterFullData.forEach(row => {
4932
- afterFullIdMaps[getRowid($xeTable, row)] = 1
4903
+ afterFullIdMaps[handleGetRowId(row)] = 1
4933
4904
  })
4934
4905
  }
4935
4906
  XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
@@ -4990,8 +4961,9 @@ export default defineComponent({
4990
4961
  }
4991
4962
  reactData.isAllSelected = false
4992
4963
  reactData.isIndeterminate = false
4993
- reactData.selectCheckboxMaps = {}
4994
- reactData.treeIndeterminateMaps = {}
4964
+ internalData.selectCheckboxMaps = {}
4965
+ internalData.treeIndeterminateRowMaps = {}
4966
+ reactData.updateCheckboxFlag++
4995
4967
  return nextTick()
4996
4968
  },
4997
4969
  /**
@@ -5098,13 +5070,20 @@ export default defineComponent({
5098
5070
  * 用于当前列,设置某列行为高亮状态
5099
5071
  */
5100
5072
  setCurrentColumn (fieldOrColumn) {
5073
+ const { mouseConfig } = props
5074
+ const mouseOpts = computeMouseOpts.value
5075
+ const isMouseSelected = mouseConfig && mouseOpts.selected
5101
5076
  const column = handleFieldOrColumn($xeTable, fieldOrColumn)
5102
5077
  if (column) {
5103
- // tableMethods.clearCurrentRow()
5104
- tableMethods.clearCurrentColumn()
5078
+ $xeTable.clearCurrentColumn()
5105
5079
  reactData.currentColumn = column
5106
5080
  }
5107
- return nextTick()
5081
+ return nextTick().then(() => {
5082
+ // 更新状选中态
5083
+ if (isMouseSelected) {
5084
+ $xeTable.addCellSelectedClass()
5085
+ }
5086
+ })
5108
5087
  },
5109
5088
  /**
5110
5089
  * 用于当前列,手动清空当前高亮的状态
@@ -5114,57 +5093,58 @@ export default defineComponent({
5114
5093
  return nextTick()
5115
5094
  },
5116
5095
  setPendingRow (rows: any | any[], status: boolean) {
5117
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps)
5096
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
5097
+ const { pendingRowMaps } = internalData
5118
5098
  if (rows && !XEUtils.isArray(rows)) {
5119
5099
  rows = [rows]
5120
5100
  }
5121
5101
  if (status) {
5122
5102
  rows.forEach((row: any) => {
5123
- const rowid = getRowid($xeTable, row)
5124
- if (rowid && !pendingMaps[rowid]) {
5125
- pendingMaps[rowid] = row
5103
+ const rowid = handleGetRowId(row)
5104
+ if (rowid && !pendingRowMaps[rowid]) {
5105
+ pendingRowMaps[rowid] = row
5126
5106
  }
5127
5107
  })
5128
5108
  } else {
5129
5109
  rows.forEach((row: any) => {
5130
- const rowid = getRowid($xeTable, row)
5131
- if (rowid && pendingMaps[rowid]) {
5132
- delete pendingMaps[rowid]
5110
+ const rowid = handleGetRowId(row)
5111
+ if (rowid && pendingRowMaps[rowid]) {
5112
+ delete pendingRowMaps[rowid]
5133
5113
  }
5134
5114
  })
5135
5115
  }
5136
- reactData.pendingRowMaps = pendingMaps
5116
+ reactData.pendingRowFlag++
5137
5117
  return nextTick()
5138
5118
  },
5139
5119
  togglePendingRow (rows: any | any[]) {
5140
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps)
5120
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
5121
+ const { pendingRowMaps } = internalData
5141
5122
  if (rows && !XEUtils.isArray(rows)) {
5142
5123
  rows = [rows]
5143
5124
  }
5144
5125
  rows.forEach((row: any) => {
5145
- const rowid = getRowid($xeTable, row)
5126
+ const rowid = handleGetRowId(row)
5146
5127
  if (rowid) {
5147
- if (pendingMaps[rowid]) {
5148
- delete pendingMaps[rowid]
5128
+ if (pendingRowMaps[rowid]) {
5129
+ delete pendingRowMaps[rowid]
5149
5130
  } else {
5150
- pendingMaps[rowid] = row
5131
+ pendingRowMaps[rowid] = row
5151
5132
  }
5152
5133
  }
5153
5134
  })
5154
- reactData.pendingRowMaps = pendingMaps
5135
+ reactData.pendingRowFlag++
5155
5136
  return nextTick()
5156
5137
  },
5157
5138
  hasPendingByRow (row) {
5158
5139
  return tableMethods.isPendingByRow(row)
5159
5140
  },
5160
5141
  isPendingByRow (row) {
5161
- const { pendingRowMaps } = reactData
5142
+ const { pendingRowMaps } = internalData
5162
5143
  const rowid = getRowid($xeTable, row)
5163
5144
  return !!pendingRowMaps[rowid]
5164
5145
  },
5165
5146
  getPendingRecords () {
5166
- const { pendingRowMaps } = reactData
5167
- const { fullAllDataRowIdData } = internalData
5147
+ const { fullAllDataRowIdData, pendingRowMaps } = internalData
5168
5148
  const insertRecords: any[] = []
5169
5149
  XEUtils.each(pendingRowMaps, (row, rowid) => {
5170
5150
  if (fullAllDataRowIdData[rowid]) {
@@ -5174,7 +5154,8 @@ export default defineComponent({
5174
5154
  return insertRecords
5175
5155
  },
5176
5156
  clearPendingRow () {
5177
- reactData.pendingRowMaps = {}
5157
+ internalData.pendingRowMaps = {}
5158
+ reactData.pendingRowFlag++
5178
5159
  return nextTick()
5179
5160
  },
5180
5161
  sort (sortConfs: any, sortOrder?: VxeTablePropTypes.SortOrder) {
@@ -5322,7 +5303,13 @@ export default defineComponent({
5322
5303
  visible: false
5323
5304
  })
5324
5305
  if (visible) {
5325
- dispatchEvent('filter-visible', { column, property: column.field, field: column.field, filterList: $xeTable.getCheckedFilters(), visible: false }, null)
5306
+ dispatchEvent('filter-visible', {
5307
+ column,
5308
+ property: column.field,
5309
+ field: column.field,
5310
+ filterList: () => $xeTable.getCheckedFilters(),
5311
+ visible: false
5312
+ }, null)
5326
5313
  }
5327
5314
  return nextTick()
5328
5315
  },
@@ -5350,17 +5337,16 @@ export default defineComponent({
5350
5337
  return rowRest && !!rowRest.expandLoaded
5351
5338
  },
5352
5339
  clearRowExpandLoaded (row) {
5353
- const rExpandLazyLoadedMaps = { ...reactData.rowExpandLazyLoadedMaps }
5354
- const { fullAllDataRowIdData } = internalData
5340
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData
5355
5341
  const expandOpts = computeExpandOpts.value
5356
5342
  const { lazy } = expandOpts
5357
5343
  const rowid = getRowid($xeTable, row)
5358
5344
  const rowRest = fullAllDataRowIdData[rowid]
5359
5345
  if (lazy && rowRest) {
5360
5346
  rowRest.expandLoaded = false
5361
- delete rExpandLazyLoadedMaps[rowid]
5347
+ delete rowExpandLazyLoadedMaps[rowid]
5362
5348
  }
5363
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps
5349
+ reactData.rowExpandedFlag++
5364
5350
  return nextTick()
5365
5351
  },
5366
5352
  /**
@@ -5368,12 +5354,12 @@ export default defineComponent({
5368
5354
  * @param {Row} row 行对象
5369
5355
  */
5370
5356
  reloadRowExpand (row) {
5371
- const { rowExpandLazyLoadedMaps } = reactData
5357
+ const { rowExpandLazyLoadedMaps } = internalData
5372
5358
  const expandOpts = computeExpandOpts.value
5373
5359
  const { lazy } = expandOpts
5374
5360
  const rowid = getRowid($xeTable, row)
5375
5361
  if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
5376
- tableMethods.clearRowExpandLoaded(row)
5362
+ $xeTable.clearRowExpandLoaded(row)
5377
5363
  .then(() => handleAsyncRowExpand(row))
5378
5364
  }
5379
5365
  return nextTick()
@@ -5383,13 +5369,13 @@ export default defineComponent({
5383
5369
  warnLog('vxe.error.delFunc', ['reloadExpandContent', 'reloadRowExpand'])
5384
5370
  }
5385
5371
  // 即将废弃
5386
- return tableMethods.reloadRowExpand(row)
5372
+ return $xeTable.reloadRowExpand(row)
5387
5373
  },
5388
5374
  /**
5389
5375
  * 切换展开行
5390
5376
  */
5391
5377
  toggleRowExpand (row) {
5392
- return tableMethods.setRowExpand(row, !tableMethods.isRowExpandByRow(row))
5378
+ return $xeTable.setRowExpand(row, !$xeTable.isRowExpandByRow(row))
5393
5379
  },
5394
5380
  /**
5395
5381
  * 设置所有行的展开与否
@@ -5417,9 +5403,9 @@ export default defineComponent({
5417
5403
  * @param {Boolean} expanded 是否展开
5418
5404
  */
5419
5405
  setRowExpand (rows, expanded) {
5420
- const { rowExpandedMaps, rowExpandLazyLoadedMaps, expandColumn } = reactData
5421
- const { fullAllDataRowIdData } = internalData
5422
- let rExpandedMaps = { ...rowExpandedMaps }
5406
+ const { expandColumn } = reactData
5407
+ let { fullAllDataRowIdData, rowExpandedMaps, rowExpandLazyLoadedMaps } = internalData
5408
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
5423
5409
  const expandOpts = computeExpandOpts.value
5424
5410
  const { reserve, lazy, accordion, toggleMethod } = expandOpts
5425
5411
  const lazyRests: any[] = []
@@ -5431,28 +5417,29 @@ export default defineComponent({
5431
5417
  }
5432
5418
  if (accordion) {
5433
5419
  // 只能同时展开一个
5434
- rExpandedMaps = {}
5420
+ rowExpandedMaps = {}
5421
+ internalData.rowExpandedMaps = rowExpandedMaps
5435
5422
  rows = rows.slice(rows.length - 1, rows.length)
5436
5423
  }
5437
5424
  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
5425
  if (expanded) {
5439
5426
  validRows.forEach((row: any) => {
5440
- const rowid = getRowid($xeTable, row)
5441
- if (!rExpandedMaps[rowid]) {
5427
+ const rowid = handleGetRowId(row)
5428
+ if (!rowExpandedMaps[rowid]) {
5442
5429
  const rowRest = fullAllDataRowIdData[rowid]
5443
5430
  const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid]
5444
5431
  if (isLoad) {
5445
5432
  lazyRests.push(handleAsyncRowExpand(row))
5446
5433
  } else {
5447
- rExpandedMaps[rowid] = row
5434
+ rowExpandedMaps[rowid] = row
5448
5435
  }
5449
5436
  }
5450
5437
  })
5451
5438
  } else {
5452
5439
  validRows.forEach(item => {
5453
- const rowid = getRowid($xeTable, item)
5454
- if (rExpandedMaps[rowid]) {
5455
- delete rExpandedMaps[rowid]
5440
+ const rowid = handleGetRowId(item)
5441
+ if (rowExpandedMaps[rowid]) {
5442
+ delete rowExpandedMaps[rowid]
5456
5443
  }
5457
5444
  })
5458
5445
  }
@@ -5460,7 +5447,7 @@ export default defineComponent({
5460
5447
  validRows.forEach((row) => handleRowExpandReserve(row, expanded))
5461
5448
  }
5462
5449
  }
5463
- reactData.rowExpandedMaps = rExpandedMaps
5450
+ reactData.rowExpandedFlag++
5464
5451
  return Promise.all(lazyRests)
5465
5452
  .then(() => nextTick())
5466
5453
  .then(() => $xeTable.recalculate(true))
@@ -5476,9 +5463,10 @@ export default defineComponent({
5476
5463
  * @param {Row} row 行对象
5477
5464
  */
5478
5465
  isRowExpandByRow (row) {
5479
- const { rowExpandedMaps } = reactData
5466
+ const { rowExpandedFlag } = reactData
5467
+ const { rowExpandedMaps } = internalData
5480
5468
  const rowid = getRowid($xeTable, row)
5481
- return !!rowExpandedMaps[rowid]
5469
+ return !!rowExpandedFlag && !!rowExpandedMaps[rowid]
5482
5470
  },
5483
5471
  isExpandByRow (row) {
5484
5472
  // 已废弃
@@ -5495,7 +5483,8 @@ export default defineComponent({
5495
5483
  const expandOpts = computeExpandOpts.value
5496
5484
  const { reserve } = expandOpts
5497
5485
  const expList = $xeTable.getRowExpandRecords()
5498
- reactData.rowExpandedMaps = {}
5486
+ internalData.rowExpandedMaps = {}
5487
+ reactData.rowExpandedFlag++
5499
5488
  if (reserve) {
5500
5489
  tableFullData.forEach((row) => handleRowExpandReserve(row, false))
5501
5490
  }
@@ -5516,7 +5505,7 @@ export default defineComponent({
5516
5505
  },
5517
5506
  getRowExpandRecords () {
5518
5507
  const rest: any[] = []
5519
- XEUtils.each(reactData.rowExpandedMaps, item => {
5508
+ XEUtils.each(internalData.rowExpandedMaps, item => {
5520
5509
  if (item) {
5521
5510
  rest.push(item)
5522
5511
  }
@@ -5525,7 +5514,7 @@ export default defineComponent({
5525
5514
  },
5526
5515
  getTreeExpandRecords () {
5527
5516
  const rest: any[] = []
5528
- XEUtils.each(reactData.treeExpandedMaps, item => {
5517
+ XEUtils.each(internalData.treeExpandedMaps, item => {
5529
5518
  if (item) {
5530
5519
  rest.push(item)
5531
5520
  }
@@ -5542,12 +5531,10 @@ export default defineComponent({
5542
5531
  return rowRest && !!rowRest.treeLoaded
5543
5532
  },
5544
5533
  clearTreeExpandLoaded (rows: any) {
5545
- const { fullAllDataRowIdData } = internalData
5534
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData
5546
5535
  const treeOpts = computeTreeOpts.value
5547
5536
  const { transform } = treeOpts
5548
- let tExpandedMaps: Record<string, any> = {}
5549
5537
  if (rows) {
5550
- tExpandedMaps = { ...reactData.treeExpandedMaps }
5551
5538
  if (!XEUtils.isArray(rows)) {
5552
5539
  rows = [rows]
5553
5540
  }
@@ -5556,8 +5543,8 @@ export default defineComponent({
5556
5543
  const rowRest = fullAllDataRowIdData[rowid]
5557
5544
  if (rowRest) {
5558
5545
  rowRest.treeLoaded = false
5559
- if (tExpandedMaps[rowid]) {
5560
- delete tExpandedMaps[rowid]
5546
+ if (treeExpandedMaps[rowid]) {
5547
+ delete treeExpandedMaps[rowid]
5561
5548
  }
5562
5549
  }
5563
5550
  })
@@ -5566,7 +5553,8 @@ export default defineComponent({
5566
5553
  rowRest.treeLoaded = false
5567
5554
  })
5568
5555
  }
5569
- reactData.treeExpandedMaps = {}
5556
+ internalData.treeExpandedMaps = {}
5557
+ reactData.treeExpandedFlag++
5570
5558
  if (transform) {
5571
5559
  handleVirtualTreeToList()
5572
5560
  return $xeTable.handleTableData()
@@ -5578,7 +5566,7 @@ export default defineComponent({
5578
5566
  * @param {Row} row 行对象
5579
5567
  */
5580
5568
  reloadTreeExpand (row) {
5581
- const { treeExpandLazyLoadedMaps } = reactData
5569
+ const { treeExpandLazyLoadedMaps } = internalData
5582
5570
  const treeOpts = computeTreeOpts.value
5583
5571
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
5584
5572
  const { transform, lazy } = treeOpts
@@ -5663,8 +5651,9 @@ export default defineComponent({
5663
5651
  * @param {Row} row 行对象
5664
5652
  */
5665
5653
  isTreeExpandByRow (row) {
5666
- const { treeExpandedMaps } = reactData
5667
- return !!treeExpandedMaps[getRowid($xeTable, row)]
5654
+ const { treeExpandedFlag } = reactData
5655
+ const { treeExpandedMaps } = internalData
5656
+ return !!treeExpandedFlag && !!treeExpandedMaps[getRowid($xeTable, row)]
5668
5657
  },
5669
5658
  /**
5670
5659
  * 手动清空树形节点的展开状态,数据会恢复成未展开的状态
@@ -5674,19 +5663,20 @@ export default defineComponent({
5674
5663
  const treeOpts = computeTreeOpts.value
5675
5664
  const childrenField = treeOpts.children || treeOpts.childrenField
5676
5665
  const { transform, reserve } = treeOpts
5677
- const expList = tableMethods.getTreeExpandRecords()
5678
- reactData.treeExpandedMaps = {}
5666
+ const expList = $xeTable.getTreeExpandRecords()
5667
+ internalData.treeExpandedMaps = {}
5668
+ reactData.treeExpandedFlag++
5679
5669
  if (reserve) {
5680
5670
  XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve(row, false), { children: childrenField })
5681
5671
  }
5682
- return tablePrivateMethods.handleTableData().then(() => {
5672
+ return $xeTable.handleTableData().then(() => {
5683
5673
  if (transform) {
5684
5674
  handleVirtualTreeToList()
5685
- return tablePrivateMethods.handleTableData()
5675
+ return $xeTable.handleTableData()
5686
5676
  }
5687
5677
  }).then(() => {
5688
5678
  if (expList.length) {
5689
- return tableMethods.recalculate()
5679
+ return $xeTable.recalculate()
5690
5680
  }
5691
5681
  })
5692
5682
  },
@@ -5945,7 +5935,13 @@ export default defineComponent({
5945
5935
  const { id } = props
5946
5936
  const customOpts = computeCustomOpts.value
5947
5937
  const { collectColumn } = internalData
5948
- const { checkMethod } = customOpts
5938
+ const { storage, checkMethod } = customOpts
5939
+ const isAllCustom = storage === true
5940
+ const storageOpts: VxeTableDefines.VxeTableCustomStorageObj = isAllCustom ? {} : Object.assign({}, storage || {})
5941
+ const isCustomResizable = isAllCustom || storageOpts.resizable
5942
+ const isCustomVisible = isAllCustom || storageOpts.visible
5943
+ const isCustomFixed = isAllCustom || storageOpts.fixed
5944
+ const isCustomSort = isAllCustom || storageOpts.sort
5949
5945
  const resizableData: Record<string, number> = {}
5950
5946
  const sortData: Record<string, number> = {}
5951
5947
  const visibleData: Record<string, boolean> = {}
@@ -5965,43 +5961,33 @@ export default defineComponent({
5965
5961
  let hasFixed = 0
5966
5962
  let hasVisible = 0
5967
5963
  XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => {
5964
+ const colKey = column.getKey()
5965
+ if (!colKey) {
5966
+ errLog('vxe.error.reqProp', [`${column.getTitle() || column.type || ''} -> column.field=?`])
5967
+ return
5968
+ }
5968
5969
  // 只支持一级
5969
5970
  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
- }
5971
+ if (isCustomSort) {
5972
+ hasSort = 1
5973
+ sortData[colKey] = column.renderSortNumber
5983
5974
  }
5984
- }
5985
- if (column.resizeWidth) {
5986
- const colKey = column.getKey()
5987
- if (colKey) {
5988
- hasResizable = 1
5989
- resizableData[colKey] = column.renderWidth
5975
+ if (isCustomFixed && column.fixed !== column.defaultFixed) {
5976
+ hasFixed = 1
5977
+ fixedData[colKey] = column.fixed
5990
5978
  }
5991
5979
  }
5992
- if (!checkMethod || checkMethod({ column })) {
5980
+ if (isCustomResizable && column.resizeWidth) {
5981
+ hasResizable = 1
5982
+ resizableData[colKey] = column.renderWidth
5983
+ }
5984
+ if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
5993
5985
  if (!column.visible && column.defaultVisible) {
5994
- const colKey = column.getKey()
5995
- if (colKey) {
5996
- hasVisible = 1
5997
- visibleData[colKey] = false
5998
- }
5986
+ hasVisible = 1
5987
+ visibleData[colKey] = false
5999
5988
  } else if (column.visible && !column.defaultVisible) {
6000
- const colKey = column.getKey()
6001
- if (colKey) {
6002
- hasVisible = 1
6003
- visibleData[colKey] = true
6004
- }
5989
+ hasVisible = 1
5990
+ visibleData[colKey] = true
6005
5991
  }
6006
5992
  }
6007
5993
  })
@@ -6351,7 +6337,7 @@ export default defineComponent({
6351
6337
  if (keyboardOpts.enterToTab) {
6352
6338
  $xeTable.moveTabSelected(activeParams, hasShiftKey, evnt)
6353
6339
  } else {
6354
- $xeTable.moveSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt)
6340
+ $xeTable.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt)
6355
6341
  }
6356
6342
  } else {
6357
6343
  if (keyboardOpts.enterToTab) {
@@ -6383,7 +6369,7 @@ export default defineComponent({
6383
6369
  return
6384
6370
  }
6385
6371
  }
6386
- $xeTable.moveSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt)
6372
+ $xeTable.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt)
6387
6373
  if (enterMethod) {
6388
6374
  enterMethod(etrParams)
6389
6375
  }
@@ -6412,10 +6398,7 @@ export default defineComponent({
6412
6398
  if (!isEditStatus) {
6413
6399
  // 如果按下了方向键
6414
6400
  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)
6401
+ $xeTable.moveArrowSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt)
6419
6402
  }
6420
6403
  }
6421
6404
  } else if (isTab && keyboardConfig && keyboardOpts.isTab) {
@@ -6793,8 +6776,9 @@ export default defineComponent({
6793
6776
  * @param {Event} evnt 事件
6794
6777
  * @param {Row} row 行对象
6795
6778
  */
6796
- const handleTooltip = (evnt: MouseEvent, tdEl: HTMLTableCellElement, overflowElem: HTMLElement, tipElem: HTMLElement | null, params: any) => {
6797
- if (!overflowElem) {
6779
+ const handleTooltip = (evnt: MouseEvent, tdEl: HTMLTableCellElement, overflowElem: HTMLElement | null, params: any) => {
6780
+ const tipOverEl = overflowElem || tdEl
6781
+ if (!tipOverEl) {
6798
6782
  return nextTick()
6799
6783
  }
6800
6784
  params.cell = tdEl
@@ -6804,9 +6788,8 @@ export default defineComponent({
6804
6788
  const { showAll, contentMethod } = tooltipOpts
6805
6789
  const customContent = contentMethod ? contentMethod(params) : null
6806
6790
  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)) {
6791
+ const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? tipOverEl.innerText : tipOverEl.textContent).trim()
6792
+ if (content && (showAll || useCustom || (tipOverEl.scrollWidth > tipOverEl.clientWidth))) {
6810
6793
  Object.assign(tooltipStore, {
6811
6794
  row,
6812
6795
  column,
@@ -6816,7 +6799,7 @@ export default defineComponent({
6816
6799
  nextTick(() => {
6817
6800
  const $tooltip = refTooltip.value
6818
6801
  if ($tooltip && $tooltip.open) {
6819
- $tooltip.open(isCellOverflow ? overflowElem : (tipElem || overflowElem), formatText(content))
6802
+ $tooltip.open(tipOverEl, formatText(content))
6820
6803
  }
6821
6804
  })
6822
6805
  }
@@ -6958,19 +6941,15 @@ export default defineComponent({
6958
6941
  */
6959
6942
  cacheRowMap () {
6960
6943
  const { treeConfig } = props
6961
- const { treeExpandedMaps } = reactData
6962
- const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData
6944
+ const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData
6963
6945
  const treeOpts = computeTreeOpts.value
6964
6946
  const childrenField = treeOpts.children || treeOpts.childrenField
6965
6947
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
6966
6948
  const { lazy } = treeOpts
6967
- const rowkey = getRowkey($xeTable)
6968
- const isDeepKey = rowkey.indexOf('.') > -1
6969
6949
  const fullAllDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = { ...fullAllDataRowIdData } // 存在已删除数据
6970
6950
  const fullDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = {}
6971
- const treeTempExpandedMaps = { ...treeExpandedMaps }
6972
6951
 
6973
- const handleRowId = isDeepKey ? updateDeepRowKey : updateFastRowKey
6952
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable)
6974
6953
  const handleRowCache = (row: any, index: number, items: any, currIndex: number, parentRow: any, rowid: string, level: number, seq: string | number) => {
6975
6954
  let rowRest = fullAllDataRowIdMaps[rowid]
6976
6955
  if (!rowRest) {
@@ -6994,15 +6973,14 @@ export default defineComponent({
6994
6973
 
6995
6974
  if (treeConfig) {
6996
6975
  XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
6997
- const rowid = handleRowId(row, rowkey)
6976
+ const rowid = handleUpdateRowId(row)
6998
6977
  if (treeConfig && lazy) {
6999
- const treeExpRest = treeTempExpandedMaps[rowid]
7000
6978
  if (row[hasChildField] && row[childrenField] === undefined) {
7001
6979
  row[childrenField] = null
7002
6980
  }
7003
- if (treeExpRest) {
6981
+ if (treeExpandedMaps[rowid]) {
7004
6982
  if (!row[childrenField] || !row[childrenField].length) {
7005
- delete treeTempExpandedMaps[rowid]
6983
+ delete treeExpandedMaps[rowid]
7006
6984
  }
7007
6985
  }
7008
6986
  }
@@ -7010,28 +6988,23 @@ export default defineComponent({
7010
6988
  }, { children: childrenField })
7011
6989
  } else {
7012
6990
  tableFullData.forEach((row, index, items) => {
7013
- handleRowCache(row, index, items, index, null, handleRowId(row, rowkey), 0, index + 1)
6991
+ handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1)
7014
6992
  })
7015
6993
  }
7016
6994
 
7017
6995
  internalData.fullDataRowIdData = fullDataRowIdMaps
7018
6996
  internalData.fullAllDataRowIdData = fullAllDataRowIdMaps
7019
- reactData.treeExpandedMaps = treeTempExpandedMaps
6997
+ reactData.treeExpandedFlag++
7020
6998
  },
7021
6999
  cacheSourceMap (fullData) {
7022
7000
  const { treeConfig } = props
7023
7001
  const treeOpts = computeTreeOpts.value
7024
- let { sourceDataRowIdData } = internalData
7025
7002
  const sourceData = XEUtils.clone(fullData, true)
7026
- const rowkey = getRowkey($xeTable)
7027
- sourceDataRowIdData = internalData.sourceDataRowIdData = {}
7003
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable)
7004
+ const sourceRowIdData: Record<string, any> = {}
7028
7005
  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
7006
+ const rowid = handleUpdateRowId(row)
7007
+ sourceRowIdData[rowid] = row
7035
7008
  }
7036
7009
  // 源数据缓存
7037
7010
  if (treeConfig) {
@@ -7040,6 +7013,7 @@ export default defineComponent({
7040
7013
  } else {
7041
7014
  sourceData.forEach(handleSourceRow)
7042
7015
  }
7016
+ internalData.sourceDataRowIdData = sourceRowIdData
7043
7017
  internalData.tableSourceData = sourceData
7044
7018
  },
7045
7019
  /**
@@ -7486,8 +7460,21 @@ export default defineComponent({
7486
7460
  }
7487
7461
  // 兼容老版本
7488
7462
 
7489
- let rest
7490
- if (!evntList.some((func) => func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args)) === false)) {
7463
+ let rest = null
7464
+ let isStop = false
7465
+ for (let i = 0; i < evntList.length; i++) {
7466
+ const func = evntList[i]
7467
+ const fnRest = func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args))
7468
+ if (fnRest === false) {
7469
+ isStop = true
7470
+ break
7471
+ } else if (fnRest && fnRest.status === false) {
7472
+ rest = fnRest.result
7473
+ isStop = true
7474
+ break
7475
+ }
7476
+ }
7477
+ if (!isStop) {
7491
7478
  if (next) {
7492
7479
  rest = next()
7493
7480
  }
@@ -7499,9 +7486,7 @@ export default defineComponent({
7499
7486
  },
7500
7487
  updateCheckboxStatus () {
7501
7488
  const { treeConfig } = props
7502
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData
7503
- const selectRowMaps = Object.assign({}, selectCheckboxMaps)
7504
- const halfRowMaps = Object.assign({}, treeIndeterminateMaps)
7489
+ const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData
7505
7490
  const treeOpts = computeTreeOpts.value
7506
7491
  const { transform, mapChildrenField } = treeOpts
7507
7492
  const childrenField = treeOpts.children || treeOpts.childrenField
@@ -7513,10 +7498,11 @@ export default defineComponent({
7513
7498
  }
7514
7499
  // 树结构
7515
7500
  if (treeConfig) {
7501
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
7516
7502
  const childRowMaps: Record<string, number> = {}
7517
7503
  const childRowList: any[][] = []
7518
7504
  XEUtils.eachTree(afterTreeFullData, (row) => {
7519
- const rowid = getRowid($xeTable, row)
7505
+ const rowid = handleGetRowId(row)
7520
7506
  const childList = row[transform ? mapChildrenField : childrenField]
7521
7507
  if (childList && childList.length && !childRowMaps[rowid]) {
7522
7508
  childRowMaps[rowid] = 1
@@ -7533,29 +7519,29 @@ export default defineComponent({
7533
7519
  childList.forEach(
7534
7520
  checkMethod
7535
7521
  ? (item) => {
7536
- const childRowid = getRowid($xeTable, item)
7537
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid]
7522
+ const childRowid = handleGetRowId(item)
7523
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid]
7538
7524
  if (checkMethod({ row: item })) {
7539
7525
  if (isSelect) {
7540
7526
  sLen++
7541
- } else if (halfRowMaps[childRowid]) {
7527
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7542
7528
  hLen++
7543
7529
  }
7544
7530
  vLen++
7545
7531
  } else {
7546
7532
  if (isSelect) {
7547
7533
  sLen++
7548
- } else if (halfRowMaps[childRowid]) {
7534
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7549
7535
  hLen++
7550
7536
  }
7551
7537
  }
7552
7538
  }
7553
7539
  : item => {
7554
- const childRowid = getRowid($xeTable, item)
7555
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid]
7540
+ const childRowid = handleGetRowId(item)
7541
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid]
7556
7542
  if (isSelect) {
7557
7543
  sLen++
7558
- } else if (halfRowMaps[childRowid]) {
7544
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7559
7545
  hLen++
7560
7546
  }
7561
7547
  vLen++
@@ -7568,36 +7554,35 @@ export default defineComponent({
7568
7554
  }
7569
7555
  if (isSelected) {
7570
7556
  if (!checkField) {
7571
- selectRowMaps[rowid] = row
7557
+ selectCheckboxMaps[rowid] = row
7572
7558
  }
7573
- if (halfRowMaps[rowid]) {
7574
- delete halfRowMaps[rowid]
7559
+ if (treeIndeterminateRowMaps[rowid]) {
7560
+ delete treeIndeterminateRowMaps[rowid]
7575
7561
  }
7576
7562
  } else {
7577
7563
  if (!checkField) {
7578
- if (selectRowMaps[rowid]) {
7579
- delete selectRowMaps[rowid]
7564
+ if (selectCheckboxMaps[rowid]) {
7565
+ delete selectCheckboxMaps[rowid]
7580
7566
  }
7581
7567
  }
7582
7568
  if (halfSelect) {
7583
- halfRowMaps[rowid] = row
7569
+ treeIndeterminateRowMaps[rowid] = row
7584
7570
  } else {
7585
- if (halfRowMaps[rowid]) {
7586
- delete halfRowMaps[rowid]
7571
+ if (treeIndeterminateRowMaps[rowid]) {
7572
+ delete treeIndeterminateRowMaps[rowid]
7587
7573
  }
7588
7574
  }
7589
7575
  }
7590
7576
  })
7591
7577
  }
7592
- reactData.selectCheckboxMaps = selectRowMaps
7593
- reactData.treeIndeterminateMaps = halfRowMaps
7578
+ reactData.updateCheckboxFlag++
7594
7579
  },
7595
7580
  updateAllCheckboxStatus () {
7596
7581
  const { treeConfig } = props
7597
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData
7582
+ const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData
7598
7583
  const checkboxOpts = computeCheckboxOpts.value
7599
7584
  const { checkField, checkMethod, showReserveStatus } = checkboxOpts
7600
- const { afterFullData, afterTreeFullData, checkboxReserveRowMap } = internalData
7585
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
7601
7586
 
7602
7587
  let sLen = 0 // 已选
7603
7588
  let hLen = 0 // 半选
@@ -7606,29 +7591,29 @@ export default defineComponent({
7606
7591
  const rootList = (treeConfig ? afterTreeFullData : afterFullData)
7607
7592
  rootList.forEach(checkMethod
7608
7593
  ? row => {
7609
- const childRowid = getRowid($xeTable, row)
7594
+ const childRowid = handleGetRowId(row)
7610
7595
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid]
7611
7596
  if (checkMethod({ row })) {
7612
7597
  if (selected) {
7613
7598
  sLen++
7614
- } else if (treeIndeterminateMaps[childRowid]) {
7599
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7615
7600
  hLen++
7616
7601
  }
7617
7602
  vLen++
7618
7603
  } else {
7619
7604
  if (selected) {
7620
7605
  sLen++
7621
- } else if (treeIndeterminateMaps[childRowid]) {
7606
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7622
7607
  hLen++
7623
7608
  }
7624
7609
  }
7625
7610
  }
7626
7611
  : row => {
7627
- const childRowid = getRowid($xeTable, row)
7612
+ const childRowid = handleGetRowId(row)
7628
7613
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid]
7629
7614
  if (selected) {
7630
7615
  sLen++
7631
- } else if (treeIndeterminateMaps[childRowid]) {
7616
+ } else if (treeIndeterminateRowMaps[childRowid]) {
7632
7617
  hLen++
7633
7618
  }
7634
7619
  vLen++
@@ -7655,13 +7640,13 @@ export default defineComponent({
7655
7640
  */
7656
7641
  handleBatchSelectRows (rows, checked, isForce) {
7657
7642
  const { treeConfig } = props
7658
- const { selectCheckboxMaps } = reactData
7659
- const selectRowMaps = Object.assign({}, selectCheckboxMaps)
7643
+ const { selectCheckboxMaps } = internalData
7660
7644
  const treeOpts = computeTreeOpts.value
7661
7645
  const { transform, mapChildrenField } = treeOpts
7662
7646
  const childrenField = treeOpts.children || treeOpts.childrenField
7663
7647
  const checkboxOpts = computeCheckboxOpts.value
7664
7648
  const { checkField, checkStrictly, checkMethod } = checkboxOpts
7649
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
7665
7650
  // indeterminateField 仅支持读取
7666
7651
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
7667
7652
  if (checkField) {
@@ -7677,18 +7662,17 @@ export default defineComponent({
7677
7662
  handleCheckboxReserveRow(row, checked)
7678
7663
  }
7679
7664
  }, { children: transform ? mapChildrenField : childrenField })
7680
- reactData.selectCheckboxMaps = selectRowMaps
7665
+ reactData.updateCheckboxFlag++
7681
7666
  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
7667
  }
7691
- reactData.selectCheckboxMaps = selectRowMaps
7668
+ // 列表
7669
+ rows.forEach(row => {
7670
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
7671
+ XEUtils.set(row, checkField, checked)
7672
+ handleCheckboxReserveRow(row, checked)
7673
+ }
7674
+ })
7675
+ reactData.updateCheckboxFlag++
7692
7676
  return
7693
7677
  }
7694
7678
 
@@ -7696,39 +7680,39 @@ export default defineComponent({
7696
7680
  if (treeConfig && !checkStrictly) {
7697
7681
  // 更新子节点状态
7698
7682
  XEUtils.eachTree(rows, (row) => {
7699
- const rowid = getRowid($xeTable, row)
7683
+ const rowid = handleGetRowId(row)
7700
7684
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7701
7685
  if (checked) {
7702
- selectRowMaps[rowid] = row
7686
+ selectCheckboxMaps[rowid] = row
7703
7687
  } else {
7704
- if (selectRowMaps[rowid]) {
7705
- delete selectRowMaps[rowid]
7688
+ if (selectCheckboxMaps[rowid]) {
7689
+ delete selectCheckboxMaps[rowid]
7706
7690
  }
7707
7691
  }
7708
7692
  handleCheckboxReserveRow(row, checked)
7709
7693
  }
7710
7694
  }, { children: transform ? mapChildrenField : childrenField })
7711
- reactData.selectCheckboxMaps = selectRowMaps
7695
+ reactData.updateCheckboxFlag++
7712
7696
  return
7713
7697
  }
7714
7698
 
7715
7699
  // 列表
7716
7700
  rows.forEach(row => {
7717
- const rowid = getRowid($xeTable, row)
7701
+ const rowid = handleGetRowId(row)
7718
7702
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7719
7703
  if (checked) {
7720
- if (!selectRowMaps[rowid]) {
7721
- selectRowMaps[rowid] = row
7704
+ if (!selectCheckboxMaps[rowid]) {
7705
+ selectCheckboxMaps[rowid] = row
7722
7706
  }
7723
7707
  } else {
7724
- if (selectRowMaps[rowid]) {
7725
- delete selectRowMaps[rowid]
7708
+ if (selectCheckboxMaps[rowid]) {
7709
+ delete selectCheckboxMaps[rowid]
7726
7710
  }
7727
7711
  }
7728
7712
  handleCheckboxReserveRow(row, checked)
7713
+ reactData.updateCheckboxFlag++
7729
7714
  }
7730
7715
  })
7731
- reactData.selectCheckboxMaps = selectRowMaps
7732
7716
  },
7733
7717
  /**
7734
7718
  * 即将移除
@@ -7776,7 +7760,7 @@ export default defineComponent({
7776
7760
  return
7777
7761
  }
7778
7762
  if (tooltipStore.column !== column || !tooltipStore.visible) {
7779
- handleTooltip(evnt, thEl, cellEl, null, params)
7763
+ handleTooltip(evnt, thEl, thEl.querySelector<HTMLElement>('.vxe-cell--title') || cellEl, params)
7780
7764
  }
7781
7765
  },
7782
7766
  /**
@@ -7803,7 +7787,7 @@ export default defineComponent({
7803
7787
  }
7804
7788
  }
7805
7789
  if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
7806
- handleTooltip(evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper') as HTMLElement, null, params)
7790
+ handleTooltip(evnt, tdEl, tdEl.querySelector<HTMLElement>('.vxe-cell--label') || tdEl.querySelector<HTMLElement>('.vxe-cell--wrapper'), params)
7807
7791
  }
7808
7792
  },
7809
7793
  /**
@@ -7812,10 +7796,10 @@ export default defineComponent({
7812
7796
  triggerFooterTooltipEvent (evnt, params) {
7813
7797
  const { column } = params
7814
7798
  const { tooltipStore } = reactData
7815
- const cell = evnt.currentTarget as HTMLTableCellElement
7799
+ const tdEl = evnt.currentTarget as HTMLTableCellElement
7816
7800
  handleTargetEnterEvent(tooltipStore.column !== column || !!tooltipStore.row)
7817
7801
  if (tooltipStore.column !== column || !tooltipStore.visible) {
7818
- handleTooltip(evnt, cell, cell.querySelector('.vxe-cell--wrapper') as HTMLElement || cell.children[0], null, params)
7802
+ handleTooltip(evnt, tdEl, tdEl.querySelector<HTMLElement>('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper') as HTMLElement, params)
7819
7803
  }
7820
7804
  },
7821
7805
  handleTargetLeaveEvent () {
@@ -7839,17 +7823,18 @@ export default defineComponent({
7839
7823
  const { _lastResizeTime } = internalData
7840
7824
  const sortOpts = computeSortOpts.value
7841
7825
  const columnOpts = computeColumnOpts.value
7826
+ const currentColumnOpts = computeCurrentColumnOpts.value
7842
7827
  const { column } = params
7843
7828
  const cell = evnt.currentTarget
7844
7829
  const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300
7845
7830
  const triggerSort = getEventTargetNode(evnt, cell, 'vxe-cell--sort').flag
7846
7831
  const triggerFilter = getEventTargetNode(evnt, cell, 'vxe-cell--filter').flag
7847
7832
  if (sortOpts.trigger === 'cell' && !(triggerResizable || triggerSort || triggerFilter)) {
7848
- tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column))
7833
+ $xeTable.triggerSortEvent(evnt, column, getNextSortOrder(column))
7849
7834
  }
7850
7835
  dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt)
7851
- if (columnOpts.isCurrent || props.highlightCurrentColumn) {
7852
- tablePrivateMethods.triggerCurrentColumnEvent(evnt, params)
7836
+ if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
7837
+ $xeTable.triggerCurrentColumnEvent(evnt, params)
7853
7838
  }
7854
7839
  },
7855
7840
  triggerHeaderCellDblclickEvent (evnt, params) {
@@ -7861,7 +7846,7 @@ export default defineComponent({
7861
7846
  * 如果是双击模式,则单击后选中状态
7862
7847
  */
7863
7848
  triggerCellClickEvent (evnt, params) {
7864
- const { highlightCurrentRow, editConfig } = props
7849
+ const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props
7865
7850
  const { editStore, isDragResize } = reactData
7866
7851
  if (isDragResize) {
7867
7852
  return
@@ -7873,6 +7858,8 @@ export default defineComponent({
7873
7858
  const checkboxOpts = computeCheckboxOpts.value
7874
7859
  const keyboardOpts = computeKeyboardOpts.value
7875
7860
  const rowOpts = computeRowOpts.value
7861
+ const columnOpts = computeColumnOpts.value
7862
+ const currentColumnOpts = computeCurrentColumnOpts.value
7876
7863
  const { actived, focused } = editStore
7877
7864
  const { row, column } = params
7878
7865
  const { type, treeNode } = column
@@ -7888,29 +7875,35 @@ export default defineComponent({
7888
7875
  if (!triggerCheckbox && !triggerRadio) {
7889
7876
  // 如果是展开行
7890
7877
  if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
7891
- tablePrivateMethods.triggerRowExpandEvent(evnt, params)
7878
+ $xeTable.triggerRowExpandEvent(evnt, params)
7892
7879
  }
7893
7880
  // 如果是树形表格
7894
7881
  if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
7895
- tablePrivateMethods.triggerTreeExpandEvent(evnt, params)
7882
+ $xeTable.triggerTreeExpandEvent(evnt, params)
7896
7883
  }
7897
7884
  }
7898
7885
  // 如果点击了树节点
7899
7886
  if (!triggerTreeNode) {
7900
7887
  if (!triggerExpandNode) {
7901
- // 如果是高亮行
7888
+ // 如果是当前行
7902
7889
  if (rowOpts.isCurrent || highlightCurrentRow) {
7903
7890
  if (!triggerCheckbox && !triggerRadio) {
7904
- tablePrivateMethods.triggerCurrentRowEvent(evnt, params)
7891
+ $xeTable.triggerCurrentRowEvent(evnt, params)
7892
+ }
7893
+ }
7894
+ // 如果是当前列
7895
+ if ((columnOpts.isCurrent || highlightCurrentColumn) && (!currentColumnOpts.trigger || ['cell', 'default'].includes(currentColumnOpts.trigger))) {
7896
+ if (!triggerCheckbox && !triggerRadio) {
7897
+ $xeTable.triggerCurrentColumnEvent(evnt, params)
7905
7898
  }
7906
7899
  }
7907
7900
  // 如果是单选框
7908
7901
  if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
7909
- tablePrivateMethods.triggerRadioRowEvent(evnt, params)
7902
+ $xeTable.triggerRadioRowEvent(evnt, params)
7910
7903
  }
7911
7904
  // 如果是复选框
7912
7905
  if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
7913
- tablePrivateMethods.handleToggleCheckRowEvent(evnt, params)
7906
+ $xeTable.handleToggleCheckRowEvent(evnt, params)
7914
7907
  }
7915
7908
  }
7916
7909
  // 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
@@ -7985,7 +7978,7 @@ export default defineComponent({
7985
7978
  dispatchEvent('cell-dblclick', params, evnt)
7986
7979
  },
7987
7980
  handleToggleCheckRowEvent (evnt, params) {
7988
- const { selectCheckboxMaps } = reactData
7981
+ const { selectCheckboxMaps } = internalData
7989
7982
  const checkboxOpts = computeCheckboxOpts.value
7990
7983
  const { checkField, trigger } = checkboxOpts
7991
7984
  const { row } = params
@@ -7999,43 +7992,45 @@ export default defineComponent({
7999
7992
  checked = !selectCheckboxMaps[getRowid($xeTable, row)]
8000
7993
  }
8001
7994
  if (evnt) {
8002
- tablePrivateMethods.triggerCheckRowEvent(evnt, params, checked)
7995
+ $xeTable.triggerCheckRowEvent(evnt, params, checked)
8003
7996
  } else {
8004
- tablePrivateMethods.handleBatchSelectRows([row], checked)
8005
- tablePrivateMethods.checkSelectionStatus()
7997
+ $xeTable.handleBatchSelectRows([row], checked)
7998
+ $xeTable.checkSelectionStatus()
8006
7999
  }
8007
8000
  },
8008
8001
  triggerCheckRowEvent (evnt: MouseEvent, params, checked) {
8009
- const checkboxOpts = computeCheckboxOpts.value
8010
8002
  const { row } = params
8011
8003
  const { afterFullData } = internalData
8004
+ const checkboxOpts = computeCheckboxOpts.value
8012
8005
  const { checkMethod, trigger } = checkboxOpts
8013
8006
  if (trigger === 'manual') {
8014
8007
  return
8015
8008
  }
8016
8009
  evnt.stopPropagation()
8017
8010
  if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
8018
- const checkboxRecords = tableMethods.getCheckboxRecords()
8011
+ const checkboxRecords = $xeTable.getCheckboxRecords()
8019
8012
  if (checkboxRecords.length) {
8020
8013
  const firstRow = checkboxRecords[0]
8021
- const _rowIndex = tableMethods.getVTRowIndex(row)
8022
- const _firstRowIndex = tableMethods.getVTRowIndex(firstRow)
8014
+ const _rowIndex = $xeTable.getVTRowIndex(row)
8015
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow)
8023
8016
  if (_rowIndex !== _firstRowIndex) {
8024
- tableMethods.setAllCheckboxRow(false)
8017
+ $xeTable.setAllCheckboxRow(false)
8025
8018
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1)
8026
- handleCheckedCheckboxRow(rangeRows, true, false)
8019
+ nextTick(() => {
8020
+ handleCheckedCheckboxRow(rangeRows, true, false)
8021
+ })
8027
8022
  dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt)
8028
8023
  return
8029
8024
  }
8030
8025
  }
8031
8026
  }
8032
8027
  if (!checkMethod || checkMethod({ row })) {
8033
- tablePrivateMethods.handleBatchSelectRows([row], checked)
8034
- tablePrivateMethods.checkSelectionStatus()
8028
+ $xeTable.handleBatchSelectRows([row], checked)
8029
+ $xeTable.checkSelectionStatus()
8035
8030
  dispatchEvent('checkbox-change', Object.assign({
8036
- records: tableMethods.getCheckboxRecords(),
8037
- reserves: tableMethods.getCheckboxReserveRecords(),
8038
- indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
8031
+ records: () => $xeTable.getCheckboxRecords(),
8032
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
8033
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
8039
8034
  checked
8040
8035
  }, params), evnt)
8041
8036
  }
@@ -8106,7 +8101,8 @@ export default defineComponent({
8106
8101
  * 展开行事件
8107
8102
  */
8108
8103
  triggerRowExpandEvent (evnt, params) {
8109
- const { rowExpandLazyLoadedMaps, expandColumn: column } = reactData
8104
+ const { expandColumn: column } = reactData
8105
+ const { rowExpandLazyLoadedMaps } = internalData
8110
8106
  const expandOpts = computeExpandOpts.value
8111
8107
  const { row } = params
8112
8108
  const { lazy, trigger } = expandOpts
@@ -8116,18 +8112,18 @@ export default defineComponent({
8116
8112
  evnt.stopPropagation()
8117
8113
  const rowid = getRowid($xeTable, row)
8118
8114
  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)
8115
+ const expanded = !$xeTable.isRowExpandByRow(row)
8116
+ const columnIndex = $xeTable.getColumnIndex(column)
8117
+ const $columnIndex = $xeTable.getVMColumnIndex(column)
8118
+ $xeTable.setRowExpand(row, expanded)
8123
8119
  dispatchEvent('toggle-row-expand', {
8124
8120
  expanded,
8125
8121
  column,
8126
8122
  columnIndex,
8127
8123
  $columnIndex,
8128
8124
  row,
8129
- rowIndex: tableMethods.getRowIndex(row),
8130
- $rowIndex: tableMethods.getVMRowIndex(row)
8125
+ rowIndex: $xeTable.getRowIndex(row),
8126
+ $rowIndex: $xeTable.getVMRowIndex(row)
8131
8127
  }, evnt)
8132
8128
  }
8133
8129
  },
@@ -8135,7 +8131,7 @@ export default defineComponent({
8135
8131
  * 展开树节点事件
8136
8132
  */
8137
8133
  triggerTreeExpandEvent (evnt, params) {
8138
- const { treeExpandLazyLoadedMaps } = reactData
8134
+ const { treeExpandLazyLoadedMaps } = internalData
8139
8135
  const treeOpts = computeTreeOpts.value
8140
8136
  const { row, column } = params
8141
8137
  const { lazy, trigger } = treeOpts
@@ -8145,10 +8141,10 @@ export default defineComponent({
8145
8141
  evnt.stopPropagation()
8146
8142
  const rowid = getRowid($xeTable, row)
8147
8143
  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)
8144
+ const expanded = !$xeTable.isTreeExpandByRow(row)
8145
+ const columnIndex = $xeTable.getColumnIndex(column)
8146
+ const $columnIndex = $xeTable.getVMColumnIndex(column)
8147
+ $xeTable.setTreeExpand(row, expanded)
8152
8148
  dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt)
8153
8149
  }
8154
8150
  },
@@ -8292,12 +8288,11 @@ export default defineComponent({
8292
8288
  handleRowDragSwapEvent (evnt, isSyncRow, dragRow, prevDragRow, prevDragPos, prevDragToChild) {
8293
8289
  const { treeConfig, dragConfig } = props
8294
8290
  const rowDragOpts = computeRowDragOpts.value
8295
- const { fullAllDataRowIdData } = internalData
8291
+ const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData
8296
8292
  const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts
8297
8293
  const treeOpts = computeTreeOpts.value
8298
8294
  const { transform, rowField, mapChildrenField, parentField } = treeOpts
8299
8295
  const childrenField = treeOpts.children || treeOpts.childrenField
8300
- const { afterFullData, tableFullData } = internalData
8301
8296
  const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null)
8302
8297
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0
8303
8298
  const errRest = {
@@ -8991,8 +8986,8 @@ export default defineComponent({
8991
8986
  * 横向 X 可视渲染事件处理
8992
8987
  */
8993
8988
  triggerScrollXEvent () {
8994
- const sXOpts = computeSXOpts.value
8995
- if (sXOpts.immediate) {
8989
+ const virtualXOpts = computeVirtualXOpts.value
8990
+ if (virtualXOpts.immediate) {
8996
8991
  loadScrollXData()
8997
8992
  } else {
8998
8993
  lazyScrollXData()
@@ -9002,8 +8997,8 @@ export default defineComponent({
9002
8997
  * 纵向 Y 可视渲染事件处理
9003
8998
  */
9004
8999
  triggerScrollYEvent () {
9005
- const sYOpts = computeSYOpts.value
9006
- if (sYOpts.immediate) {
9000
+ const virtualYOpts = computeVirtualYOpts.value
9001
+ if (virtualYOpts.immediate) {
9007
9002
  loadScrollYData()
9008
9003
  } else {
9009
9004
  lazyScrollYData()
@@ -9040,6 +9035,7 @@ export default defineComponent({
9040
9035
  return
9041
9036
  }
9042
9037
  }
9038
+
9043
9039
  let scrollTop = yHandleEl.scrollTop
9044
9040
  let scrollLeft = xHandleEl.scrollLeft
9045
9041
  if (leftScrollElem && fixedType === 'left') {
@@ -9169,10 +9165,10 @@ export default defineComponent({
9169
9165
  }
9170
9166
 
9171
9167
  const { highlightHoverRow } = tableProps
9172
- const { scrollXLoad, scrollYLoad } = reactData
9168
+ const { scrollXLoad, scrollYLoad, expandColumn } = reactData
9173
9169
  const leftFixedWidth = computeLeftFixedWidth.value
9174
9170
  const rightFixedWidth = computeRightFixedWidth.value
9175
- if (!(scrollYLoad || leftFixedWidth || rightFixedWidth)) {
9171
+ if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
9176
9172
  return
9177
9173
  }
9178
9174
 
@@ -9195,10 +9191,9 @@ export default defineComponent({
9195
9191
  if (!bodyScrollElem) {
9196
9192
  return
9197
9193
  }
9198
-
9199
9194
  const wheelSpeed = getWheelSpeed(reactData.lastScrollTime)
9200
- const deltaTop = Math.ceil((shiftKey ? deltaX : deltaY) * wheelSpeed)
9201
- const deltaLeft = Math.ceil((shiftKey ? deltaY : deltaX) * wheelSpeed)
9195
+ const deltaTop = shiftKey ? 0 : Math.ceil(deltaY * wheelSpeed)
9196
+ const deltaLeft = shiftKey ? Math.ceil((shiftKey ? (deltaY || deltaX) : deltaX) * wheelSpeed) : 0
9202
9197
 
9203
9198
  const isTopWheel = deltaTop < 0
9204
9199
  const currScrollTop = bodyScrollElem.scrollTop
@@ -9206,7 +9201,6 @@ export default defineComponent({
9206
9201
  if (isTopWheel ? currScrollTop <= 0 : currScrollTop >= bodyScrollElem.scrollHeight - bodyScrollElem.clientHeight) {
9207
9202
  return
9208
9203
  }
9209
-
9210
9204
  const scrollTop = currScrollTop + deltaTop
9211
9205
  const scrollLeft = bodyScrollElem.scrollLeft + deltaLeft
9212
9206
  const isRollX = scrollLeft !== lastScrollLeft
@@ -9220,6 +9214,7 @@ export default defineComponent({
9220
9214
  evnt.preventDefault()
9221
9215
  internalData.inWheelScroll = true
9222
9216
  wheelScrollLeftTo(scrollLeft, (offsetLeft: number) => {
9217
+ internalData.inWheelScroll = true
9223
9218
  const currLeftNum = offsetLeft
9224
9219
  setScrollLeft(xHandleEl, currLeftNum)
9225
9220
  setScrollLeft(bodyScrollElem, currLeftNum)
@@ -9236,9 +9231,10 @@ export default defineComponent({
9236
9231
  }
9237
9232
  if (isRollY) {
9238
9233
  evnt.preventDefault()
9234
+ internalData.inWheelScroll = true
9239
9235
  wheelScrollTopTo(scrollTop - currScrollTop, (offsetTop: number) => {
9240
- const currTopNum = bodyScrollElem.scrollTop + offsetTop
9241
9236
  internalData.inWheelScroll = true
9237
+ const currTopNum = bodyScrollElem.scrollTop + offsetTop
9242
9238
  setScrollTop(yHandleEl, currTopNum)
9243
9239
  setScrollTop(bodyScrollElem, currTopNum)
9244
9240
  setScrollTop(leftScrollElem, currTopNum)
@@ -9425,8 +9421,8 @@ export default defineComponent({
9425
9421
  },
9426
9422
  // 更新纵向 Y 可视渲染上下剩余空间大小
9427
9423
  updateScrollYSpace () {
9428
- const { isAllOverflow, scrollYLoad, expandColumn, rowExpandedMaps } = reactData
9429
- const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData
9424
+ const { isAllOverflow, scrollYLoad, expandColumn } = reactData
9425
+ const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData
9430
9426
  const { startIndex } = scrollYStore
9431
9427
  const expandOpts = computeExpandOpts.value
9432
9428
  const rowOpts = computeRowOpts.value
@@ -9775,6 +9771,7 @@ export default defineComponent({
9775
9771
  ]
9776
9772
 
9777
9773
  if (expandColumn) {
9774
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
9778
9775
  tableRowExpandedList.forEach((row) => {
9779
9776
  const expandOpts = computeExpandOpts.value
9780
9777
  const { height: expandHeight, padding } = expandOpts
@@ -9782,7 +9779,7 @@ export default defineComponent({
9782
9779
  const treeOpts = computeTreeOpts.value
9783
9780
  const { transform, seqMode } = treeOpts
9784
9781
  const cellStyle: Record<string, string> = {}
9785
- const rowid = getRowid($xeTable, row)
9782
+ const rowid = handleGetRowId(row)
9786
9783
  const rest = fullAllDataRowIdData[rowid]
9787
9784
  let rowLevel = 0
9788
9785
  let seq: string | number = -1
@@ -10418,7 +10415,6 @@ export default defineComponent({
10418
10415
  nextTick(() => {
10419
10416
  const { data, exportConfig, importConfig, treeConfig, showOverflow } = props
10420
10417
  const { scrollXStore, scrollYStore } = internalData
10421
- const sYOpts = computeSYOpts.value
10422
10418
  const editOpts = computeEditOpts.value
10423
10419
  const treeOpts = computeTreeOpts.value
10424
10420
  const radioOpts = computeRadioOpts.value
@@ -10548,8 +10544,7 @@ export default defineComponent({
10548
10544
  Object.assign(scrollYStore, {
10549
10545
  startIndex: 0,
10550
10546
  endIndex: 0,
10551
- visibleSize: 0,
10552
- adaptive: sYOpts.adaptive !== false
10547
+ visibleSize: 0
10553
10548
  })
10554
10549
  Object.assign(scrollXStore, {
10555
10550
  startIndex: 0,