vxe-table 3.13.5 → 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 (134) 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 +247 -215
  28. package/es/table/style.css +1 -1
  29. package/es/table/style.min.css +1 -1
  30. package/es/ui/index.js +1 -1
  31. package/es/ui/src/log.js +1 -1
  32. package/es/vxe-table/style.css +1 -1
  33. package/es/vxe-table/style.min.css +1 -1
  34. package/lib/index.css +1 -1
  35. package/lib/index.min.css +1 -1
  36. package/lib/index.umd.js +296 -271
  37. package/lib/index.umd.min.js +1 -1
  38. package/lib/locale/lang/ar-EG.js +2 -1
  39. package/lib/locale/lang/ar-EG.min.js +1 -1
  40. package/lib/locale/lang/de-DE.js +2 -1
  41. package/lib/locale/lang/de-DE.min.js +1 -1
  42. package/lib/locale/lang/en-US.js +2 -1
  43. package/lib/locale/lang/en-US.min.js +1 -1
  44. package/lib/locale/lang/en-US.umd.js +2 -1
  45. package/lib/locale/lang/es-ES.js +2 -1
  46. package/lib/locale/lang/es-ES.min.js +1 -1
  47. package/lib/locale/lang/es-ES.umd.js +2 -1
  48. package/lib/locale/lang/fr-FR.js +2 -1
  49. package/lib/locale/lang/fr-FR.min.js +1 -1
  50. package/lib/locale/lang/hu-HU.js +2 -1
  51. package/lib/locale/lang/hu-HU.min.js +1 -1
  52. package/lib/locale/lang/hu-HU.umd.js +2 -1
  53. package/lib/locale/lang/hy-AM.js +2 -1
  54. package/lib/locale/lang/hy-AM.min.js +1 -1
  55. package/lib/locale/lang/id-ID.js +2 -1
  56. package/lib/locale/lang/id-ID.min.js +1 -1
  57. package/lib/locale/lang/it-IT.js +2 -1
  58. package/lib/locale/lang/it-IT.min.js +1 -1
  59. package/lib/locale/lang/ja-JP.js +2 -1
  60. package/lib/locale/lang/ja-JP.min.js +1 -1
  61. package/lib/locale/lang/ja-JP.umd.js +2 -1
  62. package/lib/locale/lang/ko-KR.js +2 -1
  63. package/lib/locale/lang/ko-KR.min.js +1 -1
  64. package/lib/locale/lang/ko-KR.umd.js +2 -1
  65. package/lib/locale/lang/nb-NO.js +2 -1
  66. package/lib/locale/lang/nb-NO.min.js +1 -1
  67. package/lib/locale/lang/pt-BR.js +2 -1
  68. package/lib/locale/lang/pt-BR.min.js +1 -1
  69. package/lib/locale/lang/pt-BR.umd.js +2 -1
  70. package/lib/locale/lang/ru-RU.js +2 -1
  71. package/lib/locale/lang/ru-RU.min.js +1 -1
  72. package/lib/locale/lang/ru-RU.umd.js +2 -1
  73. package/lib/locale/lang/th-TH.js +2 -1
  74. package/lib/locale/lang/th-TH.min.js +1 -1
  75. package/lib/locale/lang/ug-CN.js +2 -1
  76. package/lib/locale/lang/ug-CN.min.js +1 -1
  77. package/lib/locale/lang/uk-UA.js +2 -1
  78. package/lib/locale/lang/uk-UA.min.js +1 -1
  79. package/lib/locale/lang/uk-UA.umd.js +2 -1
  80. package/lib/locale/lang/vi-VN.js +2 -1
  81. package/lib/locale/lang/vi-VN.min.js +1 -1
  82. package/lib/locale/lang/zh-CHT.js +2 -1
  83. package/lib/locale/lang/zh-CHT.min.js +1 -1
  84. package/lib/locale/lang/zh-CHT.umd.js +2 -1
  85. package/lib/locale/lang/zh-CN.js +2 -1
  86. package/lib/locale/lang/zh-CN.min.js +1 -1
  87. package/lib/locale/lang/zh-CN.umd.js +2 -1
  88. package/lib/style.css +1 -1
  89. package/lib/style.min.css +1 -1
  90. package/lib/table/module/export/export-panel.js +7 -4
  91. package/lib/table/module/export/export-panel.min.js +1 -1
  92. package/lib/table/module/export/mixin.js +2 -2
  93. package/lib/table/module/export/mixin.min.js +1 -1
  94. package/lib/table/src/methods.js +283 -262
  95. package/lib/table/src/methods.min.js +1 -1
  96. package/lib/table/style/style.css +1 -1
  97. package/lib/table/style/style.min.css +1 -1
  98. package/lib/ui/index.js +1 -1
  99. package/lib/ui/index.min.js +1 -1
  100. package/lib/ui/src/log.js +1 -1
  101. package/lib/ui/src/log.min.js +1 -1
  102. package/lib/vxe-table/style/style.css +1 -1
  103. package/lib/vxe-table/style/style.min.css +1 -1
  104. package/package.json +2 -2
  105. package/packages/locale/lang/ar-EG.ts +2 -1
  106. package/packages/locale/lang/de-DE.ts +2 -1
  107. package/packages/locale/lang/en-US.ts +2 -1
  108. package/packages/locale/lang/es-ES.ts +2 -1
  109. package/packages/locale/lang/fr-FR.ts +2 -1
  110. package/packages/locale/lang/hu-HU.ts +2 -1
  111. package/packages/locale/lang/hy-AM.ts +2 -1
  112. package/packages/locale/lang/id-ID.ts +2 -1
  113. package/packages/locale/lang/it-IT.ts +2 -1
  114. package/packages/locale/lang/ja-JP.ts +2 -1
  115. package/packages/locale/lang/ko-KR.ts +2 -1
  116. package/packages/locale/lang/nb-NO.ts +2 -1
  117. package/packages/locale/lang/pt-BR.ts +2 -1
  118. package/packages/locale/lang/ru-RU.ts +2 -1
  119. package/packages/locale/lang/th-TH.ts +2 -1
  120. package/packages/locale/lang/ug-CN.ts +2 -1
  121. package/packages/locale/lang/uk-UA.ts +2 -1
  122. package/packages/locale/lang/vi-VN.ts +2 -1
  123. package/packages/locale/lang/zh-CHT.ts +2 -1
  124. package/packages/locale/lang/zh-CN.ts +2 -1
  125. package/packages/table/module/export/export-panel.ts +7 -4
  126. package/packages/table/module/export/mixin.ts +2 -2
  127. package/packages/table/src/methods.ts +264 -216
  128. package/styles/components/table.scss +1 -1
  129. /package/es/{iconfont.1740038065641.ttf → iconfont.1740103990490.ttf} +0 -0
  130. /package/es/{iconfont.1740038065641.woff → iconfont.1740103990490.woff} +0 -0
  131. /package/es/{iconfont.1740038065641.woff2 → iconfont.1740103990490.woff2} +0 -0
  132. /package/lib/{iconfont.1740038065641.ttf → iconfont.1740103990490.ttf} +0 -0
  133. /package/lib/{iconfont.1740038065641.woff → iconfont.1740103990490.woff} +0 -0
  134. /package/lib/{iconfont.1740038065641.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
 
@@ -2262,7 +2479,7 @@ const Methods = {
2262
2479
  }
2263
2480
  }
