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.
- package/es/index.css +1 -1
- package/es/index.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/module/filter/mixin.js +29 -10
- package/es/table/module/filter/panel.js +173 -142
- package/es/table/src/methods.js +31 -7
- package/es/table/style.css +18 -0
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/es/vxe-table/style.css +18 -0
- package/es/vxe-table/style.min.css +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +226 -142
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/filter/mixin.js +33 -9
- package/lib/table/module/filter/mixin.min.js +1 -1
- package/lib/table/module/filter/panel.js +153 -122
- package/lib/table/module/filter/panel.min.js +1 -1
- package/lib/table/src/methods.js +36 -7
- package/lib/table/src/methods.min.js +1 -1
- package/lib/table/style/style.css +18 -0
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-table/style/style.css +18 -0
- package/lib/vxe-table/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/table/module/filter/mixin.ts +27 -10
- package/packages/table/module/filter/panel.ts +178 -143
- package/packages/table/src/methods.ts +31 -7
- package/styles/components/table-module/filter.scss +16 -0
- package/styles/components/table.scss +6 -1
- /package/es/{iconfont.1744336394111.ttf → iconfont.1744428010256.ttf} +0 -0
- /package/es/{iconfont.1744336394111.woff → iconfont.1744428010256.woff} +0 -0
- /package/es/{iconfont.1744336394111.woff2 → iconfont.1744428010256.woff2} +0 -0
- /package/lib/{iconfont.1744336394111.ttf → iconfont.1744428010256.ttf} +0 -0
- /package/lib/{iconfont.1744336394111.woff → iconfont.1744428010256.woff} +0 -0
- /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 =
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
|
122
|
-
left =
|
|
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
|
-
|
|
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 $
|
|
18
|
-
const
|
|
177
|
+
const $xeFilterPanel = this;
|
|
178
|
+
const props = $xeFilterPanel;
|
|
179
|
+
const $xeTable = $xeFilterPanel.$xeTable;
|
|
19
180
|
const tableInternalData = $xeTable;
|
|
20
|
-
const { filterStore } =
|
|
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
|
-
|
|
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 ?
|
|
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;
|
package/es/table/src/methods.js
CHANGED
|
@@ -2872,7 +2872,12 @@ const Methods = {
|
|
|
2872
2872
|
$xeTable.checkSelectionStatus();
|
|
2873
2873
|
return new Promise(resolve => {
|
|
2874
2874
|
this.$nextTick()
|
|
2875
|
-
.then(() => $xeTable
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
});
|
package/es/table/style.css
CHANGED
|
@@ -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
|
}
|