vxe-pc-ui 4.20.8 → 4.20.10

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 (144) hide show
  1. package/dist/all.esm.js +2041 -2125
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/card/src/card.js +8 -6
  5. package/es/date-panel/src/date-panel.js +58 -36
  6. package/es/date-panel/style.css +22 -20
  7. package/es/date-panel/style.min.css +1 -1
  8. package/es/drawer/src/drawer.js +7 -5
  9. package/es/icon/style.css +1 -1
  10. package/es/icon-picker/src/icon-picker.js +74 -38
  11. package/es/icon-picker/style.css +9 -3
  12. package/es/icon-picker/style.min.css +1 -1
  13. package/es/layout-aside/src/layout-aside.js +6 -4
  14. package/es/layout-body/src/layout-body.js +6 -4
  15. package/es/layout-container/src/layout-container.js +11 -3
  16. package/es/list/src/list.js +81 -208
  17. package/es/menu/src/menu.js +7 -5
  18. package/es/modal/src/modal.js +7 -5
  19. package/es/scrollbar/src/scrollbar.js +28 -173
  20. package/es/select/src/select.js +243 -8
  21. package/es/select/style.css +44 -0
  22. package/es/select/style.min.css +1 -1
  23. package/es/style.css +1 -1
  24. package/es/style.min.css +1 -1
  25. package/es/tabs/src/tabs.js +5 -4
  26. package/es/tooltip/src/tooltip.js +7 -5
  27. package/es/tooltip/style.css +2 -0
  28. package/es/tooltip/style.min.css +1 -1
  29. package/es/tree/src/tree.js +86 -212
  30. package/es/ui/index.js +1 -1
  31. package/es/ui/src/log.js +1 -1
  32. package/es/vxe-date-panel/style.css +22 -20
  33. package/es/vxe-date-panel/style.min.css +1 -1
  34. package/es/vxe-icon-picker/style.css +9 -3
  35. package/es/vxe-icon-picker/style.min.css +1 -1
  36. package/es/vxe-select/style.css +44 -0
  37. package/es/vxe-select/style.min.css +1 -1
  38. package/es/vxe-tooltip/style.css +2 -0
  39. package/es/vxe-tooltip/style.min.css +1 -1
  40. package/lib/card/src/card.js +9 -6
  41. package/lib/card/src/card.min.js +1 -1
  42. package/lib/date-panel/src/date-panel.js +56 -34
  43. package/lib/date-panel/src/date-panel.min.js +1 -1
  44. package/lib/date-panel/style/style.css +22 -20
  45. package/lib/date-panel/style/style.min.css +1 -1
  46. package/lib/drawer/src/drawer.js +7 -4
  47. package/lib/drawer/src/drawer.min.js +1 -1
  48. package/lib/icon/style/style.css +1 -1
  49. package/lib/icon/style/style.min.css +1 -1
  50. package/lib/icon-picker/src/icon-picker.js +101 -45
  51. package/lib/icon-picker/src/icon-picker.min.js +1 -1
  52. package/lib/icon-picker/style/style.css +9 -3
  53. package/lib/icon-picker/style/style.min.css +1 -1
  54. package/lib/index.umd.js +1049 -859
  55. package/lib/index.umd.min.js +1 -1
  56. package/lib/layout-aside/src/layout-aside.js +7 -4
  57. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  58. package/lib/layout-body/src/layout-body.js +7 -4
  59. package/lib/layout-body/src/layout-body.min.js +1 -1
  60. package/lib/layout-container/src/layout-container.js +20 -4
  61. package/lib/layout-container/src/layout-container.min.js +1 -1
  62. package/lib/list/src/list.js +95 -232
  63. package/lib/list/src/list.min.js +1 -1
  64. package/lib/menu/src/menu.js +8 -4
  65. package/lib/menu/src/menu.min.js +1 -1
  66. package/lib/modal/src/modal.js +7 -4
  67. package/lib/modal/src/modal.min.js +1 -1
  68. package/lib/scrollbar/src/scrollbar.js +42 -199
  69. package/lib/scrollbar/src/scrollbar.min.js +1 -1
  70. package/lib/select/src/select.js +315 -68
  71. package/lib/select/src/select.min.js +1 -1
  72. package/lib/select/style/style.css +44 -0
  73. package/lib/select/style/style.min.css +1 -1
  74. package/lib/style.css +1 -1
  75. package/lib/style.min.css +1 -1
  76. package/lib/tabs/src/tabs.js +6 -5
  77. package/lib/tabs/src/tabs.min.js +1 -1
  78. package/lib/tooltip/src/tooltip.js +7 -4
  79. package/lib/tooltip/src/tooltip.min.js +1 -1
  80. package/lib/tooltip/style/style.css +2 -0
  81. package/lib/tooltip/style/style.min.css +1 -1
  82. package/lib/tree/src/tree.js +101 -235
  83. package/lib/tree/src/tree.min.js +1 -1
  84. package/lib/ui/index.js +1 -1
  85. package/lib/ui/index.min.js +1 -1
  86. package/lib/ui/src/log.js +1 -1
  87. package/lib/ui/src/log.min.js +1 -1
  88. package/lib/vxe-date-panel/style/style.css +22 -20
  89. package/lib/vxe-date-panel/style/style.min.css +1 -1
  90. package/lib/vxe-icon-picker/style/style.css +9 -3
  91. package/lib/vxe-icon-picker/style/style.min.css +1 -1
  92. package/lib/vxe-select/style/style.css +44 -0
  93. package/lib/vxe-select/style/style.min.css +1 -1
  94. package/lib/vxe-tooltip/style/style.css +2 -0
  95. package/lib/vxe-tooltip/style/style.min.css +1 -1
  96. package/package.json +2 -2
  97. package/packages/card/src/card.ts +8 -6
  98. package/packages/date-panel/src/date-panel.ts +58 -36
  99. package/packages/drawer/src/drawer.ts +7 -5
  100. package/packages/icon-picker/src/icon-picker.ts +80 -38
  101. package/packages/layout-aside/src/layout-aside.ts +6 -4
  102. package/packages/layout-body/src/layout-body.ts +6 -4
  103. package/packages/layout-container/src/layout-container.ts +13 -3
  104. package/packages/list/src/list.ts +98 -224
  105. package/packages/menu/src/menu.ts +7 -5
  106. package/packages/modal/src/modal.ts +7 -5
  107. package/packages/scrollbar/src/scrollbar.ts +44 -189
  108. package/packages/select/src/select.ts +278 -8
  109. package/packages/tabs/src/tabs.ts +5 -4
  110. package/packages/tooltip/src/tooltip.ts +7 -5
  111. package/packages/tree/src/tree.ts +103 -228
  112. package/styles/components/date-panel.scss +31 -29
  113. package/styles/components/icon-picker.scss +9 -3
  114. package/styles/components/select.scss +77 -0
  115. package/styles/components/tooltip.scss +1 -0
  116. package/types/components/card.d.ts +2 -2
  117. package/types/components/drawer.d.ts +2 -2
  118. package/types/components/gantt-module/gantt-view.d.ts +7 -16
  119. package/types/components/grid.d.ts +3 -1
  120. package/types/components/icon-picker.d.ts +21 -1
  121. package/types/components/layout-aside.d.ts +2 -2
  122. package/types/components/layout-body.d.ts +2 -2
  123. package/types/components/layout-container.d.ts +3 -1
  124. package/types/components/list.d.ts +6 -2
  125. package/types/components/menu.d.ts +2 -2
  126. package/types/components/modal.d.ts +2 -2
  127. package/types/components/scrollbar.d.ts +17 -14
  128. package/types/components/select.d.ts +28 -3
  129. package/types/components/table.d.ts +28 -22
  130. package/types/components/tabs.d.ts +2 -2
  131. package/types/components/tooltip.d.ts +2 -2
  132. package/types/components/tree.d.ts +8 -17
  133. /package/es/icon/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
  134. /package/es/icon/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
  135. /package/es/icon/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
  136. /package/es/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
  137. /package/es/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
  138. /package/es/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
  139. /package/lib/icon/style/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
  140. /package/lib/icon/style/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
  141. /package/lib/icon/style/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
  142. /package/lib/{iconfont.1792115566662.ttf → iconfont.1792219842406.ttf} +0 -0
  143. /package/lib/{iconfont.1792115566662.woff → iconfont.1792219842406.woff} +0 -0
  144. /package/lib/{iconfont.1792115566662.woff2 → iconfont.1792219842406.woff2} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { h, ref, computed, onBeforeUnmount, watch, reactive, nextTick, onActivated, onMounted } from 'vue';
