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.
- package/README.md +2 -2
- package/dist/all.esm.js +478 -101
- package/dist/style.css +1 -1
- package/dist/style.min.css +1 -1
- package/es/index.css +1 -1
- package/es/index.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/module/custom/panel.js +2 -2
- package/es/table/module/filter/hook.js +1 -0
- package/es/table/src/props.js +6 -2
- package/es/table/src/table.js +435 -85
- package/es/table/src/util.js +11 -2
- package/es/table/style.css +30 -0
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +1 -1
- package/es/ui/src/dom.js +11 -8
- package/es/ui/src/log.js +1 -1
- package/es/vxe-table/style.css +30 -0
- package/es/vxe-table/style.min.css +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +70 -43
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/custom/panel.js +2 -2
- package/lib/table/module/custom/panel.min.js +1 -1
- package/lib/table/module/filter/hook.js +1 -0
- package/lib/table/module/filter/hook.min.js +1 -1
- package/lib/table/src/props.js +6 -2
- package/lib/table/src/props.min.js +1 -1
- package/lib/table/src/table.js +35 -25
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +11 -2
- package/lib/table/src/util.min.js +1 -1
- package/lib/table/style/style.css +30 -0
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/dom.js +11 -7
- package/lib/ui/src/dom.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-table/style/style.css +30 -0
- package/lib/vxe-table/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/table/module/custom/panel.ts +2 -2
- package/packages/table/module/filter/hook.ts +1 -0
- package/packages/table/src/props.ts +6 -2
- package/packages/table/src/table.ts +468 -87
- package/packages/table/src/util.ts +15 -2
- package/packages/ui/src/dom.ts +12 -8
- package/styles/components/table.scss +65 -0
- /package/es/{iconfont.1791954193706.ttf → iconfont.1792117711657.ttf} +0 -0
- /package/es/{iconfont.1791954193706.woff → iconfont.1792117711657.woff} +0 -0
- /package/es/{iconfont.1791954193706.woff2 → iconfont.1792117711657.woff2} +0 -0
- /package/lib/{iconfont.1791954193706.ttf → iconfont.1792117711657.ttf} +0 -0
- /package/lib/{iconfont.1791954193706.woff → iconfont.1792117711657.woff} +0 -0
- /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
|
-
|
|
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
|
|
643
|
-
const
|
|
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
|
|
2617
|
-
const
|
|
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 =
|
|
2622
|
-
if (
|
|
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
|
|
2632
|
-
if (
|
|
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 (
|
|
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
|
|
3479
|
-
const
|
|
3480
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
12754
|
-
|
|
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 =
|
|
12762
|
-
const bodyWidth =
|
|
12763
|
-
const scrollHeight =
|
|
12764
|
-
const 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 (!
|
|
12893
|
-
|
|
12894
|
-
|
|
12895
|
-
|
|
12896
|
-
|
|
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
|
|
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
|
|
13045
|
-
const
|
|
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 (
|
|
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 (
|
|
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--${(
|
|
13690
|
-
`sy--${(
|
|
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--${(
|
|
14018
|
-
`sy--${(
|
|
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
|
|
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
|
-
},
|
|
14192
|
-
? [
|
|
14193
|
-
|
|
14194
|
-
|
|
14195
|
-
|
|
14196
|
-
|
|
14197
|
-
|
|
14198
|
-
|
|
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(
|
|
14908
|
+
watch(computeScrollXVisible, () => {
|
|
14909
|
+
reScrollFlag.value++
|
|
14551
14910
|
reLayoutFlag.value++
|
|
14552
14911
|
})
|
|
14553
|
-
watch(() => {
|
|
14554
|
-
|
|
14555
|
-
return scrollbarXOpts.visible
|
|
14556
|
-
}, () => {
|
|
14912
|
+
watch(computeScrollYVisible, () => {
|
|
14913
|
+
reScrollFlag.value++
|
|
14557
14914
|
reLayoutFlag.value++
|
|
14558
14915
|
})
|
|
14559
|
-
watch(() => {
|
|
14560
|
-
|
|
14561
|
-
return scrollbarYOpts.visible
|
|
14562
|
-
}, () => {
|
|
14916
|
+
watch(computeScrollXHeight, () => {
|
|
14917
|
+
reScrollFlag.value++
|
|
14563
14918
|
reLayoutFlag.value++
|
|
14564
14919
|
})
|
|
14565
|
-
watch(() => {
|
|
14566
|
-
|
|
14567
|
-
|
|
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
|
-
|
|
15010
|
-
|
|
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
|
-
|
|
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
|
}
|