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