vxe-pc-ui 3.19.7 → 3.20.0

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 (97) hide show
  1. package/es/card/src/card.js +48 -11
  2. package/es/card/style.css +42 -44
  3. package/es/card/style.min.css +1 -1
  4. package/es/icon/style.css +1 -1
  5. package/es/list/src/list.js +360 -19
  6. package/es/list/style.css +26 -0
  7. package/es/list/style.min.css +1 -1
  8. package/es/scrollbar/src/scrollbar.js +6 -0
  9. package/es/scrollbar/style.css +6 -5
  10. package/es/scrollbar/style.min.css +1 -1
  11. package/es/style.css +1 -1
  12. package/es/style.min.css +1 -1
  13. package/es/tabs/src/tabs.js +35 -8
  14. package/es/tabs/style.css +4 -2
  15. package/es/tabs/style.min.css +1 -1
  16. package/es/tree/src/tree.js +6 -2
  17. package/es/ui/index.js +1 -1
  18. package/es/ui/src/log.js +1 -1
  19. package/es/ui/src/utils.js +9 -0
  20. package/es/vxe-card/style.css +42 -44
  21. package/es/vxe-card/style.min.css +1 -1
  22. package/es/vxe-list/style.css +26 -0
  23. package/es/vxe-list/style.min.css +1 -1
  24. package/es/vxe-scrollbar/style.css +6 -5
  25. package/es/vxe-scrollbar/style.min.css +1 -1
  26. package/es/vxe-tabs/style.css +4 -2
  27. package/es/vxe-tabs/style.min.css +1 -1
  28. package/lib/card/src/card.js +55 -5
  29. package/lib/card/src/card.min.js +1 -1
  30. package/lib/card/style/style.css +42 -44
  31. package/lib/card/style/style.min.css +1 -1
  32. package/lib/icon/style/style.css +1 -1
  33. package/lib/icon/style/style.min.css +1 -1
  34. package/lib/index.umd.js +5966 -5536
  35. package/lib/index.umd.min.js +1 -1
  36. package/lib/list/src/list.js +344 -20
  37. package/lib/list/src/list.min.js +1 -1
  38. package/lib/list/style/style.css +26 -0
  39. package/lib/list/style/style.min.css +1 -1
  40. package/lib/scrollbar/src/scrollbar.js +6 -0
  41. package/lib/scrollbar/src/scrollbar.min.js +1 -1
  42. package/lib/scrollbar/style/style.css +6 -5
  43. package/lib/scrollbar/style/style.min.css +1 -1
  44. package/lib/style.css +1 -1
  45. package/lib/style.min.css +1 -1
  46. package/lib/tabs/src/tabs.js +45 -8
  47. package/lib/tabs/src/tabs.min.js +1 -1
  48. package/lib/tabs/style/style.css +4 -2
  49. package/lib/tabs/style/style.min.css +1 -1
  50. package/lib/tree/src/tree.js +4 -0
  51. package/lib/tree/src/tree.min.js +1 -1
  52. package/lib/ui/index.js +1 -1
  53. package/lib/ui/index.min.js +1 -1
  54. package/lib/ui/src/log.js +1 -1
  55. package/lib/ui/src/log.min.js +1 -1
  56. package/lib/ui/src/utils.js +10 -0
  57. package/lib/ui/src/utils.min.js +1 -1
  58. package/lib/vxe-card/style/style.css +42 -44
  59. package/lib/vxe-card/style/style.min.css +1 -1
  60. package/lib/vxe-list/style/style.css +26 -0
  61. package/lib/vxe-list/style/style.min.css +1 -1
  62. package/lib/vxe-scrollbar/style/style.css +6 -5
  63. package/lib/vxe-scrollbar/style/style.min.css +1 -1
  64. package/lib/vxe-tabs/style/style.css +4 -2
  65. package/lib/vxe-tabs/style/style.min.css +1 -1
  66. package/package.json +1 -1
  67. package/packages/card/src/card.ts +65 -11
  68. package/packages/list/src/list.ts +388 -21
  69. package/packages/scrollbar/src/scrollbar.ts +6 -0
  70. package/packages/tabs/src/tabs.ts +40 -8
  71. package/packages/tree/src/tree.ts +6 -2
  72. package/packages/ui/src/utils.ts +10 -0
  73. package/styles/components/card.scss +44 -58
  74. package/styles/components/list.scss +51 -0
  75. package/styles/components/scrollbar.scss +18 -11
  76. package/styles/components/tabs.scss +2 -1
  77. package/types/components/card.d.ts +11 -0
  78. package/types/components/grid.d.ts +37 -0
  79. package/types/components/layout-aside.d.ts +7 -1
  80. package/types/components/layout-body.d.ts +7 -1
  81. package/types/components/list.d.ts +24 -2
  82. package/types/components/menu.d.ts +6 -0
  83. package/types/components/table-plugins/extend-cell-area.d.ts +1 -1
  84. package/types/components/table.d.ts +27 -4
  85. package/types/components/tabs.d.ts +11 -0
  86. /package/es/icon/{iconfont.1791794439953.ttf → iconfont.1791880407207.ttf} +0 -0
  87. /package/es/icon/{iconfont.1791794439953.woff → iconfont.1791880407207.woff} +0 -0
  88. /package/es/icon/{iconfont.1791794439953.woff2 → iconfont.1791880407207.woff2} +0 -0
  89. /package/es/{iconfont.1791794439953.ttf → iconfont.1791880407207.ttf} +0 -0
  90. /package/es/{iconfont.1791794439953.woff → iconfont.1791880407207.woff} +0 -0
  91. /package/es/{iconfont.1791794439953.woff2 → iconfont.1791880407207.woff2} +0 -0
  92. /package/lib/icon/style/{iconfont.1791794439953.ttf → iconfont.1791880407207.ttf} +0 -0
  93. /package/lib/icon/style/{iconfont.1791794439953.woff → iconfont.1791880407207.woff} +0 -0
  94. /package/lib/icon/style/{iconfont.1791794439953.woff2 → iconfont.1791880407207.woff2} +0 -0
  95. /package/lib/{iconfont.1791794439953.ttf → iconfont.1791880407207.ttf} +0 -0
  96. /package/lib/{iconfont.1791794439953.woff → iconfont.1791880407207.woff} +0 -0
  97. /package/lib/{iconfont.1791794439953.woff2 → iconfont.1791880407207.woff2} +0 -0
