vxe-table 3.15.0 → 3.15.2

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 (53) 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 +31 -6
  6. package/es/table/module/filter/panel.js +173 -142
  7. package/es/table/src/methods.js +38 -13
  8. package/es/table/src/table.js +1 -0
  9. package/es/table/src/util.js +2 -1
  10. package/es/table/style.css +18 -0
  11. package/es/table/style.min.css +1 -1
  12. package/es/ui/index.js +1 -1
  13. package/es/ui/src/log.js +1 -1
  14. package/es/vxe-table/style.css +18 -0
  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 +237 -145
  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 +34 -5
  23. package/lib/table/module/filter/mixin.min.js +1 -1
  24. package/lib/table/module/filter/panel.js +153 -122
  25. package/lib/table/module/filter/panel.min.js +1 -1
  26. package/lib/table/src/methods.js +43 -13
  27. package/lib/table/src/methods.min.js +1 -1
  28. package/lib/table/src/table.js +1 -0
  29. package/lib/table/src/table.min.js +1 -1
  30. package/lib/table/src/util.js +2 -1
  31. package/lib/table/src/util.min.js +1 -1
  32. package/lib/table/style/style.css +18 -0
  33. package/lib/table/style/style.min.css +1 -1
  34. package/lib/ui/index.js +1 -1
  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 +18 -0
  39. package/lib/vxe-table/style/style.min.css +1 -1
  40. package/package.json +2 -2
  41. package/packages/table/module/filter/mixin.ts +28 -6
  42. package/packages/table/module/filter/panel.ts +178 -143
  43. package/packages/table/src/methods.ts +38 -13
  44. package/packages/table/src/table.ts +1 -0
  45. package/packages/table/src/util.ts +2 -1
  46. package/styles/components/table-module/filter.scss +16 -0
  47. package/styles/components/table.scss +6 -1
  48. /package/es/{iconfont.1744252945243.ttf → iconfont.1744428010256.ttf} +0 -0
  49. /package/es/{iconfont.1744252945243.woff → iconfont.1744428010256.woff} +0 -0
  50. /package/es/{iconfont.1744252945243.woff2 → iconfont.1744428010256.woff2} +0 -0
  51. /package/lib/{iconfont.1744252945243.ttf → iconfont.1744428010256.ttf} +0 -0
  52. /package/lib/{iconfont.1744252945243.woff → iconfont.1744428010256.woff} +0 -0
  53. /package/lib/{iconfont.1744252945243.woff2 → iconfont.1744428010256.woff2} +0 -0
@@ -1,7 +1,7 @@
1
1
  import XEUtils from 'xe-utils';
2
2
  import { VxeUI } from '../../../ui';
3
3
  import { toFilters, handleFieldOrColumn, getRefElem } from '../../src/util';
4
- import { toCssUnit, triggerEvent } from '../../../ui/src/dom';
4
+ import { toCssUnit, triggerEvent, getDomNode } from '../../../ui/src/dom';
5
5
  import { isEnableConf } from '../../../ui/src/utils';
6
6
  const { renderer } = VxeUI;
