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

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 (60) hide show
  1. package/README.md +2 -2
  2. package/dist/all.esm.js +478 -101
  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/module/custom/panel.js +2 -2
  10. package/es/table/module/filter/hook.js +1 -0
  11. package/es/table/src/props.js +6 -2
  12. package/es/table/src/table.js +435 -85
  13. package/es/table/src/util.js +11 -2
  14. package/es/table/style.css +30 -0
  15. package/es/table/style.min.css +1 -1
  16. package/es/ui/index.js +1 -1
  17. package/es/ui/src/dom.js +11 -8
  18. package/es/ui/src/log.js +1 -1
  19. package/es/vxe-table/style.css +30 -0
  20. package/es/vxe-table/style.min.css +1 -1
  21. package/lib/index.css +1 -1
  22. package/lib/index.min.css +1 -1
  23. package/lib/index.umd.js +70 -43
  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/custom/panel.js +2 -2
  28. package/lib/table/module/custom/panel.min.js +1 -1
  29. package/lib/table/module/filter/hook.js +1 -0
  30. package/lib/table/module/filter/hook.min.js +1 -1
  31. package/lib/table/src/props.js +6 -2
  32. package/lib/table/src/props.min.js +1 -1
  33. package/lib/table/src/table.js +35 -25
  34. package/lib/table/src/table.min.js +1 -1
  35. package/lib/table/src/util.js +11 -2
  36. package/lib/table/src/util.min.js +1 -1
  37. package/lib/table/style/style.css +30 -0
  38. package/lib/table/style/style.min.css +1 -1
  39. package/lib/ui/index.js +1 -1
  40. package/lib/ui/index.min.js +1 -1
  41. package/lib/ui/src/dom.js +11 -7
  42. package/lib/ui/src/dom.min.js +1 -1
  43. package/lib/ui/src/log.js +1 -1
  44. package/lib/ui/src/log.min.js +1 -1
  45. package/lib/vxe-table/style/style.css +30 -0
  46. package/lib/vxe-table/style/style.min.css +1 -1
  47. package/package.json +2 -2
  48. package/packages/table/module/custom/panel.ts +2 -2
  49. package/packages/table/module/filter/hook.ts +1 -0
  50. package/packages/table/src/props.ts +6 -2
  51. package/packages/table/src/table.ts +468 -87
  52. package/packages/table/src/util.ts +15 -2
  53. package/packages/ui/src/dom.ts +12 -8
  54. package/styles/components/table.scss +65 -0
  55. /package/es/{iconfont.1791954193706.ttf → iconfont.1792117711657.ttf} +0 -0
  56. /package/es/{iconfont.1791954193706.woff → iconfont.1792117711657.woff} +0 -0
  57. /package/es/{iconfont.1791954193706.woff2 → iconfont.1792117711657.woff2} +0 -0
  58. /package/lib/{iconfont.1791954193706.ttf → iconfont.1792117711657.ttf} +0 -0
  59. /package/lib/{iconfont.1791954193706.woff → iconfont.1792117711657.woff} +0 -0
  60. /package/lib/{iconfont.1791954193706.woff2 → iconfont.1792117711657.woff2} +0 -0
