vxe-table 4.12.0 → 4.12.1

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 (34) hide show
  1. package/es/style.css +1 -1
  2. package/es/table/module/edit/hook.js +19 -22
  3. package/es/table/module/validator/hook.js +2 -4
  4. package/es/table/src/body.js +7 -8
  5. package/es/table/src/table.js +66 -92
  6. package/es/ui/index.js +3 -3
  7. package/es/ui/src/log.js +1 -1
  8. package/lib/index.umd.js +12257 -1056
  9. package/lib/index.umd.min.js +1 -1
  10. package/lib/style.css +1 -1
  11. package/lib/table/module/edit/hook.js +24 -33
  12. package/lib/table/module/edit/hook.min.js +1 -1
  13. package/lib/table/module/validator/hook.js +3 -8
  14. package/lib/table/module/validator/hook.min.js +1 -1
  15. package/lib/table/src/body.js +7 -8
  16. package/lib/table/src/body.min.js +1 -1
  17. package/lib/table/src/table.js +71 -108
  18. package/lib/table/src/table.min.js +1 -1
  19. package/lib/ui/index.js +3 -3
  20. package/lib/ui/index.min.js +1 -1
  21. package/lib/ui/src/log.js +1 -1
  22. package/lib/ui/src/log.min.js +1 -1
  23. package/package.json +2 -2
  24. package/packages/table/module/edit/hook.ts +19 -22
  25. package/packages/table/module/validator/hook.ts +2 -4
  26. package/packages/table/src/body.ts +7 -8
  27. package/packages/table/src/table.ts +72 -100
  28. package/packages/ui/index.ts +2 -2
  29. /package/es/{iconfont.1742955995631.ttf → iconfont.1743045589885.ttf} +0 -0
  30. /package/es/{iconfont.1742955995631.woff → iconfont.1743045589885.woff} +0 -0
  31. /package/es/{iconfont.1742955995631.woff2 → iconfont.1743045589885.woff2} +0 -0
  32. /package/lib/{iconfont.1742955995631.ttf → iconfont.1743045589885.ttf} +0 -0
  33. /package/lib/{iconfont.1742955995631.woff → iconfont.1743045589885.woff} +0 -0
  34. /package/lib/{iconfont.1742955995631.woff2 → iconfont.1743045589885.woff2} +0 -0