@@ -14,7 +14,8 @@ var _utils = require("../../ui/src/utils");
14
14
  var _vn = require("../../ui/src/vn");
15
15
  var _log = require("../../ui/src/log");
16
16
  var _anime = require("../../ui/src/anime");
17
- var _util = require("./util");
17
+ var _util = require("../../scrollbar/src/util");
18
+ var _util2 = require("./util");
18
19
  var _loading = _interopRequireDefault(require("../../loading"));
19
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
21
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -60,6 +61,9 @@ function createReactData() {
60
61
  updateCheckboxFlag: 1,
61
62
  isAllChecked: false,
62
63
  isAllIndeterminate: false,
64
+ // 滚动条
65
+ yThumbHeight: 0,
66
+ xThumbWidth: 0,
63
67
  insertRowFlag: 1,
64
68
  removeRowFlag: 1,
65
69
  dragRow: null,
@@ -69,13 +73,18 @@ function createReactData() {
69
73
  }
70
74
  function createInternalData() {
71
75
  return {
72
- resizeObserver: undefined,
73
76
  fullData: [],
74
77
  afterList: [],
75
78
  fullKeyMaps: {},
76
79
  rowMaps: {},
77
- lastScrollLeft: 0,
80
+ // 滚动条
81
+ // resizeObserver: undefined,
82
+ // isThumbDrag: false,
83
+ thumbDragOffset: 0,
84
+ yThumbTop: 0,
85
+ xThumbLeft: 0,
78
86
  lastScrollTop: 0,
87
+ lastScrollLeft: 0,
79
88
  scrollYStore: {
80
89
  startIndex: 0,
81
90
  endIndex: 0,
@@ -139,7 +148,14 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
139
148
  dragConfig: Object,
140
149
  menuConfig: Object,
141
150
  virtualYConfig: Object,
142
- scrollY: Object
151
+ scrollY: Object,
152
+ useScrollbar: {
153
+ type: Boolean,
154
+ default: function _default() {
155
+ return (0, _ui.getConfig)().list.useScrollbar;
156
+ }
157
+ },
158
+ scrollbarConfig: Object
143
159
  },
144
160
  data: function data() {
145
161
  var xID = _xeUtils.default.uniqueId();
@@ -208,11 +224,19 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
208
224
  computeWrapperStyles: function computeWrapperStyles() {
209
225
  var $xeList = this;
210
226
  var rowHeight = $xeList.computeRowHeight;
211
- var style = {};
227
+ var scrollbarXOpts = $xeList.computeScrollbarXOpts;
228
+ var scrollbarYOpts = $xeList.computeScrollbarYOpts;
229
+ var stys = {};
212
230
  if (rowHeight) {
213
- style['--vxe-ui-list-row-height'] = (0, _dom.toCssUnit)(rowHeight);
231
+ stys['--vxe-ui-list-row-height'] = (0, _dom.toCssUnit)(rowHeight);
214
232
  }
215
- return style;
233
+ if (scrollbarYOpts.width) {
234
+ stys['--vxe-ui-scrollbar-y-width'] = (0, _dom.toCssUnit)(scrollbarYOpts.width);
235
+ }
236
+ if (scrollbarXOpts.height) {
237
+ stys['--vxe-ui-scrollbar-x-height'] = (0, _dom.toCssUnit)(scrollbarXOpts.height);
238
+ }
239
+ return stys;
216
240
  },
217
241
  computeVirtualStyles: function computeVirtualStyles() {
218
242
  var $xeList = this;
@@ -232,6 +256,50 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
232
256
  style.maxHeight = (0, _dom.toCssUnit)(Math.max(20, customMaxHeight - headHeight - footHeight));
233
257
  }
234
258
  return style;
259
+ },
260
+ computeScrollbarOpts: function computeScrollbarOpts() {
261
+ var $xeList = this;
262
+ var props = $xeList;
263
+ return Object.assign({}, (0, _ui.getConfig)().list.scrollbarConfig, props.scrollbarConfig);
264
+ },
265
+ computeScrollbarXOpts: function computeScrollbarXOpts() {
266
+ var $xeList = this;
267
+ var scrollbarOpts = $xeList.computeScrollbarOpts;
268
+ return Object.assign({}, (0, _ui.getConfig)().scrollbar.xConfig, scrollbarOpts.xConfig);
269
+ },
270
+ computeScrollbarYOpts: function computeScrollbarYOpts() {
271
+ var $xeList = this;
272
+ var scrollbarOpts = $xeList.computeScrollbarOpts;
273
+ return Object.assign({}, (0, _ui.getConfig)().scrollbar.yConfig, scrollbarOpts.yConfig);
274
+ },
275
+ computeScrollbarWrapperClss: function computeScrollbarWrapperClss() {
276
+ var $xeList = this;
277
+ var reactData = $xeList.reactData;
278
+ var scrollbarOpts = $xeList.computeScrollbarOpts;
279
+ var padding = scrollbarOpts.padding;
280
+ var yThumbHeight = reactData.yThumbHeight,
281
+ xThumbWidth = reactData.xThumbWidth;
282
+ var scrollbarXOpts = $xeList.computeScrollbarXOpts;
283
+ var scrollbarYOpts = $xeList.computeScrollbarYOpts;
284
+ var scrollbarXToTop = $xeList.computeScrollbarXToTop;
285
+ var scrollbarYToLeft = $xeList.computeScrollbarYToLeft;
286
+ return _ui.domUtils.buildClass(['vxe-scrollbar is--virtual', "ov-x--".concat(scrollbarXOpts.visible || 'visible'), "ov-y--".concat(scrollbarYOpts.visible || 'visible'), "sx-pos--".concat(scrollbarXToTop ? 'top' : 'bottom'), "sy-pos--".concat(scrollbarYToLeft ? 'left' : 'right')], {
287
+ 'is--padding': padding,
288
+ 'ov-x--auto-hide': scrollbarXOpts.autoHide,
289
+ 'ov-y--auto-hide': scrollbarYOpts.autoHide,
290
+ 'overflow-y': yThumbHeight,
291
+ 'overflow-x': xThumbWidth
292
+ });
293
+ },
294
+ computeScrollbarXToTop: function computeScrollbarXToTop() {
295
+ var $xeList = this;
296
+ var scrollbarXOpts = $xeList.computeScrollbarXOpts;
297
+ return scrollbarXOpts.position === 'top';
298
+ },
299
+ computeScrollbarYToLeft: function computeScrollbarYToLeft() {
300
+ var $xeList = this;
301
+ var scrollbarYOpts = $xeList.computeScrollbarYOpts;
302
+ return scrollbarYOpts.position === 'left';
235
303
  }
236
304
  }),
237
305
  methods: {
@@ -570,6 +638,11 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
570
638
  }
571
639
  });