2264
2481
 
2265
- this.handleReserveStatus()
2482
+ handleReserveStatus($xeTable)
2266
2483
  this.checkSelectionStatus()
2267
2484
  return new Promise<void>(resolve => {
2268
2485
  this.$nextTick()
@@ -5084,10 +5301,12 @@ const Methods = {
5084
5301
  * 处理默认勾选
5085
5302
  */
5086
5303
  handleDefaultSelectionChecked () {
5304
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
5305
+
5087
5306
  const { fullDataRowIdData, checkboxOpts } = this
5088
5307
  const { checkAll, checkRowKeys } = checkboxOpts
5089
5308
  if (checkAll) {
5090
- this.handleCheckedAllCheckboxRow(true, true)
5309
+ handleCheckedAllCheckboxRow($xeTable, true, true)
5091
5310
  } else if (checkRowKeys) {
5092
5311
  const defSelection: any[] = []
5093
5312
  checkRowKeys.forEach((rowid: any) => {
@@ -5095,18 +5314,13 @@ const Methods = {
5095
5314
  defSelection.push(fullDataRowIdData[rowid].row)
5096
5315
  }
5097
5316
  })
5098
- this.handleCheckedCheckboxRow(defSelection, true, true)
5317
+ handleCheckedCheckboxRow($xeTable, defSelection, true, true)
5099
5318
  }
5100
5319
  },
5101
- handleCheckedCheckboxRow (rows: any, value: any, isForce: any) {
5320
+ handleCheckedCheckboxRow (rows: any[], value: boolean, isForce?: boolean) {
5102
5321
  const $xeTable = this
5103
5322
 
5104
- if (rows && !XEUtils.isArray(rows)) {
5105
- rows = [rows]
5106
- }
5107
- $xeTable.handleBatchSelectRows(rows, !!value, isForce)
5108
- $xeTable.checkSelectionStatus()
5109
- return this.$nextTick()
5323
+ return handleCheckedCheckboxRow($xeTable, rows, value, isForce)
5110
5324
  },
5111
5325
  /**
5112
5326
  * 用于多选行,设置行为选中状态,第二个参数为选中与否
@@ -5119,7 +5333,7 @@ const Methods = {
5119
5333
  if (rows && !XEUtils.isArray(rows)) {
5120
5334
  rows = [rows]
5121
5335
  }
5122
- return $xeTable.handleCheckedCheckboxRow(rows, checked, true)
5336
+ return handleCheckedCheckboxRow($xeTable, rows, checked, true)
5123
5337
  },
5124
5338
  setCheckboxRowKey (keys: any, checked: boolean) {
5125
5339
  const $xeTable = this
@@ -5136,7 +5350,7 @@ const Methods = {
5136
5350
  rows.push(rowRest.row)
5137
5351
  }
5138
5352
  })
5139
- return $xeTable.handleCheckedCheckboxRow(rows, checked, true)
5353
+ return handleCheckedCheckboxRow($xeTable, rows, checked, true)
5140
5354
  },
5141
5355
  isCheckedByCheckboxRow (row: any) {
5142
5356
  const $xeTable = this
@@ -5187,9 +5401,9 @@ const Methods = {
5187
5401
  * 多选,行选中事件
5188
5402
  */
5189
5403
  handleBatchSelectRows (rows: any[], checked: boolean, isForce?: boolean) {
5190
- const $xeTable = this
5404
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
5191
5405
  const props = $xeTable
5192
- const reactData = $xeTable
5406
+ const reactData = $xeTable as unknown as TableReactData
5193
5407
 
5194
5408
  const { treeConfig } = props
5195
5409
  const { selectCheckboxMaps } = reactData
@@ -5210,7 +5424,7 @@ const Methods = {
5210
5424
  if (indeterminateField) {
5211
5425
  XEUtils.set(row, indeterminateField, false)
5212
5426
  }
5213
- $xeTable.handleCheckboxReserveRow(row, checked)
5427
+ handleCheckboxReserveRow($xeTable, row, checked)
5214
5428
  }
5215
5429
  }, { children: transform ? mapChildrenField : childrenField })
5216
5430
  reactData.selectCheckboxMaps = selectRowMaps
@@ -5220,7 +5434,7 @@ const Methods = {
5220
5434
  rows.forEach(row => {
5221
5435
  if (isForce || (!checkMethod || checkMethod({ row }))) {
5222
5436
  XEUtils.set(row, checkField, checked)
5223
- $xeTable.handleCheckboxReserveRow(row, checked)
5437
+ handleCheckboxReserveRow($xeTable, row, checked)
5224
5438
  }
5225
5439
  })
5226
5440
  }
@@ -5241,7 +5455,7 @@ const Methods = {
5241
5455
  delete selectRowMaps[rowid]
5242
5456
  }
5243
5457
  }
5244
- $xeTable.handleCheckboxReserveRow(row, checked)
5458
+ handleCheckboxReserveRow($xeTable, row, checked)
5245
5459
  }
5246
5460
  }, { children: transform ? mapChildrenField : childrenField })
