vxe-table 3.14.0-beta.9 → 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 +62 -42
  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 +761 -698
  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 +69 -59
  52. package/lib/grid/src/grid.min.js +1 -1
  53. package/lib/index.umd.js +1558 -1232
  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 +898 -825
  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 +75 -51
  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 +840 -734
  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.1741336976538.ttf → iconfont.1742955973002.ttf} +0 -0
  205. /package/es/{iconfont.1741336976538.woff → iconfont.1742955973002.woff} +0 -0
  206. /package/es/{iconfont.1741336976538.woff2 → iconfont.1742955973002.woff2} +0 -0
  207. /package/lib/{iconfont.1741336976538.ttf → iconfont.1742955973002.ttf} +0 -0
  208. /package/lib/{iconfont.1741336976538.woff → iconfont.1742955973002.woff} +0 -0
  209. /package/lib/{iconfont.1741336976538.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,18 +2790,14 @@ 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) {
@@ -2658,15 +2816,14 @@ const Methods = {
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,12 +2832,12 @@ 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
2843
  const $xeTable = this;
@@ -2688,17 +2845,12 @@ const Methods = {
2688
2845
  const internalData = $xeTable;
2689
2846
  const { treeConfig } = props;
2690
2847
  const treeOpts = $xeTable.computeTreeOpts;
2691
- let { sourceDataRowIdData } = internalData;
2692
2848
  const sourceData = XEUtils.clone(fullData, true);
2693
- const rowkey = getRowkey($xeTable);
2694
- sourceDataRowIdData = internalData.sourceDataRowIdData = {};
2849
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
2850
+ const sourceRowIdData = {};
2695
2851
  const handleSourceRow = (row) => {
2696
- let rowid = getRowid($xeTable, row);
2697
- if (eqEmptyValue(rowid)) {
2698
- rowid = getRowUniqueId();
2699
- XEUtils.set(row, rowkey, rowid);
2700
- }
2701
- sourceDataRowIdData[rowid] = row;
2852
+ const rowid = handleUpdateRowId(row);
2853
+ sourceRowIdData[rowid] = row;
2702
2854
  };
2703
2855
  // 源数据缓存
2704
2856
  if (treeConfig) {
@@ -2708,6 +2860,7 @@ const Methods = {
2708
2860
  else {
2709
2861
  sourceData.forEach(handleSourceRow);
2710
2862
  }
2863
+ internalData.sourceDataRowIdData = sourceRowIdData;
2711
2864
  internalData.tableSourceData = sourceData;
2712
2865
  },
2713
2866
  getParams() {
@@ -2795,47 +2948,22 @@ const Methods = {
2795
2948
  * 根据 row 获取序号
2796
2949
  * @param {Row} row 行对象
2797
2950
  */
2798
- getRowSeq(row) {
2799
- const { fullAllDataRowIdData } = this;
2800
- if (row) {
2801
- const rowid = getRowid(this, row);
2802
- const rest = fullAllDataRowIdData[rowid];
2803
- if (rest) {
2804
- return rest.seq;
2805
- }
2806
- }
2807
- return -1;
2808
- },
2951
+ getRowSeq: createGetRowCacheProp('seq'),
2809
2952
  /**
2810
2953
  * 根据 row 获取相对于 data 中的索引
2811
2954
  * @param {Row} row 行对象
2812
2955
  */
2813
- getRowIndex(row) {
2814
- const { fullAllDataRowIdData } = this;
2815
- if (row) {
2816
- const rowid = getRowid(this, row);
2817
- const rest = fullAllDataRowIdData[rowid];
2818
- if (rest) {
2819
- return rest.index;
2820
- }
2821
- }
2822
- return -1;
2823
- },
2956
+ getRowIndex: createGetRowCacheProp('index'),
2824
2957
  /**
2825
2958
  * 根据 row 获取相对于当前数据中的索引
2826
2959
  * @param {Row} row 行对象
2827
2960
  */
2828
- getVTRowIndex(row) {
2829
- const { fullAllDataRowIdData } = this;
2830
- if (row) {
2831
- const rowid = getRowid(this, row);
2832
- const rest = fullAllDataRowIdData[rowid];
2833
- if (rest) {
2834
- return rest._index;
2835
- }
2836
- }
2837
- return -1;
2838
- },
2961
+ getVTRowIndex: createGetRowCacheProp('_index'),
2962
+ /**
2963
+ * 根据 row 获取渲染中的虚拟索引
2964
+ * @param {Row} row 行对象
2965
+ */
2966
+ getVMRowIndex: createGetRowCacheProp('$index'),
2839
2967
  // 在 v3 中废弃
2840
2968
  _getRowIndex(row) {
2841
2969
  if (process.env.NODE_ENV === 'development') {
@@ -2843,21 +2971,6 @@ const Methods = {
2843
2971
  }
2844
2972
  return this.getVTRowIndex(row);
2845
2973
  },
2846
- /**
2847
- * 根据 row 获取渲染中的虚拟索引
2848
- * @param {Row} row 行对象
2849
- */
2850
- getVMRowIndex(row) {
2851
- const { fullAllDataRowIdData } = this;
2852
- if (row) {
2853
- const rowid = getRowid(this, row);
2854
- const rest = fullAllDataRowIdData[rowid];
2855
- if (rest) {
2856
- return rest.$index;
2857
- }
2858
- }
2859
- return -1;
2860
- },
2861
2974
  // 在 v3 中废弃
2862
2975
  $getRowIndex(row) {
2863
2976
  if (process.env.NODE_ENV === 'development') {
@@ -2869,30 +2982,17 @@ const Methods = {
2869
2982
  * 根据 column 获取相对于 columns 中的索引
2870
2983
  * @param {ColumnInfo} column 列配置
2871
2984
  */
2872
- getColumnIndex(column) {
2873
- const { fullColumnIdData } = this;
2874
- if (column) {
2875
- const rest = fullColumnIdData[column.id];
2876
- if (rest) {
2877
- return rest.index;
2878
- }
2879
- }
2880
- return -1;
2881
- },
2985
+ getColumnIndex: createGetColumnCacheProp('index'),
2882
2986
  /**
2883
2987
  * 根据 column 获取相对于当前表格列中的索引
2884
2988
  * @param {ColumnInfo} column 列配置
2885
2989
  */
2886
- getVTColumnIndex(column) {
2887
- const { fullColumnIdData } = this;
2888
- if (column) {
2889
- const rest = fullColumnIdData[column.id];
2890
- if (rest) {
2891
- return rest._index;
2892
- }
2893
- }
2894
- return -1;
2895
- },
2990
+ getVTColumnIndex: createGetColumnCacheProp('_index'),
2991
+ /**
2992
+ * 根据 column 获取渲染中的虚拟索引
2993
+ * @param {ColumnInfo} column 列配置
2994
+ */
2995
+ getVMColumnIndex: createGetColumnCacheProp('$index'),
2896
2996
  // 在 v3 中废弃
2897
2997
  _getColumnIndex(column) {
2898
2998
  if (process.env.NODE_ENV === 'development') {
@@ -2900,20 +3000,6 @@ const Methods = {
2900
3000
  }
2901
3001
  return this.getVTColumnIndex(column);
2902
3002
  },
2903
- /**
2904
- * 根据 column 获取渲染中的虚拟索引
2905
- * @param {ColumnInfo} column 列配置
2906
- */
2907
- getVMColumnIndex(column) {
2908
- const { fullColumnIdData } = this;
2909
- if (column) {
2910
- const rest = fullColumnIdData[column.id];
2911
- if (rest) {
2912
- return rest.$index;
2913
- }
2914
- }
2915
- return -1;
2916
- },
2917
3003
  // 在 v3 中废弃
2918
3004
  $getColumnIndex(column) {
2919
3005
  if (process.env.NODE_ENV === 'development') {
@@ -3012,6 +3098,7 @@ const Methods = {
3012
3098
  const removeTempMaps = Object.assign({}, editStore.removeMaps);
3013
3099
  const treeOpts = $xeTable.computeTreeOpts;
3014
3100
  const { transform } = treeOpts;
3101
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
3015
3102
  if (!keepSource) {
3016
3103
  if (process.env.NODE_ENV === 'development') {
3017
3104
  errLog('vxe.error.reqProp', ['keep-source']);
@@ -3030,7 +3117,7 @@ const Methods = {
3030
3117
  let reDelFlag = false;
3031
3118
  if (targetRows.length) {
3032
3119
  targetRows.forEach((item) => {
3033
- const rowid = getRowid($xeTable, item);
3120
+ const rowid = handleGetRowId(item);
3034
3121
  const rowRest = fullAllDataRowIdData[rowid];
3035
3122
  if (rowRest) {
3036
3123
  const row = rowRest.row;
@@ -3414,11 +3501,9 @@ const Methods = {
3414
3501
  getCheckboxRecords(isFull) {
3415
3502
  const $xeTable = this;
3416
3503
  const props = $xeTable;
3417
- const reactData = $xeTable;
3418
3504
  const internalData = $xeTable;
3419
3505
  const { treeConfig } = props;
3420
- const { selectCheckboxMaps } = reactData;
3421
- const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData;
3506
+ const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
3422
3507
  const treeOpts = $xeTable.computeTreeOpts;
3423
3508
  const checkboxOpts = $xeTable.computeCheckboxOpts;
3424
3509
  const { transform, mapChildrenField } = treeOpts;
@@ -3466,7 +3551,7 @@ const Methods = {
3466
3551
  const treeOpts = $xeTable.computeTreeOpts;
3467
3552
  const childrenField = treeOpts.children || treeOpts.childrenField;
3468
3553
  const { transform, rowField, parentField, mapChildrenField } = treeOpts;
3469
- const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
3554
+ const { isEvery, remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
3470
3555
  const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts;
3471
3556
  let tableData = [];
3472
3557
  let tableTree = [];
@@ -3525,7 +3610,7 @@ const Methods = {
3525
3610
  // 筛选虚拟树
3526
3611
  tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
3527
3612
  original: true,
3528
- isEvery: true,
3613
+ isEvery,
3529
3614
  children: mapChildrenField,
3530
3615
  mapChildren: childrenField
3531
3616
  });
@@ -3541,7 +3626,7 @@ const Methods = {
3541
3626
  // 还原虚拟树
3542
3627
  tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
3543
3628
  original: true,
3544
- isEvery: true,
3629
+ isEvery,
3545
3630
  children: mapChildrenField,
3546
3631
  mapChildren: childrenField
3547
3632
  });
@@ -3604,7 +3689,7 @@ const Methods = {
3604
3689
  // 还原虚拟树
3605
3690
  tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
3606
3691
  original: true,
3607
- isEvery: true,
3692
+ isEvery,
3608
3693
  children: treeOpts.mapChildrenField,
3609
3694
  mapChildren: childrenField
3610
3695
  });
@@ -3751,6 +3836,7 @@ const Methods = {
3751
3836
  * 默认执行一次,除非被重置
3752
3837
  */
3753
3838
  handleLoadDefaults() {
3839
+ const $xeTable = this;
3754
3840
  if (this.checkboxConfig) {
3755
3841
  this.handleDefaultSelectionChecked();
3756
3842
  }
@@ -3761,7 +3847,7 @@ const Methods = {
3761
3847
  this.handleDefaultRowExpand();
3762
3848
  }
3763
3849
  if (this.treeConfig) {
3764
- this.handleDefaultTreeExpand();
3850
+ handleDefaultTreeExpand($xeTable);
3765
3851
  }
3766
3852
  if (this.mergeCells) {
3767
3853
  this.handleDefaultMergeCells();
@@ -3949,9 +4035,9 @@ const Methods = {
3949
4035
  return this.refreshColumn(true);
3950
4036
  },
3951
4037
  handleCustomRestore(storeData) {
3952
- const $xetable = this;
3953
- const reactData = $xetable;
3954
- const internalData = $xetable;
4038
+ const $xeTable = this;
4039
+ const reactData = $xeTable;
4040
+ const internalData = $xeTable;
3955
4041
  let { collectColumn } = internalData;
3956
4042
  const { resizableData, sortData, visibleData, fixedData } = storeData;
3957
4043
  let hasCustomSort = false;
@@ -4020,8 +4106,19 @@ const Methods = {
4020
4106
  }
4021
4107
  },
4022
4108
  getCustomStoreData() {
4023
- const { id, customOpts, collectColumn } = this;
4024
- 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;
4025
4122
  const resizableData = {};
4026
4123
  const sortData = {};
4027
4124
  const visibleData = {};
@@ -4038,47 +4135,37 @@ const Methods = {
4038
4135
  }
4039
4136
  let hasResizable = 0;
4040
4137
  let hasSort = 0;
4041
- let hasFixedt = 0;
4138
+ let hasFixed = 0;
4042
4139
  let hasVisible = 0;
4043
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
+ }
4044
4146
  // 只支持一级
4045
4147
  if (!parentColumn) {
4046
- collectColumn.forEach((column) => {
4047
- const colKey = column.getKey();
4048
- if (colKey) {
4049
- hasSort = 1;
4050
- sortData[colKey] = column.renderSortNumber;
4051
- }
4052
- });
4053
- if (column.fixed !== column.defaultFixed) {
4054
- const colKey = column.getKey();
4055
- if (colKey) {
4056
- hasFixedt = 1;
4057
- fixedData[colKey] = column.fixed;
4058
- }
4148
+ if (isCustomSort) {
4149
+ hasSort = 1;
4150
+ sortData[colKey] = column.renderSortNumber;
4059
4151
  }
4060
- }
4061
- if (column.resizeWidth) {
4062
- const colKey = column.getKey();
4063
- if (colKey) {
4064
- hasResizable = 1;
4065
- resizableData[colKey] = column.renderWidth;
4152
+ if (isCustomFixed && column.fixed !== column.defaultFixed) {
4153
+ hasFixed = 1;
4154
+ fixedData[colKey] = column.fixed;
4066
4155
  }
4067
4156
  }
4068
- if (!checkMethod || checkMethod({ column })) {
4157
+ if (isCustomResizable && column.resizeWidth) {
4158
+ hasResizable = 1;
4159
+ resizableData[colKey] = column.renderWidth;
4160
+ }
4161
+ if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
4069
4162
  if (!column.visible && column.defaultVisible) {
4070
- const colKey = column.getKey();
4071
- if (colKey) {
4072
- hasVisible = 1;
4073
- visibleData[colKey] = false;
4074
- }
4163
+ hasVisible = 1;
4164
+ visibleData[colKey] = false;
4075
4165
  }
4076
4166
  else if (column.visible && !column.defaultVisible) {
4077
- const colKey = column.getKey();
4078
- if (colKey) {
4079
- hasVisible = 1;
4080
- visibleData[colKey] = true;
4081
- }
4167
+ hasVisible = 1;
4168
+ visibleData[colKey] = true;
4082
4169
  }
4083
4170
  }
4084
4171
  });
@@ -4088,7 +4175,7 @@ const Methods = {
4088
4175
  if (hasSort) {
4089
4176
  storeData.sortData = sortData;
4090
4177
  }
4091
- if (hasFixedt) {
4178
+ if (hasFixed) {
4092
4179
  storeData.fixedData = fixedData;
4093
4180
  }
4094
4181
  if (hasVisible) {
@@ -4576,12 +4663,13 @@ const Methods = {
4576
4663
  const $xeTable = this;
4577
4664
  const internalData = $xeTable;
4578
4665
  const { fullAllDataRowIdData, afterFullData } = internalData;
4666
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4579
4667
  const rowOpts = $xeTable.computeRowOpts;
4580
4668
  const cellOpts = $xeTable.computeCellOpts;
4581
4669
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
4582
4670
  const rest = {};
4583
4671
  afterFullData.forEach(row => {
4584
- const rowid = getRowid($xeTable, row);
4672
+ const rowid = handleGetRowId(row);
4585
4673
  const rowRest = fullAllDataRowIdData[rowid];
4586
4674
  if (rowRest) {
4587
4675
  const resizeHeight = rowRest.resizeHeight;
@@ -4608,8 +4696,9 @@ const Methods = {
4608
4696
  rHeight = Math.floor(rHeight * bodyHeight);
4609
4697
  }
4610
4698
  if (rHeight) {
4699
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
4611
4700
  rows.forEach(row => {
4612
- const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : getRowid($xeTable, row);
4701
+ const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row);
4613
4702
  const rowRest = fullAllDataRowIdData[rowid];
4614
4703
  if (rowRest) {
4615
4704
  rowRest.resizeHeight = rHeight;
@@ -4750,6 +4839,8 @@ const Methods = {
4750
4839
  }
4751
4840
  },
4752
4841
  preventEvent(evnt, type, args, next, end) {
4842
+ const $xeTable = this;
4843
+ const $xeGrid = $xeTable.$xeGrid;
4753
4844
  let evntList = interceptor.get(type);
4754
4845
  // 兼容老版本
4755
4846
  if (!evntList.length && type === 'event.clearEdit') {
@@ -4761,8 +4852,22 @@ const Methods = {
4761
4852
  }
4762
4853
  }
4763
4854
  // 兼容老版本
4764
- let rest;
4765
- 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) {
4766
4871
  if (next) {
4767
4872
  rest = next();
4768
4873
  }
@@ -4776,7 +4881,9 @@ const Methods = {
4776
4881
  * 全局按下事件处理
4777
4882
  */
4778
4883
  handleGlobalMousedownEvent(evnt) {
4779
- 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;
4780
4887
  const { actived } = editStore;
4781
4888
  const { customWrapper, refValidTooltip } = $refs;
4782
4889
  const tableFilter = $refs.refTableFilter;
@@ -4866,7 +4973,7 @@ const Methods = {
4866
4973
  }
4867
4974
  }
4868
4975
  else if (mouseConfig) {
4869
- 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)) {
4870
4977
  if (this.clearSelected) {
4871
4978
  this.clearSelected();
4872
4979
  }
@@ -4888,7 +4995,7 @@ const Methods = {
4888
4995
  if (ctxMenuStore.visible && tableMenu && !getEventTargetNode(evnt, tableMenu.$el).flag) {
4889
4996
  this.closeMenu();
4890
4997
  }
4891
- const isActivated = getEventTargetNode(evnt, ($xegrid || this).$el).flag;
4998
+ const isActivated = getEventTargetNode(evnt, ($xeGrid || this).$el).flag;
4892
4999
  // 如果存在校验,点击了表格之外则清除
4893
5000
  if (!isActivated && editRules && validOpts.autoClear) {
4894
5001
  this.validErrorMaps = {};
@@ -4952,6 +5059,7 @@ const Methods = {
4952
5059
  handleGlobalKeydownEvent(evnt) {
4953
5060
  const $xeTable = this;
4954
5061
  const internalData = $xeTable;
5062
+ const $xeGrid = $xeTable.$xeGrid;
4955
5063
  // 该行为只对当前激活的表格有效
4956
5064
  if (this.isActivated) {
4957
5065
  this.preventEvent(evnt, 'event.keydown', null, () => {
@@ -5050,7 +5158,7 @@ const Methods = {
5050
5158
  this.moveTabSelected(activeParams, hasShiftKey, evnt);
5051
5159
  }
5052
5160
  else {
5053
- this.moveSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt);
5161
+ this.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt);
5054
5162
  }
5055
5163
  }
5056
5164
  else {
@@ -5084,7 +5192,7 @@ const Methods = {
5084
5192
  return;
5085
5193
  }
5086
5194
  }
5087
- this.moveSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt);
5195
+ this.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt);
5088
5196
  if (enterMethod) {
5089
5197
  enterMethod(etrParams);
5090
5198
  }
@@ -5110,11 +5218,7 @@ const Methods = {
5110
5218
  if (!isEditStatus) {
5111
5219
  // 如果按下了方向键
5112
5220
  if (selected.row && selected.column) {
5113
- this.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
5114
- }
5115
- else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
5116
- // 当前行按键上下移动
5117
- this.moveCurrentRow(isUpArrow, isDwArrow, evnt);
5221
+ $xeTable.moveArrowSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
5118
5222
  }
5119
5223
  }
5120
5224
  }
@@ -5137,7 +5241,7 @@ const Methods = {
5137
5241
  column: selected.column,
5138
5242
  columnIndex: this.getColumnIndex(selected.column),
5139
5243
  $table: this,
5140
- $grid: this.$xegrid
5244
+ $grid: $xeGrid
5141
5245
  };
5142
5246
  // 是否被禁用
5143
5247
  if (!beforeEditMethod || beforeEditMethod(params)) {
@@ -5164,7 +5268,7 @@ const Methods = {
5164
5268
  column: selected.column,
5165
5269
  columnIndex: this.getColumnIndex(selected.column),
5166
5270
  $table: this,
5167
- $grid: this.$xegrid
5271
+ $grid: $xeGrid
5168
5272
  };
5169
5273
  // 是否被禁用
5170
5274
  if (!beforeEditMethod || beforeEditMethod(params)) {
@@ -5193,7 +5297,7 @@ const Methods = {
5193
5297
  rowIndex: this.getRowIndex(parentRow),
5194
5298
  $rowIndex: this.getVMRowIndex(parentRow),
5195
5299
  $table: this,
5196
- $grid: this.$xegrid
5300
+ $grid: $xeGrid
5197
5301
  };
5198
5302
  this.setTreeExpand(parentRow, false)
5199
5303
  .then(() => this.scrollToRow(parentRow))
@@ -5215,7 +5319,7 @@ const Methods = {
5215
5319
  column: selected.column,
5216
5320
  columnIndex: this.getColumnIndex(selected.column),
5217
5321
  $table: this,
5218
- $grid: this.$xegrid
5322
+ $grid: $xeGrid
5219
5323
  };
5220
5324
  if (!beforeEditMethod || beforeEditMethod(params)) {
5221
5325
  if (editMethod) {
@@ -5336,7 +5440,7 @@ const Methods = {
5336
5440
  return;
5337
5441
  }
5338
5442
  if (tooltipStore.column !== column || !tooltipStore.visible) {
5339
- handleTooltip($xeTable, evnt, thEl, cellEl, null, params);
5443
+ handleTooltip($xeTable, evnt, thEl, thEl.querySelector('.vxe-cell--title') || cellEl, params);
5340
5444
  }
5341
5445
  },
5342
5446
  /**
@@ -5366,7 +5470,7 @@ const Methods = {
5366
5470
  }
5367
5471
  }
5368
5472
  if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
5369
- 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);
5370
5474
  }
5371
5475
  },
5372
5476
  /**
@@ -5377,10 +5481,10 @@ const Methods = {
5377
5481
  const reactData = $xeTable;
5378
5482
  const { column } = params;
5379
5483
  const { tooltipStore } = reactData;
5380
- const cell = evnt.currentTarget;
5484
+ const tdEl = evnt.currentTarget;
5381
5485
  handleTargetEnterEvent($xeTable, tooltipStore.column !== column || !!tooltipStore.row);
5382
5486
  if (tooltipStore.column !== column || !tooltipStore.visible) {
5383
- 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);
5384
5488
  }
5385
5489
  },
5386
5490
  openTooltip(target, content) {
@@ -5437,11 +5541,15 @@ const Methods = {
5437
5541
  * 获取复选框半选状态的行数据
5438
5542
  */
5439
5543
  getCheckboxIndeterminateRecords(isFull) {
5440
- 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;
5441
5549
  if (treeConfig) {
5442
5550
  const fullRest = [];
5443
5551
  const defRest = [];
5444
- XEUtils.each(treeIndeterminateMaps, (item, rowid) => {
5552
+ XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
5445
5553
  if (item) {
5446
5554
  fullRest.push(item);
5447
5555
  if (fullDataRowIdData[rowid]) {
@@ -5511,20 +5619,22 @@ const Methods = {
5511
5619
  isCheckedByCheckboxRow(row) {
5512
5620
  const $xeTable = this;
5513
5621
  const reactData = $xeTable;
5514
- const { selectCheckboxMaps } = reactData;
5622
+ const internalData = $xeTable;
5623
+ const { updateCheckboxFlag } = reactData;
5624
+ const { selectCheckboxMaps } = internalData;
5515
5625
  const checkboxOpts = $xeTable.computeCheckboxOpts;
5516
5626
  const { checkField } = checkboxOpts;
5517
5627
  if (checkField) {
5518
5628
  return XEUtils.get(row, checkField);
5519
5629
  }
5520
- return !!selectCheckboxMaps[getRowid($xeTable, row)];
5630
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)];
5521
5631
  },
5522
5632
  isCheckedByCheckboxRowKey(rowid) {
5523
5633
  const $xeTable = this;
5524
5634
  const reactData = $xeTable;
5525
5635
  const internalData = $xeTable;
5526
- const { selectCheckboxMaps } = reactData;
5527
- const { fullAllDataRowIdData } = internalData;
5636
+ const { updateCheckboxFlag } = reactData;
5637
+ const { fullAllDataRowIdData, selectCheckboxMaps } = internalData;
5528
5638
  const checkboxOpts = $xeTable.computeCheckboxOpts;
5529
5639
  const { checkField } = checkboxOpts;
5530
5640
  if (checkField) {
@@ -5534,19 +5644,19 @@ const Methods = {
5534
5644
  }
5535
5645
  return false;
5536
5646
  }
5537
- return !!selectCheckboxMaps[rowid];
5647
+ return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
5538
5648
  },
5539
5649
  isIndeterminateByCheckboxRow(row) {
5540
5650
  const $xeTable = this;
5541
- const reactData = $xeTable;
5542
- const { treeIndeterminateMaps } = reactData;
5543
- 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);
5544
5654
  },
5545
5655
  isIndeterminateByCheckboxRowKey(rowid) {
5546
5656
  const $xeTable = this;
5547
- const reactData = $xeTable;
5548
- const { treeIndeterminateMaps } = reactData;
5549
- return !!treeIndeterminateMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
5657
+ const internalData = $xeTable;
5658
+ const { treeIndeterminateRowMaps } = internalData;
5659
+ return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
5550
5660
  },
5551
5661
  /**
5552
5662
  * 切换选中
@@ -5556,14 +5666,15 @@ const Methods = {
5556
5666
  const $xeTable = this;
5557
5667
  const props = $xeTable;
5558
5668
  const reactData = $xeTable;
5669
+ const internalData = $xeTable;
5559
5670
  const { treeConfig } = props;
5560
- const { selectCheckboxMaps } = reactData;
5561
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
5671
+ const { selectCheckboxMaps } = internalData;
5562
5672
  const treeOpts = $xeTable.computeTreeOpts;
5563
5673
  const { transform, mapChildrenField } = treeOpts;
5564
5674
  const childrenField = treeOpts.children || treeOpts.childrenField;
5565
5675
  const checkboxOpts = $xeTable.computeCheckboxOpts;
5566
5676
  const { checkField, checkStrictly, checkMethod } = checkboxOpts;
5677
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5567
5678
  // indeterminateField 仅支持读取
5568
5679
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
5569
5680
  if (checkField) {
@@ -5579,59 +5690,57 @@ const Methods = {
5579
5690
  handleCheckboxReserveRow($xeTable, row, checked);
5580
5691
  }
5581
5692
  }, { children: transform ? mapChildrenField : childrenField });
5582
- reactData.selectCheckboxMaps = selectRowMaps;
5693
+ reactData.updateCheckboxFlag++;
5583
5694
  return;
5584
5695
  }
5585
- else {
5586
- // 列表
5587
- rows.forEach(row => {
5588
- if (isForce || (!checkMethod || checkMethod({ row }))) {
5589
- XEUtils.set(row, checkField, checked);
5590
- handleCheckboxReserveRow($xeTable, row, checked);
5591
- }
5592
- });
5593
- }
5594
- 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++;
5595
5704
  return;
5596
5705
  }
5597
5706
  // 树结构
5598
5707
  if (treeConfig && !checkStrictly) {
5599
5708
  // 更新子节点状态
5600
5709
  XEUtils.eachTree(rows, (row) => {
5601
- const rowid = getRowid($xeTable, row);
5710
+ const rowid = handleGetRowId(row);
5602
5711
  if (isForce || (!checkMethod || checkMethod({ row }))) {
5603
5712
  if (checked) {
5604
- selectRowMaps[rowid] = row;
5713
+ selectCheckboxMaps[rowid] = row;
5605
5714
  }
5606
5715
  else {
5607
- if (selectRowMaps[rowid]) {
5608
- delete selectRowMaps[rowid];
5716
+ if (selectCheckboxMaps[rowid]) {
5717
+ delete selectCheckboxMaps[rowid];
5609
5718
  }
5610
5719
  }
5611
5720
  handleCheckboxReserveRow($xeTable, row, checked);
5612
5721
  }
5613
5722
  }, { children: transform ? mapChildrenField : childrenField });
5614
- reactData.selectCheckboxMaps = selectRowMaps;
5723
+ reactData.updateCheckboxFlag++;
5615
5724
  return;
5616
5725
  }
5617
5726
  // 列表
5618
5727
  rows.forEach(row => {
5619
- const rowid = getRowid($xeTable, row);
5728
+ const rowid = handleGetRowId(row);
5620
5729
  if (isForce || (!checkMethod || checkMethod({ row }))) {
5621
5730
  if (checked) {
5622
- if (!selectRowMaps[rowid]) {
5623
- selectRowMaps[rowid] = row;
5731
+ if (!selectCheckboxMaps[rowid]) {
5732
+ selectCheckboxMaps[rowid] = row;
5624
5733
  }
5625
5734
  }
5626
5735
  else {
5627
- if (selectRowMaps[rowid]) {
5628
- delete selectRowMaps[rowid];
5736
+ if (selectCheckboxMaps[rowid]) {
5737
+ delete selectCheckboxMaps[rowid];
5629
5738
  }
5630
5739
  }
5631
5740
  handleCheckboxReserveRow($xeTable, row, checked);
5741
+ reactData.updateCheckboxFlag++;
5632
5742
  }
5633
5743
  });
5634
- reactData.selectCheckboxMaps = selectRowMaps;
5635
5744
  },
5636
5745
  /**
5637
5746
  * 即将移除
@@ -5642,7 +5751,10 @@ const Methods = {
5642
5751
  $xeTable.handleBatchSelectRows([row], checked, isForce);
5643
5752
  },
5644
5753
  handleToggleCheckRowEvent(evnt, params) {
5645
- const { selectCheckboxMaps, checkboxOpts } = this;
5754
+ const $xeTable = this;
5755
+ const internalData = $xeTable;
5756
+ const { selectCheckboxMaps } = internalData;
5757
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
5646
5758
  const { checkField, trigger } = checkboxOpts;
5647
5759
  const { row } = params;
5648
5760
  if (trigger === 'manual') {
@@ -5653,47 +5765,52 @@ const Methods = {
5653
5765
  checked = !XEUtils.get(row, checkField);
5654
5766
  }
5655
5767
  else {
5656
- checked = !selectCheckboxMaps[getRowid(this, row)];
5768
+ checked = !selectCheckboxMaps[getRowid($xeTable, row)];
5657
5769
  }
5658
5770
  if (evnt) {
5659
- this.triggerCheckRowEvent(evnt, params, checked);
5771
+ $xeTable.triggerCheckRowEvent(evnt, params, checked);
5660
5772
  }
5661
5773
  else {
5662
- this.handleSelectRow(params, checked);
5663
- this.checkSelectionStatus();
5774
+ $xeTable.handleBatchSelectRows([row], checked);
5775
+ $xeTable.checkSelectionStatus();
5664
5776
  }
5665
5777
  },
5666
5778
  triggerCheckRowEvent(evnt, params, checked) {
5667
5779
  const $xeTable = this;
5668
- const { checkboxOpts, afterFullData } = this;
5669
- const { checkMethod, trigger } = checkboxOpts;
5780
+ const props = $xeTable;
5781
+ const internalData = $xeTable;
5670
5782
  const { row } = params;
5783
+ const { afterFullData } = internalData;
5784
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
5785
+ const { checkMethod, trigger } = checkboxOpts;
5671
5786
  if (trigger === 'manual') {
5672
5787
  return;
5673
5788
  }
5674
5789
  evnt.stopPropagation();
5675
- if (checkboxOpts.isShiftKey && evnt.shiftKey && !this.treeConfig) {
5676
- const checkboxRecords = this.getCheckboxRecords();
5790
+ if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
5791
+ const checkboxRecords = $xeTable.getCheckboxRecords();
5677
5792
  if (checkboxRecords.length) {
5678
5793
  const firstRow = checkboxRecords[0];
5679
- const _rowIndex = this.getVTRowIndex(row);
5680
- const _firstRowIndex = this.getVTRowIndex(firstRow);
5794
+ const _rowIndex = $xeTable.getVTRowIndex(row);
5795
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
5681
5796
  if (_rowIndex !== _firstRowIndex) {
5682
- this.setAllCheckboxRow(false);
5797
+ $xeTable.setAllCheckboxRow(false);
5683
5798
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
5684
- handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
5685
- 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);
5686
5803
  return;
5687
5804
  }
5688
5805
  }
5689
5806
  }
5690
5807
  if (!checkMethod || checkMethod({ row })) {
5691
- this.handleSelectRow(params, checked);
5692
- this.checkSelectionStatus();
5693
- this.emitEvent('checkbox-change', Object.assign({
5694
- records: this.getCheckboxRecords(),
5695
- reserves: this.getCheckboxReserveRecords(),
5696
- 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(),
5697
5814
  checked
5698
5815
  }, params), evnt);
5699
5816
  }
@@ -5703,7 +5820,9 @@ const Methods = {
5703
5820
  */
5704
5821
  toggleCheckboxRow(row) {
5705
5822
  const $xeTable = this;
5706
- const { selectCheckboxMaps, checkboxOpts } = this;
5823
+ const internalData = $xeTable;
5824
+ const { selectCheckboxMaps } = internalData;
5825
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
5707
5826
  const { checkField } = checkboxOpts;
5708
5827
  const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
5709
5828
  $xeTable.handleBatchSelectRows([row], checked, true);
@@ -5724,9 +5843,7 @@ const Methods = {
5724
5843
  const reactData = $xeTable;
5725
5844
  const internalData = $xeTable;
5726
5845
  const { treeConfig } = props;
5727
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData;
5728
- const selectRowMaps = Object.assign({}, selectCheckboxMaps);
5729
- const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
5846
+ const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
5730
5847
  const treeOpts = $xeTable.computeTreeOpts;
5731
5848
  const { transform, mapChildrenField } = treeOpts;
5732
5849
  const childrenField = treeOpts.children || treeOpts.childrenField;
@@ -5738,10 +5855,11 @@ const Methods = {
5738
5855
  }
5739
5856
  // 树结构
5740
5857
  if (treeConfig) {
5858
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5741
5859
  const childRowMaps = {};
5742
5860
  const childRowList = [];
5743
5861
  XEUtils.eachTree(afterTreeFullData, (row) => {
5744
- const rowid = getRowid($xeTable, row);
5862
+ const rowid = handleGetRowId(row);
5745
5863
  const childList = row[transform ? mapChildrenField : childrenField];
5746
5864
  if (childList && childList.length && !childRowMaps[rowid]) {
5747
5865
  childRowMaps[rowid] = 1;
@@ -5757,13 +5875,13 @@ const Methods = {
5757
5875
  let vLen = 0; // 有效行
5758
5876
  childList.forEach(checkMethod
5759
5877
  ? (item) => {
5760
- const childRowid = getRowid($xeTable, item);
5761
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
5878
+ const childRowid = handleGetRowId(item);
5879
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
5762
5880
  if (checkMethod({ row: item })) {
5763
5881
  if (isSelect) {
5764
5882
  sLen++;
5765
5883
  }
5766
- else if (halfRowMaps[childRowid]) {
5884
+ else if (treeIndeterminateRowMaps[childRowid]) {
5767
5885
  hLen++;
5768
5886
  }
5769
5887
  vLen++;
@@ -5772,18 +5890,18 @@ const Methods = {
5772
5890
  if (isSelect) {
5773
5891
  sLen++;
5774
5892
  }
5775
- else if (halfRowMaps[childRowid]) {
5893
+ else if (treeIndeterminateRowMaps[childRowid]) {
5776
5894
  hLen++;
5777
5895
  }
5778
5896
  }
5779
5897
  }
5780
5898
  : item => {
5781
- const childRowid = getRowid($xeTable, item);
5782
- const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
5899
+ const childRowid = handleGetRowId(item);
5900
+ const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
5783
5901
  if (isSelect) {
5784
5902
  sLen++;
5785
5903
  }
5786
- else if (halfRowMaps[childRowid]) {
5904
+ else if (treeIndeterminateRowMaps[childRowid]) {
5787
5905
  hLen++;
5788
5906
  }
5789
5907
  vLen++;
@@ -5795,31 +5913,30 @@ const Methods = {
5795
5913
  }
5796
5914
  if (isSelected) {
5797
5915
  if (!checkField) {
5798
- selectRowMaps[rowid] = row;
5916
+ selectCheckboxMaps[rowid] = row;
5799
5917
  }
5800
- if (halfRowMaps[rowid]) {
5801
- delete halfRowMaps[rowid];
5918
+ if (treeIndeterminateRowMaps[rowid]) {
5919
+ delete treeIndeterminateRowMaps[rowid];
5802
5920
  }
5803
5921
  }
5804
5922
  else {
5805
5923
  if (!checkField) {
5806
- if (selectRowMaps[rowid]) {
5807
- delete selectRowMaps[rowid];
5924
+ if (selectCheckboxMaps[rowid]) {
5925
+ delete selectCheckboxMaps[rowid];
5808
5926
  }
5809
5927
  }
5810
5928
  if (halfSelect) {
5811
- halfRowMaps[rowid] = row;
5929
+ treeIndeterminateRowMaps[rowid] = row;
5812
5930
  }
5813
5931
  else {
5814
- if (halfRowMaps[rowid]) {
5815
- delete halfRowMaps[rowid];
5932
+ if (treeIndeterminateRowMaps[rowid]) {
5933
+ delete treeIndeterminateRowMaps[rowid];
5816
5934
  }
5817
5935
  }
5818
5936
  }
5819
5937
  });
5820
5938
  }
5821
- reactData.selectCheckboxMaps = selectRowMaps;
5822
- reactData.treeIndeterminateMaps = halfRowMaps;
5939
+ reactData.updateCheckboxFlag++;
5823
5940
  },
5824
5941
  updateAllCheckboxStatus() {
5825
5942
  const $xeTable = this;
@@ -5827,23 +5944,23 @@ const Methods = {
5827
5944
  const reactData = $xeTable;
5828
5945
  const internalData = $xeTable;
5829
5946
  const { treeConfig } = props;
5830
- const { selectCheckboxMaps, treeIndeterminateMaps } = reactData;
5947
+ const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
5831
5948
  const checkboxOpts = $xeTable.computeCheckboxOpts;
5832
5949
  const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
5833
- const { afterFullData, afterTreeFullData, checkboxReserveRowMap } = internalData;
5950
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5834
5951
  let sLen = 0; // 已选
5835
5952
  let hLen = 0; // 半选
5836
5953
  let vLen = 0; // 有效行
5837
5954
  const rootList = (treeConfig ? afterTreeFullData : afterFullData);
5838
5955
  rootList.forEach(checkMethod
5839
5956
  ? row => {
5840
- const childRowid = getRowid($xeTable, row);
5957
+ const childRowid = handleGetRowId(row);
5841
5958
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
5842
5959
  if (checkMethod({ row })) {
5843
5960
  if (selected) {
5844
5961
  sLen++;
5845
5962
  }
5846
- else if (treeIndeterminateMaps[childRowid]) {
5963
+ else if (treeIndeterminateRowMaps[childRowid]) {
5847
5964
  hLen++;
5848
5965
  }
5849
5966
  vLen++;
@@ -5852,18 +5969,18 @@ const Methods = {
5852
5969
  if (selected) {
5853
5970
  sLen++;
5854
5971
  }
5855
- else if (treeIndeterminateMaps[childRowid]) {
5972
+ else if (treeIndeterminateRowMaps[childRowid]) {
5856
5973
  hLen++;
5857
5974
  }
5858
5975
  }
5859
5976
  }
5860
5977
  : row => {
5861
- const childRowid = getRowid($xeTable, row);
5978
+ const childRowid = handleGetRowId(row);
5862
5979
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
5863
5980
  if (selected) {
5864
5981
  sLen++;
5865
5982
  }
5866
- else if (treeIndeterminateMaps[childRowid]) {
5983
+ else if (treeIndeterminateRowMaps[childRowid]) {
5867
5984
  hLen++;
5868
5985
  }
5869
5986
  vLen++;
@@ -5920,19 +6037,26 @@ const Methods = {
5920
6037
  * 获取复选框保留选中的行
5921
6038
  */
5922
6039
  getCheckboxReserveRecords(isFull) {
5923
- 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;
5924
6047
  const childrenField = treeOpts.children || treeOpts.childrenField;
5925
6048
  const reserveSelection = [];
5926
6049
  if (checkboxOpts.reserve) {
6050
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
5927
6051
  const afterFullIdMaps = {};
5928
6052
  if (treeConfig) {
5929
6053
  XEUtils.eachTree(afterFullData, row => {
5930
- afterFullIdMaps[getRowid(this, row)] = 1;
6054
+ afterFullIdMaps[handleGetRowId(row)] = 1;
5931
6055
  }, { children: childrenField });
5932
6056
  }
5933
6057
  else {
5934
6058
  afterFullData.forEach((row) => {
5935
- afterFullIdMaps[getRowid(this, row)] = 1;
6059
+ afterFullIdMaps[handleGetRowId(row)] = 1;
5936
6060
  });
5937
6061
  }
5938
6062
  XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
@@ -5973,9 +6097,9 @@ const Methods = {
5973
6097
  handleCheckedAllCheckboxRow($xeTable, value);
5974
6098
  if (evnt) {
5975
6099
  $xeTable.dispatchEvent('checkbox-all', {
5976
- records: $xeTable.getCheckboxRecords(),
5977
- reserves: $xeTable.getCheckboxReserveRecords(),
5978
- indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
6100
+ records: () => $xeTable.getCheckboxRecords(),
6101
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
6102
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
5979
6103
  checked: value
5980
6104
  }, evnt);
5981
6105
  }
@@ -6007,9 +6131,16 @@ const Methods = {
6007
6131
  * 清空行为不管是否被禁用还是保留记录,都将彻底清空选中状态
6008
6132
  */
6009
6133
  clearCheckboxRow() {
6010
- const { tableFullData, treeConfig, treeOpts, checkboxOpts } = this;
6011
- 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;
6012
6141
  const childrenField = treeOpts.children || treeOpts.childrenField;
6142
+ const checkboxOpts = $xeTable.computeCheckboxOpts;
6143
+ const { checkField, reserve } = checkboxOpts;
6013
6144
  // indeterminateField 仅支持读取
6014
6145
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
6015
6146
  if (checkField) {
@@ -6029,10 +6160,11 @@ const Methods = {
6029
6160
  if (reserve) {
6030
6161
  tableFullData.forEach((row) => this.handleCheckboxReserveRow(row, false));
6031
6162
  }
6032
- this.isAllSelected = false;
6033
- this.isIndeterminate = false;
6034
- this.selectCheckboxMaps = {};
6035
- this.treeIndeterminateMaps = {};
6163
+ reactData.isAllSelected = false;
6164
+ reactData.isIndeterminate = false;
6165
+ internalData.selectCheckboxMaps = {};
6166
+ internalData.treeIndeterminateRowMaps = {};
6167
+ reactData.updateCheckboxFlag++;
6036
6168
  return this.$nextTick();
6037
6169
  },
6038
6170
  /**
@@ -6229,10 +6361,12 @@ const Methods = {
6229
6361
  },
6230
6362
  triggerHeaderCellClickEvent(evnt, params) {
6231
6363
  const $xeTable = this;
6364
+ const props = $xeTable;
6232
6365
  const internalData = $xeTable;
6233
6366
  const { _lastResizeTime } = internalData;
6234
6367
  const sortOpts = $xeTable.computeSortOpts;
6235
6368
  const columnOpts = $xeTable.computeColumnOpts;
6369
+ const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
6236
6370
  const { column } = params;
6237
6371
  const cell = evnt.currentTarget;
6238
6372
  const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
@@ -6242,7 +6376,7 @@ const Methods = {
6242
6376
  $xeTable.triggerSortEvent(evnt, column, getNextSortOrder($xeTable, column));
6243
6377
  }
6244
6378
  $xeTable.dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
6245
- if (columnOpts.isCurrent || $xeTable.highlightCurrentColumn) {
6379
+ if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
6246
6380
  $xeTable.triggerCurrentColumnEvent(evnt, params);
6247
6381
  }
6248
6382
  return $xeTable.$nextTick();
@@ -6258,13 +6392,23 @@ const Methods = {
6258
6392
  * @param {ColumnInfo} fieldOrColumn 列配置
6259
6393
  */
6260
6394
  setCurrentColumn(fieldOrColumn) {
6261
- 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);
6262
6402
  if (column) {
6263
- // this.clearCurrentRow()
6264
- this.clearCurrentColumn();
6265
- this.currentColumn = column;
6403
+ $xeTable.clearCurrentColumn();
6404
+ reactData.currentColumn = column;
6266
6405
  }
6267
- return this.$nextTick();
6406
+ return $xeTable.$nextTick().then(() => {
6407
+ // 更新状选中态
6408
+ if (isMouseSelected) {
6409
+ $xeTable.addCellSelectedClass();
6410
+ }
6411
+ });
6268
6412
  },
6269
6413
  /**
6270
6414
  * 用于当前列,手动清空当前高亮的状态
@@ -6273,25 +6417,6 @@ const Methods = {
6273
6417
  this.currentColumn = null;
6274
6418
  return this.$nextTick();
6275
6419
  },
6276
- checkValidate(type) {
6277
- if (this.triggerValidate) {
6278
- return this.triggerValidate(type);
6279
- }
6280
- return this.$nextTick();
6281
- },
6282
- /**
6283
- * 当单元格发生改变时
6284
- * 如果存在规则,则校验
6285
- */
6286
- handleChangeCell(evnt, params) {
6287
- this.checkValidate('blur')
6288
- .catch((e) => e)
6289
- .then(() => {
6290
- this.handleEdit(params, evnt)
6291
- .then(() => this.checkValidate('change'))
6292
- .catch((e) => e);
6293
- });
6294
- },
6295
6420
  /**
6296
6421
  * 列点击事件
6297
6422
  * 如果是单击模式,则激活为编辑状态
@@ -6301,7 +6426,7 @@ const Methods = {
6301
6426
  const $xeTable = this;
6302
6427
  const props = $xeTable;
6303
6428
  const reactData = $xeTable;
6304
- const { highlightCurrentRow, editConfig } = props;
6429
+ const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props;
6305
6430
  const { editStore, isDragResize } = reactData;
6306
6431
  if (isDragResize) {
6307
6432
  return;
@@ -6313,6 +6438,8 @@ const Methods = {
6313
6438
  const checkboxOpts = $xeTable.computeCheckboxOpts;
6314
6439
  const keyboardOpts = $xeTable.computeKeyboardOpts;
6315
6440
  const rowOpts = $xeTable.computeRowOpts;
6441
+ const columnOpts = $xeTable.computeColumnOpts;
6442
+ const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
6316
6443
  const { actived, focused } = editStore;
6317
6444
  const { row, column } = params;
6318
6445
  const { type, treeNode } = column;
@@ -6328,11 +6455,11 @@ const Methods = {
6328
6455
  if (!triggerCheckbox && !triggerRadio) {
6329
6456
  // 如果是展开行
6330
6457
  if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
6331
- this.triggerRowExpandEvent(evnt, params);
6458
+ $xeTable.triggerRowExpandEvent(evnt, params);
6332
6459
  }
6333
6460
  // 如果是树形表格
6334
6461
  if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
6335
- this.triggerTreeExpandEvent(evnt, params);
6462
+ $xeTable.triggerTreeExpandEvent(evnt, params);
6336
6463
  }
6337
6464
  }
6338
6465
  // 如果点击了树节点
@@ -6341,16 +6468,22 @@ const Methods = {
6341
6468
  // 如果是高亮行
6342
6469
  if (rowOpts.isCurrent || highlightCurrentRow) {
6343
6470
  if (!triggerCheckbox && !triggerRadio) {
6344
- 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);
6345
6478
  }
6346
6479
  }
6347
6480
  // 如果是单选框
6348
6481
  if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
6349
- this.triggerRadioRowEvent(evnt, params);
6482
+ $xeTable.triggerRadioRowEvent(evnt, params);
6350
6483
  }
6351
6484
  // 如果是复选框
6352
6485
  if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
6353
- this.handleToggleCheckRowEvent(evnt, params);
6486
+ $xeTable.handleToggleCheckRowEvent(evnt, params);
6354
6487
  }
6355
6488
  }
6356
6489
  // 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
@@ -6362,16 +6495,16 @@ const Methods = {
6362
6495
  }
6363
6496
  if (editOpts.trigger === 'manual') {
6364
6497
  if (actived.args && actived.row === row && column !== actived.column) {
6365
- this.handleChangeCell(evnt, params);
6498
+ handleChangeCell($xeTable, evnt, params);
6366
6499
  }
6367
6500
  }
6368
6501
  else if (!actived.args || row !== actived.row || column !== actived.column) {
6369
6502
  if (editOpts.trigger === 'click') {
6370
- this.handleChangeCell(evnt, params);
6503
+ handleChangeCell($xeTable, evnt, params);
6371
6504
  }
6372
6505
  else if (editOpts.trigger === 'dblclick') {
6373
6506
  if (editOpts.mode === 'row' && actived.row === row) {
6374
- this.handleChangeCell(evnt, params);
6507
+ handleChangeCell($xeTable, evnt, params);
6375
6508
  }
6376
6509
  }
6377
6510
  }
@@ -6392,7 +6525,7 @@ const Methods = {
6392
6525
  }
6393
6526
  }
6394
6527
  }
6395
- this.emitEvent('cell-click', params, evnt);
6528
+ $xeTable.dispatchEvent('cell-click', params, evnt);
6396
6529
  },
6397
6530
  /**
6398
6531
  * 列双击点击事件
@@ -6414,17 +6547,17 @@ const Methods = {
6414
6547
  if (isEnableConf(editConfig) && editOpts.trigger === 'dblclick') {
6415
6548
  if (!actived.args || evnt.currentTarget !== actived.args.cell) {
6416
6549
  if (editOpts.mode === 'row') {
6417
- this.checkValidate('blur')
6550
+ checkValidate($xeTable, 'blur')
6418
6551
  .catch((e) => e)
6419
6552
  .then(() => {
6420
6553
  this.handleEdit(params, evnt)
6421
- .then(() => this.checkValidate('change'))
6554
+ .then(() => checkValidate($xeTable, 'change'))
6422
6555
  .catch((e) => e);
6423
6556
  });
6424
6557
  }
6425
6558
  else if (editOpts.mode === 'cell') {
6426
6559
  this.handleEdit(params, evnt)
6427
- .then(() => this.checkValidate('change'))
6560
+ .then(() => checkValidate($xeTable, 'change'))
6428
6561
  .catch((e) => e);
6429
6562
  }
6430
6563
  }
@@ -6610,12 +6743,11 @@ const Methods = {
6610
6743
  const internalData = $xeTable;
6611
6744
  const { treeConfig, dragConfig } = props;
6612
6745
  const rowDragOpts = $xeTable.computeRowDragOpts;
6613
- const { fullAllDataRowIdData } = internalData;
6746
+ const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData;
6614
6747
  const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
6615
6748
  const treeOpts = $xeTable.computeTreeOpts;
6616
6749
  const { transform, rowField, mapChildrenField, parentField } = treeOpts;
6617
6750
  const childrenField = treeOpts.children || treeOpts.childrenField;
6618
- const { afterFullData, tableFullData } = internalData;
6619
6751
  const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
6620
6752
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
6621
6753
  const errRest = {
@@ -7219,48 +7351,52 @@ const Methods = {
7219
7351
  setPendingRow(rows, status) {
7220
7352
  const $xeTable = this;
7221
7353
  const reactData = $xeTable;
7222
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps);
7354
+ const internalData = $xeTable;
7355
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7356
+ const { pendingRowMaps } = internalData;
7223
7357
  if (rows && !XEUtils.isArray(rows)) {
7224
7358
  rows = [rows];
7225
7359
  }
7226
7360
  if (status) {
7227
7361
  rows.forEach((row) => {
7228
- const rowid = getRowid($xeTable, row);
7229
- if (rowid && !pendingMaps[rowid]) {
7230
- pendingMaps[rowid] = row;
7362
+ const rowid = handleGetRowId(row);
7363
+ if (rowid && !pendingRowMaps[rowid]) {
7364
+ pendingRowMaps[rowid] = row;
7231
7365
  }
7232
7366
  });
7233
7367
  }
7234
7368
  else {
7235
7369
  rows.forEach((row) => {
7236
- const rowid = getRowid($xeTable, row);
7237
- if (rowid && pendingMaps[rowid]) {
7238
- delete pendingMaps[rowid];
7370
+ const rowid = handleGetRowId(row);
7371
+ if (rowid && pendingRowMaps[rowid]) {
7372
+ delete pendingRowMaps[rowid];
7239
7373
  }
7240
7374
  });
7241
7375
  }
7242
- reactData.pendingRowMaps = pendingMaps;
7376
+ reactData.pendingRowFlag++;
7243
7377
  return $xeTable.$nextTick();
7244
7378
  },
7245
7379
  togglePendingRow(rows) {
7246
7380
  const $xeTable = this;
7247
7381
  const reactData = $xeTable;
7248
- const pendingMaps = Object.assign({}, reactData.pendingRowMaps);
7382
+ const internalData = $xeTable;
7383
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7384
+ const { pendingRowMaps } = internalData;
7249
7385
  if (rows && !XEUtils.isArray(rows)) {
7250
7386
  rows = [rows];
7251
7387
  }
7252
7388
  rows.forEach((row) => {
7253
- const rowid = getRowid($xeTable, row);
7389
+ const rowid = handleGetRowId(row);
7254
7390
  if (rowid) {
7255
- if (pendingMaps[rowid]) {
7256
- delete pendingMaps[rowid];
7391
+ if (pendingRowMaps[rowid]) {
7392
+ delete pendingRowMaps[rowid];
7257
7393
  }
7258
7394
  else {
7259
- pendingMaps[rowid] = row;
7395
+ pendingRowMaps[rowid] = row;
7260
7396
  }
7261
7397
  }
7262
7398
  });
7263
- reactData.pendingRowMaps = pendingMaps;
7399
+ reactData.pendingRowFlag++;
7264
7400
  return $xeTable.$nextTick();
7265
7401
  },
7266
7402
  hasPendingByRow(row) {
@@ -7276,10 +7412,8 @@ const Methods = {
7276
7412
  },
7277
7413
  getPendingRecords() {
7278
7414
  const $xeTable = this;
7279
- const reactData = $xeTable;
7280
7415
  const internalData = $xeTable;
7281
- const { pendingRowMaps } = reactData;
7282
- const { fullAllDataRowIdData } = internalData;
7416
+ const { fullAllDataRowIdData, pendingRowMaps } = internalData;
7283
7417
  const insertRecords = [];
7284
7418
  XEUtils.each(pendingRowMaps, (row, rowid) => {
7285
7419
  if (fullAllDataRowIdData[rowid]) {
@@ -7289,8 +7423,12 @@ const Methods = {
7289
7423
  return insertRecords;
7290
7424
  },
7291
7425
  clearPendingRow() {
7292
- this.pendingRowMaps = {};
7293
- 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();
7294
7432
  },
7295
7433
  sort(sortConfs, sortOrder) {
7296
7434
  const $xeTable = this;
@@ -7441,7 +7579,9 @@ const Methods = {
7441
7579
  * @param {Event} evnt 事件
7442
7580
  */
7443
7581
  closeFilter() {
7444
- const { filterStore } = this;
7582
+ const $xeTable = this;
7583
+ const reactData = $xeTable;
7584
+ const { filterStore } = reactData;
7445
7585
  const { column, visible } = filterStore;
7446
7586
  Object.assign(filterStore, {
7447
7587
  isAllSelected: false,
@@ -7450,9 +7590,15 @@ const Methods = {
7450
7590
  visible: false
7451
7591
  });
7452
7592
  if (visible) {
7453
- 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);
7454
7600
  }
7455
- return this.$nextTick();
7601
+ return $xeTable.$nextTick();
7456
7602
  },
7457
7603
  /**
7458
7604
  * 判断指定列是否为筛选状态,如果为空则判断所有列
@@ -7483,17 +7629,16 @@ const Methods = {
7483
7629
  const $xeTable = this;
7484
7630
  const reactData = $xeTable;
7485
7631
  const internalData = $xeTable;
7486
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
7487
- const { fullAllDataRowIdData } = internalData;
7632
+ const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
7488
7633
  const expandOpts = $xeTable.computeExpandOpts;
7489
7634
  const { lazy } = expandOpts;
7490
7635
  const rowid = getRowid($xeTable, row);
7491
7636
  const rowRest = fullAllDataRowIdData[rowid];
7492
7637
  if (lazy && rowRest) {
7493
7638
  rowRest.expandLoaded = false;
7494
- delete rExpandLazyLoadedMaps[rowid];
7639
+ delete rowExpandLazyLoadedMaps[rowid];
7495
7640
  }
7496
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
7641
+ reactData.rowExpandedFlag++;
7497
7642
  return $xeTable.$nextTick();
7498
7643
  },
7499
7644
  /**
@@ -7501,14 +7646,17 @@ const Methods = {
7501
7646
  * @param {Row} row 行对象
7502
7647
  */
7503
7648
  reloadRowExpand(row) {
7504
- const { expandOpts, rowExpandLazyLoadedMaps } = this;
7649
+ const $xeTable = this;
7650
+ const internalData = $xeTable;
7651
+ const { rowExpandLazyLoadedMaps } = internalData;
7652
+ const expandOpts = $xeTable.computeExpandOpts;
7505
7653
  const { lazy } = expandOpts;
7506
7654
  const rowid = getRowid(this, row);
7507
7655
  if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
7508
- this.clearRowExpandLoaded(row)
7509
- .then(() => this.handleAsyncRowExpand(row));
7656
+ $xeTable.clearRowExpandLoaded(row)
7657
+ .then(() => handleAsyncRowExpand($xeTable, row));
7510
7658
  }
7511
- return this.$nextTick();
7659
+ return $xeTable.$nextTick();
7512
7660
  },
7513
7661
  reloadExpandContent(row) {
7514
7662
  if (process.env.NODE_ENV === 'development') {
@@ -7521,20 +7669,33 @@ const Methods = {
7521
7669
  * 展开行事件
7522
7670
  */
7523
7671
  triggerRowExpandEvent(evnt, params) {
7524
- 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;
7525
7678
  const { row } = params;
7526
7679
  const { lazy, trigger } = expandOpts;
7527
7680
  if (trigger === 'manual') {
7528
7681
  return;
7529
7682
  }
7530
7683
  evnt.stopPropagation();
7531
- const rowid = getRowid(this, row);
7684
+ const rowid = getRowid($xeTable, row);
7532
7685
  if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
7533
- const expanded = !this.isRowExpandByRow(row);
7534
- const columnIndex = this.getColumnIndex(column);
7535
- const $columnIndex = this.getVMColumnIndex(column);
7536
- this.setRowExpand(row, expanded);
7537
- 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);
7538
7699
  }
7539
7700
  },
7540
7701
  /**
@@ -7580,48 +7741,6 @@ const Methods = {
7580
7741
  }
7581
7742
  return this.setRowExpand(expandedRows, expanded);
7582
7743
  },
7583
- handleAsyncRowExpand(row) {
7584
- const $xeTable = this;
7585
- const reactData = $xeTable;
7586
- const internalData = $xeTable;
7587
- return new Promise(resolve => {
7588
- const { expandOpts } = this;
7589
- const { loadMethod } = expandOpts;
7590
- if (loadMethod) {
7591
- const { fullAllDataRowIdData } = internalData;
7592
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
7593
- const rowid = getRowid($xeTable, row);
7594
- const rowRest = fullAllDataRowIdData[rowid];
7595
- rExpandLazyLoadedMaps[rowid] = row;
7596
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
7597
- loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
7598
- const rExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
7599
- if (rowRest) {
7600
- rowRest.expandLoaded = true;
7601
- }
7602
- rExpandedMaps[rowid] = row;
7603
- reactData.rowExpandedMaps = rExpandedMaps;
7604
- }).catch(() => {
7605
- if (rowRest) {
7606
- rowRest.expandLoaded = false;
7607
- }
7608
- }).finally(() => {
7609
- const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
7610
- if (rExpandLazyLoadedMaps[rowid]) {
7611
- delete rExpandLazyLoadedMaps[rowid];
7612
- }
7613
- reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
7614
- $xeTable.$nextTick()
7615
- .then(() => $xeTable.recalculate())
7616
- .then(() => $xeTable.updateCellAreas())
7617
- .then(() => resolve());
7618
- });
7619
- }
7620
- else {
7621
- resolve();
7622
- }
7623
- });
7624
- },
7625
7744
  /**
7626
7745
  * 设置展开行,二个参数设置这一行展开与否
7627
7746
  * 支持单行
@@ -7631,8 +7750,12 @@ const Methods = {
7631
7750
  */
7632
7751
  setRowExpand(rows, expanded) {
7633
7752
  const $xeTable = this;
7634
- const { rowExpandedMaps, fullAllDataRowIdData, rowExpandLazyLoadedMaps, expandOpts, expandColumn } = this;
7635
- 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;
7636
7759
  const { reserve, lazy, accordion, toggleMethod } = expandOpts;
7637
7760
  const lazyRests = [];
7638
7761
  const columnIndex = $xeTable.getColumnIndex(expandColumn);
@@ -7643,30 +7766,31 @@ const Methods = {
7643
7766
  }
7644
7767
  if (accordion) {
7645
7768
  // 只能同时展开一个
7646
- rExpandedMaps = {};
7769
+ rowExpandedMaps = {};
7770
+ internalData.rowExpandedMaps = rowExpandedMaps;
7647
7771
  rows = rows.slice(rows.length - 1, rows.length);
7648
7772
  }
7649
- 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;
7650
7774
  if (expanded) {
7651
7775
  validRows.forEach((row) => {
7652
- const rowid = getRowid(this, row);
7653
- if (!rExpandedMaps[rowid]) {
7776
+ const rowid = handleGetRowId(row);
7777
+ if (!rowExpandedMaps[rowid]) {
7654
7778
  const rowRest = fullAllDataRowIdData[rowid];
7655
7779
  const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
7656
7780
  if (isLoad) {
7657
- lazyRests.push(this.handleAsyncRowExpand(row));
7781
+ lazyRests.push(handleAsyncRowExpand($xeTable, row));
7658
7782
  }
7659
7783
  else {
7660
- rExpandedMaps[rowid] = row;
7784
+ rowExpandedMaps[rowid] = row;
7661
7785
  }
7662
7786
  }
7663
7787
  });
7664
7788
  }
7665
7789
  else {
7666
7790
  validRows.forEach((item) => {
7667
- const rowid = getRowid(this, item);
7668
- if (rExpandedMaps[rowid]) {
7669
- delete rExpandedMaps[rowid];
7791
+ const rowid = handleGetRowId(item);
7792
+ if (rowExpandedMaps[rowid]) {
7793
+ delete rowExpandedMaps[rowid];
7670
7794
  }
7671
7795
  });
7672
7796
  }
@@ -7674,7 +7798,7 @@ const Methods = {
7674
7798
  validRows.forEach((row) => handleRowExpandReserve($xeTable, row, expanded));
7675
7799
  }
7676
7800
  }
7677
- this.rowExpandedMaps = rExpandedMaps;
7801
+ reactData.rowExpandedFlag++;
7678
7802
  return Promise.all(lazyRests)
7679
7803
  .then(() => $xeTable.$nextTick())
7680
7804
  .then(() => $xeTable.recalculate(true))
@@ -7690,9 +7814,13 @@ const Methods = {
7690
7814
  * @param {Row} row 行对象
7691
7815
  */
7692
7816
  isRowExpandByRow(row) {
7693
- const { rowExpandedMaps } = this;
7817
+ const $xeTable = this;
7818
+ const reactData = $xeTable;
7819
+ const internalData = $xeTable;
7820
+ const { rowExpandedFlag } = reactData;
7821
+ const { rowExpandedMaps } = internalData;
7694
7822
  const rowid = getRowid(this, row);
7695
- return !!rowExpandedMaps[rowid];
7823
+ return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
7696
7824
  },
7697
7825
  isExpandByRow(row) {
7698
7826
  if (process.env.NODE_ENV === 'development') {
@@ -7712,7 +7840,8 @@ const Methods = {
7712
7840
  const expandOpts = $xeTable.computeExpandOpts;
7713
7841
  const { reserve } = expandOpts;
7714
7842
  const expList = $xeTable.getRowExpandRecords();
7715
- reactData.rowExpandedMaps = {};
7843
+ internalData.rowExpandedMaps = {};
7844
+ reactData.rowExpandedFlag++;
7716
7845
  if (reserve) {
7717
7846
  tableFullData.forEach((row) => handleRowExpandReserve($xeTable, row, false));
7718
7847
  }
@@ -7732,8 +7861,10 @@ const Methods = {
7732
7861
  return this.$nextTick();
7733
7862
  },
7734
7863
  getRowExpandRecords() {
7864
+ const $xeTable = this;
7865
+ const internalData = $xeTable;
7735
7866
  const rest = [];
7736
- XEUtils.each(this.rowExpandedMaps, item => {
7867
+ XEUtils.each(internalData.rowExpandedMaps, item => {
7737
7868
  if (item) {
7738
7869
  rest.push(item);
7739
7870
  }
@@ -7741,8 +7872,10 @@ const Methods = {
7741
7872
  return rest;
7742
7873
  },
7743
7874
  getTreeExpandRecords() {
7875
+ const $xeTable = this;
7876
+ const internalData = $xeTable;
7744
7877
  const rest = [];
7745
- XEUtils.each(this.treeExpandedMaps, item => {
7878
+ XEUtils.each(internalData.treeExpandedMaps, item => {
7746
7879
  if (item) {
7747
7880
  rest.push(item);
7748
7881
  }
@@ -7775,12 +7908,10 @@ const Methods = {
7775
7908
  const $xeTable = this;
7776
7909
  const reactData = $xeTable;
7777
7910
  const internalData = $xeTable;
7778
- const { fullAllDataRowIdData } = internalData;
7911
+ const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
7779
7912
  const treeOpts = $xeTable.computeTreeOpts;
7780
7913
  const { transform } = treeOpts;
7781
- let tExpandedMaps = {};
7782
7914
  if (rows) {
7783
- tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
7784
7915
  if (!XEUtils.isArray(rows)) {
7785
7916
  rows = [rows];
7786
7917
  }
@@ -7789,8 +7920,8 @@ const Methods = {
7789
7920
  const rowRest = fullAllDataRowIdData[rowid];
7790
7921
  if (rowRest) {
7791
7922
  rowRest.treeLoaded = false;
7792
- if (tExpandedMaps[rowid]) {
7793
- delete tExpandedMaps[rowid];
7923
+ if (treeExpandedMaps[rowid]) {
7924
+ delete treeExpandedMaps[rowid];
7794
7925
  }
7795
7926
  }
7796
7927
  });
@@ -7800,7 +7931,8 @@ const Methods = {
7800
7931
  rowRest.treeLoaded = false;
7801
7932
  });
7802
7933
  }
7803
- reactData.treeExpandedMaps = {};
7934
+ internalData.treeExpandedMaps = {};
7935
+ reactData.treeExpandedFlag++;
7804
7936
  if (transform) {
7805
7937
  handleVirtualTreeToList($xeTable);
7806
7938
  return $xeTable.handleTableData();
@@ -7813,36 +7945,42 @@ const Methods = {
7813
7945
  */
7814
7946
  reloadTreeExpand(row) {
7815
7947
  const $xeTable = this;
7816
- const { treeOpts, treeExpandLazyLoadedMaps } = this;
7948
+ const internalData = $xeTable;
7949
+ const { treeExpandLazyLoadedMaps } = internalData;
7950
+ const treeOpts = $xeTable.computeTreeOpts;
7817
7951
  const { transform, lazy } = treeOpts;
7818
7952
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
7819
- const rowid = getRowid(this, row);
7953
+ const rowid = getRowid($xeTable, row);
7820
7954
  if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
7821
- return this.clearTreeExpandLoaded(row).then(() => {
7822
- return this.handleAsyncTreeExpandChilds(row);
7955
+ return $xeTable.clearTreeExpandLoaded(row).then(() => {
7956
+ return handleAsyncTreeExpandChilds($xeTable, row);
7823
7957
  }).then(() => {
7824
7958
  if (transform) {
7825
7959
  handleVirtualTreeToList($xeTable);
7826
- return this.handleTableData();
7960
+ return $xeTable.handleTableData();
7827
7961
  }
7828
7962
  }).then(() => {
7829
- return this.recalculate();
7963
+ return $xeTable.recalculate();
7830
7964
  });
7831
7965
  }
7832
- return this.$nextTick();
7966
+ return $xeTable.$nextTick();
7833
7967
  },
7834
7968
  reloadTreeChilds(row) {
7969
+ const $xeTable = this;
7835
7970
  if (process.env.NODE_ENV === 'development') {
7836
7971
  warnLog('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand']);
7837
7972
  }
7838
7973
  // 即将废弃
7839
- return this.reloadTreeExpand(row);
7974
+ return $xeTable.reloadTreeExpand(row);
7840
7975
  },
7841
7976
  /**
7842
7977
  * 展开树节点事件
7843
7978
  */
7844
7979
  triggerTreeExpandEvent(evnt, params) {
7845
- const { treeOpts, treeExpandLazyLoadedMaps } = this;
7980
+ const $xeTable = this;
7981
+ const internalData = $xeTable;
7982
+ const { treeExpandLazyLoadedMaps } = internalData;
7983
+ const treeOpts = $xeTable.computeTreeOpts;
7846
7984
  const { row, column } = params;
7847
7985
  const { lazy, trigger } = treeOpts;
7848
7986
  if (trigger === 'manual') {
@@ -7851,11 +7989,11 @@ const Methods = {
7851
7989
  evnt.stopPropagation();
7852
7990
  const rowid = getRowid(this, row);
7853
7991
  if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
7854
- const expanded = !this.isTreeExpandByRow(row);
7855
- const columnIndex = this.getColumnIndex(column);
7856
- const $columnIndex = this.getVMColumnIndex(column);
7857
- this.setTreeExpand(row, expanded);
7858
- 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);
7859
7997
  }
7860
7998
  },
7861
7999
  /**
@@ -7864,87 +8002,6 @@ const Methods = {
7864
8002
  toggleTreeExpand(row) {
7865
8003
  return this.setTreeExpand(row, !this.isTreeExpandByRow(row));
7866
8004
  },
7867
- /**
7868
- * 处理默认展开树节点
7869
- */
7870
- handleDefaultTreeExpand() {
7871
- const { treeConfig, treeOpts, tableFullData } = this;
7872
- if (treeConfig) {
7873
- const { expandAll, expandRowKeys } = treeOpts;
7874
- const childrenField = treeOpts.children || treeOpts.childrenField;
7875
- if (expandAll) {
7876
- this.setAllTreeExpand(true);
7877
- }
7878
- else if (expandRowKeys) {
7879
- const defExpandeds = [];
7880
- const rowkey = getRowkey(this);
7881
- expandRowKeys.forEach((rowid) => {
7882
- const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
7883
- if (matchObj) {
7884
- defExpandeds.push(matchObj.item);
7885
- }
7886
- });
7887
- this.setTreeExpand(defExpandeds, true);
7888
- }
7889
- }
7890
- },
7891
- handleAsyncTreeExpandChilds(row) {
7892
- const $xeTable = this;
7893
- const { treeOpts, checkboxOpts } = this;
7894
- const { transform, loadMethod } = treeOpts;
7895
- const { checkStrictly } = checkboxOpts;
7896
- return new Promise(resolve => {
7897
- if (loadMethod) {
7898
- const { treeExpandLazyLoadedMaps, fullAllDataRowIdData } = this;
7899
- const rowid = getRowid($xeTable, row);
7900
- const rowRest = fullAllDataRowIdData[rowid];
7901
- treeExpandLazyLoadedMaps[rowid] = row;
7902
- Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
7903
- if (rowRest) {
7904
- rowRest.treeLoaded = true;
7905
- }
7906
- if (treeExpandLazyLoadedMaps[rowid]) {
7907
- delete treeExpandLazyLoadedMaps[rowid];
7908
- }
7909
- if (!XEUtils.isArray(childRecords)) {
7910
- childRecords = [];
7911
- }
7912
- if (childRecords) {
7913
- return this.loadTreeChildren(row, childRecords).then((childRows) => {
7914
- const { treeExpandedMaps } = this;
7915
- if (childRows.length && !treeExpandedMaps[rowid]) {
7916
- treeExpandedMaps[rowid] = row;
7917
- }
7918
- // 如果当前节点已选中,则展开后子节点也被选中
7919
- if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
7920
- handleCheckedCheckboxRow($xeTable, childRows, true);
7921
- }
7922
- return this.$nextTick().then(() => {
7923
- if (transform) {
7924
- this.handleTableData();
7925
- updateAfterDataIndex($xeTable);
7926
- return this.$nextTick();
7927
- }
7928
- });
7929
- });
7930
- }
7931
- }).catch(() => {
7932
- const { treeExpandLazyLoadedMaps } = this;
7933
- if (rowRest) {
7934
- rowRest.treeLoaded = false;
7935
- }
7936
- if (treeExpandLazyLoadedMaps[rowid]) {
7937
- delete treeExpandLazyLoadedMaps[rowid];
7938
- }
7939
- }).finally(() => {
7940
- this.$nextTick().then(() => this.recalculate()).then(() => resolve());
7941
- });
7942
- }
7943
- else {
7944
- resolve();
7945
- }
7946
- });
7947
- },
7948
8005
  /**
7949
8006
  * 设置所有树节点的展开与否
7950
8007
  * @param {Boolean} expanded 是否展开
@@ -7969,42 +8026,47 @@ const Methods = {
7969
8026
  * @returns
7970
8027
  */
7971
8028
  handleBaseTreeExpand(rows, expanded) {
7972
- 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;
7973
8035
  const { reserve, lazy, accordion, toggleMethod } = treeOpts;
7974
- const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
7975
8036
  const childrenField = treeOpts.children || treeOpts.childrenField;
7976
8037
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
7977
8038
  const result = [];
7978
- const columnIndex = this.getColumnIndex(treeNodeColumn);
7979
- const $columnIndex = this.getVMColumnIndex(treeNodeColumn);
7980
- 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;
7981
8043
  if (accordion) {
7982
8044
  validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
7983
8045
  // 同一级只能展开一个
7984
8046
  const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField });
7985
8047
  if (matchObj) {
7986
8048
  matchObj.items.forEach(item => {
7987
- const rowid = getRowid(this, item);
7988
- if (treeTempExpandedMaps[rowid]) {
7989
- delete treeTempExpandedMaps[rowid];
8049
+ const rowid = handleGetRowId(item);
8050
+ if (treeExpandedMaps[rowid]) {
8051
+ delete treeExpandedMaps[rowid];
7990
8052
  }
7991
8053
  });
7992
8054
  }
7993
8055
  }
7994
8056
  if (expanded) {
7995
8057
  validRows.forEach((row) => {
7996
- const rowid = getRowid(this, row);
7997
- if (!treeTempExpandedMaps[rowid]) {
8058
+ const rowid = handleGetRowId(row);
8059
+ if (!treeExpandedMaps[rowid]) {
7998
8060
  const rowRest = fullAllDataRowIdData[rowid];
7999
8061
  if (rowRest) {
8000
8062
  const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
8001
8063
  // 是否使用懒加载
8002
8064
  if (isLoad) {
8003
- result.push(this.handleAsyncTreeExpandChilds(row));
8065
+ result.push(handleAsyncTreeExpandChilds($xeTable, row));
8004
8066
  }
8005
8067
  else {
8006
8068
  if (row[childrenField] && row[childrenField].length) {
8007
- treeTempExpandedMaps[rowid] = row;
8069
+ treeExpandedMaps[rowid] = row;
8008
8070
  }
8009
8071
  }
8010
8072
  }
@@ -8013,18 +8075,18 @@ const Methods = {
8013
8075
  }
8014
8076
  else {
8015
8077
  validRows.forEach((item) => {
8016
- const rowid = getRowid(this, item);
8017
- if (treeTempExpandedMaps[rowid]) {
8018
- delete treeTempExpandedMaps[rowid];
8078
+ const rowid = handleGetRowId(item);
8079
+ if (treeExpandedMaps[rowid]) {
8080
+ delete treeExpandedMaps[rowid];
8019
8081
  }
8020
8082
  });
8021
8083
  }
8022
8084
  if (reserve) {
8023
- validRows.forEach((row) => this.handleTreeExpandReserve(row, expanded));
8085
+ validRows.forEach((row) => handleTreeExpandReserve($xeTable, row, expanded));
8024
8086
  }
8025
- this.treeExpandedMaps = treeTempExpandedMaps;
8087
+ reactData.treeExpandedFlag++;
8026
8088
  return Promise.all(result).then(() => {
8027
- return this.recalculate();
8089
+ return $xeTable.recalculate();
8028
8090
  });
8029
8091
  },
8030
8092
  /**
@@ -8078,30 +8140,38 @@ const Methods = {
8078
8140
  * @param {Row} row 行对象
8079
8141
  */
8080
8142
  isTreeExpandByRow(row) {
8081
- const { treeExpandedMaps } = this;
8082
- 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)];
8083
8149
  },
8084
8150
  /**
8085
8151
  * 手动清空树形节点的展开状态,数据会恢复成未展开的状态
8086
8152
  */
8087
8153
  clearTreeExpand() {
8088
8154
  const $xeTable = this;
8089
- const { treeOpts, tableFullData } = this;
8090
- const { transform, reserve } = treeOpts;
8155
+ const reactData = $xeTable;
8156
+ const internalData = $xeTable;
8157
+ const { tableFullTreeData } = internalData;
8158
+ const treeOpts = $xeTable.computeTreeOpts;
8091
8159
  const childrenField = treeOpts.children || treeOpts.childrenField;
8092
- const expList = this.getTreeExpandRecords();
8093
- this.treeExpandedMaps = {};
8160
+ const { transform, reserve } = treeOpts;
8161
+ const expList = $xeTable.getTreeExpandRecords();
8162
+ internalData.treeExpandedMaps = {};
8163
+ reactData.treeExpandedFlag++;
8094
8164
  if (reserve) {
8095
- XEUtils.eachTree(tableFullData, row => this.handleTreeExpandReserve(row, false), { children: childrenField });
8165
+ XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), { children: childrenField });
8096
8166
  }
8097
- return this.handleTableData().then(() => {
8167
+ return $xeTable.handleTableData().then(() => {
8098
8168
  if (transform) {
8099
8169
  handleVirtualTreeToList($xeTable);
8100
- return this.handleTableData();
8170
+ return $xeTable.handleTableData();
8101
8171
  }
8102
8172
  }).then(() => {
8103
8173
  if (expList.length) {
8104
- this.recalculate();
8174
+ $xeTable.recalculate();
8105
8175
  }
8106
8176
  });
8107
8177
  },
@@ -8109,18 +8179,6 @@ const Methods = {
8109
8179
  this.treeExpandedReserveRowMap = {};
8110
8180
  return this.$nextTick();
8111
8181
  },
8112
- handleTreeExpandReserve(row, expanded) {
8113
- const { treeExpandedReserveRowMap, treeOpts } = this;
8114
- if (treeOpts.reserve) {
8115
- const rowid = getRowid(this, row);
8116
- if (expanded) {
8117
- treeExpandedReserveRowMap[rowid] = row;
8118
- }
8119
- else if (treeExpandedReserveRowMap[rowid]) {
8120
- delete treeExpandedReserveRowMap[rowid];
8121
- }
8122
- }
8123
- },
8124
8182
  /**
8125
8183
  * 获取表格的滚动状态
8126
8184
  */
@@ -8438,10 +8496,10 @@ const Methods = {
8438
8496
  return;
8439
8497
  }
8440
8498
  const { highlightHoverRow } = tableProps;
8441
- const { scrollXLoad, scrollYLoad } = reactData;
8499
+ const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
8442
8500
  const leftFixedWidth = $xeTable.computeLeftFixedWidth;
8443
8501
  const rightFixedWidth = $xeTable.computeRightFixedWidth;
8444
- if (!(scrollYLoad || leftFixedWidth || rightFixedWidth)) {
8502
+ if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
8445
8503
  return;
8446
8504
  }
8447
8505
  const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
@@ -8693,8 +8751,8 @@ const Methods = {
8693
8751
  const $xeTable = this;
8694
8752
  const reactData = $xeTable;
8695
8753
  const internalData = $xeTable;
8696
- const { isAllOverflow, scrollYLoad, expandColumn, rowExpandedMaps } = reactData;
8697
- const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData;
8754
+ const { isAllOverflow, scrollYLoad, expandColumn } = reactData;
8755
+ const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
8698
8756
  const { startIndex } = scrollYStore;
8699
8757
  const expandOpts = $xeTable.computeExpandOpts;
8700
8758
  const rowOpts = $xeTable.computeRowOpts;
@@ -8937,13 +8995,15 @@ const Methods = {
8937
8995
  * 更新表尾合计
8938
8996
  */
8939
8997
  updateFooter() {
8998
+ const $xeTable = this;
8999
+ const $xeGrid = $xeTable.$xeGrid;
8940
9000
  const { showFooter, visibleColumn, footerData, footerMethod } = this;
8941
9001
  let footData = [];
8942
9002
  if (showFooter && footerData && footerData.length) {
8943
9003
  footData = footerData.slice(0);
8944
9004
  }
8945
9005
  else if (showFooter && footerMethod) {
8946
- 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 }) : [];
8947
9007
  }
8948
9008
  this.footerTableData = footData;
8949
9009
  return this.$nextTick();
@@ -9021,7 +9081,7 @@ const Methods = {
9021
9081
  if (this.footerSpanMethod) {
9022
9082
  errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
9023
9083
  }
9024
- setMerges(this, merges, this.mergeFooterList, null);
9084
+ setMerges(this, merges, this.mergeFooterList);
9025
9085
  return this.$nextTick().then(() => {
9026
9086
  this.updateCellAreas();
9027
9087
  return updateStyle($xeTable);
@@ -9075,11 +9135,14 @@ const Methods = {
9075
9135
  },
9076
9136
  dispatchEvent(type, params, evnt) {
9077
9137
  const $xeTable = this;
9078
- $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));
9079
9140
  },
9080
9141
  // 已废弃,使用 dispatchEvent
9081
9142
  emitEvent(type, params, evnt) {
9082
- 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));
9083
9146
  },
9084
9147
  focus() {
9085
9148
  this.isActivated = true;