vxe-table 3.25.0-beta.3 → 3.25.0-beta.4

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 (54) 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/filter/mixin.js +4 -7
  6. package/es/table/module/filter/panel.js +47 -48
  7. package/es/table/src/methods.js +11 -5
  8. package/es/table/src/table.js +48 -27
  9. package/es/table/src/util.js +1 -2
  10. package/es/table/style.css +31 -12
  11. package/es/table/style.min.css +1 -1
  12. package/es/ui/index.js +2 -2
  13. package/es/ui/src/log.js +1 -1
  14. package/es/vxe-table/style.css +31 -12
  15. package/es/vxe-table/style.min.css +1 -1
  16. package/lib/index.css +1 -1
  17. package/lib/index.min.css +1 -1
  18. package/lib/index.umd.js +103 -83
  19. package/lib/index.umd.min.js +1 -1
  20. package/lib/style.css +1 -1
  21. package/lib/style.min.css +1 -1
  22. package/lib/table/module/filter/mixin.js +5 -7
  23. package/lib/table/module/filter/mixin.min.js +1 -1
  24. package/lib/table/module/filter/panel.js +41 -37
  25. package/lib/table/module/filter/panel.min.js +1 -1
  26. package/lib/table/src/methods.js +3 -3
  27. package/lib/table/src/methods.min.js +1 -1
  28. package/lib/table/src/table.js +50 -31
  29. package/lib/table/src/table.min.js +1 -1
  30. package/lib/table/src/util.js +1 -2
  31. package/lib/table/src/util.min.js +1 -1
  32. package/lib/table/style/style.css +31 -12
  33. package/lib/table/style/style.min.css +1 -1
  34. package/lib/ui/index.js +2 -2
  35. package/lib/ui/index.min.js +1 -1
  36. package/lib/ui/src/log.js +1 -1
  37. package/lib/ui/src/log.min.js +1 -1
  38. package/lib/vxe-table/style/style.css +31 -12
  39. package/lib/vxe-table/style/style.min.css +1 -1
  40. package/package.json +2 -2
  41. package/packages/grid/src/grid.ts +2 -1
  42. package/packages/table/module/filter/mixin.ts +4 -7
  43. package/packages/table/module/filter/panel.ts +50 -48
  44. package/packages/table/src/methods.ts +12 -5
  45. package/packages/table/src/table.ts +51 -27
  46. package/packages/table/src/util.ts +1 -2
  47. package/packages/ui/index.ts +1 -1
  48. package/styles/components/table-module/filter.scss +25 -14
  49. /package/es/{iconfont.1792117667851.ttf → iconfont.1792139868734.ttf} +0 -0
  50. /package/es/{iconfont.1792117667851.woff → iconfont.1792139868734.woff} +0 -0
  51. /package/es/{iconfont.1792117667851.woff2 → iconfont.1792139868734.woff2} +0 -0
  52. /package/lib/{iconfont.1792117667851.ttf → iconfont.1792139868734.ttf} +0 -0
  53. /package/lib/{iconfont.1792117667851.woff → iconfont.1792139868734.woff} +0 -0
  54. /package/lib/{iconfont.1792117667851.woff2 → iconfont.1792139868734.woff2} +0 -0
