vxe-table 4.23.0-beta.3 → 4.23.0-beta.5

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 (56) hide show
  1. package/dist/all.esm.js +125 -268
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/grid/src/grid.js +3 -0
  5. package/es/index.css +1 -1
  6. package/es/index.min.css +1 -1
  7. package/es/style.css +1 -1
  8. package/es/style.min.css +1 -1
  9. package/es/table/module/filter/hook.js +4 -7
  10. package/es/table/module/filter/panel.js +42 -46
  11. package/es/table/src/table.js +74 -212
  12. package/es/table/src/util.js +1 -2
  13. package/es/table/style.css +31 -12
  14. package/es/table/style.min.css +1 -1
  15. package/es/ui/index.js +2 -2
  16. package/es/ui/src/log.js +1 -1
  17. package/es/vxe-table/style.css +31 -12
  18. package/es/vxe-table/style.min.css +1 -1
  19. package/lib/grid/src/grid.js +5 -0
  20. package/lib/grid/src/grid.min.js +1 -1
  21. package/lib/index.css +1 -1
  22. package/lib/index.min.css +1 -1
  23. package/lib/index.umd.js +65 -66
  24. package/lib/index.umd.min.js +1 -1
  25. package/lib/style.css +1 -1
  26. package/lib/style.min.css +1 -1
  27. package/lib/table/module/filter/hook.js +5 -7
  28. package/lib/table/module/filter/hook.min.js +1 -1
  29. package/lib/table/module/filter/panel.js +34 -33
  30. package/lib/table/module/filter/panel.min.js +1 -1
  31. package/lib/table/src/table.js +17 -21
  32. package/lib/table/src/table.min.js +1 -1
  33. package/lib/table/src/util.js +1 -2
  34. package/lib/table/src/util.min.js +1 -1
  35. package/lib/table/style/style.css +31 -12
  36. package/lib/table/style/style.min.css +1 -1
  37. package/lib/ui/index.js +2 -2
  38. package/lib/ui/index.min.js +1 -1
  39. package/lib/ui/src/log.js +1 -1
  40. package/lib/ui/src/log.min.js +1 -1
  41. package/lib/vxe-table/style/style.css +31 -12
  42. package/lib/vxe-table/style/style.min.css +1 -1
  43. package/package.json +2 -2
  44. package/packages/grid/src/grid.ts +3 -0
  45. package/packages/table/module/filter/hook.ts +4 -7
  46. package/packages/table/module/filter/panel.ts +45 -46
  47. package/packages/table/src/table.ts +89 -234
  48. package/packages/table/src/util.ts +1 -2
  49. package/packages/ui/index.ts +1 -1
  50. package/styles/components/table-module/filter.scss +25 -14
  51. /package/es/{iconfont.1792117711657.ttf → iconfont.1792220287498.ttf} +0 -0
  52. /package/es/{iconfont.1792117711657.woff → iconfont.1792220287498.woff} +0 -0
  53. /package/es/{iconfont.1792117711657.woff2 → iconfont.1792220287498.woff2} +0 -0
  54. /package/lib/{iconfont.1792117711657.ttf → iconfont.1792220287498.ttf} +0 -0
  55. /package/lib/{iconfont.1792117711657.woff → iconfont.1792220287498.woff} +0 -0
  56. /package/lib/{iconfont.1792117711657.woff2 → iconfont.1792220287498.woff2} +0 -0
package/dist/all.esm.js CHANGED
@@ -56,7 +56,7 @@ function getDefaultConfig(val1, def1) {
56
56
  return XEUtils.eqNull(val1) ? def1 : val1;
57
57
  }
58
58
 
59
- const version = "4.23.0-beta.3";
59
+ const version = "4.23.0-beta.5";
60
60
  VxeUI.version = version;
61
61
  VxeUI.tableVersion = version;
