vxe-table 3.21.15 → 3.21.16

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.
Files changed (33) hide show
  1. package/es/style.css +1 -1
  2. package/es/table/module/export/mixin.js +22 -3
  3. package/es/table/src/header.js +6 -3
  4. package/es/table/src/methods.js +32 -4
  5. package/es/table/src/table.js +25 -3
  6. package/es/ui/index.js +1 -1
  7. package/es/ui/src/log.js +1 -1
  8. package/lib/index.umd.js +66 -11
  9. package/lib/index.umd.min.js +1 -1
  10. package/lib/style.css +1 -1
  11. package/lib/table/module/export/mixin.js +26 -3
  12. package/lib/table/module/export/mixin.min.js +1 -1
  13. package/lib/table/src/header.js +7 -3
  14. package/lib/table/src/header.min.js +1 -1
  15. package/lib/table/src/methods.js +6 -1
  16. package/lib/table/src/methods.min.js +1 -1
  17. package/lib/table/src/table.js +25 -2
  18. package/lib/table/src/table.min.js +1 -1
  19. package/lib/ui/index.js +1 -1
  20. package/lib/ui/index.min.js +1 -1
  21. package/lib/ui/src/log.js +1 -1
  22. package/lib/ui/src/log.min.js +1 -1
  23. package/package.json +2 -2
  24. package/packages/table/module/export/mixin.ts +22 -3
  25. package/packages/table/src/header.ts +6 -3
  26. package/packages/table/src/methods.ts +29 -4
  27. package/packages/table/src/table.ts +31 -3
  28. /package/es/{iconfont.1781675364289.ttf → iconfont.1781753790081.ttf} +0 -0
  29. /package/es/{iconfont.1781675364289.woff → iconfont.1781753790081.woff} +0 -0
  30. /package/es/{iconfont.1781675364289.woff2 → iconfont.1781753790081.woff2} +0 -0
  31. /package/lib/{iconfont.1781675364289.ttf → iconfont.1781753790081.ttf} +0 -0
  32. /package/lib/{iconfont.1781675364289.woff → iconfont.1781753790081.woff} +0 -0
  33. /package/lib/{iconfont.1781675364289.woff2 → iconfont.1781753790081.woff2} +0 -0
