vxe-table 3.14.0-beta.2 → 3.14.0-beta.21

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 (165) hide show
  1. package/es/grid/src/grid.js +78 -48
  2. package/es/locale/lang/ar-EG.js +7 -1
  3. package/es/locale/lang/de-DE.js +7 -1
  4. package/es/locale/lang/en-US.js +7 -1
  5. package/es/locale/lang/es-ES.js +7 -1
  6. package/es/locale/lang/fr-FR.js +7 -1
  7. package/es/locale/lang/hu-HU.js +7 -1
  8. package/es/locale/lang/hy-AM.js +7 -1
  9. package/es/locale/lang/id-ID.js +7 -1
  10. package/es/locale/lang/it-IT.js +7 -1
  11. package/es/locale/lang/ja-JP.js +7 -1
  12. package/es/locale/lang/ko-KR.js +7 -1
  13. package/es/locale/lang/nb-NO.js +7 -1
  14. package/es/locale/lang/pt-BR.js +7 -1
  15. package/es/locale/lang/ru-RU.js +7 -1
  16. package/es/locale/lang/th-TH.js +7 -1
  17. package/es/locale/lang/ug-CN.js +7 -1
  18. package/es/locale/lang/uk-UA.js +7 -1
  19. package/es/locale/lang/vi-VN.js +7 -1
  20. package/es/locale/lang/zh-CHT.js +7 -1
  21. package/es/locale/lang/zh-CN.js +7 -1
  22. package/es/style.css +1 -1
  23. package/es/table/module/edit/mixin.js +14 -9
  24. package/es/table/module/filter/panel.js +12 -2
  25. package/es/table/module/keyboard/mixin.js +86 -21
  26. package/es/table/module/validator/mixin.js +2 -2
  27. package/es/table/render/index.js +90 -59
  28. package/es/table/src/body.js +22 -17
  29. package/es/table/src/cell.js +25 -20
  30. package/es/table/src/footer.js +9 -4
  31. package/es/table/src/header.js +2 -2
  32. package/es/table/src/methods.js +942 -678
  33. package/es/table/src/props.js +4 -0
  34. package/es/table/src/table.js +74 -32
  35. package/es/table/src/util.js +65 -7
  36. package/es/ui/index.js +1 -1
  37. package/es/ui/src/log.js +1 -1
  38. package/helper/vetur/attributes.json +1 -1
  39. package/helper/vetur/tags.json +1 -1
  40. package/lib/grid/src/grid.js +85 -65
  41. package/lib/grid/src/grid.min.js +1 -1
  42. package/lib/index.umd.js +1641 -1076
  43. package/lib/index.umd.min.js +1 -1
  44. package/lib/locale/lang/ar-EG.js +7 -1
  45. package/lib/locale/lang/ar-EG.min.js +1 -1
  46. package/lib/locale/lang/de-DE.js +7 -1
  47. package/lib/locale/lang/de-DE.min.js +1 -1
  48. package/lib/locale/lang/en-US.js +7 -1
  49. package/lib/locale/lang/en-US.min.js +1 -1
  50. package/lib/locale/lang/en-US.umd.js +7 -1
  51. package/lib/locale/lang/es-ES.js +7 -1
  52. package/lib/locale/lang/es-ES.min.js +1 -1
  53. package/lib/locale/lang/es-ES.umd.js +7 -1
  54. package/lib/locale/lang/fr-FR.js +7 -1
  55. package/lib/locale/lang/fr-FR.min.js +1 -1
  56. package/lib/locale/lang/hu-HU.js +7 -1
  57. package/lib/locale/lang/hu-HU.min.js +1 -1
  58. package/lib/locale/lang/hu-HU.umd.js +7 -1
  59. package/lib/locale/lang/hy-AM.js +7 -1
  60. package/lib/locale/lang/hy-AM.min.js +1 -1
  61. package/lib/locale/lang/id-ID.js +7 -1
  62. package/lib/locale/lang/id-ID.min.js +1 -1
  63. package/lib/locale/lang/it-IT.js +7 -1
  64. package/lib/locale/lang/it-IT.min.js +1 -1
  65. package/lib/locale/lang/ja-JP.js +7 -1
  66. package/lib/locale/lang/ja-JP.min.js +1 -1
  67. package/lib/locale/lang/ja-JP.umd.js +7 -1
  68. package/lib/locale/lang/ko-KR.js +7 -1
  69. package/lib/locale/lang/ko-KR.min.js +1 -1
  70. package/lib/locale/lang/ko-KR.umd.js +7 -1
  71. package/lib/locale/lang/nb-NO.js +7 -1
  72. package/lib/locale/lang/nb-NO.min.js +1 -1
  73. package/lib/locale/lang/pt-BR.js +7 -1
  74. package/lib/locale/lang/pt-BR.min.js +1 -1
  75. package/lib/locale/lang/pt-BR.umd.js +7 -1
  76. package/lib/locale/lang/ru-RU.js +7 -1
  77. package/lib/locale/lang/ru-RU.min.js +1 -1
  78. package/lib/locale/lang/ru-RU.umd.js +7 -1
  79. package/lib/locale/lang/th-TH.js +7 -1
  80. package/lib/locale/lang/th-TH.min.js +1 -1
  81. package/lib/locale/lang/ug-CN.js +7 -1
  82. package/lib/locale/lang/ug-CN.min.js +1 -1
  83. package/lib/locale/lang/uk-UA.js +7 -1
  84. package/lib/locale/lang/uk-UA.min.js +1 -1
  85. package/lib/locale/lang/uk-UA.umd.js +7 -1
  86. package/lib/locale/lang/vi-VN.js +7 -1
  87. package/lib/locale/lang/vi-VN.min.js +1 -1
  88. package/lib/locale/lang/zh-CHT.js +7 -1
  89. package/lib/locale/lang/zh-CHT.min.js +1 -1
  90. package/lib/locale/lang/zh-CHT.umd.js +7 -1
  91. package/lib/locale/lang/zh-CN.js +7 -1
  92. package/lib/locale/lang/zh-CN.min.js +1 -1
  93. package/lib/locale/lang/zh-CN.umd.js +7 -1
  94. package/lib/style.css +1 -1
  95. package/lib/table/module/edit/mixin.js +16 -11
  96. package/lib/table/module/edit/mixin.min.js +1 -1
  97. package/lib/table/module/filter/panel.js +8 -2
  98. package/lib/table/module/filter/panel.min.js +1 -1
  99. package/lib/table/module/keyboard/mixin.js +89 -25
  100. package/lib/table/module/keyboard/mixin.min.js +1 -1
  101. package/lib/table/module/validator/mixin.js +3 -3
  102. package/lib/table/module/validator/mixin.min.js +1 -1
  103. package/lib/table/render/index.js +99 -64
  104. package/lib/table/render/index.min.js +1 -1
  105. package/lib/table/src/body.js +27 -17
  106. package/lib/table/src/body.min.js +1 -1
  107. package/lib/table/src/cell.js +37 -21
  108. package/lib/table/src/cell.min.js +1 -1
  109. package/lib/table/src/footer.js +9 -3
  110. package/lib/table/src/footer.min.js +1 -1
  111. package/lib/table/src/header.js +2 -1
  112. package/lib/table/src/header.min.js +1 -1
  113. package/lib/table/src/methods.js +1101 -798
  114. package/lib/table/src/methods.min.js +1 -1
  115. package/lib/table/src/props.js +4 -0
  116. package/lib/table/src/props.min.js +1 -1
  117. package/lib/table/src/table.js +79 -31
  118. package/lib/table/src/table.min.js +1 -1
  119. package/lib/table/src/util.js +72 -7
  120. package/lib/table/src/util.min.js +1 -1
  121. package/lib/ui/index.js +1 -1
  122. package/lib/ui/index.min.js +1 -1
  123. package/lib/ui/src/log.js +1 -1
  124. package/lib/ui/src/log.min.js +1 -1
  125. package/package.json +2 -2
  126. package/packages/grid/src/grid.ts +92 -57
  127. package/packages/locale/lang/ar-EG.ts +7 -1
  128. package/packages/locale/lang/de-DE.ts +7 -1
  129. package/packages/locale/lang/en-US.ts +7 -1
  130. package/packages/locale/lang/es-ES.ts +7 -1
  131. package/packages/locale/lang/fr-FR.ts +7 -1
  132. package/packages/locale/lang/hu-HU.ts +7 -1
  133. package/packages/locale/lang/hy-AM.ts +7 -1
  134. package/packages/locale/lang/id-ID.ts +7 -1
  135. package/packages/locale/lang/it-IT.ts +7 -1
  136. package/packages/locale/lang/ja-JP.ts +7 -1
  137. package/packages/locale/lang/ko-KR.ts +7 -1
  138. package/packages/locale/lang/nb-NO.ts +7 -1
  139. package/packages/locale/lang/pt-BR.ts +7 -1
  140. package/packages/locale/lang/ru-RU.ts +7 -1
  141. package/packages/locale/lang/th-TH.ts +7 -1
  142. package/packages/locale/lang/ug-CN.ts +7 -1
  143. package/packages/locale/lang/uk-UA.ts +7 -1
  144. package/packages/locale/lang/vi-VN.ts +7 -1
  145. package/packages/locale/lang/zh-CHT.ts +7 -1
  146. package/packages/locale/lang/zh-CN.ts +7 -1
  147. package/packages/table/module/edit/mixin.ts +17 -12
  148. package/packages/table/module/filter/panel.ts +12 -2
  149. package/packages/table/module/keyboard/mixin.ts +94 -27
  150. package/packages/table/module/validator/mixin.ts +2 -2
  151. package/packages/table/render/index.ts +89 -57
  152. package/packages/table/src/body.ts +21 -16
  153. package/packages/table/src/cell.ts +25 -20
  154. package/packages/table/src/footer.ts +9 -4
  155. package/packages/table/src/header.ts +2 -2
  156. package/packages/table/src/methods.ts +1035 -720
  157. package/packages/table/src/props.ts +16 -12
  158. package/packages/table/src/table.ts +87 -35
  159. package/packages/table/src/util.ts +73 -7
  160. /package/es/{iconfont.1741079977180.ttf → iconfont.1742437924038.ttf} +0 -0
  161. /package/es/{iconfont.1741079977180.woff → iconfont.1742437924038.woff} +0 -0
  162. /package/es/{iconfont.1741079977180.woff2 → iconfont.1742437924038.woff2} +0 -0
  163. /package/lib/{iconfont.1741079977180.ttf → iconfont.1742437924038.ttf} +0 -0
  164. /package/lib/{iconfont.1741079977180.woff → iconfont.1742437924038.woff} +0 -0
  165. /package/lib/{iconfont.1741079977180.woff2 → iconfont.1742437924038.woff2} +0 -0
@@ -21,6 +21,7 @@ const {
21
21
  interceptor,
22
22
  createEvent
23
23
  } = _ui.VxeUI;
24
+ const supportMaxRow = 5e6;
24
25
  const customStorageKey = 'VXE_CUSTOM_STORE';
25
26
  const maxYHeight = 5e6;
26
27
  const maxXWidth = 5e6;
