vxe-table 4.17.6 → 4.17.8
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 +122 -58
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/lib/index.umd.js +56 -75
- 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 +30 -19
- 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 +122 -57
- /package/es/{iconfont.1761877377602.ttf → iconfont.1762324094489.ttf} +0 -0
- /package/es/{iconfont.1761877377602.woff → iconfont.1762324094489.woff} +0 -0
- /package/es/{iconfont.1761877377602.woff2 → iconfont.1762324094489.woff2} +0 -0
- /package/lib/{iconfont.1761877377602.ttf → iconfont.1762324094489.ttf} +0 -0
- /package/lib/{iconfont.1761877377602.woff → iconfont.1762324094489.woff} +0 -0
- /package/lib/{iconfont.1761877377602.woff2 → iconfont.1762324094489.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,
|
|
@@ -1942,19 +2017,28 @@ export default defineVxeComponent({
|
|
|
1942
2017
|
* 计算自适应行高
|
|
1943
2018
|
*/
|
|
1944
2019
|
const calcCellAutoHeight = (rowRest, wrapperEl) => {
|
|
1945
|
-
const
|
|
2020
|
+
const { scrollXLoad } = reactData;
|
|
2021
|
+
const wrapperElemList = wrapperEl.querySelectorAll(`.vxe-cell--wrapper[rowid="${rowRest.rowid}"]`);
|
|
1946
2022
|
let colHeight = rowRest.height;
|
|
1947
2023
|
let firstCellStyle = null;
|
|
1948
2024
|
let topBottomPadding = 0;
|
|
1949
|
-
for (let i = 0; i <
|
|
1950
|
-
const wrapperElem =
|
|
2025
|
+
for (let i = 0; i < wrapperElemList.length; i++) {
|
|
2026
|
+
const wrapperElem = wrapperElemList[i];
|
|
1951
2027
|
const cellElem = wrapperElem.parentElement;
|
|
1952
2028
|
if (!firstCellStyle) {
|
|
2029
|
+
const cellStyle = cellElem.style;
|
|
2030
|
+
const orHeight = cellStyle.height;
|
|
2031
|
+
if (!scrollXLoad) {
|
|
2032
|
+
cellStyle.height = '';
|
|
2033
|
+
}
|
|
1953
2034
|
firstCellStyle = getComputedStyle(cellElem);
|
|
1954
2035
|
topBottomPadding = firstCellStyle ? Math.ceil(XEUtils.toNumber(firstCellStyle.paddingTop) + XEUtils.toNumber(firstCellStyle.paddingBottom)) : 0;
|
|
2036
|
+
if (!scrollXLoad) {
|
|
2037
|
+
cellStyle.height = orHeight;
|
|
2038
|
+
}
|
|
1955
2039
|
}
|
|
1956
2040
|
const cellHeight = wrapperElem ? wrapperElem.clientHeight : 0;
|
|
1957
|
-
colHeight = Math.max(colHeight, Math.ceil(cellHeight + topBottomPadding));
|
|
2041
|
+
colHeight = scrollXLoad ? Math.max(colHeight, Math.ceil(cellHeight + topBottomPadding)) : Math.ceil(cellHeight + topBottomPadding);
|
|
1958
2042
|
}
|
|
1959
2043
|
return colHeight;
|
|
1960
2044
|
};
|
|
@@ -2338,8 +2422,8 @@ export default defineVxeComponent({
|
|
|
2338
2422
|
updateAfterDataIndex();
|
|
2339
2423
|
};
|
|
2340
2424
|
const updateStyle = () => {
|
|
2341
|
-
const {
|
|
2342
|
-
const { isGroup, currentRow, tableColumn,
|
|
2425
|
+
const { mouseConfig } = props;
|
|
2426
|
+
const { isGroup, currentRow, tableColumn, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isColLoading } = reactData;
|
|
2343
2427
|
const { visibleColumn, tableHeight, elemStore, customHeight, customMinHeight, customMaxHeight, tHeaderHeight, tFooterHeight } = internalData;
|
|
2344
2428
|
const $xeGanttView = internalData.xeGanttView;
|
|
2345
2429
|
const el = refElem.value;
|
|
@@ -2347,12 +2431,15 @@ export default defineVxeComponent({
|
|
|
2347
2431
|
return;
|
|
2348
2432
|
}
|
|
2349
2433
|
const containerList = ['main', 'left', 'right'];
|
|
2434
|
+
const { leftList, rightList } = columnStore;
|
|
2350
2435
|
let osbWidth = overflowY ? scrollbarWidth : 0;
|
|
2351
2436
|
let osbHeight = overflowX ? scrollbarHeight : 0;
|
|
2352
2437
|
const emptyPlaceholderElem = refEmptyPlaceholder.value;
|
|
2438
|
+
const isHeaderRenderOptimize = computeIsHeaderRenderOptimize.value;
|
|
2439
|
+
const isBodyRenderOptimize = computeIsBodyRenderOptimize.value;
|
|
2440
|
+
const isFooterRenderOptimize = computeIsFooterRenderOptimize.value;
|
|
2353
2441
|
const scrollbarOpts = computeScrollbarOpts.value;
|
|
2354
2442
|
const mouseOpts = computeMouseOpts.value;
|
|
2355
|
-
const expandOpts = computeExpandOpts.value;
|
|
2356
2443
|
const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper']);
|
|
2357
2444
|
const bodyTableElem = getRefElem(elemStore['main-body-table']);
|
|
2358
2445
|
if (emptyPlaceholderElem) {
|
|
@@ -2470,7 +2557,7 @@ export default defineVxeComponent({
|
|
|
2470
2557
|
let fixedColumn = [];
|
|
2471
2558
|
let fixedWrapperElem;
|
|
2472
2559
|
if (fixedType) {
|
|
2473
|
-
fixedColumn = isFixedLeft ?
|
|
2560
|
+
fixedColumn = isFixedLeft ? leftList : rightList;
|
|
2474
2561
|
fixedWrapperElem = isFixedLeft ? refLeftContainer.value : refRightContainer.value;
|
|
2475
2562
|
}
|
|
2476
2563
|
layoutList.forEach(layout => {
|
|
@@ -2481,20 +2568,11 @@ export default defineVxeComponent({
|
|
|
2481
2568
|
// 表头体样式处理
|
|
2482
2569
|
// 横向滚动渲染
|
|
2483
2570
|
let renderColumnList = tableColumn;
|
|
2484
|
-
|
|
2571
|
+
const isOptimizeMode = isHeaderRenderOptimize;
|
|
2485
2572
|
if (isGroup) {
|
|
2486
2573
|
renderColumnList = visibleColumn;
|
|
2487
2574
|
}
|
|
2488
2575
|
else {
|
|
2489
|
-
// 如果是使用优化模式
|
|
2490
|
-
if (scrollXLoad && allColumnHeaderOverflow) {
|
|
2491
|
-
if (spanMethod || footerSpanMethod) {
|
|
2492
|
-
// 如果不支持优化模式
|
|
2493
|
-
}
|
|
2494
|
-
else {
|
|
2495
|
-
isOptimizeMode = true;
|
|
2496
|
-
}
|
|
2497
|
-
}
|
|
2498
2576
|
if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
|
|
2499
2577
|
renderColumnList = visibleColumn;
|
|
2500
2578
|
}
|
|
@@ -2547,16 +2625,7 @@ export default defineVxeComponent({
|
|
|
2547
2625
|
fixedWrapperElem.style.width = `${fixedColumn.reduce((previous, column) => previous + column.renderWidth, 0)}px`;
|
|
2548
2626
|
}
|
|
2549
2627
|
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
|
-
}
|
|
2628
|
+
const isOptimizeMode = isBodyRenderOptimize;
|
|
2560
2629
|
if (fixedType) {
|
|
2561
2630
|
renderColumnList = visibleColumn;
|
|
2562
2631
|
if (isOptimizeMode) {
|
|
@@ -2588,16 +2657,7 @@ export default defineVxeComponent({
|
|
|
2588
2657
|
}
|
|
2589
2658
|
else if (layout === 'footer') {
|
|
2590
2659
|
let renderColumnList = tableColumn;
|
|
2591
|
-
|
|
2592
|
-
// 如果是使用优化模式
|
|
2593
|
-
if (scrollXLoad && allColumnFooterOverflow) {
|
|
2594
|
-
if (spanMethod || footerSpanMethod) {
|
|
2595
|
-
// 如果不支持优化模式
|
|
2596
|
-
}
|
|
2597
|
-
else {
|
|
2598
|
-
isOptimizeMode = true;
|
|
2599
|
-
}
|
|
2600
|
-
}
|
|
2660
|
+
const isOptimizeMode = isFooterRenderOptimize;
|
|
2601
2661
|
if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
|
|
2602
2662
|
renderColumnList = visibleColumn;
|
|
2603
2663
|
}
|
|
@@ -4014,6 +4074,7 @@ export default defineVxeComponent({
|
|
|
4014
4074
|
* @returns
|
|
4015
4075
|
*/
|
|
4016
4076
|
const handleVirtualTreeExpand = (rows, expanded) => {
|
|
4077
|
+
const { lastScrollLeft, lastScrollTop } = internalData;
|
|
4017
4078
|
return handleBaseTreeExpand(rows, expanded).then(() => {
|
|
4018
4079
|
handleVirtualTreeToList();
|
|
4019
4080
|
$xeTable.handleTableData();
|
|
@@ -4021,9 +4082,9 @@ export default defineVxeComponent({
|
|
|
4021
4082
|
updateAfterDataIndex();
|
|
4022
4083
|
return nextTick();
|
|
4023
4084
|
}).then(() => {
|
|
4024
|
-
|
|
4025
|
-
return handleLazyRecalculate(true, true, true);
|
|
4085
|
+
return handleRecalculateStyle(true, true, true);
|
|
4026
4086
|
}).then(() => {
|
|
4087
|
+
restoreScrollLocation($xeTable, lastScrollLeft, lastScrollTop);
|
|
4027
4088
|
updateTreeLineStyle();
|
|
4028
4089
|
setTimeout(() => {
|
|
4029
4090
|
$xeTable.updateCellAreas();
|
|
@@ -11698,7 +11759,7 @@ export default defineVxeComponent({
|
|
|
11698
11759
|
},
|
|
11699
11760
|
// 更新纵向 Y 可视渲染上下剩余空间大小
|
|
11700
11761
|
updateScrollYSpace() {
|
|
11701
|
-
const { isAllOverflow, overflowY, scrollYLoad, expandColumn } = reactData;
|
|
11762
|
+
const { isAllOverflow, overflowY, scrollYLoad, scrollYHeight, expandColumn } = reactData;
|
|
11702
11763
|
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
11703
11764
|
const $xeGanttView = internalData.xeGanttView;
|
|
11704
11765
|
const { startIndex } = scrollYStore;
|
|
@@ -11713,13 +11774,13 @@ export default defineVxeComponent({
|
|
|
11713
11774
|
const rightbodyTableElem = getRefElem(elemStore['right-body-table']);
|
|
11714
11775
|
const containerList = ['main', 'left', 'right'];
|
|
11715
11776
|
let ySpaceTop = 0;
|
|
11716
|
-
let
|
|
11777
|
+
let sYHeight = scrollYHeight;
|
|
11717
11778
|
let isScrollYBig = false;
|
|
11718
11779
|
if (scrollYLoad) {
|
|
11719
11780
|
const isCustomCellHeight = isResizeCellHeight || cellOpts.height || rowOpts.height;
|
|
11720
11781
|
if (!isCustomCellHeight && !expandColumn && isAllOverflow) {
|
|
11721
|
-
|
|
11722
|
-
if (
|
|
11782
|
+
sYHeight = afterFullData.length * defaultRowHeight;
|
|
11783
|
+
if (sYHeight > maxYHeight) {
|
|
11723
11784
|
isScrollYBig = true;
|
|
11724
11785
|
}
|
|
11725
11786
|
ySpaceTop = Math.max(0, startIndex * defaultRowHeight);
|
|
@@ -11732,19 +11793,22 @@ export default defineVxeComponent({
|
|
|
11732
11793
|
const lastRow = afterFullData[afterFullData.length - 1];
|
|
11733
11794
|
rowid = getRowid($xeTable, lastRow);
|
|
11734
11795
|
rowRest = fullAllDataRowIdData[rowid] || {};
|
|
11735
|
-
|
|
11736
|
-
|
|
11737
|
-
|
|
11738
|
-
|
|
11796
|
+
// 如果为空时还没计算完数据,保持原高度不变
|
|
11797
|
+
if (rowRest.oTop) {
|
|
11798
|
+
sYHeight = (rowRest.oTop || 0) + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight);
|
|
11799
|
+
// 是否展开行
|
|
11800
|
+
if (expandColumn && rowExpandedMaps[rowid]) {
|
|
11801
|
+
sYHeight += rowRest.expandHeight || expandOpts.height || 0;
|
|
11802
|
+
}
|
|
11739
11803
|
}
|
|
11740
|
-
if (
|
|
11804
|
+
if (sYHeight > maxYHeight) {
|
|
11741
11805
|
isScrollYBig = true;
|
|
11742
11806
|
}
|
|
11743
11807
|
}
|
|
11744
11808
|
}
|
|
11745
11809
|
else {
|
|
11746
11810
|
if (bodyTableElem) {
|
|
11747
|
-
|
|
11811
|
+
sYHeight = bodyTableElem.clientHeight;
|
|
11748
11812
|
}
|
|
11749
11813
|
}
|
|
11750
11814
|
let clientHeight = 0;
|
|
@@ -11752,7 +11816,7 @@ export default defineVxeComponent({
|
|
|
11752
11816
|
clientHeight = bodyScrollElem.clientHeight;
|
|
11753
11817
|
}
|
|
11754
11818
|
// 虚拟渲染
|
|
11755
|
-
let ySpaceHeight =
|
|
11819
|
+
let ySpaceHeight = sYHeight;
|
|
11756
11820
|
let scrollYTop = ySpaceTop;
|
|
11757
11821
|
if (isScrollYBig) {
|
|
11758
11822
|
// 触底
|
|
@@ -11794,7 +11858,7 @@ export default defineVxeComponent({
|
|
|
11794
11858
|
rowExpandYSpaceEl.style.height = ySpaceHeight ? `${ySpaceHeight}px` : '';
|
|
11795
11859
|
}
|
|
11796
11860
|
reactData.scrollYTop = scrollYTop;
|
|
11797
|
-
reactData.scrollYHeight =
|
|
11861
|
+
reactData.scrollYHeight = ySpaceHeight;
|
|
11798
11862
|
reactData.isScrollYBig = isScrollYBig;
|
|
11799
11863
|
calcScrollbar();
|
|
11800
11864
|
if (isScrollYBig && mouseOpts.area) {
|
|
@@ -12945,12 +13009,12 @@ export default defineVxeComponent({
|
|
|
12945
13009
|
if (props.resizable) {
|
|
12946
13010
|
warnLog('vxe.error.delProp', ['resizable', 'column-config.resizable']);
|
|
12947
13011
|
}
|
|
12948
|
-
if (props.virtualXConfig && props.scrollX) {
|
|
12949
|
-
|
|
12950
|
-
}
|
|
12951
|
-
if (props.virtualYConfig && props.scrollY) {
|
|
12952
|
-
|
|
12953
|
-
}
|
|
13012
|
+
// if (props.virtualXConfig && props.scrollX) {
|
|
13013
|
+
// warnLog('vxe.error.notSupportProp', ['virtual-x-config', 'scroll-x', 'scroll-x=null'])
|
|
13014
|
+
// }
|
|
13015
|
+
// if (props.virtualYConfig && props.scrollY) {
|
|
13016
|
+
// warnLog('vxe.error.notSupportProp', ['virtual-y-config', 'scroll-y', 'scroll-y=null'])
|
|
13017
|
+
// }
|
|
12954
13018
|
if (props.aggregateConfig && props.rowGroupConfig) {
|
|
12955
13019
|
warnLog('vxe.error.notSupportProp', ['aggregate-config', 'row-group-config', 'row-group-config=null']);
|
|
12956
13020
|
}
|
package/es/ui/index.js
CHANGED
package/es/ui/src/log.js
CHANGED