@@ -35,7 +35,9 @@ import type { VxeGridConstructor, VxeGridPrivateMethods, VxeTableConstructor, Vx
35
35
 
36
36
  const { warnLog, errLog } = createComponentLog('table')
37
37
 
38
- const { getConfig, getIcon, getI18n, renderer, formats, createEvent, globalResize, interceptor, hooks, globalEvents, GLOBAL_EVENT_KEYS, useFns, renderEmptyElement } = VxeUI
38
+ const { getConfig, getIcon, getI18n, renderer, formats, scrollbarUtils, createEvent, globalResize, interceptor, hooks, domUtils, globalEvents, GLOBAL_EVENT_KEYS, useFns, renderEmptyElement } = VxeUI
39
+
40
+ const { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } = scrollbarUtils || {}
39
41
 
40
42
  const supportMaxRow = 5e6
41
43
  const customStorageKey = 'VXE_CUSTOM_STORE'
@@ -135,6 +137,11 @@ export default defineVxeComponent({
135
137
  const refScrollXSpaceElem = ref<HTMLDivElement>()
136
138
  const refScrollYSpaceElem = ref<HTMLDivElement>()
137
139
 
140
+ const refTrackXElem = ref<HTMLDivElement>()
141
+ const refTrackYElem = ref<HTMLDivElement>()
142
+ const refThumbXElem = ref<HTMLDivElement>()
143
+ const refThumbYElem = ref<HTMLDivElement>()
144
+
138
145
  let $xeToolbar: VxeToolbarConstructor
139
146
 
140
147
  const computeTableId = computed(() => {
@@ -237,6 +244,42 @@ export default defineVxeComponent({
237
244
  return scrollbarOpts.y ? Object.assign({}, scrollbarOpts.y, scrollbarOpts.yConfig) : (scrollbarOpts.yConfig || {})
238
245
  })
239
246
 
247
+ const computeScrollXHeight = computed(() => {
248
+ const scrollbarOpts = computeScrollbarOpts.value
249
+ const scrollbarXOpts = computeScrollbarXOpts.value
250
+ return XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), scrollDefaultConf.height))
251
+ })
252
+
253
+ const computeScrollYWidth = computed(() => {
254
+ const scrollbarOpts = computeScrollbarOpts.value
255
+ const scrollbarYOpts = computeScrollbarYOpts.value
256
+ return XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), scrollDefaultConf.width))
257
+ })
258
+
259
+ const computeScrollXVisible = computed(() => {
260
+ const scrollbarOpts = computeScrollbarOpts.value
261
+ const scrollbarXOpts = computeScrollbarXOpts.value
262
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible)
263
+ })
264
+
265
+ const computeScrollYVisible = computed(() => {
266
+ const scrollbarOpts = computeScrollbarOpts.value
267
+ const scrollbarYOpts = computeScrollbarYOpts.value
268
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible)
269
+ })
270
+
271
+ const computeScrollXAutoHide = computed(() => {
272
+ const scrollbarOpts = computeScrollbarOpts.value
273
+ const scrollbarXOpts = computeScrollbarXOpts.value
274
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), scrollDefaultConf.autoHide)
275
+ })
276
+
277
+ const computeScrollYAutoHide = computed(() => {
278
+ const scrollbarOpts = computeScrollbarOpts.value
279
+ const scrollbarYOpts = computeScrollbarYOpts.value
280
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), scrollDefaultConf.autoHide)
281
+ })
282
+
240
283
  const computeScrollbarXToTop = computed(() => {
241
284
  const scrollbarXOpts = computeScrollbarXOpts.value
242
285
  return scrollbarXOpts.position === 'top'
@@ -247,6 +290,24 @@ export default defineVxeComponent({
247
290
  return scrollbarYOpts.position === 'left'
248
291
  })
249
292
 
293
+ const computeScrollbarWrapperClss = computed(() => {
294
+ const { yThumbHeight, xThumbWidth } = reactData
295
+ const scrollbarXToTop = computeScrollbarXToTop.value
296
+ const scrollbarYToLeft = computeScrollbarYToLeft.value
297
+ const scrollXVisible = computeScrollXVisible.value
298
+ const scrollYVisible = computeScrollYVisible.value
299
+ return domUtils.buildClass([
300
+ 'vxe-scrollbar is--virtual',
301
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
302
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
303
+ `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
304
+ `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
305
+ ], {
306
+ 'overflow-y': yThumbHeight,
307
+ 'overflow-x': xThumbWidth
308
+ })
309
+ })
310
+
250
311
  const computeScrollYThreshold = computed(() => {
251
312
  const virtualYOpts = computeVirtualYOpts.value
252
313
  const { threshold } = virtualYOpts
@@ -282,6 +343,11 @@ export default defineVxeComponent({
282
343
  return cellOpts
283
344
  })
284
345
 
346
+ const computeCellHeitht = computed(() => {
347
+ const cellOpts = computeCellOpts.value
348
+ return cellOpts.height
349
+ })
350
+
285
351
  const computeHeaderCellOpts = computed(() => {
286
352
  const headerCellOpts = Object.assign({}, getConfig().table.headerCellConfig, props.headerCellConfig)
287
353
  const defaultRowHeight = computeDefaultRowHeight.value
@@ -360,7 +426,8 @@ export default defineVxeComponent({
360
426
  })
361
427
 
362
428
  const computeTooltipOpts = computed(() => {
363
- return Object.assign({}, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig)
429
+ const { useScrollbar } = props
430
+ return Object.assign({ useScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig)
364
431
  })
365
432
 
366
433
  const computeHeaderTooltipOpts = computed(() => {
@@ -639,11 +706,8 @@ export default defineVxeComponent({
639
706
  })
640
707
 
641
708
  const computeTableStyle = computed(() => {
642
- const scrollbarOpts = computeScrollbarOpts.value
643
- const scrollbarXOpts = computeScrollbarXOpts.value
644
- const scrollbarYOpts = computeScrollbarYOpts.value
645
- const barWidth = getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), scrollDefaultConf.width)
646
- const barHeight = getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), scrollDefaultConf.height)
709
+ const barWidth = computeScrollYWidth.value
710
+ const barHeight = computeScrollXHeight.value
647
711
  const stys: VxeComponentStyleType = {}
648
712
  if (barWidth || barHeight) {
649
713
  stys['--vxe-ui-table-view-scrollbar-width'] = toCssUnit(barWidth || barHeight)
@@ -859,8 +923,15 @@ export default defineVxeComponent({
859
923
  computeScrollbarOpts,
860
924
  computeScrollbarXOpts,
861
925
  computeScrollbarYOpts,
926
+ computeScrollXHeight,
927
+ computeScrollYWidth,
928
+ computeScrollXVisible,
929
+ computeScrollYVisible,
930
+ computeScrollXAutoHide,
931
+ computeScrollYAutoHide,
862
932
  computeScrollbarXToTop,
863
933
  computeScrollbarYToLeft,
934
+ computeScrollbarWrapperClss,
864
935
  computeColumnOpts,
865
936
  computeCurrentColumnOpts,
866
937
  computeScrollXThreshold,
@@ -2005,14 +2076,6 @@ export default defineVxeComponent({
2005
2076
  if (!bodyWrapperElem) {
2006
2077
  return
2007
2078
  }
2008
- const yHandleEl = refScrollYHandleElem.value
2009
- if (!yHandleEl) {
2010
- return
2011
- }
2012
- const xHandleEl = refScrollXHandleElem.value
2013
- if (!xHandleEl) {
2014
- return
2015
- }
2016
2079
  const columnOpts = computeColumnOpts.value
2017
2080
  let tWidth = 0
2018
2081
  const minCellWidth = 40 // 列宽最少限制 40px
@@ -2613,13 +2676,13 @@ export default defineVxeComponent({
2613
2676
  emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : ''
2614
2677
  }
2615
2678
 
2616
- const scrollbarXOpts = computeScrollbarXOpts.value
2617
- const scrollbarYOpts = computeScrollbarYOpts.value
2679
+ const scrollXVisible = computeScrollXVisible.value
2680
+ const scrollYVisible = computeScrollYVisible.value
2618
2681
  const scrollbarYToLeft = computeScrollbarYToLeft.value
2619
2682
 
2620
2683
  let xScrollbarVisible = overflowX ? 'visible' : 'hidden'
2621
- const hideXScroll = scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden'
2622
- if (!hideXScroll || $xeGanttView) {
2684
+ const hideXScroll = scrollXVisible === false || scrollXVisible === 'hidden'
2685
+ if (scrollXVisible === 'visible' || $xeGanttView) {
2623
2686
  osbHeight = scrollbarHeight
2624
2687
  xScrollbarVisible = 'visible'
2625
2688
  } else if (hideXScroll) {
@@ -2628,11 +2691,11 @@ export default defineVxeComponent({
2628
2691
  }
2629
2692
 
2630
2693
  let yScrollbarVisible = overflowY ? 'visible' : 'hidden'
2631
- const showYScroll = !(scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden')
2632
- if (!showYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)) {
2694
+ const hideYScroll = scrollYVisible === false || scrollYVisible === 'hidden'
2695
+ if (hideYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)) {
2633
2696
  osbWidth = 0
2634
2697
  yScrollbarVisible = 'hidden'
2635
- } else if (showYScroll) {
2698
+ } else if (scrollYVisible === 'visible') {
2636
2699
  osbWidth = scrollbarWidth
2637
2700
  yScrollbarVisible = 'visible'
2638
2701
  }
@@ -3462,7 +3525,6 @@ export default defineVxeComponent({
3462
3525
  const calcScrollbar = () => {
3463
3526
  const { scrollXWidth, scrollYHeight } = reactData
3464
3527
  const { elemStore } = internalData
3465
- const scrollbarOpts = computeScrollbarOpts.value
3466
3528
  const el = refElem.value
3467
3529
  if (!el || !el.clientWidth) {
3468
3530
  return
@@ -3472,21 +3534,28 @@ export default defineVxeComponent({
3472
3534
  const footerTableElem = getRefElem(elemStore['main-footer-table'])
3473
3535
  const xHandleEl = refScrollXHandleElem.value
3474
3536
  const yHandleEl = refScrollYHandleElem.value
3537
+ const thumbXElem = refThumbXElem.value
3538
+ const thumbYElem = refThumbYElem.value
3475
3539
  let overflowY = false
3476
3540
  let overflowX = false
3477
3541
  if (bodyWrapperElem) {
3478
- const scrollbarXOpts = computeScrollbarXOpts.value
3479
- const scrollbarYOpts = computeScrollbarYOpts.value
3480
- const barWidth = XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), scrollDefaultConf.width))
3481
- const barHeight = XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), scrollDefaultConf.height))
3542
+ const scrollbarOpts = computeScrollbarOpts.value
3543
+ const barWidth = computeScrollYWidth.value
3544
+ const barHeight = computeScrollXHeight.value
3482
3545
  overflowY = scrollYHeight > bodyWrapperElem.clientHeight
3483
- if (yHandleEl) {
3546
+ // 如果是虚拟滚动条
3547
+ if (thumbYElem) {
3548
+ reactData.scrollbarHeight = scrollbarOpts.padding ? thumbYElem.offsetWidth : 0
3549
+ } else if (yHandleEl) {
3484
3550
  reactData.scrollbarWidth = (barWidth || barHeight) || (yHandleEl.offsetWidth - yHandleEl.clientWidth) || 14
3485
3551
  }
3486
3552
  reactData.overflowY = overflowY
3487
3553
 
3488
3554
  overflowX = scrollXWidth > bodyWrapperElem.clientWidth
3489
- if (xHandleEl) {
3555
+ // 如果是虚拟滚动条
3556
+ if (thumbXElem) {
3557
+ reactData.scrollbarHeight = scrollbarOpts.padding ? thumbXElem.offsetHeight : 0
3558
+ } else if (xHandleEl) {
3490
3559
  reactData.scrollbarHeight = (barHeight || barWidth) || (xHandleEl.offsetHeight - xHandleEl.clientHeight) || 14
3491
3560
  }
3492
3561
 
@@ -3556,6 +3625,11 @@ export default defineVxeComponent({
3556
3625
  })
3557
3626
  }
3558
3627
 
3628
+ const updateScrollbar = () => {
3629
+ updateThumbSize()
3630
+ updateThumbOffset()
3631
+ }
3632
+
3559
3633
  const defaultMinRunDelay = 50
3560
3634
 
3561
3635
  const handleLazyRecalculate = (reFull: boolean, reWidth: boolean, reHeight: boolean, options?: {
@@ -3578,6 +3652,7 @@ export default defineVxeComponent({
3578
3652
  const refreshDelay = resizeOpts.refreshDelay || 30
3579
3653
  const reDelay = rceDelay + refreshDelay
3580
3654
  const el = refElem.value
3655
+ updateScrollbar()
3581
3656
  if (el && el.clientWidth) {
3582
3657
  autoCellWidth()
3583
3658
  updateRowExpandStyle()
@@ -11575,6 +11650,18 @@ export default defineVxeComponent({
11575
11650
  }
11576
11651
  return nextTick()
11577
11652
  },
11653
+ /**
11654
+ * @private
11655
+ */
11656
+ updateScrollbar () {
11657
+ return updateScrollbar()
11658
+ },
11659
+ /**
11660
+ * @private
11661
+ */
11662
+ updateThumbOffset () {
11663
+ return updateThumbOffset()
11664
+ },
11578
11665
  /**
11579
11666
  * 表头单元格按下事件
11580
11667
  */
@@ -12749,19 +12836,18 @@ export default defineVxeComponent({
12749
12836
  },
12750
12837
  handleScrollEvent (evnt, isRollY, isRollX, scrollTop, scrollLeft, params) {
12751
12838
  const { highlightHoverRow } = props
12752
- const { lastScrollLeft, lastScrollTop } = internalData
12753
- const xHandleEl = refScrollXHandleElem.value
12754
- const yHandleEl = refScrollYHandleElem.value
12755
- if (!xHandleEl || !yHandleEl) {
12839
+ const { elemStore, lastScrollLeft, lastScrollTop } = internalData
12840
+ const bodyScrollElem = getRefElem(elemStore['main-body-scroll'])
12841
+ if (!bodyScrollElem) {
12756
12842
  return
12757
12843
  }
12758
12844
  const rowOpts = computeRowOpts.value
12759
12845
  const validTip = refValidTooltip.value
12760
12846
  const tooltip = refTooltip.value
12761
- const bodyHeight = yHandleEl.clientHeight
12762
- const bodyWidth = xHandleEl.clientWidth
12763
- const scrollHeight = yHandleEl.scrollHeight
12764
- const scrollWidth = xHandleEl.scrollWidth
12847
+ const bodyHeight = bodyScrollElem.clientHeight
12848
+ const bodyWidth = bodyScrollElem.clientWidth
12849
+ const scrollHeight = bodyScrollElem.scrollHeight
12850
+ const scrollWidth = bodyScrollElem.scrollWidth
12765
12851
  let isTop = false
12766
12852
  let isBottom = false
12767
12853
  let isLeft = false
@@ -12828,6 +12914,7 @@ export default defineVxeComponent({
12828
12914
  direction,
12829
12915
  ...params
12830
12916
  }
12917
+ updateThumbOffset()
12831
12918
  updateRowExpandStyle()
12832
12919
  checkLastSyncScroll(isRollX, isRollY)
12833
12920
  if (isRollX) {
@@ -12870,6 +12957,7 @@ export default defineVxeComponent({
12870
12957
  }
12871
12958
  },
12872
12959
  triggerBodyScrollEvent (evnt, fixedType) {
12960
+ const { useScrollbar } = props
12873
12961
  const { scrollYLoad, scrollXLoad } = reactData
12874
12962
  const { elemStore, intoRunScroll, lastScrollTop, lastScrollLeft, inWheelScroll, inVirtualScroll, inHeaderScroll, inBodyScroll, scrollRenderType, inFooterScroll } = internalData
12875
12963
  if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
@@ -12889,20 +12977,21 @@ export default defineVxeComponent({
12889
12977
  if (!bodyScrollElem) {
12890
12978
  return
12891
12979
  }
12892
- if (!xHandleEl) {
12893
- return
12894
- }
12895
- if (!yHandleEl) {
12896
- return
12980
+ if (!useScrollbar) {
12981
+ if (!xHandleEl) {
12982
+ return
12983
+ }
12984
+ if (!yHandleEl) {
12985
+ return
12986
+ }
12897
12987
  }
12898
12988
  if (inBodyScroll) {
12899
12989
  if (scrollRenderType !== fixedType) {
12900
12990
  return
12901
12991
  }
12902
12992
  }
12903
-
12904
- let scrollTop = yHandleEl.scrollTop
12905
- let scrollLeft = xHandleEl.scrollLeft
12993
+ let scrollTop = 0
12994
+ let scrollLeft = 0
12906
12995
  if (leftScrollElem && fixedType === 'left') {
12907
12996
  scrollTop = leftScrollElem.scrollTop
12908
12997
  } else if (rightScrollElem && fixedType === 'right') {
@@ -13041,8 +13130,8 @@ export default defineVxeComponent({
13041
13130
 
13042
13131
  const { elemStore, lastScrollTop, lastScrollLeft } = internalData
13043
13132
  const rowOpts = computeRowOpts.value
13044
- const scrollbarXOpts = computeScrollbarXOpts.value
13045
- const scrollbarYOpts = computeScrollbarYOpts.value
13133
+ const scrollXVisible = computeScrollXVisible.value
13134
+ const scrollYVisible = computeScrollYVisible.value
13046
13135
  const xHandleEl = refScrollXHandleElem.value
13047
13136
  const yHandleEl = refScrollYHandleElem.value
13048
13137
  const leftScrollElem = getRefElem(elemStore['left-body-scroll'])
@@ -13069,14 +13158,14 @@ export default defineVxeComponent({
13069
13158
 
13070
13159
  if (isRollX) {
13071
13160
  // 如果禁用滚动
13072
- if (scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden') {
13161
+ if (scrollXVisible === false || scrollXVisible === 'hidden') {
13073
13162
  evnt.preventDefault()
13074
13163
  return
13075
13164
  }
13076
13165
  }
13077
13166
  if (isRollY) {
13078
13167
  // 如果禁用滚动
13079
- if (scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden') {
13168
+ if (scrollYVisible === false || scrollYVisible === 'hidden') {
13080
13169
  evnt.preventDefault()
13081
13170
  return
13082
13171
  }
@@ -13650,6 +13739,188 @@ export default defineVxeComponent({
13650
13739
  }
13651
13740
  }
13652
13741
 
13742
+ const updateThumbSize = () => {
13743
+ const { elemStore } = internalData
13744
+
13745
+ const viewEl = getRefElem(elemStore['main-body-scroll'])
13746
+ if (!viewEl) {
13747
+ return
13748
+ }
13749
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
13750
+ return
13751
+ }
13752
+ const trackXEl = refTrackXElem.value
13753
+ const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0
13754
+ const thumbXElem = refThumbXElem.value
13755
+ if (thumbXElem) {
13756
+ thumbXElem.style.width = xThumbWidth + 'px'
13757
+ }
13758
+ reactData.xThumbWidth = xThumbWidth
13759
+
13760
+ const trackYEl = refTrackYElem.value
13761
+
13762
+ const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0
13763
+ const thumbYElem = refThumbYElem.value
13764
+ if (thumbYElem) {
13765
+ thumbYElem.style.height = yThumbHeight + 'px'
13766
+ }
13767
+ reactData.yThumbHeight = yThumbHeight
13768
+ }
13769
+
13770
+ const updateThumbOffset = () => {
13771
+ const { elemStore } = internalData
13772
+
13773
+ const viewEl = getRefElem(elemStore['main-body-scroll'])
13774
+ if (!viewEl) {
13775
+ return
13776
+ }
13777
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
13778
+ return
13779
+ }
13780
+ const { xThumbWidth, yThumbHeight } = reactData
13781
+ const trackXEl = refTrackXElem.value
13782
+ const thumbXElem = refThumbXElem.value
13783
+ const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0
13784
+ internalData.xThumbLeft = xThumbLeft
13785
+ if (thumbXElem && xThumbWidth) {
13786
+ thumbXElem.style.width = xThumbWidth + 'px'
13787
+ thumbXElem.style.transform = `translateX(${xThumbLeft}px)`
13788
+ }
13789
+
13790
+ const trackYEl = refTrackYElem.value
13791
+ const thumbYElem = refThumbYElem.value
13792
+ const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0
13793
+ internalData.yThumbTop = yThumbTop
13794
+ if (thumbYElem && yThumbHeight) {
13795
+ thumbYElem.style.height = yThumbHeight + 'px'
13796
+ thumbYElem.style.transform = `translateY(${yThumbTop}px)`
13797
+ }
13798
+ }
13799
+
13800
+ const clickTrackXEvent = (evnt: MouseEvent) => {
13801
+ const { elemStore } = internalData
13802
+
13803
+ const trackEl = evnt.currentTarget as HTMLDivElement
13804
+ if (trackEl !== evnt.target) {
13805
+ return
13806
+ }
13807
+ const viewEl = getRefElem(elemStore['main-body-scroll'])
13808
+ if (!viewEl) {
13809
+ return
13810
+ }
13811
+ const { xThumbWidth } = reactData
13812
+ const trackRect = trackEl.getBoundingClientRect()
13813
+ viewEl.scrollTo({
13814
+ left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
13815
+ behavior: 'auto'
13816
+ })
13817
+ }
13818
+
13819
+ const clickTrackYEvent = (evnt: MouseEvent) => {
13820
+ const { elemStore } = internalData
13821
+
13822
+ const trackEl = evnt.currentTarget as HTMLDivElement
13823
+ if (trackEl !== evnt.target) {
13824
+ return
13825
+ }
13826
+ const viewEl = getRefElem(elemStore['main-body-scroll'])
13827
+ if (!viewEl) {
13828
+ return
13829
+ }
13830
+ const { yThumbHeight } = reactData
13831
+ const trackRect = trackEl.getBoundingClientRect()
13832
+ viewEl.scrollTo({
13833
+ top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
13834
+ behavior: 'auto'
13835
+ })
13836
+ }
13837
+
13838
+ const pointerdownThumbXEvent = (evnt: PointerEvent) => {
13839
+ const { elemStore } = internalData
13840
+
13841
+ const thumbEl = evnt.currentTarget as HTMLDivElement
13842
+ internalData.isThumbDrag = true
13843
+ thumbEl.setPointerCapture(evnt.pointerId)
13844
+
13845
+ const viewEl = getRefElem(elemStore['main-body-scroll'])
13846
+ if (!viewEl) {
13847
+ return
13848
+ }
13849
+ const { xThumbWidth } = reactData
13850
+ const trackEl = thumbEl.parentElement as HTMLDivElement
13851
+ const trackRect = trackEl.getBoundingClientRect()
13852
+ const pointerPosition = evnt.clientX - trackRect.left
13853
+ // 记录 thumb 的偏移
13854
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
13855
+ internalData.thumbDragOffset = pointerPosition - thumbOffset
13856
+ }
13857
+
13858
+ const pointermoveThumbXEvent = (evnt: PointerEvent) => {
13859
+ const thumbEl = evnt.currentTarget as HTMLDivElement
13860
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
13861
+ return
13862
+ }
13863
+ const { elemStore, isThumbDrag, thumbDragOffset } = internalData
13864
+ if (isThumbDrag) {
13865
+ const viewEl = getRefElem(elemStore['main-body-scroll'])
13866
+ if (!viewEl) {
13867
+ return
13868
+ }
13869
+ const { xThumbWidth } = reactData
13870
+ const thumbEl = evnt.currentTarget as HTMLDivElement
13871
+ const trackEl = thumbEl.parentElement as HTMLDivElement
13872
+ const trackRect = trackEl.getBoundingClientRect()
13873
+ // 更新偏移
13874
+ viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
13875
+ }
13876
+ }
13877
+
13878
+ const cleatPointerThumbEvent = (evnt: PointerEvent) => {
13879
+ const thumbEl = evnt.currentTarget as HTMLDivElement
13880
+ thumbEl.releasePointerCapture(evnt.pointerId)
13881
+ internalData.isThumbDrag = false
13882
+ }
13883
+
13884
+ const pointerdownThumbYEvent = (evnt: PointerEvent) => {
13885
+ const { elemStore } = internalData
13886
+
13887
+ const thumbEl = evnt.currentTarget as HTMLDivElement
13888
+ internalData.isThumbDrag = true
13889
+ thumbEl.setPointerCapture(evnt.pointerId)
13890
+
13891
+ const viewEl = getRefElem(elemStore['main-body-scroll'])
13892
+ if (!viewEl) {
13893
+ return
13894
+ }
13895
+ const { yThumbHeight } = reactData
13896
+ const trackEl = thumbEl.parentElement as HTMLDivElement
13897
+ const trackRect = trackEl.getBoundingClientRect()
13898
+ const pointerPosition = evnt.clientY - trackRect.top
13899
+ // 记录 thumb 的偏移
13900
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
13901
+ internalData.thumbDragOffset = pointerPosition - thumbOffset
13902
+ }
13903
+
13904
+ const pointermoveThumbYEvent = (evnt: PointerEvent) => {
13905
+ const thumbEl = evnt.currentTarget as HTMLDivElement
13906
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
13907
+ return
13908
+ }
13909
+ const { elemStore, isThumbDrag, thumbDragOffset } = internalData
13910
+ if (isThumbDrag) {
13911
+ const viewEl = getRefElem(elemStore['main-body-scroll'])
13912
+ if (!viewEl) {
13913
+ return
13914
+ }
13915
+ const { yThumbHeight } = reactData
13916
+ const thumbEl = evnt.currentTarget as HTMLDivElement
13917
+ const trackEl = thumbEl.parentElement as HTMLDivElement
13918
+ const trackRect = trackEl.getBoundingClientRect()
13919
+ // 更新偏移
13920
+ viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
13921
+ }
13922
+ }
13923
+
13653
13924
  // 检测对应模块是否安装
13654
13925
  // 'openExport,openPrint,exportData,openImport,importData,saveFile,readFile,importByFile,print'.split(',').forEach(name => {
13655
13926
  // ($xeTable as any)[name] = function () {
@@ -13676,6 +13947,8 @@ export default defineVxeComponent({
13676
13947
  const scrollbarOpts = computeScrollbarOpts.value
13677
13948
  const scrollbarXOpts = computeScrollbarXOpts.value
13678
13949
  const scrollbarYOpts = computeScrollbarYOpts.value
13950
+ const scrollXVisible = computeScrollXVisible.value
13951
+ const scrollYVisible = computeScrollYVisible.value
13679
13952
  const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts
13680
13953
  const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts
13681
13954
  const isFixedLeft = fixedType === 'left'
@@ -13686,8 +13959,8 @@ export default defineVxeComponent({
13686
13959
  ref: isFixedLeft ? refLeftContainer : refRightContainer,
13687
13960
  class: [
13688
13961
  `vxe-table--fixed-${fixedType}-wrapper`,
13689
- `sx--${(scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden') ? 'hidden' : 'visible'}`,
13690
- `sy--${(scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden') ? 'hidden' : 'visible'}`,
13962
+ `sx--${(scrollXVisible === false || scrollXVisible === 'hidden') ? 'hidden' : 'visible'}`,
13963
+ `sy--${(scrollYVisible === false || scrollYVisible === 'hidden') ? 'hidden' : 'visible'}`,
13691
13964
  {
13692
13965
  [`x-ob--${osXBehavior}`]: osXBehavior,
13693
13966
  [`y-ob--${osYBehavior}`]: osYBehavior
@@ -13960,6 +14233,7 @@ export default defineVxeComponent({
13960
14233
 
13961
14234
  const renderScrollY = () => {
13962
14235
  return h('div', {
14236
+ key: 'vsy',
13963
14237
  ref: refScrollYVirtualElem,
13964
14238
  class: 'vxe-table--scroll-y-virtual'
13965
14239
  }, [
@@ -13998,6 +14272,8 @@ export default defineVxeComponent({
13998
14272
  const scrollbarOpts = computeScrollbarOpts.value
13999
14273
  const scrollbarXOpts = computeScrollbarXOpts.value
14000
14274
  const scrollbarYOpts = computeScrollbarYOpts.value
14275
+ const scrollXVisible = computeScrollXVisible.value
14276
+ const scrollYVisible = computeScrollYVisible.value
14001
14277
  const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts
14002
14278
  const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts
14003
14279
  const { leftList, rightList } = columnStore
@@ -14005,6 +14281,7 @@ export default defineVxeComponent({
14005
14281
  const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior
14006
14282
 
14007
14283
  return h('div', {
14284
+ key: 'tvw',
14008
14285
  ref: refTableViewportElem,
14009
14286
  class: ['vxe-table--viewport-wrapper', {
14010
14287
  [`x-ob--${osXBehavior}`]: osXBehavior,
@@ -14014,8 +14291,8 @@ export default defineVxeComponent({
14014
14291
  h('div', {
14015
14292
  class: [
14016
14293
  'vxe-table--main-wrapper',
14017
- `sx--${(scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden') ? 'hidden' : 'visible'}`,
14018
- `sy--${(scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden') ? 'hidden' : 'visible'}`
14294
+ `sx--${(scrollXVisible === false || scrollXVisible === 'hidden') ? 'hidden' : 'visible'}`,
14295
+ `sy--${(scrollYVisible === false || scrollYVisible === 'hidden') ? 'hidden' : 'visible'}`
14019
14296
  ]
14020
14297
  }, [
14021
14298
  /**
@@ -14058,9 +14335,10 @@ export default defineVxeComponent({
14058
14335
  ])
14059
14336
  }
14060
14337
 
14061
- const renderBody = () => {
14338
+ const renderNativeBody = () => {
14062
14339
  const scrollbarYToLeft = computeScrollbarYToLeft.value
14063
14340
  return h('div', {
14341
+ key: 'lnb',
14064
14342
  class: 'vxe-table--layout-wrapper'
14065
14343
  }, scrollbarYToLeft
14066
14344
  ? [
@@ -14073,6 +14351,75 @@ export default defineVxeComponent({
14073
14351
  ])
14074
14352
  }
14075
14353
 
14354
+ const renderVirtualBody = () => {
14355
+ const $xeGanttView = internalData.xeGanttView
14356
+
14357
+ const { useScrollbar } = props
14358
+ const { xThumbWidth, yThumbHeight } = reactData
14359
+ const scrollbarOpts = computeScrollbarOpts.value
14360
+ const scrollXAutoHide = computeScrollXAutoHide.value
14361
+ const scrollYAutoHide = computeScrollYAutoHide.value
14362
+ const scrollXVisible = computeScrollXVisible.value
14363
+ const scrollYVisible = computeScrollYVisible.value
14364
+ const scrollbarXToTop = computeScrollbarXToTop.value
14365
+ const scrollbarYToLeft = computeScrollbarYToLeft.value
14366
+ const scrollbarWrapperClss = computeScrollbarWrapperClss.value
14367
+ const hideXScroll = scrollXVisible === false || scrollXVisible === 'hidden'
14368
+ const hideYScroll = scrollYVisible === false || scrollYVisible === 'hidden'
14369
+
14370
+ return h('div', {
14371
+ key: 'lvb',
14372
+ class: ['vxe-table--layout-wrapper', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
14373
+ 'is--virtual-scrollbar': useScrollbar,
14374
+ 'ov-padding': useScrollbar && scrollbarOpts.padding,
14375
+ 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
14376
+ 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
14377
+ 'overflow-y': yThumbHeight,
14378
+ 'overflow-x': xThumbWidth
14379
+ }]
14380
+ }, [
14381
+ renderViewport(),
14382
+ h('div', {
14383
+ class: scrollbarWrapperClss
14384
+ }, [
14385
+ hideXScroll
14386
+ ? renderEmptyElement($xeTable)
14387
+ : h('div', {
14388
+ ref: refTrackXElem,
14389
+ class: 'vxe-scrollbar--track-x',
14390
+ onClick: clickTrackXEvent
14391
+ }, [
14392
+ h('div', {
14393
+ ref: refThumbXElem,
14394
+ class: 'vxe-scrollbar--thumb-x',
14395
+ onPointerdown: pointerdownThumbXEvent,
14396
+ onPointermove: pointermoveThumbXEvent,
14397
+ onPointerup: cleatPointerThumbEvent,
14398
+ onPointercancel: cleatPointerThumbEvent,
14399
+ onLostpointercapture: cleatPointerThumbEvent
14400
+ })
14401
+ ]),
14402
+ hideYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)
14403
+ ? renderEmptyElement($xeTable)
14404
+ : h('div', {
14405
+ ref: refTrackYElem,
14406
+ class: 'vxe-scrollbar--track-y',
14407
+ onClick: clickTrackYEvent
14408
+ }, [
14409
+ h('div', {
14410
+ ref: refThumbYElem,
14411
+ class: 'vxe-scrollbar--thumb-y',
14412
+ onPointerdown: pointerdownThumbYEvent,
14413
+ onPointermove: pointermoveThumbYEvent,
14414
+ onPointerup: cleatPointerThumbEvent,
14415
+ onPointercancel: cleatPointerThumbEvent,
14416
+ onLostpointercapture: cleatPointerThumbEvent
14417
+ })
14418
+ ])
14419
+ ])
14420
+ ])
14421
+ }
14422
+
14076
14423
  const renderVN = () => {
14077
14424
  const { loading, stripe, useScrollbar, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props
14078
14425
  const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData
@@ -14188,15 +14535,17 @@ export default defineVxeComponent({
14188
14535
  h('div', {
14189
14536
  key: 'tw',
14190
14537
  class: 'vxe-table--render-wrapper'
14191
- }, scrollbarXToTop
14192
- ? [
14193
- renderScrollX(),
14194
- renderBody()
14195
- ]
14196
- : [
14197
- renderBody(),
14198
- renderScrollX()
14199
- ]),
14538
+ }, useScrollbar
14539
+ ? [renderVirtualBody()]
14540
+ : (scrollbarXToTop
14541
+ ? [
14542
+ renderScrollX(),
14543
+ renderNativeBody()
14544
+ ]
14545
+ : [
14546
+ renderNativeBody(),
14547
+ renderScrollX()
14548
+ ])),
14200
14549
  /**
14201
14550
  * 空数据
14202
14551
  */
@@ -14372,7 +14721,8 @@ export default defineVxeComponent({
14372
14721
  key: 'ctp',
14373
14722
  ref: refCommTooltip,
14374
14723
  isArrow: false,
14375
- enterable: false
14724
+ enterable: false,
14725
+ useScrollbar
14376
14726
  }),
14377
14727
  /**
14378
14728
  * 工具提示
@@ -14395,7 +14745,8 @@ export default defineVxeComponent({
14395
14745
  maxHeight: tableTipConfig.maxHeight,
14396
14746
  placement: tableTipConfig.placement,
14397
14747
  defaultPlacement: tableTipConfig.defaultPlacement,
14398
- popupClassName: tableTipConfig.popupClassName
14748
+ popupClassName: tableTipConfig.popupClassName,
14749
+ useScrollbar: tableTipConfig.useScrollbar
14399
14750
  }, currTooltipSlot
14400
14751
  ? {
14401
14752
  content: () => {
@@ -14434,7 +14785,8 @@ export default defineVxeComponent({
14434
14785
  theme: validTipConfig.theme,
14435
14786
  enterable: validTipConfig.enterable,
14436
14787
  enterDelay: validTipConfig.enterDelay,
14437
- leaveDelay: validTipConfig.leaveDelay
14788
+ leaveDelay: validTipConfig.leaveDelay,
14789
+ useScrollbar
14438
14790
  })
14439
14791
  : renderEmptyElement($xeTable)
14440
14792
  ])
@@ -14509,6 +14861,7 @@ export default defineVxeComponent({
14509
14861
  })
14510
14862
  })
14511
14863
 
14864
+ const reScrollFlag = ref(0)
14512
14865
  const reLayoutFlag = ref(0)
14513
14866
  watch(computeSize, () => {
14514
14867
  reLayoutFlag.value++
@@ -14541,37 +14894,49 @@ export default defineVxeComponent({
14541
14894
  watch(() => props.maxHeight, () => {
14542
14895
  reLayoutFlag.value++
14543
14896
  })
14897
+ watch(() => VxeUI.getLanguage(), () => {
14898
+ reLayoutFlag.value++
14899
+ })
14544
14900
  watch(computeScrollbarXToTop, () => {
14901
+ reScrollFlag.value++
14545
14902
  reLayoutFlag.value++
14546
14903
  })
14547
14904
  watch(computeScrollbarYToLeft, () => {
14905
+ reScrollFlag.value++
14548
14906
  reLayoutFlag.value++
14549
14907
  })
14550
- watch(() => VxeUI.getLanguage(), () => {
14908
+ watch(computeScrollXVisible, () => {
14909
+ reScrollFlag.value++
14551
14910
  reLayoutFlag.value++
14552
14911
  })
14553
- watch(() => {
14554
- const scrollbarXOpts = computeScrollbarXOpts.value
14555
- return scrollbarXOpts.visible
14556
- }, () => {
14912
+ watch(computeScrollYVisible, () => {
14913
+ reScrollFlag.value++
14557
14914
  reLayoutFlag.value++
14558
14915
  })
14559
- watch(() => {
14560
- const scrollbarYOpts = computeScrollbarYOpts.value
14561
- return scrollbarYOpts.visible
14562
- }, () => {
14916
+ watch(computeScrollXHeight, () => {
14917
+ reScrollFlag.value++
14563
14918
  reLayoutFlag.value++
14564
14919
  })
14565
- watch(() => {
14566
- const cellOpts = computeCellOpts.value
14567
- return cellOpts.height
14568
- }, () => {
14920
+ watch(computeScrollYWidth, () => {
14921
+ reScrollFlag.value++
14922
+ reLayoutFlag.value++
14923
+ })
14924
+ watch(computeCellHeitht, () => {
14569
14925
  reLayoutFlag.value++
14570
14926
  })
14571
14927
  watch(reLayoutFlag, () => {
14572
14928
  $xeTable.recalculate(true)
14573
14929
  })
14574
14930
 
14931
+ watch(reScrollFlag, () => {
14932
+ nextTick(() => {
14933
+ $xeTable.updateScrollbar()
14934
+ nextTick(() => {
14935
+ $xeTable.updateScrollbar()
14936
+ })
14937
+ })
14938
+ })
14939
+
14575
14940
  const footFlag = ref(0)
14576
14941
  watch(() => props.footerData ? props.footerData.length : -1, () => {
14577
14942
  footFlag.value++
@@ -14700,8 +15065,6 @@ export default defineVxeComponent({
14700
15065
 
14701
15066
  $xeTable.preventEvent(null, 'created', { $table: $xeTable })
14702
15067
 
14703
- let resizeObserver: ResizeObserver
14704
-
14705
15068
  onActivated(() => {
14706
15069
  $xeTable.recalculate().then(() => $xeTable.refreshScroll())
14707
15070
  $xeTable.preventEvent(null, 'activated', { $table: $xeTable })
@@ -14719,7 +15082,7 @@ export default defineVxeComponent({
14719
15082
 
14720
15083
  onMounted(() => {
14721
15084
  const { editConfig, exportConfig, importConfig, treeConfig, minHeight, keepSource, areaConfig } = props
14722
- const { scrollXStore, scrollYStore } = internalData
15085
+ const { elemStore, scrollXStore, scrollYStore } = internalData
14723
15086
  const columnOpts = computeColumnOpts.value
14724
15087
  const columnDragOpts = computeColumnDragOpts.value
14725
15088
  const aggregateOpts = computeAggregateOpts.value
@@ -15006,12 +15369,26 @@ export default defineVxeComponent({
15006
15369
  initData()
15007
15370
 
15008
15371
  nextTick(() => {
15009
- if (props.autoResize) {
15010
- const el = refElem.value
15372
+ const { useScrollbar, autoResize } = props
15373
+ const el = refElem.value
15374
+ if (useScrollbar) {
15375
+ const viewInnerEl = getRefElem(elemStore['main-body-table'])
15376
+ const scrollObserver = globalResize.create(() => {
15377
+ reScrollFlag.value++
15378
+ })
15379
+ if (el) {
15380
+ scrollObserver.observe(el)
15381
+ }
15382
+ if (viewInnerEl) {
15383
+ scrollObserver.observe(viewInnerEl)
15384
+ }
15385
+ internalData.scrollObserver = scrollObserver
15386
+ }
15387
+ if (autoResize) {
15011
15388
  const parentEl = $xeTable.getParentElem()
15012
- resizeObserver = globalResize.create(() => {
15389
+ const resizeObserver = globalResize.create(() => {
15013
15390
  if (props.autoResize) {
15014
- layoutReFlag.value++
15391
+ handleResizeEvent()
15015
15392
  }
15016
15393
  })
15017
15394
  if (el) {
@@ -15020,6 +15397,7 @@ export default defineVxeComponent({
15020
15397
  if (parentEl) {
15021
15398
  resizeObserver.observe(parentEl)
15022
15399
  }
15400
+ internalData.resizeObserver = resizeObserver
15023
15401
  }
15024
15402
  })
15025
15403
 
@@ -15044,7 +15422,7 @@ export default defineVxeComponent({
15044
15422
  })
15045
15423
 
15046
15424
  onBeforeUnmount(() => {
15047
- const { _sToTime } = internalData
15425
+ const { resizeObserver, scrollObserver, _sToTime } = internalData
15048
15426
  if (_sToTime) {
15049
15427
  clearTimeout(_sToTime)
15050
15428
  }
@@ -15058,6 +15436,9 @@ export default defineVxeComponent({
15058
15436
  internalData.prevDragRow = null
15059
15437
  internalData.prevDragCol = null
15060
15438
 
15439
+ if (scrollObserver) {
15440
+ scrollObserver.disconnect()
15441
+ }
15061
15442
  if (resizeObserver) {
15062
15443
  resizeObserver.disconnect()
15063
15444
  }