vxe-pc-ui 4.19.8 → 4.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 (60) hide show
  1. package/dist/all.esm.js +318 -19
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/icon/style.css +1 -1
  5. package/es/list/src/list.js +317 -17
  6. package/es/list/style.css +26 -0
  7. package/es/list/style.min.css +1 -1
  8. package/es/scrollbar/style.css +1 -0
  9. package/es/style.css +1 -1
  10. package/es/style.min.css +1 -1
  11. package/es/ui/index.js +1 -1
  12. package/es/ui/src/log.js +1 -1
  13. package/es/ui/src/utils.js +9 -0
  14. package/es/vxe-list/style.css +26 -0
  15. package/es/vxe-list/style.min.css +1 -1
  16. package/es/vxe-scrollbar/style.css +1 -0
  17. package/lib/icon/style/style.css +1 -1
  18. package/lib/icon/style/style.min.css +1 -1
  19. package/lib/index.umd.js +336 -18
  20. package/lib/index.umd.min.js +1 -1
  21. package/lib/list/src/list.js +328 -19
  22. package/lib/list/src/list.min.js +1 -1
  23. package/lib/list/style/style.css +26 -0
  24. package/lib/list/style/style.min.css +1 -1
  25. package/lib/scrollbar/style/style.css +1 -0
  26. package/lib/style.css +1 -1
  27. package/lib/style.min.css +1 -1
  28. package/lib/ui/index.js +1 -1
  29. package/lib/ui/index.min.js +1 -1
  30. package/lib/ui/src/log.js +1 -1
  31. package/lib/ui/src/log.min.js +1 -1
  32. package/lib/ui/src/utils.js +10 -0
  33. package/lib/ui/src/utils.min.js +1 -1
  34. package/lib/vxe-list/style/style.css +26 -0
  35. package/lib/vxe-list/style/style.min.css +1 -1
  36. package/lib/vxe-scrollbar/style/style.css +1 -0
  37. package/package.json +1 -1
  38. package/packages/list/src/list.ts +345 -17
  39. package/packages/ui/src/utils.ts +10 -0
  40. package/styles/components/list.scss +51 -0
  41. package/styles/components/scrollbar.scss +3 -0
  42. package/types/components/card.d.ts +1 -1
  43. package/types/components/layout-aside.d.ts +1 -1
  44. package/types/components/layout-body.d.ts +1 -1
  45. package/types/components/list.d.ts +24 -2
  46. package/types/components/table-plugins/extend-cell-area.d.ts +1 -1
  47. package/types/components/table.d.ts +24 -0
  48. package/types/components/tabs.d.ts +1 -1
  49. /package/es/icon/{iconfont.1791862962954.ttf → iconfont.1791880413927.ttf} +0 -0
  50. /package/es/icon/{iconfont.1791862962954.woff → iconfont.1791880413927.woff} +0 -0
  51. /package/es/icon/{iconfont.1791862962954.woff2 → iconfont.1791880413927.woff2} +0 -0
  52. /package/es/{iconfont.1791862962954.ttf → iconfont.1791880413927.ttf} +0 -0
  53. /package/es/{iconfont.1791862962954.woff → iconfont.1791880413927.woff} +0 -0
  54. /package/es/{iconfont.1791862962954.woff2 → iconfont.1791880413927.woff2} +0 -0
  55. /package/lib/icon/style/{iconfont.1791862962954.ttf → iconfont.1791880413927.ttf} +0 -0
  56. /package/lib/icon/style/{iconfont.1791862962954.woff → iconfont.1791880413927.woff} +0 -0
  57. /package/lib/icon/style/{iconfont.1791862962954.woff2 → iconfont.1791880413927.woff2} +0 -0
  58. /package/lib/{iconfont.1791862962954.ttf → iconfont.1791880413927.ttf} +0 -0
  59. /package/lib/{iconfont.1791862962954.woff → iconfont.1791880413927.woff} +0 -0
  60. /package/lib/{iconfont.1791862962954.woff2 → iconfont.1791880413927.woff2} +0 -0
