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
@@ -38,8 +38,9 @@ const setCustomStorageMap = (id, data) => {
38
38
  maps._v = version;
39
39
  localStorage.setItem(customStorageKey, XEUtils.toJSONString(maps));
40
40
  };
41
- const getRecoverRowMaps = (_vm, keyMaps) => {
42
- const { fullAllDataRowIdData } = _vm;
41
+ const getRecoverRowMaps = ($xeTable, keyMaps) => {
42
+ const internalData = $xeTable;
43
+ const { fullAllDataRowIdData } = internalData;
43
44
  const restKeys = {};
44
45
  XEUtils.each(keyMaps, (row, rowid) => {
45
46
  if (fullAllDataRowIdData[rowid]) {
@@ -48,8 +49,9 @@ const getRecoverRowMaps = (_vm, keyMaps) => {
48
49
  });
49
50
  return restKeys;
50
51
  };
51
- function handleReserveRow(_vm, reserveRowMap) {
52
- const { fullDataRowIdData } = _vm;
52
+ function handleReserveRow($xeTable, reserveRowMap) {
53
+ const internalData = $xeTable;
54
+ const { fullDataRowIdData } = internalData;
53
55
  const reserveList = [];
54
56
  XEUtils.each(reserveRowMap, (item, rowid) => {
55
57
  if (fullDataRowIdData[rowid] && reserveList.indexOf(fullDataRowIdData[rowid].row) === -1) {
@@ -716,6 +718,215 @@ function updateStyle($xeTable) {
716
718
  }
717
719
  return $xeTable.$nextTick();
718
720
  }
721
+ function handleRadioReserveRow($xeTable, row) {
722
+ const internalData = $xeTable;
723
+ const radioOpts = $xeTable.computeRadioOpts;
724
+ if (radioOpts.reserve) {
725
+ internalData.radioReserveRow = row;
726
+ }
727
+ }
728
+ function handleCheckboxReserveRow($xeTable, row, checked) {
729
+ const internalData = $xeTable;
730
+ const { checkboxReserveRowMap } = internalData;
731
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
732
+ if (checkboxOpts.reserve) {
733
+ const rowid = getRowid($xeTable, row);
734
+ if (checked) {
735
+ checkboxReserveRowMap[rowid] = row;
736
+ }
737
+ else if (checkboxReserveRowMap[rowid]) {
738
+ delete checkboxReserveRowMap[rowid];
739
+ }
740
+ }
741
+ }
742
+ function handleCheckedRadioRow($xeTable, row, isForce) {
743
+ const reactData = $xeTable;
744
+ const radioOpts = $xeTable.computeRadioOpts;
745
+ const { checkMethod } = radioOpts;
746
+ if (row && (isForce || (!checkMethod || checkMethod({ row })))) {
747
+ reactData.selectRadioRow = row;
748
+ handleRadioReserveRow($xeTable, row);
749
+ }
750
+ return $xeTable.$nextTick();
751
+ }
752
+ function handleCheckedCheckboxRow($xeTable, rows, value, isForce) {
753
+ if (rows && !XEUtils.isArray(rows)) {
754
+ rows = [rows];
755
+ }
756
+ $xeTable.handleBatchSelectRows(rows, !!value, isForce);
757
+ $xeTable.checkSelectionStatus();
758
+ return $xeTable.$nextTick();
759
+ }
760
+ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
761
+ const props = $xeTable;
762
+ const reactData = $xeTable;
763
+ const internalData = $xeTable;
764
+ const { treeConfig } = props;
765
+ const { selectCheckboxMaps } = reactData;
766
+ const { afterFullData, checkboxReserveRowMap } = internalData;
767
+ const treeOpts = $xeTable.computeTreeOpts;
768
+ const childrenField = treeOpts.children || treeOpts.childrenField;
769
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
770
+ const { checkField, reserve, checkMethod } = checkboxOpts;
771
+ const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
772
+ const selectRowMaps = {};
773
+ /**
774
+ * 绑定属性方式(高性能,有污染)
775
+ * 必须在行数据存在对应的属性,否则将不响应
776
+ */
777
+ if (checkField) {
778
+ const checkValFn = (row) => {
779
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
780
+ if (checked) {
781
+ selectRowMaps[getRowid($xeTable, row)] = row;
782
+ }
783
+ XEUtils.set(row, checkField, checked);
784
+ }
785
+ if (treeConfig && indeterminateField) {
786
+ XEUtils.set(row, indeterminateField, false);
787
+ }
788
+ };
789
+ // 如果存在选中方法
790
+ // 如果方法成立,则更新值,否则忽略该数据
791
+ if (treeConfig) {
792
+ XEUtils.eachTree(afterFullData, checkValFn, { children: childrenField });
793
+ }
794
+ else {
795
+ afterFullData.forEach(checkValFn);
796
+ }
797
+ }
798
+ else {
799
+ /**
800
+ * 默认方式(低性能,无污染)
801
+ * 无需任何属性,直接绑定
802
+ */
803
+ if (treeConfig) {
804
+ if (checked) {
805
+ /**
806
+ * 如果是树勾选
807
+ * 如果方法成立,则添加到临时集合中
808
+ */
809
+ XEUtils.eachTree(afterFullData, (row) => {
810
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
811
+ selectRowMaps[getRowid($xeTable, row)] = row;
812
+ }
813
+ }, { children: childrenField });
814
+ }
815
+ else {
816
+ /**
817
+ * 如果是树取消
818
+ * 如果方法成立,则不添加到临时集合中
819
+ */
820
+ if (!isForce && checkMethod) {
821
+ XEUtils.eachTree(afterFullData, (row) => {
822
+ const rowid = getRowid($xeTable, row);
823
+ if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
824
+ selectRowMaps[rowid] = row;
825
+ }
826
+ }, { children: childrenField });
827
+ }
828
+ }
829
+ }
830
+ else {
831
+ if (checked) {
832
+ /**
833
+ * 如果是行勾选
834
+ * 如果存在选中方法且成立或者本身已勾选,则添加到临时集合中
835
+ * 如果不存在选中方法,则添加所有数据到临时集合中
836
+ */
837
+ if (!isForce && checkMethod) {
838
+ afterFullData.forEach((row) => {
839
+ const rowid = getRowid($xeTable, row);
840
+ if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
841
+ selectRowMaps[rowid] = row;
842
+ }
843
+ });
844
+ }
845
+ else {
846
+ afterFullData.forEach(row => {
847
+ selectRowMaps[getRowid($xeTable, row)] = row;
848
+ });
849
+ }
850
+ }
851
+ else {
852
+ /**
853
+ * 如果是行取消
854
+ * 如果方法成立,则不添加到临时集合中;如果方法不成立则判断当前是否已勾选,如果已被勾选则添加到新集合中
855
+ * 如果不存在选中方法,无需处理,临时集合默认为空
856
+ */
857
+ if (!isForce && checkMethod) {
858
+ afterFullData.forEach((row) => {
859
+ const rowid = getRowid($xeTable, row);
860
+ if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
861
+ selectRowMaps[rowid] = row;
862
+ }
863
+ });
864
+ }
865
+ }
866
+ }
867
+ }
868
+ if (reserve) {
869
+ if (checked) {
870
+ XEUtils.each(selectRowMaps, (row, rowid) => {
871
+ checkboxReserveRowMap[rowid] = row;
872
+ });
873
+ }
874
+ else {
875
+ afterFullData.forEach((row) => handleCheckboxReserveRow($xeTable, row, false));
876
+ }
877
+ }
878
+ reactData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
879
+ reactData.isAllSelected = checked;
880
+ reactData.isIndeterminate = false;
881
+ reactData.treeIndeterminateMaps = {};
882
+ internalData.treeIndeterminateRowMaps = {};
883
+ $xeTable.checkSelectionStatus();
884
+ return $xeTable.$nextTick();
885
+ }
886
+ // 还原展开、选中等相关状态
887
+ function handleReserveStatus($xeTable) {
888
+ const props = $xeTable;
889
+ const reactData = $xeTable;
890
+ const internalData = $xeTable;
891
+ const { treeConfig } = props;
892
+ const { expandColumn, currentRow, selectCheckboxMaps, selectRadioRow, rowExpandedMaps, treeExpandedMaps } = reactData;
893
+ const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData;
894
+ const expandOpts = $xeTable.computeExpandOpts;
895
+ const treeOpts = $xeTable.computeTreeOpts;
896
+ const radioOpts = $xeTable.computeRadioOpts;
897
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
898
+ // 单选框
899
+ if (selectRadioRow && !fullAllDataRowIdData[getRowid($xeTable, selectRadioRow)]) {
900
+ reactData.selectRadioRow = null; // 刷新单选行状态
901
+ }
902
+ // 还原保留选中状态
903
+ if (radioOpts.reserve && radioReserveRow) {
904
+ const rowid = getRowid($xeTable, radioReserveRow);
905
+ if (fullDataRowIdData[rowid]) {
906
+ handleCheckedRadioRow($xeTable, fullDataRowIdData[rowid].row, true);
907
+ }
908
+ }
909
+ // 复选框
910
+ reactData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
911
+ // 还原保留选中状态
912
+ if (checkboxOpts.reserve) {
913
+ handleCheckedCheckboxRow($xeTable, handleReserveRow($xeTable, internalData.checkboxReserveRowMap), true, true);
914
+ }
915
+ if (currentRow && !fullAllDataRowIdData[getRowid($xeTable, currentRow)]) {
916
+ reactData.currentRow = null; // 刷新当前行状态
917
+ }
918
+ // 行展开
919
+ reactData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
920
+ // 还原保留状态
921
+ if (expandColumn && expandOpts.reserve) {
922
+ $xeTable.setRowExpand(handleReserveRow($xeTable, internalData.rowExpandedReserveRowMap), true);
923
+ }
924
+ // 树展开
925
+ reactData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
926
+ if (treeConfig && treeOpts.reserve) {
927
+ $xeTable.setTreeExpand(handleReserveRow($xeTable, internalData.treeExpandedReserveRowMap), true);
928
+ }
929
+ }
719
930
  function calcVarRowHeightConfig($xeTable, sizeKey, sizeEl) {
720
931
  const reactData = $xeTable;
721
932
  const { rowHeightStore } = reactData;
@@ -2113,15 +2324,11 @@ const Methods = {
2113
2324
  internalData.tableFullData = fullData;
2114
2325
  internalData.tableFullTreeData = treeData;
2115
2326
  // 缓存数据
2116
- $xeTable.cacheRowMap(true, isReset);
2327
+ $xeTable.cacheRowMap(true);
2117
2328
  // 原始数据
2118
2329
  internalData.tableSynchData = datas;
2119
2330
  if (isReset) {
2120
2331
  internalData.isResizeCellHeight = false;
2121
- reactData.rowExpandedMaps = {};
2122
- reactData.rowExpandLazyLoadedMaps = {};
2123
- reactData.treeExpandedMaps = {};
2124
- reactData.treeExpandLazyLoadedMaps = {};
2125
2332
  }
2126
2333
  // 克隆原数据,用于显示编辑状态,与编辑值做对比
2127
2334
  if (keepSource) {
@@ -2166,7 +2373,7 @@ const Methods = {
2166
2373
  }
2167
2374
  }
2168
2375
  }
2169
- this.handleReserveStatus();
2376
+ handleReserveStatus($xeTable);
2170
2377
  this.checkSelectionStatus();
2171
2378
  return new Promise(resolve => {
2172
2379
  this.$nextTick()
@@ -2305,16 +2512,21 @@ const Methods = {
2305
2512
  /**
2306
2513
  * 更新数据行的 Map
2307
2514
  */
2308
- cacheRowMap(isReset, isSource) {
2309
- const { treeConfig, treeOpts, tableFullData, fullAllDataRowIdData, tableFullTreeData } = this;
2515
+ cacheRowMap() {
2516
+ const $xeTable = this;
2517
+ const props = $xeTable;
2518
+ const internalData = $xeTable;
2519
+ const { treeConfig } = props;
2520
+ const treeOpts = $xeTable.computeTreeOpts;
2521
+ const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData;
2310
2522
  const childrenField = treeOpts.children || treeOpts.childrenField;
2311
2523
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
2312
- const rowkey = getRowkey(this);
2524
+ const rowkey = getRowkey($xeTable);
2313
2525
  const isLazy = treeConfig && treeOpts.lazy;
2314
2526
  const fullAllDataRowIdMaps = {};
2315
2527
  const fullDataRowIdMaps = {};
2316
- const handleCache = (row, index, items, path, parentRow, nodes) => {
2317
- let rowid = getRowid(this, row);
2528
+ const handleRow = (row, index, items, path, parentRow, nodes) => {
2529
+ let rowid = getRowid($xeTable, row);
2318
2530
  const seq = treeConfig && path ? toTreePathSeq(path) : index + 1;
2319
2531
  const level = nodes ? nodes.length - 1 : 0;
2320
2532
  if (eqEmptyValue(rowid)) {
@@ -2324,29 +2536,25 @@ const Methods = {
2324
2536
  if (isLazy && row[hasChildField] && XEUtils.isUndefined(row[childrenField])) {
2325
2537
  row[childrenField] = null;
2326
2538
  }
2327
- let cacheItem = fullAllDataRowIdData[rowid];
2328
- if (isReset || !cacheItem) {
2329
- cacheItem = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
2330
- }
2331
- cacheItem.row = row;
2332
- cacheItem.items = items;
2333
- cacheItem.parent = parentRow;
2334
- cacheItem.level = level;
2335
- cacheItem.index = treeConfig && parentRow ? -1 : index;
2336
- if (isSource) {
2337
- fullDataRowIdMaps[rowid] = cacheItem;
2338
- }
2339
- fullAllDataRowIdMaps[rowid] = cacheItem;
2539
+ let rowRest = fullAllDataRowIdData[rowid];
2540
+ if (!rowRest) {
2541
+ rowRest = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
2542
+ }
2543
+ rowRest.row = row;
2544
+ rowRest.items = items;
2545
+ rowRest.parent = parentRow;
2546
+ rowRest.level = level;
2547
+ rowRest.index = treeConfig && parentRow ? -1 : index;
2548
+ fullDataRowIdMaps[rowid] = rowRest;
2549
+ fullAllDataRowIdMaps[rowid] = rowRest;
2340
2550
  };
2341
- if (isSource) {
2342
- this.fullDataRowIdData = fullDataRowIdMaps;
2343
- }
2344
- this.fullAllDataRowIdData = fullAllDataRowIdMaps;
2551
+ internalData.fullDataRowIdData = fullDataRowIdMaps;
2552
+ internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
2345
2553
  if (treeConfig) {
2346
- XEUtils.eachTree(tableFullTreeData, handleCache, { children: childrenField });
2554
+ XEUtils.eachTree(tableFullTreeData, handleRow, { children: childrenField });
2347
2555
  }
2348
2556
  else {
2349
- tableFullData.forEach(handleCache);
2557
+ tableFullData.forEach(handleRow);
2350
2558
  }
2351
2559
  },
2352
2560
  cacheSourceMap(fullData) {
@@ -3168,7 +3376,7 @@ const Methods = {
3168
3376
  const props = $xeTable;
3169
3377
  const internalData = $xeTable;
3170
3378
  const { treeConfig } = props;
3171
- const { fullDataRowIdData } = internalData;
3379
+ const { fullAllDataRowIdData } = internalData;
3172
3380
  const treeOpts = $xeTable.computeTreeOpts;
3173
3381
  const { transform, mapChildrenField } = treeOpts;
3174
3382
  const childrenField = treeOpts.children || treeOpts.childrenField;
@@ -3181,7 +3389,7 @@ const Methods = {
3181
3389
  rowid = getRowid($xeTable, rowOrRowid);
3182
3390
  }
3183
3391
  if (rowid) {
3184
- const rest = fullDataRowIdData[rowid];
3392
+ const rest = fullAllDataRowIdData[rowid];
3185
3393
  const row = rest ? rest.row : null;
3186
3394
  if (row) {
3187
3395
  return row[transform ? mapChildrenField : childrenField] || [];
@@ -3198,7 +3406,7 @@ const Methods = {
3198
3406
  const props = $xeTable;
3199
3407
  const internalData = $xeTable;
3200
3408
  const { treeConfig } = props;
3201
- const { fullDataRowIdData } = internalData;
3409
+ const { fullAllDataRowIdData } = internalData;
3202
3410
  if (rowOrRowid && treeConfig) {
3203
3411
  let rowid;
3204
3412
  if (XEUtils.isString(rowOrRowid)) {
@@ -3208,7 +3416,7 @@ const Methods = {
3208
3416
  rowid = getRowid($xeTable, rowOrRowid);
3209
3417
  }
3210
3418
  if (rowid) {
3211
- const rest = fullDataRowIdData[rowid];
3419
+ const rest = fullAllDataRowIdData[rowid];
3212
3420
  return rest ? rest.parent : null;
3213
3421
  }
3214
3422
  }
@@ -3226,9 +3434,9 @@ const Methods = {
3226
3434
  getRowById(cellValue) {
3227
3435
  const $xeTable = this;
3228
3436
  const internalData = $xeTable;
3229
- const { fullDataRowIdData } = internalData;
3437
+ const { fullAllDataRowIdData } = internalData;
3230
3438
  const rowid = XEUtils.eqNull(cellValue) ? '' : encodeURIComponent(cellValue);
3231
- return fullDataRowIdData[rowid] ? fullDataRowIdData[rowid].row : null;
3439
+ return fullAllDataRowIdData[rowid] ? fullAllDataRowIdData[rowid].row : null;
3232
3440
  },
3233
3441
  /**
3234
3442
  * 根据行获取行的唯一主键
@@ -4990,10 +5198,11 @@ const Methods = {
4990
5198
  * 处理默认勾选
4991
5199
  */
4992
5200
  handleDefaultSelectionChecked() {
5201
+ const $xeTable = this;
4993
5202
  const { fullDataRowIdData, checkboxOpts } = this;
4994
5203
  const { checkAll, checkRowKeys } = checkboxOpts;
4995
5204
  if (checkAll) {
4996
- this.handleCheckedAllCheckboxRow(true, true);
5205
+ handleCheckedAllCheckboxRow($xeTable, true, true);
4997
5206
  }
4998
5207
  else if (checkRowKeys) {
4999
5208
  const defSelection = [];
@@ -5002,17 +5211,12 @@ const Methods = {
5002
5211
  defSelection.push(fullDataRowIdData[rowid].row);
5003
5212
  }
5004
5213
  });
5005
- this.handleCheckedCheckboxRow(defSelection, true, true);
5214
+ handleCheckedCheckboxRow($xeTable, defSelection, true, true);
5006
5215
  }
5007
5216
  },
5008
5217
  handleCheckedCheckboxRow(rows, value, isForce) {
5009
5218
  const $xeTable = this;
5010
- if (rows && !XEUtils.isArray(rows)) {
5011
- rows = [rows];
5012
- }
5013
- $xeTable.handleBatchSelectRows(rows, !!value, isForce);
5014
- $xeTable.checkSelectionStatus();
5015
- return this.$nextTick();
5219
+ return handleCheckedCheckboxRow($xeTable, rows, value, isForce);
5016
5220
  },
5017
5221
  /**
5018
5222
  * 用于多选行,设置行为选中状态,第二个参数为选中与否
@@ -5024,7 +5228,7 @@ const Methods = {
5024
5228
  if (rows && !XEUtils.isArray(rows)) {
5025
5229
  rows = [rows];
5026
5230
  }
5027
- return $xeTable.handleCheckedCheckboxRow(rows, checked, true);
5231
+ return handleCheckedCheckboxRow($xeTable, rows, checked, true);
5028
5232
  },
5029
5233
  setCheckboxRowKey(keys, checked) {
5030
5234
  const $xeTable = this;
@@ -5040,7 +5244,7 @@ const Methods = {
5040
5244
  rows.push(rowRest.row);
5041
5245
  }
5042
5246
  });
5043
- return $xeTable.handleCheckedCheckboxRow(rows, checked, true);
5247
+ return handleCheckedCheckboxRow($xeTable, rows, checked, true);
5044
5248
  },
5045
5249
  isCheckedByCheckboxRow(row) {
5046
5250
  const $xeTable = this;
@@ -5109,7 +5313,7 @@ const Methods = {
5109
5313
  if (indeterminateField) {
5110
5314
  XEUtils.set(row, indeterminateField, false);
5111
5315
  }
5112
- $xeTable.handleCheckboxReserveRow(row, checked);
5316
+ handleCheckboxReserveRow($xeTable, row, checked);
5113
5317
  }
5114
5318
  }, { children: transform ? mapChildrenField : childrenField });
5115
5319
  reactData.selectCheckboxMaps = selectRowMaps;
@@ -5120,7 +5324,7 @@ const Methods = {
5120
5324
  rows.forEach(row => {
5121
5325
  if (isForce || (!checkMethod || checkMethod({ row }))) {
5122
5326
  XEUtils.set(row, checkField, checked);
5123
- $xeTable.handleCheckboxReserveRow(row, checked);
5327
+ handleCheckboxReserveRow($xeTable, row, checked);
5124
5328
  }
5125
5329
  });
5126
5330
  }
@@ -5141,7 +5345,7 @@ const Methods = {
5141
5345
  delete selectRowMaps[rowid];
5142
5346
  }
5143
5347
  }
5144
- $xeTable.handleCheckboxReserveRow(row, checked);
5348
+ handleCheckboxReserveRow($xeTable, row, checked);
5145
5349
  }
5146
5350
  }, { children: transform ? mapChildrenField : childrenField });
5147
5351
  reactData.selectCheckboxMaps = selectRowMaps;
@@ -5161,7 +5365,7 @@ const Methods = {
5161
5365
  delete selectRowMaps[rowid];
5162
5366
  }
5163
5367
  }
5164
- $xeTable.handleCheckboxReserveRow(row, checked);
5368
+ handleCheckboxReserveRow($xeTable, row, checked);
5165
5369
  }
5166
5370
  });
5167
5371
  reactData.selectCheckboxMaps = selectRowMaps;
@@ -5197,6 +5401,7 @@ const Methods = {
5197
5401
  }
5198
5402
  },
5199
5403
  triggerCheckRowEvent(evnt, params, checked) {
5404
+ const $xeTable = this;
5200
5405
  const { checkboxOpts, afterFullData } = this;
5201
5406
  const { checkMethod, trigger } = checkboxOpts;
5202
5407
  const { row } = params;
@@ -5213,7 +5418,7 @@ const Methods = {
5213
5418
  if (_rowIndex !== _firstRowIndex) {
5214
5419
  this.setAllCheckboxRow(false);
5215
5420
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
5216
- this.handleCheckedCheckboxRow(rangeRows, true, false);
5421
+ handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
5217
5422
  this.emitEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
5218
5423
  return;
5219
5424
  }
@@ -5242,147 +5447,13 @@ const Methods = {
5242
5447
  $xeTable.checkSelectionStatus();
5243
5448
  return $xeTable.$nextTick();
5244
5449
  },
5245
- handleCheckedAllCheckboxRow(checked, isForce) {
5246
- const $xeTable = this;
5247
- const reactData = $xeTable;
5248
- const { afterFullData, treeConfig, treeOpts, selectCheckboxMaps, checkboxReserveRowMap, checkboxOpts, afterFullRowMaps } = this;
5249
- const { checkField, reserve, checkStrictly, checkMethod } = checkboxOpts;
5250
- const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
5251
- const childrenField = treeOpts.children || treeOpts.childrenField;
5252
- const selectRowMaps = {};
5253
- // 疑惑!
5254
- if (!treeConfig) {
5255
- XEUtils.each(selectCheckboxMaps, (row, rowid) => {
5256
- if (!afterFullRowMaps[rowid]) {
5257
- selectRowMaps[rowid] = row;
5258
- }
5259
- });
5260
- }
5261
- // 疑惑!
5262
- if (checkStrictly) {
5263
- this.isAllSelected = checked;
5264
- }
5265
- else {
5266
- /**
5267
- * 绑定属性方式(高性能,有污染)
5268
- * 必须在行数据存在对应的属性,否则将不响应
5269
- */
5270
- if (checkField) {
5271
- const checkValFn = (row) => {
5272
- if (isForce || (!checkMethod || checkMethod({ row }))) {
5273
- if (checked) {
5274
- selectRowMaps[getRowid(this, row)] = row;
5275
- }
5276
- XEUtils.set(row, checkField, checked);
5277
- }
5278
- if (treeConfig && indeterminateField) {
5279
- XEUtils.set(row, indeterminateField, false);
5280
- }
5281
- };
5282
- // 如果存在选中方法
5283
- // 如果方法成立,则更新值,否则忽略该数据
5284
- if (treeConfig) {
5285
- XEUtils.eachTree(afterFullData, checkValFn, { children: childrenField });
5286
- }
5287
- else {
5288
- afterFullData.forEach(checkValFn);
5289
- }
5290
- }
5291
- else {
5292
- /**
5293
- * 默认方式(低性能,无污染)
5294
- * 无需任何属性,直接绑定
5295
- */
5296
- if (treeConfig) {
5297
- if (checked) {
5298
- /**
5299
- * 如果是树勾选
5300
- * 如果方法成立,则添加到临时集合中
5301
- */
5302
- XEUtils.eachTree(afterFullData, (row) => {
5303
- if (isForce || (!checkMethod || checkMethod({ row }))) {
5304
- selectRowMaps[getRowid(this, row)] = row;
5305
- }
5306
- }, { children: childrenField });
5307
- }
5308
- else {
5309
- /**
5310
- * 如果是树取消
5311
- * 如果方法成立,则不添加到临时集合中
5312
- */
5313
- if (!isForce && checkMethod) {
5314
- XEUtils.eachTree(afterFullData, (row) => {
5315
- const rowid = getRowid(this, row);
5316
- if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
5317
- selectRowMaps[rowid] = row;
5318
- }
5319
- }, { children: childrenField });
5320
- }
5321
- }
5322
- }
5323
- else {
5324
- if (checked) {
5325
- /**
5326
- * 如果是行勾选
5327
- * 如果存在选中方法且成立或者本身已勾选,则添加到临时集合中
5328
- * 如果不存在选中方法,则添加所有数据到临时集合中
5329
- */
5330
- if (!isForce && checkMethod) {
5331
- afterFullData.forEach((row) => {
5332
- const rowid = getRowid(this, row);
5333
- if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
5334
- selectRowMaps[rowid] = row;
5335
- }
5336
- });
5337
- }
5338
- else {
5339
- afterFullData.forEach((row) => {
5340
- selectRowMaps[getRowid(this, row)] = row;
5341
- });
5342
- }
5343
- }
5344
- else {
5345
- /**
5346
- * 如果是行取消
5347
- * 如果方法成立,则不添加到临时集合中;如果方法不成立则判断当前是否已勾选,如果已被勾选则添加到新集合中
5348
- * 如果不存在选中方法,无需处理,临时集合默认为空
5349
- */
5350
- if (!isForce && checkMethod) {
5351
- afterFullData.forEach((row) => {
5352
- const rowid = getRowid(this, row);
5353
- if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
5354
- selectRowMaps[rowid] = row;
5355
- }
5356
- });
5357
- }
5358
- }
5359
- }
5360
- }
5361
- if (reserve) {
5362
- if (checked) {
5363
- XEUtils.each(selectRowMaps, (row, rowid) => {
5364
- checkboxReserveRowMap[rowid] = row;
5365
- });
5366
- }
5367
- else {
5368
- afterFullData.forEach((row) => this.handleCheckboxReserveRow(row, false));
5369
- }
5370
- }
5371
- this.selectCheckboxMaps = checkField ? {} : selectRowMaps;
5372
- }
5373
- reactData.isAllSelected = checked;
5374
- reactData.isIndeterminate = false;
5375
- this.treeIndeterminateMaps = {};
5376
- this.treeIndeterminateRowMaps = {};
5377
- this.checkSelectionStatus();
5378
- return this.$nextTick();
5379
- },
5380
5450
  /**
5381
5451
  * 用于多选行,设置所有行的选中状态
5382
5452
  * @param {Boolean} value 是否选中
5383
5453
  */
5384
5454
  setAllCheckboxRow(value) {
5385
- return this.handleCheckedAllCheckboxRow(value, true);
5455
+ const $xeTable = this;
5456
+ return handleCheckedAllCheckboxRow($xeTable, value, true);
5386
5457
  },
5387
5458
  updateCheckboxStatus() {
5388
5459
  const $xeTable = this;
@@ -5544,42 +5615,6 @@ const Methods = {
5544
5615
  $xeTable.updateCheckboxStatus();
5545
5616
  $xeTable.updateAllCheckboxStatus();
5546
5617
  },
5547
- // 还原展开、选中等相关状态
5548
- handleReserveStatus() {
5549
- const $xeTable = this;
5550
- const { expandColumn, treeOpts, treeConfig, fullDataRowIdData, fullAllDataRowIdData, currentRow, selectRadioRow, radioReserveRow, radioOpts, checkboxOpts, selectCheckboxMaps, rowExpandedMaps, treeExpandedMaps, expandOpts } = this;
5551
- // 单选框
5552
- if (selectRadioRow && !fullAllDataRowIdData[getRowid($xeTable, selectRadioRow)]) {
5553
- this.selectRadioRow = null; // 刷新单选行状态
5554
- }
5555
- // 还原保留选中状态
5556
- if (radioOpts.reserve && radioReserveRow) {
5557
- const rowid = getRowid(this, radioReserveRow);
5558
- if (fullDataRowIdData[rowid]) {
5559
- this.handleCheckedRadioRow(fullDataRowIdData[rowid].row, true);
5560
- }
5561
- }
5562
- // 复选框
5563
- this.selectCheckboxMaps = getRecoverRowMaps(this, selectCheckboxMaps); // 刷新多选行状态
5564
- // 还原保留选中状态
5565
- if (checkboxOpts.reserve) {
5566
- this.handleCheckedCheckboxRow(handleReserveRow(this, this.checkboxReserveRowMap), true, true);
5567
- }
5568
- if (currentRow && !this.fullAllDataRowIdData[getRowid($xeTable, currentRow)]) {
5569
- this.currentRow = null; // 刷新当前行状态
5570
- }
5571
- // 行展开
5572
- this.rowExpandedMaps = expandColumn ? getRecoverRowMaps(this, rowExpandedMaps) : []; // 刷新行展开状态
5573
- // 还原保留状态
5574
- if (expandColumn && expandOpts.reserve) {
5575
- this.setRowExpand(handleReserveRow(this, this.rowExpandedReserveRowMap), true);
5576
- }
5577
- // 树展开
5578
- this.treeExpandedMaps = treeConfig ? getRecoverRowMaps(this, treeExpandedMaps) : []; // 刷新树展开状态
5579
- if (treeConfig && treeOpts.reserve) {
5580
- this.setTreeExpand(handleReserveRow(this, this.treeExpandedReserveRowMap), true);
5581
- }
5582
- },
5583
5618
  /**
5584
5619
  * 获取单选框保留选中的行
5585
5620
  */
@@ -5614,12 +5649,6 @@ const Methods = {
5614
5649
  this.radioReserveRow = null;
5615
5650
  return this.$nextTick();
5616
5651
  },
5617
- handleRadioReserveRow(row) {
5618
- const { radioOpts } = this;
5619
- if (radioOpts.reserve) {
5620
- this.radioReserveRow = row;
5621
- }
5622
- },
5623
5652
  /**
5624
5653
  * 获取复选框保留选中的行
5625
5654
  */
@@ -5673,15 +5702,22 @@ const Methods = {
5673
5702
  }
5674
5703
  },
5675
5704
  handleCheckAllEvent(evnt, value) {
5676
- this.handleCheckedAllCheckboxRow(value);
5705
+ const $xeTable = this;
5706
+ handleCheckedAllCheckboxRow($xeTable, value);
5677
5707
  if (evnt) {
5678
- this.emitEvent('checkbox-all', { records: this.getCheckboxRecords(), reserves: this.getCheckboxReserveRecords(), indeterminates: this.getCheckboxIndeterminateRecords(), checked: value }, evnt);
5708
+ $xeTable.dispatchEvent('checkbox-all', {
5709
+ records: $xeTable.getCheckboxRecords(),
5710
+ reserves: $xeTable.getCheckboxReserveRecords(),
5711
+ indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
5712
+ checked: value
5713
+ }, evnt);
5679
5714
  }
5680
5715
  },
5681
5716
  /**
5682
5717
  * 多选,选中所有事件
5683
5718
  */
5684
5719
  triggerCheckAllEvent(evnt, value) {
5720
+ const $xeTable = this;
5685
5721
  const { checkboxOpts } = this;
5686
5722
  const { trigger } = checkboxOpts;
5687
5723
  if (trigger === 'manual') {
@@ -5690,7 +5726,7 @@ const Methods = {
5690
5726
  if (evnt) {
5691
5727
  evnt.stopPropagation();
5692
5728
  }
5693
- this.handleCheckAllEvent(evnt, value);
5729
+ $xeTable.handleCheckAllEvent(evnt, value);
5694
5730
  },
5695
5731
  /**
5696
5732
  * 多选,切换所有行的选中状态
@@ -5735,11 +5771,12 @@ const Methods = {
5735
5771
  * 处理单选框默认勾选
5736
5772
  */
5737
5773
  handleDefaultRadioChecked() {
5774
+ const $xeTable = this;
5738
5775
  const { radioOpts, fullDataRowIdData } = this;
5739
5776
  const { checkRowKey: rowid, reserve } = radioOpts;
5740
5777
  if (rowid) {
5741
5778
  if (fullDataRowIdData[rowid]) {
5742
- this.handleCheckedRadioRow(fullDataRowIdData[rowid].row, true);
5779
+ handleCheckedRadioRow($xeTable, fullDataRowIdData[rowid].row, true);
5743
5780
  }
5744
5781
  if (reserve) {
5745
5782
  const rowkey = getRowkey(this);
@@ -5751,6 +5788,7 @@ const Methods = {
5751
5788
  * 单选,行选中事件
5752
5789
  */
5753
5790
  triggerRadioRowEvent(evnt, params) {
5791
+ const $xeTable = this;
5754
5792
  const { selectRadioRow: oldValue, radioOpts } = this;
5755
5793
  const { row } = params;
5756
5794
  const { trigger } = radioOpts;
@@ -5761,7 +5799,7 @@ const Methods = {
5761
5799
  let newValue = row;
5762
5800
  let isChange = oldValue !== newValue;
5763
5801
  if (isChange) {
5764
- this.handleCheckedRadioRow(newValue);
5802
+ handleCheckedRadioRow($xeTable, newValue);
5765
5803
  }
5766
5804
  else if (!radioOpts.strict) {
5767
5805
  isChange = oldValue === newValue;
@@ -5832,22 +5870,13 @@ const Methods = {
5832
5870
  }
5833
5871
  return false;
5834
5872
  },
5835
- handleCheckedRadioRow(row, isForce) {
5836
- const { radioOpts } = this;
5837
- const { checkMethod } = radioOpts;
5838
- if (row && (isForce || (!checkMethod || checkMethod({ row })))) {
5839
- this.selectRadioRow = row;
5840
- this.handleRadioReserveRow(row);
5841
- }
5842
- return this.$nextTick();
5843
- },
5844
5873
  /**
5845
5874
  * 用于单选行,设置某一行为选中状态
5846
5875
  * @param {Row} row 行对象
5847
5876
  */
5848
5877
  setRadioRow(row) {
5849
5878
  const $xeTable = this;
5850
- return $xeTable.handleCheckedRadioRow(row, true);
5879
+ return handleCheckedRadioRow($xeTable, row, true);
5851
5880
  },
5852
5881
  /**
5853
5882
  * 用于单选行,设置某一行为选中状态
@@ -5859,7 +5888,7 @@ const Methods = {
5859
5888
  const { fullAllDataRowIdData } = internalData;
5860
5889
  const rowRest = fullAllDataRowIdData[rowid];
5861
5890
  if (rowRest) {
5862
- return $xeTable.handleCheckedRadioRow(rowRest.row, true);
5891
+ return handleCheckedRadioRow($xeTable, rowRest.row, true);
5863
5892
  }
5864
5893
  return $xeTable.$nextTick();
5865
5894
  },
@@ -7459,11 +7488,12 @@ const Methods = {
7459
7488
  const $xeTable = this;
7460
7489
  const reactData = $xeTable;
7461
7490
  const internalData = $xeTable;
7462
- const tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
7463
7491
  const { fullAllDataRowIdData } = internalData;
7464
7492
  const treeOpts = $xeTable.computeTreeOpts;
7465
7493
  const { transform } = treeOpts;
7494
+ let tExpandedMaps = {};
7466
7495
  if (rows) {
7496
+ tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
7467
7497
  if (!XEUtils.isArray(rows)) {
7468
7498
  rows = [rows];
7469
7499
  }
@@ -7478,7 +7508,12 @@ const Methods = {
7478
7508
  }
7479
7509
  });
7480
7510
  }
7481
- reactData.treeExpandedMaps = tExpandedMaps;
7511
+ else {
7512
+ XEUtils.each(fullAllDataRowIdData, (rowRest) => {
7513
+ rowRest.treeLoaded = false;
7514
+ });
7515
+ }
7516
+ reactData.treeExpandedMaps = {};
7482
7517
  if (transform) {
7483
7518
  handleVirtualTreeToList($xeTable);
7484
7519
  return $xeTable.handleTableData();
@@ -7595,7 +7630,7 @@ const Methods = {
7595
7630
  }
7596
7631
  // 如果当前节点已选中,则展开后子节点也被选中
7597
7632
  if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
7598
- this.handleCheckedCheckboxRow(childRows, true);
7633
+ handleCheckedCheckboxRow($xeTable, childRows, true);
7599
7634
  }
7600
7635
  return this.$nextTick().then(() => {
7601
7636
  if (transform) {