5247
5461
  reactData.selectCheckboxMaps = selectRowMaps
@@ -5261,7 +5475,7 @@ const Methods = {
5261
5475
  delete selectRowMaps[rowid]
5262
5476
  }
5263
5477
  }
5264
- $xeTable.handleCheckboxReserveRow(row, checked)
5478
+ handleCheckboxReserveRow($xeTable, row, checked)
5265
5479
  }
5266
5480
  })
5267
5481
  reactData.selectCheckboxMaps = selectRowMaps
@@ -5296,6 +5510,8 @@ const Methods = {
5296
5510
  }
5297
5511
  },
5298
5512
  triggerCheckRowEvent (evnt: any, params: any, checked: any) {
5513
+ const $xeTable = this
5514
+
5299
5515
  const { checkboxOpts, afterFullData } = this
5300
5516
  const { checkMethod, trigger } = checkboxOpts
5301
5517
  const { row } = params
@@ -5312,7 +5528,7 @@ const Methods = {
5312
5528
  if (_rowIndex !== _firstRowIndex) {
5313
5529
  this.setAllCheckboxRow(false)
5314
5530
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1)
5315
- this.handleCheckedCheckboxRow(rangeRows, true, false)
5531
+ handleCheckedCheckboxRow($xeTable, rangeRows, true, false)
5316
5532
  this.emitEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt)
5317
5533
  return
5318
5534
  }
