vxe-table 4.23.0-beta.0 → 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.
- package/README.md +2 -2
- package/dist/all.esm.js +540 -103
- 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/locale/lang/fr-FR.js +29 -29
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/src/props.js +9 -1
- package/es/table/src/scrollbar.js +54 -0
- package/es/table/src/table.js +458 -89
- 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 +9 -11
- 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 +118 -38
- package/lib/index.umd.min.js +1 -1
- package/lib/locale/lang/fr-FR.js +29 -29
- package/lib/locale/lang/fr-FR.min.js +1 -1
- package/lib/locale/lang/fr-FR.umd.js +29 -29
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/src/props.js +9 -1
- package/lib/table/src/props.min.js +1 -1
- package/lib/table/src/scrollbar.js +63 -0
- package/lib/table/src/scrollbar.min.js +1 -0
- package/lib/table/src/table.js +33 -23
- 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 +9 -11
- package/lib/ui/index.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/locale/lang/fr-FR.ts +903 -903
- package/packages/table/src/props.ts +9 -1
- package/packages/table/src/scrollbar.ts +57 -0
- package/packages/table/src/table.ts +494 -91
- package/packages/table/src/util.ts +15 -2
- package/packages/ui/index.ts +8 -10
- package/styles/components/table.scss +65 -0
- /package/es/{iconfont.1791880428511.ttf → iconfont.1792035024476.ttf} +0 -0
- /package/es/{iconfont.1791880428511.woff → iconfont.1792035024476.woff} +0 -0
- /package/es/{iconfont.1791880428511.woff2 → iconfont.1792035024476.woff2} +0 -0
- /package/lib/{iconfont.1791880428511.ttf → iconfont.1792035024476.ttf} +0 -0
- /package/lib/{iconfont.1791880428511.woff → iconfont.1792035024476.woff} +0 -0
- /package/lib/{iconfont.1791880428511.woff2 → iconfont.1792035024476.woff2} +0 -0
|
@@ -2,11 +2,12 @@ import { h, ComponentPublicInstance, reactive, ref, Ref, provide, inject, nextTi
|
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
4
|
import { initTpImg, getTpImg, isPx, isScale, hasClass, addClass, removeClass, wheelScrollTopTo, wheelScrollLeftTo, getEventTargetNode, getPaddingTopBottomSize, setScrollTop, setScrollLeft, toCssUnit, hasControlKey, checkTargetElement, hasAxternalInputTarget } from '../../ui/src/dom'
|
|
5
|
-
import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue, hasEnableConf } from '../../ui/src/utils'
|
|
5
|
+
import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue, hasEnableConf, getDefaultConfig } from '../../ui/src/utils'
|
|
6
6
|
import { VxeUI } from '../../ui'
|
|
7
7
|
import { createReactData, createInternalData, getRowUniqueId, createRowId, clearTableAllStatus, getColumnList, toFilters, hasDeepKey, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, getColReMaxWidth, createHandleUpdateRowId, createHandleGetRowId, getCalcHeight, getCellRestHeight, getLastChildColumn, getRowMaxHeight, handleCustomStoreConfig, encodeRowid } from './util'
|
|
8
8
|
import { getSlotVNs } from '../../ui/src/vn'
|
|
9
9
|
import { moveRowAnimateToTb, clearRowAnimate, moveColAnimateToLr, clearColAnimate } from '../../ui/src/anime'
|
|
10
|
+
import { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } from './scrollbar'
|
|
10
11
|
import { createComponentLog } from '../../ui/src/log'
|
|
11
12
|
import { getCrossTableDragRowInfo } from './store'
|
|
12
13
|
import Cell from './cell'
|
|
@@ -35,7 +36,7 @@ import type { VxeGridConstructor, VxeGridPrivateMethods, VxeTableConstructor, Vx
|
|
|
35
36
|
|
|
36
37
|
const { warnLog, errLog } = createComponentLog('table')
|
|
37
38
|
|
|
38
|
-
const { getConfig, getIcon, getI18n, renderer, formats, createEvent, globalResize, interceptor, hooks, globalEvents, GLOBAL_EVENT_KEYS, useFns, renderEmptyElement } = VxeUI
|
|
39
|
+
const { getConfig, getIcon, getI18n, renderer, formats, createEvent, globalResize, interceptor, hooks, domUtils, globalEvents, GLOBAL_EVENT_KEYS, useFns, renderEmptyElement } = VxeUI
|
|
39
40
|
|
|
40
41
|
const supportMaxRow = 5e6
|
|
41
42
|
const customStorageKey = 'VXE_CUSTOM_STORE'
|
|
@@ -60,6 +61,8 @@ export default defineVxeComponent({
|
|
|
60
61
|
|
|
61
62
|
const browseObj = XEUtils.browse()
|
|
62
63
|
|
|
64
|
+
const scrollDefaultConf = Object.assign({}, getConfig().scrollbar)
|
|
65
|
+
|
|
63
66
|
// 使用已安装的组件,如果未安装则不渲染
|
|
64
67
|
const VxeUILoadingComponent = VxeUI.getComponent('VxeLoading')
|
|
65
68
|
const VxeUITooltipComponent = VxeUI.getComponent('VxeTooltip')
|
|
@@ -133,6 +136,11 @@ export default defineVxeComponent({
|
|
|
133
136
|
const refScrollXSpaceElem = ref<HTMLDivElement>()
|
|
134
137
|
const refScrollYSpaceElem = ref<HTMLDivElement>()
|
|
135
138
|
|
|
139
|
+
const refTrackXElem = ref<HTMLDivElement>()
|
|
140
|
+
const refTrackYElem = ref<HTMLDivElement>()
|
|
141
|
+
const refThumbXElem = ref<HTMLDivElement>()
|
|
142
|
+
const refThumbYElem = ref<HTMLDivElement>()
|
|
143
|
+
|
|
136
144
|
let $xeToolbar: VxeToolbarConstructor
|
|
137
145
|
|
|
138
146
|
const computeTableId = computed(() => {
|
|
@@ -227,12 +235,48 @@ export default defineVxeComponent({
|
|
|
227
235
|
|
|
228
236
|
const computeScrollbarXOpts = computed(() => {
|
|
229
237
|
const scrollbarOpts = computeScrollbarOpts.value
|
|
230
|
-
return Object.assign({}, scrollbarOpts.x,
|
|
238
|
+
return scrollbarOpts.x ? Object.assign({}, scrollbarOpts.x, scrollbarOpts.xConfig) : (scrollbarOpts.xConfig || {})
|
|
231
239
|
})
|
|
232
240
|
|
|
233
241
|
const computeScrollbarYOpts = computed(() => {
|
|
234
242
|
const scrollbarOpts = computeScrollbarOpts.value
|
|
235
|
-
return Object.assign({}, scrollbarOpts.y,
|
|
243
|
+
return scrollbarOpts.y ? Object.assign({}, scrollbarOpts.y, scrollbarOpts.yConfig) : (scrollbarOpts.yConfig || {})
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
const computeScrollXHeight = computed(() => {
|
|
247
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
248
|
+
const scrollbarXOpts = computeScrollbarXOpts.value
|
|
249
|
+
return XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), scrollDefaultConf.height))
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
const computeScrollYWidth = computed(() => {
|
|
253
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
254
|
+
const scrollbarYOpts = computeScrollbarYOpts.value
|
|
255
|
+
return XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), scrollDefaultConf.width))
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
const computeScrollXVisible = computed(() => {
|
|
259
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
260
|
+
const scrollbarXOpts = computeScrollbarXOpts.value
|
|
261
|
+
return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible)
|
|
262
|
+
})
|
|
263
|
+
|
|
264
|
+
const computeScrollYVisible = computed(() => {
|
|
265
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
266
|
+
const scrollbarYOpts = computeScrollbarYOpts.value
|
|
267
|
+
return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible)
|
|
268
|
+
})
|
|
269
|
+
|
|
270
|
+
const computeScrollXAutoHide = computed(() => {
|
|
271
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
272
|
+
const scrollbarXOpts = computeScrollbarXOpts.value
|
|
273
|
+
return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), scrollDefaultConf.autoHide)
|
|
274
|
+
})
|
|
275
|
+
|
|
276
|
+
const computeScrollYAutoHide = computed(() => {
|
|
277
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
278
|
+
const scrollbarYOpts = computeScrollbarYOpts.value
|
|
279
|
+
return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), scrollDefaultConf.autoHide)
|
|
236
280
|
})
|
|
237
281
|
|
|
238
282
|
const computeScrollbarXToTop = computed(() => {
|
|
@@ -245,6 +289,24 @@ export default defineVxeComponent({
|
|
|
245
289
|
return scrollbarYOpts.position === 'left'
|
|
246
290
|
})
|
|
247
291
|
|
|
292
|
+
const computeScrollbarWrapperClss = computed(() => {
|
|
293
|
+
const { yThumbHeight, xThumbWidth } = reactData
|
|
294
|
+
const scrollbarXToTop = computeScrollbarXToTop.value
|
|
295
|
+
const scrollbarYToLeft = computeScrollbarYToLeft.value
|
|
296
|
+
const scrollXVisible = computeScrollXVisible.value
|
|
297
|
+
const scrollYVisible = computeScrollYVisible.value
|
|
298
|
+
return domUtils.buildClass([
|
|
299
|
+
'vxe-scrollbar is--virtual',
|
|
300
|
+
`ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
|
|
301
|
+
`ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
|
|
302
|
+
`sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
|
|
303
|
+
`sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
|
|
304
|
+
], {
|
|
305
|
+
'overflow-y': yThumbHeight,
|
|
306
|
+
'overflow-x': xThumbWidth
|
|
307
|
+
})
|
|
308
|
+
})
|
|
309
|
+
|
|
248
310
|
const computeScrollYThreshold = computed(() => {
|
|
249
311
|
const virtualYOpts = computeVirtualYOpts.value
|
|
250
312
|
const { threshold } = virtualYOpts
|
|
@@ -280,6 +342,11 @@ export default defineVxeComponent({
|
|
|
280
342
|
return cellOpts
|
|
281
343
|
})
|
|
282
344
|
|
|
345
|
+
const computeCellHeitht = computed(() => {
|
|
346
|
+
const cellOpts = computeCellOpts.value
|
|
347
|
+
return cellOpts.height
|
|
348
|
+
})
|
|
349
|
+
|
|
283
350
|
const computeHeaderCellOpts = computed(() => {
|
|
284
351
|
const headerCellOpts = Object.assign({}, getConfig().table.headerCellConfig, props.headerCellConfig)
|
|
285
352
|
const defaultRowHeight = computeDefaultRowHeight.value
|
|
@@ -637,16 +704,16 @@ export default defineVxeComponent({
|
|
|
637
704
|
})
|
|
638
705
|
|
|
639
706
|
const computeTableStyle = computed(() => {
|
|
640
|
-
const
|
|
641
|
-
const
|
|
642
|
-
const
|
|
643
|
-
if (
|
|
644
|
-
|
|
707
|
+
const barWidth = computeScrollYWidth.value
|
|
708
|
+
const barHeight = computeScrollXHeight.value
|
|
709
|
+
const stys: VxeComponentStyleType = {}
|
|
710
|
+
if (barWidth || barHeight) {
|
|
711
|
+
stys['--vxe-ui-table-view-scrollbar-width'] = toCssUnit(barWidth || barHeight)
|
|
712
|
+
stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight)
|
|
713
|
+
stys['--vxe-ui-table-view-scrollbar-height'] = toCssUnit(barHeight || barWidth)
|
|
714
|
+
stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth)
|
|
645
715
|
}
|
|
646
|
-
|
|
647
|
-
tStys['--vxe-ui-table-view-scrollbar-height'] = toCssUnit(height)
|
|
648
|
-
}
|
|
649
|
-
return tStys
|
|
716
|
+
return stys
|
|
650
717
|
})
|
|
651
718
|
|
|
652
719
|
const computeTableRowExpandedList = computed(() => {
|
|
@@ -854,8 +921,15 @@ export default defineVxeComponent({
|
|
|
854
921
|
computeScrollbarOpts,
|
|
855
922
|
computeScrollbarXOpts,
|
|
856
923
|
computeScrollbarYOpts,
|
|
924
|
+
computeScrollXHeight,
|
|
925
|
+
computeScrollYWidth,
|
|
926
|
+
computeScrollXVisible,
|
|
927
|
+
computeScrollYVisible,
|
|
928
|
+
computeScrollXAutoHide,
|
|
929
|
+
computeScrollYAutoHide,
|
|
857
930
|
computeScrollbarXToTop,
|
|
858
931
|
computeScrollbarYToLeft,
|
|
932
|
+
computeScrollbarWrapperClss,
|
|
859
933
|
computeColumnOpts,
|
|
860
934
|
computeCurrentColumnOpts,
|
|
861
935
|
computeScrollXThreshold,
|
|
@@ -2000,14 +2074,6 @@ export default defineVxeComponent({
|
|
|
2000
2074
|
if (!bodyWrapperElem) {
|
|
2001
2075
|
return
|
|
2002
2076
|
}
|
|
2003
|
-
const yHandleEl = refScrollYHandleElem.value
|
|
2004
|
-
if (!yHandleEl) {
|
|
2005
|
-
return
|
|
2006
|
-
}
|
|
2007
|
-
const xHandleEl = refScrollXHandleElem.value
|
|
2008
|
-
if (!xHandleEl) {
|
|
2009
|
-
return
|
|
2010
|
-
}
|
|
2011
2077
|
const columnOpts = computeColumnOpts.value
|
|
2012
2078
|
let tWidth = 0
|
|
2013
2079
|
const minCellWidth = 40 // 列宽最少限制 40px
|
|
@@ -2600,7 +2666,6 @@ export default defineVxeComponent({
|
|
|
2600
2666
|
const isHeaderRenderOptimize = computeIsHeaderRenderOptimize.value
|
|
2601
2667
|
const isBodyRenderOptimize = computeIsBodyRenderOptimize.value
|
|
2602
2668
|
const isFooterRenderOptimize = computeIsFooterRenderOptimize.value
|
|
2603
|
-
const scrollbarOpts = computeScrollbarOpts.value
|
|
2604
2669
|
const mouseOpts = computeMouseOpts.value
|
|
2605
2670
|
const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper'])
|
|
2606
2671
|
const bodyTableElem = getRefElem(elemStore['main-body-table'])
|
|
@@ -2609,24 +2674,26 @@ export default defineVxeComponent({
|
|
|
2609
2674
|
emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : ''
|
|
2610
2675
|
}
|
|
2611
2676
|
|
|
2612
|
-
const
|
|
2613
|
-
const
|
|
2677
|
+
const scrollXVisible = computeScrollXVisible.value
|
|
2678
|
+
const scrollYVisible = computeScrollYVisible.value
|
|
2614
2679
|
const scrollbarYToLeft = computeScrollbarYToLeft.value
|
|
2615
2680
|
|
|
2616
2681
|
let xScrollbarVisible = overflowX ? 'visible' : 'hidden'
|
|
2617
|
-
|
|
2682
|
+
const hideXScroll = scrollXVisible === false || scrollXVisible === 'hidden'
|
|
2683
|
+
if (scrollXVisible === 'visible' || $xeGanttView) {
|
|
2618
2684
|
osbHeight = scrollbarHeight
|
|
2619
2685
|
xScrollbarVisible = 'visible'
|
|
2620
|
-
} else if (
|
|
2686
|
+
} else if (hideXScroll) {
|
|
2621
2687
|
osbHeight = 0
|
|
2622
2688
|
xScrollbarVisible = 'hidden'
|
|
2623
2689
|
}
|
|
2624
2690
|
|
|
2625
2691
|
let yScrollbarVisible = overflowY ? 'visible' : 'hidden'
|
|
2626
|
-
|
|
2692
|
+
const hideYScroll = scrollYVisible === false || scrollYVisible === 'hidden'
|
|
2693
|
+
if (hideYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)) {
|
|
2627
2694
|
osbWidth = 0
|
|
2628
2695
|
yScrollbarVisible = 'hidden'
|
|
2629
|
-
} else if (
|
|
2696
|
+
} else if (scrollYVisible === 'visible') {
|
|
2630
2697
|
osbWidth = scrollbarWidth
|
|
2631
2698
|
yScrollbarVisible = 'visible'
|
|
2632
2699
|
}
|
|
@@ -3456,7 +3523,6 @@ export default defineVxeComponent({
|
|
|
3456
3523
|
const calcScrollbar = () => {
|
|
3457
3524
|
const { scrollXWidth, scrollYHeight } = reactData
|
|
3458
3525
|
const { elemStore } = internalData
|
|
3459
|
-
const scrollbarOpts = computeScrollbarOpts.value
|
|
3460
3526
|
const el = refElem.value
|
|
3461
3527
|
if (!el || !el.clientWidth) {
|
|
3462
3528
|
return
|
|
@@ -3466,18 +3532,29 @@ export default defineVxeComponent({
|
|
|
3466
3532
|
const footerTableElem = getRefElem(elemStore['main-footer-table'])
|
|
3467
3533
|
const xHandleEl = refScrollXHandleElem.value
|
|
3468
3534
|
const yHandleEl = refScrollYHandleElem.value
|
|
3535
|
+
const thumbXElem = refThumbXElem.value
|
|
3536
|
+
const thumbYElem = refThumbYElem.value
|
|
3469
3537
|
let overflowY = false
|
|
3470
3538
|
let overflowX = false
|
|
3471
3539
|
if (bodyWrapperElem) {
|
|
3540
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
3541
|
+
const barWidth = computeScrollYWidth.value
|
|
3542
|
+
const barHeight = computeScrollXHeight.value
|
|
3472
3543
|
overflowY = scrollYHeight > bodyWrapperElem.clientHeight
|
|
3473
|
-
|
|
3474
|
-
|
|
3544
|
+
// 如果是虚拟滚动条
|
|
3545
|
+
if (thumbYElem) {
|
|
3546
|
+
reactData.scrollbarHeight = scrollbarOpts.padding ? thumbYElem.offsetWidth : 0
|
|
3547
|
+
} else if (yHandleEl) {
|
|
3548
|
+
reactData.scrollbarWidth = (barWidth || barHeight) || (yHandleEl.offsetWidth - yHandleEl.clientWidth) || 14
|
|
3475
3549
|
}
|
|
3476
3550
|
reactData.overflowY = overflowY
|
|
3477
3551
|
|
|
3478
3552
|
overflowX = scrollXWidth > bodyWrapperElem.clientWidth
|
|
3479
|
-
|
|
3480
|
-
|
|
3553
|
+
// 如果是虚拟滚动条
|
|
3554
|
+
if (thumbXElem) {
|
|
3555
|
+
reactData.scrollbarHeight = scrollbarOpts.padding ? thumbXElem.offsetHeight : 0
|
|
3556
|
+
} else if (xHandleEl) {
|
|
3557
|
+
reactData.scrollbarHeight = (barHeight || barWidth) || (xHandleEl.offsetHeight - xHandleEl.clientHeight) || 14
|
|
3481
3558
|
}
|
|
3482
3559
|
|
|
3483
3560
|
const hHeight = headerTableElem ? headerTableElem.clientHeight : 0
|
|
@@ -3546,6 +3623,11 @@ export default defineVxeComponent({
|
|
|
3546
3623
|
})
|
|
3547
3624
|
}
|
|
3548
3625
|
|
|
3626
|
+
const updateScrollbar = () => {
|
|
3627
|
+
updateThumbSize()
|
|
3628
|
+
updateThumbOffset()
|
|
3629
|
+
}
|
|
3630
|
+
|
|
3549
3631
|
const defaultMinRunDelay = 50
|
|
3550
3632
|
|
|
3551
3633
|
const handleLazyRecalculate = (reFull: boolean, reWidth: boolean, reHeight: boolean, options?: {
|
|
@@ -3568,6 +3650,7 @@ export default defineVxeComponent({
|
|
|
3568
3650
|
const refreshDelay = resizeOpts.refreshDelay || 30
|
|
3569
3651
|
const reDelay = rceDelay + refreshDelay
|
|
3570
3652
|
const el = refElem.value
|
|
3653
|
+
updateScrollbar()
|
|
3571
3654
|
if (el && el.clientWidth) {
|
|
3572
3655
|
autoCellWidth()
|
|
3573
3656
|
updateRowExpandStyle()
|
|
@@ -11565,6 +11648,18 @@ export default defineVxeComponent({
|
|
|
11565
11648
|
}
|
|
11566
11649
|
return nextTick()
|
|
11567
11650
|
},
|
|
11651
|
+
/**
|
|
11652
|
+
* @private
|
|
11653
|
+
*/
|
|
11654
|
+
updateScrollbar () {
|
|
11655
|
+
return updateScrollbar()
|
|
11656
|
+
},
|
|
11657
|
+
/**
|
|
11658
|
+
* @private
|
|
11659
|
+
*/
|
|
11660
|
+
updateThumbOffset () {
|
|
11661
|
+
return updateThumbOffset()
|
|
11662
|
+
},
|
|
11568
11663
|
/**
|
|
11569
11664
|
* 表头单元格按下事件
|
|
11570
11665
|
*/
|
|
@@ -12739,19 +12834,18 @@ export default defineVxeComponent({
|
|
|
12739
12834
|
},
|
|
12740
12835
|
handleScrollEvent (evnt, isRollY, isRollX, scrollTop, scrollLeft, params) {
|
|
12741
12836
|
const { highlightHoverRow } = props
|
|
12742
|
-
const { lastScrollLeft, lastScrollTop } = internalData
|
|
12743
|
-
const
|
|
12744
|
-
|
|
12745
|
-
if (!xHandleEl || !yHandleEl) {
|
|
12837
|
+
const { elemStore, lastScrollLeft, lastScrollTop } = internalData
|
|
12838
|
+
const bodyScrollElem = getRefElem(elemStore['main-body-scroll'])
|
|
12839
|
+
if (!bodyScrollElem) {
|
|
12746
12840
|
return
|
|
12747
12841
|
}
|
|
12748
12842
|
const rowOpts = computeRowOpts.value
|
|
12749
12843
|
const validTip = refValidTooltip.value
|
|
12750
12844
|
const tooltip = refTooltip.value
|
|
12751
|
-
const bodyHeight =
|
|
12752
|
-
const bodyWidth =
|
|
12753
|
-
const scrollHeight =
|
|
12754
|
-
const scrollWidth =
|
|
12845
|
+
const bodyHeight = bodyScrollElem.clientHeight
|
|
12846
|
+
const bodyWidth = bodyScrollElem.clientWidth
|
|
12847
|
+
const scrollHeight = bodyScrollElem.scrollHeight
|
|
12848
|
+
const scrollWidth = bodyScrollElem.scrollWidth
|
|
12755
12849
|
let isTop = false
|
|
12756
12850
|
let isBottom = false
|
|
12757
12851
|
let isLeft = false
|
|
@@ -12818,6 +12912,7 @@ export default defineVxeComponent({
|
|
|
12818
12912
|
direction,
|
|
12819
12913
|
...params
|
|
12820
12914
|
}
|
|
12915
|
+
updateThumbOffset()
|
|
12821
12916
|
updateRowExpandStyle()
|
|
12822
12917
|
checkLastSyncScroll(isRollX, isRollY)
|
|
12823
12918
|
if (isRollX) {
|
|
@@ -12860,6 +12955,7 @@ export default defineVxeComponent({
|
|
|
12860
12955
|
}
|
|
12861
12956
|
},
|
|
12862
12957
|
triggerBodyScrollEvent (evnt, fixedType) {
|
|
12958
|
+
const { useScrollbar } = props
|
|
12863
12959
|
const { scrollYLoad, scrollXLoad } = reactData
|
|
12864
12960
|
const { elemStore, intoRunScroll, lastScrollTop, lastScrollLeft, inWheelScroll, inVirtualScroll, inHeaderScroll, inBodyScroll, scrollRenderType, inFooterScroll } = internalData
|
|
12865
12961
|
if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
|
|
@@ -12879,20 +12975,21 @@ export default defineVxeComponent({
|
|
|
12879
12975
|
if (!bodyScrollElem) {
|
|
12880
12976
|
return
|
|
12881
12977
|
}
|
|
12882
|
-
if (!
|
|
12883
|
-
|
|
12884
|
-
|
|
12885
|
-
|
|
12886
|
-
|
|
12978
|
+
if (!useScrollbar) {
|
|
12979
|
+
if (!xHandleEl) {
|
|
12980
|
+
return
|
|
12981
|
+
}
|
|
12982
|
+
if (!yHandleEl) {
|
|
12983
|
+
return
|
|
12984
|
+
}
|
|
12887
12985
|
}
|
|
12888
12986
|
if (inBodyScroll) {
|
|
12889
12987
|
if (scrollRenderType !== fixedType) {
|
|
12890
12988
|
return
|
|
12891
12989
|
}
|
|
12892
12990
|
}
|
|
12893
|
-
|
|
12894
|
-
let
|
|
12895
|
-
let scrollLeft = xHandleEl.scrollLeft
|
|
12991
|
+
let scrollTop = 0
|
|
12992
|
+
let scrollLeft = 0
|
|
12896
12993
|
if (leftScrollElem && fixedType === 'left') {
|
|
12897
12994
|
scrollTop = leftScrollElem.scrollTop
|
|
12898
12995
|
} else if (rightScrollElem && fixedType === 'right') {
|
|
@@ -13031,8 +13128,8 @@ export default defineVxeComponent({
|
|
|
13031
13128
|
|
|
13032
13129
|
const { elemStore, lastScrollTop, lastScrollLeft } = internalData
|
|
13033
13130
|
const rowOpts = computeRowOpts.value
|
|
13034
|
-
const
|
|
13035
|
-
const
|
|
13131
|
+
const scrollXVisible = computeScrollXVisible.value
|
|
13132
|
+
const scrollYVisible = computeScrollYVisible.value
|
|
13036
13133
|
const xHandleEl = refScrollXHandleElem.value
|
|
13037
13134
|
const yHandleEl = refScrollYHandleElem.value
|
|
13038
13135
|
const leftScrollElem = getRefElem(elemStore['left-body-scroll'])
|
|
@@ -13059,14 +13156,14 @@ export default defineVxeComponent({
|
|
|
13059
13156
|
|
|
13060
13157
|
if (isRollX) {
|
|
13061
13158
|
// 如果禁用滚动
|
|
13062
|
-
if (
|
|
13159
|
+
if (scrollXVisible === false || scrollXVisible === 'hidden') {
|
|
13063
13160
|
evnt.preventDefault()
|
|
13064
13161
|
return
|
|
13065
13162
|
}
|
|
13066
13163
|
}
|
|
13067
13164
|
if (isRollY) {
|
|
13068
13165
|
// 如果禁用滚动
|
|
13069
|
-
if (
|
|
13166
|
+
if (scrollYVisible === false || scrollYVisible === 'hidden') {
|
|
13070
13167
|
evnt.preventDefault()
|
|
13071
13168
|
return
|
|
13072
13169
|
}
|
|
@@ -13640,6 +13737,188 @@ export default defineVxeComponent({
|
|
|
13640
13737
|
}
|
|
13641
13738
|
}
|
|
13642
13739
|
|
|
13740
|
+
const updateThumbSize = () => {
|
|
13741
|
+
const { elemStore } = internalData
|
|
13742
|
+
|
|
13743
|
+
const viewEl = getRefElem(elemStore['main-body-scroll'])
|
|
13744
|
+
if (!viewEl) {
|
|
13745
|
+
return
|
|
13746
|
+
}
|
|
13747
|
+
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
13748
|
+
return
|
|
13749
|
+
}
|
|
13750
|
+
const trackXEl = refTrackXElem.value
|
|
13751
|
+
const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0
|
|
13752
|
+
const thumbXElem = refThumbXElem.value
|
|
13753
|
+
if (thumbXElem) {
|
|
13754
|
+
thumbXElem.style.width = xThumbWidth + 'px'
|
|
13755
|
+
}
|
|
13756
|
+
reactData.xThumbWidth = xThumbWidth
|
|
13757
|
+
|
|
13758
|
+
const trackYEl = refTrackYElem.value
|
|
13759
|
+
|
|
13760
|
+
const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0
|
|
13761
|
+
const thumbYElem = refThumbYElem.value
|
|
13762
|
+
if (thumbYElem) {
|
|
13763
|
+
thumbYElem.style.height = yThumbHeight + 'px'
|
|
13764
|
+
}
|
|
13765
|
+
reactData.yThumbHeight = yThumbHeight
|
|
13766
|
+
}
|
|
13767
|
+
|
|
13768
|
+
const updateThumbOffset = () => {
|
|
13769
|
+
const { elemStore } = internalData
|
|
13770
|
+
|
|
13771
|
+
const viewEl = getRefElem(elemStore['main-body-scroll'])
|
|
13772
|
+
if (!viewEl) {
|
|
13773
|
+
return
|
|
13774
|
+
}
|
|
13775
|
+
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
13776
|
+
return
|
|
13777
|
+
}
|
|
13778
|
+
const { xThumbWidth, yThumbHeight } = reactData
|
|
13779
|
+
const trackXEl = refTrackXElem.value
|
|
13780
|
+
const thumbXElem = refThumbXElem.value
|
|
13781
|
+
const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0
|
|
13782
|
+
internalData.xThumbLeft = xThumbLeft
|
|
13783
|
+
if (thumbXElem && xThumbWidth) {
|
|
13784
|
+
thumbXElem.style.width = xThumbWidth + 'px'
|
|
13785
|
+
thumbXElem.style.transform = `translateX(${xThumbLeft}px)`
|
|
13786
|
+
}
|
|
13787
|
+
|
|
13788
|
+
const trackYEl = refTrackYElem.value
|
|
13789
|
+
const thumbYElem = refThumbYElem.value
|
|
13790
|
+
const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0
|
|
13791
|
+
internalData.yThumbTop = yThumbTop
|
|
13792
|
+
if (thumbYElem && yThumbHeight) {
|
|
13793
|
+
thumbYElem.style.height = yThumbHeight + 'px'
|
|
13794
|
+
thumbYElem.style.transform = `translateY(${yThumbTop}px)`
|
|
13795
|
+
}
|
|
13796
|
+
}
|
|
13797
|
+
|
|
13798
|
+
const clickTrackXEvent = (evnt: MouseEvent) => {
|
|
13799
|
+
const { elemStore } = internalData
|
|
13800
|
+
|
|
13801
|
+
const trackEl = evnt.currentTarget as HTMLDivElement
|
|
13802
|
+
if (trackEl !== evnt.target) {
|
|
13803
|
+
return
|
|
13804
|
+
}
|
|
13805
|
+
const viewEl = getRefElem(elemStore['main-body-scroll'])
|
|
13806
|
+
if (!viewEl) {
|
|
13807
|
+
return
|
|
13808
|
+
}
|
|
13809
|
+
const { xThumbWidth } = reactData
|
|
13810
|
+
const trackRect = trackEl.getBoundingClientRect()
|
|
13811
|
+
viewEl.scrollTo({
|
|
13812
|
+
left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
|
|
13813
|
+
behavior: 'auto'
|
|
13814
|
+
})
|
|
13815
|
+
}
|
|
13816
|
+
|
|
13817
|
+
const clickTrackYEvent = (evnt: MouseEvent) => {
|
|
13818
|
+
const { elemStore } = internalData
|
|
13819
|
+
|
|
13820
|
+
const trackEl = evnt.currentTarget as HTMLDivElement
|
|
13821
|
+
if (trackEl !== evnt.target) {
|
|
13822
|
+
return
|
|
13823
|
+
}
|
|
13824
|
+
const viewEl = getRefElem(elemStore['main-body-scroll'])
|
|
13825
|
+
if (!viewEl) {
|
|
13826
|
+
return
|
|
13827
|
+
}
|
|
13828
|
+
const { yThumbHeight } = reactData
|
|
13829
|
+
const trackRect = trackEl.getBoundingClientRect()
|
|
13830
|
+
viewEl.scrollTo({
|
|
13831
|
+
top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
|
|
13832
|
+
behavior: 'auto'
|
|
13833
|
+
})
|
|
13834
|
+
}
|
|
13835
|
+
|
|
13836
|
+
const pointerdownThumbXEvent = (evnt: PointerEvent) => {
|
|
13837
|
+
const { elemStore } = internalData
|
|
13838
|
+
|
|
13839
|
+
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
13840
|
+
internalData.isThumbDrag = true
|
|
13841
|
+
thumbEl.setPointerCapture(evnt.pointerId)
|
|
13842
|
+
|
|
13843
|
+
const viewEl = getRefElem(elemStore['main-body-scroll'])
|
|
13844
|
+
if (!viewEl) {
|
|
13845
|
+
return
|
|
13846
|
+
}
|
|
13847
|
+
const { xThumbWidth } = reactData
|
|
13848
|
+
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
13849
|
+
const trackRect = trackEl.getBoundingClientRect()
|
|
13850
|
+
const pointerPosition = evnt.clientX - trackRect.left
|
|
13851
|
+
// 记录 thumb 的偏移
|
|
13852
|
+
const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
|
|
13853
|
+
internalData.thumbDragOffset = pointerPosition - thumbOffset
|
|
13854
|
+
}
|
|
13855
|
+
|
|
13856
|
+
const pointermoveThumbXEvent = (evnt: PointerEvent) => {
|
|
13857
|
+
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
13858
|
+
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
13859
|
+
return
|
|
13860
|
+
}
|
|
13861
|
+
const { elemStore, isThumbDrag, thumbDragOffset } = internalData
|
|
13862
|
+
if (isThumbDrag) {
|
|
13863
|
+
const viewEl = getRefElem(elemStore['main-body-scroll'])
|
|
13864
|
+
if (!viewEl) {
|
|
13865
|
+
return
|
|
13866
|
+
}
|
|
13867
|
+
const { xThumbWidth } = reactData
|
|
13868
|
+
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
13869
|
+
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
13870
|
+
const trackRect = trackEl.getBoundingClientRect()
|
|
13871
|
+
// 更新偏移
|
|
13872
|
+
viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
|
|
13873
|
+
}
|
|
13874
|
+
}
|
|
13875
|
+
|
|
13876
|
+
const cleatPointerThumbEvent = (evnt: PointerEvent) => {
|
|
13877
|
+
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
13878
|
+
thumbEl.releasePointerCapture(evnt.pointerId)
|
|
13879
|
+
internalData.isThumbDrag = false
|
|
13880
|
+
}
|
|
13881
|
+
|
|
13882
|
+
const pointerdownThumbYEvent = (evnt: PointerEvent) => {
|
|
13883
|
+
const { elemStore } = internalData
|
|
13884
|
+
|
|
13885
|
+
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
13886
|
+
internalData.isThumbDrag = true
|
|
13887
|
+
thumbEl.setPointerCapture(evnt.pointerId)
|
|
13888
|
+
|
|
13889
|
+
const viewEl = getRefElem(elemStore['main-body-scroll'])
|
|
13890
|
+
if (!viewEl) {
|
|
13891
|
+
return
|
|
13892
|
+
}
|
|
13893
|
+
const { yThumbHeight } = reactData
|
|
13894
|
+
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
13895
|
+
const trackRect = trackEl.getBoundingClientRect()
|
|
13896
|
+
const pointerPosition = evnt.clientY - trackRect.top
|
|
13897
|
+
// 记录 thumb 的偏移
|
|
13898
|
+
const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
|
|
13899
|
+
internalData.thumbDragOffset = pointerPosition - thumbOffset
|
|
13900
|
+
}
|
|
13901
|
+
|
|
13902
|
+
const pointermoveThumbYEvent = (evnt: PointerEvent) => {
|
|
13903
|
+
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
13904
|
+
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
13905
|
+
return
|
|
13906
|
+
}
|
|
13907
|
+
const { elemStore, isThumbDrag, thumbDragOffset } = internalData
|
|
13908
|
+
if (isThumbDrag) {
|
|
13909
|
+
const viewEl = getRefElem(elemStore['main-body-scroll'])
|
|
13910
|
+
if (!viewEl) {
|
|
13911
|
+
return
|
|
13912
|
+
}
|
|
13913
|
+
const { yThumbHeight } = reactData
|
|
13914
|
+
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
13915
|
+
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
13916
|
+
const trackRect = trackEl.getBoundingClientRect()
|
|
13917
|
+
// 更新偏移
|
|
13918
|
+
viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
|
|
13919
|
+
}
|
|
13920
|
+
}
|
|
13921
|
+
|
|
13643
13922
|
// 检测对应模块是否安装
|
|
13644
13923
|
// 'openExport,openPrint,exportData,openImport,importData,saveFile,readFile,importByFile,print'.split(',').forEach(name => {
|
|
13645
13924
|
// ($xeTable as any)[name] = function () {
|
|
@@ -13666,6 +13945,8 @@ export default defineVxeComponent({
|
|
|
13666
13945
|
const scrollbarOpts = computeScrollbarOpts.value
|
|
13667
13946
|
const scrollbarXOpts = computeScrollbarXOpts.value
|
|
13668
13947
|
const scrollbarYOpts = computeScrollbarYOpts.value
|
|
13948
|
+
const scrollXVisible = computeScrollXVisible.value
|
|
13949
|
+
const scrollYVisible = computeScrollYVisible.value
|
|
13669
13950
|
const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts
|
|
13670
13951
|
const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts
|
|
13671
13952
|
const isFixedLeft = fixedType === 'left'
|
|
@@ -13674,10 +13955,15 @@ export default defineVxeComponent({
|
|
|
13674
13955
|
const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior
|
|
13675
13956
|
return h('div', {
|
|
13676
13957
|
ref: isFixedLeft ? refLeftContainer : refRightContainer,
|
|
13677
|
-
class: [
|
|
13678
|
-
|
|
13679
|
-
|
|
13680
|
-
|
|
13958
|
+
class: [
|
|
13959
|
+
`vxe-table--fixed-${fixedType}-wrapper`,
|
|
13960
|
+
`sx--${(scrollXVisible === false || scrollXVisible === 'hidden') ? 'hidden' : 'visible'}`,
|
|
13961
|
+
`sy--${(scrollYVisible === false || scrollYVisible === 'hidden') ? 'hidden' : 'visible'}`,
|
|
13962
|
+
{
|
|
13963
|
+
[`x-ob--${osXBehavior}`]: osXBehavior,
|
|
13964
|
+
[`y-ob--${osYBehavior}`]: osYBehavior
|
|
13965
|
+
}
|
|
13966
|
+
]
|
|
13681
13967
|
}, [
|
|
13682
13968
|
showHeader
|
|
13683
13969
|
? h(TableHeaderComponent, {
|
|
@@ -13945,6 +14231,7 @@ export default defineVxeComponent({
|
|
|
13945
14231
|
|
|
13946
14232
|
const renderScrollY = () => {
|
|
13947
14233
|
return h('div', {
|
|
14234
|
+
key: 'vsy',
|
|
13948
14235
|
ref: refScrollYVirtualElem,
|
|
13949
14236
|
class: 'vxe-table--scroll-y-virtual'
|
|
13950
14237
|
}, [
|
|
@@ -13983,6 +14270,8 @@ export default defineVxeComponent({
|
|
|
13983
14270
|
const scrollbarOpts = computeScrollbarOpts.value
|
|
13984
14271
|
const scrollbarXOpts = computeScrollbarXOpts.value
|
|
13985
14272
|
const scrollbarYOpts = computeScrollbarYOpts.value
|
|
14273
|
+
const scrollXVisible = computeScrollXVisible.value
|
|
14274
|
+
const scrollYVisible = computeScrollYVisible.value
|
|
13986
14275
|
const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts
|
|
13987
14276
|
const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts
|
|
13988
14277
|
const { leftList, rightList } = columnStore
|
|
@@ -13990,6 +14279,7 @@ export default defineVxeComponent({
|
|
|
13990
14279
|
const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior
|
|
13991
14280
|
|
|
13992
14281
|
return h('div', {
|
|
14282
|
+
key: 'tvw',
|
|
13993
14283
|
ref: refTableViewportElem,
|
|
13994
14284
|
class: ['vxe-table--viewport-wrapper', {
|
|
13995
14285
|
[`x-ob--${osXBehavior}`]: osXBehavior,
|
|
@@ -13997,7 +14287,11 @@ export default defineVxeComponent({
|
|
|
13997
14287
|
}]
|
|
13998
14288
|
}, [
|
|
13999
14289
|
h('div', {
|
|
14000
|
-
class: [
|
|
14290
|
+
class: [
|
|
14291
|
+
'vxe-table--main-wrapper',
|
|
14292
|
+
`sx--${(scrollXVisible === false || scrollXVisible === 'hidden') ? 'hidden' : 'visible'}`,
|
|
14293
|
+
`sy--${(scrollYVisible === false || scrollYVisible === 'hidden') ? 'hidden' : 'visible'}`
|
|
14294
|
+
]
|
|
14001
14295
|
}, [
|
|
14002
14296
|
/**
|
|
14003
14297
|
* 表头
|
|
@@ -14039,9 +14333,10 @@ export default defineVxeComponent({
|
|
|
14039
14333
|
])
|
|
14040
14334
|
}
|
|
14041
14335
|
|
|
14042
|
-
const
|
|
14336
|
+
const renderNativeBody = () => {
|
|
14043
14337
|
const scrollbarYToLeft = computeScrollbarYToLeft.value
|
|
14044
14338
|
return h('div', {
|
|
14339
|
+
key: 'lnb',
|
|
14045
14340
|
class: 'vxe-table--layout-wrapper'
|
|
14046
14341
|
}, scrollbarYToLeft
|
|
14047
14342
|
? [
|
|
@@ -14054,8 +14349,77 @@ export default defineVxeComponent({
|
|
|
14054
14349
|
])
|
|
14055
14350
|
}
|
|
14056
14351
|
|
|
14352
|
+
const renderVirtualBody = () => {
|
|
14353
|
+
const $xeGanttView = internalData.xeGanttView
|
|
14354
|
+
|
|
14355
|
+
const { useScrollbar } = props
|
|
14356
|
+
const { xThumbWidth, yThumbHeight } = reactData
|
|
14357
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
14358
|
+
const scrollXAutoHide = computeScrollXAutoHide.value
|
|
14359
|
+
const scrollYAutoHide = computeScrollYAutoHide.value
|
|
14360
|
+
const scrollXVisible = computeScrollXVisible.value
|
|
14361
|
+
const scrollYVisible = computeScrollYVisible.value
|
|
14362
|
+
const scrollbarXToTop = computeScrollbarXToTop.value
|
|
14363
|
+
const scrollbarYToLeft = computeScrollbarYToLeft.value
|
|
14364
|
+
const scrollbarWrapperClss = computeScrollbarWrapperClss.value
|
|
14365
|
+
const hideXScroll = scrollXVisible === false || scrollXVisible === 'hidden'
|
|
14366
|
+
const hideYScroll = scrollYVisible === false || scrollYVisible === 'hidden'
|
|
14367
|
+
|
|
14368
|
+
return h('div', {
|
|
14369
|
+
key: 'lvb',
|
|
14370
|
+
class: ['vxe-table--layout-wrapper', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
|
|
14371
|
+
'is--virtual-scrollbar': useScrollbar,
|
|
14372
|
+
'ov-padding': useScrollbar && scrollbarOpts.padding,
|
|
14373
|
+
'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
|
|
14374
|
+
'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
|
|
14375
|
+
'overflow-y': yThumbHeight,
|
|
14376
|
+
'overflow-x': xThumbWidth
|
|
14377
|
+
}]
|
|
14378
|
+
}, [
|
|
14379
|
+
renderViewport(),
|
|
14380
|
+
h('div', {
|
|
14381
|
+
class: scrollbarWrapperClss
|
|
14382
|
+
}, [
|
|
14383
|
+
hideXScroll
|
|
14384
|
+
? renderEmptyElement($xeTable)
|
|
14385
|
+
: h('div', {
|
|
14386
|
+
ref: refTrackXElem,
|
|
14387
|
+
class: 'vxe-scrollbar--track-x',
|
|
14388
|
+
onClick: clickTrackXEvent
|
|
14389
|
+
}, [
|
|
14390
|
+
h('div', {
|
|
14391
|
+
ref: refThumbXElem,
|
|
14392
|
+
class: 'vxe-scrollbar--thumb-x',
|
|
14393
|
+
onPointerdown: pointerdownThumbXEvent,
|
|
14394
|
+
onPointermove: pointermoveThumbXEvent,
|
|
14395
|
+
onPointerup: cleatPointerThumbEvent,
|
|
14396
|
+
onPointercancel: cleatPointerThumbEvent,
|
|
14397
|
+
onLostpointercapture: cleatPointerThumbEvent
|
|
14398
|
+
})
|
|
14399
|
+
]),
|
|
14400
|
+
hideYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)
|
|
14401
|
+
? renderEmptyElement($xeTable)
|
|
14402
|
+
: h('div', {
|
|
14403
|
+
ref: refTrackYElem,
|
|
14404
|
+
class: 'vxe-scrollbar--track-y',
|
|
14405
|
+
onClick: clickTrackYEvent
|
|
14406
|
+
}, [
|
|
14407
|
+
h('div', {
|
|
14408
|
+
ref: refThumbYElem,
|
|
14409
|
+
class: 'vxe-scrollbar--thumb-y',
|
|
14410
|
+
onPointerdown: pointerdownThumbYEvent,
|
|
14411
|
+
onPointermove: pointermoveThumbYEvent,
|
|
14412
|
+
onPointerup: cleatPointerThumbEvent,
|
|
14413
|
+
onPointercancel: cleatPointerThumbEvent,
|
|
14414
|
+
onLostpointercapture: cleatPointerThumbEvent
|
|
14415
|
+
})
|
|
14416
|
+
])
|
|
14417
|
+
])
|
|
14418
|
+
])
|
|
14419
|
+
}
|
|
14420
|
+
|
|
14057
14421
|
const renderVN = () => {
|
|
14058
|
-
const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props
|
|
14422
|
+
const { loading, stripe, useScrollbar, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props
|
|
14059
14423
|
const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData
|
|
14060
14424
|
const { teleportToWrapperElem, popupToWrapperElem, customPopupToElem } = internalData
|
|
14061
14425
|
const { leftList, rightList } = columnStore
|
|
@@ -14104,7 +14468,7 @@ export default defineVxeComponent({
|
|
|
14104
14468
|
}
|
|
14105
14469
|
return h('div', {
|
|
14106
14470
|
ref: refElem,
|
|
14107
|
-
class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
|
|
14471
|
+
class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, useScrollbar ? 'is--virtual-scrollbar' : 'is--native-scrollbar', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
|
|
14108
14472
|
[`size--${vSize}`]: vSize,
|
|
14109
14473
|
[`valid-msg--${validOpts.msgMode}`]: !!editRules,
|
|
14110
14474
|
'vxe-editable': !!editConfig,
|
|
@@ -14169,15 +14533,17 @@ export default defineVxeComponent({
|
|
|
14169
14533
|
h('div', {
|
|
14170
14534
|
key: 'tw',
|
|
14171
14535
|
class: 'vxe-table--render-wrapper'
|
|
14172
|
-
},
|
|
14173
|
-
? [
|
|
14174
|
-
|
|
14175
|
-
|
|
14176
|
-
|
|
14177
|
-
|
|
14178
|
-
|
|
14179
|
-
|
|
14180
|
-
|
|
14536
|
+
}, useScrollbar
|
|
14537
|
+
? [renderVirtualBody()]
|
|
14538
|
+
: (scrollbarXToTop
|
|
14539
|
+
? [
|
|
14540
|
+
renderScrollX(),
|
|
14541
|
+
renderNativeBody()
|
|
14542
|
+
]
|
|
14543
|
+
: [
|
|
14544
|
+
renderNativeBody(),
|
|
14545
|
+
renderScrollX()
|
|
14546
|
+
])),
|
|
14181
14547
|
/**
|
|
14182
14548
|
* 空数据
|
|
14183
14549
|
*/
|
|
@@ -14490,6 +14856,7 @@ export default defineVxeComponent({
|
|
|
14490
14856
|
})
|
|
14491
14857
|
})
|
|
14492
14858
|
|
|
14859
|
+
const reScrollFlag = ref(0)
|
|
14493
14860
|
const reLayoutFlag = ref(0)
|
|
14494
14861
|
watch(computeSize, () => {
|
|
14495
14862
|
reLayoutFlag.value++
|
|
@@ -14522,37 +14889,49 @@ export default defineVxeComponent({
|
|
|
14522
14889
|
watch(() => props.maxHeight, () => {
|
|
14523
14890
|
reLayoutFlag.value++
|
|
14524
14891
|
})
|
|
14892
|
+
watch(() => VxeUI.getLanguage(), () => {
|
|
14893
|
+
reLayoutFlag.value++
|
|
14894
|
+
})
|
|
14525
14895
|
watch(computeScrollbarXToTop, () => {
|
|
14896
|
+
reScrollFlag.value++
|
|
14526
14897
|
reLayoutFlag.value++
|
|
14527
14898
|
})
|
|
14528
14899
|
watch(computeScrollbarYToLeft, () => {
|
|
14900
|
+
reScrollFlag.value++
|
|
14529
14901
|
reLayoutFlag.value++
|
|
14530
14902
|
})
|
|
14531
|
-
watch(
|
|
14903
|
+
watch(computeScrollXVisible, () => {
|
|
14904
|
+
reScrollFlag.value++
|
|
14532
14905
|
reLayoutFlag.value++
|
|
14533
14906
|
})
|
|
14534
|
-
watch(() => {
|
|
14535
|
-
|
|
14536
|
-
return scrollbarXOpts.visible
|
|
14537
|
-
}, () => {
|
|
14907
|
+
watch(computeScrollYVisible, () => {
|
|
14908
|
+
reScrollFlag.value++
|
|
14538
14909
|
reLayoutFlag.value++
|
|
14539
14910
|
})
|
|
14540
|
-
watch(() => {
|
|
14541
|
-
|
|
14542
|
-
return scrollbarYOpts.visible
|
|
14543
|
-
}, () => {
|
|
14911
|
+
watch(computeScrollXHeight, () => {
|
|
14912
|
+
reScrollFlag.value++
|
|
14544
14913
|
reLayoutFlag.value++
|
|
14545
14914
|
})
|
|
14546
|
-
watch(() => {
|
|
14547
|
-
|
|
14548
|
-
|
|
14549
|
-
}
|
|
14915
|
+
watch(computeScrollYWidth, () => {
|
|
14916
|
+
reScrollFlag.value++
|
|
14917
|
+
reLayoutFlag.value++
|
|
14918
|
+
})
|
|
14919
|
+
watch(computeCellHeitht, () => {
|
|
14550
14920
|
reLayoutFlag.value++
|
|
14551
14921
|
})
|
|
14552
14922
|
watch(reLayoutFlag, () => {
|
|
14553
14923
|
$xeTable.recalculate(true)
|
|
14554
14924
|
})
|
|
14555
14925
|
|
|
14926
|
+
watch(reScrollFlag, () => {
|
|
14927
|
+
nextTick(() => {
|
|
14928
|
+
$xeTable.updateScrollbar()
|
|
14929
|
+
nextTick(() => {
|
|
14930
|
+
$xeTable.updateScrollbar()
|
|
14931
|
+
})
|
|
14932
|
+
})
|
|
14933
|
+
})
|
|
14934
|
+
|
|
14556
14935
|
const footFlag = ref(0)
|
|
14557
14936
|
watch(() => props.footerData ? props.footerData.length : -1, () => {
|
|
14558
14937
|
footFlag.value++
|
|
@@ -14681,8 +15060,6 @@ export default defineVxeComponent({
|
|
|
14681
15060
|
|
|
14682
15061
|
$xeTable.preventEvent(null, 'created', { $table: $xeTable })
|
|
14683
15062
|
|
|
14684
|
-
let resizeObserver: ResizeObserver
|
|
14685
|
-
|
|
14686
15063
|
onActivated(() => {
|
|
14687
15064
|
$xeTable.recalculate().then(() => $xeTable.refreshScroll())
|
|
14688
15065
|
$xeTable.preventEvent(null, 'activated', { $table: $xeTable })
|
|
@@ -14700,7 +15077,7 @@ export default defineVxeComponent({
|
|
|
14700
15077
|
|
|
14701
15078
|
onMounted(() => {
|
|
14702
15079
|
const { editConfig, exportConfig, importConfig, treeConfig, minHeight, keepSource, areaConfig } = props
|
|
14703
|
-
const { scrollXStore, scrollYStore } = internalData
|
|
15080
|
+
const { elemStore, scrollXStore, scrollYStore } = internalData
|
|
14704
15081
|
const columnOpts = computeColumnOpts.value
|
|
14705
15082
|
const columnDragOpts = computeColumnDragOpts.value
|
|
14706
15083
|
const aggregateOpts = computeAggregateOpts.value
|
|
@@ -14722,6 +15099,7 @@ export default defineVxeComponent({
|
|
|
14722
15099
|
const areaOpts = computeAreaOpts.value
|
|
14723
15100
|
const sortOpts = computeSortOpts.value
|
|
14724
15101
|
const filterOpts = computeFilterOpts.value
|
|
15102
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
14725
15103
|
const { groupFields } = aggregateOpts
|
|
14726
15104
|
|
|
14727
15105
|
if ($xeGantt) {
|
|
@@ -14963,6 +15341,13 @@ export default defineVxeComponent({
|
|
|
14963
15341
|
// errLog('vxe.error.reqModule', ['Export'])
|
|
14964
15342
|
// }
|
|
14965
15343
|
|
|
15344
|
+
if (scrollbarOpts.x) {
|
|
15345
|
+
warnLog('vxe.error.delProp', ['scrollbar-config.x', 'scrollbar-config.xConfig'])
|
|
15346
|
+
}
|
|
15347
|
+
if (scrollbarOpts.y) {
|
|
15348
|
+
warnLog('vxe.error.delProp', ['scrollbar-config.y', 'scrollbar-config.yConfig'])
|
|
15349
|
+
}
|
|
15350
|
+
|
|
14966
15351
|
Object.assign(scrollYStore, {
|
|
14967
15352
|
startIndex: 0,
|
|
14968
15353
|
endIndex: 0,
|
|
@@ -14979,12 +15364,26 @@ export default defineVxeComponent({
|
|
|
14979
15364
|
initData()
|
|
14980
15365
|
|
|
14981
15366
|
nextTick(() => {
|
|
14982
|
-
|
|
14983
|
-
|
|
15367
|
+
const { useScrollbar, autoResize } = props
|
|
15368
|
+
const el = refElem.value
|
|
15369
|
+
if (useScrollbar) {
|
|
15370
|
+
const viewInnerEl = getRefElem(elemStore['main-body-table'])
|
|
15371
|
+
const scrollObserver = globalResize.create(() => {
|
|
15372
|
+
reScrollFlag.value++
|
|
15373
|
+
})
|
|
15374
|
+
if (el) {
|
|
15375
|
+
scrollObserver.observe(el)
|
|
15376
|
+
}
|
|
15377
|
+
if (viewInnerEl) {
|
|
15378
|
+
scrollObserver.observe(viewInnerEl)
|
|
15379
|
+
}
|
|
15380
|
+
internalData.scrollObserver = scrollObserver
|
|
15381
|
+
}
|
|
15382
|
+
if (autoResize) {
|
|
14984
15383
|
const parentEl = $xeTable.getParentElem()
|
|
14985
|
-
resizeObserver = globalResize.create(() => {
|
|
15384
|
+
const resizeObserver = globalResize.create(() => {
|
|
14986
15385
|
if (props.autoResize) {
|
|
14987
|
-
|
|
15386
|
+
handleResizeEvent()
|
|
14988
15387
|
}
|
|
14989
15388
|
})
|
|
14990
15389
|
if (el) {
|
|
@@ -14993,6 +15392,7 @@ export default defineVxeComponent({
|
|
|
14993
15392
|
if (parentEl) {
|
|
14994
15393
|
resizeObserver.observe(parentEl)
|
|
14995
15394
|
}
|
|
15395
|
+
internalData.resizeObserver = resizeObserver
|
|
14996
15396
|
}
|
|
14997
15397
|
})
|
|
14998
15398
|
|
|
@@ -15017,7 +15417,7 @@ export default defineVxeComponent({
|
|
|
15017
15417
|
})
|
|
15018
15418
|
|
|
15019
15419
|
onBeforeUnmount(() => {
|
|
15020
|
-
const { _sToTime } = internalData
|
|
15420
|
+
const { resizeObserver, scrollObserver, _sToTime } = internalData
|
|
15021
15421
|
if (_sToTime) {
|
|
15022
15422
|
clearTimeout(_sToTime)
|
|
15023
15423
|
}
|
|
@@ -15031,6 +15431,9 @@ export default defineVxeComponent({
|
|
|
15031
15431
|
internalData.prevDragRow = null
|
|
15032
15432
|
internalData.prevDragCol = null
|
|
15033
15433
|
|
|
15434
|
+
if (scrollObserver) {
|
|
15435
|
+
scrollObserver.disconnect()
|
|
15436
|
+
}
|
|
15034
15437
|
if (resizeObserver) {
|
|
15035
15438
|
resizeObserver.disconnect()
|
|
15036
15439
|
}
|