572
640
  },
641
+ updateScrollbar: function updateScrollbar() {
642
+ var $xeList = this;
643
+ $xeList.updateThumbSize();
644
+ $xeList.updateThumbOffset();
645
+ },
573
646
  /**
574
647
  * 重新计算列表
575
648
  */
@@ -580,11 +653,16 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
580
653
  if (el) {
581
654
  var parentEl = el.parentElement;
582
655
  var parentHeight = 0;
656
+ // 如果是虚拟滚动条
657
+ if (parentEl && (0, _dom.hasClass)(parentEl, 'vxe-scrollbar--view-inner')) {
658
+ parentEl = parentEl.parentElement;
659
+ }
583
660
  if (parentEl) {
584
661
  var parentStyle = getComputedStyle(parentEl);
585
662
  parentHeight = parentEl.clientHeight - Math.ceil(_xeUtils.default.toNumber(parentStyle.paddingLeft) + _xeUtils.default.toNumber(parentStyle.paddingRight));
586
663
  }
587
664
  reactData.parentHeight = parentHeight;
665
+ $xeList.updateScrollbar();
588
666
  $xeList.updateHeight();
589
667
  if (el.clientWidth && el.clientHeight) {
590
668
  return $xeList.computeScrollLoad();
@@ -623,6 +701,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
623
701
  var scrollLeft = scrollBodyElem.scrollLeft;
624
702
  var isX = scrollLeft !== internalData.lastScrollLeft;
625
703
  var isY = scrollTop !== internalData.lastScrollTop;
704
+ $xeList.updateThumbOffset();
626
705
  internalData.lastScrollTop = scrollTop;
627
706
  internalData.lastScrollLeft = scrollLeft;
628
707
  if (reactData.scrollYLoad) {
@@ -1513,7 +1592,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1513
1592
  var funcName = isAppend ? 'push' : 'unshift';
1514
1593
  newRecords.forEach(function (item) {
1515
1594
  var rowid = getRowIdByField(item, keyField);
1516
- var rowRest = (0, _util.getItemCacheObj)(item);
1595
+ var rowRest = (0, _util2.getItemCacheObj)(item);
1517
1596
  fullData[funcName](item);
1518
1597
  rowMaps[rowid] = rowRest;
1519
1598
  });
@@ -1565,7 +1644,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1565
1644
  if (rowIndex > -1) {
1566
1645
  newRecords.forEach(function (item) {
1567
1646
  var rowid = getRowIdByField(item, keyField);
1568
- var rowRest = (0, _util.getItemCacheObj)(item);
1647
+ var rowRest = (0, _util2.getItemCacheObj)(item);
1569
1648
  rowMaps[rowid] = rowRest;
1570
1649
  });
1571
1650
  var targetIndex = rowIndex;
@@ -1982,6 +2061,189 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
1982
2061
  row: row
1983
2062
  }, evnt);
1984
2063
  },
2064
+ // 滚动条
2065
+ updateThumbSize: function updateThumbSize() {
2066
+ var $xeList = this;
2067
+ var reactData = $xeList.reactData;
2068
+ var viewEl = $xeList.$refs.refVirtualWrapper;
2069
+ if (!viewEl) {
2070
+ return;
2071
+ }
2072
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
2073
+ return;
2074
+ }
2075
+ var trackXEl = $xeList.$refs.refTrackXElem;
2076
+ var xThumbWidth = trackXEl ? (0, _util.getThumbSize)(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
2077
+ var thumbXElem = $xeList.$refs.refThumbXElem;
2078
+ if (thumbXElem) {
2079
+ thumbXElem.style.width = xThumbWidth + 'px';
2080
+ }
2081
+ reactData.xThumbWidth = xThumbWidth;
2082
+ var trackYEl = $xeList.$refs.refTrackYElem;
2083
+ var yThumbHeight = trackYEl ? (0, _util.getThumbSize)(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
2084
+ var thumbYElem = $xeList.$refs.refThumbYElem;
2085
+ if (thumbYElem) {
2086
+ thumbYElem.style.height = yThumbHeight + 'px';
2087
+ }
2088
+ reactData.yThumbHeight = yThumbHeight;
2089
+ },
2090
+ updateThumbOffset: function updateThumbOffset() {
2091
+ var $xeList = this;
2092
+ var reactData = $xeList.reactData;
2093
+ var internalData = $xeList.internalData;
2094
+ var viewEl = $xeList.$refs.refVirtualWrapper;
2095
+ if (!viewEl) {
2096
+ return;
2097
+ }
2098
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
2099
+ return;
2100
+ }
2101
+ var xThumbWidth = reactData.xThumbWidth,
2102
+ yThumbHeight = reactData.yThumbHeight;
2103
+ var trackXEl = $xeList.$refs.refTrackXElem;
2104
+ var thumbXElem = $xeList.$refs.refThumbXElem;
2105
+ var xThumbLeft = trackXEl && xThumbWidth ? (0, _util.getThumbOffsetSize)(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
2106
+ internalData.xThumbLeft = xThumbLeft;
2107
+ if (thumbXElem && xThumbWidth) {
2108
+ thumbXElem.style.width = xThumbWidth + 'px';
2109
+ thumbXElem.style.transform = "translateX(".concat(xThumbLeft, "px)");
2110
+ }
2111
+ var trackYEl = $xeList.$refs.refTrackYElem;
2112
+ var thumbYElem = $xeList.$refs.refThumbYElem;
2113
+ var yThumbTop = trackYEl && yThumbHeight ? (0, _util.getThumbOffsetSize)(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
2114
+ internalData.yThumbTop = yThumbTop;
2115
+ if (thumbYElem && yThumbHeight) {
2116
+ thumbYElem.style.height = yThumbHeight + 'px';
2117
+ thumbYElem.style.transform = "translateY(".concat(yThumbTop, "px)");
2118
+ }
2119
+ },
2120
+ clickTrackXEvent: function clickTrackXEvent(evnt) {
2121
+ var $xeList = this;
2122
+ var reactData = $xeList.reactData;
2123
+ var trackEl = evnt.currentTarget;
2124
+ if (trackEl !== evnt.target) {
2125
+ return;
2126
+ }
2127
+ var viewEl = $xeList.$refs.refVirtualWrapper;
2128
+ if (!viewEl) {
2129
+ return;
2130
+ }
2131
+ var xThumbWidth = reactData.xThumbWidth;
2132
+ var trackRect = trackEl.getBoundingClientRect();
2133
+ viewEl.scrollTo({
2134
+ left: (0, _util.getScrollFromClick)(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
2135
+ behavior: 'auto'
2136
+ });
2137
+ },
2138
+ clickTrackYEvent: function clickTrackYEvent(evnt) {
2139
+ var $xeList = this;
2140
+ var reactData = $xeList.reactData;
2141
+ var trackEl = evnt.currentTarget;
2142
+ if (trackEl !== evnt.target) {
2143
+ return;
2144
+ }
2145
+ var viewEl = $xeList.$refs.refVirtualWrapper;
2146
+ if (!viewEl) {
2147
+ return;
2148
+ }
2149
+ var yThumbHeight = reactData.yThumbHeight;
2150
+ var trackRect = trackEl.getBoundingClientRect();
2151
+ viewEl.scrollTo({
2152
+ top: (0, _util.getScrollFromClick)(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
2153
+ behavior: 'auto'
2154
+ });
2155
+ },
2156
+ pointerdownThumbXEvent: function pointerdownThumbXEvent(evnt) {
2157
+ var $xeList = this;
2158
+ var reactData = $xeList.reactData;
2159
+ var internalData = $xeList.internalData;
2160
+ var thumbEl = evnt.currentTarget;
2161
+ internalData.isThumbDrag = true;
2162
+ thumbEl.setPointerCapture(evnt.pointerId);
2163
+ var viewEl = $xeList.$refs.refVirtualWrapper;
2164
+ if (!viewEl) {
2165
+ return;
2166
+ }
2167
+ var xThumbWidth = reactData.xThumbWidth;
2168
+ var trackEl = thumbEl.parentElement;
2169
+ var trackRect = trackEl.getBoundingClientRect();
2170
+ var pointerPosition = evnt.clientX - trackRect.left;
2171
+ // 记录 thumb 的偏移
2172
+ var thumbOffset = (0, _util.getThumbOffsetSize)(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
2173
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
2174
+ },
2175
+ pointermoveThumbXEvent: function pointermoveThumbXEvent(evnt) {
2176
+ var $xeList = this;
2177
+ var reactData = $xeList.reactData;
2178
+ var internalData = $xeList.internalData;
2179
+ var thumbEl = evnt.currentTarget;
2180
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
2181
+ return;
2182
+ }
2183
+ var isThumbDrag = internalData.isThumbDrag,
2184
+ thumbDragOffset = internalData.thumbDragOffset;
2185
+ if (isThumbDrag) {
2186
+ var viewEl = $xeList.$refs.refVirtualWrapper;
2187
+ if (!viewEl) {
2188
+ return;
2189
+ }
2190
+ var xThumbWidth = reactData.xThumbWidth;
2191
+ var _thumbEl = evnt.currentTarget;
2192
+ var trackEl = _thumbEl.parentElement;
2193
+ var trackRect = trackEl.getBoundingClientRect();
2194
+ // 更新偏移
2195
+ viewEl.scrollLeft = (0, _util.getScrollFromDrag)(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
2196
+ }
2197
+ },
2198
+ cleatPointerThumbEvent: function cleatPointerThumbEvent(evnt) {
2199
+ var $xeList = this;
2200
+ var internalData = $xeList.internalData;
2201
+ var thumbEl = evnt.currentTarget;
2202
+ thumbEl.releasePointerCapture(evnt.pointerId);
2203
+ internalData.isThumbDrag = false;
2204
+ },
2205
+ pointerdownThumbYEvent: function pointerdownThumbYEvent(evnt) {
2206
+ var $xeList = this;
2207
+ var reactData = $xeList.reactData;
2208
+ var internalData = $xeList.internalData;
2209
+ var thumbEl = evnt.currentTarget;
2210
+ internalData.isThumbDrag = true;
2211
+ thumbEl.setPointerCapture(evnt.pointerId);
2212
+ var viewEl = $xeList.$refs.refVirtualWrapper;
2213
+ if (!viewEl) {
2214
+ return;
2215
+ }
2216
+ var yThumbHeight = reactData.yThumbHeight;
2217
+ var trackEl = thumbEl.parentElement;
2218
+ var trackRect = trackEl.getBoundingClientRect();
2219
+ var pointerPosition = evnt.clientY - trackRect.top;
2220
+ // 记录 thumb 的偏移
2221
+ var thumbOffset = (0, _util.getThumbOffsetSize)(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
2222
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
2223
+ },
2224
+ pointermoveThumbYEvent: function pointermoveThumbYEvent(evnt) {
2225
+ var $xeList = this;
2226
+ var reactData = $xeList.reactData;
2227
+ var internalData = $xeList.internalData;
2228
+ var thumbEl = evnt.currentTarget;
2229
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
2230
+ return;
2231
+ }
2232
+ var isThumbDrag = internalData.isThumbDrag,
2233
+ thumbDragOffset = internalData.thumbDragOffset;
2234
+ if (isThumbDrag) {
2235
+ var viewEl = $xeList.$refs.refVirtualWrapper;
2236
+ if (!viewEl) {
2237
+ return;
2238
+ }
2239
+ var yThumbHeight = reactData.yThumbHeight;
2240
+ var _thumbEl2 = evnt.currentTarget;
2241
+ var trackEl = _thumbEl2.parentElement;
2242
+ var trackRect = trackEl.getBoundingClientRect();
2243
+ // 更新偏移
2244
+ viewEl.scrollTop = (0, _util.getScrollFromDrag)(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
2245
+ }
2246
+ },
1985
2247
  //
1986
2248
  // Render
1987
2249
  //
@@ -2218,7 +2480,8 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
2218
2480
  var slots = $xeList.$scopedSlots;
2219
2481
  var showCheckbox = props.showCheckbox,
2220
2482
  className = props.className,
2221
- loading = props.loading;
2483
+ loading = props.loading,
2484
+ useScrollbar = props.useScrollbar;
2222
2485
  var bodyHeight = reactData.bodyHeight,
2223
2486
  topSpaceHeight = reactData.topSpaceHeight,
2224
2487
  rowList = reactData.rowList,
@@ -2238,6 +2501,10 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
2238
2501
  var rowOpts = $xeList.computeRowOpts;
2239
2502
  var isHover = rowOpts.isHover,
2240
2503
  padding = rowOpts.padding;
2504
+ var isDrag = $xeList.computeIsDrag;
2505
+ var scrollbarXOpts = $xeList.computeScrollbarXOpts;
2506
+ var scrollbarYOpts = $xeList.computeScrollbarYOpts;
2507
+ var scrollbarWrapperClss = $xeList.computeScrollbarWrapperClss;
2241
2508
  var showDefChekboxHead = showCheckbox && checkboxOpts.showHeader !== false;
2242
2509
  var leOns = {};
2243
2510
  if (isCrossListDrag && !rowList.length) {
@@ -2247,7 +2514,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
2247
2514
  ref: 'refElem',
2248
2515
  class: ['vxe-list', className ? _xeUtils.default.isFunction(className) ? className({
2249
2516
  $list: $xeList
2250
- }) : className : '', _defineProperty(_defineProperty({}, "size--".concat(vSize), vSize), 'is--loading', loading)],
2517
+ }) : className : '', _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "size--".concat(vSize), vSize), 'is--virtual-scrollbar', useScrollbar), 'ov-x--auto-hide', useScrollbar && scrollbarXOpts.autoHide), 'ov-y--auto-hide', useScrollbar && scrollbarYOpts.autoHide), 'is--drag', isDrag), 'is--loading', loading)],
2251
2518
  on: leOns,