package/lib/index.umd.js CHANGED
@@ -4745,7 +4745,7 @@ function checkDynamic() {
4745
4745
  const {
4746
4746
  log: log_log
4747
4747
  } = VxeUI;
4748
- const uiVersion = `ui v${"4.19.8"}`;
4748
+ const uiVersion = `ui v${"4.20.0"}`;
4749
4749
  function createComponentLog(name) {
4750
4750
  const tableVersion = VxeUI.tableVersion ? `table v${VxeUI.tableVersion}` : '';
4751
4751
  const ganttVersion = VxeUI.ganttVersion ? `gantt v${VxeUI.ganttVersion}` : '';
@@ -4763,7 +4763,7 @@ const errLog = log_log.create('error', uiVersion);
4763
4763
 
4764
4764
 
4765
4765
 
4766
- const ui_version = "4.19.8";
4766
+ const ui_version = "4.20.0";
4767
4767
  VxeUI.uiVersion = ui_version;
4768
4768
  VxeUI.dynamicApp = dynamicApp;
4769
4769
  function config(options) {
@@ -7412,6 +7412,15 @@ const Avatar = VxeAvatar;
7412
7412
  function isEnableConf(conf) {
7413
7413
  return conf && conf.enabled !== false;
7414
7414
  }
7415
+ /**
7416
+ * 用于开关类型的配置项
7417
+ * 局部启用规则:conf={}
7418
+ * 局部禁用规则:conf={enabled:false}
7419
+ * 全局默认启用规则:conf.enabled=true
7420
+ */
7421
+ function hasEnableConf(conf, opts) {
7422
+ return opts && (conf ? opts.enabled !== false : opts.enabled);
7423
+ }
7415
7424
  function nextZIndex() {
7416
7425
  return index_esm.getNext();
7417
7426
  }
@@ -13153,6 +13162,7 @@ function getItemCacheObj(item) {
13153
13162
 
13154
13163
 
13155
13164
 
13165
+
13156
13166
  const {
13157
13167
  warnLog: list_warnLog,
13158
13168
  errLog: list_errLog
@@ -13183,6 +13193,9 @@ function list_createReactData() {
13183
13193
  updateCheckboxFlag: 1,
13184
13194
  isAllChecked: false,
13185
13195
  isAllIndeterminate: false,
13196
+ // 滚动条
13197
+ yThumbHeight: 0,
13198
+ xThumbWidth: 0,
13186
13199
  insertRowFlag: 1,
13187
13200
  removeRowFlag: 1,
13188
13201
  dragRow: null,
@@ -13192,13 +13205,18 @@ function list_createReactData() {
13192
13205
  }
13193
13206
  function list_createInternalData() {
13194
13207
  return {
13195
- resizeObserver: undefined,
13196
13208
  fullData: [],
13197
13209
  afterList: [],
13198
13210
  fullKeyMaps: {},
13199
13211
  rowMaps: {},
13200
- lastScrollLeft: 0,
13212
+ // 滚动条
13213
+ // resizeObserver: undefined,
13214
+ // isThumbDrag: false,
13215
+ thumbDragOffset: 0,
13216
+ yThumbTop: 0,
13217
+ xThumbLeft: 0,
13201
13218
  lastScrollTop: 0,
13219
+ lastScrollLeft: 0,
13202
13220
  scrollYStore: {
13203
13221
  startIndex: 0,
13204
13222
  endIndex: 0,
@@ -13252,7 +13270,12 @@ let crossListDragRowObj = null;
13252
13270
  dragConfig: Object,
13253
13271
  menuConfig: Object,
13254
13272
  virtualYConfig: Object,
13255
- scrollY: Object
13273
+ scrollY: Object,
13274
+ useScrollbar: {
13275
+ type: Boolean,
13276
+ default: () => getConfig().list.useScrollbar
13277
+ },
13278
+ scrollbarConfig: Object
13256
13279
  },
13257
13280
  emits: ['update:checkRowKey', 'update:checkRowKeys', 'row-click', 'row-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'checkbox-all', 'scroll', 'row-dragstart', 'row-dragover', 'row-dragend', 'row-remove-dragend', 'row-insert-dragend', 'row-menu', 'menu-click'],
13258
13281
  setup(props, context) {
@@ -13273,6 +13296,11 @@ let crossListDragRowObj = null;
13273
13296
  const refFooterElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
13274
13297
  const refVirtualWrapper = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
13275
13298
  const refVirtualBody = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
13299
+ const refViewInnerElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
13300
+ const refTrackXElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
13301
+ const refTrackYElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
13302
+ const refThumbXElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
13303
+ const refThumbYElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
13276
13304
  const refDragRowLineElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
13277
13305
  const refDragTipElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
13278
13306
  const refMaps = {
@@ -13331,11 +13359,19 @@ let crossListDragRowObj = null;
13331
13359
  });
13332
13360
  const computeWrapperStyles = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
13333
13361
  const rowHeight = computeRowHeight.value;
13334
- const style = {};
13362
+ const scrollbarXOpts = computeScrollbarXOpts.value;
13363
+ const scrollbarYOpts = computeScrollbarYOpts.value;
13364
+ const stys = {};
13335
13365
  if (rowHeight) {
13336
- style['--vxe-ui-list-row-height'] = toCssUnit(rowHeight);
13366
+ stys['--vxe-ui-list-row-height'] = toCssUnit(rowHeight);
13337
13367
  }
13338
- return style;
13368
+ if (scrollbarYOpts.width) {
13369
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(scrollbarYOpts.width);
13370
+ }
13371
+ if (scrollbarXOpts.height) {
13372
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(scrollbarXOpts.height);
13373
+ }
13374
+ return stys;
13339
13375
  });
13340
13376
  const computeVirtualStyles = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
13341
13377
  const {
@@ -13357,6 +13393,46 @@ let crossListDragRowObj = null;
13357
13393
  }
13358
13394
  return style;
13359
13395
  });
13396
+ const computeScrollbarOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
13397
+ return Object.assign({}, getConfig().list.scrollbarConfig, props.scrollbarConfig);
13398
+ });
13399
+ const computeScrollbarXOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
13400
+ const scrollbarOpts = computeScrollbarOpts.value;
13401
+ return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig);
13402
+ });
13403
+ const computeScrollbarYOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
13404
+ const scrollbarOpts = computeScrollbarOpts.value;
13405
+ return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
13406
+ });
13407
+ const computeScrollbarWrapperClss = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
13408
+ const scrollbarOpts = computeScrollbarOpts.value;
13409
+ const {
13410
+ padding
13411
+ } = scrollbarOpts;
13412
+ const {
13413
+ yThumbHeight,
13414
+ xThumbWidth
13415
+ } = reactData;
13416
+ const scrollbarXOpts = computeScrollbarXOpts.value;
13417
+ const scrollbarYOpts = computeScrollbarYOpts.value;
13418
+ const scrollbarXToTop = computeScrollbarXToTop.value;
13419
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
13420
+ return domUtils.buildClass(['vxe-scrollbar is--virtual', `ov-x--${scrollbarXOpts.visible || 'visible'}`, `ov-y--${scrollbarYOpts.visible || 'visible'}`, `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`], {
13421
+ 'is--padding': padding,
13422
+ 'ov-x--auto-hide': scrollbarXOpts.autoHide,
13423
+ 'ov-y--auto-hide': scrollbarYOpts.autoHide,
13424
+ 'overflow-y': yThumbHeight,
13425
+ 'overflow-x': xThumbWidth
13426
+ });
13427
+ });
13428
+ const computeScrollbarXToTop = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
13429
+ const scrollbarXOpts = computeScrollbarXOpts.value;
13430
+ return scrollbarXOpts.position === 'top';
13431
+ });
13432
+ const computeScrollbarYToLeft = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
13433
+ const scrollbarYOpts = computeScrollbarYOpts.value;
13434
+ return scrollbarYOpts.position === 'left';
13435
+ });
13360
13436
  const dispatchEvent = (type, params, evnt) => {
13361
13437
  emit(type, createEvent(evnt, {
13362
13438
  $list: $xeList
@@ -13534,6 +13610,7 @@ let crossListDragRowObj = null;
13534
13610
  lastScrollLeft,
13535
13611
  lastScrollTop
13536
13612
  } = internalData;
13613
+ updateScrollbar();
13537
13614
  return clearScroll().then(() => {
13538
13615
  if (lastScrollLeft || lastScrollTop) {
13539
13616
  internalData.lastScrollLeft = 0;
@@ -13542,6 +13619,10 @@ let crossListDragRowObj = null;
13542
13619
  }
13543
13620
  });
13544
13621
  };
13622
+ const updateScrollbar = () => {
13623
+ updateThumbSize();
13624
+ updateThumbOffset();
13625
+ };
13545
13626
  /**
13546
13627
  * 重新计算列表
13547
13628
  */
@@ -13559,6 +13640,7 @@ let crossListDragRowObj = null;
13559
13640
  parentHeight = parentEl.clientHeight - Math.ceil(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(parentStyle.paddingLeft) + external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(parentStyle.paddingRight));
13560
13641
  }
13561
13642
  reactData.parentHeight = parentHeight;
13643
+ updateScrollbar();
13562
13644
  updateHeight();
13563
13645
  if (el.clientWidth && el.clientHeight) {
13564
13646
  return computeScrollLoad();
@@ -13596,6 +13678,7 @@ let crossListDragRowObj = null;
13596
13678
  const scrollLeft = scrollBodyElem.scrollLeft;
13597
13679
  const isX = scrollLeft !== internalData.lastScrollLeft;
13598
13680
  const isY = scrollTop !== internalData.lastScrollTop;
13681
+ updateThumbOffset();
13599
13682
  internalData.lastScrollTop = scrollTop;
13600
13683
  internalData.lastScrollLeft = scrollLeft;
13601
13684
  if (reactData.scrollYLoad) {
@@ -15102,6 +15185,183 @@ let crossListDragRowObj = null;
15102
15185
  hideDropTip();
15103
15186
  }
15104
15187
  };
15188
+ const updateThumbSize = () => {
15189
+ const viewEl = refVirtualWrapper.value;
15190
+ if (!viewEl) {
15191
+ return;
15192
+ }
15193
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
15194
+ return;
15195
+ }
15196
+ const trackXEl = refTrackXElem.value;
15197
+ const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
15198
+ const thumbXElem = refThumbXElem.value;
15199
+ if (thumbXElem) {
15200
+ thumbXElem.style.width = xThumbWidth + 'px';
15201
+ }
15202
+ reactData.xThumbWidth = xThumbWidth;
15203
+ const trackYEl = refTrackYElem.value;
15204
+ const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
15205
+ const thumbYElem = refThumbYElem.value;
15206
+ if (thumbYElem) {
15207
+ thumbYElem.style.height = yThumbHeight + 'px';
15208
+ }
15209
+ reactData.yThumbHeight = yThumbHeight;
15210
+ };
15211
+ const updateThumbOffset = () => {
15212
+ const viewEl = refVirtualWrapper.value;
15213
+ if (!viewEl) {
15214
+ return;
15215
+ }
15216
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
15217
+ return;
15218
+ }
15219
+ const {
15220
+ xThumbWidth,
15221
+ yThumbHeight
15222
+ } = reactData;
15223
+ const trackXEl = refTrackXElem.value;
15224
+ const thumbXElem = refThumbXElem.value;
15225
+ const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
15226
+ internalData.xThumbLeft = xThumbLeft;
15227
+ if (thumbXElem && xThumbWidth) {
15228
+ thumbXElem.style.width = xThumbWidth + 'px';
15229
+ thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
15230
+ }
15231
+ const trackYEl = refTrackYElem.value;
15232
+ const thumbYElem = refThumbYElem.value;
15233
+ const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
15234
+ internalData.yThumbTop = yThumbTop;
15235
+ if (thumbYElem && yThumbHeight) {
15236
+ thumbYElem.style.height = yThumbHeight + 'px';
15237
+ thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
15238
+ }
15239
+ };
15240
+ const clickTrackXEvent = evnt => {
15241
+ const trackEl = evnt.currentTarget;
15242
+ if (trackEl !== evnt.target) {
15243
+ return;
15244
+ }
15245
+ const viewEl = refVirtualWrapper.value;
15246
+ if (!viewEl) {
15247
+ return;
15248
+ }
15249
+ const {
15250
+ xThumbWidth
15251
+ } = reactData;
15252
+ const trackRect = trackEl.getBoundingClientRect();
15253
+ viewEl.scrollTo({
15254
+ left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
15255
+ behavior: 'auto'
15256
+ });
15257
+ };
15258
+ const clickTrackYEvent = evnt => {
15259
+ const trackEl = evnt.currentTarget;
15260
+ if (trackEl !== evnt.target) {
15261
+ return;
15262
+ }
15263
+ const viewEl = refVirtualWrapper.value;
15264
+ if (!viewEl) {
15265
+ return;
15266
+ }
15267
+ const {
15268
+ yThumbHeight
15269
+ } = reactData;
15270
+ const trackRect = trackEl.getBoundingClientRect();
15271
+ viewEl.scrollTo({
15272
+ top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
15273
+ behavior: 'auto'
15274
+ });
15275
+ };
15276
+ const pointerdownThumbXEvent = evnt => {
15277
+ const thumbEl = evnt.currentTarget;
15278
+ internalData.isThumbDrag = true;
15279
+ thumbEl.setPointerCapture(evnt.pointerId);
15280
+ const viewEl = refVirtualWrapper.value;
15281
+ if (!viewEl) {
15282
+ return;
15283
+ }
15284
+ const {
15285
+ xThumbWidth
15286
+ } = reactData;
15287
+ const trackEl = thumbEl.parentElement;
15288
+ const trackRect = trackEl.getBoundingClientRect();
15289
+ const pointerPosition = evnt.clientX - trackRect.left;
15290
+ // 记录 thumb 的偏移
15291
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
15292
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
15293
+ };
15294
+ const pointermoveThumbXEvent = evnt => {
15295
+ const thumbEl = evnt.currentTarget;
15296
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
15297
+ return;
15298
+ }
15299
+ const {
15300
+ isThumbDrag,
15301
+ thumbDragOffset
15302
+ } = internalData;
15303
+ if (isThumbDrag) {
15304
+ const viewEl = refVirtualWrapper.value;
15305
+ if (!viewEl) {
15306
+ return;
15307
+ }
15308
+ const {
15309
+ xThumbWidth
15310
+ } = reactData;
15311
+ const thumbEl = evnt.currentTarget;
15312
+ const trackEl = thumbEl.parentElement;
15313
+ const trackRect = trackEl.getBoundingClientRect();
15314
+ // 更新偏移
15315
+ viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
15316
+ }
15317
+ };
15318
+ const cleatPointerThumbEvent = evnt => {
15319
+ const thumbEl = evnt.currentTarget;
15320
+ thumbEl.releasePointerCapture(evnt.pointerId);
15321
+ internalData.isThumbDrag = false;
15322
+ };
15323
+ const pointerdownThumbYEvent = evnt => {
15324
+ const thumbEl = evnt.currentTarget;
15325
+ internalData.isThumbDrag = true;
15326
+ thumbEl.setPointerCapture(evnt.pointerId);
15327
+ const viewEl = refVirtualWrapper.value;
15328
+ if (!viewEl) {
15329
+ return;
15330
+ }
15331
+ const {
15332
+ yThumbHeight
15333
+ } = reactData;
15334
+ const trackEl = thumbEl.parentElement;
15335
+ const trackRect = trackEl.getBoundingClientRect();
15336
+ const pointerPosition = evnt.clientY - trackRect.top;
15337
+ // 记录 thumb 的偏移
15338
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
15339
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
15340
+ };
15341
+ const pointermoveThumbYEvent = evnt => {
15342
+ const thumbEl = evnt.currentTarget;
15343
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
15344
+ return;
15345
+ }
15346
+ const {
15347
+ isThumbDrag,
15348
+ thumbDragOffset
15349
+ } = internalData;
15350
+ if (isThumbDrag) {
15351
+ const viewEl = refVirtualWrapper.value;
15352
+ if (!viewEl) {
15353
+ return;
15354
+ }
15355
+ const {
15356
+ yThumbHeight
15357
+ } = reactData;
15358
+ const thumbEl = evnt.currentTarget;
15359
+ const trackEl = thumbEl.parentElement;
15360
+ const trackRect = trackEl.getBoundingClientRect();
15361
+ // 更新偏移
15362
+ viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
15363
+ }
15364
+ };
15105
15365
  Object.assign($xeList, listMethods, listPrivateMethods);
