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
1
|
import { h, PropType, ref, Ref, computed, onBeforeUnmount, watch, reactive, nextTick, onActivated, onMounted, VNode } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
|
-
import { VxeUI,
|
|
4
|
+
import { VxeUI, createEvent, renderEmptyElement } from '../../ui'
|
|
5
5
|
import { getCrossListDragRowInfo } from './store'
|
|
6
6
|
import { isScale, removeClass, addClass, getTpImg, toCssUnit, hasClass } from '../../ui/src/dom'
|
|
7
7
|
import { isEnableConf, getText, enModelValue, deModelValue, getDefaultConfig } from '../../ui/src/utils'
|
|
@@ -12,9 +12,7 @@ import VxeLoadingComponent from '../../loading'
|
|
|
12
12
|
|
|
13
13
|
import type { VxeListConstructor, VxeListPropTypes, VxeListEmits, ListReactData, VxeListPrivateMethods, ListInternalData, VxeListDefines, ValueOf, ListMethods, ListPrivateMethods, ListPrivateRef, VxeComponentStyleType } from '../../../types'
|
|
14
14
|
|
|
15
|
-
const { getConfig, getIcon, getI18n, domUtils,
|
|
16
|
-
|
|
17
|
-
const { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } = scrollbarUtils
|
|
15
|
+
const { getConfig, getIcon, getI18n, domUtils, useFns, menus, globalEvents, globalResize } = VxeUI
|
|
18
16
|
|
|
19
17
|
const { warnLog, errLog } = createComponentLog('tree')
|
|
20
18
|
|
|
@@ -167,8 +165,6 @@ export default defineVxeComponent({
|
|
|
167
165
|
|
|
168
166
|
const browseObj = XEUtils.browse()
|
|
169
167
|
|
|
170
|
-
const { computeSize } = useSize(props)
|
|
171
|
-
|
|
172
168
|
const reactData = reactive(createReactData())
|
|
173
169
|
|
|
174
170
|
const internalData = createInternalData()
|
|
@@ -179,16 +175,15 @@ export default defineVxeComponent({
|
|
|
179
175
|
const refHeaderElem = ref() as Ref<HTMLDivElement>
|
|
180
176
|
const refFooterElem = ref() as Ref<HTMLDivElement>
|
|
181
177
|
const refVirtualWrapper = ref() as Ref<HTMLDivElement>
|
|
178
|
+
const refVirtualSpaceElem = ref() as Ref<HTMLDivElement>
|
|
182
179
|
const refVirtualBody = ref() as Ref<HTMLDivElement>
|
|
183
180
|
|
|
184
|
-
const refTrackXElem = ref<HTMLDivElement>()
|
|
185
|
-
const refTrackYElem = ref<HTMLDivElement>()
|
|
186
|
-
const refThumbXElem = ref<HTMLDivElement>()
|
|
187
|
-
const refThumbYElem = ref<HTMLDivElement>()
|
|
188
|
-
|
|
189
181
|
const refDragRowLineElem = ref<HTMLDivElement>()
|
|
190
182
|
const refDragTipElem = ref<HTMLDivElement>()
|
|
191
183
|
|
|
184
|
+
const { computeSize } = useFns.useSize(props)
|
|
185
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props)
|
|
186
|
+
|
|
192
187
|
const refMaps: ListPrivateRef = {
|
|
193
188
|
refElem
|
|
194
189
|
}
|
|
@@ -202,6 +197,22 @@ export default defineVxeComponent({
|
|
|
202
197
|
getRefMaps: () => refMaps
|
|
203
198
|
} as unknown as VxeListConstructor & VxeListPrivateMethods
|
|
204
199
|
|
|
200
|
+
const {
|
|
201
|
+
refTrackXElem,
|
|
202
|
+
refTrackYElem,
|
|
203
|
+
refThumbXElem,
|
|
204
|
+
refThumbYElem,
|
|
205
|
+
updateThumbSize,
|
|
206
|
+
updateThumbOffset,
|
|
207
|
+
clickTrackXEvent,
|
|
208
|
+
clickTrackYEvent,
|
|
209
|
+
pointerdownThumbXEvent,
|
|
210
|
+
pointermoveThumbXEvent,
|
|
211
|
+
cleatPointerThumbEvent,
|
|
212
|
+
pointerdownThumbYEvent,
|
|
213
|
+
pointermoveThumbYEvent
|
|
214
|
+
} = useFns.useInitVScrollbar($xeList)
|
|
215
|
+
|
|
205
216
|
const computeRowOpts = computed(() => {
|
|
206
217
|
return Object.assign({}, getConfig().list.rowConfig, props.rowConfig)
|
|
207
218
|
})
|
|
@@ -521,7 +532,6 @@ export default defineVxeComponent({
|
|
|
521
532
|
*/
|
|
522
533
|
const refreshScroll = () => {
|
|
523
534
|
const { lastScrollLeft, lastScrollTop } = internalData
|
|
524
|
-
updateScrollbar()
|
|
525
535
|
return clearScroll().then(() => {
|
|
526
536
|
if (lastScrollLeft || lastScrollTop) {
|
|
527
537
|
internalData.lastScrollLeft = 0
|
|
@@ -532,8 +542,14 @@ export default defineVxeComponent({
|
|
|
532
542
|
}
|
|
533
543
|
|
|
534
544
|
const updateScrollbar = () => {
|
|
535
|
-
|
|
536
|
-
|
|
545
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
546
|
+
if (isVScrollbar) {
|
|
547
|
+
return nextTick().then(() => {
|
|
548
|
+
updateThumbSize()
|
|
549
|
+
updateThumbOffset()
|
|
550
|
+
})
|
|
551
|
+
}
|
|
552
|
+
return Promise.resolve()
|
|
537
553
|
}
|
|
538
554
|
|
|
539
555
|
/**
|
|
@@ -553,10 +569,11 @@ export default defineVxeComponent({
|
|
|
553
569
|
parentHeight = parentEl.clientHeight - Math.ceil(XEUtils.toNumber(parentStyle.paddingLeft) + XEUtils.toNumber(parentStyle.paddingRight))
|
|
554
570
|
}
|
|
555
571
|
reactData.parentHeight = parentHeight
|
|
556
|
-
updateScrollbar()
|
|
557
572
|
updateHeight()
|
|
558
573
|
if (el.clientWidth && el.clientHeight) {
|
|
559
|
-
return computeScrollLoad()
|
|
574
|
+
return computeScrollLoad().then(() => {
|
|
575
|
+
updateScrollbar()
|
|
576
|
+
})
|
|
560
577
|
}
|
|
561
578
|
}
|
|
562
579
|
return nextTick()
|
|
@@ -565,7 +582,7 @@ export default defineVxeComponent({
|
|
|
565
582
|
const loadYData = (evnt: Event) => {
|
|
566
583
|
const { scrollYStore } = internalData
|
|
567
584
|
const { startIndex, endIndex, visibleSize, offsetSize, rowHeight } = scrollYStore
|
|
568
|
-
const scrollBodyElem = evnt.
|
|
585
|
+
const scrollBodyElem = evnt.currentTarget as HTMLDivElement
|
|
569
586
|
const scrollTop = scrollBodyElem.scrollTop
|
|
570
587
|
const toVisibleIndex = Math.floor(scrollTop / rowHeight)
|
|
571
588
|
const offsetStartIndex = Math.max(0, toVisibleIndex - 1 - offsetSize)
|
|
@@ -580,7 +597,7 @@ export default defineVxeComponent({
|
|
|
580
597
|
}
|
|
581
598
|
|
|
582
599
|
const scrollEvent = (evnt: Event) => {
|
|
583
|
-
const scrollBodyElem = evnt.
|
|
600
|
+
const scrollBodyElem = evnt.currentTarget as HTMLDivElement
|
|
584
601
|
const scrollTop = scrollBodyElem.scrollTop
|
|
585
602
|
const scrollLeft = scrollBodyElem.scrollLeft
|
|
586
603
|
const isX = scrollLeft !== internalData.lastScrollLeft
|
|
@@ -1610,6 +1627,10 @@ export default defineVxeComponent({
|
|
|
1610
1627
|
|
|
1611
1628
|
const listMethods: ListMethods = {
|
|
1612
1629
|
dispatchEvent,
|
|
1630
|
+
getScrollViewElem () {
|
|
1631
|
+
const viewEl = refVirtualWrapper.value
|
|
1632
|
+
return viewEl || null
|
|
1633
|
+
},
|
|
1613
1634
|
loadData,
|
|
1614
1635
|
/**
|
|
1615
1636
|
* 重新加载数据
|
|
@@ -1940,173 +1961,24 @@ export default defineVxeComponent({
|
|
|
1940
1961
|
}
|
|
1941
1962
|
}
|
|
1942
1963
|
|
|
1943
|
-
const
|
|
1944
|
-
const
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0
|
|
1962
|
-
const thumbYElem = refThumbYElem.value
|
|
1963
|
-
if (thumbYElem) {
|
|
1964
|
-
thumbYElem.style.height = yThumbHeight + 'px'
|
|
1965
|
-
}
|
|
1966
|
-
reactData.yThumbHeight = yThumbHeight
|
|
1967
|
-
}
|
|
1968
|
-
|
|
1969
|
-
const updateThumbOffset = () => {
|
|
1970
|
-
const viewEl = refVirtualWrapper.value
|
|
1971
|
-
if (!viewEl) {
|
|
1972
|
-
return
|
|
1973
|
-
}
|
|
1974
|
-
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
1975
|
-
return
|
|
1976
|
-
}
|
|
1977
|
-
const { xThumbWidth, yThumbHeight } = reactData
|
|
1978
|
-
const trackXEl = refTrackXElem.value
|
|
1979
|
-
const thumbXElem = refThumbXElem.value
|
|
1980
|
-
const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0
|
|
1981
|
-
internalData.xThumbLeft = xThumbLeft
|
|
1982
|
-
if (thumbXElem && xThumbWidth) {
|
|
1983
|
-
thumbXElem.style.width = xThumbWidth + 'px'
|
|
1984
|
-
thumbXElem.style.transform = `translateX(${xThumbLeft}px)`
|
|
1985
|
-
}
|
|
1986
|
-
|
|
1987
|
-
const trackYEl = refTrackYElem.value
|
|
1988
|
-
const thumbYElem = refThumbYElem.value
|
|
1989
|
-
const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0
|
|
1990
|
-
internalData.yThumbTop = yThumbTop
|
|
1991
|
-
if (thumbYElem && yThumbHeight) {
|
|
1992
|
-
thumbYElem.style.height = yThumbHeight + 'px'
|
|
1993
|
-
thumbYElem.style.transform = `translateY(${yThumbTop}px)`
|
|
1994
|
-
}
|
|
1995
|
-
}
|
|
1996
|
-
|
|
1997
|
-
const clickTrackXEvent = (evnt: MouseEvent) => {
|
|
1998
|
-
const trackEl = evnt.currentTarget as HTMLDivElement
|
|
1999
|
-
if (trackEl !== evnt.target) {
|
|
2000
|
-
return
|
|
2001
|
-
}
|
|
2002
|
-
const viewEl = refVirtualWrapper.value
|
|
2003
|
-
if (!viewEl) {
|
|
2004
|
-
return
|
|
2005
|
-
}
|
|
2006
|
-
const { xThumbWidth } = reactData
|
|
2007
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2008
|
-
viewEl.scrollTo({
|
|
2009
|
-
left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
|
|
2010
|
-
behavior: 'auto'
|
|
2011
|
-
})
|
|
2012
|
-
}
|
|
2013
|
-
|
|
2014
|
-
const clickTrackYEvent = (evnt: MouseEvent) => {
|
|
2015
|
-
const trackEl = evnt.currentTarget as HTMLDivElement
|
|
2016
|
-
if (trackEl !== evnt.target) {
|
|
2017
|
-
return
|
|
2018
|
-
}
|
|
2019
|
-
const viewEl = refVirtualWrapper.value
|
|
2020
|
-
if (!viewEl) {
|
|
2021
|
-
return
|
|
2022
|
-
}
|
|
2023
|
-
const { yThumbHeight } = reactData
|
|
2024
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2025
|
-
viewEl.scrollTo({
|
|
2026
|
-
top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
|
|
2027
|
-
behavior: 'auto'
|
|
2028
|
-
})
|
|
2029
|
-
}
|
|
2030
|
-
|
|
2031
|
-
const pointerdownThumbXEvent = (evnt: PointerEvent) => {
|
|
2032
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2033
|
-
internalData.isThumbDrag = true
|
|
2034
|
-
thumbEl.setPointerCapture(evnt.pointerId)
|
|
2035
|
-
|
|
2036
|
-
const viewEl = refVirtualWrapper.value
|
|
2037
|
-
if (!viewEl) {
|
|
2038
|
-
return
|
|
2039
|
-
}
|
|
2040
|
-
const { xThumbWidth } = reactData
|
|
2041
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
2042
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2043
|
-
const pointerPosition = evnt.clientX - trackRect.left
|
|
2044
|
-
// 记录 thumb 的偏移
|
|
2045
|
-
const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
|
|
2046
|
-
internalData.thumbDragOffset = pointerPosition - thumbOffset
|
|
2047
|
-
}
|
|
2048
|
-
|
|
2049
|
-
const pointermoveThumbXEvent = (evnt: PointerEvent) => {
|
|
2050
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2051
|
-
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
2052
|
-
return
|
|
2053
|
-
}
|
|
2054
|
-
const { isThumbDrag, thumbDragOffset } = internalData
|
|
2055
|
-
if (isThumbDrag) {
|
|
2056
|
-
const viewEl = refVirtualWrapper.value
|
|
2057
|
-
if (!viewEl) {
|
|
2058
|
-
return
|
|
2059
|
-
}
|
|
2060
|
-
const { xThumbWidth } = reactData
|
|
2061
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2062
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
2063
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2064
|
-
// 更新偏移
|
|
2065
|
-
viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
|
|
2066
|
-
}
|
|
2067
|
-
}
|
|
2068
|
-
|
|
2069
|
-
const cleatPointerThumbEvent = (evnt: PointerEvent) => {
|
|
2070
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2071
|
-
thumbEl.releasePointerCapture(evnt.pointerId)
|
|
2072
|
-
internalData.isThumbDrag = false
|
|
2073
|
-
}
|
|
2074
|
-
|
|
2075
|
-
const pointerdownThumbYEvent = (evnt: PointerEvent) => {
|
|
2076
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2077
|
-
internalData.isThumbDrag = true
|
|
2078
|
-
thumbEl.setPointerCapture(evnt.pointerId)
|
|
2079
|
-
|
|
2080
|
-
const viewEl = refVirtualWrapper.value
|
|
2081
|
-
if (!viewEl) {
|
|
2082
|
-
return
|
|
2083
|
-
}
|
|
2084
|
-
const { yThumbHeight } = reactData
|
|
2085
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
2086
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2087
|
-
const pointerPosition = evnt.clientY - trackRect.top
|
|
2088
|
-
// 记录 thumb 的偏移
|
|
2089
|
-
const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
|
|
2090
|
-
internalData.thumbDragOffset = pointerPosition - thumbOffset
|
|
2091
|
-
}
|
|
2092
|
-
|
|
2093
|
-
const pointermoveThumbYEvent = (evnt: PointerEvent) => {
|
|
2094
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2095
|
-
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
2096
|
-
return
|
|
2097
|
-
}
|
|
2098
|
-
const { isThumbDrag, thumbDragOffset } = internalData
|
|
2099
|
-
if (isThumbDrag) {
|
|
2100
|
-
const viewEl = refVirtualWrapper.value
|
|
2101
|
-
if (!viewEl) {
|
|
2102
|
-
return
|
|
1964
|
+
const bindScrollbarResize = () => {
|
|
1965
|
+
const { scrollObserver } = internalData
|
|
1966
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
1967
|
+
if (isVScrollbar) {
|
|
1968
|
+
if (!scrollObserver) {
|
|
1969
|
+
const el = refElem.value
|
|
1970
|
+
const viewInnerEl = refVirtualSpaceElem.value
|
|
1971
|
+
const scrollObserver = globalResize.create(() => {
|
|
1972
|
+
reScrollFlag.value++
|
|
1973
|
+
})
|
|
1974
|
+
if (el) {
|
|
1975
|
+
scrollObserver.observe(el)
|
|
1976
|
+
}
|
|
1977
|
+
if (viewInnerEl) {
|
|
1978
|
+
scrollObserver.observe(viewInnerEl)
|
|
1979
|
+
}
|
|
1980
|
+
internalData.scrollObserver = scrollObserver
|
|
2103
1981
|
}
|
|
2104
|
-
const { yThumbHeight } = reactData
|
|
2105
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2106
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
2107
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2108
|
-
// 更新偏移
|
|
2109
|
-
viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
|
|
2110
1982
|
}
|
|
2111
1983
|
}
|
|
2112
1984
|
|
|
@@ -2348,12 +2220,13 @@ export default defineVxeComponent({
|
|
|
2348
2220
|
}
|
|
2349
2221
|
|
|
2350
2222
|
const renderVN = () => {
|
|
2351
|
-
const { showCheckbox, className, loading
|
|
2223
|
+
const { showCheckbox, className, loading } = props
|
|
2352
2224
|
const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate, xThumbWidth, yThumbHeight } = reactData
|
|
2353
2225
|
const defaultSlot = slots.default
|
|
2354
2226
|
const headerSlot = slots.header
|
|
2355
2227
|
const footerSlot = slots.footer
|
|
2356
2228
|
const vSize = computeSize.value
|
|
2229
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
2357
2230
|
const wrapperStyles = computeWrapperStyles.value
|
|
2358
2231
|
const virtualStyles = computeVirtualStyles.value
|
|
2359
2232
|
const radioOpts = computeRadioOpts.value
|
|
@@ -2384,17 +2257,17 @@ export default defineVxeComponent({
|
|
|
2384
2257
|
ref: refElem,
|
|
2385
2258
|
class: [
|
|
2386
2259
|
'vxe-list',
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
2260
|
+
isVScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
|
|
2261
|
+
isVScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
|
|
2262
|
+
isVScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
|
|
2263
|
+
isVScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
|
|
2391
2264
|
className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '',
|
|
2392
2265
|
{
|
|
2393
2266
|
[`size--${vSize}`]: vSize,
|
|
2394
|
-
'is--virtual-scrollbar':
|
|
2395
|
-
'ov-padding':
|
|
2396
|
-
'ov-x--auto-hide':
|
|
2397
|
-
'ov-y--auto-hide':
|
|
2267
|
+
'is--virtual-scrollbar': isVScrollbar,
|
|
2268
|
+
'ov-padding': isVScrollbar && scrollbarOpts.padding,
|
|
2269
|
+
'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
|
|
2270
|
+
'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
|
|
2398
2271
|
'overflow-y': yThumbHeight,
|
|
2399
2272
|
'overflow-x': xThumbWidth,
|
|
2400
2273
|
'is--drag': isDrag,
|
|
@@ -2443,6 +2316,7 @@ export default defineVxeComponent({
|
|
|
2443
2316
|
onScroll: scrollEvent
|
|
2444
2317
|
}, [
|
|
2445
2318
|
h('div', {
|
|
2319
|
+
ref: refVirtualSpaceElem,
|
|
2446
2320
|
class: 'vxe-list--y-space',
|
|
2447
2321
|
style: {
|
|
2448
2322
|
height: bodyHeight ? `${bodyHeight}px` : ''
|
|
@@ -2471,7 +2345,7 @@ export default defineVxeComponent({
|
|
|
2471
2345
|
/**
|
|
2472
2346
|
* 滚动条
|
|
2473
2347
|
*/
|
|
2474
|
-
|
|
2348
|
+
isVScrollbar
|
|
2475
2349
|
? h('div', {
|
|
2476
2350
|
class: scrollbarWrapperClss
|
|
2477
2351
|
}, [
|
|
@@ -2536,44 +2410,56 @@ export default defineVxeComponent({
|
|
|
2536
2410
|
loadData(props.data || [])
|
|
2537
2411
|
})
|
|
2538
2412
|
|
|
2539
|
-
const
|
|
2413
|
+
const reScrollFlag = ref(0)
|
|
2414
|
+
const reLayoutFlag = ref(0)
|
|
2540
2415
|
watch(() => props.height, () => {
|
|
2541
|
-
|
|
2416
|
+
reLayoutFlag.value++
|
|
2542
2417
|
})
|
|
2543
2418
|
watch(() => props.maxHeight, () => {
|
|
2544
|
-
|
|
2419
|
+
reLayoutFlag.value++
|
|
2545
2420
|
})
|
|
2546
2421
|
watch(() => props.syncResize, () => {
|
|
2547
|
-
|
|
2422
|
+
reLayoutFlag.value++
|
|
2548
2423
|
})
|
|
2549
|
-
watch(
|
|
2550
|
-
|
|
2424
|
+
watch(computeIsVScrollbar, () => {
|
|
2425
|
+
nextTick(() => {
|
|
2426
|
+
bindScrollbarResize()
|
|
2427
|
+
nextTick(() => {
|
|
2428
|
+
reLayoutFlag.value++
|
|
2429
|
+
})
|
|
2430
|
+
})
|
|
2551
2431
|
})
|
|
2552
2432
|
watch(computeRowHeight, () => {
|
|
2553
|
-
|
|
2433
|
+
reLayoutFlag.value++
|
|
2554
2434
|
})
|
|
2555
2435
|
watch(computeScrollYWidth, () => {
|
|
2556
|
-
|
|
2436
|
+
reLayoutFlag.value++
|
|
2557
2437
|
})
|
|
2558
2438
|
watch(computeScrollXHeight, () => {
|
|
2559
|
-
|
|
2439
|
+
reLayoutFlag.value++
|
|
2560
2440
|
})
|
|
2561
2441
|
watch(computeScrollXVisible, () => {
|
|
2562
2442
|
nextTick(() => {
|
|
2563
|
-
|
|
2443
|
+
reLayoutFlag.value++
|
|
2564
2444
|
})
|
|
2565
2445
|
})
|
|
2566
2446
|
watch(computeScrollYVisible, () => {
|
|
2567
2447
|
nextTick(() => {
|
|
2568
|
-
|
|
2448
|
+
reLayoutFlag.value++
|
|
2569
2449
|
})
|
|
2570
2450
|
})
|
|
2571
|
-
watch(
|
|
2451
|
+
watch(reLayoutFlag, () => {
|
|
2572
2452
|
recalculate().then(() => {
|
|
2573
2453
|
recalculate()
|
|
2574
2454
|
})
|
|
2575
2455
|
})
|
|
2576
2456
|
|
|
2457
|
+
watch(reScrollFlag, () => {
|
|
2458
|
+
updateScrollbar().then(() => {
|
|
2459
|
+
updateScrollbar()
|
|
2460
|
+
})
|
|
2461
|
+
})
|
|
2462
|
+
|
|
2577
2463
|
watch(() => props.checkRowKey, () => {
|
|
2578
2464
|
updateRadioModeValue()
|
|
2579
2465
|
})
|
|
@@ -2600,7 +2486,7 @@ export default defineVxeComponent({
|
|
|
2600
2486
|
})
|
|
2601
2487
|
|
|
2602
2488
|
onMounted(() => {
|
|
2603
|
-
const { showSeq, showRadio, showCheckbox, autoResize
|
|
2489
|
+
const { showSeq, showRadio, showCheckbox, autoResize } = props
|
|
2604
2490
|
const rowOpts = computeRowOpts.value
|
|
2605
2491
|
const { useKey } = rowOpts
|
|
2606
2492
|
|
|
@@ -2623,25 +2509,12 @@ export default defineVxeComponent({
|
|
|
2623
2509
|
if (useKey && !keyField) {
|
|
2624
2510
|
errLog('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField'])
|
|
2625
2511
|
}
|
|
2626
|
-
const el = refElem.value
|
|
2627
|
-
if (useScrollbar) {
|
|
2628
|
-
const viewInnerEl = refVirtualBody.value
|
|
2629
|
-
const scrollObserver = globalResize.create(() => {
|
|
2630
|
-
reFlag.value++
|
|
2631
|
-
})
|
|
2632
|
-
if (el) {
|
|
2633
|
-
scrollObserver.observe(el)
|
|
2634
|
-
}
|
|
2635
|
-
if (viewInnerEl) {
|
|
2636
|
-
scrollObserver.observe(viewInnerEl)
|
|
2637
|
-
}
|
|
2638
|
-
internalData.scrollObserver = scrollObserver
|
|
2639
|
-
}
|
|
2640
2512
|
if (autoResize) {
|
|
2513
|
+
const el = refElem.value
|
|
2641
2514
|
const parentEl = getParentElem()
|
|
2642
2515
|
const resizeObserver = globalResize.create(() => {
|
|
2643
2516
|
if (props.autoResize) {
|
|
2644
|
-
|
|
2517
|
+
reLayoutFlag.value++
|
|
2645
2518
|
}
|
|
2646
2519
|
})
|
|
2647
2520
|
if (el) {
|
|
@@ -2652,9 +2525,10 @@ export default defineVxeComponent({
|
|
|
2652
2525
|
}
|
|
2653
2526
|
internalData.resizeObserver = resizeObserver
|
|
2654
2527
|
}
|
|
2655
|
-
|
|
2528
|
+
reLayoutFlag.value++
|
|
2529
|
+
bindScrollbarResize()
|
|
2656
2530
|
globalEvents.on($xeList, 'resize', () => {
|
|
2657
|
-
|
|
2531
|
+
reLayoutFlag.value++
|
|
2658
2532
|
})
|
|
2659
2533
|
})
|
|
2660
2534
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ref, h, reactive, Teleport, PropType, inject, resolveComponent, watch, VNode, computed, nextTick, onBeforeUnmount, onMounted } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
|
-
import { VxeUI, createEvent, permission,
|
|
4
|
+
import { VxeUI, createEvent, permission, globalEvents, renderEmptyElement } from '../../ui'
|
|
5
5
|
import { getPopupContainer, scrollToView, toCssUnit } from '../../ui/src/dom'
|
|
6
6
|
import { getLastZIndex, nextZIndex, isEnableConf, getDefaultConfig } from '../../ui/src/utils'
|
|
7
7
|
import { getSlotVNs } from '../../ui/src/vn'
|
|
@@ -13,7 +13,7 @@ import type { VxeMenuDefines, VxeMenuPropTypes, MenuInternalData, MenuReactData,
|
|
|
13
13
|
|
|
14
14
|
const { errLog } = createComponentLog('menu')
|
|
15
15
|
|
|
16
|
-
const { menus, getConfig, getIcon } = VxeUI
|
|
16
|
+
const { menus, useFns, getConfig, getIcon } = VxeUI
|
|
17
17
|
|
|
18
18
|
function createInternalData (): MenuInternalData {
|
|
19
19
|
return {
|
|
@@ -100,7 +100,8 @@ export default defineVxeComponent({
|
|
|
100
100
|
const refCollapseBodyElem = ref<HTMLDivElement>()
|
|
101
101
|
const refCollapseBodyScrollbar = ref<VxeScrollbarInstance>()
|
|
102
102
|
|
|
103
|
-
const { computeSize } = useSize(props)
|
|
103
|
+
const { computeSize } = useFns.useSize(props)
|
|
104
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props)
|
|
104
105
|
|
|
105
106
|
const reactData = reactive(createReactData())
|
|
106
107
|
const internalData = createInternalData()
|
|
@@ -701,9 +702,10 @@ export default defineVxeComponent({
|
|
|
701
702
|
}
|
|
702
703
|
|
|
703
704
|
const renderVN = () => {
|
|
704
|
-
const { loading, collapseFixed, appendTo
|
|
705
|
+
const { loading, collapseFixed, appendTo } = props
|
|
705
706
|
const { initialized, menuList, collapseStyle, isEnterCollapse } = reactData
|
|
706
707
|
const vSize = computeSize.value
|
|
708
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
707
709
|
const isCollapsed = computeIsCollapsed.value
|
|
708
710
|
const currBorder = computeCurrBorder.value
|
|
709
711
|
const varStyle = computeVarStyle.value
|
|
@@ -762,7 +764,7 @@ export default defineVxeComponent({
|
|
|
762
764
|
class: 'vxe-menu--header'
|
|
763
765
|
}, headerSlot(stParams))
|
|
764
766
|
: renderEmptyElement($xeMenu),
|
|
765
|
-
|
|
767
|
+
isVScrollbar && isEnterCollapse
|
|
766
768
|
? h(VxeScrollbarComponent, {
|
|
767
769
|
ref: refCollapseBodyScrollbar,
|
|
768
770
|
class: 'vxe-menu--scrollbar-body',
|
|
@@ -3,7 +3,7 @@ import { defineVxeComponent } from '../../ui/src/comp'
|
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
4
|
import { getEventTargetNode, getPopupContainer, getPopupWrapperElement, isScale, toCssUnit } from '../../ui/src/dom'
|
|
5
5
|
import { getLastZIndex, nextZIndex, getSubLastZIndex, nextSubZIndex, getFuncText, handleBooleanDefaultValue, getDefaultConfig } from '../../ui/src/utils'
|
|
6
|
-
import { VxeUI, getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent,
|
|
6
|
+
import { VxeUI, getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useFns, renderEmptyElement } from '../../ui'
|
|
7
7
|
import { getSlotVNs } from '../../ui/src/vn'
|
|
8
8
|
import { createComponentLog } from '../../ui/src/log'
|
|
9
9
|
import { allActiveModals } from './store'
|
|
@@ -266,7 +266,8 @@ export default defineVxeComponent({
|
|
|
266
266
|
const $xeTable = inject<(VxeTableConstructor & VxeTablePrivateMethods) | null>('$xeTable', null)
|
|
267
267
|
const $xeForm = inject<(VxeFormConstructor & VxeFormPrivateMethods)| null>('$xeForm', null)
|
|
268
268
|
|
|
269
|
-
const { computeSize } = useSize(props)
|
|
269
|
+
const { computeSize } = useFns.useSize(props)
|
|
270
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props)
|
|
270
271
|
|
|
271
272
|
const reactData = reactive(createReactData())
|
|
272
273
|
const internalData = createInternalData()
|
|
@@ -1398,8 +1399,9 @@ export default defineVxeComponent({
|
|
|
1398
1399
|
}
|
|
1399
1400
|
|
|
1400
1401
|
const renderBody = () => {
|
|
1401
|
-
const { slots: propSlots = {}, status, message, iconStatus,
|
|
1402
|
+
const { slots: propSlots = {}, status, message, iconStatus, useHtml } = props
|
|
1402
1403
|
const content = props.content || message
|
|
1404
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
1403
1405
|
const isMsg = computeIsMsg.value
|
|
1404
1406
|
const scrollbarProps = computeScrollbarProps.value
|
|
1405
1407
|
const defaultSlot = slots.default || propSlots.default
|
|
@@ -1420,7 +1422,7 @@ export default defineVxeComponent({
|
|
|
1420
1422
|
|
|
1421
1423
|
if (useHtml && !defaultSlot) {
|
|
1422
1424
|
contVNs.push(
|
|
1423
|
-
|
|
1425
|
+
isVScrollbar
|
|
1424
1426
|
? h(VxeScrollbarComponent, {
|
|
1425
1427
|
key: 'shc',
|
|
1426
1428
|
class: 'vxe-modal--scrollbar-content',
|
|
@@ -1443,7 +1445,7 @@ export default defineVxeComponent({
|
|
|
1443
1445
|
)
|
|
1444
1446
|
} else {
|
|
1445
1447
|
contVNs.push(
|
|
1446
|
-
|
|
1448
|
+
isVScrollbar
|
|
1447
1449
|
? h(VxeScrollbarComponent, {
|
|
1448
1450
|
key: 'sdc',
|
|
1449
1451
|
class: 'vxe-modal--scrollbar-content',
|