2252
2519
  style: wrapperStyles
2253
2520
  }, [headerSlot || showDefChekboxHead ? h('div', {
@@ -2294,18 +2561,65 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
2294
2561
  style: {
2295
2562
  marginTop: topSpaceHeight ? "".concat(topSpaceHeight, "px") : ''
2296
2563
  }
2564
+ }, useScrollbar ? defaultSlot ? defaultSlot({
2565
+ items: rowList,
2566
+ $list: $xeList
2567
+ }) : rowList.map(function (row, i) {
2568
+ return $xeList.renderRow(h, row, i);
2569
+ }) : [h('div', {
2570
+ key: 'vi',
2571
+ ref: 'refViewInnerElem',
2572
+ class: 'vxe-scrollbar--view-inner'
2297
2573
  }, defaultSlot ? defaultSlot({
2298
2574
  items: rowList,
2299
2575
  $list: $xeList
2300
2576
  }) : rowList.map(function (row, i) {
2301
2577
  return $xeList.renderRow(h, row, i);
2302
- }))]), footerSlot ? h('div', {
2578
+ }))])]), footerSlot ? h('div', {
2303
2579
  ref: 'refFooterElem',
2304
2580
  class: 'vxe-list--footer-wrapper'
2305
2581
  }, footerSlot({
2306
2582
  items: rowList,
2307
2583
  $list: $xeList
2308
2584
  })) : (0, _ui.renderEmptyElement)($xeList),
