vxe-table 4.12.0 → 4.12.2

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 (42) hide show
  1. package/es/style.css +1 -1
  2. package/es/table/module/edit/hook.js +22 -24
  3. package/es/table/module/keyboard/hook.js +3 -2
  4. package/es/table/module/validator/hook.js +2 -4
  5. package/es/table/src/body.js +7 -8
  6. package/es/table/src/table.js +79 -100
  7. package/es/ui/index.js +3 -3
  8. package/es/ui/src/dom.js +0 -1
  9. package/es/ui/src/log.js +1 -1
  10. package/lib/index.umd.js +12266 -1059
  11. package/lib/index.umd.min.js +1 -1
  12. package/lib/style.css +1 -1
  13. package/lib/table/module/edit/hook.js +26 -34
  14. package/lib/table/module/edit/hook.min.js +1 -1
  15. package/lib/table/module/keyboard/hook.js +2 -1
  16. package/lib/table/module/keyboard/hook.min.js +1 -1
  17. package/lib/table/module/validator/hook.js +3 -8
  18. package/lib/table/module/validator/hook.min.js +1 -1
  19. package/lib/table/src/body.js +7 -8
  20. package/lib/table/src/body.min.js +1 -1
  21. package/lib/table/src/table.js +83 -115
  22. package/lib/table/src/table.min.js +1 -1
  23. package/lib/ui/index.js +3 -3
  24. package/lib/ui/index.min.js +1 -1
  25. package/lib/ui/src/dom.js +0 -2
  26. package/lib/ui/src/dom.min.js +1 -1
  27. package/lib/ui/src/log.js +1 -1
  28. package/lib/ui/src/log.min.js +1 -1
  29. package/package.json +2 -2
  30. package/packages/table/module/edit/hook.ts +23 -24
  31. package/packages/table/module/keyboard/hook.ts +4 -2
  32. package/packages/table/module/validator/hook.ts +2 -4
  33. package/packages/table/src/body.ts +7 -8
  34. package/packages/table/src/table.ts +86 -108
  35. package/packages/ui/index.ts +2 -2
  36. package/packages/ui/src/dom.ts +0 -2
  37. /package/es/{iconfont.1742955995631.ttf → iconfont.1743125693758.ttf} +0 -0
  38. /package/es/{iconfont.1742955995631.woff → iconfont.1743125693758.woff} +0 -0
  39. /package/es/{iconfont.1742955995631.woff2 → iconfont.1743125693758.woff2} +0 -0
  40. /package/lib/{iconfont.1742955995631.ttf → iconfont.1743125693758.ttf} +0 -0
  41. /package/lib/{iconfont.1742955995631.woff → iconfont.1743125693758.woff} +0 -0
  42. /package/lib/{iconfont.1742955995631.woff2 → iconfont.1743125693758.woff2} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, h, reactive, ref, provide, inject, nextTick, onActivated, onDeactivated, onBeforeUnmount, onUnmounted, watch, computed, onMounted } from 'vue';
2
2
  import XEUtils from 'xe-utils';
3
- import { browse, initTpImg, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEventTargetNode, getPaddingTopBottomSize, getOffsetPos, setScrollTop, setScrollLeft, toCssUnit } from '../../ui/src/dom';
3
+ import { initTpImg, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEventTargetNode, getPaddingTopBottomSize, getOffsetPos, setScrollTop, setScrollLeft, toCssUnit } from '../../ui/src/dom';
4
4
  import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils';
5
5
  import { VxeUI } from '../../ui';
6
6
  import Cell from './cell';
