vxe-pc-ui 3.20.0 → 3.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 (125) hide show
  1. package/es/card/src/card.js +20 -4
  2. package/es/drawer/src/drawer.js +75 -16
  3. package/es/drawer/style.css +13 -6
  4. package/es/drawer/style.min.css +1 -1
  5. package/es/icon/style.css +1 -1
  6. package/es/language/fr-FR.js +29 -29
  7. package/es/layout-aside/src/layout-aside.js +10 -6
  8. package/es/layout-body/src/layout-body.js +24 -12
  9. package/es/list/src/list.js +131 -49
  10. package/es/list/style.css +25 -8
  11. package/es/list/style.min.css +1 -1
  12. package/es/menu/src/menu.js +2 -2
  13. package/es/modal/src/modal.js +73 -14
  14. package/es/modal/style.css +4 -0
  15. package/es/modal/style.min.css +1 -1
  16. package/es/scrollbar/src/scrollbar.js +87 -19
  17. package/es/style.css +1 -1
  18. package/es/style.min.css +1 -1
  19. package/es/tabs/src/tabs.js +21 -5
  20. package/es/tree/src/tree.js +460 -54
  21. package/es/tree/style.css +43 -0
  22. package/es/tree/style.min.css +1 -1
  23. package/es/ui/index.js +1 -1
  24. package/es/ui/src/log.js +1 -1
  25. package/es/ui/src/utils.js +3 -0
  26. package/es/vxe-drawer/style.css +13 -6
  27. package/es/vxe-drawer/style.min.css +1 -1
  28. package/es/vxe-list/style.css +25 -8
  29. package/es/vxe-list/style.min.css +1 -1
  30. package/es/vxe-modal/style.css +4 -0
  31. package/es/vxe-modal/style.min.css +1 -1
  32. package/es/vxe-tree/style.css +43 -0
  33. package/es/vxe-tree/style.min.css +1 -1
  34. package/lib/card/src/card.js +20 -4
  35. package/lib/card/src/card.min.js +1 -1
  36. package/lib/drawer/src/drawer.js +76 -12
  37. package/lib/drawer/src/drawer.min.js +1 -1
  38. package/lib/drawer/style/style.css +13 -6
  39. package/lib/drawer/style/style.min.css +1 -1
  40. package/lib/icon/style/style.css +1 -1
  41. package/lib/icon/style/style.min.css +1 -1
  42. package/lib/index.umd.js +956 -185
  43. package/lib/index.umd.min.js +1 -1
  44. package/lib/language/fr-FR.js +29 -29
  45. package/lib/language/fr-FR.min.js +1 -1
  46. package/lib/language/fr-FR.umd.js +29 -29
  47. package/lib/layout-aside/src/layout-aside.js +10 -9
  48. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  49. package/lib/layout-body/src/layout-body.js +28 -20
  50. package/lib/layout-body/src/layout-body.min.js +1 -1
  51. package/lib/list/src/list.js +119 -46
  52. package/lib/list/src/list.min.js +1 -1
  53. package/lib/list/style/style.css +25 -8
  54. package/lib/list/style/style.min.css +1 -1
  55. package/lib/menu/src/menu.js +1 -1
  56. package/lib/menu/src/menu.min.js +1 -1
  57. package/lib/modal/src/modal.js +74 -12
  58. package/lib/modal/src/modal.min.js +1 -1
  59. package/lib/modal/style/style.css +4 -0
  60. package/lib/modal/style/style.min.css +1 -1
  61. package/lib/scrollbar/src/scrollbar.js +92 -17
  62. package/lib/scrollbar/src/scrollbar.min.js +1 -1
  63. package/lib/style.css +1 -1
  64. package/lib/style.min.css +1 -1
  65. package/lib/tabs/src/tabs.js +21 -8
  66. package/lib/tabs/src/tabs.min.js +1 -1
  67. package/lib/tree/src/tree.js +438 -51
  68. package/lib/tree/src/tree.min.js +1 -1
  69. package/lib/tree/style/style.css +43 -0
  70. package/lib/tree/style/style.min.css +1 -1
  71. package/lib/ui/index.js +1 -1
  72. package/lib/ui/index.min.js +1 -1
  73. package/lib/ui/src/log.js +1 -1
  74. package/lib/ui/src/log.min.js +1 -1
  75. package/lib/ui/src/utils.js +4 -0
  76. package/lib/ui/src/utils.min.js +1 -1
  77. package/lib/vxe-drawer/style/style.css +13 -6
  78. package/lib/vxe-drawer/style/style.min.css +1 -1
  79. package/lib/vxe-list/style/style.css +25 -8
  80. package/lib/vxe-list/style/style.min.css +1 -1
  81. package/lib/vxe-modal/style/style.css +4 -0
  82. package/lib/vxe-modal/style/style.min.css +1 -1
  83. package/lib/vxe-tree/style/style.css +43 -0
  84. package/lib/vxe-tree/style/style.min.css +1 -1
  85. package/package.json +2 -2
  86. package/packages/card/src/card.ts +21 -4
  87. package/packages/drawer/src/drawer.ts +80 -16
  88. package/packages/language/fr-FR.ts +903 -903
  89. package/packages/layout-aside/src/layout-aside.ts +10 -6
  90. package/packages/layout-body/src/layout-body.ts +28 -15
  91. package/packages/list/src/list.ts +149 -55
  92. package/packages/menu/src/menu.ts +2 -2
  93. package/packages/modal/src/modal.ts +83 -19
  94. package/packages/scrollbar/src/scrollbar.ts +101 -19
  95. package/packages/tabs/src/tabs.ts +22 -9
  96. package/packages/tree/src/tree.ts +508 -65
  97. package/packages/ui/src/utils.ts +4 -0
  98. package/styles/components/drawer.scss +13 -6
  99. package/styles/components/list.scss +35 -10
  100. package/styles/components/modal.scss +4 -0
  101. package/styles/components/tree.scss +76 -0
  102. package/types/components/card.d.ts +10 -1
  103. package/types/components/drawer.d.ts +20 -0
  104. package/types/components/gantt-module/gantt-view.d.ts +24 -1
  105. package/types/components/gantt.d.ts +2 -0
  106. package/types/components/layout-aside.d.ts +10 -1
  107. package/types/components/layout-body.d.ts +10 -1
  108. package/types/components/list.d.ts +13 -2
  109. package/types/components/modal.d.ts +20 -0
  110. package/types/components/scrollbar.d.ts +16 -2
  111. package/types/components/table.d.ts +80 -6
  112. package/types/components/tabs.d.ts +10 -1
  113. package/types/components/tree.d.ts +35 -2
  114. /package/es/icon/{iconfont.1791880407207.ttf → iconfont.1792034961185.ttf} +0 -0
  115. /package/es/icon/{iconfont.1791880407207.woff → iconfont.1792034961185.woff} +0 -0
  116. /package/es/icon/{iconfont.1791880407207.woff2 → iconfont.1792034961185.woff2} +0 -0
  117. /package/es/{iconfont.1791880407207.ttf → iconfont.1792034961185.ttf} +0 -0
  118. /package/es/{iconfont.1791880407207.woff → iconfont.1792034961185.woff} +0 -0
  119. /package/es/{iconfont.1791880407207.woff2 → iconfont.1792034961185.woff2} +0 -0
  120. /package/lib/icon/style/{iconfont.1791880407207.ttf → iconfont.1792034961185.ttf} +0 -0
  121. /package/lib/icon/style/{iconfont.1791880407207.woff → iconfont.1792034961185.woff} +0 -0
  122. /package/lib/icon/style/{iconfont.1791880407207.woff2 → iconfont.1792034961185.woff2} +0 -0
  123. /package/lib/{iconfont.1791880407207.ttf → iconfont.1792034961185.ttf} +0 -0
  124. /package/lib/{iconfont.1791880407207.woff → iconfont.1792034961185.woff} +0 -0
  125. /package/lib/{iconfont.1791880407207.woff2 → iconfont.1792034961185.woff2} +0 -0