@@ -11,7 +11,7 @@ function updatePopupStyle($xeTable) {
11
11
  const reactData = $xeTable;
12
12
  const internalData = $xeTable;
13
13
  const $xeGGWrapper = $xeGrid || $xeGantt;
14
- const { filterStore } = reactData;
14
+ const { filterStore, scrollbarHeight } = reactData;
15
15
  const { elemStore } = internalData;
16
16
  const { column, targetEl } = filterStore;
17
17
  if (!column) {
@@ -32,8 +32,6 @@ function updatePopupStyle($xeTable) {
32
32
  if (!filterWrapperElem) {
33
33
  return $xeTable.$nextTick();
34
34
  }
35
- const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
36
- const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
37
35
  /**
38
36
  * 是否显示筛选按钮图标
39
37
  * 如果不存在图标,则相对单元格居中显示
@@ -72,9 +70,9 @@ function updatePopupStyle($xeTable) {
72
70
  else {
73
71
  const filterWidth = filterWrapperElem.offsetWidth;
74
72
  const centerWidth = targetEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
75
- maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
76
73
  left = btnRect.left - tableRect.left - centerWidth;
77
74
  top = btnRect.top - tableRect.top + currEl.clientHeight;
75
+ maxHeight = Math.max(40, tableEl.clientHeight - top - scrollbarHeight);
78
76
  if (left < 1) {
79
77
  left = 1;
80
78
  }
@@ -96,7 +94,6 @@ function updatePopupStyle($xeTable) {
96
94
  if (zIndex) {
97
95
  panelStyle.zIndex = zIndex;
98
96
  }
99
- filterStore.style = panelStyle;
100
97
  // 筛选面板是自适应表格高度
101
98
  if (compConf ? !compConf.tableFilterAutoHeight : false) {
102
99
  maxHeight = 0;
@@ -106,8 +103,8 @@ function updatePopupStyle($xeTable) {
106
103
  maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
107
104
  }
108
105
  }
109
- // 判断面板不能大于表格高度
110
- filterStore.maxHeight = maxHeight;
106
+ panelStyle['--vxe-ui-vxe-table-filter-default-max-height'] = maxHeight ? toCssUnit(maxHeight) : 'none';
107
+ filterStore.style = panelStyle;
111
108
  };
112
109
  handleStyle();
113
110
  return $xeTable.$nextTick().then(() => {
@@ -1,7 +1,7 @@
1
1
  import { defineVxeComponent } from '../../../ui/src/comp';
2
2
  import { VxeUI } from '../../../ui';
3
3
  import { formatText, isEnableConf } from '../../../ui/src/utils';
4
- import { getPropClass, toCssUnit } from '../../../ui/src/dom';
4
+ import { getPropClass } from '../../../ui/src/dom';
5
5
  import { getSlotVNs } from '../../../ui/src/vn';
6
6
  import { createComponentLog } from '../../../ui/src/log';
7
7
  const { warnLog } = createComponentLog('table');
@@ -118,15 +118,18 @@ export default {
118
118
  * Publish methods
119
119
  *************************/
120
120
  renderOptions(h, filterRender, compConf) {
121
+ const VxeUIScrollbarComponent = VxeUI.getComponent('VxeScrollbar');
121
122
  const $xeFilterPanel = this;
122
123
  const props = $xeFilterPanel;
123
124
  const $xeTable = $xeFilterPanel.$xeTable;
124
125
  const tableInternalData = $xeTable;
125
126
  const { filterStore } = props;
126
- const { column, maxHeight } = filterStore;
127
+ const { column } = filterStore;
127
128
  if (!column) {
128
129
  return [];
129
130
  }
131
+ const filterOpts = $xeTable.computeFilterOpts;
132
+ const { useScrollbar } = filterOpts;
130
133
  const { filterMultiple, filters, slots } = column;
131
134
  const filterOptions = (filters || []);
132
135
  const filterSlot = slots ? slots.filter : null;
@@ -135,34 +138,51 @@ export default {
135
138
  if (filterSlot) {
136
139
  return [
137
140
  h('div', {
138
- class: 'vxe-table--filter-template',
139
- style: maxHeight
140
- ? {
141
- maxHeight: toCssUnit(maxHeight)
142
- }
143
- : {}
141
+ class: 'vxe-table--filter-template'
144
142
  }, $xeTable.callSlot(filterSlot, params, h))
145
143
  ];
146
144
  }
147
145
  else if (filterRender && rtFilter) {
148
146
  return [
149
147
  h('div', {
150
- class: 'vxe-table--filter-template',
151
- style: maxHeight
152
- ? {
153
- maxHeight: toCssUnit(maxHeight)
154
- }
155
- : {}
148
+ class: 'vxe-table--filter-template'
156
149
  }, getSlotVNs(rtFilter.call($xeTable, h, filterRender, params)))
157
150
  ];
158
151
  }
159
152
  const isAllChecked = filterMultiple ? filterStore.isAllSelected : !filterOptions.some((item) => item._checked);
160
153
  const isAllIndeterminate = filterMultiple && filterStore.isIndeterminate;
154
+ const optVNs = filterOptions.map((item) => {
155
+ const isChecked = item._checked;
156
+ const isIndeterminate = false;
157
+ return h('div', {
158
+ class: ['vxe-table--filter-option', {
159
+ 'is--checked': isChecked
160
+ }],
161
+ attrs: {
162
+ title: item.label
163
+ },
164
+ on: {
165
+ click: (evnt) => {
166
+ $xeFilterPanel.changeOption(evnt, !item._checked, item);
167
+ }
168
+ }
169
+ }, (filterMultiple
170
+ ? [
171
+ h('span', {
172
+ class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
173
+ })
174
+ ]
175
+ : []).concat([
176
+ h('span', {
177
+ class: 'vxe-checkbox--label'
178
+ }, formatText(item.label, 1))
179
+ ]));
180
+ });
161
181
  return [
162
- h('ul', {
182
+ h('div', {
163
183
  class: 'vxe-table--filter-header'
164
184
  }, [
165
- h('li', {
185
+ h('div', {
166
186
  class: ['vxe-table--filter-option', {
167
187
  'is--checked': isAllChecked,
168
188
  'is--indeterminate': isAllIndeterminate
@@ -187,40 +207,19 @@ export default {
187
207
  }, getI18n('vxe.table.allFilter'))
188
208
  ]))
189
209
  ]),
190
- h('ul', {
191
- class: 'vxe-table--filter-body',
192
- style: maxHeight
193
- ? {
194
- maxHeight: toCssUnit(maxHeight)
195
- }
196
- : {}
197
- }, filterOptions.map((item) => {
198
- const isChecked = item._checked;
199
- const isIndeterminate = false;
200
- return h('li', {
201
- class: ['vxe-table--filter-option', {
202
- 'is--checked': isChecked
203
- }],
204
- attrs: {
205
- title: item.label
210
+ useScrollbar
211
+ ? h(VxeUIScrollbarComponent, {
212
+ class: 'vxe-table--scrollbar-filter-body',
213
+ props: {
214
+ viewClassName: 'vxe-table--scrollbar-filter-body-view'
206
215
  },
207
- on: {
208
- click: (evnt) => {
209
- $xeFilterPanel.changeOption(evnt, !item._checked, item);
210
- }
216
+ scopedSlots: {
217
+ default: () => optVNs
211
218
  }
212
- }, (filterMultiple
213
- ? [
214
- h('span', {
215
- class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
216
- })
217
- ]
218
- : []).concat([
219
- h('span', {
220
- class: 'vxe-checkbox--label'
221
- }, formatText(item.label, 1))
222
- ]));
223
- }))
219
+ })
220
+ : h('div', {
221
+ class: 'vxe-table--filter-body'
222
+ }, optVNs)
224
223
  ];
225
224
  },
226
225
  renderFooter(h) {
@@ -3118,6 +3118,7 @@ function handleRecalculateStyle($xeTable, reFull, reWidth, reHeight) {
3118
3118
  if (reFull) {
3119
3119
  updateTreeLineStyle($xeTable);
3120
3120
  }
3121
+ $xeTable.updateScrollbar();
3121
3122
  internalData.rceRunTime = Date.now();
3122
3123
  if (reFull) {
3123
3124
  return computeScrollLoad($xeTable);
@@ -9954,8 +9955,14 @@ const tableMethods = {
9954
9955
  */
9955
9956
  updateScrollbar() {
9956
9957
  const $xeTable = this;
9957
- $xeTable.updateThumbSize();
9958
- $xeTable.updateThumbOffset();
9958
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
9959
+ if (isVScrollbar) {
9960
+ return $xeTable.$nextTick().then(() => {
9961
+ $xeTable.updateThumbSize();
9962
+ $xeTable.updateThumbOffset();
9963
+ });
9964
+ }
9965
+ return Promise.resolve();
9959
9966
  },
9960
9967
  /**
9961
9968
  * 表头单元格按下事件
@@ -12384,11 +12391,10 @@ const tableMethods = {
12384
12391
  },
12385
12392
  triggerBodyScrollEvent(evnt, fixedType) {
12386
12393
  const $xeTable = this;
12387
- const props = $xeTable;
12388
12394
  const reactData = $xeTable;
12389
12395
  const internalData = $xeTable;
12390
- const { useScrollbar } = props;
12391
12396
  const { scrollYLoad, scrollXLoad } = reactData;
12397
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
12392
12398
  const { elemStore, intoRunScroll, lastScrollTop, lastScrollLeft, inWheelScroll, inVirtualScroll, inHeaderScroll, inBodyScroll, scrollRenderType, inFooterScroll } = internalData;
12393
12399
  if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
12394
12400
  return;
@@ -12407,7 +12413,7 @@ const tableMethods = {
12407
12413
  if (!bodyScrollElem) {
12408
12414
  return;
12409
12415
  }
12410
- if (!useScrollbar) {
12416
+ if (!isVScrollbar) {
12411
12417
  if (!xHandleEl) {
12412
12418
  return;
12413
12419
  }
@@ -25,6 +25,25 @@ import validatorMixin from '../module/validator/mixin';
25
25
  import customMixin from '../module/custom/mixin';
26
26
  const { warnLog, errLog } = createComponentLog('table');
27
27
  const { getConfig, getIcon, getI18n, renderer, globalResize, globalEvents, domUtils, globalMixins, renderEmptyElement } = VxeUI;
28
+ function bindScrollbarResize($xeTable) {
29
+ const internalData = $xeTable;
30
+ const { elemStore } = internalData;
31
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
32
+ if (isVScrollbar) {
33
+ const el = $xeTable.$refs.refElem;
34
+ const viewInnerEl = getRefElem(elemStore['main-body-table']);
35
+ const scrollObserver = globalResize.create(() => {
36
+ $xeTable.reScrollFlag++;
37
+ });
38
+ if (el) {
39
+ scrollObserver.observe(el);
40
+ }
41
+ if (viewInnerEl) {
42
+ scrollObserver.observe(viewInnerEl);
43
+ }
44
+ internalData.scrollObserver = scrollObserver;
45
+ }
46
+ }
28
47
  function handleUpdateMergeBodyCells($xeTable, merges) {
29
48
  const internalData = $xeTable;
30
49
  internalData.mergeBodyList = [];
@@ -527,13 +546,12 @@ function renderNativeBody(h, $xeTable) {
527
546
  ]);
528
547
  }
529
548
  function renderVirtualBody(h, $xeTable) {
530
- const props = $xeTable;
531
549
  const reactData = $xeTable;
532
550
  const internalData = $xeTable;
533
551
  const $xeGantt = $xeTable.$xeGantt;
534
552
  const $xeGanttView = internalData.xeGanttView;
535
- const { useScrollbar } = props;
536
553
  const { xThumbWidth, yThumbHeight } = reactData;
554
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
537
555
  const scrollbarOpts = $xeTable.computeScrollbarOpts;
538
556
  const scrollXAutoHide = $xeTable.computeScrollXAutoHide;
539
557
  const scrollYAutoHide = $xeTable.computeScrollYAutoHide;
@@ -547,10 +565,10 @@ function renderVirtualBody(h, $xeTable) {
547
565
  return h('div', {
548
566
  key: 'lvb',
549
567
  class: ['vxe-table--layout-wrapper', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
550
- 'is--virtual-scrollbar': useScrollbar,
551
- 'ov-padding': useScrollbar && scrollbarOpts.padding,
552
- 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
553
- 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
568
+ 'is--virtual-scrollbar': isVScrollbar,
569
+ 'ov-padding': isVScrollbar && scrollbarOpts.padding,
570
+ 'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
571
+ 'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
554
572
  'overflow-y': yThumbHeight,
555
573
  'overflow-x': xThumbWidth
556
574
  }]
@@ -992,8 +1010,8 @@ export default {
992
1010
  computeTooltipOpts() {
993
1011
  const $xeTable = this;
994
1012
  const props = $xeTable;
995
- const { useScrollbar } = props;
996
- return Object.assign({ useScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig);
1013
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
1014
+ return Object.assign({ useScrollbar: isVScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig);
997
1015
  },
998
1016
  tipConfig() {
999
1017
  return Object.assign({}, this.tooltipOpts);
@@ -1056,7 +1074,8 @@ export default {
1056
1074
  computeFilterOpts() {
1057
1075
  const $xeTable = this;
1058
1076
  const props = $xeTable;
1059
- return Object.assign({}, getConfig().table.filterConfig, props.filterConfig);
1077
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
1078
+ return Object.assign({ useScrollbar: isVScrollbar }, getConfig().table.filterConfig, props.filterConfig);
1060
1079
  },
1061
1080
  computeFloatingFilterOpts() {
1062
1081
  const $xeTable = this;
@@ -1638,34 +1657,37 @@ export default {
1638
1657
  const $xeTable = this;
1639
1658
  $xeTable.reLayoutFlag++;
1640
1659
  },
1660
+ computeIsVScrollbar() {
1661
+ const $xeTable = this;
1662
+ $xeTable.$nextTick(() => {
1663
+ bindScrollbarResize($xeTable);
1664
+ $xeTable.$nextTick(() => {
1665
+ $xeTable.reLayoutFlag++;
1666
+ });
1667
+ });
1668
+ },
1641
1669
  computeScrollbarXToTop() {
1642
1670
  const $xeTable = this;
1643
- $xeTable.reScrollFlag++;
1644
1671
  $xeTable.reLayoutFlag++;
1645
1672
  },
1646
1673
  computeScrollbarYToLeft() {
1647
1674
  const $xeTable = this;
1648
- $xeTable.reScrollFlag++;
1649
1675
  $xeTable.reLayoutFlag++;
1650
1676
  },
1651
1677
  computeScrollXVisible() {
1652
1678
  const $xeTable = this;
1653
- $xeTable.reScrollFlag++;
1654
1679
  $xeTable.reLayoutFlag++;
1655
1680
  },
1656
1681
  computeScrollYVisible() {
1657
1682
  const $xeTable = this;
1658
- $xeTable.reScrollFlag++;
1659
1683
  $xeTable.reLayoutFlag++;
1660
1684
  },
1661
1685
  computeScrollXHeight() {
1662
1686
  const $xeTable = this;
1663
- $xeTable.reScrollFlag++;
1664
1687
  $xeTable.reLayoutFlag++;
1665
1688
  },
1666
1689
  computeScrollYWidth() {
1667
1690
  const $xeTable = this;
1668
- $xeTable.reScrollFlag++;
1669
1691
  $xeTable.reLayoutFlag++;
1670
1692
  },
1671
1693
  computeCellHeitht() {
@@ -1674,17 +1696,14 @@ export default {
1674
1696
  },
1675
1697
  reLayoutFlag() {
1676
1698
  const $xeTable = this;
1677
- $xeTable.$nextTick(() => {
1699
+ $xeTable.$nextTick().then(() => {
1678
1700
  $xeTable.recalculate(true);
1679
1701
  });
1680
1702
  },
1681
1703
  reScrollFlag() {
1682
1704
  const $xeTable = this;
1683
- $xeTable.$nextTick(() => {
1705
+ $xeTable.updateScrollbar().then(() => {
1684
1706
  $xeTable.updateScrollbar();
1685
- $xeTable.$nextTick(() => {
1686
- $xeTable.updateScrollbar();
1687
- });
1688
1707
  });
1689
1708
  },
1690
1709
  footerData() {
@@ -2130,12 +2149,13 @@ export default {
2130
2149
  warnLog('vxe.error.reqProp', ['tooltip-config']);
2131
2150
  }
2132
2151
  $xeTable.$nextTick(() => {
2133
- const { useScrollbar, autoResize } = props;
2152
+ const { autoResize } = props;
2134
2153
  const { elemStore } = internalData;
2135
2154
  // 使用已安装的组件,如果未安装则不渲染
2136
2155
  const VxeUILoadingComponent = VxeUI.getComponent('VxeLoading');
2137
2156
  const VxeUITooltipComponent = VxeUI.getComponent('VxeTooltip');
2138
2157
  const { showOverflow, showHeaderOverflow, showFooterOverflow } = props;
2158
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
2139
2159
  const tooltipOpts = $xeTable.computeTooltipOpts;
2140
2160
  const headerTooltipOpts = $xeTable.computeHeaderTooltipOpts;
2141
2161
  const footerTooltipOpts = $xeTable.computeFooterTooltipOpts;
@@ -2176,7 +2196,7 @@ export default {
2176
2196
  }
2177
2197
  }
2178
2198
  const el = $xeTable.$refs.refElem;
2179
- if (useScrollbar) {
2199
+ if (isVScrollbar) {
2180
2200
  const viewInnerEl = getRefElem(elemStore['main-body-table']);
2181
2201
  const scrollObserver = globalResize.create(() => {
2182
2202
  $xeTable.reScrollFlag++;
@@ -2291,9 +2311,10 @@ export default {
2291
2311
  const slots = $xeTable.$scopedSlots;
2292
2312
  const reactData = $xeTable;
2293
2313
  const { xID } = $xeTable;
2294
- const { loading, stripe, useScrollbar, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props;
2314
+ const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props;
2295
2315
  const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData;
2296
2316
  const { leftList, rightList } = columnStore;
2317
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
2297
2318
  const loadingSlot = slots.loading;
2298
2319
  const tipSlots = {
2299
2320
  header: slots.headerTooltip || slots['header-tooltip'],
@@ -2335,7 +2356,7 @@ export default {
2335
2356
  }
2336
2357
  return h('div', {
2337
2358
  ref: 'refElem',
2338
- class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, useScrollbar ? 'is--virtual-scrollbar' : 'is--native-scrollbar', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
2359
+ class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, isVScrollbar ? 'is--virtual-scrollbar' : 'is--native-scrollbar', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
2339
2360
  [`size--${vSize}`]: vSize,
2340
2361
  [`valid-msg--${validOpts.msgMode}`]: !!editRules,
2341
2362
  'vxe-editable': !!editConfig,
@@ -2403,7 +2424,7 @@ export default {
2403
2424
  h('div', {
2404
2425
  key: 'tw',
2405
2426
  class: 'vxe-table--render-wrapper'
2406
- }, useScrollbar
2427
+ }, isVScrollbar
2407
2428
  ? [renderVirtualBody(h, $xeTable)]
2408
2429
  : (scrollbarXToTop
2409
2430
  ? [
@@ -2591,7 +2612,7 @@ export default {
2591
2612
  props: {
2592
2613
  isArrow: false,
2593
2614
  enterable: false,
2594
- useScrollbar
2615
+ useScrollbar: isVScrollbar
2595
2616
  }
2596
2617
  })
2597
2618
  : renderEmptyElement($xeTable),
@@ -2663,7 +2684,7 @@ export default {
2663
2684
  enterable: validTipConfig.enterable,
2664
2685
  enterDelay: validTipConfig.enterDelay,
2665
2686
  leaveDelay: validTipConfig.leaveDelay,
2666
- useScrollbar
2687
+ useScrollbar: validTipConfig.useScrollbar
2667
2688
  }
2668
2689
  })
2669
2690
  : renderEmptyElement($xeTable)
@@ -244,8 +244,7 @@ export function createReactData() {
244
244
  isIndeterminate: false,
245
245
  style: null,
246
246
  column: null,
247
- visible: false,
248
- maxHeight: null
247
+ visible: false
249
248
  },
250
249
  // 存放列相关的信息
251
250
  columnStore: {
@@ -1606,6 +1606,7 @@
1606
1606
  .vxe-table--filter-wrapper {
1607
1607
  display: none;
1608
1608
  position: absolute;
1609
+ flex-direction: column;
1609
1610
  top: 0;
1610
1611
  min-width: 100px;
1611
1612
  font-size: var(--vxe-ui-font-size-default);
@@ -1615,16 +1616,30 @@
1615
1616
  color: var(--vxe-ui-font-color);
1616
1617
  box-shadow: var(--vxe-ui-base-popup-box-shadow);
1617
1618
  z-index: 15;
1619
+ max-height: var(--vxe-ui-vxe-table-filter-default-max-height);
1618
1620
  }
1619
1621
  .vxe-table--filter-wrapper:not(.is--multiple) .vxe-table--filter-header,
1620
1622
  .vxe-table--filter-wrapper:not(.is--multiple) .vxe-table--filter-body {
1621
1623
  text-align: center;
1622
1624
  }
1623
1625
  .vxe-table--filter-wrapper.is--active {
1624
- display: block;
1626
+ display: flex;
1625
1627
  }
1626
- .vxe-table--filter-wrapper .vxe-table--filter-header > li,
1627
- .vxe-table--filter-wrapper .vxe-table--filter-body > li {
1628
+ .vxe-table--filter-wrapper .vxe-table--filter-body,
1629
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body {
1630
+ overflow: auto;
1631
+ flex-grow: 1;
1632
+ }
1633
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body {
1634
+ display: flex;
1635
+ flex-direction: column;
1636
+ }
1637
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body .vxe-table--scrollbar-filter-body-view {
1638
+ flex-grow: 1;
1639
+ }
1640
+ .vxe-table--filter-wrapper .vxe-table--filter-header .vxe-table--filter-option,
1641
+ .vxe-table--filter-wrapper .vxe-table--filter-body .vxe-table--filter-option,
1642
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body .vxe-table--filter-option {
1628
1643
  overflow: hidden;
1629
1644
  text-overflow: ellipsis;
1630
1645
  white-space: nowrap;
@@ -1632,22 +1647,25 @@
1632
1647
  padding: 0.25em 0.8em;
1633
1648
  cursor: pointer;
1634
1649
  }
1635
- .vxe-table--filter-wrapper .vxe-table--filter-header > li.is--checked,
1636
- .vxe-table--filter-wrapper .vxe-table--filter-body > li.is--checked {
1650
+ .vxe-table--filter-wrapper .vxe-table--filter-header .vxe-table--filter-option.is--checked,
1651
+ .vxe-table--filter-wrapper .vxe-table--filter-body .vxe-table--filter-option.is--checked,
1652
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body .vxe-table--filter-option.is--checked {
1637
1653
  color: var(--vxe-ui-font-primary-color);
1638
1654
  }
1639
- .vxe-table--filter-wrapper .vxe-table--filter-header > li:hover,
1640
- .vxe-table--filter-wrapper .vxe-table--filter-body > li:hover {
1655
+ .vxe-table--filter-wrapper .vxe-table--filter-header .vxe-table--filter-option:hover,
1656
+ .vxe-table--filter-wrapper .vxe-table--filter-body .vxe-table--filter-option:hover,
1657
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body .vxe-table--filter-option:hover {
1641
1658
  background-color: var(--vxe-ui-table-row-hover-background-color);
1642
1659
  }
1643
1660
  .vxe-table--filter-wrapper .vxe-table--filter-header {
1644
1661
  padding-top: 0.2em;
1645
1662
  }
1646
- .vxe-table--filter-wrapper .vxe-table--filter-body {
1647
- max-height: var(--vxe-ui-vxe-table-filter-default-max-height);
1663
+ .vxe-table--filter-wrapper .vxe-table--filter-body,
1664
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body {
1648
1665
  padding-bottom: 0.2em;
1649
1666
  }
1650
- .vxe-table--filter-wrapper > ul {
1667
+ .vxe-table--filter-wrapper .vxe-table--filter-header,
1668
+ .vxe-table--filter-wrapper .vxe-table--filter-body {
1651
1669
  list-style-type: none;
1652
1670
  padding: 0;
1653
1671
  margin: 0;
@@ -1657,8 +1675,9 @@
1657
1675
  -moz-user-select: none;
1658
1676
  user-select: none;
1659
1677
  }
1660
- .vxe-table--filter-wrapper.is--multiple > ul > li {
1661
- padding: 0.25em 0.8em 0.25em 1em;
1678
+ .vxe-table--filter-wrapper .vxe-table--filter-header,
1679
+ .vxe-table--filter-wrapper .vxe-table--filter-footer {
1680
+ flex-shrink: 0;
1662
1681
  }
1663
1682
  .vxe-table--filter-wrapper .vxe-table--filter-footer {
1664
1683
  border-top: 1px solid var(--vxe-ui-base-popup-border-color);