vxe-table 3.14.0-beta.8 → 3.14.0

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 (209) hide show
  1. package/es/grid/src/grid.js +75 -50
  2. package/es/locale/lang/ar-EG.js +7 -1
  3. package/es/locale/lang/de-DE.js +7 -1
  4. package/es/locale/lang/en-US.js +7 -1
  5. package/es/locale/lang/es-ES.js +7 -1
  6. package/es/locale/lang/fr-FR.js +7 -1
  7. package/es/locale/lang/hu-HU.js +7 -1
  8. package/es/locale/lang/hy-AM.js +7 -1
  9. package/es/locale/lang/id-ID.js +7 -1
  10. package/es/locale/lang/it-IT.js +7 -1
  11. package/es/locale/lang/ja-JP.js +7 -1
  12. package/es/locale/lang/ko-KR.js +7 -1
  13. package/es/locale/lang/nb-NO.js +7 -1
  14. package/es/locale/lang/pt-BR.js +7 -1
  15. package/es/locale/lang/ru-RU.js +7 -1
  16. package/es/locale/lang/th-TH.js +7 -1
  17. package/es/locale/lang/ug-CN.js +7 -1
  18. package/es/locale/lang/uk-UA.js +7 -1
  19. package/es/locale/lang/vi-VN.js +7 -1
  20. package/es/locale/lang/zh-CHT.js +7 -1
  21. package/es/locale/lang/zh-CN.js +7 -1
  22. package/es/style.css +1 -1
  23. package/es/table/module/custom/mixin.js +4 -2
  24. package/es/table/module/custom/panel.js +24 -23
  25. package/es/table/module/edit/mixin.js +17 -11
  26. package/es/table/module/export/export-panel.js +5 -4
  27. package/es/table/module/export/import-panel.js +8 -7
  28. package/es/table/module/export/mixin.js +30 -27
  29. package/es/table/module/filter/panel.js +21 -10
  30. package/es/table/module/keyboard/mixin.js +141 -41
  31. package/es/table/module/menu/mixin.js +6 -3
  32. package/es/table/module/menu/panel.js +7 -7
  33. package/es/table/module/validator/mixin.js +2 -2
  34. package/es/table/render/index.js +2 -2
  35. package/es/table/src/body.js +39 -20
  36. package/es/table/src/cell.js +27 -22
  37. package/es/table/src/column.js +11 -9
  38. package/es/table/src/columnInfo.js +6 -6
  39. package/es/table/src/footer.js +12 -7
  40. package/es/table/src/group.js +6 -5
  41. package/es/table/src/header.js +15 -9
  42. package/es/table/src/methods.js +773 -704
  43. package/es/table/src/props.js +4 -0
  44. package/es/table/src/table.js +85 -49
  45. package/es/table/src/util.js +55 -20
  46. package/es/toolbar/src/toolbar.js +3 -3
  47. package/es/ui/index.js +2 -1
  48. package/es/ui/src/log.js +1 -1
  49. package/helper/vetur/attributes.json +1 -1
  50. package/helper/vetur/tags.json +1 -1
  51. package/lib/grid/src/grid.js +82 -67
  52. package/lib/grid/src/grid.min.js +1 -1
  53. package/lib/index.umd.js +1590 -1249
  54. package/lib/index.umd.min.js +1 -1
  55. package/lib/locale/lang/ar-EG.js +7 -1
  56. package/lib/locale/lang/ar-EG.min.js +1 -1
  57. package/lib/locale/lang/de-DE.js +7 -1
  58. package/lib/locale/lang/de-DE.min.js +1 -1
  59. package/lib/locale/lang/en-US.js +7 -1
  60. package/lib/locale/lang/en-US.min.js +1 -1
  61. package/lib/locale/lang/en-US.umd.js +7 -1
  62. package/lib/locale/lang/es-ES.js +7 -1
  63. package/lib/locale/lang/es-ES.min.js +1 -1
  64. package/lib/locale/lang/es-ES.umd.js +7 -1
  65. package/lib/locale/lang/fr-FR.js +7 -1
  66. package/lib/locale/lang/fr-FR.min.js +1 -1
  67. package/lib/locale/lang/hu-HU.js +7 -1
  68. package/lib/locale/lang/hu-HU.min.js +1 -1
  69. package/lib/locale/lang/hu-HU.umd.js +7 -1
  70. package/lib/locale/lang/hy-AM.js +7 -1
  71. package/lib/locale/lang/hy-AM.min.js +1 -1
  72. package/lib/locale/lang/id-ID.js +7 -1
  73. package/lib/locale/lang/id-ID.min.js +1 -1
  74. package/lib/locale/lang/it-IT.js +7 -1
  75. package/lib/locale/lang/it-IT.min.js +1 -1
  76. package/lib/locale/lang/ja-JP.js +7 -1
  77. package/lib/locale/lang/ja-JP.min.js +1 -1
  78. package/lib/locale/lang/ja-JP.umd.js +7 -1
  79. package/lib/locale/lang/ko-KR.js +7 -1
  80. package/lib/locale/lang/ko-KR.min.js +1 -1
  81. package/lib/locale/lang/ko-KR.umd.js +7 -1
  82. package/lib/locale/lang/nb-NO.js +7 -1
  83. package/lib/locale/lang/nb-NO.min.js +1 -1
  84. package/lib/locale/lang/pt-BR.js +7 -1
  85. package/lib/locale/lang/pt-BR.min.js +1 -1
  86. package/lib/locale/lang/pt-BR.umd.js +7 -1
  87. package/lib/locale/lang/ru-RU.js +7 -1
  88. package/lib/locale/lang/ru-RU.min.js +1 -1
  89. package/lib/locale/lang/ru-RU.umd.js +7 -1
  90. package/lib/locale/lang/th-TH.js +7 -1
  91. package/lib/locale/lang/th-TH.min.js +1 -1
  92. package/lib/locale/lang/ug-CN.js +7 -1
  93. package/lib/locale/lang/ug-CN.min.js +1 -1
  94. package/lib/locale/lang/uk-UA.js +7 -1
  95. package/lib/locale/lang/uk-UA.min.js +1 -1
  96. package/lib/locale/lang/uk-UA.umd.js +7 -1
  97. package/lib/locale/lang/vi-VN.js +7 -1
  98. package/lib/locale/lang/vi-VN.min.js +1 -1
  99. package/lib/locale/lang/zh-CHT.js +7 -1
  100. package/lib/locale/lang/zh-CHT.min.js +1 -1
  101. package/lib/locale/lang/zh-CHT.umd.js +7 -1
  102. package/lib/locale/lang/zh-CN.js +7 -1
  103. package/lib/locale/lang/zh-CN.min.js +1 -1
  104. package/lib/locale/lang/zh-CN.umd.js +7 -1
  105. package/lib/style.css +1 -1
  106. package/lib/table/module/custom/mixin.js +5 -3
  107. package/lib/table/module/custom/mixin.min.js +1 -1
  108. package/lib/table/module/custom/panel.js +22 -29
  109. package/lib/table/module/custom/panel.min.js +1 -1
  110. package/lib/table/module/edit/mixin.js +19 -13
  111. package/lib/table/module/edit/mixin.min.js +1 -1
  112. package/lib/table/module/export/export-panel.js +5 -4
  113. package/lib/table/module/export/export-panel.min.js +1 -1
  114. package/lib/table/module/export/import-panel.js +8 -7
  115. package/lib/table/module/export/import-panel.min.js +1 -1
  116. package/lib/table/module/export/mixin.js +35 -34
  117. package/lib/table/module/export/mixin.min.js +1 -1
  118. package/lib/table/module/filter/panel.js +16 -16
  119. package/lib/table/module/filter/panel.min.js +1 -1
  120. package/lib/table/module/keyboard/mixin.js +149 -47
  121. package/lib/table/module/keyboard/mixin.min.js +1 -1
  122. package/lib/table/module/menu/mixin.js +6 -3
  123. package/lib/table/module/menu/mixin.min.js +1 -1
  124. package/lib/table/module/menu/panel.js +7 -7
  125. package/lib/table/module/menu/panel.min.js +1 -1
  126. package/lib/table/module/validator/mixin.js +3 -3
  127. package/lib/table/module/validator/mixin.min.js +1 -1
  128. package/lib/table/render/index.js +3 -2
  129. package/lib/table/render/index.min.js +1 -1
  130. package/lib/table/src/body.js +47 -20
  131. package/lib/table/src/body.min.js +1 -1
  132. package/lib/table/src/cell.js +39 -23
  133. package/lib/table/src/cell.min.js +1 -1
  134. package/lib/table/src/column.js +11 -9
  135. package/lib/table/src/column.min.js +1 -1
  136. package/lib/table/src/columnInfo.js +6 -6
  137. package/lib/table/src/columnInfo.min.js +1 -1
  138. package/lib/table/src/footer.js +12 -5
  139. package/lib/table/src/footer.min.js +1 -1
  140. package/lib/table/src/group.js +6 -5
  141. package/lib/table/src/group.min.js +1 -1
  142. package/lib/table/src/header.js +16 -8
  143. package/lib/table/src/header.min.js +1 -1
  144. package/lib/table/src/methods.js +911 -830
  145. package/lib/table/src/methods.min.js +1 -1
  146. package/lib/table/src/props.js +4 -0
  147. package/lib/table/src/props.min.js +1 -1
  148. package/lib/table/src/table.js +93 -52
  149. package/lib/table/src/table.min.js +1 -1
  150. package/lib/table/src/util.js +62 -21
  151. package/lib/table/src/util.min.js +1 -1
  152. package/lib/toolbar/src/toolbar.js +3 -3
  153. package/lib/ui/index.js +2 -1
  154. package/lib/ui/index.min.js +1 -1
  155. package/lib/ui/src/log.js +1 -1
  156. package/lib/ui/src/log.min.js +1 -1
  157. package/package.json +2 -2
  158. package/packages/grid/src/grid.ts +88 -59
  159. package/packages/locale/lang/ar-EG.ts +7 -1
  160. package/packages/locale/lang/de-DE.ts +7 -1
  161. package/packages/locale/lang/en-US.ts +7 -1
  162. package/packages/locale/lang/es-ES.ts +7 -1
  163. package/packages/locale/lang/fr-FR.ts +7 -1
  164. package/packages/locale/lang/hu-HU.ts +7 -1
  165. package/packages/locale/lang/hy-AM.ts +7 -1
  166. package/packages/locale/lang/id-ID.ts +7 -1
  167. package/packages/locale/lang/it-IT.ts +7 -1
  168. package/packages/locale/lang/ja-JP.ts +7 -1
  169. package/packages/locale/lang/ko-KR.ts +7 -1
  170. package/packages/locale/lang/nb-NO.ts +7 -1
  171. package/packages/locale/lang/pt-BR.ts +7 -1
  172. package/packages/locale/lang/ru-RU.ts +7 -1
  173. package/packages/locale/lang/th-TH.ts +7 -1
  174. package/packages/locale/lang/ug-CN.ts +7 -1
  175. package/packages/locale/lang/uk-UA.ts +7 -1
  176. package/packages/locale/lang/vi-VN.ts +7 -1
  177. package/packages/locale/lang/zh-CHT.ts +7 -1
  178. package/packages/locale/lang/zh-CN.ts +7 -1
  179. package/packages/table/module/custom/mixin.ts +6 -3
  180. package/packages/table/module/custom/panel.ts +42 -37
  181. package/packages/table/module/edit/mixin.ts +20 -14
  182. package/packages/table/module/export/export-panel.ts +8 -5
  183. package/packages/table/module/export/import-panel.ts +11 -7
  184. package/packages/table/module/export/mixin.ts +37 -32
  185. package/packages/table/module/filter/panel.ts +25 -10
  186. package/packages/table/module/keyboard/mixin.ts +155 -49
  187. package/packages/table/module/menu/mixin.ts +12 -6
  188. package/packages/table/module/menu/panel.ts +10 -7
  189. package/packages/table/module/validator/mixin.ts +2 -2
  190. package/packages/table/render/index.ts +2 -2
  191. package/packages/table/src/body.ts +39 -20
  192. package/packages/table/src/cell.ts +27 -22
  193. package/packages/table/src/column.ts +14 -10
  194. package/packages/table/src/columnInfo.ts +9 -6
  195. package/packages/table/src/footer.ts +12 -7
  196. package/packages/table/src/group.ts +9 -5
  197. package/packages/table/src/header.ts +16 -9
  198. package/packages/table/src/methods.ts +854 -740
  199. package/packages/table/src/props.ts +16 -12
  200. package/packages/table/src/table.ts +99 -52
  201. package/packages/table/src/util.ts +63 -21
  202. package/packages/toolbar/src/toolbar.ts +3 -3
  203. package/packages/ui/index.ts +1 -0
  204. /package/es/{iconfont.1741333630357.ttf → iconfont.1742955973002.ttf} +0 -0
  205. /package/es/{iconfont.1741333630357.woff → iconfont.1742955973002.woff} +0 -0
  206. /package/es/{iconfont.1741333630357.woff2 → iconfont.1742955973002.woff2} +0 -0
  207. /package/lib/{iconfont.1741333630357.ttf → iconfont.1742955973002.ttf} +0 -0
  208. /package/lib/{iconfont.1741333630357.woff → iconfont.1742955973002.woff} +0 -0
  209. /package/lib/{iconfont.1741333630357.woff2 → iconfont.1742955973002.woff2} +0 -0
@@ -3,10 +3,11 @@ import { browse, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEv
3
3
  import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils';
4
4
  import { VxeUI } from '../../ui';
5
5
  import Cell from './cell';
6
- import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, updateDeepRowKey, updateFastRowKey, getRefElem } from './util';
6
+ import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId, getRefElem } from './util';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  import { warnLog, errLog } from '../../ui/src/log';
9
9
  const { getConfig, getI18n, renderer, formats, interceptor, createEvent } = VxeUI;
10
+ const supportMaxRow = 5e6;
10
11
  const customStorageKey = 'VXE_CUSTOM_STORE';
11
12
  const maxYHeight = 5e6;
12
13
  const maxXWidth = 5e6;
@@ -218,7 +219,7 @@ function cacheColumnMap($xeTable) {
218
219
  }
219
220
  else {
220
221
  if ((storage && !type) || (columnOpts.drag && (isCrossDrag || isSelfToChildDrag))) {
221
- errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field`]);
222
+ errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field=?`]);
222
223
  }
223
224
  }
