vxe-table 4.17.0-beta.8 → 4.17.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 (66) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/style.css +1 -1
  4. package/es/style.min.css +1 -1
  5. package/es/table/module/keyboard/hook.js +4 -26
  6. package/es/table/module/menu/hook.js +2 -2
  7. package/es/table/src/body.js +3 -0
  8. package/es/table/src/footer.js +2 -0
  9. package/es/table/src/header.js +3 -0
  10. package/es/table/src/table.js +73 -15
  11. package/es/table/src/util.js +3 -3
  12. package/es/table/style.css +19 -0
  13. package/es/table/style.min.css +1 -1
  14. package/es/ui/index.js +1 -1
  15. package/es/ui/src/log.js +1 -1
  16. package/es/ui/src/utils.js +6 -5
  17. package/es/vxe-table/style.css +19 -0
  18. package/es/vxe-table/style.min.css +1 -1
  19. package/helper/vetur/attributes.json +1 -1
  20. package/helper/vetur/tags.json +1 -1
  21. package/lib/index.css +1 -1
  22. package/lib/index.min.css +1 -1
  23. package/lib/index.umd.js +41 -48
  24. package/lib/index.umd.min.js +1 -1
  25. package/lib/style.css +1 -1
  26. package/lib/style.min.css +1 -1
  27. package/lib/table/module/keyboard/hook.js +3 -28
  28. package/lib/table/module/keyboard/hook.min.js +1 -1
  29. package/lib/table/module/menu/hook.js +2 -0
  30. package/lib/table/module/menu/hook.min.js +1 -1
  31. package/lib/table/src/body.js +3 -0
  32. package/lib/table/src/body.min.js +1 -1
  33. package/lib/table/src/footer.js +2 -0
  34. package/lib/table/src/footer.min.js +1 -1
  35. package/lib/table/src/header.js +3 -0
  36. package/lib/table/src/header.min.js +1 -1
  37. package/lib/table/src/table.js +12 -7
  38. package/lib/table/src/table.min.js +1 -1
  39. package/lib/table/src/util.js +3 -3
  40. package/lib/table/src/util.min.js +1 -1
  41. package/lib/table/style/style.css +19 -0
  42. package/lib/table/style/style.min.css +1 -1
  43. package/lib/ui/index.js +1 -1
  44. package/lib/ui/index.min.js +1 -1
  45. package/lib/ui/src/log.js +1 -1
  46. package/lib/ui/src/log.min.js +1 -1
  47. package/lib/ui/src/utils.js +8 -5
  48. package/lib/ui/src/utils.min.js +1 -1
  49. package/lib/vxe-table/style/style.css +19 -0
  50. package/lib/vxe-table/style/style.min.css +1 -1
  51. package/package.json +1 -1
  52. package/packages/table/module/keyboard/hook.ts +4 -28
  53. package/packages/table/module/menu/hook.ts +2 -2
  54. package/packages/table/src/body.ts +3 -0
  55. package/packages/table/src/footer.ts +2 -0
  56. package/packages/table/src/header.ts +3 -0
  57. package/packages/table/src/table.ts +71 -15
  58. package/packages/table/src/util.ts +3 -3
  59. package/packages/ui/src/utils.ts +7 -5
  60. package/styles/components/table.scss +38 -0
  61. /package/es/{iconfont.1760580064178.ttf → iconfont.1760925752102.ttf} +0 -0
  62. /package/es/{iconfont.1760580064178.woff → iconfont.1760925752102.woff} +0 -0
  63. /package/es/{iconfont.1760580064178.woff2 → iconfont.1760925752102.woff2} +0 -0
  64. /package/lib/{iconfont.1760580064178.ttf → iconfont.1760925752102.ttf} +0 -0
  65. /package/lib/{iconfont.1760580064178.woff → iconfont.1760925752102.woff} +0 -0
  66. /package/lib/{iconfont.1760580064178.woff2 → iconfont.1760925752102.woff2} +0 -0
@@ -1,30 +1,8 @@
1
1
  import XEUtils from 'xe-utils';
2
2
  import { VxeUI } from '../../../ui';
3
3
  import { getRefElem } from '../../src/util';
4
- import { hasClass, getAbsolutePos, addClass, removeClass, hasControlKey } from '../../../ui/src/dom';
4
+ import { getAbsolutePos, addClass, removeClass, hasControlKey } from '../../../ui/src/dom';
5
5
  const { hooks } = VxeUI;
