vxe-table 4.23.0-beta.1 → 4.23.0-beta.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 (52) hide show
  1. package/README.md +2 -2
  2. package/dist/all.esm.js +499 -87
  3. package/dist/style.css +1 -1
  4. package/dist/style.min.css +1 -1
  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/src/props.js +6 -2
  10. package/es/table/src/scrollbar.js +54 -0
  11. package/es/table/src/table.js +427 -81
  12. package/es/table/src/util.js +11 -2
  13. package/es/table/style.css +30 -0
  14. package/es/table/style.min.css +1 -1
  15. package/es/ui/index.js +1 -1
  16. package/es/ui/src/log.js +1 -1
  17. package/es/vxe-table/style.css +30 -0
  18. package/es/vxe-table/style.min.css +1 -1
  19. package/lib/index.css +1 -1
  20. package/lib/index.min.css +1 -1
  21. package/lib/index.umd.js +106 -28
  22. package/lib/index.umd.min.js +1 -1
  23. package/lib/style.css +1 -1
  24. package/lib/style.min.css +1 -1
  25. package/lib/table/src/props.js +6 -2
  26. package/lib/table/src/props.min.js +1 -1
  27. package/lib/table/src/scrollbar.js +63 -0
  28. package/lib/table/src/scrollbar.min.js +1 -0
  29. package/lib/table/src/table.js +32 -22
  30. package/lib/table/src/table.min.js +1 -1
  31. package/lib/table/src/util.js +11 -2
  32. package/lib/table/src/util.min.js +1 -1
  33. package/lib/table/style/style.css +30 -0
  34. package/lib/table/style/style.min.css +1 -1
  35. package/lib/ui/index.js +1 -1
  36. package/lib/ui/index.min.js +1 -1
  37. package/lib/ui/src/log.js +1 -1
  38. package/lib/ui/src/log.min.js +1 -1
  39. package/lib/vxe-table/style/style.css +30 -0
  40. package/lib/vxe-table/style/style.min.css +1 -1
  41. package/package.json +2 -2
  42. package/packages/table/src/props.ts +6 -2
  43. package/packages/table/src/scrollbar.ts +57 -0
  44. package/packages/table/src/table.ts +459 -83
  45. package/packages/table/src/util.ts +15 -2
  46. package/styles/components/table.scss +65 -0
  47. /package/es/{iconfont.1791954193706.ttf → iconfont.1792035024476.ttf} +0 -0
  48. /package/es/{iconfont.1791954193706.woff → iconfont.1792035024476.woff} +0 -0
  49. /package/es/{iconfont.1791954193706.woff2 → iconfont.1792035024476.woff2} +0 -0
  50. /package/lib/{iconfont.1791954193706.ttf → iconfont.1792035024476.ttf} +0 -0
  51. /package/lib/{iconfont.1791954193706.woff → iconfont.1792035024476.woff} +0 -0
  52. /package/lib/{iconfont.1791954193706.woff2 → iconfont.1792035024476.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.1";
59
+ const version = "4.23.0-beta.2";
60
60
  VxeUI.version = version;
61
61
  VxeUI.tableVersion = version;
62
62
  VxeUI.setConfig({
@@ -938,7 +938,7 @@ function getPopupWrapperElement(panelElem) {
938
938
  }
939
939
 
940
940
  const { log } = VxeUI;
941
- const tableVersion = `table v${"4.23.0-beta.1"}`;
941
+ const tableVersion = `table v${"4.23.0-beta.2"}`;
942
942
  function createComponentLog(name) {
943
943
  const uiVersion = VxeUI.uiVersion ? `ui v${VxeUI.uiVersion}` : '';
944
944
  const ganttVersion = VxeUI.ganttVersion ? `gantt v${VxeUI.ganttVersion}` : '';
@@ -1190,9 +1190,15 @@ function createInternalData$3() {
1190
1190
  // 当前行
1191
1191
  currentRow: null,
1192
1192
  currentCol: null,
1193
- // 最后滚动位置
1194
- lastScrollLeft: 0,
1193
+ // resizeObserver: undefined,
1194
+ // 滚动条
1195
+ // scrollObserver: undefined,
1196
+ // isThumbDrag: false,
1197
+ thumbDragOffset: 0,
1198
+ yThumbTop: 0,
1199
+ xThumbLeft: 0,
1195
1200
  lastScrollTop: 0,
1201
+ lastScrollLeft: 0,
1196
1202
  // 单选框属性,已选中保留的行
1197
1203
  radioReserveRow: null,
1198
1204
  // 复选框属性,已选中保留的行集合
@@ -1325,6 +1331,9 @@ function createReactData$2() {
1325
1331
  scrollbarWidth: 0,
1326
1332
  // 横向滚动条的高度
1327
1333
  scrollbarHeight: 0,
1334
+ // 滚动条
1335
+ yThumbHeight: 0,
1336
+ xThumbWidth: 0,
1328
1337
  // 行高
1329
1338
  rowHeight: 0,
1330
1339
  // 表格父容器的高度
@@ -3850,7 +3859,10 @@ const tableProps = {
3850
3859
  type: Boolean,
3851
3860
  default: () => getConfig$7().table.highlightCurrentRow
3852
3861
  },
3853
- // (即将废弃)鼠标移到行是否要高亮显示
3862
+ /**
3863
+ * (即将废弃)鼠标移到行是否要高亮显示
3864
+ * @deprecated
3865
+ */
3854
3866
  highlightHoverRow: {
3855
3867
  type: Boolean,
3856
3868
  default: () => getConfig$7().table.highlightHoverRow
@@ -4075,7 +4087,7 @@ const tableProps = {
4075
4087
  virtualYConfig: Object,
4076
4088
  useScrollbar: {
4077
4089
  type: Boolean,
4078
- default: () => getConfig$7().table.useScrollbar
4090
+ default: () => getDefaultConfig(getConfig$7().table.useScrollbar, getConfig$7().useScrollbar)
4079
4091
  },
4080
4092
  // 滚动条配置项
4081
4093
  scrollbarConfig: Object,
@@ -4287,6 +4299,61 @@ function clearColAnimate(elem, clss) {
4287
4299
  }, 500);
4288
4300
  }
4289
4301
 
4302
+ /**
4303
+ * 计算滚动条滑块的长度
4304
+ */
4305
+ function getThumbSize(viewportSize, contentSize, trackSize) {
4306
+ if (contentSize <= viewportSize) {
4307
+ return 0;
4308
+ }
4309
+ const ratio = viewportSize / contentSize;
4310
+ const ideal = trackSize * ratio;
4311
+ return Math.max(20, Math.min(ideal, trackSize));
4312
+ }
4313
+ /**
4314
+ * 计算滚动条滑块的偏移位置
4315
+ */
4316
+ function getThumbOffsetSize(offsetSize, viewportSize, contentSize, trackSize, thumbSize) {
4317
+ const maxScroll = contentSize - viewportSize;
4318
+ if (maxScroll <= 0) {
4319
+ return 0;
4320
+ }
4321
+ const maxThumbOffset = trackSize - thumbSize;
4322
+ if (maxThumbOffset <= 0) {
4323
+ return 0;
4324
+ }
4325
+ const clamped = Math.min(Math.max(offsetSize, 0), maxScroll);
4326
+ const ratio = clamped / maxScroll;
4327
+ return ratio * maxThumbOffset;
4328
+ }
4329
+ /**
4330
+ * 根据点击轨道的位置,计算滑块的偏移位置
4331
+ */
4332
+ function getScrollFromClick(clickPosition, viewportSize, contentSize, trackSize, thumbSize) {
4333
+ const maxThumbOffset = trackSize - thumbSize;
4334
+ const maxScroll = contentSize - viewportSize;
4335
+ if (maxScroll <= 0 || maxThumbOffset <= 0) {
4336
+ return 0;
4337
+ }
4338
+ let thumbOffset = clickPosition - thumbSize / 2;
4339
+ thumbOffset = Math.min(Math.max(thumbOffset, 0), maxThumbOffset);
4340
+ const scrollOffset = (thumbOffset / maxThumbOffset) * maxScroll;
4341
+ return scrollOffset;
4342
+ }
4343
+ /**
4344
+ * 拖拽 thumb 时,根据鼠标位置计算滑块的偏移位置
4345
+ */
4346
+ function getScrollFromDrag(pointerPosition, dragOffset, viewportSize, contentSize, trackSize, thumbSize) {
4347
+ const maxScroll = contentSize - viewportSize;
4348
+ const maxThumbOffset = trackSize - thumbSize;
4349
+ if (maxScroll <= 0 || maxThumbOffset <= 0) {
4350
+ return 0;
4351
+ }
4352
+ let thumbOffset = pointerPosition - dragOffset;
4353
+ thumbOffset = Math.min(Math.max(thumbOffset, 0), maxThumbOffset);
4354
+ return (thumbOffset / maxThumbOffset) * maxScroll;
4355
+ }
4356
+
4290
4357
  // 跨表拖拽
4291
4358
  const crossTableDragRowInfo = reactive({
4292
4359
  row: null
@@ -15976,7 +16043,7 @@ renderer$2.mixin({
15976
16043
  });
15977
16044
 
15978
16045
  const { warnLog: warnLog$2, errLog: errLog$2 } = createComponentLog('table');
15979
- const { getConfig: getConfig$2, getIcon: getIcon$1, getI18n: getI18n$2, renderer: renderer$1, formats, createEvent: createEvent$2, globalResize, interceptor, hooks: hooks$1, globalEvents: globalEvents$1, GLOBAL_EVENT_KEYS: GLOBAL_EVENT_KEYS$1, useFns: useFns$2, renderEmptyElement: renderEmptyElement$1 } = VxeUI;
16046
+ 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;
15980
16047
  const supportMaxRow = 5e6;
15981
16048
  const customStorageKey = 'VXE_CUSTOM_STORE';
15982
16049
  const maxYHeight = 5e6;
@@ -16051,6 +16118,10 @@ var VxeTableComponent = defineVxeComponent({
16051
16118
  const refScrollYBottomCornerElem = ref();
16052
16119
  const refScrollXSpaceElem = ref();
16053
16120
  const refScrollYSpaceElem = ref();
16121
+ const refTrackXElem = ref();
16122
+ const refTrackYElem = ref();
16123
+ const refThumbXElem = ref();
16124
+ const refThumbYElem = ref();
16054
16125
  let $xeToolbar;
16055
16126
  const computeTableId = computed(() => {
16056
16127
  const { id } = props;
@@ -16141,6 +16212,36 @@ var VxeTableComponent = defineVxeComponent({
16141
16212
  const scrollbarOpts = computeScrollbarOpts.value;
16142
16213
  return scrollbarOpts.y ? Object.assign({}, scrollbarOpts.y, scrollbarOpts.yConfig) : (scrollbarOpts.yConfig || {});
16143
16214
  });
16215
+ const computeScrollXHeight = computed(() => {
16216
+ const scrollbarOpts = computeScrollbarOpts.value;
16217
+ const scrollbarXOpts = computeScrollbarXOpts.value;
16218
+ return XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), scrollDefaultConf.height));
16219
+ });
16220
+ const computeScrollYWidth = computed(() => {
16221
+ const scrollbarOpts = computeScrollbarOpts.value;
16222
+ const scrollbarYOpts = computeScrollbarYOpts.value;
16223
+ return XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), scrollDefaultConf.width));
16224
+ });
16225
+ const computeScrollXVisible = computed(() => {
16226
+ const scrollbarOpts = computeScrollbarOpts.value;
16227
+ const scrollbarXOpts = computeScrollbarXOpts.value;
16228
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible);
16229
+ });
16230
+ const computeScrollYVisible = computed(() => {
16231
+ const scrollbarOpts = computeScrollbarOpts.value;
16232
+ const scrollbarYOpts = computeScrollbarYOpts.value;
16233
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible);
16234
+ });
16235
+ const computeScrollXAutoHide = computed(() => {
16236
+ const scrollbarOpts = computeScrollbarOpts.value;
16237
+ const scrollbarXOpts = computeScrollbarXOpts.value;
16238
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), scrollDefaultConf.autoHide);
16239
+ });
16240
+ const computeScrollYAutoHide = computed(() => {
16241
+ const scrollbarOpts = computeScrollbarOpts.value;
16242
+ const scrollbarYOpts = computeScrollbarYOpts.value;
16243
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), scrollDefaultConf.autoHide);
16244
+ });
16144
16245
  const computeScrollbarXToTop = computed(() => {
16145
16246
  const scrollbarXOpts = computeScrollbarXOpts.value;
16146
16247
  return scrollbarXOpts.position === 'top';
@@ -16149,6 +16250,23 @@ var VxeTableComponent = defineVxeComponent({
16149
16250
  const scrollbarYOpts = computeScrollbarYOpts.value;
16150
16251
  return scrollbarYOpts.position === 'left';
16151
16252
  });
16253
+ const computeScrollbarWrapperClss = computed(() => {
16254
+ const { yThumbHeight, xThumbWidth } = reactData;
16255
+ const scrollbarXToTop = computeScrollbarXToTop.value;
16256
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
16257
+ const scrollXVisible = computeScrollXVisible.value;
16258
+ const scrollYVisible = computeScrollYVisible.value;
16259
+ return domUtils.buildClass([
16260
+ 'vxe-scrollbar is--virtual',
16261
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
16262
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
16263
+ `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
16264
+ `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
16265
+ ], {
16266
+ 'overflow-y': yThumbHeight,
16267
+ 'overflow-x': xThumbWidth
16268
+ });
16269
+ });
16152
16270
  const computeScrollYThreshold = computed(() => {
16153
16271
  const virtualYOpts = computeVirtualYOpts.value;
16154
16272
  const { threshold } = virtualYOpts;
@@ -16178,6 +16296,10 @@ var VxeTableComponent = defineVxeComponent({
16178
16296
  }
16179
16297
  return cellOpts;
16180
16298
  });
16299
+ const computeCellHeitht = computed(() => {
16300
+ const cellOpts = computeCellOpts.value;
16301
+ return cellOpts.height;
16302
+ });
16181
16303
  const computeHeaderCellOpts = computed(() => {
16182
16304
  const headerCellOpts = Object.assign({}, getConfig$2().table.headerCellConfig, props.headerCellConfig);
16183
16305
  const defaultRowHeight = computeDefaultRowHeight.value;
@@ -16477,11 +16599,8 @@ var VxeTableComponent = defineVxeComponent({
16477
16599
  return '';
16478
16600
  });
16479
16601
  const computeTableStyle = computed(() => {
16480
- const scrollbarOpts = computeScrollbarOpts.value;
16481
- const scrollbarXOpts = computeScrollbarXOpts.value;
16482
- const scrollbarYOpts = computeScrollbarYOpts.value;
16483
- const barWidth = getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), scrollDefaultConf.width);
16484
- const barHeight = getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), scrollDefaultConf.height);
16602
+ const barWidth = computeScrollYWidth.value;
16603
+ const barHeight = computeScrollXHeight.value;
16485
16604
  const stys = {};
16486
16605
  if (barWidth || barHeight) {
16487
16606
  stys['--vxe-ui-table-view-scrollbar-width'] = toCssUnit(barWidth || barHeight);
@@ -16677,8 +16796,15 @@ var VxeTableComponent = defineVxeComponent({
16677
16796
  computeScrollbarOpts,
16678
16797
  computeScrollbarXOpts,
16679
16798
  computeScrollbarYOpts,
16799
+ computeScrollXHeight,
16800
+ computeScrollYWidth,
16801
+ computeScrollXVisible,
16802
+ computeScrollYVisible,
16803
+ computeScrollXAutoHide,
16804
+ computeScrollYAutoHide,
16680
16805
  computeScrollbarXToTop,
16681
16806
  computeScrollbarYToLeft,
16807
+ computeScrollbarWrapperClss,
16682
16808
  computeColumnOpts,
16683
16809
  computeCurrentColumnOpts,
16684
16810
  computeScrollXThreshold,
@@ -17795,14 +17921,6 @@ var VxeTableComponent = defineVxeComponent({
17795
17921
  if (!bodyWrapperElem) {
17796
17922
  return;
17797
17923
  }
17798
- const yHandleEl = refScrollYHandleElem.value;
17799
- if (!yHandleEl) {
17800
- return;
17801
- }
17802
- const xHandleEl = refScrollXHandleElem.value;
17803
- if (!xHandleEl) {
17804
- return;
17805
- }
17806
17924
  const columnOpts = computeColumnOpts.value;
17807
17925
  let tWidth = 0;
17808
17926
  const minCellWidth = 40; // 列宽最少限制 40px
@@ -18402,12 +18520,12 @@ var VxeTableComponent = defineVxeComponent({
18402
18520
  emptyPlaceholderElem.style.top = `${tHeaderHeight}px`;
18403
18521
  emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : '';
18404
18522
  }
18405
- const scrollbarXOpts = computeScrollbarXOpts.value;
18406
- const scrollbarYOpts = computeScrollbarYOpts.value;
18523
+ const scrollXVisible = computeScrollXVisible.value;
18524
+ const scrollYVisible = computeScrollYVisible.value;
18407
18525
  const scrollbarYToLeft = computeScrollbarYToLeft.value;
18408
18526
  let xScrollbarVisible = overflowX ? 'visible' : 'hidden';
18409
- const hideXScroll = scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden';
18410
- if (!hideXScroll || $xeGanttView) {
18527
+ const hideXScroll = scrollXVisible === false || scrollXVisible === 'hidden';
18528
+ if (scrollXVisible === 'visible' || $xeGanttView) {
18411
18529
  osbHeight = scrollbarHeight;
18412
18530
  xScrollbarVisible = 'visible';
18413
18531
  }
@@ -18416,12 +18534,12 @@ var VxeTableComponent = defineVxeComponent({
18416
18534
  xScrollbarVisible = 'hidden';
18417
18535
  }
18418
18536
  let yScrollbarVisible = overflowY ? 'visible' : 'hidden';
18419
- const showYScroll = !(scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden');
18420
- if (!showYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)) {
18537
+ const hideYScroll = scrollYVisible === false || scrollYVisible === 'hidden';
18538
+ if (hideYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)) {
18421
18539
  osbWidth = 0;
18422
18540
  yScrollbarVisible = 'hidden';
18423
18541
  }
18424
- else if (showYScroll) {
18542
+ else if (scrollYVisible === 'visible') {
18425
18543
  osbWidth = scrollbarWidth;
18426
18544
  yScrollbarVisible = 'visible';
18427
18545
  }
@@ -19229,7 +19347,6 @@ var VxeTableComponent = defineVxeComponent({
19229
19347
  const calcScrollbar = () => {
19230
19348
  const { scrollXWidth, scrollYHeight } = reactData;
19231
19349
  const { elemStore } = internalData;
19232
- const scrollbarOpts = computeScrollbarOpts.value;
19233
19350
  const el = refElem.value;
19234
19351
  if (!el || !el.clientWidth) {
19235
19352
  return;
@@ -19239,20 +19356,29 @@ var VxeTableComponent = defineVxeComponent({
19239
19356
  const footerTableElem = getRefElem(elemStore['main-footer-table']);
19240
19357
  const xHandleEl = refScrollXHandleElem.value;
19241
19358
  const yHandleEl = refScrollYHandleElem.value;
19359
+ const thumbXElem = refThumbXElem.value;
19360
+ const thumbYElem = refThumbYElem.value;
19242
19361
  let overflowY = false;
19243
19362
  let overflowX = false;
19244
19363
  if (bodyWrapperElem) {
19245
- const scrollbarXOpts = computeScrollbarXOpts.value;
19246
- const scrollbarYOpts = computeScrollbarYOpts.value;
19247
- const barWidth = XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), scrollDefaultConf.width));
19248
- const barHeight = XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), scrollDefaultConf.height));
19364
+ const scrollbarOpts = computeScrollbarOpts.value;
19365
+ const barWidth = computeScrollYWidth.value;
19366
+ const barHeight = computeScrollXHeight.value;
19249
19367
  overflowY = scrollYHeight > bodyWrapperElem.clientHeight;
19250
- if (yHandleEl) {
19368
+ // 如果是虚拟滚动条
19369
+ if (thumbYElem) {
19370
+ reactData.scrollbarHeight = scrollbarOpts.padding ? thumbYElem.offsetWidth : 0;
19371
+ }
19372
+ else if (yHandleEl) {
19251
19373
  reactData.scrollbarWidth = (barWidth || barHeight) || (yHandleEl.offsetWidth - yHandleEl.clientWidth) || 14;
19252
19374
  }
19253
19375
  reactData.overflowY = overflowY;
19254
19376
  overflowX = scrollXWidth > bodyWrapperElem.clientWidth;
19255
- if (xHandleEl) {
19377
+ // 如果是虚拟滚动条
19378
+ if (thumbXElem) {
19379
+ reactData.scrollbarHeight = scrollbarOpts.padding ? thumbXElem.offsetHeight : 0;
19380
+ }
19381
+ else if (xHandleEl) {
19256
19382
  reactData.scrollbarHeight = (barHeight || barWidth) || (xHandleEl.offsetHeight - xHandleEl.clientHeight) || 14;
19257
19383
  }
19258
19384
  const hHeight = headerTableElem ? headerTableElem.clientHeight : 0;
@@ -19319,6 +19445,10 @@ var VxeTableComponent = defineVxeComponent({
19319
19445
  }
19320
19446
  });
19321
19447
  };
19448
+ const updateScrollbar = () => {
19449
+ updateThumbSize();
19450
+ updateThumbOffset();
19451
+ };
19322
19452
  const defaultMinRunDelay = 50;
19323
19453
  const handleLazyRecalculate = (reFull, reWidth, reHeight, options) => {
19324
19454
  const minRunDelay = (options ? options.minRunDelay : defaultMinRunDelay) || defaultMinRunDelay;
@@ -19339,6 +19469,7 @@ var VxeTableComponent = defineVxeComponent({
19339
19469
  const refreshDelay = resizeOpts.refreshDelay || 30;
19340
19470
  const reDelay = rceDelay + refreshDelay;
19341
19471
  const el = refElem.value;
19472
+ updateScrollbar();
19342
19473
  if (el && el.clientWidth) {
19343
19474
  autoCellWidth();
19344
19475
  updateRowExpandStyle();
@@ -27340,6 +27471,18 @@ var VxeTableComponent = defineVxeComponent({
27340
27471
  }
27341
27472
  return nextTick();
27342
27473
  },
27474
+ /**
27475
+ * @private
27476
+ */
27477
+ updateScrollbar() {
27478
+ return updateScrollbar();
27479
+ },
27480
+ /**
27481
+ * @private
27482
+ */
27483
+ updateThumbOffset() {
27484
+ return updateThumbOffset();
27485
+ },
27343
27486
  /**
27344
27487
  * 表头单元格按下事件
27345
27488
  */
@@ -28487,19 +28630,18 @@ var VxeTableComponent = defineVxeComponent({
28487
28630
  },
28488
28631
  handleScrollEvent(evnt, isRollY, isRollX, scrollTop, scrollLeft, params) {
28489
28632
  const { highlightHoverRow } = props;
28490
- const { lastScrollLeft, lastScrollTop } = internalData;
28491
- const xHandleEl = refScrollXHandleElem.value;
28492
- const yHandleEl = refScrollYHandleElem.value;
28493
- if (!xHandleEl || !yHandleEl) {
28633
+ const { elemStore, lastScrollLeft, lastScrollTop } = internalData;
28634
+ const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
28635
+ if (!bodyScrollElem) {
28494
28636
  return;
28495
28637
  }
28496
28638
  const rowOpts = computeRowOpts.value;
28497
28639
  const validTip = refValidTooltip.value;
28498
28640
  const tooltip = refTooltip.value;
28499
- const bodyHeight = yHandleEl.clientHeight;
28500
- const bodyWidth = xHandleEl.clientWidth;
28501
- const scrollHeight = yHandleEl.scrollHeight;
28502
- const scrollWidth = xHandleEl.scrollWidth;
28641
+ const bodyHeight = bodyScrollElem.clientHeight;
28642
+ const bodyWidth = bodyScrollElem.clientWidth;
28643
+ const scrollHeight = bodyScrollElem.scrollHeight;
28644
+ const scrollWidth = bodyScrollElem.scrollWidth;
28503
28645
  let isTop = false;
28504
28646
  let isBottom = false;
28505
28647
  let isLeft = false;
@@ -28561,6 +28703,7 @@ var VxeTableComponent = defineVxeComponent({
28561
28703
  isLeft,
28562
28704
  isRight,
28563
28705
  direction }, params);
28706
+ updateThumbOffset();
28564
28707
  updateRowExpandStyle();
28565
28708
  checkLastSyncScroll(isRollX, isRollY);
28566
28709
  if (isRollX) {
@@ -28605,6 +28748,7 @@ var VxeTableComponent = defineVxeComponent({
28605
28748
  }
28606
28749
  },
28607
28750
  triggerBodyScrollEvent(evnt, fixedType) {
28751
+ const { useScrollbar } = props;
28608
28752
  const { scrollYLoad, scrollXLoad } = reactData;
28609
28753
  const { elemStore, intoRunScroll, lastScrollTop, lastScrollLeft, inWheelScroll, inVirtualScroll, inHeaderScroll, inBodyScroll, scrollRenderType, inFooterScroll } = internalData;
28610
28754
  if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
@@ -28624,19 +28768,21 @@ var VxeTableComponent = defineVxeComponent({
28624
28768
  if (!bodyScrollElem) {
28625
28769
  return;
28626
28770
  }
28627
- if (!xHandleEl) {
28628
- return;
28629
- }
28630
- if (!yHandleEl) {
28631
- return;
28771
+ if (!useScrollbar) {
28772
+ if (!xHandleEl) {
28773
+ return;
28774
+ }
28775
+ if (!yHandleEl) {
28776
+ return;
28777
+ }
28632
28778
  }
28633
28779
  if (inBodyScroll) {
28634
28780
  if (scrollRenderType !== fixedType) {
28635
28781
  return;
28636
28782
  }
28637
28783
  }
28638
- let scrollTop = yHandleEl.scrollTop;
28639
- let scrollLeft = xHandleEl.scrollLeft;
28784
+ let scrollTop = 0;
28785
+ let scrollLeft = 0;
28640
28786
  if (leftScrollElem && fixedType === 'left') {
28641
28787
  scrollTop = leftScrollElem.scrollTop;
28642
28788
  }
@@ -28777,8 +28923,8 @@ var VxeTableComponent = defineVxeComponent({
28777
28923
  const rightFixedWidth = computeRightFixedWidth.value;
28778
28924
  const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
28779
28925
  const rowOpts = computeRowOpts.value;
28780
- const scrollbarXOpts = computeScrollbarXOpts.value;
28781
- const scrollbarYOpts = computeScrollbarYOpts.value;
28926
+ const scrollXVisible = computeScrollXVisible.value;
28927
+ const scrollYVisible = computeScrollYVisible.value;
28782
28928
  const xHandleEl = refScrollXHandleElem.value;
28783
28929
  const yHandleEl = refScrollYHandleElem.value;
28784
28930
  const leftScrollElem = getRefElem(elemStore['left-body-scroll']);
@@ -28801,14 +28947,14 @@ var VxeTableComponent = defineVxeComponent({
28801
28947
  const isRollY = overflowY && scrollTop !== lastScrollTop;
28802
28948
  if (isRollX) {
28803
28949
  // 如果禁用滚动
28804
- if (scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden') {
28950
+ if (scrollXVisible === false || scrollXVisible === 'hidden') {
28805
28951
  evnt.preventDefault();
28806
28952
  return;
28807
28953
  }
28808
28954
  }
28809
28955
  if (isRollY) {
28810
28956
  // 如果禁用滚动
28811
- if (scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden') {
28957
+ if (scrollYVisible === false || scrollYVisible === 'hidden') {
28812
28958
  evnt.preventDefault();
28813
28959
  return;
28814
28960
  }
@@ -29373,6 +29519,168 @@ var VxeTableComponent = defineVxeComponent({
29373
29519
  return nextTick();
29374
29520
  }
29375
29521
  };
29522
+ const updateThumbSize = () => {
29523
+ const { elemStore } = internalData;
29524
+ const viewEl = getRefElem(elemStore['main-body-scroll']);
29525
+ if (!viewEl) {
29526
+ return;
29527
+ }
29528
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
29529
+ return;
29530
+ }
29531
+ const trackXEl = refTrackXElem.value;
29532
+ const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
29533
+ const thumbXElem = refThumbXElem.value;
29534
+ if (thumbXElem) {
29535
+ thumbXElem.style.width = xThumbWidth + 'px';
29536
+ }
29537
+ reactData.xThumbWidth = xThumbWidth;
29538
+ const trackYEl = refTrackYElem.value;
29539
+ const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
29540
+ const thumbYElem = refThumbYElem.value;
29541
+ if (thumbYElem) {
29542
+ thumbYElem.style.height = yThumbHeight + 'px';
29543
+ }
29544
+ reactData.yThumbHeight = yThumbHeight;
29545
+ };
29546
+ const updateThumbOffset = () => {
29547
+ const { elemStore } = internalData;
29548
+ const viewEl = getRefElem(elemStore['main-body-scroll']);
29549
+ if (!viewEl) {
29550
+ return;
29551
+ }
29552
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
29553
+ return;
29554
+ }
29555
+ const { xThumbWidth, yThumbHeight } = reactData;
29556
+ const trackXEl = refTrackXElem.value;
29557
+ const thumbXElem = refThumbXElem.value;
29558
+ const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
29559
+ internalData.xThumbLeft = xThumbLeft;
29560
+ if (thumbXElem && xThumbWidth) {
29561
+ thumbXElem.style.width = xThumbWidth + 'px';
29562
+ thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
29563
+ }
29564
+ const trackYEl = refTrackYElem.value;
29565
+ const thumbYElem = refThumbYElem.value;
29566
+ const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
29567
+ internalData.yThumbTop = yThumbTop;
29568
+ if (thumbYElem && yThumbHeight) {
29569
+ thumbYElem.style.height = yThumbHeight + 'px';
29570
+ thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
29571
+ }
29572
+ };
29573
+ const clickTrackXEvent = (evnt) => {
29574
+ const { elemStore } = internalData;
29575
+ const trackEl = evnt.currentTarget;
29576
+ if (trackEl !== evnt.target) {
29577
+ return;
29578
+ }
29579
+ const viewEl = getRefElem(elemStore['main-body-scroll']);
29580
+ if (!viewEl) {
29581
+ return;
29582
+ }
29583
+ const { xThumbWidth } = reactData;
29584
+ const trackRect = trackEl.getBoundingClientRect();
29585
+ viewEl.scrollTo({
29586
+ left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
29587
+ behavior: 'auto'
29588
+ });
29589
+ };
29590
+ const clickTrackYEvent = (evnt) => {
29591
+ const { elemStore } = internalData;
29592
+ const trackEl = evnt.currentTarget;
29593
+ if (trackEl !== evnt.target) {
29594
+ return;
29595
+ }
29596
+ const viewEl = getRefElem(elemStore['main-body-scroll']);
29597
+ if (!viewEl) {
29598
+ return;
29599
+ }
29600
+ const { yThumbHeight } = reactData;
29601
+ const trackRect = trackEl.getBoundingClientRect();
29602
+ viewEl.scrollTo({
29603
+ top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
29604
+ behavior: 'auto'
29605
+ });
29606
+ };
29607
+ const pointerdownThumbXEvent = (evnt) => {
29608
+ const { elemStore } = internalData;
29609
+ const thumbEl = evnt.currentTarget;
29610
+ internalData.isThumbDrag = true;
29611
+ thumbEl.setPointerCapture(evnt.pointerId);
29612
+ const viewEl = getRefElem(elemStore['main-body-scroll']);
29613
+ if (!viewEl) {
29614
+ return;
29615
+ }
29616
+ const { xThumbWidth } = reactData;
29617
+ const trackEl = thumbEl.parentElement;
29618
+ const trackRect = trackEl.getBoundingClientRect();
29619
+ const pointerPosition = evnt.clientX - trackRect.left;
29620
+ // 记录 thumb 的偏移
29621
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
29622
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
29623
+ };
29624
+ const pointermoveThumbXEvent = (evnt) => {
29625
+ const thumbEl = evnt.currentTarget;
29626
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
29627
+ return;
29628
+ }
29629
+ const { elemStore, isThumbDrag, thumbDragOffset } = internalData;
29630
+ if (isThumbDrag) {
29631
+ const viewEl = getRefElem(elemStore['main-body-scroll']);
29632
+ if (!viewEl) {
29633
+ return;
29634
+ }
29635
+ const { xThumbWidth } = reactData;
29636
+ const thumbEl = evnt.currentTarget;
29637
+ const trackEl = thumbEl.parentElement;
29638
+ const trackRect = trackEl.getBoundingClientRect();
29639
+ // 更新偏移
29640
+ viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
29641
+ }
29642
+ };
29643
+ const cleatPointerThumbEvent = (evnt) => {
29644
+ const thumbEl = evnt.currentTarget;
29645
+ thumbEl.releasePointerCapture(evnt.pointerId);
29646
+ internalData.isThumbDrag = false;
29647
+ };
29648
+ const pointerdownThumbYEvent = (evnt) => {
29649
+ const { elemStore } = internalData;
29650
+ const thumbEl = evnt.currentTarget;
29651
+ internalData.isThumbDrag = true;
29652
+ thumbEl.setPointerCapture(evnt.pointerId);
29653
+ const viewEl = getRefElem(elemStore['main-body-scroll']);
29654
+ if (!viewEl) {
29655
+ return;
29656
+ }
29657
+ const { yThumbHeight } = reactData;
29658
+ const trackEl = thumbEl.parentElement;
29659
+ const trackRect = trackEl.getBoundingClientRect();
29660
+ const pointerPosition = evnt.clientY - trackRect.top;
29661
+ // 记录 thumb 的偏移
29662
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
29663
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
29664
+ };
29665
+ const pointermoveThumbYEvent = (evnt) => {
29666
+ const thumbEl = evnt.currentTarget;
29667
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
29668
+ return;
29669
+ }
29670
+ const { elemStore, isThumbDrag, thumbDragOffset } = internalData;
29671
+ if (isThumbDrag) {
29672
+ const viewEl = getRefElem(elemStore['main-body-scroll']);
29673
+ if (!viewEl) {
29674
+ return;
29675
+ }
29676
+ const { yThumbHeight } = reactData;
29677
+ const thumbEl = evnt.currentTarget;
29678
+ const trackEl = thumbEl.parentElement;
29679
+ const trackRect = trackEl.getBoundingClientRect();
29680
+ // 更新偏移
29681
+ viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
29682
+ }
29683
+ };
29376
29684
  // 检测对应模块是否安装
29377
29685
  // 'openExport,openPrint,exportData,openImport,importData,saveFile,readFile,importByFile,print'.split(',').forEach(name => {
29378
29686
  // ($xeTable as any)[name] = function () {
@@ -29397,6 +29705,8 @@ var VxeTableComponent = defineVxeComponent({
29397
29705
  const scrollbarOpts = computeScrollbarOpts.value;
29398
29706
  const scrollbarXOpts = computeScrollbarXOpts.value;
29399
29707
  const scrollbarYOpts = computeScrollbarYOpts.value;
29708
+ const scrollXVisible = computeScrollXVisible.value;
29709
+ const scrollYVisible = computeScrollYVisible.value;
29400
29710
  const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts;
29401
29711
  const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts;
29402
29712
  const isFixedLeft = fixedType === 'left';
@@ -29407,8 +29717,8 @@ var VxeTableComponent = defineVxeComponent({
29407
29717
  ref: isFixedLeft ? refLeftContainer : refRightContainer,
29408
29718
  class: [
29409
29719
  `vxe-table--fixed-${fixedType}-wrapper`,
29410
- `sx--${(scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden') ? 'hidden' : 'visible'}`,
29411
- `sy--${(scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden') ? 'hidden' : 'visible'}`,
29720
+ `sx--${(scrollXVisible === false || scrollXVisible === 'hidden') ? 'hidden' : 'visible'}`,
29721
+ `sy--${(scrollYVisible === false || scrollYVisible === 'hidden') ? 'hidden' : 'visible'}`,
29412
29722
  {
29413
29723
  [`x-ob--${osXBehavior}`]: osXBehavior,
29414
29724
  [`y-ob--${osYBehavior}`]: osYBehavior
@@ -29672,6 +29982,7 @@ var VxeTableComponent = defineVxeComponent({
29672
29982
  };
29673
29983
  const renderScrollY = () => {
29674
29984
  return h('div', {
29985
+ key: 'vsy',
29675
29986
  ref: refScrollYVirtualElem,
29676
29987
  class: 'vxe-table--scroll-y-virtual'
29677
29988
  }, [
@@ -29709,12 +30020,15 @@ var VxeTableComponent = defineVxeComponent({
29709
30020
  const scrollbarOpts = computeScrollbarOpts.value;
29710
30021
  const scrollbarXOpts = computeScrollbarXOpts.value;
29711
30022
  const scrollbarYOpts = computeScrollbarYOpts.value;
30023
+ const scrollXVisible = computeScrollXVisible.value;
30024
+ const scrollYVisible = computeScrollYVisible.value;
29712
30025
  const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts;
29713
30026
  const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts;
29714
30027
  const { leftList, rightList } = columnStore;
29715
30028
  const osXBehavior = XEUtils.eqNull(overscrollXBehavior) ? scrollbarOpts.overscrollBehavior : overscrollXBehavior;
29716
30029
  const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior;
29717
30030
  return h('div', {
30031
+ key: 'tvw',
29718
30032
  ref: refTableViewportElem,
29719
30033
  class: ['vxe-table--viewport-wrapper', {
29720
30034
  [`x-ob--${osXBehavior}`]: osXBehavior,
@@ -29724,8 +30038,8 @@ var VxeTableComponent = defineVxeComponent({
29724
30038
  h('div', {
29725
30039
  class: [
29726
30040
  'vxe-table--main-wrapper',
29727
- `sx--${(scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden') ? 'hidden' : 'visible'}`,
29728
- `sy--${(scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden') ? 'hidden' : 'visible'}`
30041
+ `sx--${(scrollXVisible === false || scrollXVisible === 'hidden') ? 'hidden' : 'visible'}`,
30042
+ `sy--${(scrollYVisible === false || scrollYVisible === 'hidden') ? 'hidden' : 'visible'}`
29729
30043
  ]
29730
30044
  }, [
29731
30045
  /**
@@ -29767,9 +30081,10 @@ var VxeTableComponent = defineVxeComponent({
29767
30081
  renderRowExpandedVNs()
29768
30082
  ]);
29769
30083
  };
29770
- const renderBody = () => {
30084
+ const renderNativeBody = () => {
29771
30085
  const scrollbarYToLeft = computeScrollbarYToLeft.value;
29772
30086
  return h('div', {
30087
+ key: 'lnb',
29773
30088
  class: 'vxe-table--layout-wrapper'
29774
30089
  }, scrollbarYToLeft
29775
30090
  ? [
@@ -29781,6 +30096,72 @@ var VxeTableComponent = defineVxeComponent({
29781
30096
  renderScrollY()
29782
30097
  ]);
29783
30098
  };
30099
+ const renderVirtualBody = () => {
30100
+ const $xeGanttView = internalData.xeGanttView;
30101
+ const { useScrollbar } = props;
30102
+ const { xThumbWidth, yThumbHeight } = reactData;
30103
+ const scrollbarOpts = computeScrollbarOpts.value;
30104
+ const scrollXAutoHide = computeScrollXAutoHide.value;
30105
+ const scrollYAutoHide = computeScrollYAutoHide.value;
30106
+ const scrollXVisible = computeScrollXVisible.value;
30107
+ const scrollYVisible = computeScrollYVisible.value;
30108
+ const scrollbarXToTop = computeScrollbarXToTop.value;
30109
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
30110
+ const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
30111
+ const hideXScroll = scrollXVisible === false || scrollXVisible === 'hidden';
30112
+ const hideYScroll = scrollYVisible === false || scrollYVisible === 'hidden';
30113
+ return h('div', {
30114
+ key: 'lvb',
30115
+ class: ['vxe-table--layout-wrapper', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
30116
+ 'is--virtual-scrollbar': useScrollbar,
30117
+ 'ov-padding': useScrollbar && scrollbarOpts.padding,
30118
+ 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
30119
+ 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
30120
+ 'overflow-y': yThumbHeight,
30121
+ 'overflow-x': xThumbWidth
30122
+ }]
30123
+ }, [
30124
+ renderViewport(),
30125
+ h('div', {
30126
+ class: scrollbarWrapperClss
30127
+ }, [
30128
+ hideXScroll
30129
+ ? renderEmptyElement$1($xeTable)
30130
+ : h('div', {
30131
+ ref: refTrackXElem,
30132
+ class: 'vxe-scrollbar--track-x',
30133
+ onClick: clickTrackXEvent
30134
+ }, [
30135
+ h('div', {
30136
+ ref: refThumbXElem,
30137
+ class: 'vxe-scrollbar--thumb-x',
30138
+ onPointerdown: pointerdownThumbXEvent,
30139
+ onPointermove: pointermoveThumbXEvent,
30140
+ onPointerup: cleatPointerThumbEvent,
30141
+ onPointercancel: cleatPointerThumbEvent,
30142
+ onLostpointercapture: cleatPointerThumbEvent
30143
+ })
30144
+ ]),
30145
+ hideYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)
30146
+ ? renderEmptyElement$1($xeTable)
30147
+ : h('div', {
30148
+ ref: refTrackYElem,
30149
+ class: 'vxe-scrollbar--track-y',
30150
+ onClick: clickTrackYEvent
30151
+ }, [
30152
+ h('div', {
30153
+ ref: refThumbYElem,
30154
+ class: 'vxe-scrollbar--thumb-y',
30155
+ onPointerdown: pointerdownThumbYEvent,
30156
+ onPointermove: pointermoveThumbYEvent,
30157
+ onPointerup: cleatPointerThumbEvent,
30158
+ onPointercancel: cleatPointerThumbEvent,
30159
+ onLostpointercapture: cleatPointerThumbEvent
30160
+ })
30161
+ ])
30162
+ ])
30163
+ ]);
30164
+ };
29784
30165
  const renderVN = () => {
29785
30166
  const { loading, stripe, useScrollbar, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props;
29786
30167
  const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData;
@@ -29886,15 +30267,17 @@ var VxeTableComponent = defineVxeComponent({
29886
30267
  h('div', {
29887
30268
  key: 'tw',
29888
30269
  class: 'vxe-table--render-wrapper'
29889
- }, scrollbarXToTop
29890
- ? [
29891
- renderScrollX(),
29892
- renderBody()
29893
- ]
29894
- : [
29895
- renderBody(),
29896
- renderScrollX()
29897
- ]),
30270
+ }, useScrollbar
30271
+ ? [renderVirtualBody()]
30272
+ : (scrollbarXToTop
30273
+ ? [
30274
+ renderScrollX(),
30275
+ renderNativeBody()
30276
+ ]
30277
+ : [
30278
+ renderNativeBody(),
30279
+ renderScrollX()
30280
+ ])),
29898
30281
  /**
29899
30282
  * 空数据
29900
30283
  */
@@ -30201,6 +30584,7 @@ var VxeTableComponent = defineVxeComponent({
30201
30584
  $xeTable.refreshColumn();
30202
30585
  });
30203
30586
  });
30587
+ const reScrollFlag = ref(0);
30204
30588
  const reLayoutFlag = ref(0);
30205
30589
  watch(computeSize, () => {
30206
30590
  reLayoutFlag.value++;
@@ -30233,36 +30617,47 @@ var VxeTableComponent = defineVxeComponent({
30233
30617
  watch(() => props.maxHeight, () => {
30234
30618
  reLayoutFlag.value++;
30235
30619
  });
30620
+ watch(() => VxeUI.getLanguage(), () => {
30621
+ reLayoutFlag.value++;
30622
+ });
30236
30623
  watch(computeScrollbarXToTop, () => {
30624
+ reScrollFlag.value++;
30237
30625
  reLayoutFlag.value++;
30238
30626
  });
30239
30627
  watch(computeScrollbarYToLeft, () => {
30628
+ reScrollFlag.value++;
30240
30629
  reLayoutFlag.value++;
30241
30630
  });
30242
- watch(() => VxeUI.getLanguage(), () => {
30631
+ watch(computeScrollXVisible, () => {
30632
+ reScrollFlag.value++;
30243
30633
  reLayoutFlag.value++;
30244
30634
  });
30245
- watch(() => {
30246
- const scrollbarXOpts = computeScrollbarXOpts.value;
30247
- return scrollbarXOpts.visible;
30248
- }, () => {
30635
+ watch(computeScrollYVisible, () => {
30636
+ reScrollFlag.value++;
30249
30637
  reLayoutFlag.value++;
30250
30638
  });
30251
- watch(() => {
30252
- const scrollbarYOpts = computeScrollbarYOpts.value;
30253
- return scrollbarYOpts.visible;
30254
- }, () => {
30639
+ watch(computeScrollXHeight, () => {
30640
+ reScrollFlag.value++;
30255
30641
  reLayoutFlag.value++;
30256
30642
  });
30257
- watch(() => {
30258
- const cellOpts = computeCellOpts.value;
30259
- return cellOpts.height;
30260
- }, () => {
30643
+ watch(computeScrollYWidth, () => {
30644
+ reScrollFlag.value++;
30645
+ reLayoutFlag.value++;
30646
+ });
30647
+ watch(computeCellHeitht, () => {
30261
30648
  reLayoutFlag.value++;
30262
30649
  });
30263
30650
  watch(reLayoutFlag, () => {
30264
30651
  $xeTable.recalculate(true);
30265
30652
  });
30653
+ watch(reScrollFlag, () => {
30654
+ nextTick(() => {
30655
+ $xeTable.updateScrollbar();
30656
+ nextTick(() => {
30657
+ $xeTable.updateScrollbar();
30658
+ });
30659
+ });
30660
+ });
30266
30661
  const footFlag = ref(0);
30267
30662
  watch(() => props.footerData ? props.footerData.length : -1, () => {
30268
30663
  footFlag.value++;
@@ -30378,7 +30773,6 @@ var VxeTableComponent = defineVxeComponent({
30378
30773
  }
30379
30774
  });
30380
30775
  $xeTable.preventEvent(null, 'created', { $table: $xeTable });
30381
- let resizeObserver;
30382
30776
  onActivated(() => {
30383
30777
  $xeTable.recalculate().then(() => $xeTable.refreshScroll());
30384
30778
  $xeTable.preventEvent(null, 'activated', { $table: $xeTable });
@@ -30394,7 +30788,7 @@ var VxeTableComponent = defineVxeComponent({
30394
30788
  });
30395
30789
  onMounted(() => {
30396
30790
  const { editConfig, exportConfig, importConfig, treeConfig, minHeight, keepSource, areaConfig } = props;
30397
- const { scrollXStore, scrollYStore } = internalData;
30791
+ const { elemStore, scrollXStore, scrollYStore } = internalData;
30398
30792
  const columnOpts = computeColumnOpts.value;
30399
30793
  const columnDragOpts = computeColumnDragOpts.value;
30400
30794
  const aggregateOpts = computeAggregateOpts.value;
@@ -30667,12 +31061,26 @@ var VxeTableComponent = defineVxeComponent({
30667
31061
  handleUpdateRowGroup(groupFields);
30668
31062
  initData();
30669
31063
  nextTick(() => {
30670
- if (props.autoResize) {
30671
- const el = refElem.value;
31064
+ const { useScrollbar, autoResize } = props;
31065
+ const el = refElem.value;
31066
+ if (useScrollbar) {
31067
+ const viewInnerEl = getRefElem(elemStore['main-body-table']);
31068
+ const scrollObserver = globalResize.create(() => {
31069
+ reScrollFlag.value++;
31070
+ });
31071
+ if (el) {
31072
+ scrollObserver.observe(el);
31073
+ }
31074
+ if (viewInnerEl) {
31075
+ scrollObserver.observe(viewInnerEl);
31076
+ }
31077
+ internalData.scrollObserver = scrollObserver;
31078
+ }
31079
+ if (autoResize) {
30672
31080
  const parentEl = $xeTable.getParentElem();
30673
- resizeObserver = globalResize.create(() => {
31081
+ const resizeObserver = globalResize.create(() => {
30674
31082
  if (props.autoResize) {
30675
- layoutReFlag.value++;
31083
+ handleResizeEvent();
30676
31084
  }
30677
31085
  });
30678
31086
  if (el) {
@@ -30681,6 +31089,7 @@ var VxeTableComponent = defineVxeComponent({
30681
31089
  if (parentEl) {
30682
31090
  resizeObserver.observe(parentEl);
30683
31091
  }
31092
+ internalData.resizeObserver = resizeObserver;
30684
31093
  }
30685
31094
  });
30686
31095
  if (virtualYOpts.mode !== 'scroll') {
@@ -30702,7 +31111,7 @@ var VxeTableComponent = defineVxeComponent({
30702
31111
  $xeTable.preventEvent(null, 'mounted', { $table: $xeTable });
30703
31112
  });
30704
31113
  onBeforeUnmount(() => {
30705
- const { _sToTime } = internalData;
31114
+ const { resizeObserver, scrollObserver, _sToTime } = internalData;
30706
31115
  if (_sToTime) {
30707
31116
  clearTimeout(_sToTime);
30708
31117
  }
@@ -30713,6 +31122,9 @@ var VxeTableComponent = defineVxeComponent({
30713
31122
  internalData.cvCacheMaps = {};
30714
31123
  internalData.prevDragRow = null;
30715
31124
  internalData.prevDragCol = null;
31125
+ if (scrollObserver) {
31126
+ scrollObserver.disconnect();
31127
+ }
30716
31128
  if (resizeObserver) {
30717
31129
  resizeObserver.disconnect();
30718
31130
  }