vxe-table 3.13.4 → 3.13.6

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 (139) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/locale/lang/ar-EG.js +2 -1
  4. package/es/locale/lang/de-DE.js +2 -1
  5. package/es/locale/lang/en-US.js +2 -1
  6. package/es/locale/lang/es-ES.js +2 -1
  7. package/es/locale/lang/fr-FR.js +2 -1
  8. package/es/locale/lang/hu-HU.js +2 -1
  9. package/es/locale/lang/hy-AM.js +2 -1
  10. package/es/locale/lang/id-ID.js +2 -1
  11. package/es/locale/lang/it-IT.js +2 -1
  12. package/es/locale/lang/ja-JP.js +2 -1
  13. package/es/locale/lang/ko-KR.js +2 -1
  14. package/es/locale/lang/nb-NO.js +2 -1
  15. package/es/locale/lang/pt-BR.js +2 -1
  16. package/es/locale/lang/ru-RU.js +2 -1
  17. package/es/locale/lang/th-TH.js +2 -1
  18. package/es/locale/lang/ug-CN.js +2 -1
  19. package/es/locale/lang/uk-UA.js +2 -1
  20. package/es/locale/lang/vi-VN.js +2 -1
  21. package/es/locale/lang/zh-CHT.js +2 -1
  22. package/es/locale/lang/zh-CN.js +2 -1
  23. package/es/style.css +1 -1
  24. package/es/style.min.css +1 -1
  25. package/es/table/module/export/export-panel.js +7 -4
  26. package/es/table/module/export/mixin.js +2 -2
  27. package/es/table/src/methods.js +287 -252
  28. package/es/table/src/table.js +1 -1
  29. package/es/table/style.css +1 -1
  30. package/es/table/style.min.css +1 -1
  31. package/es/ui/index.js +1 -1
  32. package/es/ui/src/log.js +1 -1
  33. package/es/vxe-table/style.css +1 -1
  34. package/es/vxe-table/style.min.css +1 -1
  35. package/lib/index.css +1 -1
  36. package/lib/index.min.css +1 -1
  37. package/lib/index.umd.js +340 -313
  38. package/lib/index.umd.min.js +1 -1
  39. package/lib/locale/lang/ar-EG.js +2 -1
  40. package/lib/locale/lang/ar-EG.min.js +1 -1
  41. package/lib/locale/lang/de-DE.js +2 -1
  42. package/lib/locale/lang/de-DE.min.js +1 -1
  43. package/lib/locale/lang/en-US.js +2 -1
  44. package/lib/locale/lang/en-US.min.js +1 -1
  45. package/lib/locale/lang/en-US.umd.js +2 -1
  46. package/lib/locale/lang/es-ES.js +2 -1
  47. package/lib/locale/lang/es-ES.min.js +1 -1
  48. package/lib/locale/lang/es-ES.umd.js +2 -1
  49. package/lib/locale/lang/fr-FR.js +2 -1
  50. package/lib/locale/lang/fr-FR.min.js +1 -1
  51. package/lib/locale/lang/hu-HU.js +2 -1
  52. package/lib/locale/lang/hu-HU.min.js +1 -1
  53. package/lib/locale/lang/hu-HU.umd.js +2 -1
  54. package/lib/locale/lang/hy-AM.js +2 -1
  55. package/lib/locale/lang/hy-AM.min.js +1 -1
  56. package/lib/locale/lang/id-ID.js +2 -1
  57. package/lib/locale/lang/id-ID.min.js +1 -1
  58. package/lib/locale/lang/it-IT.js +2 -1
  59. package/lib/locale/lang/it-IT.min.js +1 -1
  60. package/lib/locale/lang/ja-JP.js +2 -1
  61. package/lib/locale/lang/ja-JP.min.js +1 -1
  62. package/lib/locale/lang/ja-JP.umd.js +2 -1
  63. package/lib/locale/lang/ko-KR.js +2 -1
  64. package/lib/locale/lang/ko-KR.min.js +1 -1
  65. package/lib/locale/lang/ko-KR.umd.js +2 -1
  66. package/lib/locale/lang/nb-NO.js +2 -1
  67. package/lib/locale/lang/nb-NO.min.js +1 -1
  68. package/lib/locale/lang/pt-BR.js +2 -1
  69. package/lib/locale/lang/pt-BR.min.js +1 -1
  70. package/lib/locale/lang/pt-BR.umd.js +2 -1
  71. package/lib/locale/lang/ru-RU.js +2 -1
  72. package/lib/locale/lang/ru-RU.min.js +1 -1
  73. package/lib/locale/lang/ru-RU.umd.js +2 -1
  74. package/lib/locale/lang/th-TH.js +2 -1
  75. package/lib/locale/lang/th-TH.min.js +1 -1
  76. package/lib/locale/lang/ug-CN.js +2 -1
  77. package/lib/locale/lang/ug-CN.min.js +1 -1
  78. package/lib/locale/lang/uk-UA.js +2 -1
  79. package/lib/locale/lang/uk-UA.min.js +1 -1
  80. package/lib/locale/lang/uk-UA.umd.js +2 -1
  81. package/lib/locale/lang/vi-VN.js +2 -1
  82. package/lib/locale/lang/vi-VN.min.js +1 -1
  83. package/lib/locale/lang/zh-CHT.js +2 -1
  84. package/lib/locale/lang/zh-CHT.min.js +1 -1
  85. package/lib/locale/lang/zh-CHT.umd.js +2 -1
  86. package/lib/locale/lang/zh-CN.js +2 -1
  87. package/lib/locale/lang/zh-CN.min.js +1 -1
  88. package/lib/locale/lang/zh-CN.umd.js +2 -1
  89. package/lib/style.css +1 -1
  90. package/lib/style.min.css +1 -1
  91. package/lib/table/module/export/export-panel.js +7 -4
  92. package/lib/table/module/export/export-panel.min.js +1 -1
  93. package/lib/table/module/export/mixin.js +2 -2
  94. package/lib/table/module/export/mixin.min.js +1 -1
  95. package/lib/table/src/methods.js +324 -301
  96. package/lib/table/src/methods.min.js +1 -1
  97. package/lib/table/src/table.js +1 -1
  98. package/lib/table/src/table.min.js +1 -1
  99. package/lib/table/style/style.css +1 -1
  100. package/lib/table/style/style.min.css +1 -1
  101. package/lib/ui/index.js +1 -1
  102. package/lib/ui/index.min.js +1 -1
  103. package/lib/ui/src/log.js +1 -1
  104. package/lib/ui/src/log.min.js +1 -1
  105. package/lib/vxe-table/style/style.css +1 -1
  106. package/lib/vxe-table/style/style.min.css +1 -1
  107. package/package.json +2 -2
  108. package/packages/locale/lang/ar-EG.ts +2 -1
  109. package/packages/locale/lang/de-DE.ts +2 -1
  110. package/packages/locale/lang/en-US.ts +2 -1
  111. package/packages/locale/lang/es-ES.ts +2 -1
  112. package/packages/locale/lang/fr-FR.ts +2 -1
  113. package/packages/locale/lang/hu-HU.ts +2 -1
  114. package/packages/locale/lang/hy-AM.ts +2 -1
  115. package/packages/locale/lang/id-ID.ts +2 -1
  116. package/packages/locale/lang/it-IT.ts +2 -1
  117. package/packages/locale/lang/ja-JP.ts +2 -1
  118. package/packages/locale/lang/ko-KR.ts +2 -1
  119. package/packages/locale/lang/nb-NO.ts +2 -1
  120. package/packages/locale/lang/pt-BR.ts +2 -1
  121. package/packages/locale/lang/ru-RU.ts +2 -1
  122. package/packages/locale/lang/th-TH.ts +2 -1
  123. package/packages/locale/lang/ug-CN.ts +2 -1
  124. package/packages/locale/lang/uk-UA.ts +2 -1
  125. package/packages/locale/lang/vi-VN.ts +2 -1
  126. package/packages/locale/lang/zh-CHT.ts +2 -1
  127. package/packages/locale/lang/zh-CN.ts +2 -1
  128. package/packages/table/module/export/export-panel.ts +7 -4
  129. package/packages/table/module/export/mixin.ts +2 -2
  130. package/packages/table/src/methods.ts +306 -255
  131. package/packages/table/src/table.ts +1 -1
  132. package/styles/components/table.scss +1 -1
  133. package/styles/theme/base.scss +1 -1
  134. /package/es/{iconfont.1740013687420.ttf → iconfont.1740103990490.ttf} +0 -0
  135. /package/es/{iconfont.1740013687420.woff → iconfont.1740103990490.woff} +0 -0
  136. /package/es/{iconfont.1740013687420.woff2 → iconfont.1740103990490.woff2} +0 -0
  137. /package/lib/{iconfont.1740013687420.ttf → iconfont.1740103990490.ttf} +0 -0
  138. /package/lib/{iconfont.1740013687420.woff → iconfont.1740103990490.woff} +0 -0
  139. /package/lib/{iconfont.1740013687420.woff2 → iconfont.1740103990490.woff2} +0 -0
