vxe-table 4.12.0-beta.2 → 4.12.0-beta.20

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 (152) hide show
  1. package/es/grid/src/grid.js +61 -44
  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/filter/panel.js +12 -2
  24. package/es/table/module/keyboard/hook.js +47 -4
  25. package/es/table/render/index.js +91 -60
  26. package/es/table/src/body.js +12 -7
  27. package/es/table/src/cell.js +10 -9
  28. package/es/table/src/footer.js +9 -4
  29. package/es/table/src/header.js +2 -2
  30. package/es/table/src/props.js +4 -0
  31. package/es/table/src/table.js +366 -182
  32. package/es/table/src/util.js +58 -3
  33. package/es/ui/index.js +1 -1
  34. package/es/ui/src/log.js +1 -1
  35. package/helper/vetur/attributes.json +1 -1
  36. package/helper/vetur/tags.json +1 -1
  37. package/lib/grid/src/grid.js +58 -48
  38. package/lib/grid/src/grid.min.js +1 -1
  39. package/lib/index.umd.js +1245 -12123
  40. package/lib/index.umd.min.js +1 -1
  41. package/lib/locale/lang/ar-EG.js +7 -1
  42. package/lib/locale/lang/ar-EG.min.js +1 -1
  43. package/lib/locale/lang/de-DE.js +7 -1
  44. package/lib/locale/lang/de-DE.min.js +1 -1
  45. package/lib/locale/lang/en-US.js +7 -1
  46. package/lib/locale/lang/en-US.min.js +1 -1
  47. package/lib/locale/lang/en-US.umd.js +7 -1
  48. package/lib/locale/lang/es-ES.js +7 -1
  49. package/lib/locale/lang/es-ES.min.js +1 -1
  50. package/lib/locale/lang/es-ES.umd.js +7 -1
  51. package/lib/locale/lang/fr-FR.js +7 -1
  52. package/lib/locale/lang/fr-FR.min.js +1 -1
  53. package/lib/locale/lang/hu-HU.js +7 -1
  54. package/lib/locale/lang/hu-HU.min.js +1 -1
  55. package/lib/locale/lang/hu-HU.umd.js +7 -1
  56. package/lib/locale/lang/hy-AM.js +7 -1
  57. package/lib/locale/lang/hy-AM.min.js +1 -1
  58. package/lib/locale/lang/id-ID.js +7 -1
  59. package/lib/locale/lang/id-ID.min.js +1 -1
  60. package/lib/locale/lang/it-IT.js +7 -1
  61. package/lib/locale/lang/it-IT.min.js +1 -1
  62. package/lib/locale/lang/ja-JP.js +7 -1
  63. package/lib/locale/lang/ja-JP.min.js +1 -1
  64. package/lib/locale/lang/ja-JP.umd.js +7 -1
  65. package/lib/locale/lang/ko-KR.js +7 -1
  66. package/lib/locale/lang/ko-KR.min.js +1 -1
  67. package/lib/locale/lang/ko-KR.umd.js +7 -1
  68. package/lib/locale/lang/nb-NO.js +7 -1
  69. package/lib/locale/lang/nb-NO.min.js +1 -1
  70. package/lib/locale/lang/pt-BR.js +7 -1
  71. package/lib/locale/lang/pt-BR.min.js +1 -1
  72. package/lib/locale/lang/pt-BR.umd.js +7 -1
  73. package/lib/locale/lang/ru-RU.js +7 -1
  74. package/lib/locale/lang/ru-RU.min.js +1 -1
  75. package/lib/locale/lang/ru-RU.umd.js +7 -1
  76. package/lib/locale/lang/th-TH.js +7 -1
  77. package/lib/locale/lang/th-TH.min.js +1 -1
  78. package/lib/locale/lang/ug-CN.js +7 -1
  79. package/lib/locale/lang/ug-CN.min.js +1 -1
  80. package/lib/locale/lang/uk-UA.js +7 -1
  81. package/lib/locale/lang/uk-UA.min.js +1 -1
  82. package/lib/locale/lang/uk-UA.umd.js +7 -1
  83. package/lib/locale/lang/vi-VN.js +7 -1
  84. package/lib/locale/lang/vi-VN.min.js +1 -1
  85. package/lib/locale/lang/zh-CHT.js +7 -1
  86. package/lib/locale/lang/zh-CHT.min.js +1 -1
  87. package/lib/locale/lang/zh-CN.js +7 -1
  88. package/lib/locale/lang/zh-CN.min.js +1 -1
  89. package/lib/locale/lang/zh-CN.umd.js +7 -1
  90. package/lib/style.css +1 -1
  91. package/lib/table/module/filter/panel.js +8 -2
  92. package/lib/table/module/filter/panel.min.js +1 -1
  93. package/lib/table/module/keyboard/hook.js +51 -4
  94. package/lib/table/module/keyboard/hook.min.js +1 -1
  95. package/lib/table/render/index.js +100 -65
  96. package/lib/table/render/index.min.js +1 -1
  97. package/lib/table/src/body.js +11 -6
  98. package/lib/table/src/body.min.js +1 -1
  99. package/lib/table/src/cell.js +15 -8
  100. package/lib/table/src/cell.min.js +1 -1
  101. package/lib/table/src/footer.js +9 -3
  102. package/lib/table/src/footer.min.js +1 -1
  103. package/lib/table/src/header.js +2 -1
  104. package/lib/table/src/header.min.js +1 -1
  105. package/lib/table/src/props.js +4 -0
  106. package/lib/table/src/props.min.js +1 -1
  107. package/lib/table/src/table.js +402 -188
  108. package/lib/table/src/table.min.js +1 -1
  109. package/lib/table/src/util.js +65 -6
  110. package/lib/table/src/util.min.js +1 -1
  111. package/lib/ui/index.js +1 -1
  112. package/lib/ui/index.min.js +1 -1
  113. package/lib/ui/src/log.js +1 -1
  114. package/lib/ui/src/log.min.js +1 -1
  115. package/package.json +2 -2
  116. package/packages/grid/src/grid.ts +65 -50
  117. package/packages/locale/lang/ar-EG.ts +7 -1
  118. package/packages/locale/lang/de-DE.ts +7 -1
  119. package/packages/locale/lang/en-US.ts +7 -1
  120. package/packages/locale/lang/es-ES.ts +7 -1
  121. package/packages/locale/lang/fr-FR.ts +7 -1
  122. package/packages/locale/lang/hu-HU.ts +7 -1
  123. package/packages/locale/lang/hy-AM.ts +7 -1
  124. package/packages/locale/lang/id-ID.ts +7 -1
  125. package/packages/locale/lang/it-IT.ts +7 -1
  126. package/packages/locale/lang/ja-JP.ts +7 -1
  127. package/packages/locale/lang/ko-KR.ts +7 -1
  128. package/packages/locale/lang/nb-NO.ts +7 -1
  129. package/packages/locale/lang/pt-BR.ts +7 -1
  130. package/packages/locale/lang/ru-RU.ts +7 -1
  131. package/packages/locale/lang/th-TH.ts +7 -1
  132. package/packages/locale/lang/ug-CN.ts +7 -1
  133. package/packages/locale/lang/uk-UA.ts +7 -1
  134. package/packages/locale/lang/vi-VN.ts +7 -1
  135. package/packages/locale/lang/zh-CHT.ts +7 -1
  136. package/packages/locale/lang/zh-CN.ts +7 -1
  137. package/packages/table/module/filter/panel.ts +12 -2
  138. package/packages/table/module/keyboard/hook.ts +47 -6
  139. package/packages/table/render/index.ts +90 -59
  140. package/packages/table/src/body.ts +11 -6
  141. package/packages/table/src/cell.ts +10 -9
  142. package/packages/table/src/footer.ts +9 -4
  143. package/packages/table/src/header.ts +2 -2
  144. package/packages/table/src/props.ts +4 -0
  145. package/packages/table/src/table.ts +373 -183
  146. package/packages/table/src/util.ts +66 -3
  147. /package/es/{iconfont.1741080000843.ttf → iconfont.1742353689933.ttf} +0 -0
  148. /package/es/{iconfont.1741080000843.woff → iconfont.1742353689933.woff} +0 -0
  149. /package/es/{iconfont.1741080000843.woff2 → iconfont.1742353689933.woff2} +0 -0
  150. /package/lib/{iconfont.1741080000843.ttf → iconfont.1742353689933.ttf} +0 -0
  151. /package/lib/{iconfont.1741080000843.woff → iconfont.1742353689933.woff} +0 -0
  152. /package/lib/{iconfont.1741080000843.woff2 → iconfont.1742353689933.woff2} +0 -0