15106
15366
  const renderDragTip = () => {
15107
15367
  const {
@@ -15336,7 +15596,8 @@ let crossListDragRowObj = null;
15336
15596
  const {
15337
15597
  showCheckbox,
15338
15598
  className,
15339
- loading
15599
+ loading,
15600
+ useScrollbar
15340
15601
  } = props;
15341
15602
  const {
15342
15603
  bodyHeight,
@@ -15368,6 +15629,9 @@ let crossListDragRowObj = null;
15368
15629
  padding
15369
15630
  } = rowOpts;
15370
15631
  const isDrag = computeIsDrag.value;
15632
+ const scrollbarXOpts = computeScrollbarXOpts.value;
15633
+ const scrollbarYOpts = computeScrollbarYOpts.value;
15634
+ const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
15371
15635
  const showDefChekboxHead = showCheckbox && showHeader !== false;
15372
15636
  const leOns = {};
15373
15637
  if (isCrossListDrag && !rowList.length) {
@@ -15379,6 +15643,9 @@ let crossListDragRowObj = null;
15379
15643
  $list: $xeList
15380
15644
  }) : className : '', {
15381
15645
  [`size--${vSize}`]: vSize,
15646
+ 'is--virtual-scrollbar': useScrollbar,
15647
+ 'ov-x--auto-hide': useScrollbar && scrollbarXOpts.autoHide,
15648
+ 'ov-y--auto-hide': useScrollbar && scrollbarYOpts.autoHide,
15382
15649
  'is--drag': isDrag,
15383
15650
  'is--loading': loading
15384
15651
  }],