2585
+ /**
2586
+ * 滚动条
2587
+ */
2588
+ useScrollbar ? h('div', {
2589
+ class: scrollbarWrapperClss
2590
+ }, [scrollbarXOpts.visible === 'hidden' ? (0, _ui.renderEmptyElement)($xeList) : h('div', {
2591
+ ref: 'refTrackXElem',
2592
+ class: 'vxe-scrollbar--track-x',
2593
+ on: {
2594
+ click: $xeList.clickTrackXEvent
2595
+ }
2596
+ }, [h('div', {
2597
+ ref: 'refThumbXElem',
2598
+ class: 'vxe-scrollbar--thumb-x',
2599
+ on: {
2600
+ pointerdown: $xeList.pointerdownThumbXEvent,
2601
+ pointermove: $xeList.pointermoveThumbXEvent,
2602
+ pointerup: $xeList.cleatPointerThumbEvent,
2603
+ pointercancel: $xeList.cleatPointerThumbEvent,
2604
+ lostpointercapture: $xeList.cleatPointerThumbEvent
2605
+ }
2606
+ })]), scrollbarYOpts.visible === 'hidden' ? (0, _ui.renderEmptyElement)($xeList) : h('div', {
2607
+ ref: 'refTrackYElem',
2608
+ class: 'vxe-scrollbar--track-y',
2609
+ on: {
2610
+ click: $xeList.clickTrackYEvent
2611
+ }
2612
+ }, [h('div', {
2613
+ ref: 'refThumbYElem',
2614
+ class: 'vxe-scrollbar--thumb-y',
2615
+ on: {
2616
+ pointerdown: $xeList.pointerdownThumbYEvent,
2617
+ pointermove: $xeList.pointermoveThumbYEvent,
2618
+ pointerup: $xeList.cleatPointerThumbEvent,
2619
+ pointercancel: $xeList.cleatPointerThumbEvent,
2620
+ lostpointercapture: $xeList.cleatPointerThumbEvent
2621
+ }
2622
+ })])]) : (0, _ui.renderEmptyElement)($xeList),
2309
2623
  /**
2310
2624
  * 拖拽提示
2311
2625
  */
