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
@@ -15,6 +15,7 @@ var _vn = require("../../ui/src/vn");
15
15
  var _dom = require("../../ui/src/dom");
16
16
  var _utils = require("../../ui/src/utils");
17
17
  var _anime = require("../../ui/src/anime");
18
+ var _util2 = require("../../scrollbar/src/util");
18
19
  var _loading = _interopRequireDefault(require("../../loading"));
19
20
  var _tooltip = _interopRequireDefault(require("../../tooltip"));
20
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -34,6 +35,34 @@ const {
34
35
  function getNodeUniqueId() {
35
36
  return _xeUtils.default.uniqueId('node_');
36
37
  }
38
+ function createReactData() {
39
+ return {
40
+ parentHeight: 0,
41
+ customHeight: 0,
42
+ customMinHeight: 0,
43
+ customMaxHeight: 0,
44
+ currentNode: null,
45
+ scrollYLoad: false,
46
+ bodyHeight: 0,
47
+ topSpaceHeight: 0,
48
+ selectRadioKey: null,
49
+ treeList: [],
50
+ updateExpandedFlag: 1,
51
+ updateCheckboxFlag: 1,
52
+ // 滚动条
53
+ yThumbHeight: 0,
54
+ xThumbWidth: 0,
55
+ insertNodeFlag: 1,
56
+ removeNodeFlag: 1,
57
+ dragNode: null,
58
+ dragTipText: '',
59
+ isCrossDragNode: false,
60
+ tooltipStore: {
61
+ visible: false,
62
+ node: null
63
+ }
64
+ };
65
+ }
37
66
  function createInternalData() {
38
67
  return {
39
68
  // initialized: false,
@@ -46,8 +75,15 @@ function createInternalData() {
46
75
  indeterminateNodeMaps: {},
47
76
  treeExpandedMaps: {},
48
77
  treeExpandLazyLoadedMaps: {},
49
- lastScrollLeft: 0,
78
+ // resizeObserver: undefined,
79
+ // 滚动条
80
+ // scrollObserver: undefined,
81
+ // isThumbDrag: false,
82
+ thumbDragOffset: 0,
83
+ yThumbTop: 0,
84
+ xThumbLeft: 0,
50
85
  lastScrollTop: 0,
86
+ lastScrollLeft: 0,
51
87
  scrollYStore: {
52
88
  startIndex: 0,
53
89
  endIndex: 0,
@@ -64,31 +100,6 @@ function createInternalData() {
64
100
  // hpTimeout: undefined
65
101
  };
66
102
  }
67
- function createReactData() {
68
- return {
69
- parentHeight: 0,
70
- customHeight: 0,
71
- customMinHeight: 0,
72
- customMaxHeight: 0,
73
- currentNode: null,
74
- scrollYLoad: false,
75
- bodyHeight: 0,
76
- topSpaceHeight: 0,
77
- selectRadioKey: null,
78
- treeList: [],
79
- updateExpandedFlag: 1,
80
- updateCheckboxFlag: 1,
81
- insertNodeFlag: 1,
82
- removeNodeFlag: 1,
83
- dragNode: null,
84
- dragTipText: '',
85
- isCrossDragNode: false,
86
- tooltipStore: {
87
- visible: false,
88
- node: null
89
- }
90
- };
91
- }
92
103
  let crossTreeDragNodeObj = null;
93
104
  var _default = exports.default = (0, _comp.defineVxeComponent)({
94
105
  name: 'VxeTree',
@@ -219,7 +230,12 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
219
230
  type: String,
220
231
  default: () => getConfig().tree.size || getConfig().size
221
232
  },
222
- virtualYConfig: Object
233
+ virtualYConfig: Object,
234
+ useScrollbar: {
235
+ type: Boolean,
236
+ default: () => (0, _utils.getDefaultConfig)(getConfig().tree.useScrollbar, getConfig().useScrollbar)
237
+ },
238
+ scrollbarConfig: Object
223
239
  },
224
240
  emits: ['update:modelValue', 'update:checkNodeKey', 'update:checkNodeKeys', 'node-click', 'node-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'load-success', 'load-error', 'scroll', 'node-dragstart', 'node-dragover', 'node-dragend', 'node-remove-dragend', 'node-insert-dragend', 'node-expand', 'node-menu', 'menu-click'],
225
241
  setup(props, context) {
@@ -236,6 +252,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
236
252
  const refFooterWrapperElem = (0, _vue.ref)();
237
253
  const refVirtualWrapper = (0, _vue.ref)();
238
254
  const refVirtualBody = (0, _vue.ref)();
255
+ const refTrackXElem = (0, _vue.ref)();
256
+ const refTrackYElem = (0, _vue.ref)();
257
+ const refThumbXElem = (0, _vue.ref)();
258
+ const refThumbYElem = (0, _vue.ref)();
239
259
  const refDragNodeLineElem = (0, _vue.ref)();
240
260
  const refDragTipElem = (0, _vue.ref)();
241
261
  const refTooltip = (0, _vue.ref)();
@@ -315,6 +335,16 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
315
335
  const computeMenuOpts = (0, _vue.computed)(() => {
316
336
  return Object.assign({}, getConfig().tree.menuConfig, props.menuConfig);
317
337
  });
338
+ const computeWrapperStyles = (0, _vue.computed)(() => {
339
+ const barWidth = computeScrollYWidth.value;
340
+ const barHeight = computeScrollXHeight.value;
341
+ const stys = {};
342
+ if (barWidth || barHeight) {
343
+ stys['--vxe-ui-scrollbar-y-width'] = (0, _dom.toCssUnit)(barWidth || barHeight);
344
+ stys['--vxe-ui-scrollbar-x-height'] = (0, _dom.toCssUnit)(barHeight || barWidth);
345
+ }
346
+ return stys;
347
+ });
318
348
  const computeTreeStyle = (0, _vue.computed)(() => {
319
349
  const {
320
350
  indent
@@ -358,6 +388,71 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
358
388
  const computeFilterOpts = (0, _vue.computed)(() => {
359
389
  return Object.assign({}, getConfig().tree.filterConfig, props.filterConfig);
360
390
  });
391
+ const computeScrollbarOpts = (0, _vue.computed)(() => {
392
+ return Object.assign({}, getConfig().tree.scrollbarConfig, props.scrollbarConfig);
393
+ });
394
+ const computeScrollbarXOpts = (0, _vue.computed)(() => {
395
+ const scrollbarOpts = computeScrollbarOpts.value;
396
+ return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig, {
397
+ visible: false
398
+ });
399
+ });
400
+ const computeScrollbarYOpts = (0, _vue.computed)(() => {
401
+ const scrollbarOpts = computeScrollbarOpts.value;
402
+ return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
403
+ });
404
+ const computeScrollXHeight = (0, _vue.computed)(() => {
405
+ const scrollbarOpts = computeScrollbarOpts.value;
406
+ const scrollbarXOpts = computeScrollbarXOpts.value;
407
+ return (0, _utils.getDefaultConfig)((0, _utils.getDefaultConfig)(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
408
+ });
409
+ const computeScrollYWidth = (0, _vue.computed)(() => {
410
+ const scrollbarOpts = computeScrollbarOpts.value;
411
+ const scrollbarYOpts = computeScrollbarYOpts.value;
412
+ return (0, _utils.getDefaultConfig)((0, _utils.getDefaultConfig)(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
413
+ });
414
+ const computeScrollXVisible = (0, _vue.computed)(() => {
415
+ const scrollbarOpts = computeScrollbarOpts.value;
416
+ const scrollbarXOpts = computeScrollbarXOpts.value;
417
+ return (0, _utils.getDefaultConfig)(scrollbarXOpts.visible, scrollbarOpts.visible);
418
+ });
419
+ const computeScrollYVisible = (0, _vue.computed)(() => {
420
+ const scrollbarOpts = computeScrollbarOpts.value;
421
+ const scrollbarYOpts = computeScrollbarYOpts.value;
422
+ return (0, _utils.getDefaultConfig)(scrollbarYOpts.visible, scrollbarOpts.visible);
423
+ });
424
+ const computeScrollXAutoHide = (0, _vue.computed)(() => {
425
+ const scrollbarOpts = computeScrollbarOpts.value;
426
+ const scrollbarXOpts = computeScrollbarXOpts.value;
427
+ return (0, _utils.getDefaultConfig)((0, _utils.getDefaultConfig)(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
428
+ });
429
+ const computeScrollYAutoHide = (0, _vue.computed)(() => {
430
+ const scrollbarOpts = computeScrollbarOpts.value;
431
+ const scrollbarYOpts = computeScrollbarYOpts.value;
432
+ return (0, _utils.getDefaultConfig)((0, _utils.getDefaultConfig)(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
433
+ });
434
+ const computeScrollbarWrapperClss = (0, _vue.computed)(() => {
435
+ const {
436
+ yThumbHeight,
437
+ xThumbWidth
438
+ } = reactData;
439
+ const scrollbarXToTop = computeScrollbarXToTop.value;
440
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
441
+ const scrollXVisible = computeScrollXVisible.value;
442
+ const scrollYVisible = computeScrollYVisible.value;
443
+ return _ui.domUtils.buildClass(['vxe-scrollbar is--virtual', `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`, `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`, `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`], {
444
+ 'overflow-y': yThumbHeight,
445
+ 'overflow-x': xThumbWidth
446
+ });
447
+ });
448
+ const computeScrollbarXToTop = (0, _vue.computed)(() => {
449
+ const scrollbarXOpts = computeScrollbarXOpts.value;
450
+ return scrollbarXOpts.position === 'top';
451
+ });
452
+ const computeScrollbarYToLeft = (0, _vue.computed)(() => {
453
+ const scrollbarYOpts = computeScrollbarYOpts.value;
454
+ return scrollbarYOpts.position === 'left';
455
+ });
361
456
  const computeMaps = {
362
457
  computeKeyField,
363
458
  computeParentField,
@@ -952,6 +1047,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
952
1047
  }
953
1048
  });
954
1049
  };
1050
+ const updateScrollbar = () => {
1051
+ updateThumbSize();
1052
+ updateThumbOffset();
1053
+ };
955
1054
  /**
956
1055
  * 重新计算列表
957
1056
  */
@@ -977,6 +1076,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
977
1076
  const parentPaddingSize = (0, _dom.getPaddingTopBottomSize)(parentEl);
978
1077
  reactData.parentHeight = Math.max(headHeight + footHeight + rowHeight, parentEl.clientHeight - parentPaddingSize - headHeight - footHeight);
979
1078
  }
1079
+ updateScrollbar();
980
1080
  updateHeight();
981
1081
  return computeScrollLoad().then(() => {
982
1082
  updateHeight();
@@ -1018,6 +1118,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
1018
1118
  const scrollLeft = scrollBodyElem.scrollLeft;
1019
1119
  const isX = scrollLeft !== internalData.lastScrollLeft;
1020
1120
  const isY = scrollTop !== internalData.lastScrollTop;
1121
+ updateThumbOffset();
1021
1122
  internalData.lastScrollTop = scrollTop;
1022
1123
  internalData.lastScrollLeft = scrollLeft;
1023
1124
  if (reactData.scrollYLoad) {
@@ -1693,13 +1794,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
1693
1794
  checked: isChecked
1694
1795
  }, evnt);
1695
1796
  };
1696
- const handleGlobalResizeEvent = () => {
1697
- const el = refElem.value;
1698
- if (!el || !el.clientWidth) {
1699
- return;
1700
- }
1701
- recalculate();
1702
- };
1703
1797
  const insertTreeNode = (newRecords, isAppend) => {
1704
1798
  const {
1705
1799
  treeFullData,
@@ -3362,6 +3456,183 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
3362
3456
  hideDropTip();
3363
3457
  }
3364
3458
  };
3459
+ const updateThumbSize = () => {
3460
+ const viewEl = refVirtualWrapper.value;
3461
+ if (!viewEl) {
3462
+ return;
3463
+ }
3464
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
3465
+ return;
3466
+ }
3467
+ const trackXEl = refTrackXElem.value;
3468
+ const xThumbWidth = trackXEl ? (0, _util2.getThumbSize)(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
3469
+ const thumbXElem = refThumbXElem.value;
3470
+ if (thumbXElem) {
3471
+ thumbXElem.style.width = xThumbWidth + 'px';
3472
+ }
3473
+ reactData.xThumbWidth = xThumbWidth;
3474
+ const trackYEl = refTrackYElem.value;
3475
+ const yThumbHeight = trackYEl ? (0, _util2.getThumbSize)(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
3476
+ const thumbYElem = refThumbYElem.value;
3477
+ if (thumbYElem) {
3478
+ thumbYElem.style.height = yThumbHeight + 'px';
3479
+ }
3480
+ reactData.yThumbHeight = yThumbHeight;
3481
+ };
3482
+ const updateThumbOffset = () => {
3483
+ const viewEl = refVirtualWrapper.value;
3484
+ if (!viewEl) {
3485
+ return;
3486
+ }
3487
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
3488
+ return;
3489
+ }
3490
+ const {
3491
+ xThumbWidth,
3492
+ yThumbHeight
3493
+ } = reactData;
3494
+ const trackXEl = refTrackXElem.value;
3495
+ const thumbXElem = refThumbXElem.value;
3496
+ const xThumbLeft = trackXEl && xThumbWidth ? (0, _util2.getThumbOffsetSize)(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
3497
+ internalData.xThumbLeft = xThumbLeft;
3498
+ if (thumbXElem && xThumbWidth) {
3499
+ thumbXElem.style.width = xThumbWidth + 'px';
3500
+ thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
3501
+ }
3502
+ const trackYEl = refTrackYElem.value;
3503
+ const thumbYElem = refThumbYElem.value;
3504
+ const yThumbTop = trackYEl && yThumbHeight ? (0, _util2.getThumbOffsetSize)(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
3505
+ internalData.yThumbTop = yThumbTop;
3506
+ if (thumbYElem && yThumbHeight) {
3507
+ thumbYElem.style.height = yThumbHeight + 'px';
3508
+ thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
3509
+ }
3510
+ };
3511
+ const clickTrackXEvent = evnt => {
3512
+ const trackEl = evnt.currentTarget;
3513
+ if (trackEl !== evnt.target) {
3514
+ return;
3515
+ }
3516
+ const viewEl = refVirtualWrapper.value;
3517
+ if (!viewEl) {
3518
+ return;
3519
+ }
3520
+ const {
3521
+ xThumbWidth
3522
+ } = reactData;
3523
+ const trackRect = trackEl.getBoundingClientRect();
3524
+ viewEl.scrollTo({
3525
+ left: (0, _util2.getScrollFromClick)(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
3526
+ behavior: 'auto'
3527
+ });
3528
+ };
3529
+ const clickTrackYEvent = evnt => {
3530
+ const trackEl = evnt.currentTarget;
3531
+ if (trackEl !== evnt.target) {
3532
+ return;
3533
+ }
3534
+ const viewEl = refVirtualWrapper.value;
3535
+ if (!viewEl) {
3536
+ return;
3537
+ }
3538
+ const {
3539
+ yThumbHeight
3540
+ } = reactData;
3541
+ const trackRect = trackEl.getBoundingClientRect();
3542
+ viewEl.scrollTo({
3543
+ top: (0, _util2.getScrollFromClick)(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
3544
+ behavior: 'auto'
3545
+ });
3546
+ };
3547
+ const pointerdownThumbXEvent = evnt => {
3548
+ const thumbEl = evnt.currentTarget;
3549
+ internalData.isThumbDrag = true;
3550
+ thumbEl.setPointerCapture(evnt.pointerId);
3551
+ const viewEl = refVirtualWrapper.value;
3552
+ if (!viewEl) {
3553
+ return;
3554
+ }
3555
+ const {
3556
+ xThumbWidth
3557
+ } = reactData;
3558
+ const trackEl = thumbEl.parentElement;
3559
+ const trackRect = trackEl.getBoundingClientRect();
3560
+ const pointerPosition = evnt.clientX - trackRect.left;
3561
+ // 记录 thumb 的偏移
3562
+ const thumbOffset = (0, _util2.getThumbOffsetSize)(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
3563
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
3564
+ };
3565
+ const pointermoveThumbXEvent = evnt => {
3566
+ const thumbEl = evnt.currentTarget;
3567
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
3568
+ return;
3569
+ }
3570
+ const {
3571
+ isThumbDrag,
3572
+ thumbDragOffset
3573
+ } = internalData;
3574
+ if (isThumbDrag) {
3575
+ const viewEl = refVirtualWrapper.value;
3576
+ if (!viewEl) {
3577
+ return;
3578
+ }
3579
+ const {
3580
+ xThumbWidth
3581
+ } = reactData;
3582
+ const thumbEl = evnt.currentTarget;
3583
+ const trackEl = thumbEl.parentElement;
3584
+ const trackRect = trackEl.getBoundingClientRect();
3585
+ // 更新偏移
3586
+ viewEl.scrollLeft = (0, _util2.getScrollFromDrag)(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
3587
+ }
3588
+ };
3589
+ const cleatPointerThumbEvent = evnt => {
3590
+ const thumbEl = evnt.currentTarget;
3591
+ thumbEl.releasePointerCapture(evnt.pointerId);
3592
+ internalData.isThumbDrag = false;
3593
+ };
3594
+ const pointerdownThumbYEvent = evnt => {
3595
+ const thumbEl = evnt.currentTarget;
3596
+ internalData.isThumbDrag = true;
3597
+ thumbEl.setPointerCapture(evnt.pointerId);
3598
+ const viewEl = refVirtualWrapper.value;
3599
+ if (!viewEl) {
3600
+ return;
3601
+ }
3602
+ const {
3603
+ yThumbHeight
3604
+ } = reactData;
3605
+ const trackEl = thumbEl.parentElement;
3606
+ const trackRect = trackEl.getBoundingClientRect();
3607
+ const pointerPosition = evnt.clientY - trackRect.top;
3608
+ // 记录 thumb 的偏移
3609
+ const thumbOffset = (0, _util2.getThumbOffsetSize)(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
3610
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
3611
+ };
3612
+ const pointermoveThumbYEvent = evnt => {
3613
+ const thumbEl = evnt.currentTarget;
3614
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
3615
+ return;
3616
+ }
3617
+ const {
3618
+ isThumbDrag,
3619
+ thumbDragOffset
3620
+ } = internalData;
3621
+ if (isThumbDrag) {
3622
+ const viewEl = refVirtualWrapper.value;
3623
+ if (!viewEl) {
3624
+ return;
3625
+ }
3626
+ const {
3627
+ yThumbHeight
3628
+ } = reactData;
3629
+ const thumbEl = evnt.currentTarget;
3630
+ const trackEl = thumbEl.parentElement;
3631
+ const trackRect = trackEl.getBoundingClientRect();
3632
+ // 更新偏移
3633
+ viewEl.scrollTop = (0, _util2.getScrollFromDrag)(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
3634
+ }
3635
+ };
3365
3636
  Object.assign($xeTree, treeMethods, treePrivateMethods);
3366
3637
  const renderDragIcon = (node, nodeid) => {
3367
3638
  const {
@@ -3704,19 +3975,23 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
3704
3975
  const {
3705
3976
  loading,
3706
3977
  trigger,
3707
- showLine
3978
+ showLine,
3979
+ useScrollbar
3708
3980
  } = props;
3709
3981
  const {
3710
3982
  bodyHeight,
3711
3983
  topSpaceHeight,
3712
3984
  treeList,
3713
- tooltipStore
3985
+ tooltipStore,
3986
+ xThumbWidth,
3987
+ yThumbHeight
3714
3988
  } = reactData;
3715
3989
  const vSize = computeSize.value;
3716
3990
  const radioOpts = computeRadioOpts.value;
3717
3991
  const checkboxOpts = computeCheckboxOpts.value;
3718
3992
  const loadingOpts = computeLoadingOpts.value;
3719
3993
  const isNodeHover = computeIsNodeHover.value;
3994
+ const wrapperStyles = computeWrapperStyles.value;
3720
3995
  const treeStyle = computeTreeStyle.value;
3721
3996
  const dragOpts = computeDragOpts.value;
3722
3997
  const tooltipOpts = computeTooltipOpts.value;
@@ -3724,21 +3999,36 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
3724
3999
  const headerSlot = slots.header;
3725
4000
  const footerSlot = slots.footer;
3726
4001
  const tooltipSlot = slots.tooltip;
4002
+ const scrollbarOpts = computeScrollbarOpts.value;
4003
+ const scrollXVisible = computeScrollXVisible.value;
4004
+ const scrollYVisible = computeScrollYVisible.value;
4005
+ const scrollbarXToTop = computeScrollbarXToTop.value;
4006
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
4007
+ const scrollXAutoHide = computeScrollXAutoHide.value;
4008
+ const scrollYAutoHide = computeScrollYAutoHide.value;
4009
+ const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
3727
4010
  const teOns = {};
3728
4011
  if (dragOpts.isCrossTreeDrag && !treeList.length) {
3729
4012
  teOns.onDragover = $xeTree.handleCrossTreeNodeDragoverEmptyEvent;
3730
4013
  }
3731
4014
  return (0, _vue.h)('div', Object.assign({
3732
4015
  ref: refElem,
3733
- class: ['vxe-tree', {
4016
+ class: ['vxe-tree', useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '', useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '', useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '', useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '', {
3734
4017
  [`size--${vSize}`]: vSize,
3735
4018
  'show--line': showLine,
4019
+ 'is--virtual-scrollbar': useScrollbar,
4020
+ 'ov-padding': useScrollbar && scrollbarOpts.padding,
4021
+ 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
4022
+ 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
4023
+ 'overflow-y': yThumbHeight,
4024
+ 'overflow-x': xThumbWidth,
3736
4025
  'checkbox--highlight': checkboxOpts.highlight,
3737
4026
  'radio--highlight': radioOpts.highlight,
3738
4027
  'node--hover': isNodeHover,
3739
4028
  'node--trigger': trigger === 'node',
3740
4029
  'is--loading': loading
3741
- }]
4030
+ }],
4031
+ style: wrapperStyles
3742
4032
  }, teOns), [headerSlot ? (0, _vue.h)('div', {
3743
4033
  ref: refHeaderWrapperElem,
3744
4034
  class: 'vxe-tree--header-wrapper'
@@ -3766,6 +4056,36 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
3766
4056
  }, footerSlot({
3767
4057
  $tree: $xeTree
3768
4058
  })) : (0, _ui.renderEmptyElement)($xeTree),
4059
+ /**
4060
+ * 滚动条
4061
+ */
4062
+ useScrollbar ? (0, _vue.h)('div', {
4063
+ class: scrollbarWrapperClss
4064
+ }, [scrollXVisible === false ? (0, _ui.renderEmptyElement)($xeTree) : (0, _vue.h)('div', {
4065
+ ref: refTrackXElem,
4066
+ class: 'vxe-scrollbar--track-x',
4067
+ onClick: clickTrackXEvent
4068
+ }, [(0, _vue.h)('div', {
4069
+ ref: refThumbXElem,
4070
+ class: 'vxe-scrollbar--thumb-x',
4071
+ onPointerdown: pointerdownThumbXEvent,
4072
+ onPointermove: pointermoveThumbXEvent,
4073
+ onPointerup: cleatPointerThumbEvent,
4074
+ onPointercancel: cleatPointerThumbEvent,
4075
+ onLostpointercapture: cleatPointerThumbEvent
4076
+ })]), scrollYVisible === false ? (0, _ui.renderEmptyElement)($xeTree) : (0, _vue.h)('div', {
4077
+ ref: refTrackYElem,
4078
+ class: 'vxe-scrollbar--track-y',
4079
+ onClick: clickTrackYEvent
4080
+ }, [(0, _vue.h)('div', {
4081
+ ref: refThumbYElem,
4082
+ class: 'vxe-scrollbar--thumb-y',
4083
+ onPointerdown: pointerdownThumbYEvent,
4084
+ onPointermove: pointermoveThumbYEvent,
4085
+ onPointerup: cleatPointerThumbEvent,
4086
+ onPointercancel: cleatPointerThumbEvent,
4087
+ onLostpointercapture: cleatPointerThumbEvent
4088
+ })])]) : (0, _ui.renderEmptyElement)($xeTree),
3769
4089
  /**
3770
4090
  * 拖拽提示
3771
4091
  */
@@ -3849,18 +4169,39 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
3849
4169
  (0, _vue.watch)(() => props.filterValue, () => {
3850
4170
  triggerSearchEvent(new Event('filter'));
3851
4171
  });
3852
- const hFlag = (0, _vue.ref)(0);
4172
+ const reFlag = (0, _vue.ref)(0);
3853
4173
  (0, _vue.watch)(() => props.height, () => {
3854
- hFlag.value++;
4174
+ reFlag.value++;
3855
4175
  });
3856
4176
  (0, _vue.watch)(() => props.minHeight, () => {
3857
- hFlag.value++;
4177
+ reFlag.value++;
3858
4178
  });
3859
4179
  (0, _vue.watch)(() => props.maxHeight, () => {
3860
- hFlag.value++;
4180
+ reFlag.value++;
3861
4181
  });
3862
- (0, _vue.watch)(hFlag, () => {
3863
- recalculate();
4182
+ (0, _vue.watch)(() => props.useScrollbar, () => {
4183
+ reFlag.value++;
4184
+ });
4185
+ (0, _vue.watch)(computeScrollYWidth, () => {
4186
+ reFlag.value++;
4187
+ });
4188
+ (0, _vue.watch)(computeScrollXHeight, () => {
4189
+ reFlag.value++;
4190
+ });
4191
+ (0, _vue.watch)(computeScrollXVisible, () => {
4192
+ (0, _vue.nextTick)(() => {
4193
+ reFlag.value++;
4194
+ });
4195
+ });
4196
+ (0, _vue.watch)(computeScrollYVisible, () => {
4197
+ (0, _vue.nextTick)(() => {
4198
+ reFlag.value++;
4199
+ });
4200
+ });
4201
+ (0, _vue.watch)(reFlag, () => {
4202
+ recalculate().then(() => {
4203
+ recalculate();
4204
+ });
3864
4205
  });
3865
4206
  (0, _vue.onMounted)(() => {
3866
4207
  const {
@@ -3869,7 +4210,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
3869
4210
  menuConfig,
3870
4211
  showOverflow,
3871
4212
  lazy,
3872
- loadMethod
4213
+ loadMethod,
4214
+ autoResize,
4215
+ useScrollbar
3873
4216
  } = props;
3874
4217
  const dragOpts = computeDragOpts.value;
3875
4218
  if (!showOverflow) {
@@ -3891,12 +4234,25 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
3891
4234
  if (menuConfig && !VxeUIContextMenu) {
3892
4235
  errLog('vxe.error.reqComp', ['vxe-context-menu']);
3893
4236
  }
3894
- if (props.autoResize) {
3895
- const el = refElem.value;
4237
+ const el = refElem.value;
4238
+ if (useScrollbar || autoResize) {
4239
+ const viewInnerEl = refVirtualBody.value;
4240
+ const scrollObserver = _ui.globalResize.create(() => {
4241
+ updateScrollbar();
4242
+ });
4243
+ if (el) {
4244
+ scrollObserver.observe(el);
4245
+ }
4246
+ if (viewInnerEl) {
4247
+ scrollObserver.observe(viewInnerEl);
4248
+ }
4249
+ internalData.scrollObserver = scrollObserver;
4250
+ }
4251
+ if (autoResize) {
3896
4252
  const parentEl = getParentElem();
3897
4253
  const resizeObserver = _ui.globalResize.create(() => {
3898
4254
  if (props.autoResize) {
3899
- recalculate();
4255
+ reFlag.value++;
3900
4256
  }
3901
4257
  });
3902
4258
  if (el) {
@@ -3907,16 +4263,22 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
3907
4263
  }
3908
4264
  internalData.resizeObserver = resizeObserver;
3909
4265
  }
3910
- recalculate();
3911
- _ui.globalEvents.on($xeTree, 'resize', handleGlobalResizeEvent);
4266
+ reFlag.value++;
4267
+ _ui.globalEvents.on($xeTree, 'resize', () => {
4268
+ reFlag.value++;
4269
+ });
3912
4270
  });
3913
4271
  (0, _vue.onBeforeUnmount)(() => {
3914
4272
  const {
4273
+ scrollObserver,
3915
4274
  resizeObserver
3916
4275
  } = internalData;
3917
4276
  if (resizeObserver) {
3918
4277
  resizeObserver.disconnect();
3919
4278
  }
4279
+ if (scrollObserver) {
4280
+ scrollObserver.disconnect();
4281
+ }
3920
4282
  _ui.globalEvents.off($xeTree, 'resize');
3921
4283
  _xeUtils.default.assign(reactData, createReactData());
3922
4284
  _xeUtils.default.assign(internalData, createInternalData());