@@ -2,7 +2,7 @@ import { h, ComponentPublicInstance, reactive, ref, Ref, provide, inject, nextTi
22import { defineVxeComponent } from '../../ui/src/comp'
33import XEUtils from 'xe-utils'
44import { 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'
66import { VxeUI } from '../../ui'
77import { 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'
88import { getSlotVNs } from '../../ui/src/vn'
@@ -60,6 +60,8 @@ export default defineVxeComponent({
6060
6161 const browseObj = XEUtils.browse()
6262
63+ const scrollDefaultConf = Object.assign({}, getConfig().scrollbar)
64+
6365 // 使用已安装的组件,如果未安装则不渲染
6466 const VxeUILoadingComponent = VxeUI.getComponent('VxeLoading')
6567 const VxeUITooltipComponent = VxeUI.getComponent('VxeTooltip')
@@ -227,12 +229,12 @@ export default defineVxeComponent({
227229
228230 const computeScrollbarXOpts = computed(() => {
229231 const scrollbarOpts = computeScrollbarOpts.value
230- return Object.assign({}, scrollbarOpts.x, props.scrollbarConfig?.x || {})
232+ return scrollbarOpts.x ? Object.assign({}, scrollbarOpts.x, scrollbarOpts.xConfig) : (scrollbarOpts.xConfig || {})
231233 })
232234
233235 const computeScrollbarYOpts = computed(() => {
234236 const scrollbarOpts = computeScrollbarOpts.value
235- return Object.assign({}, scrollbarOpts.y, props.scrollbarConfig?.y || {})
237+ return scrollbarOpts.y ? Object.assign({}, scrollbarOpts.y, scrollbarOpts.yConfig) : (scrollbarOpts.yConfig || {})
236238 })
237239
238240 const computeScrollbarXToTop = computed(() => {
@@ -638,15 +640,18 @@ export default defineVxeComponent({
638640
639641 const computeTableStyle = computed(() => {
640642 const scrollbarOpts = computeScrollbarOpts.value
641- const { width, height } = scrollbarOpts
642- const tStys: VxeComponentStyleType = {}
643- if (width) {
644- tStys['--vxe-ui-table-view-scrollbar-width'] = toCssUnit(width)
645- }
646- if (height) {
647- tStys['--vxe-ui-table-view-scrollbar-height'] = toCssUnit(height)
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)
647+ const stys: VxeComponentStyleType = {}
648+ if (barWidth || barHeight) {
649+ stys['--vxe-ui-table-view-scrollbar-width'] = toCssUnit(barWidth || barHeight)
650+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight)
651+ stys['--vxe-ui-table-view-scrollbar-height'] = toCssUnit(barHeight || barWidth)
652+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth)
648653 }
649- return tStys
654+ return stys
650655 })
651656
652657 const computeTableRowExpandedList = computed(() => {
@@ -2600,7 +2605,6 @@ export default defineVxeComponent({
26002605 const isHeaderRenderOptimize = computeIsHeaderRenderOptimize.value
26012606 const isBodyRenderOptimize = computeIsBodyRenderOptimize.value
26022607 const isFooterRenderOptimize = computeIsFooterRenderOptimize.value
2603- const scrollbarOpts = computeScrollbarOpts.value
26042608 const mouseOpts = computeMouseOpts.value
26052609 const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper'])
26062610 const bodyTableElem = getRefElem(elemStore['main-body-table'])
@@ -2609,24 +2613,26 @@ export default defineVxeComponent({
26092613 emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : ''
26102614 }
26112615
2612- const scrollbarXConf = scrollbarOpts.x || {}
2613- const scrollbarYConf = scrollbarOpts.y || {}
2616+ const scrollbarXOpts = computeScrollbarXOpts.value
2617+ const scrollbarYOpts = computeScrollbarYOpts.value
26142618 const scrollbarYToLeft = computeScrollbarYToLeft.value
26152619
26162620 let xScrollbarVisible = overflowX ? 'visible' : 'hidden'
2617- if (scrollbarXConf.visible === 'visible' || $xeGanttView) {
2621+ const hideXScroll = scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden'
2622+ if (!hideXScroll || $xeGanttView) {
26182623 osbHeight = scrollbarHeight
26192624 xScrollbarVisible = 'visible'
2620- } else if (scrollbarXConf.visible === 'hidden' || scrollbarXConf.visible === false ) {
2625+ } else if (hideXScroll ) {
26212626 osbHeight = 0
26222627 xScrollbarVisible = 'hidden'
26232628 }
26242629
26252630 let yScrollbarVisible = overflowY ? 'visible' : 'hidden'
2626- if ((scrollbarYConf.visible === 'hidden' || scrollbarYConf.visible === false) || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)) {
2631+ const showYScroll = !(scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden')
2632+ if (!showYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)) {
26272633 osbWidth = 0
26282634 yScrollbarVisible = 'hidden'
2629- } else if (scrollbarYConf.visible === 'visible' ) {
2635+ } else if (showYScroll ) {
26302636 osbWidth = scrollbarWidth
26312637 yScrollbarVisible = 'visible'
26322638 }
@@ -3469,15 +3475,19 @@ export default defineVxeComponent({
34693475 let overflowY = false
34703476 let overflowX = false
34713477 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))
34723482 overflowY = scrollYHeight > bodyWrapperElem.clientHeight
34733483 if (yHandleEl) {
3474- reactData.scrollbarWidth = scrollbarOpts.width || (yHandleEl.offsetWidth - yHandleEl.clientWidth) || 14
3484+ reactData.scrollbarWidth = (barWidth || barHeight) || (yHandleEl.offsetWidth - yHandleEl.clientWidth) || 14
34753485 }
34763486 reactData.overflowY = overflowY
34773487
34783488 overflowX = scrollXWidth > bodyWrapperElem.clientWidth
34793489 if (xHandleEl) {
3480- reactData.scrollbarHeight = scrollbarOpts.height || (xHandleEl.offsetHeight - xHandleEl.clientHeight) || 14
3490+ reactData.scrollbarHeight = (barHeight || barWidth) || (xHandleEl.offsetHeight - xHandleEl.clientHeight) || 14
34813491 }
34823492
34833493 const hHeight = headerTableElem ? headerTableElem.clientHeight : 0
@@ -13059,14 +13069,14 @@ export default defineVxeComponent({
1305913069
1306013070 if (isRollX) {
1306113071 // 如果禁用滚动
13062- if (scrollbarXOpts.visible === 'hidden') {
13072+ if (scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden') {
1306313073 evnt.preventDefault()
1306413074 return
1306513075 }
1306613076 }
1306713077 if (isRollY) {
1306813078 // 如果禁用滚动
13069- if (scrollbarYOpts.visible === 'hidden') {
13079+ if (scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden') {
1307013080 evnt.preventDefault()
1307113081 return
1307213082 }
@@ -13674,10 +13684,15 @@ export default defineVxeComponent({
1367413684 const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior
1367513685 return h('div', {
1367613686 ref: isFixedLeft ? refLeftContainer : refRightContainer,
13677- class: [`vxe-table--fixed-${fixedType}-wrapper`, `sx--${scrollbarXOpts.visible}`, `sy--${scrollbarYOpts.visible}`, {
13678- [`x-ob--${osXBehavior}`]: osXBehavior,
13679- [`y-ob--${osYBehavior}`]: osYBehavior
13680- }]
13687+ class: [
13688+ `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'}`,
13691+ {
13692+ [`x-ob--${osXBehavior}`]: osXBehavior,
13693+ [`y-ob--${osYBehavior}`]: osYBehavior
13694+ }
13695+ ]
1368113696 }, [
1368213697 showHeader
1368313698 ? h(TableHeaderComponent, {
@@ -13997,7 +14012,11 @@ export default defineVxeComponent({
1399714012 }]
1399814013 }, [
1399914014 h('div', {
14000- class: ['vxe-table--main-wrapper', `sx--${scrollbarXOpts.visible}`, `sy--${scrollbarYOpts.visible}`]
14015+ class: [
14016+ 'vxe-table--main-wrapper',
14017+ `sx--${(scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden') ? 'hidden' : 'visible'}`,
14018+ `sy--${(scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden') ? 'hidden' : 'visible'}`
14019+ ]
1400114020 }, [
1400214021 /**
1400314022 * 表头
@@ -14055,7 +14074,7 @@ export default defineVxeComponent({
1405514074 }
1405614075
1405714076 const renderVN = () => {
14058- const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props
14077+ const { loading, stripe, useScrollbar, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props
1405914078 const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData
1406014079 const { teleportToWrapperElem, popupToWrapperElem, customPopupToElem } = internalData
1406114080 const { leftList, rightList } = columnStore
@@ -14104,7 +14123,7 @@ export default defineVxeComponent({
1410414123 }
1410514124 return h('div', {
1410614125 ref: refElem,
14107- class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
14126+ 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'}`, {
1410814127 [`size--${vSize}`]: vSize,
1410914128 [`valid-msg--${validOpts.msgMode}`]: !!editRules,
1411014129 'vxe-editable': !!editConfig,
@@ -14722,6 +14741,7 @@ export default defineVxeComponent({
1472214741 const areaOpts = computeAreaOpts.value
1472314742 const sortOpts = computeSortOpts.value
1472414743 const filterOpts = computeFilterOpts.value
14744+ const scrollbarOpts = computeScrollbarOpts.value
1472514745 const { groupFields } = aggregateOpts
1472614746
1472714747 if ($xeGantt) {
@@ -14963,6 +14983,13 @@ export default defineVxeComponent({
1496314983 // errLog('vxe.error.reqModule', ['Export'])
1496414984 // }
1496514985
14986+ if (scrollbarOpts.x) {
14987+ warnLog('vxe.error.delProp', ['scrollbar-config.x', 'scrollbar-config.xConfig'])
14988+ }
14989+ if (scrollbarOpts.y) {
14990+ warnLog('vxe.error.delProp', ['scrollbar-config.y', 'scrollbar-config.yConfig'])
14991+ }
14992+
1496614993 Object.assign(scrollYStore, {
1496714994 startIndex: 0,
1496814995 endIndex: 0,
0 commit comments