vxe-table 4.17.0-beta.9 → 4.17.1

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 (69) hide show
  1. package/README.md +3 -4
  2. package/README.zh-TW.md +1 -1
  3. package/es/grid/src/grid.js +13 -5
  4. package/es/index.css +1 -1
  5. package/es/index.min.css +1 -1
  6. package/es/locale/lang/en-US.js +22 -22
  7. package/es/style.css +1 -1
  8. package/es/style.min.css +1 -1
  9. package/es/table/module/menu/hook.js +2 -2
  10. package/es/table/src/body.js +3 -0
  11. package/es/table/src/footer.js +2 -0
  12. package/es/table/src/header.js +3 -0
  13. package/es/table/src/table.js +146 -35
  14. package/es/table/src/util.js +22 -19
  15. package/es/table/style.css +48 -2
  16. package/es/table/style.min.css +1 -1
  17. package/es/ui/index.js +1 -1
  18. package/es/ui/src/log.js +1 -1
  19. package/es/vxe-table/style.css +48 -2
  20. package/es/vxe-table/style.min.css +1 -1
  21. package/helper/vetur/attributes.json +1 -1
  22. package/helper/vetur/tags.json +1 -1
  23. package/lib/grid/src/grid.js +12 -4
  24. package/lib/grid/src/grid.min.js +1 -1
  25. package/lib/index.css +1 -1
  26. package/lib/index.min.css +1 -1
  27. package/lib/index.umd.js +59 -41
  28. package/lib/index.umd.min.js +1 -1
  29. package/lib/locale/lang/en-US.js +22 -22
  30. package/lib/locale/lang/en-US.min.js +1 -1
  31. package/lib/locale/lang/en-US.umd.js +22 -22
  32. package/lib/style.css +1 -1
  33. package/lib/style.min.css +1 -1
  34. package/lib/table/module/menu/hook.js +2 -0
  35. package/lib/table/module/menu/hook.min.js +1 -1
  36. package/lib/table/src/body.js +3 -0
  37. package/lib/table/src/body.min.js +1 -1
  38. package/lib/table/src/footer.js +2 -0
  39. package/lib/table/src/footer.min.js +1 -1
  40. package/lib/table/src/header.js +3 -0
  41. package/lib/table/src/header.min.js +1 -1
  42. package/lib/table/src/table.js +25 -16
  43. package/lib/table/src/table.min.js +1 -1
  44. package/lib/table/src/util.js +10 -19
  45. package/lib/table/src/util.min.js +1 -1
  46. package/lib/table/style/style.css +48 -2
  47. package/lib/table/style/style.min.css +1 -1
  48. package/lib/ui/index.js +1 -1
  49. package/lib/ui/index.min.js +1 -1
  50. package/lib/ui/src/log.js +1 -1
  51. package/lib/ui/src/log.min.js +1 -1
  52. package/lib/vxe-table/style/style.css +48 -2
  53. package/lib/vxe-table/style/style.min.css +1 -1
  54. package/package.json +2 -2
  55. package/packages/grid/src/grid.ts +53 -45
  56. package/packages/locale/lang/en-US.ts +22 -22
  57. package/packages/table/module/menu/hook.ts +2 -2
  58. package/packages/table/src/body.ts +3 -0
  59. package/packages/table/src/footer.ts +2 -0
  60. package/packages/table/src/header.ts +3 -0
  61. package/packages/table/src/table.ts +147 -35
  62. package/packages/table/src/util.ts +30 -19
  63. package/styles/components/table.scss +90 -2
  64. /package/es/{iconfont.1760602279303.ttf → iconfont.1761181613193.ttf} +0 -0
  65. /package/es/{iconfont.1760602279303.woff → iconfont.1761181613193.woff} +0 -0
  66. /package/es/{iconfont.1760602279303.woff2 → iconfont.1761181613193.woff2} +0 -0
  67. /package/lib/{iconfont.1760602279303.ttf → iconfont.1761181613193.ttf} +0 -0
  68. /package/lib/{iconfont.1760602279303.woff → iconfont.1761181613193.woff} +0 -0
  69. /package/lib/{iconfont.1760602279303.woff2 → iconfont.1761181613193.woff2} +0 -0
@@ -7,6 +7,7 @@ import { updateCellTitle, getPropClass } from '../../ui/src/dom';
7
7
  import { isEnableConf } from '../../ui/src/utils';
8
8
  import { getSlotVNs } from '../../ui/src/vn';
9
9
  const { getI18n, renderer, renderEmptyElement } = VxeUI;
