vxe-pc-ui 4.20.0 → 4.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/dist/all.esm.js +780 -173
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/card/src/card.js +19 -4
  5. package/es/drawer/src/drawer.js +59 -15
  6. package/es/drawer/style.css +13 -6
  7. package/es/drawer/style.min.css +1 -1
  8. package/es/icon/style.css +1 -1
  9. package/es/language/fr-FR.js +29 -29
  10. package/es/layout-aside/src/layout-aside.js +10 -6
  11. package/es/layout-body/src/layout-body.js +21 -12
  12. package/es/list/src/list.js +118 -49
  13. package/es/list/style.css +25 -8
  14. package/es/list/style.min.css +1 -1
  15. package/es/menu/src/menu.js +2 -2
  16. package/es/modal/src/modal.js +56 -12
  17. package/es/modal/style.css +15 -4
  18. package/es/modal/style.min.css +1 -1
  19. package/es/scrollbar/src/scrollbar.js +73 -19
  20. package/es/style.css +1 -1
  21. package/es/style.min.css +1 -1
  22. package/es/tabs/src/tabs.js +21 -6
  23. package/es/tree/src/tree.js +410 -53
  24. package/es/tree/style.css +43 -0
  25. package/es/tree/style.min.css +1 -1
  26. package/es/ui/index.js +1 -1
  27. package/es/ui/src/log.js +1 -1
  28. package/es/ui/src/utils.js +3 -0
  29. package/es/vxe-drawer/style.css +13 -6
  30. package/es/vxe-drawer/style.min.css +1 -1
  31. package/es/vxe-list/style.css +25 -8
  32. package/es/vxe-list/style.min.css +1 -1
  33. package/es/vxe-modal/style.css +15 -4
  34. package/es/vxe-modal/style.min.css +1 -1
  35. package/es/vxe-tree/style.css +43 -0
  36. package/es/vxe-tree/style.min.css +1 -1
  37. package/lib/card/src/card.js +19 -4
  38. package/lib/card/src/card.min.js +1 -1
  39. package/lib/drawer/src/drawer.js +64 -11
  40. package/lib/drawer/src/drawer.min.js +1 -1
  41. package/lib/drawer/style/style.css +13 -6
  42. package/lib/drawer/style/style.min.css +1 -1
  43. package/lib/icon/style/style.css +1 -1
  44. package/lib/icon/style/style.min.css +1 -1
  45. package/lib/index.umd.js +887 -183
  46. package/lib/index.umd.min.js +1 -1
  47. package/lib/language/fr-FR.js +29 -29
  48. package/lib/language/fr-FR.min.js +1 -1
  49. package/lib/language/fr-FR.umd.js +29 -29
  50. package/lib/layout-aside/src/layout-aside.js +9 -8
  51. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  52. package/lib/layout-body/src/layout-body.js +29 -22
  53. package/lib/layout-body/src/layout-body.min.js +1 -1
  54. package/lib/list/src/list.js +110 -47
  55. package/lib/list/src/list.min.js +1 -1
  56. package/lib/list/style/style.css +25 -8
  57. package/lib/list/style/style.min.css +1 -1
  58. package/lib/menu/src/menu.js +1 -1
  59. package/lib/menu/src/menu.min.js +1 -1
  60. package/lib/modal/src/modal.js +61 -10
  61. package/lib/modal/src/modal.min.js +1 -1
  62. package/lib/modal/style/style.css +15 -4
  63. package/lib/modal/style/style.min.css +1 -1
  64. package/lib/scrollbar/src/scrollbar.js +81 -17
  65. package/lib/scrollbar/src/scrollbar.min.js +1 -1
  66. package/lib/style.css +1 -1
  67. package/lib/style.min.css +1 -1
  68. package/lib/tabs/src/tabs.js +23 -11
  69. package/lib/tabs/src/tabs.min.js +1 -1
  70. package/lib/tree/src/tree.js +412 -50
  71. package/lib/tree/src/tree.min.js +1 -1
  72. package/lib/tree/style/style.css +43 -0
  73. package/lib/tree/style/style.min.css +1 -1
  74. package/lib/ui/index.js +1 -1
  75. package/lib/ui/index.min.js +1 -1
  76. package/lib/ui/src/log.js +1 -1
  77. package/lib/ui/src/log.min.js +1 -1
  78. package/lib/ui/src/utils.js +4 -0
  79. package/lib/ui/src/utils.min.js +1 -1
  80. package/lib/vxe-drawer/style/style.css +13 -6
  81. package/lib/vxe-drawer/style/style.min.css +1 -1
  82. package/lib/vxe-list/style/style.css +25 -8
  83. package/lib/vxe-list/style/style.min.css +1 -1
  84. package/lib/vxe-modal/style/style.css +15 -4
  85. package/lib/vxe-modal/style/style.min.css +1 -1
  86. package/lib/vxe-tree/style/style.css +43 -0
  87. package/lib/vxe-tree/style/style.min.css +1 -1
  88. package/package.json +2 -2
  89. package/packages/card/src/card.ts +20 -4
  90. package/packages/drawer/src/drawer.ts +73 -16
  91. package/packages/language/fr-FR.ts +903 -903
  92. package/packages/layout-aside/src/layout-aside.ts +10 -6
  93. package/packages/layout-body/src/layout-body.ts +25 -15
  94. package/packages/list/src/list.ts +130 -55
  95. package/packages/menu/src/menu.ts +2 -2
  96. package/packages/modal/src/modal.ts +71 -14
  97. package/packages/scrollbar/src/scrollbar.ts +79 -18
  98. package/packages/tabs/src/tabs.ts +21 -7
  99. package/packages/tree/src/tree.ts +452 -62
  100. package/packages/ui/src/utils.ts +4 -0
  101. package/styles/components/drawer.scss +13 -6
  102. package/styles/components/list.scss +35 -10
  103. package/styles/components/modal.scss +12 -4
  104. package/styles/components/tree.scss +76 -0
  105. package/types/components/card.d.ts +10 -1
  106. package/types/components/drawer.d.ts +20 -0
  107. package/types/components/gantt-module/gantt-view.d.ts +24 -1
  108. package/types/components/gantt.d.ts +2 -0
  109. package/types/components/layout-aside.d.ts +10 -1
  110. package/types/components/layout-body.d.ts +10 -1
  111. package/types/components/list.d.ts +13 -2
  112. package/types/components/modal.d.ts +20 -0
  113. package/types/components/scrollbar.d.ts +17 -2
  114. package/types/components/table.d.ts +80 -6
  115. package/types/components/tabs.d.ts +10 -1
  116. package/types/components/tree.d.ts +35 -2
  117. /package/es/icon/{iconfont.1791880413927.ttf → iconfont.1792034967421.ttf} +0 -0
  118. /package/es/icon/{iconfont.1791880413927.woff → iconfont.1792034967421.woff} +0 -0
  119. /package/es/icon/{iconfont.1791880413927.woff2 → iconfont.1792034967421.woff2} +0 -0
  120. /package/es/{iconfont.1791880413927.ttf → iconfont.1792034967421.ttf} +0 -0
  121. /package/es/{iconfont.1791880413927.woff → iconfont.1792034967421.woff} +0 -0
  122. /package/es/{iconfont.1791880413927.woff2 → iconfont.1792034967421.woff2} +0 -0
  123. /package/lib/icon/style/{iconfont.1791880413927.ttf → iconfont.1792034967421.ttf} +0 -0
  124. /package/lib/icon/style/{iconfont.1791880413927.woff → iconfont.1792034967421.woff} +0 -0
  125. /package/lib/icon/style/{iconfont.1791880413927.woff2 → iconfont.1792034967421.woff2} +0 -0
  126. /package/lib/{iconfont.1791880413927.ttf → iconfont.1792034967421.ttf} +0 -0
  127. /package/lib/{iconfont.1791880413927.woff → iconfont.1792034967421.woff} +0 -0
  128. /package/lib/{iconfont.1791880413927.woff2 → iconfont.1792034967421.woff2} +0 -0