@@ -96,8 +96,8 @@ hooks.add('tableEditModule', {
96
96
  };
97
97
  const handleInsertRowAt = (records, targetRow, isInsertNextRow) => {
98
98
  const { treeConfig } = props;
99
- const { mergeList, editStore } = reactData;
100
- const { tableFullTreeData, afterFullData, tableFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData;
99
+ const { mergeList } = reactData;
100
+ const { tableFullTreeData, afterFullData, tableFullData, fullDataRowIdData, fullAllDataRowIdData, insertRowMaps } = internalData;
101
101
  const treeOpts = computeTreeOpts.value;
102
102
  const { transform, rowField, mapChildrenField } = treeOpts;
103
103
  const childrenField = treeOpts.children || treeOpts.childrenField;
@@ -244,11 +244,11 @@ hooks.add('tableEditModule', {
244
244
  }
245
245
  }
246
246
  }
247
- const { insertMaps } = editStore;
248
247
  newRecords.forEach(newRow => {
249
248
  const rowid = getRowid($xeTable, newRow);
250
- insertMaps[rowid] = newRow;
249
+ insertRowMaps[rowid] = newRow;
251
250
  });
251
+ reactData.insertRowFlag++;
252
252
  $xeTable.cacheRowMap(false);
253
253
  $xeTable.updateScrollYStatus();
254
254
  $xeTable.handleTableData(treeConfig && transform);
@@ -487,13 +487,12 @@ hooks.add('tableEditModule', {
487
487
  remove(rows) {
488
488
  const { treeConfig } = props;
489
489
  const { mergeList, editStore } = reactData;
490
- const { tableFullTreeData, selectCheckboxMaps, afterFullData, tableFullData, pendingRowMaps } = internalData;
490
+ const { tableFullTreeData, selectCheckboxMaps, afterFullData, tableFullData, pendingRowMaps, insertRowMaps, removeRowMaps } = internalData;
491
491
  const checkboxOpts = computeCheckboxOpts.value;
492
492
  const treeOpts = computeTreeOpts.value;
493
493
  const { transform, mapChildrenField } = treeOpts;
494
494
  const childrenField = treeOpts.children || treeOpts.childrenField;
495
- const { actived, removeMaps } = editStore;
496
- const insertDataRowMaps = Object.assign({}, editStore.insertMaps);
495
+ const { actived } = editStore;
497
496
  const { checkField } = checkboxOpts;
498
497
  let delList = [];
499
498
  if (!rows) {
@@ -506,7 +505,7 @@ hooks.add('tableEditModule', {
506
505
  rows.forEach((row) => {
507
506
  if (!$xeTable.isInsertByRow(row)) {
508
507
  const rowid = getRowid($xeTable, row);
509
- removeMaps[rowid] = row;
508
+ removeRowMaps[rowid] = row;
510
509
  }
511
510
  });
512
511
  // 如果绑定了多选属性,则更新状态
@@ -577,14 +576,15 @@ hooks.add('tableEditModule', {
577
576
  // 从新增中移除已删除的数据
578
577
  rows.forEach((row) => {
579
578
  const rowid = getRowid($xeTable, row);
580
- if (insertDataRowMaps[rowid]) {
581
- delete insertDataRowMaps[rowid];
579
+ if (insertRowMaps[rowid]) {
580
+ delete insertRowMaps[rowid];
582
581
  }
583
582
  if (pendingRowMaps[rowid]) {
584
583
  delete pendingRowMaps[rowid];
585
584
  }
586
585
  });
587
- editStore.insertMaps = insertDataRowMaps;
586
+ reactData.removeRowFlag++;
587
+ reactData.insertRowFlag++;
588
588
  reactData.pendingRowFlag++;
589
589
  $xeTable.updateFooter();
590
590
  $xeTable.cacheRowMap(false);
@@ -654,11 +654,9 @@ hooks.add('tableEditModule', {
654
654
  * 获取新增的临时数据
655
655
  */
656
656
  getInsertRecords() {
657
- const { editStore } = reactData;
658
- const { fullAllDataRowIdData } = internalData;
659
- const { insertMaps } = editStore;
657
+ const { fullAllDataRowIdData, insertRowMaps } = internalData;
660
658
  const insertRecords = [];
661
- XEUtils.each(insertMaps, (row, rowid) => {
659
+ XEUtils.each(insertRowMaps, (row, rowid) => {
662
660
  if (fullAllDataRowIdData[rowid]) {
663
661
  insertRecords.push(row);
664
662
  }
@@ -669,10 +667,9 @@ hooks.add('tableEditModule', {
669
667
  * 获取已删除的数据
670
668
  */
671
669
  getRemoveRecords() {
672
- const { editStore } = reactData;
673
- const { removeMaps } = editStore;
670
+ const { removeRowMaps } = internalData;
674
671
  const removeRecords = [];
675
- XEUtils.each(removeMaps, (row) => {
672
+ XEUtils.each(removeRowMaps, (row) => {
676
673
  removeRecords.push(row);
677
674
  });
678
675
  return removeRecords;
@@ -699,7 +696,7 @@ hooks.add('tableEditModule', {
699
696
  if (process.env.NODE_ENV === 'development') {
700
697
  warnLog('vxe.error.delFunc', ['getActiveRecord', 'getEditRecord']);
701
698
  }
702
- return this.getEditRecord();
699
+ return $xeTable.getEditRecord();
703
700
  },
704
701
  getEditRecord() {
705
702
  const { editStore } = reactData;
@@ -727,7 +724,7 @@ hooks.add('tableEditModule', {
727
724
  if (process.env.NODE_ENV === 'development') {
728
725
  warnLog('vxe.error.delFunc', ['clearActived', 'clearEdit']);
729
726
  }
730
- return this.clearEdit(row);
727
+ return $xeTable.clearEdit(row);
731
728
  },
732
729
  /**
733
730
  * 清除激活的编辑
@@ -751,7 +748,7 @@ hooks.add('tableEditModule', {
751
748
  warnLog('vxe.error.delFunc', ['isActiveByRow', 'isEditByRow']);
752
749
  }
753
750
  // 即将废弃
754
- return this.isEditByRow(row);
751
+ return $xeTable.isEditByRow(row);
755
752
  },
756
753
  /**
757
754
  * 判断行是否为激活编辑状态
@@ -915,7 +912,7 @@ hooks.add('tableEditModule', {
915
912
  if (isMouseSelected && (selected.row !== row || selected.column !== column)) {
916
913
  if (actived.row !== row || (editOpts.mode === 'cell' ? actived.column !== column : false)) {
917
914
  handleClearEdit(evnt);
918
- editMethods.clearSelected();
915
+ $xeTable.clearSelected();
919
916
  if ($xeTable.clearCellAreas) {
920
917
  $xeTable.clearCellAreas();
921
918
  $xeTable.clearCopyCellArea();
@@ -85,9 +85,7 @@ hooks.add('tableValidatorModule', {
85
85
  const beginValidate = (rows, cols, cb, isFull) => {
86
86
  const validRest = {};
87
87
  const { editRules, treeConfig } = props;
88
- const { editStore } = reactData;
89
- const { afterFullData, pendingRowMaps } = internalData;
90
- const { removeMaps } = editStore;
88
+ const { afterFullData, pendingRowMaps, removeRowMaps } = internalData;
91
89
  const treeOpts = computeTreeOpts.value;
92
90
  const childrenField = treeOpts.children || treeOpts.childrenField;
93
91
  const validOpts = computeValidOpts.value;
@@ -121,7 +119,7 @@ hooks.add('tableValidatorModule', {
121
119
  const handleVaild = (row) => {
122
120
  const rowid = getRowid($xeTable, row);
123
121
  // 是否删除
124
- if (removeMaps[rowid]) {
122
+ if (removeRowMaps[rowid]) {
125
123
  return;
126
124
  }
127
125
  // 是否标记删除
@@ -414,10 +414,13 @@ export default defineComponent({
414
414
  const rows = [];
415
415
  const { handleGetRowId } = createHandleGetRowId($xeTable);
416
416
  tableData.forEach((row, $rowIndex) => {
417
- const trOn = {};
417
+ const rowid = handleGetRowId(row);
418
+ const rowRest = fullAllDataRowIdData[rowid] || {};
418
419
  let rowIndex = $rowIndex;
419
- // 确保任何情况下 rowIndex 都精准指向真实 data 索引
420
- rowIndex = $xeTable.getRowIndex(row);
420
+ let rowLevel = 0;
421
+ let seq = -1;
422
+ let _rowIndex = -1;
423
+ const trOn = {};
421
424
  // 当前行事件
422
425
  if (rowOpts.isHover || highlightHoverRow) {
423
426
  trOn.onMouseenter = (evnt) => {
@@ -433,11 +436,6 @@ export default defineComponent({
433
436
  $xeTable.clearHoverRow();
434
437
  };
435
438
  }
436
- const rowid = handleGetRowId(row);
437
- const rowRest = fullAllDataRowIdData[rowid] || {};
438
- let rowLevel = 0;
439
- let seq = -1;
440
- let _rowIndex = 0;
441
439
  if (rowRest) {
442
440
  rowLevel = rowRest.level;
443
441
  if (treeConfig && transform && seqMode === 'increasing') {
@@ -446,6 +444,7 @@ export default defineComponent({
446
444
  else {
447
445
  seq = rowRest.seq;
448
446
  }
447
+ rowIndex = rowRest.index;
449
448
  _rowIndex = rowRest._index;
450
449
  }
451
450
  const params = { $table: $xeTable, seq, rowid, fixed: fixedType, type: renderType, level: rowLevel, row, rowIndex, $rowIndex, _rowIndex };
@@ -172,9 +172,7 @@ export default defineComponent({
172
172
  focused: {
173
173
  row: null,
174
174
  column: null
175
- },
176
- insertMaps: {},
177
- removeMaps: {}
175
+ }
178
176
  },
179
177
  // 存放 tooltip 相关信息
180
178
  tooltipStore: {
@@ -236,6 +234,8 @@ export default defineComponent({
236
234
  treeExpandedFlag: 1,
237
235
  updateCheckboxFlag: 1,
238
236
  pendingRowFlag: 1,
237
+ insertRowFlag: 1,
238
+ removeRowFlag: 1,
239
239
  rowHeightStore: {
240
240
  default: 48,
241
241
  medium: 44,
@@ -335,7 +335,6 @@ export default defineComponent({
335
335
  fullDataRowIdData: {},
336
336
  fullColumnIdData: {},
337
337
  fullColumnFieldData: {},
338
- // prevDragRow: null,
339
338
  // 已展开的行集合
340
339
  rowExpandedMaps: {},
341
340
  // 懒加载中的展开行的集合
@@ -348,6 +347,10 @@ export default defineComponent({
348
347
  selectCheckboxMaps: {},
349
348
  // 已标记的对象集
350
349
  pendingRowMaps: {},
350
+ // 已新增的临时行
351
+ insertRowMaps: {},
352
+ // 已删除行
353
+ removeRowMaps: {},
351
354
  inited: false,
352
355
  tooltipTimeout: null,
353
356
  initStatus: false,
@@ -418,8 +421,8 @@ export default defineComponent({
418
421
  return virtualXOpts;
419
422
  });
420
423
  const computeScrollXThreshold = computed(() => {
421
- const sXOpts = computeSXOpts.value;
422
- const { threshold } = sXOpts;
424
+ const virtualXOpts = computeVirtualXOpts.value;
425
+ const { threshold } = virtualXOpts;
423
426
  if (threshold) {
424
427
  return XEUtils.toNumber(threshold);
425
428
  }
@@ -450,8 +453,8 @@ export default defineComponent({
450
453
  return !!(scrollbarOpts.y && scrollbarOpts.y.position === 'left');
451
454
  });
452
455
  const computeScrollYThreshold = computed(() => {
453
- const sYOpts = computeSYOpts.value;
454
- const { threshold } = sYOpts;
456
+ const virtualYOpts = computeVirtualYOpts.value;
457
+ const { threshold } = virtualYOpts;
455
458
  if (threshold) {
456
459
  return XEUtils.toNumber(threshold);
457
460
  }
@@ -1020,14 +1023,14 @@ export default defineComponent({
1020
1023
  };
1021
1024
  const setMerges = (merges, mList, rowList) => {
1022
1025
  if (merges) {
1023
- const { treeConfig } = props;
1026
+ // const { treeConfig } = props
1024
1027
  const { visibleColumn } = internalData;
1025
1028
  if (!XEUtils.isArray(merges)) {
1026
1029
  merges = [merges];
1027
1030
  }
1028
- if (treeConfig && merges.length) {
1029
- errLog('vxe.error.noTree', ['merge-cells | merge-footer-items']);
1030
- }
1031
+ // if (treeConfig && merges.length) {
1032
+ // errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1033
+ // }
1031
1034
  merges.forEach((item) => {
1032
1035
  let { row, col, rowspan, colspan } = item;
1033
1036
  if (rowList && XEUtils.isNumber(row)) {
@@ -1070,14 +1073,14 @@ export default defineComponent({
1070
1073
  const removeMerges = (merges, mList, rowList) => {
1071
1074
  const rest = [];
1072
1075
  if (merges) {
1073
- const { treeConfig } = props;
1076
+ // const { treeConfig } = props
1074
1077
  const { visibleColumn } = internalData;
1075
1078
  if (!XEUtils.isArray(merges)) {
1076
1079
  merges = [merges];
1077
1080
  }
1078
- if (treeConfig && merges.length) {
1079
- errLog('vxe.error.noTree', ['merge-cells | merge-footer-items']);
1080
- }
1081
+ // if (treeConfig && merges.length) {
1082
+ // errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1083
+ // }
1081
1084
  merges.forEach((item) => {
1082
1085
  let { row, col } = item;
1083
1086
  if (rowList && XEUtils.isNumber(row)) {
@@ -1776,7 +1779,7 @@ export default defineComponent({
1776
1779
  updateAfterDataIndex();
1777
1780
  };
1778
1781
  const updateStyle = () => {
1779
- const { border, showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props;
1782
+ const { showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props;
1780
1783
  const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn } = reactData;
1781
1784
  const { visibleColumn, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData;
1782
1785
  const el = refElem.value;
@@ -1929,32 +1932,6 @@ export default defineComponent({
1929
1932
  if (tableElem) {
1930
1933
  tableElem.style.width = tWidth ? `${tWidth}px` : '';
1931
1934
  }
1932
- const listElem = getRefElem(elemStore[`${name}-${layout}-list`]);
1933
- if (isGroup && listElem) {
1934
- XEUtils.arrayEach(listElem.querySelectorAll('.col--group'), (thElem) => {
1935
- const colNode = $xeTable.getColumnNode(thElem);
1936
- if (colNode) {
1937
- const column = colNode.item;
1938
- const { showHeaderOverflow } = column;
1939
- const cellOverflow = XEUtils.isBoolean(showHeaderOverflow) ? showHeaderOverflow : allColumnHeaderOverflow;
1940
- const showEllipsis = cellOverflow === 'ellipsis';
1941
- const showTitle = cellOverflow === 'title';
1942
- const showTooltip = cellOverflow === true || cellOverflow === 'tooltip';
1943
- const hasEllipsis = showTitle || showTooltip || showEllipsis;
1944
- let childWidth = 0;
1945
- let countChild = 0;
1946
- if (hasEllipsis) {
1947
- XEUtils.eachTree(column.children, (item) => {
1948
- if (!item.children || !column.children.length) {
1949
- countChild++;
1950
- }
1951
- childWidth += item.renderWidth;
1952
- }, { children: 'children' });
1953
- }
1954
- thElem.style.width = hasEllipsis ? `${childWidth - countChild - (border ? 2 : 0)}px` : '';
1955
- }
1956
- });
1957
- }
1958
1935
  }
1959
1936
  else if (layout === 'body') {
1960
1937
  if (currScrollElem) {
@@ -2096,7 +2073,7 @@ export default defineComponent({
2096
2073
  (sortConfig.multiple ? defaultSort : defaultSort.slice(0, 1)).forEach((item, index) => {
2097
2074
  const { field, order } = item;
2098
2075
  if (field && order) {
2099
- const column = tableMethods.getColumnByField(field);
2076
+ const column = $xeTable.getColumnByField(field);
2100
2077
  if (column && column.sortable) {
2101
2078
  column.order = order;
2102
2079
  column.sortTime = Date.now() + index;
@@ -2104,7 +2081,7 @@ export default defineComponent({
2104
2081
  }
2105
2082
  });
2106
2083
  if (!sortOpts.remote) {
2107
- tablePrivateMethods.handleTableData(true).then(updateStyle);
2084
+ $xeTable.handleTableData(true).then(updateStyle);
2108
2085
  }
2109
2086
  }
2110
2087
  }
@@ -2163,7 +2140,7 @@ export default defineComponent({
2163
2140
  const expandOpts = computeExpandOpts.value;
2164
2141
  const { expandAll, expandRowKeys } = expandOpts;
2165
2142
  if (expandAll) {
2166
- tableMethods.setAllRowExpand(true);
2143
+ $xeTable.setAllRowExpand(true);
2167
2144
  }
2168
2145
  else if (expandRowKeys) {
2169
2146
  const defExpandeds = [];
@@ -2172,7 +2149,7 @@ export default defineComponent({
2172
2149
  defExpandeds.push(fullDataRowIdData[rowid].row);
2173
2150
  }
2174
2151
  });
2175
- tableMethods.setRowExpand(defExpandeds, true);
2152
+ $xeTable.setRowExpand(defExpandeds, true);
2176
2153
  }
2177
2154
  }
2178
2155
  };
@@ -2533,13 +2510,13 @@ export default defineComponent({
2533
2510
  const handleDefaultMergeCells = () => {
2534
2511
  const { mergeCells } = props;
2535
2512
  if (mergeCells) {
2536
- tableMethods.setMergeCells(mergeCells);
2513
+ $xeTable.setMergeCells(mergeCells);
2537
2514
  }
2538
2515
  };
2539
2516
  const handleDefaultMergeFooterItems = () => {
2540
2517
  const { mergeFooterItems } = props;
2541
2518
  if (mergeFooterItems) {
2542
- tableMethods.setMergeFooterItems(mergeFooterItems);
2519
+ $xeTable.setMergeFooterItems(mergeFooterItems);
2543
2520
  }
2544
2521
  };
2545
2522
  // 计算可视渲染相关数据
@@ -2629,7 +2606,7 @@ export default defineComponent({
2629
2606
  */
2630
2607
  const loadTableData = (datas, isReset) => {
2631
2608
  const { keepSource, treeConfig } = props;
2632
- const { editStore, scrollYLoad: oldScrollYLoad } = reactData;
2609
+ const { scrollYLoad: oldScrollYLoad } = reactData;
2633
2610
  const { scrollYStore, scrollXStore, lastScrollLeft, lastScrollTop } = internalData;
2634
2611
  const treeOpts = computeTreeOpts.value;
2635
2612
  const { transform } = treeOpts;
@@ -2680,8 +2657,8 @@ export default defineComponent({
2680
2657
  scrollXStore.endIndex = 1;
2681
2658
  reactData.isRowLoading = true;
2682
2659
  reactData.scrollVMLoading = false;
2683
- editStore.insertMaps = {};
2684
- editStore.removeMaps = {};
2660
+ internalData.insertRowMaps = {};
2661
+ internalData.removeRowMaps = {};
2685
2662
  const sYLoad = updateScrollYStatus(fullData);
2686
2663
  reactData.isDragColMove = false;
2687
2664
  reactData.isDragRowMove = false;
@@ -2703,10 +2680,10 @@ export default defineComponent({
2703
2680
  $xeTable.clearCellAreas();
2704
2681
  $xeTable.clearCopyCellArea();
2705
2682
  }
2706
- tableMethods.clearMergeCells();
2707
- tableMethods.clearMergeFooterItems();
2708
- tablePrivateMethods.handleTableData(true);
2709
- tableMethods.updateFooter();
2683
+ $xeTable.clearMergeCells();
2684
+ $xeTable.clearMergeFooterItems();
2685
+ $xeTable.handleTableData(true);
2686
+ $xeTable.updateFooter();
2710
2687
  return nextTick().then(() => {
2711
2688
  updateHeight();
2712
2689
  updateStyle();
@@ -2737,20 +2714,20 @@ export default defineComponent({
2737
2714
  }
2738
2715
  }
2739
2716
  handleReserveStatus();
2740
- tablePrivateMethods.checkSelectionStatus();
2717
+ $xeTable.checkSelectionStatus();
2741
2718
  return new Promise(resolve => {
2742
2719
  nextTick()
2743
- .then(() => tableMethods.recalculate())
2720
+ .then(() => $xeTable.recalculate())
2744
2721
  .then(() => {
2745
2722
  let targetScrollLeft = lastScrollLeft;
2746
2723
  let targetScrollTop = lastScrollTop;
2747
- const sXOpts = computeSXOpts.value;
2748
- const sYOpts = computeSYOpts.value;
2724
+ const virtualXOpts = computeVirtualXOpts.value;
2725
+ const virtualYOpts = computeVirtualYOpts.value;
2749
2726
  // 是否在更新数据之后自动滚动重置滚动条
2750
- if (sXOpts.scrollToLeftOnChange) {
2727
+ if (virtualXOpts.scrollToLeftOnChange) {
2751
2728
  targetScrollLeft = 0;
2752
2729
  }
2753
- if (sYOpts.scrollToTopOnChange) {
2730
+ if (virtualYOpts.scrollToTopOnChange) {
2754
2731
  targetScrollTop = 0;
2755
2732
  }
2756
2733
  reactData.isRowLoading = false;
@@ -2786,7 +2763,7 @@ export default defineComponent({
2786
2763
  handleDefaultTreeExpand();
2787
2764
  handleDefaultMergeCells();
2788
2765
  handleDefaultMergeFooterItems();
2789
- nextTick(() => setTimeout(() => tableMethods.recalculate()));
2766
+ nextTick(() => setTimeout(() => $xeTable.recalculate()));
2790
2767
  };
2791
2768
  /**
2792
2769
  * 处理初始化的默认行为
@@ -2852,7 +2829,7 @@ export default defineComponent({
2852
2829
  const centerList = [];
2853
2830
  const rightList = [];
2854
2831
  const { isGroup, columnStore } = reactData;
2855
- const sXOpts = computeSXOpts.value;
2832
+ const virtualXOpts = computeVirtualXOpts.value;
2856
2833
  const { collectColumn, tableFullColumn, scrollXStore, fullColumnIdData } = internalData;
2857
2834
  // 如果是分组表头,如果子列全部被隐藏,则根列也隐藏
2858
2835
  if (isGroup) {
@@ -2916,7 +2893,7 @@ export default defineComponent({
2916
2893
  }
2917
2894
  const visibleColumn = leftList.concat(centerList).concat(rightList);
2918
2895
  // 如果gt为0,则总是启用
2919
- const scrollXLoad = !!sXOpts.enabled && sXOpts.gt > -1 && (sXOpts.gt === 0 || sXOpts.gt < tableFullColumn.length);
2896
+ const scrollXLoad = !!virtualXOpts.enabled && virtualXOpts.gt > -1 && (virtualXOpts.gt === 0 || virtualXOpts.gt < tableFullColumn.length);
2920
2897
  reactData.hasFixedColumn = leftList.length > 0 || rightList.length > 0;
2921
2898
  Object.assign(columnStore, { leftList, centerList, rightList });
2922
2899
  if (scrollXLoad) {
@@ -3025,12 +3002,12 @@ export default defineComponent({
3025
3002
  };
3026
3003
  const updateScrollYStatus = (fullData) => {
3027
3004
  const { treeConfig } = props;
3028
- const sYOpts = computeSYOpts.value;
3005
+ const virtualYOpts = computeVirtualYOpts.value;
3029
3006
  const treeOpts = computeTreeOpts.value;
3030
3007
  const { transform } = treeOpts;
3031
3008
  const allList = fullData || internalData.tableFullData;
3032
3009
  // 如果gt为0,则总是启用
3033
- const scrollYLoad = (transform || !treeConfig) && !!sYOpts.enabled && sYOpts.gt > -1 && (sYOpts.gt === 0 || sYOpts.gt < allList.length);
3010
+ const scrollYLoad = (transform || !treeConfig) && !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt < allList.length);
3034
3011
  reactData.scrollYLoad = scrollYLoad;
3035
3012
  return scrollYLoad;
3036
3013
  };
@@ -3732,9 +3709,7 @@ export default defineComponent({
3732
3709
  */
3733
3710
  revertData(rows, field) {
3734
3711
  const { keepSource, treeConfig } = props;
3735
- const { editStore } = reactData;
3736
- const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
3737
- const removeTempMaps = Object.assign({}, editStore.removeMaps);
3712
+ const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData, removeRowMaps } = internalData;
3738
3713
  const treeOpts = computeTreeOpts.value;
3739
3714
  const { transform } = treeOpts;
3740
3715
  const { handleGetRowId } = createHandleGetRowId($xeTable);
@@ -3770,7 +3745,9 @@ export default defineComponent({
3770
3745
  XEUtils.destructuring(row, XEUtils.clone(oRow, true));
3771
3746
  }
3772
3747
  if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
3773
- delete removeTempMaps[rowid];
3748
+ if (removeRowMaps[rowid]) {
3749
+ delete removeRowMaps[rowid];
3750
+ }
3774
3751
  tableFullData.unshift(row);
3775
3752
  afterFullData.unshift(row);
3776
3753
  reDelFlag = true;
@@ -3782,7 +3759,7 @@ export default defineComponent({
3782
3759
  }
3783
3760
  if (rows) {
3784
3761
  if (reDelFlag) {
3785
- editStore.removeMaps = removeTempMaps;
3762
+ reactData.removeRowFlag++;
3786
3763
  $xeTable.updateFooter();
3787
3764
  $xeTable.cacheRowMap(false);
3788
3765
  $xeTable.handleTableData(treeConfig && transform);
@@ -3915,22 +3892,19 @@ export default defineComponent({
3915
3892
  * @param {Row} row 行对象
3916
3893
  */
3917
3894
  isInsertByRow(row) {
3918
- const { editStore } = reactData;
3919
3895
  const rowid = getRowid($xeTable, row);
3920
- return !!editStore.insertMaps[rowid];
3896
+ return !!reactData.insertRowFlag && !!internalData.insertRowMaps[rowid];
3921
3897
  },
3922
3898
  isRemoveByRow(row) {
3923
- const { editStore } = reactData;
3924
3899
  const rowid = getRowid($xeTable, row);
3925
- return !!editStore.removeMaps[rowid];
3900
+ return !!reactData.removeRowFlag && !!internalData.removeRowMaps[rowid];
3926
3901
  },
3927
3902
  /**
3928
3903
  * 删除所有新增的临时数据
3929
3904
  * @returns
3930
3905
  */
3931
3906
  removeInsertRow() {
3932
- const { editStore } = reactData;
3933
- editStore.insertMaps = {};
3907
+ internalData.insertRowMaps = {};
3934
3908
  return $xeTable.remove($xeTable.getInsertRecords());
3935
3909
  },
3936
3910
  /**
@@ -3969,8 +3943,8 @@ export default defineComponent({
3969
3943
  * @param {Number} columnIndex 索引
3970
3944
  */
3971
3945
  getColumns(columnIndex) {
3972
- const columns = internalData.visibleColumn;
3973
- return XEUtils.isUndefined(columnIndex) ? columns.slice(0) : columns[columnIndex];
3946
+ const { visibleColumn } = internalData;
3947
+ return XEUtils.isUndefined(columnIndex) ? visibleColumn.slice(0) : visibleColumn[columnIndex];
3974
3948
  },
3975
3949
  /**
3976
3950
  * 根据列获取列的唯一主键
@@ -3984,7 +3958,7 @@ export default defineComponent({
3984
3958
  * @param {String} colid 列主键
3985
3959
  */
3986
3960
  getColumnById(colid) {
3987
- const fullColumnIdData = internalData.fullColumnIdData;
3961
+ const { fullColumnIdData } = internalData;
3988
3962
  return colid && fullColumnIdData[colid] ? fullColumnIdData[colid].column : null;
3989
3963
  },
3990
3964
  /**
@@ -3996,7 +3970,7 @@ export default defineComponent({
3996
3970
  return field && fullColumnFieldData[field] ? fullColumnFieldData[field].column : null;
3997
3971
  },
3998
3972
  getParentColumn(fieldOrColumn) {
3999
- const fullColumnIdData = internalData.fullColumnIdData;
3973
+ const { fullColumnIdData } = internalData;
4000
3974
  const column = handleFieldOrColumn($xeTable, fieldOrColumn);
4001
3975
  return column && column.parentId && fullColumnIdData[column.parentId] ? fullColumnIdData[column.parentId].column : null;
4002
3976
  },
@@ -8884,8 +8858,8 @@ export default defineComponent({
8884
8858
  * 横向 X 可视渲染事件处理
8885
8859
  */
8886
8860
  triggerScrollXEvent() {
8887
- const sXOpts = computeSXOpts.value;
8888
- if (sXOpts.immediate) {
8861
+ const virtualXOpts = computeVirtualXOpts.value;
8862
+ if (virtualXOpts.immediate) {
8889
8863
  loadScrollXData();
8890
8864
  }
8891
8865
  else {
@@ -8896,8 +8870,8 @@ export default defineComponent({
8896
8870
  * 纵向 Y 可视渲染事件处理
8897
8871
  */
8898
8872
  triggerScrollYEvent() {
8899
- const sYOpts = computeSYOpts.value;
8900
- if (sYOpts.immediate) {
8873
+ const virtualYOpts = computeVirtualYOpts.value;
8874
+ if (virtualYOpts.immediate) {
8901
8875
  loadScrollYData();
8902
8876
  }
8903
8877
  else {
@@ -9093,8 +9067,8 @@ export default defineComponent({
9093
9067
  return;
9094
9068
  }
9095
9069
  const wheelSpeed = getWheelSpeed(reactData.lastScrollTime);
9096
- const deltaTop = Math.ceil((shiftKey ? deltaX : deltaY) * wheelSpeed);
9097
- const deltaLeft = Math.ceil((shiftKey ? deltaY : deltaX) * wheelSpeed);
9070
+ const deltaTop = shiftKey ? 0 : Math.ceil(deltaY * wheelSpeed);
9071
+ const deltaLeft = shiftKey ? Math.ceil((shiftKey ? (deltaY || deltaX) : deltaX) * wheelSpeed) : 0;
9098
9072
  const isTopWheel = deltaTop < 0;
9099
9073
  const currScrollTop = bodyScrollElem.scrollTop;
9100
9074
  // 如果滚动位置已经是顶部或底部,则不需要触发
@@ -9113,6 +9087,7 @@ export default defineComponent({
9113
9087
  evnt.preventDefault();
9114
9088
  internalData.inWheelScroll = true;
9115
9089
  wheelScrollLeftTo(scrollLeft, (offsetLeft) => {
9090
+ internalData.inWheelScroll = true;
9116
9091
  const currLeftNum = offsetLeft;
9117
9092
  setScrollLeft(xHandleEl, currLeftNum);
9118
9093
  setScrollLeft(bodyScrollElem, currLeftNum);
@@ -9129,9 +9104,10 @@ export default defineComponent({
9129
9104
  }
9130
9105
  if (isRollY) {
9131
9106
  evnt.preventDefault();
9107
+ internalData.inWheelScroll = true;
9132
9108
  wheelScrollTopTo(scrollTop - currScrollTop, (offsetTop) => {
9133
- const currTopNum = bodyScrollElem.scrollTop + offsetTop;
9134
9109
  internalData.inWheelScroll = true;
9110
+ const currTopNum = bodyScrollElem.scrollTop + offsetTop;
9135
9111
  setScrollTop(yHandleEl, currTopNum);
9136
9112
  setScrollTop(bodyScrollElem, currTopNum);
9137
9113
  setScrollTop(leftScrollElem, currTopNum);
@@ -10274,7 +10250,6 @@ export default defineComponent({
10274
10250
  nextTick(() => {
10275
10251
  const { data, exportConfig, importConfig, treeConfig, showOverflow } = props;
10276
10252
  const { scrollXStore, scrollYStore } = internalData;
10277
- const sYOpts = computeSYOpts.value;
10278
10253
  const editOpts = computeEditOpts.value;
10279
10254
  const treeOpts = computeTreeOpts.value;
10280
10255
  const radioOpts = computeRadioOpts.value;
@@ -10400,8 +10375,7 @@ export default defineComponent({
10400
10375
  Object.assign(scrollYStore, {
10401
10376
  startIndex: 0,
10402
10377
  endIndex: 0,
10403
- visibleSize: 0,
10404
- adaptive: sYOpts.adaptive !== false
10378
+ visibleSize: 0
10405
10379
  });
10406
10380
  Object.assign(scrollXStore, {
10407
10381
  startIndex: 0,
package/es/ui/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  import { getFuncText } from './src/utils';
3
- export const version = "4.12.0";
3
+ export const version = "4.12.1";
4
4
  VxeUI.version = version;
5
5
  VxeUI.tableVersion = version;
6
6
  VxeUI.setConfig({
@@ -193,13 +193,13 @@ VxeUI.setConfig({
193
193
  enabled: true,
194
194
  gt: 60,
195
195
  preSize: 1,
196
- oSize: 2
196
+ oSize: 0
197
197
  },
198
198
  virtualYConfig: {
199
199
  enabled: true,
200
200
  gt: 100,
201
201
  preSize: 1,
202
- oSize: 2
202
+ oSize: 0
203
203
  },
204
204
  scrollbarConfig: {
205
205
  // width: 0,
package/es/ui/src/log.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  const { log } = VxeUI;
3
- const version = `table v${"4.12.0"}`;
3
+ const version = `table v${"4.12.1"}`;
4
4
  export const warnLog = log.create('warn', version);
5
5
  export const errLog = log.create('error', version);