@@ -5342,143 +5558,14 @@ const Methods = {
5342
5558
  $xeTable.checkSelectionStatus()
5343
5559
  return $xeTable.$nextTick()
5344
5560
  },
5345
- handleCheckedAllCheckboxRow (checked: any, isForce: any) {
5346
- const $xeTable = this
5347
- const reactData = $xeTable
5348
-
5349
- const { afterFullData, treeConfig, treeOpts, selectCheckboxMaps, checkboxReserveRowMap, checkboxOpts, afterFullRowMaps } = this
5350
- const { checkField, reserve, checkStrictly, checkMethod } = checkboxOpts
5351
- const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
5352
- const childrenField = treeOpts.children || treeOpts.childrenField
5353
- const selectRowMaps: any = {}
5354
-
5355
- // 疑惑!
5356
- if (!treeConfig) {
5357
- XEUtils.each(selectCheckboxMaps, (row, rowid) => {
5358
- if (!afterFullRowMaps[rowid]) {
5359
- selectRowMaps[rowid] = row
5360
- }
5361
- })
5362
- }
5363
- // 疑惑!
5364
-
5365
- if (checkStrictly) {
5366
- this.isAllSelected = checked
5367
- } else {
5368
- /**
5369
- * 绑定属性方式(高性能,有污染)
5370
- * 必须在行数据存在对应的属性,否则将不响应
5371
- */
5372
- if (checkField) {
5373
- const checkValFn = (row: any) => {
5374
- if (isForce || (!checkMethod || checkMethod({ row }))) {
5375
- if (checked) {
5376
- selectRowMaps[getRowid(this, row)] = row
5377
- }
5378
- XEUtils.set(row, checkField, checked)
5379
- }
5380
- if (treeConfig && indeterminateField) {
5381
- XEUtils.set(row, indeterminateField, false)
5382
- }
5383
- }
5384
- // 如果存在选中方法
5385
- // 如果方法成立,则更新值,否则忽略该数据
5386
- if (treeConfig) {
5387
- XEUtils.eachTree(afterFullData, checkValFn, { children: childrenField })
5388
- } else {
5389
- afterFullData.forEach(checkValFn)
5390
- }
5391
- } else {
5392
- /**
5393
- * 默认方式(低性能,无污染)
5394
- * 无需任何属性,直接绑定
5395
- */
5396
- if (treeConfig) {
5397
- if (checked) {
5398
- /**
5399
- * 如果是树勾选
5400
- * 如果方法成立,则添加到临时集合中
5401
- */
5402
- XEUtils.eachTree(afterFullData, (row) => {
5403
- if (isForce || (!checkMethod || checkMethod({ row }))) {
5404
- selectRowMaps[getRowid(this, row)] = row
5405
- }
5406
- }, { children: childrenField })
5407
- } else {
5408
- /**
5409
- * 如果是树取消
5410
- * 如果方法成立,则不添加到临时集合中
5411
- */
5412
- if (!isForce && checkMethod) {
5413
- XEUtils.eachTree(afterFullData, (row) => {
5414
- const rowid = getRowid(this, row)
5415
- if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
5416
- selectRowMaps[rowid] = row
5417
- }
5418
- }, { children: childrenField })
5419
- }
5420
- }
5421
- } else {
5422
- if (checked) {
5423
- /**
5424
- * 如果是行勾选
5425
- * 如果存在选中方法且成立或者本身已勾选,则添加到临时集合中
5426
- * 如果不存在选中方法,则添加所有数据到临时集合中
5427
- */
5428
- if (!isForce && checkMethod) {
5429
- afterFullData.forEach((row: any) => {
5430
- const rowid = getRowid(this, row)
5431
- if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
5432
- selectRowMaps[rowid] = row
5433
- }
5434
- })
5435
- } else {
5436
- afterFullData.forEach((row: any) => {
5437
- selectRowMaps[getRowid(this, row)] = row
5438
- })
5439
- }
5440
- } else {
5441
- /**
5442
- * 如果是行取消
5443
- * 如果方法成立,则不添加到临时集合中;如果方法不成立则判断当前是否已勾选,如果已被勾选则添加到新集合中
5444
- * 如果不存在选中方法,无需处理,临时集合默认为空
5445
- */
5446
- if (!isForce && checkMethod) {
5447
- afterFullData.forEach((row: any) => {
5448
- const rowid = getRowid(this, row)
5449
- if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
5450
- selectRowMaps[rowid] = row
5451
- }
5452
- })
5453
- }
5454
- }
5455
- }
5456
- }
5457
- if (reserve) {
5458
- if (checked) {
5459
- XEUtils.each(selectRowMaps, (row, rowid) => {
5460
- checkboxReserveRowMap[rowid] = row
5461
- })
5462
- } else {
5463
- afterFullData.forEach((row: any) => this.handleCheckboxReserveRow(row, false))
5464
- }
5465
- }
5466
- this.selectCheckboxMaps = checkField ? {} : selectRowMaps
5467
- }
5468
-
5469
- reactData.isAllSelected = checked
5470
- reactData.isIndeterminate = false
5471
- this.treeIndeterminateMaps = {}
5472
- this.treeIndeterminateRowMaps = {}
5473
- this.checkSelectionStatus()
5474
- return this.$nextTick()
5475
- },
5476
5561
  /**
5477
5562
  * 用于多选行,设置所有行的选中状态
5478
5563
  * @param {Boolean} value 是否选中
5479
5564
  */