@@ -478,7 +478,7 @@ function toHtml($xeTable, opts, columns, datas) {
478
478
  const internalData = $xeTable;
479
479
  const { id, border, treeConfig, headerAlign: allHeaderAlign, align: allAlign, footerAlign: allFooterAlign, showOverflow: allColumnOverflow, showHeaderOverflow: allColumnHeaderOverflow } = props;
480
480
  const { isAllSelected, isIndeterminate } = reactData;
481
- const { mergeBodyCellMaps } = internalData;
481
+ const { mergeBodyCellMaps, mergeFooterCellMaps } = internalData;
482
482
  const treeOpts = $xeTable.computeTreeOpts;
483
483
  const { print: isPrint, isHeader, isFooter, isColgroup, isMerge, colgroups, original } = opts;
484
484
  const allCls = 'check-all';
@@ -616,15 +616,34 @@ function toHtml($xeTable, opts, columns, datas) {
616
616
  const footers = getFooterData($xeTable, opts, footerTableData);
617
617
  if (footers.length) {
618
618
  tables.push('<tfoot>');
619
- footers.forEach((row) => {
619
+ footers.forEach((row, rIndex) => {
620
620
  tables.push(`<tr>${columns.map(column => {
621
621
  const footAlign = column.footerAlign || column.align || allFooterAlign || allAlign;
622
622
  const classNames = hasEllipsis($xeTable, column, 'showOverflow', allColumnOverflow) ? ['col--ellipsis'] : [];
623
623
  const cellValue = getFooterCellValue($xeTable, opts, row, column);
624
+ let rowSpan = 1;
625
+ let colSpan = 1;
626
+ if (isMerge) {
627
+ const _rowIndex = rIndex;
628
+ const _columnIndex = $xeTable.getVTColumnIndex(column);
629
+ const spanRest = mergeFooterCellMaps[`${_rowIndex}:${_columnIndex}`];
630
+ if (spanRest) {
631
+ const { rowspan, colspan } = spanRest;
632
+ if (!rowspan || !colspan) {
633
+ return '';
634
+ }
635
+ if (rowspan > 1) {
636
+ rowSpan = rowspan;
637
+ }
638
+ if (colspan > 1) {
639
+ colSpan = colspan;
640
+ }
641
+ }
642
+ }
624
643
  if (footAlign) {
625
644
  classNames.push(`col--${footAlign}`);
626
645
  }
627
- return `<td class="${classNames.join(' ')}" title="${cellValue}"><div ${isPrint ? '' : `style="width: ${column.renderWidth}px"`}>${formatText(cellValue, true)}</div></td>`;
646
+ return `<td class="${classNames.join(' ')}" rowspan="${rowSpan}" colspan="${colSpan}" title="${cellValue}"><div ${isPrint ? '' : `style="width: ${column.renderWidth}px"`}>${formatText(cellValue, true)}</div></td>`;
628
647
  }).join('')}</tr>`);
629
648
  });
630
649
  tables.push('</tfoot>');
@@ -215,6 +215,8 @@ function renderFilterRows(h, _vm, isOptimizeMode, cols) {
215
215
  const cellOpts = $xeTable.computeCellOpts;
216
216
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
217
217
  const headerCellOpts = $xeTable.computeHeaderCellOpts;
218
+ const floatingFilterOpts = $xeTable.computeFloatingFilterOpts;
219
+ const { cellClassName } = floatingFilterOpts;
218
220
  const currCellHeight = getCalcHeight(headerCellOpts.height) || defaultRowHeight;
219
221
  return cols.map((column, $columnIndex) => {
220
222
  const { type, showHeaderOverflow, headerAlign, align, filters, editRender, cellRender, floatingFilters, filterRender, slots } = column;
@@ -269,7 +271,7 @@ function renderFilterRows(h, _vm, isOptimizeMode, cols) {
269
271
  tcStyle.minHeight = `${currCellHeight}px`;
270
272
  }
271
273
  return h('th', {
272
- class: ['vxe-table--column vxe-header--column', colid, fixedHiddenColumn ? 'fixed--hidden' : 'fixed--visible', {
274
+ class: ['vxe-table--column vxe-header--column is--floating-filters', colid, fixedHiddenColumn ? 'fixed--hidden' : 'fixed--visible', {
273
275
  [`col--${headAlign}`]: headAlign,
274
276
  [`col--${type}`]: type,
275
277
  'col--last': isLastColumn,
@@ -285,7 +287,7 @@ function renderFilterRows(h, _vm, isOptimizeMode, cols) {
285
287
  attrs: thAttrs
286
288
  }, [
287
289
  h('div', {
288
- class: ['vxe-cell', {
290
+ class: ['vxe-cell', '' + (cellClassName || ''), {
289
291
  'c--title': showTitle,
290
292
  'c--tooltip': showTooltip,
291
293
  'c--ellipsis': showEllipsis
@@ -330,7 +332,8 @@ function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups, renderColumn
330
332
  rowVNs.push(h('tr', {
331
333
  key: 'ff',
332
334
  class: [
333
- 'vxe-header--row'
335
+ 'vxe-header--row is--floating-filters',
336
+ '' + (floatingFilterOpts.rowClassName || '')
334
337
  ]
335
338
  }, renderFilterRows(h, _vm, isOptimizeMode, renderColumnList)));
336
339
  }
@@ -2862,11 +2862,39 @@ function handleTooltip($xeTable, evnt, tipOpts, type, tdEl, overflowElem, tipEle
2862
2862
  const { tooltipStore } = reactData;
2863
2863
  const { column, row } = params;
2864
2864
  const { showAll, contentMethod } = tipOpts;
2865
- const customContent = contentMethod ? contentMethod(params) : null;
2866
- const useCustom = contentMethod && !XEUtils.eqNull(customContent);
2867
- const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? tipOverEl.innerText : tipOverEl.textContent).trim();
2865
+ const cellText = XEUtils.toString(column.type === 'html' ? tipOverEl.innerText : tipOverEl.textContent).trim();
2868
2866
  const isOver = tipOverEl.scrollWidth > tipOverEl.clientWidth;
2869
- if (content && (showAll || useCustom || isOver)) {
2867
+ let isShow = false;
2868
+ let customContent = null;
2869
+ let content = '';
2870
+ if (contentMethod) {
2871
+ customContent = contentMethod(params);
2872
+ }
2873
+ // 是否全部展示
2874
+ if (showAll) {
2875
+ // 如果为 null 默认显示
2876
+ if (XEUtils.eqNull(customContent)) {
2877
+ isShow = true;
2878
+ content = cellText;
2879
+ }
2880
+ else if (customContent !== '' && customContent !== false) {
2881
+ // 如果为 '' | false 则不显示
2882
+ isShow = true;
2883
+ content = '' + customContent;
2884
+ }
2885
+ }
2886
+ else {
2887
+ // 如果为 null 使用默认逻辑
2888
+ if (XEUtils.eqNull(customContent)) {
2889
+ isShow = isOver;
2890
+ }
2891
+ else if (customContent !== '' && customContent !== false) {
2892
+ // 如果为 '' | false 则不显示
2893
+ isShow = true;
2894
+ }
2895
+ content = cellText;
2896
+ }
2897
+ if (isShow && content) {
2870
2898
  const tipContent = formatText(content);
2871
2899
  Object.assign(tooltipStore, {
2872
2900
  row,
@@ -529,6 +529,9 @@ export default {
529
529
  };
530
530
  },
531
531
  inject: {
532
+ $xeModal: {
533
+ default: null
534
+ },
532
535
  $xeTabs: {
533
536
  default: null
534
537
  },
@@ -548,7 +551,7 @@ export default {
548
551
  const reactData = createReactData();
549
552
  return Object.assign(Object.assign({ xID }, reactData), {
550
553
  // 私有属性
551
- reScrollFlag: 0, reLayoutFlag: 0, footFlag: 0, kfFlag: 0, mergeFooteCellFlag: 0, crossTableDragRowInfo: crossTableDragRowGlobal });
554
+ reScrollFlag: 0, reLayoutFlag: 0, footFlag: 0, kfFlag: 0, layoutReFlag: 0, mergeFooteCellFlag: 0, crossTableDragRowInfo: crossTableDragRowGlobal });
552
555
  },
553
556
  computed: Object.assign(Object.assign({}, {}), { tableId() {
554
557
  return this.computeTableId;
@@ -1363,11 +1366,21 @@ export default {
1363
1366
  const props = $xeTable;
1364
1367
  return Object.assign({}, getConfig().table.undoRedoHistoryConfig, props.undoRedoHistoryConfig);
1365
1368
  },
1366
- tabsResizeFlag() {
1369
+ combineTabsResizeFlag() {
1367
1370
  const $xeTable = this;
1368
1371
  const $xeTabs = $xeTable.$xeTabs;
1369
1372
  return $xeTabs ? $xeTabs.reactData.resizeFlag : null;
1370
1373
  },
1374
+ combineModalResizeFlag() {
1375
+ const $xeTable = this;
1376
+ const $xeModal = $xeTable.$xeModal;
1377
+ return $xeModal ? $xeModal.reactData.resizeFlag : null;
1378
+ },
1379
+ combineSplitterResizeFlag() {
1380
+ const $xeTable = this;
1381
+ const $xeSplitter = $xeTable.$xeSplitter;
1382
+ return $xeSplitter ? $xeSplitter.reactData.resizeFlag : null;
1383
+ },
1371
1384
  computeVxeLanguage() {
1372
1385
  return VxeUI.getLanguage();
1373
1386
  },
@@ -1498,7 +1511,16 @@ export default {
1498
1511
  });
1499
1512
  }
1500
1513
  },
1501
- tabsResizeFlag() {
1514
+ combineTabsResizeFlag() {
1515
+ this.layoutReFlag++;
1516
+ },
1517
+ combineModalResizeFlag() {
1518
+ this.layoutReFlag++;
1519
+ },
1520
+ combineSplitterResizeFlag() {
1521
+ this.layoutReFlag++;
1522
+ },
1523
+ layoutReFlag() {
1502
1524
  this.handleGlobalResizeEvent();
1503
1525
  },
1504
1526
  mergeCells(value) {
package/es/ui/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  import { getFuncText } from './src/utils';
3
- export const version = "3.21.15";
3
+ export const version = "3.21.16";
4
4
  VxeUI.version = version;
5
5
  VxeUI.tableVersion = version;
6
6
  VxeUI.setConfig({
package/es/ui/src/log.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  const { log } = VxeUI;
3
- const version = `table v${"3.21.15"}`;
3
+ const version = `table v${"3.21.16"}`;
4
4
  export const warnLog = log.create('warn', version);
5
5
  export const errLog = log.create('error', version);
package/lib/index.umd.js CHANGED
@@ -3311,7 +3311,7 @@ function getClass(property, params) {
3311
3311
  /* unused harmony import specifier */ var VxeUI;
3312
3312
 
3313
3313
 
3314
- const version = "3.21.15";
3314
+ const version = "3.21.16";
3315
3315
  core_.VxeUI.version = version;
3316
3316
  core_.VxeUI.tableVersion = version;
3317
3317
  core_.VxeUI.setConfig({
@@ -4074,7 +4074,7 @@ function wheelScrollTopTo(diffNum, cb) {
4074
4074
  const {
4075
4075
  log: log_log
4076
4076
  } = core_.VxeUI;
4077
- const log_version = `table v${"3.21.15"}`;
4077
+ const log_version = `table v${"3.21.16"}`;
4078
4078
  const warnLog = log_log.create('warn', log_version);
4079
4079
  const errLog = log_log.create('error', log_version);
4080
4080
  ;// ./packages/table/src/columnInfo.ts
@@ -7857,7 +7857,12 @@ remainList.forEach(column=>{const width=Math.max(meanWidth,minCellWidth);column.
7857
7857
  * 处理显示 tooltip
7858
7858
  * @param {Event} evnt 事件
7859
7859
  * @param {Row} row 行对象
7860
- */function handleTooltip($xeTable,evnt,tipOpts,type,tdEl,overflowElem,tipElem,params){const reactData=$xeTable;const tipOverEl=overflowElem||tdEl;if(!tipOverEl){return $xeTable.$nextTick();}params.cell=tdEl;const{tooltipStore}=reactData;const{column,row}=params;const{showAll,contentMethod}=tipOpts;const customContent=contentMethod?contentMethod(params):null;const useCustom=contentMethod&&!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eqNull(customContent);const content=useCustom?customContent:external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toString(column.type==='html'?tipOverEl.innerText:tipOverEl.textContent).trim();const isOver=tipOverEl.scrollWidth>tipOverEl.clientWidth;if(content&&(showAll||useCustom||isOver)){const tipContent=formatText(content);Object.assign(tooltipStore,{row,column,visible:true,content:tipContent,type,currOpts:tipOpts});$xeTable.$nextTick(()=>{const $tooltip=$xeTable.$refs.refTooltip;if($tooltip&&$tooltip.open){$tooltip.open(isOver?tipOverEl:tipElem,tipContent);}});}return $xeTable.$nextTick();}function handleScrollToRowColumn($xeTable,fieldOrColumn,row,options){const internalData=$xeTable;const{fullColumnIdData}=internalData;const column=handleFieldOrColumn($xeTable,fieldOrColumn);if(column&&fullColumnIdData[column.id]){return colToVisible($xeTable,options?options.colAlign!==false:true,column,row);}return $xeTable.$nextTick();}function handleRowExpandReserve($xeTable,row,expanded){const internalData=$xeTable;const{rowExpandedReserveRowMap}=internalData;const expandOpts=$xeTable.computeExpandOpts;if(expandOpts.reserve){const rowid=getRowid($xeTable,row);if(expanded){rowExpandedReserveRowMap[rowid]=row;}else if(rowExpandedReserveRowMap[rowid]){delete rowExpandedReserveRowMap[rowid];}}}function handleDefaultMergeCells($xeTable){const props=$xeTable;const{mergeCells}=props;if(mergeCells){$xeTable.setMergeCells(mergeCells);}}function handleDefaultMergeHeaderItems($xeTable){const props=$xeTable;const{mergeHeaderCells}=props;if(mergeHeaderCells){$xeTable.setMergeHeaderCells(mergeHeaderCells);}}function handleDefaultMergeFooterItems($xeTable){const props=$xeTable;const{mergeFooterCells,mergeFooterItems}=props;const mFooterCells=mergeFooterCells||mergeFooterItems;if(mFooterCells){$xeTable.setMergeFooterCells(mFooterCells);}}// 计算可视渲染相关数据
7860
+ */function handleTooltip($xeTable,evnt,tipOpts,type,tdEl,overflowElem,tipElem,params){const reactData=$xeTable;const tipOverEl=overflowElem||tdEl;if(!tipOverEl){return $xeTable.$nextTick();}params.cell=tdEl;const{tooltipStore}=reactData;const{column,row}=params;const{showAll,contentMethod}=tipOpts;const cellText=external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toString(column.type==='html'?tipOverEl.innerText:tipOverEl.textContent).trim();const isOver=tipOverEl.scrollWidth>tipOverEl.clientWidth;let isShow=false;let customContent=null;let content='';if(contentMethod){customContent=contentMethod(params);}// 是否全部展示
7861
+ if(showAll){// 如果为 null 默认显示
7862
+ if(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eqNull(customContent)){isShow=true;content=cellText;}else if(customContent!==''&&customContent!==false){// 如果为 '' | false 则不显示
7863
+ isShow=true;content=''+customContent;}}else{// 如果为 null 使用默认逻辑
7864
+ if(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eqNull(customContent)){isShow=isOver;}else if(customContent!==''&&customContent!==false){// 如果为 '' | false 则不显示
7865
+ isShow=true;}content=cellText;}if(isShow&&content){const tipContent=formatText(content);Object.assign(tooltipStore,{row,column,visible:true,content:tipContent,type,currOpts:tipOpts});$xeTable.$nextTick(()=>{const $tooltip=$xeTable.$refs.refTooltip;if($tooltip&&$tooltip.open){$tooltip.open(isOver?tipOverEl:tipElem,tipContent);}});}return $xeTable.$nextTick();}function handleScrollToRowColumn($xeTable,fieldOrColumn,row,options){const internalData=$xeTable;const{fullColumnIdData}=internalData;const column=handleFieldOrColumn($xeTable,fieldOrColumn);if(column&&fullColumnIdData[column.id]){return colToVisible($xeTable,options?options.colAlign!==false:true,column,row);}return $xeTable.$nextTick();}function handleRowExpandReserve($xeTable,row,expanded){const internalData=$xeTable;const{rowExpandedReserveRowMap}=internalData;const expandOpts=$xeTable.computeExpandOpts;if(expandOpts.reserve){const rowid=getRowid($xeTable,row);if(expanded){rowExpandedReserveRowMap[rowid]=row;}else if(rowExpandedReserveRowMap[rowid]){delete rowExpandedReserveRowMap[rowid];}}}function handleDefaultMergeCells($xeTable){const props=$xeTable;const{mergeCells}=props;if(mergeCells){$xeTable.setMergeCells(mergeCells);}}function handleDefaultMergeHeaderItems($xeTable){const props=$xeTable;const{mergeHeaderCells}=props;if(mergeHeaderCells){$xeTable.setMergeHeaderCells(mergeHeaderCells);}}function handleDefaultMergeFooterItems($xeTable){const props=$xeTable;const{mergeFooterCells,mergeFooterItems}=props;const mFooterCells=mergeFooterCells||mergeFooterItems;if(mFooterCells){$xeTable.setMergeFooterCells(mFooterCells);}}// 计算可视渲染相关数据
7861
7866
  function computeScrollLoad($xeTable){const reactData=$xeTable;const internalData=$xeTable;return $xeTable.$nextTick().then(()=>{const{scrollXLoad,scrollYLoad}=reactData;const{scrollXStore,scrollYStore}=internalData;const virtualYOpts=$xeTable.computeVirtualYOpts;const virtualXOpts=$xeTable.computeVirtualXOpts;// 计算 X 逻辑
7862
7867
  if(scrollXLoad){const{toVisibleIndex:toXVisibleIndex,visibleSize:visibleXSize}=handleVirtualXVisible($xeTable);const offsetXSize=Math.max(0,virtualXOpts.oSize?external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(virtualXOpts.oSize):0);scrollXStore.preloadSize=external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(virtualXOpts.preSize);scrollXStore.offsetSize=offsetXSize;scrollXStore.visibleSize=visibleXSize;scrollXStore.endIndex=Math.max(scrollXStore.startIndex+scrollXStore.visibleSize+offsetXSize,scrollXStore.endIndex);scrollXStore.visibleStartIndex=Math.max(scrollXStore.startIndex,toXVisibleIndex);scrollXStore.visibleEndIndex=Math.min(scrollXStore.endIndex,toXVisibleIndex+visibleXSize);$xeTable.updateScrollXData().then(()=>{loadScrollXData($xeTable);});}else{$xeTable.updateScrollXSpace();}// 计算 Y 逻辑
7863
7868
  const rowHeight=computeRowHeight($xeTable);scrollYStore.rowHeight=rowHeight;// 已废弃
@@ -9888,6 +9893,10 @@ function renderFilterRows(h, _vm, isOptimizeMode, cols) {
9888
9893
  const cellOpts = $xeTable.computeCellOpts;
9889
9894
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
9890
9895
  const headerCellOpts = $xeTable.computeHeaderCellOpts;
9896
+ const floatingFilterOpts = $xeTable.computeFloatingFilterOpts;
9897
+ const {
9898
+ cellClassName
9899
+ } = floatingFilterOpts;
9891
9900
  const currCellHeight = getCalcHeight(headerCellOpts.height) || defaultRowHeight;
9892
9901
  return cols.map((column, $columnIndex) => {
9893
9902
  const {
@@ -9952,7 +9961,7 @@ function renderFilterRows(h, _vm, isOptimizeMode, cols) {
9952
9961
  tcStyle.minHeight = `${currCellHeight}px`;
9953
9962
  }
9954
9963
  return h('th', {
9955
- class: ['vxe-table--column vxe-header--column', colid, fixedHiddenColumn ? 'fixed--hidden' : 'fixed--visible', {
9964
+ class: ['vxe-table--column vxe-header--column is--floating-filters', colid, fixedHiddenColumn ? 'fixed--hidden' : 'fixed--visible', {
9956
9965
  [`col--${headAlign}`]: headAlign,
9957
9966
  [`col--${type}`]: type,
9958
9967
  'col--last': isLastColumn,
@@ -9966,7 +9975,7 @@ function renderFilterRows(h, _vm, isOptimizeMode, cols) {
9966
9975
  key: colid,
9967
9976
  attrs: thAttrs
9968
9977
  }, [h('div', {
9969
- class: ['vxe-cell', {
9978
+ class: ['vxe-cell', '' + (cellClassName || ''), {
9970
9979
  'c--title': showTitle,
9971
9980
  'c--tooltip': showTooltip,
9972
9981
  'c--ellipsis': showEllipsis
@@ -10008,7 +10017,7 @@ function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups, renderColumn
10008
10017
  if (floatingFilterOpts.enabled) {
10009
10018
  rowVNs.push(h('tr', {
10010
10019
  key: 'ff',
10011
- class: ['vxe-header--row']
10020
+ class: ['vxe-header--row is--floating-filters', '' + (floatingFilterOpts.rowClassName || '')]
10012
10021
  }, renderFilterRows(h, _vm, isOptimizeMode, renderColumnList)));
10013
10022
  }
10014
10023
  return rowVNs;
@@ -16675,7 +16684,8 @@ function toHtml($xeTable, opts, columns, datas) {
16675
16684
  isIndeterminate
16676
16685
  } = reactData;
16677
16686
  const {
16678
- mergeBodyCellMaps
16687
+ mergeBodyCellMaps,
16688
+ mergeFooterCellMaps
16679
16689
  } = internalData;
16680
16690
  const treeOpts = $xeTable.computeTreeOpts;
16681
16691
  const {
@@ -16816,15 +16826,37 @@ function toHtml($xeTable, opts, columns, datas) {
16816
16826
  const footers = getFooterData($xeTable, opts, footerTableData);
16817
16827
  if (footers.length) {
16818
16828
  tables.push('<tfoot>');
16819
- footers.forEach(row => {
16829
+ footers.forEach((row, rIndex) => {
16820
16830
  tables.push(`<tr>${columns.map(column => {
16821
16831
  const footAlign = column.footerAlign || column.align || allFooterAlign || allAlign;
16822
16832
  const classNames = hasEllipsis($xeTable, column, 'showOverflow', allColumnOverflow) ? ['col--ellipsis'] : [];
16823
16833
  const cellValue = getFooterCellValue($xeTable, opts, row, column);
16834
+ let rowSpan = 1;
16835
+ let colSpan = 1;
16836
+ if (isMerge) {
16837
+ const _rowIndex = rIndex;
16838
+ const _columnIndex = $xeTable.getVTColumnIndex(column);
16839
+ const spanRest = mergeFooterCellMaps[`${_rowIndex}:${_columnIndex}`];
16840
+ if (spanRest) {
16841
+ const {
16842
+ rowspan,
16843
+ colspan
16844
+ } = spanRest;
16845
+ if (!rowspan || !colspan) {
16846
+ return '';
16847
+ }
16848
+ if (rowspan > 1) {
16849
+ rowSpan = rowspan;
16850
+ }
16851
+ if (colspan > 1) {
16852
+ colSpan = colspan;
16853
+ }
16854
+ }
16855
+ }
16824
16856
  if (footAlign) {
16825
16857
  classNames.push(`col--${footAlign}`);
16826
16858
  }
16827
- return `<td class="${classNames.join(' ')}" title="${cellValue}"><div ${isPrint ? '' : `style="width: ${column.renderWidth}px"`}>${formatText(cellValue, true)}</div></td>`;
16859
+ return `<td class="${classNames.join(' ')}" rowspan="${rowSpan}" colspan="${colSpan}" title="${cellValue}"><div ${isPrint ? '' : `style="width: ${column.renderWidth}px"`}>${formatText(cellValue, true)}</div></td>`;
16828
16860
  }).join('')}</tr>`);
16829
16861
  });
16830
16862
  tables.push('</tfoot>');
@@ -20519,6 +20551,9 @@ function renderBody(h, $xeTable) {
20519
20551
  };
20520
20552
  },
20521
20553
  inject: {
20554
+ $xeModal: {
20555
+ default: null
20556
+ },
20522
20557
  $xeTabs: {
20523
20558
  default: null
20524
20559
  },
@@ -20544,6 +20579,7 @@ function renderBody(h, $xeTable) {
20544
20579
  reLayoutFlag: 0,
20545
20580
  footFlag: 0,
20546
20581
  kfFlag: 0,
20582
+ layoutReFlag: 0,
20547
20583
  mergeFooteCellFlag: 0,
20548
20584
  crossTableDragRowInfo: crossTableDragRowGlobal
20549
20585
  };
@@ -21494,11 +21530,21 @@ function renderBody(h, $xeTable) {
21494
21530
  const props = $xeTable;
21495
21531
  return Object.assign({}, table_getConfig().table.undoRedoHistoryConfig, props.undoRedoHistoryConfig);
21496
21532
  },
21497
- tabsResizeFlag() {
21533
+ combineTabsResizeFlag() {
21498
21534
  const $xeTable = this;
21499
21535
  const $xeTabs = $xeTable.$xeTabs;
21500
21536
  return $xeTabs ? $xeTabs.reactData.resizeFlag : null;
21501
21537
  },
21538
+ combineModalResizeFlag() {
21539
+ const $xeTable = this;
21540
+ const $xeModal = $xeTable.$xeModal;
21541
+ return $xeModal ? $xeModal.reactData.resizeFlag : null;
21542
+ },
21543
+ combineSplitterResizeFlag() {
21544
+ const $xeTable = this;
21545
+ const $xeSplitter = $xeTable.$xeSplitter;
21546
+ return $xeSplitter ? $xeSplitter.reactData.resizeFlag : null;
21547
+ },
21502
21548
  computeVxeLanguage() {
21503
21549
  return core_.VxeUI.getLanguage();
21504
21550
  },
@@ -21636,7 +21682,16 @@ function renderBody(h, $xeTable) {
21636
21682
  });
21637
21683
  }
21638
21684
  },
21639
- tabsResizeFlag() {
21685
+ combineTabsResizeFlag() {
21686
+ this.layoutReFlag++;
21687
+ },
21688
+ combineModalResizeFlag() {
21689
+ this.layoutReFlag++;
21690
+ },
21691
+ combineSplitterResizeFlag() {
21692
+ this.layoutReFlag++;
21693
+ },
21694
+ layoutReFlag() {
21640
21695
  this.handleGlobalResizeEvent();
21641
21696
  },
21642
21697
  mergeCells(value) {