@@ -2,6 +2,7 @@ import { ref, h, reactive, computed, provide, PropType } from 'vue'
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
3
  import { toCssUnit } from '../../ui/src/dom'
4
4
  import { getConfig, useSize, createEvent } from '../../ui'
5
+ import { getDefaultConfig } from '../../ui/src/utils'
5
6
  import XEUtils from 'xe-utils'
6
7
  import VxeLoadingComponent from '../../loading'
7
8
  import VxeScrollbarComponent from '../../scrollbar'
@@ -19,7 +20,7 @@ export default defineVxeComponent({
19
20
  collapseConfig: Object as PropType<VxeLayoutAsidePropTypes.CollapseConfig>,
20
21
  useScrollbar: {
21
22
  type: Boolean as PropType<VxeLayoutAsidePropTypes.UseScrollbar>,
22
- default: () => getConfig().layoutAside.useScrollbar
23
+ default: () => getDefaultConfig(getConfig().layoutAside.useScrollbar, getConfig().useScrollbar)
23
24
  },
24
25
  scrollbarConfig: Object as PropType<VxeLayoutAsidePropTypes.ScrollbarConfig>,
25
26
  size: {
@@ -97,7 +98,7 @@ export default defineVxeComponent({
97
98
  const vSize = computeSize.value
98
99
  const collapseOpts = computeCollapseOpts.value
99
100
  const scrollbarOpts = computeScrollbarOpts.value
100
- const { native, yConfig, className, viewAttrs, viewClassName, viewInnerClassName } = scrollbarOpts
101
+ const { className, viewClassName, viewInnerClassName } = scrollbarOpts
101
102
  const defaultSlot = slots.default
102
103
 
103
104
  return h('aside', {
@@ -113,13 +114,16 @@ export default defineVxeComponent({
113
114
  }, [
114
115
  useScrollbar
115
116
  ? h(VxeScrollbarComponent, {
116
- native,
117
+ width: scrollbarOpts.width,
118
+ height: scrollbarOpts.height,
119
+ autoHide: scrollbarOpts.autoHide,
120
+ visible: scrollbarOpts.visible,
117
121
  xConfig: {
118
- visible: 'hidden'
122
+ visible: false
119
123
  },
120
- yConfig,
124
+ yConfig: scrollbarOpts.yConfig,
121
125
  className: 'vxe-layout-aside--scrollbar' + (className ? (' ' + className) : ''),
122
- viewAttrs,
126
+ viewAttrs: scrollbarOpts.viewAttrs,
123
127
  viewClassName: 'vxe-layout-aside--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
124
128
  viewInnerClassName: 'vxe-layout-aside--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
125
129
  }, {
@@ -2,6 +2,7 @@ import { ref, h, reactive, PropType, computed } from 'vue'
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
3
  import { getConfig, useSize, createEvent, renderEmptyElement } from '../../ui'
4
4
  import XEUtils from 'xe-utils'
5
+ import { getDefaultConfig } from '../../ui/src/utils'
5
6
  import VxeLoadingComponent from '../../loading'
6
7
  import VxeScrollbarComponent from '../../scrollbar'
7
8
  import VxeUIBacktopComponent from '../../backtop'
@@ -28,7 +29,7 @@ export default defineVxeComponent({
28
29
  backtopConfig: Object as PropType<VxeLayoutBodyPropTypes.BacktopConfig>,
29
30
  useScrollbar: {
30
31
  type: Boolean as PropType<VxeLayoutBodyPropTypes.UseScrollbar>,
31
- default: () => getConfig().layoutBody.useScrollbar
32
+ default: () => getDefaultConfig(getConfig().layoutBody.useScrollbar, getConfig().useScrollbar)
32
33
  },
33
34
  scrollbarConfig: Object as PropType<VxeLayoutBodyPropTypes.ScrollbarConfig>,
34
35
  size: {
@@ -64,6 +65,27 @@ export default defineVxeComponent({
64
65
  return Object.assign({}, getConfig().layoutBody.scrollbarConfig, props.scrollbarConfig)
65
66
  })
66
67
 
68
+ const computeScrollbarProps = computed(() => {
69
+ const { showBacktop } = props
70
+ const scrollbarOpts = computeScrollbarOpts.value
71
+ const { className, viewClassName, viewInnerClassName } = scrollbarOpts
72
+ return {
73
+ width: scrollbarOpts.width,
74
+ height: scrollbarOpts.height,
75
+ autoHide: scrollbarOpts.autoHide,
76
+ visible: scrollbarOpts.visible,
77
+ xConfig: scrollbarOpts.xConfig,
78
+ yConfig: scrollbarOpts.yConfig,
79
+ className: 'vxe-layout-body--scrollbar' + (className ? (' ' + className) : ''),
80
+ viewAttrs: {
81
+ ...scrollbarOpts.viewAttrs,
82
+ id: showBacktop ? (backtopId || null) : null
83
+ },
84
+ viewClassName: 'vxe-layout-body--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
85
+ viewInnerClassName: 'vxe-layout-body--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
86
+ }
87
+ })
88
+
67
89
  const computeMaps: VxeLayoutBodyPrivateComputed = {
68
90
  computeSize
69
91
  }
@@ -95,8 +117,7 @@ export default defineVxeComponent({
95
117
  const renderVN = () => {
96
118
  const { loading, padding, showBacktop, useScrollbar } = props
97
119
  const backtopOpts = computeBacktopOpts.value
98
- const scrollbarOpts = computeScrollbarOpts.value
99
- const { native, xConfig, yConfig, className, viewAttrs, viewClassName, viewInnerClassName } = scrollbarOpts
120
+ const scrollbarProps = computeScrollbarProps.value
100
121
  const vSize = computeSize.value
101
122
  const defaultSlot = slots.default
102
123
  const backtopSlot = slots.backtop
@@ -125,18 +146,7 @@ export default defineVxeComponent({
125
146
  }]
126
147
  }, [
127
148
  useScrollbar
128
- ? h(VxeScrollbarComponent, {
129
- native,
130
- xConfig,
131
- yConfig,
132
- className: 'vxe-layout-body--scrollbar' + (className ? (' ' + className) : ''),
133
- viewAttrs: {
134
- ...viewAttrs,
135
- id: showBacktop ? (backtopId || null) : null
136
- },
137
- viewClassName: 'vxe-layout-body--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
138
- viewInnerClassName: 'vxe-layout-body--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
139
- }, {
149
+ ? h(VxeScrollbarComponent, scrollbarProps, {
140
150
  default: () => defaultSlot ? defaultSlot({}) : []
141
151
  })
142
152
  : h('div', {
@@ -4,7 +4,7 @@ import XEUtils from 'xe-utils'
4
4
  import { VxeUI, getConfig, getIcon, getI18n, domUtils, menus, globalEvents, globalResize, useSize, createEvent, renderEmptyElement } from '../../ui'
5
5
  import { getCrossListDragRowInfo } from './store'
6
6
  import { isScale, removeClass, addClass, getTpImg, toCssUnit, hasClass } from '../../ui/src/dom'
7
- import { isEnableConf, getText, enModelValue, deModelValue } from '../../ui/src/utils'
7
+ import { isEnableConf, getText, enModelValue, deModelValue, getDefaultConfig } from '../../ui/src/utils'
8
8
  import { createComponentLog } from '../../ui/src/log'
9
9
  import { moveRowAnimateToTb, clearRowAnimate } from '../../ui/src/anime'
10
10
  import { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } from '../../scrollbar/src/util'
@@ -63,8 +63,10 @@ function createInternalData (): ListInternalData {
63
63
  fullKeyMaps: {},
64
64
  rowMaps: {},
65
65
 
66
- // 滚动条
67
66
  // resizeObserver: undefined,
67
+
68
+ // 滚动条
69
+ // scrollObserver: undefined,
68
70
  // isThumbDrag: false,
69
71
  thumbDragOffset: 0,
70
72
  yThumbTop: 0,
@@ -133,7 +135,7 @@ export default defineVxeComponent({
133
135
  scrollY: Object as PropType<VxeListPropTypes.ScrollY>,
134
136
  useScrollbar: {
135
137
  type: Boolean as PropType<VxeListPropTypes.UseScrollbar>,
136
- default: () => getConfig().list.useScrollbar
138
+ default: () => getDefaultConfig(getConfig().list.useScrollbar, getConfig().useScrollbar)
137
139
  },
138
140
  scrollbarConfig: Object as PropType<VxeListPropTypes.ScrollbarConfig>
139
141
  },
@@ -176,7 +178,6 @@ export default defineVxeComponent({
176
178
  const refVirtualWrapper = ref() as Ref<HTMLDivElement>
177
179
  const refVirtualBody = ref() as Ref<HTMLDivElement>
178
180
 
179
- const refViewInnerElem = ref<HTMLDivElement>()
180
181
  const refTrackXElem = ref<HTMLDivElement>()
181
182
  const refTrackYElem = ref<HTMLDivElement>()
182
183
  const refThumbXElem = ref<HTMLDivElement>()
@@ -242,17 +243,15 @@ export default defineVxeComponent({
242
243
 
243
244
  const computeWrapperStyles = computed(() => {
244
245
  const rowHeight = computeRowHeight.value
245
- const scrollbarXOpts = computeScrollbarXOpts.value
246
- const scrollbarYOpts = computeScrollbarYOpts.value
246
+ const barWidth = computeScrollYWidth.value
247
+ const barHeight = computeScrollXHeight.value
247
248
  const stys: VxeComponentStyleType = {}
248
249
  if (rowHeight) {
249
250
  stys['--vxe-ui-list-row-height'] = toCssUnit(rowHeight)
250
251
  }
251
- if (scrollbarYOpts.width) {
252
- stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(scrollbarYOpts.width)
253
- }
254
- if (scrollbarXOpts.height) {
255
- stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(scrollbarXOpts.height)
252
+ if (barWidth || barHeight) {
253
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight)
254
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth)
256
255
  }
257
256
  return stys
258
257
  })
@@ -284,24 +283,55 @@ export default defineVxeComponent({
284
283
  return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig)
285
284
  })
286
285
 
287
- const computeScrollbarWrapperClss = computed(() => {
286
+ const computeScrollXHeight = computed(() => {
287
+ const scrollbarOpts = computeScrollbarOpts.value
288
+ const scrollbarXOpts = computeScrollbarXOpts.value
289
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height)
290
+ })
291
+
292
+ const computeScrollYWidth = computed(() => {
293
+ const scrollbarOpts = computeScrollbarOpts.value
294
+ const scrollbarYOpts = computeScrollbarYOpts.value
295
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width)
296
+ })
297
+
298
+ const computeScrollXVisible = computed(() => {
299
+ const scrollbarOpts = computeScrollbarOpts.value
300
+ const scrollbarXOpts = computeScrollbarXOpts.value
301
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible)
302
+ })
303
+
304
+ const computeScrollYVisible = computed(() => {
305
+ const scrollbarOpts = computeScrollbarOpts.value
306
+ const scrollbarYOpts = computeScrollbarYOpts.value
307
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible)
308
+ })
309
+
310
+ const computeScrollXAutoHide = computed(() => {
288
311
  const scrollbarOpts = computeScrollbarOpts.value
289
- const { padding } = scrollbarOpts
290
- const { yThumbHeight, xThumbWidth } = reactData
291
312
  const scrollbarXOpts = computeScrollbarXOpts.value
313
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide)
314
+ })
315
+
316
+ const computeScrollYAutoHide = computed(() => {
317
+ const scrollbarOpts = computeScrollbarOpts.value
292
318
  const scrollbarYOpts = computeScrollbarYOpts.value
319
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide)
320
+ })
321
+
322
+ const computeScrollbarWrapperClss = computed(() => {
323
+ const { yThumbHeight, xThumbWidth } = reactData
293
324
  const scrollbarXToTop = computeScrollbarXToTop.value
294
325
  const scrollbarYToLeft = computeScrollbarYToLeft.value
326
+ const scrollXVisible = computeScrollXVisible.value
327
+ const scrollYVisible = computeScrollYVisible.value
295
328
  return domUtils.buildClass([
296
329
  'vxe-scrollbar is--virtual',
297
- `ov-x--${scrollbarXOpts.visible || 'visible'}`,
298
- `ov-y--${scrollbarYOpts.visible || 'visible'}`,
330
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
331
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
299
332
  `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
300
333
  `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
301
334
  ], {
302
- 'is--padding': padding,
303
- 'ov-x--auto-hide': scrollbarXOpts.autoHide,
304
- 'ov-y--auto-hide': scrollbarYOpts.autoHide,
305
335
  'overflow-y': yThumbHeight,
306
336
  'overflow-x': xThumbWidth
307
337
  })
@@ -334,6 +364,11 @@ export default defineVxeComponent({
334
364
  return getRowIdByField(row, keyField)
335
365
  }
336
366
 
367
+ const getParentElem = () => {
368
+ const el = refElem.value
369
+ return el ? el.parentElement : null
370
+ }
371
+
337
372
  const calcTableHeight = (key: 'height' | 'maxHeight') => {
338
373
  const { parentHeight } = reactData
339
374
  const val = props[key]
@@ -2311,7 +2346,7 @@ export default defineVxeComponent({
2311
2346
 
2312
2347
  const renderVN = () => {
2313
2348
  const { showCheckbox, className, loading, useScrollbar } = props
2314
- const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate } = reactData
2349
+ const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate, xThumbWidth, yThumbHeight } = reactData
2315
2350
  const defaultSlot = slots.default
2316
2351
  const headerSlot = slots.header
2317
2352
  const footerSlot = slots.footer
@@ -2326,8 +2361,13 @@ export default defineVxeComponent({
2326
2361
  const rowOpts = computeRowOpts.value
2327
2362
  const { isHover, padding } = rowOpts
2328
2363
  const isDrag = computeIsDrag.value
2329
- const scrollbarXOpts = computeScrollbarXOpts.value
2330
- const scrollbarYOpts = computeScrollbarYOpts.value
2364
+ const scrollbarOpts = computeScrollbarOpts.value
2365
+ const scrollXVisible = computeScrollXVisible.value
2366
+ const scrollYVisible = computeScrollYVisible.value
2367
+ const scrollbarXToTop = computeScrollbarXToTop.value
2368
+ const scrollbarYToLeft = computeScrollbarYToLeft.value
2369
+ const scrollXAutoHide = computeScrollXAutoHide.value
2370
+ const scrollYAutoHide = computeScrollYAutoHide.value
2331
2371
  const scrollbarWrapperClss = computeScrollbarWrapperClss.value
2332
2372
  const showDefChekboxHead = showCheckbox && showHeader !== false
2333
2373
 
@@ -2339,14 +2379,25 @@ export default defineVxeComponent({
2339
2379
  }
2340
2380
  return h('div', {
2341
2381
  ref: refElem,
2342
- class: ['vxe-list', className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '', {
2343
- [`size--${vSize}`]: vSize,
2344
- 'is--virtual-scrollbar': useScrollbar,
2345
- 'ov-x--auto-hide': useScrollbar && scrollbarXOpts.autoHide,
2346
- 'ov-y--auto-hide': useScrollbar && scrollbarYOpts.autoHide,
2347
- 'is--drag': isDrag,
2348
- 'is--loading': loading
2349
- }],
2382
+ class: [
2383
+ 'vxe-list',
2384
+ useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
2385
+ useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
2386
+ useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
2387
+ useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
2388
+ className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '',
2389
+ {
2390
+ [`size--${vSize}`]: vSize,
2391
+ 'is--virtual-scrollbar': useScrollbar,
2392
+ 'ov-padding': useScrollbar && scrollbarOpts.padding,
2393
+ 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
2394
+ 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
2395
+ 'overflow-y': yThumbHeight,
2396
+ 'overflow-x': xThumbWidth,
2397
+ 'is--drag': isDrag,
2398
+ 'is--loading': loading
2399
+ }
2400
+ ],
2350
2401
  style: wrapperStyles,
2351
2402
  ...leOns
2352
2403
  }, [
@@ -2406,17 +2457,7 @@ export default defineVxeComponent({
2406
2457
  style: {
2407
2458
  marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
2408
2459
  }
2409
- }, useScrollbar
2410
- ? (
2411
- defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i))
2412
- )
2413
- : [
2414
- h('div', {
2415
- key: 'vi',
2416
- ref: refViewInnerElem,
2417
- class: 'vxe-scrollbar--view-inner'
2418
- }, defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i)))
2419
- ])
2460
+ }, defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i)))
2420
2461
  ]),
2421
2462
  footerSlot
2422
2463
  ? h('div', {
@@ -2431,7 +2472,7 @@ export default defineVxeComponent({
2431
2472
  ? h('div', {
2432
2473
  class: scrollbarWrapperClss
2433
2474
  }, [
2434
- scrollbarXOpts.visible === 'hidden'
2475
+ scrollXVisible === false
2435
2476
  ? renderEmptyElement($xeList)
2436
2477
  : h('div', {
2437
2478
  ref: refTrackXElem,
@@ -2448,7 +2489,7 @@ export default defineVxeComponent({
2448
2489
  onLostpointercapture: cleatPointerThumbEvent
2449
2490
  })
2450
2491
  ]),
2451
- scrollbarYOpts.visible === 'hidden'
2492
+ scrollYVisible === false
2452
2493
  ? renderEmptyElement($xeList)
2453
2494
  : h('div', {
2454
2495
  ref: refTrackYElem,
@@ -2502,11 +2543,30 @@ export default defineVxeComponent({
2502
2543
  watch(() => props.syncResize, () => {
2503
2544
  reFlag.value++
2504
2545
  })
2546
+ watch(() => props.useScrollbar, () => {
2547
+ reFlag.value++
2548
+ })
2505
2549
  watch(computeRowHeight, () => {
2506
2550
  reFlag.value++
2507
2551
  })
2508
- watch(reFlag, () => {
2552
+ watch(computeScrollYWidth, () => {
2553
+ reFlag.value++
2554
+ })
2555
+ watch(computeScrollXHeight, () => {
2556
+ reFlag.value++
2557
+ })
2558
+ watch(computeScrollXVisible, () => {
2559
+ nextTick(() => {
2560
+ reFlag.value++
2561
+ })
2562
+ })
2563
+ watch(computeScrollYVisible, () => {
2509
2564
  nextTick(() => {
2565
+ reFlag.value++
2566
+ })
2567
+ })
2568
+ watch(reFlag, () => {
2569
+ recalculate().then(() => {
2510
2570
  recalculate()
2511
2571
  })
2512
2572
  })
@@ -2560,20 +2620,32 @@ export default defineVxeComponent({
2560
2620
  if (useKey && !keyField) {
2561
2621
  errLog('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField'])
2562
2622
  }
2563
- if (useScrollbar || autoResize) {
2564
- const el = refElem.value
2565
- const viewInnerEl = refViewInnerElem.value
2566
- const resizeObserver = globalResize.create(() => {
2623
+ const el = refElem.value
2624
+ if (useScrollbar) {
2625
+ const viewInnerEl = refVirtualBody.value
2626
+ const scrollObserver = globalResize.create(() => {
2567
2627
  reFlag.value++
2568
2628
  })
2569
- resizeObserver.observe(el)
2570
- if (autoResize) {
2571
- if (el) {
2572
- resizeObserver.observe(el.parentElement as HTMLDivElement)
2573
- }
2629
+ if (el) {
2630
+ scrollObserver.observe(el)
2574
2631
  }
2575
2632
  if (viewInnerEl) {
2576
- resizeObserver.observe(viewInnerEl)
2633
+ scrollObserver.observe(viewInnerEl)
2634
+ }
2635
+ internalData.scrollObserver = scrollObserver
2636
+ }
2637
+ if (autoResize) {
2638
+ const parentEl = getParentElem()
2639
+ const resizeObserver = globalResize.create(() => {
2640
+ if (props.autoResize) {
2641
+ reFlag.value++
2642
+ }
2643
+ })
2644
+ if (el) {
2645
+ resizeObserver.observe(el)
2646
+ }
2647
+ if (parentEl) {
2648
+ resizeObserver.observe(parentEl)
2577
2649
  }
2578
2650
  internalData.resizeObserver = resizeObserver
2579
2651
  }
@@ -2584,10 +2656,13 @@ export default defineVxeComponent({
2584
2656
  })
2585
2657
 
2586
2658
  onBeforeUnmount(() => {
2587
- const { resizeObserver } = internalData
2659
+ const { scrollObserver, resizeObserver } = internalData
2588
2660
  if (resizeObserver) {
2589
2661
  resizeObserver.disconnect()
2590
2662
  }
2663
+ if (scrollObserver) {
2664
+ scrollObserver.disconnect()
2665
+ }
2591
2666
  globalEvents.off($xeList, 'resize')
2592
2667
  XEUtils.assign(reactData, createReactData())
2593
2668
  XEUtils.assign(internalData, createInternalData())
@@ -3,7 +3,7 @@ import { defineVxeComponent } from '../../ui/src/comp'
3
3
  import XEUtils from 'xe-utils'
4
4
  import { VxeUI, createEvent, permission, useSize, globalEvents, renderEmptyElement } from '../../ui'
5
5
  import { getPopupContainer, scrollToView, toCssUnit } from '../../ui/src/dom'
6
- import { getLastZIndex, nextZIndex, isEnableConf } from '../../ui/src/utils'
6
+ import { getLastZIndex, nextZIndex, isEnableConf, getDefaultConfig } from '../../ui/src/utils'
7
7
  import { getSlotVNs } from '../../ui/src/vn'
8
8
  import { createComponentLog } from '../../ui/src/log'
9
9
  import VxeLoadingComponent from '../../loading'
@@ -74,7 +74,7 @@ export default defineVxeComponent({
74
74
  menuConfig: Object as PropType<VxeMenuPropTypes.MenuConfig>,
75
75
  useScrollbar: {
76
76
  type: Boolean as PropType<VxeMenuPropTypes.UseScrollbar>,
77
- default: () => getConfig().menu.useScrollbar
77
+ default: () => getDefaultConfig(getConfig().menu.useScrollbar, getConfig().useScrollbar)
78
78
  },
79
79
  scrollbarConfig: Object as PropType<VxeMenuPropTypes.ScrollbarConfig>,
80
80
  appendTo: {
@@ -2,13 +2,14 @@ import { h, Teleport, ref, Ref, inject, computed, reactive, provide, nextTick, w
2
2
  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
- import { getLastZIndex, nextZIndex, getSubLastZIndex, nextSubZIndex, getFuncText, handleBooleanDefaultValue } from '../../ui/src/utils'
5
+ import { getLastZIndex, nextZIndex, getSubLastZIndex, nextSubZIndex, getFuncText, handleBooleanDefaultValue, getDefaultConfig } from '../../ui/src/utils'
6
6
  import { VxeUI, getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useSize, 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'
10
10
  import VxeButtonComponent from '../../button'
11
11
  import VxeLoadingComponent from '../../loading'
12
+ import VxeScrollbarComponent from '../../scrollbar'
12
13
 
13
14
  import type { VxeModalConstructor, VxeModalPropTypes, ModalReactData, ModalInternalData, VxeModalEmits, VxeModalPrivateComputed, ModalEventTypes, VxeButtonInstance, ModalMethods, ModalPrivateRef, VxeModalMethods, ValueOf, VxeDrawerConstructor, VxeDrawerMethods, VxeFormConstructor, VxeFormPrivateMethods } from '../../../types'
14
15
  import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
@@ -223,6 +224,11 @@ export default defineVxeComponent({
223
224
  },
224
225
  beforeHideMethod: Function as PropType<VxeModalPropTypes.BeforeHideMethod>,
225
226
  slots: Object as PropType<VxeModalPropTypes.Slots>,
227
+ useScrollbar: {
228
+ type: Boolean as PropType<VxeModalPropTypes.UseScrollbar>,
229
+ default: () => getDefaultConfig(getConfig().modal.useScrollbar, getConfig().useScrollbar)
230
+ },
231
+ scrollbarConfig: Object as PropType<VxeModalPropTypes.ScrollbarConfig>,
226
232
 
227
233
  /**
228
234
  * 已废弃
@@ -310,6 +316,27 @@ export default defineVxeComponent({
310
316
  return Object.assign({}, getConfig().modal.zoomConfig, props.zoomConfig)
311
317
  })
312
318
 
319
+ const computeScrollbarOpts = computed(() => {
320
+ return Object.assign({}, getConfig().modal.scrollbarConfig, props.scrollbarConfig)
321
+ })
322
+
323
+ const computeScrollbarProps = computed(() => {
324
+ const scrollbarOpts = computeScrollbarOpts.value
325
+ const { viewClassName, viewInnerClassName } = scrollbarOpts
326
+ return {
327
+ width: scrollbarOpts.width,
328
+ height: scrollbarOpts.height,
329
+ autoHide: scrollbarOpts.autoHide,
330
+ visible: scrollbarOpts.visible,
331
+ xConfig: scrollbarOpts.xConfig,
332
+ yConfig: scrollbarOpts.yConfig,
333
+ className: scrollbarOpts.className,
334
+ viewAttrs: scrollbarOpts.viewAttrs,
335
+ viewClassName: 'vxe-modal--scrollbar-content-view' + (viewClassName ? (' ' + viewClassName) : ''),
336
+ viewInnerClassName: 'vxe-modal--scrollbar-content-inner' + (viewClassName ? (' ' + viewInnerClassName) : '')
337
+ }
338
+ })
339
+
313
340
  const computeMaps: VxeModalPrivateComputed = {
314
341
  computeSize,
315
342
  computeZoomOpts
@@ -1371,9 +1398,10 @@ export default defineVxeComponent({
1371
1398
  }
1372
1399
 
1373
1400
  const renderBody = () => {
1374
- const { slots: propSlots = {}, status, message, iconStatus, useHtml } = props
1401
+ const { slots: propSlots = {}, status, message, iconStatus, useScrollbar, useHtml } = props
1375
1402
  const content = props.content || message
1376
1403
  const isMsg = computeIsMsg.value
1404
+ const scrollbarProps = computeScrollbarProps.value
1377
1405
  const defaultSlot = slots.default || propSlots.default
1378
1406
  const leftSlot = slots.left || propSlots.left
1379
1407
  const rightSlot = slots.right || propSlots.right
@@ -1389,18 +1417,47 @@ export default defineVxeComponent({
1389
1417
  ])
1390
1418
  )
1391
1419
  }
1392
- contVNs.push(
1393
- useHtml && !defaultSlot
1394
- ? h('div', {
1395
- key: 'hc',
1396
- class: 'vxe-modal--content',
1397
- innerHTML: getFuncText(content)
1398
- })
1399
- : h('div', {
1400
- key: 'dc',
1401
- class: 'vxe-modal--content'
1402
- }, defaultSlot ? getSlotVNs(defaultSlot({ $modal: $xeModal })) : getFuncText(content))
1403
- )
1420
+
1421
+ if (useHtml && !defaultSlot) {
1422
+ contVNs.push(
1423
+ useScrollbar
1424
+ ? h(VxeScrollbarComponent, {
1425
+ key: 'shc',
1426
+ class: 'vxe-modal--scrollbar-content',
1427
+ ...scrollbarProps
1428
+ }, {
1429
+ default () {
1430
+ return [
1431
+ h('div', {
1432
+ class: 'vxe-modal--scrollbar-content-html',
1433
+ innerHTML: getFuncText(content)
1434
+ })
1435
+ ]
1436
+ }
1437
+ })
1438
+ : h('div', {
1439
+ key: 'hc',
1440
+ class: 'vxe-modal--content',
1441
+ innerHTML: getFuncText(content)
1442
+ })
1443
+ )
1444
+ } else {
1445
+ contVNs.push(
1446
+ useScrollbar
1447
+ ? h(VxeScrollbarComponent, {
1448
+ key: 'sdc',
1449
+ class: 'vxe-modal--scrollbar-content',
1450
+ ...scrollbarProps
1451
+ }, {
1452
+ default: () => defaultSlot ? getSlotVNs(defaultSlot({ $modal: $xeModal })) : getFuncText(content)
1453
+ })
1454
+ : h('div', {
1455
+ key: 'dc',
1456
+ class: 'vxe-modal--content'
1457
+ }, defaultSlot ? getSlotVNs(defaultSlot({ $modal: $xeModal })) : getFuncText(content))
1458
+ )
1459
+ }
1460
+
1404
1461
  return h('div', {
1405
1462
  class: 'vxe-modal--body'
1406
1463
  }, [