@@ -287,7 +288,7 @@ function cacheColumnMap($xeTable) {
287
288
  fullColumnFieldData[field] = rest;
288
289
  } else {
289
290
  if (storage && !type || columnOpts.drag && (isCrossDrag || isSelfToChildDrag)) {
290
- (0, _log.errLog)('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field`]);
291
+ (0, _log.errLog)('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field=?`]);
291
292
  }
292
293
  }
293
294
  if (!hasFixed && fixed) {
@@ -393,9 +394,12 @@ function updateAfterListIndex($xeTable) {
393
394
  fullDataRowIdData,
394
395
  fullAllDataRowIdData
395
396
  } = internalData;
397
+ const {
398
+ handleGetRowId
399
+ } = (0, _util.createHandleGetRowId)($xeTable);
396
400
  const fullMaps = {};
397
401
  afterFullData.forEach((row, index) => {
398
- const rowid = (0, _util.getRowid)($xeTable, row);
402
+ const rowid = handleGetRowId(row);
399
403
  const rowRest = fullAllDataRowIdData[rowid];
400
404
  const seq = index + 1;
401
405
  if (rowRest) {
@@ -449,8 +453,11 @@ function updateAfterDataIndex($xeTable) {
449
453
  const childrenField = treeOpts.children || treeOpts.childrenField;
450
454
  const fullMaps = {};
451
455
  if (treeConfig) {
456
+ const {
457
+ handleGetRowId
458
+ } = (0, _util.createHandleGetRowId)($xeTable);
452
459
  _xeUtils.default.eachTree(afterTreeFullData, (row, index, items, path) => {
453
- const rowid = (0, _util.getRowid)($xeTable, row);
460
+ const rowid = handleGetRowId(row);
454
461
  const rowRest = fullAllDataRowIdData[rowid];
455
462
  const seq = path.map((num, i) => i % 2 === 0 ? Number(num) + 1 : '.').join('');
456
463
  if (rowRest) {
@@ -492,25 +499,25 @@ function updateAfterDataIndex($xeTable) {
492
499
  */
493
500
  function handleVirtualTreeToList($xeTable) {
494
501
  const props = $xeTable;
495
- const reactData = $xeTable;
496
502
  const internalData = $xeTable;
497
503
  const {
498
504
  treeConfig
499
505
  } = props;
500
506
  const {
507
+ fullAllDataRowIdData,
501
508
  treeExpandedMaps
502
- } = reactData;
503
- const {
504
- fullAllDataRowIdData
505
509
  } = internalData;
506
510
  const treeOpts = $xeTable.computeTreeOpts;
507
511
  const childrenField = treeOpts.children || treeOpts.childrenField;
508
512
  if (treeConfig && treeOpts.transform) {
513
+ const {
514
+ handleGetRowId
515
+ } = (0, _util.createHandleGetRowId)($xeTable);
509
516
  const fullData = [];
510
517
  const expandMaps = {};
511
518
  _xeUtils.default.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
512
- const rowid = (0, _util.getRowid)($xeTable, row);
513
- const parentRowid = (0, _util.getRowid)($xeTable, parentRow);
519
+ const rowid = handleGetRowId(row);
520
+ const parentRowid = handleGetRowId(parentRow);
514
521
  if (!parentRow || expandMaps[parentRowid] && treeExpandedMaps[parentRowid]) {
515
522
  const rowRest = fullAllDataRowIdData[rowid];
516
523
  if (rowRest) {
@@ -899,6 +906,21 @@ function updateStyle($xeTable) {
899
906
  }
900
907
  return $xeTable.$nextTick();
901
908
  }
909
+ function checkValidate($xeTable, type) {
910
+ if ($xeTable.triggerValidate) {
911
+ return $xeTable.triggerValidate(type);
912
+ }
913
+ return $xeTable.$nextTick();
914
+ }
915
+ /**
916
+ * 当单元格发生改变时
917
+ * 如果存在规则,则校验
918
+ */
919
+ function handleChangeCell($xeTable, evnt, params) {
920
+ checkValidate($xeTable, 'blur').catch(e => e).then(() => {
921
+ $xeTable.handleEdit(params, evnt).then(() => checkValidate($xeTable, 'change')).catch(e => e);
922
+ });
923
+ }
902
924
  function handleRadioReserveRow($xeTable, row) {
903
925
  const internalData = $xeTable;
904
926
  const radioOpts = $xeTable.computeRadioOpts;
@@ -950,12 +972,10 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
950
972
  const {
951
973
  treeConfig
952
974
  } = props;
953
- const {
954
- selectCheckboxMaps
955
- } = reactData;
956
975
  const {
957
976
  afterFullData,
958
- checkboxReserveRowMap
977
+ checkboxReserveRowMap,
978
+ selectCheckboxMaps
959
979
  } = internalData;
960
980
  const treeOpts = $xeTable.computeTreeOpts;
961
981
  const childrenField = treeOpts.children || treeOpts.childrenField;
@@ -965,6 +985,10 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
965
985
  reserve,
966
986
  checkMethod
967
987
  } = checkboxOpts;
988
+ const {
989
+ handleGetRowId
990
+ } = (0, _util.createHandleGetRowId)($xeTable);
991
+ // indeterminateField 仅支持读取
968
992
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
969
993
  const selectRowMaps = {};
970
994
  /**
@@ -977,7 +1001,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
977
1001
  row
978
1002
  })) {
979
1003
  if (checked) {
980
- selectRowMaps[(0, _util.getRowid)($xeTable, row)] = row;
1004
+ selectRowMaps[handleGetRowId(row)] = row;
981
1005
  }
982
1006
  _xeUtils.default.set(row, checkField, checked);
983
1007
  }
@@ -1009,7 +1033,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
1009
1033
  if (isForce || !checkMethod || checkMethod({
1010
1034
  row
1011
1035
  })) {
1012
- selectRowMaps[(0, _util.getRowid)($xeTable, row)] = row;
1036
+ const rowid = handleGetRowId(row);
1037
+ selectRowMaps[rowid] = row;
1013
1038
  }
1014
1039
  }, {
1015
1040
  children: childrenField
@@ -1021,7 +1046,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
1021
1046
  */
1022
1047
  if (!isForce && checkMethod) {
1023
1048
  _xeUtils.default.eachTree(afterFullData, row => {
1024
- const rowid = (0, _util.getRowid)($xeTable, row);
1049
+ const rowid = handleGetRowId(row);
1025
1050
  if (checkMethod({
1026
1051
  row
1027
1052
  }) ? 0 : selectCheckboxMaps[rowid]) {
@@ -1041,7 +1066,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
1041
1066
  */
1042
1067
  if (!isForce && checkMethod) {
1043
1068
  afterFullData.forEach(row => {
1044
- const rowid = (0, _util.getRowid)($xeTable, row);
1069
+ const rowid = handleGetRowId(row);
1045
1070
  if (selectCheckboxMaps[rowid] || checkMethod({
1046
1071
  row
1047
1072
  })) {
@@ -1050,7 +1075,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
1050
1075
  });
1051
1076
  } else {
1052
1077
  afterFullData.forEach(row => {
1053
- selectRowMaps[(0, _util.getRowid)($xeTable, row)] = row;
1078
+ const rowid = handleGetRowId(row);
1079
+ selectRowMaps[rowid] = row;
1054
1080
  });
1055
1081
  }
1056
1082
  } else {
@@ -1061,7 +1087,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
1061
1087
  */
1062
1088
  if (!isForce && checkMethod) {
1063
1089
  afterFullData.forEach(row => {
1064
- const rowid = (0, _util.getRowid)($xeTable, row);
1090
+ const rowid = handleGetRowId(row);
1065
1091
  if (checkMethod({
1066
1092
  row
1067
1093
  }) ? 0 : selectCheckboxMaps[rowid]) {
@@ -1081,10 +1107,10 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
1081
1107
  afterFullData.forEach(row => handleCheckboxReserveRow($xeTable, row, false));
1082
1108
  }
1083
1109
  }
1084
- reactData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
1110
+ reactData.updateCheckboxFlag++;
1111
+ internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
1085
1112
  reactData.isAllSelected = checked;
1086
1113
  reactData.isIndeterminate = false;
1087
- reactData.treeIndeterminateMaps = {};
1088
1114
  internalData.treeIndeterminateRowMaps = {};
1089
1115
  $xeTable.checkSelectionStatus();
1090
1116
  return $xeTable.$nextTick();
@@ -1100,15 +1126,15 @@ function handleReserveStatus($xeTable) {
1100
1126
  const {
1101
1127
  expandColumn,
1102
1128
  currentRow,
1103
- selectCheckboxMaps,
1104
- selectRadioRow,
1105
- rowExpandedMaps,
1106
- treeExpandedMaps
1129
+ selectRadioRow
1107
1130
  } = reactData;
1108
1131
  const {
1109
1132
  fullDataRowIdData,
1110
1133
  fullAllDataRowIdData,
1111
- radioReserveRow
1134
+ radioReserveRow,
1135
+ selectCheckboxMaps,
1136
+ treeExpandedMaps,
1137
+ rowExpandedMaps
1112
1138
  } = internalData;
1113
1139
  const expandOpts = $xeTable.computeExpandOpts;
1114
1140
  const treeOpts = $xeTable.computeTreeOpts;
@@ -1126,7 +1152,8 @@ function handleReserveStatus($xeTable) {
1126
1152
  }
1127
1153
  }
1128
1154
  // 复选框
1129
- reactData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
1155
+ internalData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
1156
+ reactData.updateCheckboxFlag++;
1130
1157
  // 还原保留选中状态
1131
1158
  if (checkboxOpts.reserve) {
1132
1159
  handleCheckedCheckboxRow($xeTable, handleReserveRow($xeTable, internalData.checkboxReserveRowMap), true, true);
@@ -1135,17 +1162,194 @@ function handleReserveStatus($xeTable) {
1135
1162
  reactData.currentRow = null; // 刷新当前行状态
1136
1163
  }
1137
1164
  // 行展开
1138
- reactData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
1165
+ internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
1166
+ reactData.rowExpandedFlag++;
1139
1167
  // 还原保留状态
1140
1168
  if (expandColumn && expandOpts.reserve) {
1141
1169
  $xeTable.setRowExpand(handleReserveRow($xeTable, internalData.rowExpandedReserveRowMap), true);
1142
1170
  }
1143
1171
  // 树展开
1144
- reactData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
1172
+ internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
1173
+ reactData.treeExpandedFlag++;
1145
1174
  if (treeConfig && treeOpts.reserve) {
1146
1175
  $xeTable.setTreeExpand(handleReserveRow($xeTable, internalData.treeExpandedReserveRowMap), true);
1147
1176
  }
1148
1177
  }
1178
+ /**
1179
+ * 处理默认展开树节点
1180
+ */
1181
+ const handleDefaultTreeExpand = $xeTable => {
1182
+ const props = $xeTable;
1183
+ const internalData = $xeTable;
1184
+ const {
1185
+ treeConfig
1186
+ } = props;
1187
+ if (treeConfig) {
1188
+ const {
1189
+ tableFullData
1190
+ } = internalData;
1191
+ const treeOpts = $xeTable.computeTreeOpts;
1192
+ const {
1193
+ expandAll,
1194
+ expandRowKeys
1195
+ } = treeOpts;
1196
+ const childrenField = treeOpts.children || treeOpts.childrenField;
1197
+ if (expandAll) {
1198
+ $xeTable.setAllTreeExpand(true);
1199
+ } else if (expandRowKeys) {
1200
+ const defExpandeds = [];
1201
+ const rowkey = (0, _util.getRowkey)($xeTable);
1202
+ expandRowKeys.forEach(rowid => {
1203
+ const matchObj = _xeUtils.default.findTree(tableFullData, item => rowid === _xeUtils.default.get(item, rowkey), {
1204
+ children: childrenField
1205
+ });
1206
+ if (matchObj) {
1207
+ defExpandeds.push(matchObj.item);
1208
+ }
1209
+ });
1210
+ $xeTable.setTreeExpand(defExpandeds, true);
1211
+ }
1212
+ }
1213
+ };
1214
+ const handleAsyncTreeExpandChilds = ($xeTable, row) => {
1215
+ const reactData = $xeTable;
1216
+ const internalData = $xeTable;
1217
+ const treeOpts = $xeTable.computeTreeOpts;
1218
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
1219
+ const {
1220
+ transform,
1221
+ loadMethod
1222
+ } = treeOpts;
1223
+ const {
1224
+ checkStrictly
1225
+ } = checkboxOpts;
1226
+ return new Promise(resolve => {
1227
+ if (loadMethod) {
1228
+ const {
1229
+ fullAllDataRowIdData,
1230
+ treeExpandLazyLoadedMaps
1231
+ } = internalData;
1232
+ const rowid = (0, _util.getRowid)($xeTable, row);
1233
+ const rowRest = fullAllDataRowIdData[rowid];
1234
+ treeExpandLazyLoadedMaps[rowid] = row;
1235
+ Promise.resolve(loadMethod({
1236
+ $table: $xeTable,
1237
+ row
1238
+ })).then(childRecords => {
1239
+ if (rowRest) {
1240
+ rowRest.treeLoaded = true;
1241
+ }
1242
+ if (treeExpandLazyLoadedMaps[rowid]) {
1243
+ delete treeExpandLazyLoadedMaps[rowid];
1244
+ }
1245
+ if (!_xeUtils.default.isArray(childRecords)) {
1246
+ childRecords = [];
1247
+ }
1248
+ if (childRecords) {
1249
+ return $xeTable.loadTreeChildren(row, childRecords).then(childRows => {
1250
+ const {
1251
+ treeExpandedMaps
1252
+ } = internalData;
1253
+ if (childRows.length && !treeExpandedMaps[rowid]) {
1254
+ treeExpandedMaps[rowid] = row;
1255
+ }
1256
+ reactData.treeExpandedFlag++;
1257
+ // 如果当前节点已选中,则展开后子节点也被选中
1258
+ if (!checkStrictly && $xeTable.isCheckedByCheckboxRow(row)) {
1259
+ handleCheckedCheckboxRow($xeTable, childRows, true);
1260
+ }
1261
+ return $xeTable.$nextTick().then(() => {
1262
+ if (transform) {
1263
+ $xeTable.handleTableData();
1264
+ updateAfterDataIndex($xeTable);
1265
+ return $xeTable.$nextTick();
1266
+ }
1267
+ });
1268
+ });
1269
+ }
1270
+ }).catch(() => {
1271
+ const {
1272
+ treeExpandLazyLoadedMaps
1273
+ } = internalData;
1274
+ if (rowRest) {
1275
+ rowRest.treeLoaded = false;
1276
+ }
1277
+ if (treeExpandLazyLoadedMaps[rowid]) {
1278
+ delete treeExpandLazyLoadedMaps[rowid];
1279
+ }
1280
+ }).finally(() => {
1281
+ reactData.treeExpandedFlag++;
1282
+ $xeTable.$nextTick().then(() => $xeTable.recalculate()).then(() => resolve());
1283
+ });
1284
+ } else {
1285
+ resolve();
1286
+ }
1287
+ });
1288
+ };
1289
+ const handleTreeExpandReserve = ($xeTable, row, expanded) => {
1290
+ const internalData = $xeTable;
1291
+ const {
1292
+ treeExpandedReserveRowMap
1293
+ } = internalData;
1294
+ const treeOpts = $xeTable.computeTreeOpts;
1295
+ if (treeOpts.reserve) {
1296
+ const rowid = (0, _util.getRowid)($xeTable, row);
1297
+ if (expanded) {
1298
+ treeExpandedReserveRowMap[rowid] = row;
1299
+ } else if (treeExpandedReserveRowMap[rowid]) {
1300
+ delete treeExpandedReserveRowMap[rowid];
1301
+ }
1302
+ }
1303
+ };
1304
+ const handleAsyncRowExpand = ($xeTable, row) => {
1305
+ const reactData = $xeTable;
1306
+ const internalData = $xeTable;
1307
+ return new Promise(resolve => {
1308
+ const expandOpts = $xeTable.computeExpandOpts;
1309
+ const {
1310
+ loadMethod
1311
+ } = expandOpts;
1312
+ if (loadMethod) {
1313
+ const {
1314
+ fullAllDataRowIdData,
1315
+ rowExpandLazyLoadedMaps
1316
+ } = internalData;
1317
+ const rowid = (0, _util.getRowid)($xeTable, row);
1318
+ const rowRest = fullAllDataRowIdData[rowid];
1319
+ rowExpandLazyLoadedMaps[rowid] = row;
1320
+ loadMethod({
1321
+ $table: $xeTable,
1322
+ row,
1323
+ rowIndex: $xeTable.getRowIndex(row),
1324
+ $rowIndex: $xeTable.getVMRowIndex(row)
1325
+ }).then(() => {
1326
+ const {
1327
+ rowExpandedMaps
1328
+ } = internalData;
1329
+ if (rowRest) {
1330
+ rowRest.expandLoaded = true;
1331
+ }
1332
+ rowExpandedMaps[rowid] = row;
1333
+ reactData.rowExpandedFlag++;
1334
+ }).catch(() => {
1335
+ if (rowRest) {
1336
+ rowRest.expandLoaded = false;
1337
+ }
1338
+ }).finally(() => {
1339
+ const {
1340
+ rowExpandLazyLoadedMaps
1341
+ } = internalData;
1342
+ if (rowExpandLazyLoadedMaps[rowid]) {
1343
+ delete rowExpandLazyLoadedMaps[rowid];
1344
+ }
1345
+ reactData.rowExpandedFlag++;
1346
+ $xeTable.$nextTick().then(() => $xeTable.recalculate()).then(() => $xeTable.updateCellAreas()).then(() => resolve());
1347
+ });
1348
+ } else {
1349
+ resolve();
1350
+ }
1351
+ });
1352
+ };
1149
1353
  function calcVarRowHeightConfig($xeTable, sizeKey, sizeEl) {
1150
1354
  const reactData = $xeTable;
1151
1355
  const {
@@ -1220,12 +1424,15 @@ function handleVirtualYVisible($xeTable) {
1220
1424
  toVisibleIndex = Math.floor(startTop / defaultRowHeight) - 1;
1221
1425
  visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1;
1222
1426
  } else {
1427
+ const {
1428
+ handleGetRowId
1429
+ } = (0, _util.createHandleGetRowId)($xeTable);
1223
1430
  let leftIndex = 0;
1224
1431
  let rightIndex = afterFullData.length;
1225
1432
  while (leftIndex < rightIndex) {
1226
1433
  const rIndex = Math.floor((leftIndex + rightIndex) / 2);
1227
1434
  const row = afterFullData[rIndex];
1228
- const rowid = (0, _util.getRowid)($xeTable, row);
1435
+ const rowid = handleGetRowId(row);
1229
1436
  const rowRest = fullAllDataRowIdData[rowid] || {};
1230
1437
  if (rowRest.oTop <= startTop) {
1231
1438
  leftIndex = rIndex + 1;
@@ -1236,7 +1443,7 @@ function handleVirtualYVisible($xeTable) {
1236
1443
  toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0);
1237
1444
  for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
1238
1445
  const row = afterFullData[rIndex];
1239
- const rowid = (0, _util.getRowid)($xeTable, row);
1446
+ const rowid = handleGetRowId(row);
1240
1447
  const rowRest = fullAllDataRowIdData[rowid] || {};
1241
1448
  visibleSize++;
1242
1449
  if (rowRest.oTop > endTop || visibleSize >= 100) {
@@ -1275,12 +1482,16 @@ function calculateMergerOffsetIndex(list, offsetItem, type) {
1275
1482
  }
1276
1483
  }
1277
1484
  }
1278
- function setMerges(_vm, merges, mList, rowList) {
1485
+ function setMerges($xeTable, merges, mList, rowList) {
1486
+ const props = $xeTable;
1487
+ const internalData = $xeTable;
1279
1488
  if (merges) {
1280
1489
  const {
1281
- treeConfig,
1490
+ treeConfig
1491
+ } = props;
1492
+ const {
1282
1493
  visibleColumn
1283
- } = _vm;
1494
+ } = internalData;
1284
1495
  if (!_xeUtils.default.isArray(merges)) {
1285
1496
  merges = [merges];
1286
1497
  }
@@ -1330,13 +1541,17 @@ function setMerges(_vm, merges, mList, rowList) {
1330
1541
  });
1331
1542
  }
1332
1543
  }
1333
- function removeMerges(_vm, merges, mList, rowList) {
1544
+ function removeMerges($xeTable, merges, mList, rowList) {
1545
+ const props = $xeTable;
1546
+ const internalData = $xeTable;
1334
1547
  const rest = [];
1335
1548
  if (merges) {
1336
1549
  const {
1337
- treeConfig,
1550
+ treeConfig
1551
+ } = props;
1552
+ const {
1338
1553
  visibleColumn
1339
- } = _vm;
1554
+ } = internalData;
1340
1555
  if (!_xeUtils.default.isArray(merges)) {
1341
1556
  merges = [merges];
1342
1557
  }
@@ -1567,8 +1782,11 @@ const calcCellHeight = $xeTable => {
1567
1782
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
1568
1783
  const el = $xeTable.$refs.refElem;
1569
1784
  if (!isAllOverflow && scrollYLoad && el) {
1785
+ const {
1786
+ handleGetRowId
1787
+ } = (0, _util.createHandleGetRowId)($xeTable);
1570
1788
  tableData.forEach(row => {
1571
- const rowid = (0, _util.getRowid)($xeTable, row);
1789
+ const rowid = handleGetRowId(row);
1572
1790
  const rowRest = fullAllDataRowIdData[rowid];
1573
1791
  if (rowRest) {
1574
1792
  const height = calcCellAutoHeight(rowRest, el);
@@ -2306,6 +2524,39 @@ function loadScrollYData($xeTable) {
2306
2524
  }
2307
2525
  }
2308
2526
  }
2527
+ const createGetRowCacheProp = prop => {
2528
+ return function (row) {
2529
+ const $xeTable = this;
2530
+ const internalData = $xeTable;
2531
+ const {
2532
+ fullAllDataRowIdData
2533
+ } = internalData;
2534
+ if (row) {
2535
+ const rowid = (0, _util.getRowid)($xeTable, row);
2536
+ const rowRest = fullAllDataRowIdData[rowid];
2537
+ if (rowRest) {
2538
+ return rowRest[prop];
2539
+ }
2540
+ }
2541
+ return -1;
2542
+ };
2543
+ };
2544
+ const createGetColumnCacheProp = prop => {
2545
+ return function (column) {
2546
+ const $xeTable = this;
2547
+ const internalData = $xeTable;
2548
+ const {
2549
+ fullColumnIdData
2550
+ } = internalData;
2551
+ if (column) {
2552
+ const colRest = fullColumnIdData[column.id];
2553
+ if (colRest) {
2554
+ return colRest[prop];
2555
+ }
2556
+ }
2557
+ return -1;
2558
+ };
2559
+ };
2309
2560
  function lazyScrollXData($xeTable) {
2310
2561
  const internalData = $xeTable;
2311
2562
  const {
@@ -2477,7 +2728,7 @@ function calcCellWidth($xeTable) {
2477
2728
  }
2478
2729
  function handleUpdateColResize($xeTable, evnt, params) {
2479
2730
  $xeTable.analyColumnWidth();
2480
- $xeTable.recalculate(true).then(() => {
2731
+ $xeTable.recalculate().then(() => {
2481
2732
  $xeTable.saveCustomStore('update:width');
2482
2733
  $xeTable.updateCellAreas();
2483
2734
  $xeTable.dispatchEvent('column-resizable-change', params, evnt);
@@ -2489,7 +2740,7 @@ function handleUpdateColResize($xeTable, evnt, params) {
2489
2740
  function handleUpdateRowResize($xeTable, evnt, params) {
2490
2741
  const reactData = $xeTable;
2491
2742
  reactData.resizeHeightFlag++;
2492
- $xeTable.recalculate(true).then(() => {
2743
+ $xeTable.recalculate().then(() => {
2493
2744
  $xeTable.updateCellAreas();
2494
2745
  $xeTable.dispatchEvent('row-resizable-change', params, evnt);
2495
2746
  setTimeout(() => $xeTable.recalculate(true), 300);
@@ -2514,21 +2765,24 @@ function updateRowOffsetTop($xeTable) {
2514
2765
  const reactData = $xeTable;
2515
2766
  const internalData = $xeTable;
2516
2767
  const {
2517
- expandColumn,
2518
- rowExpandedMaps
2768
+ expandColumn
2519
2769
  } = reactData;
2520
2770
  const {
2521
2771
  afterFullData,
2522
- fullAllDataRowIdData
2772
+ fullAllDataRowIdData,
2773
+ rowExpandedMaps
2523
2774
  } = internalData;
2524
2775
  const expandOpts = $xeTable.computeExpandOpts;
2525
2776
  const rowOpts = $xeTable.computeRowOpts;
2526
2777
  const cellOpts = $xeTable.computeCellOpts;
2527
2778
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
2779
+ const {
2780
+ handleGetRowId
2781
+ } = (0, _util.createHandleGetRowId)($xeTable);
2528
2782
  let offsetTop = 0;
2529
2783
  for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
2530
2784
  const row = afterFullData[rIndex];
2531
- const rowid = (0, _util.getRowid)($xeTable, row);
2785
+ const rowid = handleGetRowId(row);
2532
2786
  const rowRest = fullAllDataRowIdData[rowid] || {};
2533
2787
  rowRest.oTop = offsetTop;
2534
2788
  offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
@@ -2544,7 +2798,8 @@ function updateRowExpandStyle($xeTable) {
2544
2798
  const {
2545
2799
  expandColumn,
2546
2800
  scrollYLoad,
2547
- rowExpandedMaps
2801
+ scrollYTop,
2802
+ isScrollYBig
2548
2803
  } = reactData;
2549
2804
  const expandOpts = $xeTable.computeExpandOpts;
2550
2805
  const rowOpts = $xeTable.computeRowOpts;
@@ -2556,41 +2811,35 @@ function updateRowExpandStyle($xeTable) {
2556
2811
  if (expandColumn && mode === 'fixed') {
2557
2812
  const {
2558
2813
  elemStore,
2559
- afterFullData,
2560
2814
  fullAllDataRowIdData
2561
2815
  } = internalData;
2562
2816
  const rowExpandEl = $xeTable.$refs.refRowExpandElem;
2563
2817
  const bodyScrollElem = (0, _util.getRefElem)(elemStore['main-body-scroll']);
2564
2818
  if (rowExpandEl && bodyScrollElem) {
2565
2819
  let isUpdateHeight = false;
2566
- if (scrollYLoad) {
2567
- let offsetTop = 0;
2568
- for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
2569
- const row = afterFullData[rIndex];
2570
- const rowid = (0, _util.getRowid)($xeTable, row);
2571
- const rowRest = fullAllDataRowIdData[rowid] || {};
2572
- rowRest.oTop = offsetTop;
2573
- offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
2574
- // 是否展开行
2575
- if (expandColumn && rowExpandedMaps[rowid]) {
2576
- offsetTop += rowRest.expandHeight || expandOpts.height || 0;
2577
- }
2578
- }
2579
- }
2580
2820
  _xeUtils.default.arrayEach(rowExpandEl.children, reEl => {
2581
2821
  const expandEl = reEl;
2582
2822
  const rowid = expandEl.getAttribute('rowid') || '';
2583
2823
  const rowRest = fullAllDataRowIdData[rowid];
2584
2824
  if (rowRest) {
2585
2825
  const expandHeight = expandEl.offsetHeight + 1;
2826
+ const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
2827
+ let offsetTop = 0;
2586
2828
  if (scrollYLoad) {
2587
- expandEl.style.top = (0, _dom.toCssUnit)(rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight));
2829
+ if (isScrollYBig && trEl) {
2830
+ offsetTop = trEl.offsetTop + trEl.offsetHeight;
2831
+ } else {
2832
+ offsetTop = rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight);
2833
+ }
2588
2834
  } else {
2589
- const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
2590
2835
  if (trEl) {
2591
- expandEl.style.top = (0, _dom.toCssUnit)(trEl.offsetTop + trEl.offsetHeight);
2836
+ offsetTop = trEl.offsetTop + trEl.offsetHeight;
2592
2837
  }
2593
2838
  }
2839
+ if (isScrollYBig) {
2840
+ offsetTop += scrollYTop;
2841
+ }
2842
+ expandEl.style.top = (0, _dom.toCssUnit)(offsetTop);
2594
2843
  if (!isUpdateHeight) {
2595
2844
  if (rowRest.expandHeight !== expandHeight) {
2596
2845
  isUpdateHeight = true;
@@ -2601,6 +2850,9 @@ function updateRowExpandStyle($xeTable) {
2601
2850
  });
2602
2851
  if (isUpdateHeight) {
2603
2852
  reactData.rowExpandHeightFlag++;
2853
+ $xeTable.$nextTick(() => {
2854
+ updateRowOffsetTop($xeTable);
2855
+ });
2604
2856
  }
2605
2857
  }
2606
2858
  }
@@ -2631,6 +2883,10 @@ const Methods = {
2631
2883
  }
2632
2884
  return [];
2633
2885
  },
2886
+ getEl() {
2887
+ const $xeTable = this;
2888
+ return $xeTable.$refs.refElem;
2889
+ },
2634
2890
  /**
2635
2891
  * 获取父容器元素
2636
2892
  */
@@ -2645,14 +2901,27 @@ const Methods = {
2645
2901
  * 获取父容器的高度
2646
2902
  */
2647
2903
  getParentHeight() {
2904
+ const $xeTable = this;
2905
+ const $xeGrid = $xeTable.$xeGrid;
2906
+ const props = $xeTable;
2648
2907
  const {
2649
- $el,
2650
- $xegrid,
2651
2908
  height
2652
- } = this;
2653
- const parentElem = $el.parentNode;
2654
- const parentPaddingSize = height === '100%' || height === 'auto' ? (0, _dom.getPaddingTopBottomSize)(parentElem) : 0;
2655
- return Math.floor($xegrid ? $xegrid.getParentHeight() : _xeUtils.default.toNumber(getComputedStyle(parentElem).height) - parentPaddingSize);
2909
+ } = props;
2910
+ const el = $xeTable.$refs.refElem;
2911
+ if (el) {
2912
+ const parentElem = el.parentNode;
2913
+ const parentPaddingSize = height === '100%' || height === 'auto' ? (0, _dom.getPaddingTopBottomSize)(parentElem) : 0;
2914
+ let parentWrapperHeight = 0;
2915
+ if (parentElem) {
2916
+ if ($xeGrid && (0, _dom.hasClass)(parentElem, 'vxe-grid--table-wrapper')) {
2917
+ parentWrapperHeight = $xeGrid.getParentHeight();
2918
+ } else {
2919
+ parentWrapperHeight = parentElem.clientHeight;
2920
+ }
2921
+ }
2922
+ return Math.floor(parentWrapperHeight - parentPaddingSize);
2923
+ }
2924
+ return 0;
2656
2925
  },
2657
2926
  /**
2658
2927
  * 获取需要排除的高度
@@ -2762,6 +3031,9 @@ const Methods = {
2762
3031
  const childrenField = treeOpts.children || treeOpts.childrenField;
2763
3032
  let treeData = [];
2764
3033
  let fullData = datas ? datas.slice(0) : [];
3034
+ if (fullData.length > supportMaxRow) {
3035
+ (0, _log.errLog)('vxe.error.errMaxRow', [supportMaxRow]);
3036
+ }
2765
3037
  if (treeConfig) {
2766
3038
  // 树结构自动转换
2767
3039
  if (treeOpts.transform) {
@@ -2855,7 +3127,7 @@ const Methods = {
2855
3127
  // warnLog('vxe.error.reqProp', ['table.show-overflow'])
2856
3128
  // }
2857
3129
  if (this.spanMethod) {
2858
- (0, _log.warnLog)('vxe.error.scrollErrProp', ['table.span-method']);
3130
+ (0, _log.errLog)('vxe.error.scrollErrProp', ['table.span-method']);
2859
3131
  }
2860
3132
  }
2861
3133
  handleReserveStatus($xeTable);
@@ -3004,41 +3276,25 @@ const Methods = {
3004
3276
  const {
3005
3277
  treeConfig
3006
3278
  } = props;
3007
- const {
3008
- treeExpandedMaps
3009
- } = reactData;
3010
3279
  const {
3011
3280
  fullAllDataRowIdData,
3012
3281
  tableFullData,
3013
- tableFullTreeData
3282
+ tableFullTreeData,
3283
+ treeExpandedMaps
3014
3284
  } = internalData;
3015
3285
  const treeOpts = $xeTable.computeTreeOpts;
3016
3286
  const childrenField = treeOpts.children || treeOpts.childrenField;
3017
3287
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
3018
- const rowkey = (0, _util.getRowkey)($xeTable);
3288
+ const {
3289
+ lazy
3290
+ } = treeOpts;
3019
3291
  const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
3020
3292
  const fullDataRowIdMaps = {};
3021
- const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
3022
- const handleRow = (row, index, items, path, parentRow, nodes) => {
3023
- let rowid = (0, _util.getRowid)($xeTable, row);
3024
- const seq = treeConfig && path ? (0, _util.toTreePathSeq)(path) : index + 1;
3025
- const level = nodes ? nodes.length - 1 : 0;
3026
- if ((0, _utils.eqEmptyValue)(rowid)) {
3027
- rowid = (0, _util.getRowUniqueId)();
3028
- _xeUtils.default.set(row, rowkey, rowid);
3029
- }
3030
- if (treeConfig && treeOpts.lazy) {
3031
- const treeExpRest = treeExpandedMaps[rowid];
3032
- if (row[hasChildField] && _xeUtils.default.isUndefined(row[childrenField])) {
3033
- row[childrenField] = null;
3034
- }
3035
- if (treeExpRest) {
3036
- if (!row[childrenField] || !row[childrenField].length) {
3037
- delete treeTempExpandedMaps[rowid];
3038
- }
3039
- }
3040
- }
3041
- let rowRest = fullAllDataRowIdData[rowid];
3293
+ const {
3294
+ handleUpdateRowId
3295
+ } = (0, _util.createHandleUpdateRowId)($xeTable);
3296
+ const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
3297
+ let rowRest = fullAllDataRowIdMaps[rowid];
3042
3298
  if (!rowRest) {
3043
3299
  rowRest = {
3044
3300
  row,
@@ -3063,40 +3319,53 @@ const Methods = {
3063
3319
  rowRest.items = items;
3064
3320
  rowRest.parent = parentRow;
3065
3321
  rowRest.level = level;
3066
- rowRest.index = treeConfig && parentRow ? -1 : index;
3322
+ rowRest.index = currIndex;
3323
+ rowRest.treeIndex = index;
3067
3324
  fullDataRowIdMaps[rowid] = rowRest;
3068
3325
  fullAllDataRowIdMaps[rowid] = rowRest;
3069
3326
  };
3070
3327
  if (treeConfig) {
3071
- _xeUtils.default.eachTree(tableFullTreeData, handleRow, {
3328
+ _xeUtils.default.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
3329
+ const rowid = handleUpdateRowId(row);
3330
+ if (treeConfig && lazy) {
3331
+ if (row[hasChildField] && row[childrenField] === undefined) {
3332
+ row[childrenField] = null;
3333
+ }
3334
+ if (treeExpandedMaps[rowid]) {
3335
+ if (!row[childrenField] || !row[childrenField].length) {
3336
+ delete treeExpandedMaps[rowid];
3337
+ }
3338
+ }
3339
+ }
3340
+ handleRowCache(row, index, items, parentRow ? -1 : index, parentRow, rowid, nodes.length - 1, (0, _util.toTreePathSeq)(path));
3341
+ }, {
3072
3342
  children: childrenField
3073
3343
  });
3074
3344
  } else {
3075
- tableFullData.forEach(handleRow);
3345
+ tableFullData.forEach((row, index, items) => {
3346
+ handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
3347
+ });
3076
3348
  }
3077
3349
  internalData.fullDataRowIdData = fullDataRowIdMaps;
3078
3350
  internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
3079
- reactData.treeExpandedMaps = treeTempExpandedMaps;
3351
+ reactData.treeExpandedFlag++;
3080
3352
  },
3081
3353
  cacheSourceMap(fullData) {
3082
- let {
3083
- treeConfig,
3084
- treeOpts,
3085
- sourceDataRowIdData
3086
- } = this;
3354
+ const $xeTable = this;
3355
+ const props = $xeTable;
3356
+ const internalData = $xeTable;
3357
+ const {
3358
+ treeConfig
3359
+ } = props;
3360
+ const treeOpts = $xeTable.computeTreeOpts;
3087
3361
  const sourceData = _xeUtils.default.clone(fullData, true);
3088
- const rowkey = (0, _util.getRowkey)(this);
3089
- sourceDataRowIdData = this.sourceDataRowIdData = {};
3362
+ const {
3363
+ handleUpdateRowId
3364
+ } = (0, _util.createHandleUpdateRowId)($xeTable);
3365
+ const sourceRowIdData = {};
3090
3366
  const handleSourceRow = row => {
3091
- let rowid = (0, _util.getRowid)(this, row);
3092
- if ((0, _utils.eqEmptyValue)(rowid)) {
3093
- rowid = (0, _util.getRowUniqueId)();
3094
- _xeUtils.default.set(row, rowkey, rowid);
3095
- }
3096
- sourceDataRowIdData[rowid] = {
3097
- row,
3098
- rowid
3099
- };
3367
+ const rowid = handleUpdateRowId(row);
3368
+ sourceRowIdData[rowid] = row;
3100
3369
  };
3101
3370
  // 源数据缓存
3102
3371
  if (treeConfig) {
@@ -3107,7 +3376,8 @@ const Methods = {
3107
3376
  } else {
3108
3377
  sourceData.forEach(handleSourceRow);
3109
3378
  }
3110
- this.tableSourceData = sourceData;
3379
+ internalData.sourceDataRowIdData = sourceRowIdData;
3380
+ internalData.tableSourceData = sourceData;
3111
3381
  },
3112
3382
  getParams() {
3113
3383
  return this.params;
@@ -3227,53 +3497,22 @@ const Methods = {
3227
3497
  * 根据 row 获取序号
3228
3498
  * @param {Row} row 行对象
3229
3499
  */
3230
- getRowSeq(row) {
3231
- const {
3232
- fullAllDataRowIdData
3233
- } = this;
3234
- if (row) {
3235
- const rowid = (0, _util.getRowid)(this, row);
3236
- const rest = fullAllDataRowIdData[rowid];
3237
- if (rest) {
3238
- return rest.seq;
3239
- }
3240
- }
3241
- return -1;
3242
- },
3500
+ getRowSeq: createGetRowCacheProp('seq'),
3243
3501
  /**
3244
3502
  * 根据 row 获取相对于 data 中的索引
3245
3503
  * @param {Row} row 行对象
3246
3504
  */
3247
- getRowIndex(row) {
3248
- const {
3249
- fullAllDataRowIdData
3250
- } = this;
3251
- if (row) {
3252
- const rowid = (0, _util.getRowid)(this, row);
3253
- const rest = fullAllDataRowIdData[rowid];
3254
- if (rest) {
3255
- return rest.index;
3256
- }
3257
- }
3258
- return -1;
3259
- },
3505
+ getRowIndex: createGetRowCacheProp('index'),
3260
3506
  /**
3261
3507
  * 根据 row 获取相对于当前数据中的索引
3262
3508
  * @param {Row} row 行对象
3263
3509
  */
3264
- getVTRowIndex(row) {
3265
- const {
3266
- fullAllDataRowIdData
3267
- } = this;
3268
- if (row) {
3269
- const rowid = (0, _util.getRowid)(this, row);
3270
- const rest = fullAllDataRowIdData[rowid];
3271
- if (rest) {
3272
- return rest._index;
3273
- }
3274
- }
3275
- return -1;
3276
- },
3510
+ getVTRowIndex: createGetRowCacheProp('_index'),
3511
+ /**
3512
+ * 根据 row 获取渲染中的虚拟索引
3513
+ * @param {Row} row 行对象
3514
+ */
3515
+ getVMRowIndex: createGetRowCacheProp('$index'),
3277
3516
  // 在 v3 中废弃
3278
3517
  _getRowIndex(row) {
3279
3518
  if (process.env.NODE_ENV === 'development') {
@@ -3281,23 +3520,6 @@ const Methods = {
3281
3520
  }
3282
3521
  return this.getVTRowIndex(row);
3283
3522
  },
3284
- /**
3285
- * 根据 row 获取渲染中的虚拟索引
3286
- * @param {Row} row 行对象
3287
- */
3288
- getVMRowIndex(row) {
3289
- const {
3290
- fullAllDataRowIdData
3291
- } = this;
3292
- if (row) {
3293
- const rowid = (0, _util.getRowid)(this, row);
3294
- const rest = fullAllDataRowIdData[rowid];
3295
- if (rest) {
3296
- return rest.$index;
3297
- }
3298
- }
3299
- return -1;
3300
- },
3301
3523
  // 在 v3 中废弃
3302
3524
  $getRowIndex(row) {
3303
3525
  if (process.env.NODE_ENV === 'development') {
@@ -3309,34 +3531,17 @@ const Methods = {
3309
3531
  * 根据 column 获取相对于 columns 中的索引
3310
3532
  * @param {ColumnInfo} column 列配置
3311
3533
  */
3312
- getColumnIndex(column) {
3313
- const {
3314
- fullColumnIdData
3315
- } = this;
3316
- if (column) {
3317
- const rest = fullColumnIdData[column.id];
3318
- if (rest) {
3319
- return rest.index;
3320
- }
3321
- }
3322
- return -1;
3323
- },
3534
+ getColumnIndex: createGetColumnCacheProp('index'),
3324
3535
  /**
3325
3536
  * 根据 column 获取相对于当前表格列中的索引
3326
3537
  * @param {ColumnInfo} column 列配置
3327
3538
  */
3328
- getVTColumnIndex(column) {
3329
- const {
3330
- fullColumnIdData
3331
- } = this;
3332
- if (column) {
3333
- const rest = fullColumnIdData[column.id];
3334
- if (rest) {
3335
- return rest._index;
3336
- }
3337
- }
3338
- return -1;
3339
- },
3539
+ getVTColumnIndex: createGetColumnCacheProp('_index'),
3540
+ /**
3541
+ * 根据 column 获取渲染中的虚拟索引
3542
+ * @param {ColumnInfo} column 列配置
3543
+ */
3544
+ getVMColumnIndex: createGetColumnCacheProp('$index'),
3340
3545
  // 在 v3 中废弃
3341
3546
  _getColumnIndex(column) {
3342
3547
  if (process.env.NODE_ENV === 'development') {
@@ -3344,22 +3549,6 @@ const Methods = {
3344
3549
  }
3345
3550
  return this.getVTColumnIndex(column);
3346
3551
  },
3347
- /**
3348
- * 根据 column 获取渲染中的虚拟索引
3349
- * @param {ColumnInfo} column 列配置
3350
- */
3351
- getVMColumnIndex(column) {
3352
- const {
3353
- fullColumnIdData
3354
- } = this;
3355
- if (column) {
3356
- const rest = fullColumnIdData[column.id];
3357
- if (rest) {
3358
- return rest.$index;
3359
- }
3360
- }
3361
- return -1;
3362
- },
3363
3552
  // 在 v3 中废弃
3364
3553
  $getColumnIndex(column) {
3365
3554
  if (process.env.NODE_ENV === 'development') {
@@ -3468,20 +3657,28 @@ const Methods = {
3468
3657
  keepSource,
3469
3658
  treeConfig
3470
3659
  } = props;
3660
+ const {
3661
+ editStore
3662
+ } = reactData;
3471
3663
  const {
3472
3664
  fullAllDataRowIdData,
3665
+ fullDataRowIdData,
3473
3666
  tableSourceData,
3474
3667
  sourceDataRowIdData,
3475
3668
  tableFullData,
3476
3669
  afterFullData
3477
3670
  } = internalData;
3671
+ const removeTempMaps = Object.assign({}, editStore.removeMaps);
3478
3672
  const treeOpts = $xeTable.computeTreeOpts;
3479
3673
  const {
3480
3674
  transform
3481
3675
  } = treeOpts;
3676
+ const {
3677
+ handleGetRowId
3678
+ } = (0, _util.createHandleGetRowId)($xeTable);
3482
3679
  if (!keepSource) {
3483
3680
  if (process.env.NODE_ENV === 'development') {
3484
- (0, _log.warnLog)('vxe.error.reqProp', ['keep-source']);
3681
+ (0, _log.errLog)('vxe.error.reqProp', ['keep-source']);
3485
3682
  }
3486
3683
  return $xeTable.$nextTick();
3487
3684
  }
@@ -3495,22 +3692,23 @@ const Methods = {
3495
3692
  }
3496
3693
  let reDelFlag = false;
3497
3694
  if (targetRows.length) {
3498
- targetRows.forEach(row => {
3499
- if (!$xeTable.isInsertByRow(row)) {
3500
- const rowid = (0, _util.getRowid)($xeTable, row);
3501
- const oRow = sourceDataRowIdData[rowid];
3502
- if (oRow && row) {
3503
- if (field) {
3504
- _xeUtils.default.set(row, field, _xeUtils.default.clone(_xeUtils.default.get(oRow, field), true));
3505
- } else {
3506
- _xeUtils.default.destructuring(row, _xeUtils.default.clone(oRow, true));
3507
- }
3508
- if ($xeTable.isRemoveByRow(row)) {
3509
- const rowRest = fullAllDataRowIdData[rowid];
3510
- if (rowRest) {
3511
- const reRow = rowRest.row;
3512
- tableFullData.unshift(reRow);
3513
- afterFullData.unshift(reRow);
3695
+ targetRows.forEach(item => {
3696
+ const rowid = handleGetRowId(item);
3697
+ const rowRest = fullAllDataRowIdData[rowid];
3698
+ if (rowRest) {
3699
+ const row = rowRest.row;
3700
+ if (!$xeTable.isInsertByRow(row)) {
3701
+ const oRow = sourceDataRowIdData[rowid];
3702
+ if (oRow && row) {
3703
+ if (field) {
3704
+ _xeUtils.default.set(row, field, _xeUtils.default.clone(_xeUtils.default.get(oRow, field), true));
3705
+ } else {
3706
+ _xeUtils.default.destructuring(row, _xeUtils.default.clone(oRow, true));
3707
+ }
3708
+ if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
3709
+ delete removeTempMaps[rowid];
3710
+ tableFullData.unshift(row);
3711
+ afterFullData.unshift(row);
3514
3712
  reDelFlag = true;
3515
3713
  }
3516
3714
  }
@@ -3520,6 +3718,7 @@ const Methods = {
3520
3718
  }
3521
3719
  if (rows) {
3522
3720
  if (reDelFlag) {
3721
+ editStore.removeMaps = removeTempMaps;
3523
3722
  $xeTable.updateFooter();
3524
3723
  $xeTable.cacheRowMap(false);
3525
3724
  $xeTable.handleTableData(treeConfig && transform);
@@ -3699,25 +3898,31 @@ const Methods = {
3699
3898
  },
3700
3899
  /**
3701
3900
  * 检查行或列数据是否发生改变
3702
- * @param {Row} row 行对象
3901
+ * @param {Row} rowOrId 行对象
3703
3902
  * @param {String} field 字段名
3704
3903
  */
3705
- isUpdateByRow(row, field) {
3904
+ isUpdateByRow(rowOrId, field) {
3905
+ const $xeTable = this;
3906
+ const props = $xeTable;
3907
+ const internalData = $xeTable;
3908
+ const {
3909
+ keepSource
3910
+ } = props;
3706
3911
  const {
3707
3912
  tableFullColumn,
3708
- keepSource,
3709
- sourceDataRowIdData,
3710
- fullDataRowIdData
3711
- } = this;
3913
+ fullDataRowIdData,
3914
+ sourceDataRowIdData
3915
+ } = internalData;
3712
3916
  if (keepSource) {
3713
- const rowid = (0, _util.getRowid)(this, row);
3917
+ const rowid = _xeUtils.default.isString(rowOrId) || _xeUtils.default.isNumber(rowOrId) ? rowOrId : (0, _util.getRowid)($xeTable, rowOrId);
3918
+ const rowRest = fullDataRowIdData[rowid];
3714
3919
  // 新增的数据不需要检测
3715
- if (!fullDataRowIdData[rowid]) {
3920
+ if (!rowRest) {
3716
3921
  return false;
3717
3922
  }
3718
- const oldRest = sourceDataRowIdData[rowid];
3719
- if (oldRest) {
3720
- const oRow = oldRest.row;
3923
+ const row = rowRest.row;
3924
+ const oRow = sourceDataRowIdData[rowid];
3925
+ if (oRow) {
3721
3926
  if (arguments.length > 1) {
3722
3927
  return !eqCellValue(oRow, row, field);
3723
3928
  }
@@ -3779,6 +3984,113 @@ const Methods = {
3779
3984
  tableColumn: this.tableColumn.slice(0)
3780
3985
  };
3781
3986
  },
3987
+ /**
3988
+ * 移动列到指定列的位置
3989
+ * @param fieldOrColumn
3990
+ * @param targetFieldOrColumn
3991
+ * @param options
3992
+ */
3993
+ moveColumnTo(fieldOrColumn, targetFieldOrColumn, options) {
3994
+ const $xeTable = this;
3995
+ const internalData = $xeTable;
3996
+ const {
3997
+ fullColumnIdData,
3998
+ visibleColumn
3999
+ } = internalData;
4000
+ const {
4001
+ dragToChild,
4002
+ dragPos,
4003
+ isCrossDrag
4004
+ } = Object.assign({}, options);
4005
+ const dragCol = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
4006
+ let prevDragCol = null;
4007
+ const colRest = dragCol ? fullColumnIdData[dragCol.id] : null;
4008
+ let defPos = 'left';
4009
+ if (_xeUtils.default.isNumber(targetFieldOrColumn)) {
4010
+ if (colRest && targetFieldOrColumn) {
4011
+ let currList = colRest.items;
4012
+ let offsetIndex = colRest._index + targetFieldOrColumn;
4013
+ if (isCrossDrag) {
4014
+ currList = visibleColumn;
4015
+ offsetIndex = colRest._index + targetFieldOrColumn;
4016
+ }
4017
+ if (offsetIndex > 0 && offsetIndex < currList.length - 1) {
4018
+ prevDragCol = currList[offsetIndex];
4019
+ }
4020
+ if (targetFieldOrColumn > 0) {
4021
+ defPos = 'right';
4022
+ }
4023
+ }
4024
+ } else {
4025
+ prevDragCol = (0, _util.handleFieldOrColumn)($xeTable, targetFieldOrColumn);
4026
+ const targetColRest = prevDragCol ? fullColumnIdData[prevDragCol.id] : null;
4027
+ if (colRest && targetColRest) {
4028
+ if (targetColRest._index > colRest._index) {
4029
+ defPos = 'right';
4030
+ }
4031
+ }
4032
+ }
4033
+ return $xeTable.handleColDragSwapEvent(null, true, dragCol, prevDragCol, dragPos || defPos, dragToChild === true);
4034
+ },
4035
+ /**
4036
+ * 移动行到指定行的位置
4037
+ * @param rowidOrRow
4038
+ * @param targetRowidOrRow
4039
+ * @param options
4040
+ */
4041
+ moveRowTo(rowidOrRow, targetRowidOrRow, options) {
4042
+ const $xeTable = this;
4043
+ const props = $xeTable;
4044
+ const internalData = $xeTable;
4045
+ const {
4046
+ treeConfig
4047
+ } = props;
4048
+ const {
4049
+ fullAllDataRowIdData,
4050
+ afterFullData
4051
+ } = internalData;
4052
+ const {
4053
+ dragToChild,
4054
+ dragPos,
4055
+ isCrossDrag
4056
+ } = Object.assign({}, options);
4057
+ const treeOpts = $xeTable.computeTreeOpts;
4058
+ const dragRow = (0, _util.handleRowidOrRow)($xeTable, rowidOrRow);
4059
+ let prevDragRow = null;
4060
+ let defPos = 'top';
4061
+ const rowRest = dragRow ? fullAllDataRowIdData[(0, _util.getRowid)($xeTable, dragRow)] : null;
4062
+ if (_xeUtils.default.isNumber(targetRowidOrRow)) {
4063
+ if (rowRest && targetRowidOrRow) {
4064
+ let currList = afterFullData;
4065
+ let offsetIndex = rowRest._index + targetRowidOrRow;
4066
+ if (treeConfig) {
4067
+ currList = rowRest.items;
4068
+ if (treeOpts.transform) {
4069
+ offsetIndex = rowRest.treeIndex + targetRowidOrRow;
4070
+ if (isCrossDrag) {
4071
+ currList = afterFullData;
4072
+ offsetIndex = rowRest._index + targetRowidOrRow;
4073
+ }
4074
+ }
4075
+ }
4076
+ if (offsetIndex >= 0 && offsetIndex <= currList.length - 1) {
4077
+ prevDragRow = currList[offsetIndex];
4078
+ }
4079
+ if (targetRowidOrRow > 0) {
4080
+ defPos = 'bottom';
4081
+ }
4082
+ }
4083
+ } else {
4084
+ prevDragRow = (0, _util.handleRowidOrRow)($xeTable, targetRowidOrRow);
4085
+ const targetRowRest = prevDragRow ? fullAllDataRowIdData[(0, _util.getRowid)($xeTable, prevDragRow)] : null;
4086
+ if (rowRest && targetRowRest) {
4087
+ if (targetRowRest._index > rowRest._index) {
4088
+ defPos = 'bottom';
4089
+ }
4090
+ }
4091
+ }
4092
+ return $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
4093
+ },
3782
4094
  /**
3783
4095
  * 获取表格的全量列
3784
4096
  */
@@ -3801,16 +4113,23 @@ const Methods = {
3801
4113
  * 用于多选行,获取已选中的数据
3802
4114
  */
3803
4115
  getCheckboxRecords(isFull) {
4116
+ const $xeTable = this;
4117
+ const props = $xeTable;
4118
+ const internalData = $xeTable;
4119
+ const {
4120
+ treeConfig
4121
+ } = props;
3804
4122
  const {
3805
4123
  tableFullData,
3806
4124
  afterFullData,
3807
- treeConfig,
3808
- treeOpts,
3809
- checkboxOpts,
3810
- tableFullTreeData,
3811
4125
  afterTreeFullData,
3812
- afterFullRowMaps
3813
- } = this;
4126
+ tableFullTreeData,
4127
+ fullDataRowIdData,
4128
+ afterFullRowMaps,
4129
+ selectCheckboxMaps
4130
+ } = internalData;
4131
+ const treeOpts = $xeTable.computeTreeOpts;
4132
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
3814
4133
  const {
3815
4134
  transform,
3816
4135
  mapChildrenField
@@ -3819,21 +4138,18 @@ const Methods = {
3819
4138
  checkField
3820
4139
  } = checkboxOpts;
3821
4140
  const childrenField = treeOpts.children || treeOpts.childrenField;
3822
- const currTableData = isFull ? transform ? tableFullTreeData : tableFullData : transform ? afterTreeFullData : afterFullData;
3823
4141
  let rowList = [];
3824
4142
  if (checkField) {
3825
4143
  if (treeConfig) {
4144
+ const currTableData = isFull ? transform ? tableFullTreeData : tableFullData : transform ? afterTreeFullData : afterFullData;
3826
4145
  rowList = _xeUtils.default.filterTree(currTableData, row => _xeUtils.default.get(row, checkField), {
3827
4146
  children: transform ? mapChildrenField : childrenField
3828
4147
  });
3829
4148
  } else {
4149
+ const currTableData = isFull ? tableFullData : afterFullData;
3830
4150
  rowList = currTableData.filter(row => _xeUtils.default.get(row, checkField));
3831
4151
  }
3832
4152
  } else {
3833
- const {
3834
- selectCheckboxMaps,
3835
- fullDataRowIdData
3836
- } = this;
3837
4153
  _xeUtils.default.each(selectCheckboxMaps, (row, rowid) => {
3838
4154
  if (isFull) {
3839
4155
  if (fullDataRowIdData[rowid]) {
@@ -4252,6 +4568,7 @@ const Methods = {
4252
4568
  * 默认执行一次,除非被重置
4253
4569
  */
4254
4570
  handleLoadDefaults() {
4571
+ const $xeTable = this;
4255
4572
  if (this.checkboxConfig) {
4256
4573
  this.handleDefaultSelectionChecked();
4257
4574
  }
@@ -4262,7 +4579,7 @@ const Methods = {
4262
4579
  this.handleDefaultRowExpand();
4263
4580
  }
4264
4581
  if (this.treeConfig) {
4265
- this.handleDefaultTreeExpand();
4582
+ handleDefaultTreeExpand($xeTable);
4266
4583
  }
4267
4584
  if (this.mergeCells) {
4268
4585
  this.handleDefaultMergeCells();
@@ -4547,14 +4864,26 @@ const Methods = {
4547
4864
  }
4548
4865
  },
4549
4866
  getCustomStoreData() {
4867
+ const $xeTable = this;
4868
+ const props = $xeTable;
4869
+ const internalData = $xeTable;
4870
+ const {
4871
+ id
4872
+ } = props;
4873
+ const customOpts = $xeTable.computeCustomOpts;
4550
4874
  const {
4551
- id,
4552
- customOpts,
4553
4875
  collectColumn
4554
- } = this;
4876
+ } = internalData;
4555
4877
  const {
4878
+ storage,
4556
4879
  checkMethod
4557
4880
  } = customOpts;
4881
+ const isAllCustom = storage === true;
4882
+ const storageOpts = isAllCustom ? {} : Object.assign({}, storage || {});
4883
+ const isCustomResizable = isAllCustom || storageOpts.resizable;
4884
+ const isCustomVisible = isAllCustom || storageOpts.visible;
4885
+ const isCustomFixed = isAllCustom || storageOpts.fixed;
4886
+ const isCustomSort = isAllCustom || storageOpts.sort;
4558
4887
  const resizableData = {};
4559
4888
  const sortData = {};
4560
4889
  const visibleData = {};
@@ -4571,48 +4900,38 @@ const Methods = {
4571
4900
  }
4572
4901
  let hasResizable = 0;
4573
4902
  let hasSort = 0;
4574
- let hasFixedt = 0;
4903
+ let hasFixed = 0;
4575
4904
  let hasVisible = 0;
4576
4905
  _xeUtils.default.eachTree(collectColumn, (column, index, items, path, parentColumn) => {
4906
+ const colKey = column.getKey();
4907
+ if (!colKey) {
4908
+ (0, _log.errLog)('vxe.error.reqProp', [`${column.getTitle() || column.type || ''} -> column.field=?`]);
4909
+ return;
4910
+ }
4577
4911
  // 只支持一级
4578
4912
  if (!parentColumn) {
4579
- collectColumn.forEach(column => {
4580
- const colKey = column.getKey();
4581
- if (colKey) {
4582
- hasSort = 1;
4583
- sortData[colKey] = column.renderSortNumber;
4584
- }
4585
- });
4586
- if (column.fixed !== column.defaultFixed) {
4587
- const colKey = column.getKey();
4588
- if (colKey) {
4589
- hasFixedt = 1;
4590
- fixedData[colKey] = column.fixed;
4591
- }
4913
+ if (isCustomSort) {
4914
+ hasSort = 1;
4915
+ sortData[colKey] = column.renderSortNumber;
4592
4916
  }
4593
- }
4594
- if (column.resizeWidth) {
4595
- const colKey = column.getKey();
4596
- if (colKey) {
4597
- hasResizable = 1;
4598
- resizableData[colKey] = column.renderWidth;
4917
+ if (isCustomFixed && column.fixed !== column.defaultFixed) {
4918
+ hasFixed = 1;
4919
+ fixedData[colKey] = column.fixed;
4599
4920
  }
4600
4921
  }
4601
- if (!checkMethod || checkMethod({
4922
+ if (isCustomResizable && column.resizeWidth) {
4923
+ hasResizable = 1;
4924
+ resizableData[colKey] = column.renderWidth;
4925
+ }
4926
+ if (isCustomVisible && (!checkMethod || checkMethod({
4602
4927
  column
4603
- })) {
4928
+ }))) {
4604
4929
  if (!column.visible && column.defaultVisible) {
4605
- const colKey = column.getKey();
4606
- if (colKey) {
4607
- hasVisible = 1;
4608
- visibleData[colKey] = false;
4609
- }
4930
+ hasVisible = 1;
4931
+ visibleData[colKey] = false;
4610
4932
  } else if (column.visible && !column.defaultVisible) {
4611
- const colKey = column.getKey();
4612
- if (colKey) {
4613
- hasVisible = 1;
4614
- visibleData[colKey] = true;
4615
- }
4933
+ hasVisible = 1;
4934
+ visibleData[colKey] = true;
4616
4935
  }
4617
4936
  }
4618
4937
  });
@@ -4622,7 +4941,7 @@ const Methods = {
4622
4941
  if (hasSort) {
4623
4942
  storeData.sortData = sortData;
4624
4943
  }
4625
- if (hasFixedt) {
4944
+ if (hasFixed) {
4626
4945
  storeData.fixedData = fixedData;
4627
4946
  }
4628
4947
  if (hasVisible) {
@@ -5170,12 +5489,15 @@ const Methods = {
5170
5489
  fullAllDataRowIdData,
5171
5490
  afterFullData
5172
5491
  } = internalData;
5492
+ const {
5493
+ handleGetRowId
5494
+ } = (0, _util.createHandleGetRowId)($xeTable);
5173
5495
  const rowOpts = $xeTable.computeRowOpts;
5174
5496
  const cellOpts = $xeTable.computeCellOpts;
5175
5497
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
5176
5498
  const rest = {};
5177
5499
  afterFullData.forEach(row => {
5178
- const rowid = (0, _util.getRowid)($xeTable, row);
5500
+ const rowid = handleGetRowId(row);
5179
5501
  const rowRest = fullAllDataRowIdData[rowid];
5180
5502
  if (rowRest) {
5181
5503
  const resizeHeight = rowRest.resizeHeight;
@@ -5204,8 +5526,11 @@ const Methods = {
5204
5526
  rHeight = Math.floor(rHeight * bodyHeight);
5205
5527
  }
5206
5528
  if (rHeight) {
5529
+ const {
5530
+ handleGetRowId
5531
+ } = (0, _util.createHandleGetRowId)($xeTable);
5207
5532
  rows.forEach(row => {
5208
- const rowid = _xeUtils.default.isString(row) || _xeUtils.default.isNumber(row) ? row : (0, _util.getRowid)($xeTable, row);
5533
+ const rowid = _xeUtils.default.isString(row) || _xeUtils.default.isNumber(row) ? row : handleGetRowId(row);
5209
5534
  const rowRest = fullAllDataRowIdData[rowid];
5210
5535
  if (rowRest) {
5211
5536
  rowRest.resizeHeight = rHeight;
@@ -5364,12 +5689,25 @@ const Methods = {
5364
5689
  }
5365
5690
  }
5366
5691
  // 兼容老版本
5367
- let rest;
5368
- if (!evntList.some(func => func(Object.assign({
5369
- $grid: this.$xegrid,
5370
- $table: this,
5371
- $event: evnt
5372
- }, args)) === false)) {
5692
+ let rest = null;
5693
+ let isStop = false;
5694
+ for (let i = 0; i < evntList.length; i++) {
5695
+ const func = evntList[i];
5696
+ const fnRest = func(Object.assign({
5697
+ $grid: this.$xegrid,
5698
+ $table: this,
5699
+ $event: evnt
5700
+ }, args));
5701
+ if (fnRest === false) {
5702
+ isStop = true;
5703
+ break;
5704
+ } else if (fnRest && fnRest.status === false) {
5705
+ rest = fnRest.result;
5706
+ isStop = true;
5707
+ break;
5708
+ }
5709
+ }
5710
+ if (!isStop) {
5373
5711
  if (next) {
5374
5712
  rest = next();
5375
5713
  }
@@ -5605,10 +5943,12 @@ const Methods = {
5605
5943
  treeConfig,
5606
5944
  treeOpts,
5607
5945
  highlightCurrentRow,
5946
+ highlightCurrentColumn,
5608
5947
  currentRow,
5609
5948
  bodyCtxMenu,
5610
5949
  rowOpts
5611
5950
  } = this;
5951
+ const columnOpts = $xeTable.computeColumnOpts;
5612
5952
  const {
5613
5953
  selected,
5614
5954
  actived
@@ -5763,10 +6103,15 @@ const Methods = {
5763
6103
  if (!isEditStatus) {
5764
6104
  // 如果按下了方向键
5765
6105
  if (selected.row && selected.column) {
5766
- this.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
5767
- } else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
5768
- // 当前行按键上下移动
5769
- this.moveCurrentRow(isUpArrow, isDwArrow, evnt);
6106
+ $xeTable.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
6107
+ }
6108
+ // 当前行按键上下移动
6109
+ if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
6110
+ $xeTable.moveCurrentRow(isUpArrow, isDwArrow, evnt);
6111
+ }
6112
+ // 当前行按键左右移动
6113
+ if ((isLeftArrow || isRightArrow) && (columnOpts.isCurrent || highlightCurrentColumn)) {
6114
+ $xeTable.moveCurrentColumn(isLeftArrow, isRightArrow, evnt);
5770
6115
  }
5771
6116
  }
5772
6117
  } else if (isTab && keyboardConfig && keyboardOpts.isTab) {
@@ -6145,15 +6490,20 @@ const Methods = {
6145
6490
  * 获取复选框半选状态的行数据
6146
6491
  */
6147
6492
  getCheckboxIndeterminateRecords(isFull) {
6493
+ const $xeTable = this;
6494
+ const props = $xeTable;
6495
+ const internalData = $xeTable;
6148
6496
  const {
6149
- treeConfig,
6150
- treeIndeterminateMaps,
6151
- fullDataRowIdData
6152
- } = this;
6497
+ treeConfig
6498
+ } = props;
6499
+ const {
6500
+ fullDataRowIdData,
6501
+ treeIndeterminateRowMaps
6502
+ } = internalData;
6153
6503
  if (treeConfig) {
6154
6504
  const fullRest = [];
6155
6505
  const defRest = [];
6156
- _xeUtils.default.each(treeIndeterminateMaps, (item, rowid) => {
6506
+ _xeUtils.default.each(treeIndeterminateRowMaps, (item, rowid) => {
6157
6507
  if (item) {
6158
6508
  fullRest.push(item);
6159
6509
  if (fullDataRowIdData[rowid]) {
@@ -6230,9 +6580,13 @@ const Methods = {
6230
6580
  isCheckedByCheckboxRow(row) {
6231
6581
  const $xeTable = this;
6232
6582
  const reactData = $xeTable;
6583
+ const internalData = $xeTable;
6233
6584
  const {
6234
- selectCheckboxMaps
6585
+ updateCheckboxFlag
6235
6586
  } = reactData;
6587
+ const {
6588
+ selectCheckboxMaps
6589
+ } = internalData;
6236
6590
  const checkboxOpts = $xeTable.computeCheckboxOpts;
6237
6591
  const {
6238
6592
  checkField
@@ -6240,17 +6594,18 @@ const Methods = {
6240
6594
  if (checkField) {
6241
6595
  return _xeUtils.default.get(row, checkField);
6242
6596
  }
6243
- return !!selectCheckboxMaps[(0, _util.getRowid)($xeTable, row)];
6597
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[(0, _util.getRowid)($xeTable, row)];
6244
6598
  },
6245
6599
  isCheckedByCheckboxRowKey(rowid) {
6246
6600
  const $xeTable = this;
6247
6601
  const reactData = $xeTable;
6248
6602
  const internalData = $xeTable;
6249
6603
  const {
6250
- selectCheckboxMaps
6604
+ updateCheckboxFlag
6251
6605
  } = reactData;
6252
6606
  const {
6253
- fullAllDataRowIdData
6607
+ fullAllDataRowIdData,
6608
+ selectCheckboxMaps
6254
6609
  } = internalData;
6255
6610
  const checkboxOpts = $xeTable.computeCheckboxOpts;
6256
6611
  const {
@@ -6263,23 +6618,23 @@ const Methods = {
6263
6618
  }
6264
6619
  return false;
6265
6620
  }
6266
- return !!selectCheckboxMaps[rowid];
6621
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
6267
6622
  },
6268
6623
  isIndeterminateByCheckboxRow(row) {
6269
6624
  const $xeTable = this;
6270
- const reactData = $xeTable;
6625
+ const internalData = $xeTable;
6271
6626
  const {
6272
- treeIndeterminateMaps
6273
- } = reactData;
6274
- return !!treeIndeterminateMaps[(0, _util.getRowid)($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
6627
+ treeIndeterminateRowMaps
6628
+ } = internalData;
6629
+ return !!treeIndeterminateRowMaps[(0, _util.getRowid)($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
6275
6630
  },
6276
6631
  isIndeterminateByCheckboxRowKey(rowid) {
6277
6632
  const $xeTable = this;
6278
- const reactData = $xeTable;
6633
+ const internalData = $xeTable;
6279
6634
  const {
6280
- treeIndeterminateMaps
6281
- } = reactData;
6282
- return !!treeIndeterminateMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
6635
+ treeIndeterminateRowMaps
6636
+ } = internalData;
6637
+ return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
6283
6638
  },
6284
6639
  /**
6285
6640
  * 切换选中
@@ -6289,13 +6644,13 @@ const Methods = {
6289
6644
  const $xeTable = this;
6290
6645
  const props = $xeTable;
6291
6646
  const reactData = $xeTable;
6647
+ const internalData = $xeTable;
6292
6648
  const {
6293
6649
  treeConfig
6294
6650
  } = props;
6295
6651
  const {
6296
6652
  selectCheckboxMaps
6297
- } = reactData;
6298
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
6653
+ } = internalData;
6299
6654
  const treeOpts = $xeTable.computeTreeOpts;
6300
6655
  const {
6301
6656
  transform,
@@ -6308,6 +6663,10 @@ const Methods = {
6308
6663
  checkStrictly,
6309
6664
  checkMethod
6310
6665
  } = checkboxOpts;
6666
+ const {
6667
+ handleGetRowId
6668
+ } = (0, _util.createHandleGetRowId)($xeTable);
6669
+ // indeterminateField 仅支持读取
6311
6670
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
6312
6671
  if (checkField) {
6313
6672
  // 树结构
@@ -6326,35 +6685,34 @@ const Methods = {
6326
6685
  }, {
6327
6686
  children: transform ? mapChildrenField : childrenField
6328
6687
  });
6329
- reactData.selectCheckboxMaps = selectRowMaps;
6688
+ reactData.updateCheckboxFlag++;
6330
6689
  return;
6331
- } else {
6332
- // 列表
6333
- rows.forEach(row => {
6334
- if (isForce || !checkMethod || checkMethod({
6335
- row
6336
- })) {
6337
- _xeUtils.default.set(row, checkField, checked);
6338
- handleCheckboxReserveRow($xeTable, row, checked);
6339
- }
6340
- });
6341
6690
  }
6342
- reactData.selectCheckboxMaps = selectRowMaps;
6691
+ // 列表
6692
+ rows.forEach(row => {
6693
+ if (isForce || !checkMethod || checkMethod({
6694
+ row
6695
+ })) {
6696
+ _xeUtils.default.set(row, checkField, checked);
6697
+ handleCheckboxReserveRow($xeTable, row, checked);
6698
+ }
6699
+ });
6700
+ reactData.updateCheckboxFlag++;
6343
6701
  return;
6344
6702
  }
6345
6703
  // 树结构
6346
6704
  if (treeConfig && !checkStrictly) {
6347
6705
  // 更新子节点状态
6348
6706
  _xeUtils.default.eachTree(rows, row => {
6349
- const rowid = (0, _util.getRowid)($xeTable, row);
6707
+ const rowid = handleGetRowId(row);
6350
6708
  if (isForce || !checkMethod || checkMethod({
6351
6709
  row
6352
6710
  })) {
6353
6711
  if (checked) {
6354
- selectRowMaps[rowid] = row;
6712
+ selectCheckboxMaps[rowid] = row;
6355
6713
  } else {
6356
- if (selectRowMaps[rowid]) {
6357
- delete selectRowMaps[rowid];
6714
+ if (selectCheckboxMaps[rowid]) {
6715
+ delete selectCheckboxMaps[rowid];
6358
6716
  }
6359
6717
  }
6360
6718
  handleCheckboxReserveRow($xeTable, row, checked);
@@ -6362,28 +6720,28 @@ const Methods = {
6362
6720
  }, {
6363
6721
  children: transform ? mapChildrenField : childrenField
6364
6722
  });
6365
- reactData.selectCheckboxMaps = selectRowMaps;
6723
+ reactData.updateCheckboxFlag++;
6366
6724
  return;
6367
6725
  }
6368
6726
  // 列表
6369
6727
  rows.forEach(row => {
6370
- const rowid = (0, _util.getRowid)($xeTable, row);
6728
+ const rowid = handleGetRowId(row);
6371
6729
  if (isForce || !checkMethod || checkMethod({
6372
6730
  row
6373
6731
  })) {
6374
6732
  if (checked) {
6375
- if (!selectRowMaps[rowid]) {
6376
- selectRowMaps[rowid] = row;
6733
+ if (!selectCheckboxMaps[rowid]) {
6734
+ selectCheckboxMaps[rowid] = row;
6377
6735
  }
6378
6736
  } else {
6379
- if (selectRowMaps[rowid]) {
6380
- delete selectRowMaps[rowid];
6737
+ if (selectCheckboxMaps[rowid]) {
6738
+ delete selectCheckboxMaps[rowid];
6381
6739
  }
6382
6740
  }
6383
6741
  handleCheckboxReserveRow($xeTable, row, checked);
6742
+ reactData.updateCheckboxFlag++;
6384
6743
  }
6385
6744
  });
6386
- reactData.selectCheckboxMaps = selectRowMaps;
6387
6745
  },
6388
6746
  /**
6389
6747
  * 即将移除
@@ -6396,10 +6754,12 @@ const Methods = {
6396
6754
  $xeTable.handleBatchSelectRows([row], checked, isForce);
6397
6755
  },
6398
6756
  handleToggleCheckRowEvent(evnt, params) {
6757
+ const $xeTable = this;
6758
+ const internalData = $xeTable;
6399
6759
  const {
6400
- selectCheckboxMaps,
6401
- checkboxOpts
6402
- } = this;
6760
+ selectCheckboxMaps
6761
+ } = internalData;
6762
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
6403
6763
  const {
6404
6764
  checkField,
6405
6765
  trigger
@@ -6414,43 +6774,47 @@ const Methods = {
6414
6774
  if (checkField) {
6415
6775
  checked = !_xeUtils.default.get(row, checkField);
6416
6776
  } else {
6417
- checked = !selectCheckboxMaps[(0, _util.getRowid)(this, row)];
6777
+ checked = !selectCheckboxMaps[(0, _util.getRowid)($xeTable, row)];
6418
6778
  }
6419
6779
  if (evnt) {
6420
- this.triggerCheckRowEvent(evnt, params, checked);
6780
+ $xeTable.triggerCheckRowEvent(evnt, params, checked);
6421
6781
  } else {
6422
- this.handleSelectRow(params, checked);
6423
- this.checkSelectionStatus();
6782
+ $xeTable.handleBatchSelectRows([row], checked);
6783
+ $xeTable.checkSelectionStatus();
6424
6784
  }
6425
6785
  },
6426
6786
  triggerCheckRowEvent(evnt, params, checked) {
6427
6787
  const $xeTable = this;
6788
+ const props = $xeTable;
6789
+ const internalData = $xeTable;
6790
+ const {
6791
+ row
6792
+ } = params;
6428
6793
  const {
6429
- checkboxOpts,
6430
6794
  afterFullData
6431
- } = this;
6795
+ } = internalData;
6796
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
6432
6797
  const {
6433
6798
  checkMethod,
6434
6799
  trigger
6435
6800
  } = checkboxOpts;
6436
- const {
6437
- row
6438
- } = params;
6439
6801
  if (trigger === 'manual') {
6440
6802
  return;
6441
6803
  }
6442
6804
  evnt.stopPropagation();
6443
- if (checkboxOpts.isShiftKey && evnt.shiftKey && !this.treeConfig) {
6444
- const checkboxRecords = this.getCheckboxRecords();
6805
+ if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
6806
+ const checkboxRecords = $xeTable.getCheckboxRecords();
6445
6807
  if (checkboxRecords.length) {
6446
6808
  const firstRow = checkboxRecords[0];
6447
- const _rowIndex = this.getVTRowIndex(row);
6448
- const _firstRowIndex = this.getVTRowIndex(firstRow);
6809
+ const _rowIndex = $xeTable.getVTRowIndex(row);
6810
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
6449
6811
  if (_rowIndex !== _firstRowIndex) {
6450
- this.setAllCheckboxRow(false);
6812
+ $xeTable.setAllCheckboxRow(false);
6451
6813
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
6452
- handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
6453
- this.emitEvent('checkbox-range-select', Object.assign({
6814
+ $xeTable.$nextTick(() => {
6815
+ handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
6816
+ });
6817
+ $xeTable.dispatchEvent('checkbox-range-select', Object.assign({
6454
6818
  rangeRecords: rangeRows
6455
6819
  }, params), evnt);
6456
6820
  return;
@@ -6460,12 +6824,12 @@ const Methods = {
6460
6824
  if (!checkMethod || checkMethod({
6461
6825
  row
6462
6826
  })) {
6463
- this.handleSelectRow(params, checked);
6464
- this.checkSelectionStatus();
6465
- this.emitEvent('checkbox-change', Object.assign({
6466
- records: this.getCheckboxRecords(),
6467
- reserves: this.getCheckboxReserveRecords(),
6468
- indeterminates: this.getCheckboxIndeterminateRecords(),
6827
+ $xeTable.handleBatchSelectRows([row], checked);
6828
+ $xeTable.checkSelectionStatus();
6829
+ $xeTable.dispatchEvent('checkbox-change', Object.assign({
6830
+ records: () => $xeTable.getCheckboxRecords(),
6831
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
6832
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
6469
6833
  checked
6470
6834
  }, params), evnt);
6471
6835
  }
@@ -6475,10 +6839,11 @@ const Methods = {
6475
6839
  */
6476
6840
  toggleCheckboxRow(row) {
6477
6841
  const $xeTable = this;
6842
+ const internalData = $xeTable;
6478
6843
  const {
6479
- selectCheckboxMaps,
6480
- checkboxOpts
6481
- } = this;
6844
+ selectCheckboxMaps
6845
+ } = internalData;
6846
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
6482
6847
  const {
6483
6848
  checkField
6484
6849
  } = checkboxOpts;
@@ -6505,10 +6870,8 @@ const Methods = {
6505
6870
  } = props;
6506
6871
  const {
6507
6872
  selectCheckboxMaps,
6508
- treeIndeterminateMaps
6509
- } = reactData;
6510
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
6511
- const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
6873
+ treeIndeterminateRowMaps
6874
+ } = internalData;
6512
6875
  const treeOpts = $xeTable.computeTreeOpts;
6513
6876
  const {
6514
6877
  transform,
@@ -6529,10 +6892,13 @@ const Methods = {
6529
6892
  }
6530
6893
  // 树结构
6531
6894
  if (treeConfig) {
6895
+ const {
6896
+ handleGetRowId
6897
+ } = (0, _util.createHandleGetRowId)($xeTable);
6532
6898
  const childRowMaps = {};
6533
6899
  const childRowList = [];
6534
6900
  _xeUtils.default.eachTree(afterTreeFullData, row => {
6535
- const rowid = (0, _util.getRowid)($xeTable, row);
6901
+ const rowid = handleGetRowId(row);
6536
6902
  const childList = row[transform ? mapChildrenField : childrenField];
6537
6903
  if (childList && childList.length && !childRowMaps[rowid]) {
6538
6904
  childRowMaps[rowid] = 1;
@@ -6549,30 +6915,30 @@ const Methods = {
6549
6915
  let hLen = 0; // 半选
6550
6916
  let vLen = 0; // 有效行
6551
6917
  childList.forEach(checkMethod ? item => {
6552
- const childRowid = (0, _util.getRowid)($xeTable, item);
6553
- const isSelect = checkField ? _xeUtils.default.get(item, checkField) : selectRowMaps[childRowid];
6918
+ const childRowid = handleGetRowId(item);
6919
+ const isSelect = checkField ? _xeUtils.default.get(item, checkField) : selectCheckboxMaps[childRowid];
6554
6920
  if (checkMethod({
6555
6921
  row: item
6556
6922
  })) {
6557
6923
  if (isSelect) {
6558
6924
  sLen++;
6559
- } else if (halfRowMaps[childRowid]) {
6925
+ } else if (treeIndeterminateRowMaps[childRowid]) {
6560
6926
  hLen++;
6561
6927
  }
6562
6928
  vLen++;
6563
6929
  } else {
6564
6930
  if (isSelect) {
6565
6931
  sLen++;
6566
- } else if (halfRowMaps[childRowid]) {
6932
+ } else if (treeIndeterminateRowMaps[childRowid]) {
6567
6933
  hLen++;
6568
6934
  }
6569
6935
  }
6570
6936
  } : item => {
6571
- const childRowid = (0, _util.getRowid)($xeTable, item);
6572
- const isSelect = checkField ? _xeUtils.default.get(item, checkField) : selectRowMaps[childRowid];
6937
+ const childRowid = handleGetRowId(item);
6938
+ const isSelect = checkField ? _xeUtils.default.get(item, checkField) : selectCheckboxMaps[childRowid];
6573
6939
  if (isSelect) {
6574
6940
  sLen++;
6575
- } else if (halfRowMaps[childRowid]) {
6941
+ } else if (treeIndeterminateRowMaps[childRowid]) {
6576
6942
  hLen++;
6577
6943
  }
6578
6944
  vLen++;
@@ -6584,29 +6950,28 @@ const Methods = {
6584
6950
  }
6585
6951
  if (isSelected) {
6586
6952
  if (!checkField) {
6587
- selectRowMaps[rowid] = row;
6953
+ selectCheckboxMaps[rowid] = row;
6588
6954
  }
6589
- if (halfRowMaps[rowid]) {
6590
- delete halfRowMaps[rowid];
6955
+ if (treeIndeterminateRowMaps[rowid]) {
6956
+ delete treeIndeterminateRowMaps[rowid];
6591
6957
  }
6592
6958
  } else {
6593
6959
  if (!checkField) {
6594
- if (selectRowMaps[rowid]) {
6595
- delete selectRowMaps[rowid];
6960
+ if (selectCheckboxMaps[rowid]) {
6961
+ delete selectCheckboxMaps[rowid];
6596
6962
  }
6597
6963
  }
6598
6964
  if (halfSelect) {
6599
- halfRowMaps[rowid] = row;
6965
+ treeIndeterminateRowMaps[rowid] = row;
6600
6966
  } else {
6601
- if (halfRowMaps[rowid]) {
6602
- delete halfRowMaps[rowid];
6967
+ if (treeIndeterminateRowMaps[rowid]) {
6968
+ delete treeIndeterminateRowMaps[rowid];
6603
6969
  }
6604
6970
  }
6605
6971
  }
6606
6972
  });
6607
6973
  }
6608
- reactData.selectCheckboxMaps = selectRowMaps;
6609
- reactData.treeIndeterminateMaps = halfRowMaps;
6974
+ reactData.updateCheckboxFlag++;
6610
6975
  },
6611
6976
  updateAllCheckboxStatus() {
6612
6977
  const $xeTable = this;
@@ -6617,9 +6982,12 @@ const Methods = {
6617
6982
  treeConfig
6618
6983
  } = props;
6619
6984
  const {
6985
+ afterFullData,
6986
+ afterTreeFullData,
6987
+ checkboxReserveRowMap,
6620
6988
  selectCheckboxMaps,
6621
- treeIndeterminateMaps
6622
- } = reactData;
6989
+ treeIndeterminateRowMaps
6990
+ } = internalData;
6623
6991
  const checkboxOpts = $xeTable.computeCheckboxOpts;
6624
6992
  const {
6625
6993
  checkField,
@@ -6627,39 +6995,37 @@ const Methods = {
6627
6995
  showReserveStatus
6628
6996
  } = checkboxOpts;
6629
6997
  const {
6630
- afterFullData,
6631
- afterTreeFullData,
6632
- checkboxReserveRowMap
6633
- } = internalData;
6998
+ handleGetRowId
6999
+ } = (0, _util.createHandleGetRowId)($xeTable);
6634
7000
  let sLen = 0; // 已选
6635
7001
  let hLen = 0; // 半选
6636
7002
  let vLen = 0; // 有效行
6637
7003
  const rootList = treeConfig ? afterTreeFullData : afterFullData;
6638
7004
  rootList.forEach(checkMethod ? row => {
6639
- const childRowid = (0, _util.getRowid)($xeTable, row);
7005
+ const childRowid = handleGetRowId(row);
6640
7006
  const selected = checkField ? _xeUtils.default.get(row, checkField) : selectCheckboxMaps[childRowid];
6641
7007
  if (checkMethod({
6642
7008
  row
6643
7009
  })) {
6644
7010
  if (selected) {
6645
7011
  sLen++;
6646
- } else if (treeIndeterminateMaps[childRowid]) {
7012
+ } else if (treeIndeterminateRowMaps[childRowid]) {
6647
7013
  hLen++;
6648
7014
  }
6649
7015
  vLen++;
6650
7016
  } else {
6651
7017
  if (selected) {
6652
7018
  sLen++;
6653
- } else if (treeIndeterminateMaps[childRowid]) {
7019
+ } else if (treeIndeterminateRowMaps[childRowid]) {
6654
7020
  hLen++;
6655
7021
  }
6656
7022
  }
6657
7023
  } : row => {
6658
- const childRowid = (0, _util.getRowid)($xeTable, row);
7024
+ const childRowid = handleGetRowId(row);
6659
7025
  const selected = checkField ? _xeUtils.default.get(row, checkField) : selectCheckboxMaps[childRowid];
6660
7026
  if (selected) {
6661
7027
  sLen++;
6662
- } else if (treeIndeterminateMaps[childRowid]) {
7028
+ } else if (treeIndeterminateRowMaps[childRowid]) {
6663
7029
  hLen++;
6664
7030
  }
6665
7031
  vLen++;
@@ -6723,27 +7089,35 @@ const Methods = {
6723
7089
  * 获取复选框保留选中的行
6724
7090
  */
6725
7091
  getCheckboxReserveRecords(isFull) {
7092
+ const $xeTable = this;
7093
+ const props = $xeTable;
7094
+ const internalData = $xeTable;
7095
+ const {
7096
+ treeConfig
7097
+ } = props;
6726
7098
  const {
6727
- fullDataRowIdData,
6728
7099
  afterFullData,
6729
- checkboxReserveRowMap,
6730
- checkboxOpts,
6731
- treeConfig,
6732
- treeOpts
6733
- } = this;
7100
+ fullDataRowIdData,
7101
+ checkboxReserveRowMap
7102
+ } = internalData;
7103
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
7104
+ const treeOpts = $xeTable.computeTreeOpts;
6734
7105
  const childrenField = treeOpts.children || treeOpts.childrenField;
6735
7106
  const reserveSelection = [];
6736
7107
  if (checkboxOpts.reserve) {
7108
+ const {
7109
+ handleGetRowId
7110
+ } = (0, _util.createHandleGetRowId)($xeTable);
6737
7111
  const afterFullIdMaps = {};
6738
7112
  if (treeConfig) {
6739
7113
  _xeUtils.default.eachTree(afterFullData, row => {
6740
- afterFullIdMaps[(0, _util.getRowid)(this, row)] = 1;
7114
+ afterFullIdMaps[handleGetRowId(row)] = 1;
6741
7115
  }, {
6742
7116
  children: childrenField
6743
7117
  });
6744
7118
  } else {
6745
7119
  afterFullData.forEach(row => {
6746
- afterFullIdMaps[(0, _util.getRowid)(this, row)] = 1;
7120
+ afterFullIdMaps[handleGetRowId(row)] = 1;
6747
7121
  });
6748
7122
  }
6749
7123
  _xeUtils.default.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
@@ -6785,9 +7159,9 @@ const Methods = {
6785
7159
  handleCheckedAllCheckboxRow($xeTable, value);
6786
7160
  if (evnt) {
6787
7161
  $xeTable.dispatchEvent('checkbox-all', {
6788
- records: $xeTable.getCheckboxRecords(),
6789
- reserves: $xeTable.getCheckboxReserveRecords(),
6790
- indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
7162
+ records: () => $xeTable.getCheckboxRecords(),
7163
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
7164
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
6791
7165
  checked: value
6792
7166
  }, evnt);
6793
7167
  }
@@ -6823,17 +7197,24 @@ const Methods = {
6823
7197
  * 清空行为不管是否被禁用还是保留记录,都将彻底清空选中状态
6824
7198
  */
6825
7199
  clearCheckboxRow() {
7200
+ const $xeTable = this;
7201
+ const props = $xeTable;
7202
+ const reactData = $xeTable;
7203
+ const internalData = $xeTable;
6826
7204
  const {
6827
- tableFullData,
6828
- treeConfig,
6829
- treeOpts,
6830
- checkboxOpts
6831
- } = this;
7205
+ treeConfig
7206
+ } = props;
7207
+ const {
7208
+ tableFullData
7209
+ } = internalData;
7210
+ const treeOpts = $xeTable.computeTreeOpts;
7211
+ const childrenField = treeOpts.children || treeOpts.childrenField;
7212
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
6832
7213
  const {
6833
7214
  checkField,
6834
7215
  reserve
6835
7216
  } = checkboxOpts;
6836
- const childrenField = treeOpts.children || treeOpts.childrenField;
7217
+ // indeterminateField 仅支持读取
6837
7218
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
6838
7219
  if (checkField) {
6839
7220
  const handleClearChecked = item => {
@@ -6853,10 +7234,11 @@ const Methods = {
6853
7234
  if (reserve) {
6854
7235
  tableFullData.forEach(row => this.handleCheckboxReserveRow(row, false));
6855
7236
  }
6856
- this.isAllSelected = false;
6857
- this.isIndeterminate = false;
6858
- this.selectCheckboxMaps = {};
6859
- this.treeIndeterminateMaps = {};
7237
+ reactData.isAllSelected = false;
7238
+ reactData.isIndeterminate = false;
7239
+ internalData.selectCheckboxMaps = {};
7240
+ internalData.treeIndeterminateRowMaps = {};
7241
+ reactData.updateCheckboxFlag++;
6860
7242
  return this.$nextTick();
6861
7243
  },
6862
7244
  /**
@@ -7107,12 +7489,14 @@ const Methods = {
7107
7489
  },
7108
7490
  triggerHeaderCellClickEvent(evnt, params) {
7109
7491
  const $xeTable = this;
7492
+ const props = $xeTable;
7110
7493
  const internalData = $xeTable;
7111
7494
  const {
7112
7495
  _lastResizeTime
7113
7496
  } = internalData;
7114
7497
  const sortOpts = $xeTable.computeSortOpts;
7115
7498
  const columnOpts = $xeTable.computeColumnOpts;
7499
+ const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
7116
7500
  const {
7117
7501
  column
7118
7502
  } = params;
@@ -7129,7 +7513,7 @@ const Methods = {
7129
7513
  triggerFilter,
7130
7514
  cell
7131
7515
  }, params), evnt);
7132
- if (columnOpts.isCurrent || $xeTable.highlightCurrentColumn) {
7516
+ if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
7133
7517
  $xeTable.triggerCurrentColumnEvent(evnt, params);
7134
7518
  }
7135
7519
  return $xeTable.$nextTick();
@@ -7147,13 +7531,25 @@ const Methods = {
7147
7531
  * @param {ColumnInfo} fieldOrColumn 列配置
7148
7532
  */
7149
7533
  setCurrentColumn(fieldOrColumn) {
7150
- const column = (0, _util.handleFieldOrColumn)(this, fieldOrColumn);
7534
+ const $xeTable = this;
7535
+ const props = $xeTable;
7536
+ const reactData = $xeTable;
7537
+ const {
7538
+ mouseConfig
7539
+ } = props;
7540
+ const mouseOpts = $xeTable.computeMouseOpts;
7541
+ const isMouseSelected = mouseConfig && mouseOpts.selected;
7542
+ const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
7151
7543
  if (column) {
7152
- // this.clearCurrentRow()
7153
- this.clearCurrentColumn();
7154
- this.currentColumn = column;
7544
+ $xeTable.clearCurrentColumn();
7545
+ reactData.currentColumn = column;
7155
7546
  }
7156
- return this.$nextTick();
7547
+ return $xeTable.$nextTick().then(() => {
7548
+ // 更新状选中态
7549
+ if (isMouseSelected) {
7550
+ $xeTable.addCellSelectedClass();
7551
+ }
7552
+ });
7157
7553
  },
7158
7554
  /**
7159
7555
  * 用于当前列,手动清空当前高亮的状态
@@ -7162,21 +7558,6 @@ const Methods = {
7162
7558
  this.currentColumn = null;
7163
7559
  return this.$nextTick();
7164
7560
  },
7165
- checkValidate(type) {
7166
- if (this.triggerValidate) {
7167
- return this.triggerValidate(type);
7168
- }
7169
- return this.$nextTick();
7170
- },
7171
- /**
7172
- * 当单元格发生改变时
7173
- * 如果存在规则,则校验
7174
- */
7175
- handleChangeCell(evnt, params) {
7176
- this.checkValidate('blur').catch(e => e).then(() => {
7177
- this.handleEdit(params, evnt).then(() => this.checkValidate('change')).catch(e => e);
7178
- });
7179
- },
7180
7561
  /**
7181
7562
  * 列点击事件
7182
7563
  * 如果是单击模式,则激活为编辑状态
@@ -7188,6 +7569,7 @@ const Methods = {
7188
7569
  const reactData = $xeTable;
7189
7570
  const {
7190
7571
  highlightCurrentRow,
7572
+ highlightCurrentColumn,
7191
7573
  editConfig
7192
7574
  } = props;
7193
7575
  const {
@@ -7204,6 +7586,8 @@ const Methods = {
7204
7586
  const checkboxOpts = $xeTable.computeCheckboxOpts;
7205
7587
  const keyboardOpts = $xeTable.computeKeyboardOpts;
7206
7588
  const rowOpts = $xeTable.computeRowOpts;
7589
+ const columnOpts = $xeTable.computeColumnOpts;
7590
+ const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
7207
7591
  const {
7208
7592
  actived,
7209
7593
  focused
@@ -7234,11 +7618,11 @@ const Methods = {
7234
7618
  if (!triggerCheckbox && !triggerRadio) {
7235
7619
  // 如果是展开行
7236
7620
  if (!triggerExpandNode && (expandOpts.trigger === 'row' || isExpandType && expandOpts.trigger === 'cell')) {
7237
- this.triggerRowExpandEvent(evnt, params);
7621
+ $xeTable.triggerRowExpandEvent(evnt, params);
7238
7622
  }
7239
7623
  // 如果是树形表格
7240
7624
  if (treeOpts.trigger === 'row' || treeNode && treeOpts.trigger === 'cell') {
7241
- this.triggerTreeExpandEvent(evnt, params);
7625
+ $xeTable.triggerTreeExpandEvent(evnt, params);
7242
7626
  }
7243
7627
  }
7244
7628
  // 如果点击了树节点
@@ -7247,16 +7631,22 @@ const Methods = {
7247
7631
  // 如果是高亮行
7248
7632
  if (rowOpts.isCurrent || highlightCurrentRow) {
7249
7633
  if (!triggerCheckbox && !triggerRadio) {
7250
- this.triggerCurrentRowEvent(evnt, params);
7634
+ $xeTable.triggerCurrentRowEvent(evnt, params);
7635
+ }
7636
+ }
7637
+ // 如果是当前列
7638
+ if ((columnOpts.isCurrent || highlightCurrentColumn) && (!currentColumnOpts.trigger || ['cell', 'default'].includes(currentColumnOpts.trigger))) {
7639
+ if (!triggerCheckbox && !triggerRadio) {
7640
+ $xeTable.triggerCurrentColumnEvent(evnt, params);
7251
7641
  }
7252
7642
  }
7253
7643
  // 如果是单选框
7254
7644
  if (!triggerRadio && (radioOpts.trigger === 'row' || isRadioType && radioOpts.trigger === 'cell')) {
7255
- this.triggerRadioRowEvent(evnt, params);
7645
+ $xeTable.triggerRadioRowEvent(evnt, params);
7256
7646
  }
7257
7647
  // 如果是复选框
7258
7648
  if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || isCheckboxType && checkboxOpts.trigger === 'cell')) {
7259
- this.handleToggleCheckRowEvent(evnt, params);
7649
+ $xeTable.handleToggleCheckRowEvent(evnt, params);
7260
7650
  }
7261
7651
  }
7262
7652
  // 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
@@ -7268,14 +7658,14 @@ const Methods = {
7268
7658
  }
7269
7659
  if (editOpts.trigger === 'manual') {
7270
7660
  if (actived.args && actived.row === row && column !== actived.column) {
7271
- this.handleChangeCell(evnt, params);
7661
+ handleChangeCell($xeTable, evnt, params);
7272
7662
  }
7273
7663
  } else if (!actived.args || row !== actived.row || column !== actived.column) {
7274
7664
  if (editOpts.trigger === 'click') {
7275
- this.handleChangeCell(evnt, params);
7665
+ handleChangeCell($xeTable, evnt, params);
7276
7666
  } else if (editOpts.trigger === 'dblclick') {
7277
7667
  if (editOpts.mode === 'row' && actived.row === row) {
7278
- this.handleChangeCell(evnt, params);
7668
+ handleChangeCell($xeTable, evnt, params);
7279
7669
  }
7280
7670
  }
7281
7671
  }
@@ -7295,7 +7685,7 @@ const Methods = {
7295
7685
  }
7296
7686
  }
7297
7687
  }
7298
- this.emitEvent('cell-click', params, evnt);
7688
+ $xeTable.dispatchEvent('cell-click', params, evnt);
7299
7689
  },
7300
7690
  /**
7301
7691
  * 列双击点击事件
@@ -7326,11 +7716,11 @@ const Methods = {
7326
7716
  if ((0, _utils.isEnableConf)(editConfig) && editOpts.trigger === 'dblclick') {
7327
7717
  if (!actived.args || evnt.currentTarget !== actived.args.cell) {
7328
7718
  if (editOpts.mode === 'row') {
7329
- this.checkValidate('blur').catch(e => e).then(() => {
7330
- this.handleEdit(params, evnt).then(() => this.checkValidate('change')).catch(e => e);
7719
+ checkValidate($xeTable, 'blur').catch(e => e).then(() => {
7720
+ this.handleEdit(params, evnt).then(() => checkValidate($xeTable, 'change')).catch(e => e);
7331
7721
  });
7332
7722
  } else if (editOpts.mode === 'cell') {
7333
- this.handleEdit(params, evnt).then(() => this.checkValidate('change')).catch(e => e);
7723
+ this.handleEdit(params, evnt).then(() => checkValidate($xeTable, 'change')).catch(e => e);
7334
7724
  }
7335
7725
  }
7336
7726
  }
@@ -7582,6 +7972,8 @@ const Methods = {
7582
7972
  } = props;
7583
7973
  const rowDragOpts = $xeTable.computeRowDragOpts;
7584
7974
  const {
7975
+ afterFullData,
7976
+ tableFullData,
7585
7977
  fullAllDataRowIdData
7586
7978
  } = internalData;
7587
7979
  const {
@@ -7599,12 +7991,11 @@ const Methods = {
7599
7991
  parentField
7600
7992
  } = treeOpts;
7601
7993
  const childrenField = treeOpts.children || treeOpts.childrenField;
7602
- const {
7603
- afterFullData,
7604
- tableFullData
7605
- } = internalData;
7606
7994
  const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
7607
7995
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
7996
+ const errRest = {
7997
+ status: false
7998
+ };
7608
7999
  if (prevDragRow && dragRow) {
7609
8000
  // 判断是否有拖动
7610
8001
  if (prevDragRow !== dragRow) {
@@ -7619,7 +8010,7 @@ const Methods = {
7619
8010
  const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
7620
8011
  return Promise.resolve(dEndMethod ? dEndMethod(dragParams) : true).then(status => {
7621
8012
  if (!status) {
7622
- return;
8013
+ return errRest;
7623
8014
  }
7624
8015
  let oafIndex = -1;
7625
8016
  let nafIndex = -1;
@@ -7650,11 +8041,11 @@ const Methods = {
7650
8041
  if (isPeerDrag && !isCrossDrag) {
7651
8042
  if (oldRest.row[parentField] !== newRest.row[parentField]) {
7652
8043
  // 非同级
7653
- return;
8044
+ return errRest;
7654
8045
  }
7655
8046
  } else {
7656
8047
  if (!isCrossDrag) {
7657
- return;
8048
+ return errRest;
7658
8049
  }
7659
8050
  if (oldAllMaps[newRowid]) {
7660
8051
  isSelfToChildStatus = true;
@@ -7665,19 +8056,19 @@ const Methods = {
7665
8056
  content: getI18n('vxe.error.treeDragChild')
7666
8057
  });
7667
8058
  }
7668
- return;
8059
+ return errRest;
7669
8060
  }
7670
8061
  }
7671
8062
  }
7672
8063
  } else if (oldLevel) {
7673
8064
  // 子到根
7674
8065
  if (!isCrossDrag) {
7675
- return;
8066
+ return errRest;
7676
8067
  }
7677
8068
  } else if (newLevel) {
7678
8069
  // 根到子
7679
8070
  if (!isCrossDrag) {
7680
- return;
8071
+ return errRest;
7681
8072
  }
7682
8073
  if (oldAllMaps[newRowid]) {
7683
8074
  isSelfToChildStatus = true;
@@ -7688,7 +8079,7 @@ const Methods = {
7688
8079
  content: getI18n('vxe.error.treeDragChild')
7689
8080
  });
7690
8081
  }
7691
- return;
8082
+ return errRest;
7692
8083
  }
7693
8084
  }
7694
8085
  } else {
@@ -7746,26 +8137,34 @@ const Methods = {
7746
8137
  if (reactData.scrollYLoad) {
7747
8138
  $xeTable.updateScrollYSpace();
7748
8139
  }
7749
- $xeTable.$nextTick().then(() => {
8140
+ if (evnt) {
8141
+ $xeTable.dispatchEvent('row-dragend', {
8142
+ oldRow: dragRow,
8143
+ newRow: prevDragRow,
8144
+ dragRow,
8145
+ dragPos: prevDragPos,
8146
+ dragToChild: isDragToChildFlag,
8147
+ offsetIndex: dragOffsetIndex,
8148
+ _index: {
8149
+ newIndex: nafIndex,
8150
+ oldIndex: oafIndex
8151
+ }
8152
+ }, evnt);
8153
+ }
8154
+ return $xeTable.$nextTick().then(() => {
7750
8155
  $xeTable.updateCellAreas();
7751
8156
  $xeTable.recalculate();
8157
+ }).then(() => {
8158
+ return {
8159
+ status: true
8160
+ };
7752
8161
  });
7753
- $xeTable.dispatchEvent('row-dragend', {
7754
- oldRow: dragRow,
7755
- newRow: prevDragRow,
7756
- dragRow,
7757
- dragPos: prevDragPos,
7758
- dragToChild: isDragToChildFlag,
7759
- offsetIndex: dragOffsetIndex,
7760
- _index: {
7761
- newIndex: nafIndex,
7762
- oldIndex: oafIndex
7763
- }
7764
- }, evnt);
7765
- }).catch(() => {});
8162
+ }).catch(() => {
8163
+ return errRest;
8164
+ });
7766
8165
  }
7767
8166
  }
7768
- return Promise.resolve();
8167
+ return Promise.resolve(errRest);
7769
8168
  },
7770
8169
  handleRowDragDragendEvent(evnt) {
7771
8170
  const $xeTable = this;
@@ -7952,6 +8351,9 @@ const Methods = {
7952
8351
  collectColumn
7953
8352
  } = internalData;
7954
8353
  const dragOffsetIndex = prevDragPos === 'right' ? 1 : 0;
8354
+ const errRest = {
8355
+ status: false
8356
+ };
7955
8357
  if (prevDragCol && dragCol) {
7956
8358
  // 判断是否有拖动
7957
8359
  if (prevDragCol !== dragCol) {
@@ -7968,7 +8370,7 @@ const Methods = {
7968
8370
  const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
7969
8371
  return Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then(status => {
7970
8372
  if (!status) {
7971
- return;
8373
+ return errRest;
7972
8374
  }
7973
8375
  let oafIndex = -1;
7974
8376
  let nafIndex = -1;
@@ -7982,11 +8384,11 @@ const Methods = {
7982
8384
  if (isPeerDrag && !isCrossDrag) {
7983
8385
  if (dragColumn.parentId !== newColumn.parentId) {
7984
8386
  // 非同级
7985
- return;
8387
+ return errRest;
7986
8388
  }
7987
8389
  } else {
7988
8390
  if (!isCrossDrag) {
7989
- return;
8391
+ return errRest;
7990
8392
  }
7991
8393
  if (oldAllMaps[newColumn.id]) {
7992
8394
  isSelfToChildStatus = true;
@@ -7997,19 +8399,19 @@ const Methods = {
7997
8399
  content: getI18n('vxe.error.treeDragChild')
7998
8400
  });
7999
8401
  }
8000
- return;
8402
+ return errRest;
8001
8403
  }
8002
8404
  }
8003
8405
  }
8004
8406
  } else if (dragColumn.parentId) {
8005
8407
  // 子到根
8006
8408
  if (!isCrossDrag) {
8007
- return;
8409
+ return errRest;
8008
8410
  }
8009
8411
  } else if (newColumn.parentId) {
8010
8412
  // 根到子
8011
8413
  if (!isCrossDrag) {
8012
- return;
8414
+ return errRest;
8013
8415
  }
8014
8416
  if (oldAllMaps[newColumn.id]) {
8015
8417
  isSelfToChildStatus = true;
@@ -8020,7 +8422,7 @@ const Methods = {
8020
8422
  content: getI18n('vxe.error.treeDragChild')
8021
8423
  });
8022
8424
  }
8023
- return;
8425
+ return errRest;
8024
8426
  }
8025
8427
  }
8026
8428
  } else {
@@ -8089,25 +8491,32 @@ const Methods = {
8089
8491
  $xeTable.clearCopyCellArea();
8090
8492
  }
8091
8493
  }
8092
- $xeTable.dispatchEvent('column-dragend', {
8093
- oldColumn: dragColumn,
8094
- newColumn,
8095
- dragColumn,
8096
- dragPos: prevDragPos,
8097
- dragToChild: isDragToChildFlag,
8098
- offsetIndex: dragOffsetIndex,
8099
- _index: {
8100
- newIndex: nafIndex,
8101
- oldIndex: oafIndex
8102
- }
8103
- }, evnt);
8494
+ if (evnt) {
8495
+ $xeTable.dispatchEvent('column-dragend', {
8496
+ oldColumn: dragColumn,
8497
+ newColumn,
8498
+ dragColumn,
8499
+ dragPos: prevDragPos,
8500
+ dragToChild: isDragToChildFlag,
8501
+ offsetIndex: dragOffsetIndex,
8502
+ _index: {
8503
+ newIndex: nafIndex,
8504
+ oldIndex: oafIndex
8505
+ }
8506
+ }, evnt);
8507
+ }
8104
8508
  if (isSyncColumn) {
8105
8509
  $xeTable.handleColDragSwapColumn();
8106
8510
  }
8107
- }).catch(() => {});
8511
+ return {
8512
+ status: true
8513
+ };
8514
+ }).catch(() => {
8515
+ return errRest;
8516
+ });
8108
8517
  }
8109
8518
  }
8110
- return Promise.resolve();
8519
+ return Promise.resolve(errRest);
8111
8520
  },
8112
8521
  handleHeaderCellDragDragendEvent(evnt) {
8113
8522
  const $xeTable = this;
@@ -8249,46 +8658,58 @@ const Methods = {
8249
8658
  setPendingRow(rows, status) {
8250
8659
  const $xeTable = this;
8251
8660
  const reactData = $xeTable;
8252
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps);
8661
+ const internalData = $xeTable;
8662
+ const {
8663
+ handleGetRowId
8664
+ } = (0, _util.createHandleGetRowId)($xeTable);
8665
+ const {
8666
+ pendingRowMaps
8667
+ } = internalData;
8253
8668
  if (rows && !_xeUtils.default.isArray(rows)) {
8254
8669
  rows = [rows];
8255
8670
  }
8256
8671
  if (status) {
8257
8672
  rows.forEach(row => {
8258
- const rowid = (0, _util.getRowid)($xeTable, row);
8259
- if (rowid && !pendingMaps[rowid]) {
8260
- pendingMaps[rowid] = row;
8673
+ const rowid = handleGetRowId(row);
8674
+ if (rowid && !pendingRowMaps[rowid]) {
8675
+ pendingRowMaps[rowid] = row;
8261
8676
  }
8262
8677
  });
8263
8678
  } else {
8264
8679
  rows.forEach(row => {
8265
- const rowid = (0, _util.getRowid)($xeTable, row);
8266
- if (rowid && pendingMaps[rowid]) {
8267
- delete pendingMaps[rowid];
8680
+ const rowid = handleGetRowId(row);
8681
+ if (rowid && pendingRowMaps[rowid]) {
8682
+ delete pendingRowMaps[rowid];
8268
8683
  }
8269
8684
  });
8270
8685
  }
8271
- reactData.pendingRowMaps = pendingMaps;
8686
+ reactData.pendingRowFlag++;
8272
8687
  return $xeTable.$nextTick();
8273
8688
  },
8274
8689
  togglePendingRow(rows) {
8275
8690
  const $xeTable = this;
8276
8691
  const reactData = $xeTable;
8277
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps);
8692
+ const internalData = $xeTable;
8693
+ const {
8694
+ handleGetRowId
8695
+ } = (0, _util.createHandleGetRowId)($xeTable);
8696
+ const {
8697
+ pendingRowMaps
8698
+ } = internalData;
8278
8699
  if (rows && !_xeUtils.default.isArray(rows)) {
8279
8700
  rows = [rows];
8280
8701
  }
8281
8702
  rows.forEach(row => {
8282
- const rowid = (0, _util.getRowid)($xeTable, row);
8703
+ const rowid = handleGetRowId(row);
8283
8704
  if (rowid) {
8284
- if (pendingMaps[rowid]) {
8285
- delete pendingMaps[rowid];
8705
+ if (pendingRowMaps[rowid]) {
8706
+ delete pendingRowMaps[rowid];
8286
8707
  } else {
8287
- pendingMaps[rowid] = row;
8708
+ pendingRowMaps[rowid] = row;
8288
8709
  }
8289
8710
  }
8290
8711
  });
8291
- reactData.pendingRowMaps = pendingMaps;
8712
+ reactData.pendingRowFlag++;
8292
8713
  return $xeTable.$nextTick();
8293
8714
  },
8294
8715
  hasPendingByRow(row) {
@@ -8306,13 +8727,10 @@ const Methods = {
8306
8727
  },
8307
8728
  getPendingRecords() {
8308
8729
  const $xeTable = this;
8309
- const reactData = $xeTable;
8310
8730
  const internalData = $xeTable;
8311
8731
  const {
8732
+ fullAllDataRowIdData,
8312
8733
  pendingRowMaps
8313
- } = reactData;
8314
- const {
8315
- fullAllDataRowIdData
8316
8734
  } = internalData;
8317
8735
  const insertRecords = [];
8318
8736
  _xeUtils.default.each(pendingRowMaps, (row, rowid) => {
@@ -8323,8 +8741,12 @@ const Methods = {
8323
8741
  return insertRecords;
8324
8742
  },
8325
8743
  clearPendingRow() {
8326
- this.pendingRowMaps = {};
8327
- return this.$nextTick();
8744
+ const $xeTable = this;
8745
+ const reactData = $xeTable;
8746
+ const internalData = $xeTable;
8747
+ internalData.pendingRowMaps = {};
8748
+ reactData.pendingRowFlag++;
8749
+ return $xeTable.$nextTick();
8328
8750
  },
8329
8751
  sort(sortConfs, sortOrder) {
8330
8752
  const $xeTable = this;
@@ -8505,9 +8927,11 @@ const Methods = {
8505
8927
  * @param {Event} evnt 事件
8506
8928
  */
8507
8929
  closeFilter() {
8930
+ const $xeTable = this;
8931
+ const reactData = $xeTable;
8508
8932
  const {
8509
8933
  filterStore
8510
- } = this;
8934
+ } = reactData;
8511
8935
  const {
8512
8936
  column,
8513
8937
  visible
@@ -8519,15 +8943,15 @@ const Methods = {
8519
8943
  visible: false
8520
8944
  });
8521
8945
  if (visible) {
8522
- this.emitEvent('filter-visible', {
8946
+ $xeTable.dispatchEvent('filter-visible', {
8523
8947
  column,
8524
8948
  field: column.field,
8525
8949
  property: column.field,
8526
- filterList: this.getCheckedFilters(),
8950
+ filterList: () => $xeTable.getCheckedFilters(),
8527
8951
  visible: false
8528
8952
  }, null);
8529
8953
  }
8530
- return this.$nextTick();
8954
+ return $xeTable.$nextTick();
8531
8955
  },
8532
8956
  /**
8533
8957
  * 判断指定列是否为筛选状态,如果为空则判断所有列
@@ -8560,9 +8984,9 @@ const Methods = {
8560
8984
  const $xeTable = this;
8561
8985
  const reactData = $xeTable;
8562
8986
  const internalData = $xeTable;
8563
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
8564
8987
  const {
8565
- fullAllDataRowIdData
8988
+ fullAllDataRowIdData,
8989
+ rowExpandLazyLoadedMaps
8566
8990
  } = internalData;
8567
8991
  const expandOpts = $xeTable.computeExpandOpts;
8568
8992
  const {
@@ -8572,9 +8996,9 @@ const Methods = {
8572
8996
  const rowRest = fullAllDataRowIdData[rowid];
8573
8997
  if (lazy && rowRest) {
8574
8998
  rowRest.expandLoaded = false;
8575
- delete rExpandLazyLoadedMaps[rowid];
8999
+ delete rowExpandLazyLoadedMaps[rowid];
8576
9000
  }
8577
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
9001
+ reactData.rowExpandedFlag++;
8578
9002
  return $xeTable.$nextTick();
8579
9003
  },
8580
9004
  /**
@@ -8582,18 +9006,20 @@ const Methods = {
8582
9006
  * @param {Row} row 行对象
8583
9007
  */
8584
9008
  reloadRowExpand(row) {
9009
+ const $xeTable = this;
9010
+ const internalData = $xeTable;
8585
9011
  const {
8586
- expandOpts,
8587
9012
  rowExpandLazyLoadedMaps
8588
- } = this;
9013
+ } = internalData;
9014
+ const expandOpts = $xeTable.computeExpandOpts;
8589
9015
  const {
8590
9016
  lazy
8591
9017
  } = expandOpts;
8592
9018
  const rowid = (0, _util.getRowid)(this, row);
8593
9019
  if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
8594
- this.clearRowExpandLoaded(row).then(() => this.handleAsyncRowExpand(row));
9020
+ $xeTable.clearRowExpandLoaded(row).then(() => handleAsyncRowExpand($xeTable, row));
8595
9021
  }
8596
- return this.$nextTick();
9022
+ return $xeTable.$nextTick();
8597
9023
  },
8598
9024
  reloadExpandContent(row) {
8599
9025
  if (process.env.NODE_ENV === 'development') {
@@ -8606,11 +9032,16 @@ const Methods = {
8606
9032
  * 展开行事件
8607
9033
  */
8608
9034
  triggerRowExpandEvent(evnt, params) {
9035
+ const $xeTable = this;
9036
+ const reactData = $xeTable;
9037
+ const internalData = $xeTable;
8609
9038
  const {
8610
- expandOpts,
8611
- rowExpandLazyLoadedMaps,
8612
9039
  expandColumn: column
8613
- } = this;
9040
+ } = reactData;
9041
+ const {
9042
+ rowExpandLazyLoadedMaps
9043
+ } = internalData;
9044
+ const expandOpts = $xeTable.computeExpandOpts;
8614
9045
  const {
8615
9046
  row
8616
9047
  } = params;
@@ -8622,20 +9053,20 @@ const Methods = {
8622
9053
  return;
8623
9054
  }
8624
9055
  evnt.stopPropagation();
8625
- const rowid = (0, _util.getRowid)(this, row);
9056
+ const rowid = (0, _util.getRowid)($xeTable, row);
8626
9057
  if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
8627
- const expanded = !this.isRowExpandByRow(row);
8628
- const columnIndex = this.getColumnIndex(column);
8629
- const $columnIndex = this.getVMColumnIndex(column);
8630
- this.setRowExpand(row, expanded);
8631
- this.emitEvent('toggle-row-expand', {
9058
+ const expanded = !$xeTable.isRowExpandByRow(row);
9059
+ const columnIndex = $xeTable.getColumnIndex(column);
9060
+ const $columnIndex = $xeTable.getVMColumnIndex(column);
9061
+ $xeTable.setRowExpand(row, expanded);
9062
+ $xeTable.dispatchEvent('toggle-row-expand', {
8632
9063
  expanded,
8633
9064
  column,
8634
9065
  columnIndex,
8635
9066
  $columnIndex,
8636
9067
  row,
8637
- rowIndex: this.getRowIndex(row),
8638
- $rowIndex: this.getVMRowIndex(row)
9068
+ rowIndex: $xeTable.getRowIndex(row),
9069
+ $rowIndex: $xeTable.getVMRowIndex(row)
8639
9070
  }, evnt);
8640
9071
  }
8641
9072
  },
@@ -8693,55 +9124,6 @@ const Methods = {
8693
9124
  }
8694
9125
  return this.setRowExpand(expandedRows, expanded);
8695
9126
  },
8696
- handleAsyncRowExpand(row) {
8697
- const $xeTable = this;
8698
- const reactData = $xeTable;
8699
- const internalData = $xeTable;
8700
- return new Promise(resolve => {
8701
- const {
8702
- expandOpts
8703
- } = this;
8704
- const {
8705
- loadMethod
8706
- } = expandOpts;
8707
- if (loadMethod) {
8708
- const {
8709
- fullAllDataRowIdData
8710
- } = internalData;
8711
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
8712
- const rowid = (0, _util.getRowid)($xeTable, row);
8713
- const rowRest = fullAllDataRowIdData[rowid];
8714
- rExpandLazyLoadedMaps[rowid] = row;
8715
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
8716
- loadMethod({
8717
- $table: $xeTable,
8718
- row,
8719
- rowIndex: $xeTable.getRowIndex(row),
8720
- $rowIndex: $xeTable.getVMRowIndex(row)
8721
- }).then(() => {
8722
- const rExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
8723
- if (rowRest) {
8724
- rowRest.expandLoaded = true;
8725
- }
8726
- rExpandedMaps[rowid] = row;
8727
- reactData.rowExpandedMaps = rExpandedMaps;
8728
- }).catch(() => {
8729
- if (rowRest) {
8730
- rowRest.expandLoaded = false;
8731
- }
8732
- }).finally(() => {
8733
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
8734
- if (rExpandLazyLoadedMaps[rowid]) {
8735
- delete rExpandLazyLoadedMaps[rowid];
8736
- }
8737
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
8738
- $xeTable.$nextTick().then(() => $xeTable.recalculate()).then(() => $xeTable.updateCellAreas()).then(() => resolve());
8739
- });
8740
- } else {
8741
- resolve();
8742
- }
8743
- });
8744
- },
8745
9127
  /**
8746
9128
  * 设置展开行,二个参数设置这一行展开与否
8747
9129
  * 支持单行
@@ -8751,14 +9133,20 @@ const Methods = {
8751
9133
  */
8752
9134
  setRowExpand(rows, expanded) {
8753
9135
  const $xeTable = this;
9136
+ const reactData = $xeTable;
9137
+ const internalData = $xeTable;
8754
9138
  const {
8755
- rowExpandedMaps,
8756
- fullAllDataRowIdData,
8757
- rowExpandLazyLoadedMaps,
8758
- expandOpts,
8759
9139
  expandColumn
8760
- } = this;
8761
- let rExpandedMaps = Object.assign({}, rowExpandedMaps);
9140
+ } = reactData;
9141
+ let {
9142
+ fullAllDataRowIdData,
9143
+ rowExpandedMaps,
9144
+ rowExpandLazyLoadedMaps
9145
+ } = internalData;
9146
+ const {
9147
+ handleGetRowId
9148
+ } = (0, _util.createHandleGetRowId)($xeTable);
9149
+ const expandOpts = $xeTable.computeExpandOpts;
8762
9150
  const {
8763
9151
  reserve,
8764
9152
  lazy,
@@ -8774,10 +9162,12 @@ const Methods = {
8774
9162
  }
8775
9163
  if (accordion) {
8776
9164
  // 只能同时展开一个
8777
- rExpandedMaps = {};
9165
+ rowExpandedMaps = {};
9166
+ internalData.rowExpandedMaps = rowExpandedMaps;
8778
9167
  rows = rows.slice(rows.length - 1, rows.length);
8779
9168
  }
8780
9169
  const validRows = toggleMethod ? rows.filter(row => toggleMethod({
9170
+ $table: $xeTable,
8781
9171
  expanded,
8782
9172
  column: expandColumn,
8783
9173
  columnIndex,
@@ -8788,22 +9178,22 @@ const Methods = {
8788
9178
  })) : rows;
8789
9179
  if (expanded) {
8790
9180
  validRows.forEach(row => {
8791
- const rowid = (0, _util.getRowid)(this, row);
8792
- if (!rExpandedMaps[rowid]) {
9181
+ const rowid = handleGetRowId(row);
9182
+ if (!rowExpandedMaps[rowid]) {
8793
9183
  const rowRest = fullAllDataRowIdData[rowid];
8794
9184
  const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
8795
9185
  if (isLoad) {
8796
- lazyRests.push(this.handleAsyncRowExpand(row));
9186
+ lazyRests.push(handleAsyncRowExpand($xeTable, row));
8797
9187
  } else {
8798
- rExpandedMaps[rowid] = row;
9188
+ rowExpandedMaps[rowid] = row;
8799
9189
  }
8800
9190
  }
8801
9191
  });
8802
9192
  } else {
8803
9193
  validRows.forEach(item => {
8804
- const rowid = (0, _util.getRowid)(this, item);
8805
- if (rExpandedMaps[rowid]) {
8806
- delete rExpandedMaps[rowid];
9194
+ const rowid = handleGetRowId(item);
9195
+ if (rowExpandedMaps[rowid]) {
9196
+ delete rowExpandedMaps[rowid];
8807
9197
  }
8808
9198
  });
8809
9199
  }
@@ -8811,7 +9201,7 @@ const Methods = {
8811
9201
  validRows.forEach(row => handleRowExpandReserve($xeTable, row, expanded));
8812
9202
  }
8813
9203
  }
8814
- this.rowExpandedMaps = rExpandedMaps;
9204
+ reactData.rowExpandedFlag++;
8815
9205
  return Promise.all(lazyRests).then(() => $xeTable.$nextTick()).then(() => $xeTable.recalculate(true)).then(() => {
8816
9206
  updateRowOffsetTop($xeTable);
8817
9207
  updateRowExpandStyle($xeTable);
@@ -8824,11 +9214,17 @@ const Methods = {
8824
9214
  * @param {Row} row 行对象
8825
9215
  */
8826
9216
  isRowExpandByRow(row) {
9217
+ const $xeTable = this;
9218
+ const reactData = $xeTable;
9219
+ const internalData = $xeTable;
9220
+ const {
9221
+ rowExpandedFlag
9222
+ } = reactData;
8827
9223
  const {
8828
9224
  rowExpandedMaps
8829
- } = this;
9225
+ } = internalData;
8830
9226
  const rowid = (0, _util.getRowid)(this, row);
8831
- return !!rowExpandedMaps[rowid];
9227
+ return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
8832
9228
  },
8833
9229
  isExpandByRow(row) {
8834
9230
  if (process.env.NODE_ENV === 'development') {
@@ -8852,7 +9248,8 @@ const Methods = {
8852
9248
  reserve
8853
9249
  } = expandOpts;
8854
9250
  const expList = $xeTable.getRowExpandRecords();
8855
- reactData.rowExpandedMaps = {};
9251
+ internalData.rowExpandedMaps = {};
9252
+ reactData.rowExpandedFlag++;
8856
9253
  if (reserve) {
8857
9254
  tableFullData.forEach(row => handleRowExpandReserve($xeTable, row, false));
8858
9255
  }
@@ -8872,8 +9269,10 @@ const Methods = {
8872
9269
  return this.$nextTick();
8873
9270
  },
8874
9271
  getRowExpandRecords() {
9272
+ const $xeTable = this;
9273
+ const internalData = $xeTable;
8875
9274
  const rest = [];
8876
- _xeUtils.default.each(this.rowExpandedMaps, item => {
9275
+ _xeUtils.default.each(internalData.rowExpandedMaps, item => {
8877
9276
  if (item) {
8878
9277
  rest.push(item);
8879
9278
  }
@@ -8881,8 +9280,10 @@ const Methods = {
8881
9280
  return rest;
8882
9281
  },
8883
9282
  getTreeExpandRecords() {
9283
+ const $xeTable = this;
9284
+ const internalData = $xeTable;
8884
9285
  const rest = [];
8885
- _xeUtils.default.each(this.treeExpandedMaps, item => {
9286
+ _xeUtils.default.each(internalData.treeExpandedMaps, item => {
8886
9287
  if (item) {
8887
9288
  rest.push(item);
8888
9289
  }
@@ -8918,15 +9319,14 @@ const Methods = {
8918
9319
  const reactData = $xeTable;
8919
9320
  const internalData = $xeTable;
8920
9321
  const {
8921
- fullAllDataRowIdData
9322
+ fullAllDataRowIdData,
9323
+ treeExpandedMaps
8922
9324
  } = internalData;
8923
9325
  const treeOpts = $xeTable.computeTreeOpts;
8924
9326
  const {
8925
9327
  transform
8926
9328
  } = treeOpts;
8927
- let tExpandedMaps = {};
8928
9329
  if (rows) {
8929
- tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
8930
9330
  if (!_xeUtils.default.isArray(rows)) {
8931
9331
  rows = [rows];
8932
9332
  }
@@ -8935,8 +9335,8 @@ const Methods = {
8935
9335
  const rowRest = fullAllDataRowIdData[rowid];
8936
9336
  if (rowRest) {
8937
9337
  rowRest.treeLoaded = false;
8938
- if (tExpandedMaps[rowid]) {
8939
- delete tExpandedMaps[rowid];
9338
+ if (treeExpandedMaps[rowid]) {
9339
+ delete treeExpandedMaps[rowid];
8940
9340
  }
8941
9341
  }
8942
9342
  });
@@ -8945,7 +9345,8 @@ const Methods = {
8945
9345
  rowRest.treeLoaded = false;
8946
9346
  });
8947
9347
  }
8948
- reactData.treeExpandedMaps = {};
9348
+ internalData.treeExpandedMaps = {};
9349
+ reactData.treeExpandedFlag++;
8949
9350
  if (transform) {
8950
9351
  handleVirtualTreeToList($xeTable);
8951
9352
  return $xeTable.handleTableData();
@@ -8958,45 +9359,49 @@ const Methods = {
8958
9359
  */
8959
9360
  reloadTreeExpand(row) {
8960
9361
  const $xeTable = this;
9362
+ const internalData = $xeTable;
8961
9363
  const {
8962
- treeOpts,
8963
9364
  treeExpandLazyLoadedMaps
8964
- } = this;
9365
+ } = internalData;
9366
+ const treeOpts = $xeTable.computeTreeOpts;
8965
9367
  const {
8966
9368
  transform,
8967
9369
  lazy
8968
9370
  } = treeOpts;
8969
9371
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
8970
- const rowid = (0, _util.getRowid)(this, row);
9372
+ const rowid = (0, _util.getRowid)($xeTable, row);
8971
9373
  if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
8972
- return this.clearTreeExpandLoaded(row).then(() => {
8973
- return this.handleAsyncTreeExpandChilds(row);
9374
+ return $xeTable.clearTreeExpandLoaded(row).then(() => {
9375
+ return handleAsyncTreeExpandChilds($xeTable, row);
8974
9376
  }).then(() => {
8975
9377
  if (transform) {
8976
9378
  handleVirtualTreeToList($xeTable);
8977
- return this.handleTableData();
9379
+ return $xeTable.handleTableData();
8978
9380
  }
8979
9381
  }).then(() => {
8980
- return this.recalculate();
9382
+ return $xeTable.recalculate();
8981
9383
  });
8982
9384
  }
8983
- return this.$nextTick();
9385
+ return $xeTable.$nextTick();
8984
9386
  },
8985
9387
  reloadTreeChilds(row) {
9388
+ const $xeTable = this;
8986
9389
  if (process.env.NODE_ENV === 'development') {
8987
9390
  (0, _log.warnLog)('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand']);
8988
9391
  }
8989
9392
  // 即将废弃
8990
- return this.reloadTreeExpand(row);
9393
+ return $xeTable.reloadTreeExpand(row);
8991
9394
  },
8992
9395
  /**
8993
9396
  * 展开树节点事件
8994
9397
  */
8995
9398
  triggerTreeExpandEvent(evnt, params) {
9399
+ const $xeTable = this;
9400
+ const internalData = $xeTable;
8996
9401
  const {
8997
- treeOpts,
8998
9402
  treeExpandLazyLoadedMaps
8999
- } = this;
9403
+ } = internalData;
9404
+ const treeOpts = $xeTable.computeTreeOpts;
9000
9405
  const {
9001
9406
  row,
9002
9407
  column
@@ -9011,11 +9416,11 @@ const Methods = {
9011
9416
  evnt.stopPropagation();
9012
9417
  const rowid = (0, _util.getRowid)(this, row);
9013
9418
  if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
9014
- const expanded = !this.isTreeExpandByRow(row);
9015
- const columnIndex = this.getColumnIndex(column);
9016
- const $columnIndex = this.getVMColumnIndex(column);
9017
- this.setTreeExpand(row, expanded);
9018
- this.emitEvent('toggle-tree-expand', {
9419
+ const expanded = !$xeTable.isTreeExpandByRow(row);
9420
+ const columnIndex = $xeTable.getColumnIndex(column);
9421
+ const $columnIndex = $xeTable.getVMColumnIndex(column);
9422
+ $xeTable.setTreeExpand(row, expanded);
9423
+ $xeTable.dispatchEvent('toggle-tree-expand', {
9019
9424
  expanded,
9020
9425
  column,
9021
9426
  columnIndex,
@@ -9030,112 +9435,6 @@ const Methods = {
9030
9435
  toggleTreeExpand(row) {
9031
9436
  return this.setTreeExpand(row, !this.isTreeExpandByRow(row));
9032
9437
  },
9033
- /**
9034
- * 处理默认展开树节点
9035
- */
9036
- handleDefaultTreeExpand() {
9037
- const {
9038
- treeConfig,
9039
- treeOpts,
9040
- tableFullData
9041
- } = this;
9042
- if (treeConfig) {
9043
- const {
9044
- expandAll,
9045
- expandRowKeys
9046
- } = treeOpts;
9047
- const childrenField = treeOpts.children || treeOpts.childrenField;
9048
- if (expandAll) {
9049
- this.setAllTreeExpand(true);
9050
- } else if (expandRowKeys) {
9051
- const defExpandeds = [];
9052
- const rowkey = (0, _util.getRowkey)(this);
9053
- expandRowKeys.forEach(rowid => {
9054
- const matchObj = _xeUtils.default.findTree(tableFullData, item => rowid === _xeUtils.default.get(item, rowkey), {
9055
- children: childrenField
9056
- });
9057
- if (matchObj) {
9058
- defExpandeds.push(matchObj.item);
9059
- }
9060
- });
9061
- this.setTreeExpand(defExpandeds, true);
9062
- }
9063
- }
9064
- },
9065
- handleAsyncTreeExpandChilds(row) {
9066
- const $xeTable = this;
9067
- const {
9068
- treeOpts,
9069
- checkboxOpts
9070
- } = this;
9071
- const {
9072
- transform,
9073
- loadMethod
9074
- } = treeOpts;
9075
- const {
9076
- checkStrictly
9077
- } = checkboxOpts;
9078
- return new Promise(resolve => {
9079
- if (loadMethod) {
9080
- const {
9081
- treeExpandLazyLoadedMaps,
9082
- fullAllDataRowIdData
9083
- } = this;
9084
- const rowid = (0, _util.getRowid)($xeTable, row);
9085
- const rowRest = fullAllDataRowIdData[rowid];
9086
- treeExpandLazyLoadedMaps[rowid] = row;
9087
- Promise.resolve(loadMethod({
9088
- $table: $xeTable,
9089
- row
9090
- })).then(childRecords => {
9091
- if (rowRest) {
9092
- rowRest.treeLoaded = true;
9093
- }
9094
- if (treeExpandLazyLoadedMaps[rowid]) {
9095
- delete treeExpandLazyLoadedMaps[rowid];
9096
- }
9097
- if (!_xeUtils.default.isArray(childRecords)) {
9098
- childRecords = [];
9099
- }
9100
- if (childRecords) {
9101
- return this.loadTreeChildren(row, childRecords).then(childRows => {
9102
- const {
9103
- treeExpandedMaps
9104
- } = this;
9105
- if (childRows.length && !treeExpandedMaps[rowid]) {
9106
- treeExpandedMaps[rowid] = row;
9107
- }
9108
- // 如果当前节点已选中,则展开后子节点也被选中
9109
- if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
9110
- handleCheckedCheckboxRow($xeTable, childRows, true);
9111
- }
9112
- return this.$nextTick().then(() => {
9113
- if (transform) {
9114
- this.handleTableData();
9115
- updateAfterDataIndex($xeTable);
9116
- return this.$nextTick();
9117
- }
9118
- });
9119
- });
9120
- }
9121
- }).catch(() => {
9122
- const {
9123
- treeExpandLazyLoadedMaps
9124
- } = this;
9125
- if (rowRest) {
9126
- rowRest.treeLoaded = false;
9127
- }
9128
- if (treeExpandLazyLoadedMaps[rowid]) {
9129
- delete treeExpandLazyLoadedMaps[rowid];
9130
- }
9131
- }).finally(() => {
9132
- this.$nextTick().then(() => this.recalculate()).then(() => resolve());
9133
- });
9134
- } else {
9135
- resolve();
9136
- }
9137
- });
9138
- },
9139
9438
  /**
9140
9439
  * 设置所有树节点的展开与否
9141
9440
  * @param {Boolean} expanded 是否展开
@@ -9167,27 +9466,35 @@ const Methods = {
9167
9466
  * @returns
9168
9467
  */
9169
9468
  handleBaseTreeExpand(rows, expanded) {
9469
+ const $xeTable = this;
9470
+ const reactData = $xeTable;
9471
+ const internalData = $xeTable;
9472
+ const {
9473
+ treeNodeColumn
9474
+ } = reactData;
9170
9475
  const {
9171
9476
  fullAllDataRowIdData,
9172
9477
  tableFullData,
9173
9478
  treeExpandedMaps,
9174
- treeOpts,
9175
- treeExpandLazyLoadedMaps,
9176
- treeNodeColumn
9177
- } = this;
9479
+ treeExpandLazyLoadedMaps
9480
+ } = internalData;
9481
+ const treeOpts = $xeTable.computeTreeOpts;
9178
9482
  const {
9179
9483
  reserve,
9180
9484
  lazy,
9181
9485
  accordion,
9182
9486
  toggleMethod
9183
9487
  } = treeOpts;
9184
- const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
9185
9488
  const childrenField = treeOpts.children || treeOpts.childrenField;
9186
9489
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
9187
9490
  const result = [];
9188
- const columnIndex = this.getColumnIndex(treeNodeColumn);
9189
- const $columnIndex = this.getVMColumnIndex(treeNodeColumn);
9491
+ const columnIndex = $xeTable.getColumnIndex(treeNodeColumn);
9492
+ const $columnIndex = $xeTable.getVMColumnIndex(treeNodeColumn);
9493
+ const {
9494
+ handleGetRowId
9495
+ } = (0, _util.createHandleGetRowId)($xeTable);
9190
9496
  let validRows = toggleMethod ? rows.filter(row => toggleMethod({
9497
+ $table: $xeTable,
9191
9498
  expanded,
9192
9499
  column: treeNodeColumn,
9193
9500
  columnIndex,
@@ -9202,26 +9509,26 @@ const Methods = {
9202
9509
  });
9203
9510
  if (matchObj) {
9204
9511
  matchObj.items.forEach(item => {
9205
- const rowid = (0, _util.getRowid)(this, item);
9206
- if (treeTempExpandedMaps[rowid]) {
9207
- delete treeTempExpandedMaps[rowid];
9512
+ const rowid = handleGetRowId(item);
9513
+ if (treeExpandedMaps[rowid]) {
9514
+ delete treeExpandedMaps[rowid];
9208
9515
  }
9209
9516
  });
9210
9517
  }
9211
9518
  }
9212
9519
  if (expanded) {
9213
9520
  validRows.forEach(row => {
9214
- const rowid = (0, _util.getRowid)(this, row);
9215
- if (!treeTempExpandedMaps[rowid]) {
9521
+ const rowid = handleGetRowId(row);
9522
+ if (!treeExpandedMaps[rowid]) {
9216
9523
  const rowRest = fullAllDataRowIdData[rowid];
9217
9524
  if (rowRest) {
9218
9525
  const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
9219
9526
  // 是否使用懒加载
9220
9527
  if (isLoad) {
9221
- result.push(this.handleAsyncTreeExpandChilds(row));
9528
+ result.push(handleAsyncTreeExpandChilds($xeTable, row));
9222
9529
  } else {
9223
9530
  if (row[childrenField] && row[childrenField].length) {
9224
- treeTempExpandedMaps[rowid] = row;
9531
+ treeExpandedMaps[rowid] = row;
9225
9532
  }
9226
9533
  }
9227
9534
  }
@@ -9229,18 +9536,18 @@ const Methods = {
9229
9536
  });
9230
9537
  } else {
9231
9538
  validRows.forEach(item => {
9232
- const rowid = (0, _util.getRowid)(this, item);
9233
- if (treeTempExpandedMaps[rowid]) {
9234
- delete treeTempExpandedMaps[rowid];
9539
+ const rowid = handleGetRowId(item);
9540
+ if (treeExpandedMaps[rowid]) {
9541
+ delete treeExpandedMaps[rowid];
9235
9542
  }
9236
9543
  });
9237
9544
  }
9238
9545
  if (reserve) {
9239
- validRows.forEach(row => this.handleTreeExpandReserve(row, expanded));
9546
+ validRows.forEach(row => handleTreeExpandReserve($xeTable, row, expanded));
9240
9547
  }
9241
- this.treeExpandedMaps = treeTempExpandedMaps;
9548
+ reactData.treeExpandedFlag++;
9242
9549
  return Promise.all(result).then(() => {
9243
- return this.recalculate();
9550
+ return $xeTable.recalculate();
9244
9551
  });
9245
9552
  },
9246
9553
  /**
@@ -9297,40 +9604,49 @@ const Methods = {
9297
9604
  * @param {Row} row 行对象
9298
9605
  */
9299
9606
  isTreeExpandByRow(row) {
9607
+ const $xeTable = this;
9608
+ const reactData = $xeTable;
9609
+ const internalData = $xeTable;
9610
+ const {
9611
+ treeExpandedFlag
9612
+ } = reactData;
9300
9613
  const {
9301
9614
  treeExpandedMaps
9302
- } = this;
9303
- return !!treeExpandedMaps[(0, _util.getRowid)(this, row)];
9615
+ } = internalData;
9616
+ return !!treeExpandedFlag && !!treeExpandedMaps[(0, _util.getRowid)($xeTable, row)];
9304
9617
  },
9305
9618
  /**
9306
9619
  * 手动清空树形节点的展开状态,数据会恢复成未展开的状态
9307
9620
  */
9308
9621
  clearTreeExpand() {
9309
9622
  const $xeTable = this;
9623
+ const reactData = $xeTable;
9624
+ const internalData = $xeTable;
9310
9625
  const {
9311
- treeOpts,
9312
- tableFullData
9313
- } = this;
9626
+ tableFullTreeData
9627
+ } = internalData;
9628
+ const treeOpts = $xeTable.computeTreeOpts;
9629
+ const childrenField = treeOpts.children || treeOpts.childrenField;
9314
9630
  const {
9315
9631
  transform,
9316
9632
  reserve
9317
9633
  } = treeOpts;
9318
- const childrenField = treeOpts.children || treeOpts.childrenField;
9319
- const expList = this.getTreeExpandRecords();
9320
- this.treeExpandedMaps = {};
9634
+ const expList = $xeTable.getTreeExpandRecords();
9635
+ internalData.treeExpandedMaps = {};
9636
+ reactData.treeExpandedFlag++;
9321
9637
  if (reserve) {
9322
- _xeUtils.default.eachTree(tableFullData, row => this.handleTreeExpandReserve(row, false), {
9638
+ _xeUtils.default.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), {
9323
9639
  children: childrenField
9324
9640
  });
9325
9641
  }
9326
- return this.handleTableData().then(() => {
9642
+ return $xeTable.handleTableData().then(() => {
9327
9643
  if (transform) {
9328
9644
  handleVirtualTreeToList($xeTable);
9329
- return this.handleTableData();
9645
+ return $xeTable.handleTableData();
9330
9646
  }
9331
9647
  }).then(() => {
9332
9648
  if (expList.length) {
9333
- this.recalculate();
9649
+ $xeTable.recalculate();
9334
9650
  }
9335
9651
  });
9336
9652
  },
@@ -9338,20 +9654,6 @@ const Methods = {
9338
9654
  this.treeExpandedReserveRowMap = {};
9339
9655
  return this.$nextTick();
9340
9656
  },
9341
- handleTreeExpandReserve(row, expanded) {
9342
- const {
9343
- treeExpandedReserveRowMap,
9344
- treeOpts
9345
- } = this;
9346
- if (treeOpts.reserve) {
9347
- const rowid = (0, _util.getRowid)(this, row);
9348
- if (expanded) {
9349
- treeExpandedReserveRowMap[rowid] = row;
9350
- } else if (treeExpandedReserveRowMap[rowid]) {
9351
- delete treeExpandedReserveRowMap[rowid];
9352
- }
9353
- }
9354
- },
9355
9657
  /**
9356
9658
  * 获取表格的滚动状态
9357
9659
  */
@@ -9717,11 +10019,12 @@ const Methods = {
9717
10019
  } = tableProps;
9718
10020
  const {
9719
10021
  scrollXLoad,
9720
- scrollYLoad
10022
+ scrollYLoad,
10023
+ expandColumn
9721
10024
  } = reactData;
9722
10025
  const leftFixedWidth = $xeTable.computeLeftFixedWidth;
9723
10026
  const rightFixedWidth = $xeTable.computeRightFixedWidth;
9724
- if (!(scrollYLoad || leftFixedWidth || rightFixedWidth)) {
10027
+ if (!(scrollYLoad || leftFixedWidth || rightFixedWidth || expandColumn)) {
9725
10028
  return;
9726
10029
  }
9727
10030
  const {
@@ -10013,15 +10316,15 @@ const Methods = {
10013
10316
  const {
10014
10317
  isAllOverflow,
10015
10318
  scrollYLoad,
10016
- expandColumn,
10017
- rowExpandedMaps
10319
+ expandColumn
10018
10320
  } = reactData;
10019
10321
  const {
10020
10322
  scrollYStore,
10021
10323
  elemStore,
10022
10324
  isResizeCellHeight,
10023
10325
  afterFullData,
10024
- fullAllDataRowIdData
10326
+ fullAllDataRowIdData,
10327
+ rowExpandedMaps
10025
10328
  } = internalData;
10026
10329
  const {
10027
10330
  startIndex
@@ -10378,7 +10681,7 @@ const Methods = {
10378
10681
  if (this.footerSpanMethod) {
10379
10682
  (0, _log.errLog)('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
10380
10683
  }
10381
- setMerges(this, merges, this.mergeFooterList, null);
10684
+ setMerges(this, merges, this.mergeFooterList);
10382
10685
  return this.$nextTick().then(() => {
10383
10686
  this.updateCellAreas();
10384
10687
  return updateStyle($xeTable);