@@ -15426,16 +15693,53 @@ let crossListDragRowObj = null;
15426
15693
  style: {
15427
15694
  marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
15428
15695
  }
15696
+ }, useScrollbar ? defaultSlot ? defaultSlot({
15697
+ items: rowList,
15698
+ $list: $xeList
15699
+ }) : rowList.map((row, i) => renderRow(row, i)) : [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
15700
+ key: 'vi',
15701
+ ref: refViewInnerElem,
15702
+ class: 'vxe-scrollbar--view-inner'
15429
15703
  }, defaultSlot ? defaultSlot({
15430
15704
  items: rowList,
15431
15705
  $list: $xeList
15432
- }) : rowList.map((row, i) => renderRow(row, i)))]), footerSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
15706
+ }) : rowList.map((row, i) => renderRow(row, i)))])]), footerSlot ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
15433
15707
  ref: refFooterElem,
15434
15708
  class: 'vxe-list--footer-wrapper'
15435
15709
  }, footerSlot({
15436
15710
  items: rowList,
15437
15711
  $list: $xeList
15438
15712
  })) : renderEmptyElement($xeList),
15713
+ /**
15714
+ * 滚动条
15715
+ */
15716
+ useScrollbar ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
15717
+ class: scrollbarWrapperClss
15718
+ }, [scrollbarXOpts.visible === 'hidden' ? renderEmptyElement($xeList) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
15719
+ ref: refTrackXElem,
15720
+ class: 'vxe-scrollbar--track-x',
15721
+ onClick: clickTrackXEvent
15722
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
15723
+ ref: refThumbXElem,
15724
+ class: 'vxe-scrollbar--thumb-x',
15725
+ onPointerdown: pointerdownThumbXEvent,
15726
+ onPointermove: pointermoveThumbXEvent,
15727
+ onPointerup: cleatPointerThumbEvent,
15728
+ onPointercancel: cleatPointerThumbEvent,
15729
+ onLostpointercapture: cleatPointerThumbEvent
15730
+ })]), scrollbarYOpts.visible === 'hidden' ? renderEmptyElement($xeList) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
15731
+ ref: refTrackYElem,
15732
+ class: 'vxe-scrollbar--track-y',
15733
+ onClick: clickTrackYEvent
15734
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
15735
+ ref: refThumbYElem,
15736
+ class: 'vxe-scrollbar--thumb-y',
15737
+ onPointerdown: pointerdownThumbYEvent,
15738
+ onPointermove: pointermoveThumbYEvent,
15739
+ onPointerup: cleatPointerThumbEvent,
15740
+ onPointercancel: cleatPointerThumbEvent,
15741
+ onLostpointercapture: cleatPointerThumbEvent
15742
+ })])]) : renderEmptyElement($xeList),
15439
15743
  /**
15440
15744
  * 拖拽提示
15441
15745
  */