@@ -47,8 +47,10 @@ const setCustomStorageMap = (id: any, data: any) => {
47
47
  localStorage.setItem(customStorageKey, XEUtils.toJSONString(maps))
48
48
  }
49
49
 
50
- const getRecoverRowMaps = (_vm: any, keyMaps: any) => {
51
- const { fullAllDataRowIdData } = _vm
50
+ const getRecoverRowMaps = ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, keyMaps: any) => {
51
+ const internalData = $xeTable as unknown as TableInternalData
52
+
53
+ const { fullAllDataRowIdData } = internalData
52
54
  const restKeys: any = {}
53
55
  XEUtils.each(keyMaps, (row, rowid) => {
54
56
  if (fullAllDataRowIdData[rowid]) {
@@ -58,8 +60,10 @@ const getRecoverRowMaps = (_vm: any, keyMaps: any) => {
58
60
  return restKeys
59
61
  }
60
62
 
61
- function handleReserveRow (_vm: any, reserveRowMap: any) {
62
- const { fullDataRowIdData } = _vm
63
+ function handleReserveRow ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, reserveRowMap: any) {
64
+ const internalData = $xeTable as unknown as TableInternalData
65
+
66
+ const { fullDataRowIdData } = internalData
63
67
  const reserveList: any[] = []
64
68
  XEUtils.each(reserveRowMap, (item, rowid) => {
65
69
  if (fullDataRowIdData[rowid] && reserveList.indexOf(fullDataRowIdData[rowid].row) === -1) {
@@ -762,6 +766,219 @@ function updateStyle ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
762
766
  return $xeTable.$nextTick()
763
767
  }
764
768
 
769
+ function handleRadioReserveRow ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, row: any) {
770
+ const internalData = $xeTable as unknown as TableInternalData
771
+
772
+ const radioOpts = $xeTable.computeRadioOpts
773
+ if (radioOpts.reserve) {
774
+ internalData.radioReserveRow = row
775
+ }
776
+ }
777
+
778
+ function handleCheckboxReserveRow ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, row: any, checked: boolean) {
779
+ const internalData = $xeTable as unknown as TableInternalData
780
+
781
+ const { checkboxReserveRowMap } = internalData
782
+ const checkboxOpts = $xeTable.computeCheckboxOpts
783
+ if (checkboxOpts.reserve) {
784
+ const rowid = getRowid($xeTable, row)
785
+ if (checked) {
786
+ checkboxReserveRowMap[rowid] = row
787
+ } else if (checkboxReserveRowMap[rowid]) {
788
+ delete checkboxReserveRowMap[rowid]
789
+ }
790
+ }
791
+ }
792
+
793
+ function handleCheckedRadioRow ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, row: any, isForce?: boolean) {
794
+ const reactData = $xeTable as unknown as TableReactData
795
+
796
+ const radioOpts = $xeTable.computeRadioOpts
797
+ const { checkMethod } = radioOpts
798
+ if (row && (isForce || (!checkMethod || checkMethod({ row })))) {
799
+ reactData.selectRadioRow = row
800
+ handleRadioReserveRow($xeTable, row)
801
+ }
802
+ return $xeTable.$nextTick()
803
+ }
804
+
805
+ function handleCheckedCheckboxRow ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, rows: any[], value: boolean, isForce?: boolean) {
806
+ if (rows && !XEUtils.isArray(rows)) {
807
+ rows = [rows]
808
+ }
809
+ $xeTable.handleBatchSelectRows(rows, !!value, isForce)
810
+ $xeTable.checkSelectionStatus()
811
+ return $xeTable.$nextTick()
812
+ }
813
+
814
+ function handleCheckedAllCheckboxRow ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, checked: boolean, isForce?: boolean) {
815
+ const props = $xeTable
816
+ const reactData = $xeTable as unknown as TableReactData
817
+ const internalData = $xeTable as unknown as TableInternalData
818
+
819
+ const { treeConfig } = props
820
+ const { selectCheckboxMaps } = reactData
821
+ const { afterFullData, checkboxReserveRowMap } = internalData
822
+ const treeOpts = $xeTable.computeTreeOpts
823
+ const childrenField = treeOpts.children || treeOpts.childrenField
824
+ const checkboxOpts = $xeTable.computeCheckboxOpts
825
+ const { checkField, reserve, checkMethod } = checkboxOpts
826
+ const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
827
+ const selectRowMaps: Record<string, any> = {}
828
+ /**
829
+ * 绑定属性方式(高性能,有污染)
830
+ * 必须在行数据存在对应的属性,否则将不响应
831
+ */
832
+ if (checkField) {
833
+ const checkValFn = (row: any) => {
834
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
835
+ if (checked) {
836
+ selectRowMaps[getRowid($xeTable, row)] = row
837
+ }
838
+ XEUtils.set(row, checkField, checked)
839
+ }
840
+ if (treeConfig && indeterminateField) {
841
+ XEUtils.set(row, indeterminateField, false)
842
+ }
843
+ }
844
+ // 如果存在选中方法
845
+ // 如果方法成立,则更新值,否则忽略该数据
846
+ if (treeConfig) {
847
+ XEUtils.eachTree(afterFullData, checkValFn, { children: childrenField })
848
+ } else {
849
+ afterFullData.forEach(checkValFn)
850
+ }
851
+ } else {
852
+ /**
853
+ * 默认方式(低性能,无污染)
854
+ * 无需任何属性,直接绑定
855
+ */
856
+ if (treeConfig) {
857
+ if (checked) {
858
+ /**
859
+ * 如果是树勾选
860
+ * 如果方法成立,则添加到临时集合中
861
+ */
862
+ XEUtils.eachTree(afterFullData, (row) => {
863
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
864
+ selectRowMaps[getRowid($xeTable, row)] = row
865
+ }
866
+ }, { children: childrenField })
867
+ } else {
868
+ /**
869
+ * 如果是树取消
870
+ * 如果方法成立,则不添加到临时集合中
871
+ */
872
+ if (!isForce && checkMethod) {
873
+ XEUtils.eachTree(afterFullData, (row) => {
874
+ const rowid = getRowid($xeTable, row)
875
+ if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
876
+ selectRowMaps[rowid] = row
877
+ }
878
+ }, { children: childrenField })
879
+ }
880
+ }
881
+ } else {
882
+ if (checked) {
883
+ /**
884
+ * 如果是行勾选
885
+ * 如果存在选中方法且成立或者本身已勾选,则添加到临时集合中
886
+ * 如果不存在选中方法,则添加所有数据到临时集合中
887
+ */
888
+ if (!isForce && checkMethod) {
889
+ afterFullData.forEach((row) => {
890
+ const rowid = getRowid($xeTable, row)
891
+ if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
892
+ selectRowMaps[rowid] = row
893
+ }
894
+ })
895
+ } else {
896
+ afterFullData.forEach(row => {
897
+ selectRowMaps[getRowid($xeTable, row)] = row
898
+ })
899
+ }
900
+ } else {
901
+ /**
902
+ * 如果是行取消
903
+ * 如果方法成立,则不添加到临时集合中;如果方法不成立则判断当前是否已勾选,如果已被勾选则添加到新集合中
904
+ * 如果不存在选中方法,无需处理,临时集合默认为空
905
+ */
906
+ if (!isForce && checkMethod) {
907
+ afterFullData.forEach((row) => {
908
+ const rowid = getRowid($xeTable, row)
909
+ if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
910
+ selectRowMaps[rowid] = row
911
+ }
912
+ })
913
+ }
914
+ }
915
+ }
916
+ }
917
+ if (reserve) {
918
+ if (checked) {
919
+ XEUtils.each(selectRowMaps, (row, rowid) => {
920
+ checkboxReserveRowMap[rowid] = row
921
+ })
922
+ } else {
923
+ afterFullData.forEach((row) => handleCheckboxReserveRow($xeTable, row, false))
924
+ }
925
+ }
926
+ reactData.selectCheckboxMaps = checkField ? {} : selectRowMaps
927
+
928
+ reactData.isAllSelected = checked
929
+ reactData.isIndeterminate = false
930
+ reactData.treeIndeterminateMaps = {}
931
+ internalData.treeIndeterminateRowMaps = {}
932
+ $xeTable.checkSelectionStatus()
933
+ return $xeTable.$nextTick()
934
+ }
935
+
936
+ // 还原展开、选中等相关状态
937
+ function handleReserveStatus ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
938
+ const props = $xeTable
939
+ const reactData = $xeTable as unknown as TableReactData
940
+ const internalData = $xeTable as unknown as TableInternalData
941
+
942
+ const { treeConfig } = props
943
+ const { expandColumn, currentRow, selectCheckboxMaps, selectRadioRow, rowExpandedMaps, treeExpandedMaps } = reactData
944
+ const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData
945
+ const expandOpts = $xeTable.computeExpandOpts
946
+ const treeOpts = $xeTable.computeTreeOpts
947
+ const radioOpts = $xeTable.computeRadioOpts
948
+ const checkboxOpts = $xeTable.computeCheckboxOpts
949
+ // 单选框
950
+ if (selectRadioRow && !fullAllDataRowIdData[getRowid($xeTable, selectRadioRow)]) {
951
+ reactData.selectRadioRow = null // 刷新单选行状态
952
+ }
953
+ // 还原保留选中状态
954
+ if (radioOpts.reserve && radioReserveRow) {
955
+ const rowid = getRowid($xeTable, radioReserveRow)
956
+ if (fullDataRowIdData[rowid]) {
957
+ handleCheckedRadioRow($xeTable, fullDataRowIdData[rowid].row, true)
958
+ }
959
+ }
960
+ // 复选框
961
+ reactData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps) // 刷新多选行状态
962
+ // 还原保留选中状态
963
+ if (checkboxOpts.reserve) {
964
+ handleCheckedCheckboxRow($xeTable, handleReserveRow($xeTable, internalData.checkboxReserveRowMap), true, true)
965
+ }
966
+ if (currentRow && !fullAllDataRowIdData[getRowid($xeTable, currentRow)]) {
967
+ reactData.currentRow = null // 刷新当前行状态
968
+ }
969
+ // 行展开
970
+ reactData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {} // 刷新行展开状态
971
+ // 还原保留状态
972
+ if (expandColumn && expandOpts.reserve) {
973
+ $xeTable.setRowExpand(handleReserveRow($xeTable, internalData.rowExpandedReserveRowMap), true)
974
+ }
975
+ // 树展开
976
+ reactData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {} // 刷新树展开状态
977
+ if (treeConfig && treeOpts.reserve) {
978
+ $xeTable.setTreeExpand(handleReserveRow($xeTable, internalData.treeExpandedReserveRowMap), true)
979
+ }
980
+ }
981
+
765
982
  function calcVarRowHeightConfig ($xeTable: VxeTableConstructor, sizeKey: 'default' | 'medium' | 'small' | 'mini', sizeEl: Element) {
766
983
  const reactData = $xeTable as unknown as TableReactData
767
984
 
@@ -2210,15 +2427,11 @@ const Methods = {
2210
2427
  internalData.tableFullData = fullData
2211
2428
  internalData.tableFullTreeData = treeData
2212
2429
  // 缓存数据
2213
- $xeTable.cacheRowMap(true, isReset)
2430
+ $xeTable.cacheRowMap(true)
2214
2431
  // 原始数据
2215
2432
  internalData.tableSynchData = datas
2216
2433
  if (isReset) {
2217
2434
  internalData.isResizeCellHeight = false
2218
- reactData.rowExpandedMaps = {}
2219
- reactData.rowExpandLazyLoadedMaps = {}
2220
- reactData.treeExpandedMaps = {}
2221
- reactData.treeExpandLazyLoadedMaps = {}
2222
2435
  }
2223
2436
  // 克隆原数据,用于显示编辑状态,与编辑值做对比
2224
2437
  if (keepSource) {
@@ -2266,7 +2479,7 @@ const Methods = {
2266
2479
  }
2267
2480
  }
2268
2481
 
2269
- this.handleReserveStatus()
2482
+ handleReserveStatus($xeTable)
2270
2483
  this.checkSelectionStatus()
2271
2484
  return new Promise<void>(resolve => {
2272
2485
  this.$nextTick()
@@ -2404,16 +2617,22 @@ const Methods = {
2404
2617
  /**
2405
2618
  * 更新数据行的 Map
2406
2619
  */
2407
- cacheRowMap (isReset: boolean, isSource?: boolean) {
2408
- const { treeConfig, treeOpts, tableFullData, fullAllDataRowIdData, tableFullTreeData } = this
2620
+ cacheRowMap () {
2621
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
2622
+ const props = $xeTable
2623
+ const internalData = $xeTable as unknown as TableInternalData
2624
+
2625
+ const { treeConfig } = props
2626
+ const treeOpts = $xeTable.computeTreeOpts
2627
+ const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData
2409
2628
  const childrenField = treeOpts.children || treeOpts.childrenField
2410
2629
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
2411
- const rowkey = getRowkey(this)
2630
+ const rowkey = getRowkey($xeTable)
2412
2631
  const isLazy = treeConfig && treeOpts.lazy
2413
2632
  const fullAllDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = {}
2414
2633
  const fullDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = {}
2415
- const handleCache = (row: any, index: any, items: any, path: any, parentRow: any, nodes: any) => {
2416
- let rowid = getRowid(this, row)
2634
+ const handleRow = (row: any, index: number, items: any, path?: any[], parentRow?: any, nodes?: any[]) => {
2635
+ let rowid = getRowid($xeTable, row)
2417
2636
  const seq = treeConfig && path ? toTreePathSeq(path) : index + 1
2418
2637
  const level = nodes ? nodes.length - 1 : 0
2419
2638
  if (eqEmptyValue(rowid)) {
@@ -2423,31 +2642,27 @@ const Methods = {
2423
2642
  if (isLazy && row[hasChildField] && XEUtils.isUndefined(row[childrenField])) {
2424
2643
  row[childrenField] = null
2425
2644
  }
2426
- let cacheItem = fullAllDataRowIdData[rowid]
2427
- if (isReset || !cacheItem) {
2428
- cacheItem = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
2429
- }
2430
- cacheItem.row = row
2431
- cacheItem.items = items
2432
- cacheItem.parent = parentRow
2433
- cacheItem.level = level
2434
- cacheItem.index = treeConfig && parentRow ? -1 : index
2435
- if (isSource) {
2436
- fullDataRowIdMaps[rowid] = cacheItem
2437
- }
2438
- fullAllDataRowIdMaps[rowid] = cacheItem
2439
- }
2440
- if (isSource) {
2441
- this.fullDataRowIdData = fullDataRowIdMaps
2442
- }
2443
- this.fullAllDataRowIdData = fullAllDataRowIdMaps
2645
+ let rowRest = fullAllDataRowIdData[rowid]
2646
+ if (!rowRest) {
2647
+ rowRest = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
2648
+ }
2649
+ rowRest.row = row
2650
+ rowRest.items = items
2651
+ rowRest.parent = parentRow
2652
+ rowRest.level = level
2653
+ rowRest.index = treeConfig && parentRow ? -1 : index
2654
+ fullDataRowIdMaps[rowid] = rowRest
2655
+ fullAllDataRowIdMaps[rowid] = rowRest
2656
+ }
2657
+ internalData.fullDataRowIdData = fullDataRowIdMaps
2658
+ internalData.fullAllDataRowIdData = fullAllDataRowIdMaps
2444
2659
  if (treeConfig) {
2445
- XEUtils.eachTree(tableFullTreeData, handleCache, { children: childrenField })
2660
+ XEUtils.eachTree(tableFullTreeData, handleRow, { children: childrenField })
2446
2661
  } else {
2447
- tableFullData.forEach(handleCache)
2662
+ tableFullData.forEach(handleRow)
2448
2663
  }
2449
2664
  },
2450
- cacheSourceMap (fullData: any) {
2665
+ cacheSourceMap (fullData: any[]) {
2451
2666
  let { treeConfig, treeOpts, sourceDataRowIdData } = this
2452
2667
  const sourceData = XEUtils.clone(fullData, true)
2453
2668
  const rowkey = getRowkey(this)
@@ -3260,7 +3475,7 @@ const Methods = {
3260
3475
  const internalData = $xeTable
3261
3476
 
3262
3477
  const { treeConfig } = props
3263
- const { fullDataRowIdData } = internalData
3478
+ const { fullAllDataRowIdData } = internalData
3264
3479
  const treeOpts = $xeTable.computeTreeOpts
3265
3480
  const { transform, mapChildrenField } = treeOpts
3266
3481
  const childrenField = treeOpts.children || treeOpts.childrenField
@@ -3272,7 +3487,7 @@ const Methods = {
3272
3487
  rowid = getRowid($xeTable, rowOrRowid)
3273
3488
  }
3274
3489
  if (rowid) {
3275
- const rest = fullDataRowIdData[rowid]
3490
+ const rest = fullAllDataRowIdData[rowid]
3276
3491
  const row = rest ? rest.row : null
3277
3492
  if (row) {
3278
3493
  return row[transform ? mapChildrenField : childrenField] || []
@@ -3290,7 +3505,7 @@ const Methods = {
3290
3505
  const internalData = $xeTable as unknown as TableInternalData
3291
3506
 
3292
3507
  const { treeConfig } = props
3293
- const { fullDataRowIdData } = internalData
3508
+ const { fullAllDataRowIdData } = internalData
3294
3509
  if (rowOrRowid && treeConfig) {
3295
3510
  let rowid
3296
3511
  if (XEUtils.isString(rowOrRowid)) {
@@ -3299,7 +3514,7 @@ const Methods = {
3299
3514
  rowid = getRowid($xeTable, rowOrRowid)
3300
3515
  }
3301
3516
  if (rowid) {
3302
- const rest = fullDataRowIdData[rowid]
3517
+ const rest = fullAllDataRowIdData[rowid]
3303
3518
  return rest ? rest.parent : null
3304
3519
  }
3305
3520
  }
@@ -3319,9 +3534,9 @@ const Methods = {
3319
3534
  const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
3320
3535
  const internalData = $xeTable as unknown as TableInternalData
3321
3536
 
3322
- const { fullDataRowIdData } = internalData
3537
+ const { fullAllDataRowIdData } = internalData
3323
3538
  const rowid = XEUtils.eqNull(cellValue) ? '' : encodeURIComponent(cellValue)
3324
- return fullDataRowIdData[rowid] ? fullDataRowIdData[rowid].row : null
3539
+ return fullAllDataRowIdData[rowid] ? fullAllDataRowIdData[rowid].row : null
3325
3540
  },
3326
3541
  /**
3327
3542
  * 根据行获取行的唯一主键
@@ -5086,10 +5301,12 @@ const Methods = {
5086
5301
  * 处理默认勾选
5087
5302
  */
5088
5303
  handleDefaultSelectionChecked () {
5304
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
5305
+
5089
5306
  const { fullDataRowIdData, checkboxOpts } = this
5090
5307
  const { checkAll, checkRowKeys } = checkboxOpts
5091
5308
  if (checkAll) {
5092
- this.handleCheckedAllCheckboxRow(true, true)
5309
+ handleCheckedAllCheckboxRow($xeTable, true, true)
5093
5310
  } else if (checkRowKeys) {
5094
5311
  const defSelection: any[] = []
5095
5312
  checkRowKeys.forEach((rowid: any) => {
@@ -5097,18 +5314,13 @@ const Methods = {
5097
5314
  defSelection.push(fullDataRowIdData[rowid].row)
5098
5315
  }
5099
5316
  })
5100
- this.handleCheckedCheckboxRow(defSelection, true, true)
5317
+ handleCheckedCheckboxRow($xeTable, defSelection, true, true)
5101
5318
  }
5102
5319
  },
5103
- handleCheckedCheckboxRow (rows: any, value: any, isForce: any) {
5320
+ handleCheckedCheckboxRow (rows: any[], value: boolean, isForce?: boolean) {
5104
5321
  const $xeTable = this
5105
5322
 
5106
- if (rows && !XEUtils.isArray(rows)) {
5107
- rows = [rows]
5108
- }
5109
- $xeTable.handleBatchSelectRows(rows, !!value, isForce)
5110
- $xeTable.checkSelectionStatus()
5111
- return this.$nextTick()
5323
+ return handleCheckedCheckboxRow($xeTable, rows, value, isForce)
5112
5324
  },
5113
5325
  /**
5114
5326
  * 用于多选行,设置行为选中状态,第二个参数为选中与否
@@ -5121,7 +5333,7 @@ const Methods = {
5121
5333
  if (rows && !XEUtils.isArray(rows)) {
5122
5334
  rows = [rows]
5123
5335
  }
5124
- return $xeTable.handleCheckedCheckboxRow(rows, checked, true)
5336
+ return handleCheckedCheckboxRow($xeTable, rows, checked, true)
5125
5337
  },
5126
5338
  setCheckboxRowKey (keys: any, checked: boolean) {
5127
5339
  const $xeTable = this
@@ -5138,7 +5350,7 @@ const Methods = {
5138
5350
  rows.push(rowRest.row)
5139
5351
  }
5140
5352
  })
5141
- return $xeTable.handleCheckedCheckboxRow(rows, checked, true)
5353
+ return handleCheckedCheckboxRow($xeTable, rows, checked, true)
5142
5354
  },
5143
5355
  isCheckedByCheckboxRow (row: any) {
5144
5356
  const $xeTable = this
@@ -5189,9 +5401,9 @@ const Methods = {
5189
5401
  * 多选,行选中事件
5190
5402
  */
5191
5403
  handleBatchSelectRows (rows: any[], checked: boolean, isForce?: boolean) {
5192
- const $xeTable = this
5404
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
5193
5405
  const props = $xeTable
5194
- const reactData = $xeTable
5406
+ const reactData = $xeTable as unknown as TableReactData
5195
5407
 
5196
5408
  const { treeConfig } = props
5197
5409
  const { selectCheckboxMaps } = reactData
@@ -5212,7 +5424,7 @@ const Methods = {
5212
5424
  if (indeterminateField) {
5213
5425
  XEUtils.set(row, indeterminateField, false)
5214
5426
  }
5215
- $xeTable.handleCheckboxReserveRow(row, checked)
5427
+ handleCheckboxReserveRow($xeTable, row, checked)
5216
5428
  }
5217
5429
  }, { children: transform ? mapChildrenField : childrenField })
5218
5430
  reactData.selectCheckboxMaps = selectRowMaps
@@ -5222,7 +5434,7 @@ const Methods = {
5222
5434
  rows.forEach(row => {
5223
5435
  if (isForce || (!checkMethod || checkMethod({ row }))) {
5224
5436
  XEUtils.set(row, checkField, checked)
5225
- $xeTable.handleCheckboxReserveRow(row, checked)
5437
+ handleCheckboxReserveRow($xeTable, row, checked)
5226
5438
  }
5227
5439
  })
5228
5440
  }
@@ -5243,7 +5455,7 @@ const Methods = {
5243
5455
  delete selectRowMaps[rowid]
5244
5456
  }
5245
5457
  }
5246
- $xeTable.handleCheckboxReserveRow(row, checked)
5458
+ handleCheckboxReserveRow($xeTable, row, checked)
5247
5459
  }
5248
5460
  }, { children: transform ? mapChildrenField : childrenField })
5249
5461
  reactData.selectCheckboxMaps = selectRowMaps
@@ -5263,7 +5475,7 @@ const Methods = {
5263
5475
  delete selectRowMaps[rowid]
5264
5476
  }
5265
5477
  }
5266
- $xeTable.handleCheckboxReserveRow(row, checked)
5478
+ handleCheckboxReserveRow($xeTable, row, checked)
5267
5479
  }
5268
5480
  })
5269
5481
  reactData.selectCheckboxMaps = selectRowMaps
@@ -5298,6 +5510,8 @@ const Methods = {
5298
5510
  }
5299
5511
  },
5300
5512
  triggerCheckRowEvent (evnt: any, params: any, checked: any) {
5513
+ const $xeTable = this
5514
+
5301
5515
  const { checkboxOpts, afterFullData } = this
5302
5516
  const { checkMethod, trigger } = checkboxOpts
5303
5517
  const { row } = params
@@ -5314,7 +5528,7 @@ const Methods = {
5314
5528
  if (_rowIndex !== _firstRowIndex) {
5315
5529
  this.setAllCheckboxRow(false)
5316
5530
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1)
5317
- this.handleCheckedCheckboxRow(rangeRows, true, false)
5531
+ handleCheckedCheckboxRow($xeTable, rangeRows, true, false)
5318
5532
  this.emitEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt)
5319
5533
  return
5320
5534
  }
@@ -5344,143 +5558,14 @@ const Methods = {
5344
5558
  $xeTable.checkSelectionStatus()
5345
5559
  return $xeTable.$nextTick()
5346
5560
  },
5347
- handleCheckedAllCheckboxRow (checked: any, isForce: any) {
5348
- const $xeTable = this
5349
- const reactData = $xeTable
5350
-
5351
- const { afterFullData, treeConfig, treeOpts, selectCheckboxMaps, checkboxReserveRowMap, checkboxOpts, afterFullRowMaps } = this
5352
- const { checkField, reserve, checkStrictly, checkMethod } = checkboxOpts
5353
- const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
5354
- const childrenField = treeOpts.children || treeOpts.childrenField
5355
- const selectRowMaps: any = {}
5356
-
5357
- // 疑惑!
5358
- if (!treeConfig) {
5359
- XEUtils.each(selectCheckboxMaps, (row, rowid) => {
5360
- if (!afterFullRowMaps[rowid]) {
5361
- selectRowMaps[rowid] = row
5362
- }
5363
- })
5364
- }
5365
- // 疑惑!
5366
-
5367
- if (checkStrictly) {
5368
- this.isAllSelected = checked
5369
- } else {
5370
- /**
5371
- * 绑定属性方式(高性能,有污染)
5372
- * 必须在行数据存在对应的属性,否则将不响应
5373
- */
5374
- if (checkField) {
5375
- const checkValFn = (row: any) => {
5376
- if (isForce || (!checkMethod || checkMethod({ row }))) {
5377
- if (checked) {
5378
- selectRowMaps[getRowid(this, row)] = row
5379
- }
5380
- XEUtils.set(row, checkField, checked)
5381
- }
5382
- if (treeConfig && indeterminateField) {
5383
- XEUtils.set(row, indeterminateField, false)
5384
- }
5385
- }
5386
- // 如果存在选中方法
5387
- // 如果方法成立,则更新值,否则忽略该数据
5388
- if (treeConfig) {
5389
- XEUtils.eachTree(afterFullData, checkValFn, { children: childrenField })
5390
- } else {
5391
- afterFullData.forEach(checkValFn)
5392
- }
5393
- } else {
5394
- /**
5395
- * 默认方式(低性能,无污染)
5396
- * 无需任何属性,直接绑定
5397
- */
5398
- if (treeConfig) {
5399
- if (checked) {
5400
- /**
5401
- * 如果是树勾选
5402
- * 如果方法成立,则添加到临时集合中
5403
- */
5404
- XEUtils.eachTree(afterFullData, (row) => {
5405
- if (isForce || (!checkMethod || checkMethod({ row }))) {
5406
- selectRowMaps[getRowid(this, row)] = row
5407
- }
5408
- }, { children: childrenField })
5409
- } else {
5410
- /**
5411
- * 如果是树取消
5412
- * 如果方法成立,则不添加到临时集合中
5413
- */
5414
- if (!isForce && checkMethod) {
5415
- XEUtils.eachTree(afterFullData, (row) => {
5416
- const rowid = getRowid(this, row)
5417
- if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
5418
- selectRowMaps[rowid] = row
5419
- }
5420
- }, { children: childrenField })
5421
- }
5422
- }
5423
- } else {
5424
- if (checked) {
5425
- /**
5426
- * 如果是行勾选
5427
- * 如果存在选中方法且成立或者本身已勾选,则添加到临时集合中
5428
- * 如果不存在选中方法,则添加所有数据到临时集合中
5429
- */
5430
- if (!isForce && checkMethod) {
5431
- afterFullData.forEach((row: any) => {
5432
- const rowid = getRowid(this, row)
5433
- if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
5434
- selectRowMaps[rowid] = row
5435
- }
5436
- })
5437
- } else {
5438
- afterFullData.forEach((row: any) => {
5439
- selectRowMaps[getRowid(this, row)] = row
5440
- })
5441
- }
5442
- } else {
5443
- /**
5444
- * 如果是行取消
5445
- * 如果方法成立,则不添加到临时集合中;如果方法不成立则判断当前是否已勾选,如果已被勾选则添加到新集合中
5446
- * 如果不存在选中方法,无需处理,临时集合默认为空
5447
- */
5448
- if (!isForce && checkMethod) {
5449
- afterFullData.forEach((row: any) => {
5450
- const rowid = getRowid(this, row)
5451
- if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
5452
- selectRowMaps[rowid] = row
5453
- }
5454
- })
5455
- }
5456
- }
5457
- }
5458
- }
5459
- if (reserve) {
5460
- if (checked) {
5461
- XEUtils.each(selectRowMaps, (row, rowid) => {
5462
- checkboxReserveRowMap[rowid] = row
5463
- })
5464
- } else {
5465
- afterFullData.forEach((row: any) => this.handleCheckboxReserveRow(row, false))
5466
- }
5467
- }
5468
- this.selectCheckboxMaps = checkField ? {} : selectRowMaps
5469
- }
5470
-
5471
- reactData.isAllSelected = checked
5472
- reactData.isIndeterminate = false
5473
- this.treeIndeterminateMaps = {}
5474
- this.treeIndeterminateRowMaps = {}
5475
- this.checkSelectionStatus()
5476
- return this.$nextTick()
5477
- },
5478
5561
  /**
5479
5562
  * 用于多选行,设置所有行的选中状态
5480
5563
  * @param {Boolean} value 是否选中
5481
5564
  */
5482
- setAllCheckboxRow (value: any) {
5483
- return this.handleCheckedAllCheckboxRow(value, true)
5565
+ setAllCheckboxRow (value: boolean) {
5566
+ const $xeTable = this
5567
+
5568
+ return handleCheckedAllCheckboxRow($xeTable, value, true)
5484
5569
  },
5485
5570
  updateCheckboxStatus () {
5486
5571
  const $xeTable = this
@@ -5641,43 +5726,6 @@ const Methods = {
5641
5726
  $xeTable.updateCheckboxStatus()
5642
5727
  $xeTable.updateAllCheckboxStatus()
5643
5728
  },
5644
- // 还原展开、选中等相关状态
5645
- handleReserveStatus () {
5646
- const $xeTable = this
5647
-
5648
- const { expandColumn, treeOpts, treeConfig, fullDataRowIdData, fullAllDataRowIdData, currentRow, selectRadioRow, radioReserveRow, radioOpts, checkboxOpts, selectCheckboxMaps, rowExpandedMaps, treeExpandedMaps, expandOpts } = this
5649
- // 单选框
5650
- if (selectRadioRow && !fullAllDataRowIdData[getRowid($xeTable, selectRadioRow)]) {
5651
- this.selectRadioRow = null // 刷新单选行状态
5652
- }
5653
- // 还原保留选中状态
5654
- if (radioOpts.reserve && radioReserveRow) {
5655
- const rowid = getRowid(this, radioReserveRow)
5656
- if (fullDataRowIdData[rowid]) {
5657
- this.handleCheckedRadioRow(fullDataRowIdData[rowid].row, true)
5658
- }
5659
- }
5660
- // 复选框
5661
- this.selectCheckboxMaps = getRecoverRowMaps(this, selectCheckboxMaps) // 刷新多选行状态
5662
- // 还原保留选中状态
5663
- if (checkboxOpts.reserve) {
5664
- this.handleCheckedCheckboxRow(handleReserveRow(this, this.checkboxReserveRowMap), true, true)
5665
- }
5666
- if (currentRow && !this.fullAllDataRowIdData[getRowid($xeTable, currentRow)]) {
5667
- this.currentRow = null // 刷新当前行状态
5668
- }
5669
- // 行展开
5670
- this.rowExpandedMaps = expandColumn ? getRecoverRowMaps(this, rowExpandedMaps) : [] // 刷新行展开状态
5671
- // 还原保留状态
5672
- if (expandColumn && expandOpts.reserve) {
5673
- this.setRowExpand(handleReserveRow(this, this.rowExpandedReserveRowMap), true)
5674
- }
5675
- // 树展开
5676
- this.treeExpandedMaps = treeConfig ? getRecoverRowMaps(this, treeExpandedMaps) : [] // 刷新树展开状态
5677
- if (treeConfig && treeOpts.reserve) {
5678
- this.setTreeExpand(handleReserveRow(this, this.treeExpandedReserveRowMap), true)
5679
- }
5680
- },
5681
5729
  /**
5682
5730
  * 获取单选框保留选中的行
5683
5731
  */
@@ -5710,12 +5758,6 @@ const Methods = {
5710
5758
  this.radioReserveRow = null
5711
5759
  return this.$nextTick()
5712
5760
  },
5713
- handleRadioReserveRow (row: any) {
5714
- const { radioOpts } = this
5715
- if (radioOpts.reserve) {
5716
- this.radioReserveRow = row
5717
- }
5718
- },
5719
5761
  /**
5720
5762
  * 获取复选框保留选中的行
5721
5763
  */
@@ -5766,15 +5808,24 @@ const Methods = {
5766
5808
  }
5767
5809
  },
5768
5810
  handleCheckAllEvent (evnt: any, value: any) {
5769
- this.handleCheckedAllCheckboxRow(value)
5811
+ const $xeTable = this
5812
+
5813
+ handleCheckedAllCheckboxRow($xeTable, value)
5770
5814
  if (evnt) {
5771
- this.emitEvent('checkbox-all', { records: this.getCheckboxRecords(), reserves: this.getCheckboxReserveRecords(), indeterminates: this.getCheckboxIndeterminateRecords(), checked: value }, evnt)
5815
+ $xeTable.dispatchEvent('checkbox-all', {
5816
+ records: $xeTable.getCheckboxRecords(),
5817
+ reserves: $xeTable.getCheckboxReserveRecords(),
5818
+ indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
5819
+ checked: value
5820
+ }, evnt)
5772
5821
  }
5773
5822
  },
5774
5823
  /**
5775
5824
  * 多选,选中所有事件
5776
5825
  */
5777
5826
  triggerCheckAllEvent (evnt: any, value: any) {
5827
+ const $xeTable = this
5828
+
5778
5829
  const { checkboxOpts } = this
5779
5830
  const { trigger } = checkboxOpts
5780
5831
  if (trigger === 'manual') {
@@ -5783,7 +5834,7 @@ const Methods = {
5783
5834
  if (evnt) {
5784
5835
  evnt.stopPropagation()
5785
5836
  }
5786
- this.handleCheckAllEvent(evnt, value)
5837
+ $xeTable.handleCheckAllEvent(evnt, value)
5787
5838
  },
5788
5839
  /**
5789
5840
  * 多选,切换所有行的选中状态
@@ -5827,11 +5878,13 @@ const Methods = {
5827
5878
  * 处理单选框默认勾选
5828
5879
  */
5829
5880
  handleDefaultRadioChecked () {
5881
+ const $xeTable = this
5882
+
5830
5883
  const { radioOpts, fullDataRowIdData } = this
5831
5884
  const { checkRowKey: rowid, reserve } = radioOpts
5832
5885
  if (rowid) {
5833
5886
  if (fullDataRowIdData[rowid]) {
5834
- this.handleCheckedRadioRow(fullDataRowIdData[rowid].row, true)
5887
+ handleCheckedRadioRow($xeTable, fullDataRowIdData[rowid].row, true)
5835
5888
  }
5836
5889
  if (reserve) {
5837
5890
  const rowkey = getRowkey(this)
@@ -5845,6 +5898,8 @@ const Methods = {
5845
5898
  triggerRadioRowEvent (evnt: Event, params: {
5846
5899
  row: any
5847
5900
  }) {
5901
+ const $xeTable = this
5902
+
5848
5903
  const { selectRadioRow: oldValue, radioOpts } = this
5849
5904
  const { row } = params
5850
5905
  const { trigger } = radioOpts
@@ -5855,7 +5910,7 @@ const Methods = {
5855
5910
  let newValue = row
5856
5911
  let isChange = oldValue !== newValue
5857
5912
  if (isChange) {
5858
- this.handleCheckedRadioRow(newValue)
5913
+ handleCheckedRadioRow($xeTable, newValue)
5859
5914
  } else if (!radioOpts.strict) {
5860
5915
  isChange = oldValue === newValue
5861
5916
  if (isChange) {
@@ -5931,15 +5986,6 @@ const Methods = {
5931
5986
  }
5932
5987
  return false
5933
5988
  },
5934
- handleCheckedRadioRow (row: any, isForce?: boolean) {
5935
- const { radioOpts } = this
5936
- const { checkMethod } = radioOpts
5937
- if (row && (isForce || (!checkMethod || checkMethod({ row })))) {
5938
- this.selectRadioRow = row
5939
- this.handleRadioReserveRow(row)
5940
- }
5941
- return this.$nextTick()
5942
- },
5943
5989
  /**
5944
5990
  * 用于单选行,设置某一行为选中状态
5945
5991
  * @param {Row} row 行对象
@@ -5947,7 +5993,7 @@ const Methods = {
5947
5993
  setRadioRow (row: any) {
5948
5994
  const $xeTable = this
5949
5995
 
5950
- return $xeTable.handleCheckedRadioRow(row, true)
5996
+ return handleCheckedRadioRow($xeTable, row, true)
5951
5997
  },
5952
5998
  /**
5953
5999
  * 用于单选行,设置某一行为选中状态
@@ -5960,7 +6006,7 @@ const Methods = {
5960
6006
  const { fullAllDataRowIdData } = internalData
5961
6007
  const rowRest = fullAllDataRowIdData[rowid]
5962
6008
  if (rowRest) {
5963
- return $xeTable.handleCheckedRadioRow(rowRest.row, true)
6009
+ return handleCheckedRadioRow($xeTable, rowRest.row, true)
5964
6010
  }
5965
6011
  return $xeTable.$nextTick()
5966
6012
  },
@@ -7602,11 +7648,12 @@ const Methods = {
7602
7648
  const reactData = $xeTable as unknown as TableReactData
7603
7649
  const internalData = $xeTable as unknown as TableInternalData
7604
7650
 
7605
- const tExpandedMaps = { ...reactData.treeExpandedMaps }
7606
7651
  const { fullAllDataRowIdData } = internalData
7607
7652
  const treeOpts = $xeTable.computeTreeOpts
7608
7653
  const { transform } = treeOpts
7654
+ let tExpandedMaps: Record<string, any> = {}
7609
7655
  if (rows) {
7656
+ tExpandedMaps = { ...reactData.treeExpandedMaps }
7610
7657
  if (!XEUtils.isArray(rows)) {
7611
7658
  rows = [rows]
7612
7659
  }
@@ -7620,8 +7667,12 @@ const Methods = {
7620
7667
  }
7621
7668
  }
7622
7669
  })
7670
+ } else {
7671
+ XEUtils.each(fullAllDataRowIdData, (rowRest) => {
7672
+ rowRest.treeLoaded = false
7673
+ })
7623
7674
  }
7624
- reactData.treeExpandedMaps = tExpandedMaps
7675
+ reactData.treeExpandedMaps = {}
7625
7676
  if (transform) {
7626
7677
  handleVirtualTreeToList($xeTable)
7627
7678
  return $xeTable.handleTableData()
@@ -7741,7 +7792,7 @@ const Methods = {
7741
7792
  }
7742
7793
  // 如果当前节点已选中,则展开后子节点也被选中
7743
7794
  if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
7744
- this.handleCheckedCheckboxRow(childRows, true)
7795
+ handleCheckedCheckboxRow($xeTable, childRows, true)
7745
7796
  }
7746
7797
  return this.$nextTick().then(() => {
7747
7798
  if (transform) {