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 } 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';
@@ -23,7 +24,7 @@ export default defineVxeComponent({
23
24
  backtopConfig: Object,
24
25
  useScrollbar: {
25
26
  type: Boolean,
26
- default: () => getConfig().layoutBody.useScrollbar
27
+ default: () => getDefaultConfig(getConfig().layoutBody.useScrollbar, getConfig().useScrollbar)
27
28
  },
28
29
  scrollbarConfig: Object,
29
30
  size: {
@@ -51,6 +52,23 @@ export default defineVxeComponent({
51
52
  const computeScrollbarOpts = computed(() => {
52
53
  return Object.assign({}, getConfig().layoutBody.scrollbarConfig, props.scrollbarConfig);
53
54
  });
55
+ const computeScrollbarProps = computed(() => {
56
+ const { showBacktop } = props;
57
+ const scrollbarOpts = computeScrollbarOpts.value;
58
+ const { className, viewClassName, viewInnerClassName } = scrollbarOpts;
59
+ return {
60
+ width: scrollbarOpts.width,
61
+ height: scrollbarOpts.height,
62
+ autoHide: scrollbarOpts.autoHide,
63
+ visible: scrollbarOpts.visible,
64
+ xConfig: scrollbarOpts.xConfig,
65
+ yConfig: scrollbarOpts.yConfig,
66
+ className: 'vxe-layout-body--scrollbar' + (className ? (' ' + className) : ''),
67
+ viewAttrs: Object.assign(Object.assign({}, scrollbarOpts.viewAttrs), { id: showBacktop ? (backtopId || null) : null }),
68
+ viewClassName: 'vxe-layout-body--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
69
+ viewInnerClassName: 'vxe-layout-body--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
70
+ };
71
+ });
54
72
  const computeMaps = {
55
73
  computeSize
56
74
  };
@@ -74,8 +92,7 @@ export default defineVxeComponent({
74
92
  const renderVN = () => {
75
93
  const { loading, padding, showBacktop, useScrollbar } = props;
76
94
  const backtopOpts = computeBacktopOpts.value;
77
- const scrollbarOpts = computeScrollbarOpts.value;
78
- const { native, xConfig, yConfig, className, viewAttrs, viewClassName, viewInnerClassName } = scrollbarOpts;
95
+ const scrollbarProps = computeScrollbarProps.value;
79
96
  const vSize = computeSize.value;
80
97
  const defaultSlot = slots.default;
81
98
  const backtopSlot = slots.backtop;
@@ -100,15 +117,7 @@ export default defineVxeComponent({
100
117
  }]
101
118
  }, [
102
119
  useScrollbar
103
- ? h(VxeScrollbarComponent, {
104
- native,
105
- xConfig,
106
- yConfig,
107
- className: 'vxe-layout-body--scrollbar' + (className ? (' ' + className) : ''),
108
- viewAttrs: Object.assign(Object.assign({}, viewAttrs), { id: showBacktop ? (backtopId || null) : null }),
109
- viewClassName: 'vxe-layout-body--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
110
- viewInnerClassName: 'vxe-layout-body--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
111
- }, {
120
+ ? h(VxeScrollbarComponent, scrollbarProps, {
112
121
  default: () => defaultSlot ? defaultSlot({}) : []
113
122
  })
114
123
  : 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';
@@ -53,8 +53,9 @@ function createInternalData() {
53
53
  afterList: [],
54
54
  fullKeyMaps: {},
55
55
  rowMaps: {},
56
- // 滚动条
57
56
  // resizeObserver: undefined,
57
+ // 滚动条
58
+ // scrollObserver: undefined,
58
59
  // isThumbDrag: false,
59
60
  thumbDragOffset: 0,
60
61
  yThumbTop: 0,
@@ -117,7 +118,7 @@ export default defineVxeComponent({
117
118
  scrollY: Object,
118
119
  useScrollbar: {
119
120
  type: Boolean,
120
- default: () => getConfig().list.useScrollbar
121
+ default: () => getDefaultConfig(getConfig().list.useScrollbar, getConfig().useScrollbar)
121
122
  },
122
123
  scrollbarConfig: Object
123
124
  },
@@ -152,7 +153,6 @@ export default defineVxeComponent({
152
153
  const refFooterElem = ref();
153
154
  const refVirtualWrapper = ref();
154
155
  const refVirtualBody = ref();
155
- const refViewInnerElem = ref();
156
156
  const refTrackXElem = ref();
157
157
  const refTrackYElem = ref();
158
158
  const refThumbXElem = ref();
@@ -205,17 +205,15 @@ export default defineVxeComponent({
205
205
  });
206
206
  const computeWrapperStyles = computed(() => {
207
207
  const rowHeight = computeRowHeight.value;
208
- const scrollbarXOpts = computeScrollbarXOpts.value;
209
- const scrollbarYOpts = computeScrollbarYOpts.value;
208
+ const barWidth = computeScrollYWidth.value;
209
+ const barHeight = computeScrollXHeight.value;
210
210
  const stys = {};
211
211
  if (rowHeight) {
212
212
  stys['--vxe-ui-list-row-height'] = toCssUnit(rowHeight);
213
213
  }
214
- if (scrollbarYOpts.width) {
215
- stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(scrollbarYOpts.width);
216
- }
217
- if (scrollbarXOpts.height) {
218
- stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(scrollbarXOpts.height);
214
+ if (barWidth || barHeight) {
215
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight);
216
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth);
219
217
  }
220
218
  return stys;
221
219
  });
@@ -243,24 +241,49 @@ export default defineVxeComponent({
243
241
  const scrollbarOpts = computeScrollbarOpts.value;
244
242
  return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
245
243
  });
246
- const computeScrollbarWrapperClss = computed(() => {
244
+ const computeScrollXHeight = computed(() => {
245
+ const scrollbarOpts = computeScrollbarOpts.value;
246
+ const scrollbarXOpts = computeScrollbarXOpts.value;
247
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
248
+ });
249
+ const computeScrollYWidth = computed(() => {
250
+ const scrollbarOpts = computeScrollbarOpts.value;
251
+ const scrollbarYOpts = computeScrollbarYOpts.value;
252
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
253
+ });
254
+ const computeScrollXVisible = computed(() => {
247
255
  const scrollbarOpts = computeScrollbarOpts.value;
248
- const { padding } = scrollbarOpts;
249
- const { yThumbHeight, xThumbWidth } = reactData;
250
256
  const scrollbarXOpts = computeScrollbarXOpts.value;
257
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible);
258
+ });
259
+ const computeScrollYVisible = computed(() => {
260
+ const scrollbarOpts = computeScrollbarOpts.value;
251
261
  const scrollbarYOpts = computeScrollbarYOpts.value;
262
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible);
263
+ });
264
+ const computeScrollXAutoHide = computed(() => {
265
+ const scrollbarOpts = computeScrollbarOpts.value;
266
+ const scrollbarXOpts = computeScrollbarXOpts.value;
267
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
268
+ });
269
+ const computeScrollYAutoHide = computed(() => {
270
+ const scrollbarOpts = computeScrollbarOpts.value;
271
+ const scrollbarYOpts = computeScrollbarYOpts.value;
272
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
273
+ });
274
+ const computeScrollbarWrapperClss = computed(() => {
275
+ const { yThumbHeight, xThumbWidth } = reactData;
252
276
  const scrollbarXToTop = computeScrollbarXToTop.value;
253
277
  const scrollbarYToLeft = computeScrollbarYToLeft.value;
278
+ const scrollXVisible = computeScrollXVisible.value;
279
+ const scrollYVisible = computeScrollYVisible.value;
254
280
  return domUtils.buildClass([
255
281
  'vxe-scrollbar is--virtual',
256
- `ov-x--${scrollbarXOpts.visible || 'visible'}`,
257
- `ov-y--${scrollbarYOpts.visible || 'visible'}`,
282
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
283
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
258
284
  `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
259
285
  `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
260
286
  ], {
261
- 'is--padding': padding,
262
- 'ov-x--auto-hide': scrollbarXOpts.autoHide,
263
- 'ov-y--auto-hide': scrollbarYOpts.autoHide,
264
287
  'overflow-y': yThumbHeight,
265
288
  'overflow-x': xThumbWidth
266
289
  });
@@ -286,6 +309,10 @@ export default defineVxeComponent({
286
309
  const keyField = computeKeyField.value;
287
310
  return getRowIdByField(row, keyField);
288
311
  };
312
+ const getParentElem = () => {
313
+ const el = refElem.value;
314
+ return el ? el.parentElement : null;
315
+ };
289
316
  const calcTableHeight = (key) => {
290
317
  const { parentHeight } = reactData;
291
318
  const val = props[key];
@@ -2139,7 +2166,7 @@ export default defineVxeComponent({
2139
2166
  };
2140
2167
  const renderVN = () => {
2141
2168
  const { showCheckbox, className, loading, useScrollbar } = props;
2142
- const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate } = reactData;
2169
+ const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate, xThumbWidth, yThumbHeight } = reactData;
2143
2170
  const defaultSlot = slots.default;
2144
2171
  const headerSlot = slots.header;
2145
2172
  const footerSlot = slots.footer;
@@ -2154,22 +2181,38 @@ export default defineVxeComponent({
2154
2181
  const rowOpts = computeRowOpts.value;
2155
2182
  const { isHover, padding } = rowOpts;
2156
2183
  const isDrag = computeIsDrag.value;
2157
- const scrollbarXOpts = computeScrollbarXOpts.value;
2158
- const scrollbarYOpts = computeScrollbarYOpts.value;
2184
+ const scrollbarOpts = computeScrollbarOpts.value;
2185
+ const scrollXVisible = computeScrollXVisible.value;
2186
+ const scrollYVisible = computeScrollYVisible.value;
2187
+ const scrollbarXToTop = computeScrollbarXToTop.value;
2188
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
2189
+ const scrollXAutoHide = computeScrollXAutoHide.value;
2190
+ const scrollYAutoHide = computeScrollYAutoHide.value;
2159
2191
  const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
2160
2192
  const showDefChekboxHead = showCheckbox && showHeader !== false;
2161
2193
  const leOns = {};
2162
2194
  if (isCrossListDrag && !rowList.length) {
2163
2195
  leOns.onDragover = $xeList.handleCrossListRowDragoverEmptyEvent;
2164
2196
  }
2165
- return h('div', Object.assign({ ref: refElem, class: ['vxe-list', className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '', {
2197
+ return h('div', Object.assign({ ref: refElem, class: [
2198
+ 'vxe-list',
2199
+ useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
2200
+ useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
2201
+ useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
2202
+ useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
2203
+ className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '',
2204
+ {
2166
2205
  [`size--${vSize}`]: vSize,
2167
2206
  'is--virtual-scrollbar': useScrollbar,
2168
- 'ov-x--auto-hide': useScrollbar && scrollbarXOpts.autoHide,
2169
- 'ov-y--auto-hide': useScrollbar && scrollbarYOpts.autoHide,
2207
+ 'ov-padding': useScrollbar && scrollbarOpts.padding,
2208
+ 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
2209
+ 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
2210
+ 'overflow-y': yThumbHeight,
2211
+ 'overflow-x': xThumbWidth,
2170
2212
  'is--drag': isDrag,
2171
2213
  'is--loading': loading
2172
- }], style: wrapperStyles }, leOns), [
2214
+ }
2215
+ ], style: wrapperStyles }, leOns), [
2173
2216
  headerSlot || showDefChekboxHead
2174
2217
  ? h('div', {
2175
2218
  ref: refHeaderElem,
@@ -2226,15 +2269,7 @@ export default defineVxeComponent({
2226
2269
  style: {
2227
2270
  marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
2228
2271
  }
2229
- }, useScrollbar
2230
- ? (defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i)))
2231
- : [
2232
- h('div', {
2233
- key: 'vi',
2234
- ref: refViewInnerElem,
2235
- class: 'vxe-scrollbar--view-inner'
2236
- }, defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i)))
2237
- ])
2272
+ }, defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i)))
2238
2273
  ]),
2239
2274
  footerSlot
2240
2275
  ? h('div', {
@@ -2249,7 +2284,7 @@ export default defineVxeComponent({
2249
2284
  ? h('div', {
2250
2285
  class: scrollbarWrapperClss
2251
2286
  }, [
2252
- scrollbarXOpts.visible === 'hidden'
2287
+ scrollXVisible === false
2253
2288
  ? renderEmptyElement($xeList)
2254
2289
  : h('div', {
2255
2290
  ref: refTrackXElem,
@@ -2266,7 +2301,7 @@ export default defineVxeComponent({
2266
2301
  onLostpointercapture: cleatPointerThumbEvent
2267
2302
  })
2268
2303
  ]),
2269
- scrollbarYOpts.visible === 'hidden'
2304
+ scrollYVisible === false
2270
2305
  ? renderEmptyElement($xeList)
2271
2306
  : h('div', {
2272
2307
  ref: refTrackYElem,
@@ -2318,11 +2353,30 @@ export default defineVxeComponent({
2318
2353
  watch(() => props.syncResize, () => {
2319
2354
  reFlag.value++;
2320
2355
  });
2356
+ watch(() => props.useScrollbar, () => {
2357
+ reFlag.value++;
2358
+ });
2321
2359
  watch(computeRowHeight, () => {
2322
2360
  reFlag.value++;
2323
2361
  });
2324
- watch(reFlag, () => {
2362
+ watch(computeScrollYWidth, () => {
2363
+ reFlag.value++;
2364
+ });
2365
+ watch(computeScrollXHeight, () => {
2366
+ reFlag.value++;
2367
+ });
2368
+ watch(computeScrollXVisible, () => {
2369
+ nextTick(() => {
2370
+ reFlag.value++;
2371
+ });
2372
+ });
2373
+ watch(computeScrollYVisible, () => {
2325
2374
  nextTick(() => {
2375
+ reFlag.value++;
2376
+ });
2377
+ });
2378
+ watch(reFlag, () => {
2379
+ recalculate().then(() => {
2326
2380
  recalculate();
2327
2381
  });
2328
2382
  });
@@ -2370,20 +2424,32 @@ export default defineVxeComponent({
2370
2424
  if (useKey && !keyField) {
2371
2425
  errLog('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField']);
2372
2426
  }
2373
- if (useScrollbar || autoResize) {
2374
- const el = refElem.value;
2375
- const viewInnerEl = refViewInnerElem.value;
2376
- const resizeObserver = globalResize.create(() => {
2427
+ const el = refElem.value;
2428
+ if (useScrollbar) {
2429
+ const viewInnerEl = refVirtualBody.value;
2430
+ const scrollObserver = globalResize.create(() => {
2377
2431
  reFlag.value++;
2378
2432
  });
2379
- resizeObserver.observe(el);
2380
- if (autoResize) {
2381
- if (el) {
2382
- resizeObserver.observe(el.parentElement);
2383
- }
2433
+ if (el) {
2434
+ scrollObserver.observe(el);
2384
2435
  }
2385
2436
  if (viewInnerEl) {
2386
- resizeObserver.observe(viewInnerEl);
2437
+ scrollObserver.observe(viewInnerEl);
2438
+ }
2439
+ internalData.scrollObserver = scrollObserver;
2440
+ }
2441
+ if (autoResize) {
2442
+ const parentEl = getParentElem();
2443
+ const resizeObserver = globalResize.create(() => {
2444
+ if (props.autoResize) {
2445
+ reFlag.value++;
2446
+ }
2447
+ });
2448
+ if (el) {
2449
+ resizeObserver.observe(el);
2450
+ }
2451
+ if (parentEl) {
2452
+ resizeObserver.observe(parentEl);
2387
2453
  }
2388
2454
  internalData.resizeObserver = resizeObserver;
2389
2455
  }
@@ -2393,10 +2459,13 @@ export default defineVxeComponent({
2393
2459
  });
2394
2460
  });
2395
2461
  onBeforeUnmount(() => {
2396
- const { resizeObserver } = internalData;
2462
+ const { scrollObserver, resizeObserver } = internalData;
2397
2463
  if (resizeObserver) {
2398
2464
  resizeObserver.disconnect();
2399
2465
  }
2466
+ if (scrollObserver) {
2467
+ scrollObserver.disconnect();
2468
+ }
2400
2469
  globalEvents.off($xeList, 'resize');
2401
2470
  XEUtils.assign(reactData, createReactData());
2402
2471
  XEUtils.assign(internalData, createInternalData());
package/es/list/style.css CHANGED
@@ -376,17 +376,24 @@
376
376
  vertical-align: middle;
377
377
  }
378
378
 
379
- .vxe-list > .vxe-scrollbar {
380
- position: unset;
379
+ .vxe-list.ov-padding.overflow-x.sx-pos--top {
380
+ padding-top: var(--vxe-ui-scrollbar-x-height);
381
381
  }
382
- .vxe-list.is--virtual-scrollbar > .vxe-list--virtual-wrapper {
383
- scrollbar-width: none;
384
- -ms-overflow-style: none;
382
+ .vxe-list.ov-padding.overflow-x.sx-pos--bottom {
383
+ padding-bottom: var(--vxe-ui-scrollbar-x-height);
385
384
  }
386
- .vxe-list.is--virtual-scrollbar > .vxe-list--virtual-wrapper::-webkit-scrollbar {
387
- display: none;
385
+ .vxe-list.ov-padding.overflow-y.sy-pos--left {
386
+ padding-left: var(--vxe-ui-scrollbar-y-width);
387
+ }
388
+ .vxe-list.ov-padding.overflow-y.sy-pos--right {
389
+ padding-right: var(--vxe-ui-scrollbar-y-width);
390
+ }
391
+ .vxe-list.ov-x--hidden > .vxe-list--virtual-wrapper {
392
+ overflow-x: hidden;
393
+ }
394
+ .vxe-list.ov-y--hidden > .vxe-list--virtual-wrapper {
395
+ overflow-y: hidden;
388
396
  }
389
-
390
397
  .vxe-list.is--virtual-scrollbar.ov-x--auto-hide:hover > .vxe-scrollbar > .vxe-scrollbar--track-x {
391
398
  opacity: 1;
392
399
  }
@@ -400,4 +407,14 @@
400
407
  .vxe-list.is--virtual-scrollbar.ov-y--auto-hide > .vxe-scrollbar > .vxe-scrollbar--track-y {
401
408
  opacity: 0;
402
409
  transition: opacity 0.8s ease-in-out;
410
+ }
411
+ .vxe-list > .vxe-scrollbar {
412
+ position: unset;
413
+ }
414
+ .vxe-list.is--virtual-scrollbar > .vxe-list--virtual-wrapper {
415
+ scrollbar-width: none;
416
+ -ms-overflow-style: none;
417
+ }
418
+ .vxe-list.is--virtual-scrollbar > .vxe-list--virtual-wrapper::-webkit-scrollbar {
419
+ display: none;
403
420
  }
@@ -1 +1 @@
1
- @charset "UTF-8";.vxe-list{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-default);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-default)}.vxe-list.size--medium{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-medium);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-medium)}.vxe-list.size--small{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-small);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-small)}.vxe-list.size--mini{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-mini);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-mini)}.vxe-list{position:relative;display:block;padding:0;font-size:var(--vxe-ui-list-current-font-size);color:var(--vxe-ui-font-color);font-family:var(--vxe-ui-font-family);direction:ltr}.vxe-list .vxe-list--virtual-wrapper{position:relative;overflow-x:auto;overflow-y:auto;outline:0}.vxe-list .vxe-list--y-space{width:0;float:left}.vxe-list .vxe-list--body,.vxe-list .vxe-list--virtual-wrapper{padding:0;margin:0;border:0;outline:0}.vxe-list--header-wrapper{display:flex;flex-direction:row;align-items:center;min-height:var(--vxe-ui-list-row-height)}.vxe-list--header-left{display:flex;flex-direction:row;align-items:center;flex-shrink:0}.vxe-list--header-content{flex-grow:1;overflow:auto}.vxe-list--body.trigger--row>.vxe-list--row:not(.is--drag-disabled):active{cursor:grabbing}.vxe-list--body.is--padding>.vxe-list--row{padding:0 var(--vxe-ui-list-current-padding)}.vxe-list--body.checkbox--highlight .vxe-list--row.is-checkbox--checked{background-color:var(--vxe-ui-list-row-checkbox-checked-background-color)}.vxe-list--body.radio--highlight .vxe-list--row.is-radio--checked{background-color:var(--vxe-ui-list-row-radio-checked-background-color)}.vxe-list--body.row--hover .vxe-list--row:hover{background-color:var(--vxe-ui-list-row-hover-background-color)}.vxe-list--body.row--hover .vxe-list--row:hover.is--current{background-color:var(--vxe-ui-list-row-hover-current-background-color)}.vxe-list--body.row--hover.radio--highlight .vxe-list--row.is-radio--checked:hover{background-color:var(--vxe-ui-list-row-hover-radio-checked-background-color)}.vxe-list--body.row--hover.checkbox--highlight .vxe-list--row.is-checkbox--checked:hover{background-color:var(--vxe-ui-list-row-hover-checkbox-checked-background-color)}.vxe-list--row.is--current{background-color:var(--vxe-ui-list-row-current-background-color)}.vxe-list--virtual-wrapper{height:100px}.vxe-list--row{display:flex;flex-direction:row;align-items:center}.vxe-list--row-content,.vxe-list--row-drag,.vxe-list--row-extra{display:flex;flex-direction:row;align-items:center}.vxe-list--row-drag{flex-shrink:0;padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--row-content{flex-grow:1;height:var(--vxe-ui-list-row-height);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-list--row-extra{flex-shrink:0}.vxe-list--drag-handle:not(.is--disabled){cursor:grab}.vxe-list--drag-handle:not(.is--disabled):active{cursor:grabbing}.vxe-list--drag-handle:not(.is--disabled):hover{color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-handle.is--disabled{color:var(--vxe-ui-input-disabled-color);cursor:not-allowed}.vxe-list--row.row--drag-move{transition:transform .5s ease}.vxe-list--row.row--drag-origin{opacity:.3}.vxe-list--drag-row-line{display:none;position:absolute;top:0;left:0;z-index:11;pointer-events:none}.vxe-list--drag-row-line{width:100%;height:1px;border:2px solid transparent}.vxe-list--drag-row-line[drag-pos=top]{border-top-color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-row-line[drag-pos=bottom]{border-bottom-color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-row-line[drag-to-child=y]{border-top-color:transparent;border-bottom-color:transparent;border-left-color:var(--vxe-ui-status-success-color)}.vxe-list--drag-row-line.is--guides{background-color:var(--vxe-ui-list-drag-over-background-color)}.vxe-body--row-list-move{transition-property:transform;transition-duration:.35s}.vxe-list--drag-sort-tip{display:none;position:absolute;top:0;left:0;padding:.6em 1.4em;max-width:50%;min-width:100px;border-radius:var(--vxe-ui-border-radius);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none;background-color:var(--vxe-ui-layout-background-color);box-shadow:0 0 10px 0 rgba(0,0,0,.2);z-index:33}.vxe-list--drag-sort-tip[drag-status=normal] .vxe-list--drag-sort-tip-normal-status{display:block}.vxe-list--drag-sort-tip[drag-status=sub] .vxe-list--drag-sort-tip-sub-status{display:block}.vxe-list--drag-sort-tip[drag-status=disabled] .vxe-list--drag-sort-tip-disabled-status{display:block}.vxe-list--drag-sort-tip-wrapper{display:flex;flex-direction:row;align-items:center}.vxe-list--drag-sort-tip-status{padding-right:.4em}.vxe-list--drag-sort-tip-disabled-status{display:none;flex-shrink:0;color:var(--vxe-ui-status-error-color)}.vxe-list--drag-sort-tip-normal-status,.vxe-list--drag-sort-tip-sub-status{display:none}.vxe-list--drag-sort-tip-content{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-list--checkbox-header{padding-right:var(--vxe-ui-list-current-padding);-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-list--checkbox-header{cursor:pointer}.vxe-list--checkbox-header .vxe-checkbox--icon{font-size:1.22em;transition:all .2s ease-in-out}.vxe-list--checkbox-header .vxe-checkbox--icon{color:var(--vxe-ui-input-border-color);vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-list--checkbox-header.is--checked,.vxe-list--checkbox-header.is--indeterminate{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header.is--checked .vxe-checkbox--icon,.vxe-list--checkbox-header.is--indeterminate .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header:not(.is--disabled):hover .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header.is--hidden{cursor:default}.vxe-list--checkbox-header.is--readonly{cursor:auto}.vxe-list--checkbox-header.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--checkbox-header.is--disabled .vxe-checkbox--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--checkbox-header .vxe-checkbox--label{padding-left:.4em;vertical-align:middle}.vxe-list--checkbox-option{padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--checkbox-option{cursor:pointer}.vxe-list--checkbox-option .vxe-checkbox--icon{font-size:1.22em;transition:all .2s ease-in-out}.vxe-list--checkbox-option .vxe-checkbox--icon{color:var(--vxe-ui-input-border-color);vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-list--checkbox-option.is--checked,.vxe-list--checkbox-option.is--indeterminate{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option.is--checked .vxe-checkbox--icon,.vxe-list--checkbox-option.is--indeterminate .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option:not(.is--disabled):hover .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option.is--hidden{cursor:default}.vxe-list--checkbox-option.is--readonly{cursor:auto}.vxe-list--checkbox-option.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--checkbox-option.is--disabled .vxe-checkbox--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--checkbox-option .vxe-checkbox--label{padding-left:.4em;vertical-align:middle}.vxe-list--radio-option{padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--radio-option{cursor:pointer}.vxe-list--radio-option .vxe-radio--icon{font-size:1.26em;transition:all .2s ease-in-out}.vxe-list--radio-option .vxe-radio--icon{color:var(--vxe-ui-input-border-color);border-radius:50%;vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-list--radio-option.is--checked{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option.is--checked .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option:not(.is--disabled):hover .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option.is--readonly{cursor:auto}.vxe-list--radio-option.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--radio-option.is--disabled .vxe-radio--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--radio-option .vxe-radio--label{padding-left:.4em;vertical-align:middle}.vxe-list>.vxe-scrollbar{position:unset}.vxe-list.is--virtual-scrollbar>.vxe-list--virtual-wrapper{scrollbar-width:none;-ms-overflow-style:none}.vxe-list.is--virtual-scrollbar>.vxe-list--virtual-wrapper::-webkit-scrollbar{display:none}.vxe-list.is--virtual-scrollbar.ov-x--auto-hide:hover>.vxe-scrollbar>.vxe-scrollbar--track-x{opacity:1}.vxe-list.is--virtual-scrollbar.ov-x--auto-hide>.vxe-scrollbar>.vxe-scrollbar--track-x{opacity:0;transition:opacity .8s ease-in-out}.vxe-list.is--virtual-scrollbar.ov-y--auto-hide:hover>.vxe-scrollbar>.vxe-scrollbar--track-y{opacity:1}.vxe-list.is--virtual-scrollbar.ov-y--auto-hide>.vxe-scrollbar>.vxe-scrollbar--track-y{opacity:0;transition:opacity .8s ease-in-out}
1
+ @charset "UTF-8";.vxe-list{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-default);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-default)}.vxe-list.size--medium{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-medium);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-medium)}.vxe-list.size--small{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-small);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-small)}.vxe-list.size--mini{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-mini);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-mini)}.vxe-list{position:relative;display:block;padding:0;font-size:var(--vxe-ui-list-current-font-size);color:var(--vxe-ui-font-color);font-family:var(--vxe-ui-font-family);direction:ltr}.vxe-list .vxe-list--virtual-wrapper{position:relative;overflow-x:auto;overflow-y:auto;outline:0}.vxe-list .vxe-list--y-space{width:0;float:left}.vxe-list .vxe-list--body,.vxe-list .vxe-list--virtual-wrapper{padding:0;margin:0;border:0;outline:0}.vxe-list--header-wrapper{display:flex;flex-direction:row;align-items:center;min-height:var(--vxe-ui-list-row-height)}.vxe-list--header-left{display:flex;flex-direction:row;align-items:center;flex-shrink:0}.vxe-list--header-content{flex-grow:1;overflow:auto}.vxe-list--body.trigger--row>.vxe-list--row:not(.is--drag-disabled):active{cursor:grabbing}.vxe-list--body.is--padding>.vxe-list--row{padding:0 var(--vxe-ui-list-current-padding)}.vxe-list--body.checkbox--highlight .vxe-list--row.is-checkbox--checked{background-color:var(--vxe-ui-list-row-checkbox-checked-background-color)}.vxe-list--body.radio--highlight .vxe-list--row.is-radio--checked{background-color:var(--vxe-ui-list-row-radio-checked-background-color)}.vxe-list--body.row--hover .vxe-list--row:hover{background-color:var(--vxe-ui-list-row-hover-background-color)}.vxe-list--body.row--hover .vxe-list--row:hover.is--current{background-color:var(--vxe-ui-list-row-hover-current-background-color)}.vxe-list--body.row--hover.radio--highlight .vxe-list--row.is-radio--checked:hover{background-color:var(--vxe-ui-list-row-hover-radio-checked-background-color)}.vxe-list--body.row--hover.checkbox--highlight .vxe-list--row.is-checkbox--checked:hover{background-color:var(--vxe-ui-list-row-hover-checkbox-checked-background-color)}.vxe-list--row.is--current{background-color:var(--vxe-ui-list-row-current-background-color)}.vxe-list--virtual-wrapper{height:100px}.vxe-list--row{display:flex;flex-direction:row;align-items:center}.vxe-list--row-content,.vxe-list--row-drag,.vxe-list--row-extra{display:flex;flex-direction:row;align-items:center}.vxe-list--row-drag{flex-shrink:0;padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--row-content{flex-grow:1;height:var(--vxe-ui-list-row-height);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-list--row-extra{flex-shrink:0}.vxe-list--drag-handle:not(.is--disabled){cursor:grab}.vxe-list--drag-handle:not(.is--disabled):active{cursor:grabbing}.vxe-list--drag-handle:not(.is--disabled):hover{color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-handle.is--disabled{color:var(--vxe-ui-input-disabled-color);cursor:not-allowed}.vxe-list--row.row--drag-move{transition:transform .5s ease}.vxe-list--row.row--drag-origin{opacity:.3}.vxe-list--drag-row-line{display:none;position:absolute;top:0;left:0;z-index:11;pointer-events:none}.vxe-list--drag-row-line{width:100%;height:1px;border:2px solid transparent}.vxe-list--drag-row-line[drag-pos=top]{border-top-color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-row-line[drag-pos=bottom]{border-bottom-color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-row-line[drag-to-child=y]{border-top-color:transparent;border-bottom-color:transparent;border-left-color:var(--vxe-ui-status-success-color)}.vxe-list--drag-row-line.is--guides{background-color:var(--vxe-ui-list-drag-over-background-color)}.vxe-body--row-list-move{transition-property:transform;transition-duration:.35s}.vxe-list--drag-sort-tip{display:none;position:absolute;top:0;left:0;padding:.6em 1.4em;max-width:50%;min-width:100px;border-radius:var(--vxe-ui-border-radius);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none;background-color:var(--vxe-ui-layout-background-color);box-shadow:0 0 10px 0 rgba(0,0,0,.2);z-index:33}.vxe-list--drag-sort-tip[drag-status=normal] .vxe-list--drag-sort-tip-normal-status{display:block}.vxe-list--drag-sort-tip[drag-status=sub] .vxe-list--drag-sort-tip-sub-status{display:block}.vxe-list--drag-sort-tip[drag-status=disabled] .vxe-list--drag-sort-tip-disabled-status{display:block}.vxe-list--drag-sort-tip-wrapper{display:flex;flex-direction:row;align-items:center}.vxe-list--drag-sort-tip-status{padding-right:.4em}.vxe-list--drag-sort-tip-disabled-status{display:none;flex-shrink:0;color:var(--vxe-ui-status-error-color)}.vxe-list--drag-sort-tip-normal-status,.vxe-list--drag-sort-tip-sub-status{display:none}.vxe-list--drag-sort-tip-content{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-list--checkbox-header{padding-right:var(--vxe-ui-list-current-padding);-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-list--checkbox-header{cursor:pointer}.vxe-list--checkbox-header .vxe-checkbox--icon{font-size:1.22em;transition:all .2s ease-in-out}.vxe-list--checkbox-header .vxe-checkbox--icon{color:var(--vxe-ui-input-border-color);vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-list--checkbox-header.is--checked,.vxe-list--checkbox-header.is--indeterminate{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header.is--checked .vxe-checkbox--icon,.vxe-list--checkbox-header.is--indeterminate .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header:not(.is--disabled):hover .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header.is--hidden{cursor:default}.vxe-list--checkbox-header.is--readonly{cursor:auto}.vxe-list--checkbox-header.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--checkbox-header.is--disabled .vxe-checkbox--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--checkbox-header .vxe-checkbox--label{padding-left:.4em;vertical-align:middle}.vxe-list--checkbox-option{padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--checkbox-option{cursor:pointer}.vxe-list--checkbox-option .vxe-checkbox--icon{font-size:1.22em;transition:all .2s ease-in-out}.vxe-list--checkbox-option .vxe-checkbox--icon{color:var(--vxe-ui-input-border-color);vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-list--checkbox-option.is--checked,.vxe-list--checkbox-option.is--indeterminate{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option.is--checked .vxe-checkbox--icon,.vxe-list--checkbox-option.is--indeterminate .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option:not(.is--disabled):hover .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option.is--hidden{cursor:default}.vxe-list--checkbox-option.is--readonly{cursor:auto}.vxe-list--checkbox-option.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--checkbox-option.is--disabled .vxe-checkbox--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--checkbox-option .vxe-checkbox--label{padding-left:.4em;vertical-align:middle}.vxe-list--radio-option{padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--radio-option{cursor:pointer}.vxe-list--radio-option .vxe-radio--icon{font-size:1.26em;transition:all .2s ease-in-out}.vxe-list--radio-option .vxe-radio--icon{color:var(--vxe-ui-input-border-color);border-radius:50%;vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-list--radio-option.is--checked{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option.is--checked .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option:not(.is--disabled):hover .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option.is--readonly{cursor:auto}.vxe-list--radio-option.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--radio-option.is--disabled .vxe-radio--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--radio-option .vxe-radio--label{padding-left:.4em;vertical-align:middle}.vxe-list.ov-padding.overflow-x.sx-pos--top{padding-top:var(--vxe-ui-scrollbar-x-height)}.vxe-list.ov-padding.overflow-x.sx-pos--bottom{padding-bottom:var(--vxe-ui-scrollbar-x-height)}.vxe-list.ov-padding.overflow-y.sy-pos--left{padding-left:var(--vxe-ui-scrollbar-y-width)}.vxe-list.ov-padding.overflow-y.sy-pos--right{padding-right:var(--vxe-ui-scrollbar-y-width)}.vxe-list.ov-x--hidden>.vxe-list--virtual-wrapper{overflow-x:hidden}.vxe-list.ov-y--hidden>.vxe-list--virtual-wrapper{overflow-y:hidden}.vxe-list.is--virtual-scrollbar.ov-x--auto-hide:hover>.vxe-scrollbar>.vxe-scrollbar--track-x{opacity:1}.vxe-list.is--virtual-scrollbar.ov-x--auto-hide>.vxe-scrollbar>.vxe-scrollbar--track-x{opacity:0;transition:opacity .8s ease-in-out}.vxe-list.is--virtual-scrollbar.ov-y--auto-hide:hover>.vxe-scrollbar>.vxe-scrollbar--track-y{opacity:1}.vxe-list.is--virtual-scrollbar.ov-y--auto-hide>.vxe-scrollbar>.vxe-scrollbar--track-y{opacity:0;transition:opacity .8s ease-in-out}.vxe-list>.vxe-scrollbar{position:unset}.vxe-list.is--virtual-scrollbar>.vxe-list--virtual-wrapper{scrollbar-width:none;-ms-overflow-style:none}.vxe-list.is--virtual-scrollbar>.vxe-list--virtual-wrapper::-webkit-scrollbar{display:none}
@@ -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';
@@ -66,7 +66,7 @@ export default defineVxeComponent({
66
66
  menuConfig: Object,
67
67
  useScrollbar: {
68
68
  type: Boolean,
69
- default: () => getConfig().menu.useScrollbar
69
+ default: () => getDefaultConfig(getConfig().menu.useScrollbar, getConfig().useScrollbar)
70
70
  },
71
71
  scrollbarConfig: Object,
72
72
  appendTo: {
@@ -2,13 +2,14 @@ import { h, Teleport, ref, inject, computed, reactive, provide, nextTick, watch,
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
  const { warnLog, errLog } = createComponentLog('modal');
13
14
  function createInternalData() {
14
15
  return {
@@ -214,6 +215,11 @@ export default defineVxeComponent({
214
215
  },
215
216
  beforeHideMethod: Function,
216
217
  slots: Object,
218
+ useScrollbar: {
219
+ type: Boolean,
220
+ default: () => getDefaultConfig(getConfig().modal.useScrollbar, getConfig().useScrollbar)
221
+ },
222
+ scrollbarConfig: Object,
217
223
  /**
218
224
  * 已废弃
219
225
  * @deprecated
@@ -287,6 +293,25 @@ export default defineVxeComponent({
287
293
  const computeZoomOpts = computed(() => {
288
294
  return Object.assign({}, getConfig().modal.zoomConfig, props.zoomConfig);
289
295
  });
296
+ const computeScrollbarOpts = computed(() => {
297
+ return Object.assign({}, getConfig().modal.scrollbarConfig, props.scrollbarConfig);
298
+ });
299
+ const computeScrollbarProps = computed(() => {
300
+ const scrollbarOpts = computeScrollbarOpts.value;
301
+ const { viewClassName, viewInnerClassName } = scrollbarOpts;
302
+ return {
303
+ width: scrollbarOpts.width,
304
+ height: scrollbarOpts.height,
305
+ autoHide: scrollbarOpts.autoHide,
306
+ visible: scrollbarOpts.visible,
307
+ xConfig: scrollbarOpts.xConfig,
308
+ yConfig: scrollbarOpts.yConfig,
309
+ className: scrollbarOpts.className,
310
+ viewAttrs: scrollbarOpts.viewAttrs,
311
+ viewClassName: 'vxe-modal--scrollbar-content-view' + (viewClassName ? (' ' + viewClassName) : ''),
312
+ viewInnerClassName: 'vxe-modal--scrollbar-content-inner' + (viewClassName ? (' ' + viewInnerClassName) : '')
313
+ };
314
+ });
290
315
  const computeMaps = {
291
316
  computeSize,
292
317
  computeZoomOpts
@@ -1305,9 +1330,10 @@ export default defineVxeComponent({
1305
1330
  return renderEmptyElement($xeModal);
1306
1331
  };
1307
1332
  const renderBody = () => {
1308
- const { slots: propSlots = {}, status, message, iconStatus, useHtml } = props;
1333
+ const { slots: propSlots = {}, status, message, iconStatus, useScrollbar, useHtml } = props;
1309
1334
  const content = props.content || message;
1310
1335
  const isMsg = computeIsMsg.value;
1336
+ const scrollbarProps = computeScrollbarProps.value;
1311
1337
  const defaultSlot = slots.default || propSlots.default;
1312
1338
  const leftSlot = slots.left || propSlots.left;
1313
1339
  const rightSlot = slots.right || propSlots.right;
@@ -1321,16 +1347,34 @@ export default defineVxeComponent({
1321
1347
  })
1322
1348
  ]));
1323
1349
  }
1324
- contVNs.push(useHtml && !defaultSlot
1325
- ? h('div', {
1326
- key: 'hc',
1327
- class: 'vxe-modal--content',
1328
- innerHTML: getFuncText(content)
1329
- })
1330
- : h('div', {
1331
- key: 'dc',
1332
- class: 'vxe-modal--content'
1333
- }, defaultSlot ? getSlotVNs(defaultSlot({ $modal: $xeModal })) : getFuncText(content)));
1350
+ if (useHtml && !defaultSlot) {
1351
+ contVNs.push(useScrollbar
1352
+ ? h(VxeScrollbarComponent, Object.assign({ key: 'shc', class: 'vxe-modal--scrollbar-content' }, scrollbarProps), {
1353
+ default() {
1354
+ return [
1355
+ h('div', {
1356
+ class: 'vxe-modal--scrollbar-content-html',
1357
+ innerHTML: getFuncText(content)
1358
+ })
1359
+ ];
1360
+ }
1361
+ })
1362
+ : h('div', {
1363
+ key: 'hc',
1364
+ class: 'vxe-modal--content',
1365
+ innerHTML: getFuncText(content)
1366
+ }));
1367
+ }
1368
+ else {
1369
+ contVNs.push(useScrollbar
1370
+ ? h(VxeScrollbarComponent, Object.assign({ key: 'sdc', class: 'vxe-modal--scrollbar-content' }, scrollbarProps), {
1371
+ default: () => defaultSlot ? getSlotVNs(defaultSlot({ $modal: $xeModal })) : getFuncText(content)
1372
+ })
1373
+ : h('div', {
1374
+ key: 'dc',
1375
+ class: 'vxe-modal--content'
1376
+ }, defaultSlot ? getSlotVNs(defaultSlot({ $modal: $xeModal })) : getFuncText(content)));
1377
+ }
1334
1378
  return h('div', {
1335
1379
  class: 'vxe-modal--body'
1336
1380
  }, [
@@ -50,7 +50,8 @@ html[data-vxe-lock-scroll] body {
50
50
  .vxe-modal--box.is--drag .vxe-modal--body {
51
51
  overflow: hidden;
52
52
  }
53
- .vxe-modal--box.is--drag .vxe-modal--body .vxe-modal--content {
53
+ .vxe-modal--box.is--drag .vxe-modal--body .vxe-modal--content,
54
+ .vxe-modal--box.is--drag .vxe-modal--body .vxe-modal--scrollbar-content {
54
55
  overflow: hidden;
55
56
  }
56
57
 
@@ -73,7 +74,8 @@ html[data-vxe-lock-scroll] body {
73
74
  font-size: 1.6em;
74
75
  }
75
76
 
76
- .vxe-modal--content {
77
+ .vxe-modal--content,
78
+ .vxe-modal--scrollbar-content {
77
79
  flex-grow: 1;
78
80
  white-space: pre-line;
79
81
  }
@@ -390,7 +392,9 @@ html[data-vxe-lock-scroll] body {
390
392
  overflow: hidden;
391
393
  visibility: hidden;
392
394
  }
393
- .vxe-modal--wrapper.type--message .vxe-modal--box .vxe-modal--content, .vxe-modal--wrapper.type--notification .vxe-modal--box .vxe-modal--content {
395
+ .vxe-modal--wrapper.type--message .vxe-modal--box .vxe-modal--content,
396
+ .vxe-modal--wrapper.type--message .vxe-modal--box .vxe-modal--scrollbar-content, .vxe-modal--wrapper.type--notification .vxe-modal--box .vxe-modal--content,
397
+ .vxe-modal--wrapper.type--notification .vxe-modal--box .vxe-modal--scrollbar-content {
394
398
  max-width: 800px;
395
399
  float: left;
396
400
  }
@@ -413,7 +417,10 @@ html[data-vxe-lock-scroll] body {
413
417
  .vxe-modal--wrapper.type--modal .vxe-modal--body, .vxe-modal--wrapper.type--alert .vxe-modal--body, .vxe-modal--wrapper.type--confirm .vxe-modal--body {
414
418
  overflow: auto;
415
419
  }
416
- .vxe-modal--wrapper.type--modal .vxe-modal--body .vxe-modal--content, .vxe-modal--wrapper.type--alert .vxe-modal--body .vxe-modal--content, .vxe-modal--wrapper.type--confirm .vxe-modal--body .vxe-modal--content {
420
+ .vxe-modal--wrapper.type--modal .vxe-modal--body .vxe-modal--content,
421
+ .vxe-modal--wrapper.type--modal .vxe-modal--body .vxe-modal--scrollbar-content, .vxe-modal--wrapper.type--alert .vxe-modal--body .vxe-modal--content,
422
+ .vxe-modal--wrapper.type--alert .vxe-modal--body .vxe-modal--scrollbar-content, .vxe-modal--wrapper.type--confirm .vxe-modal--body .vxe-modal--content,
423
+ .vxe-modal--wrapper.type--confirm .vxe-modal--body .vxe-modal--scrollbar-content {
417
424
  overflow: auto;
418
425
  }
419
426
  .vxe-modal--wrapper.status--info .vxe-modal--status-wrapper {
@@ -449,4 +456,8 @@ html[data-vxe-lock-scroll] body {
449
456
 
450
457
  .vxe-modal--wrapper[data-effect] {
451
458
  overflow: hidden;
459
+ }
460
+
461
+ .vxe-modal--scrollbar-content {
462
+ width: 100%;
452
463
  }