vxe-table 4.23.0-beta.2 → 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 +145 -167
- 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/custom/panel.js +2 -2
- package/es/table/module/filter/hook.js +5 -7
- package/es/table/module/filter/panel.js +42 -46
- package/es/table/src/table.js +69 -47
- 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/dom.js +11 -8
- 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 +79 -127
- 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/custom/panel.js +2 -2
- package/lib/table/module/custom/panel.min.js +1 -1
- package/lib/table/module/filter/hook.js +6 -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 +19 -19
- 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/dom.js +11 -7
- package/lib/ui/src/dom.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/custom/panel.ts +2 -2
- package/packages/table/module/filter/hook.ts +5 -7
- package/packages/table/module/filter/panel.ts +45 -46
- package/packages/table/src/table.ts +71 -47
- package/packages/table/src/util.ts +1 -2
- package/packages/ui/index.ts +1 -1
- package/packages/ui/src/dom.ts +12 -8
- package/styles/components/table-module/filter.scss +25 -14
- package/es/table/src/scrollbar.js +0 -54
- package/lib/table/src/scrollbar.js +0 -63
- package/lib/table/src/scrollbar.min.js +0 -1
- package/packages/table/src/scrollbar.ts +0 -57
- /package/es/{iconfont.1792035024476.ttf → iconfont.1792139865095.ttf} +0 -0
- /package/es/{iconfont.1792035024476.woff → iconfont.1792139865095.woff} +0 -0
- /package/es/{iconfont.1792035024476.woff2 → iconfont.1792139865095.woff2} +0 -0
- /package/lib/{iconfont.1792035024476.ttf → iconfont.1792139865095.ttf} +0 -0
- /package/lib/{iconfont.1792035024476.woff → iconfont.1792139865095.woff} +0 -0
- /package/lib/{iconfont.1792035024476.woff2 → iconfont.1792139865095.woff2} +0 -0
|
@@ -350,8 +350,8 @@ export default defineVxeComponent({
|
|
|
350
350
|
const { prevDragCol, prevDragGroupField, prevDragAggFnColid, prevDragPos, prevDragToChild } = customPanelInternalData;
|
|
351
351
|
const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
|
|
352
352
|
if (prevDragGroupField || prevDragAggFnColid) {
|
|
353
|
-
if ($xeTable.
|
|
354
|
-
$xeTable.
|
|
353
|
+
if ($xeTable.handlePivotTableAggPanelDragendEvent) {
|
|
354
|
+
$xeTable.handlePivotTableAggPanelDragendEvent(evnt);
|
|
355
355
|
}
|
|
356
356
|
}
|
|
357
357
|
else if (prevDragCol && dragCol) {
|
|
@@ -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
|
* 如果不存在图标,则相对单元格居中显示
|
|
@@ -64,6 +62,7 @@ hooks.add('tableFilterModule', {
|
|
|
64
62
|
if (transfer) {
|
|
65
63
|
const ppObj = updatePanelPlacement(currEl, filterWrapperElem, {
|
|
66
64
|
defaultPlacement: 'bottom',
|
|
65
|
+
appendTo: '',
|
|
67
66
|
isMinWidth: false,
|
|
68
67
|
teleportTo: transfer
|
|
69
68
|
});
|
|
@@ -74,7 +73,7 @@ hooks.add('tableFilterModule', {
|
|
|
74
73
|
const centerWidth = targetEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
|
|
75
74
|
left = btnRect.left - tableRect.left - centerWidth;
|
|
76
75
|
top = btnRect.top - tableRect.top + currEl.clientHeight;
|
|
77
|
-
maxHeight = Math.max(40, tableEl.clientHeight - top -
|
|
76
|
+
maxHeight = Math.max(40, tableEl.clientHeight - top - scrollbarHeight);
|
|
78
77
|
if (left < 1) {
|
|
79
78
|
left = 1;
|
|
80
79
|
}
|
|
@@ -96,7 +95,6 @@ hooks.add('tableFilterModule', {
|
|
|
96
95
|
if (zIndex) {
|
|
97
96
|
panelStyle.zIndex = zIndex;
|
|
98
97
|
}
|
|
99
|
-
filterStore.style = panelStyle;
|
|
100
98
|
// 筛选面板是自适应表格高度
|
|
101
99
|
if (compConf ? !compConf.tableFilterAutoHeight : false) {
|
|
102
100
|
maxHeight = 0;
|
|
@@ -106,8 +104,8 @@ hooks.add('tableFilterModule', {
|
|
|
106
104
|
maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
|
|
107
105
|
}
|
|
108
106
|
}
|
|
109
|
-
|
|
110
|
-
filterStore.
|
|
107
|
+
panelStyle['--vxe-ui-vxe-table-filter-default-max-height'] = maxHeight ? toCssUnit(maxHeight) : 'none';
|
|
108
|
+
filterStore.style = panelStyle;
|
|
111
109
|
};
|
|
112
110
|
handleStyle();
|
|
113
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
|
@@ -7,7 +7,6 @@ import { VxeUI } from '../../ui';
|
|
|
7
7
|
import { createReactData, createInternalData, getRowUniqueId, createRowId, clearTableAllStatus, getColumnList, toFilters, hasDeepKey, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, getColReMaxWidth, createHandleUpdateRowId, createHandleGetRowId, getCalcHeight, getCellRestHeight, getLastChildColumn, getRowMaxHeight, handleCustomStoreConfig, encodeRowid } from './util';
|
|
8
8
|
import { getSlotVNs } from '../../ui/src/vn';
|
|
9
9
|
import { moveRowAnimateToTb, clearRowAnimate, moveColAnimateToLr, clearColAnimate } from '../../ui/src/anime';
|
|
10
|
-
import { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } from './scrollbar';
|
|
11
10
|
import { createComponentLog } from '../../ui/src/log';
|
|
12
11
|
import { getCrossTableDragRowInfo } from './store';
|
|
13
12
|
import Cell from './cell';
|
|
@@ -30,7 +29,8 @@ import '../module/validator/hook';
|
|
|
30
29
|
import '../module/custom/hook';
|
|
31
30
|
import '../render';
|
|
32
31
|
const { warnLog, errLog } = createComponentLog('table');
|
|
33
|
-
const { getConfig, getIcon, getI18n, renderer, formats, createEvent, globalResize, interceptor, hooks, domUtils, globalEvents, GLOBAL_EVENT_KEYS, useFns, renderEmptyElement } = VxeUI;
|
|
32
|
+
const { getConfig, getIcon, getI18n, renderer, formats, scrollbarUtils, createEvent, globalResize, interceptor, hooks, domUtils, globalEvents, GLOBAL_EVENT_KEYS, useFns, renderEmptyElement } = VxeUI;
|
|
33
|
+
const { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } = scrollbarUtils || {};
|
|
34
34
|
const supportMaxRow = 5e6;
|
|
35
35
|
const customStorageKey = 'VXE_CUSTOM_STORE';
|
|
36
36
|
const maxYHeight = 5e6;
|
|
@@ -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,7 +351,8 @@ export default defineVxeComponent({
|
|
|
350
351
|
return Object.assign({}, getConfig().table.checkboxConfig, props.checkboxConfig);
|
|
351
352
|
});
|
|
352
353
|
const computeTooltipOpts = computed(() => {
|
|
353
|
-
|
|
354
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
355
|
+
return Object.assign({ useScrollbar: isVScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig);
|
|
354
356
|
});
|
|
355
357
|
const computeHeaderTooltipOpts = computed(() => {
|
|
356
358
|
const tooltipOpts = computeTooltipOpts.value;
|
|
@@ -385,7 +387,8 @@ export default defineVxeComponent({
|
|
|
385
387
|
return Object.assign({ orders: ['asc', 'desc', null] }, getConfig().table.sortConfig, props.sortConfig);
|
|
386
388
|
});
|
|
387
389
|
const computeFilterOpts = computed(() => {
|
|
388
|
-
|
|
390
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
391
|
+
return Object.assign({ useScrollbar: isVScrollbar }, getConfig().table.filterConfig, props.filterConfig);
|
|
389
392
|
});
|
|
390
393
|
const computeFloatingFilterOpts = computed(() => {
|
|
391
394
|
return Object.assign({}, getConfig().table.floatingFilterConfig, props.floatingFilterConfig);
|
|
@@ -786,6 +789,7 @@ export default defineVxeComponent({
|
|
|
786
789
|
};
|
|
787
790
|
const computeMaps = {
|
|
788
791
|
computeSize,
|
|
792
|
+
computeIsVScrollbar,
|
|
789
793
|
computeTableId,
|
|
790
794
|
computeValidOpts,
|
|
791
795
|
computeRowField,
|
|
@@ -3441,6 +3445,7 @@ export default defineVxeComponent({
|
|
|
3441
3445
|
if (reFull) {
|
|
3442
3446
|
updateTreeLineStyle();
|
|
3443
3447
|
}
|
|
3448
|
+
updateScrollbar();
|
|
3444
3449
|
internalData.rceRunTime = Date.now();
|
|
3445
3450
|
if (reFull) {
|
|
3446
3451
|
return computeScrollLoad();
|
|
@@ -3448,8 +3453,14 @@ export default defineVxeComponent({
|
|
|
3448
3453
|
});
|
|
3449
3454
|
};
|
|
3450
3455
|
const updateScrollbar = () => {
|
|
3451
|
-
|
|
3452
|
-
|
|
3456
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
3457
|
+
if (isVScrollbar) {
|
|
3458
|
+
return nextTick().then(() => {
|
|
3459
|
+
updateThumbSize();
|
|
3460
|
+
updateThumbOffset();
|
|
3461
|
+
});
|
|
3462
|
+
}
|
|
3463
|
+
return Promise.resolve();
|
|
3453
3464
|
};
|
|
3454
3465
|
const defaultMinRunDelay = 50;
|
|
3455
3466
|
const handleLazyRecalculate = (reFull, reWidth, reHeight, options) => {
|
|
@@ -12768,8 +12779,8 @@ export default defineVxeComponent({
|
|
|
12768
12779
|
}
|
|
12769
12780
|
},
|
|
12770
12781
|
triggerBodyScrollEvent(evnt, fixedType) {
|
|
12771
|
-
const { useScrollbar } = props;
|
|
12772
12782
|
const { scrollYLoad, scrollXLoad } = reactData;
|
|
12783
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
12773
12784
|
const { elemStore, intoRunScroll, lastScrollTop, lastScrollLeft, inWheelScroll, inVirtualScroll, inHeaderScroll, inBodyScroll, scrollRenderType, inFooterScroll } = internalData;
|
|
12774
12785
|
if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
|
|
12775
12786
|
return;
|
|
@@ -12788,7 +12799,7 @@ export default defineVxeComponent({
|
|
|
12788
12799
|
if (!bodyScrollElem) {
|
|
12789
12800
|
return;
|
|
12790
12801
|
}
|
|
12791
|
-
if (!
|
|
12802
|
+
if (!isVScrollbar) {
|
|
12792
12803
|
if (!xHandleEl) {
|
|
12793
12804
|
return;
|
|
12794
12805
|
}
|
|
@@ -13539,6 +13550,24 @@ export default defineVxeComponent({
|
|
|
13539
13550
|
return nextTick();
|
|
13540
13551
|
}
|
|
13541
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
|
+
};
|
|
13542
13571
|
const updateThumbSize = () => {
|
|
13543
13572
|
const { elemStore } = internalData;
|
|
13544
13573
|
const viewEl = getRefElem(elemStore['main-body-scroll']);
|
|
@@ -14118,8 +14147,8 @@ export default defineVxeComponent({
|
|
|
14118
14147
|
};
|
|
14119
14148
|
const renderVirtualBody = () => {
|
|
14120
14149
|
const $xeGanttView = internalData.xeGanttView;
|
|
14121
|
-
const { useScrollbar } = props;
|
|
14122
14150
|
const { xThumbWidth, yThumbHeight } = reactData;
|
|
14151
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
14123
14152
|
const scrollbarOpts = computeScrollbarOpts.value;
|
|
14124
14153
|
const scrollXAutoHide = computeScrollXAutoHide.value;
|
|
14125
14154
|
const scrollYAutoHide = computeScrollYAutoHide.value;
|
|
@@ -14133,10 +14162,10 @@ export default defineVxeComponent({
|
|
|
14133
14162
|
return h('div', {
|
|
14134
14163
|
key: 'lvb',
|
|
14135
14164
|
class: ['vxe-table--layout-wrapper', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
|
|
14136
|
-
'is--virtual-scrollbar':
|
|
14137
|
-
'ov-padding':
|
|
14138
|
-
'ov-x--auto-hide':
|
|
14139
|
-
'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,
|
|
14140
14169
|
'overflow-y': yThumbHeight,
|
|
14141
14170
|
'overflow-x': xThumbWidth
|
|
14142
14171
|
}]
|
|
@@ -14183,10 +14212,11 @@ export default defineVxeComponent({
|
|
|
14183
14212
|
]);
|
|
14184
14213
|
};
|
|
14185
14214
|
const renderVN = () => {
|
|
14186
|
-
const { loading, stripe,
|
|
14215
|
+
const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props;
|
|
14187
14216
|
const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData;
|
|
14188
14217
|
const { teleportToWrapperElem, popupToWrapperElem, customPopupToElem } = internalData;
|
|
14189
14218
|
const { leftList, rightList } = columnStore;
|
|
14219
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
14190
14220
|
const loadingSlot = slots.loading;
|
|
14191
14221
|
const tipSlots = {
|
|
14192
14222
|
header: slots.headerTooltip || slots['header-tooltip'],
|
|
@@ -14226,7 +14256,7 @@ export default defineVxeComponent({
|
|
|
14226
14256
|
if (isCrossTableDrag && !tableData.length) {
|
|
14227
14257
|
tbOns.onDragover = $xeTable.handleCrossTableRowDragoverEmptyEvent;
|
|
14228
14258
|
}
|
|
14229
|
-
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'}`, {
|
|
14230
14260
|
[`size--${vSize}`]: vSize,
|
|
14231
14261
|
[`valid-msg--${validOpts.msgMode}`]: !!editRules,
|
|
14232
14262
|
'vxe-editable': !!editConfig,
|
|
@@ -14287,7 +14317,7 @@ export default defineVxeComponent({
|
|
|
14287
14317
|
h('div', {
|
|
14288
14318
|
key: 'tw',
|
|
14289
14319
|
class: 'vxe-table--render-wrapper'
|
|
14290
|
-
},
|
|
14320
|
+
}, isVScrollbar
|
|
14291
14321
|
? [renderVirtualBody()]
|
|
14292
14322
|
: (scrollbarXToTop
|
|
14293
14323
|
? [
|
|
@@ -14473,7 +14503,8 @@ export default defineVxeComponent({
|
|
|
14473
14503
|
key: 'ctp',
|
|
14474
14504
|
ref: refCommTooltip,
|
|
14475
14505
|
isArrow: false,
|
|
14476
|
-
enterable: false
|
|
14506
|
+
enterable: false,
|
|
14507
|
+
useScrollbar: isVScrollbar
|
|
14477
14508
|
}),
|
|
14478
14509
|
/**
|
|
14479
14510
|
* 工具提示
|
|
@@ -14496,7 +14527,8 @@ export default defineVxeComponent({
|
|
|
14496
14527
|
maxHeight: tableTipConfig.maxHeight,
|
|
14497
14528
|
placement: tableTipConfig.placement,
|
|
14498
14529
|
defaultPlacement: tableTipConfig.defaultPlacement,
|
|
14499
|
-
popupClassName: tableTipConfig.popupClassName
|
|
14530
|
+
popupClassName: tableTipConfig.popupClassName,
|
|
14531
|
+
useScrollbar: tableTipConfig.useScrollbar
|
|
14500
14532
|
}, currTooltipSlot
|
|
14501
14533
|
? {
|
|
14502
14534
|
content: () => {
|
|
@@ -14535,7 +14567,8 @@ export default defineVxeComponent({
|
|
|
14535
14567
|
theme: validTipConfig.theme,
|
|
14536
14568
|
enterable: validTipConfig.enterable,
|
|
14537
14569
|
enterDelay: validTipConfig.enterDelay,
|
|
14538
|
-
leaveDelay: validTipConfig.leaveDelay
|
|
14570
|
+
leaveDelay: validTipConfig.leaveDelay,
|
|
14571
|
+
useScrollbar: validTipConfig.useScrollbar
|
|
14539
14572
|
})
|
|
14540
14573
|
: renderEmptyElement($xeTable)
|
|
14541
14574
|
])
|
|
@@ -14640,42 +14673,43 @@ export default defineVxeComponent({
|
|
|
14640
14673
|
watch(() => VxeUI.getLanguage(), () => {
|
|
14641
14674
|
reLayoutFlag.value++;
|
|
14642
14675
|
});
|
|
14676
|
+
watch(computeIsVScrollbar, () => {
|
|
14677
|
+
nextTick(() => {
|
|
14678
|
+
bindScrollbarResize();
|
|
14679
|
+
nextTick(() => {
|
|
14680
|
+
reLayoutFlag.value++;
|
|
14681
|
+
});
|
|
14682
|
+
});
|
|
14683
|
+
});
|
|
14643
14684
|
watch(computeScrollbarXToTop, () => {
|
|
14644
|
-
reScrollFlag.value++;
|
|
14645
14685
|
reLayoutFlag.value++;
|
|
14646
14686
|
});
|
|
14647
14687
|
watch(computeScrollbarYToLeft, () => {
|
|
14648
|
-
reScrollFlag.value++;
|
|
14649
14688
|
reLayoutFlag.value++;
|
|
14650
14689
|
});
|
|
14651
14690
|
watch(computeScrollXVisible, () => {
|
|
14652
|
-
reScrollFlag.value++;
|
|
14653
14691
|
reLayoutFlag.value++;
|
|
14654
14692
|
});
|
|
14655
14693
|
watch(computeScrollYVisible, () => {
|
|
14656
|
-
reScrollFlag.value++;
|
|
14657
14694
|
reLayoutFlag.value++;
|
|
14658
14695
|
});
|
|
14659
14696
|
watch(computeScrollXHeight, () => {
|
|
14660
|
-
reScrollFlag.value++;
|
|
14661
14697
|
reLayoutFlag.value++;
|
|
14662
14698
|
});
|
|
14663
14699
|
watch(computeScrollYWidth, () => {
|
|
14664
|
-
reScrollFlag.value++;
|
|
14665
14700
|
reLayoutFlag.value++;
|
|
14666
14701
|
});
|
|
14667
14702
|
watch(computeCellHeitht, () => {
|
|
14668
14703
|
reLayoutFlag.value++;
|
|
14669
14704
|
});
|
|
14670
14705
|
watch(reLayoutFlag, () => {
|
|
14671
|
-
|
|
14706
|
+
nextTick().then(() => {
|
|
14707
|
+
$xeTable.recalculate(true);
|
|
14708
|
+
});
|
|
14672
14709
|
});
|
|
14673
14710
|
watch(reScrollFlag, () => {
|
|
14674
|
-
|
|
14675
|
-
|
|
14676
|
-
nextTick(() => {
|
|
14677
|
-
$xeTable.updateScrollbar();
|
|
14678
|
-
});
|
|
14711
|
+
updateScrollbar().then(() => {
|
|
14712
|
+
updateScrollbar();
|
|
14679
14713
|
});
|
|
14680
14714
|
});
|
|
14681
14715
|
const footFlag = ref(0);
|
|
@@ -14808,7 +14842,7 @@ export default defineVxeComponent({
|
|
|
14808
14842
|
});
|
|
14809
14843
|
onMounted(() => {
|
|
14810
14844
|
const { editConfig, exportConfig, importConfig, treeConfig, minHeight, keepSource, areaConfig } = props;
|
|
14811
|
-
const {
|
|
14845
|
+
const { scrollXStore, scrollYStore } = internalData;
|
|
14812
14846
|
const columnOpts = computeColumnOpts.value;
|
|
14813
14847
|
const columnDragOpts = computeColumnDragOpts.value;
|
|
14814
14848
|
const aggregateOpts = computeAggregateOpts.value;
|
|
@@ -15081,22 +15115,9 @@ export default defineVxeComponent({
|
|
|
15081
15115
|
handleUpdateRowGroup(groupFields);
|
|
15082
15116
|
initData();
|
|
15083
15117
|
nextTick(() => {
|
|
15084
|
-
const {
|
|
15085
|
-
const el = refElem.value;
|
|
15086
|
-
if (useScrollbar) {
|
|
15087
|
-
const viewInnerEl = getRefElem(elemStore['main-body-table']);
|
|
15088
|
-
const scrollObserver = globalResize.create(() => {
|
|
15089
|
-
reScrollFlag.value++;
|
|
15090
|
-
});
|
|
15091
|
-
if (el) {
|
|
15092
|
-
scrollObserver.observe(el);
|
|
15093
|
-
}
|
|
15094
|
-
if (viewInnerEl) {
|
|
15095
|
-
scrollObserver.observe(viewInnerEl);
|
|
15096
|
-
}
|
|
15097
|
-
internalData.scrollObserver = scrollObserver;
|
|
15098
|
-
}
|
|
15118
|
+
const { autoResize } = props;
|
|
15099
15119
|
if (autoResize) {
|
|
15120
|
+
const el = refElem.value;
|
|
15100
15121
|
const parentEl = $xeTable.getParentElem();
|
|
15101
15122
|
const resizeObserver = globalResize.create(() => {
|
|
15102
15123
|
if (props.autoResize) {
|
|
@@ -15111,6 +15132,7 @@ export default defineVxeComponent({
|
|
|
15111
15132
|
}
|
|
15112
15133
|
internalData.resizeObserver = resizeObserver;
|
|
15113
15134
|
}
|
|
15135
|
+
bindScrollbarResize();
|
|
15114
15136
|
});
|
|
15115
15137
|
if (virtualYOpts.mode !== 'scroll') {
|
|
15116
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);
|