vxe-table 3.15.1 → 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 (45) 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 +29 -10
  6. package/es/table/module/filter/panel.js +173 -142
  7. package/es/table/src/methods.js +31 -7
  8. package/es/table/style.css +18 -0
  9. package/es/table/style.min.css +1 -1
  10. package/es/ui/index.js +1 -1
  11. package/es/ui/src/log.js +1 -1
  12. package/es/vxe-table/style.css +18 -0
  13. package/es/vxe-table/style.min.css +1 -1
  14. package/lib/index.css +1 -1
  15. package/lib/index.min.css +1 -1
  16. package/lib/index.umd.js +226 -142
  17. package/lib/index.umd.min.js +1 -1
  18. package/lib/style.css +1 -1
  19. package/lib/style.min.css +1 -1
  20. package/lib/table/module/filter/mixin.js +33 -9
  21. package/lib/table/module/filter/mixin.min.js +1 -1
  22. package/lib/table/module/filter/panel.js +153 -122
  23. package/lib/table/module/filter/panel.min.js +1 -1
  24. package/lib/table/src/methods.js +36 -7
  25. package/lib/table/src/methods.min.js +1 -1
  26. package/lib/table/style/style.css +18 -0
  27. package/lib/table/style/style.min.css +1 -1
  28. package/lib/ui/index.js +1 -1
  29. package/lib/ui/index.min.js +1 -1
  30. package/lib/ui/src/log.js +1 -1
  31. package/lib/ui/src/log.min.js +1 -1
  32. package/lib/vxe-table/style/style.css +18 -0
  33. package/lib/vxe-table/style/style.min.css +1 -1
  34. package/package.json +2 -2
  35. package/packages/table/module/filter/mixin.ts +27 -10
  36. package/packages/table/module/filter/panel.ts +178 -143
  37. package/packages/table/src/methods.ts +31 -7
  38. package/styles/components/table-module/filter.scss +16 -0
  39. package/styles/components/table.scss +6 -1
  40. /package/es/{iconfont.1744336394111.ttf → iconfont.1744428010256.ttf} +0 -0
  41. /package/es/{iconfont.1744336394111.woff → iconfont.1744428010256.woff} +0 -0
  42. /package/es/{iconfont.1744336394111.woff2 → iconfont.1744428010256.woff2} +0 -0
  43. /package/lib/{iconfont.1744336394111.ttf → iconfont.1744428010256.ttf} +0 -0
  44. /package/lib/{iconfont.1744336394111.woff → iconfont.1744428010256.woff} +0 -0
  45. /package/lib/{iconfont.1744336394111.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,24 +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
- let 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);
118
- if (left < 1) {
119
- left = 1;
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
+ }
120
130
  }
121
- else if (left > (el.clientWidth - filterWidth - 1)) {
122
- left = el.clientWidth - filterWidth - 1;
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
+ }
123
141
  }
124
142
  filterStore.style = {
125
143
  top: toCssUnit(top),
126
144
  left: toCssUnit(left)
127
145
  };
146
+ // 判断面板不能大于表格高度
128
147
  filterStore.maxHeight = maxHeight;
129
148
  });
130
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);
@@ -8188,10 +8200,10 @@ const Methods = {
8188
8200
  triggerTreeExpandEvent(evnt, params) {
8189
8201
  const $xeTable = this;
8190
8202
  const internalData = $xeTable;
8191
- const { treeExpandLazyLoadedMaps } = internalData;
8203
+ const { treeExpandLazyLoadedMaps, treeEATime } = internalData;
8192
8204
  const treeOpts = $xeTable.computeTreeOpts;
8193
8205
  const { row, column } = params;
8194
- const { lazy, trigger } = treeOpts;
8206
+ const { lazy, trigger, accordion } = treeOpts;
8195
8207
  if (trigger === 'manual') {
8196
8208
  return;
8197
8209
  }
@@ -8201,7 +8213,17 @@ const Methods = {
8201
8213
  const expanded = !$xeTable.isTreeExpandByRow(row);
8202
8214
  const columnIndex = $xeTable.getColumnIndex(column);
8203
8215
  const $columnIndex = $xeTable.getVMColumnIndex(column);
8204
- $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
+ });
8205
8227
  $xeTable.dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
8206
8228
  }
8207
8229
  },
@@ -8948,7 +8970,8 @@ const Methods = {
8948
8970
  if (isScrollXBig && mouseOpts.area) {
8949
8971
  errLog('vxe.error.notProp', ['mouse-config.area']);
8950
8972
  }
8951
- $xeTable.$nextTick(() => {
8973
+ calcScrollbar($xeTable);
8974
+ return $xeTable.$nextTick(() => {
8952
8975
  updateStyle($xeTable);
8953
8976
  });
8954
8977
  }
@@ -9057,6 +9080,7 @@ const Methods = {
9057
9080
  if (isScrollYBig && mouseOpts.area) {
9058
9081
  errLog('vxe.error.notProp', ['mouse-config.area']);
9059
9082
  }
9083
+ calcScrollbar($xeTable);
9060
9084
  return $xeTable.$nextTick().then(() => {
9061
9085
  updateStyle($xeTable);
9062
9086
  });
@@ -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
  }