@@ -15490,7 +15794,9 @@ let crossListDragRowObj = null;
15490
15794
  updateCheckboxModeValue();
15491
15795
  });
15492
15796
  (0,external_commonjs_vue_commonjs2_vue_root_Vue_.onActivated)(() => {
15493
- recalculate().then(() => refreshScroll());
15797
+ recalculate().then(() => {
15798
+ refreshScroll();
15799
+ });
15494
15800
  });
15495
15801
  (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)(() => {
15496
15802
  loadData(props.data || []);
@@ -15499,7 +15805,9 @@ let crossListDragRowObj = null;
15499
15805
  const {
15500
15806
  showSeq,
15501
15807
  showRadio,
15502
- showCheckbox
15808
+ showCheckbox,
15809
+ autoResize,
15810
+ useScrollbar
15503
15811
  } = props;
15504
15812
  const rowOpts = computeRowOpts.value;
15505
15813
  const {
@@ -15524,17 +15832,27 @@ let crossListDragRowObj = null;
15524
15832
  if (useKey && !keyField) {
15525
15833
  list_errLog('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField']);
15526
15834
  }
15527
- if (props.autoResize) {
15835
+ if (useScrollbar || autoResize) {
15528
15836
  const el = refElem.value;
15529
- const resizeObserver = globalResize.create(() => recalculate());
15837
+ const viewInnerEl = refViewInnerElem.value;
15838
+ const resizeObserver = globalResize.create(() => {
15839
+ reFlag.value++;
15840
+ });
15530
15841
  resizeObserver.observe(el);
15531
- if (el) {
15532
- resizeObserver.observe(el.parentElement);
15842
+ if (autoResize) {
15843
+ if (el) {
15844
+ resizeObserver.observe(el.parentElement);
15845
+ }
15846
+ }
15847
+ if (viewInnerEl) {
15848
+ resizeObserver.observe(viewInnerEl);
15533
15849
  }
15534
15850
  internalData.resizeObserver = resizeObserver;
15535
15851
  }
15536
- recalculate();
15537
- globalEvents.on($xeList, 'resize', recalculate);
15852
+ reFlag.value++;
15853
+ globalEvents.on($xeList, 'resize', () => {
15854
+ reFlag.value++;
15855
+ });
15538
15856
  });
15539
15857
  (0,external_commonjs_vue_commonjs2_vue_root_Vue_.onBeforeUnmount)(() => {
15540
15858
  const {