@@ -1,6 +1,7 @@
1
1
  import { defineVxeComponent } from '../../ui/src/comp';
2
2
  import { getConfig, createEvent, globalMixins, renderEmptyElement } from '../../ui';
3
3
  import XEUtils from 'xe-utils';
4
+ import { getDefaultConfig } from '../../ui/src/utils';
4
5
  import VxeLoadingComponent from '../../loading';
5
6
  import VxeScrollbarComponent from '../../scrollbar';
6
7
  import VxeUIBacktopComponent from '../../backtop';
@@ -25,7 +26,7 @@ export default {
25
26
  backtopConfig: Object,
26
27
  useScrollbar: {
27
28
  type: Boolean,
28
- default: () => getConfig().layoutBody.useScrollbar
29
+ default: () => getDefaultConfig(getConfig().layoutBody.useScrollbar, getConfig().useScrollbar)
29
30
  },
30
31
  scrollbarConfig: Object,
31
32
  size: {
@@ -53,6 +54,26 @@ export default {
53
54
  const $xeLayoutBody = this;
54
55
  const props = $xeLayoutBody;
55
56
  return Object.assign({}, getConfig().layoutBody.scrollbarConfig, props.scrollbarConfig);
57
+ },
58
+ computeScrollbarProps() {
59
+ const $xeLayoutBody = this;
60
+ const props = $xeLayoutBody;
61
+ const backtopId = $xeLayoutBody.backtopId;
62
+ const { showBacktop } = props;
63
+ const scrollbarOpts = $xeLayoutBody.computeScrollbarOpts;
64
+ const { className, viewClassName, viewInnerClassName } = scrollbarOpts;
65
+ return {
66
+ width: scrollbarOpts.width,
67
+ height: scrollbarOpts.height,
68
+ autoHide: scrollbarOpts.autoHide,
69
+ visible: scrollbarOpts.visible,
70
+ xConfig: scrollbarOpts.xConfig,
71
+ yConfig: scrollbarOpts.yConfig,
72
+ className: 'vxe-layout-body--scrollbar' + (className ? (' ' + className) : ''),
73
+ viewAttrs: Object.assign(Object.assign({}, scrollbarOpts.viewAttrs), { id: showBacktop ? (backtopId || null) : null }),
74
+ viewClassName: 'vxe-layout-body--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
75
+ viewInnerClassName: 'vxe-layout-body--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
76
+ };
56
77
  } }),