@@ -9,7 +9,7 @@ import TableHeaderComponent from './header';
9
9
  import TableFooterComponent from './footer';
10
10
  import tableProps from './props';
11
11
  import tableEmits from './emits';
12
- import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth } from './util';
12
+ import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId } from './util';
13
13
  import { getSlotVNs } from '../../ui/src/vn';
14
14
  import { warnLog, errLog } from '../../ui/src/log';
15
15
  import TableCustomPanelComponent from '../module/custom/panel';
@@ -18,6 +18,7 @@ import TableImportPanelComponent from '../module/export/import-panel';
18
18
  import TableExportPanelComponent from '../module/export/export-panel';
19
19
  import TableMenuPanelComponent from '../module/menu/panel';
20
20
  const { getConfig, getIcon, getI18n, renderer, formats, createEvent, globalResize, interceptor, hooks, globalEvents, GLOBAL_EVENT_KEYS, useFns, renderEmptyElement } = VxeUI;
21
+ const supportMaxRow = 5e6;
21
22
  const customStorageKey = 'VXE_CUSTOM_STORE';
22
23
  const maxYHeight = 5e6;
23
24
  const maxXWidth = 5e6;
@@ -464,6 +465,9 @@ export default defineComponent({
464
465
  const computeColumnOpts = computed(() => {
465
466
  return Object.assign({}, getConfig().table.columnConfig, props.columnConfig);
466
467
  });
468
+ const computeCurrentColumnOpts = computed(() => {
469
+ return Object.assign({}, getConfig().table.currentColumnConfig, props.currentColumnConfig);
470
+ });
467
471
  const computeCellOpts = computed(() => {
468
472
  return Object.assign({}, getConfig().table.cellConfig, props.cellConfig);
469
473
  });
@@ -476,6 +480,9 @@ export default defineComponent({
476
480
  const computeRowOpts = computed(() => {
477
481
  return Object.assign({}, getConfig().table.rowConfig, props.rowConfig);
478
482
  });
483
+ const computeCurrentRowOpts = computed(() => {
484
+ return Object.assign({}, getConfig().table.currentRowConfig, props.currentRowConfig);
485
+ });
479
486
  const computeRowDragOpts = computed(() => {
480
487
  return Object.assign({}, getConfig().table.rowDragConfig, props.rowDragConfig);
481
488
  });
@@ -734,6 +741,7 @@ export default defineComponent({
734
741
  computeScrollbarXToTop,
735
742
  computeScrollbarYToLeft,
736
743
  computeColumnOpts,
744
+ computeCurrentColumnOpts,
737
745
  computeScrollXThreshold,
738
746
  computeScrollYThreshold,
739
747
  computeDefaultRowHeight,
@@ -741,6 +749,7 @@ export default defineComponent({
741
749
  computeHeaderCellOpts,
742
750
  computeFooterCellOpts,
743
751
  computeRowOpts,
752
+ computeCurrentRowOpts,
744
753
  computeRowDragOpts,
745
754
  computeColumnDragOpts,
746
755
  computeResizeOpts,
@@ -1198,7 +1207,7 @@ export default defineComponent({
1198
1207
  }
1199
1208
  else {
1200
1209
  if ((storage && !type) || (columnOpts.drag && (isCrossDrag || isSelfToChildDrag))) {
1201
- errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field`]);
1210
+ errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field=?`]);
1202
1211
  }
1203
1212
  }
1204
1213
  if (!hasFixed && fixed) {
@@ -2238,6 +2247,8 @@ export default defineComponent({
2238
2247
  const childrenField = treeOpts.children || treeOpts.childrenField;
2239
2248
  const checkboxOpts = computeCheckboxOpts.value;
2240
2249
  const { checkField, reserve, checkMethod } = checkboxOpts;
2250
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
2251
+ // indeterminateField 仅支持读取
2241
2252
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
2242
2253
  const selectRowMaps = {};
2243
2254
  /**
@@ -2278,7 +2289,8 @@ export default defineComponent({
2278
2289
  */
2279
2290
  XEUtils.eachTree(afterFullData, (row) => {
2280
2291
  if (isForce || (!checkMethod || checkMethod({ row }))) {
2281
- selectRowMaps[getRowid($xeTable, row)] = row;
2292
+ const rowid = handleGetRowId(row);
2293
+ selectRowMaps[rowid] = row;
2282
2294
  }
2283
2295
  }, { children: childrenField });
2284
2296
  }
@@ -2289,7 +2301,7 @@ export default defineComponent({
2289
2301
  */
2290
2302
  if (!isForce && checkMethod) {
2291
2303
  XEUtils.eachTree(afterFullData, (row) => {
2292
- const rowid = getRowid($xeTable, row);
2304
+ const rowid = handleGetRowId(row);
2293
2305
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
2294
2306
  selectRowMaps[rowid] = row;
2295
2307
  }
@@ -2306,7 +2318,7 @@ export default defineComponent({
2306
2318
  */
2307
2319
  if (!isForce && checkMethod) {
2308
2320
  afterFullData.forEach((row) => {
2309
- const rowid = getRowid($xeTable, row);
2321
+ const rowid = handleGetRowId(row);
2310
2322
  if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
2311
2323
  selectRowMaps[rowid] = row;
2312
2324
  }
@@ -2314,7 +2326,8 @@ export default defineComponent({
2314
2326
  }
2315
2327
  else {
2316
2328
  afterFullData.forEach(row => {
2317
- selectRowMaps[getRowid($xeTable, row)] = row;
2329
+ const rowid = handleGetRowId(row);
2330
+ selectRowMaps[rowid] = row;
2318
2331
  });
2319
2332
  }
2320
2333
  }
@@ -2326,7 +2339,7 @@ export default defineComponent({
2326
2339
  */
2327
2340
  if (!isForce && checkMethod) {
2328
2341
  afterFullData.forEach((row) => {
2329
- const rowid = getRowid($xeTable, row);
2342
+ const rowid = handleGetRowId(row);
2330
2343
  if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
2331
2344
  selectRowMaps[rowid] = row;
2332
2345
  }
@@ -2651,7 +2664,10 @@ export default defineComponent({
2651
2664
  const { transform } = treeOpts;
2652
2665
  const childrenField = treeOpts.children || treeOpts.childrenField;
2653
2666
  let treeData = [];
2654
- let fullData = reactive(datas ? datas.slice(0) : []); // 转为响应式
2667
+ let fullData = reactive(datas ? datas.slice(0) : []); // 转为响应式数据
2668
+ if (fullData.length > supportMaxRow) {
2669
+ errLog('vxe.error.errMaxRow', [supportMaxRow]);
2670
+ }
2655
2671
  if (treeConfig) {
2656
2672
  if (transform) {
2657
2673
  // 树结构自动转换
@@ -2746,7 +2762,7 @@ export default defineComponent({
2746
2762
  // warnLog('vxe.error.reqProp', ['table.show-overflow'])
2747
2763
  // }
2748
2764
  if (props.spanMethod) {
2749
- warnLog('vxe.error.scrollErrProp', ['table.span-method']);
2765
+ errLog('vxe.error.scrollErrProp', ['table.span-method']);
2750
2766
  }
2751
2767
  }
2752
2768
  handleReserveStatus();
@@ -3138,9 +3154,9 @@ export default defineComponent({
3138
3154
  handleCheckedAllCheckboxRow(value);
3139
3155
  if (evnt) {
3140
3156
  dispatchEvent('checkbox-all', {
3141
- records: $xeTable.getCheckboxRecords(),
3142
- reserves: $xeTable.getCheckboxReserveRecords(),
3143
- indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
3157
+ records: () => $xeTable.getCheckboxRecords(),
3158
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
3159
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
3144
3160
  checked: value
3145
3161
  }, evnt);
3146
3162
  }
@@ -3438,6 +3454,9 @@ export default defineComponent({
3438
3454
  };
3439
3455
  tableMethods = {
3440
3456
  dispatchEvent,
3457
+ getEl() {
3458
+ return refElem.value;
3459
+ },
3441
3460
  /**
3442
3461
  * 重置表格的一切数据状态
3443
3462
  */
@@ -3740,12 +3759,14 @@ export default defineComponent({
3740
3759
  */
3741
3760
  revertData(rows, field) {
3742
3761
  const { keepSource, treeConfig } = props;
3743
- const { fullAllDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
3762
+ const { editStore } = reactData;
3763
+ const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
3764
+ const removeTempMaps = Object.assign({}, editStore.removeMaps);
3744
3765
  const treeOpts = computeTreeOpts.value;
3745
3766
  const { transform } = treeOpts;
3746
3767
  if (!keepSource) {
3747
3768
  if (process.env.NODE_ENV === 'development') {
3748
- warnLog('vxe.error.reqProp', ['keep-source']);
3769
+ errLog('vxe.error.reqProp', ['keep-source']);
3749
3770
  }
3750
3771
  return nextTick();
3751
3772
  }
@@ -3760,23 +3781,24 @@ export default defineComponent({
3760
3781
  }
3761
3782
  let reDelFlag = false;
3762
3783
  if (targetRows.length) {
3763
- targetRows.forEach((row) => {
3764
- if (!$xeTable.isInsertByRow(row)) {
3765
- const rowid = getRowid($xeTable, row);
3766
- const oRow = sourceDataRowIdData[rowid];
3767
- if (oRow && row) {
3768
- if (field) {
3769
- XEUtils.set(row, field, XEUtils.clone(XEUtils.get(oRow, field), true));
3770
- }
3771
- else {
3772
- XEUtils.destructuring(row, XEUtils.clone(oRow, true));
3773
- }
3774
- if ($xeTable.isRemoveByRow(row)) {
3775
- const rowRest = fullAllDataRowIdData[rowid];
3776
- if (rowRest) {
3777
- const reRow = rowRest.row;
3778
- tableFullData.unshift(reRow);
3779
- afterFullData.unshift(reRow);
3784
+ targetRows.forEach((item) => {
3785
+ const rowid = getRowid($xeTable, item);
3786
+ const rowRest = fullAllDataRowIdData[rowid];
3787
+ if (rowRest) {
3788
+ const row = rowRest.row;
3789
+ if (!$xeTable.isInsertByRow(row)) {
3790
+ const oRow = sourceDataRowIdData[rowid];
3791
+ if (oRow && row) {
3792
+ if (field) {
3793
+ XEUtils.set(row, field, XEUtils.clone(XEUtils.get(oRow, field), true));
3794
+ }
3795
+ else {
3796
+ XEUtils.destructuring(row, XEUtils.clone(oRow, true));
3797
+ }
3798
+ if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
3799
+ delete removeTempMaps[rowid];
3800
+ tableFullData.unshift(row);
3801
+ afterFullData.unshift(row);
3780
3802
  reDelFlag = true;
3781
3803
  }
3782
3804
  }
@@ -3786,6 +3808,7 @@ export default defineComponent({
3786
3808
  }
3787
3809
  if (rows) {
3788
3810
  if (reDelFlag) {
3811
+ editStore.removeMaps = removeTempMaps;
3789
3812
  $xeTable.updateFooter();
3790
3813
  $xeTable.cacheRowMap(false);
3791
3814
  $xeTable.handleTableData(treeConfig && transform);
@@ -3938,18 +3961,20 @@ export default defineComponent({
3938
3961
  },
3939
3962
  /**
3940
3963
  * 检查行或列数据是否发生改变
3941
- * @param {Row} row 行对象
3964
+ * @param {Row} rowidOrRow 行对象、行主键
3942
3965
  * @param {String} field 字段名
3943
3966
  */
3944
- isUpdateByRow(row, field) {
3967
+ isUpdateByRow(rowidOrRow, field) {
3945
3968
  const { keepSource } = props;
3946
3969
  const { tableFullColumn, fullDataRowIdData, sourceDataRowIdData } = internalData;
3947
3970
  if (keepSource) {
3948
- const rowid = getRowid($xeTable, row);
3971
+ const rowid = XEUtils.isString(rowidOrRow) || XEUtils.isNumber(rowidOrRow) ? rowidOrRow : getRowid($xeTable, rowidOrRow);
3972
+ const rowRest = fullDataRowIdData[rowid];
3949
3973
  // 新增的数据不需要检测
3950
- if (!fullDataRowIdData[rowid]) {
3974
+ if (!rowRest) {
3951
3975
  return false;
3952
3976
  }
3977
+ const row = rowRest.row;
3953
3978
  const oRow = sourceDataRowIdData[rowid];
3954
3979
  if (oRow) {
3955
3980
  if (arguments.length > 1) {
@@ -4013,6 +4038,94 @@ export default defineComponent({
4013
4038
  tableColumn: reactData.tableColumn.slice(0)
4014
4039
  };
4015
4040
  },
4041
+ /**
4042
+ * 移动列到指定列的位置
4043
+ * @param fieldOrColumn
4044
+ * @param targetFieldOrColumn
4045
+ * @param options
4046
+ */
4047
+ moveColumnTo(fieldOrColumn, targetFieldOrColumn, options) {
4048
+ const { fullColumnIdData, visibleColumn } = internalData;
4049
+ const { dragToChild, dragPos, isCrossDrag } = Object.assign({}, options);
4050
+ const dragCol = handleFieldOrColumn($xeTable, fieldOrColumn);
4051
+ let prevDragCol = null;
4052
+ const colRest = dragCol ? fullColumnIdData[dragCol.id] : null;
4053
+ let defPos = 'left';
4054
+ if (XEUtils.isNumber(targetFieldOrColumn)) {
4055
+ if (colRest && targetFieldOrColumn) {
4056
+ let currList = colRest.items;
4057
+ let offsetIndex = colRest._index + targetFieldOrColumn;
4058
+ if (isCrossDrag) {
4059
+ currList = visibleColumn;
4060
+ offsetIndex = colRest._index + targetFieldOrColumn;
4061
+ }
4062
+ if (offsetIndex > 0 && offsetIndex < currList.length - 1) {
4063
+ prevDragCol = currList[offsetIndex];
4064
+ }
4065
+ if (targetFieldOrColumn > 0) {
4066
+ defPos = 'right';
4067
+ }
4068
+ }
4069
+ }
4070
+ else {
4071
+ prevDragCol = handleFieldOrColumn($xeTable, targetFieldOrColumn);
4072
+ const targetColRest = prevDragCol ? fullColumnIdData[prevDragCol.id] : null;
4073
+ if (colRest && targetColRest) {
4074
+ if (targetColRest._index > colRest._index) {
4075
+ defPos = 'right';
4076
+ }
4077
+ }
4078
+ }
4079
+ return $xeTable.handleColDragSwapEvent(null, true, dragCol, prevDragCol, dragPos || defPos, dragToChild === true);
4080
+ },
4081
+ /**
4082
+ * 移动行到指定行的位置
4083
+ * @param rowidOrRow
4084
+ * @param targetRowidOrRow
4085
+ * @param options
4086
+ */
4087
+ moveRowTo(rowidOrRow, targetRowidOrRow, options) {
4088
+ const { treeConfig } = props;
4089
+ const { fullAllDataRowIdData, afterFullData } = internalData;
4090
+ const { dragToChild, dragPos, isCrossDrag } = Object.assign({}, options);
4091
+ const treeOpts = computeTreeOpts.value;
4092
+ const dragRow = handleRowidOrRow($xeTable, rowidOrRow);
4093
+ let prevDragRow = null;
4094
+ let defPos = 'top';
4095
+ const rowRest = dragRow ? fullAllDataRowIdData[getRowid($xeTable, dragRow)] : null;
4096
+ if (XEUtils.isNumber(targetRowidOrRow)) {
4097
+ if (rowRest && targetRowidOrRow) {
4098
+ let currList = afterFullData;
4099
+ let offsetIndex = rowRest._index + targetRowidOrRow;
4100
+ if (treeConfig) {
4101
+ currList = rowRest.items;
4102
+ if (treeOpts.transform) {
4103
+ offsetIndex = rowRest.treeIndex + targetRowidOrRow;
4104
+ if (isCrossDrag) {
4105
+ currList = afterFullData;
4106
+ offsetIndex = rowRest._index + targetRowidOrRow;
4107
+ }
4108
+ }
4109
+ }
4110
+ if (offsetIndex >= 0 && offsetIndex <= currList.length - 1) {
4111
+ prevDragRow = currList[offsetIndex];
4112
+ }
4113
+ if (targetRowidOrRow > 0) {
4114
+ defPos = 'bottom';
4115
+ }
4116
+ }
4117
+ }
4118
+ else {
4119
+ prevDragRow = handleRowidOrRow($xeTable, targetRowidOrRow);
4120
+ const targetRowRest = prevDragRow ? fullAllDataRowIdData[getRowid($xeTable, prevDragRow)] : null;
4121
+ if (rowRest && targetRowRest) {
4122
+ if (targetRowRest._index > rowRest._index) {
4123
+ defPos = 'bottom';
4124
+ }
4125
+ }
4126
+ }
4127
+ return $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
4128
+ },
4016
4129
  /**
4017
4130
  * 获取表格的全量列
4018
4131
  */
@@ -4032,6 +4145,7 @@ export default defineComponent({
4032
4145
  */
4033
4146
  getCheckboxRecords(isFull) {
4034
4147
  const { treeConfig } = props;
4148
+ const { selectCheckboxMaps } = reactData;
4035
4149
  const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData;
4036
4150
  const treeOpts = computeTreeOpts.value;
4037
4151
  const checkboxOpts = computeCheckboxOpts.value;
@@ -4039,17 +4153,17 @@ export default defineComponent({
4039
4153
  const { checkField } = checkboxOpts;
4040
4154
  const childrenField = treeOpts.children || treeOpts.childrenField;
4041
4155
  let rowList = [];
4042
- const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData);
4043
4156
  if (checkField) {
4044
4157
  if (treeConfig) {
4158
+ const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData);
4045
4159
  rowList = XEUtils.filterTree(currTableData, row => XEUtils.get(row, checkField), { children: transform ? mapChildrenField : childrenField });
4046
4160
  }
4047
4161
  else {
4162
+ const currTableData = isFull ? tableFullData : afterFullData;
4048
4163
  rowList = currTableData.filter((row) => XEUtils.get(row, checkField));
4049
4164
  }
4050
4165
  }
4051
4166
  else {
4052
- const { selectCheckboxMaps } = reactData;
4053
4167
  XEUtils.each(selectCheckboxMaps, (row, rowid) => {
4054
4168
  if (isFull) {
4055
4169
  if (fullDataRowIdData[rowid]) {
@@ -4734,6 +4848,7 @@ export default defineComponent({
4734
4848
  const childrenField = treeOpts.children || treeOpts.childrenField;
4735
4849
  const checkboxOpts = computeCheckboxOpts.value;
4736
4850
  const { checkField, reserve } = checkboxOpts;
4851
+ // indeterminateField 仅支持读取
4737
4852
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
4738
4853
  if (checkField) {
4739
4854
  const handleClearChecked = (item) => {
@@ -4863,13 +4978,20 @@ export default defineComponent({
4863
4978
  * 用于当前列,设置某列行为高亮状态
4864
4979
  */
4865
4980
  setCurrentColumn(fieldOrColumn) {
4981
+ const { mouseConfig } = props;
4982
+ const mouseOpts = computeMouseOpts.value;
4983
+ const isMouseSelected = mouseConfig && mouseOpts.selected;
4866
4984
  const column = handleFieldOrColumn($xeTable, fieldOrColumn);
4867
4985
  if (column) {
4868
- // tableMethods.clearCurrentRow()
4869
- tableMethods.clearCurrentColumn();
4986
+ $xeTable.clearCurrentColumn();
4870
4987
  reactData.currentColumn = column;
4871
4988
  }
4872
- return nextTick();
4989
+ return nextTick().then(() => {
4990
+ // 更新状选中态
4991
+ if (isMouseSelected) {
4992
+ $xeTable.addCellSelectedClass();
4993
+ }
4994
+ });
4873
4995
  },
4874
4996
  /**
4875
4997
  * 用于当前列,手动清空当前高亮的状态
@@ -5090,7 +5212,13 @@ export default defineComponent({
5090
5212
  visible: false
5091
5213
  });
5092
5214
  if (visible) {
5093
- dispatchEvent('filter-visible', { column, property: column.field, field: column.field, filterList: $xeTable.getCheckedFilters(), visible: false }, null);
5215
+ dispatchEvent('filter-visible', {
5216
+ column,
5217
+ property: column.field,
5218
+ field: column.field,
5219
+ filterList: () => $xeTable.getCheckedFilters(),
5220
+ visible: false
5221
+ }, null);
5094
5222
  }
5095
5223
  return nextTick();
5096
5224
  },
@@ -5714,7 +5842,13 @@ export default defineComponent({
5714
5842
  const { id } = props;
5715
5843
  const customOpts = computeCustomOpts.value;
5716
5844
  const { collectColumn } = internalData;
5717
- const { checkMethod } = customOpts;
5845
+ const { storage, checkMethod } = customOpts;
5846
+ const isAllCustom = storage === true;
5847
+ const storageOpts = isAllCustom ? {} : Object.assign({}, storage || {});
5848
+ const isCustomResizable = isAllCustom || storageOpts.resizable;
5849
+ const isCustomVisible = isAllCustom || storageOpts.visible;
5850
+ const isCustomFixed = isAllCustom || storageOpts.fixed;
5851
+ const isCustomSort = isAllCustom || storageOpts.sort;
5718
5852
  const resizableData = {};
5719
5853
  const sortData = {};
5720
5854
  const visibleData = {};
@@ -5734,44 +5868,34 @@ export default defineComponent({
5734
5868
  let hasFixed = 0;
5735
5869
  let hasVisible = 0;
5736
5870
  XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => {
5871
+ const colKey = column.getKey();
5872
+ if (!colKey) {
5873
+ errLog('vxe.error.reqProp', [`${column.getTitle() || column.type || ''} -> column.field=?`]);
5874
+ return;
5875
+ }
5737
5876
  // 只支持一级
5738
5877
  if (!parentColumn) {
5739
- collectColumn.forEach((column) => {
5740
- const colKey = column.getKey();
5741
- if (colKey) {
5742
- hasSort = 1;
5743
- sortData[colKey] = column.renderSortNumber;
5744
- }
5745
- });
5746
- if (column.fixed !== column.defaultFixed) {
5747
- const colKey = column.getKey();
5748
- if (colKey) {
5749
- hasFixed = 1;
5750
- fixedData[colKey] = column.fixed;
5751
- }
5878
+ if (isCustomSort) {
5879
+ hasSort = 1;
5880
+ sortData[colKey] = column.renderSortNumber;
5752
5881
  }
5753
- }
5754
- if (column.resizeWidth) {
5755
- const colKey = column.getKey();
5756
- if (colKey) {
5757
- hasResizable = 1;
5758
- resizableData[colKey] = column.renderWidth;
5882
+ if (isCustomFixed && column.fixed !== column.defaultFixed) {
5883
+ hasFixed = 1;
5884
+ fixedData[colKey] = column.fixed;
5759
5885
  }
5760
5886
  }
5761
- if (!checkMethod || checkMethod({ column })) {
5887
+ if (isCustomResizable && column.resizeWidth) {
5888
+ hasResizable = 1;
5889
+ resizableData[colKey] = column.renderWidth;
5890
+ }
5891
+ if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
5762
5892
  if (!column.visible && column.defaultVisible) {
5763
- const colKey = column.getKey();
5764
- if (colKey) {
5765
- hasVisible = 1;
5766
- visibleData[colKey] = false;
5767
- }
5893
+ hasVisible = 1;
5894
+ visibleData[colKey] = false;
5768
5895
  }
5769
5896
  else if (column.visible && !column.defaultVisible) {
5770
- const colKey = column.getKey();
5771
- if (colKey) {
5772
- hasVisible = 1;
5773
- visibleData[colKey] = true;
5774
- }
5897
+ hasVisible = 1;
5898
+ visibleData[colKey] = true;
5775
5899
  }
5776
5900
  }
5777
5901
  });
@@ -6015,7 +6139,7 @@ export default defineComponent({
6015
6139
  // 该行为只对当前激活的表格有效
6016
6140
  if (internalData.isActivated) {
6017
6141
  tablePrivateMethods.preventEvent(evnt, 'event.keydown', null, () => {
6018
- const { mouseConfig, keyboardConfig, treeConfig, editConfig, highlightCurrentRow } = props;
6142
+ const { mouseConfig, keyboardConfig, treeConfig, editConfig, highlightCurrentRow, highlightCurrentColumn } = props;
6019
6143
  const { ctxMenuStore, editStore, currentRow } = reactData;
6020
6144
  const { afterFullData } = internalData;
6021
6145
  const isMenu = computeIsMenu.value;
@@ -6026,6 +6150,7 @@ export default defineComponent({
6026
6150
  const treeOpts = computeTreeOpts.value;
6027
6151
  const menuList = computeMenuList.value;
6028
6152
  const rowOpts = computeRowOpts.value;
6153
+ const columnOpts = computeColumnOpts.value;
6029
6154
  const { selected, actived } = editStore;
6030
6155
  const childrenField = treeOpts.children || treeOpts.childrenField;
6031
6156
  const keyCode = evnt.keyCode;
@@ -6199,10 +6324,14 @@ export default defineComponent({
6199
6324
  if (selected.row && selected.column) {
6200
6325
  $xeTable.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
6201
6326
  }
6202
- else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
6203
- // 当前行按键上下移动
6327
+ // 当前行按键上下移动
6328
+ if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
6204
6329
  $xeTable.moveCurrentRow(isUpArrow, isDwArrow, evnt);
6205
6330
  }
6331
+ // 当前行按键左右移动
6332
+ if ((isLeftArrow || isRightArrow) && (columnOpts.isCurrent || highlightCurrentColumn)) {
6333
+ $xeTable.moveCurrentColumn(isLeftArrow, isRightArrow, evnt);
6334
+ }
6206
6335
  }
6207
6336
  }
6208
6337
  else if (isTab && keyboardConfig && keyboardOpts.isTab) {
@@ -6649,7 +6778,16 @@ export default defineComponent({
6649
6778
  if (el) {
6650
6779
  const parentElem = el.parentNode;
6651
6780
  const parentPaddingSize = height === '100%' || height === 'auto' ? getPaddingTopBottomSize(parentElem) : 0;
6652
- return Math.floor($xeGrid ? $xeGrid.getParentHeight() : XEUtils.toNumber(getComputedStyle(parentElem).height) - parentPaddingSize);
6781
+ let parentWrapperHeight = 0;
6782
+ if (parentElem) {
6783
+ if ($xeGrid && hasClass(parentElem, 'vxe-grid--table-wrapper')) {
6784
+ parentWrapperHeight = $xeGrid.getParentHeight();
6785
+ }
6786
+ else {
6787
+ parentWrapperHeight = parentElem.clientHeight;
6788
+ }
6789
+ }
6790
+ return Math.floor(parentWrapperHeight - parentPaddingSize);
6653
6791
  }
6654
6792
  return 0;
6655
6793
  },
@@ -6741,32 +6879,17 @@ export default defineComponent({
6741
6879
  const treeOpts = computeTreeOpts.value;
6742
6880
  const childrenField = treeOpts.children || treeOpts.childrenField;
6743
6881
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
6744
- const rowkey = getRowkey($xeTable);
6882
+ const { lazy } = treeOpts;
6745
6883
  const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
6746
6884
  const fullDataRowIdMaps = {};
6747
6885
  const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
6748
- const handleRow = (row, index, items, path, parentRow, nodes) => {
6749
- let rowid = getRowid($xeTable, row);
6750
- const seq = treeConfig && path ? toTreePathSeq(path) : index + 1;
6751
- const level = nodes ? nodes.length - 1 : 0;
6752
- if (eqEmptyValue(rowid)) {
6753
- rowid = getRowUniqueId();
6754
- XEUtils.set(row, rowkey, rowid);
6755
- }
6756
- if (treeConfig && treeOpts.lazy) {
6757
- const treeExpRest = treeExpandedMaps[rowid];
6758
- if (row[hasChildField] && XEUtils.isUndefined(row[childrenField])) {
6759
- row[childrenField] = null;
6760
- }
6761
- if (treeExpRest) {
6762
- if (!row[childrenField] || !row[childrenField].length) {
6763
- delete treeTempExpandedMaps[rowid];
6764
- }
6765
- }
6766
- }
6767
- let rowRest = fullAllDataRowIdData[rowid];
6886
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
6887
+ const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
6888
+ let rowRest = fullAllDataRowIdMaps[rowid];
6768
6889
  if (!rowRest) {
6769
6890
  rowRest = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
6891
+ fullDataRowIdMaps[rowid] = rowRest;
6892
+ fullAllDataRowIdMaps[rowid] = rowRest;
6770
6893
  }
6771
6894
  rowRest.treeLoaded = false;
6772
6895
  rowRest.expandLoaded = false;
@@ -6774,15 +6897,32 @@ export default defineComponent({
6774
6897
  rowRest.items = items;
6775
6898
  rowRest.parent = parentRow;
6776
6899
  rowRest.level = level;
6777
- rowRest.index = treeConfig && parentRow ? -1 : index;
6900
+ rowRest.index = currIndex;
6901
+ rowRest.treeIndex = index;
6778
6902
  fullDataRowIdMaps[rowid] = rowRest;
6779
6903
  fullAllDataRowIdMaps[rowid] = rowRest;
6780
6904
  };
6781
6905
  if (treeConfig) {
6782
- XEUtils.eachTree(tableFullTreeData, handleRow, { children: childrenField });
6906
+ XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
6907
+ const rowid = handleUpdateRowId(row);
6908
+ if (treeConfig && lazy) {
6909
+ const treeExpRest = treeTempExpandedMaps[rowid];
6910
+ if (row[hasChildField] && row[childrenField] === undefined) {
6911
+ row[childrenField] = null;
6912
+ }
6913
+ if (treeExpRest) {
6914
+ if (!row[childrenField] || !row[childrenField].length) {
6915
+ delete treeTempExpandedMaps[rowid];
6916
+ }
6917
+ }
6918
+ }
6919
+ handleRowCache(row, index, items, parentRow ? -1 : index, parentRow, rowid, nodes.length - 1, toTreePathSeq(path));
6920
+ }, { children: childrenField });
6783
6921
  }
6784
6922
  else {
6785
- tableFullData.forEach(handleRow);
6923
+ tableFullData.forEach((row, index, items) => {
6924
+ handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
6925
+ });
6786
6926
  }
6787
6927
  internalData.fullDataRowIdData = fullDataRowIdMaps;
6788
6928
  internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
@@ -6791,17 +6931,12 @@ export default defineComponent({
6791
6931
  cacheSourceMap(fullData) {
6792
6932
  const { treeConfig } = props;
6793
6933
  const treeOpts = computeTreeOpts.value;
6794
- let { sourceDataRowIdData } = internalData;
6795
6934
  const sourceData = XEUtils.clone(fullData, true);
6796
- const rowkey = getRowkey($xeTable);
6797
- sourceDataRowIdData = internalData.sourceDataRowIdData = {};
6935
+ const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
6936
+ const sourceRowIdData = {};
6798
6937
  const handleSourceRow = (row) => {
6799
- let rowid = getRowid($xeTable, row);
6800
- if (eqEmptyValue(rowid)) {
6801
- rowid = getRowUniqueId();
6802
- XEUtils.set(row, rowkey, rowid);
6803
- }
6804
- sourceDataRowIdData[rowid] = row;
6938
+ const rowid = handleUpdateRowId(row);
6939
+ sourceRowIdData[rowid] = row;
6805
6940
  };
6806
6941
  // 源数据缓存
6807
6942
  if (treeConfig) {
@@ -6811,6 +6946,7 @@ export default defineComponent({
6811
6946
  else {
6812
6947
  sourceData.forEach(handleSourceRow);
6813
6948
  }
6949
+ internalData.sourceDataRowIdData = sourceRowIdData;
6814
6950
  internalData.tableSourceData = sourceData;
6815
6951
  },
6816
6952
  /**
@@ -7262,8 +7398,22 @@ export default defineComponent({
7262
7398
  }
7263
7399
  }
7264
7400
  // 兼容老版本
7265
- let rest;
7266
- if (!evntList.some((func) => func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args)) === false)) {
7401
+ let rest = null;
7402
+ let isStop = false;
7403
+ for (let i = 0; i < evntList.length; i++) {
7404
+ const func = evntList[i];
7405
+ const fnRest = func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args));
7406
+ if (fnRest === false) {
7407
+ isStop = true;
7408
+ break;
7409
+ }
7410
+ else if (fnRest && fnRest.status === false) {
7411
+ rest = fnRest.result;
7412
+ isStop = true;
7413
+ break;
7414
+ }
7415
+ }
7416
+ if (!isStop) {
7267
7417
  if (next) {
7268
7418
  rest = next();
7269
7419
  }
@@ -7289,10 +7439,11 @@ export default defineComponent({
7289
7439
  }
7290
7440
  // 树结构
7291
7441
  if (treeConfig) {
7442
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7292
7443
  const childRowMaps = {};
7293
7444
  const childRowList = [];
7294
7445
  XEUtils.eachTree(afterTreeFullData, (row) => {
7295
- const rowid = getRowid($xeTable, row);
7446
+ const rowid = handleGetRowId(row);
7296
7447
  const childList = row[transform ? mapChildrenField : childrenField];
7297
7448
  if (childList && childList.length && !childRowMaps[rowid]) {
7298
7449
  childRowMaps[rowid] = 1;
@@ -7308,7 +7459,7 @@ export default defineComponent({
7308
7459
  let vLen = 0; // 有效行
7309
7460
  childList.forEach(checkMethod
7310
7461
  ? (item) => {
7311
- const childRowid = getRowid($xeTable, item);
7462
+ const childRowid = handleGetRowId(item);
7312
7463
  const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
7313
7464
  if (checkMethod({ row: item })) {
7314
7465
  if (isSelect) {
@@ -7329,7 +7480,7 @@ export default defineComponent({
7329
7480
  }
7330
7481
  }
7331
7482
  : item => {
7332
- const childRowid = getRowid($xeTable, item);
7483
+ const childRowid = handleGetRowId(item);
7333
7484
  const isSelect = checkField ? XEUtils.get(item, checkField) : selectRowMaps[childRowid];
7334
7485
  if (isSelect) {
7335
7486
  sLen++;
@@ -7378,13 +7529,14 @@ export default defineComponent({
7378
7529
  const checkboxOpts = computeCheckboxOpts.value;
7379
7530
  const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
7380
7531
  const { afterFullData, afterTreeFullData, checkboxReserveRowMap } = internalData;
7532
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7381
7533
  let sLen = 0; // 已选
7382
7534
  let hLen = 0; // 半选
7383
7535
  let vLen = 0; // 有效行
7384
7536
  const rootList = (treeConfig ? afterTreeFullData : afterFullData);
7385
7537
  rootList.forEach(checkMethod
7386
7538
  ? row => {
7387
- const childRowid = getRowid($xeTable, row);
7539
+ const childRowid = handleGetRowId(row);
7388
7540
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
7389
7541
  if (checkMethod({ row })) {
7390
7542
  if (selected) {
@@ -7405,7 +7557,7 @@ export default defineComponent({
7405
7557
  }
7406
7558
  }
7407
7559
  : row => {
7408
- const childRowid = getRowid($xeTable, row);
7560
+ const childRowid = handleGetRowId(row);
7409
7561
  const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
7410
7562
  if (selected) {
7411
7563
  sLen++;
@@ -7441,6 +7593,8 @@ export default defineComponent({
7441
7593
  const childrenField = treeOpts.children || treeOpts.childrenField;
7442
7594
  const checkboxOpts = computeCheckboxOpts.value;
7443
7595
  const { checkField, checkStrictly, checkMethod } = checkboxOpts;
7596
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
7597
+ // indeterminateField 仅支持读取
7444
7598
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
7445
7599
  if (checkField) {
7446
7600
  // 树结构
@@ -7474,7 +7628,7 @@ export default defineComponent({
7474
7628
  if (treeConfig && !checkStrictly) {
7475
7629
  // 更新子节点状态
7476
7630
  XEUtils.eachTree(rows, (row) => {
7477
- const rowid = getRowid($xeTable, row);
7631
+ const rowid = handleGetRowId(row);
7478
7632
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7479
7633
  if (checked) {
7480
7634
  selectRowMaps[rowid] = row;
@@ -7492,7 +7646,7 @@ export default defineComponent({
7492
7646
  }
7493
7647
  // 列表
7494
7648
  rows.forEach(row => {
7495
- const rowid = getRowid($xeTable, row);
7649
+ const rowid = handleGetRowId(row);
7496
7650
  if (isForce || (!checkMethod || checkMethod({ row }))) {
7497
7651
  if (checked) {
7498
7652
  if (!selectRowMaps[rowid]) {
@@ -7619,17 +7773,18 @@ export default defineComponent({
7619
7773
  const { _lastResizeTime } = internalData;
7620
7774
  const sortOpts = computeSortOpts.value;
7621
7775
  const columnOpts = computeColumnOpts.value;
7776
+ const currentColumnOpts = computeCurrentColumnOpts.value;
7622
7777
  const { column } = params;
7623
7778
  const cell = evnt.currentTarget;
7624
7779
  const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
7625
7780
  const triggerSort = getEventTargetNode(evnt, cell, 'vxe-cell--sort').flag;
7626
7781
  const triggerFilter = getEventTargetNode(evnt, cell, 'vxe-cell--filter').flag;
7627
7782
  if (sortOpts.trigger === 'cell' && !(triggerResizable || triggerSort || triggerFilter)) {
7628
- tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column));
7783
+ $xeTable.triggerSortEvent(evnt, column, getNextSortOrder(column));
7629
7784
  }
7630
7785
  dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
7631
- if (columnOpts.isCurrent || props.highlightCurrentColumn) {
7632
- tablePrivateMethods.triggerCurrentColumnEvent(evnt, params);
7786
+ if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
7787
+ $xeTable.triggerCurrentColumnEvent(evnt, params);
7633
7788
  }
7634
7789
  },
7635
7790
  triggerHeaderCellDblclickEvent(evnt, params) {
@@ -7641,7 +7796,7 @@ export default defineComponent({
7641
7796
  * 如果是双击模式,则单击后选中状态
7642
7797
  */
7643
7798
  triggerCellClickEvent(evnt, params) {
7644
- const { highlightCurrentRow, editConfig } = props;
7799
+ const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props;
7645
7800
  const { editStore, isDragResize } = reactData;
7646
7801
  if (isDragResize) {
7647
7802
  return;
@@ -7653,6 +7808,8 @@ export default defineComponent({
7653
7808
  const checkboxOpts = computeCheckboxOpts.value;
7654
7809
  const keyboardOpts = computeKeyboardOpts.value;
7655
7810
  const rowOpts = computeRowOpts.value;
7811
+ const columnOpts = computeColumnOpts.value;
7812
+ const currentColumnOpts = computeCurrentColumnOpts.value;
7656
7813
  const { actived, focused } = editStore;
7657
7814
  const { row, column } = params;
7658
7815
  const { type, treeNode } = column;
@@ -7668,29 +7825,35 @@ export default defineComponent({
7668
7825
  if (!triggerCheckbox && !triggerRadio) {
7669
7826
  // 如果是展开行
7670
7827
  if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
7671
- tablePrivateMethods.triggerRowExpandEvent(evnt, params);
7828
+ $xeTable.triggerRowExpandEvent(evnt, params);
7672
7829
  }
7673
7830
  // 如果是树形表格
7674
7831
  if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
7675
- tablePrivateMethods.triggerTreeExpandEvent(evnt, params);
7832
+ $xeTable.triggerTreeExpandEvent(evnt, params);
7676
7833
  }
7677
7834
  }
7678
7835
  // 如果点击了树节点
7679
7836
  if (!triggerTreeNode) {
7680
7837
  if (!triggerExpandNode) {
7681
- // 如果是高亮行
7838
+ // 如果是当前行
7682
7839
  if (rowOpts.isCurrent || highlightCurrentRow) {
7683
7840
  if (!triggerCheckbox && !triggerRadio) {
7684
- tablePrivateMethods.triggerCurrentRowEvent(evnt, params);
7841
+ $xeTable.triggerCurrentRowEvent(evnt, params);
7842
+ }
7843
+ }
7844
+ // 如果是当前列
7845
+ if ((columnOpts.isCurrent || highlightCurrentColumn) && (!currentColumnOpts.trigger || ['cell', 'default'].includes(currentColumnOpts.trigger))) {
7846
+ if (!triggerCheckbox && !triggerRadio) {
7847
+ $xeTable.triggerCurrentColumnEvent(evnt, params);
7685
7848
  }
7686
7849
  }
7687
7850
  // 如果是单选框
7688
7851
  if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
7689
- tablePrivateMethods.triggerRadioRowEvent(evnt, params);
7852
+ $xeTable.triggerRadioRowEvent(evnt, params);
7690
7853
  }
7691
7854
  // 如果是复选框
7692
7855
  if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
7693
- tablePrivateMethods.handleToggleCheckRowEvent(evnt, params);
7856
+ $xeTable.handleToggleCheckRowEvent(evnt, params);
7694
7857
  }
7695
7858
  }
7696
7859
  // 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
@@ -7792,36 +7955,38 @@ export default defineComponent({
7792
7955
  }
7793
7956
  },
7794
7957
  triggerCheckRowEvent(evnt, params, checked) {
7795
- const checkboxOpts = computeCheckboxOpts.value;
7796
7958
  const { row } = params;
7797
7959
  const { afterFullData } = internalData;
7960
+ const checkboxOpts = computeCheckboxOpts.value;
7798
7961
  const { checkMethod, trigger } = checkboxOpts;
7799
7962
  if (trigger === 'manual') {
7800
7963
  return;
7801
7964
  }
7802
7965
  evnt.stopPropagation();
7803
7966
  if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
7804
- const checkboxRecords = tableMethods.getCheckboxRecords();
7967
+ const checkboxRecords = $xeTable.getCheckboxRecords();
7805
7968
  if (checkboxRecords.length) {
7806
7969
  const firstRow = checkboxRecords[0];
7807
- const _rowIndex = tableMethods.getVTRowIndex(row);
7808
- const _firstRowIndex = tableMethods.getVTRowIndex(firstRow);
7970
+ const _rowIndex = $xeTable.getVTRowIndex(row);
7971
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
7809
7972
  if (_rowIndex !== _firstRowIndex) {
7810
- tableMethods.setAllCheckboxRow(false);
7973
+ $xeTable.setAllCheckboxRow(false);
7811
7974
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
7812
- handleCheckedCheckboxRow(rangeRows, true, false);
7975
+ nextTick(() => {
7976
+ handleCheckedCheckboxRow(rangeRows, true, false);
7977
+ });
7813
7978
  dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
7814
7979
  return;
7815
7980
  }
7816
7981
  }
7817
7982
  }
7818
7983
  if (!checkMethod || checkMethod({ row })) {
7819
- tablePrivateMethods.handleBatchSelectRows([row], checked);
7820
- tablePrivateMethods.checkSelectionStatus();
7984
+ $xeTable.handleBatchSelectRows([row], checked);
7985
+ $xeTable.checkSelectionStatus();
7821
7986
  dispatchEvent('checkbox-change', Object.assign({
7822
- records: tableMethods.getCheckboxRecords(),
7823
- reserves: tableMethods.getCheckboxReserveRecords(),
7824
- indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
7987
+ records: () => $xeTable.getCheckboxRecords(),
7988
+ reserves: () => $xeTable.getCheckboxReserveRecords(),
7989
+ indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
7825
7990
  checked
7826
7991
  }, params), evnt);
7827
7992
  }
@@ -8088,6 +8253,9 @@ export default defineComponent({
8088
8253
  const { afterFullData, tableFullData } = internalData;
8089
8254
  const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
8090
8255
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
8256
+ const errRest = {
8257
+ status: false
8258
+ };
8091
8259
  if (prevDragRow && dragRow) {
8092
8260
  // 判断是否有拖动
8093
8261
  if (prevDragRow !== dragRow) {
@@ -8102,7 +8270,7 @@ export default defineComponent({
8102
8270
  const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
8103
8271
  return Promise.resolve(dEndMethod ? dEndMethod(dragParams) : true).then((status) => {
8104
8272
  if (!status) {
8105
- return;
8273
+ return errRest;
8106
8274
  }
8107
8275
  let oafIndex = -1;
8108
8276
  let nafIndex = -1;
@@ -8127,12 +8295,12 @@ export default defineComponent({
8127
8295
  if (isPeerDrag && !isCrossDrag) {
8128
8296
  if (oldRest.row[parentField] !== newRest.row[parentField]) {
8129
8297
  // 非同级
8130
- return;
8298
+ return errRest;
8131
8299
  }
8132
8300
  }
8133
8301
  else {
8134
8302
  if (!isCrossDrag) {
8135
- return;
8303
+ return errRest;
8136
8304
  }
8137
8305
  if (oldAllMaps[newRowid]) {
8138
8306
  isSelfToChildStatus = true;
@@ -8143,7 +8311,7 @@ export default defineComponent({
8143
8311
  content: getI18n('vxe.error.treeDragChild')
8144
8312
  });
8145
8313
  }
8146
- return;
8314
+ return errRest;
8147
8315
  }
8148
8316
  }
8149
8317
  }
@@ -8151,13 +8319,13 @@ export default defineComponent({
8151
8319
  else if (oldLevel) {
8152
8320
  // 子到根
8153
8321
  if (!isCrossDrag) {
8154
- return;
8322
+ return errRest;
8155
8323
  }
8156
8324
  }
8157
8325
  else if (newLevel) {
8158
8326
  // 根到子
8159
8327
  if (!isCrossDrag) {
8160
- return;
8328
+ return errRest;
8161
8329
  }
8162
8330
  if (oldAllMaps[newRowid]) {
8163
8331
  isSelfToChildStatus = true;
@@ -8168,7 +8336,7 @@ export default defineComponent({
8168
8336
  content: getI18n('vxe.error.treeDragChild')
8169
8337
  });
8170
8338
  }
8171
- return;
8339
+ return errRest;
8172
8340
  }
8173
8341
  }
8174
8342
  }
@@ -8228,27 +8396,34 @@ export default defineComponent({
8228
8396
  if (reactData.scrollYLoad) {
8229
8397
  $xeTable.updateScrollYSpace();
8230
8398
  }
8231
- nextTick().then(() => {
8399
+ if (evnt) {
8400
+ dispatchEvent('row-dragend', {
8401
+ oldRow: dragRow,
8402
+ newRow: prevDragRow,
8403
+ dragRow,
8404
+ dragPos: prevDragPos,
8405
+ dragToChild: isDragToChildFlag,
8406
+ offsetIndex: dragOffsetIndex,
8407
+ _index: {
8408
+ newIndex: nafIndex,
8409
+ oldIndex: oafIndex
8410
+ }
8411
+ }, evnt);
8412
+ }
8413
+ return nextTick().then(() => {
8232
8414
  $xeTable.updateCellAreas();
8233
8415
  $xeTable.recalculate();
8416
+ }).then(() => {
8417
+ return {
8418
+ status: true
8419
+ };
8234
8420
  });
8235
- dispatchEvent('row-dragend', {
8236
- oldRow: dragRow,
8237
- newRow: prevDragRow,
8238
- dragRow,
8239
- dragPos: prevDragPos,
8240
- dragToChild: isDragToChildFlag,
8241
- offsetIndex: dragOffsetIndex,
8242
- _index: {
8243
- newIndex: nafIndex,
8244
- oldIndex: oafIndex
8245
- }
8246
- }, evnt);
8247
8421
  }).catch(() => {
8422
+ return errRest;
8248
8423
  });
8249
8424
  }
8250
8425
  }
8251
- return Promise.resolve();
8426
+ return Promise.resolve(errRest);
8252
8427
  },
8253
8428
  handleRowDragDragendEvent(evnt) {
8254
8429
  const { treeConfig } = props;
@@ -8375,6 +8550,9 @@ export default defineComponent({
8375
8550
  const { isPeerDrag, isCrossDrag, isSelfToChildDrag, isToChildDrag, dragEndMethod, dragToChildMethod } = columnDragOpts;
8376
8551
  const { collectColumn } = internalData;
8377
8552
  const dragOffsetIndex = prevDragPos === 'right' ? 1 : 0;
8553
+ const errRest = {
8554
+ status: false
8555
+ };
8378
8556
  if (prevDragCol && dragCol) {
8379
8557
  // 判断是否有拖动
8380
8558
  if (prevDragCol !== dragCol) {
@@ -8391,7 +8569,7 @@ export default defineComponent({
8391
8569
  const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
8392
8570
  return Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then((status) => {
8393
8571
  if (!status) {
8394
- return;
8572
+ return errRest;
8395
8573
  }
8396
8574
  let oafIndex = -1;
8397
8575
  let nafIndex = -1;
@@ -8405,12 +8583,12 @@ export default defineComponent({
8405
8583
  if (isPeerDrag && !isCrossDrag) {
8406
8584
  if (dragColumn.parentId !== newColumn.parentId) {
8407
8585
  // 非同级
8408
- return;
8586
+ return errRest;
8409
8587
  }
8410
8588
  }
8411
8589
  else {
8412
8590
  if (!isCrossDrag) {
8413
- return;
8591
+ return errRest;
8414
8592
  }
8415
8593
  if (oldAllMaps[newColumn.id]) {
8416
8594
  isSelfToChildStatus = true;
@@ -8421,7 +8599,7 @@ export default defineComponent({
8421
8599
  content: getI18n('vxe.error.treeDragChild')
8422
8600
  });
8423
8601
  }
8424
- return;
8602
+ return errRest;
8425
8603
  }
8426
8604
  }
8427
8605
  }
@@ -8429,13 +8607,13 @@ export default defineComponent({
8429
8607
  else if (dragColumn.parentId) {
8430
8608
  // 子到根
8431
8609
  if (!isCrossDrag) {
8432
- return;
8610
+ return errRest;
8433
8611
  }
8434
8612
  }
8435
8613
  else if (newColumn.parentId) {
8436
8614
  // 根到子
8437
8615
  if (!isCrossDrag) {
8438
- return;
8616
+ return errRest;
8439
8617
  }
8440
8618
  if (oldAllMaps[newColumn.id]) {
8441
8619
  isSelfToChildStatus = true;
@@ -8446,7 +8624,7 @@ export default defineComponent({
8446
8624
  content: getI18n('vxe.error.treeDragChild')
8447
8625
  });
8448
8626
  }
8449
- return;
8627
+ return errRest;
8450
8628
  }
8451
8629
  }
8452
8630
  }
@@ -8507,26 +8685,32 @@ export default defineComponent({
8507
8685
  $xeTable.clearCopyCellArea();
8508
8686
  }
8509
8687
  }
8510
- dispatchEvent('column-dragend', {
8511
- oldColumn: dragColumn,
8512
- newColumn,
8513
- dragColumn,
8514
- dragPos: prevDragPos,
8515
- dragToChild: isDragToChildFlag,
8516
- offsetIndex: dragOffsetIndex,
8517
- _index: {
8518
- newIndex: nafIndex,
8519
- oldIndex: oafIndex
8520
- }
8521
- }, evnt);
8688
+ if (evnt) {
8689
+ dispatchEvent('column-dragend', {
8690
+ oldColumn: dragColumn,
8691
+ newColumn,
8692
+ dragColumn,
8693
+ dragPos: prevDragPos,
8694
+ dragToChild: isDragToChildFlag,
8695
+ offsetIndex: dragOffsetIndex,
8696
+ _index: {
8697
+ newIndex: nafIndex,
8698
+ oldIndex: oafIndex
8699
+ }
8700
+ }, evnt);
8701
+ }
8522
8702
  if (isSyncColumn) {
8523
8703
  $xeTable.handleColDragSwapColumn();
8524
8704
  }
8705
+ return {
8706
+ status: true
8707
+ };
8525
8708
  }).catch(() => {
8709
+ return errRest;
8526
8710
  });
8527
8711
  }
8528
8712
  }
8529
- return Promise.resolve();
8713
+ return Promise.resolve(errRest);
8530
8714
  },
8531
8715
  handleHeaderCellDragDragendEvent(evnt) {
8532
8716
  const { dragCol } = reactData;
@@ -8920,10 +9104,10 @@ export default defineComponent({
8920
9104
  return;
8921
9105
  }
8922
9106
  const { highlightHoverRow } = tableProps;
8923
- const { scrollXLoad, scrollYLoad } = reactData;
9107
+ const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
8924
9108
  const leftFixedWidth = computeLeftFixedWidth.value;
8925
9109
  const rightFixedWidth = computeRightFixedWidth.value;
8926
- if (!(scrollYLoad || leftFixedWidth || rightFixedWidth)) {
9110
+ if (!(scrollYLoad || leftFixedWidth || rightFixedWidth || expandColumn)) {
8927
9111
  return;
8928
9112
  }
8929
9113
  const { elemStore, lastScrollTop, lastScrollLeft } = internalData;