6
- const browseObj = XEUtils.browse();
7
- function getTargetOffset(target, container) {
8
- let offsetTop = 0;
9
- let offsetLeft = 0;
10
- const triggerCheckboxLabel = !browseObj.firefox && hasClass(target, 'vxe-checkbox--label');
11
- if (triggerCheckboxLabel) {
12
- const checkboxLabelStyle = getComputedStyle(target);
13
- offsetTop -= XEUtils.toNumber(checkboxLabelStyle.paddingTop);
14
- offsetLeft -= XEUtils.toNumber(checkboxLabelStyle.paddingLeft);
15
- }
16
- while (target && target !== container) {
17
- offsetTop += target.offsetTop;
18
- offsetLeft += target.offsetLeft;
19
- target = target.offsetParent;
20
- if (triggerCheckboxLabel) {
21
- const checkboxStyle = getComputedStyle(target);
22
- offsetTop -= XEUtils.toNumber(checkboxStyle.paddingTop);
23
- offsetLeft -= XEUtils.toNumber(checkboxStyle.paddingLeft);
24
- }
25
- }
26
- return { offsetTop, offsetLeft };
27
- }
28
6
  hooks.add('tableKeyboardModule', {
29
7
  setupTable($xeTable) {
30
8
  const { props, reactData, internalData } = $xeTable;
@@ -117,6 +95,7 @@ hooks.add('tableKeyboardModule', {
117
95
  if (!bodyWrapperElem) {
118
96
  return;
119
97
  }
98
+ const bodyRect = bodyWrapperElem.getBoundingClientRect();
120
99
  const el = refElem.value;
121
100
  const disX = evnt.clientX;
122
101
  const disY = evnt.clientY;
@@ -125,9 +104,8 @@ hooks.add('tableKeyboardModule', {
125
104
  const selectRecords = $xeTable.getCheckboxRecords();
126
105
  let lastRangeRows = [];
127
106
  const marginSize = 1;
128
- const offsetRest = getTargetOffset(evnt.target, bodyWrapperElem);
129
- const startTop = offsetRest.offsetTop + evnt.offsetY;
130
- const startLeft = offsetRest.offsetLeft + evnt.offsetX;
107
+ const startTop = evnt.clientY - bodyRect.y + bodyWrapperElem.scrollTop;
108
+ const startLeft = evnt.clientX - bodyRect.x + bodyWrapperElem.scrollLeft;
131
109
  const startScrollTop = bodyWrapperElem.scrollTop;
132
110
  const rowHeight = trElem.offsetHeight;
133
111
  const trRect = trElem.getBoundingClientRect();
@@ -171,7 +171,7 @@ hooks.add('tableMenuModule', {
171
171
  }
172
172
  if (internalData._keyCtx) {
173
173
  const type = 'body';
174
- const params = { type, $table: $xeTable, $grid: $xeGrid, $gantt: $xeGantt, keyboard: true, columns: visibleColumn.slice(0), $event: evnt };
174
+ const params = { source: 'table', type, $table: $xeTable, $grid: $xeGrid, $gantt: $xeGantt, keyboard: true, columns: visibleColumn.slice(0), $event: evnt };
175
175
  // 如果开启单元格区域
176
176
  if (mouseConfig && mouseOpts.area) {
177
177
  const activeArea = $xeTable.getActiveCellArea();
@@ -199,7 +199,7 @@ hooks.add('tableMenuModule', {
199
199
  // target=td|th,直接向上找 table 去匹配即可
200
200
  return target.parentNode.parentNode.parentNode.getAttribute('xid') === xID;
201
201
  });
202
- const params = { type: layout, $table: $xeTable, $grid: $xeGrid, $gantt: $xeGantt, columns: visibleColumn.slice(0), $event: evnt };
202
+ const params = { source: 'table', type: layout, $table: $xeTable, $grid: $xeGrid, $gantt: $xeGantt, columns: visibleColumn.slice(0), $event: evnt };
203
203
  if (columnTargetNode.flag) {
204
204
  const cell = columnTargetNode.targetElem;
205
205
  const columnNodeRest = $xeTable.getColumnNode(cell);
@@ -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,
@@ -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;
@@ -11745,14 +11782,24 @@ export default defineVxeComponent({
11745
11782
  * 如果宽度足够情况下,则不需要渲染固定列
11746
11783
  * @param {String} fixedType 固定列类型
11747
11784
  */
11748
- const renderFixed = (fixedType) => {
11785
+ const renderViewFixed = (fixedType) => {
11749
11786
  const { showHeader, showFooter } = props;
11750
11787
  const { tableData, tableColumn, tableGroupColumn, columnStore, footerTableData } = reactData;
11788
+ const scrollbarOpts = computeScrollbarOpts.value;
11789
+ const scrollbarXOpts = computeScrollbarXOpts.value;
11790
+ const scrollbarYOpts = computeScrollbarYOpts.value;
11791
+ const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts;
11792
+ const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts;
11751
11793
  const isFixedLeft = fixedType === 'left';
11752
11794
  const fixedColumn = isFixedLeft ? columnStore.leftList : columnStore.rightList;
11795
+ const osXBehavior = XEUtils.eqNull(overscrollXBehavior) ? scrollbarOpts.overscrollBehavior : overscrollXBehavior;
11796
+ const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior;
11753
11797
  return h('div', {
11754
11798
  ref: isFixedLeft ? refLeftContainer : refRightContainer,
11755
- class: `vxe-table--fixed-${fixedType}-wrapper`
11799
+ class: [`vxe-table--fixed-${fixedType}-wrapper`, {
11800
+ [`x-ob--${osXBehavior}`]: osXBehavior,
11801
+ [`y-ob--${osYBehavior}`]: osYBehavior
11802
+ }]
11756
11803
  }, [
11757
11804
  showHeader
11758
11805
  ? h(TableHeaderComponent, {
@@ -11940,6 +11987,7 @@ export default defineVxeComponent({
11940
11987
  $columnIndex,
11941
11988
  _columnIndex,
11942
11989
  fixed: '',
11990
+ source: 'table',
11943
11991
  type: 'body',
11944
11992
  level: rowLevel,
11945
11993
  rowid,
@@ -12039,10 +12087,20 @@ export default defineVxeComponent({
12039
12087
  const renderViewport = () => {
12040
12088
  const { showHeader, showFooter } = props;
12041
12089
  const { overflowX, tableData, tableColumn, tableGroupColumn, footerTableData, columnStore } = reactData;
12090
+ const scrollbarOpts = computeScrollbarOpts.value;
12091
+ const scrollbarXOpts = computeScrollbarXOpts.value;
12092
+ const scrollbarYOpts = computeScrollbarYOpts.value;
12093
+ const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts;
12094
+ const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts;
12042
12095
  const { leftList, rightList } = columnStore;
12096
+ const osXBehavior = XEUtils.eqNull(overscrollXBehavior) ? scrollbarOpts.overscrollBehavior : overscrollXBehavior;
12097
+ const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior;
12043
12098
  return h('div', {
12044
12099
  ref: refTableViewportElem,
12045
- class: 'vxe-table--viewport-wrapper'
12100
+ class: ['vxe-table--viewport-wrapper', {
12101
+ [`x-ob--${osXBehavior}`]: osXBehavior,
12102
+ [`y-ob--${osYBehavior}`]: osYBehavior
12103
+ }]
12046
12104
  }, [
12047
12105
  h('div', {
12048
12106
  class: 'vxe-table--main-wrapper'
@@ -12080,8 +12138,8 @@ export default defineVxeComponent({
12080
12138
  h('div', {
12081
12139
  class: 'vxe-table--fixed-wrapper'
12082
12140
  }, [
12083
- leftList && leftList.length && overflowX ? renderFixed('left') : renderEmptyElement($xeTable),
12084
- rightList && rightList.length && overflowX ? renderFixed('right') : renderEmptyElement($xeTable)
12141
+ leftList && leftList.length && overflowX ? renderViewFixed('left') : renderEmptyElement($xeTable),
12142
+ rightList && rightList.length && overflowX ? renderViewFixed('right') : renderEmptyElement($xeTable)
12085
12143
  ]),
12086
12144
  renderRowExpandedVNs()
12087
12145
  ]);
@@ -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;
@@ -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,
@@ -2212,6 +2224,9 @@
2212
2224
  left: 0;
2213
2225
  bottom: 0;
2214
2226
  }
2227
+ .vxe-table .vxe-table--scroll-x-wrapper {
2228
+ height: 100%;
2229
+ }
2215
2230
  .vxe-table .vxe-table--scroll-x-handle {
2216
2231
  overflow-y: hidden;
2217
2232
  overflow-x: scroll;
@@ -3151,6 +3166,10 @@
3151
3166
  outline: 0;
3152
3167
  background-color: var(--vxe-ui-layout-background-color);
3153
3168
  }
3169
+ .vxe-table--render-default .vxe-table--fixed-left-wrapper.y-ob--contain > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper,
3170
+ .vxe-table--render-default .vxe-table--fixed-right-wrapper.y-ob--contain > .vxe-table--body-wrapper > .vxe-table--body-inner-wrapper {
3171
+ overscroll-behavior-y: contain;
3172
+ }
3154
3173
  .vxe-table--render-default .vxe-table--fixed-left-wrapper .vxe-table--body-wrapper,
3155
3174
  .vxe-table--render-default .vxe-table--fixed-right-wrapper .vxe-table--body-wrapper {
3156
3175
  outline: 0;