62
62
  VxeUI.setConfig({
@@ -219,7 +219,7 @@ VxeUI.setConfig({
219
219
  destroyOnClose: true,
220
220
  multiple: true,
221
221
  showIcon: true,
222
- maxHeight: 280
222
+ maxHeight: 320
223
223
  },
224
224
  floatingFilterConfig: {
225
225
  // enabled: false
@@ -952,7 +952,7 @@ function getPopupAppendElement(appendTo) {
952
952
  }
953
953
 
954
954
  const { log } = VxeUI;
955
- const tableVersion = `table v${"4.23.0-beta.3"}`;
955
+ const tableVersion = `table v${"4.23.0-beta.5"}`;
956
956
  function createComponentLog(name) {
957
957
  const uiVersion = VxeUI.uiVersion ? `ui v${VxeUI.uiVersion}` : '';
958
958
  const ganttVersion = VxeUI.ganttVersion ? `gantt v${VxeUI.ganttVersion}` : '';
@@ -1406,8 +1406,7 @@ function createReactData$2() {
1406
1406
  isIndeterminate: false,
1407
1407
  style: null,
1408
1408
  column: null,
1409
- visible: false,
1410
- maxHeight: null
1409
+ visible: false
1411
1410
  },
1412
1411
  // 存放列相关的信息
1413
1412
  columnStore: {
@@ -7670,6 +7669,7 @@ var TableFilterPanelComponent = defineVxeComponent({
7670
7669
  },
7671
7670
  setup(props, context) {
7672
7671
  const xID = XEUtils.uniqueId();
7672
+ const VxeUIScrollbarComponent = VxeUI.getComponent('VxeScrollbar');
7673
7673
  const $xeTable = inject('$xeTable', {});
7674
7674
  const { reactData: tableReactData, internalData: tableInternalData, getComputeMaps } = $xeTable;
7675
7675
  const { computeFilterOpts, computeRendererOpts } = getComputeMaps();
@@ -7757,10 +7757,12 @@ var TableFilterPanelComponent = defineVxeComponent({
7757
7757
  Object.assign($xeFilterPanel, filterPanelMethods);
7758
7758
  const renderOptions = (filterRender, compConf) => {
7759
7759
  const { filterStore } = props;
7760
- const { column, maxHeight } = filterStore;
7760
+ const { column } = filterStore;
7761
7761
  if (!column) {
7762
7762
  return [];
7763
7763
  }
7764
+ const filterOpts = computeFilterOpts.value;
7765
+ const { useScrollbar } = filterOpts;
7764
7766
  const { filterMultiple, filters, slots } = column;
7765
7767
  const filterOptions = (filters || []);
7766
7768
  const filterSlot = slots ? slots.filter : null;
@@ -7769,34 +7771,46 @@ var TableFilterPanelComponent = defineVxeComponent({
7769
7771
  if (filterSlot) {
7770
7772
  return [
7771
7773
  h('div', {
7772
- class: 'vxe-table--filter-template',
7773
- style: maxHeight
7774
- ? {
7775
- maxHeight: toCssUnit(maxHeight)
7776
- }
7777
- : {}
7774
+ class: 'vxe-table--filter-template'
7778
7775
  }, $xeTable.callSlot(filterSlot, params))
7779
7776
  ];
7780
7777
  }
7781
7778
  else if (filterRender && rtFilter) {
7782
7779
  return [
7783
7780
  h('div', {
7784
- class: 'vxe-table--filter-template',
7785
- style: maxHeight
7786
- ? {
7787
- maxHeight: toCssUnit(maxHeight)
7788
- }
7789
- : {}
7781
+ class: 'vxe-table--filter-template'
7790
7782
  }, getSlotVNs(rtFilter(filterRender, params)))
7791
7783
  ];
7792
7784
  }
7793
7785
  const isAllChecked = filterMultiple ? filterStore.isAllSelected : !filterOptions.some((item) => item._checked);
7794
7786
  const isAllIndeterminate = filterMultiple && filterStore.isIndeterminate;
7787
+ const optVNs = filterOptions.map((item) => {
7788
+ const isChecked = item._checked;
7789
+ return h('div', {
7790
+ class: ['vxe-table--filter-option', {
7791
+ 'is--checked': item._checked
7792
+ }],
7793
+ title: item.label,
7794
+ onClick: (evnt) => {
7795
+ changeOption(evnt, !item._checked, item);
7796
+ }
7797
+ }, (filterMultiple
7798
+ ? [
7799
+ h('span', {
7800
+ class: ['vxe-checkbox--icon', (isChecked ? getIcon$5().TABLE_CHECKBOX_CHECKED : getIcon$5().TABLE_CHECKBOX_UNCHECKED)]
7801
+ })
7802
+ ]
7803
+ : []).concat([
7804
+ h('span', {
7805
+ class: 'vxe-checkbox--label'
7806
+ }, formatText(item.label, 1))
7807
+ ]));
7808
+ });
7795
7809
  return [
7796
- h('ul', {
7810
+ h('div', {
7797
7811
  class: 'vxe-table--filter-header'
7798
7812
  }, [
7799
- h('li', {
7813
+ h('div', {
7800
7814
  class: ['vxe-table--filter-option', {
7801
7815
  'is--checked': isAllChecked,
7802
7816
  'is--indeterminate': isAllIndeterminate
@@ -7817,35 +7831,16 @@ var TableFilterPanelComponent = defineVxeComponent({
7817
7831
  }, getI18n$9('vxe.table.allFilter'))
7818
7832
  ]))
7819
7833
  ]),
7820
- h('ul', {
7821
- class: 'vxe-table--filter-body',
7822
- style: maxHeight
7823
- ? {
7824
- maxHeight: toCssUnit(maxHeight)
7825
- }
7826
- : {}
7827
- }, filterOptions.map((item) => {
7828
- const isChecked = item._checked;
7829
- return h('li', {
7830
- class: ['vxe-table--filter-option', {
7831
- 'is--checked': item._checked
7832
- }],
7833
- title: item.label,
7834
- onClick: (evnt) => {
7835
- changeOption(evnt, !item._checked, item);
7836
- }
7837
- }, (filterMultiple
7838
- ? [
7839
- h('span', {
7840
- class: ['vxe-checkbox--icon', (isChecked ? getIcon$5().TABLE_CHECKBOX_CHECKED : getIcon$5().TABLE_CHECKBOX_UNCHECKED)]
7841
- })
7842
- ]
7843
- : []).concat([
7844
- h('span', {
7845
- class: 'vxe-checkbox--label'
7846
- }, formatText(item.label, 1))
7847
- ]));
7848
- }))
7834
+ useScrollbar
7835
+ ? h(VxeUIScrollbarComponent, {
7836
+ class: 'vxe-table--scrollbar-filter-body',
7837
+ viewClassName: 'vxe-table--scrollbar-filter-body-view'
7838
+ }, {
7839
+ default: () => optVNs
7840
+ })
7841
+ : h('div', {
7842
+ class: 'vxe-table--filter-body'
7843
+ }, optVNs)
7849
7844
  ];
7850
7845
  };
7851
7846
  const renderFooters = () => {
@@ -8955,7 +8950,7 @@ hooks$7.add('tableFilterModule', {
8955
8950
  const { refElem, refTableFilter } = $xeTable.getRefMaps();
8956
8951
  const { computeFilterOpts, computeMouseOpts, computeRendererOpts } = $xeTable.getComputeMaps();
8957
8952
  const updatePopupStyle = () => {
8958
- const { filterStore } = reactData;
8953
+ const { filterStore, scrollbarHeight } = reactData;
8959
8954
  const { elemStore } = internalData;
8960
8955
  const { column, targetEl } = filterStore;
8961
8956
  if (!column) {
@@ -8976,8 +8971,6 @@ hooks$7.add('tableFilterModule', {
8976
8971
  if (!filterWrapperElem) {
8977
8972
  return nextTick();
8978
8973
  }
8979
- const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
8980
- const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
8981
8974
  /**
8982
8975
  * 是否显示筛选按钮图标
8983
8976
  * 如果不存在图标,则相对单元格居中显示
@@ -9014,7 +9007,7 @@ hooks$7.add('tableFilterModule', {
9014
9007
  const centerWidth = targetEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
9015
9008
  left = btnRect.left - tableRect.left - centerWidth;
9016
9009
  top = btnRect.top - tableRect.top + currEl.clientHeight;
9017
- maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
9010
+ maxHeight = Math.max(40, tableEl.clientHeight - top - scrollbarHeight);
9018
9011
  if (left < 1) {
9019
9012
  left = 1;
9020
9013
  }
@@ -9036,7 +9029,6 @@ hooks$7.add('tableFilterModule', {
9036
9029
  if (zIndex) {
9037
9030
  panelStyle.zIndex = zIndex;
9038
9031
  }
9039
- filterStore.style = panelStyle;
9040
9032
  // 筛选面板是自适应表格高度
9041
9033
  if (compConf ? !compConf.tableFilterAutoHeight : false) {
9042
9034
  maxHeight = 0;
@@ -9046,8 +9038,8 @@ hooks$7.add('tableFilterModule', {
9046
9038
  maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
9047
9039
  }
9048
9040
  }
9049
- // 判断面板不能大于表格高度
9050
- filterStore.maxHeight = maxHeight;
9041
+ panelStyle['--vxe-ui-vxe-table-filter-default-max-height'] = maxHeight ? toCssUnit(maxHeight) : 'none';
9042
+ filterStore.style = panelStyle;
9051
9043
  };
9052
9044
  handleStyle();
9053
9045
  return nextTick().then(() => {
@@ -16003,8 +15995,7 @@ renderer$2.mixin({
16003
15995
  });
16004
15996
 
16005
15997
  const { warnLog: warnLog$2, errLog: errLog$2 } = createComponentLog('table');
16006
- const { getConfig: getConfig$2, getIcon: getIcon$1, getI18n: getI18n$2, renderer: renderer$1, formats, scrollbarUtils, createEvent: createEvent$2, globalResize, interceptor, hooks: hooks$1, domUtils, globalEvents: globalEvents$1, GLOBAL_EVENT_KEYS: GLOBAL_EVENT_KEYS$1, useFns: useFns$2, renderEmptyElement: renderEmptyElement$1 } = VxeUI;
16007
- const { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } = scrollbarUtils || {};
15998
+ const { getConfig: getConfig$2, getIcon: getIcon$1, getI18n: getI18n$2, renderer: renderer$1, formats, createEvent: createEvent$2, globalResize, interceptor, hooks: hooks$1, domUtils, globalEvents: globalEvents$1, GLOBAL_EVENT_KEYS: GLOBAL_EVENT_KEYS$1, useFns: useFns$2, renderEmptyElement: renderEmptyElement$1 } = VxeUI;
16008
15999
  const supportMaxRow = 5e6;
16009
16000
  const customStorageKey = 'VXE_CUSTOM_STORE';
16010
16001
  const maxYHeight = 5e6;
@@ -16031,11 +16022,10 @@ var VxeTableComponent = defineVxeComponent({
16031
16022
  const $xeGantt = inject('$xeGantt', null);
16032
16023
  const $xeGGWrapper = $xeGrid || $xeGantt;
16033
16024
  const { computeSize } = useFns$2.useSize(props);
16025
+ const { computeIsVScrollbar } = useFns$2.useVScrollbar(props);
16034
16026
  const crossTableDragRowInfo = getCrossTableDragRowInfo();
16035
16027
  const reactData = reactive(createReactData$2());
16036
16028
  const internalData = createInternalData$3();
16037
- let tableMethods = {};
16038
- let tablePrivateMethods = {};
16039
16029
  const refElem = ref();
16040
16030
  const refVarElem = ref();
16041
16031
  const refTooltip = ref();
@@ -16079,10 +16069,6 @@ var VxeTableComponent = defineVxeComponent({
16079
16069
  const refScrollYBottomCornerElem = ref();
16080
16070
  const refScrollXSpaceElem = ref();
16081
16071
  const refScrollYSpaceElem = ref();
16082
- const refTrackXElem = ref();
16083
- const refTrackYElem = ref();
16084
- const refThumbXElem = ref();
16085
- const refThumbYElem = ref();
16086
16072
  let $xeToolbar;
16087
16073
  const computeTableId = computed(() => {
16088
16074
  const { id } = props;
@@ -16324,8 +16310,8 @@ var VxeTableComponent = defineVxeComponent({
16324
16310
  return Object.assign({}, getConfig$2().table.checkboxConfig, props.checkboxConfig);
16325
16311
  });
16326
16312
  const computeTooltipOpts = computed(() => {
16327
- const { useScrollbar } = props;
16328
- return Object.assign({ useScrollbar }, getConfig$2().tooltip, getConfig$2().table.tooltipConfig, props.tooltipConfig);
16313
+ const isVScrollbar = computeIsVScrollbar.value;
16314
+ return Object.assign({ useScrollbar: isVScrollbar }, getConfig$2().tooltip, getConfig$2().table.tooltipConfig, props.tooltipConfig);
16329
16315
  });
16330
16316
  const computeHeaderTooltipOpts = computed(() => {
16331
16317
  const tooltipOpts = computeTooltipOpts.value;
@@ -16360,7 +16346,8 @@ var VxeTableComponent = defineVxeComponent({
16360
16346
  return Object.assign({ orders: ['asc', 'desc', null] }, getConfig$2().table.sortConfig, props.sortConfig);
16361
16347
  });
16362
16348
  const computeFilterOpts = computed(() => {
16363
- return Object.assign({}, getConfig$2().table.filterConfig, props.filterConfig);
16349
+ const isVScrollbar = computeIsVScrollbar.value;
16350
+ return Object.assign({ useScrollbar: isVScrollbar }, getConfig$2().table.filterConfig, props.filterConfig);
16364
16351
  });
16365
16352
  const computeFloatingFilterOpts = computed(() => {
16366
16353
  return Object.assign({}, getConfig$2().table.floatingFilterConfig, props.floatingFilterConfig);
@@ -16750,7 +16737,9 @@ var VxeTableComponent = defineVxeComponent({
16750
16737
  };
16751
16738
  const computeMaps = {
16752
16739
  computeSize,
16740
+ computeIsVScrollbar,
16753
16741
  computeTableId,
16742
+ computeTableStyle,
16754
16743
  computeValidOpts,
16755
16744
  computeRowField,
16756
16745
  computeVirtualXOpts,
@@ -16851,6 +16840,7 @@ var VxeTableComponent = defineVxeComponent({
16851
16840
  // 已废弃
16852
16841
  xegrid: $xeGrid
16853
16842
  };
16843
+ const { refTrackXElem, refTrackYElem, refThumbXElem, refThumbYElem, updateThumbSize, updateThumbOffset, clickTrackXEvent, clickTrackYEvent, pointerdownThumbXEvent, pointermoveThumbXEvent, cleatPointerThumbEvent, pointerdownThumbYEvent, pointermoveThumbYEvent } = useFns$2.useInitVScrollbar($xeTable);
16854
16844
  const eqCellValue = (newRow, oldRow, field) => {
16855
16845
  const val1 = XEUtils.get(newRow, field);
16856
16846
  const val2 = XEUtils.get(oldRow, field);
@@ -19401,6 +19391,7 @@ var VxeTableComponent = defineVxeComponent({
19401
19391
  if (reFull) {
19402
19392
  updateTreeLineStyle();
19403
19393
  }
19394
+ updateScrollbar();
19404
19395
  internalData.rceRunTime = Date.now();
19405
19396
  if (reFull) {
19406
19397
  return computeScrollLoad();
@@ -19408,8 +19399,14 @@ var VxeTableComponent = defineVxeComponent({
19408
19399
  });
19409
19400
  };
19410
19401
  const updateScrollbar = () => {
19411
- updateThumbSize();
19412
- updateThumbOffset();
19402
+ const isVScrollbar = computeIsVScrollbar.value;
19403
+ if (isVScrollbar) {
19404
+ return nextTick().then(() => {
19405
+ updateThumbSize();
19406
+ updateThumbOffset();
19407
+ });
19408
+ }
19409
+ return Promise.resolve();
19413
19410
  };
19414
19411
  const defaultMinRunDelay = 50;
19415
19412
  const handleLazyRecalculate = (reFull, reWidth, reHeight, options) => {
@@ -20922,11 +20919,16 @@ var VxeTableComponent = defineVxeComponent({
20922
20919
  return nextTick();
20923
20920
  };
20924
20921
  };
20925
- tableMethods = {
20922
+ const tableMethods = {
20926
20923
  dispatchEvent,
20927
20924
  getEl() {
20928
20925
  return refElem.value;
20929
20926
  },
20927
+ getScrollViewElem() {
20928
+ const { elemStore } = internalData;
20929
+ const viewEl = getRefElem(elemStore['main-body-scroll']);
20930
+ return viewEl;
20931
+ },
20930
20932
  /**
20931
20933
  * 重置表格的一切数据状态
20932
20934
  */
@@ -25492,7 +25494,13 @@ var VxeTableComponent = defineVxeComponent({
25492
25494
  /**
25493
25495
  * 内部方法
25494
25496
  */
25495
- tablePrivateMethods = {
25497
+ const tablePrivateMethods = {
25498
+ getReactData() {
25499
+ return reactData;
25500
+ },
25501
+ getInternalData() {
25502
+ return internalData;
25503
+ },
25496
25504
  getSetupOptions() {
25497
25505
  return getConfig$2();
25498
25506
  },
@@ -28710,8 +28718,8 @@ var VxeTableComponent = defineVxeComponent({
28710
28718
  }
28711
28719
  },
28712
28720
  triggerBodyScrollEvent(evnt, fixedType) {
28713
- const { useScrollbar } = props;
28714
28721
  const { scrollYLoad, scrollXLoad } = reactData;
28722
+ const isVScrollbar = computeIsVScrollbar.value;
28715
28723
  const { elemStore, intoRunScroll, lastScrollTop, lastScrollLeft, inWheelScroll, inVirtualScroll, inHeaderScroll, inBodyScroll, scrollRenderType, inFooterScroll } = internalData;
28716
28724
  if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
28717
28725
  return;
@@ -28730,7 +28738,7 @@ var VxeTableComponent = defineVxeComponent({
28730
28738
  if (!bodyScrollElem) {
28731
28739
  return;
28732
28740
  }
28733
- if (!useScrollbar) {
28741
+ if (!isVScrollbar) {
28734
28742
  if (!xHandleEl) {
28735
28743
  return;
28736
28744
  }
@@ -29481,166 +29489,22 @@ var VxeTableComponent = defineVxeComponent({
29481
29489
  return nextTick();
29482
29490
  }
29483
29491
  };
29484
- const updateThumbSize = () => {
29485
- const { elemStore } = internalData;
29486
- const viewEl = getRefElem(elemStore['main-body-scroll']);
29487
- if (!viewEl) {
29488
- return;
29489
- }
29490
- if (!viewEl.clientHeight || !viewEl.clientHeight) {
29491
- return;
29492
- }
29493
- const trackXEl = refTrackXElem.value;
29494
- const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
29495
- const thumbXElem = refThumbXElem.value;
29496
- if (thumbXElem) {
29497
- thumbXElem.style.width = xThumbWidth + 'px';
29498
- }
29499
- reactData.xThumbWidth = xThumbWidth;
29500
- const trackYEl = refTrackYElem.value;
29501
- const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
29502
- const thumbYElem = refThumbYElem.value;
29503
- if (thumbYElem) {
29504
- thumbYElem.style.height = yThumbHeight + 'px';
29505
- }
29506
- reactData.yThumbHeight = yThumbHeight;
29507
- };
29508
- const updateThumbOffset = () => {
29492
+ const bindScrollbarResize = () => {
29509
29493
  const { elemStore } = internalData;
29510
- const viewEl = getRefElem(elemStore['main-body-scroll']);
29511
- if (!viewEl) {
29512
- return;
29513
- }
29514
- if (!viewEl.clientHeight || !viewEl.clientHeight) {
29515
- return;
29516
- }
29517
- const { xThumbWidth, yThumbHeight } = reactData;
29518
- const trackXEl = refTrackXElem.value;
29519
- const thumbXElem = refThumbXElem.value;
29520
- const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
29521
- internalData.xThumbLeft = xThumbLeft;
29522
- if (thumbXElem && xThumbWidth) {
29523
- thumbXElem.style.width = xThumbWidth + 'px';
29524
- thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
29525
- }
29526
- const trackYEl = refTrackYElem.value;
29527
- const thumbYElem = refThumbYElem.value;
29528
- const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
29529
- internalData.yThumbTop = yThumbTop;
29530
- if (thumbYElem && yThumbHeight) {
29531
- thumbYElem.style.height = yThumbHeight + 'px';
29532
- thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
29533
- }
29534
- };
29535
- const clickTrackXEvent = (evnt) => {
29536
- const { elemStore } = internalData;
29537
- const trackEl = evnt.currentTarget;
29538
- if (trackEl !== evnt.target) {
29539
- return;
29540
- }
29541
- const viewEl = getRefElem(elemStore['main-body-scroll']);
29542
- if (!viewEl) {
29543
- return;
29544
- }
29545
- const { xThumbWidth } = reactData;
29546
- const trackRect = trackEl.getBoundingClientRect();
29547
- viewEl.scrollTo({
29548
- left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
29549
- behavior: 'auto'
29550
- });
29551
- };
29552
- const clickTrackYEvent = (evnt) => {
29553
- const { elemStore } = internalData;
29554
- const trackEl = evnt.currentTarget;
29555
- if (trackEl !== evnt.target) {
29556
- return;
29557
- }
29558
- const viewEl = getRefElem(elemStore['main-body-scroll']);
29559
- if (!viewEl) {
29560
- return;
29561
- }
29562
- const { yThumbHeight } = reactData;
29563
- const trackRect = trackEl.getBoundingClientRect();
29564
- viewEl.scrollTo({
29565
- top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
29566
- behavior: 'auto'
29567
- });
29568
- };
29569
- const pointerdownThumbXEvent = (evnt) => {
29570
- const { elemStore } = internalData;
29571
- const thumbEl = evnt.currentTarget;
29572
- internalData.isThumbDrag = true;
29573
- thumbEl.setPointerCapture(evnt.pointerId);
29574
- const viewEl = getRefElem(elemStore['main-body-scroll']);
29575
- if (!viewEl) {
29576
- return;
29577
- }
29578
- const { xThumbWidth } = reactData;
29579
- const trackEl = thumbEl.parentElement;
29580
- const trackRect = trackEl.getBoundingClientRect();
29581
- const pointerPosition = evnt.clientX - trackRect.left;
29582
- // 记录 thumb 的偏移
29583
- const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
29584
- internalData.thumbDragOffset = pointerPosition - thumbOffset;
29585
- };
29586
- const pointermoveThumbXEvent = (evnt) => {
29587
- const thumbEl = evnt.currentTarget;
29588
- if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
29589
- return;
29590
- }
29591
- const { elemStore, isThumbDrag, thumbDragOffset } = internalData;
29592
- if (isThumbDrag) {
29593
- const viewEl = getRefElem(elemStore['main-body-scroll']);
29594
- if (!viewEl) {
29595
- return;
29494
+ const isVScrollbar = computeIsVScrollbar.value;
29495
+ if (isVScrollbar) {
29496
+ const el = refElem.value;
29497
+ const viewInnerEl = getRefElem(elemStore['main-body-table']);
29498
+ const scrollObserver = globalResize.create(() => {
29499
+ reScrollFlag.value++;
29500
+ });
29501
+ if (el) {
29502
+ scrollObserver.observe(el);
29596
29503
  }
29597
- const { xThumbWidth } = reactData;
29598
- const thumbEl = evnt.currentTarget;
29599
- const trackEl = thumbEl.parentElement;
29600
- const trackRect = trackEl.getBoundingClientRect();
29601
- // 更新偏移
29602
- viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
29603
- }
29604
- };
29605
- const cleatPointerThumbEvent = (evnt) => {
29606
- const thumbEl = evnt.currentTarget;
29607
- thumbEl.releasePointerCapture(evnt.pointerId);
29608
- internalData.isThumbDrag = false;
29609
- };
29610
- const pointerdownThumbYEvent = (evnt) => {
29611
- const { elemStore } = internalData;
29612
- const thumbEl = evnt.currentTarget;
29613
- internalData.isThumbDrag = true;
29614
- thumbEl.setPointerCapture(evnt.pointerId);
29615
- const viewEl = getRefElem(elemStore['main-body-scroll']);
29616
- if (!viewEl) {
29617
- return;
29618
- }
29619
- const { yThumbHeight } = reactData;
29620
- const trackEl = thumbEl.parentElement;
29621
- const trackRect = trackEl.getBoundingClientRect();
29622
- const pointerPosition = evnt.clientY - trackRect.top;
29623
- // 记录 thumb 的偏移
29624
- const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
29625
- internalData.thumbDragOffset = pointerPosition - thumbOffset;
29626
- };
29627
- const pointermoveThumbYEvent = (evnt) => {
29628
- const thumbEl = evnt.currentTarget;
29629
- if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
29630
- return;
29631
- }
29632
- const { elemStore, isThumbDrag, thumbDragOffset } = internalData;
29633
- if (isThumbDrag) {
29634
- const viewEl = getRefElem(elemStore['main-body-scroll']);
29635
- if (!viewEl) {
29636
- return;
29504
+ if (viewInnerEl) {
29505
+ scrollObserver.observe(viewInnerEl);
29637
29506
  }
29638
- const { yThumbHeight } = reactData;
29639
- const thumbEl = evnt.currentTarget;
29640
- const trackEl = thumbEl.parentElement;
29641
- const trackRect = trackEl.getBoundingClientRect();
29642
- // 更新偏移
29643
- viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
29507
+ internalData.scrollObserver = scrollObserver;
29644
29508
  }
29645
29509
  };
29646
29510
  // 检测对应模块是否安装
@@ -30060,8 +29924,8 @@ var VxeTableComponent = defineVxeComponent({
30060
29924
  };
30061
29925
  const renderVirtualBody = () => {
30062
29926
  const $xeGanttView = internalData.xeGanttView;
30063
- const { useScrollbar } = props;
30064
29927
  const { xThumbWidth, yThumbHeight } = reactData;
29928
+ const isVScrollbar = computeIsVScrollbar.value;
30065
29929
  const scrollbarOpts = computeScrollbarOpts.value;
30066
29930
  const scrollXAutoHide = computeScrollXAutoHide.value;
30067
29931
  const scrollYAutoHide = computeScrollYAutoHide.value;
@@ -30075,10 +29939,10 @@ var VxeTableComponent = defineVxeComponent({
30075
29939
  return h('div', {
30076
29940
  key: 'lvb',
30077
29941
  class: ['vxe-table--layout-wrapper', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
30078
- 'is--virtual-scrollbar': useScrollbar,
30079
- 'ov-padding': useScrollbar && scrollbarOpts.padding,
30080
- 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
30081
- 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
29942
+ 'is--virtual-scrollbar': isVScrollbar,
29943
+ 'ov-padding': isVScrollbar && scrollbarOpts.padding,
29944
+ 'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
29945
+ 'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
30082
29946
  'overflow-y': yThumbHeight,
30083
29947
  'overflow-x': xThumbWidth
30084
29948
  }]
@@ -30125,10 +29989,11 @@ var VxeTableComponent = defineVxeComponent({
30125
29989
  ]);
30126
29990
  };
30127
29991
  const renderVN = () => {
30128
- const { loading, stripe, useScrollbar, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props;
29992
+ const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props;
30129
29993
  const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData;
30130
29994
  const { teleportToWrapperElem, popupToWrapperElem, customPopupToElem } = internalData;
30131
29995
  const { leftList, rightList } = columnStore;
29996
+ const isVScrollbar = computeIsVScrollbar.value;
30132
29997
  const loadingSlot = slots.loading;
30133
29998
  const tipSlots = {
30134
29999
  header: slots.headerTooltip || slots['header-tooltip'],
@@ -30168,7 +30033,7 @@ var VxeTableComponent = defineVxeComponent({
30168
30033
  if (isCrossTableDrag && !tableData.length) {
30169
30034
  tbOns.onDragover = $xeTable.handleCrossTableRowDragoverEmptyEvent;
30170
30035
  }
30171
- return h('div', Object.assign({ ref: refElem, class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, useScrollbar ? 'is--virtual-scrollbar' : 'is--native-scrollbar', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
30036
+ return h('div', Object.assign({ ref: refElem, class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, isVScrollbar ? 'is--virtual-scrollbar' : 'is--native-scrollbar', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
30172
30037
  [`size--${vSize}`]: vSize,
30173
30038
  [`valid-msg--${validOpts.msgMode}`]: !!editRules,
30174
30039
  'vxe-editable': !!editConfig,
@@ -30229,7 +30094,7 @@ var VxeTableComponent = defineVxeComponent({
30229
30094
  h('div', {
30230
30095
  key: 'tw',
30231
30096
  class: 'vxe-table--render-wrapper'
30232
- }, useScrollbar
30097
+ }, isVScrollbar
30233
30098
  ? [renderVirtualBody()]
30234
30099
  : (scrollbarXToTop
30235
30100
  ? [
@@ -30416,7 +30281,7 @@ var VxeTableComponent = defineVxeComponent({
30416
30281
  ref: refCommTooltip,
30417
30282
  isArrow: false,
30418
30283
  enterable: false,
30419
- useScrollbar
30284
+ useScrollbar: isVScrollbar
30420
30285
  }),
30421
30286
  /**
30422
30287
  * 工具提示
@@ -30480,7 +30345,7 @@ var VxeTableComponent = defineVxeComponent({
30480
30345
  enterable: validTipConfig.enterable,
30481
30346
  enterDelay: validTipConfig.enterDelay,
30482
30347
  leaveDelay: validTipConfig.leaveDelay,
30483
- useScrollbar
30348
+ useScrollbar: validTipConfig.useScrollbar
30484
30349
  })
30485
30350
  : renderEmptyElement$1($xeTable)
30486
30351
  ])
@@ -30585,42 +30450,43 @@ var VxeTableComponent = defineVxeComponent({
30585
30450
  watch(() => VxeUI.getLanguage(), () => {
30586
30451
  reLayoutFlag.value++;
30587
30452
  });
30453
+ watch(computeIsVScrollbar, () => {
30454
+ nextTick(() => {
30455
+ bindScrollbarResize();
30456
+ nextTick(() => {
30457
+ reLayoutFlag.value++;
30458
+ });
30459
+ });
30460
+ });
30588
30461
  watch(computeScrollbarXToTop, () => {
30589
- reScrollFlag.value++;
30590
30462
  reLayoutFlag.value++;
30591
30463
  });
30592
30464
  watch(computeScrollbarYToLeft, () => {
30593
- reScrollFlag.value++;
30594
30465
  reLayoutFlag.value++;
30595
30466
  });
30596
30467
  watch(computeScrollXVisible, () => {
30597
- reScrollFlag.value++;
30598
30468
  reLayoutFlag.value++;
30599
30469
  });
30600
30470
  watch(computeScrollYVisible, () => {
30601
- reScrollFlag.value++;
30602
30471
  reLayoutFlag.value++;
30603
30472
  });
30604
30473
  watch(computeScrollXHeight, () => {
30605
- reScrollFlag.value++;
30606
30474
  reLayoutFlag.value++;
30607
30475
  });
30608
30476
  watch(computeScrollYWidth, () => {
30609
- reScrollFlag.value++;
30610
30477
  reLayoutFlag.value++;
30611
30478
  });
30612
30479
  watch(computeCellHeitht, () => {
30613
30480
  reLayoutFlag.value++;
30614
30481
  });
30615
30482
  watch(reLayoutFlag, () => {
30616
- $xeTable.recalculate(true);
30483
+ nextTick().then(() => {
30484
+ $xeTable.recalculate(true);
30485
+ });
30617
30486
  });
30618
30487
  watch(reScrollFlag, () => {
30619
- nextTick(() => {
30620
- $xeTable.updateScrollbar();
30621
- nextTick(() => {
30622
- $xeTable.updateScrollbar();
30623
- });
30488
+ updateScrollbar().then(() => {
30489
+ updateScrollbar();
30624
30490
  });
30625
30491
  });
30626
30492
  const footFlag = ref(0);
@@ -30753,7 +30619,7 @@ var VxeTableComponent = defineVxeComponent({
30753
30619
  });
30754
30620
  onMounted(() => {
30755
30621
  const { editConfig, exportConfig, importConfig, treeConfig, minHeight, keepSource, areaConfig } = props;
30756
- const { elemStore, scrollXStore, scrollYStore } = internalData;
30622
+ const { scrollXStore, scrollYStore } = internalData;
30757
30623
  const columnOpts = computeColumnOpts.value;
30758
30624
  const columnDragOpts = computeColumnDragOpts.value;
30759
30625
  const aggregateOpts = computeAggregateOpts.value;
@@ -31026,22 +30892,9 @@ var VxeTableComponent = defineVxeComponent({
31026
30892
  handleUpdateRowGroup(groupFields);
31027
30893
  initData();
31028
30894
  nextTick(() => {
31029
- const { useScrollbar, autoResize } = props;
31030
- const el = refElem.value;
31031
- if (useScrollbar) {
31032
- const viewInnerEl = getRefElem(elemStore['main-body-table']);
31033
- const scrollObserver = globalResize.create(() => {
31034
- reScrollFlag.value++;
31035
- });
31036
- if (el) {
31037
- scrollObserver.observe(el);
31038
- }
31039
- if (viewInnerEl) {
31040
- scrollObserver.observe(viewInnerEl);
31041
- }
31042
- internalData.scrollObserver = scrollObserver;
31043
- }
30895
+ const { autoResize } = props;
31044
30896
  if (autoResize) {
30897
+ const el = refElem.value;
31045
30898
  const parentEl = $xeTable.getParentElem();
31046
30899
  const resizeObserver = globalResize.create(() => {
31047
30900
  if (props.autoResize) {
@@ -31056,6 +30909,7 @@ var VxeTableComponent = defineVxeComponent({
31056
30909
  }
31057
30910
  internalData.resizeObserver = resizeObserver;
31058
30911
  }
30912
+ bindScrollbarResize();
31059
30913
  });
31060
30914
  if (virtualYOpts.mode !== 'scroll') {
31061
30915
  const tableViewportEl = refTableViewportElem.value;
@@ -31884,6 +31738,7 @@ var VxeGridComponent = defineVxeComponent({
31884
31738
  const VxeUIPagerComponent = VxeUI.getComponent('VxePager');
31885
31739
  const defaultLayouts = [['Form'], ['Toolbar', 'Top', 'Table', 'Bottom', 'Pager']];
31886
31740
  const { computeSize } = useFns.useSize(props);
31741
+ const { computeIsVScrollbar } = useFns.useVScrollbar(props);
31887
31742
  const reactData = reactive(createReactData());
31888
31743
  const internalData = createInternalData();
31889
31744
  const refElem = ref();
@@ -32066,6 +31921,8 @@ var VxeGridComponent = defineVxeComponent({
32066
31921
  refPopupContainerElem
32067
31922
  };
32068
31923
  const computeMaps = {
31924
+ computeSize,
31925
+ computeIsVScrollbar,
32069
31926
  computeProxyOpts,
32070
31927
  computePagerOpts,
32071
31928
  computeFormOpts,