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.
Files changed (144) hide show
  1. package/dist/all.esm.js +2041 -2125
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/card/src/card.js +8 -6
  5. package/es/date-panel/src/date-panel.js +58 -36
  6. package/es/date-panel/style.css +22 -20
  7. package/es/date-panel/style.min.css +1 -1
  8. package/es/drawer/src/drawer.js +7 -5
  9. package/es/icon/style.css +1 -1
  10. package/es/icon-picker/src/icon-picker.js +74 -38
  11. package/es/icon-picker/style.css +9 -3
  12. package/es/icon-picker/style.min.css +1 -1
  13. package/es/layout-aside/src/layout-aside.js +6 -4
  14. package/es/layout-body/src/layout-body.js +6 -4
  15. package/es/layout-container/src/layout-container.js +11 -3
  16. package/es/list/src/list.js +81 -208
  17. package/es/menu/src/menu.js +7 -5
  18. package/es/modal/src/modal.js +7 -5
  19. package/es/scrollbar/src/scrollbar.js +28 -173
  20. package/es/select/src/select.js +243 -8
  21. package/es/select/style.css +44 -0
  22. package/es/select/style.min.css +1 -1
  23. package/es/style.css +1 -1
  24. package/es/style.min.css +1 -1
  25. package/es/tabs/src/tabs.js +5 -4
  26. package/es/tooltip/src/tooltip.js +7 -5
  27. package/es/tooltip/style.css +2 -0
  28. package/es/tooltip/style.min.css +1 -1
  29. package/es/tree/src/tree.js +86 -212
  30. package/es/ui/index.js +1 -1
  31. package/es/ui/src/log.js +1 -1
  32. package/es/vxe-date-panel/style.css +22 -20
  33. package/es/vxe-date-panel/style.min.css +1 -1
  34. package/es/vxe-icon-picker/style.css +9 -3
  35. package/es/vxe-icon-picker/style.min.css +1 -1
  36. package/es/vxe-select/style.css +44 -0
  37. package/es/vxe-select/style.min.css +1 -1
  38. package/es/vxe-tooltip/style.css +2 -0
  39. package/es/vxe-tooltip/style.min.css +1 -1
  40. package/lib/card/src/card.js +9 -6
  41. package/lib/card/src/card.min.js +1 -1
  42. package/lib/date-panel/src/date-panel.js +56 -34
  43. package/lib/date-panel/src/date-panel.min.js +1 -1
  44. package/lib/date-panel/style/style.css +22 -20
  45. package/lib/date-panel/style/style.min.css +1 -1
  46. package/lib/drawer/src/drawer.js +7 -4
  47. package/lib/drawer/src/drawer.min.js +1 -1
  48. package/lib/icon/style/style.css +1 -1
  49. package/lib/icon/style/style.min.css +1 -1
  50. package/lib/icon-picker/src/icon-picker.js +101 -45
  51. package/lib/icon-picker/src/icon-picker.min.js +1 -1
  52. package/lib/icon-picker/style/style.css +9 -3
  53. package/lib/icon-picker/style/style.min.css +1 -1
  54. package/lib/index.umd.js +1049 -859
  55. package/lib/index.umd.min.js +1 -1
  56. package/lib/layout-aside/src/layout-aside.js +7 -4
  57. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  58. package/lib/layout-body/src/layout-body.js +7 -4
  59. package/lib/layout-body/src/layout-body.min.js +1 -1
  60. package/lib/layout-container/src/layout-container.js +20 -4
  61. package/lib/layout-container/src/layout-container.min.js +1 -1
  62. package/lib/list/src/list.js +95 -232
  63. package/lib/list/src/list.min.js +1 -1
  64. package/lib/menu/src/menu.js +8 -4
  65. package/lib/menu/src/menu.min.js +1 -1
  66. package/lib/modal/src/modal.js +7 -4
  67. package/lib/modal/src/modal.min.js +1 -1
  68. package/lib/scrollbar/src/scrollbar.js +42 -199
  69. package/lib/scrollbar/src/scrollbar.min.js +1 -1
  70. package/lib/select/src/select.js +315 -68
  71. package/lib/select/src/select.min.js +1 -1
  72. package/lib/select/style/style.css +44 -0
  73. package/lib/select/style/style.min.css +1 -1
  74. package/lib/style.css +1 -1
  75. package/lib/style.min.css +1 -1
  76. package/lib/tabs/src/tabs.js +6 -5
  77. package/lib/tabs/src/tabs.min.js +1 -1
  78. package/lib/tooltip/src/tooltip.js +7 -4
  79. package/lib/tooltip/src/tooltip.min.js +1 -1
  80. package/lib/tooltip/style/style.css +2 -0
  81. package/lib/tooltip/style/style.min.css +1 -1
  82. package/lib/tree/src/tree.js +101 -235
  83. package/lib/tree/src/tree.min.js +1 -1
  84. package/lib/ui/index.js +1 -1
  85. package/lib/ui/index.min.js +1 -1
  86. package/lib/ui/src/log.js +1 -1
  87. package/lib/ui/src/log.min.js +1 -1
  88. package/lib/vxe-date-panel/style/style.css +22 -20
  89. package/lib/vxe-date-panel/style/style.min.css +1 -1
  90. package/lib/vxe-icon-picker/style/style.css +9 -3
  91. package/lib/vxe-icon-picker/style/style.min.css +1 -1
  92. package/lib/vxe-select/style/style.css +44 -0
  93. package/lib/vxe-select/style/style.min.css +1 -1
  94. package/lib/vxe-tooltip/style/style.css +2 -0
  95. package/lib/vxe-tooltip/style/style.min.css +1 -1
  96. package/package.json +2 -2
  97. package/packages/card/src/card.ts +8 -6
  98. package/packages/date-panel/src/date-panel.ts +58 -36
  99. package/packages/drawer/src/drawer.ts +7 -5
  100. package/packages/icon-picker/src/icon-picker.ts +80 -38
  101. package/packages/layout-aside/src/layout-aside.ts +6 -4
  102. package/packages/layout-body/src/layout-body.ts +6 -4
  103. package/packages/layout-container/src/layout-container.ts +13 -3
  104. package/packages/list/src/list.ts +98 -224
  105. package/packages/menu/src/menu.ts +7 -5
  106. package/packages/modal/src/modal.ts +7 -5
  107. package/packages/scrollbar/src/scrollbar.ts +44 -189
  108. package/packages/select/src/select.ts +278 -8
  109. package/packages/tabs/src/tabs.ts +5 -4
  110. package/packages/tooltip/src/tooltip.ts +7 -5
  111. package/packages/tree/src/tree.ts +103 -228
  112. package/styles/components/date-panel.scss +31 -29
  113. package/styles/components/icon-picker.scss +9 -3
  114. package/styles/components/select.scss +77 -0
  115. package/styles/components/tooltip.scss +1 -0
  116. package/types/components/card.d.ts +2 -2
  117. package/types/components/drawer.d.ts +2 -2
  118. package/types/components/gantt-module/gantt-view.d.ts +7 -16
  119. package/types/components/grid.d.ts +3 -1
  120. package/types/components/icon-picker.d.ts +21 -1
  121. package/types/components/layout-aside.d.ts +2 -2
  122. package/types/components/layout-body.d.ts +2 -2
  123. package/types/components/layout-container.d.ts +3 -1
  124. package/types/components/list.d.ts +6 -2
  125. package/types/components/menu.d.ts +2 -2
  126. package/types/components/modal.d.ts +2 -2
  127. package/types/components/scrollbar.d.ts +17 -14
  128. package/types/components/select.d.ts +28 -3
  129. package/types/components/table.d.ts +28 -22
  130. package/types/components/tabs.d.ts +2 -2
  131. package/types/components/tooltip.d.ts +2 -2
  132. package/types/components/tree.d.ts +8 -17
  133. /package/es/icon/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
  134. /package/es/icon/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
  135. /package/es/icon/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
  136. /package/es/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
  137. /package/es/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
  138. /package/es/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
  139. /package/lib/icon/style/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
  140. /package/lib/icon/style/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
  141. /package/lib/icon/style/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
  142. /package/lib/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
  143. /package/lib/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
  144. /package/lib/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