@@ -29,6 +29,7 @@ export default defineComponent({
29
29
  setup(props, context) {
30
30
  const { slots, emit } = context;
31
31
  const xID = XEUtils.uniqueId();
32
+ const browseObj = XEUtils.browse();
32
33
  // 使用已安装的组件,如果未安装则不渲染
33
34
  const VxeUILoadingComponent = VxeUI.getComponent('VxeLoading');
34
35
  const VxeUITooltipComponent = VxeUI.getComponent('VxeTooltip');
@@ -172,9 +173,7 @@ export default defineComponent({
172
173
  focused: {
173
174
  row: null,
174
175
  column: null
175
- },
176
- insertMaps: {},
177
- removeMaps: {}
176
+ }
178
177
  },
179
178
  // 存放 tooltip 相关信息
180
179
  tooltipStore: {
@@ -236,6 +235,8 @@ export default defineComponent({
236
235
  treeExpandedFlag: 1,
237
236
  updateCheckboxFlag: 1,
238
237
  pendingRowFlag: 1,
238
+ insertRowFlag: 1,
239
+ removeRowFlag: 1,
239
240
  rowHeightStore: {
240
241
  default: 48,
241
242
  medium: 44,
@@ -335,7 +336,6 @@ export default defineComponent({
335
336
  fullDataRowIdData: {},
336
337
  fullColumnIdData: {},
337
338
  fullColumnFieldData: {},
338
- // prevDragRow: null,
339
339
  // 已展开的行集合
340
340
  rowExpandedMaps: {},
341
341
  // 懒加载中的展开行的集合
@@ -348,6 +348,10 @@ export default defineComponent({
348
348
  selectCheckboxMaps: {},
349
349
  // 已标记的对象集
350
350
  pendingRowMaps: {},
351
+ // 已新增的临时行
352
+ insertRowMaps: {},
353
+ // 已删除行
354
+ removeRowMaps: {},
351
355
  inited: false,
352
356
  tooltipTimeout: null,
353
357
  initStatus: false,
@@ -418,8 +422,8 @@ export default defineComponent({
418
422
  return virtualXOpts;
419
423
  });
420
424
  const computeScrollXThreshold = computed(() => {
421
- const sXOpts = computeSXOpts.value;
422
- const { threshold } = sXOpts;
425
+ const virtualXOpts = computeVirtualXOpts.value;
426
+ const { threshold } = virtualXOpts;
423
427
  if (threshold) {
424
428
  return XEUtils.toNumber(threshold);
425
429
  }
@@ -450,8 +454,8 @@ export default defineComponent({
450
454
  return !!(scrollbarOpts.y && scrollbarOpts.y.position === 'left');
451
455
  });
452
456
  const computeScrollYThreshold = computed(() => {
453
- const sYOpts = computeSYOpts.value;
454
- const { threshold } = sYOpts;
457
+ const virtualYOpts = computeVirtualYOpts.value;
458
+ const { threshold } = virtualYOpts;
455
459
  if (threshold) {
456
460
  return XEUtils.toNumber(threshold);
457
461
  }
@@ -1020,14 +1024,14 @@ export default defineComponent({
1020
1024
  };
1021
1025
  const setMerges = (merges, mList, rowList) => {
1022
1026
  if (merges) {
1023
- const { treeConfig } = props;
1027
+ // const { treeConfig } = props
1024
1028
  const { visibleColumn } = internalData;
1025
1029
  if (!XEUtils.isArray(merges)) {
1026
1030
  merges = [merges];
1027
1031
  }
1028
- if (treeConfig && merges.length) {
1029
- errLog('vxe.error.noTree', ['merge-cells | merge-footer-items']);
1030
- }
1032
+ // if (treeConfig && merges.length) {
1033
+ // errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1034
+ // }
1031
1035
  merges.forEach((item) => {
1032
1036
  let { row, col, rowspan, colspan } = item;
1033
1037
  if (rowList && XEUtils.isNumber(row)) {
@@ -1070,14 +1074,14 @@ export default defineComponent({
1070
1074
  const removeMerges = (merges, mList, rowList) => {
1071
1075
  const rest = [];
1072
1076
  if (merges) {
1073
- const { treeConfig } = props;
1077
+ // const { treeConfig } = props
1074
1078
  const { visibleColumn } = internalData;
1075
1079
  if (!XEUtils.isArray(merges)) {
1076
1080
  merges = [merges];
1077
1081
  }
1078
- if (treeConfig && merges.length) {
1079
- errLog('vxe.error.noTree', ['merge-cells | merge-footer-items']);
1080
- }
1082
+ // if (treeConfig && merges.length) {
1083
+ // errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1084
+ // }
1081
1085
  merges.forEach((item) => {
1082
1086
  let { row, col } = item;
1083
1087
  if (rowList && XEUtils.isNumber(row)) {
@@ -1776,7 +1780,7 @@ export default defineComponent({
1776
1780
  updateAfterDataIndex();
1777
1781
  };
1778
1782
  const updateStyle = () => {
1779
- const { border, showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props;
1783
+ const { showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props;
1780
1784
  const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn } = reactData;
1781
1785
  const { visibleColumn, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData;
1782
1786
  const el = refElem.value;
@@ -1929,32 +1933,6 @@ export default defineComponent({
1929
1933
  if (tableElem) {
1930
1934
  tableElem.style.width = tWidth ? `${tWidth}px` : '';
1931
1935
  }
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
1936
  }
1959
1937
  else if (layout === 'body') {
1960
1938
  if (currScrollElem) {
@@ -2003,7 +1981,7 @@ export default defineComponent({
2003
1981
  if (tableElem) {
2004
1982
  tableElem.style.width = tWidth ? `${tWidth}px` : '';
2005
1983
  // 兼容性处理
2006
- tableElem.style.paddingRight = osbWidth && fixedType && (browse['-moz'] || browse.safari) ? `${osbWidth}px` : '';
1984
+ tableElem.style.paddingRight = osbWidth && fixedType && (browseObj['-moz'] || browseObj.safari) ? `${osbWidth}px` : '';
2007
1985
  }
2008
1986
  const emptyBlockElem = getRefElem(elemStore[`${name}-${layout}-emptyBlock`]);
2009
1987
  if (emptyBlockElem) {
@@ -2096,7 +2074,7 @@ export default defineComponent({
2096
2074
  (sortConfig.multiple ? defaultSort : defaultSort.slice(0, 1)).forEach((item, index) => {
2097
2075
  const { field, order } = item;
2098
2076
  if (field && order) {
2099
- const column = tableMethods.getColumnByField(field);
2077
+ const column = $xeTable.getColumnByField(field);
2100
2078
  if (column && column.sortable) {
2101
2079
  column.order = order;
2102
2080
  column.sortTime = Date.now() + index;
@@ -2104,7 +2082,7 @@ export default defineComponent({
2104
2082
  }
2105
2083
  });
2106
2084
  if (!sortOpts.remote) {
2107
- tablePrivateMethods.handleTableData(true).then(updateStyle);
2085
+ $xeTable.handleTableData(true).then(updateStyle);
2108
2086
  }
2109
2087
  }
2110
2088
  }
@@ -2163,7 +2141,7 @@ export default defineComponent({
2163
2141
  const expandOpts = computeExpandOpts.value;
2164
2142
  const { expandAll, expandRowKeys } = expandOpts;
2165
2143
  if (expandAll) {
2166
- tableMethods.setAllRowExpand(true);
2144
+ $xeTable.setAllRowExpand(true);
2167
2145
  }
2168
2146
  else if (expandRowKeys) {
2169
2147
  const defExpandeds = [];
@@ -2172,7 +2150,7 @@ export default defineComponent({
2172
2150
  defExpandeds.push(fullDataRowIdData[rowid].row);
2173
2151
  }
2174
2152
  });
2175
- tableMethods.setRowExpand(defExpandeds, true);
2153
+ $xeTable.setRowExpand(defExpandeds, true);
2176
2154
  }
2177
2155
  }
2178
2156
  };
@@ -2533,13 +2511,13 @@ export default defineComponent({
2533
2511
  const handleDefaultMergeCells = () => {
2534
2512
  const { mergeCells } = props;
2535
2513
  if (mergeCells) {
2536
- tableMethods.setMergeCells(mergeCells);
2514
+ $xeTable.setMergeCells(mergeCells);
2537
2515
  }
2538
2516
  };
2539
2517
  const handleDefaultMergeFooterItems = () => {
2540
2518
  const { mergeFooterItems } = props;
2541
2519
  if (mergeFooterItems) {
2542
- tableMethods.setMergeFooterItems(mergeFooterItems);
2520
+ $xeTable.setMergeFooterItems(mergeFooterItems);
2543
2521
  }
2544
2522
  };
2545
2523
  // 计算可视渲染相关数据
@@ -2629,7 +2607,7 @@ export default defineComponent({
2629
2607
  */
2630
2608
  const loadTableData = (datas, isReset) => {
2631
2609
  const { keepSource, treeConfig } = props;
2632
- const { editStore, scrollYLoad: oldScrollYLoad } = reactData;
2610
+ const { scrollYLoad: oldScrollYLoad } = reactData;
2633
2611
  const { scrollYStore, scrollXStore, lastScrollLeft, lastScrollTop } = internalData;
2634
2612
  const treeOpts = computeTreeOpts.value;
2635
2613
  const { transform } = treeOpts;
@@ -2680,8 +2658,8 @@ export default defineComponent({
2680
2658
  scrollXStore.endIndex = 1;
2681
2659
  reactData.isRowLoading = true;
2682
2660
  reactData.scrollVMLoading = false;
2683
- editStore.insertMaps = {};
2684
- editStore.removeMaps = {};
2661
+ internalData.insertRowMaps = {};
2662
+ internalData.removeRowMaps = {};
2685
2663
  const sYLoad = updateScrollYStatus(fullData);
2686
2664
  reactData.isDragColMove = false;
2687
2665
  reactData.isDragRowMove = false;
@@ -2703,10 +2681,10 @@ export default defineComponent({
2703
2681
  $xeTable.clearCellAreas();
2704
2682
  $xeTable.clearCopyCellArea();
2705
2683
  }
2706
- tableMethods.clearMergeCells();
2707
- tableMethods.clearMergeFooterItems();
2708
- tablePrivateMethods.handleTableData(true);
2709
- tableMethods.updateFooter();
2684
+ $xeTable.clearMergeCells();
2685
+ $xeTable.clearMergeFooterItems();
2686
+ $xeTable.handleTableData(true);
2687
+ $xeTable.updateFooter();
2710
2688
  return nextTick().then(() => {
2711
2689
  updateHeight();
2712
2690
  updateStyle();
@@ -2737,20 +2715,20 @@ export default defineComponent({
2737
2715
  }
2738
2716
  }
2739
2717
  handleReserveStatus();
2740
- tablePrivateMethods.checkSelectionStatus();
2718
+ $xeTable.checkSelectionStatus();
2741
2719
  return new Promise(resolve => {
2742
2720
  nextTick()
2743
- .then(() => tableMethods.recalculate())
2721
+ .then(() => $xeTable.recalculate())
2744
2722
  .then(() => {
2745
2723
  let targetScrollLeft = lastScrollLeft;
2746
2724
  let targetScrollTop = lastScrollTop;
2747
- const sXOpts = computeSXOpts.value;
2748
- const sYOpts = computeSYOpts.value;
2725
+ const virtualXOpts = computeVirtualXOpts.value;
2726
+ const virtualYOpts = computeVirtualYOpts.value;
2749
2727
  // 是否在更新数据之后自动滚动重置滚动条
2750
- if (sXOpts.scrollToLeftOnChange) {
2728
+ if (virtualXOpts.scrollToLeftOnChange) {
2751
2729
  targetScrollLeft = 0;
2752
2730
  }
2753
- if (sYOpts.scrollToTopOnChange) {
2731
+ if (virtualYOpts.scrollToTopOnChange) {
2754
2732
  targetScrollTop = 0;
2755
2733
  }
2756
2734
  reactData.isRowLoading = false;
@@ -2786,7 +2764,7 @@ export default defineComponent({
2786
2764
  handleDefaultTreeExpand();
2787
2765
  handleDefaultMergeCells();
2788
2766
  handleDefaultMergeFooterItems();
2789
- nextTick(() => setTimeout(() => tableMethods.recalculate()));
2767
+ nextTick(() => setTimeout(() => $xeTable.recalculate()));
2790
2768
  };
2791
2769
  /**
2792
2770
  * 处理初始化的默认行为
@@ -2852,7 +2830,7 @@ export default defineComponent({
2852
2830
  const centerList = [];
2853
2831
  const rightList = [];
2854
2832
  const { isGroup, columnStore } = reactData;
2855
- const sXOpts = computeSXOpts.value;
2833
+ const virtualXOpts = computeVirtualXOpts.value;
2856
2834
  const { collectColumn, tableFullColumn, scrollXStore, fullColumnIdData } = internalData;
2857
2835
  // 如果是分组表头,如果子列全部被隐藏,则根列也隐藏
2858
2836
  if (isGroup) {
@@ -2916,7 +2894,7 @@ export default defineComponent({
2916
2894
  }
2917
2895
  const visibleColumn = leftList.concat(centerList).concat(rightList);
2918
2896
  // 如果gt为0,则总是启用
2919
- const scrollXLoad = !!sXOpts.enabled && sXOpts.gt > -1 && (sXOpts.gt === 0 || sXOpts.gt < tableFullColumn.length);
2897
+ const scrollXLoad = !!virtualXOpts.enabled && virtualXOpts.gt > -1 && (virtualXOpts.gt === 0 || virtualXOpts.gt < tableFullColumn.length);
2920
2898
  reactData.hasFixedColumn = leftList.length > 0 || rightList.length > 0;
2921
2899
  Object.assign(columnStore, { leftList, centerList, rightList });
2922
2900
  if (scrollXLoad) {
@@ -3025,12 +3003,12 @@ export default defineComponent({
3025
3003
  };
3026
3004
  const updateScrollYStatus = (fullData) => {
3027
3005
  const { treeConfig } = props;
3028
- const sYOpts = computeSYOpts.value;
3006
+ const virtualYOpts = computeVirtualYOpts.value;
3029
3007
  const treeOpts = computeTreeOpts.value;
3030
3008
  const { transform } = treeOpts;
3031
3009
  const allList = fullData || internalData.tableFullData;
3032
3010
  // 如果gt为0,则总是启用
3033
- const scrollYLoad = (transform || !treeConfig) && !!sYOpts.enabled && sYOpts.gt > -1 && (sYOpts.gt === 0 || sYOpts.gt < allList.length);
3011
+ const scrollYLoad = (transform || !treeConfig) && !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt < allList.length);
3034
3012
  reactData.scrollYLoad = scrollYLoad;
3035
3013
  return scrollYLoad;
3036
3014
  };
@@ -3732,9 +3710,7 @@ export default defineComponent({
3732
3710
  */
3733
3711
  revertData(rows, field) {
3734
3712
  const { keepSource, treeConfig } = props;
3735
- const { editStore } = reactData;
3736
- const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
3737
- const removeTempMaps = Object.assign({}, editStore.removeMaps);
3713
+ const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData, removeRowMaps } = internalData;
3738
3714
  const treeOpts = computeTreeOpts.value;
3739
3715
  const { transform } = treeOpts;
3740
3716
  const { handleGetRowId } = createHandleGetRowId($xeTable);
@@ -3770,7 +3746,9 @@ export default defineComponent({
3770
3746
  XEUtils.destructuring(row, XEUtils.clone(oRow, true));
3771
3747
  }
3772
3748
  if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
3773
- delete removeTempMaps[rowid];
3749
+ if (removeRowMaps[rowid]) {
3750
+ delete removeRowMaps[rowid];
3751
+ }
3774
3752
  tableFullData.unshift(row);
3775
3753
  afterFullData.unshift(row);
3776
3754
  reDelFlag = true;
@@ -3782,7 +3760,7 @@ export default defineComponent({
3782
3760
  }
3783
3761
  if (rows) {
3784
3762
  if (reDelFlag) {
3785
- editStore.removeMaps = removeTempMaps;
3763
+ reactData.removeRowFlag++;
3786
3764
  $xeTable.updateFooter();
3787
3765
  $xeTable.cacheRowMap(false);
3788
3766
  $xeTable.handleTableData(treeConfig && transform);
@@ -3915,22 +3893,19 @@ export default defineComponent({
3915
3893
  * @param {Row} row 行对象
3916
3894
  */
3917
3895
  isInsertByRow(row) {
3918
- const { editStore } = reactData;
3919
3896
  const rowid = getRowid($xeTable, row);
3920
- return !!editStore.insertMaps[rowid];
3897
+ return !!reactData.insertRowFlag && !!internalData.insertRowMaps[rowid];
3921
3898
  },
3922
3899
  isRemoveByRow(row) {
3923
- const { editStore } = reactData;
3924
3900
  const rowid = getRowid($xeTable, row);
3925
- return !!editStore.removeMaps[rowid];
3901
+ return !!reactData.removeRowFlag && !!internalData.removeRowMaps[rowid];
3926
3902
  },
3927
3903
  /**
3928
3904
  * 删除所有新增的临时数据
3929
3905
  * @returns
3930
3906
  */
3931
3907
  removeInsertRow() {
3932
- const { editStore } = reactData;
3933
- editStore.insertMaps = {};
3908
+ internalData.insertRowMaps = {};
3934
3909
  return $xeTable.remove($xeTable.getInsertRecords());
3935
3910
  },
3936
3911
  /**
@@ -3969,8 +3944,8 @@ export default defineComponent({
3969
3944
  * @param {Number} columnIndex 索引
3970
3945
  */
3971
3946
  getColumns(columnIndex) {
3972
- const columns = internalData.visibleColumn;
3973
- return XEUtils.isUndefined(columnIndex) ? columns.slice(0) : columns[columnIndex];
3947
+ const { visibleColumn } = internalData;
3948
+ return XEUtils.isUndefined(columnIndex) ? visibleColumn.slice(0) : visibleColumn[columnIndex];
3974
3949
  },
3975
3950
  /**
3976
3951
  * 根据列获取列的唯一主键
@@ -3984,7 +3959,7 @@ export default defineComponent({
3984
3959
  * @param {String} colid 列主键
3985
3960
  */
3986
3961
  getColumnById(colid) {
3987
- const fullColumnIdData = internalData.fullColumnIdData;
3962
+ const { fullColumnIdData } = internalData;
3988
3963
  return colid && fullColumnIdData[colid] ? fullColumnIdData[colid].column : null;
3989
3964
  },
3990
3965
  /**
@@ -3996,7 +3971,7 @@ export default defineComponent({
3996
3971
  return field && fullColumnFieldData[field] ? fullColumnFieldData[field].column : null;
3997
3972
  },
3998
3973
  getParentColumn(fieldOrColumn) {
3999
- const fullColumnIdData = internalData.fullColumnIdData;
3974
+ const { fullColumnIdData } = internalData;
4000
3975
  const column = handleFieldOrColumn($xeTable, fieldOrColumn);
4001
3976
  return column && column.parentId && fullColumnIdData[column.parentId] ? fullColumnIdData[column.parentId].column : null;
4002
3977
  },
@@ -6682,7 +6657,7 @@ export default defineComponent({
6682
6657
  * @param {Event} evnt 事件
6683
6658
  * @param {Row} row 行对象
6684
6659
  */
6685
- const handleTooltip = (evnt, tdEl, overflowElem, params) => {
6660
+ const handleTooltip = (evnt, tdEl, overflowElem, tipElem, params) => {
6686
6661
  const tipOverEl = overflowElem || tdEl;
6687
6662
  if (!tipOverEl) {
6688
6663
  return nextTick();
@@ -6695,7 +6670,8 @@ export default defineComponent({
6695
6670
  const customContent = contentMethod ? contentMethod(params) : null;
6696
6671
  const useCustom = contentMethod && !XEUtils.eqNull(customContent);
6697
6672
  const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? tipOverEl.innerText : tipOverEl.textContent).trim();
6698
- if (content && (showAll || useCustom || (tipOverEl.scrollWidth > tipOverEl.clientWidth))) {
6673
+ const isOver = tipOverEl.scrollWidth > tipOverEl.clientWidth;
6674
+ if (content && (showAll || useCustom || isOver)) {
6699
6675
  Object.assign(tooltipStore, {
6700
6676
  row,
6701
6677
  column,
@@ -6705,7 +6681,7 @@ export default defineComponent({
6705
6681
  nextTick(() => {
6706
6682
  const $tooltip = refTooltip.value;
6707
6683
  if ($tooltip && $tooltip.open) {
6708
- $tooltip.open(tipOverEl, formatText(content));
6684
+ $tooltip.open(isOver ? tipOverEl : tipElem, formatText(content));
6709
6685
  }
6710
6686
  });
6711
6687
  }
@@ -7672,7 +7648,7 @@ export default defineComponent({
7672
7648
  return;
7673
7649
  }
7674
7650
  if (tooltipStore.column !== column || !tooltipStore.visible) {
7675
- handleTooltip(evnt, thEl, thEl.querySelector('.vxe-cell--title') || cellEl, params);
7651
+ handleTooltip(evnt, thEl, thEl.querySelector('.vxe-cell--wrapper'), thEl.querySelector('.vxe-cell--title') || cellEl, params);
7676
7652
  }
7677
7653
  },
7678
7654
  /**
@@ -7699,7 +7675,7 @@ export default defineComponent({
7699
7675
  }
7700
7676
  }
7701
7677
  if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
7702
- handleTooltip(evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
7678
+ handleTooltip(evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper'), tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
7703
7679
  }
7704
7680
  },
7705
7681
  /**
@@ -7711,7 +7687,7 @@ export default defineComponent({
7711
7687
  const tdEl = evnt.currentTarget;
7712
7688
  handleTargetEnterEvent(tooltipStore.column !== column || !!tooltipStore.row);
7713
7689
  if (tooltipStore.column !== column || !tooltipStore.visible) {
7714
- handleTooltip(evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
7690
+ handleTooltip(evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper'), tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
7715
7691
  }
7716
7692
  },
7717
7693
  handleTargetLeaveEvent() {
@@ -8884,8 +8860,8 @@ export default defineComponent({
8884
8860
  * 横向 X 可视渲染事件处理
8885
8861
  */
8886
8862
  triggerScrollXEvent() {
8887
- const sXOpts = computeSXOpts.value;
8888
- if (sXOpts.immediate) {
8863
+ const virtualXOpts = computeVirtualXOpts.value;
8864
+ if (virtualXOpts.immediate) {
8889
8865
  loadScrollXData();
8890
8866
  }
8891
8867
  else {
@@ -8896,8 +8872,8 @@ export default defineComponent({
8896
8872
  * 纵向 Y 可视渲染事件处理
8897
8873
  */
8898
8874
  triggerScrollYEvent() {
8899
- const sYOpts = computeSYOpts.value;
8900
- if (sYOpts.immediate) {
8875
+ const virtualYOpts = computeVirtualYOpts.value;
8876
+ if (virtualYOpts.immediate) {
8901
8877
  loadScrollYData();
8902
8878
  }
8903
8879
  else {
@@ -9093,8 +9069,8 @@ export default defineComponent({
9093
9069
  return;
9094
9070
  }
9095
9071
  const wheelSpeed = getWheelSpeed(reactData.lastScrollTime);
9096
- const deltaTop = Math.ceil((shiftKey ? deltaX : deltaY) * wheelSpeed);
9097
- const deltaLeft = Math.ceil((shiftKey ? deltaY : deltaX) * wheelSpeed);
9072
+ const deltaTop = shiftKey ? 0 : Math.ceil(deltaY * wheelSpeed);
9073
+ const deltaLeft = shiftKey ? Math.ceil((shiftKey ? (deltaY || deltaX) : deltaX) * wheelSpeed) : 0;
9098
9074
  const isTopWheel = deltaTop < 0;
9099
9075
  const currScrollTop = bodyScrollElem.scrollTop;
9100
9076
  // 如果滚动位置已经是顶部或底部,则不需要触发
@@ -9113,6 +9089,7 @@ export default defineComponent({
9113
9089
  evnt.preventDefault();
9114
9090
  internalData.inWheelScroll = true;
9115
9091
  wheelScrollLeftTo(scrollLeft, (offsetLeft) => {
9092
+ internalData.inWheelScroll = true;
9116
9093
  const currLeftNum = offsetLeft;
9117
9094
  setScrollLeft(xHandleEl, currLeftNum);
9118
9095
  setScrollLeft(bodyScrollElem, currLeftNum);
@@ -9129,9 +9106,10 @@ export default defineComponent({
9129
9106
  }
9130
9107
  if (isRollY) {
9131
9108
  evnt.preventDefault();
9109
+ internalData.inWheelScroll = true;
9132
9110
  wheelScrollTopTo(scrollTop - currScrollTop, (offsetTop) => {
9133
- const currTopNum = bodyScrollElem.scrollTop + offsetTop;
9134
9111
  internalData.inWheelScroll = true;
9112
+ const currTopNum = bodyScrollElem.scrollTop + offsetTop;
9135
9113
  setScrollTop(yHandleEl, currTopNum);
9136
9114
  setScrollTop(bodyScrollElem, currTopNum);
9137
9115
  setScrollTop(leftScrollElem, currTopNum);
@@ -10188,6 +10166,9 @@ export default defineComponent({
10188
10166
  watch(computeScrollbarYToLeft, () => {
10189
10167
  reLayoutFlag.value++;
10190
10168
  });
10169
+ watch(() => VxeUI.getLanguage(), () => {
10170
+ reLayoutFlag.value++;
10171
+ });
10191
10172
  watch(reLayoutFlag, () => {
10192
10173
  nextTick(() => tableMethods.recalculate(true));
10193
10174
  });
@@ -10274,7 +10255,6 @@ export default defineComponent({
10274
10255
  nextTick(() => {
10275
10256
  const { data, exportConfig, importConfig, treeConfig, showOverflow } = props;
10276
10257
  const { scrollXStore, scrollYStore } = internalData;
10277
- const sYOpts = computeSYOpts.value;
10278
10258
  const editOpts = computeEditOpts.value;
10279
10259
  const treeOpts = computeTreeOpts.value;
10280
10260
  const radioOpts = computeRadioOpts.value;
@@ -10400,8 +10380,7 @@ export default defineComponent({
10400
10380
  Object.assign(scrollYStore, {
10401
10381
  startIndex: 0,
10402
10382
  endIndex: 0,
10403
- visibleSize: 0,
10404
- adaptive: sYOpts.adaptive !== false
10383
+ visibleSize: 0
10405
10384
  });
10406
10385
  Object.assign(scrollXStore, {
10407
10386
  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.2";
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/dom.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import XEUtils from 'xe-utils';
2
2
  const reClsMap = {};
3
- export const browse = XEUtils.browse();
4
3
  let tpImgEl;
5
4
  export function initTpImg() {
6
5
  if (!tpImgEl) {
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.2"}`;
4
4
  export const warnLog = log.create('warn', version);
5
5
  export const errLog = log.create('error', version);