224
225
  if (!hasFixed && fixed) {
@@ -317,9 +318,10 @@ function updateAfterListIndex($xeTable) {
317
318
  const internalData = $xeTable;
318
319
  const { treeConfig } = props;
319
320
  const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData;
321
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
320
322
  const fullMaps = {};
321
323
  afterFullData.forEach((row, index) => {
322
- const rowid = getRowid($xeTable, row);
324
+ const rowid = handleGetRowId(row);
323
325
  const rowRest = fullAllDataRowIdData[rowid];
324
326
  const seq = index + 1;
325
327
  if (rowRest) {
@@ -351,8 +353,9 @@ function updateAfterDataIndex($xeTable) {
351
353
  const childrenField = treeOpts.children || treeOpts.childrenField;
352
354
  const fullMaps = {};
353
355
  if (treeConfig) {
356
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
354
357
  XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
355
- const rowid = getRowid($xeTable, row);
358
+ const rowid = handleGetRowId(row);
356
359
  const rowRest = fullAllDataRowIdData[rowid];
357
360
  const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('');
358
361
  if (rowRest) {
@@ -379,19 +382,18 @@ function updateAfterDataIndex($xeTable) {
379
382
  */
380
383
  function handleVirtualTreeToList($xeTable) {
381
384
  const props = $xeTable;
382
- const reactData = $xeTable;
383
385
  const internalData = $xeTable;
384
386
  const { treeConfig } = props;
385
- const { treeExpandedMaps } = reactData;
386
- const { fullAllDataRowIdData } = internalData;
387
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
387
388
  const treeOpts = $xeTable.computeTreeOpts;
388
389
  const childrenField = treeOpts.children || treeOpts.childrenField;
389
390
  if (treeConfig && treeOpts.transform) {
391
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
390
392
  const fullData = [];
391
393
  const expandMaps = {};
392
394
  XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
393
- const rowid = getRowid($xeTable, row);
394
- const parentRowid = getRowid($xeTable, parentRow);
395
+ const rowid = handleGetRowId(row);
396
+ const parentRowid = handleGetRowId(parentRow);
395
397
  if (!parentRow || (expandMaps[parentRowid] && treeExpandedMaps[parentRowid])) {
396
398
  const rowRest = fullAllDataRowIdData[rowid];
397
399
  if (rowRest) {
@@ -413,7 +415,7 @@ function updateStyle($xeTable) {
413
415
  const internalData = $xeTable;
414
416
  const { border, showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props;
415
417
  const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn } = reactData;
416
- const { visibleColumn, fullColumnIdData, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData;
418
+ const { visibleColumn, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData;
417
419
  const el = $xeTable.$refs.refElem;
418
420
  if (!el) {
419
421
  return;
@@ -422,7 +424,6 @@ function updateStyle($xeTable) {
422
424
  const osbWidth = overflowY ? scrollbarWidth : 0;
423
425
  const osbHeight = overflowX ? scrollbarHeight : 0;
424
426
  const emptyPlaceholderElem = $xeTable.$refs.refEmptyPlaceholder;
425
- const cellOffsetWidth = $xeTable.computeCellOffsetWidth;
426
427
  const mouseOpts = $xeTable.computeMouseOpts;
427
428
  const expandOpts = $xeTable.computeExpandOpts;
428
429
  const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper']);
@@ -690,56 +691,6 @@ function updateStyle($xeTable) {
690
691
  tableElem.style.width = tWidth ? `${tWidth}px` : '';
691
692
  }
692
693
  }
693
- const colgroupElem = getRefElem(elemStore[`${name}-${layout}-colgroup`]);
694
- if (colgroupElem) {
695
- XEUtils.arrayEach(colgroupElem.children, (colElem) => {
696
- const colid = colElem.getAttribute('name');
697
- if (fullColumnIdData[colid]) {
698
- const colRest = fullColumnIdData[colid];
699
- const column = colRest.column;
700
- const { showHeaderOverflow, showFooterOverflow, showOverflow } = column;
701
- let cellOverflow;
702
- colElem.style.width = `${column.renderWidth}px`;
703
- if (layout === 'header') {
704
- cellOverflow = XEUtils.isUndefined(showHeaderOverflow) || XEUtils.isNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow;
705
- }
706
- else if (layout === 'footer') {
707
- cellOverflow = XEUtils.isUndefined(showFooterOverflow) || XEUtils.isNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow;
708
- }
709
- else {
710
- cellOverflow = XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow) ? isAllOverflow : showOverflow;
711
- }
712
- const showEllipsis = cellOverflow === 'ellipsis';
713
- const showTitle = cellOverflow === 'title';
714
- const showTooltip = cellOverflow === true || cellOverflow === 'tooltip';
715
- let hasEllipsis = showTitle || showTooltip || showEllipsis;
716
- const listElem = getRefElem(elemStore[`${name}-${layout}-list`]);
717
- // 纵向虚拟滚动不支持动态行高
718
- if (scrollYLoad && !hasEllipsis) {
719
- hasEllipsis = true;
720
- }
721
- if (listElem) {
722
- XEUtils.arrayEach(listElem.querySelectorAll(`.${column.id}`), (elem) => {
723
- const colspan = parseInt(elem.getAttribute('colspan') || 1);
724
- const cellElem = elem.querySelector('.vxe-cell');
725
- let colWidth = column.renderWidth;
726
- if (cellElem) {
727
- if (colspan > 1) {
728
- const columnIndex = $xeTable.getColumnIndex(column);
729
- for (let index = 1; index < colspan; index++) {
730
- const nextColumn = $xeTable.getColumns(columnIndex + index);
731
- if (nextColumn) {
732
- colWidth += nextColumn.renderWidth;
733
- }
734
- }
735
- }
736
- cellElem.style.width = hasEllipsis ? `${colWidth - (cellOffsetWidth * colspan)}px` : '';
737
- }
738
- });
739
- }
740
- }
741
- });
742
- }
743
694
  });
744
695
  });
745
696
  if (currentRow) {
@@ -750,6 +701,25 @@ function updateStyle($xeTable) {
750
701
  }
751
702
  return $xeTable.$nextTick();
752
703
  }
704
+ function checkValidate($xeTable, type) {
705
+ if ($xeTable.triggerValidate) {
706
+ return $xeTable.triggerValidate(type);
707
+ }
708
+ return $xeTable.$nextTick();
709
+ }
710
+ /**
711
+ * 当单元格发生改变时
712
+ * 如果存在规则,则校验
713
+ */
714
+ function handleChangeCell($xeTable, evnt, params) {
715
+ checkValidate($xeTable, 'blur')
716
+ .catch((e) => e)
717
+ .then(() => {
718
+ $xeTable.handleEdit(params, evnt)
719
+ .then(() => checkValidate($xeTable, 'change'))
720
+ .catch((e) => e);
721
+ });
722
+ }
753
723
  function handleRadioReserveRow($xeTable, row) {
754
724
  const internalData = $xeTable;
755
725
  const radioOpts = $xeTable.computeRadioOpts;
@@ -794,12 +764,12 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
794
764
  const reactData = $xeTable;
795
765
  const internalData = $xeTable;
796
766
  const { treeConfig } = props;
797
- const { selectCheckboxMaps } = reactData;
798
- const { afterFullData, checkboxReserveRowMap } = internalData;
767
+ const { afterFullData, checkboxReserveRowMap, selectCheckboxMaps } = internalData;
799
768
  const treeOpts = $xeTable.computeTreeOpts;
800
769
  const childrenField = treeOpts.children || treeOpts.childrenField;
801
770
  const checkboxOpts = $xeTable.computeCheckboxOpts;
802
771
  const { checkField, reserve, checkMethod } = checkboxOpts;
772
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
803
773
  // indeterminateField 仅支持读取
804
774
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
805
775
  const selectRowMaps = {};
@@ -811,7 +781,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
811
781
  const checkValFn = (row) => {
812
782
  if (isForce || (!checkMethod || checkMethod({ row }))) {
813
783
  if (checked) {
814
- selectRowMaps[getRowid($xeTable, row)] = row;
784
+ selectRowMaps[handleGetRowId(row)] = row;
815
785
  }
816
786
  XEUtils.set(row, checkField, checked);
817
787
  }
@@ -841,7 +811,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
841
811
  */
842
812
  XEUtils.eachTree(afterFullData, (row) => {
843
813
  if (isForce || (!checkMethod || checkMethod({ row }))) {
844
- selectRowMaps[getRowid($xeTable, row)] = row;
814
+ const rowid = handleGetRowId(row);
815
+ selectRowMaps[rowid] = row;
845
816
  }
846
817
  }, { children: childrenField });
847
818
  }
@@ -852,7 +823,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
852
823
  */
853
824
  if (!isForce && checkMethod) {
854
825
  XEUtils.eachTree(afterFullData, (row) => {
855
- const rowid = getRowid($xeTable, row);
826
+ const rowid = handleGetRowId(row);
856
827
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
857
828
  selectRowMaps[rowid] = row;
858
829
  }
@@ -869,7 +840,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
869
840
  */
870
841
  if (!isForce && checkMethod) {
871
842
  afterFullData.forEach((row) => {
872
- const rowid = getRowid($xeTable, row);
843
+ const rowid = handleGetRowId(row);
873
844
  if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
874
845
  selectRowMaps[rowid] = row;
875
846
  }
@@ -877,7 +848,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
877
848
  }
878
849
  else {
879
850
  afterFullData.forEach(row => {
880
- selectRowMaps[getRowid($xeTable, row)] = row;
851
+ const rowid = handleGetRowId(row);
852
+ selectRowMaps[rowid] = row;
881
853
  });
882
854
  }
883
855
  }
@@ -889,7 +861,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
889
861
  */
890
862
  if (!isForce && checkMethod) {
891
863
  afterFullData.forEach((row) => {
892
- const rowid = getRowid($xeTable, row);
864
+ const rowid = handleGetRowId(row);
893
865
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
894
866
  selectRowMaps[rowid] = row;
895
867
  }
@@ -908,10 +880,10 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
908
880
  afterFullData.forEach((row) => handleCheckboxReserveRow($xeTable, row, false));
909
881
  }
910
882
  }
911
- reactData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
883
+ reactData.updateCheckboxFlag++;
884
+ internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
912
885
  reactData.isAllSelected = checked;
913
886
  reactData.isIndeterminate = false;
914
- reactData.treeIndeterminateMaps = {};
915
887
  internalData.treeIndeterminateRowMaps = {};
916
888
  $xeTable.checkSelectionStatus();
917
889
  return $xeTable.$nextTick();
@@ -922,8 +894,8 @@ function handleReserveStatus($xeTable) {
922
894
  const reactData = $xeTable;
923
895
  const internalData = $xeTable;
924
896
  const { treeConfig } = props;
925
- const { expandColumn, currentRow, selectCheckboxMaps, selectRadioRow, rowExpandedMaps, treeExpandedMaps } = reactData;
926
- const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData;
897
+ const { expandColumn, currentRow, selectRadioRow } = reactData;
898
+ const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow, selectCheckboxMaps, treeExpandedMaps, rowExpandedMaps } = internalData;
927
899
  const expandOpts = $xeTable.computeExpandOpts;
928
900
  const treeOpts = $xeTable.computeTreeOpts;
929
901
  const radioOpts = $xeTable.computeRadioOpts;
@@ -940,7 +912,8 @@ function handleReserveStatus($xeTable) {
940
912
  }
941
913
  }
942
914
  // 复选框
943
- reactData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
915
+ internalData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
916
+ reactData.updateCheckboxFlag++;
944
917
  // 还原保留选中状态
945
918
  if (checkboxOpts.reserve) {
946
919
  handleCheckedCheckboxRow($xeTable, handleReserveRow($xeTable, internalData.checkboxReserveRowMap), true, true);
@@ -949,17 +922,161 @@ function handleReserveStatus($xeTable) {
949
922
  reactData.currentRow = null; // 刷新当前行状态
950
923
  }
951
924
  // 行展开
952
- reactData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
925
+ internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
926
+ reactData.rowExpandedFlag++;
953
927
  // 还原保留状态
954
928
  if (expandColumn && expandOpts.reserve) {
955
929
  $xeTable.setRowExpand(handleReserveRow($xeTable, internalData.rowExpandedReserveRowMap), true);
956
930
  }
957
931
  // 树展开
958
- reactData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
932
+ internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
933
+ reactData.treeExpandedFlag++;
959
934
  if (treeConfig && treeOpts.reserve) {
960
935
  $xeTable.setTreeExpand(handleReserveRow($xeTable, internalData.treeExpandedReserveRowMap), true);
961
936
  }
962
937
  }
938
+ /**
939
+ * 处理默认展开树节点
940
+ */
941
+ const handleDefaultTreeExpand = ($xeTable) => {
942
+ const props = $xeTable;
943
+ const internalData = $xeTable;
944
+ const { treeConfig } = props;
945
+ if (treeConfig) {
946
+ const { tableFullData } = internalData;
947
+ const treeOpts = $xeTable.computeTreeOpts;
948
+ const { expandAll, expandRowKeys } = treeOpts;
949
+ const childrenField = treeOpts.children || treeOpts.childrenField;
950
+ if (expandAll) {
951
+ $xeTable.setAllTreeExpand(true);
952
+ }
953
+ else if (expandRowKeys) {
954
+ const defExpandeds = [];
955
+ const rowkey = getRowkey($xeTable);
956
+ expandRowKeys.forEach((rowid) => {
957
+ const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
958
+ if (matchObj) {
959
+ defExpandeds.push(matchObj.item);
960
+ }
961
+ });
962
+ $xeTable.setTreeExpand(defExpandeds, true);
963
+ }
964
+ }
965
+ };
966
+ const handleAsyncTreeExpandChilds = ($xeTable, row) => {
967
+ const reactData = $xeTable;
968
+ const internalData = $xeTable;
969
+ const treeOpts = $xeTable.computeTreeOpts;
970
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
971
+ const { transform, loadMethod } = treeOpts;
972
+ const { checkStrictly } = checkboxOpts;
973
+ return new Promise(resolve => {
974
+ if (loadMethod) {
975
+ const { fullAllDataRowIdData, treeExpandLazyLoadedMaps } = internalData;
976
+ const rowid = getRowid($xeTable, row);
977
+ const rowRest = fullAllDataRowIdData[rowid];
978
+ treeExpandLazyLoadedMaps[rowid] = row;
979
+ Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
980
+ if (rowRest) {
981
+ rowRest.treeLoaded = true;
982
+ }
983
+ if (treeExpandLazyLoadedMaps[rowid]) {
984
+ delete treeExpandLazyLoadedMaps[rowid];
985
+ }
986
+ if (!XEUtils.isArray(childRecords)) {
987
+ childRecords = [];
988
+ }
989
+ if (childRecords) {
990
+ return $xeTable.loadTreeChildren(row, childRecords).then(childRows => {
991
+ const { treeExpandedMaps } = internalData;
992
+ if (childRows.length && !treeExpandedMaps[rowid]) {
993
+ treeExpandedMaps[rowid] = row;
994
+ }
995
+ reactData.treeExpandedFlag++;
996
+ // 如果当前节点已选中,则展开后子节点也被选中
997
+ if (!checkStrictly && $xeTable.isCheckedByCheckboxRow(row)) {
998
+ handleCheckedCheckboxRow($xeTable, childRows, true);
999
+ }
1000
+ return $xeTable.$nextTick().then(() => {
1001
+ if (transform) {
1002
+ $xeTable.handleTableData();
1003
+ updateAfterDataIndex($xeTable);
1004
+ return $xeTable.$nextTick();
1005
+ }
1006
+ });
1007
+ });
1008
+ }
1009
+ }).catch(() => {
1010
+ const { treeExpandLazyLoadedMaps } = internalData;
1011
+ if (rowRest) {
1012
+ rowRest.treeLoaded = false;
1013
+ }
1014
+ if (treeExpandLazyLoadedMaps[rowid]) {
1015
+ delete treeExpandLazyLoadedMaps[rowid];
1016
+ }
1017
+ }).finally(() => {
1018
+ reactData.treeExpandedFlag++;
1019
+ $xeTable.$nextTick().then(() => $xeTable.recalculate()).then(() => resolve());
1020
+ });
1021
+ }
1022
+ else {
1023
+ resolve();
1024
+ }
1025
+ });
1026
+ };
1027
+ const handleTreeExpandReserve = ($xeTable, row, expanded) => {
1028
+ const internalData = $xeTable;
1029
+ const { treeExpandedReserveRowMap } = internalData;
1030
+ const treeOpts = $xeTable.computeTreeOpts;
1031
+ if (treeOpts.reserve) {
1032
+ const rowid = getRowid($xeTable, row);
1033
+ if (expanded) {
1034
+ treeExpandedReserveRowMap[rowid] = row;
1035
+ }
1036
+ else if (treeExpandedReserveRowMap[rowid]) {
1037
+ delete treeExpandedReserveRowMap[rowid];
1038
+ }
1039
+ }
1040
+ };
1041
+ const handleAsyncRowExpand = ($xeTable, row) => {
1042
+ const reactData = $xeTable;
1043
+ const internalData = $xeTable;
1044
+ return new Promise(resolve => {
1045
+ const expandOpts = $xeTable.computeExpandOpts;
1046
+ const { loadMethod } = expandOpts;
1047
+ if (loadMethod) {
1048
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
1049
+ const rowid = getRowid($xeTable, row);
1050
+ const rowRest = fullAllDataRowIdData[rowid];
1051
+ rowExpandLazyLoadedMaps[rowid] = row;
1052
+ loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
1053
+ const { rowExpandedMaps } = internalData;
1054
+ if (rowRest) {
1055
+ rowRest.expandLoaded = true;
1056
+ }
1057
+ rowExpandedMaps[rowid] = row;
1058
+ reactData.rowExpandedFlag++;
1059
+ }).catch(() => {
1060
+ if (rowRest) {
1061
+ rowRest.expandLoaded = false;
1062
+ }
1063
+ }).finally(() => {
1064
+ const { rowExpandLazyLoadedMaps } = internalData;
1065
+ if (rowExpandLazyLoadedMaps[rowid]) {
1066
+ delete rowExpandLazyLoadedMaps[rowid];
1067
+ }
1068
+ reactData.rowExpandedFlag++;
1069
+ $xeTable.$nextTick()
1070
+ .then(() => $xeTable.recalculate())
1071
+ .then(() => $xeTable.updateCellAreas())
1072
+ .then(() => resolve());
1073
+ });
1074
+ }
1075
+ else {
1076
+ resolve();
1077
+ }
1078
+ });
1079
+ };
963
1080
  function calcVarRowHeightConfig($xeTable, sizeKey, sizeEl) {
964
1081
  const reactData = $xeTable;
965
1082
  const { rowHeightStore } = reactData;
@@ -1022,12 +1139,13 @@ function handleVirtualYVisible($xeTable) {
1022
1139
  visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1;
1023
1140
  }
1024
1141
  else {
1142
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1025
1143
  let leftIndex = 0;
1026
1144
  let rightIndex = afterFullData.length;
1027
1145
  while (leftIndex < rightIndex) {
1028
1146
  const rIndex = Math.floor((leftIndex + rightIndex) / 2);
1029
1147
  const row = afterFullData[rIndex];
1030
- const rowid = getRowid($xeTable, row);
1148
+ const rowid = handleGetRowId(row);
1031
1149
  const rowRest = fullAllDataRowIdData[rowid] || {};
1032
1150
  if (rowRest.oTop <= startTop) {
1033
1151
  leftIndex = rIndex + 1;
@@ -1039,7 +1157,7 @@ function handleVirtualYVisible($xeTable) {
1039
1157
  toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0);
1040
1158
  for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
1041
1159
  const row = afterFullData[rIndex];
1042
- const rowid = getRowid($xeTable, row);
1160
+ const rowid = handleGetRowId(row);
1043
1161
  const rowRest = fullAllDataRowIdData[rowid] || {};
1044
1162
  visibleSize++;
1045
1163
  if (rowRest.oTop > endTop || visibleSize >= 100) {
@@ -1069,9 +1187,12 @@ function calculateMergerOffsetIndex(list, offsetItem, type) {
1069
1187
  }
1070
1188
  }
1071
1189
  }
1072
- function setMerges(_vm, merges, mList, rowList) {
1190
+ function setMerges($xeTable, merges, mList, rowList) {
1191
+ const props = $xeTable;
1192
+ const internalData = $xeTable;
1073
1193
  if (merges) {
1074
- const { treeConfig, visibleColumn } = _vm;
1194
+ const { treeConfig } = props;
1195
+ const { visibleColumn } = internalData;
1075
1196
  if (!XEUtils.isArray(merges)) {
1076
1197
  merges = [merges];
1077
1198
  }
@@ -1117,10 +1238,13 @@ function setMerges(_vm, merges, mList, rowList) {
1117
1238
  });
1118
1239
  }
1119
1240
  }
1120
- function removeMerges(_vm, merges, mList, rowList) {
1241
+ function removeMerges($xeTable, merges, mList, rowList) {
1242
+ const props = $xeTable;
1243
+ const internalData = $xeTable;
1121
1244
  const rest = [];
1122
1245
  if (merges) {
1123
- const { treeConfig, visibleColumn } = _vm;
1246
+ const { treeConfig } = props;
1247
+ const { visibleColumn } = internalData;
1124
1248
  if (!XEUtils.isArray(merges)) {
1125
1249
  merges = [merges];
1126
1250
  }
@@ -1300,6 +1424,7 @@ function autoCellWidth($xeTable) {
1300
1424
  internalData.headerHeight = headerHeight;
1301
1425
  internalData.footerHeight = footerHeight;
1302
1426
  reactData.overflowX = overflowX;
1427
+ reactData.resizeWidthFlag++;
1303
1428
  updateColumnOffsetLeft($xeTable);
1304
1429
  updateHeight($xeTable);
1305
1430
  reactData.parentHeight = Math.max(internalData.headerHeight + footerHeight + 20, $xeTable.getParentHeight());
@@ -1327,8 +1452,9 @@ const calcCellHeight = ($xeTable) => {
1327
1452
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
1328
1453
  const el = $xeTable.$refs.refElem;
1329
1454
  if (!isAllOverflow && scrollYLoad && el) {
1455
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1330
1456
  tableData.forEach(row => {
1331
- const rowid = getRowid($xeTable, row);
1457
+ const rowid = handleGetRowId(row);
1332
1458
  const rowRest = fullAllDataRowIdData[rowid];
1333
1459
  if (rowRest) {
1334
1460
  const height = calcCellAutoHeight(rowRest, el);
@@ -1569,9 +1695,10 @@ function hideDropTip($xeTable) {
1569
1695
  * @param {Event} evnt 事件
1570
1696
  * @param {Row} row 行对象
1571
1697
  */
1572
- function handleTooltip($xeTable, evnt, tdEl, overflowElem, tipElem, params) {
1698
+ function handleTooltip($xeTable, evnt, tdEl, overflowElem, params) {
1573
1699
  const reactData = $xeTable;
1574
- if (!overflowElem) {
1700
+ const tipOverEl = overflowElem || tdEl;
1701
+ if (!tipOverEl) {
1575
1702
  return $xeTable.$nextTick();
1576
1703
  }
1577
1704
  params.cell = tdEl;
@@ -1581,9 +1708,8 @@ function handleTooltip($xeTable, evnt, tdEl, overflowElem, tipElem, params) {
1581
1708
  const { showAll, contentMethod } = tooltipOpts;
1582
1709
  const customContent = contentMethod ? contentMethod(params) : null;
1583
1710
  const useCustom = contentMethod && !XEUtils.eqNull(customContent);
1584
- const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? overflowElem.innerText : overflowElem.textContent).trim();
1585
- const isCellOverflow = overflowElem.scrollWidth > overflowElem.clientWidth;
1586
- if (content && (showAll || useCustom || isCellOverflow)) {
1711
+ const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? tipOverEl.innerText : tipOverEl.textContent).trim();
1712
+ if (content && (showAll || useCustom || (tipOverEl.scrollWidth > tipOverEl.clientWidth))) {
1587
1713
  Object.assign(tooltipStore, {
1588
1714
  row,
1589
1715
  column,
@@ -1593,7 +1719,7 @@ function handleTooltip($xeTable, evnt, tdEl, overflowElem, tipElem, params) {
1593
1719
  $xeTable.$nextTick(() => {
1594
1720
  const $tooltip = $xeTable.$refs.refTooltip;
1595
1721
  if ($tooltip && $tooltip.open) {
1596
- $tooltip.open(isCellOverflow ? overflowElem : (tipElem || overflowElem), formatText(content));
1722
+ $tooltip.open(tipOverEl, formatText(content));
1597
1723
  }
1598
1724
  });
1599
1725
  }
@@ -1768,8 +1894,8 @@ function parseColumns($xeTable, isReset) {
1768
1894
  const props = $xeTable;
1769
1895
  const reactData = $xeTable;
1770
1896
  const internalData = $xeTable;
1771
- const { showOverflow } = props;
1772
- const rowOpts = $xeTable.computeRowOpts;
1897
+ // const { showOverflow } = props
1898
+ // const rowOpts = $xeTable.computeRowOpts
1773
1899
  const leftList = [];
1774
1900
  const centerList = [];
1775
1901
  const rightList = [];
@@ -1842,28 +1968,28 @@ function parseColumns($xeTable, isReset) {
1842
1968
  reactData.hasFixedColumn = leftList.length > 0 || rightList.length > 0;
1843
1969
  Object.assign(columnStore, { leftList, centerList, rightList });
1844
1970
  if (scrollXLoad) {
1845
- if (showOverflow) {
1846
- if (!rowOpts.height) {
1847
- const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false);
1848
- if (errColumn) {
1849
- errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true']);
1850
- }
1851
- }
1852
- }
1853
- if (process.env.NODE_ENV === 'development') {
1854
- // if (props.showHeader && !props.showHeaderOverflow) {
1855
- // warnLog('vxe.error.reqProp', ['show-header-overflow'])
1856
- // }
1857
- // if (props.showFooter && !props.showFooterOverflow) {
1858
- // warnLog('vxe.error.reqProp', ['show-footer-overflow'])
1859
- // }
1860
- if (props.spanMethod) {
1861
- warnLog('vxe.error.scrollErrProp', ['span-method']);
1862
- }
1863
- if (props.footerSpanMethod) {
1864
- warnLog('vxe.error.scrollErrProp', ['footer-span-method']);
1865
- }
1866
- }
1971
+ // if (showOverflow) {
1972
+ // if (!rowOpts.height) {
1973
+ // const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false)
1974
+ // if (errColumn) {
1975
+ // errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
1976
+ // }
1977
+ // }
1978
+ // }
1979
+ // if (process.env.NODE_ENV === 'development') {
1980
+ // if (props.showHeader && !props.showHeaderOverflow) {
1981
+ // warnLog('vxe.error.reqProp', ['show-header-overflow'])
1982
+ // }
1983
+ // if (props.showFooter && !props.showFooterOverflow) {
1984
+ // warnLog('vxe.error.reqProp', ['show-footer-overflow'])
1985
+ // }
1986
+ if (props.spanMethod) {
1987
+ warnLog('vxe.error.scrollErrProp', ['span-method']);
1988
+ }
1989
+ if (props.footerSpanMethod) {
1990
+ warnLog('vxe.error.scrollErrProp', ['footer-span-method']);
1991
+ }
1992
+ // }
1867
1993
  if (isReset) {
1868
1994
  const { visibleSize } = handleVirtualXVisible($xeTable);
1869
1995
  scrollXStore.startIndex = 0;
@@ -1975,6 +2101,35 @@ function loadScrollYData($xeTable) {
1975
2101
  }
1976
2102
  }
1977
2103
  }
2104
+ const createGetRowCacheProp = (prop) => {
2105
+ return function (row) {
2106
+ const $xeTable = this;
2107
+ const internalData = $xeTable;
2108
+ const { fullAllDataRowIdData } = internalData;
2109
+ if (row) {
2110
+ const rowid = getRowid($xeTable, row);
2111
+ const rowRest = fullAllDataRowIdData[rowid];
2112
+ if (rowRest) {
2113
+ return rowRest[prop];
2114
+ }
2115
+ }
2116
+ return -1;
2117
+ };
2118
+ };
2119
+ const createGetColumnCacheProp = (prop) => {
2120
+ return function (column) {
2121
+ const $xeTable = this;
2122
+ const internalData = $xeTable;
2123
+ const { fullColumnIdData } = internalData;
2124
+ if (column) {
2125
+ const colRest = fullColumnIdData[column.id];
2126
+ if (colRest) {
2127
+ return colRest[prop];
2128
+ }
2129
+ }
2130
+ return -1;
2131
+ };
2132
+ };
1978
2133
  function lazyScrollXData($xeTable) {
1979
2134
  const internalData = $xeTable;
1980
2135
  const { lxTimeout, lxRunTime, scrollXStore } = internalData;
@@ -2132,7 +2287,7 @@ function calcCellWidth($xeTable) {
2132
2287
  }
2133
2288
  function handleUpdateColResize($xeTable, evnt, params) {
2134
2289
  $xeTable.analyColumnWidth();
2135
- $xeTable.recalculate(true).then(() => {
2290
+ $xeTable.recalculate().then(() => {
2136
2291
  $xeTable.saveCustomStore('update:width');
2137
2292
  $xeTable.updateCellAreas();
2138
2293
  $xeTable.dispatchEvent('column-resizable-change', params, evnt);
@@ -2144,7 +2299,7 @@ function handleUpdateColResize($xeTable, evnt, params) {
2144
2299
  function handleUpdateRowResize($xeTable, evnt, params) {
2145
2300
  const reactData = $xeTable;
2146
2301
  reactData.resizeHeightFlag++;
2147
- $xeTable.recalculate(true).then(() => {
2302
+ $xeTable.recalculate().then(() => {
2148
2303
  $xeTable.updateCellAreas();
2149
2304
  $xeTable.dispatchEvent('row-resizable-change', params, evnt);
2150
2305
  setTimeout(() => $xeTable.recalculate(true), 300);
@@ -2165,16 +2320,17 @@ function updateColumnOffsetLeft($xeTable) {
2165
2320
  function updateRowOffsetTop($xeTable) {
2166
2321
  const reactData = $xeTable;
2167
2322
  const internalData = $xeTable;
2168
- const { expandColumn, rowExpandedMaps } = reactData;
2169
- const { afterFullData, fullAllDataRowIdData } = internalData;
2323
+ const { expandColumn } = reactData;
2324
+ const { afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
2170
2325
  const expandOpts = $xeTable.computeExpandOpts;
2171
2326
  const rowOpts = $xeTable.computeRowOpts;
2172
2327
  const cellOpts = $xeTable.computeCellOpts;
2173
2328
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
2329
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
2174
2330
  let offsetTop = 0;
2175
2331
  for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
2176
2332
  const row = afterFullData[rIndex];
2177
- const rowid = getRowid($xeTable, row);
2333
+ const rowid = handleGetRowId(row);
2178
2334
  const rowRest = fullAllDataRowIdData[rowid] || {};
2179
2335
  rowRest.oTop = offsetTop;
2180
2336
  offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
@@ -2187,47 +2343,43 @@ function updateRowOffsetTop($xeTable) {
2187
2343
  function updateRowExpandStyle($xeTable) {
2188
2344
  const reactData = $xeTable;
2189
2345
  const internalData = $xeTable;
2190
- const { expandColumn, scrollYLoad, rowExpandedMaps } = reactData;
2346
+ const { expandColumn, scrollYLoad, scrollYTop, isScrollYBig } = reactData;
2191
2347
  const expandOpts = $xeTable.computeExpandOpts;
2192
2348
  const rowOpts = $xeTable.computeRowOpts;
2193
2349
  const cellOpts = $xeTable.computeCellOpts;
2194
2350
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
2195
2351
  const { mode } = expandOpts;
2196
2352
  if (expandColumn && mode === 'fixed') {
2197
- const { elemStore, afterFullData, fullAllDataRowIdData } = internalData;
2353
+ const { elemStore, fullAllDataRowIdData } = internalData;
2198
2354
  const rowExpandEl = $xeTable.$refs.refRowExpandElem;
2199
2355
  const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
2200
2356
  if (rowExpandEl && bodyScrollElem) {
2201
2357
  let isUpdateHeight = false;
2202
- if (scrollYLoad) {
2203
- let offsetTop = 0;
2204
- for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
2205
- const row = afterFullData[rIndex];
2206
- const rowid = getRowid($xeTable, row);
2207
- const rowRest = fullAllDataRowIdData[rowid] || {};
2208
- rowRest.oTop = offsetTop;
2209
- offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
2210
- // 是否展开行
2211
- if (expandColumn && rowExpandedMaps[rowid]) {
2212
- offsetTop += rowRest.expandHeight || expandOpts.height || 0;
2213
- }
2214
- }
2215
- }
2216
2358
  XEUtils.arrayEach(rowExpandEl.children, reEl => {
2217
2359
  const expandEl = reEl;
2218
2360
  const rowid = expandEl.getAttribute('rowid') || '';
2219
2361
  const rowRest = fullAllDataRowIdData[rowid];
2220
2362
  if (rowRest) {
2221
2363
  const expandHeight = expandEl.offsetHeight + 1;
2364
+ const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
2365
+ let offsetTop = 0;
2222
2366
  if (scrollYLoad) {
2223
- expandEl.style.top = toCssUnit(rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight));
2367
+ if (isScrollYBig && trEl) {
2368
+ offsetTop = trEl.offsetTop + trEl.offsetHeight;
2369
+ }
2370
+ else {
2371
+ offsetTop = rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight);
2372
+ }
2224
2373
  }
2225
2374
  else {
2226
- const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
2227
2375
  if (trEl) {
2228
- expandEl.style.top = toCssUnit(trEl.offsetTop + trEl.offsetHeight);
2376
+ offsetTop = trEl.offsetTop + trEl.offsetHeight;
2229
2377
  }
2230
2378
  }
2379
+ if (isScrollYBig) {
2380
+ offsetTop += scrollYTop;
2381
+ }
2382
+ expandEl.style.top = toCssUnit(offsetTop);
2231
2383
  if (!isUpdateHeight) {
2232
2384
  if (rowRest.expandHeight !== expandHeight) {
2233
2385
  isUpdateHeight = true;
@@ -2238,6 +2390,9 @@ function updateRowExpandStyle($xeTable) {
2238
2390
  });
2239
2391
  if (isUpdateHeight) {
2240
2392
  reactData.rowExpandHeightFlag++;
2393
+ $xeTable.$nextTick(() => {
2394
+ updateRowOffsetTop($xeTable);
2395
+ });
2241
2396
  }
2242
2397
  }
2243
2398
  }
@@ -2253,10 +2408,11 @@ function handleRowExpandScroll($xeTable) {
2253
2408
  }
2254
2409
  const Methods = {
2255
2410
  callSlot(slotFunc, params, h, vNodes) {
2411
+ const $xeTable = this;
2412
+ const $xeGrid = $xeTable.$xeGrid;
2256
2413
  if (slotFunc) {
2257
- const { $xegrid } = this;
2258
- if ($xegrid) {
2259
- return $xegrid.callSlot(slotFunc, params, h, vNodes);
2414
+ if ($xeGrid) {
2415
+ return $xeGrid.callSlot(slotFunc, params, h, vNodes);
2260
2416
  }
2261
2417
  if (XEUtils.isFunction(slotFunc)) {
2262
2418
  return getSlotVNs(slotFunc.call(this, params, h, vNodes));
@@ -2272,8 +2428,10 @@ const Methods = {
2272
2428
  * 获取父容器元素
2273
2429
  */
2274
2430
  getParentElem() {
2275
- const { $el, $xegrid } = this;
2276
- return $xegrid ? $xegrid.$el.parentNode : $el.parentNode;
2431
+ const $xeTable = this;
2432
+ const $xeGrid = $xeTable.$xeGrid;
2433
+ const { $el } = this;
2434
+ return $xeGrid ? $xeGrid.$el.parentNode : $el.parentNode;
2277
2435
  },
2278
2436
  /**
2279
2437
  * 获取父容器的高度
@@ -2306,8 +2464,9 @@ const Methods = {
2306
2464
  * 如果存在表尾合计滚动条,则需要排除滚动条高度
2307
2465
  */
2308
2466
  getExcludeHeight() {
2309
- const { $xegrid } = this;
2310
- return $xegrid ? $xegrid.getExcludeHeight() : 0;
2467
+ const $xeTable = this;
2468
+ const $xeGrid = $xeTable.$xeGrid;
2469
+ return $xeGrid ? $xeGrid.getExcludeHeight() : 0;
2311
2470
  },
2312
2471
  /**
2313
2472
  * 重置表格的一切数据状态
@@ -2386,6 +2545,9 @@ const Methods = {
2386
2545
  const childrenField = treeOpts.children || treeOpts.childrenField;
2387
2546
  let treeData = [];
2388
2547
  let fullData = datas ? datas.slice(0) : [];
2548
+ if (fullData.length > supportMaxRow) {
2549
+ errLog('vxe.error.errMaxRow', [supportMaxRow]);
2550
+ }
2389
2551
  if (treeConfig) {
2390
2552
  // 树结构自动转换
2391
2553
  if (treeOpts.transform) {
@@ -2628,24 +2790,18 @@ const Methods = {
2628
2790
  const reactData = $xeTable;
2629
2791
  const internalData = $xeTable;
2630
2792
  const { treeConfig } = props;
2631
- const { treeExpandedMaps } = reactData;
2632
- const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData;
2793
+ const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData;
2633
2794
  const treeOpts = $xeTable.computeTreeOpts;
2634
2795
  const childrenField = treeOpts.children || treeOpts.childrenField;
2635
2796
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
2636
2797
  const { lazy } = treeOpts;
2637
- const rowkey = getRowkey($xeTable);
2638
- const isDeepKey = rowkey.indexOf('.') > -1;
2639
2798
  const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
2640
2799
  const fullDataRowIdMaps = {};
2641
- const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
2642
- const handleRowId = isDeepKey ? updateDeepRowKey : updateFastRowKey;
2800
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
2643
2801
  const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
2644
2802
  let rowRest = fullAllDataRowIdMaps[rowid];
2645
2803
  if (!rowRest) {
2646
2804
  rowRest = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
2647
- fullDataRowIdMaps[rowid] = rowRest;
2648
- fullAllDataRowIdMaps[rowid] = rowRest;
2649
2805
  }
2650
2806
  rowRest.treeLoaded = false;
2651
2807
  rowRest.expandLoaded = false;
@@ -2655,18 +2811,19 @@ const Methods = {
2655
2811
  rowRest.level = level;
2656
2812
  rowRest.index = currIndex;
2657
2813
  rowRest.treeIndex = index;
2814
+ fullDataRowIdMaps[rowid] = rowRest;
2815
+ fullAllDataRowIdMaps[rowid] = rowRest;
2658
2816
  };
2659
2817
  if (treeConfig) {
2660
2818
  XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
2661
- const rowid = handleRowId(row, rowkey);
2819
+ const rowid = handleUpdateRowId(row);
2662
2820
  if (treeConfig && lazy) {
2663
- const treeExpRest = treeTempExpandedMaps[rowid];
2664
2821
  if (row[hasChildField] && row[childrenField] === undefined) {
2665
2822
  row[childrenField] = null;
2666
2823
  }
2667
- if (treeExpRest) {
2824
+ if (treeExpandedMaps[rowid]) {
2668
2825
  if (!row[childrenField] || !row[childrenField].length) {
2669
- delete treeTempExpandedMaps[rowid];
2826
+ delete treeExpandedMaps[rowid];
2670
2827
  }
2671
2828
  }
2672
2829
  }
@@ -2675,28 +2832,25 @@ const Methods = {
2675
2832
  }
2676
2833
  else {
2677
2834
  tableFullData.forEach((row, index, items) => {
2678
- handleRowCache(row, index, items, index, null, handleRowId(row, rowkey), 0, index + 1);
2835
+ handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
2679
2836
  });
2680
2837
  }
2681
2838
  internalData.fullDataRowIdData = fullDataRowIdMaps;
2682
2839
  internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
2683
- reactData.treeExpandedMaps = treeTempExpandedMaps;
2840
+ reactData.treeExpandedFlag++;
2684
2841
  },
2685
2842
  cacheSourceMap(fullData) {
2686
- let { treeConfig, treeOpts, sourceDataRowIdData } = this;
2843
+ const $xeTable = this;
2844
+ const props = $xeTable;
2845
+ const internalData = $xeTable;
2846
+ const { treeConfig } = props;
2847
+ const treeOpts = $xeTable.computeTreeOpts;
2687
2848
  const sourceData = XEUtils.clone(fullData, true);
2688
- const rowkey = getRowkey(this);
2689
- sourceDataRowIdData = this.sourceDataRowIdData = {};
2849
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
2850
+ const sourceRowIdData = {};
2690
2851
  const handleSourceRow = (row) => {
2691
- let rowid = getRowid(this, row);
2692
- if (eqEmptyValue(rowid)) {
2693
- rowid = getRowUniqueId();
2694
- XEUtils.set(row, rowkey, rowid);
2695
- }
2696
- sourceDataRowIdData[rowid] = {
2697
- row,
2698
- rowid
2699
- };
2852
+ const rowid = handleUpdateRowId(row);
2853
+ sourceRowIdData[rowid] = row;
2700
2854
  };
2701
2855
  // 源数据缓存
2702
2856
  if (treeConfig) {
@@ -2706,7 +2860,8 @@ const Methods = {
2706
2860
  else {
2707
2861
  sourceData.forEach(handleSourceRow);
2708
2862
  }
2709
- this.tableSourceData = sourceData;
2863
+ internalData.sourceDataRowIdData = sourceRowIdData;
2864
+ internalData.tableSourceData = sourceData;
2710
2865
  },
2711
2866
  getParams() {
2712
2867
  return this.params;
@@ -2793,47 +2948,22 @@ const Methods = {
2793
2948
  * 根据 row 获取序号
2794
2949
  * @param {Row} row 行对象
2795
2950
  */
2796
- getRowSeq(row) {
2797
- const { fullAllDataRowIdData } = this;
2798
- if (row) {
2799
- const rowid = getRowid(this, row);
2800
- const rest = fullAllDataRowIdData[rowid];
2801
- if (rest) {
2802
- return rest.seq;
2803
- }
2804
- }
2805
- return -1;
2806
- },
2951
+ getRowSeq: createGetRowCacheProp('seq'),
2807
2952
  /**
2808
2953
  * 根据 row 获取相对于 data 中的索引
2809
2954
  * @param {Row} row 行对象
2810
2955
  */
2811
- getRowIndex(row) {
2812
- const { fullAllDataRowIdData } = this;
2813
- if (row) {
2814
- const rowid = getRowid(this, row);
2815
- const rest = fullAllDataRowIdData[rowid];
2816
- if (rest) {
2817
- return rest.index;
2818
- }
2819
- }
2820
- return -1;
2821
- },
2956
+ getRowIndex: createGetRowCacheProp('index'),
2822
2957
  /**
2823
2958
  * 根据 row 获取相对于当前数据中的索引
2824
2959
  * @param {Row} row 行对象
2825
2960
  */
2826
- getVTRowIndex(row) {
2827
- const { fullAllDataRowIdData } = this;
2828
- if (row) {
2829
- const rowid = getRowid(this, row);
2830
- const rest = fullAllDataRowIdData[rowid];
2831
- if (rest) {
2832
- return rest._index;
2833
- }
2834
- }
2835
- return -1;
2836
- },
2961
+ getVTRowIndex: createGetRowCacheProp('_index'),
2962
+ /**
2963
+ * 根据 row 获取渲染中的虚拟索引
2964
+ * @param {Row} row 行对象
2965
+ */
2966
+ getVMRowIndex: createGetRowCacheProp('$index'),
2837
2967
  // 在 v3 中废弃
2838
2968
  _getRowIndex(row) {
2839
2969
  if (process.env.NODE_ENV === 'development') {
@@ -2841,21 +2971,6 @@ const Methods = {
2841
2971
  }
2842
2972
  return this.getVTRowIndex(row);
2843
2973
  },
2844
- /**
2845
- * 根据 row 获取渲染中的虚拟索引
2846
- * @param {Row} row 行对象
2847
- */
2848
- getVMRowIndex(row) {
2849
- const { fullAllDataRowIdData } = this;
2850
- if (row) {
2851
- const rowid = getRowid(this, row);
2852
- const rest = fullAllDataRowIdData[rowid];
2853
- if (rest) {
2854
- return rest.$index;
2855
- }
2856
- }
2857
- return -1;
2858
- },
2859
2974
  // 在 v3 中废弃
2860
2975
  $getRowIndex(row) {
2861
2976
  if (process.env.NODE_ENV === 'development') {
@@ -2867,30 +2982,17 @@ const Methods = {
2867
2982
  * 根据 column 获取相对于 columns 中的索引
2868
2983
  * @param {ColumnInfo} column 列配置
2869
2984
  */
2870
- getColumnIndex(column) {
2871
- const { fullColumnIdData } = this;
2872
- if (column) {
2873
- const rest = fullColumnIdData[column.id];
2874
- if (rest) {
2875
- return rest.index;
2876
- }
2877
- }
2878
- return -1;
2879
- },
2985
+ getColumnIndex: createGetColumnCacheProp('index'),
2880
2986
  /**
2881
2987
  * 根据 column 获取相对于当前表格列中的索引
2882
2988
  * @param {ColumnInfo} column 列配置
2883
2989
  */
2884
- getVTColumnIndex(column) {
2885
- const { fullColumnIdData } = this;
2886
- if (column) {
2887
- const rest = fullColumnIdData[column.id];
2888
- if (rest) {
2889
- return rest._index;
2890
- }
2891
- }
2892
- return -1;
2893
- },
2990
+ getVTColumnIndex: createGetColumnCacheProp('_index'),
2991
+ /**
2992
+ * 根据 column 获取渲染中的虚拟索引
2993
+ * @param {ColumnInfo} column 列配置
2994
+ */
2995
+ getVMColumnIndex: createGetColumnCacheProp('$index'),
2894
2996
  // 在 v3 中废弃
2895
2997
  _getColumnIndex(column) {
2896
2998
  if (process.env.NODE_ENV === 'development') {
@@ -2898,20 +3000,6 @@ const Methods = {
2898
3000
  }
2899
3001
  return this.getVTColumnIndex(column);
2900
3002
  },
2901
- /**
2902
- * 根据 column 获取渲染中的虚拟索引
2903
- * @param {ColumnInfo} column 列配置
2904
- */
2905
- getVMColumnIndex(column) {
2906
- const { fullColumnIdData } = this;
2907
- if (column) {
2908
- const rest = fullColumnIdData[column.id];
2909
- if (rest) {
2910
- return rest.$index;
2911
- }
2912
- }
2913
- return -1;
2914
- },
2915
3003
  // 在 v3 中废弃
2916
3004
  $getColumnIndex(column) {
2917
3005
  if (process.env.NODE_ENV === 'development') {
@@ -3005,9 +3093,12 @@ const Methods = {
3005
3093
  const reactData = $xeTable;
3006
3094
  const internalData = $xeTable;
3007
3095
  const { keepSource, treeConfig } = props;
3096
+ const { editStore } = reactData;
3008
3097
  const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
3098
+ const removeTempMaps = Object.assign({}, editStore.removeMaps);
3009
3099
  const treeOpts = $xeTable.computeTreeOpts;
3010
3100
  const { transform } = treeOpts;
3101
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
3011
3102
  if (!keepSource) {
3012
3103
  if (process.env.NODE_ENV === 'development') {
3013
3104
  errLog('vxe.error.reqProp', ['keep-source']);
@@ -3026,7 +3117,7 @@ const Methods = {
3026
3117
  let reDelFlag = false;
3027
3118
  if (targetRows.length) {
3028
3119
  targetRows.forEach((item) => {
3029
- const rowid = getRowid($xeTable, item);
3120
+ const rowid = handleGetRowId(item);
3030
3121
  const rowRest = fullAllDataRowIdData[rowid];
3031
3122
  if (rowRest) {
3032
3123
  const row = rowRest.row;
@@ -3040,6 +3131,7 @@ const Methods = {
3040
3131
  XEUtils.destructuring(row, XEUtils.clone(oRow, true));
3041
3132
  }
3042
3133
  if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
3134
+ delete removeTempMaps[rowid];
3043
3135
  tableFullData.unshift(row);
3044
3136
  afterFullData.unshift(row);
3045
3137
  reDelFlag = true;
@@ -3051,6 +3143,7 @@ const Methods = {
3051
3143
  }
3052
3144
  if (rows) {
3053
3145
  if (reDelFlag) {
3146
+ editStore.removeMaps = removeTempMaps;
3054
3147
  $xeTable.updateFooter();
3055
3148
  $xeTable.cacheRowMap(false);
3056
3149
  $xeTable.handleTableData(treeConfig && transform);
@@ -3408,11 +3501,9 @@ const Methods = {
3408
3501
  getCheckboxRecords(isFull) {
3409
3502
  const $xeTable = this;
3410
3503
  const props = $xeTable;
3411
- const reactData = $xeTable;
3412
3504
  const internalData = $xeTable;
3413
3505
  const { treeConfig } = props;
3414
- const { selectCheckboxMaps } = reactData;
3415
- const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData;
3506
+ const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
3416
3507
  const treeOpts = $xeTable.computeTreeOpts;
3417
3508
  const checkboxOpts = $xeTable.computeCheckboxOpts;
3418
3509
  const { transform, mapChildrenField } = treeOpts;
@@ -3460,7 +3551,7 @@ const Methods = {
3460
3551
  const treeOpts = $xeTable.computeTreeOpts;
3461
3552
  const childrenField = treeOpts.children || treeOpts.childrenField;
3462
3553
  const { transform, rowField, parentField, mapChildrenField } = treeOpts;
3463
- const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
3554
+ const { isEvery, remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
3464
3555
  const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts;
3465
3556
  let tableData = [];
3466
3557
  let tableTree = [];
@@ -3519,7 +3610,7 @@ const Methods = {
3519
3610
  // 筛选虚拟树
3520
3611
  tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
3521
3612
  original: true,
3522
- isEvery: true,
3613
+ isEvery,
3523
3614
  children: mapChildrenField,
3524
3615
  mapChildren: childrenField
3525
3616
  });
@@ -3535,7 +3626,7 @@ const Methods = {
3535
3626
  // 还原虚拟树
3536
3627
  tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
3537
3628
  original: true,
3538
- isEvery: true,
3629
+ isEvery,
3539
3630
  children: mapChildrenField,
3540
3631
  mapChildren: childrenField
3541
3632
  });
@@ -3598,7 +3689,7 @@ const Methods = {
3598
3689
  // 还原虚拟树
3599
3690
  tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
3600
3691
  original: true,
3601
- isEvery: true,
3692
+ isEvery,
3602
3693
  children: treeOpts.mapChildrenField,
3603
3694
  mapChildren: childrenField
3604
3695
  });
@@ -3745,6 +3836,7 @@ const Methods = {
3745
3836
  * 默认执行一次,除非被重置
3746
3837
  */
3747
3838
  handleLoadDefaults() {
3839
+ const $xeTable = this;
3748
3840
  if (this.checkboxConfig) {
3749
3841
  this.handleDefaultSelectionChecked();
3750
3842
  }
@@ -3755,7 +3847,7 @@ const Methods = {
3755
3847
  this.handleDefaultRowExpand();
3756
3848
  }
3757
3849
  if (this.treeConfig) {
3758
- this.handleDefaultTreeExpand();
3850
+ handleDefaultTreeExpand($xeTable);
3759
3851
  }
3760
3852
  if (this.mergeCells) {
3761
3853
  this.handleDefaultMergeCells();
@@ -3943,9 +4035,9 @@ const Methods = {
3943
4035
  return this.refreshColumn(true);
3944
4036
  },
3945
4037
  handleCustomRestore(storeData) {
3946
- const $xetable = this;
3947
- const reactData = $xetable;
3948
- const internalData = $xetable;
4038
+ const $xeTable = this;
4039
+ const reactData = $xeTable;
4040
+ const internalData = $xeTable;
3949
4041
  let { collectColumn } = internalData;
3950
4042
  const { resizableData, sortData, visibleData, fixedData } = storeData;
3951
4043
  let hasCustomSort = false;
@@ -4014,8 +4106,19 @@ const Methods = {
4014
4106
  }
4015
4107
  },
4016
4108
  getCustomStoreData() {
4017
- const { id, customOpts, collectColumn } = this;
4018
- const { checkMethod } = customOpts;
4109
+ const $xeTable = this;
4110
+ const props = $xeTable;
4111
+ const internalData = $xeTable;
4112
+ const { id } = props;
4113
+ const customOpts = $xeTable.computeCustomOpts;
4114
+ const { collectColumn } = internalData;
4115
+ const { storage, checkMethod } = customOpts;
4116
+ const isAllCustom = storage === true;
4117
+ const storageOpts = isAllCustom ? {} : Object.assign({}, storage || {});
4118
+ const isCustomResizable = isAllCustom || storageOpts.resizable;
4119
+ const isCustomVisible = isAllCustom || storageOpts.visible;
4120
+ const isCustomFixed = isAllCustom || storageOpts.fixed;
4121
+ const isCustomSort = isAllCustom || storageOpts.sort;
4019
4122
  const resizableData = {};
4020
4123
  const sortData = {};
4021
4124
  const visibleData = {};
@@ -4032,47 +4135,37 @@ const Methods = {
4032
4135
  }
4033
4136
  let hasResizable = 0;
4034
4137
  let hasSort = 0;
4035
- let hasFixedt = 0;
4138
+ let hasFixed = 0;
4036
4139
  let hasVisible = 0;
4037
4140
  XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => {
4141
+ const colKey = column.getKey();
4142
+ if (!colKey) {
4143
+ errLog('vxe.error.reqProp', [`${column.getTitle() || column.type || ''} -> column.field=?`]);
4144
+ return;
4145
+ }
4038
4146
  // 只支持一级
4039
4147
  if (!parentColumn) {
4040
- collectColumn.forEach((column) => {
4041
- const colKey = column.getKey();
4042
- if (colKey) {
4043
- hasSort = 1;
4044
- sortData[colKey] = column.renderSortNumber;
4045
- }
4046
- });
4047
- if (column.fixed !== column.defaultFixed) {
4048
- const colKey = column.getKey();
4049
- if (colKey) {
4050
- hasFixedt = 1;
4051
- fixedData[colKey] = column.fixed;
4052
- }
4148
+ if (isCustomSort) {
4149
+ hasSort = 1;
4150
+ sortData[colKey] = column.renderSortNumber;
4053
4151
  }
4054
- }
4055
- if (column.resizeWidth) {
4056
- const colKey = column.getKey();
4057
- if (colKey) {
4058
- hasResizable = 1;
4059
- resizableData[colKey] = column.renderWidth;
4152
+ if (isCustomFixed && column.fixed !== column.defaultFixed) {
4153
+ hasFixed = 1;
4154
+ fixedData[colKey] = column.fixed;
4060
4155
  }
4061
4156
  }
4062
- if (!checkMethod || checkMethod({ column })) {
4157
+ if (isCustomResizable && column.resizeWidth) {
4158
+ hasResizable = 1;
4159
+ resizableData[colKey] = column.renderWidth;
4160
+ }
4161
+ if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
4063
4162
  if (!column.visible && column.defaultVisible) {
4064
- const colKey = column.getKey();
4065
- if (colKey) {
4066
- hasVisible = 1;
4067
- visibleData[colKey] = false;
4068
- }
4163
+ hasVisible = 1;
4164
+ visibleData[colKey] = false;
4069
4165
  }
4070
4166
  else if (column.visible && !column.defaultVisible) {
4071
- const colKey = column.getKey();
4072
- if (colKey) {
4073
- hasVisible = 1;
4074
- visibleData[colKey] = true;
4075
- }
4167
+ hasVisible = 1;
4168
+ visibleData[colKey] = true;
4076
4169
  }
4077
4170
  }
4078
4171
  });
@@ -4082,7 +4175,7 @@ const Methods = {
4082
4175
  if (hasSort) {
4083
4176
  storeData.sortData = sortData;
4084
4177
  }
4085
- if (hasFixedt) {
4178
+ if (hasFixed) {
4086
4179
  storeData.fixedData = fixedData;
4087
4180
  }
4088
4181
  if (hasVisible) {
@@ -4570,12 +4663,13 @@ const Methods = {
4570
4663
  const $xeTable = this;
4571
4664
  const internalData = $xeTable;
4572
4665
  const { fullAllDataRowIdData, afterFullData } = internalData;
4666
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4573
4667
  const rowOpts = $xeTable.computeRowOpts;
4574
4668
  const cellOpts = $xeTable.computeCellOpts;
4575
4669
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
4576
4670
  const rest = {};
4577
4671
  afterFullData.forEach(row => {
4578
- const rowid = getRowid($xeTable, row);
4672
+ const rowid = handleGetRowId(row);
4579
4673
  const rowRest = fullAllDataRowIdData[rowid];
4580
4674
  if (rowRest) {
4581
4675
  const resizeHeight = rowRest.resizeHeight;
@@ -4602,8 +4696,9 @@ const Methods = {
4602
4696
  rHeight = Math.floor(rHeight * bodyHeight);
4603
4697
  }
4604
4698
  if (rHeight) {
4699
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4605
4700
  rows.forEach(row => {
4606
- const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : getRowid($xeTable, row);
4701
+ const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row);
4607
4702
  const rowRest = fullAllDataRowIdData[rowid];
4608
4703
  if (rowRest) {
4609
4704
  rowRest.resizeHeight = rHeight;
@@ -4744,6 +4839,8 @@ const Methods = {
4744
4839
  }
4745
4840
  },
4746
4841
  preventEvent(evnt, type, args, next, end) {
4842
+ const $xeTable = this;
4843
+ const $xeGrid = $xeTable.$xeGrid;
4747
4844
  let evntList = interceptor.get(type);
4748
4845
  // 兼容老版本
4749
4846
  if (!evntList.length && type === 'event.clearEdit') {
@@ -4755,8 +4852,22 @@ const Methods = {
4755
4852
  }
4756
4853
  }
4757
4854
  // 兼容老版本
4758
- let rest;
4759
- if (!evntList.some(func => func(Object.assign({ $grid: this.$xegrid, $table: this, $event: evnt }, args)) === false)) {
4855
+ let rest = null;
4856
+ let isStop = false;
4857
+ for (let i = 0; i < evntList.length; i++) {
4858
+ const func = evntList[i];
4859
+ const fnRest = func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args));
4860
+ if (fnRest === false) {
4861
+ isStop = true;
4862
+ break;
4863
+ }
4864
+ else if (fnRest && fnRest.status === false) {
4865
+ rest = fnRest.result;
4866
+ isStop = true;
4867
+ break;
4868
+ }
4869
+ }
4870
+ if (!isStop) {
4760
4871
  if (next) {
4761
4872
  rest = next();
4762
4873
  }
@@ -4770,7 +4881,9 @@ const Methods = {
4770
4881
  * 全局按下事件处理
4771
4882
  */
4772
4883
  handleGlobalMousedownEvent(evnt) {
4773
- const { $el, $refs, $xegrid, $toolbar, mouseConfig, editStore, ctxMenuStore, editRules, editOpts, validOpts, areaOpts, filterStore, customStore, getRowNode } = this;
4884
+ const $xeTable = this;
4885
+ const $xeGrid = $xeTable.$xeGrid;
4886
+ const { $el, $refs, $toolbar, mouseConfig, editStore, ctxMenuStore, editRules, editOpts, validOpts, areaOpts, filterStore, customStore, getRowNode } = this;
4774
4887
  const { actived } = editStore;
4775
4888
  const { customWrapper, refValidTooltip } = $refs;
4776
4889
  const tableFilter = $refs.refTableFilter;
@@ -4860,7 +4973,7 @@ const Methods = {
4860
4973
  }
4861
4974
  }
4862
4975
  else if (mouseConfig) {
4863
- if (!getEventTargetNode(evnt, $el).flag && !($xegrid && getEventTargetNode(evnt, $xegrid.$el).flag) && !(tableMenu && getEventTargetNode(evnt, tableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
4976
+ if (!getEventTargetNode(evnt, $el).flag && !($xeGrid && getEventTargetNode(evnt, $xeGrid.$el).flag) && !(tableMenu && getEventTargetNode(evnt, tableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
4864
4977
  if (this.clearSelected) {
4865
4978
  this.clearSelected();
4866
4979
  }
@@ -4882,7 +4995,7 @@ const Methods = {
4882
4995
  if (ctxMenuStore.visible && tableMenu && !getEventTargetNode(evnt, tableMenu.$el).flag) {
4883
4996
  this.closeMenu();
4884
4997
  }
4885
- const isActivated = getEventTargetNode(evnt, ($xegrid || this).$el).flag;
4998
+ const isActivated = getEventTargetNode(evnt, ($xeGrid || this).$el).flag;
4886
4999
  // 如果存在校验,点击了表格之外则清除
4887
5000
  if (!isActivated && editRules && validOpts.autoClear) {
4888
5001
  this.validErrorMaps = {};
@@ -4946,6 +5059,7 @@ const Methods = {
4946
5059
  handleGlobalKeydownEvent(evnt) {
4947
5060
  const $xeTable = this;
4948
5061
  const internalData = $xeTable;
5062
+ const $xeGrid = $xeTable.$xeGrid;
4949
5063
  // 该行为只对当前激活的表格有效
4950
5064
  if (this.isActivated) {
4951
5065
  this.preventEvent(evnt, 'event.keydown', null, () => {
@@ -5044,7 +5158,7 @@ const Methods = {
5044
5158
  this.moveTabSelected(activeParams, hasShiftKey, evnt);
5045
5159
  }
5046
5160
  else {
5047
- this.moveSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt);
5161
+ this.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt);
5048
5162
  }
5049
5163
  }
5050
5164
  else {
@@ -5078,7 +5192,7 @@ const Methods = {
5078
5192
  return;
5079
5193
  }
5080
5194
  }
5081
- this.moveSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt);
5195
+ this.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt);
5082
5196
  if (enterMethod) {
5083
5197
  enterMethod(etrParams);
5084
5198
  }
@@ -5104,11 +5218,7 @@ const Methods = {
5104
5218
  if (!isEditStatus) {
5105
5219
  // 如果按下了方向键
5106
5220
  if (selected.row && selected.column) {
5107
- this.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
5108
- }
5109
- else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
5110
- // 当前行按键上下移动
5111
- this.moveCurrentRow(isUpArrow, isDwArrow, evnt);
5221
+ $xeTable.moveArrowSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
5112
5222
  }
5113
5223
  }
5114
5224
  }
@@ -5131,7 +5241,7 @@ const Methods = {
5131
5241
  column: selected.column,
5132
5242
  columnIndex: this.getColumnIndex(selected.column),
5133
5243
  $table: this,
5134
- $grid: this.$xegrid
5244
+ $grid: $xeGrid
5135
5245
  };
5136
5246
  // 是否被禁用
5137
5247
  if (!beforeEditMethod || beforeEditMethod(params)) {
@@ -5158,7 +5268,7 @@ const Methods = {
5158
5268
  column: selected.column,
5159
5269
  columnIndex: this.getColumnIndex(selected.column),
5160
5270
  $table: this,
5161
- $grid: this.$xegrid
5271
+ $grid: $xeGrid
5162
5272
  };
5163
5273
  // 是否被禁用
5164
5274
  if (!beforeEditMethod || beforeEditMethod(params)) {
@@ -5187,7 +5297,7 @@ const Methods = {
5187
5297
  rowIndex: this.getRowIndex(parentRow),
5188
5298
  $rowIndex: this.getVMRowIndex(parentRow),
5189
5299
  $table: this,
5190
- $grid: this.$xegrid
5300
+ $grid: $xeGrid
5191
5301
  };
5192
5302
  this.setTreeExpand(parentRow, false)
5193
5303
  .then(() => this.scrollToRow(parentRow))
@@ -5209,7 +5319,7 @@ const Methods = {
5209
5319
  column: selected.column,
5210
5320
  columnIndex: this.getColumnIndex(selected.column),
5211
5321
  $table: this,
5212
- $grid: this.$xegrid
5322
+ $grid: $xeGrid
5213
5323
  };
5214
5324
  if (!beforeEditMethod || beforeEditMethod(params)) {
5215
5325
  if (editMethod) {
@@ -5330,7 +5440,7 @@ const Methods = {
5330
5440
  return;
5331
5441
  }
5332
5442
  if (tooltipStore.column !== column || !tooltipStore.visible) {
5333
- handleTooltip($xeTable, evnt, thEl, cellEl, null, params);
5443
+ handleTooltip($xeTable, evnt, thEl, thEl.querySelector('.vxe-cell--title') || cellEl, params);
5334
5444
  }
5335
5445
  },
5336
5446
  /**
@@ -5360,7 +5470,7 @@ const Methods = {
5360
5470
  }
5361
5471
  }
5362
5472
  if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
5363
- handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper'), null, params);
5473
+ handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
5364
5474
  }
5365
5475
  },
5366
5476
  /**
@@ -5371,10 +5481,10 @@ const Methods = {
5371
5481
  const reactData = $xeTable;
5372
5482
  const { column } = params;
5373
5483
  const { tooltipStore } = reactData;
5374
- const cell = evnt.currentTarget;
5484
+ const tdEl = evnt.currentTarget;
5375
5485
  handleTargetEnterEvent($xeTable, tooltipStore.column !== column || !!tooltipStore.row);
5376
5486
  if (tooltipStore.column !== column || !tooltipStore.visible) {
5377
- handleTooltip($xeTable, evnt, cell, cell.querySelector('.vxe-cell--wrapper') || cell.children[0], null, params);
5487
+ handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
5378
5488
  }
5379
5489
  },
5380
5490
  openTooltip(target, content) {
@@ -5431,11 +5541,15 @@ const Methods = {
5431
5541
  * 获取复选框半选状态的行数据
5432
5542
  */
5433
5543
  getCheckboxIndeterminateRecords(isFull) {
5434
- const { treeConfig, treeIndeterminateMaps, fullDataRowIdData } = this;
5544
+ const $xeTable = this;
5545
+ const props = $xeTable;
5546
+ const internalData = $xeTable;
5547
+ const { treeConfig } = props;
5548
+ const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData;
5435
5549
  if (treeConfig) {
5436
5550
  const fullRest = [];
5437
5551
  const defRest = [];
5438
- XEUtils.each(treeIndeterminateMaps, (item, rowid) => {
5552
+ XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
5439
5553
  if (item) {
5440
5554
  fullRest.push(item);
5441
5555
  if (fullDataRowIdData[rowid]) {
@@ -5505,20 +5619,22 @@ const Methods = {
5505
5619
  isCheckedByCheckboxRow(row) {
5506
5620
  const $xeTable = this;
5507
5621
  const reactData = $xeTable;
5508
- const { selectCheckboxMaps } = reactData;
5622
+ const internalData = $xeTable;
5623
+ const { updateCheckboxFlag } = reactData;
5624
+ const { selectCheckboxMaps } = internalData;
5509
5625
  const checkboxOpts = $xeTable.computeCheckboxOpts;
5510
5626
  const { checkField } = checkboxOpts;
5511
5627
  if (checkField) {
5512
5628
  return XEUtils.get(row, checkField);
5513
5629
  }
5514
- return !!selectCheckboxMaps[getRowid($xeTable, row)];
5630
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)];
5515
5631
  },
5516
5632
  isCheckedByCheckboxRowKey(rowid) {
5517
5633
  const $xeTable = this;
5518
5634
  const reactData = $xeTable;
5519
5635
  const internalData = $xeTable;
5520
- const { selectCheckboxMaps } = reactData;
5521
- const { fullAllDataRowIdData } = internalData;
5636
+ const { updateCheckboxFlag } = reactData;
5637
+ const { fullAllDataRowIdData, selectCheckboxMaps } = internalData;
5522
5638
  const checkboxOpts = $xeTable.computeCheckboxOpts;
5523
5639
  const { checkField } = checkboxOpts;
5524
5640
  if (checkField) {
@@ -5528,19 +5644,19 @@ const Methods = {
5528
5644
  }
5529
5645
  return false;
5530
5646
  }
5531
- return !!selectCheckboxMaps[rowid];
5647
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
5532
5648
  },
5533
5649
  isIndeterminateByCheckboxRow(row) {
5534
5650
  const $xeTable = this;
5535
- const reactData = $xeTable;
5536
- const { treeIndeterminateMaps } = reactData;
5537
- return !!treeIndeterminateMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
5651
+ const internalData = $xeTable;
5652
+ const { treeIndeterminateRowMaps } = internalData;
5653
+ return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
5538
5654
  },
5539
5655
  isIndeterminateByCheckboxRowKey(rowid) {
5540
5656
  const $xeTable = this;
5541
- const reactData = $xeTable;
5542
- const { treeIndeterminateMaps } = reactData;
5543
- return !!treeIndeterminateMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
5657
+ const internalData = $xeTable;
5658
+ const { treeIndeterminateRowMaps } = internalData;
5659
+ return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
5544
5660
  },
5545
5661
  /**
5546
5662
  * 切换选中
@@ -5550,14 +5666,15 @@ const Methods = {
5550
5666
  const $xeTable = this;
5551
5667
  const props = $xeTable;
5552
5668
  const reactData = $xeTable;
5669
+ const internalData = $xeTable;
5553
5670
  const { treeConfig } = props;
5554
- const { selectCheckboxMaps } = reactData;
5555
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
5671
+ const { selectCheckboxMaps } = internalData;
5556
5672
  const treeOpts = $xeTable.computeTreeOpts;
5557
5673
  const { transform, mapChildrenField } = treeOpts;
5558
5674
  const childrenField = treeOpts.children || treeOpts.childrenField;
5559
5675
  const checkboxOpts = $xeTable.computeCheckboxOpts;
5560
5676
  const { checkField, checkStrictly, checkMethod } = checkboxOpts;
5677
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5561
5678
  // indeterminateField 仅支持读取
5562
5679
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
5563
5680
  if (checkField) {
@@ -5573,59 +5690,57 @@ const Methods = {
5573
5690
  handleCheckboxReserveRow($xeTable, row, checked);
5574
5691
  }
5575
5692
  }, { children: transform ? mapChildrenField : childrenField });
5576
- reactData.selectCheckboxMaps = selectRowMaps;
5693
+ reactData.updateCheckboxFlag++;
5577
5694
  return;
5578
5695
  }
5579
- else {
5580
- // 列表
5581
- rows.forEach(row => {
5582
- if (isForce || (!checkMethod || checkMethod({ row }))) {
5583
- XEUtils.set(row, checkField, checked);
5584
- handleCheckboxReserveRow($xeTable, row, checked);
5585
- }
5586
- });
5587
- }
5588
- reactData.selectCheckboxMaps = selectRowMaps;
5696
+ // 列表
5697
+ rows.forEach(row => {
5698
+ if (isForce || (!checkMethod || checkMethod({ row }))) {
5699
+ XEUtils.set(row, checkField, checked);
5700
+ handleCheckboxReserveRow($xeTable, row, checked);
5701
+ }
5702
+ });
5703
+ reactData.updateCheckboxFlag++;
5589
5704
  return;
5590
5705
  }
5591
5706
  // 树结构
5592
5707
  if (treeConfig && !checkStrictly) {
5593
5708
  // 更新子节点状态
5594
5709
  XEUtils.eachTree(rows, (row) => {
5595
- const rowid = getRowid($xeTable, row);
5710
+ const rowid = handleGetRowId(row);
5596
5711
  if (isForce || (!checkMethod || checkMethod({ row }))) {
5597
5712
  if (checked) {
5598
- selectRowMaps[rowid] = row;
5713
+ selectCheckboxMaps[rowid] = row;
5599
5714
  }
5600
5715
  else {
5601
- if (selectRowMaps[rowid]) {
5602
- delete selectRowMaps[rowid];
5716
+ if (selectCheckboxMaps[rowid]) {
5717
+ delete selectCheckboxMaps[rowid];
5603
5718
  }
5604
5719
  }
5605
5720
  handleCheckboxReserveRow($xeTable, row, checked);
5606
5721
  }
5607
5722
  }, { children: transform ? mapChildrenField : childrenField });
5608
- reactData.selectCheckboxMaps = selectRowMaps;
5723
+ reactData.updateCheckboxFlag++;
5609
5724
  return;
5610
5725
  }
5611
5726
  // 列表
5612
5727
  rows.forEach(row => {
5613
- const rowid = getRowid($xeTable, row);
5728
+ const rowid = handleGetRowId(row);
5614
5729
  if (isForce || (!checkMethod || checkMethod({ row }))) {
5615
5730
  if (checked) {
5616
- if (!selectRowMaps[rowid]) {
5617
- selectRowMaps[rowid] = row;
5731
+ if (!selectCheckboxMaps[rowid]) {
5732
+ selectCheckboxMaps[rowid] = row;
5618
5733
  }
5619
5734
  }
5620
5735
  else {
5621
- if (selectRowMaps[rowid]) {
5622
- delete selectRowMaps[rowid];
5736
+ if (selectCheckboxMaps[rowid]) {
5737
+ delete selectCheckboxMaps[rowid];
5623
5738
  }
5624
5739
  }
5625
5740
  handleCheckboxReserveRow($xeTable, row, checked);
5741
+ reactData.updateCheckboxFlag++;
5626
5742
  }
5627
5743
  });
5628
- reactData.selectCheckboxMaps = selectRowMaps;
5629
5744
  },
5630
5745
  /**
5631
5746
  * 即将移除
@@ -5636,7 +5751,10 @@ const Methods = {
5636
5751
  $xeTable.handleBatchSelectRows([row], checked, isForce);
5637
5752
  },
5638
5753
  handleToggleCheckRowEvent(evnt, params) {
5639
- const { selectCheckboxMaps, checkboxOpts } = this;
5754
+ const $xeTable = this;
5755
+ const internalData = $xeTable;
5756
+ const { selectCheckboxMaps } = internalData;
5757
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
5640
5758
  const { checkField, trigger } = checkboxOpts;
5641
5759
  const { row } = params;
5642
5760
  if (trigger === 'manual') {
@@ -5647,47 +5765,52 @@ const Methods = {
5647
5765
  checked = !XEUtils.get(row, checkField);
5648
5766
  }
5649
5767
  else {
5650
- checked = !selectCheckboxMaps[getRowid(this, row)];
5768
+ checked = !selectCheckboxMaps[getRowid($xeTable, row)];
5651
5769
  }
5652
5770
  if (evnt) {
5653
- this.triggerCheckRowEvent(evnt, params, checked);
5771
+ $xeTable.triggerCheckRowEvent(evnt, params, checked);
5654
5772
  }
5655
5773
  else {
5656
- this.handleSelectRow(params, checked);
5657
- this.checkSelectionStatus();
5774
+ $xeTable.handleBatchSelectRows([row], checked);
5775
+ $xeTable.checkSelectionStatus();
5658
5776
  }
5659
5777
  },
5660
5778
  triggerCheckRowEvent(evnt, params, checked) {
5661
5779
  const $xeTable = this;
5662
- const { checkboxOpts, afterFullData } = this;
5663
- const { checkMethod, trigger } = checkboxOpts;
5780
+ const props = $xeTable;
5781
+ const internalData = $xeTable;
5664
5782
  const { row } = params;
5783
+ const { afterFullData } = internalData;
5784
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
5785
+ const { checkMethod, trigger } = checkboxOpts;
5665
5786
  if (trigger === 'manual') {
5666
5787
  return;
5667
5788
  }
5668
5789
  evnt.stopPropagation();
5669
- if (checkboxOpts.isShiftKey && evnt.shiftKey && !this.treeConfig) {
5670
- const checkboxRecords = this.getCheckboxRecords();
5790
+ if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
5791
+ const checkboxRecords = $xeTable.getCheckboxRecords();
5671
5792
  if (checkboxRecords.length) {
5672
5793
  const firstRow = checkboxRecords[0];
5673
- const _rowIndex = this.getVTRowIndex(row);
5674
- const _firstRowIndex = this.getVTRowIndex(firstRow);
5794
+ const _rowIndex = $xeTable.getVTRowIndex(row);
5795
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
5675
5796
  if (_rowIndex !== _firstRowIndex) {
5676
- this.setAllCheckboxRow(false);
5797
+ $xeTable.setAllCheckboxRow(false);
5677
5798
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
5678
- handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
5679
- this.emitEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
5799
+ $xeTable.$nextTick(() => {
5800
+ handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
5801
+ });
5802
+ $xeTable.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
5680
5803
  return;
5681
5804
  }
5682
5805
  }
5683
5806
  }
5684
5807
  if (!checkMethod || checkMethod({ row })) {
5685
- this.handleSelectRow(params, checked);
5686
- this.checkSelectionStatus();
5687
- this.emitEvent('checkbox-change', Object.assign({
5688
- records: this.getCheckboxRecords(),
5689
- reserves: this.getCheckboxReserveRecords(),
5690
- indeterminates: this.getCheckboxIndeterminateRecords(),
5808
+ $xeTable.handleBatchSelectRows([row], checked);
5809
+ $xeTable.checkSelectionStatus();
5810
+ $xeTable.dispatchEvent('checkbox-change', Object.assign({
5811
+ records: () => $xeTable.getCheckboxRecords(),
5812
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
5813
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
5691
5814
  checked
5692
5815
  }, params), evnt);
5693
5816
  }
@@ -5697,7 +5820,9 @@ const Methods = {
5697
5820
  */
5698
5821
  toggleCheckboxRow(row) {
5699
5822
  const $xeTable = this;
5700
- const { selectCheckboxMaps, checkboxOpts } = this;
5823
+ const internalData = $xeTable;
5824
+ const { selectCheckboxMaps } = internalData;
5825
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
5701
5826
  const { checkField } = checkboxOpts;
5702
5827
  const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
5703
5828
  $xeTable.handleBatchSelectRows([row], checked, true);
@@ -5718,9 +5843,7 @@ const Methods = {
5718
5843
  const reactData = $xeTable;
5719
5844
  const internalData = $xeTable;
5720
5845
  const { treeConfig } = props;
5721
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData;
5722
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
5723
- const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
5846
+ const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
5724
5847
  const treeOpts = $xeTable.computeTreeOpts;
5725
5848
  const { transform, mapChildrenField } = treeOpts;
5726
5849
  const childrenField = treeOpts.children || treeOpts.childrenField;
@@ -5732,10 +5855,11 @@ const Methods = {
5732
5855
  }
5733
5856
  // 树结构
5734
5857
  if (treeConfig) {
5858
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5735
5859
  const childRowMaps = {};
5736
5860
  const childRowList = [];
5737
5861
  XEUtils.eachTree(afterTreeFullData, (row) => {
5738
- const rowid = getRowid($xeTable, row);
5862
+ const rowid = handleGetRowId(row);
5739
5863
  const childList = row[transform ? mapChildrenField : childrenField];
5740
5864
  if (childList && childList.length && !childRowMaps[rowid]) {
5741
5865
  childRowMaps[rowid] = 1;
@@ -5751,13 +5875,13 @@ const Methods = {
5751
5875
  let vLen = 0; // 有效行
5752
5876
  childList.forEach(checkMethod
5753
5877
  ? (item) => {
5754
- const childRowid = getRowid($xeTable, item);
5755
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
5878
+ const childRowid = handleGetRowId(item);
5879
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
5756
5880
  if (checkMethod({ row: item })) {
5757
5881
  if (isSelect) {
5758
5882
  sLen++;
5759
5883
  }
5760
- else if (halfRowMaps[childRowid]) {
5884
+ else if (treeIndeterminateRowMaps[childRowid]) {
5761
5885
  hLen++;
5762
5886
  }
5763
5887
  vLen++;
@@ -5766,18 +5890,18 @@ const Methods = {
5766
5890
  if (isSelect) {
5767
5891
  sLen++;
5768
5892
  }
5769
- else if (halfRowMaps[childRowid]) {
5893
+ else if (treeIndeterminateRowMaps[childRowid]) {
5770
5894
  hLen++;
5771
5895
  }
5772
5896
  }
5773
5897
  }
5774
5898
  : item => {
5775
- const childRowid = getRowid($xeTable, item);
5776
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
5899
+ const childRowid = handleGetRowId(item);
5900
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
5777
5901
  if (isSelect) {
5778
5902
  sLen++;
5779
5903
  }
5780
- else if (halfRowMaps[childRowid]) {
5904
+ else if (treeIndeterminateRowMaps[childRowid]) {
5781
5905
  hLen++;
5782
5906
  }
5783
5907
  vLen++;
@@ -5789,31 +5913,30 @@ const Methods = {
5789
5913
  }
5790
5914
  if (isSelected) {
5791
5915
  if (!checkField) {
5792
- selectRowMaps[rowid] = row;
5916
+ selectCheckboxMaps[rowid] = row;
5793
5917
  }
5794
- if (halfRowMaps[rowid]) {
5795
- delete halfRowMaps[rowid];
5918
+ if (treeIndeterminateRowMaps[rowid]) {
5919
+ delete treeIndeterminateRowMaps[rowid];
5796
5920
  }
5797
5921
  }
5798
5922
  else {
5799
5923
  if (!checkField) {
5800
- if (selectRowMaps[rowid]) {
5801
- delete selectRowMaps[rowid];
5924
+ if (selectCheckboxMaps[rowid]) {
5925
+ delete selectCheckboxMaps[rowid];
5802
5926
  }
5803
5927
  }
5804
5928
  if (halfSelect) {
5805
- halfRowMaps[rowid] = row;
5929
+ treeIndeterminateRowMaps[rowid] = row;
5806
5930
  }
5807
5931
  else {
5808
- if (halfRowMaps[rowid]) {
5809
- delete halfRowMaps[rowid];
5932
+ if (treeIndeterminateRowMaps[rowid]) {
5933
+ delete treeIndeterminateRowMaps[rowid];
5810
5934
  }
5811
5935
  }
5812
5936
  }
5813
5937
  });
5814
5938
  }
5815
- reactData.selectCheckboxMaps = selectRowMaps;
5816
- reactData.treeIndeterminateMaps = halfRowMaps;
5939
+ reactData.updateCheckboxFlag++;
5817
5940
  },
5818
5941
  updateAllCheckboxStatus() {
5819
5942
  const $xeTable = this;
@@ -5821,23 +5944,23 @@ const Methods = {
5821
5944
  const reactData = $xeTable;
5822
5945
  const internalData = $xeTable;
5823
5946
  const { treeConfig } = props;
5824
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData;
5947
+ const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
5825
5948
  const checkboxOpts = $xeTable.computeCheckboxOpts;
5826
5949
  const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
5827
- const { afterFullData, afterTreeFullData, checkboxReserveRowMap } = internalData;
5950
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5828
5951
  let sLen = 0; // 已选
5829
5952
  let hLen = 0; // 半选
5830
5953
  let vLen = 0; // 有效行
5831
5954
  const rootList = (treeConfig ? afterTreeFullData : afterFullData);
5832
5955
  rootList.forEach(checkMethod
5833
5956
  ? row => {
5834
- const childRowid = getRowid($xeTable, row);
5957
+ const childRowid = handleGetRowId(row);
5835
5958
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
5836
5959
  if (checkMethod({ row })) {
5837
5960
  if (selected) {
5838
5961
  sLen++;
5839
5962
  }
5840
- else if (treeIndeterminateMaps[childRowid]) {
5963
+ else if (treeIndeterminateRowMaps[childRowid]) {
5841
5964
  hLen++;
5842
5965
  }
5843
5966
  vLen++;
@@ -5846,18 +5969,18 @@ const Methods = {
5846
5969
  if (selected) {
5847
5970
  sLen++;
5848
5971
  }
5849
- else if (treeIndeterminateMaps[childRowid]) {
5972
+ else if (treeIndeterminateRowMaps[childRowid]) {
5850
5973
  hLen++;
5851
5974
  }
5852
5975
  }
5853
5976
  }
5854
5977
  : row => {
5855
- const childRowid = getRowid($xeTable, row);
5978
+ const childRowid = handleGetRowId(row);
5856
5979
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
5857
5980
  if (selected) {
5858
5981
  sLen++;
5859
5982
  }
5860
- else if (treeIndeterminateMaps[childRowid]) {
5983
+ else if (treeIndeterminateRowMaps[childRowid]) {
5861
5984
  hLen++;
5862
5985
  }
5863
5986
  vLen++;
@@ -5914,19 +6037,26 @@ const Methods = {
5914
6037
  * 获取复选框保留选中的行
5915
6038
  */
5916
6039
  getCheckboxReserveRecords(isFull) {
5917
- const { fullDataRowIdData, afterFullData, checkboxReserveRowMap, checkboxOpts, treeConfig, treeOpts } = this;
6040
+ const $xeTable = this;
6041
+ const props = $xeTable;
6042
+ const internalData = $xeTable;
6043
+ const { treeConfig } = props;
6044
+ const { afterFullData, fullDataRowIdData, checkboxReserveRowMap } = internalData;
6045
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
6046
+ const treeOpts = $xeTable.computeTreeOpts;
5918
6047
  const childrenField = treeOpts.children || treeOpts.childrenField;
5919
6048
  const reserveSelection = [];
5920
6049
  if (checkboxOpts.reserve) {
6050
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5921
6051
  const afterFullIdMaps = {};
5922
6052
  if (treeConfig) {
5923
6053
  XEUtils.eachTree(afterFullData, row => {
5924
- afterFullIdMaps[getRowid(this, row)] = 1;
6054
+ afterFullIdMaps[handleGetRowId(row)] = 1;
5925
6055
  }, { children: childrenField });
5926
6056
  }
5927
6057
  else {
5928
6058
  afterFullData.forEach((row) => {
5929
- afterFullIdMaps[getRowid(this, row)] = 1;
6059
+ afterFullIdMaps[handleGetRowId(row)] = 1;
5930
6060
  });
5931
6061
  }
5932
6062
  XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
@@ -5967,9 +6097,9 @@ const Methods = {
5967
6097
  handleCheckedAllCheckboxRow($xeTable, value);
5968
6098
  if (evnt) {
5969
6099
  $xeTable.dispatchEvent('checkbox-all', {
5970
- records: $xeTable.getCheckboxRecords(),
5971
- reserves: $xeTable.getCheckboxReserveRecords(),
5972
- indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
6100
+ records: () => $xeTable.getCheckboxRecords(),
6101
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
6102
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
5973
6103
  checked: value
5974
6104
  }, evnt);
5975
6105
  }
@@ -6001,9 +6131,16 @@ const Methods = {
6001
6131
  * 清空行为不管是否被禁用还是保留记录,都将彻底清空选中状态
6002
6132
  */
6003
6133
  clearCheckboxRow() {
6004
- const { tableFullData, treeConfig, treeOpts, checkboxOpts } = this;
6005
- const { checkField, reserve } = checkboxOpts;
6134
+ const $xeTable = this;
6135
+ const props = $xeTable;
6136
+ const reactData = $xeTable;
6137
+ const internalData = $xeTable;
6138
+ const { treeConfig } = props;
6139
+ const { tableFullData } = internalData;
6140
+ const treeOpts = $xeTable.computeTreeOpts;
6006
6141
  const childrenField = treeOpts.children || treeOpts.childrenField;
6142
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
6143
+ const { checkField, reserve } = checkboxOpts;
6007
6144
  // indeterminateField 仅支持读取
6008
6145
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
6009
6146
  if (checkField) {
@@ -6023,10 +6160,11 @@ const Methods = {
6023
6160
  if (reserve) {
6024
6161
  tableFullData.forEach((row) => this.handleCheckboxReserveRow(row, false));
6025
6162
  }
6026
- this.isAllSelected = false;
6027
- this.isIndeterminate = false;
6028
- this.selectCheckboxMaps = {};
6029
- this.treeIndeterminateMaps = {};
6163
+ reactData.isAllSelected = false;
6164
+ reactData.isIndeterminate = false;
6165
+ internalData.selectCheckboxMaps = {};
6166
+ internalData.treeIndeterminateRowMaps = {};
6167
+ reactData.updateCheckboxFlag++;
6030
6168
  return this.$nextTick();
6031
6169
  },
6032
6170
  /**
@@ -6223,10 +6361,12 @@ const Methods = {
6223
6361
  },
6224
6362
  triggerHeaderCellClickEvent(evnt, params) {
6225
6363
  const $xeTable = this;
6364
+ const props = $xeTable;
6226
6365
  const internalData = $xeTable;
6227
6366
  const { _lastResizeTime } = internalData;
6228
6367
  const sortOpts = $xeTable.computeSortOpts;
6229
6368
  const columnOpts = $xeTable.computeColumnOpts;
6369
+ const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
6230
6370
  const { column } = params;
6231
6371
  const cell = evnt.currentTarget;
6232
6372
  const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
@@ -6236,7 +6376,7 @@ const Methods = {
6236
6376
  $xeTable.triggerSortEvent(evnt, column, getNextSortOrder($xeTable, column));
6237
6377
  }
6238
6378
  $xeTable.dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
6239
- if (columnOpts.isCurrent || $xeTable.highlightCurrentColumn) {
6379
+ if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
6240
6380
  $xeTable.triggerCurrentColumnEvent(evnt, params);
6241
6381
  }
6242
6382
  return $xeTable.$nextTick();
@@ -6252,13 +6392,23 @@ const Methods = {
6252
6392
  * @param {ColumnInfo} fieldOrColumn 列配置
6253
6393
  */
6254
6394
  setCurrentColumn(fieldOrColumn) {
6255
- const column = handleFieldOrColumn(this, fieldOrColumn);
6395
+ const $xeTable = this;
6396
+ const props = $xeTable;
6397
+ const reactData = $xeTable;
6398
+ const { mouseConfig } = props;
6399
+ const mouseOpts = $xeTable.computeMouseOpts;
6400
+ const isMouseSelected = mouseConfig && mouseOpts.selected;
6401
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn);
6256
6402
  if (column) {
6257
- // this.clearCurrentRow()
6258
- this.clearCurrentColumn();
6259
- this.currentColumn = column;
6403
+ $xeTable.clearCurrentColumn();
6404
+ reactData.currentColumn = column;
6260
6405
  }
6261
- return this.$nextTick();
6406
+ return $xeTable.$nextTick().then(() => {
6407
+ // 更新状选中态
6408
+ if (isMouseSelected) {
6409
+ $xeTable.addCellSelectedClass();
6410
+ }
6411
+ });
6262
6412
  },
6263
6413
  /**
6264
6414
  * 用于当前列,手动清空当前高亮的状态
@@ -6267,25 +6417,6 @@ const Methods = {
6267
6417
  this.currentColumn = null;
6268
6418
  return this.$nextTick();
6269
6419
  },
6270
- checkValidate(type) {
6271
- if (this.triggerValidate) {
6272
- return this.triggerValidate(type);
6273
- }
6274
- return this.$nextTick();
6275
- },
6276
- /**
6277
- * 当单元格发生改变时
6278
- * 如果存在规则,则校验
6279
- */
6280
- handleChangeCell(evnt, params) {
6281
- this.checkValidate('blur')
6282
- .catch((e) => e)
6283
- .then(() => {
6284
- this.handleEdit(params, evnt)
6285
- .then(() => this.checkValidate('change'))
6286
- .catch((e) => e);
6287
- });
6288
- },
6289
6420
  /**
6290
6421
  * 列点击事件
6291
6422
  * 如果是单击模式,则激活为编辑状态
@@ -6295,7 +6426,7 @@ const Methods = {
6295
6426
  const $xeTable = this;
6296
6427
  const props = $xeTable;
6297
6428
  const reactData = $xeTable;
6298
- const { highlightCurrentRow, editConfig } = props;
6429
+ const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props;
6299
6430
  const { editStore, isDragResize } = reactData;
6300
6431
  if (isDragResize) {
6301
6432
  return;
@@ -6307,6 +6438,8 @@ const Methods = {
6307
6438
  const checkboxOpts = $xeTable.computeCheckboxOpts;
6308
6439
  const keyboardOpts = $xeTable.computeKeyboardOpts;
6309
6440
  const rowOpts = $xeTable.computeRowOpts;
6441
+ const columnOpts = $xeTable.computeColumnOpts;
6442
+ const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
6310
6443
  const { actived, focused } = editStore;
6311
6444
  const { row, column } = params;
6312
6445
  const { type, treeNode } = column;
@@ -6322,11 +6455,11 @@ const Methods = {
6322
6455
  if (!triggerCheckbox && !triggerRadio) {
6323
6456
  // 如果是展开行
6324
6457
  if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
6325
- this.triggerRowExpandEvent(evnt, params);
6458
+ $xeTable.triggerRowExpandEvent(evnt, params);
6326
6459
  }
6327
6460
  // 如果是树形表格
6328
6461
  if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
6329
- this.triggerTreeExpandEvent(evnt, params);
6462
+ $xeTable.triggerTreeExpandEvent(evnt, params);
6330
6463
  }
6331
6464
  }
6332
6465
  // 如果点击了树节点
@@ -6335,16 +6468,22 @@ const Methods = {
6335
6468
  // 如果是高亮行
6336
6469
  if (rowOpts.isCurrent || highlightCurrentRow) {
6337
6470
  if (!triggerCheckbox && !triggerRadio) {
6338
- this.triggerCurrentRowEvent(evnt, params);
6471
+ $xeTable.triggerCurrentRowEvent(evnt, params);
6472
+ }
6473
+ }
6474
+ // 如果是当前列
6475
+ if ((columnOpts.isCurrent || highlightCurrentColumn) && (!currentColumnOpts.trigger || ['cell', 'default'].includes(currentColumnOpts.trigger))) {
6476
+ if (!triggerCheckbox && !triggerRadio) {
6477
+ $xeTable.triggerCurrentColumnEvent(evnt, params);
6339
6478
  }
6340
6479
  }
6341
6480
  // 如果是单选框
6342
6481
  if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
6343
- this.triggerRadioRowEvent(evnt, params);
6482
+ $xeTable.triggerRadioRowEvent(evnt, params);
6344
6483
  }
6345
6484
  // 如果是复选框
6346
6485
  if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
6347
- this.handleToggleCheckRowEvent(evnt, params);
6486
+ $xeTable.handleToggleCheckRowEvent(evnt, params);
6348
6487
  }
6349
6488
  }
6350
6489
  // 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
@@ -6356,16 +6495,16 @@ const Methods = {
6356
6495
  }
6357
6496
  if (editOpts.trigger === 'manual') {
6358
6497
  if (actived.args && actived.row === row && column !== actived.column) {
6359
- this.handleChangeCell(evnt, params);
6498
+ handleChangeCell($xeTable, evnt, params);
6360
6499
  }
6361
6500
  }
6362
6501
  else if (!actived.args || row !== actived.row || column !== actived.column) {
6363
6502
  if (editOpts.trigger === 'click') {
6364
- this.handleChangeCell(evnt, params);
6503
+ handleChangeCell($xeTable, evnt, params);
6365
6504
  }
6366
6505
  else if (editOpts.trigger === 'dblclick') {
6367
6506
  if (editOpts.mode === 'row' && actived.row === row) {
6368
- this.handleChangeCell(evnt, params);
6507
+ handleChangeCell($xeTable, evnt, params);
6369
6508
  }
6370
6509
  }
6371
6510
  }
@@ -6386,7 +6525,7 @@ const Methods = {
6386
6525
  }
6387
6526
  }
6388
6527
  }
6389
- this.emitEvent('cell-click', params, evnt);
6528
+ $xeTable.dispatchEvent('cell-click', params, evnt);
6390
6529
  },
6391
6530
  /**
6392
6531
  * 列双击点击事件
@@ -6408,17 +6547,17 @@ const Methods = {
6408
6547
  if (isEnableConf(editConfig) && editOpts.trigger === 'dblclick') {
6409
6548
  if (!actived.args || evnt.currentTarget !== actived.args.cell) {
6410
6549
  if (editOpts.mode === 'row') {
6411
- this.checkValidate('blur')
6550
+ checkValidate($xeTable, 'blur')
6412
6551
  .catch((e) => e)
6413
6552
  .then(() => {
6414
6553
  this.handleEdit(params, evnt)
6415
- .then(() => this.checkValidate('change'))
6554
+ .then(() => checkValidate($xeTable, 'change'))
6416
6555
  .catch((e) => e);
6417
6556
  });
6418
6557
  }
6419
6558
  else if (editOpts.mode === 'cell') {
6420
6559
  this.handleEdit(params, evnt)
6421
- .then(() => this.checkValidate('change'))
6560
+ .then(() => checkValidate($xeTable, 'change'))
6422
6561
  .catch((e) => e);
6423
6562
  }
6424
6563
  }
@@ -6604,12 +6743,11 @@ const Methods = {
6604
6743
  const internalData = $xeTable;
6605
6744
  const { treeConfig, dragConfig } = props;
6606
6745
  const rowDragOpts = $xeTable.computeRowDragOpts;
6607
- const { fullAllDataRowIdData } = internalData;
6746
+ const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData;
6608
6747
  const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
6609
6748
  const treeOpts = $xeTable.computeTreeOpts;
6610
6749
  const { transform, rowField, mapChildrenField, parentField } = treeOpts;
6611
6750
  const childrenField = treeOpts.children || treeOpts.childrenField;
6612
- const { afterFullData, tableFullData } = internalData;
6613
6751
  const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
6614
6752
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
6615
6753
  const errRest = {
@@ -7213,48 +7351,52 @@ const Methods = {
7213
7351
  setPendingRow(rows, status) {
7214
7352
  const $xeTable = this;
7215
7353
  const reactData = $xeTable;
7216
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps);
7354
+ const internalData = $xeTable;
7355
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7356
+ const { pendingRowMaps } = internalData;
7217
7357
  if (rows && !XEUtils.isArray(rows)) {
7218
7358
  rows = [rows];
7219
7359
  }
7220
7360
  if (status) {
7221
7361
  rows.forEach((row) => {
7222
- const rowid = getRowid($xeTable, row);
7223
- if (rowid && !pendingMaps[rowid]) {
7224
- pendingMaps[rowid] = row;
7362
+ const rowid = handleGetRowId(row);
7363
+ if (rowid && !pendingRowMaps[rowid]) {
7364
+ pendingRowMaps[rowid] = row;
7225
7365
  }
7226
7366
  });
7227
7367
  }
7228
7368
  else {
7229
7369
  rows.forEach((row) => {
7230
- const rowid = getRowid($xeTable, row);
7231
- if (rowid && pendingMaps[rowid]) {
7232
- delete pendingMaps[rowid];
7370
+ const rowid = handleGetRowId(row);
7371
+ if (rowid && pendingRowMaps[rowid]) {
7372
+ delete pendingRowMaps[rowid];
7233
7373
  }
7234
7374
  });
7235
7375
  }
7236
- reactData.pendingRowMaps = pendingMaps;
7376
+ reactData.pendingRowFlag++;
7237
7377
  return $xeTable.$nextTick();
7238
7378
  },
7239
7379
  togglePendingRow(rows) {
7240
7380
  const $xeTable = this;
7241
7381
  const reactData = $xeTable;
7242
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps);
7382
+ const internalData = $xeTable;
7383
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7384
+ const { pendingRowMaps } = internalData;
7243
7385
  if (rows && !XEUtils.isArray(rows)) {
7244
7386
  rows = [rows];
7245
7387
  }
7246
7388
  rows.forEach((row) => {
7247
- const rowid = getRowid($xeTable, row);
7389
+ const rowid = handleGetRowId(row);
7248
7390
  if (rowid) {
7249
- if (pendingMaps[rowid]) {
7250
- delete pendingMaps[rowid];
7391
+ if (pendingRowMaps[rowid]) {
7392
+ delete pendingRowMaps[rowid];
7251
7393
  }
7252
7394
  else {
7253
- pendingMaps[rowid] = row;
7395
+ pendingRowMaps[rowid] = row;
7254
7396
  }
7255
7397
  }
7256
7398
  });
7257
- reactData.pendingRowMaps = pendingMaps;
7399
+ reactData.pendingRowFlag++;
7258
7400
  return $xeTable.$nextTick();
7259
7401
  },
7260
7402
  hasPendingByRow(row) {
@@ -7270,10 +7412,8 @@ const Methods = {
7270
7412
  },
7271
7413
  getPendingRecords() {
7272
7414
  const $xeTable = this;
7273
- const reactData = $xeTable;
7274
7415
  const internalData = $xeTable;
7275
- const { pendingRowMaps } = reactData;
7276
- const { fullAllDataRowIdData } = internalData;
7416
+ const { fullAllDataRowIdData, pendingRowMaps } = internalData;
7277
7417
  const insertRecords = [];
7278
7418
  XEUtils.each(pendingRowMaps, (row, rowid) => {
7279
7419
  if (fullAllDataRowIdData[rowid]) {
@@ -7283,8 +7423,12 @@ const Methods = {
7283
7423
  return insertRecords;
7284
7424
  },
7285
7425
  clearPendingRow() {
7286
- this.pendingRowMaps = {};
7287
- return this.$nextTick();
7426
+ const $xeTable = this;
7427
+ const reactData = $xeTable;
7428
+ const internalData = $xeTable;
7429
+ internalData.pendingRowMaps = {};
7430
+ reactData.pendingRowFlag++;
7431
+ return $xeTable.$nextTick();
7288
7432
  },
7289
7433
  sort(sortConfs, sortOrder) {
7290
7434
  const $xeTable = this;
@@ -7435,7 +7579,9 @@ const Methods = {
7435
7579
  * @param {Event} evnt 事件
7436
7580
  */
7437
7581
  closeFilter() {
7438
- const { filterStore } = this;
7582
+ const $xeTable = this;
7583
+ const reactData = $xeTable;
7584
+ const { filterStore } = reactData;
7439
7585
  const { column, visible } = filterStore;
7440
7586
  Object.assign(filterStore, {
7441
7587
  isAllSelected: false,
@@ -7444,9 +7590,15 @@ const Methods = {
7444
7590
  visible: false
7445
7591
  });
7446
7592
  if (visible) {
7447
- this.emitEvent('filter-visible', { column, field: column.field, property: column.field, filterList: this.getCheckedFilters(), visible: false }, null);
7593
+ $xeTable.dispatchEvent('filter-visible', {
7594
+ column,
7595
+ field: column.field,
7596
+ property: column.field,
7597
+ filterList: () => $xeTable.getCheckedFilters(),
7598
+ visible: false
7599
+ }, null);
7448
7600
  }
7449
- return this.$nextTick();
7601
+ return $xeTable.$nextTick();
7450
7602
  },
7451
7603
  /**
7452
7604
  * 判断指定列是否为筛选状态,如果为空则判断所有列
@@ -7477,17 +7629,16 @@ const Methods = {
7477
7629
  const $xeTable = this;
7478
7630
  const reactData = $xeTable;
7479
7631
  const internalData = $xeTable;
7480
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
7481
- const { fullAllDataRowIdData } = internalData;
7632
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
7482
7633
  const expandOpts = $xeTable.computeExpandOpts;
7483
7634
  const { lazy } = expandOpts;
7484
7635
  const rowid = getRowid($xeTable, row);
7485
7636
  const rowRest = fullAllDataRowIdData[rowid];
7486
7637
  if (lazy && rowRest) {
7487
7638
  rowRest.expandLoaded = false;
7488
- delete rExpandLazyLoadedMaps[rowid];
7639
+ delete rowExpandLazyLoadedMaps[rowid];
7489
7640
  }
7490
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
7641
+ reactData.rowExpandedFlag++;
7491
7642
  return $xeTable.$nextTick();
7492
7643
  },
7493
7644
  /**
@@ -7495,14 +7646,17 @@ const Methods = {
7495
7646
  * @param {Row} row 行对象
7496
7647
  */
7497
7648
  reloadRowExpand(row) {
7498
- const { expandOpts, rowExpandLazyLoadedMaps } = this;
7649
+ const $xeTable = this;
7650
+ const internalData = $xeTable;
7651
+ const { rowExpandLazyLoadedMaps } = internalData;
7652
+ const expandOpts = $xeTable.computeExpandOpts;
7499
7653
  const { lazy } = expandOpts;
7500
7654
  const rowid = getRowid(this, row);
7501
7655
  if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
7502
- this.clearRowExpandLoaded(row)
7503
- .then(() => this.handleAsyncRowExpand(row));
7656
+ $xeTable.clearRowExpandLoaded(row)
7657
+ .then(() => handleAsyncRowExpand($xeTable, row));
7504
7658
  }
7505
- return this.$nextTick();
7659
+ return $xeTable.$nextTick();
7506
7660
  },
7507
7661
  reloadExpandContent(row) {
7508
7662
  if (process.env.NODE_ENV === 'development') {
@@ -7515,20 +7669,33 @@ const Methods = {
7515
7669
  * 展开行事件
7516
7670
  */
7517
7671
  triggerRowExpandEvent(evnt, params) {
7518
- const { expandOpts, rowExpandLazyLoadedMaps, expandColumn: column } = this;
7672
+ const $xeTable = this;
7673
+ const reactData = $xeTable;
7674
+ const internalData = $xeTable;
7675
+ const { expandColumn: column } = reactData;
7676
+ const { rowExpandLazyLoadedMaps } = internalData;
7677
+ const expandOpts = $xeTable.computeExpandOpts;
7519
7678
  const { row } = params;
7520
7679
  const { lazy, trigger } = expandOpts;
7521
7680
  if (trigger === 'manual') {
7522
7681
  return;
7523
7682
  }
7524
7683
  evnt.stopPropagation();
7525
- const rowid = getRowid(this, row);
7684
+ const rowid = getRowid($xeTable, row);
7526
7685
  if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
7527
- const expanded = !this.isRowExpandByRow(row);
7528
- const columnIndex = this.getColumnIndex(column);
7529
- const $columnIndex = this.getVMColumnIndex(column);
7530
- this.setRowExpand(row, expanded);
7531
- this.emitEvent('toggle-row-expand', { expanded, column, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) }, evnt);
7686
+ const expanded = !$xeTable.isRowExpandByRow(row);
7687
+ const columnIndex = $xeTable.getColumnIndex(column);
7688
+ const $columnIndex = $xeTable.getVMColumnIndex(column);
7689
+ $xeTable.setRowExpand(row, expanded);
7690
+ $xeTable.dispatchEvent('toggle-row-expand', {
7691
+ expanded,
7692
+ column,
7693
+ columnIndex,
7694
+ $columnIndex,
7695
+ row,
7696
+ rowIndex: $xeTable.getRowIndex(row),
7697
+ $rowIndex: $xeTable.getVMRowIndex(row)
7698
+ }, evnt);
7532
7699
  }
7533
7700
  },
7534
7701
  /**
@@ -7574,48 +7741,6 @@ const Methods = {
7574
7741
  }
7575
7742
  return this.setRowExpand(expandedRows, expanded);
7576
7743
  },
7577
- handleAsyncRowExpand(row) {
7578
- const $xeTable = this;
7579
- const reactData = $xeTable;
7580
- const internalData = $xeTable;
7581
- return new Promise(resolve => {
7582
- const { expandOpts } = this;
7583
- const { loadMethod } = expandOpts;
7584
- if (loadMethod) {
7585
- const { fullAllDataRowIdData } = internalData;
7586
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
7587
- const rowid = getRowid($xeTable, row);
7588
- const rowRest = fullAllDataRowIdData[rowid];
7589
- rExpandLazyLoadedMaps[rowid] = row;
7590
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
7591
- loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
7592
- const rExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
7593
- if (rowRest) {
7594
- rowRest.expandLoaded = true;
7595
- }
7596
- rExpandedMaps[rowid] = row;
7597
- reactData.rowExpandedMaps = rExpandedMaps;
7598
- }).catch(() => {
7599
- if (rowRest) {
7600
- rowRest.expandLoaded = false;
7601
- }
7602
- }).finally(() => {
7603
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
7604
- if (rExpandLazyLoadedMaps[rowid]) {
7605
- delete rExpandLazyLoadedMaps[rowid];
7606
- }
7607
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
7608
- $xeTable.$nextTick()
7609
- .then(() => $xeTable.recalculate())
7610
- .then(() => $xeTable.updateCellAreas())
7611
- .then(() => resolve());
7612
- });
7613
- }
7614
- else {
7615
- resolve();
7616
- }
7617
- });
7618
- },
7619
7744
  /**
7620
7745
  * 设置展开行,二个参数设置这一行展开与否
7621
7746
  * 支持单行
@@ -7625,8 +7750,12 @@ const Methods = {
7625
7750
  */
7626
7751
  setRowExpand(rows, expanded) {
7627
7752
  const $xeTable = this;
7628
- const { rowExpandedMaps, fullAllDataRowIdData, rowExpandLazyLoadedMaps, expandOpts, expandColumn } = this;
7629
- let rExpandedMaps = Object.assign({}, rowExpandedMaps);
7753
+ const reactData = $xeTable;
7754
+ const internalData = $xeTable;
7755
+ const { expandColumn } = reactData;
7756
+ let { fullAllDataRowIdData, rowExpandedMaps, rowExpandLazyLoadedMaps } = internalData;
7757
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7758
+ const expandOpts = $xeTable.computeExpandOpts;
7630
7759
  const { reserve, lazy, accordion, toggleMethod } = expandOpts;
7631
7760
  const lazyRests = [];
7632
7761
  const columnIndex = $xeTable.getColumnIndex(expandColumn);
@@ -7637,30 +7766,31 @@ const Methods = {
7637
7766
  }
7638
7767
  if (accordion) {
7639
7768
  // 只能同时展开一个
7640
- rExpandedMaps = {};
7769
+ rowExpandedMaps = {};
7770
+ internalData.rowExpandedMaps = rowExpandedMaps;
7641
7771
  rows = rows.slice(rows.length - 1, rows.length);
7642
7772
  }
7643
- const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) })) : rows;
7773
+ const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) })) : rows;
7644
7774
  if (expanded) {
7645
7775
  validRows.forEach((row) => {
7646
- const rowid = getRowid(this, row);
7647
- if (!rExpandedMaps[rowid]) {
7776
+ const rowid = handleGetRowId(row);
7777
+ if (!rowExpandedMaps[rowid]) {
7648
7778
  const rowRest = fullAllDataRowIdData[rowid];
7649
7779
  const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
7650
7780
  if (isLoad) {
7651
- lazyRests.push(this.handleAsyncRowExpand(row));
7781
+ lazyRests.push(handleAsyncRowExpand($xeTable, row));
7652
7782
  }
7653
7783
  else {
7654
- rExpandedMaps[rowid] = row;
7784
+ rowExpandedMaps[rowid] = row;
7655
7785
  }
7656
7786
  }
7657
7787
  });
7658
7788
  }
7659
7789
  else {
7660
7790
  validRows.forEach((item) => {
7661
- const rowid = getRowid(this, item);
7662
- if (rExpandedMaps[rowid]) {
7663
- delete rExpandedMaps[rowid];
7791
+ const rowid = handleGetRowId(item);
7792
+ if (rowExpandedMaps[rowid]) {
7793
+ delete rowExpandedMaps[rowid];
7664
7794
  }
7665
7795
  });
7666
7796
  }
@@ -7668,7 +7798,7 @@ const Methods = {
7668
7798
  validRows.forEach((row) => handleRowExpandReserve($xeTable, row, expanded));
7669
7799
  }
7670
7800
  }
7671
- this.rowExpandedMaps = rExpandedMaps;
7801
+ reactData.rowExpandedFlag++;
7672
7802
  return Promise.all(lazyRests)
7673
7803
  .then(() => $xeTable.$nextTick())
7674
7804
  .then(() => $xeTable.recalculate(true))
@@ -7684,9 +7814,13 @@ const Methods = {
7684
7814
  * @param {Row} row 行对象
7685
7815
  */
7686
7816
  isRowExpandByRow(row) {
7687
- const { rowExpandedMaps } = this;
7817
+ const $xeTable = this;
7818
+ const reactData = $xeTable;
7819
+ const internalData = $xeTable;
7820
+ const { rowExpandedFlag } = reactData;
7821
+ const { rowExpandedMaps } = internalData;
7688
7822
  const rowid = getRowid(this, row);
7689
- return !!rowExpandedMaps[rowid];
7823
+ return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
7690
7824
  },
7691
7825
  isExpandByRow(row) {
7692
7826
  if (process.env.NODE_ENV === 'development') {
@@ -7706,7 +7840,8 @@ const Methods = {
7706
7840
  const expandOpts = $xeTable.computeExpandOpts;
7707
7841
  const { reserve } = expandOpts;
7708
7842
  const expList = $xeTable.getRowExpandRecords();
7709
- reactData.rowExpandedMaps = {};
7843
+ internalData.rowExpandedMaps = {};
7844
+ reactData.rowExpandedFlag++;
7710
7845
  if (reserve) {
7711
7846
  tableFullData.forEach((row) => handleRowExpandReserve($xeTable, row, false));
7712
7847
  }
@@ -7726,8 +7861,10 @@ const Methods = {
7726
7861
  return this.$nextTick();
7727
7862
  },
7728
7863
  getRowExpandRecords() {
7864
+ const $xeTable = this;
7865
+ const internalData = $xeTable;
7729
7866
  const rest = [];
7730
- XEUtils.each(this.rowExpandedMaps, item => {
7867
+ XEUtils.each(internalData.rowExpandedMaps, item => {
7731
7868
  if (item) {
7732
7869
  rest.push(item);
7733
7870
  }
@@ -7735,8 +7872,10 @@ const Methods = {
7735
7872
  return rest;
7736
7873
  },
7737
7874
  getTreeExpandRecords() {
7875
+ const $xeTable = this;
7876
+ const internalData = $xeTable;
7738
7877
  const rest = [];
7739
- XEUtils.each(this.treeExpandedMaps, item => {
7878
+ XEUtils.each(internalData.treeExpandedMaps, item => {
7740
7879
  if (item) {
7741
7880
  rest.push(item);
7742
7881
  }
@@ -7769,12 +7908,10 @@ const Methods = {
7769
7908
  const $xeTable = this;
7770
7909
  const reactData = $xeTable;
7771
7910
  const internalData = $xeTable;
7772
- const { fullAllDataRowIdData } = internalData;
7911
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
7773
7912
  const treeOpts = $xeTable.computeTreeOpts;
7774
7913
  const { transform } = treeOpts;
7775
- let tExpandedMaps = {};
7776
7914
  if (rows) {
7777
- tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
7778
7915
  if (!XEUtils.isArray(rows)) {
7779
7916
  rows = [rows];
7780
7917
  }
@@ -7783,8 +7920,8 @@ const Methods = {
7783
7920
  const rowRest = fullAllDataRowIdData[rowid];
7784
7921
  if (rowRest) {
7785
7922
  rowRest.treeLoaded = false;
7786
- if (tExpandedMaps[rowid]) {
7787
- delete tExpandedMaps[rowid];
7923
+ if (treeExpandedMaps[rowid]) {
7924
+ delete treeExpandedMaps[rowid];
7788
7925
  }
7789
7926
  }
7790
7927
  });
@@ -7794,7 +7931,8 @@ const Methods = {
7794
7931
  rowRest.treeLoaded = false;
7795
7932
  });
7796
7933
  }
7797
- reactData.treeExpandedMaps = {};
7934
+ internalData.treeExpandedMaps = {};
7935
+ reactData.treeExpandedFlag++;
7798
7936
  if (transform) {
7799
7937
  handleVirtualTreeToList($xeTable);
7800
7938
  return $xeTable.handleTableData();
@@ -7807,36 +7945,42 @@ const Methods = {
7807
7945
  */
7808
7946
  reloadTreeExpand(row) {
7809
7947
  const $xeTable = this;
7810
- const { treeOpts, treeExpandLazyLoadedMaps } = this;
7948
+ const internalData = $xeTable;
7949
+ const { treeExpandLazyLoadedMaps } = internalData;
7950
+ const treeOpts = $xeTable.computeTreeOpts;
7811
7951
  const { transform, lazy } = treeOpts;
7812
7952
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
7813
- const rowid = getRowid(this, row);
7953
+ const rowid = getRowid($xeTable, row);
7814
7954
  if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
7815
- return this.clearTreeExpandLoaded(row).then(() => {
7816
- return this.handleAsyncTreeExpandChilds(row);
7955
+ return $xeTable.clearTreeExpandLoaded(row).then(() => {
7956
+ return handleAsyncTreeExpandChilds($xeTable, row);
7817
7957
  }).then(() => {
7818
7958
  if (transform) {
7819
7959
  handleVirtualTreeToList($xeTable);
7820
- return this.handleTableData();
7960
+ return $xeTable.handleTableData();
7821
7961
  }
7822
7962
  }).then(() => {
7823
- return this.recalculate();
7963
+ return $xeTable.recalculate();
7824
7964
  });
7825
7965
  }
7826
- return this.$nextTick();
7966
+ return $xeTable.$nextTick();
7827
7967
  },
7828
7968
  reloadTreeChilds(row) {
7969
+ const $xeTable = this;
7829
7970
  if (process.env.NODE_ENV === 'development') {
7830
7971
  warnLog('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand']);
7831
7972
  }
7832
7973
  // 即将废弃
7833
- return this.reloadTreeExpand(row);
7974
+ return $xeTable.reloadTreeExpand(row);
7834
7975
  },
7835
7976
  /**
7836
7977
  * 展开树节点事件
7837
7978
  */
7838
7979
  triggerTreeExpandEvent(evnt, params) {
7839
- const { treeOpts, treeExpandLazyLoadedMaps } = this;
7980
+ const $xeTable = this;
7981
+ const internalData = $xeTable;
7982
+ const { treeExpandLazyLoadedMaps } = internalData;
7983
+ const treeOpts = $xeTable.computeTreeOpts;
7840
7984
  const { row, column } = params;
7841
7985
  const { lazy, trigger } = treeOpts;
7842
7986
  if (trigger === 'manual') {
@@ -7845,11 +7989,11 @@ const Methods = {
7845
7989
  evnt.stopPropagation();
7846
7990
  const rowid = getRowid(this, row);
7847
7991
  if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
7848
- const expanded = !this.isTreeExpandByRow(row);
7849
- const columnIndex = this.getColumnIndex(column);
7850
- const $columnIndex = this.getVMColumnIndex(column);
7851
- this.setTreeExpand(row, expanded);
7852
- this.emitEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
7992
+ const expanded = !$xeTable.isTreeExpandByRow(row);
7993
+ const columnIndex = $xeTable.getColumnIndex(column);
7994
+ const $columnIndex = $xeTable.getVMColumnIndex(column);
7995
+ $xeTable.setTreeExpand(row, expanded);
7996
+ $xeTable.dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
7853
7997
  }
7854
7998
  },
7855
7999
  /**
@@ -7858,87 +8002,6 @@ const Methods = {
7858
8002
  toggleTreeExpand(row) {
7859
8003
  return this.setTreeExpand(row, !this.isTreeExpandByRow(row));
7860
8004
  },
7861
- /**
7862
- * 处理默认展开树节点
7863
- */
7864
- handleDefaultTreeExpand() {
7865
- const { treeConfig, treeOpts, tableFullData } = this;
7866
- if (treeConfig) {
7867
- const { expandAll, expandRowKeys } = treeOpts;
7868
- const childrenField = treeOpts.children || treeOpts.childrenField;
7869
- if (expandAll) {
7870
- this.setAllTreeExpand(true);
7871
- }
7872
- else if (expandRowKeys) {
7873
- const defExpandeds = [];
7874
- const rowkey = getRowkey(this);
7875
- expandRowKeys.forEach((rowid) => {
7876
- const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
7877
- if (matchObj) {
7878
- defExpandeds.push(matchObj.item);
7879
- }
7880
- });
7881
- this.setTreeExpand(defExpandeds, true);
7882
- }
7883
- }
7884
- },
7885
- handleAsyncTreeExpandChilds(row) {
7886
- const $xeTable = this;
7887
- const { treeOpts, checkboxOpts } = this;
7888
- const { transform, loadMethod } = treeOpts;
7889
- const { checkStrictly } = checkboxOpts;
7890
- return new Promise(resolve => {
7891
- if (loadMethod) {
7892
- const { treeExpandLazyLoadedMaps, fullAllDataRowIdData } = this;
7893
- const rowid = getRowid($xeTable, row);
7894
- const rowRest = fullAllDataRowIdData[rowid];
7895
- treeExpandLazyLoadedMaps[rowid] = row;
7896
- Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
7897
- if (rowRest) {
7898
- rowRest.treeLoaded = true;
7899
- }
7900
- if (treeExpandLazyLoadedMaps[rowid]) {
7901
- delete treeExpandLazyLoadedMaps[rowid];
7902
- }
7903
- if (!XEUtils.isArray(childRecords)) {
7904
- childRecords = [];
7905
- }
7906
- if (childRecords) {
7907
- return this.loadTreeChildren(row, childRecords).then((childRows) => {
7908
- const { treeExpandedMaps } = this;
7909
- if (childRows.length && !treeExpandedMaps[rowid]) {
7910
- treeExpandedMaps[rowid] = row;
7911
- }
7912
- // 如果当前节点已选中,则展开后子节点也被选中
7913
- if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
7914
- handleCheckedCheckboxRow($xeTable, childRows, true);
7915
- }
7916
- return this.$nextTick().then(() => {
7917
- if (transform) {
7918
- this.handleTableData();
7919
- updateAfterDataIndex($xeTable);
7920
- return this.$nextTick();
7921
- }
7922
- });
7923
- });
7924
- }
7925
- }).catch(() => {
7926
- const { treeExpandLazyLoadedMaps } = this;
7927
- if (rowRest) {
7928
- rowRest.treeLoaded = false;
7929
- }
7930
- if (treeExpandLazyLoadedMaps[rowid]) {
7931
- delete treeExpandLazyLoadedMaps[rowid];
7932
- }
7933
- }).finally(() => {
7934
- this.$nextTick().then(() => this.recalculate()).then(() => resolve());
7935
- });
7936
- }
7937
- else {
7938
- resolve();
7939
- }
7940
- });
7941
- },
7942
8005
  /**
7943
8006
  * 设置所有树节点的展开与否
7944
8007
  * @param {Boolean} expanded 是否展开
@@ -7963,42 +8026,47 @@ const Methods = {
7963
8026
  * @returns
7964
8027
  */
7965
8028
  handleBaseTreeExpand(rows, expanded) {
7966
- const { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeOpts, treeExpandLazyLoadedMaps, treeNodeColumn } = this;
8029
+ const $xeTable = this;
8030
+ const reactData = $xeTable;
8031
+ const internalData = $xeTable;
8032
+ const { treeNodeColumn } = reactData;
8033
+ const { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData;
8034
+ const treeOpts = $xeTable.computeTreeOpts;
7967
8035
  const { reserve, lazy, accordion, toggleMethod } = treeOpts;
7968
- const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
7969
8036
  const childrenField = treeOpts.children || treeOpts.childrenField;
7970
8037
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
7971
8038
  const result = [];
7972
- const columnIndex = this.getColumnIndex(treeNodeColumn);
7973
- const $columnIndex = this.getVMColumnIndex(treeNodeColumn);
7974
- let validRows = toggleMethod ? rows.filter((row) => toggleMethod({ expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows;
8039
+ const columnIndex = $xeTable.getColumnIndex(treeNodeColumn);
8040
+ const $columnIndex = $xeTable.getVMColumnIndex(treeNodeColumn);
8041
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
8042
+ let validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows;
7975
8043
  if (accordion) {
7976
8044
  validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
7977
8045
  // 同一级只能展开一个
7978
8046
  const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField });
7979
8047
  if (matchObj) {
7980
8048
  matchObj.items.forEach(item => {
7981
- const rowid = getRowid(this, item);
7982
- if (treeTempExpandedMaps[rowid]) {
7983
- delete treeTempExpandedMaps[rowid];
8049
+ const rowid = handleGetRowId(item);
8050
+ if (treeExpandedMaps[rowid]) {
8051
+ delete treeExpandedMaps[rowid];
7984
8052
  }
7985
8053
  });
7986
8054
  }
7987
8055
  }
7988
8056
  if (expanded) {
7989
8057
  validRows.forEach((row) => {
7990
- const rowid = getRowid(this, row);
7991
- if (!treeTempExpandedMaps[rowid]) {
8058
+ const rowid = handleGetRowId(row);
8059
+ if (!treeExpandedMaps[rowid]) {
7992
8060
  const rowRest = fullAllDataRowIdData[rowid];
7993
8061
  if (rowRest) {
7994
8062
  const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
7995
8063
  // 是否使用懒加载
7996
8064
  if (isLoad) {
7997
- result.push(this.handleAsyncTreeExpandChilds(row));
8065
+ result.push(handleAsyncTreeExpandChilds($xeTable, row));
7998
8066
  }
7999
8067
  else {
8000
8068
  if (row[childrenField] && row[childrenField].length) {
8001
- treeTempExpandedMaps[rowid] = row;
8069
+ treeExpandedMaps[rowid] = row;
8002
8070
  }
8003
8071
  }
8004
8072
  }
@@ -8007,18 +8075,18 @@ const Methods = {
8007
8075
  }
8008
8076
  else {
8009
8077
  validRows.forEach((item) => {
8010
- const rowid = getRowid(this, item);
8011
- if (treeTempExpandedMaps[rowid]) {
8012
- delete treeTempExpandedMaps[rowid];
8078
+ const rowid = handleGetRowId(item);
8079
+ if (treeExpandedMaps[rowid]) {
8080
+ delete treeExpandedMaps[rowid];
8013
8081
  }
8014
8082
  });
8015
8083
  }
8016
8084
  if (reserve) {
8017
- validRows.forEach((row) => this.handleTreeExpandReserve(row, expanded));
8085
+ validRows.forEach((row) => handleTreeExpandReserve($xeTable, row, expanded));
8018
8086
  }
8019
- this.treeExpandedMaps = treeTempExpandedMaps;
8087
+ reactData.treeExpandedFlag++;
8020
8088
  return Promise.all(result).then(() => {
8021
- return this.recalculate();
8089
+ return $xeTable.recalculate();
8022
8090
  });
8023
8091
  },
8024
8092
  /**
@@ -8072,30 +8140,38 @@ const Methods = {
8072
8140
  * @param {Row} row 行对象
8073
8141
  */
8074
8142
  isTreeExpandByRow(row) {
8075
- const { treeExpandedMaps } = this;
8076
- return !!treeExpandedMaps[getRowid(this, row)];
8143
+ const $xeTable = this;
8144
+ const reactData = $xeTable;
8145
+ const internalData = $xeTable;
8146
+ const { treeExpandedFlag } = reactData;
8147
+ const { treeExpandedMaps } = internalData;
8148
+ return !!treeExpandedFlag && !!treeExpandedMaps[getRowid($xeTable, row)];
8077
8149
  },
8078
8150
  /**
8079
8151
  * 手动清空树形节点的展开状态,数据会恢复成未展开的状态
8080
8152
  */
8081
8153
  clearTreeExpand() {
8082
8154
  const $xeTable = this;
8083
- const { treeOpts, tableFullData } = this;
8084
- const { transform, reserve } = treeOpts;
8155
+ const reactData = $xeTable;
8156
+ const internalData = $xeTable;
8157
+ const { tableFullTreeData } = internalData;
8158
+ const treeOpts = $xeTable.computeTreeOpts;
8085
8159
  const childrenField = treeOpts.children || treeOpts.childrenField;
8086
- const expList = this.getTreeExpandRecords();
8087
- this.treeExpandedMaps = {};
8160
+ const { transform, reserve } = treeOpts;
8161
+ const expList = $xeTable.getTreeExpandRecords();
8162
+ internalData.treeExpandedMaps = {};
8163
+ reactData.treeExpandedFlag++;
8088
8164
  if (reserve) {
8089
- XEUtils.eachTree(tableFullData, row => this.handleTreeExpandReserve(row, false), { children: childrenField });
8165
+ XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), { children: childrenField });
8090
8166
  }
8091
- return this.handleTableData().then(() => {
8167
+ return $xeTable.handleTableData().then(() => {
8092
8168
  if (transform) {
8093
8169
  handleVirtualTreeToList($xeTable);
8094
- return this.handleTableData();
8170
+ return $xeTable.handleTableData();
8095
8171
  }
8096
8172
  }).then(() => {
8097
8173
  if (expList.length) {
8098
- this.recalculate();
8174
+ $xeTable.recalculate();
8099
8175
  }
8100
8176
  });
8101
8177
  },
@@ -8103,18 +8179,6 @@ const Methods = {
8103
8179
  this.treeExpandedReserveRowMap = {};
8104
8180
  return this.$nextTick();
8105
8181
  },
8106
- handleTreeExpandReserve(row, expanded) {
8107
- const { treeExpandedReserveRowMap, treeOpts } = this;
8108
- if (treeOpts.reserve) {
8109
- const rowid = getRowid(this, row);
8110
- if (expanded) {
8111
- treeExpandedReserveRowMap[rowid] = row;
8112
- }
8113
- else if (treeExpandedReserveRowMap[rowid]) {
8114
- delete treeExpandedReserveRowMap[rowid];
8115
- }
8116
- }
8117
- },
8118
8182
  /**
8119
8183
  * 获取表格的滚动状态
8120
8184
  */
@@ -8432,10 +8496,10 @@ const Methods = {
8432
8496
  return;
8433
8497
  }
8434
8498
  const { highlightHoverRow } = tableProps;
8435
- const { scrollXLoad, scrollYLoad } = reactData;
8499
+ const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
8436
8500
  const leftFixedWidth = $xeTable.computeLeftFixedWidth;
8437
8501
  const rightFixedWidth = $xeTable.computeRightFixedWidth;
8438
- if (!(scrollYLoad || leftFixedWidth || rightFixedWidth)) {
8502
+ if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
8439
8503
  return;
8440
8504
  }
8441
8505
  const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
@@ -8687,8 +8751,8 @@ const Methods = {
8687
8751
  const $xeTable = this;
8688
8752
  const reactData = $xeTable;
8689
8753
  const internalData = $xeTable;
8690
- const { isAllOverflow, scrollYLoad, expandColumn, rowExpandedMaps } = reactData;
8691
- const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData;
8754
+ const { isAllOverflow, scrollYLoad, expandColumn } = reactData;
8755
+ const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
8692
8756
  const { startIndex } = scrollYStore;
8693
8757
  const expandOpts = $xeTable.computeExpandOpts;
8694
8758
  const rowOpts = $xeTable.computeRowOpts;
@@ -8931,13 +8995,15 @@ const Methods = {
8931
8995
  * 更新表尾合计
8932
8996
  */
8933
8997
  updateFooter() {
8998
+ const $xeTable = this;
8999
+ const $xeGrid = $xeTable.$xeGrid;
8934
9000
  const { showFooter, visibleColumn, footerData, footerMethod } = this;
8935
9001
  let footData = [];
8936
9002
  if (showFooter && footerData && footerData.length) {
8937
9003
  footData = footerData.slice(0);
8938
9004
  }
8939
9005
  else if (showFooter && footerMethod) {
8940
- footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table: this, $grid: this.$xegrid }) : [];
9006
+ footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table: $xeTable, $grid: $xeGrid }) : [];
8941
9007
  }
8942
9008
  this.footerTableData = footData;
8943
9009
  return this.$nextTick();
@@ -9015,7 +9081,7 @@ const Methods = {
9015
9081
  if (this.footerSpanMethod) {
9016
9082
  errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
9017
9083
  }
9018
- setMerges(this, merges, this.mergeFooterList, null);
9084
+ setMerges(this, merges, this.mergeFooterList);
9019
9085
  return this.$nextTick().then(() => {
9020
9086
  this.updateCellAreas();
9021
9087
  return updateStyle($xeTable);
@@ -9069,11 +9135,14 @@ const Methods = {
9069
9135
  },
9070
9136
  dispatchEvent(type, params, evnt) {
9071
9137
  const $xeTable = this;
9072
- $xeTable.$emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeTable.$xegrid }, params));
9138
+ const $xeGrid = $xeTable.$xeGrid;
9139
+ $xeTable.$emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeGrid }, params));
9073
9140
  },
9074
9141
  // 已废弃,使用 dispatchEvent
9075
9142
  emitEvent(type, params, evnt) {
9076
- this.$emit(type, Object.assign({ $table: this, $grid: this.$xegrid, $event: evnt }, params));
9143
+ const $xeTable = this;
9144
+ const $xeGrid = $xeTable.$xeGrid;
9145
+ this.$emit(type, Object.assign({ $table: $xeTable, $grid: $xeGrid, $event: evnt }, params));
9077
9146
  },
9078
9147
  focus() {
9079
9148
  this.isActivated = true;