@@ -1,13 +1,13 @@
1
1
  import { ref, h, reactive, PropType, computed, VNode, watch, onBeforeUnmount, nextTick, onMounted, provide } from 'vue'
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
- import { VxeUI, domUtils, createEvent, useSize, globalEvents, globalResize, renderEmptyElement } from '../../ui'
3
+ import { VxeUI, domUtils, createEvent, useFns, globalEvents, globalResize, renderEmptyElement } from '../../ui'
4
4
  import { calcTreeLine, getItemCacheObj } from './util'
5
5
  import { createComponentLog } from '../../ui/src/log'
6
6
  import { getCrossTreeDragNodeInfo } from './store'
7
7
  import XEUtils from 'xe-utils'
8
8
  import { getSlotVNs } from '../../ui/src/vn'
9
9
  import { toCssUnit, isScale, getPaddingTopBottomSize, addClass, removeClass, getTpImg, hasControlKey, getEventTargetNode, hasClass } from '../../ui/src/dom'
10
- import { isEnableConf, enModelValue, deModelValue, getText, getDefaultConfig } from '../../ui/src/utils'
10
+ import { isEnableConf, enModelValue, deModelValue, getText } from '../../ui/src/utils'
11
11
  import { moveRowAnimateToTb, clearRowAnimate } from '../../ui/src/anime'
