vxe-table 3.25.0-beta.2 → 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/custom/panel.js +2 -2
- package/es/table/module/filter/mixin.js +5 -7
- package/es/table/module/filter/panel.js +47 -48
- package/es/table/src/methods.js +13 -7
- package/es/table/src/table.js +52 -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/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/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +126 -149
- 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/mixin.js +6 -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 +9 -9
- package/lib/table/src/methods.min.js +1 -1
- package/lib/table/src/table.js +56 -29
- 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 +2 -1
- package/packages/table/module/custom/panel.ts +2 -2
- package/packages/table/module/filter/mixin.ts +5 -7
- package/packages/table/module/filter/panel.ts +50 -48
- package/packages/table/src/methods.ts +15 -7
- package/packages/table/src/table.ts +55 -27
- 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.1792035018941.ttf → iconfont.1792139868734.ttf} +0 -0
- /package/es/{iconfont.1792035018941.woff → iconfont.1792139868734.woff} +0 -0
- /package/es/{iconfont.1792035018941.woff2 → iconfont.1792139868734.woff2} +0 -0
- /package/lib/{iconfont.1792035018941.ttf → iconfont.1792139868734.ttf} +0 -0
- /package/lib/{iconfont.1792035018941.woff → iconfont.1792139868734.woff} +0 -0
- /package/lib/{iconfont.1792035018941.woff2 → iconfont.1792139868734.woff2} +0 -0
|
@@ -424,8 +424,8 @@ export default {
|
|
|
424
424
|
const { prevDragCol, prevDragGroupField, prevDragAggFnColid, prevDragPos, prevDragToChild } = customPanelInternalData;
|
|
425
425
|
const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
|
|
426
426
|
if (prevDragGroupField || prevDragAggFnColid) {
|
|
427
|
-
if ($xeTable.
|
|
428
|
-
$xeTable.
|
|
427
|
+
if ($xeTable.handlePivotTableAggPanelDragendEvent) {
|
|
428
|
+
$xeTable.handlePivotTableAggPanelDragendEvent(evnt);
|
|
429
429
|
}
|
|
430
430
|
}
|
|
431
431
|
else if (prevDragCol && dragCol) {
|
|
@@ -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
|
* 如果不存在图标,则相对单元格居中显示
|
|
@@ -63,6 +61,7 @@ function updatePopupStyle($xeTable) {
|
|
|
63
61
|
if (transfer) {
|
|
64
62
|
const ppObj = updatePanelPlacement(currEl, filterWrapperElem, {
|
|
65
63
|
defaultPlacement: 'bottom',
|
|
64
|
+
appendTo: '',
|
|
66
65
|
isMinWidth: false,
|
|
67
66
|
teleportTo: transfer
|
|
68
67
|
});
|
|
@@ -71,9 +70,9 @@ function updatePopupStyle($xeTable) {
|
|
|
71
70
|
else {
|
|
72
71
|
const filterWidth = filterWrapperElem.offsetWidth;
|
|
73
72
|
const centerWidth = targetEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
|
|
74
|
-
maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
|
|
75
73
|
left = btnRect.left - tableRect.left - centerWidth;
|
|
76
74
|
top = btnRect.top - tableRect.top + currEl.clientHeight;
|
|
75
|
+
maxHeight = Math.max(40, tableEl.clientHeight - top - scrollbarHeight);
|
|
77
76
|
if (left < 1) {
|
|
78
77
|
left = 1;
|
|
79
78
|
}
|
|
@@ -95,7 +94,6 @@ function updatePopupStyle($xeTable) {
|
|
|
95
94
|
if (zIndex) {
|
|
96
95
|
panelStyle.zIndex = zIndex;
|
|
97
96
|
}
|
|
98
|
-
filterStore.style = panelStyle;
|
|
99
97
|
// 筛选面板是自适应表格高度
|
|
100
98
|
if (compConf ? !compConf.tableFilterAutoHeight : false) {
|
|
101
99
|
maxHeight = 0;
|
|
@@ -105,8 +103,8 @@ function updatePopupStyle($xeTable) {
|
|
|
105
103
|
maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
|
|
106
104
|
}
|
|
107
105
|
}
|
|
108
|
-
|
|
109
|
-
filterStore.
|
|
106
|
+
panelStyle['--vxe-ui-vxe-table-filter-default-max-height'] = maxHeight ? toCssUnit(maxHeight) : 'none';
|
|
107
|
+
filterStore.style = panelStyle;
|
|
110
108
|
};
|
|
111
109
|
handleStyle();
|
|
112
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
|
@@ -6,11 +6,11 @@ import Cell from './cell';
|
|
|
6
6
|
import { getRowUniqueId, createRowId, clearTableAllStatus, getColumnList, toFilters, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, getColReMaxWidth, createHandleUpdateRowId, createHandleGetRowId, getRefElem, getCellRestHeight, getLastChildColumn, getRowMaxHeight, handleCustomStoreConfig, encodeRowid } from './util';
|
|
7
7
|
import { getSlotVNs } from '../../ui/src/vn';
|
|
8
8
|
import { moveRowAnimateToTb, clearRowAnimate, moveColAnimateToLr, clearColAnimate } from '../../ui/src/anime';
|
|
9
|
-
import { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } from './scrollbar';
|
|
10
9
|
import { createComponentLog } from '../../ui/src/log';
|
|
11
10
|
import { getCrossTableDragRowInfo } from './store';
|
|
12
11
|
const { warnLog, errLog } = createComponentLog('table');
|
|
13
|
-
const { getConfig, getI18n, renderer, formats, interceptor, createEvent, globalEvents, GLOBAL_EVENT_KEYS } = VxeUI;
|
|
12
|
+
const { getConfig, getI18n, renderer, scrollbarUtils, formats, interceptor, createEvent, globalEvents, GLOBAL_EVENT_KEYS } = VxeUI;
|
|
13
|
+
const { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } = scrollbarUtils || {};
|
|
14
14
|
const supportMaxRow = 5e6;
|
|
15
15
|
const customStorageKey = 'VXE_CUSTOM_STORE';
|
|
16
16
|
const maxYHeight = 5e6;
|
|
@@ -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,7 +1010,8 @@ export default {
|
|
|
992
1010
|
computeTooltipOpts() {
|
|
993
1011
|
const $xeTable = this;
|
|
994
1012
|
const props = $xeTable;
|
|
995
|
-
|
|
1013
|
+
const isVScrollbar = $xeTable.computeIsVScrollbar;
|
|
1014
|
+
return Object.assign({ useScrollbar: isVScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig);
|
|
996
1015
|
},
|
|
997
1016
|
tipConfig() {
|
|
998
1017
|
return Object.assign({}, this.tooltipOpts);
|
|
@@ -1055,7 +1074,8 @@ export default {
|
|
|
1055
1074
|
computeFilterOpts() {
|
|
1056
1075
|
const $xeTable = this;
|
|
1057
1076
|
const props = $xeTable;
|
|
1058
|
-
|
|
1077
|
+
const isVScrollbar = $xeTable.computeIsVScrollbar;
|
|
1078
|
+
return Object.assign({ useScrollbar: isVScrollbar }, getConfig().table.filterConfig, props.filterConfig);
|
|
1059
1079
|
},
|
|
1060
1080
|
computeFloatingFilterOpts() {
|
|
1061
1081
|
const $xeTable = this;
|
|
@@ -1637,34 +1657,37 @@ export default {
|
|
|
1637
1657
|
const $xeTable = this;
|
|
1638
1658
|
$xeTable.reLayoutFlag++;
|
|
1639
1659
|
},
|
|
1660
|
+
computeIsVScrollbar() {
|
|
1661
|
+
const $xeTable = this;
|
|
1662
|
+
$xeTable.$nextTick(() => {
|
|
1663
|
+
bindScrollbarResize($xeTable);
|
|
1664
|
+
$xeTable.$nextTick(() => {
|
|
1665
|
+
$xeTable.reLayoutFlag++;
|
|
1666
|
+
});
|
|
1667
|
+
});
|
|
1668
|
+
},
|
|
1640
1669
|
computeScrollbarXToTop() {
|
|
1641
1670
|
const $xeTable = this;
|
|
1642
|
-
$xeTable.reScrollFlag++;
|
|
1643
1671
|
$xeTable.reLayoutFlag++;
|
|
1644
1672
|
},
|
|
1645
1673
|
computeScrollbarYToLeft() {
|
|
1646
1674
|
const $xeTable = this;
|
|
1647
|
-
$xeTable.reScrollFlag++;
|
|
1648
1675
|
$xeTable.reLayoutFlag++;
|
|
1649
1676
|
},
|
|
1650
1677
|
computeScrollXVisible() {
|
|
1651
1678
|
const $xeTable = this;
|
|
1652
|
-
$xeTable.reScrollFlag++;
|
|
1653
1679
|
$xeTable.reLayoutFlag++;
|
|
1654
1680
|
},
|
|
1655
1681
|
computeScrollYVisible() {
|
|
1656
1682
|
const $xeTable = this;
|
|
1657
|
-
$xeTable.reScrollFlag++;
|
|
1658
1683
|
$xeTable.reLayoutFlag++;
|
|
1659
1684
|
},
|
|
1660
1685
|
computeScrollXHeight() {
|
|
1661
1686
|
const $xeTable = this;
|
|
1662
|
-
$xeTable.reScrollFlag++;
|
|
1663
1687
|
$xeTable.reLayoutFlag++;
|
|
1664
1688
|
},
|
|
1665
1689
|
computeScrollYWidth() {
|
|
1666
1690
|
const $xeTable = this;
|
|
1667
|
-
$xeTable.reScrollFlag++;
|
|
1668
1691
|
$xeTable.reLayoutFlag++;
|
|
1669
1692
|
},
|
|
1670
1693
|
computeCellHeitht() {
|
|
@@ -1673,17 +1696,14 @@ export default {
|
|
|
1673
1696
|
},
|
|
1674
1697
|
reLayoutFlag() {
|
|
1675
1698
|
const $xeTable = this;
|
|
1676
|
-
$xeTable.$nextTick(() => {
|
|
1699
|
+
$xeTable.$nextTick().then(() => {
|
|
1677
1700
|
$xeTable.recalculate(true);
|
|
1678
1701
|
});
|
|
1679
1702
|
},
|
|
1680
1703
|
reScrollFlag() {
|
|
1681
1704
|
const $xeTable = this;
|
|
1682
|
-
$xeTable
|
|
1705
|
+
$xeTable.updateScrollbar().then(() => {
|
|
1683
1706
|
$xeTable.updateScrollbar();
|
|
1684
|
-
$xeTable.$nextTick(() => {
|
|
1685
|
-
$xeTable.updateScrollbar();
|
|
1686
|
-
});
|
|
1687
1707
|
});
|
|
1688
1708
|
},
|
|
1689
1709
|
footerData() {
|
|
@@ -2129,12 +2149,13 @@ export default {
|
|
|
2129
2149
|
warnLog('vxe.error.reqProp', ['tooltip-config']);
|
|
2130
2150
|
}
|
|
2131
2151
|
$xeTable.$nextTick(() => {
|
|
2132
|
-
const {
|
|
2152
|
+
const { autoResize } = props;
|
|
2133
2153
|
const { elemStore } = internalData;
|
|
2134
2154
|
// 使用已安装的组件,如果未安装则不渲染
|
|
2135
2155
|
const VxeUILoadingComponent = VxeUI.getComponent('VxeLoading');
|
|
2136
2156
|
const VxeUITooltipComponent = VxeUI.getComponent('VxeTooltip');
|
|
2137
2157
|
const { showOverflow, showHeaderOverflow, showFooterOverflow } = props;
|
|
2158
|
+
const isVScrollbar = $xeTable.computeIsVScrollbar;
|
|
2138
2159
|
const tooltipOpts = $xeTable.computeTooltipOpts;
|
|
2139
2160
|
const headerTooltipOpts = $xeTable.computeHeaderTooltipOpts;
|
|
2140
2161
|
const footerTooltipOpts = $xeTable.computeFooterTooltipOpts;
|
|
@@ -2175,7 +2196,7 @@ export default {
|
|
|
2175
2196
|
}
|
|
2176
2197
|
}
|
|
2177
2198
|
const el = $xeTable.$refs.refElem;
|
|
2178
|
-
if (
|
|
2199
|
+
if (isVScrollbar) {
|
|
2179
2200
|
const viewInnerEl = getRefElem(elemStore['main-body-table']);
|
|
2180
2201
|
const scrollObserver = globalResize.create(() => {
|
|
2181
2202
|
$xeTable.reScrollFlag++;
|
|
@@ -2290,9 +2311,10 @@ export default {
|
|
|
2290
2311
|
const slots = $xeTable.$scopedSlots;
|
|
2291
2312
|
const reactData = $xeTable;
|
|
2292
2313
|
const { xID } = $xeTable;
|
|
2293
|
-
const { loading, stripe,
|
|
2314
|
+
const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props;
|
|
2294
2315
|
const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData;
|
|
2295
2316
|
const { leftList, rightList } = columnStore;
|
|
2317
|
+
const isVScrollbar = $xeTable.computeIsVScrollbar;
|
|
2296
2318
|
const loadingSlot = slots.loading;
|
|
2297
2319
|
const tipSlots = {
|
|
2298
2320
|
header: slots.headerTooltip || slots['header-tooltip'],
|
|
@@ -2334,7 +2356,7 @@ export default {
|
|
|
2334
2356
|
}
|
|
2335
2357
|
return h('div', {
|
|
2336
2358
|
ref: 'refElem',
|
|
2337
|
-
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'}`, {
|
|
2338
2360
|
[`size--${vSize}`]: vSize,
|
|
2339
2361
|
[`valid-msg--${validOpts.msgMode}`]: !!editRules,
|
|
2340
2362
|
'vxe-editable': !!editConfig,
|
|
@@ -2402,7 +2424,7 @@ export default {
|
|
|
2402
2424
|
h('div', {
|
|
2403
2425
|
key: 'tw',
|
|
2404
2426
|
class: 'vxe-table--render-wrapper'
|
|
2405
|
-
},
|
|
2427
|
+
}, isVScrollbar
|
|
2406
2428
|
? [renderVirtualBody(h, $xeTable)]
|
|
2407
2429
|
: (scrollbarXToTop
|
|
2408
2430
|
? [
|
|
@@ -2589,7 +2611,8 @@ export default {
|
|
|
2589
2611
|
ref: 'refCommTooltip',
|
|
2590
2612
|
props: {
|
|
2591
2613
|
isArrow: false,
|
|
2592
|
-
enterable: false
|
|
2614
|
+
enterable: false,
|
|
2615
|
+
useScrollbar: isVScrollbar
|
|
2593
2616
|
}
|
|
2594
2617
|
})
|
|
2595
2618
|
: renderEmptyElement($xeTable),
|
|
@@ -2616,7 +2639,8 @@ export default {
|
|
|
2616
2639
|
maxHeight: tableTipConfig.maxHeight,
|
|
2617
2640
|
placement: tableTipConfig.placement,
|
|
2618
2641
|
defaultPlacement: tableTipConfig.defaultPlacement,
|
|
2619
|
-
popupClassName: tableTipConfig.popupClassName
|
|
2642
|
+
popupClassName: tableTipConfig.popupClassName,
|
|
2643
|
+
useScrollbar: tableTipConfig.useScrollbar
|
|
2620
2644
|
},
|
|
2621
2645
|
scopedSlots: currTooltipSlot
|
|
2622
2646
|
? {
|
|
@@ -2659,7 +2683,8 @@ export default {
|
|
|
2659
2683
|
theme: validTipConfig.theme,
|
|
2660
2684
|
enterable: validTipConfig.enterable,
|
|
2661
2685
|
enterDelay: validTipConfig.enterDelay,
|
|
2662
|
-
leaveDelay: validTipConfig.leaveDelay
|
|
2686
|
+
leaveDelay: validTipConfig.leaveDelay,
|
|
2687
|
+
useScrollbar: validTipConfig.useScrollbar
|
|
2663
2688
|
}
|
|
2664
2689
|
})
|
|
2665
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);
|