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.
- 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 +31 -6
- package/es/table/module/filter/panel.js +173 -142
- package/es/table/src/methods.js +38 -13
- package/es/table/src/table.js +1 -0
- package/es/table/src/util.js +2 -1
- 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 +237 -145
- 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 +34 -5
- 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 +43 -13
- package/lib/table/src/methods.min.js +1 -1
- package/lib/table/src/table.js +1 -0
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +2 -1
- package/lib/table/src/util.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 +28 -6
- package/packages/table/module/filter/panel.ts +178 -143
- package/packages/table/src/methods.ts +38 -13
- package/packages/table/src/table.ts +1 -0
- package/packages/table/src/util.ts +2 -1
- package/styles/components/table-module/filter.scss +16 -0
- package/styles/components/table.scss +6 -1
- /package/es/{iconfont.1744252945243.ttf → iconfont.1744428010256.ttf} +0 -0
- /package/es/{iconfont.1744252945243.woff → iconfont.1744428010256.woff} +0 -0
- /package/es/{iconfont.1744252945243.woff2 → iconfont.1744428010256.woff2} +0 -0
- /package/lib/{iconfont.1744252945243.ttf → iconfont.1744428010256.ttf} +0 -0
- /package/lib/{iconfont.1744252945243.woff → iconfont.1744428010256.woff} +0 -0
- /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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
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);
|
|
@@ -7813,12 +7825,10 @@ const Methods = {
|
|
|
7813
7825
|
const reactData = $xeTable;
|
|
7814
7826
|
const { filterStore } = reactData;
|
|
7815
7827
|
const { column, visible } = filterStore;
|
|
7816
|
-
|
|
7817
|
-
|
|
7818
|
-
|
|
7819
|
-
|
|
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
|
-
|
|
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
|
|
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
|
});
|
package/es/table/src/table.js
CHANGED
package/es/table/src/util.js
CHANGED
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
|
}
|