57
78
  methods: {
58
79
  //
@@ -72,8 +93,7 @@ export default {
72
93
  const backtopId = $xeLayoutBody.backtopId;
73
94
  const { loading, padding, showBacktop, useScrollbar } = props;
74
95
  const backtopOpts = $xeLayoutBody.computeBacktopOpts;
75
- const scrollbarOpts = $xeLayoutBody.computeScrollbarOpts;
76
- const { native, xConfig, yConfig, className, viewAttrs, viewClassName, viewInnerClassName } = scrollbarOpts;
96
+ const scrollbarProps = $xeLayoutBody.computeScrollbarProps;
77
97
  const vSize = $xeLayoutBody.computeSize;
78
98
  const defaultSlot = slots.default;
79
99
  const backtopSlot = slots.backtop;
@@ -98,15 +118,7 @@ export default {
98
118
  }, [
99
119
  useScrollbar
100
120
  ? h(VxeScrollbarComponent, {
101
- props: {
102
- native,
103
- xConfig,
104
- yConfig,
105
- className: 'vxe-layout-body--scrollbar' + (className ? (' ' + className) : ''),
106
- viewAttrs: Object.assign(Object.assign({}, viewAttrs), { id: showBacktop ? (backtopId || null) : null }),
107
- viewClassName: 'vxe-layout-body--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
108
- viewInnerClassName: 'vxe-layout-body--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
109
- },
121
+ props: scrollbarProps,
110
122
  scopedSlots: {
111
123
  default: () => defaultSlot ? defaultSlot({}) : []
112
124
  }
@@ -3,7 +3,7 @@ import XEUtils from 'xe-utils';
3
3
  import { VxeUI, getConfig, getIcon, getI18n, domUtils, menus, globalEvents, globalResize, createEvent, globalMixins, renderEmptyElement } from '../../ui';
4
4
  import { crossListDragRowGlobal, getCrossListDragRowInfo } from './store';
5
5
  import { addClass, getTpImg, hasClass, isScale, removeClass, toCssUnit } from '../../ui/src/dom';
6
- import { isEnableConf, getText, enModelValue, deModelValue } from '../../ui/src/utils';
6
+ import { isEnableConf, getText, enModelValue, deModelValue, getDefaultConfig } from '../../ui/src/utils';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  import { createComponentLog } from '../../ui/src/log';
9
9
  import { moveRowAnimateToTb, clearRowAnimate } from '../../ui/src/anime';
@@ -57,8 +57,9 @@ function createInternalData() {
57
57
  afterList: [],
58
58
  fullKeyMaps: {},
59
59
  rowMaps: {},
60
- // 滚动条
61
60
  // resizeObserver: undefined,
61
+ // 滚动条
62
+ // scrollObserver: undefined,
62
63
  // isThumbDrag: false,
63
64
  thumbDragOffset: 0,
64
65
  yThumbTop: 0,
@@ -123,7 +124,7 @@ export default {
123
124
  scrollY: Object,
124
125
  useScrollbar: {
125
126
  type: Boolean,
126
- default: () => getConfig().list.useScrollbar
127
+ default: () => getDefaultConfig(getConfig().list.useScrollbar, getConfig().useScrollbar)
127
128
  },
128
129
  scrollbarConfig: Object
129
130
  },
@@ -185,17 +186,15 @@ export default {
185
186
  computeWrapperStyles() {
186
187
  const $xeList = this;
187
188
  const rowHeight = $xeList.computeRowHeight;
188
- const scrollbarXOpts = $xeList.computeScrollbarXOpts;
189
- const scrollbarYOpts = $xeList.computeScrollbarYOpts;
189
+ const barWidth = $xeList.computeScrollYWidth;
190
+ const barHeight = $xeList.computeScrollXHeight;
190
191
  const stys = {};
191
192
  if (rowHeight) {
192
193
  stys['--vxe-ui-list-row-height'] = toCssUnit(rowHeight);
193
194
  }
194
- if (scrollbarYOpts.width) {
195
- stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(scrollbarYOpts.width);
196
- }
197
- if (scrollbarXOpts.height) {
198
- stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(scrollbarXOpts.height);
195
+ if (barWidth || barHeight) {
196
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight);
197
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth);
199
198
  }
200
199
  return stys;
201
200
  },
@@ -230,26 +229,57 @@ export default {
230
229
  const scrollbarOpts = $xeList.computeScrollbarOpts;
231
230
  return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
232
231
  },
233
- computeScrollbarWrapperClss() {
232
+ computeScrollXHeight() {
233
+ const $xeList = this;
234
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
235
+ const scrollbarXOpts = $xeList.computeScrollbarXOpts;
236
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
237
+ },
238
+ computeScrollYWidth() {
239
+ const $xeList = this;
240
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
241
+ const scrollbarYOpts = $xeList.computeScrollbarYOpts;
242
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
243
+ },
244
+ computeScrollXVisible() {
245
+ const $xeList = this;
246
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
247
+ const scrollbarXOpts = $xeList.computeScrollbarXOpts;
248
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible);
249
+ },
250
+ computeScrollYVisible() {
251
+ const $xeList = this;
252
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
253
+ const scrollbarYOpts = $xeList.computeScrollbarYOpts;
254
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible);
255
+ },
256
+ computeScrollXAutoHide() {
234
257
  const $xeList = this;
235
- const reactData = $xeList.reactData;
236
258
  const scrollbarOpts = $xeList.computeScrollbarOpts;
237
- const { padding } = scrollbarOpts;
238
- const { yThumbHeight, xThumbWidth } = reactData;
239
259
  const scrollbarXOpts = $xeList.computeScrollbarXOpts;
260
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
261
+ },
262
+ computeScrollYAutoHide() {
263
+ const $xeList = this;
264
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
240
265
  const scrollbarYOpts = $xeList.computeScrollbarYOpts;
266
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
267
+ },
268
+ computeScrollbarWrapperClss() {
269
+ const $xeList = this;
270
+ const reactData = $xeList.reactData;
271
+ const { yThumbHeight, xThumbWidth } = reactData;
241
272
  const scrollbarXToTop = $xeList.computeScrollbarXToTop;
242
273
  const scrollbarYToLeft = $xeList.computeScrollbarYToLeft;
274
+ const scrollXVisible = $xeList.computeScrollXVisible;
275
+ const scrollYVisible = $xeList.computeScrollYVisible;
243
276
  return domUtils.buildClass([
244
277
  'vxe-scrollbar is--virtual',
245
- `ov-x--${scrollbarXOpts.visible || 'visible'}`,
246
- `ov-y--${scrollbarYOpts.visible || 'visible'}`,
278
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
279
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
247
280
  `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
248
281
  `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
249
282
  ], {
250
- 'is--padding': padding,
251
- 'ov-x--auto-hide': scrollbarXOpts.autoHide,
252
- 'ov-y--auto-hide': scrollbarYOpts.autoHide,
253
283
  'overflow-y': yThumbHeight,
254
284
  'overflow-x': xThumbWidth
255
285
  });
@@ -415,6 +445,11 @@ export default {
415
445
  const { fullData } = internalData;
416
446
  return fullData;
417
447
  },
448
+ getParentElem() {
449
+ const $xeList = this;
450
+ const el = $xeList.$refs.refElem;
451
+ return el ? el.parentElement : null;
452
+ },
418
453
  calcTableHeight(key) {
419
454
  const $xeList = this;
420
455
  const props = $xeList;
@@ -2315,7 +2350,7 @@ export default {
2315
2350
  const reactData = $xeList.reactData;
2316
2351
  const slots = $xeList.$scopedSlots;
2317
2352
  const { showCheckbox, className, loading, useScrollbar } = props;
2318
- const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate } = reactData;
2353
+ const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate, xThumbWidth, yThumbHeight } = reactData;
2319
2354
  const defaultSlot = slots.default;
2320
2355
  const headerSlot = slots.header;
2321
2356
  const footerSlot = slots.footer;
@@ -2329,8 +2364,13 @@ export default {
2329
2364
  const rowOpts = $xeList.computeRowOpts;
2330
2365
  const { isHover, padding } = rowOpts;
2331
2366
  const isDrag = $xeList.computeIsDrag;
2332
- const scrollbarXOpts = $xeList.computeScrollbarXOpts;
2333
- const scrollbarYOpts = $xeList.computeScrollbarYOpts;
2367
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
2368
+ const scrollXVisible = $xeList.computeScrollXVisible;
2369
+ const scrollYVisible = $xeList.computeScrollYVisible;
2370
+ const scrollbarXToTop = $xeList.computeScrollbarXToTop;
2371
+ const scrollbarYToLeft = $xeList.computeScrollbarYToLeft;
2372
+ const scrollXAutoHide = $xeList.computeScrollXAutoHide;
2373
+ const scrollYAutoHide = $xeList.computeScrollYAutoHide;
2334
2374
  const scrollbarWrapperClss = $xeList.computeScrollbarWrapperClss;
2335
2375
  const showDefChekboxHead = showCheckbox && checkboxOpts.showHeader !== false;
2336
2376
  const leOns = {};
@@ -2339,14 +2379,25 @@ export default {
2339
2379
  }
2340
2380
  return h('div', {
2341
2381
  ref: 'refElem',
2342
- class: ['vxe-list', className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '', {
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
+ {
2343
2390
  [`size--${vSize}`]: vSize,
2344
2391
  'is--virtual-scrollbar': useScrollbar,
2345
- 'ov-x--auto-hide': useScrollbar && scrollbarXOpts.autoHide,
2346
- 'ov-y--auto-hide': useScrollbar && scrollbarYOpts.autoHide,
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,
2347
2397
  'is--drag': isDrag,
2348
2398
  'is--loading': loading
2349
- }],
2399
+ }
2400
+ ],
2350
2401
  on: leOns,
2351
2402
  style: wrapperStyles
2352
2403
  }, [
@@ -2407,15 +2458,7 @@ export default {
2407
2458
  style: {
2408
2459
  marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
2409
2460
  }
2410
- }, useScrollbar
2411
- ? (defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => $xeList.renderRow(h, row, i)))
2412
- : [
2413
- h('div', {
2414
- key: 'vi',
2415
- ref: 'refViewInnerElem',
2416
- class: 'vxe-scrollbar--view-inner'
2417
- }, defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => $xeList.renderRow(h, row, i)))
2418
- ])
2461
+ }, defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => $xeList.renderRow(h, row, i)))
2419
2462
  ]),