5480
- setAllCheckboxRow (value: any) {
5481
- return this.handleCheckedAllCheckboxRow(value, true)
5565
+ setAllCheckboxRow (value: boolean) {
5566
+ const $xeTable = this
5567
+
5568
+ return handleCheckedAllCheckboxRow($xeTable, value, true)
5482
5569
  },
5483
5570
  updateCheckboxStatus () {
5484
5571
  const $xeTable = this
@@ -5639,43 +5726,6 @@ const Methods = {
5639
5726
  $xeTable.updateCheckboxStatus()
5640
5727
  $xeTable.updateAllCheckboxStatus()
5641
5728
  },
5642
- // 还原展开、选中等相关状态
5643
- handleReserveStatus () {
5644
- const $xeTable = this
5645
-
5646
- const { expandColumn, treeOpts, treeConfig, fullDataRowIdData, fullAllDataRowIdData, currentRow, selectRadioRow, radioReserveRow, radioOpts, checkboxOpts, selectCheckboxMaps, rowExpandedMaps, treeExpandedMaps, expandOpts } = this
5647
- // 单选框
5648
- if (selectRadioRow && !fullAllDataRowIdData[getRowid($xeTable, selectRadioRow)]) {
5649
- this.selectRadioRow = null // 刷新单选行状态
5650
- }
5651
- // 还原保留选中状态
5652
- if (radioOpts.reserve && radioReserveRow) {
5653
- const rowid = getRowid(this, radioReserveRow)
5654
- if (fullDataRowIdData[rowid]) {
5655
- this.handleCheckedRadioRow(fullDataRowIdData[rowid].row, true)
5656
- }
5657
- }
5658
- // 复选框
5659
- this.selectCheckboxMaps = getRecoverRowMaps(this, selectCheckboxMaps) // 刷新多选行状态
5660
- // 还原保留选中状态
5661
- if (checkboxOpts.reserve) {
5662
- this.handleCheckedCheckboxRow(handleReserveRow(this, this.checkboxReserveRowMap), true, true)
5663
- }
5664
- if (currentRow && !this.fullAllDataRowIdData[getRowid($xeTable, currentRow)]) {
5665
- this.currentRow = null // 刷新当前行状态
5666
- }
5667
- // 行展开
5668
- this.rowExpandedMaps = expandColumn ? getRecoverRowMaps(this, rowExpandedMaps) : [] // 刷新行展开状态
5669
- // 还原保留状态
5670
- if (expandColumn && expandOpts.reserve) {
5671
- this.setRowExpand(handleReserveRow(this, this.rowExpandedReserveRowMap), true)
5672
- }
5673
- // 树展开
5674
- this.treeExpandedMaps = treeConfig ? getRecoverRowMaps(this, treeExpandedMaps) : [] // 刷新树展开状态
5675
- if (treeConfig && treeOpts.reserve) {
5676
- this.setTreeExpand(handleReserveRow(this, this.treeExpandedReserveRowMap), true)
5677
- }
5678
- },
5679
5729
  /**
5680
5730
  * 获取单选框保留选中的行
5681
5731
  */
@@ -5708,12 +5758,6 @@ const Methods = {
5708
5758
  this.radioReserveRow = null
5709
5759
  return this.$nextTick()
5710
5760
  },
5711
- handleRadioReserveRow (row: any) {
5712
- const { radioOpts } = this
5713
- if (radioOpts.reserve) {
5714
- this.radioReserveRow = row
5715
- }
5716
- },
5717
5761
  /**
5718
5762
  * 获取复选框保留选中的行
5719
5763
  */
@@ -5764,15 +5808,24 @@ const Methods = {
5764
5808
  }
5765
5809
  },
5766
5810
  handleCheckAllEvent (evnt: any, value: any) {
5767
- this.handleCheckedAllCheckboxRow(value)
5811
+ const $xeTable = this
5812
+
5813
+ handleCheckedAllCheckboxRow($xeTable, value)
5768
5814
  if (evnt) {
5769
- 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)
5770
5821
  }
5771
5822
  },