@@ -2371,7 +2685,9 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
2371
2685
  var internalData = $xeList.internalData;
2372
2686
  var showSeq = props.showSeq,
2373
2687
  showRadio = props.showRadio,
2374
- showCheckbox = props.showCheckbox;
2688
+ showCheckbox = props.showCheckbox,
2689
+ autoResize = props.autoResize,
2690
+ useScrollbar = props.useScrollbar;
2375
2691
  var rowOpts = $xeList.computeRowOpts;
2376
2692
  var useKey = rowOpts.useKey,
2377
2693
  keyField = rowOpts.keyField;
@@ -2393,24 +2709,32 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
2393
2709
  if (useKey && !keyField) {
2394
2710
  errLog('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField']);
2395
2711
  }
2396
- if (props.autoResize) {
2712
+ if (useScrollbar || autoResize) {
2397
2713
  var el = $xeList.$refs.refElem;
2714
+ var viewInnerEl = $xeList.$refs.refViewInnerElem;
2398
2715
  var resizeObserver = _ui.globalResize.create(function () {
2399
- return $xeList.recalculate();
2716
+ $xeList.reFlag++;
2400
2717
  });
2401
2718
  resizeObserver.observe(el);
2402
- if (el) {
2403
- resizeObserver.observe(el.parentElement);
2719
+ if (autoResize) {
2720
+ if (el) {
2721
+ resizeObserver.observe(el.parentElement);
2722
+ }
2723
+ }
2724
+ if (viewInnerEl) {
2725
+ resizeObserver.observe(viewInnerEl);
2404
2726
  }
2405
2727
  internalData.resizeObserver = resizeObserver;
2406
2728
  }
2407
- $xeList.recalculate();
2408
- _ui.globalEvents.on($xeList, 'resize', $xeList.recalculate);
2729
+ $xeList.reFlag++;
2730
+ _ui.globalEvents.on($xeList, 'resize', function () {
2731
+ $xeList.reFlag++;
2732
+ });
2409
2733
  },
2410
2734
  activated: function activated() {
2411
2735
  var $xeList = this;
2412
2736
  $xeList.recalculate().then(function () {
2413
- return $xeList.refreshScroll();
2737
+ $xeList.refreshScroll();
2414
2738
  });
2415
2739
  },
2416
2740
  beforeDestroy: function beforeDestroy() {