7
7
  export default {
@@ -71,6 +71,9 @@ export default {
71
71
  }
72
72
  else {
73
73
  const el = $xeTable.$refs.refElem;
74
+ const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode();
75
+ const filterOpts = $xeTable.computeFilterOpts;
76
+ const { transfer } = filterOpts;
74
77
  const tableRect = el.getBoundingClientRect();
75
78
  const btnElem = evnt.currentTarget;
76
79
  const { filters, filterMultiple, filterRender } = column;
@@ -107,18 +110,40 @@ export default {
107
110
  return;
108
111
  }
109
112
  const btnRect = btnElem.getBoundingClientRect();
110
- const filterWidth = filterWrapperElem.offsetWidth;
111
113
  const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
112
114
  const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
115
+ const filterWidth = filterWrapperElem.offsetWidth;
113
116
  const centerWidth = filterWidth / 2;
114
- const left = btnRect.left - tableRect.left - centerWidth;
115
- const top = btnRect.top - tableRect.top + btnElem.clientHeight;
116
- // 判断面板不能大于表格高度
117
- const maxHeight = Math.max(40, el.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
117
+ let left = 0;
118
+ let top = 0;
119
+ let maxHeight = 0;
120
+ if (transfer) {
121
+ left = btnRect.left - centerWidth + scrollLeft;
122
+ top = btnRect.top + btnElem.clientHeight + scrollTop;
123
+ maxHeight = Math.min(Math.max(tableRect.height, Math.floor(visibleHeight / 2)), Math.max(80, visibleHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 28));
124
+ if (left < 16) {
125
+ left = 16;
126
+ }
127
+ else if (left > (visibleWidth - filterWidth - 16)) {
128
+ left = visibleWidth - filterWidth - 16;
129
+ }
130
+ }
131
+ else {
132
+ left = btnRect.left - tableRect.left - centerWidth;
133
+ top = btnRect.top - tableRect.top + btnElem.clientHeight;
134
+ maxHeight = Math.max(40, el.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
135
+ if (left < 1) {
136
+ left = 1;
137
+ }
138
+ else if (left > (el.clientWidth - filterWidth - 1)) {
139
+ left = el.clientWidth - filterWidth - 1;
140
+ }
141
+ }
118
142
  filterStore.style = {
119
143
  top: toCssUnit(top),
120
144
  left: toCssUnit(left)
121
145
  };
146
+ // 判断面板不能大于表格高度
122
147
  filterStore.maxHeight = maxHeight;
123
148
  });
124
149
  }
@@ -1,180 +1,211 @@
1
1
  import { VxeUI } from '../../../ui';
2
2
  import { formatText, isEnableConf, getClass } from '../../../ui/src/utils';
3
3
  import { getSlotVNs } from '../../../ui/src/vn';
4
- const { getI18n, getIcon, renderer } = VxeUI;
4
+ const { getI18n, getIcon, renderer, globalMixins } = VxeUI;
5
+ function renderOptions($xeFilterPanel, h, filterRender, compConf) {
6
+ const props = $xeFilterPanel;
7
+ const $xeTable = $xeFilterPanel.$xeTable;
8
+ const tableInternalData = $xeTable;
9
+ const { filterStore } = props;
10
+ const { column, multiple, maxHeight } = filterStore;
11
+ const slots = column ? column.slots : null;
12
+ const filterSlot = slots ? slots.filter : null;
13
+ const params = Object.assign({}, tableInternalData._currFilterParams, { $panel: $xeFilterPanel, $table: $xeTable });
14
+ const rtFilter = compConf ? (compConf.renderTableFilter || compConf.renderFilter) : null;
15
+ if (filterSlot) {
16
+ return [
17
+ h('div', {
18
+ class: 'vxe-table--filter-template',
19
+ style: maxHeight
20
+ ? {
21
+ maxHeight: `${maxHeight}px`
22
+ }
23
+ : {}
24
+ }, $xeTable.callSlot(filterSlot, params, h))
25
+ ];
26
+ }
27
+ else if (rtFilter) {
28
+ return [
29
+ h('div', {
30
+ class: 'vxe-table--filter-template',
31
+ style: maxHeight
32
+ ? {
33
+ maxHeight: `${maxHeight}px`
34
+ }
35
+ : {}
36
+ }, getSlotVNs(rtFilter.call($xeTable, h, filterRender, params)))
37
+ ];
38
+ }
39
+ const isAllChecked = multiple ? filterStore.isAllSelected : !filterStore.options.some((item) => item._checked);
40
+ const isAllIndeterminate = multiple && filterStore.isIndeterminate;
41
+ return [
42
+ h('ul', {
43
+ class: 'vxe-table--filter-header'
44
+ }, [
45
+ h('li', {
46
+ class: ['vxe-table--filter-option', {
47
+ 'is--checked': isAllChecked,
48
+ 'is--indeterminate': isAllIndeterminate
49
+ }],
50
+ attrs: {
51
+ title: getI18n(multiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter')
52
+ },
53
+ on: {
54
+ click: (evnt) => {
55
+ $xeFilterPanel.changeAllOption(evnt, !filterStore.isAllSelected);
56
+ }
57
+ }
58
+ }, (multiple
59
+ ? [
60
+ h('span', {
61
+ class: ['vxe-checkbox--icon', isAllIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isAllChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
62
+ })
63
+ ]
64
+ : []).concat([
65
+ h('span', {
66
+ class: 'vxe-checkbox--label'
67
+ }, getI18n('vxe.table.allFilter'))
68
+ ]))
69
+ ]),
70
+ h('ul', {
71
+ class: 'vxe-table--filter-body',
72
+ style: maxHeight
73
+ ? {
74
+ maxHeight: `${maxHeight}px`
75
+ }
76
+ : {}
77
+ }, filterStore.options.map((item) => {
78
+ const isChecked = item._checked;
79
+ const isIndeterminate = false;
80
+ return h('li', {
81
+ class: ['vxe-table--filter-option', {
82
+ 'is--checked': isChecked
83
+ }],
84
+ attrs: {
85
+ title: item.label
86
+ },
87
+ on: {
88
+ click: (evnt) => {
89
+ $xeFilterPanel.changeOption(evnt, !item._checked, item);
90
+ }
91
+ }
92
+ }, (multiple
93
+ ? [
94
+ h('span', {
95
+ class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
96
+ })
97
+ ]
98
+ : []).concat([
99
+ h('span', {
100
+ class: 'vxe-checkbox--label'
101
+ }, formatText(item.label, 1))
102
+ ]));
103
+ }))
104
+ ];
105
+ }
106
+ function renderFooter($xeFilterPanel, h) {
107
+ const props = $xeFilterPanel;
108
+ const $xeTable = $xeFilterPanel.$xeTable;
109
+ const { filterStore } = props;
110
+ const { column, multiple } = filterStore;
111
+ const filterOpts = $xeTable.computeFilterOpts;
112
+ const hasCheckOption = $xeFilterPanel.computeHasCheckOption;
113
+ const filterRender = column.filterRender;
114
+ const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
115
+ const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate;
116
+ return multiple && (compConf ? !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false) : true)
117
+ ? [
118
+ h('div', {
119
+ class: 'vxe-table--filter-footer'
120
+ }, [
121
+ h('button', {
122
+ class: {
123
+ 'is--disabled': isDisabled
124
+ },
125
+ attrs: {
126
+ disabled: isDisabled
127
+ },
128
+ on: {
129
+ click: $xeFilterPanel.confirmFilter
130
+ }
131
+ }, filterOpts.confirmButtonText || getI18n('vxe.table.confirmFilter')),
132
+ h('button', {
133
+ on: {
134
+ click: $xeFilterPanel.resetFilter
135
+ }
136
+ }, filterOpts.resetButtonText || getI18n('vxe.table.resetFilter'))
137
+ ])
138
+ ]
139
+ : [];
140
+ }
5
141
  export default {
6
142
  name: 'VxeTableFilterPanel',
143
+ mixins: [
144
+ globalMixins.sizeMixin
145
+ ],
7
146
  props: {
8
147
  filterStore: Object
9
148
  },
149
+ inject: {
150
+ $xeTable: {
151
+ default: null
152
+ }
153
+ },
10
154
  computed: {
11
- hasCheckOption() {
155
+ computeHasCheckOption() {
12
156
  const { filterStore } = this;
13
157
  return filterStore && filterStore.options.some((option) => option.checked);
14
158
  }
15
159
  },
160
+ mounted() {
161
+ const $xeFilterPanel = this;
162
+ const $xeTable = $xeFilterPanel.$xeTable;
163
+ const filterOpts = $xeTable.computeFilterOpts;
164
+ const { transfer } = filterOpts;
165
+ const el = this.$refs.refElem;
166
+ if (transfer && el) {
167
+ document.body.appendChild(el);
168
+ }
169
+ },
170
+ beforeDestroy() {
171
+ const el = this.$refs.refElem;
172
+ if (el && el.parentNode) {
173
+ el.parentNode.removeChild(el);
174
+ }
175
+ },
16
176
  render(h) {
17
- const $panel = this;
18
- const $xeTable = this.$parent;
177
+ const $xeFilterPanel = this;
178
+ const props = $xeFilterPanel;
179
+ const $xeTable = $xeFilterPanel.$xeTable;
19
180
  const tableInternalData = $xeTable;
20
- const { filterStore } = this;
181
+ const { filterStore } = props;
21
182
  const { visible, multiple, column } = filterStore;
22
183
  const filterRender = column ? column.filterRender : null;
23
184
  const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
24
185
  const filterClassName = compConf ? (compConf.tableFilterClassName || compConf.filterClassName) : '';
25
- const params = Object.assign({}, tableInternalData._currFilterParams, { $panel, $table: $xeTable });
186
+ const params = Object.assign({}, tableInternalData._currFilterParams, { $panel: $xeFilterPanel, $table: $xeTable });
187
+ const tableProps = $xeTable;
188
+ const vSize = $xeFilterPanel.computeSize;
26
189
  const filterOpts = $xeTable.computeFilterOpts;
27
190
  const { destroyOnClose } = filterOpts;
28
191
  return h('div', {
192
+ ref: 'refElem',
29
193
  class: [
30
194
  'vxe-table--filter-wrapper',
31
195
  'filter--prevent-default',
32
196
  compConf && compConf.className ? compConf.className : '',
33
197
  getClass(filterClassName, params),
34
198
  {
35
- 'is--animat': $xeTable.animat,
199
+ [`size--${vSize}`]: vSize,
200
+ 'is--animat': tableProps.animat,
36
201
  'is--multiple': multiple,
37
202
  'is--active': visible
38
203
  }
39
204
  ],
40
205
  style: filterStore.style
41
- }, filterStore.visible && (destroyOnClose ? visible : true) && column ? this.renderOptions(h, filterRender, compConf).concat(this.renderFooter(h)) : []);
206
+ }, filterStore.visible && (destroyOnClose ? visible : true) && column ? renderOptions($xeFilterPanel, h, filterRender, compConf).concat(renderFooter($xeFilterPanel, h)) : []);
42
207
  },
43
208
  methods: {
44
- renderOptions(h, filterRender, compConf) {
45
- const $panel = this;
46
- const $xeTable = this.$parent;
47
- const tableInternalData = $xeTable;
48
- const { filterStore } = this;
49
- const { column, multiple, maxHeight } = filterStore;
50
- const slots = column ? column.slots : null;
51
- const filterSlot = slots ? slots.filter : null;
52
- const params = Object.assign({}, tableInternalData._currFilterParams, { $panel, $table: $xeTable });
53
- const rtFilter = compConf ? (compConf.renderTableFilter || compConf.renderFilter) : null;
54
- if (filterSlot) {
55
- return [
56
- h('div', {
57
- class: 'vxe-table--filter-template',
58
- style: maxHeight
59
- ? {
60
- maxHeight: `${maxHeight}px`
61
- }
62
- : {}
63
- }, $xeTable.callSlot(filterSlot, params, h))
64
- ];
65
- }
66
- else if (rtFilter) {
67
- return [
68
- h('div', {
69
- class: 'vxe-table--filter-template',
70
- style: maxHeight
71
- ? {
72
- maxHeight: `${maxHeight}px`
73
- }
74
- : {}
75
- }, getSlotVNs(rtFilter.call($xeTable, h, filterRender, params)))
76
- ];
77
- }
78
- const isAllChecked = multiple ? filterStore.isAllSelected : !filterStore.options.some((item) => item._checked);
79
- const isAllIndeterminate = multiple && filterStore.isIndeterminate;
80
- return [
81
- h('ul', {
82
- class: 'vxe-table--filter-header'
83
- }, [
84
- h('li', {
85
- class: ['vxe-table--filter-option', {
86
- 'is--checked': isAllChecked,
87
- 'is--indeterminate': isAllIndeterminate
88
- }],
89
- attrs: {
90
- title: getI18n(multiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter')
91
- },
92
- on: {
93
- click: (evnt) => {
94
- this.changeAllOption(evnt, !filterStore.isAllSelected);
95
- }
96
- }
97
- }, (multiple
98
- ? [
99
- h('span', {
100
- class: ['vxe-checkbox--icon', isAllIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isAllChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
101
- })
102
- ]
103
- : []).concat([
104
- h('span', {
105
- class: 'vxe-checkbox--label'
106
- }, getI18n('vxe.table.allFilter'))
107
- ]))
108
- ]),
109
- h('ul', {
110
- class: 'vxe-table--filter-body',
111
- style: maxHeight
112
- ? {
113
- maxHeight: `${maxHeight}px`
114
- }
115
- : {}
116
- }, filterStore.options.map((item) => {
117
- const isChecked = item._checked;
118
- const isIndeterminate = false;
119
- return h('li', {
120
- class: ['vxe-table--filter-option', {
121
- 'is--checked': isChecked
122
- }],
123
- attrs: {
124
- title: item.label
125
- },
126
- on: {
127
- click: (evnt) => {
128
- this.changeOption(evnt, !item._checked, item);
129
- }
130
- }
131
- }, (multiple
132
- ? [
133
- h('span', {
134
- class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
135
- })
136
- ]
137
- : []).concat([
138
- h('span', {
139
- class: 'vxe-checkbox--label'
140
- }, formatText(item.label, 1))
141
- ]));
142
- }))
143
- ];
144
- },
145
- renderFooter(h) {
146
- const $xeTable = this.$parent;
147
- const { hasCheckOption, filterStore } = this;
148
- const { column, multiple } = filterStore;
149
- const filterOpts = $xeTable.computeFilterOpts;
150
- const filterRender = column.filterRender;
151
- const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
152
- const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate;
153
- return multiple && (compConf ? !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false) : true)
154
- ? [
155
- h('div', {
156
- class: 'vxe-table--filter-footer'
157
- }, [
158
- h('button', {
159
- class: {
160
- 'is--disabled': isDisabled
161
- },
162
- attrs: {
163
- disabled: isDisabled
164
- },
165
- on: {
166
- click: this.confirmFilter
167
- }
168
- }, filterOpts.confirmButtonText || getI18n('vxe.table.confirmFilter')),
169
- h('button', {
170
- on: {
171
- click: this.resetFilter
172
- }
173
- }, filterOpts.resetButtonText || getI18n('vxe.table.resetFilter'))
174
- ])
175
- ]
176
- : [];
177
- },
178
209
  // 全部筛选事件
179
210
  filterCheckAllEvent(evnt, value) {
180
211
  const filterStore = this.filterStore;
@@ -2872,7 +2872,12 @@ const Methods = {
2872
2872
  $xeTable.checkSelectionStatus();
2873
2873
  return new Promise(resolve => {
2874
2874
  this.$nextTick()
2875
- .then(() => $xeTable.recalculate())
2875
+ .then(() => handleRecalculateLayout($xeTable, false))
2876
+ .then(() => {
2877
+ calcCellHeight($xeTable);
2878
+ updateRowOffsetTop($xeTable);
2879
+ return handleRecalculateLayout($xeTable, false);
2880
+ })
2876
2881
  .then(() => {
2877
2882
  let targetScrollLeft = lastScrollLeft;
2878
2883
  let targetScrollTop = lastScrollTop;
@@ -2886,8 +2891,7 @@ const Methods = {
2886
2891
  targetScrollTop = 0;
2887
2892
  }
2888
2893
  reactData.isRowLoading = false;
2889
- calcCellHeight($xeTable);
2890
- updateRowOffsetTop($xeTable);
2894
+ handleRecalculateLayout($xeTable, false);
2891
2895
  // 是否变更虚拟滚动
2892
2896
  if (oldScrollYLoad === sYLoad) {
2893
2897
  restoreScrollLocation($xeTable, targetScrollLeft, targetScrollTop)
@@ -6459,6 +6463,10 @@ const Methods = {
6459
6463
  const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
6460
6464
  const beforeRowMethod = currentColumnOpts.beforeSelectMethod || columnOpts.currentMethod;
6461
6465
  const { column: newValue } = params;
6466
+ const { trigger } = currentColumnOpts;
6467
+ if (trigger === 'manual') {
6468
+ return;
6469
+ }
6462
6470
  const isChange = oldValue !== newValue;
6463
6471
  if (!beforeRowMethod || beforeRowMethod({ column: newValue, $table: $xeTable })) {
6464
6472
  $xeTable.setCurrentColumn(newValue);
@@ -6478,6 +6486,10 @@ const Methods = {
6478
6486
  const currentRowOpts = $xeTable.computeCurrentRowOpts;
6479
6487
  const beforeRowMethod = currentRowOpts.beforeSelectMethod || rowOpts.currentMethod;
6480
6488
  const { row: newValue } = params;
6489
+ const { trigger } = currentRowOpts;
6490
+ if (trigger === 'manual') {
6491
+ return;
6492
+ }
6481
6493
  const isChange = oldValue !== newValue;
6482
6494
  if (!beforeRowMethod || beforeRowMethod({ row: newValue, $table: $xeTable })) {
6483
6495
  $xeTable.setCurrentRow(newValue);
@@ -7813,12 +7825,10 @@ const Methods = {
7813
7825
  const reactData = $xeTable;
7814
7826
  const { filterStore } = reactData;
7815
7827
  const { column, visible } = filterStore;
7816
- Object.assign(filterStore, {
7817
- isAllSelected: false,
7818
- isIndeterminate: false,
7819
- options: [],
7820
- visible: false
7821
- });
7828
+ filterStore.isAllSelected = false;
7829
+ filterStore.isIndeterminate = false;
7830
+ filterStore.options = [];
7831
+ filterStore.visible = false;
7822
7832
  if (visible) {
7823
7833
  $xeTable.dispatchEvent('filter-visible', {
7824
7834
  column,
@@ -8190,10 +8200,10 @@ const Methods = {
8190
8200
  triggerTreeExpandEvent(evnt, params) {
8191
8201
  const $xeTable = this;
8192
8202
  const internalData = $xeTable;
8193
- const { treeExpandLazyLoadedMaps } = internalData;
8203
+ const { treeExpandLazyLoadedMaps, treeEATime } = internalData;
8194
8204
  const treeOpts = $xeTable.computeTreeOpts;
8195
8205
  const { row, column } = params;
8196
- const { lazy, trigger } = treeOpts;
8206
+ const { lazy, trigger, accordion } = treeOpts;
8197
8207
  if (trigger === 'manual') {
8198
8208
  return;
8199
8209
  }
@@ -8203,7 +8213,17 @@ const Methods = {
8203
8213
  const expanded = !$xeTable.isTreeExpandByRow(row);
8204
8214
  const columnIndex = $xeTable.getColumnIndex(column);
8205
8215
  const $columnIndex = $xeTable.getVMColumnIndex(column);
8206
- $xeTable.setTreeExpand(row, expanded);
8216
+ if (treeEATime) {
8217
+ clearTimeout(treeEATime);
8218
+ }
8219
+ $xeTable.setTreeExpand(row, expanded).then(() => {
8220
+ if (accordion) {
8221
+ internalData.treeEATime = setTimeout(() => {
8222
+ internalData.treeEATime = undefined;
8223
+ $xeTable.scrollToRow(row);
8224
+ }, 20);
8225
+ }
8226
+ });
8207
8227
  $xeTable.dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
8208
8228
  }
8209
8229
  },
@@ -8491,6 +8511,9 @@ const Methods = {
8491
8511
  direction }, params);
8492
8512
  updateRowExpandStyle($xeTable);
8493
8513
  checkLastSyncScroll($xeTable, isRollX, isRollY);
8514
+ if (isRollX) {
8515
+ $xeTable.closeFilter();
8516
+ }
8494
8517
  if (rowOpts.isHover || highlightHoverRow) {
8495
8518
  $xeTable.clearHoverRow();
8496
8519
  }
@@ -8947,7 +8970,8 @@ const Methods = {
8947
8970
  if (isScrollXBig && mouseOpts.area) {
8948
8971
  errLog('vxe.error.notProp', ['mouse-config.area']);
8949
8972
  }
8950
- $xeTable.$nextTick(() => {
8973
+ calcScrollbar($xeTable);
8974
+ return $xeTable.$nextTick(() => {
8951
8975
  updateStyle($xeTable);
8952
8976
  });
8953
8977
  }
@@ -9056,6 +9080,7 @@ const Methods = {
9056
9080
  if (isScrollYBig && mouseOpts.area) {
9057
9081
  errLog('vxe.error.notProp', ['mouse-config.area']);
9058
9082
  }
9083
+ calcScrollbar($xeTable);
9059
9084
  return $xeTable.$nextTick().then(() => {
9060
9085
  updateStyle($xeTable);
9061
9086
  });
@@ -609,6 +609,7 @@ export default {
609
609
  mergeBodyFlag: 1,
610
610
  mergeFootFlag: 1,
611
611
  rowHeightStore: {
612
+ large: 52,
612
613
  default: 48,
613
614
  medium: 44,
614
615
  small: 40,
@@ -300,7 +300,8 @@ export function getColReMinWidth(params) {
300
300
  const lineOffsetSizes = {
301
301
  mini: 3,
302
302
  small: 2,
303
- medium: 1
303
+ medium: 1,
304
+ large: 0
304
305
  };
305
306
  function countTreeExpand(prevRow, params) {
306
307
  let count = 1;
@@ -1467,9 +1467,11 @@
1467
1467
  position: absolute;
1468
1468
  top: 0;
1469
1469
  min-width: 100px;
1470
+ font-size: var(--vxe-ui-font-size-default);
1470
1471
  border-radius: var(--vxe-ui-border-radius);
1471
1472
  background-color: var(--vxe-ui-layout-background-color);
1472
1473
  border: 1px solid var(--vxe-ui-base-popup-border-color);
1474
+ color: var(--vxe-ui-font-color);
1473
1475
  box-shadow: var(--vxe-ui-base-popup-box-shadow);
1474
1476
  z-index: 10;
1475
1477
  }
@@ -1579,6 +1581,16 @@
1579
1581
  vertical-align: middle;
1580
1582
  }
1581
1583
 
1584
+ .vxe-table--filter-wrapper.size--medium {
1585
+ font-size: var(--vxe-ui-font-size-medium);
1586
+ }
1587
+ .vxe-table--filter-wrapper.size--small {
1588
+ font-size: var(--vxe-ui-font-size-small);
1589
+ }
1590
+ .vxe-table--filter-wrapper.size--mini {
1591
+ font-size: var(--vxe-ui-font-size-mini);
1592
+ }
1593
+
1582
1594
  .vxe-table--context-menu-wrapper {
1583
1595
  display: none;
1584
1596
  }
@@ -2997,6 +3009,9 @@
2997
3009
  user-select: none;
2998
3010
  cursor: pointer;
2999
3011
  }
3012
+ .vxe-table--render-default .vxe-tree--btn-wrapper > i {
3013
+ background-color: var(--vxe-ui-layout-background-color);
3014
+ }
3000
3015
  .vxe-table--render-default .vxe-tree--node-btn {
3001
3016
  display: block;
3002
3017
  color: var(--vxe-ui-font-lighten-color);
@@ -3017,6 +3032,9 @@
3017
3032
  .vxe-table--render-default .vxe-body--column.col--cs-height, .vxe-table--render-default .vxe-body--column.col--rs-height, .vxe-table--render-default .vxe-body--column.col--auto-height {
3018
3033
  overflow: hidden;
3019
3034
  }
3035
+ .vxe-table--render-default .vxe-body--column.col--cs-height.col--tree-node, .vxe-table--render-default .vxe-body--column.col--rs-height.col--tree-node, .vxe-table--render-default .vxe-body--column.col--auto-height.col--tree-node {
3036
+ overflow: unset;
3037
+ }
3020
3038
  .vxe-table--render-default .vxe-body--column.col--cs-height > .vxe-cell, .vxe-table--render-default .vxe-body--column.col--rs-height > .vxe-cell, .vxe-table--render-default .vxe-body--column.col--auto-height > .vxe-cell {
3021
3039
  overflow: hidden;
3022
3040
  }