5772
5823
  /**
5773
5824
  * 多选,选中所有事件
5774
5825
  */
5775
5826
  triggerCheckAllEvent (evnt: any, value: any) {
5827
+ const $xeTable = this
5828
+
5776
5829
  const { checkboxOpts } = this
5777
5830
  const { trigger } = checkboxOpts
5778
5831
  if (trigger === 'manual') {
@@ -5781,7 +5834,7 @@ const Methods = {
5781
5834
  if (evnt) {
5782
5835
  evnt.stopPropagation()
5783
5836
  }
5784
- this.handleCheckAllEvent(evnt, value)
5837
+ $xeTable.handleCheckAllEvent(evnt, value)
5785
5838
  },
5786
5839
  /**
5787
5840
  * 多选,切换所有行的选中状态
@@ -5825,11 +5878,13 @@ const Methods = {
5825
5878
  * 处理单选框默认勾选
5826
5879
  */
5827
5880
  handleDefaultRadioChecked () {
5881
+ const $xeTable = this
5882
+
5828
5883
  const { radioOpts, fullDataRowIdData } = this
5829
5884
  const { checkRowKey: rowid, reserve } = radioOpts
5830
5885
  if (rowid) {
5831
5886
  if (fullDataRowIdData[rowid]) {
5832
- this.handleCheckedRadioRow(fullDataRowIdData[rowid].row, true)
5887
+ handleCheckedRadioRow($xeTable, fullDataRowIdData[rowid].row, true)
5833
5888
  }
5834
5889
  if (reserve) {
5835
5890
  const rowkey = getRowkey(this)
@@ -5843,6 +5898,8 @@ const Methods = {
5843
5898
  triggerRadioRowEvent (evnt: Event, params: {
5844
5899
  row: any
5845
5900
  }) {
5901
+ const $xeTable = this
5902
+
5846
5903
  const { selectRadioRow: oldValue, radioOpts } = this
5847
5904
  const { row } = params
5848
5905
  const { trigger } = radioOpts
@@ -5853,7 +5910,7 @@ const Methods = {
5853
5910
  let newValue = row
5854
5911
  let isChange = oldValue !== newValue
5855
5912
  if (isChange) {
5856
- this.handleCheckedRadioRow(newValue)
5913
+ handleCheckedRadioRow($xeTable, newValue)
5857
5914
  } else if (!radioOpts.strict) {
5858
5915
  isChange = oldValue === newValue
5859
5916
  if (isChange) {
@@ -5929,15 +5986,6 @@ const Methods = {
5929
5986
  }
5930
5987
  return false
5931
5988
  },
5932
- handleCheckedRadioRow (row: any, isForce?: boolean) {
5933
- const { radioOpts } = this
5934
- const { checkMethod } = radioOpts
5935
- if (row && (isForce || (!checkMethod || checkMethod({ row })))) {
5936
- this.selectRadioRow = row
5937
- this.handleRadioReserveRow(row)
5938
- }
5939
- return this.$nextTick()
5940
- },
5941
5989
  /**
5942
5990
  * 用于单选行,设置某一行为选中状态
5943
5991
  * @param {Row} row 行对象
@@ -5945,7 +5993,7 @@ const Methods = {
5945
5993
  setRadioRow (row: any) {
5946
5994
  const $xeTable = this
5947
5995
 
5948
- return $xeTable.handleCheckedRadioRow(row, true)
5996
+ return handleCheckedRadioRow($xeTable, row, true)
5949
5997
  },
5950
5998
  /**
5951
5999
  * 用于单选行,设置某一行为选中状态
@@ -5958,7 +6006,7 @@ const Methods = {
5958
6006
  const { fullAllDataRowIdData } = internalData
5959
6007
  const rowRest = fullAllDataRowIdData[rowid]
5960
6008
  if (rowRest) {
5961
- return $xeTable.handleCheckedRadioRow(rowRest.row, true)
6009
+ return handleCheckedRadioRow($xeTable, rowRest.row, true)
5962
6010
  }
5963
6011
  return $xeTable.$nextTick()
5964
6012
  },
@@ -7744,7 +7792,7 @@ const Methods = {
7744
7792
  }
7745
7793
  // 如果当前节点已选中,则展开后子节点也被选中
7746
7794
  if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
7747
- this.handleCheckedCheckboxRow(childRows, true)
7795
+ handleCheckedCheckboxRow($xeTable, childRows, true)
7748
7796
  }
7749
7797
  return this.$nextTick().then(() => {
7750
7798
  if (transform) {
@@ -831,7 +831,7 @@
831
831
  background-color: var(--vxe-ui-layout-background-color);
832
832
  }
833
833
  .vxe-table--footer-wrapper {
834
- margin-top: -1px;
834
+ margin-top: calc(var(--vxe-ui-table-border-width) * -1);
835
835
  background-color: var(--vxe-ui-table-footer-background-color);
836
836
  }
837
837
  .vxe-table--header,