vxe-table 4.17.6 → 4.17.7
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/style.css +1 -1
- package/es/table/src/body.js +12 -20
- package/es/table/src/cell.js +41 -35
- package/es/table/src/footer.js +3 -12
- package/es/table/src/header.js +4 -12
- package/es/table/src/table.js +109 -54
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/lib/index.umd.js +55 -74
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/table/src/body.js +10 -23
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/cell.js +8 -4
- package/lib/table/src/cell.min.js +1 -1
- package/lib/table/src/footer.js +4 -15
- package/lib/table/src/footer.min.js +1 -1
- package/lib/table/src/header.js +5 -14
- package/lib/table/src/header.min.js +1 -1
- package/lib/table/src/table.js +29 -18
- package/lib/table/src/table.min.js +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/package.json +1 -1
- package/packages/table/src/body.ts +8 -20
- package/packages/table/src/cell.ts +41 -35
- package/packages/table/src/footer.ts +3 -11
- package/packages/table/src/header.ts +4 -12
- package/packages/table/src/table.ts +109 -53
- /package/es/{iconfont.1761877377602.ttf → iconfont.1762136085329.ttf} +0 -0
- /package/es/{iconfont.1761877377602.woff → iconfont.1762136085329.woff} +0 -0
- /package/es/{iconfont.1761877377602.woff2 → iconfont.1762136085329.woff2} +0 -0
- /package/lib/{iconfont.1761877377602.ttf → iconfont.1762136085329.ttf} +0 -0
- /package/lib/{iconfont.1761877377602.woff → iconfont.1762136085329.woff} +0 -0
- /package/lib/{iconfont.1761877377602.woff2 → iconfont.1762136085329.woff2} +0 -0
package/es/table/src/body.js
CHANGED
|
@@ -23,7 +23,7 @@ export default defineVxeComponent({
|
|
|
23
23
|
setup(props) {
|
|
24
24
|
const $xeTable = inject('$xeTable', {});
|
|
25
25
|
const { xID, props: tableProps, context: tableContext, reactData: tableReactData, internalData: tableInternalData } = $xeTable;
|
|
26
|
-
const { computeEditOpts, computeMouseOpts, computeCellOffsetWidth, computeAreaOpts, computeDefaultRowHeight, computeEmptyOpts, computeTooltipOpts, computeRadioOpts, computeExpandOpts, computeTreeOpts, computeCheckboxOpts, computeCellOpts, computeValidOpts, computeRowOpts, computeColumnOpts, computeRowDragOpts, computeResizableOpts, computeVirtualXOpts, computeVirtualYOpts } = $xeTable.getComputeMaps();
|
|
26
|
+
const { computeEditOpts, computeMouseOpts, computeCellOffsetWidth, computeAreaOpts, computeDefaultRowHeight, computeEmptyOpts, computeTooltipOpts, computeRadioOpts, computeExpandOpts, computeTreeOpts, computeCheckboxOpts, computeCellOpts, computeValidOpts, computeRowOpts, computeColumnOpts, computeRowDragOpts, computeResizableOpts, computeVirtualXOpts, computeVirtualYOpts, computeIsBodyRenderOptimize } = $xeTable.getComputeMaps();
|
|
27
27
|
const refElem = ref();
|
|
28
28
|
const refBodyScroll = ref();
|
|
29
29
|
const refBodyTable = ref();
|
|
@@ -666,24 +666,15 @@ export default defineVxeComponent({
|
|
|
666
666
|
const $xeGrid = $xeTable.xeGrid;
|
|
667
667
|
const $xeGantt = $xeTable.xeGantt;
|
|
668
668
|
const { fixedColumn, fixedType, tableColumn } = props;
|
|
669
|
-
const {
|
|
670
|
-
const { isGroup, tableData, isColLoading, overflowX, scrollXLoad, scrollYLoad,
|
|
669
|
+
const { mouseConfig } = tableProps;
|
|
670
|
+
const { isGroup, tableData, isColLoading, overflowX, scrollXLoad, scrollYLoad, dragRow, dragCol } = tableReactData;
|
|
671
671
|
const { visibleColumn, fullAllDataRowIdData, fullColumnIdData } = tableInternalData;
|
|
672
672
|
const emptyOpts = computeEmptyOpts.value;
|
|
673
673
|
const mouseOpts = computeMouseOpts.value;
|
|
674
|
-
const
|
|
674
|
+
const isBodyRenderOptimize = computeIsBodyRenderOptimize.value;
|
|
675
675
|
let renderDataList = tableData;
|
|
676
676
|
let renderColumnList = tableColumn;
|
|
677
|
-
|
|
678
|
-
// 如果是使用优化模式
|
|
679
|
-
if (scrollXLoad || scrollYLoad || isAllOverflow) {
|
|
680
|
-
if ((expandColumn && expandOpts.mode !== 'fixed') || spanMethod || footerSpanMethod) {
|
|
681
|
-
// 如果不支持优化模式
|
|
682
|
-
}
|
|
683
|
-
else {
|
|
684
|
-
isOptimizeMode = true;
|
|
685
|
-
}
|
|
686
|
-
}
|
|
677
|
+
const isOptimizeMode = isBodyRenderOptimize;
|
|
687
678
|
if (!isColLoading && (fixedType || !overflowX)) {
|
|
688
679
|
renderColumnList = visibleColumn;
|
|
689
680
|
}
|
|
@@ -756,17 +747,18 @@ export default defineVxeComponent({
|
|
|
756
747
|
emptyContent = tableProps.emptyText || getI18n('vxe.table.emptyText');
|
|
757
748
|
}
|
|
758
749
|
}
|
|
759
|
-
const ons = {
|
|
760
|
-
onScroll(evnt) {
|
|
761
|
-
$xeTable.triggerBodyScrollEvent(evnt, fixedType);
|
|
762
|
-
}
|
|
763
|
-
};
|
|
764
750
|
return h('div', {
|
|
765
751
|
ref: refElem,
|
|
766
752
|
class: ['vxe-table--body-wrapper', fixedType ? `fixed-${fixedType}--wrapper` : 'body--wrapper'],
|
|
767
753
|
xid: xID
|
|
768
754
|
}, [
|
|
769
|
-
h('div',
|
|
755
|
+
h('div', {
|
|
756
|
+
ref: refBodyScroll,
|
|
757
|
+
class: 'vxe-table--body-inner-wrapper',
|
|
758
|
+
onScroll(evnt) {
|
|
759
|
+
$xeTable.triggerBodyScrollEvent(evnt, fixedType);
|
|
760
|
+
}
|
|
761
|
+
}, [
|
|
770
762
|
fixedType
|
|
771
763
|
? renderEmptyElement($xeTable)
|
|
772
764
|
: h('div', {
|
package/es/table/src/cell.js
CHANGED
|
@@ -164,7 +164,8 @@ function renderTitleContent(params, content) {
|
|
|
164
164
|
const { computeHeaderTooltipOpts } = $table.getComputeMaps();
|
|
165
165
|
const { showHeaderOverflow: allColumnHeaderOverflow } = tableProps;
|
|
166
166
|
const { isRowGroupStatus } = tableReactData;
|
|
167
|
-
const { showHeaderOverflow } = column;
|
|
167
|
+
const { showHeaderOverflow, slots } = column;
|
|
168
|
+
const titleSlot = slots ? slots.title : null;
|
|
168
169
|
const headerTooltipOpts = computeHeaderTooltipOpts.value;
|
|
169
170
|
const showAllTip = headerTooltipOpts.showAll;
|
|
170
171
|
const headOverflow = XEUtils.eqNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow;
|
|
@@ -198,9 +199,11 @@ function renderTitleContent(params, content) {
|
|
|
198
199
|
return [
|
|
199
200
|
h('span', Object.assign({ class: 'vxe-cell--title' }, ons), isRowGroupStatus && column.aggFunc && $table.getPivotTableAggregateRenderColTitles
|
|
200
201
|
? $table.getPivotTableAggregateRenderColTitles(column, titleVN)
|
|
201
|
-
:
|
|
202
|
-
|
|
203
|
-
|
|
202
|
+
: titleSlot
|
|
203
|
+
? $table.callSlot(titleSlot, params)
|
|
204
|
+
: [
|
|
205
|
+
titleVN
|
|
206
|
+
])
|
|
204
207
|
];
|
|
205
208
|
}
|
|
206
209
|
function getFooterContent(params) {
|
|
@@ -1007,38 +1010,41 @@ export const Cell = {
|
|
|
1007
1010
|
const { computeSortOpts } = $table.getComputeMaps();
|
|
1008
1011
|
const sortOpts = computeSortOpts.value;
|
|
1009
1012
|
const { showIcon, allowBtn, ascTitle, descTitle, iconLayout, iconAsc, iconDesc, iconVisibleMethod } = sortOpts;
|
|
1010
|
-
const { order } = column;
|
|
1013
|
+
const { order, slots } = column;
|
|
1011
1014
|
if (showIcon && (!iconVisibleMethod || iconVisibleMethod(params))) {
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
h('
|
|
1017
|
-
class: ['vxe-sort
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1015
|
+
const sortSlot = slots ? slots.sort : null;
|
|
1016
|
+
return sortSlot
|
|
1017
|
+
? getSlotVNs($table.callSlot(sortSlot, params))
|
|
1018
|
+
: [
|
|
1019
|
+
h('span', {
|
|
1020
|
+
class: ['vxe-cell--sort', `vxe-cell--sort-${iconLayout}-layout`]
|
|
1021
|
+
}, [
|
|
1022
|
+
h('i', {
|
|
1023
|
+
class: ['vxe-sort--asc-btn', iconAsc || getIcon().TABLE_SORT_ASC, {
|
|
1024
|
+
'sort--active': order === 'asc'
|
|
1025
|
+
}],
|
|
1026
|
+
title: XEUtils.eqNull(ascTitle) ? getI18n('vxe.table.sortAsc') : `${ascTitle || ''}`,
|
|
1027
|
+
onClick: allowBtn
|
|
1028
|
+
? (evnt) => {
|
|
1029
|
+
evnt.stopPropagation();
|
|
1030
|
+
$table.triggerSortEvent(evnt, column, 'asc');
|
|
1031
|
+
}
|
|
1032
|
+
: undefined
|
|
1033
|
+
}),
|
|
1034
|
+
h('i', {
|
|
1035
|
+
class: ['vxe-sort--desc-btn', iconDesc || getIcon().TABLE_SORT_DESC, {
|
|
1036
|
+
'sort--active': order === 'desc'
|
|
1037
|
+
}],
|
|
1038
|
+
title: XEUtils.eqNull(descTitle) ? getI18n('vxe.table.sortDesc') : `${descTitle || ''}`,
|
|
1039
|
+
onClick: allowBtn
|
|
1040
|
+
? (evnt) => {
|
|
1041
|
+
evnt.stopPropagation();
|
|
1042
|
+
$table.triggerSortEvent(evnt, column, 'desc');
|
|
1043
|
+
}
|
|
1044
|
+
: undefined
|
|
1045
|
+
})
|
|
1046
|
+
])
|
|
1047
|
+
];
|
|
1042
1048
|
}
|
|
1043
1049
|
return [];
|
|
1044
1050
|
},
|
package/es/table/src/footer.js
CHANGED
|
@@ -30,7 +30,7 @@ export default defineVxeComponent({
|
|
|
30
30
|
setup(props) {
|
|
31
31
|
const $xeTable = inject('$xeTable', {});
|
|
32
32
|
const { xID, props: tableProps, reactData: tableReactData, internalData: tableInternalData } = $xeTable;
|
|
33
|
-
const { computeFooterTooltipOpts, computeColumnOpts, computeCellOpts, computeFooterCellOpts, computeDefaultRowHeight, computeResizableOpts, computeVirtualXOpts } = $xeTable.getComputeMaps();
|
|
33
|
+
const { computeFooterTooltipOpts, computeColumnOpts, computeCellOpts, computeFooterCellOpts, computeDefaultRowHeight, computeResizableOpts, computeVirtualXOpts, computeIsFooterRenderOptimize } = $xeTable.getComputeMaps();
|
|
34
34
|
const refElem = ref();
|
|
35
35
|
const refFooterScroll = ref();
|
|
36
36
|
const refFooterTable = ref();
|
|
@@ -221,20 +221,11 @@ export default defineVxeComponent({
|
|
|
221
221
|
};
|
|
222
222
|
const renderVN = () => {
|
|
223
223
|
const { fixedType, fixedColumn, tableColumn } = props;
|
|
224
|
-
const { spanMethod, footerSpanMethod, showFooterOverflow: allColumnFooterOverflow } = tableProps;
|
|
225
224
|
const { visibleColumn, fullColumnIdData } = tableInternalData;
|
|
226
225
|
const { isGroup, isColLoading, overflowX, scrollXLoad, dragCol } = tableReactData;
|
|
226
|
+
const isFooterRenderOptimize = computeIsFooterRenderOptimize.value;
|
|
227
227
|
let renderColumnList = tableColumn;
|
|
228
|
-
|
|
229
|
-
// 如果是使用优化模式
|
|
230
|
-
if (scrollXLoad && allColumnFooterOverflow) {
|
|
231
|
-
if (spanMethod || footerSpanMethod) {
|
|
232
|
-
// 如果不支持优化模式
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
isOptimizeMode = true;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
228
|
+
const isOptimizeMode = isFooterRenderOptimize;
|
|
238
229
|
if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
|
|
239
230
|
renderColumnList = visibleColumn;
|
|
240
231
|
}
|
package/es/table/src/header.js
CHANGED
|
@@ -37,7 +37,7 @@ export default defineVxeComponent({
|
|
|
37
37
|
setup(props) {
|
|
38
38
|
const $xeTable = inject('$xeTable', {});
|
|
39
39
|
const { xID, props: tableProps, reactData: tableReactData, internalData: tableInternalData } = $xeTable;
|
|
40
|
-
const { computeColumnOpts, computeColumnDragOpts, computeCellOpts, computeMouseOpts, computeHeaderCellOpts, computeDefaultRowHeight, computeVirtualXOpts, computeFloatingFilterOpts } = $xeTable.getComputeMaps();
|
|
40
|
+
const { computeColumnOpts, computeColumnDragOpts, computeCellOpts, computeMouseOpts, computeHeaderCellOpts, computeDefaultRowHeight, computeVirtualXOpts, computeFloatingFilterOpts, computeIsHeaderRenderOptimize } = $xeTable.getComputeMaps();
|
|
41
41
|
const headerColumn = ref([]);
|
|
42
42
|
const refElem = ref();
|
|
43
43
|
const refHeaderScroll = ref();
|
|
@@ -373,26 +373,18 @@ export default defineVxeComponent({
|
|
|
373
373
|
};
|
|
374
374
|
const renderVN = () => {
|
|
375
375
|
const { fixedType, fixedColumn, tableColumn } = props;
|
|
376
|
-
const { mouseConfig
|
|
376
|
+
const { mouseConfig } = tableProps;
|
|
377
377
|
const { isGroup, isColLoading, overflowX, scrollXLoad, dragCol } = tableReactData;
|
|
378
378
|
const { visibleColumn, fullColumnIdData } = tableInternalData;
|
|
379
379
|
const mouseOpts = computeMouseOpts.value;
|
|
380
|
+
const isHeaderRenderOptimize = computeIsHeaderRenderOptimize.value;
|
|
380
381
|
let renderHeaderList = headerColumn.value || [];
|
|
381
382
|
let renderColumnList = tableColumn;
|
|
382
|
-
|
|
383
|
+
const isOptimizeMode = isHeaderRenderOptimize;
|
|
383
384
|
if (isGroup) {
|
|
384
385
|
renderColumnList = visibleColumn;
|
|
385
386
|
}
|
|
386
387
|
else {
|
|
387
|
-
// 如果是使用优化模式
|
|
388
|
-
if (scrollXLoad && allColumnHeaderOverflow) {
|
|
389
|
-
if (spanMethod || footerSpanMethod) {
|
|
390
|
-
// 如果不支持优化模式
|
|
391
|
-
}
|
|
392
|
-
else {
|
|
393
|
-
isOptimizeMode = true;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
388
|
if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
|
|
397
389
|
renderColumnList = visibleColumn;
|
|
398
390
|
}
|
package/es/table/src/table.js
CHANGED
|
@@ -588,6 +588,77 @@ export default defineVxeComponent({
|
|
|
588
588
|
}
|
|
589
589
|
return leftWidth;
|
|
590
590
|
});
|
|
591
|
+
const computeBodyMergeCoverFixed = computed(() => {
|
|
592
|
+
const { columnStore, mergeBodyFlag } = reactData;
|
|
593
|
+
const { mergeBodyList, visibleColumn } = internalData;
|
|
594
|
+
const { leftList, rightList } = columnStore;
|
|
595
|
+
const rscIndex = visibleColumn.length - rightList.length;
|
|
596
|
+
if (mergeBodyFlag && (leftList.length || rightList.length)) {
|
|
597
|
+
const lecIndex = leftList.length;
|
|
598
|
+
for (let i = 0; i < mergeBodyList.length; i++) {
|
|
599
|
+
const { col, colspan } = mergeBodyList[i];
|
|
600
|
+
if (col < lecIndex || (col + colspan) > rscIndex) {
|
|
601
|
+
return true;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
return false;
|
|
606
|
+
});
|
|
607
|
+
const computeIsHeaderRenderOptimize = computed(() => {
|
|
608
|
+
const { spanMethod, footerSpanMethod, showHeaderOverflow: allColumnHeaderOverflow } = props;
|
|
609
|
+
const { isGroup, scrollXLoad } = reactData;
|
|
610
|
+
let isOptimizeMode = false;
|
|
611
|
+
if (isGroup) {
|
|
612
|
+
// 分组表头
|
|
613
|
+
}
|
|
614
|
+
else {
|
|
615
|
+
// 如果是使用优化模式
|
|
616
|
+
if (scrollXLoad && allColumnHeaderOverflow) {
|
|
617
|
+
if (spanMethod || footerSpanMethod) {
|
|
618
|
+
// 如果不支持优化模式
|
|
619
|
+
}
|
|
620
|
+
else {
|
|
621
|
+
isOptimizeMode = true;
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
return isOptimizeMode;
|
|
626
|
+
});
|
|
627
|
+
const computeIsBodyRenderOptimize = computed(() => {
|
|
628
|
+
const { spanMethod, footerSpanMethod } = props;
|
|
629
|
+
const { scrollXLoad, scrollYLoad, isAllOverflow, expandColumn } = reactData;
|
|
630
|
+
const bodyMergeCoverFixed = computeBodyMergeCoverFixed.value;
|
|
631
|
+
const expandOpts = computeExpandOpts.value;
|
|
632
|
+
let isOptimizeMode = false;
|
|
633
|
+
// 如果是使用优化模式
|
|
634
|
+
if (scrollXLoad || scrollYLoad || isAllOverflow) {
|
|
635
|
+
// 如果是展开行,内联模式,不支持优化
|
|
636
|
+
// 如果是方法合并,不支持优化
|
|
637
|
+
// 如果固定列且配置式合并,不支持优化
|
|
638
|
+
if ((expandColumn && expandOpts.mode !== 'fixed') || bodyMergeCoverFixed || spanMethod || footerSpanMethod) {
|
|
639
|
+
// 如果不支持优化模式
|
|
640
|
+
}
|
|
641
|
+
else {
|
|
642
|
+
isOptimizeMode = true;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
return isOptimizeMode;
|
|
646
|
+
});
|
|
647
|
+
const computeIsFooterRenderOptimize = computed(() => {
|
|
648
|
+
const { spanMethod, footerSpanMethod, showFooterOverflow: allColumnFooterOverflow } = props;
|
|
649
|
+
const { scrollXLoad } = reactData;
|
|
650
|
+
let isOptimizeMode = false;
|
|
651
|
+
// 如果是使用优化模式
|
|
652
|
+
if (scrollXLoad && allColumnFooterOverflow) {
|
|
653
|
+
if (spanMethod || footerSpanMethod) {
|
|
654
|
+
// 如果不支持优化模式
|
|
655
|
+
}
|
|
656
|
+
else {
|
|
657
|
+
isOptimizeMode = true;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
return isOptimizeMode;
|
|
661
|
+
});
|
|
591
662
|
const computeHeaderMenu = computed(() => {
|
|
592
663
|
const menuOpts = computeMenuOpts.value;
|
|
593
664
|
const headerOpts = menuOpts.header;
|
|
@@ -835,9 +906,13 @@ export default defineVxeComponent({
|
|
|
835
906
|
computeCustomOpts,
|
|
836
907
|
computeLeftFixedWidth,
|
|
837
908
|
computeRightFixedWidth,
|
|
909
|
+
computeBodyMergeCoverFixed,
|
|
838
910
|
computeFixedColumnSize,
|
|
839
911
|
computeIsMaxFixedColumn,
|
|
840
912
|
computeIsAllCheckboxDisabled,
|
|
913
|
+
computeIsHeaderRenderOptimize,
|
|
914
|
+
computeIsBodyRenderOptimize,
|
|
915
|
+
computeIsFooterRenderOptimize,
|
|
841
916
|
computeVirtualScrollBars,
|
|
842
917
|
computeRowGroupFields,
|
|
843
918
|
computeRowGroupColumns,
|
|
@@ -2338,8 +2413,8 @@ export default defineVxeComponent({
|
|
|
2338
2413
|
updateAfterDataIndex();
|
|
2339
2414
|
};
|
|
2340
2415
|
const updateStyle = () => {
|
|
2341
|
-
const {
|
|
2342
|
-
const { isGroup, currentRow, tableColumn,
|
|
2416
|
+
const { mouseConfig } = props;
|
|
2417
|
+
const { isGroup, currentRow, tableColumn, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isColLoading } = reactData;
|
|
2343
2418
|
const { visibleColumn, tableHeight, elemStore, customHeight, customMinHeight, customMaxHeight, tHeaderHeight, tFooterHeight } = internalData;
|
|
2344
2419
|
const $xeGanttView = internalData.xeGanttView;
|
|
2345
2420
|
const el = refElem.value;
|
|
@@ -2347,12 +2422,15 @@ export default defineVxeComponent({
|
|
|
2347
2422
|
return;
|
|
2348
2423
|
}
|
|
2349
2424
|
const containerList = ['main', 'left', 'right'];
|
|
2425
|
+
const { leftList, rightList } = columnStore;
|
|
2350
2426
|
let osbWidth = overflowY ? scrollbarWidth : 0;
|
|
2351
2427
|
let osbHeight = overflowX ? scrollbarHeight : 0;
|
|
2352
2428
|
const emptyPlaceholderElem = refEmptyPlaceholder.value;
|
|
2429
|
+
const isHeaderRenderOptimize = computeIsHeaderRenderOptimize.value;
|
|
2430
|
+
const isBodyRenderOptimize = computeIsBodyRenderOptimize.value;
|
|
2431
|
+
const isFooterRenderOptimize = computeIsFooterRenderOptimize.value;
|
|
2353
2432
|
const scrollbarOpts = computeScrollbarOpts.value;
|
|
2354
2433
|
const mouseOpts = computeMouseOpts.value;
|
|
2355
|
-
const expandOpts = computeExpandOpts.value;
|
|
2356
2434
|
const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper']);
|
|
2357
2435
|
const bodyTableElem = getRefElem(elemStore['main-body-table']);
|
|
2358
2436
|
if (emptyPlaceholderElem) {
|
|
@@ -2470,7 +2548,7 @@ export default defineVxeComponent({
|
|
|
2470
2548
|
let fixedColumn = [];
|
|
2471
2549
|
let fixedWrapperElem;
|
|
2472
2550
|
if (fixedType) {
|
|
2473
|
-
fixedColumn = isFixedLeft ?
|
|
2551
|
+
fixedColumn = isFixedLeft ? leftList : rightList;
|
|
2474
2552
|
fixedWrapperElem = isFixedLeft ? refLeftContainer.value : refRightContainer.value;
|
|
2475
2553
|
}
|
|
2476
2554
|
layoutList.forEach(layout => {
|
|
@@ -2481,20 +2559,11 @@ export default defineVxeComponent({
|
|
|
2481
2559
|
// 表头体样式处理
|
|
2482
2560
|
// 横向滚动渲染
|
|
2483
2561
|
let renderColumnList = tableColumn;
|
|
2484
|
-
|
|
2562
|
+
const isOptimizeMode = isHeaderRenderOptimize;
|
|
2485
2563
|
if (isGroup) {
|
|
2486
2564
|
renderColumnList = visibleColumn;
|
|
2487
2565
|
}
|
|
2488
2566
|
else {
|
|
2489
|
-
// 如果是使用优化模式
|
|
2490
|
-
if (scrollXLoad && allColumnHeaderOverflow) {
|
|
2491
|
-
if (spanMethod || footerSpanMethod) {
|
|
2492
|
-
// 如果不支持优化模式
|
|
2493
|
-
}
|
|
2494
|
-
else {
|
|
2495
|
-
isOptimizeMode = true;
|
|
2496
|
-
}
|
|
2497
|
-
}
|
|
2498
2567
|
if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
|
|
2499
2568
|
renderColumnList = visibleColumn;
|
|
2500
2569
|
}
|
|
@@ -2547,16 +2616,7 @@ export default defineVxeComponent({
|
|
|
2547
2616
|
fixedWrapperElem.style.width = `${fixedColumn.reduce((previous, column) => previous + column.renderWidth, 0)}px`;
|
|
2548
2617
|
}
|
|
2549
2618
|
let renderColumnList = tableColumn;
|
|
2550
|
-
|
|
2551
|
-
// 如果是使用优化模式
|
|
2552
|
-
if (scrollXLoad || scrollYLoad || isAllOverflow) {
|
|
2553
|
-
if ((expandColumn && expandOpts.mode !== 'fixed') || spanMethod || footerSpanMethod) {
|
|
2554
|
-
// 如果不支持优化模式
|
|
2555
|
-
}
|
|
2556
|
-
else {
|
|
2557
|
-
isOptimizeMode = true;
|
|
2558
|
-
}
|
|
2559
|
-
}
|
|
2619
|
+
const isOptimizeMode = isBodyRenderOptimize;
|
|
2560
2620
|
if (fixedType) {
|
|
2561
2621
|
renderColumnList = visibleColumn;
|
|
2562
2622
|
if (isOptimizeMode) {
|
|
@@ -2588,16 +2648,7 @@ export default defineVxeComponent({
|
|
|
2588
2648
|
}
|
|
2589
2649
|
else if (layout === 'footer') {
|
|
2590
2650
|
let renderColumnList = tableColumn;
|
|
2591
|
-
|
|
2592
|
-
// 如果是使用优化模式
|
|
2593
|
-
if (scrollXLoad && allColumnFooterOverflow) {
|
|
2594
|
-
if (spanMethod || footerSpanMethod) {
|
|
2595
|
-
// 如果不支持优化模式
|
|
2596
|
-
}
|
|
2597
|
-
else {
|
|
2598
|
-
isOptimizeMode = true;
|
|
2599
|
-
}
|
|
2600
|
-
}
|
|
2651
|
+
const isOptimizeMode = isFooterRenderOptimize;
|
|
2601
2652
|
if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
|
|
2602
2653
|
renderColumnList = visibleColumn;
|
|
2603
2654
|
}
|
|
@@ -4014,6 +4065,7 @@ export default defineVxeComponent({
|
|
|
4014
4065
|
* @returns
|
|
4015
4066
|
*/
|
|
4016
4067
|
const handleVirtualTreeExpand = (rows, expanded) => {
|
|
4068
|
+
const { lastScrollLeft, lastScrollTop } = internalData;
|
|
4017
4069
|
return handleBaseTreeExpand(rows, expanded).then(() => {
|
|
4018
4070
|
handleVirtualTreeToList();
|
|
4019
4071
|
$xeTable.handleTableData();
|
|
@@ -4021,9 +4073,9 @@ export default defineVxeComponent({
|
|
|
4021
4073
|
updateAfterDataIndex();
|
|
4022
4074
|
return nextTick();
|
|
4023
4075
|
}).then(() => {
|
|
4024
|
-
|
|
4025
|
-
return handleLazyRecalculate(true, true, true);
|
|
4076
|
+
return handleRecalculateStyle(true, true, true);
|
|
4026
4077
|
}).then(() => {
|
|
4078
|
+
restoreScrollLocation($xeTable, lastScrollLeft, lastScrollTop);
|
|
4027
4079
|
updateTreeLineStyle();
|
|
4028
4080
|
setTimeout(() => {
|
|
4029
4081
|
$xeTable.updateCellAreas();
|
|
@@ -11698,7 +11750,7 @@ export default defineVxeComponent({
|
|
|
11698
11750
|
},
|
|
11699
11751
|
// 更新纵向 Y 可视渲染上下剩余空间大小
|
|
11700
11752
|
updateScrollYSpace() {
|
|
11701
|
-
const { isAllOverflow, overflowY, scrollYLoad, expandColumn } = reactData;
|
|
11753
|
+
const { isAllOverflow, overflowY, scrollYLoad, scrollYHeight, expandColumn } = reactData;
|
|
11702
11754
|
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
11703
11755
|
const $xeGanttView = internalData.xeGanttView;
|
|
11704
11756
|
const { startIndex } = scrollYStore;
|
|
@@ -11713,13 +11765,13 @@ export default defineVxeComponent({
|
|
|
11713
11765
|
const rightbodyTableElem = getRefElem(elemStore['right-body-table']);
|
|
11714
11766
|
const containerList = ['main', 'left', 'right'];
|
|
11715
11767
|
let ySpaceTop = 0;
|
|
11716
|
-
let
|
|
11768
|
+
let sYHeight = scrollYHeight;
|
|
11717
11769
|
let isScrollYBig = false;
|
|
11718
11770
|
if (scrollYLoad) {
|
|
11719
11771
|
const isCustomCellHeight = isResizeCellHeight || cellOpts.height || rowOpts.height;
|
|
11720
11772
|
if (!isCustomCellHeight && !expandColumn && isAllOverflow) {
|
|
11721
|
-
|
|
11722
|
-
if (
|
|
11773
|
+
sYHeight = afterFullData.length * defaultRowHeight;
|
|
11774
|
+
if (sYHeight > maxYHeight) {
|
|
11723
11775
|
isScrollYBig = true;
|
|
11724
11776
|
}
|
|
11725
11777
|
ySpaceTop = Math.max(0, startIndex * defaultRowHeight);
|
|
@@ -11732,19 +11784,22 @@ export default defineVxeComponent({
|
|
|
11732
11784
|
const lastRow = afterFullData[afterFullData.length - 1];
|
|
11733
11785
|
rowid = getRowid($xeTable, lastRow);
|
|
11734
11786
|
rowRest = fullAllDataRowIdData[rowid] || {};
|
|
11735
|
-
|
|
11736
|
-
|
|
11737
|
-
|
|
11738
|
-
|
|
11787
|
+
// 如果为空时还没计算完数据,保持原高度不变
|
|
11788
|
+
if (rowRest.oTop) {
|
|
11789
|
+
sYHeight = (rowRest.oTop || 0) + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight);
|
|
11790
|
+
// 是否展开行
|
|
11791
|
+
if (expandColumn && rowExpandedMaps[rowid]) {
|
|
11792
|
+
sYHeight += rowRest.expandHeight || expandOpts.height || 0;
|
|
11793
|
+
}
|
|
11739
11794
|
}
|
|
11740
|
-
if (
|
|
11795
|
+
if (sYHeight > maxYHeight) {
|
|
11741
11796
|
isScrollYBig = true;
|
|
11742
11797
|
}
|
|
11743
11798
|
}
|
|
11744
11799
|
}
|
|
11745
11800
|
else {
|
|
11746
11801
|
if (bodyTableElem) {
|
|
11747
|
-
|
|
11802
|
+
sYHeight = bodyTableElem.clientHeight;
|
|
11748
11803
|
}
|
|
11749
11804
|
}
|
|
11750
11805
|
let clientHeight = 0;
|
|
@@ -11752,7 +11807,7 @@ export default defineVxeComponent({
|
|
|
11752
11807
|
clientHeight = bodyScrollElem.clientHeight;
|
|
11753
11808
|
}
|
|
11754
11809
|
// 虚拟渲染
|
|
11755
|
-
let ySpaceHeight =
|
|
11810
|
+
let ySpaceHeight = sYHeight;
|
|
11756
11811
|
let scrollYTop = ySpaceTop;
|
|
11757
11812
|
if (isScrollYBig) {
|
|
11758
11813
|
// 触底
|
|
@@ -11794,7 +11849,7 @@ export default defineVxeComponent({
|
|
|
11794
11849
|
rowExpandYSpaceEl.style.height = ySpaceHeight ? `${ySpaceHeight}px` : '';
|
|
11795
11850
|
}
|
|
11796
11851
|
reactData.scrollYTop = scrollYTop;
|
|
11797
|
-
reactData.scrollYHeight =
|
|
11852
|
+
reactData.scrollYHeight = ySpaceHeight;
|
|
11798
11853
|
reactData.isScrollYBig = isScrollYBig;
|
|
11799
11854
|
calcScrollbar();
|
|
11800
11855
|
if (isScrollYBig && mouseOpts.area) {
|
|
@@ -12945,12 +13000,12 @@ export default defineVxeComponent({
|
|
|
12945
13000
|
if (props.resizable) {
|
|
12946
13001
|
warnLog('vxe.error.delProp', ['resizable', 'column-config.resizable']);
|
|
12947
13002
|
}
|
|
12948
|
-
if (props.virtualXConfig && props.scrollX) {
|
|
12949
|
-
|
|
12950
|
-
}
|
|
12951
|
-
if (props.virtualYConfig && props.scrollY) {
|
|
12952
|
-
|
|
12953
|
-
}
|
|
13003
|
+
// if (props.virtualXConfig && props.scrollX) {
|
|
13004
|
+
// warnLog('vxe.error.notSupportProp', ['virtual-x-config', 'scroll-x', 'scroll-x=null'])
|
|
13005
|
+
// }
|
|
13006
|
+
// if (props.virtualYConfig && props.scrollY) {
|
|
13007
|
+
// warnLog('vxe.error.notSupportProp', ['virtual-y-config', 'scroll-y', 'scroll-y=null'])
|
|
13008
|
+
// }
|
|
12954
13009
|
if (props.aggregateConfig && props.rowGroupConfig) {
|
|
12955
13010
|
warnLog('vxe.error.notSupportProp', ['aggregate-config', 'row-group-config', 'row-group-config=null']);
|
|
12956
13011
|
}
|
package/es/ui/index.js
CHANGED
package/es/ui/src/log.js
CHANGED