vxe-pc-ui 4.20.8 → 4.20.10
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/dist/all.esm.js +2041 -2125
- package/dist/style.css +1 -1
- package/dist/style.min.css +1 -1
- package/es/card/src/card.js +8 -6
- package/es/date-panel/src/date-panel.js +58 -36
- package/es/date-panel/style.css +22 -20
- package/es/date-panel/style.min.css +1 -1
- package/es/drawer/src/drawer.js +7 -5
- package/es/icon/style.css +1 -1
- package/es/icon-picker/src/icon-picker.js +74 -38
- package/es/icon-picker/style.css +9 -3
- package/es/icon-picker/style.min.css +1 -1
- package/es/layout-aside/src/layout-aside.js +6 -4
- package/es/layout-body/src/layout-body.js +6 -4
- package/es/layout-container/src/layout-container.js +11 -3
- package/es/list/src/list.js +81 -208
- package/es/menu/src/menu.js +7 -5
- package/es/modal/src/modal.js +7 -5
- package/es/scrollbar/src/scrollbar.js +28 -173
- package/es/select/src/select.js +243 -8
- package/es/select/style.css +44 -0
- package/es/select/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tabs/src/tabs.js +5 -4
- package/es/tooltip/src/tooltip.js +7 -5
- package/es/tooltip/style.css +2 -0
- package/es/tooltip/style.min.css +1 -1
- package/es/tree/src/tree.js +86 -212
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/es/vxe-date-panel/style.css +22 -20
- package/es/vxe-date-panel/style.min.css +1 -1
- package/es/vxe-icon-picker/style.css +9 -3
- package/es/vxe-icon-picker/style.min.css +1 -1
- package/es/vxe-select/style.css +44 -0
- package/es/vxe-select/style.min.css +1 -1
- package/es/vxe-tooltip/style.css +2 -0
- package/es/vxe-tooltip/style.min.css +1 -1
- package/lib/card/src/card.js +9 -6
- package/lib/card/src/card.min.js +1 -1
- package/lib/date-panel/src/date-panel.js +56 -34
- package/lib/date-panel/src/date-panel.min.js +1 -1
- package/lib/date-panel/style/style.css +22 -20
- package/lib/date-panel/style/style.min.css +1 -1
- package/lib/drawer/src/drawer.js +7 -4
- package/lib/drawer/src/drawer.min.js +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/icon-picker/src/icon-picker.js +101 -45
- package/lib/icon-picker/src/icon-picker.min.js +1 -1
- package/lib/icon-picker/style/style.css +9 -3
- package/lib/icon-picker/style/style.min.css +1 -1
- package/lib/index.umd.js +1049 -859
- package/lib/index.umd.min.js +1 -1
- package/lib/layout-aside/src/layout-aside.js +7 -4
- package/lib/layout-aside/src/layout-aside.min.js +1 -1
- package/lib/layout-body/src/layout-body.js +7 -4
- package/lib/layout-body/src/layout-body.min.js +1 -1
- package/lib/layout-container/src/layout-container.js +20 -4
- package/lib/layout-container/src/layout-container.min.js +1 -1
- package/lib/list/src/list.js +95 -232
- package/lib/list/src/list.min.js +1 -1
- package/lib/menu/src/menu.js +8 -4
- package/lib/menu/src/menu.min.js +1 -1
- package/lib/modal/src/modal.js +7 -4
- package/lib/modal/src/modal.min.js +1 -1
- package/lib/scrollbar/src/scrollbar.js +42 -199
- package/lib/scrollbar/src/scrollbar.min.js +1 -1
- package/lib/select/src/select.js +315 -68
- package/lib/select/src/select.min.js +1 -1
- package/lib/select/style/style.css +44 -0
- package/lib/select/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tabs/src/tabs.js +6 -5
- package/lib/tabs/src/tabs.min.js +1 -1
- package/lib/tooltip/src/tooltip.js +7 -4
- package/lib/tooltip/src/tooltip.min.js +1 -1
- package/lib/tooltip/style/style.css +2 -0
- package/lib/tooltip/style/style.min.css +1 -1
- package/lib/tree/src/tree.js +101 -235
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/ui/index.js +1 -1
- 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-date-panel/style/style.css +22 -20
- package/lib/vxe-date-panel/style/style.min.css +1 -1
- package/lib/vxe-icon-picker/style/style.css +9 -3
- package/lib/vxe-icon-picker/style/style.min.css +1 -1
- package/lib/vxe-select/style/style.css +44 -0
- package/lib/vxe-select/style/style.min.css +1 -1
- package/lib/vxe-tooltip/style/style.css +2 -0
- package/lib/vxe-tooltip/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/card/src/card.ts +8 -6
- package/packages/date-panel/src/date-panel.ts +58 -36
- package/packages/drawer/src/drawer.ts +7 -5
- package/packages/icon-picker/src/icon-picker.ts +80 -38
- package/packages/layout-aside/src/layout-aside.ts +6 -4
- package/packages/layout-body/src/layout-body.ts +6 -4
- package/packages/layout-container/src/layout-container.ts +13 -3
- package/packages/list/src/list.ts +98 -224
- package/packages/menu/src/menu.ts +7 -5
- package/packages/modal/src/modal.ts +7 -5
- package/packages/scrollbar/src/scrollbar.ts +44 -189
- package/packages/select/src/select.ts +278 -8
- package/packages/tabs/src/tabs.ts +5 -4
- package/packages/tooltip/src/tooltip.ts +7 -5
- package/packages/tree/src/tree.ts +103 -228
- package/styles/components/date-panel.scss +31 -29
- package/styles/components/icon-picker.scss +9 -3
- package/styles/components/select.scss +77 -0
- package/styles/components/tooltip.scss +1 -0
- package/types/components/card.d.ts +2 -2
- package/types/components/drawer.d.ts +2 -2
- package/types/components/gantt-module/gantt-view.d.ts +7 -16
- package/types/components/grid.d.ts +3 -1
- package/types/components/icon-picker.d.ts +21 -1
- package/types/components/layout-aside.d.ts +2 -2
- package/types/components/layout-body.d.ts +2 -2
- package/types/components/layout-container.d.ts +3 -1
- package/types/components/list.d.ts +6 -2
- package/types/components/menu.d.ts +2 -2
- package/types/components/modal.d.ts +2 -2
- package/types/components/scrollbar.d.ts +17 -14
- package/types/components/select.d.ts +28 -3
- package/types/components/table.d.ts +28 -22
- package/types/components/tabs.d.ts +2 -2
- package/types/components/tooltip.d.ts +2 -2
- package/types/components/tree.d.ts +8 -17
- /package/es/icon/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
- /package/es/icon/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
- /package/es/icon/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
- /package/es/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
- /package/es/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
- /package/es/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
- /package/lib/icon/style/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
- /package/lib/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
- /package/lib/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
- /package/lib/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { h, Teleport, PropType, ref, inject, computed, provide, onUnmounted, reactive, nextTick, watch, onMounted } from 'vue'
|
|
1
|
+
import { h, Teleport, PropType, ref, inject, computed, provide, onUnmounted, reactive, nextTick, watch, onMounted, onBeforeUnmount } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
|
-
import { VxeUI,
|
|
4
|
+
import { VxeUI, useFns } from '../../ui'
|
|
5
5
|
import { getEventTargetNode, getPopupContainer, toCssUnit, updatePanelPlacement } from '../../ui/src/dom'
|
|
6
6
|
import { getLastZIndex, nextZIndex, getFuncText, eqEmptyValue } from '../../ui/src/utils'
|
|
7
7
|
import { getSlotVNs } from '../../ui/src/vn'
|
|
@@ -12,6 +12,9 @@ import VxeButtonComponent from '../../button'
|
|
|
12
12
|
import type { VxeSelectPropTypes, VxeSelectConstructor, SelectInternalData, SelectReactData, VxeSelectDefines, VxeButtonEvents, ValueOf, VxeSelectEmits, VxeComponentSlotType, VxeInputConstructor, SelectMethods, SelectPrivateRef, VxeSelectMethods, VxeOptionProps, VxeDrawerConstructor, VxeDrawerMethods, VxeFormDefines, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods, VxeInputEvents, VxeComponentStyleType, VxeCardConstructor, VxeCardPrivateMethods } from '../../../types'
|
|
13
13
|
import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
|
|
14
14
|
|
|
15
|
+
const { getConfig, getIcon, getI18n, baseUtils, domUtils, globalEvents, GLOBAL_EVENT_KEYS, globalResize, createEvent, renderEmptyElement } = VxeUI
|
|
16
|
+
const { getDefVal } = baseUtils
|
|
17
|
+
|
|
15
18
|
const { errLog } = createComponentLog('select')
|
|
16
19
|
|
|
17
20
|
function isOptionVisible (option: any) {
|
|
@@ -36,6 +39,10 @@ function createReactData (): SelectReactData {
|
|
|
36
39
|
searchValue: '',
|
|
37
40
|
searchLoading: false,
|
|
38
41
|
|
|
42
|
+
// 滚动条
|
|
43
|
+
yThumbHeight: 0,
|
|
44
|
+
xThumbWidth: 0,
|
|
45
|
+
|
|
39
46
|
panelIndex: 0,
|
|
40
47
|
panelStyle: {},
|
|
41
48
|
panelPlacement: null,
|
|
@@ -57,8 +64,15 @@ function createInternalData (): SelectInternalData {
|
|
|
57
64
|
optFullValMaps: {},
|
|
58
65
|
remoteValMaps: {},
|
|
59
66
|
|
|
60
|
-
|
|
67
|
+
// 滚动条
|
|
68
|
+
// scrollObserver: undefined,
|
|
69
|
+
// isThumbDrag: false,
|
|
70
|
+
thumbDragOffset: 0,
|
|
71
|
+
yThumbTop: 0,
|
|
72
|
+
xThumbLeft: 0,
|
|
61
73
|
lastScrollTop: 0,
|
|
74
|
+
lastScrollLeft: 0,
|
|
75
|
+
|
|
62
76
|
scrollYStore: {
|
|
63
77
|
startIndex: 0,
|
|
64
78
|
endIndex: 0,
|
|
@@ -183,6 +197,11 @@ export default defineVxeComponent({
|
|
|
183
197
|
popupConfig: Object as PropType<VxeSelectPropTypes.PopupConfig>,
|
|
184
198
|
virtualYConfig: Object as PropType<VxeSelectPropTypes.VirtualYConfig>,
|
|
185
199
|
scrollY: Object as PropType<VxeSelectPropTypes.ScrollY>,
|
|
200
|
+
useScrollbar: {
|
|
201
|
+
type: Boolean as PropType<VxeSelectPropTypes.UseScrollbar>,
|
|
202
|
+
default: () => getDefVal(getConfig().select.useScrollbar, getConfig().useScrollbar)
|
|
203
|
+
},
|
|
204
|
+
scrollbarConfig: Object as PropType<VxeSelectPropTypes.ScrollbarConfig>,
|
|
186
205
|
|
|
187
206
|
/**
|
|
188
207
|
* 已废弃,被 remote-config.queryMethod 替换
|
|
@@ -232,9 +251,11 @@ export default defineVxeComponent({
|
|
|
232
251
|
const refInpSearch = ref<VxeInputConstructor>()
|
|
233
252
|
const refVirtualWrapper = ref<HTMLDivElement>()
|
|
234
253
|
const refOptionPanel = ref<HTMLDivElement>()
|
|
254
|
+
const refVirtualSpaceElem = ref<HTMLDivElement>()
|
|
235
255
|
const refVirtualBody = ref<HTMLDivElement>()
|
|
236
256
|
|
|
237
|
-
const { computeSize } = useSize(props)
|
|
257
|
+
const { computeSize } = useFns.useSize(props)
|
|
258
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props)
|
|
238
259
|
|
|
239
260
|
const reactData = reactive(createReactData())
|
|
240
261
|
|
|
@@ -253,6 +274,22 @@ export default defineVxeComponent({
|
|
|
253
274
|
getRefMaps: () => refMaps
|
|
254
275
|
} as unknown as VxeSelectConstructor & VxeSelectMethods
|
|
255
276
|
|
|
277
|
+
const {
|
|
278
|
+
refTrackXElem,
|
|
279
|
+
refTrackYElem,
|
|
280
|
+
refThumbXElem,
|
|
281
|
+
refThumbYElem,
|
|
282
|
+
updateThumbSize,
|
|
283
|
+
updateThumbOffset,
|
|
284
|
+
clickTrackXEvent,
|
|
285
|
+
clickTrackYEvent,
|
|
286
|
+
pointerdownThumbXEvent,
|
|
287
|
+
pointermoveThumbXEvent,
|
|
288
|
+
cleatPointerThumbEvent,
|
|
289
|
+
pointerdownThumbYEvent,
|
|
290
|
+
pointermoveThumbYEvent
|
|
291
|
+
} = useFns.useInitVScrollbar($xeSelect)
|
|
292
|
+
|
|
256
293
|
const computeFormReadonly = computed(() => {
|
|
257
294
|
const { readonly } = props
|
|
258
295
|
if (readonly === null) {
|
|
@@ -438,6 +475,86 @@ export default defineVxeComponent({
|
|
|
438
475
|
return labels.join(', ')
|
|
439
476
|
})
|
|
440
477
|
|
|
478
|
+
const computeScrollbarOpts = computed(() => {
|
|
479
|
+
return Object.assign({}, getConfig().tree.scrollbarConfig, props.scrollbarConfig)
|
|
480
|
+
})
|
|
481
|
+
|
|
482
|
+
const computeScrollbarXOpts = computed(() => {
|
|
483
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
484
|
+
return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig, {
|
|
485
|
+
visible: false
|
|
486
|
+
})
|
|
487
|
+
})
|
|
488
|
+
|
|
489
|
+
const computeScrollbarYOpts = computed(() => {
|
|
490
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
491
|
+
return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig)
|
|
492
|
+
})
|
|
493
|
+
|
|
494
|
+
const computeScrollXHeight = computed(() => {
|
|
495
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
496
|
+
const scrollbarXOpts = computeScrollbarXOpts.value
|
|
497
|
+
return getDefVal(getDefVal(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height)
|
|
498
|
+
})
|
|
499
|
+
|
|
500
|
+
const computeScrollYWidth = computed(() => {
|
|
501
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
502
|
+
const scrollbarYOpts = computeScrollbarYOpts.value
|
|
503
|
+
return getDefVal(getDefVal(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width)
|
|
504
|
+
})
|
|
505
|
+
|
|
506
|
+
const computeScrollXVisible = computed(() => {
|
|
507
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
508
|
+
const scrollbarXOpts = computeScrollbarXOpts.value
|
|
509
|
+
return getDefVal(scrollbarXOpts.visible, scrollbarOpts.visible)
|
|
510
|
+
})
|
|
511
|
+
|
|
512
|
+
const computeScrollYVisible = computed(() => {
|
|
513
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
514
|
+
const scrollbarYOpts = computeScrollbarYOpts.value
|
|
515
|
+
return getDefVal(scrollbarYOpts.visible, scrollbarOpts.visible)
|
|
516
|
+
})
|
|
517
|
+
|
|
518
|
+
const computeScrollXAutoHide = computed(() => {
|
|
519
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
520
|
+
const scrollbarXOpts = computeScrollbarXOpts.value
|
|
521
|
+
return getDefVal(getDefVal(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide)
|
|
522
|
+
})
|
|
523
|
+
|
|
524
|
+
const computeScrollYAutoHide = computed(() => {
|
|
525
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
526
|
+
const scrollbarYOpts = computeScrollbarYOpts.value
|
|
527
|
+
return getDefVal(getDefVal(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide)
|
|
528
|
+
})
|
|
529
|
+
|
|
530
|
+
const computeScrollbarWrapperClss = computed(() => {
|
|
531
|
+
const { yThumbHeight, xThumbWidth } = reactData
|
|
532
|
+
const scrollbarXToTop = computeScrollbarXToTop.value
|
|
533
|
+
const scrollbarYToLeft = computeScrollbarYToLeft.value
|
|
534
|
+
const scrollXVisible = computeScrollXVisible.value
|
|
535
|
+
const scrollYVisible = computeScrollYVisible.value
|
|
536
|
+
return domUtils.buildClass([
|
|
537
|
+
'vxe-scrollbar is--virtual',
|
|
538
|
+
`ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
|
|
539
|
+
`ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
|
|
540
|
+
`sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
|
|
541
|
+
`sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
|
|
542
|
+
], {
|
|
543
|
+
'overflow-y': yThumbHeight,
|
|
544
|
+
'overflow-x': xThumbWidth
|
|
545
|
+
})
|
|
546
|
+
})
|
|
547
|
+
|
|
548
|
+
const computeScrollbarXToTop = computed(() => {
|
|
549
|
+
const scrollbarXOpts = computeScrollbarXOpts.value
|
|
550
|
+
return scrollbarXOpts.position === 'top'
|
|
551
|
+
})
|
|
552
|
+
|
|
553
|
+
const computeScrollbarYToLeft = computed(() => {
|
|
554
|
+
const scrollbarYOpts = computeScrollbarYOpts.value
|
|
555
|
+
return scrollbarYOpts.position === 'left'
|
|
556
|
+
})
|
|
557
|
+
|
|
441
558
|
const callSlot = <T>(slotFunc: ((params: T) => VxeComponentSlotType | VxeComponentSlotType[]) | string | null, params: T) => {
|
|
442
559
|
if (slotFunc) {
|
|
443
560
|
if (XEUtils.isString(slotFunc)) {
|
|
@@ -1245,13 +1362,26 @@ export default defineVxeComponent({
|
|
|
1245
1362
|
})
|
|
1246
1363
|
}
|
|
1247
1364
|
|
|
1365
|
+
const updateScrollbar = () => {
|
|
1366
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
1367
|
+
if (isVScrollbar) {
|
|
1368
|
+
return nextTick().then(() => {
|
|
1369
|
+
updateThumbSize()
|
|
1370
|
+
updateThumbOffset()
|
|
1371
|
+
})
|
|
1372
|
+
}
|
|
1373
|
+
return Promise.resolve()
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1248
1376
|
/**
|
|
1249
1377
|
* 重新计算列表
|
|
1250
1378
|
*/
|
|
1251
1379
|
const recalculate = () => {
|
|
1252
1380
|
const el = refElem.value
|
|
1253
1381
|
if (el && el.clientWidth && el.clientHeight) {
|
|
1254
|
-
return computeScrollLoad()
|
|
1382
|
+
return computeScrollLoad().then(() => {
|
|
1383
|
+
return updateScrollbar()
|
|
1384
|
+
})
|
|
1255
1385
|
}
|
|
1256
1386
|
return Promise.resolve()
|
|
1257
1387
|
}
|
|
@@ -1286,6 +1416,7 @@ export default defineVxeComponent({
|
|
|
1286
1416
|
const scrollLeft = scrollBodyElem.scrollLeft
|
|
1287
1417
|
const isX = scrollLeft !== internalData.lastScrollLeft
|
|
1288
1418
|
const isY = scrollTop !== internalData.lastScrollTop
|
|
1419
|
+
updateThumbOffset()
|
|
1289
1420
|
internalData.lastScrollTop = scrollTop
|
|
1290
1421
|
internalData.lastScrollLeft = scrollLeft
|
|
1291
1422
|
if (reactData.scrollYLoad) {
|
|
@@ -1362,6 +1493,10 @@ export default defineVxeComponent({
|
|
|
1362
1493
|
|
|
1363
1494
|
const selectMethods: SelectMethods = {
|
|
1364
1495
|
dispatchEvent,
|
|
1496
|
+
getScrollViewElem () {
|
|
1497
|
+
const viewEl = refVirtualWrapper.value
|
|
1498
|
+
return viewEl || null
|
|
1499
|
+
},
|
|
1365
1500
|
loadData,
|
|
1366
1501
|
reloadData (datas) {
|
|
1367
1502
|
internalData.isLoaded = false
|
|
@@ -1416,6 +1551,27 @@ export default defineVxeComponent({
|
|
|
1416
1551
|
clearScroll
|
|
1417
1552
|
}
|
|
1418
1553
|
|
|
1554
|
+
const bindScrollbarResize = () => {
|
|
1555
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
1556
|
+
const { scrollObserver } = internalData
|
|
1557
|
+
if (isVScrollbar) {
|
|
1558
|
+
if (!scrollObserver) {
|
|
1559
|
+
const el = refElem.value
|
|
1560
|
+
const viewInnerEl = refVirtualSpaceElem.value
|
|
1561
|
+
const scrollObserver = globalResize.create(() => {
|
|
1562
|
+
reScrollFlag.value++
|
|
1563
|
+
})
|
|
1564
|
+
if (el) {
|
|
1565
|
+
scrollObserver.observe(el)
|
|
1566
|
+
}
|
|
1567
|
+
if (viewInnerEl) {
|
|
1568
|
+
scrollObserver.observe(viewInnerEl)
|
|
1569
|
+
}
|
|
1570
|
+
internalData.scrollObserver = scrollObserver
|
|
1571
|
+
}
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
|
|
1419
1575
|
Object.assign($xeSelect, selectMethods)
|
|
1420
1576
|
|
|
1421
1577
|
const renderRadio = (option: VxeOptionProps, isOptGroup: boolean, isChecked: boolean, isDisabled: boolean) => {
|
|
@@ -1620,8 +1776,9 @@ export default defineVxeComponent({
|
|
|
1620
1776
|
|
|
1621
1777
|
const renderVN = () => {
|
|
1622
1778
|
const { className, multiple, loading, filterable, showTotalButton, showCheckedButton, showClearButton, showCloseButton } = props
|
|
1623
|
-
const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight } = reactData
|
|
1779
|
+
const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight, xThumbWidth, yThumbHeight } = reactData
|
|
1624
1780
|
const vSize = computeSize.value
|
|
1781
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
1625
1782
|
const isDisabled = computeIsDisabled.value
|
|
1626
1783
|
const selectLabel = computeSelectLabel.value
|
|
1627
1784
|
const fullLabel = computeFullLabel.value
|
|
@@ -1653,6 +1810,14 @@ export default defineVxeComponent({
|
|
|
1653
1810
|
const prefixSlot = slots.prefix
|
|
1654
1811
|
const { appendTo } = popupOpts
|
|
1655
1812
|
const ppClassName = popupOpts.className || props.popupClassName
|
|
1813
|
+
const scrollbarOpts = computeScrollbarOpts.value
|
|
1814
|
+
const scrollXVisible = computeScrollXVisible.value
|
|
1815
|
+
const scrollYVisible = computeScrollYVisible.value
|
|
1816
|
+
const scrollbarXToTop = computeScrollbarXToTop.value
|
|
1817
|
+
const scrollbarYToLeft = computeScrollbarYToLeft.value
|
|
1818
|
+
const scrollXAutoHide = computeScrollXAutoHide.value
|
|
1819
|
+
const scrollYAutoHide = computeScrollYAutoHide.value
|
|
1820
|
+
const scrollbarWrapperClss = computeScrollbarWrapperClss.value
|
|
1656
1821
|
return h('div', {
|
|
1657
1822
|
ref: refElem,
|
|
1658
1823
|
class: ['vxe-select', className ? (XEUtils.isFunction(className) ? className({ $select: $xeSelect }) : className) : '', {
|
|
@@ -1763,7 +1928,21 @@ export default defineVxeComponent({
|
|
|
1763
1928
|
])
|
|
1764
1929
|
: renderEmptyElement($xeSelect),
|
|
1765
1930
|
h('div', {
|
|
1766
|
-
class:
|
|
1931
|
+
class: [
|
|
1932
|
+
'vxe-select--panel-body',
|
|
1933
|
+
isVScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
|
|
1934
|
+
isVScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
|
|
1935
|
+
isVScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
|
|
1936
|
+
isVScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
|
|
1937
|
+
{
|
|
1938
|
+
'is--virtual-scrollbar': isVScrollbar,
|
|
1939
|
+
'ov-padding': isVScrollbar && scrollbarOpts.padding,
|
|
1940
|
+
'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
|
|
1941
|
+
'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
|
|
1942
|
+
'overflow-y': yThumbHeight,
|
|
1943
|
+
'overflow-x': xThumbWidth
|
|
1944
|
+
}
|
|
1945
|
+
]
|
|
1767
1946
|
}, [
|
|
1768
1947
|
h('div', {
|
|
1769
1948
|
ref: refVirtualWrapper,
|
|
@@ -1771,6 +1950,7 @@ export default defineVxeComponent({
|
|
|
1771
1950
|
onScroll: scrollEvent
|
|
1772
1951
|
}, [
|
|
1773
1952
|
h('div', {
|
|
1953
|
+
ref: refVirtualSpaceElem,
|
|
1774
1954
|
class: 'vxe-select--y-space',
|
|
1775
1955
|
style: {
|
|
1776
1956
|
height: bodyHeight ? `${bodyHeight}px` : ''
|
|
@@ -1783,7 +1963,50 @@ export default defineVxeComponent({
|
|
|
1783
1963
|
marginTop: `${topSpaceHeight}px`
|
|
1784
1964
|
}
|
|
1785
1965
|
}, renderOpts())
|
|
1786
|
-
])
|
|
1966
|
+
]),
|
|
1967
|
+
/**
|
|
1968
|
+
* 滚动条
|
|
1969
|
+
*/
|
|
1970
|
+
isVScrollbar
|
|
1971
|
+
? h('div', {
|
|
1972
|
+
class: scrollbarWrapperClss
|
|
1973
|
+
}, [
|
|
1974
|
+
scrollXVisible === false
|
|
1975
|
+
? renderEmptyElement($xeSelect)
|
|
1976
|
+
: h('div', {
|
|
1977
|
+
ref: refTrackXElem,
|
|
1978
|
+
class: 'vxe-scrollbar--track-x',
|
|
1979
|
+
onClick: clickTrackXEvent
|
|
1980
|
+
}, [
|
|
1981
|
+
h('div', {
|
|
1982
|
+
ref: refThumbXElem,
|
|
1983
|
+
class: 'vxe-scrollbar--thumb-x',
|
|
1984
|
+
onPointerdown: pointerdownThumbXEvent,
|
|
1985
|
+
onPointermove: pointermoveThumbXEvent,
|
|
1986
|
+
onPointerup: cleatPointerThumbEvent,
|
|
1987
|
+
onPointercancel: cleatPointerThumbEvent,
|
|
1988
|
+
onLostpointercapture: cleatPointerThumbEvent
|
|
1989
|
+
})
|
|
1990
|
+
]),
|
|
1991
|
+
scrollYVisible === false
|
|
1992
|
+
? renderEmptyElement($xeSelect)
|
|
1993
|
+
: h('div', {
|
|
1994
|
+
ref: refTrackYElem,
|
|
1995
|
+
class: 'vxe-scrollbar--track-y',
|
|
1996
|
+
onClick: clickTrackYEvent
|
|
1997
|
+
}, [
|
|
1998
|
+
h('div', {
|
|
1999
|
+
ref: refThumbYElem,
|
|
2000
|
+
class: 'vxe-scrollbar--thumb-y',
|
|
2001
|
+
onPointerdown: pointerdownThumbYEvent,
|
|
2002
|
+
onPointermove: pointermoveThumbYEvent,
|
|
2003
|
+
onPointerup: cleatPointerThumbEvent,
|
|
2004
|
+
onPointercancel: cleatPointerThumbEvent,
|
|
2005
|
+
onLostpointercapture: cleatPointerThumbEvent
|
|
2006
|
+
})
|
|
2007
|
+
])
|
|
2008
|
+
])
|
|
2009
|
+
: renderEmptyElement($xeSelect)
|
|
1787
2010
|
]),
|
|
1788
2011
|
footerSlot || showTotalButton || (showCloseButton && multiple)
|
|
1789
2012
|
? h('div', {
|
|
@@ -1832,6 +2055,44 @@ export default defineVxeComponent({
|
|
|
1832
2055
|
loadData(val || [])
|
|
1833
2056
|
})
|
|
1834
2057
|
|
|
2058
|
+
const reScrollFlag = ref(0)
|
|
2059
|
+
const reLayoutFlag = ref(0)
|
|
2060
|
+
watch(computeIsVScrollbar, () => {
|
|
2061
|
+
nextTick(() => {
|
|
2062
|
+
bindScrollbarResize()
|
|
2063
|
+
nextTick(() => {
|
|
2064
|
+
reLayoutFlag.value++
|
|
2065
|
+
})
|
|
2066
|
+
})
|
|
2067
|
+
})
|
|
2068
|
+
watch(computeScrollYWidth, () => {
|
|
2069
|
+
reLayoutFlag.value++
|
|
2070
|
+
})
|
|
2071
|
+
watch(computeScrollXHeight, () => {
|
|
2072
|
+
reLayoutFlag.value++
|
|
2073
|
+
})
|
|
2074
|
+
watch(computeScrollXVisible, () => {
|
|
2075
|
+
nextTick(() => {
|
|
2076
|
+
reLayoutFlag.value++
|
|
2077
|
+
})
|
|
2078
|
+
})
|
|
2079
|
+
watch(computeScrollYVisible, () => {
|
|
2080
|
+
nextTick(() => {
|
|
2081
|
+
reLayoutFlag.value++
|
|
2082
|
+
})
|
|
2083
|
+
})
|
|
2084
|
+
watch(reLayoutFlag, () => {
|
|
2085
|
+
recalculate().then(() => {
|
|
2086
|
+
recalculate()
|
|
2087
|
+
})
|
|
2088
|
+
})
|
|
2089
|
+
|
|
2090
|
+
watch(reScrollFlag, () => {
|
|
2091
|
+
updateScrollbar().then(() => {
|
|
2092
|
+
updateScrollbar()
|
|
2093
|
+
})
|
|
2094
|
+
})
|
|
2095
|
+
|
|
1835
2096
|
onMounted(() => {
|
|
1836
2097
|
nextTick(() => {
|
|
1837
2098
|
const { options, optionGroups } = props
|
|
@@ -1841,6 +2102,8 @@ export default defineVxeComponent({
|
|
|
1841
2102
|
loadData(options)
|
|
1842
2103
|
}
|
|
1843
2104
|
})
|
|
2105
|
+
reLayoutFlag.value++
|
|
2106
|
+
bindScrollbarResize()
|
|
1844
2107
|
globalEvents.on($xeSelect, 'mousedown', handleGlobalMousedownEvent)
|
|
1845
2108
|
globalEvents.on($xeSelect, 'keydown', handleGlobalKeydownEvent)
|
|
1846
2109
|
globalEvents.on($xeSelect, 'blur', handleGlobalBlurEvent)
|
|
@@ -1848,6 +2111,13 @@ export default defineVxeComponent({
|
|
|
1848
2111
|
globalEvents.on($xeSelect, 'scroll', handleGlobalScrollEvent)
|
|
1849
2112
|
})
|
|
1850
2113
|
|
|
2114
|
+
onBeforeUnmount(() => {
|
|
2115
|
+
const { scrollObserver } = internalData
|
|
2116
|
+
if (scrollObserver) {
|
|
2117
|
+
scrollObserver.disconnect()
|
|
2118
|
+
}
|
|
2119
|
+
})
|
|
2120
|
+
|
|
1851
2121
|
onUnmounted(() => {
|
|
1852
2122
|
globalEvents.off($xeSelect, 'mousedown')
|
|
1853
2123
|
globalEvents.off($xeSelect, 'keydown')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, h, reactive, inject, PropType, provide, computed, onUnmounted, watch, nextTick, onMounted } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
|
-
import { VxeUI,
|
|
3
|
+
import { VxeUI, useFns } from '../../ui'
|
|
4
4
|
import { getSlotVNs } from '../../ui/src/vn'
|
|
5
5
|
import { toCssUnit, addClass, removeClass } from '../../ui/src/dom'
|
|
6
6
|
import { isEnableConf } from '../../ui/src/utils'
|
|
@@ -81,7 +81,8 @@ export default defineVxeComponent({
|
|
|
81
81
|
|
|
82
82
|
const $xeParentTabs = inject<(VxeTabsConstructor & VxeTabsPrivateMethods) | null>('$xeTabs', null)
|
|
83
83
|
|
|
84
|
-
const { computeSize } = useSize(props)
|
|
84
|
+
const { computeSize } = useFns.useSize(props)
|
|
85
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props)
|
|
85
86
|
|
|
86
87
|
const refElem = ref<HTMLDivElement>()
|
|
87
88
|
const refHeadWrapperElem = ref<HTMLDivElement>()
|
|
@@ -791,13 +792,13 @@ export default defineVxeComponent({
|
|
|
791
792
|
}
|
|
792
793
|
|
|
793
794
|
const renderTabPane = (item: VxeTabPaneProps | VxeTabPaneDefines.TabConfig) => {
|
|
794
|
-
const { useScrollbar } = props
|
|
795
795
|
const { initNames, activeName } = reactData
|
|
796
796
|
const { name, slots } = item
|
|
797
797
|
const defaultSlot = slots ? slots.default : null
|
|
798
798
|
const scrollbarProps = computeScrollbarProps.value
|
|
799
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
799
800
|
if (name && initNames.includes(name)) {
|
|
800
|
-
return
|
|
801
|
+
return isVScrollbar
|
|
801
802
|
? h(VxeScrollbarComponent, {
|
|
802
803
|
key: `${name}`,
|
|
803
804
|
class: ['vxe-tabs-pane--scrollbar-item', {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { h, ref, nextTick, onBeforeUnmount, onMounted, computed, reactive, watch, PropType, VNode } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
|
-
import { VxeUI,
|
|
4
|
+
import { VxeUI, useFns } from '../../ui'
|
|
5
5
|
import { getLastZIndex, nextZIndex } from '../../ui/src/utils'
|
|
6
6
|
import { getPopupAppendElement, toCssUnit, updatePanelPlacement } from '../../ui/src/dom'
|
|
7
7
|
import { getSlotVNs } from '../../ui/src/vn'
|
|
@@ -137,7 +137,8 @@ export default defineVxeComponent({
|
|
|
137
137
|
|
|
138
138
|
const xID = XEUtils.uniqueId()
|
|
139
139
|
|
|
140
|
-
const { computeSize } = useSize(props)
|
|
140
|
+
const { computeSize } = useFns.useSize(props)
|
|
141
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props)
|
|
141
142
|
|
|
142
143
|
const reactData = reactive(createReactData())
|
|
143
144
|
|
|
@@ -434,8 +435,9 @@ export default defineVxeComponent({
|
|
|
434
435
|
Object.assign($xeTooltip, tooltipMethods, tooltipPrivateMethods)
|
|
435
436
|
|
|
436
437
|
const renderContent = () => {
|
|
437
|
-
const {
|
|
438
|
+
const { theme, useHtml, useHTML } = props
|
|
438
439
|
const { tipContent } = reactData
|
|
440
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
439
441
|
const wrapperStyle = computeWrapperStyle.value
|
|
440
442
|
const contentSlot = slots.content
|
|
441
443
|
const contVNs: VNode[] = []
|
|
@@ -457,7 +459,7 @@ export default defineVxeComponent({
|
|
|
457
459
|
key: 'cd'
|
|
458
460
|
}, `${tipContent}`))
|
|
459
461
|
}
|
|
460
|
-
if (
|
|
462
|
+
if (isVScrollbar) {
|
|
461
463
|
return h(VxeScrollbarComponent, {
|
|
462
464
|
key: 5,
|
|
463
465
|
ref: contentScrollbar,
|
|
@@ -541,7 +543,7 @@ export default defineVxeComponent({
|
|
|
541
543
|
onMounted(() => {
|
|
542
544
|
const $scrollbar = contentScrollbar.value
|
|
543
545
|
if ($scrollbar) {
|
|
544
|
-
const viewEl = $scrollbar.
|
|
546
|
+
const viewEl = $scrollbar.getScrollViewElem()
|
|
545
547
|
if (viewEl) {
|
|
546
548
|
viewEl.addEventListener('wheel', wheelEvent, { passive: false })
|
|
547
549
|
internalData.scrollbarViewEl = viewEl
|