10
+ const sourceType = 'table';
10
11
  const renderType = 'body';
11
12
  export default defineVxeComponent({
12
13
  name: 'VxeTableBody',
@@ -149,6 +150,7 @@ export default defineVxeComponent({
149
150
  $columnIndex,
150
151
  _columnIndex,
151
152
  fixed: fixedType,
153
+ source: sourceType,
152
154
  type: renderType,
153
155
  isHidden: !!fixedHiddenColumn,
154
156
  level: rowLevel,
@@ -569,6 +571,7 @@ export default defineVxeComponent({
569
571
  $columnIndex,
570
572
  _columnIndex,
571
573
  fixed: fixedType,
574
+ source: sourceType,
572
575
  type: renderType,
573
576
  level: rowLevel,
574
577
  row,
@@ -5,6 +5,7 @@ import { VxeUI } from '../../ui';
5
5
  import { updateCellTitle, getPropClass } from '../../ui/src/dom';
6
6
  import { getCalcHeight } from './util';
7
7
  const { renderer, renderEmptyElement } = VxeUI;
8
+ const sourceType = 'table';
8
9
  const renderType = 'footer';
9
10
  export default defineVxeComponent({
10
11
  name: 'VxeTableFooter',
@@ -88,6 +89,7 @@ export default defineVxeComponent({
88
89
  itemIndex,
89
90
  items: row,
90
91
  fixed: fixedType,
92
+ source: sourceType,
91
93
  type: renderType,
92
94
  data: footerTableData
93
95
  };
@@ -6,6 +6,7 @@ import { isEnableConf } from '../../ui/src/utils';
6
6
  import { getCalcHeight, convertHeaderColumnToRows, convertHeaderToGridRows } from './util';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  const { renderer, renderEmptyElement } = VxeUI;
9
+ const sourceType = 'table';
9
10
  const renderType = 'header';
10
11
  function getColumnFirstChild(column) {
11
12
  const { children } = column;
@@ -109,6 +110,7 @@ export default defineVxeComponent({
109
110
  _columnIndex,
110
111
  firstFilterOption: firstFilterOption,
111
112
  fixed: fixedType,
113
+ source: sourceType,
112
114
  type: renderType,
113
115
  isHidden: fixedHiddenColumn,
114
116
  hasFilter
@@ -286,6 +288,7 @@ export default defineVxeComponent({
286
288
  _columnIndex,
287
289
  option: firstFilterOption,
288
290
  fixed: fixedType,
291
+ source: sourceType,
289
292
  type: renderType,
290
293
  isHidden: fixedHiddenColumn,
291
294
  hasFilter
@@ -413,13 +413,23 @@ export default defineVxeComponent({
413
413
  const computeScrollbarOpts = computed(() => {
414
414
  return Object.assign({}, getConfig().table.scrollbarConfig, props.scrollbarConfig);
415
415
  });
416
- const computeScrollbarXToTop = computed(() => {
416
+ const computeScrollbarXOpts = computed(() => {
417
+ var _a;
417
418
  const scrollbarOpts = computeScrollbarOpts.value;
418
- return !!(scrollbarOpts.x && scrollbarOpts.x.position === 'top');
419
+ return Object.assign({}, scrollbarOpts.x, ((_a = props.scrollbarConfig) === null || _a === void 0 ? void 0 : _a.x) || {});
419
420
  });
420
- const computeScrollbarYToLeft = computed(() => {
421
+ const computeScrollbarYOpts = computed(() => {
422
+ var _a;
421
423
  const scrollbarOpts = computeScrollbarOpts.value;
422
- return !!(scrollbarOpts.y && scrollbarOpts.y.position === 'left');
424
+ return Object.assign({}, scrollbarOpts.y, ((_a = props.scrollbarConfig) === null || _a === void 0 ? void 0 : _a.y) || {});
425
+ });
426
+ const computeScrollbarXToTop = computed(() => {
427
+ const scrollbarXOpts = computeScrollbarXOpts.value;
428
+ return scrollbarXOpts.position === 'top';
429
+ });
430
+ const computeScrollbarYToLeft = computed(() => {
431
+ const scrollbarYOpts = computeScrollbarYOpts.value;
432
+ return scrollbarYOpts.position === 'left';
423
433
  });
424
434
  const computeScrollYThreshold = computed(() => {
425
435
  const virtualYOpts = computeVirtualYOpts.value;
@@ -770,6 +780,8 @@ export default defineVxeComponent({
770
780
  computeVirtualXOpts,
771
781
  computeVirtualYOpts,
772
782
  computeScrollbarOpts,
783
+ computeScrollbarXOpts,
784
+ computeScrollbarYOpts,
773
785
  computeScrollbarXToTop,
774
786
  computeScrollbarYToLeft,
775
787
  computeColumnOpts,
@@ -1457,7 +1469,7 @@ export default defineVxeComponent({
1457
1469
  });
1458
1470
  };
1459
1471
  const calcTableHeight = (key) => {
1460
- const { editConfig } = props;
1472
+ const { editConfig, editRules } = props;
1461
1473
  const { parentHeight } = reactData;
1462
1474
  let val = props[key];
1463
1475
  if (key === 'minHeight') {
@@ -1465,7 +1477,7 @@ export default defineVxeComponent({
1465
1477
  if (XEUtils.eqNull(val)) {
1466
1478
  if (eqEmptyValue(defMinHeight)) {
1467
1479
  // 编辑模式默认最小高度
1468
- if (isEnableConf(editConfig)) {
1480
+ if (editRules && isEnableConf(editConfig)) {
1469
1481
  val = 144;
1470
1482
  }
1471
1483
  }
@@ -2316,7 +2328,7 @@ export default defineVxeComponent({
2316
2328
  const { visibleColumn, tableHeight, elemStore, customHeight, customMinHeight, customMaxHeight, tHeaderHeight, tFooterHeight } = internalData;
2317
2329
  const $xeGanttView = internalData.xeGanttView;
2318
2330
  const el = refElem.value;
2319
- if (!el || !el.clientHeight) {
2331
+ if (!el || (internalData.tBodyHeight && !el.clientHeight)) {
2320
2332
  return;
2321
2333
  }
2322
2334
  const containerList = ['main', 'left', 'right'];
@@ -2333,7 +2345,6 @@ export default defineVxeComponent({
2333
2345
  emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : '';
2334
2346
  }
2335
2347
  const scrollbarXConf = scrollbarOpts.x || {};
2336
- const scrollbarXToTop = computeScrollbarXToTop.value;
2337
2348
  const scrollbarYConf = scrollbarOpts.y || {};
2338
2349
  const scrollbarYToLeft = computeScrollbarYToLeft.value;
2339
2350
  let xScrollbarVisible = overflowX ? 'visible' : 'hidden';
@@ -2383,16 +2394,31 @@ export default defineVxeComponent({
2383
2394
  }
2384
2395
  const xWrapperEl = refScrollXWrapperElem.value;
2385
2396
  if (xWrapperEl) {
2386
- xWrapperEl.style.left = scrollbarXToTop ? `${osbWidth}px` : '';
2387
2397
  xWrapperEl.style.width = `${el.clientWidth - osbWidth}px`;
2398
+ if (scrollbarYToLeft) {
2399
+ xWrapperEl.style.left = `${osbWidth}px`;
2400
+ }
2401
+ else {
2402
+ xWrapperEl.style.left = '';
2403
+ }
2388
2404
  }
2389
2405
  if (xLeftCornerEl) {
2390
- xLeftCornerEl.style.width = scrollbarXToTop ? `${osbWidth}px` : '';
2391
- xLeftCornerEl.style.display = scrollbarXToTop ? (overflowX && osbHeight ? 'block' : '') : '';
2406
+ if (scrollbarYToLeft) {
2407
+ xLeftCornerEl.style.width = `${osbWidth}px`;
2408
+ xLeftCornerEl.style.display = overflowY && osbWidth ? 'block' : '';
2409
+ }
2410
+ else {
2411
+ xLeftCornerEl.style.display = '';
2412
+ }
2392
2413
  }
2393
2414
  if (xRightCornerEl) {
2394
- xRightCornerEl.style.width = scrollbarXToTop ? '' : `${osbWidth}px`;
2395
- xRightCornerEl.style.display = scrollbarXToTop ? '' : (xScrollbarVisible === 'visible' ? 'block' : '');
2415
+ if (scrollbarYToLeft) {
2416
+ xRightCornerEl.style.display = '';
2417
+ }
2418
+ else {
2419
+ xRightCornerEl.style.width = `${osbWidth}px`;
2420
+ xRightCornerEl.style.display = xScrollbarVisible === 'visible' ? 'block' : '';
2421
+ }
2396
2422
  }
2397
2423
  const scrollYVirtualEl = refScrollYVirtualElem.value;
2398
2424
  if (scrollYVirtualEl) {
@@ -3970,8 +3996,10 @@ export default defineVxeComponent({
3970
3996
  updateAfterDataIndex();
3971
3997
  return nextTick();
3972
3998
  }).then(() => {
3999
+ updateTreeLineStyle();
3973
4000
  return handleLazyRecalculate(true, true, true);
3974
4001
  }).then(() => {
4002
+ updateTreeLineStyle();
3975
4003
  setTimeout(() => {
3976
4004
  $xeTable.updateCellAreas();
3977
4005
  }, 30);
@@ -4329,6 +4357,9 @@ export default defineVxeComponent({
4329
4357
  }
4330
4358
  }
4331
4359
  };
4360
+ /**
4361
+ * 更新展开行样式
4362
+ */
4332
4363
  const updateRowExpandStyle = () => {
4333
4364
  const { expandColumn, scrollYLoad, scrollYTop, isScrollYBig } = reactData;
4334
4365
  const expandOpts = computeExpandOpts.value;
@@ -4384,6 +4415,12 @@ export default defineVxeComponent({
4384
4415
  }
4385
4416
  }
4386
4417
  };
4418
+ /**
4419
+ * 更新树连接线样式
4420
+ */
4421
+ const updateTreeLineStyle = () => {
4422
+ // 待优化
4423
+ };
4387
4424
  const handleRowExpandScroll = () => {
4388
4425
  const { elemStore } = internalData;
4389
4426
  const rowExpandEl = refRowExpandElem.value;
@@ -6817,14 +6854,40 @@ export default defineVxeComponent({
6817
6854
  * 获取表格的滚动状态
6818
6855
  */
6819
6856
  getScroll() {
6820
- const { scrollXLoad, scrollYLoad } = reactData;
6857
+ return $xeTable.getScrollData();
6858
+ },
6859
+ /**
6860
+ * 获取表格的滚动数据
6861
+ */
6862
+ getScrollData() {
6863
+ const { scrollXLoad, scrollYLoad, scrollbarHeight, scrollbarWidth } = reactData;
6821
6864
  const { elemStore } = internalData;
6822
6865
  const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
6866
+ const scrollTop = bodyScrollElem ? bodyScrollElem.scrollTop : 0;
6867
+ const scrollLeft = bodyScrollElem ? bodyScrollElem.scrollLeft : 0;
6868
+ const clientHeight = bodyScrollElem ? bodyScrollElem.clientHeight : 0;
6869
+ const clientWidth = bodyScrollElem ? bodyScrollElem.clientWidth : 0;
6870
+ const scrollHeight = bodyScrollElem ? bodyScrollElem.scrollHeight : 0;
6871
+ const scrollWidth = bodyScrollElem ? bodyScrollElem.scrollWidth : 0;
6872
+ const isTop = scrollTop <= 0;
6873
+ const isBottom = scrollTop + clientHeight >= scrollHeight;
6874
+ const isLeft = scrollLeft <= 0;
6875
+ const isRight = scrollLeft + clientWidth >= scrollWidth;
6823
6876
  return {
6824
6877
  virtualX: scrollXLoad,
6825
6878
  virtualY: scrollYLoad,
6826
- scrollTop: bodyScrollElem ? bodyScrollElem.scrollTop : 0,
6827
- scrollLeft: bodyScrollElem ? bodyScrollElem.scrollLeft : 0
6879
+ isTop,
6880
+ isBottom,
6881
+ isLeft,
6882
+ isRight,
6883
+ scrollbarHeight,
6884
+ scrollbarWidth,
6885
+ scrollTop,
6886
+ scrollLeft,
6887
+ scrollHeight,
6888
+ scrollWidth,
6889
+ clientHeight,
6890
+ clientWidth
6828
6891
  };
6829
6892
  },
6830
6893
  /**
@@ -6944,6 +7007,8 @@ export default defineVxeComponent({
6944
7007
  scrollYStore.endIndex = scrollYStore.visibleSize;
6945
7008
  scrollYStore.visibleEndIndex = scrollYStore.visibleSize;
6946
7009
  return nextTick().then(() => {
7010
+ internalData.lastScrollLeft = 0;
7011
+ internalData.lastScrollTop = 0;
6947
7012
  internalData.intoRunScroll = false;
6948
7013
  });
6949
7014
  },
@@ -8165,7 +8230,7 @@ export default defineVxeComponent({
8165
8230
  const el = refElem.value;
8166
8231
  if (el) {
8167
8232
  const parentElem = el.parentNode;
8168
- const parentPaddingSize = height === '100%' || height === 'auto' ? getPaddingTopBottomSize(parentElem) : 0;
8233
+ let parentPaddingSize = 0;
8169
8234
  let parentWrapperHeight = 0;
8170
8235
  if (parentElem) {
8171
8236
  if ($xeGantt && hasClass(parentElem, 'vxe-gantt--table-wrapper')) {
@@ -8176,6 +8241,7 @@ export default defineVxeComponent({
8176
8241
  }
8177
8242
  else {
8178
8243
  parentWrapperHeight = parentElem.clientHeight;
8244
+ parentPaddingSize = height === '100%' || height === 'auto' ? getPaddingTopBottomSize(parentElem) : 0;
8179
8245
  }
8180
8246
  }
8181
8247
  return Math.floor(parentWrapperHeight - parentPaddingSize);
@@ -11205,11 +11271,10 @@ export default defineVxeComponent({
11205
11271
  const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
11206
11272
  const leftFixedWidth = computeLeftFixedWidth.value;
11207
11273
  const rightFixedWidth = computeRightFixedWidth.value;
11208
- if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
11209
- return;
11210
- }
11211
11274
  const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
11212
11275
  const rowOpts = computeRowOpts.value;
11276
+ const scrollbarXOpts = computeScrollbarXOpts.value;
11277
+ const scrollbarYOpts = computeScrollbarYOpts.value;
11213
11278
  const xHandleEl = refScrollXHandleElem.value;
11214
11279
  const yHandleEl = refScrollYHandleElem.value;
11215
11280
  const leftScrollElem = getRefElem(elemStore['left-body-scroll']);
@@ -11218,12 +11283,6 @@ export default defineVxeComponent({
11218
11283
  const footerScrollElem = getRefElem(elemStore['main-footer-scroll']);
11219
11284
  const rightScrollElem = getRefElem(elemStore['right-body-scroll']);
11220
11285
  const rowExpandEl = refRowExpandElem.value;
11221
- if (!xHandleEl) {
11222
- return;
11223
- }
11224
- if (!yHandleEl) {
11225
- return;
11226
- }
11227
11286
  if (!bodyScrollElem) {
11228
11287
  return;
11229
11288
  }
@@ -11236,13 +11295,28 @@ export default defineVxeComponent({
11236
11295
  const scrollLeft = currScrollLeft + deltaLeft;
11237
11296
  const isRollX = scrollLeft !== lastScrollLeft;
11238
11297
  const isRollY = scrollTop !== lastScrollTop;
11298
+ if (isRollX) {
11299
+ // 如果禁用滚动
11300
+ if (scrollbarXOpts.visible === 'hidden') {
11301
+ evnt.preventDefault();
11302
+ return;
11303
+ }
11304
+ }
11239
11305
  if (isRollY) {
11306
+ // 如果禁用滚动
11307
+ if (scrollbarYOpts.visible === 'hidden') {
11308
+ evnt.preventDefault();
11309
+ return;
11310
+ }
11240
11311
  const isTopWheel = deltaTop < 0;
11241
11312
  // 如果滚动位置已经是顶部或底部,则不需要触发
11242
11313
  if (isTopWheel ? currScrollTop <= 0 : currScrollTop >= bodyScrollElem.scrollHeight - bodyScrollElem.clientHeight) {
11243
11314
  return;
11244
11315
  }
11245
11316
  }
11317
+ if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
11318
+ return;
11319
+ }
11246
11320
  if (rowOpts.isHover || highlightHoverRow) {
11247
11321
  $xeTable.clearHoverRow();
11248
11322
  }
@@ -11745,14 +11819,24 @@ export default defineVxeComponent({
11745
11819
  * 如果宽度足够情况下,则不需要渲染固定列
11746
11820
  * @param {String} fixedType 固定列类型
11747
11821
  */
11748
- const renderFixed = (fixedType) => {
11822
+ const renderViewFixed = (fixedType) => {
11749
11823
  const { showHeader, showFooter } = props;
11750
11824
  const { tableData, tableColumn, tableGroupColumn, columnStore, footerTableData } = reactData;
11825
+ const scrollbarOpts = computeScrollbarOpts.value;
11826
+ const scrollbarXOpts = computeScrollbarXOpts.value;
11827
+ const scrollbarYOpts = computeScrollbarYOpts.value;
11828
+ const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts;
11829
+ const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts;
11751
11830
  const isFixedLeft = fixedType === 'left';
11752
11831
  const fixedColumn = isFixedLeft ? columnStore.leftList : columnStore.rightList;
11832
+ const osXBehavior = XEUtils.eqNull(overscrollXBehavior) ? scrollbarOpts.overscrollBehavior : overscrollXBehavior;
11833
+ const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior;
11753
11834
  return h('div', {
11754
11835
  ref: isFixedLeft ? refLeftContainer : refRightContainer,
11755
- class: `vxe-table--fixed-${fixedType}-wrapper`
11836
+ class: [`vxe-table--fixed-${fixedType}-wrapper`, `sx--${scrollbarXOpts.visible}`, `sy--${scrollbarYOpts.visible}`, {
11837
+ [`x-ob--${osXBehavior}`]: osXBehavior,
11838
+ [`y-ob--${osYBehavior}`]: osYBehavior
11839
+ }]
11756
11840
  }, [
11757
11841
  showHeader
11758
11842
  ? h(TableHeaderComponent, {
@@ -11940,6 +12024,7 @@ export default defineVxeComponent({
11940
12024
  $columnIndex,
11941
12025
  _columnIndex,
11942
12026
  fixed: '',
12027
+ source: 'table',
11943
12028
  type: 'body',
11944
12029
  level: rowLevel,
11945
12030
  rowid,
@@ -12039,13 +12124,23 @@ export default defineVxeComponent({
12039
12124
  const renderViewport = () => {
12040
12125
  const { showHeader, showFooter } = props;
12041
12126
  const { overflowX, tableData, tableColumn, tableGroupColumn, footerTableData, columnStore } = reactData;
12127
+ const scrollbarOpts = computeScrollbarOpts.value;
12128
+ const scrollbarXOpts = computeScrollbarXOpts.value;
12129
+ const scrollbarYOpts = computeScrollbarYOpts.value;
12130
+ const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts;
12131
+ const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts;
12042
12132
  const { leftList, rightList } = columnStore;
12133
+ const osXBehavior = XEUtils.eqNull(overscrollXBehavior) ? scrollbarOpts.overscrollBehavior : overscrollXBehavior;
12134
+ const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior;
12043
12135
  return h('div', {
12044
12136
  ref: refTableViewportElem,
12045
- class: 'vxe-table--viewport-wrapper'
12137
+ class: ['vxe-table--viewport-wrapper', {
12138
+ [`x-ob--${osXBehavior}`]: osXBehavior,
12139
+ [`y-ob--${osYBehavior}`]: osYBehavior
12140
+ }]
12046
12141
  }, [
12047
12142
  h('div', {
12048
- class: 'vxe-table--main-wrapper'
12143
+ class: ['vxe-table--main-wrapper', `sx--${scrollbarXOpts.visible}`, `sy--${scrollbarYOpts.visible}`]
12049
12144
  }, [
12050
12145
  /**
12051
12146
  * 表头
@@ -12080,8 +12175,8 @@ export default defineVxeComponent({
12080
12175
  h('div', {
12081
12176
  class: 'vxe-table--fixed-wrapper'
12082
12177
  }, [
12083
- leftList && leftList.length && overflowX ? renderFixed('left') : renderEmptyElement($xeTable),
12084
- rightList && rightList.length && overflowX ? renderFixed('right') : renderEmptyElement($xeTable)
12178
+ leftList && leftList.length && overflowX ? renderViewFixed('left') : renderEmptyElement($xeTable),
12179
+ rightList && rightList.length && overflowX ? renderViewFixed('right') : renderEmptyElement($xeTable)
12085
12180
  ]),
12086
12181
  renderRowExpandedVNs()
12087
12182
  ]);
@@ -12211,11 +12306,15 @@ export default defineVxeComponent({
12211
12306
  h('div', {
12212
12307
  key: 'tn',
12213
12308
  ref: refEmptyPlaceholder,
12214
- class: 'vxe-table--empty-placeholder'
12309
+ class: 'vxe-table--empty-place-wrapper'
12215
12310
  }, [
12216
12311
  h('div', {
12217
- class: 'vxe-table--empty-content'
12218
- }, renderEmptyBody())
12312
+ class: 'vxe-table--empty-placeholder'
12313
+ }, [
12314
+ h('div', {
12315
+ class: 'vxe-table--empty-content'
12316
+ }, renderEmptyBody())
12317
+ ])
12219
12318
  ]),
12220
12319
  /**
12221
12320
  * 边框线
@@ -12522,6 +12621,18 @@ export default defineVxeComponent({
12522
12621
  watch(() => VxeUI.getLanguage(), () => {
12523
12622
  reLayoutFlag.value++;
12524
12623
  });
12624
+ watch(() => {
12625
+ const scrollbarXOpts = computeScrollbarXOpts.value;
12626
+ return scrollbarXOpts.visible;
12627
+ }, () => {
12628
+ reLayoutFlag.value++;
12629
+ });
12630
+ watch(() => {
12631
+ const scrollbarYOpts = computeScrollbarYOpts.value;
12632
+ return scrollbarYOpts.visible;
12633
+ }, () => {
12634
+ reLayoutFlag.value++;
12635
+ });
12525
12636
  watch(reLayoutFlag, () => {
12526
12637
  $xeTable.recalculate(true);
12527
12638
  });
@@ -566,7 +566,7 @@ const lineOffsetSizes = {
566
566
  medium: 1,
567
567
  large: 0
568
568
  };
569
- function countTreeExpand(prevRow, params) {
569
+ function countTreeExpandSize(prevRow, params) {
570
570
  let count = 1;
571
571
  if (!prevRow) {
572
572
  return count;
@@ -583,7 +583,7 @@ function countTreeExpand(prevRow, params) {
583
583
  const rowChildren = prevRow[transform ? mapChildrenField : childrenField];
584
584
  if (rowChildren && treeExpandedFlag && treeExpandedMaps[getRowid($table, prevRow)]) {
585
585
  for (let index = 0; index < rowChildren.length; index++) {
586
- count += countTreeExpand(rowChildren[index], params);
586
+ count += countTreeExpandSize(rowChildren[index], params);
587
587
  }
588
588
  }
589
589
  return count;
@@ -613,7 +613,7 @@ export function calcTreeLine(params, prevRow) {
613
613
  const currCellHeight = rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
614
614
  let expandSize = 1;
615
615
  if (prevRow) {
616
- expandSize = countTreeExpand(prevRow, params);
616
+ expandSize = countTreeExpandSize(prevRow, params);
617
617
  }
618
618
  let cellHeight = currCellHeight;
619
619
  const vnHeight = rowRest.height;
@@ -627,28 +627,31 @@ export function calcTreeLine(params, prevRow) {
627
627
  export function clearTableDefaultStatus($xeTable) {
628
628
  const { props, internalData } = $xeTable;
629
629
  internalData.initStatus = false;
630
- $xeTable.clearSort();
631
- $xeTable.clearCurrentRow();
632
- $xeTable.clearCurrentColumn();
633
- $xeTable.clearRadioRow();
634
- $xeTable.clearRadioReserve();
635
- $xeTable.clearCheckboxRow();
636
- $xeTable.clearCheckboxReserve();
637
- $xeTable.clearRowExpand();
638
- $xeTable.clearTreeExpand();
639
- $xeTable.clearTreeExpandReserve();
640
- $xeTable.clearPendingRow();
630
+ const actionList = [
631
+ $xeTable.clearSort(),
632
+ $xeTable.clearCurrentRow(),
633
+ $xeTable.clearCurrentColumn(),
634
+ $xeTable.clearRadioRow(),
635
+ $xeTable.clearRadioReserve(),
636
+ $xeTable.clearCheckboxRow(),
637
+ $xeTable.clearCheckboxReserve(),
638
+ $xeTable.clearRowExpand(),
639
+ $xeTable.clearTreeExpand(),
640
+ $xeTable.clearTreeExpandReserve(),
641
+ $xeTable.clearPendingRow()
642
+ ];
641
643
  if ($xeTable.clearFilter) {
642
- $xeTable.clearFilter();
644
+ actionList.push($xeTable.clearFilter());
643
645
  }
644
646
  if ($xeTable.clearSelected && (props.keyboardConfig || props.mouseConfig)) {
645
- $xeTable.clearSelected();
647
+ actionList.push($xeTable.clearSelected());
646
648
  }
647
649
  if ($xeTable.clearCellAreas && props.mouseConfig) {
648
- $xeTable.clearCellAreas();
649
- $xeTable.clearCopyCellArea();
650
+ actionList.push($xeTable.clearCellAreas(), $xeTable.clearCopyCellArea());
650
651
  }
651
- return $xeTable.clearScroll();
652
+ return Promise.all(actionList).then(() => {
653
+ return $xeTable.clearScroll();
654
+ });
652
655
  }
653
656
  export function clearTableAllStatus($xeTable) {
654
657
  if ($xeTable.clearFilter) {
@@ -1788,6 +1788,18 @@
1788
1788
  overflow: hidden;
1789
1789
  flex-grow: 1;
1790
1790
  }
1791
+ .vxe-table--viewport-wrapper.x-ob--contain > .vxe-table--main-wrapper > .vxe-table--header-wrapper > .vxe-table--header-inner-wrapper {
1792
+ overscroll-behavior-x: contain;
1793
+ }
1794
+ .vxe-table--viewport-wrapper.x-ob--contain > .vxe-table--main-wrapper > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper {
1795
+ overscroll-behavior-x: contain;
1796
+ }
1797
+ .vxe-table--viewport-wrapper.x-ob--contain > .vxe-table--main-wrapper > .vxe-table--footer-wrapper > .vxe-table--footer-inner-wrapper {
1798
+ overscroll-behavior-x: contain;
1799
+ }
1800
+ .vxe-table--viewport-wrapper.y-ob--contain > .vxe-table--main-wrapper > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper {
1801
+ overscroll-behavior-y: contain;
1802
+ }
1791
1803
 
1792
1804
  .vxe-table--header-wrapper,
1793
1805
  .vxe-table--body-wrapper,
@@ -1827,6 +1839,28 @@
1827
1839
  overflow-x: scroll;
1828
1840
  }
1829
1841
 
1842
+ .vxe-table--main-wrapper.sx--hidden > .vxe-table--header-wrapper > .vxe-table--header-inner-wrapper {
1843
+ overflow-x: hidden;
1844
+ }
1845
+ .vxe-table--main-wrapper.sx--hidden > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper {
1846
+ overflow-x: hidden;
1847
+ }
1848
+ .vxe-table--main-wrapper.sx--hidden > .vxe-table--footer-wrapper > .vxe-table--footer-inner-wrapper {
1849
+ overflow-x: hidden;
1850
+ }
1851
+ .vxe-table--main-wrapper.sy--hidden > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper {
1852
+ overflow-y: hidden;
1853
+ }
1854
+
1855
+ .vxe-table--fixed-left-wrapper.sx--hidden > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper,
1856
+ .vxe-table--fixed-right-wrapper.sx--hidden > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper {
1857
+ overflow-x: hidden;
1858
+ }
1859
+ .vxe-table--fixed-left-wrapper.sy--hidden > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper,
1860
+ .vxe-table--fixed-right-wrapper.sy--hidden > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper {
1861
+ overflow-y: hidden;
1862
+ }
1863
+
1830
1864
  .vxe-loading--custom-wrapper {
1831
1865
  display: none;
1832
1866
  position: absolute;
@@ -2212,6 +2246,9 @@
2212
2246
  left: 0;
2213
2247
  bottom: 0;
2214
2248
  }
2249
+ .vxe-table .vxe-table--scroll-x-wrapper {
2250
+ height: 100%;
2251
+ }
2215
2252
  .vxe-table .vxe-table--scroll-x-handle {
2216
2253
  overflow-y: hidden;
2217
2254
  overflow-x: scroll;
@@ -3151,6 +3188,10 @@
3151
3188
  outline: 0;
3152
3189
  background-color: var(--vxe-ui-layout-background-color);
3153
3190
  }
3191
+ .vxe-table--render-default .vxe-table--fixed-left-wrapper.y-ob--contain > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper,
3192
+ .vxe-table--render-default .vxe-table--fixed-right-wrapper.y-ob--contain > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper {
3193
+ overscroll-behavior-y: contain;
3194
+ }
3154
3195
  .vxe-table--render-default .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper,
3155
3196
  .vxe-table--render-default .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper {
3156
3197
  outline: 0;
@@ -3477,11 +3518,16 @@
3477
3518
  display: none;
3478
3519
  visibility: hidden;
3479
3520
  }
3480
- .vxe-table--render-default .vxe-table--empty-placeholder {
3521
+ .vxe-table--render-default .vxe-table--empty-place-wrapper {
3481
3522
  display: none;
3482
3523
  position: absolute;
3524
+ width: 100%;
3483
3525
  top: 0;
3484
3526
  z-index: 5;
3527
+ overflow: hidden;
3528
+ }
3529
+ .vxe-table--render-default .vxe-table--empty-placeholder {
3530
+ display: flex;
3485
3531
  }
3486
3532
  .vxe-table--render-default .vxe-table--empty-content {
3487
3533
  display: block;
@@ -3489,7 +3535,7 @@
3489
3535
  pointer-events: auto;
3490
3536
  }
3491
3537
  .vxe-table--render-default.is--empty .vxe-table--empty-block,
3492
- .vxe-table--render-default.is--empty .vxe-table--empty-placeholder {
3538
+ .vxe-table--render-default.is--empty .vxe-table--empty-place-wrapper {
3493
3539
  display: flex;
3494
3540
  }
3495
3541
  .vxe-table--render-default .vxe-body--column.col--selected {