vxe-table 4.23.0-beta.3 → 4.23.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/dist/all.esm.js +114 -101
- package/dist/style.css +1 -1
- package/dist/style.min.css +1 -1
- package/es/grid/src/grid.js +3 -0
- 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/hook.js +4 -7
- package/es/table/module/filter/panel.js +42 -46
- package/es/table/src/table.js +63 -45
- 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/grid/src/grid.js +5 -0
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +61 -58
- 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/hook.js +5 -7
- package/lib/table/module/filter/hook.min.js +1 -1
- package/lib/table/module/filter/panel.js +34 -33
- package/lib/table/module/filter/panel.min.js +1 -1
- package/lib/table/src/table.js +13 -13
- 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 +3 -0
- package/packages/table/module/filter/hook.ts +4 -7
- package/packages/table/module/filter/panel.ts +45 -46
- package/packages/table/src/table.ts +64 -45
- 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.1792117711657.ttf → iconfont.1792139865095.ttf} +0 -0
- /package/es/{iconfont.1792117711657.woff → iconfont.1792139865095.woff} +0 -0
- /package/es/{iconfont.1792117711657.woff2 → iconfont.1792139865095.woff2} +0 -0
- /package/lib/{iconfont.1792117711657.ttf → iconfont.1792139865095.ttf} +0 -0
- /package/lib/{iconfont.1792117711657.woff → iconfont.1792139865095.woff} +0 -0
- /package/lib/{iconfont.1792117711657.woff2 → iconfont.1792139865095.woff2} +0 -0
|
@@ -16,7 +16,7 @@ hooks.add('tableFilterModule', {
|
|
|
16
16
|
const { refElem, refTableFilter } = $xeTable.getRefMaps();
|
|
17
17
|
const { computeFilterOpts, computeMouseOpts, computeRendererOpts } = $xeTable.getComputeMaps();
|
|
18
18
|
const updatePopupStyle = () => {
|
|
19
|
-
const { filterStore } = reactData;
|
|
19
|
+
const { filterStore, scrollbarHeight } = reactData;
|
|
20
20
|
const { elemStore } = internalData;
|
|
21
21
|
const { column, targetEl } = filterStore;
|
|
22
22
|
if (!column) {
|
|
@@ -37,8 +37,6 @@ hooks.add('tableFilterModule', {
|
|
|
37
37
|
if (!filterWrapperElem) {
|
|
38
38
|
return nextTick();
|
|
39
39
|
}
|
|
40
|
-
const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
|
|
41
|
-
const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
|
|
42
40
|
/**
|
|
43
41
|
* 是否显示筛选按钮图标
|
|
44
42
|
* 如果不存在图标,则相对单元格居中显示
|
|
@@ -75,7 +73,7 @@ hooks.add('tableFilterModule', {
|
|
|
75
73
|
const centerWidth = targetEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
|
|
76
74
|
left = btnRect.left - tableRect.left - centerWidth;
|
|
77
75
|
top = btnRect.top - tableRect.top + currEl.clientHeight;
|
|
78
|
-
maxHeight = Math.max(40, tableEl.clientHeight - top -
|
|
76
|
+
maxHeight = Math.max(40, tableEl.clientHeight - top - scrollbarHeight);
|
|
79
77
|
if (left < 1) {
|
|
80
78
|
left = 1;
|
|
81
79
|
}
|
|
@@ -97,7 +95,6 @@ hooks.add('tableFilterModule', {
|
|
|
97
95
|
if (zIndex) {
|
|
98
96
|
panelStyle.zIndex = zIndex;
|
|
99
97
|
}
|
|
100
|
-
filterStore.style = panelStyle;
|
|
101
98
|
// 筛选面板是自适应表格高度
|
|
102
99
|
if (compConf ? !compConf.tableFilterAutoHeight : false) {
|
|
103
100
|
maxHeight = 0;
|
|
@@ -107,8 +104,8 @@ hooks.add('tableFilterModule', {
|
|
|
107
104
|
maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
|
|
108
105
|
}
|
|
109
106
|
}
|
|
110
|
-
|
|
111
|
-
filterStore.
|
|
107
|
+
panelStyle['--vxe-ui-vxe-table-filter-default-max-height'] = maxHeight ? toCssUnit(maxHeight) : 'none';
|
|
108
|
+
filterStore.style = panelStyle;
|
|
112
109
|
};
|
|
113
110
|
handleStyle();
|
|
114
111
|
return nextTick().then(() => {
|
|
@@ -2,7 +2,7 @@ import { h, ref, computed, inject, Teleport } from 'vue';
|
|
|
2
2
|
import { defineVxeComponent } from '../../../ui/src/comp';
|
|
3
3
|
import { VxeUI } from '../../../ui';
|
|
4
4
|
import { formatText, isEnableConf } from '../../../ui/src/utils';
|
|
5
|
-
import { getPropClass
|
|
5
|
+
import { getPropClass } from '../../../ui/src/dom';
|
|
6
6
|
import { getSlotVNs } from '../../../ui/src/vn';
|
|
7
7
|
import { createComponentLog } from '../../../ui/src/log';
|
|
8
8
|
import XEUtils from 'xe-utils';
|
|
@@ -18,6 +18,7 @@ export default defineVxeComponent({
|
|
|
18
18
|
},
|
|
19
19
|
setup(props, context) {
|
|
20
20
|
const xID = XEUtils.uniqueId();
|
|
21
|
+
const VxeUIScrollbarComponent = VxeUI.getComponent('VxeScrollbar');
|
|
21
22
|
const $xeTable = inject('$xeTable', {});
|
|
22
23
|
const { reactData: tableReactData, internalData: tableInternalData, getComputeMaps } = $xeTable;
|
|
23
24
|
const { computeFilterOpts, computeRendererOpts } = getComputeMaps();
|
|
@@ -105,10 +106,12 @@ export default defineVxeComponent({
|
|
|
105
106
|
Object.assign($xeFilterPanel, filterPanelMethods);
|
|
106
107
|
const renderOptions = (filterRender, compConf) => {
|
|
107
108
|
const { filterStore } = props;
|
|
108
|
-
const { column
|
|
109
|
+
const { column } = filterStore;
|
|
109
110
|
if (!column) {
|
|
110
111
|
return [];
|
|
111
112
|
}
|
|
113
|
+
const filterOpts = computeFilterOpts.value;
|
|
114
|
+
const { useScrollbar } = filterOpts;
|
|
112
115
|
const { filterMultiple, filters, slots } = column;
|
|
113
116
|
const filterOptions = (filters || []);
|
|
114
117
|
const filterSlot = slots ? slots.filter : null;
|
|
@@ -117,34 +120,47 @@ export default defineVxeComponent({
|
|
|
117
120
|
if (filterSlot) {
|
|
118
121
|
return [
|
|
119
122
|
h('div', {
|
|
120
|
-
class: 'vxe-table--filter-template'
|
|
121
|
-
style: maxHeight
|
|
122
|
-
? {
|
|
123
|
-
maxHeight: toCssUnit(maxHeight)
|
|
124
|
-
}
|
|
125
|
-
: {}
|
|
123
|
+
class: 'vxe-table--filter-template'
|
|
126
124
|
}, $xeTable.callSlot(filterSlot, params))
|
|
127
125
|
];
|
|
128
126
|
}
|
|
129
127
|
else if (filterRender && rtFilter) {
|
|
130
128
|
return [
|
|
131
129
|
h('div', {
|
|
132
|
-
class: 'vxe-table--filter-template'
|
|
133
|
-
style: maxHeight
|
|
134
|
-
? {
|
|
135
|
-
maxHeight: toCssUnit(maxHeight)
|
|
136
|
-
}
|
|
137
|
-
: {}
|
|
130
|
+
class: 'vxe-table--filter-template'
|
|
138
131
|
}, getSlotVNs(rtFilter(filterRender, params)))
|
|
139
132
|
];
|
|
140
133
|
}
|
|
141
134
|
const isAllChecked = filterMultiple ? filterStore.isAllSelected : !filterOptions.some((item) => item._checked);
|
|
142
135
|
const isAllIndeterminate = filterMultiple && filterStore.isIndeterminate;
|
|
136
|
+
const optVNs = filterOptions.map((item) => {
|
|
137
|
+
const isChecked = item._checked;
|
|
138
|
+
const isIndeterminate = false;
|
|
139
|
+
return h('div', {
|
|
140
|
+
class: ['vxe-table--filter-option', {
|
|
141
|
+
'is--checked': item._checked
|
|
142
|
+
}],
|
|
143
|
+
title: item.label,
|
|
144
|
+
onClick: (evnt) => {
|
|
145
|
+
changeOption(evnt, !item._checked, item);
|
|
146
|
+
}
|
|
147
|
+
}, (filterMultiple
|
|
148
|
+
? [
|
|
149
|
+
h('span', {
|
|
150
|
+
class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
|
|
151
|
+
})
|
|
152
|
+
]
|
|
153
|
+
: []).concat([
|
|
154
|
+
h('span', {
|
|
155
|
+
class: 'vxe-checkbox--label'
|
|
156
|
+
}, formatText(item.label, 1))
|
|
157
|
+
]));
|
|
158
|
+
});
|
|
143
159
|
return [
|
|
144
|
-
h('
|
|
160
|
+
h('div', {
|
|
145
161
|
class: 'vxe-table--filter-header'
|
|
146
162
|
}, [
|
|
147
|
-
h('
|
|
163
|
+
h('div', {
|
|
148
164
|
class: ['vxe-table--filter-option', {
|
|
149
165
|
'is--checked': isAllChecked,
|
|
150
166
|
'is--indeterminate': isAllIndeterminate
|
|
@@ -165,36 +181,16 @@ export default defineVxeComponent({
|
|
|
165
181
|
}, getI18n('vxe.table.allFilter'))
|
|
166
182
|
]))
|
|
167
183
|
]),
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
return h('li', {
|
|
179
|
-
class: ['vxe-table--filter-option', {
|
|
180
|
-
'is--checked': item._checked
|
|
181
|
-
}],
|
|
182
|
-
title: item.label,
|
|
183
|
-
onClick: (evnt) => {
|
|
184
|
-
changeOption(evnt, !item._checked, item);
|
|
185
|
-
}
|
|
186
|
-
}, (filterMultiple
|
|
187
|
-
? [
|
|
188
|
-
h('span', {
|
|
189
|
-
class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
|
|
190
|
-
})
|
|
191
|
-
]
|
|
192
|
-
: []).concat([
|
|
193
|
-
h('span', {
|
|
194
|
-
class: 'vxe-checkbox--label'
|
|
195
|
-
}, formatText(item.label, 1))
|
|
196
|
-
]));
|
|
197
|
-
}))
|
|
184
|
+
useScrollbar
|
|
185
|
+
? h(VxeUIScrollbarComponent, {
|
|
186
|
+
class: 'vxe-table--scrollbar-filter-body',
|
|
187
|
+
viewClassName: 'vxe-table--scrollbar-filter-body-view'
|
|
188
|
+
}, {
|
|
189
|
+
default: () => optVNs
|
|
190
|
+
})
|
|
191
|
+
: h('div', {
|
|
192
|
+
class: 'vxe-table--filter-body'
|
|
193
|
+
}, optVNs)
|
|
198
194
|
];
|
|
199
195
|
};
|
|
200
196
|
const renderFooters = () => {
|
package/es/table/src/table.js
CHANGED
|
@@ -57,6 +57,7 @@ export default defineVxeComponent({
|
|
|
57
57
|
const $xeGantt = inject('$xeGantt', null);
|
|
58
58
|
const $xeGGWrapper = $xeGrid || $xeGantt;
|
|
59
59
|
const { computeSize } = useFns.useSize(props);
|
|
60
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props);
|
|
60
61
|
const crossTableDragRowInfo = getCrossTableDragRowInfo();
|
|
61
62
|
const reactData = reactive(createReactData());
|
|
62
63
|
const internalData = createInternalData();
|
|
@@ -350,8 +351,8 @@ export default defineVxeComponent({
|
|
|
350
351
|
return Object.assign({}, getConfig().table.checkboxConfig, props.checkboxConfig);
|
|
351
352
|
});
|
|
352
353
|
const computeTooltipOpts = computed(() => {
|
|
353
|
-
const
|
|
354
|
-
return Object.assign({ useScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig);
|
|
354
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
355
|
+
return Object.assign({ useScrollbar: isVScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig);
|
|
355
356
|
});
|
|
356
357
|
const computeHeaderTooltipOpts = computed(() => {
|
|
357
358
|
const tooltipOpts = computeTooltipOpts.value;
|
|
@@ -386,7 +387,8 @@ export default defineVxeComponent({
|
|
|
386
387
|
return Object.assign({ orders: ['asc', 'desc', null] }, getConfig().table.sortConfig, props.sortConfig);
|
|
387
388
|
});
|
|
388
389
|
const computeFilterOpts = computed(() => {
|
|
389
|
-
|
|
390
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
391
|
+
return Object.assign({ useScrollbar: isVScrollbar }, getConfig().table.filterConfig, props.filterConfig);
|
|
390
392
|
});
|
|
391
393
|
const computeFloatingFilterOpts = computed(() => {
|
|
392
394
|
return Object.assign({}, getConfig().table.floatingFilterConfig, props.floatingFilterConfig);
|
|
@@ -787,6 +789,7 @@ export default defineVxeComponent({
|
|
|
787
789
|
};
|
|
788
790
|
const computeMaps = {
|
|
789
791
|
computeSize,
|
|
792
|
+
computeIsVScrollbar,
|
|
790
793
|
computeTableId,
|
|
791
794
|
computeValidOpts,
|
|
792
795
|
computeRowField,
|
|
@@ -3442,6 +3445,7 @@ export default defineVxeComponent({
|
|
|
3442
3445
|
if (reFull) {
|
|
3443
3446
|
updateTreeLineStyle();
|
|
3444
3447
|
}
|
|
3448
|
+
updateScrollbar();
|
|
3445
3449
|
internalData.rceRunTime = Date.now();
|
|
3446
3450
|
if (reFull) {
|
|
3447
3451
|
return computeScrollLoad();
|
|
@@ -3449,8 +3453,14 @@ export default defineVxeComponent({
|
|
|
3449
3453
|
});
|
|
3450
3454
|
};
|
|
3451
3455
|
const updateScrollbar = () => {
|
|
3452
|
-
|
|
3453
|
-
|
|
3456
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
3457
|
+
if (isVScrollbar) {
|
|
3458
|
+
return nextTick().then(() => {
|
|
3459
|
+
updateThumbSize();
|
|
3460
|
+
updateThumbOffset();
|
|
3461
|
+
});
|
|
3462
|
+
}
|
|
3463
|
+
return Promise.resolve();
|
|
3454
3464
|
};
|
|
3455
3465
|
const defaultMinRunDelay = 50;
|
|
3456
3466
|
const handleLazyRecalculate = (reFull, reWidth, reHeight, options) => {
|
|
@@ -12769,8 +12779,8 @@ export default defineVxeComponent({
|
|
|
12769
12779
|
}
|
|
12770
12780
|
},
|
|
12771
12781
|
triggerBodyScrollEvent(evnt, fixedType) {
|
|
12772
|
-
const { useScrollbar } = props;
|
|
12773
12782
|
const { scrollYLoad, scrollXLoad } = reactData;
|
|
12783
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
12774
12784
|
const { elemStore, intoRunScroll, lastScrollTop, lastScrollLeft, inWheelScroll, inVirtualScroll, inHeaderScroll, inBodyScroll, scrollRenderType, inFooterScroll } = internalData;
|
|
12775
12785
|
if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
|
|
12776
12786
|
return;
|
|
@@ -12789,7 +12799,7 @@ export default defineVxeComponent({
|
|
|
12789
12799
|
if (!bodyScrollElem) {
|
|
12790
12800
|
return;
|
|
12791
12801
|
}
|
|
12792
|
-
if (!
|
|
12802
|
+
if (!isVScrollbar) {
|
|
12793
12803
|
if (!xHandleEl) {
|
|
12794
12804
|
return;
|
|
12795
12805
|
}
|
|
@@ -13540,6 +13550,24 @@ export default defineVxeComponent({
|
|
|
13540
13550
|
return nextTick();
|
|
13541
13551
|
}
|
|
13542
13552
|
};
|
|
13553
|
+
const bindScrollbarResize = () => {
|
|
13554
|
+
const { elemStore } = internalData;
|
|
13555
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
13556
|
+
if (isVScrollbar) {
|
|
13557
|
+
const el = refElem.value;
|
|
13558
|
+
const viewInnerEl = getRefElem(elemStore['main-body-table']);
|
|
13559
|
+
const scrollObserver = globalResize.create(() => {
|
|
13560
|
+
reScrollFlag.value++;
|
|
13561
|
+
});
|
|
13562
|
+
if (el) {
|
|
13563
|
+
scrollObserver.observe(el);
|
|
13564
|
+
}
|
|
13565
|
+
if (viewInnerEl) {
|
|
13566
|
+
scrollObserver.observe(viewInnerEl);
|
|
13567
|
+
}
|
|
13568
|
+
internalData.scrollObserver = scrollObserver;
|
|
13569
|
+
}
|
|
13570
|
+
};
|
|
13543
13571
|
const updateThumbSize = () => {
|
|
13544
13572
|
const { elemStore } = internalData;
|
|
13545
13573
|
const viewEl = getRefElem(elemStore['main-body-scroll']);
|
|
@@ -14119,8 +14147,8 @@ export default defineVxeComponent({
|
|
|
14119
14147
|
};
|
|
14120
14148
|
const renderVirtualBody = () => {
|
|
14121
14149
|
const $xeGanttView = internalData.xeGanttView;
|
|
14122
|
-
const { useScrollbar } = props;
|
|
14123
14150
|
const { xThumbWidth, yThumbHeight } = reactData;
|
|
14151
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
14124
14152
|
const scrollbarOpts = computeScrollbarOpts.value;
|
|
14125
14153
|
const scrollXAutoHide = computeScrollXAutoHide.value;
|
|
14126
14154
|
const scrollYAutoHide = computeScrollYAutoHide.value;
|
|
@@ -14134,10 +14162,10 @@ export default defineVxeComponent({
|
|
|
14134
14162
|
return h('div', {
|
|
14135
14163
|
key: 'lvb',
|
|
14136
14164
|
class: ['vxe-table--layout-wrapper', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
|
|
14137
|
-
'is--virtual-scrollbar':
|
|
14138
|
-
'ov-padding':
|
|
14139
|
-
'ov-x--auto-hide':
|
|
14140
|
-
'ov-y--auto-hide':
|
|
14165
|
+
'is--virtual-scrollbar': isVScrollbar,
|
|
14166
|
+
'ov-padding': isVScrollbar && scrollbarOpts.padding,
|
|
14167
|
+
'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
|
|
14168
|
+
'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
|
|
14141
14169
|
'overflow-y': yThumbHeight,
|
|
14142
14170
|
'overflow-x': xThumbWidth
|
|
14143
14171
|
}]
|
|
@@ -14184,10 +14212,11 @@ export default defineVxeComponent({
|
|
|
14184
14212
|
]);
|
|
14185
14213
|
};
|
|
14186
14214
|
const renderVN = () => {
|
|
14187
|
-
const { loading, stripe,
|
|
14215
|
+
const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props;
|
|
14188
14216
|
const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData;
|
|
14189
14217
|
const { teleportToWrapperElem, popupToWrapperElem, customPopupToElem } = internalData;
|
|
14190
14218
|
const { leftList, rightList } = columnStore;
|
|
14219
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
14191
14220
|
const loadingSlot = slots.loading;
|
|
14192
14221
|
const tipSlots = {
|
|
14193
14222
|
header: slots.headerTooltip || slots['header-tooltip'],
|
|
@@ -14227,7 +14256,7 @@ export default defineVxeComponent({
|
|
|
14227
14256
|
if (isCrossTableDrag && !tableData.length) {
|
|
14228
14257
|
tbOns.onDragover = $xeTable.handleCrossTableRowDragoverEmptyEvent;
|
|
14229
14258
|
}
|
|
14230
|
-
return h('div', Object.assign({ ref: refElem, class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`,
|
|
14259
|
+
return h('div', Object.assign({ ref: refElem, 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'}`, {
|
|
14231
14260
|
[`size--${vSize}`]: vSize,
|
|
14232
14261
|
[`valid-msg--${validOpts.msgMode}`]: !!editRules,
|
|
14233
14262
|
'vxe-editable': !!editConfig,
|
|
@@ -14288,7 +14317,7 @@ export default defineVxeComponent({
|
|
|
14288
14317
|
h('div', {
|
|
14289
14318
|
key: 'tw',
|
|
14290
14319
|
class: 'vxe-table--render-wrapper'
|
|
14291
|
-
},
|
|
14320
|
+
}, isVScrollbar
|
|
14292
14321
|
? [renderVirtualBody()]
|
|
14293
14322
|
: (scrollbarXToTop
|
|
14294
14323
|
? [
|
|
@@ -14475,7 +14504,7 @@ export default defineVxeComponent({
|
|
|
14475
14504
|
ref: refCommTooltip,
|
|
14476
14505
|
isArrow: false,
|
|
14477
14506
|
enterable: false,
|
|
14478
|
-
useScrollbar
|
|
14507
|
+
useScrollbar: isVScrollbar
|
|
14479
14508
|
}),
|
|
14480
14509
|
/**
|
|
14481
14510
|
* 工具提示
|
|
@@ -14539,7 +14568,7 @@ export default defineVxeComponent({
|
|
|
14539
14568
|
enterable: validTipConfig.enterable,
|
|
14540
14569
|
enterDelay: validTipConfig.enterDelay,
|
|
14541
14570
|
leaveDelay: validTipConfig.leaveDelay,
|
|
14542
|
-
useScrollbar
|
|
14571
|
+
useScrollbar: validTipConfig.useScrollbar
|
|
14543
14572
|
})
|
|
14544
14573
|
: renderEmptyElement($xeTable)
|
|
14545
14574
|
])
|
|
@@ -14644,42 +14673,43 @@ export default defineVxeComponent({
|
|
|
14644
14673
|
watch(() => VxeUI.getLanguage(), () => {
|
|
14645
14674
|
reLayoutFlag.value++;
|
|
14646
14675
|
});
|
|
14676
|
+
watch(computeIsVScrollbar, () => {
|
|
14677
|
+
nextTick(() => {
|
|
14678
|
+
bindScrollbarResize();
|
|
14679
|
+
nextTick(() => {
|
|
14680
|
+
reLayoutFlag.value++;
|
|
14681
|
+
});
|
|
14682
|
+
});
|
|
14683
|
+
});
|
|
14647
14684
|
watch(computeScrollbarXToTop, () => {
|
|
14648
|
-
reScrollFlag.value++;
|
|
14649
14685
|
reLayoutFlag.value++;
|
|
14650
14686
|
});
|
|
14651
14687
|
watch(computeScrollbarYToLeft, () => {
|
|
14652
|
-
reScrollFlag.value++;
|
|
14653
14688
|
reLayoutFlag.value++;
|
|
14654
14689
|
});
|
|
14655
14690
|
watch(computeScrollXVisible, () => {
|
|
14656
|
-
reScrollFlag.value++;
|
|
14657
14691
|
reLayoutFlag.value++;
|
|
14658
14692
|
});
|
|
14659
14693
|
watch(computeScrollYVisible, () => {
|
|
14660
|
-
reScrollFlag.value++;
|
|
14661
14694
|
reLayoutFlag.value++;
|
|
14662
14695
|
});
|
|
14663
14696
|
watch(computeScrollXHeight, () => {
|
|
14664
|
-
reScrollFlag.value++;
|
|
14665
14697
|
reLayoutFlag.value++;
|
|
14666
14698
|
});
|
|
14667
14699
|
watch(computeScrollYWidth, () => {
|
|
14668
|
-
reScrollFlag.value++;
|
|
14669
14700
|
reLayoutFlag.value++;
|
|
14670
14701
|
});
|
|
14671
14702
|
watch(computeCellHeitht, () => {
|
|
14672
14703
|
reLayoutFlag.value++;
|
|
14673
14704
|
});
|
|
14674
14705
|
watch(reLayoutFlag, () => {
|
|
14675
|
-
|
|
14706
|
+
nextTick().then(() => {
|
|
14707
|
+
$xeTable.recalculate(true);
|
|
14708
|
+
});
|
|
14676
14709
|
});
|
|
14677
14710
|
watch(reScrollFlag, () => {
|
|
14678
|
-
|
|
14679
|
-
|
|
14680
|
-
nextTick(() => {
|
|
14681
|
-
$xeTable.updateScrollbar();
|
|
14682
|
-
});
|
|
14711
|
+
updateScrollbar().then(() => {
|
|
14712
|
+
updateScrollbar();
|
|
14683
14713
|
});
|
|
14684
14714
|
});
|
|
14685
14715
|
const footFlag = ref(0);
|
|
@@ -14812,7 +14842,7 @@ export default defineVxeComponent({
|
|
|
14812
14842
|
});
|
|
14813
14843
|
onMounted(() => {
|
|
14814
14844
|
const { editConfig, exportConfig, importConfig, treeConfig, minHeight, keepSource, areaConfig } = props;
|
|
14815
|
-
const {
|
|
14845
|
+
const { scrollXStore, scrollYStore } = internalData;
|
|
14816
14846
|
const columnOpts = computeColumnOpts.value;
|
|
14817
14847
|
const columnDragOpts = computeColumnDragOpts.value;
|
|
14818
14848
|
const aggregateOpts = computeAggregateOpts.value;
|
|
@@ -15085,22 +15115,9 @@ export default defineVxeComponent({
|
|
|
15085
15115
|
handleUpdateRowGroup(groupFields);
|
|
15086
15116
|
initData();
|
|
15087
15117
|
nextTick(() => {
|
|
15088
|
-
const {
|
|
15089
|
-
const el = refElem.value;
|
|
15090
|
-
if (useScrollbar) {
|
|
15091
|
-
const viewInnerEl = getRefElem(elemStore['main-body-table']);
|
|
15092
|
-
const scrollObserver = globalResize.create(() => {
|
|
15093
|
-
reScrollFlag.value++;
|
|
15094
|
-
});
|
|
15095
|
-
if (el) {
|
|
15096
|
-
scrollObserver.observe(el);
|
|
15097
|
-
}
|
|
15098
|
-
if (viewInnerEl) {
|
|
15099
|
-
scrollObserver.observe(viewInnerEl);
|
|
15100
|
-
}
|
|
15101
|
-
internalData.scrollObserver = scrollObserver;
|
|
15102
|
-
}
|
|
15118
|
+
const { autoResize } = props;
|
|
15103
15119
|
if (autoResize) {
|
|
15120
|
+
const el = refElem.value;
|
|
15104
15121
|
const parentEl = $xeTable.getParentElem();
|
|
15105
15122
|
const resizeObserver = globalResize.create(() => {
|
|
15106
15123
|
if (props.autoResize) {
|
|
@@ -15115,6 +15132,7 @@ export default defineVxeComponent({
|
|
|
15115
15132
|
}
|
|
15116
15133
|
internalData.resizeObserver = resizeObserver;
|
|
15117
15134
|
}
|
|
15135
|
+
bindScrollbarResize();
|
|
15118
15136
|
});
|
|
15119
15137
|
if (virtualYOpts.mode !== 'scroll') {
|
|
15120
15138
|
const tableViewportEl = refTableViewportElem.value;
|
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);
|