2420
2463
  footerSlot
2421
2464
  ? h('div', {
@@ -2430,7 +2473,7 @@ export default {
2430
2473
  ? h('div', {
2431
2474
  class: scrollbarWrapperClss
2432
2475
  }, [
2433
- scrollbarXOpts.visible === 'hidden'
2476
+ scrollXVisible === false
2434
2477
  ? renderEmptyElement($xeList)
2435
2478
  : h('div', {
2436
2479
  ref: 'refTrackXElem',
@@ -2451,7 +2494,7 @@ export default {
2451
2494
  }
2452
2495
  })
2453
2496
  ]),
2454
- scrollbarYOpts.visible === 'hidden'
2497
+ scrollYVisible === false
2455
2498
  ? renderEmptyElement($xeList)
2456
2499
  : h('div', {
2457
2500
  ref: 'refTrackYElem',
@@ -2508,13 +2551,37 @@ export default {
2508
2551
  const $xeList = this;
2509
2552
  $xeList.reFlag++;
2510
2553
  },
2554
+ useScrollbar() {
2555
+ const $xeList = this;
2556
+ $xeList.reFlag++;
2557
+ },
2511
2558
  computeRowHeight() {
2512
2559
  const $xeList = this;
2513
2560
  $xeList.reFlag++;
2514
2561
  },
2515
- reFlag() {
2562
+ computeScrollYWidth() {
2563
+ const $xeList = this;
2564
+ $xeList.reFlag++;
2565
+ },
2566
+ computeScrollXHeight() {
2567
+ const $xeList = this;
2568
+ $xeList.reFlag++;
2569
+ },
2570
+ computeScrollXVisible() {
2571
+ const $xeList = this;
2572
+ $xeList.$nextTick(() => {
2573
+ $xeList.reFlag++;
2574
+ });
2575
+ },
2576
+ computeScrollYVisible() {
2516
2577
  const $xeList = this;
2517
2578
  $xeList.$nextTick(() => {
2579
+ $xeList.reFlag++;
2580
+ });
2581
+ },
2582
+ reFlag() {
2583
+ const $xeList = this;
2584
+ $xeList.recalculate().then(() => {
2518
2585
  $xeList.recalculate();
2519
2586
  });
2520
2587
  },
@@ -2559,20 +2626,32 @@ export default {
2559
2626
  if (useKey && !keyField) {
2560
2627
  errLog('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField']);
2561
2628
  }
2562
- if (useScrollbar || autoResize) {
2563
- const el = $xeList.$refs.refElem;
2564
- const viewInnerEl = $xeList.$refs.refViewInnerElem;
2565
- const resizeObserver = globalResize.create(() => {
2629
+ const el = $xeList.$refs.refElem;
2630
+ if (useScrollbar) {
2631
+ const viewInnerEl = $xeList.$refs.refVirtualBody;
2632
+ const scrollObserver = globalResize.create(() => {
2566
2633
  $xeList.reFlag++;
2567
2634
  });
2568
- resizeObserver.observe(el);
2569
- if (autoResize) {
2570
- if (el) {
2571
- resizeObserver.observe(el.parentElement);
2572
- }
2635
+ if (el) {
2636
+ scrollObserver.observe(el);
2573
2637
  }
2574
2638
  if (viewInnerEl) {
2575
- resizeObserver.observe(viewInnerEl);
2639
+ scrollObserver.observe(viewInnerEl);
2640
+ }
2641
+ internalData.scrollObserver = scrollObserver;
2642
+ }
2643
+ if (autoResize) {
2644
+ const parentEl = $xeList.getParentElem();
2645
+ const resizeObserver = globalResize.create(() => {
2646
+ if (props.autoResize) {
2647
+ $xeList.reFlag++;
2648
+ }
2649
+ });
2650
+ if (el) {
2651
+ resizeObserver.observe(el);
2652
+ }
2653
+ if (parentEl) {
2654
+ resizeObserver.observe(parentEl);
2576
2655
  }
2577
2656
  internalData.resizeObserver = resizeObserver;
2578
2657
  }
@@ -2591,10 +2670,13 @@ export default {
2591
2670
  const $xeList = this;
2592
2671
  const reactData = $xeList.reactData;
2593
2672
  const internalData = $xeList.internalData;
2594
- const { resizeObserver } = internalData;
2673
+ const { scrollObserver, resizeObserver } = internalData;
2595
2674
  if (resizeObserver) {
2596
2675
  resizeObserver.disconnect();
2597
2676
  }
2677
+ if (scrollObserver) {
2678
+ scrollObserver.disconnect();
2679
+ }
2598
2680
  globalEvents.off($xeList, 'resize');
2599
2681
  XEUtils.assign(reactData, createReactData());
2600
2682
  XEUtils.assign(internalData, createInternalData());
package/es/list/style.css CHANGED
@@ -381,17 +381,24 @@
381
381
  vertical-align: middle;
382
382
  }
383
383
 
384
- .vxe-list > .vxe-scrollbar {
385
- position: unset;
384
+ .vxe-list.ov-padding.overflow-x.sx-pos--top {
385
+ padding-top: var(--vxe-ui-scrollbar-x-height);
386
386
  }
387
- .vxe-list.is--virtual-scrollbar > .vxe-list--virtual-wrapper {
388
- scrollbar-width: none;
389
- -ms-overflow-style: none;
387
+ .vxe-list.ov-padding.overflow-x.sx-pos--bottom {
388
+ padding-bottom: var(--vxe-ui-scrollbar-x-height);
390
389
  }
391
- .vxe-list.is--virtual-scrollbar > .vxe-list--virtual-wrapper::-webkit-scrollbar {
392
- display: none;
390
+ .vxe-list.ov-padding.overflow-y.sy-pos--left {
391
+ padding-left: var(--vxe-ui-scrollbar-y-width);
392
+ }
393
+ .vxe-list.ov-padding.overflow-y.sy-pos--right {
394
+ padding-right: var(--vxe-ui-scrollbar-y-width);
395
+ }
396
+ .vxe-list.ov-x--hidden > .vxe-list--virtual-wrapper {
397
+ overflow-x: hidden;
398
+ }
399
+ .vxe-list.ov-y--hidden > .vxe-list--virtual-wrapper {
400
+ overflow-y: hidden;
393
401
  }
394
-
395
402
  .vxe-list.is--virtual-scrollbar.ov-x--auto-hide:hover > .vxe-scrollbar > .vxe-scrollbar--track-x {
396
403
  opacity: 1;
397
404
  }
@@ -405,4 +412,14 @@
405
412
  .vxe-list.is--virtual-scrollbar.ov-y--auto-hide > .vxe-scrollbar > .vxe-scrollbar--track-y {
406
413
  opacity: 0;
407
414
  transition: opacity 0.8s ease-in-out;
415
+ }
416
+ .vxe-list > .vxe-scrollbar {
417
+ position: unset;
418
+ }
419
+ .vxe-list.is--virtual-scrollbar > .vxe-list--virtual-wrapper {
420
+ scrollbar-width: none;
421
+ -ms-overflow-style: none;
422
+ }
423
+ .vxe-list.is--virtual-scrollbar > .vxe-list--virtual-wrapper::-webkit-scrollbar {
424
+ display: none;
408
425
  }
@@ -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;-ms-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;-ms-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;-ms-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;-ms-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;-ms-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;-ms-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;-ms-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;-ms-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;-ms-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;-ms-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}
@@ -2,7 +2,7 @@ import { defineVxeComponent } from '../../ui/src/comp';
2
2
  import XEUtils from 'xe-utils';
3
3
  import { VxeUI, createEvent, permission, globalMixins, globalEvents, renderEmptyElement } from '../../ui';
4
4
  import { getPopupAppendElement, scrollToView, toCssUnit } from '../../ui/src/dom';
5
- import { getLastZIndex, nextZIndex, isEnableConf } from '../../ui/src/utils';
5
+ import { getLastZIndex, nextZIndex, isEnableConf, getDefaultConfig } from '../../ui/src/utils';
6
6
  import { getSlotVNs } from '../../ui/src/vn';
7
7
  import { createComponentLog } from '../../ui/src/log';
8
8
  import VxeLoadingComponent from '../../loading';
@@ -69,7 +69,7 @@ export default {
69
69
  menuConfig: Object,
70
70
  useScrollbar: {
71
71
  type: Boolean,
72
- default: () => getConfig().menu.useScrollbar
72
+ default: () => getDefaultConfig(getConfig().menu.useScrollbar, getConfig().useScrollbar)
73
73
  },
74
74
  scrollbarConfig: Object,
75
75
  appendTo: {
@@ -2,12 +2,13 @@ import { defineVxeComponent } from '../../ui/src/comp';
2
2
  import XEUtils from 'xe-utils';
3
3
  import { VxeUI, getConfig, getI18n, getIcon, createEvent, globalEvents, globalMixins, renderEmptyElement, GLOBAL_EVENT_KEYS } from '../../ui';
4
4
  import { getEventTargetNode, getPopupAppendElement, 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 { getSlotVNs } from '../../ui/src/vn';
7
7
  import { createComponentLog } from '../../ui/src/log';
8
8
  import { allActiveModals } from './store';
9
9
  import VxeButtonComponent from '../../button';
10
10
  import VxeLoadingComponent from '../../loading';
11
+ import VxeScrollbarComponent from '../../scrollbar';
11
12
  const { warnLog, errLog } = createComponentLog('modal');
12
13
  function createInternalData() {
13
14
  return {
@@ -217,6 +218,11 @@ export default {
217
218
  },
218
219
  beforeHideMethod: Function,
219
220
  slots: Object,
221
+ useScrollbar: {
222
+ type: Boolean,
223
+ default: () => getDefaultConfig(getConfig().modal.useScrollbar, getConfig().useScrollbar)
224
+ },
225
+ scrollbarConfig: Object,
220
226
  /**
221
227
  * 已废弃
222
228
  * @deprecated
@@ -302,6 +308,28 @@ export default {
302
308
  const $xeModal = this;
303
309
  const props = $xeModal;
304
310
  return Object.assign({}, getConfig().modal.zoomConfig, props.zoomConfig);
311
+ },
312
+ computeScrollbarOpts() {
313
+ const $xeModal = this;
314
+ const props = $xeModal;
315
+ return Object.assign({}, getConfig().modal.scrollbarConfig, props.scrollbarConfig);
316
+ },
317
+ computeScrollbarProps() {
318
+ const $xeModal = this;
319
+ const scrollbarOpts = $xeModal.computeScrollbarOpts;
320
+ const { viewClassName, viewInnerClassName } = scrollbarOpts;
321
+ return {
322
+ width: scrollbarOpts.width,
323
+ height: scrollbarOpts.height,
324
+ autoHide: scrollbarOpts.autoHide,
325
+ visible: scrollbarOpts.visible,
326
+ xConfig: scrollbarOpts.xConfig,
327
+ yConfig: scrollbarOpts.yConfig,
328
+ className: scrollbarOpts.className,
329
+ viewAttrs: scrollbarOpts.viewAttrs,
330
+ viewClassName: 'vxe-modal--scrollbar-content-view' + (viewClassName ? (' ' + viewClassName) : ''),
331
+ viewInnerClassName: 'vxe-modal--scrollbar-content-inner' + (viewClassName ? (' ' + viewInnerClassName) : '')
332
+ };
305
333
  } }),
306
334
  watch: {
307
335
  width() {
@@ -1465,9 +1493,10 @@ export default {
1465
1493
  const $xeModal = this;
1466
1494
  const props = $xeModal;
1467
1495
  const slots = $xeModal.$scopedSlots;
1468
- const { slots: propSlots = {}, status, message, iconStatus, useHtml } = props;
1496
+ const { slots: propSlots = {}, status, message, iconStatus, useScrollbar, useHtml } = props;
1469
1497
  const content = props.content || message;
1470
1498
  const isMsg = $xeModal.computeIsMsg;
1499
+ const scrollbarProps = $xeModal.computeScrollbarProps;
1471
1500
  const defaultSlot = slots.default || propSlots.default;
1472
1501
  const leftSlot = slots.left || propSlots.left;
1473
1502
  const rightSlot = slots.right || propSlots.right;
@@ -1481,18 +1510,48 @@ export default {
1481
1510
  })
1482
1511
  ]));
1483
1512
  }
1484
- contVNs.push(useHtml && !defaultSlot
1485
- ? h('div', {
1486
- key: 'hc',
1487
- class: 'vxe-modal--content',
1488
- domProps: {
1489
- innerHTML: getFuncText(content)
1490
- }
1491
- })
1492
- : h('div', {
1493
- key: 'dc',
1494
- class: 'vxe-modal--content'
1495
- }, defaultSlot ? $xeModal.callSlot(defaultSlot, { $modal: $xeModal }, h) : getFuncText(content)));
1513
+ if (useHtml && !defaultSlot) {
1514
+ contVNs.push(useScrollbar
1515
+ ? h(VxeScrollbarComponent, {
1516
+ key: 'shc',
1517
+ class: 'vxe-modal--scrollbar-content',
1518
+ props: scrollbarProps,
1519
+ scopedSlots: {
1520
+ default() {
1521
+ return [
1522
+ h('div', {
1523
+ class: 'vxe-modal--scrollbar-content-html',
1524
+ domProps: {
1525
+ innerHTML: getFuncText(content)
1526
+ }
1527
+ })
1528
+ ];
1529
+ }
1530
+ }
1531
+ })
1532
+ : h('div', {
1533
+ key: 'hc',
1534
+ class: 'vxe-modal--content',
1535
+ domProps: {
1536
+ innerHTML: getFuncText(content)
1537
+ }
1538
+ }));
1539
+ }
1540
+ else {
1541
+ contVNs.push(useScrollbar
1542
+ ? h(VxeScrollbarComponent, {
1543
+ key: 'sdc',
1544
+ class: 'vxe-modal--scrollbar-content',
1545
+ props: scrollbarProps,
1546
+ scopedSlots: {
1547
+ default: () => defaultSlot ? $xeModal.callSlot(defaultSlot, { $modal: $xeModal }, h) : getFuncText(content)
1548
+ }
1549
+ })
1550
+ : h('div', {
1551
+ key: 'dc',
1552
+ class: 'vxe-modal--content'
1553
+ }, defaultSlot ? $xeModal.callSlot(defaultSlot, { $modal: $xeModal }, h) : getFuncText(content)));
1554
+ }
1496
1555
  return h('div', {
1497
1556
  class: 'vxe-modal--body'
1498
1557
  }, [
@@ -450,4 +450,8 @@ html[data-vxe-lock-scroll] body {
450
450
 
451
451
  .vxe-modal--wrapper[data-effect] {
452
452
  overflow: hidden;
453
+ }
454
+
455
+ .vxe-modal--scrollbar-content {
456
+ width: 100%;
453
457
  }