2
2
  import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import XEUtils from 'xe-utils';
4
- import { VxeUI, useSize, createEvent, renderEmptyElement } from '../../ui';
4
+ import { VxeUI, createEvent, renderEmptyElement } from '../../ui';
5
5
  import { getCrossListDragRowInfo } from './store';
6
6
  import { isScale, removeClass, addClass, getTpImg, toCssUnit, hasClass } from '../../ui/src/dom';
7
7
  import { isEnableConf, getText, enModelValue, deModelValue, getDefaultConfig } from '../../ui/src/utils';
@@ -9,8 +9,7 @@ import { createComponentLog } from '../../ui/src/log';
9
9
  import { moveRowAnimateToTb, clearRowAnimate } from '../../ui/src/anime';
10
10
  import { getItemCacheObj } from './util';
11
11
  import VxeLoadingComponent from '../../loading';
12
- const { getConfig, getIcon, getI18n, domUtils, scrollbarUtils, menus, globalEvents, globalResize } = VxeUI;
13
- const { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } = scrollbarUtils;
12
+ const { getConfig, getIcon, getI18n, domUtils, useFns, menus, globalEvents, globalResize } = VxeUI;
14
13
  const { warnLog, errLog } = createComponentLog('tree');
15
14
  function getRowKeyByField(row, keyField) {
16
15
  return row ? ('' + (row[keyField] || '')) : '';
@@ -145,7 +144,6 @@ export default defineVxeComponent({
145
144
  const { slots, emit } = context;
146
145
  const xID = XEUtils.uniqueId();
147
146
  const browseObj = XEUtils.browse();
148
- const { computeSize } = useSize(props);
149
147
  const reactData = reactive(createReactData());
150
148
  const internalData = createInternalData();
151
149
  const crossListDragRowInfo = getCrossListDragRowInfo();
@@ -153,13 +151,12 @@ export default defineVxeComponent({
153
151
  const refHeaderElem = ref();
154
152
  const refFooterElem = ref();
155
153
  const refVirtualWrapper = ref();
154
+ const refVirtualSpaceElem = ref();
156
155
  const refVirtualBody = ref();
157
- const refTrackXElem = ref();
158
- const refTrackYElem = ref();
159
- const refThumbXElem = ref();
160
- const refThumbYElem = ref();
161
156
  const refDragRowLineElem = ref();
162
157
  const refDragTipElem = ref();
158
+ const { computeSize } = useFns.useSize(props);
159
+ const { computeIsVScrollbar } = useFns.useVScrollbar(props);
163
160
  const refMaps = {
164
161
  refElem
165
162
  };
@@ -171,6 +168,7 @@ export default defineVxeComponent({
171
168
  internalData,
172
169
  getRefMaps: () => refMaps
173
170
  };
171
+ const { refTrackXElem, refTrackYElem, refThumbXElem, refThumbYElem, updateThumbSize, updateThumbOffset, clickTrackXEvent, clickTrackYEvent, pointerdownThumbXEvent, pointermoveThumbXEvent, cleatPointerThumbEvent, pointerdownThumbYEvent, pointermoveThumbYEvent } = useFns.useInitVScrollbar($xeList);
174
172
  const computeRowOpts = computed(() => {
175
173
  return Object.assign({}, getConfig().list.rowConfig, props.rowConfig);
176
174
  });
@@ -457,7 +455,6 @@ export default defineVxeComponent({
457
455
  */
458
456
  const refreshScroll = () => {
459
457
  const { lastScrollLeft, lastScrollTop } = internalData;
460
- updateScrollbar();
461
458
  return clearScroll().then(() => {
462
459
  if (lastScrollLeft || lastScrollTop) {
463
460
  internalData.lastScrollLeft = 0;
@@ -467,8 +464,14 @@ export default defineVxeComponent({
467
464
  });
468
465
  };
469
466
  const updateScrollbar = () => {
470
- updateThumbSize();
471
- updateThumbOffset();
467
+ const isVScrollbar = computeIsVScrollbar.value;
468
+ if (isVScrollbar) {
469
+ return nextTick().then(() => {
470
+ updateThumbSize();
471
+ updateThumbOffset();
472
+ });
473
+ }
474
+ return Promise.resolve();
472
475
  };
473
476
  /**
474
477
  * 重新计算列表
@@ -487,10 +490,11 @@ export default defineVxeComponent({
487
490
  parentHeight = parentEl.clientHeight - Math.ceil(XEUtils.toNumber(parentStyle.paddingLeft) + XEUtils.toNumber(parentStyle.paddingRight));
488
491
  }
489
492
  reactData.parentHeight = parentHeight;
490
- updateScrollbar();
491
493
  updateHeight();
492
494
  if (el.clientWidth && el.clientHeight) {
493
- return computeScrollLoad();
495
+ return computeScrollLoad().then(() => {
496
+ updateScrollbar();
497
+ });
494
498
  }
495
499
  }
496
500
  return nextTick();
@@ -498,7 +502,7 @@ export default defineVxeComponent({
498
502
  const loadYData = (evnt) => {
499
503
  const { scrollYStore } = internalData;
500
504
  const { startIndex, endIndex, visibleSize, offsetSize, rowHeight } = scrollYStore;
501
- const scrollBodyElem = evnt.target;
505
+ const scrollBodyElem = evnt.currentTarget;
502
506
  const scrollTop = scrollBodyElem.scrollTop;
503
507
  const toVisibleIndex = Math.floor(scrollTop / rowHeight);
504
508
  const offsetStartIndex = Math.max(0, toVisibleIndex - 1 - offsetSize);
@@ -512,7 +516,7 @@ export default defineVxeComponent({
512
516
  }
513
517
  };
514
518
  const scrollEvent = (evnt) => {
515
- const scrollBodyElem = evnt.target;
519
+ const scrollBodyElem = evnt.currentTarget;
516
520
  const scrollTop = scrollBodyElem.scrollTop;
517
521
  const scrollLeft = scrollBodyElem.scrollLeft;
518
522
  const isX = scrollLeft !== internalData.lastScrollLeft;
@@ -1487,6 +1491,10 @@ export default defineVxeComponent({
1487
1491
  };
1488
1492
  const listMethods = {
1489
1493
  dispatchEvent,
1494
+ getScrollViewElem() {
1495
+ const viewEl = refVirtualWrapper.value;
1496
+ return viewEl || null;
1497
+ },
1490
1498
  loadData,
1491
1499
  /**
1492
1500
  * 重新加载数据
@@ -1814,160 +1822,24 @@ export default defineVxeComponent({
1814
1822
  hideDropTip();
1815
1823
  }
1816
1824
  };
1817
- const updateThumbSize = () => {
1818
- const viewEl = refVirtualWrapper.value;
1819
- if (!viewEl) {
1820
- return;
1821
- }
1822
- if (!viewEl.clientHeight || !viewEl.clientHeight) {
1823
- return;
1824
- }
1825
- const trackXEl = refTrackXElem.value;
1826
- const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
1827
- const thumbXElem = refThumbXElem.value;
1828
- if (thumbXElem) {
1829
- thumbXElem.style.width = xThumbWidth + 'px';
1830
- }
1831
- reactData.xThumbWidth = xThumbWidth;
1832
- const trackYEl = refTrackYElem.value;
1833
- const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
1834
- const thumbYElem = refThumbYElem.value;
1835
- if (thumbYElem) {
1836
- thumbYElem.style.height = yThumbHeight + 'px';
1837
- }
1838
- reactData.yThumbHeight = yThumbHeight;
1839
- };
1840
- const updateThumbOffset = () => {
1841
- const viewEl = refVirtualWrapper.value;
1842
- if (!viewEl) {
1843
- return;
1844
- }
1845
- if (!viewEl.clientHeight || !viewEl.clientHeight) {
1846
- return;
1847
- }
1848
- const { xThumbWidth, yThumbHeight } = reactData;
1849
- const trackXEl = refTrackXElem.value;
1850
- const thumbXElem = refThumbXElem.value;
1851
- const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
1852
- internalData.xThumbLeft = xThumbLeft;
1853
- if (thumbXElem && xThumbWidth) {
1854
- thumbXElem.style.width = xThumbWidth + 'px';
1855
- thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
1856
- }
1857
- const trackYEl = refTrackYElem.value;
1858
- const thumbYElem = refThumbYElem.value;
1859
- const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
1860
- internalData.yThumbTop = yThumbTop;
1861
- if (thumbYElem && yThumbHeight) {
1862
- thumbYElem.style.height = yThumbHeight + 'px';
1863
- thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
1864
- }
1865
- };
1866
- const clickTrackXEvent = (evnt) => {
1867
- const trackEl = evnt.currentTarget;
1868
- if (trackEl !== evnt.target) {
1869
- return;
1870
- }
1871
- const viewEl = refVirtualWrapper.value;
1872
- if (!viewEl) {
1873
- return;
1874
- }
1875
- const { xThumbWidth } = reactData;
1876
- const trackRect = trackEl.getBoundingClientRect();
1877
- viewEl.scrollTo({
1878
- left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
1879
- behavior: 'auto'
1880
- });
1881
- };
1882
- const clickTrackYEvent = (evnt) => {
1883
- const trackEl = evnt.currentTarget;
1884
- if (trackEl !== evnt.target) {
1885
- return;
1886
- }
1887
- const viewEl = refVirtualWrapper.value;
1888
- if (!viewEl) {
1889
- return;
1890
- }
1891
- const { yThumbHeight } = reactData;
1892
- const trackRect = trackEl.getBoundingClientRect();
1893
- viewEl.scrollTo({
1894
- top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
1895
- behavior: 'auto'
1896
- });
1897
- };
1898
- const pointerdownThumbXEvent = (evnt) => {
1899
- const thumbEl = evnt.currentTarget;
1900
- internalData.isThumbDrag = true;
1901
- thumbEl.setPointerCapture(evnt.pointerId);
1902
- const viewEl = refVirtualWrapper.value;
1903
- if (!viewEl) {
1904
- return;
1905
- }
1906
- const { xThumbWidth } = reactData;
1907
- const trackEl = thumbEl.parentElement;
1908
- const trackRect = trackEl.getBoundingClientRect();
1909
- const pointerPosition = evnt.clientX - trackRect.left;
1910
- // 记录 thumb 的偏移
1911
- const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
1912
- internalData.thumbDragOffset = pointerPosition - thumbOffset;
1913
- };
1914
- const pointermoveThumbXEvent = (evnt) => {
1915
- const thumbEl = evnt.currentTarget;
1916
- if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
1917
- return;
1918
- }
1919
- const { isThumbDrag, thumbDragOffset } = internalData;
1920
- if (isThumbDrag) {
1921
- const viewEl = refVirtualWrapper.value;
1922
- if (!viewEl) {
1923
- return;
1924
- }
1925
- const { xThumbWidth } = reactData;
1926
- const thumbEl = evnt.currentTarget;
1927
- const trackEl = thumbEl.parentElement;
1928
- const trackRect = trackEl.getBoundingClientRect();
1929
- // 更新偏移
1930
- viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
1931
- }
1932
- };
1933
- const cleatPointerThumbEvent = (evnt) => {
1934
- const thumbEl = evnt.currentTarget;
1935
- thumbEl.releasePointerCapture(evnt.pointerId);
1936
- internalData.isThumbDrag = false;
1937
- };
1938
- const pointerdownThumbYEvent = (evnt) => {
1939
- const thumbEl = evnt.currentTarget;
1940
- internalData.isThumbDrag = true;
1941
- thumbEl.setPointerCapture(evnt.pointerId);
1942
- const viewEl = refVirtualWrapper.value;
1943
- if (!viewEl) {
1944
- return;
1945
- }
1946
- const { yThumbHeight } = reactData;
1947
- const trackEl = thumbEl.parentElement;
1948
- const trackRect = trackEl.getBoundingClientRect();
1949
- const pointerPosition = evnt.clientY - trackRect.top;
1950
- // 记录 thumb 的偏移
1951
- const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
1952
- internalData.thumbDragOffset = pointerPosition - thumbOffset;
1953
- };
1954
- const pointermoveThumbYEvent = (evnt) => {
1955
- const thumbEl = evnt.currentTarget;
1956
- if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
1957
- return;
1958
- }
1959
- const { isThumbDrag, thumbDragOffset } = internalData;
1960
- if (isThumbDrag) {
1961
- const viewEl = refVirtualWrapper.value;
1962
- if (!viewEl) {
1963
- return;
1825
+ const bindScrollbarResize = () => {
1826
+ const { scrollObserver } = internalData;
1827
+ const isVScrollbar = computeIsVScrollbar.value;
1828
+ if (isVScrollbar) {
1829
+ if (!scrollObserver) {
1830
+ const el = refElem.value;
1831
+ const viewInnerEl = refVirtualSpaceElem.value;
1832
+ const scrollObserver = globalResize.create(() => {
1833
+ reScrollFlag.value++;
1834
+ });
1835
+ if (el) {
1836
+ scrollObserver.observe(el);
1837
+ }
1838
+ if (viewInnerEl) {
1839
+ scrollObserver.observe(viewInnerEl);
1840
+ }
1841
+ internalData.scrollObserver = scrollObserver;
1964
1842
  }
1965
- const { yThumbHeight } = reactData;
1966
- const thumbEl = evnt.currentTarget;
1967
- const trackEl = thumbEl.parentElement;
1968
- const trackRect = trackEl.getBoundingClientRect();
1969
- // 更新偏移
1970
- viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
1971
1843
  }
1972
1844
  };
1973
1845
  Object.assign($xeList, listMethods, listPrivateMethods);
@@ -2166,12 +2038,13 @@ export default defineVxeComponent({
2166
2038
  }], rowid: hasKey && keyField ? rowid : undefined }, rowOns), ctVNs);
2167
2039
  };
2168
2040
  const renderVN = () => {
2169
- const { showCheckbox, className, loading, useScrollbar } = props;
2041
+ const { showCheckbox, className, loading } = props;
2170
2042
  const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate, xThumbWidth, yThumbHeight } = reactData;
2171
2043
  const defaultSlot = slots.default;
2172
2044
  const headerSlot = slots.header;
2173
2045
  const footerSlot = slots.footer;
2174
2046
  const vSize = computeSize.value;
2047
+ const isVScrollbar = computeIsVScrollbar.value;
2175
2048
  const wrapperStyles = computeWrapperStyles.value;
2176
2049
  const virtualStyles = computeVirtualStyles.value;
2177
2050
  const radioOpts = computeRadioOpts.value;
@@ -2197,17 +2070,17 @@ export default defineVxeComponent({
2197
2070
  }
2198
2071
  return h('div', Object.assign({ ref: refElem, class: [
2199
2072
  'vxe-list',
2200
- useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
2201
- useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
2202
- useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
2203
- useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
2073
+ isVScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
2074
+ isVScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
2075
+ isVScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
2076
+ isVScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
2204
2077
  className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '',
2205
2078
  {
2206
2079
  [`size--${vSize}`]: vSize,
2207
- 'is--virtual-scrollbar': useScrollbar,
2208
- 'ov-padding': useScrollbar && scrollbarOpts.padding,
2209
- 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
2210
- 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
2080
+ 'is--virtual-scrollbar': isVScrollbar,
2081
+ 'ov-padding': isVScrollbar && scrollbarOpts.padding,
2082
+ 'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
2083
+ 'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
2211
2084
  'overflow-y': yThumbHeight,
2212
2085
  'overflow-x': xThumbWidth,
2213
2086
  'is--drag': isDrag,
@@ -2253,6 +2126,7 @@ export default defineVxeComponent({
2253
2126
  onScroll: scrollEvent
2254
2127
  }, [
2255
2128
  h('div', {
2129
+ ref: refVirtualSpaceElem,
2256
2130
  class: 'vxe-list--y-space',
2257
2131
  style: {
2258
2132
  height: bodyHeight ? `${bodyHeight}px` : ''
@@ -2281,7 +2155,7 @@ export default defineVxeComponent({
2281
2155
  /**
2282
2156
  * 滚动条
2283
2157
  */
2284
- useScrollbar
2158
+ isVScrollbar
2285
2159
  ? h('div', {
2286
2160
  class: scrollbarWrapperClss
2287
2161
  }, [
@@ -2344,43 +2218,54 @@ export default defineVxeComponent({
2344
2218
  watch(dataFlag, () => {
2345
2219
  loadData(props.data || []);
2346
2220
  });
2347
- const reFlag = ref(0);
2221
+ const reScrollFlag = ref(0);
2222
+ const reLayoutFlag = ref(0);
2348
2223
  watch(() => props.height, () => {
2349
- reFlag.value++;
2224
+ reLayoutFlag.value++;
2350
2225
  });
2351
2226
  watch(() => props.maxHeight, () => {
2352
- reFlag.value++;
2227
+ reLayoutFlag.value++;
2353
2228
  });
2354
2229
  watch(() => props.syncResize, () => {
2355
- reFlag.value++;
2230
+ reLayoutFlag.value++;
2356
2231
  });
2357
- watch(() => props.useScrollbar, () => {
2358
- reFlag.value++;
2232
+ watch(computeIsVScrollbar, () => {
2233
+ nextTick(() => {
2234
+ bindScrollbarResize();
2235
+ nextTick(() => {
2236
+ reLayoutFlag.value++;
2237
+ });
2238
+ });
2359
2239
  });
2360
2240
  watch(computeRowHeight, () => {
2361
- reFlag.value++;
2241
+ reLayoutFlag.value++;
2362
2242
  });
2363
2243
  watch(computeScrollYWidth, () => {
2364
- reFlag.value++;
2244
+ reLayoutFlag.value++;
2365
2245
  });
2366
2246
  watch(computeScrollXHeight, () => {
2367
- reFlag.value++;
2247
+ reLayoutFlag.value++;
2368
2248
  });
2369
2249
  watch(computeScrollXVisible, () => {
2370
2250
  nextTick(() => {
2371
- reFlag.value++;
2251
+ reLayoutFlag.value++;
2372
2252
  });
2373
2253
  });
2374
2254
  watch(computeScrollYVisible, () => {
2375
2255
  nextTick(() => {
2376
- reFlag.value++;
2256
+ reLayoutFlag.value++;
2377
2257
  });
2378
2258
  });
2379
- watch(reFlag, () => {
2259
+ watch(reLayoutFlag, () => {
2380
2260
  recalculate().then(() => {
2381
2261
  recalculate();
2382
2262
  });
2383
2263
  });
2264
+ watch(reScrollFlag, () => {
2265
+ updateScrollbar().then(() => {
2266
+ updateScrollbar();
2267
+ });
2268
+ });
2384
2269
  watch(() => props.checkRowKey, () => {
2385
2270
  updateRadioModeValue();
2386
2271
  });
@@ -2403,7 +2288,7 @@ export default defineVxeComponent({
2403
2288
  loadData(props.data || []);
2404
2289
  });
2405
2290
  onMounted(() => {
2406
- const { showSeq, showRadio, showCheckbox, autoResize, useScrollbar } = props;
2291
+ const { showSeq, showRadio, showCheckbox, autoResize } = props;
2407
2292
  const rowOpts = computeRowOpts.value;
2408
2293
  const { useKey } = rowOpts;
2409
2294
  const isDrag = computeIsDrag.value;
@@ -2425,25 +2310,12 @@ export default defineVxeComponent({
2425
2310
  if (useKey && !keyField) {
2426
2311
  errLog('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField']);
2427
2312
  }
2428
- const el = refElem.value;
2429
- if (useScrollbar) {
2430
- const viewInnerEl = refVirtualBody.value;
2431
- const scrollObserver = globalResize.create(() => {
2432
- reFlag.value++;
2433
- });
2434
- if (el) {
2435
- scrollObserver.observe(el);
2436
- }
2437
- if (viewInnerEl) {
2438
- scrollObserver.observe(viewInnerEl);
2439
- }
2440
- internalData.scrollObserver = scrollObserver;
2441
- }
2442
2313
  if (autoResize) {
2314
+ const el = refElem.value;
2443
2315
  const parentEl = getParentElem();
2444
2316
  const resizeObserver = globalResize.create(() => {
2445
2317
  if (props.autoResize) {
2446
- reFlag.value++;
2318
+ reLayoutFlag.value++;
2447
2319
  }
2448
2320
  });
2449
2321
  if (el) {
@@ -2454,9 +2326,10 @@ export default defineVxeComponent({
2454
2326
  }
2455
2327
  internalData.resizeObserver = resizeObserver;
2456
2328
  }
2457
- reFlag.value++;
2329
+ reLayoutFlag.value++;
2330
+ bindScrollbarResize();
2458
2331
  globalEvents.on($xeList, 'resize', () => {
2459
- reFlag.value++;
2332
+ reLayoutFlag.value++;
2460
2333
  });
2461
2334
  });
2462
2335
  onBeforeUnmount(() => {
@@ -1,7 +1,7 @@
1
1
  import { ref, h, reactive, Teleport, inject, resolveComponent, watch, computed, nextTick, onBeforeUnmount, onMounted } from 'vue';
2
2
  import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import XEUtils from 'xe-utils';
4
- import { VxeUI, createEvent, permission, useSize, globalEvents, renderEmptyElement } from '../../ui';
4
+ import { VxeUI, createEvent, permission, globalEvents, renderEmptyElement } from '../../ui';
5
5
  import { getPopupContainer, scrollToView, toCssUnit } from '../../ui/src/dom';
6
6
  import { getLastZIndex, nextZIndex, isEnableConf, getDefaultConfig } from '../../ui/src/utils';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
@@ -9,7 +9,7 @@ import { createComponentLog } from '../../ui/src/log';
9
9
  import VxeLoadingComponent from '../../loading';
10
10
  import VxeScrollbarComponent from '../../scrollbar';
11
11
  const { errLog } = createComponentLog('menu');
12
- const { menus, getConfig, getIcon } = VxeUI;
12
+ const { menus, useFns, getConfig, getIcon } = VxeUI;
13
13
  function createInternalData() {
14
14
  return {
15
15
  lastActiveTime: 0,
@@ -88,7 +88,8 @@ export default defineVxeComponent({
88
88
  const refCollapseElem = ref();
89
89
  const refCollapseBodyElem = ref();
90
90
  const refCollapseBodyScrollbar = ref();
91
- const { computeSize } = useSize(props);
91
+ const { computeSize } = useFns.useSize(props);
92
+ const { computeIsVScrollbar } = useFns.useVScrollbar(props);
92
93
  const reactData = reactive(createReactData());
93
94
  const internalData = createInternalData();
94
95
  const refMaps = {
@@ -619,9 +620,10 @@ export default defineVxeComponent({
619
620
  ]);
620
621
  };
621
622
  const renderVN = () => {
622
- const { loading, collapseFixed, appendTo, useScrollbar } = props;
623
+ const { loading, collapseFixed, appendTo } = props;
623
624
  const { initialized, menuList, collapseStyle, isEnterCollapse } = reactData;
624
625
  const vSize = computeSize.value;
626
+ const isVScrollbar = computeIsVScrollbar.value;
625
627
  const isCollapsed = computeIsCollapsed.value;
626
628
  const currBorder = computeCurrBorder.value;
627
629
  const varStyle = computeVarStyle.value;
@@ -675,7 +677,7 @@ export default defineVxeComponent({
675
677
  class: 'vxe-menu--header'
676
678
  }, headerSlot(stParams))
677
679
  : renderEmptyElement($xeMenu),
678
- useScrollbar && isEnterCollapse
680
+ isVScrollbar && isEnterCollapse
679
681
  ? h(VxeScrollbarComponent, Object.assign(Object.assign({ ref: refCollapseBodyScrollbar, class: 'vxe-menu--scrollbar-body' }, scrollbarOpts), { viewClassName: 'vxe-menu--scrollbar-body-view' + (viewClassName ? (' ' + viewClassName) : ''), viewInnerClassName: 'vxe-menu--scrollbar-body-inner' + (viewClassName ? (' ' + viewInnerClassName) : '') }), {
680
682
  default: () => menuList.map(child => renderDefaultChildren(child, menuList))
681
683
  })
@@ -3,7 +3,7 @@ import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import XEUtils from 'xe-utils';
4
4
  import { getEventTargetNode, getPopupContainer, getPopupWrapperElement, isScale, toCssUnit } from '../../ui/src/dom';
5
5
  import { getLastZIndex, nextZIndex, getSubLastZIndex, nextSubZIndex, getFuncText, handleBooleanDefaultValue, getDefaultConfig } from '../../ui/src/utils';
6
- import { VxeUI, getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useSize, renderEmptyElement } from '../../ui';
6
+ import { VxeUI, getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useFns, renderEmptyElement } from '../../ui';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  import { createComponentLog } from '../../ui/src/log';
9
9
  import { allActiveModals } from './store';
@@ -253,7 +253,8 @@ export default defineVxeComponent({
253
253
  const $xeDrawer = inject('$xeDrawer', null);
254
254
  const $xeTable = inject('$xeTable', null);
255
255
  const $xeForm = inject('$xeForm', null);
256
- const { computeSize } = useSize(props);
256
+ const { computeSize } = useFns.useSize(props);
257
+ const { computeIsVScrollbar } = useFns.useVScrollbar(props);
257
258
  const reactData = reactive(createReactData());
258
259
  const internalData = createInternalData();
259
260
  const refElem = ref();
@@ -1330,8 +1331,9 @@ export default defineVxeComponent({
1330
1331
  return renderEmptyElement($xeModal);
1331
1332
  };
1332
1333
  const renderBody = () => {
1333
- const { slots: propSlots = {}, status, message, iconStatus, useScrollbar, useHtml } = props;
1334
+ const { slots: propSlots = {}, status, message, iconStatus, useHtml } = props;
1334
1335
  const content = props.content || message;
1336
+ const isVScrollbar = computeIsVScrollbar.value;
1335
1337
  const isMsg = computeIsMsg.value;
1336
1338
  const scrollbarProps = computeScrollbarProps.value;
1337
1339
  const defaultSlot = slots.default || propSlots.default;
@@ -1348,7 +1350,7 @@ export default defineVxeComponent({
1348
1350
  ]));
1349
1351
  }
1350
1352
  if (useHtml && !defaultSlot) {
1351
- contVNs.push(useScrollbar
1353
+ contVNs.push(isVScrollbar
1352
1354
  ? h(VxeScrollbarComponent, Object.assign({ key: 'shc', class: 'vxe-modal--scrollbar-content' }, scrollbarProps), {
1353
1355
  default() {
1354
1356
  return [
@@ -1366,7 +1368,7 @@ export default defineVxeComponent({
1366
1368
  }));
1367
1369
  }
1368
1370
  else {
1369
- contVNs.push(useScrollbar
1371
+ contVNs.push(isVScrollbar
1370
1372
  ? h(VxeScrollbarComponent, Object.assign({ key: 'sdc', class: 'vxe-modal--scrollbar-content' }, scrollbarProps), {
1371
1373
  default: () => defaultSlot ? getSlotVNs(defaultSlot({ $modal: $xeModal })) : getFuncText(content)
1372
1374
  })