12
12
  import VxeLoadingComponent from '../../loading'
13
13
  import VxeTooltipComponent from '../../tooltip'
@@ -16,9 +16,8 @@ import type { TreeReactData, VxeTreeEmits, VxeTreePropTypes, TreeInternalData, T
16
16
 
17
17
  const { warnLog, errLog } = createComponentLog('tree')
18
18
 
19
- const { menus, scrollbarUtils, getConfig, getI18n, getIcon } = VxeUI
20
-
21
- const { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } = scrollbarUtils
19
+ const { menus, getConfig, getI18n, getIcon, baseUtils } = VxeUI
20
+ const { getDefVal } = baseUtils
22
21
 
23
22
  /**
24
23
  * 生成节点的唯一主键
@@ -239,7 +238,7 @@ export default defineVxeComponent({
239
238
  virtualYConfig: Object as PropType<VxeTreePropTypes.VirtualYConfig>,
240
239
  useScrollbar: {
241
240
  type: Boolean as PropType<VxeTreePropTypes.UseScrollbar>,
242
- default: () => getDefaultConfig(getConfig().tree.useScrollbar, getConfig().useScrollbar)
241
+ default: () => getDefVal(getConfig().tree.useScrollbar, getConfig().useScrollbar)
243
242
  },
244
243
  scrollbarConfig: Object as PropType<VxeTreePropTypes.ScrollbarConfig>
245
244
  },
@@ -269,19 +268,13 @@ export default defineVxeComponent({
269
268
 
270
269
  const xID = XEUtils.uniqueId()
271
270
 
272
- const { computeSize } = useSize(props)
273
-
274
271
  const refElem = ref<HTMLDivElement>()
275
272
  const refHeaderWrapperElem = ref<HTMLDivElement>()
276
273
  const refFooterWrapperElem = ref<HTMLDivElement>()
277
274
  const refVirtualWrapper = ref<HTMLDivElement>()
275
+ const refVirtualSpaceElem = ref<HTMLDivElement>()
278
276
  const refVirtualBody = ref<HTMLDivElement>()
279
277
 
280
- const refTrackXElem = ref<HTMLDivElement>()
281
- const refTrackYElem = ref<HTMLDivElement>()
282
- const refThumbXElem = ref<HTMLDivElement>()
283
- const refThumbYElem = ref<HTMLDivElement>()
284
-
285
278
  const refDragNodeLineElem = ref<HTMLDivElement>()
286
279
  const refDragTipElem = ref<HTMLDivElement>()
287
280
 
@@ -292,6 +285,9 @@ export default defineVxeComponent({
292
285
  const internalData = createInternalData()
293
286
  const reactData = reactive(createReactData())
294
287
 
288
+ const { computeSize } = useFns.useSize(props)
289
+ const { computeIsVScrollbar } = useFns.useVScrollbar(props)
290
+
295
291
  const refMaps: TreePrivateRef = {
296
292
  refElem
297
293
  }
@@ -439,37 +435,37 @@ export default defineVxeComponent({
439
435
  const computeScrollXHeight = computed(() => {
440
436
  const scrollbarOpts = computeScrollbarOpts.value
441
437
  const scrollbarXOpts = computeScrollbarXOpts.value
442
- return getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height)
438
+ return getDefVal(getDefVal(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height)
443
439
  })
444
440
 
445
441
  const computeScrollYWidth = computed(() => {
446
442
  const scrollbarOpts = computeScrollbarOpts.value
447
443
  const scrollbarYOpts = computeScrollbarYOpts.value
448
- return getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width)
444
+ return getDefVal(getDefVal(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width)
449
445
  })
450
446
 
451
447
  const computeScrollXVisible = computed(() => {
452
448
  const scrollbarOpts = computeScrollbarOpts.value
453
449
  const scrollbarXOpts = computeScrollbarXOpts.value
454
- return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible)
450
+ return getDefVal(scrollbarXOpts.visible, scrollbarOpts.visible)
455
451
  })
456
452
 
457
453
  const computeScrollYVisible = computed(() => {
458
454
  const scrollbarOpts = computeScrollbarOpts.value
459
455
  const scrollbarYOpts = computeScrollbarYOpts.value
460
- return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible)
456
+ return getDefVal(scrollbarYOpts.visible, scrollbarOpts.visible)
461
457
  })
462
458
 
463
459
  const computeScrollXAutoHide = computed(() => {
464
460
  const scrollbarOpts = computeScrollbarOpts.value
465
461
  const scrollbarXOpts = computeScrollbarXOpts.value
466
- return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide)
462
+ return getDefVal(getDefVal(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide)
467
463
  })
468
464
 
469
465
  const computeScrollYAutoHide = computed(() => {
470
466
  const scrollbarOpts = computeScrollbarOpts.value
471
467
  const scrollbarYOpts = computeScrollbarYOpts.value
472
- return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide)
468
+ return getDefVal(getDefVal(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide)
473
469
  })
474
470
 
475
471
  const computeScrollbarWrapperClss = computed(() => {
@@ -522,6 +518,22 @@ export default defineVxeComponent({
522
518
  getComputeMaps: () => computeMaps
523
519
  } as unknown as VxeTreeConstructor & VxeTreePrivateMethods
524
520
 
521
+ const {
522
+ refTrackXElem,
523
+ refTrackYElem,
524
+ refThumbXElem,
525
+ refThumbYElem,
526
+ updateThumbSize,
527
+ updateThumbOffset,
528
+ clickTrackXEvent,
529
+ clickTrackYEvent,
530
+ pointerdownThumbXEvent,
531
+ pointermoveThumbXEvent,
532
+ cleatPointerThumbEvent,
533
+ pointerdownThumbYEvent,
534
+ pointermoveThumbYEvent
535
+ } = useFns.useInitVScrollbar($xeTree)
536
+
525
537
  const getNodeId = (node: any) => {
526
538
  if (!node) {
527
539
  return ''
@@ -1046,8 +1058,14 @@ export default defineVxeComponent({
1046
1058
  }
1047
1059
 
1048
1060
  const updateScrollbar = () => {
1049
- updateThumbSize()
1050
- updateThumbOffset()
1061
+ const isVScrollbar = computeIsVScrollbar.value
1062
+ if (isVScrollbar) {
1063
+ return nextTick().then(() => {
1064
+ updateThumbSize()
1065
+ updateThumbOffset()
1066
+ })
1067
+ }
1068
+ return Promise.resolve()
1051
1069
  }
1052
1070
 
1053
1071
  /**
@@ -1071,11 +1089,11 @@ export default defineVxeComponent({
1071
1089
  const parentPaddingSize = getPaddingTopBottomSize(parentEl)
1072
1090
  reactData.parentHeight = Math.max(headHeight + footHeight + rowHeight, parentEl.clientHeight - parentPaddingSize - headHeight - footHeight)
1073
1091
  }
1074
- updateScrollbar()
1075
1092
  updateHeight()
1076
1093
  return computeScrollLoad().then(() => {
1077
1094
  updateHeight()
1078
1095
  updateYSpace()
1096
+ updateScrollbar()
1079
1097
  })
1080
1098
  }
1081
1099
  return nextTick()
@@ -1102,7 +1120,7 @@ export default defineVxeComponent({
1102
1120
  }
1103
1121
 
1104
1122
  const scrollEvent = (evnt: Event) => {
1105
- const scrollBodyElem = evnt.target as HTMLDivElement
1123
+ const scrollBodyElem = evnt.currentTarget as HTMLDivElement
1106
1124
  const scrollTop = scrollBodyElem.scrollTop
1107
1125
  const scrollLeft = scrollBodyElem.scrollLeft
1108
1126
  const isX = scrollLeft !== internalData.lastScrollLeft
@@ -1836,6 +1854,10 @@ export default defineVxeComponent({
1836
1854
 
1837
1855
  const treeMethods: TreeMethods = {
1838
1856
  dispatchEvent,
1857
+ getScrollViewElem () {
1858
+ const viewEl = refVirtualWrapper.value
1859
+ return viewEl || null
1860
+ },
1839
1861
  getNodeId,
1840
1862
  getNodeById (nodeid) {
1841
1863
  const { nodeMaps } = internalData
@@ -3113,173 +3135,24 @@ export default defineVxeComponent({
3113
3135
  }
3114
3136
  }
3115
3137
 
3116
- const updateThumbSize = () => {
3117
- const viewEl = refVirtualWrapper.value
3118
- if (!viewEl) {
3119
- return
3120
- }
3121
- if (!viewEl.clientHeight || !viewEl.clientHeight) {
3122
- return
3123
- }
3124
- const trackXEl = refTrackXElem.value
3125
- const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0
3126
- const thumbXElem = refThumbXElem.value
3127
- if (thumbXElem) {
3128
- thumbXElem.style.width = xThumbWidth + 'px'
3129
- }
3130
- reactData.xThumbWidth = xThumbWidth
3131
-
3132
- const trackYEl = refTrackYElem.value
3133
-
3134
- const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0
3135
- const thumbYElem = refThumbYElem.value
3136
- if (thumbYElem) {
3137
- thumbYElem.style.height = yThumbHeight + 'px'
3138
- }
3139
- reactData.yThumbHeight = yThumbHeight
3140
- }
3141
-
3142
- const updateThumbOffset = () => {
3143
- const viewEl = refVirtualWrapper.value
3144
- if (!viewEl) {
3145
- return
3146
- }
3147
- if (!viewEl.clientHeight || !viewEl.clientHeight) {
3148
- return
3149
- }
3150
- const { xThumbWidth, yThumbHeight } = reactData
3151
- const trackXEl = refTrackXElem.value
3152
- const thumbXElem = refThumbXElem.value
3153
- const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0
3154
- internalData.xThumbLeft = xThumbLeft
3155
- if (thumbXElem && xThumbWidth) {
3156
- thumbXElem.style.width = xThumbWidth + 'px'
3157
- thumbXElem.style.transform = `translateX(${xThumbLeft}px)`
3158
- }
3159
-
3160
- const trackYEl = refTrackYElem.value
3161
- const thumbYElem = refThumbYElem.value
3162
- const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0
3163
- internalData.yThumbTop = yThumbTop
3164
- if (thumbYElem && yThumbHeight) {
3165
- thumbYElem.style.height = yThumbHeight + 'px'
3166
- thumbYElem.style.transform = `translateY(${yThumbTop}px)`
3167
- }
3168
- }
3169
-
3170
- const clickTrackXEvent = (evnt: MouseEvent) => {
3171
- const trackEl = evnt.currentTarget as HTMLDivElement
3172
- if (trackEl !== evnt.target) {
3173
- return
3174
- }
3175
- const viewEl = refVirtualWrapper.value
3176
- if (!viewEl) {
3177
- return
3178
- }
3179
- const { xThumbWidth } = reactData
3180
- const trackRect = trackEl.getBoundingClientRect()
3181
- viewEl.scrollTo({
3182
- left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
3183
- behavior: 'auto'
3184
- })
3185
- }
3186
-
3187
- const clickTrackYEvent = (evnt: MouseEvent) => {
3188
- const trackEl = evnt.currentTarget as HTMLDivElement
3189
- if (trackEl !== evnt.target) {
3190
- return
3191
- }
3192
- const viewEl = refVirtualWrapper.value
3193
- if (!viewEl) {
3194
- return
3195
- }
3196
- const { yThumbHeight } = reactData
3197
- const trackRect = trackEl.getBoundingClientRect()
3198
- viewEl.scrollTo({
3199
- top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
3200
- behavior: 'auto'
3201
- })
3202
- }
3203
-
3204
- const pointerdownThumbXEvent = (evnt: PointerEvent) => {
3205
- const thumbEl = evnt.currentTarget as HTMLDivElement
3206
- internalData.isThumbDrag = true
3207
- thumbEl.setPointerCapture(evnt.pointerId)
3208
-
3209
- const viewEl = refVirtualWrapper.value
3210
- if (!viewEl) {
3211
- return
3212
- }
3213
- const { xThumbWidth } = reactData
3214
- const trackEl = thumbEl.parentElement as HTMLDivElement
3215
- const trackRect = trackEl.getBoundingClientRect()
3216
- const pointerPosition = evnt.clientX - trackRect.left
3217
- // 记录 thumb 的偏移
3218
- const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
3219
- internalData.thumbDragOffset = pointerPosition - thumbOffset
3220
- }
3221
-
3222
- const pointermoveThumbXEvent = (evnt: PointerEvent) => {
3223
- const thumbEl = evnt.currentTarget as HTMLDivElement
3224
- if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
3225
- return
3226
- }
3227
- const { isThumbDrag, thumbDragOffset } = internalData
3228
- if (isThumbDrag) {
3229
- const viewEl = refVirtualWrapper.value
3230
- if (!viewEl) {
3231
- return
3232
- }
3233
- const { xThumbWidth } = reactData
3234
- const thumbEl = evnt.currentTarget as HTMLDivElement
3235
- const trackEl = thumbEl.parentElement as HTMLDivElement
3236
- const trackRect = trackEl.getBoundingClientRect()
3237
- // 更新偏移
3238
- viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
3239
- }
3240
- }
3241
-
3242
- const cleatPointerThumbEvent = (evnt: PointerEvent) => {
3243
- const thumbEl = evnt.currentTarget as HTMLDivElement
3244
- thumbEl.releasePointerCapture(evnt.pointerId)
3245
- internalData.isThumbDrag = false
3246
- }
3247
-
3248
- const pointerdownThumbYEvent = (evnt: PointerEvent) => {
3249
- const thumbEl = evnt.currentTarget as HTMLDivElement
3250
- internalData.isThumbDrag = true
3251
- thumbEl.setPointerCapture(evnt.pointerId)
3252
-
3253
- const viewEl = refVirtualWrapper.value
3254
- if (!viewEl) {
3255
- return
3256
- }
3257
- const { yThumbHeight } = reactData
3258
- const trackEl = thumbEl.parentElement as HTMLDivElement
3259
- const trackRect = trackEl.getBoundingClientRect()
3260
- const pointerPosition = evnt.clientY - trackRect.top
3261
- // 记录 thumb 的偏移
3262
- const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
3263
- internalData.thumbDragOffset = pointerPosition - thumbOffset
3264
- }
3265
-
3266
- const pointermoveThumbYEvent = (evnt: PointerEvent) => {
3267
- const thumbEl = evnt.currentTarget as HTMLDivElement
3268
- if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
3269
- return
3270
- }
3271
- const { isThumbDrag, thumbDragOffset } = internalData
3272
- if (isThumbDrag) {
3273
- const viewEl = refVirtualWrapper.value
3274
- if (!viewEl) {
3275
- return
3138
+ const bindScrollbarResize = () => {
3139
+ const isVScrollbar = computeIsVScrollbar.value
3140
+ const { scrollObserver } = internalData
3141
+ if (isVScrollbar) {
3142
+ if (!scrollObserver) {
3143
+ const el = refElem.value
3144
+ const viewInnerEl = refVirtualSpaceElem.value
3145
+ const scrollObserver = globalResize.create(() => {
3146
+ reScrollFlag.value++
3147
+ })
3148
+ if (el) {
3149
+ scrollObserver.observe(el)
3150
+ }
3151
+ if (viewInnerEl) {
3152
+ scrollObserver.observe(viewInnerEl)
3153
+ }
3154
+ internalData.scrollObserver = scrollObserver
3276
3155
  }
3277
- const { yThumbHeight } = reactData
3278
- const thumbEl = evnt.currentTarget as HTMLDivElement
3279
- const trackEl = thumbEl.parentElement as HTMLDivElement
3280
- const trackRect = trackEl.getBoundingClientRect()
3281
- // 更新偏移
3282
- viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
3283
3156
  }
3284
3157
  }
3285
3158
 
@@ -3627,9 +3500,10 @@ export default defineVxeComponent({
3627
3500
  }
3628
3501
 
3629
3502
  const renderVN = () => {
3630
- const { loading, trigger, showLine, useScrollbar } = props
3503
+ const { loading, trigger, showLine } = props
3631
3504
  const { bodyHeight, topSpaceHeight, treeList, tooltipStore, xThumbWidth, yThumbHeight } = reactData
3632
3505
  const vSize = computeSize.value
3506
+ const isVScrollbar = computeIsVScrollbar.value
3633
3507
  const radioOpts = computeRadioOpts.value
3634
3508
  const checkboxOpts = computeCheckboxOpts.value
3635
3509
  const loadingOpts = computeLoadingOpts.value
@@ -3661,17 +3535,17 @@ export default defineVxeComponent({
3661
3535
  ref: refElem,
3662
3536
  class: [
3663
3537
  'vxe-tree',
3664
- useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
3665
- useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
3666
- useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
3667
- useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
3538
+ isVScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
3539
+ isVScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
3540
+ isVScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
3541
+ isVScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
3668
3542
  {
3669
3543
  [`size--${vSize}`]: vSize,
3670
3544
  'show--line': showLine,
3671
- 'is--virtual-scrollbar': useScrollbar,
3672
- 'ov-padding': useScrollbar && scrollbarOpts.padding,
3673
- 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
3674
- 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
3545
+ 'is--virtual-scrollbar': isVScrollbar,
3546
+ 'ov-padding': isVScrollbar && scrollbarOpts.padding,
3547
+ 'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
3548
+ 'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
3675
3549
  'overflow-y': yThumbHeight,
3676
3550
  'overflow-x': xThumbWidth,
3677
3551
  'checkbox--highlight': checkboxOpts.highlight,
@@ -3697,6 +3571,7 @@ export default defineVxeComponent({
3697
3571
  onScroll: scrollEvent
3698
3572
  }, [
3699
3573
  h('div', {
3574
+ ref: refVirtualSpaceElem,
3700
3575
  class: 'vxe-tree--y-space',
3701
3576
  style: {
3702
3577
  height: bodyHeight ? `${bodyHeight}px` : ''
@@ -3719,7 +3594,7 @@ export default defineVxeComponent({
3719
3594
  /**
3720
3595
  * 滚动条
3721
3596
  */
3722
- useScrollbar
3597
+ isVScrollbar
3723
3598
  ? h('div', {
3724
3599
  class: scrollbarWrapperClss
3725
3600
  }, [
@@ -3847,43 +3722,55 @@ export default defineVxeComponent({
3847
3722
  triggerSearchEvent(new Event('filter'))
3848
3723
  })
3849
3724
 
3850
- const reFlag = ref(0)
3725
+ const reScrollFlag = ref(0)
3726
+ const reLayoutFlag = ref(0)
3851
3727
  watch(() => props.height, () => {
3852
- reFlag.value++
3728
+ reLayoutFlag.value++
3853
3729
  })
3854
3730
  watch(() => props.minHeight, () => {
3855
- reFlag.value++
3731
+ reLayoutFlag.value++
3856
3732
  })
3857
3733
  watch(() => props.maxHeight, () => {
3858
- reFlag.value++
3734
+ reLayoutFlag.value++
3859
3735
  })
3860
- watch(() => props.useScrollbar, () => {
3861
- reFlag.value++
3736
+ watch(computeIsVScrollbar, () => {
3737
+ nextTick(() => {
3738
+ bindScrollbarResize()
3739
+ nextTick(() => {
3740
+ reLayoutFlag.value++
3741
+ })
3742
+ })
3862
3743
  })
3863
3744
  watch(computeScrollYWidth, () => {
3864
- reFlag.value++
3745
+ reLayoutFlag.value++
3865
3746
  })
3866
3747
  watch(computeScrollXHeight, () => {
3867
- reFlag.value++
3748
+ reLayoutFlag.value++
3868
3749
  })
3869
3750
  watch(computeScrollXVisible, () => {
3870
3751
  nextTick(() => {
3871
- reFlag.value++
3752
+ reLayoutFlag.value++
3872
3753
  })
3873
3754
  })
3874
3755
  watch(computeScrollYVisible, () => {
3875
3756
  nextTick(() => {
3876
- reFlag.value++
3757
+ reLayoutFlag.value++
3877
3758
  })
3878
3759
  })
3879
- watch(reFlag, () => {
3760
+ watch(reLayoutFlag, () => {
3880
3761
  recalculate().then(() => {
3881
3762
  recalculate()
3882
3763
  })
3883
3764
  })
3884
3765
 
3766
+ watch(reScrollFlag, () => {
3767
+ updateScrollbar().then(() => {
3768
+ updateScrollbar()
3769
+ })
3770
+ })
3771
+
3885
3772
  onMounted(() => {
3886
- const { transform, drag, menuConfig, showOverflow, lazy, loadMethod, autoResize, useScrollbar } = props
3773
+ const { transform, drag, menuConfig, showOverflow, lazy, loadMethod, autoResize } = props
3887
3774
  const dragOpts = computeDragOpts.value
3888
3775
  if (!showOverflow) {
3889
3776
  errLog('vxe.error.errProp', ['show-overflow=false', 'show-overflow=true'])
@@ -3904,25 +3791,12 @@ export default defineVxeComponent({
3904
3791
  if (menuConfig && !VxeUIContextMenu) {
3905
3792
  errLog('vxe.error.reqComp', ['vxe-context-menu'])
3906
3793
  }
3907
- const el = refElem.value
3908
- if (useScrollbar || autoResize) {
3909
- const viewInnerEl = refVirtualBody.value
3910
- const scrollObserver = globalResize.create(() => {
3911
- updateScrollbar()
3912
- })
3913
- if (el) {
3914
- scrollObserver.observe(el)
3915
- }
3916
- if (viewInnerEl) {
3917
- scrollObserver.observe(viewInnerEl)
3918
- }
3919
- internalData.scrollObserver = scrollObserver
3920
- }
3921
3794
  if (autoResize) {
3795
+ const el = refElem.value
3922
3796
  const parentEl = getParentElem()
3923
3797
  const resizeObserver = globalResize.create(() => {
3924
3798
  if (props.autoResize) {
3925
- reFlag.value++
3799
+ reLayoutFlag.value++
3926
3800
  }
3927
3801
  })
3928
3802
  if (el) {
@@ -3934,9 +3808,10 @@ export default defineVxeComponent({
3934
3808
  internalData.resizeObserver = resizeObserver
3935
3809
  }
3936
3810
 
3937
- reFlag.value++
3811
+ reLayoutFlag.value++
3812
+ bindScrollbarResize()
3938
3813
  globalEvents.on($xeTree, 'resize', () => {
3939
- reFlag.value++
3814
+ reLayoutFlag.value++
3940
3815
  })
3941
3816
  })
3942
3817
 
@@ -434,41 +434,22 @@
434
434
  flex-grow: 1;
435
435
  border-radius: var(--vxe-ui-base-border-radius);
436
436
  user-select: none;
437
- & > ul {
437
+ .vxe-date-panel--time-hour-list,
438
+ .vxe-date-panel--time-minute-list,
439
+ .vxe-date-panel--time-second-list {
438
440
  height: 100%;
439
441
  overflow: hidden;
440
442
  margin: 0;
441
443
  padding: 0;
442
- width: 3.2em;
444
+ width: 3em;
445
+ }
446
+ .vxe-date-panel--time-list-inner {
443
447
  &:before,
444
448
  &:after {
445
449
  content: " ";
446
450
  display: block;
447
451
  height: 6em;
448
452
  }
449
- &:hover {
450
- overflow-y: auto;
451
- }
452
- & > li {
453
- display: block;
454
- height: 2em;
455
- line-height: 2em;
456
- padding-left: 0.4em;
457
- &:not(.is--disabled) {
458
- &:hover {
459
- background-color: var(--vxe-ui-input-date-picker-hover-background-color);
460
- cursor: pointer;
461
- }
462
- }
463
- &.is--selected {
464
- font-weight: 700;
465
- color: var(--vxe-ui-font-primary-color);
466
- }
467
- &.is--disabled {
468
- color: var(--vxe-ui-font-disabled-color);
469
- cursor: no-drop;
470
- }
471
- }
472
453
  }
473
454
  .vxe-date-panel--time-minute-list {
474
455
  border-left: 1px solid var(--vxe-ui-base-popup-border-color);
@@ -476,16 +457,37 @@
476
457
  .vxe-date-panel--time-second-list {
477
458
  border-left: 1px solid var(--vxe-ui-base-popup-border-color);
478
459
  }
460
+ .vxe-date-panel--time-item {
461
+ display: block;
462
+ height: 2em;
463
+ line-height: 2em;
464
+ text-align: center;
465
+ &:not(.is--disabled) {
466
+ &:hover {
467
+ background-color: var(--vxe-ui-input-date-picker-hover-background-color);
468
+ cursor: pointer;
469
+ }
470
+ }
471
+ &.is--selected {
472
+ font-weight: 700;
473
+ color: var(--vxe-ui-font-primary-color);
474
+ }
475
+ &.is--disabled {
476
+ color: var(--vxe-ui-font-disabled-color);
477
+ cursor: no-drop;
478
+ }
479
+ }
479
480
  }
480
481
  .vxe-date-panel {
481
482
  &.type--time {
482
483
  .vxe-date-panel--time-body {
483
- & > ul {
484
- width: 4em;
485
- & > li {
484
+ .vxe-date-panel--time-hour-list,
485
+ .vxe-date-panel--time-minute-list,
486
+ .vxe-date-panel--time-second-list {
487
+ width: 3.6em;
488
+ .vxe-date-panel--time-item {
486
489
  height: 2.2em;
487
490
  line-height: 2.2em;
488
- padding-left: 0.8em;
489
491
  }
490
492
  }
491
493
  }
@@ -122,14 +122,20 @@
122
122
  }
123
123
  }
124
124
 
125
- .vxe-ico-picker--list-wrapper {
125
+ .vxe-ico-picker--list-wrapper,
126
+ .vxe-ico-picker--scrollbar-list-wrapper {
126
127
  overflow-x: hidden;
127
128
  overflow-y: auto;
128
129
  height: var(--vxe-ui-icon-picker-panel-height);
129
- max-height: var(--vxe-ui-icon-picker-panel-max-height, var(--vxe-ui-icon-picker-panel-height, 22.3em));
130
130
  padding: var(--vxe-ui-layout-padding-qtr);
131
131
  }
132
- .vxe-ico-picker--list {
132
+ .vxe-ico-picker--list-wrapper,
133
+ .vxe-ico-picker--scrollbar-list-wrapper-view {
134
+ max-height: var(--vxe-ui-icon-picker-panel-max-height, var(--vxe-ui-icon-picker-panel-height, 22.6em));
135
+ }
136
+
137
+ .vxe-ico-picker--list,
138
+ .vxe-ico-picker--scrollbar-list-wrapper-inner {
133
139
  display: flex;
134
140
  flex-direction: row;
135
141
  flex-wrap: wrap;