vxe-table 3.14.5 → 3.15.0-beta.0

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 (46) hide show
  1. package/es/style.css +1 -1
  2. package/es/table/module/edit/mixin.js +10 -9
  3. package/es/table/module/export/mixin.js +14 -11
  4. package/es/table/src/body.js +11 -13
  5. package/es/table/src/footer.js +3 -16
  6. package/es/table/src/methods.js +202 -67
  7. package/es/table/src/table.js +40 -23
  8. package/es/table/src/util.js +0 -13
  9. package/es/ui/index.js +2 -2
  10. package/es/ui/src/log.js +1 -1
  11. package/lib/index.umd.js +318 -183
  12. package/lib/index.umd.min.js +1 -1
  13. package/lib/style.css +1 -1
  14. package/lib/table/module/edit/mixin.js +9 -9
  15. package/lib/table/module/edit/mixin.min.js +1 -1
  16. package/lib/table/module/export/mixin.js +15 -11
  17. package/lib/table/module/export/mixin.min.js +1 -1
  18. package/lib/table/src/body.js +14 -15
  19. package/lib/table/src/body.min.js +1 -1
  20. package/lib/table/src/footer.js +4 -27
  21. package/lib/table/src/footer.min.js +1 -1
  22. package/lib/table/src/methods.js +231 -71
  23. package/lib/table/src/methods.min.js +1 -1
  24. package/lib/table/src/table.js +42 -23
  25. package/lib/table/src/table.min.js +1 -1
  26. package/lib/table/src/util.js +0 -25
  27. package/lib/table/src/util.min.js +1 -1
  28. package/lib/ui/index.js +2 -2
  29. package/lib/ui/index.min.js +1 -1
  30. package/lib/ui/src/log.js +1 -1
  31. package/lib/ui/src/log.min.js +1 -1
  32. package/package.json +2 -2
  33. package/packages/table/module/edit/mixin.ts +10 -9
  34. package/packages/table/module/export/mixin.ts +14 -11
  35. package/packages/table/src/body.ts +11 -13
  36. package/packages/table/src/footer.ts +3 -17
  37. package/packages/table/src/methods.ts +218 -78
  38. package/packages/table/src/table.ts +40 -23
  39. package/packages/table/src/util.ts +0 -14
  40. package/packages/ui/index.ts +1 -1
  41. /package/es/{iconfont.1743479120369.ttf → iconfont.1743578536739.ttf} +0 -0
  42. /package/es/{iconfont.1743479120369.woff → iconfont.1743578536739.woff} +0 -0
  43. /package/es/{iconfont.1743479120369.woff2 → iconfont.1743578536739.woff2} +0 -0
  44. /package/lib/{iconfont.1743479120369.ttf → iconfont.1743578536739.ttf} +0 -0
  45. /package/lib/{iconfont.1743479120369.woff → iconfont.1743578536739.woff} +0 -0
  46. /package/lib/{iconfont.1743479120369.woff2 → iconfont.1743578536739.woff2} +0 -0
@@ -15,30 +15,6 @@ const {
15
15
  renderer,
16
16
  renderEmptyElement
17
17
  } = _ui.VxeUI;
18
- function mergeFooterMethod(mergeFooterList, _rowIndex, _columnIndex) {
19
- for (let mIndex = 0; mIndex < mergeFooterList.length; mIndex++) {
20
- const {
21
- row: mergeRowIndex,
22
- col: mergeColIndex,
23
- rowspan: mergeRowspan,
24
- colspan: mergeColspan
25
- } = mergeFooterList[mIndex];
26
- if (mergeColIndex > -1 && mergeRowIndex > -1 && mergeRowspan && mergeColspan) {
27
- if (mergeRowIndex === _rowIndex && mergeColIndex === _columnIndex) {
28
- return {
29
- rowspan: mergeRowspan,
30
- colspan: mergeColspan
31
- };
32
- }
33
- if (_rowIndex >= mergeRowIndex && _rowIndex < mergeRowIndex + mergeRowspan && _columnIndex >= mergeColIndex && _columnIndex < mergeColIndex + mergeColspan) {
34
- return {
35
- rowspan: 0,
36
- colspan: 0
37
- };
38
- }
39
- }
40
- }
41
- }
42
18
  function renderRows(h, _vm, tableColumn, footerTableData, row, $rowIndex, _rowIndex) {
43
19
  const props = _vm;
44
20
  const $xeTable = _vm.$parent;
@@ -64,11 +40,12 @@ function renderRows(h, _vm, tableColumn, footerTableData, row, $rowIndex, _rowIn
64
40
  scrollXLoad,
65
41
  scrollYLoad,
66
42
  overflowX,
67
- currentColumn,
68
- mergeFooterList
43
+ currentColumn
69
44
  } = tableReactData;
70
45
  const {
71
46
  fullColumnIdData,
47
+ mergeFooterList,
48
+ mergeFooterCellMaps,
72
49
  scrollXStore
73
50
  } = tableInternalData;
74
51
  const tooltipOpts = $xeTable.computeTooltipOpts;
@@ -162,7 +139,7 @@ function renderRows(h, _vm, tableColumn, footerTableData, row, $rowIndex, _rowIn
162
139
  let isMergeCell = false;
163
140
  // 合并行或列
164
141
  if (mergeFooterList.length) {
165
- const spanRest = mergeFooterMethod(mergeFooterList, _rowIndex, _columnIndex);
142
+ const spanRest = mergeFooterCellMaps[`${_rowIndex}:${_columnIndex}`];
166
143
  if (spanRest) {
167
144
  const {
168
145
  rowspan,
@@ -1 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../ui"),_utils=require("../../ui/src/utils"),_dom=require("../../ui/src/dom"),_util=require("./util");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let renderType="footer",{renderer,renderEmptyElement}=_ui.VxeUI;function mergeFooterMethod(l,r,t){for(let e=0;e<l.length;e++){var{row:o,col:i,rowspan:a,colspan:n}=l[e];if(-1<i&&-1<o&&a&&n){if(o===r&&i===t)return{rowspan:a,colspan:n};if(o<=r&&r<o+a&&i<=t&&t<i+n)return{rowspan:0,colspan:0}}}}function renderRows(C,e,_,F,T,$,S){let E=e.$parent;var l=E,r=E,t=E;let I=E.$xeGrid,O=e.fixedType,{resizable:D,border:R,footerCellClassName:z,footerCellStyle:k,footerAlign:U,footerSpanMethod:A,align:M,columnKey:q,showFooterOverflow:L}=l,{scrollXLoad:X,scrollYLoad:H,overflowX:N,currentColumn:j,mergeFooterList:W}=r,{fullColumnIdData:B,scrollXStore:G}=t,K=E.computeTooltipOpts,V=E.resizableOpts.isAllColumnDrag,Y=E.computeColumnOpts;e=E.computeDefaultRowHeight;let P=E.computeCellOpts,J=E.computeFooterCellOpts,Q=(0,_util.getCellHeight)(J.height||P.height)||e;return _.map((l,e)=>{var{type:r,showFooterOverflow:t,footerAlign:o,align:i,footerClassName:a,editRender:n,cellRender:s}=l,d=l.id,u=B[d]||{},n=n||s,s=n?renderer.get(n.name):null;let p=K.showAll;var n=l.children&&l.children.length,n=O?l.fixed!==O&&!n:l.fixed&&N,c=(_xeUtils.default.isBoolean(J.padding)?J:P).padding,t=_xeUtils.default.eqNull(t)?L:t,o=o||(s?s.tableFooterCellAlign:"")||U||i||(s?s.tableCellAlign:"")||M;let f="ellipsis"===t,x="title"===t,m=!0===t||"tooltip"===t,g=x||m||f;var i=_xeUtils.default.isBoolean(l.resizable)?l.resizable:Y.resizable||D,s={colid:d},t={},v=u.index,u=u._index,h=u;let w={$table:E,$grid:I,row:T,rowIndex:S,_rowIndex:S,$rowIndex:$,column:l,columnIndex:v,$columnIndex:e,_columnIndex:u,itemIndex:h,items:T,fixed:O,type:renderType,data:F},y=(X&&!g&&(f=g=!0),(x||m||p)&&(t.mouseenter=e=>{x?(0,_dom.updateCellTitle)(e.currentTarget,l):(m||p)&&E.triggerFooterTooltipEvent(e,w)}),(m||p)&&(t.mouseleave=e=>{(m||p)&&E.handleTargetLeaveEvent(e)}),t.click=e=>{E.dispatchEvent("footer-cell-click",Object.assign({cell:e.currentTarget},w),e)},!(t.dblclick=e=>{E.dispatchEvent("footer-cell-dblclick",Object.assign({cell:e.currentTarget},w),e)}));if(W.length){v=mergeFooterMethod(W,S,u);if(v){var{rowspan:h,colspan:v}=v;if(!h||!v)return null;1<h&&(y=!0,s.rowspan=h),1<v&&(y=!0,s.colspan=v)}}else if(A){var{rowspan:h=1,colspan:v=1}=A(w)||{};if(!h||!v)return null;1<h&&(s.rowspan=h),1<v&&(s.colspan=v)}h=e===_.length-1,v=!l.resizeWidth&&("auto"===l.minWidth||"auto"===l.width);let b=!1;y||X&&!l.fixed&&(u<G.visibleStartIndex-G.preloadSize||u>G.visibleEndIndex+G.preloadSize)&&(b=!0);u={};return g?u.height=Q+"px":u.minHeight=Q+"px",C("td",{class:["vxe-footer--column",l.id,{["col--"+o]:o,["col--"+r]:r,"col--last":h,"fixed--width":!v,"fixed--hidden":n,"is--padding":c,"col--ellipsis":g,"col--current":j===l},(0,_utils.getClass)(a,w),(0,_utils.getClass)(z,w)],attrs:s,style:k?_xeUtils.default.isFunction(k)?k(w):k:void 0,on:t,key:q||X||H||Y.useKey||Y.drag?l.id:e},[C("div",{class:["vxe-cell",{"c--title":x,"c--tooltip":m,"c--ellipsis":f}],style:u},b?[]:[C("div",{attrs:{colid:d},class:"vxe-cell--wrapper"},l.renderFooter(C,w))]),!n&&i&&V?C("div",{class:["vxe-cell--col-resizable",{"is--line":!R||"none"===R}],on:{mousedown:e=>E.handleColResizeMousedownEvent(e,O,w),dblclick:e=>E.handleColResizeDblclickEvent(e,w)}}):renderEmptyElement(E)])})}function renderHeads(o,i,a){let n=i.$parent;var e=n,l=n;let{fixedType:s,footerTableData:d}=i,{footerRowClassName:u,footerRowStyle:p}=e,{isColLoading:c,isDragColMove:f}=l,x=n.computeColumnOpts,m=n.computeColumnDragOpts;return d.map((e,l)=>{var r=l,t={$table:n,row:e,_rowIndex:r,$rowIndex:l,fixed:s,type:renderType};return!c&&x.drag&&m.animation?o("transition-group",{key:l,props:{tag:"tr",name:"vxe-header--col-list"+(f?"":"-disabled"),class:["vxe-footer--row",u?_xeUtils.default.isFunction(u)?u(t):u:""],style:p?_xeUtils.default.isFunction(p)?p(t):p:void 0}},renderRows(o,i,a,d,e,l,r)):o("tr",{key:l,class:["vxe-footer--row",u?_xeUtils.default.isFunction(u)?u(t):u:""],style:p?_xeUtils.default.isFunction(p)?p(t):p:void 0},renderRows(o,i,a,d,e,l,r))})}var _default=exports.default={name:"VxeTableFooter",props:{footerTableData:{type:Array,default:()=>[]},tableColumn:{type:Array,default:()=>[]},fixedColumn:{type:Array,default:()=>[]},fixedType:{type:String,default:null}},mounted(){var e=this,l=e.fixedType,r=e.$parent.elemStore,l=`${l||"main"}-footer-`;r[l+"wrapper"]=e.$refs.refElem,r[l+"scroll"]=e.$refs.refFooterScroll,r[l+"table"]=e.$refs.refFooterTable,r[l+"colgroup"]=e.$refs.refFooterColgroup,r[l+"list"]=e.$refs.refFooterTFoot,r[l+"xSpace"]=e.$refs.refFooterXSpace},destroyed(){var e=this.fixedType,l=this.$parent.elemStore,e=`${e||"main"}-footer-`;l[e+"wrapper"]=null,l[e+"scroll"]=null,l[e+"table"]=null,l[e+"colgroup"]=null,l[e+"list"]=null,l[e+"xSpace"]=null},render(r){let l=this.$parent;var e=l,t=l,o=l,i=l.xID;let{fixedType:a,fixedColumn:n,tableColumn:s}=this;var{spanMethod:e,footerSpanMethod:d,showFooterOverflow:u}=e,{visibleColumn:o,fullColumnIdData:p}=o,{isGroup:t,isColLoading:c,overflowX:f,scrollXLoad:x,scrollYLoad:m,dragCol:g}=t;let v=s,h=!(x||m||u)||e||d?!1:!0;return c||!a&&f||(v=o),a&&h&&(v=n||[]),a||t||x&&g&&2<v.length&&(m=p[g.id])&&(u=m._index,e=v[0],d=v[v.length-1],c=p[e.id],f=p[d.id],c)&&f&&(o=c._index,t=f._index,u<o?v=[g].concat(v):t<u&&(v=v.concat([g]))),r("div",{ref:"refElem",class:["vxe-table--footer-wrapper",a?`fixed-${a}--wrapper`:"body--wrapper"],attrs:{xid:i}},[r("div",{ref:"refFooterScroll",class:"vxe-table--footer-inner-wrapper",on:{scroll(e){l.triggerFooterScrollEvent(e,a)}}},[a?renderEmptyElement(l):r("div",{ref:"refFooterXSpace",class:"vxe-body--x-space"}),r("table",{ref:"refFooterTable",class:"vxe-table--footer",attrs:{xid:i,cellspacing:0,cellpadding:0,border:0}},[r("colgroup",{ref:"refFooterColgroup"},v.map((e,l)=>r("col",{attrs:{name:e.id},key:l,style:{width:e.renderWidth+"px"}}))),r("tfoot",{ref:"refFooterTFoot"},renderHeads(r,this,v))])])])}};
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../ui"),_utils=require("../../ui/src/utils"),_dom=require("../../ui/src/dom"),_util=require("./util");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let renderType="footer",{renderer,renderEmptyElement}=_ui.VxeUI;function renderRows(C,e,_,F,T,$,S){let E=e.$parent;var l=E,r=E,t=E;let I=E.$xeGrid,O=e.fixedType,{resizable:D,border:R,footerCellClassName:z,footerCellStyle:k,footerAlign:U,footerSpanMethod:A,align:q,columnKey:L,showFooterOverflow:M}=l,{scrollXLoad:X,scrollYLoad:H,overflowX:N,currentColumn:j}=r,{fullColumnIdData:W,mergeFooterList:B,mergeFooterCellMaps:G,scrollXStore:K}=t,V=E.computeTooltipOpts,Y=E.resizableOpts.isAllColumnDrag,P=E.computeColumnOpts;e=E.computeDefaultRowHeight;let J=E.computeCellOpts,Q=E.computeFooterCellOpts,Z=(0,_util.getCellHeight)(Q.height||J.height)||e;return _.map((l,e)=>{var{type:r,showFooterOverflow:t,footerAlign:o,align:i,footerClassName:a,editRender:n,cellRender:s}=l,d=l.id,u=W[d]||{},n=n||s,s=n?renderer.get(n.name):null;let p=V.showAll;var n=l.children&&l.children.length,n=O?l.fixed!==O&&!n:l.fixed&&N,c=(_xeUtils.default.isBoolean(Q.padding)?Q:J).padding,t=_xeUtils.default.eqNull(t)?M:t,o=o||(s?s.tableFooterCellAlign:"")||U||i||(s?s.tableCellAlign:"")||q;let f="ellipsis"===t,x="title"===t,m=!0===t||"tooltip"===t,g=x||m||f;var i=_xeUtils.default.isBoolean(l.resizable)?l.resizable:P.resizable||D,s={colid:d},t={},v=u.index,u=u._index,h=u;let w={$table:E,$grid:I,row:T,rowIndex:S,_rowIndex:S,$rowIndex:$,column:l,columnIndex:v,$columnIndex:e,_columnIndex:u,itemIndex:h,items:T,fixed:O,type:renderType,data:F},y=(X&&!g&&(f=g=!0),(x||m||p)&&(t.mouseenter=e=>{x?(0,_dom.updateCellTitle)(e.currentTarget,l):(m||p)&&E.triggerFooterTooltipEvent(e,w)}),(m||p)&&(t.mouseleave=e=>{(m||p)&&E.handleTargetLeaveEvent(e)}),t.click=e=>{E.dispatchEvent("footer-cell-click",Object.assign({cell:e.currentTarget},w),e)},!(t.dblclick=e=>{E.dispatchEvent("footer-cell-dblclick",Object.assign({cell:e.currentTarget},w),e)}));if(B.length){v=G[S+":"+u];if(v){var{rowspan:h,colspan:v}=v;if(!h||!v)return null;1<h&&(y=!0,s.rowspan=h),1<v&&(y=!0,s.colspan=v)}}else if(A){var{rowspan:h=1,colspan:v=1}=A(w)||{};if(!h||!v)return null;1<h&&(s.rowspan=h),1<v&&(s.colspan=v)}h=e===_.length-1,v=!l.resizeWidth&&("auto"===l.minWidth||"auto"===l.width);let b=!1;y||X&&!l.fixed&&(u<K.visibleStartIndex-K.preloadSize||u>K.visibleEndIndex+K.preloadSize)&&(b=!0);u={};return g?u.height=Z+"px":u.minHeight=Z+"px",C("td",{class:["vxe-footer--column",l.id,{["col--"+o]:o,["col--"+r]:r,"col--last":h,"fixed--width":!v,"fixed--hidden":n,"is--padding":c,"col--ellipsis":g,"col--current":j===l},(0,_utils.getClass)(a,w),(0,_utils.getClass)(z,w)],attrs:s,style:k?_xeUtils.default.isFunction(k)?k(w):k:void 0,on:t,key:L||X||H||P.useKey||P.drag?l.id:e},[C("div",{class:["vxe-cell",{"c--title":x,"c--tooltip":m,"c--ellipsis":f}],style:u},b?[]:[C("div",{attrs:{colid:d},class:"vxe-cell--wrapper"},l.renderFooter(C,w))]),!n&&i&&Y?C("div",{class:["vxe-cell--col-resizable",{"is--line":!R||"none"===R}],on:{mousedown:e=>E.handleColResizeMousedownEvent(e,O,w),dblclick:e=>E.handleColResizeDblclickEvent(e,w)}}):renderEmptyElement(E)])})}function renderHeads(o,i,a){let n=i.$parent;var e=n,l=n;let{fixedType:s,footerTableData:d}=i,{footerRowClassName:u,footerRowStyle:p}=e,{isColLoading:c,isDragColMove:f}=l,x=n.computeColumnOpts,m=n.computeColumnDragOpts;return d.map((e,l)=>{var r=l,t={$table:n,row:e,_rowIndex:r,$rowIndex:l,fixed:s,type:renderType};return!c&&x.drag&&m.animation?o("transition-group",{key:l,props:{tag:"tr",name:"vxe-header--col-list"+(f?"":"-disabled"),class:["vxe-footer--row",u?_xeUtils.default.isFunction(u)?u(t):u:""],style:p?_xeUtils.default.isFunction(p)?p(t):p:void 0}},renderRows(o,i,a,d,e,l,r)):o("tr",{key:l,class:["vxe-footer--row",u?_xeUtils.default.isFunction(u)?u(t):u:""],style:p?_xeUtils.default.isFunction(p)?p(t):p:void 0},renderRows(o,i,a,d,e,l,r))})}var _default=exports.default={name:"VxeTableFooter",props:{footerTableData:{type:Array,default:()=>[]},tableColumn:{type:Array,default:()=>[]},fixedColumn:{type:Array,default:()=>[]},fixedType:{type:String,default:null}},mounted(){var e=this,l=e.fixedType,r=e.$parent.elemStore,l=`${l||"main"}-footer-`;r[l+"wrapper"]=e.$refs.refElem,r[l+"scroll"]=e.$refs.refFooterScroll,r[l+"table"]=e.$refs.refFooterTable,r[l+"colgroup"]=e.$refs.refFooterColgroup,r[l+"list"]=e.$refs.refFooterTFoot,r[l+"xSpace"]=e.$refs.refFooterXSpace},destroyed(){var e=this.fixedType,l=this.$parent.elemStore,e=`${e||"main"}-footer-`;l[e+"wrapper"]=null,l[e+"scroll"]=null,l[e+"table"]=null,l[e+"colgroup"]=null,l[e+"list"]=null,l[e+"xSpace"]=null},render(r){let l=this.$parent;var e=l,t=l,o=l,i=l.xID;let{fixedType:a,fixedColumn:n,tableColumn:s}=this;var{spanMethod:e,footerSpanMethod:d,showFooterOverflow:u}=e,{visibleColumn:o,fullColumnIdData:p}=o,{isGroup:t,isColLoading:c,overflowX:f,scrollXLoad:x,scrollYLoad:m,dragCol:g}=t;let v=s,h=!(x||m||u)||e||d?!1:!0;return c||!a&&f||(v=o),a&&h&&(v=n||[]),a||t||x&&g&&2<v.length&&(m=p[g.id])&&(u=m._index,e=v[0],d=v[v.length-1],c=p[e.id],f=p[d.id],c)&&f&&(o=c._index,t=f._index,u<o?v=[g].concat(v):t<u&&(v=v.concat([g]))),r("div",{ref:"refElem",class:["vxe-table--footer-wrapper",a?`fixed-${a}--wrapper`:"body--wrapper"],attrs:{xid:i}},[r("div",{ref:"refFooterScroll",class:"vxe-table--footer-inner-wrapper",on:{scroll(e){l.triggerFooterScrollEvent(e,a)}}},[a?renderEmptyElement(l):r("div",{ref:"refFooterXSpace",class:"vxe-body--x-space"}),r("table",{ref:"refFooterTable",class:"vxe-table--footer",attrs:{xid:i,cellspacing:0,cellpadding:0,border:0}},[r("colgroup",{ref:"refFooterColgroup"},v.map((e,l)=>r("col",{attrs:{name:e.id},key:l,style:{width:e.renderWidth+"px"}}))),r("tfoot",{ref:"refFooterTFoot"},renderHeads(r,this,v))])])])}};
@@ -1520,20 +1520,48 @@ function calculateMergerOffsetIndex(list, offsetItem, type) {
1520
1520
  }
1521
1521
  }
1522
1522
  }
1523
- function setMerges($xeTable, merges, mList, rowList) {
1524
- // const props = $xeTable
1523
+ function buildMergeData(mergeConfigs) {
1524
+ const mergeMaps = {};
1525
+ if (mergeConfigs && mergeConfigs.length) {
1526
+ for (let mIndex = 0; mIndex < mergeConfigs.length; mIndex++) {
1527
+ const {
1528
+ row: _rowIndex,
1529
+ col: _columnIndex,
1530
+ rowspan: mergeRowspan,
1531
+ colspan: mergeColspan
1532
+ } = mergeConfigs[mIndex];
1533
+ for (let i = 0; i < mergeRowspan; i++) {
1534
+ for (let j = 0; j < mergeColspan; j++) {
1535
+ mergeMaps[`${_rowIndex + i}:${_columnIndex + j}`] = !i && !j ? {
1536
+ rowspan: mergeRowspan,
1537
+ colspan: mergeColspan
1538
+ } : {
1539
+ rowspan: 0,
1540
+ colspan: 0
1541
+ };
1542
+ }
1543
+ }
1544
+ }
1545
+ }
1546
+ return mergeMaps;
1547
+ }
1548
+ const handleBodyMerge = ($xeTable, merges) => {
1525
1549
  const internalData = $xeTable;
1550
+ const {
1551
+ fullAllDataRowIdData,
1552
+ fullColumnIdData,
1553
+ visibleColumn,
1554
+ afterFullData,
1555
+ mergeBodyList,
1556
+ mergeBodyMaps
1557
+ } = internalData;
1526
1558
  if (merges) {
1527
- // const { treeConfig } = props
1528
1559
  const {
1529
- visibleColumn
1530
- } = internalData;
1560
+ handleGetRowId
1561
+ } = (0, _util.createHandleGetRowId)($xeTable);
1531
1562
  if (!_xeUtils.default.isArray(merges)) {
1532
1563
  merges = [merges];
1533
1564
  }
1534
- // if (treeConfig && merges.length) {
1535
- // errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1536
- // }
1537
1565
  merges.forEach(item => {
1538
1566
  let {
1539
1567
  row,
@@ -1541,42 +1569,117 @@ function setMerges($xeTable, merges, mList, rowList) {
1541
1569
  rowspan,
1542
1570
  colspan
1543
1571
  } = item;
1544
- if (rowList && _xeUtils.default.isNumber(row)) {
1545
- row = rowList[row];
1572
+ let mergeRowIndex = -1;
1573
+ let mergeColumnIndex = -1;
1574
+ if (_xeUtils.default.isNumber(row)) {
1575
+ mergeRowIndex = row;
1576
+ } else {
1577
+ const rowid = row ? handleGetRowId(row) : null;
1578
+ const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
1579
+ if (rowRest) {
1580
+ mergeRowIndex = rowRest._index;
1581
+ }
1546
1582
  }
1547
1583
  if (_xeUtils.default.isNumber(col)) {
1548
- col = visibleColumn[col];
1584
+ mergeColumnIndex = col;
1585
+ } else {
1586
+ const colid = col ? col.id : null;
1587
+ const colRest = colid ? fullColumnIdData[colid] : null;
1588
+ if (colRest) {
1589
+ mergeColumnIndex = colRest._index;
1590
+ }
1549
1591
  }
1550
- if ((rowList ? row : _xeUtils.default.isNumber(row)) && col && (rowspan || colspan)) {
1592
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
1551
1593
  rowspan = _xeUtils.default.toNumber(rowspan) || 1;
1552
1594
  colspan = _xeUtils.default.toNumber(colspan) || 1;
1553
1595
  if (rowspan > 1 || colspan > 1) {
1554
- const mcIndex = _xeUtils.default.findIndexOf(mList, item => item._row === row && item._col === col);
1555
- const mergeItem = mList[mcIndex];
1596
+ const row = afterFullData[mergeRowIndex];
1597
+ const column = visibleColumn[mergeColumnIndex];
1598
+ let mergeItem = mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
1556
1599
  if (mergeItem) {
1557
1600
  mergeItem.rowspan = rowspan;
1558
1601
  mergeItem.colspan = colspan;
1559
1602
  mergeItem._rowspan = rowspan;
1560
1603
  mergeItem._colspan = colspan;
1561
1604
  } else {
1562
- const mergeRowIndex = rowList ? rowList.indexOf(row) : row;
1563
- const mergeColIndex = visibleColumn.indexOf(col);
1564
- mList.push({
1605
+ mergeItem = {
1565
1606
  row: mergeRowIndex,
1566
- col: mergeColIndex,
1607
+ col: mergeColumnIndex,
1567
1608
  rowspan,
1568
1609
  colspan,
1569
1610
  _row: row,
1570
- _col: col,
1611
+ _col: column,
1571
1612
  _rowspan: rowspan,
1572
1613
  _colspan: colspan
1573
- });
1614
+ };
1615
+ mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
1616
+ mergeBodyList.push(mergeItem);
1574
1617
  }
1575
1618
  }
1576
1619
  }
1577
1620
  });
1578
1621
  }
1579
- }
1622
+ };
1623
+ const handleFooterMerge = ($xeTable, merges) => {
1624
+ const reactData = $xeTable;
1625
+ const internalData = $xeTable;
1626
+ const {
1627
+ footerTableData
1628
+ } = reactData;
1629
+ const {
1630
+ mergeFooterList,
1631
+ mergeFooterMaps
1632
+ } = internalData;
1633
+ if (merges) {
1634
+ const {
1635
+ visibleColumn
1636
+ } = internalData;
1637
+ if (!_xeUtils.default.isArray(merges)) {
1638
+ merges = [merges];
1639
+ }
1640
+ merges.forEach(item => {
1641
+ let {
1642
+ row: margeRow,
1643
+ col: margeCol,
1644
+ rowspan,
1645
+ colspan
1646
+ } = item;
1647
+ const mergeRowIndex = _xeUtils.default.isNumber(margeRow) ? margeRow : -1;
1648
+ let mergeColumnIndex = -1;
1649
+ if (_xeUtils.default.isNumber(margeCol)) {
1650
+ mergeColumnIndex = margeCol;
1651
+ }
1652
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
1653
+ rowspan = _xeUtils.default.toNumber(rowspan) || 1;
1654
+ colspan = _xeUtils.default.toNumber(colspan) || 1;
1655
+ if (rowspan > 1 || colspan > 1) {
1656
+ const row = footerTableData[mergeRowIndex];
1657
+ const column = visibleColumn[mergeColumnIndex];
1658
+ let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
1659
+ if (mergeItem) {
1660
+ mergeItem.rowspan = rowspan;
1661
+ mergeItem.colspan = colspan;
1662
+ mergeItem._rowspan = rowspan;
1663
+ mergeItem._colspan = colspan;
1664
+ } else {
1665
+ mergeItem = {
1666
+ row: mergeRowIndex,
1667
+ col: mergeColumnIndex,
1668
+ rowspan,
1669
+ colspan,
1670
+ _row: row,
1671
+ _col: column,
1672
+ _rowspan: rowspan,
1673
+ _colspan: colspan
1674
+ };
1675
+ mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
1676
+ mergeFooterList.push(mergeItem);
1677
+ }
1678
+ }
1679
+ }
1680
+ });
1681
+ }
1682
+ };
1580
1683
  function removeMerges($xeTable, merges, mList, rowList) {
1581
1684
  // const props = $xeTable
1582
1685
  const internalData = $xeTable;
@@ -2311,11 +2414,11 @@ function loadScrollXData($xeTable) {
2311
2414
  const reactData = $xeTable;
2312
2415
  const internalData = $xeTable;
2313
2416
  const {
2314
- mergeList,
2315
- mergeFooterList,
2316
2417
  isScrollXBig
2317
2418
  } = reactData;
2318
2419
  const {
2420
+ mergeBodyList,
2421
+ mergeFooterList,
2319
2422
  scrollXStore
2320
2423
  } = internalData;
2321
2424
  const {
@@ -2334,7 +2437,7 @@ function loadScrollXData($xeTable) {
2334
2437
  };
2335
2438
  scrollXStore.visibleStartIndex = toVisibleIndex - 1;
2336
2439
  scrollXStore.visibleEndIndex = toVisibleIndex + visibleSize + 1;
2337
- calculateMergerOffsetIndex(mergeList.concat(mergeFooterList), offsetItem, 'col');
2440
+ calculateMergerOffsetIndex(mergeBodyList.concat(mergeFooterList), offsetItem, 'col');
2338
2441
  const {
2339
2442
  startIndex: offsetStartIndex,
2340
2443
  endIndex: offsetEndIndex
@@ -2559,11 +2662,11 @@ function loadScrollYData($xeTable) {
2559
2662
  const reactData = $xeTable;
2560
2663
  const internalData = $xeTable;
2561
2664
  const {
2562
- mergeList,
2563
2665
  isAllOverflow,
2564
2666
  isScrollYBig
2565
2667
  } = reactData;
2566
2668
  const {
2669
+ mergeBodyList,
2567
2670
  scrollYStore
2568
2671
  } = internalData;
2569
2672
  const {
@@ -2583,7 +2686,7 @@ function loadScrollYData($xeTable) {
2583
2686
  };
2584
2687
  scrollYStore.visibleStartIndex = toVisibleIndex - 1;
2585
2688
  scrollYStore.visibleEndIndex = toVisibleIndex + visibleSize + 1;
2586
- calculateMergerOffsetIndex(mergeList, offsetItem, 'row');
2689
+ calculateMergerOffsetIndex(mergeBodyList, offsetItem, 'row');
2587
2690
  const {
2588
2691
  startIndex: offsetStartIndex,
2589
2692
  endIndex: offsetEndIndex
@@ -3017,7 +3120,7 @@ const Methods = {
3017
3120
  * 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
3018
3121
  */
3019
3122
  syncData() {
3020
- (0, _log.warnLog)('vxe.error.delFunc', ['syncData', 'getData']);
3123
+ (0, _log.errLog)('vxe.error.delFunc', ['syncData', 'getData']);
3021
3124
  return this.$nextTick().then(() => {
3022
3125
  this.tableData = [];
3023
3126
  return this.$nextTick().then(() => this.loadTableData(this.tableFullData, true));
@@ -3028,38 +3131,43 @@ const Methods = {
3028
3131
  * 对于手动更改了排序、筛选...等条件后需要重新处理数据时可能会用到
3029
3132
  */
3030
3133
  updateData() {
3134
+ const $xeTable = this;
3135
+ const reactData = $xeTable;
3031
3136
  const {
3032
3137
  scrollXLoad,
3033
3138
  scrollYLoad
3034
- } = this;
3035
- return this.handleTableData(true).then(() => {
3036
- this.updateFooter();
3139
+ } = reactData;
3140
+ return $xeTable.handleTableData(true).then(() => {
3141
+ $xeTable.updateFooter();
3037
3142
  if (scrollXLoad || scrollYLoad) {
3038
3143
  if (scrollXLoad) {
3039
- this.updateScrollXSpace();
3144
+ $xeTable.updateScrollXSpace();
3040
3145
  }
3041
3146
  if (scrollYLoad) {
3042
- this.updateScrollYSpace();
3147
+ $xeTable.updateScrollYSpace();
3043
3148
  }
3044
- return this.refreshScroll();
3149
+ return $xeTable.refreshScroll();
3045
3150
  }
3046
3151
  }).then(() => {
3047
- this.updateCellAreas();
3048
- return this.recalculate(true);
3152
+ $xeTable.updateCellAreas();
3153
+ return $xeTable.recalculate(true);
3049
3154
  }).then(() => {
3050
3155
  // 存在滚动行为未结束情况
3051
- setTimeout(() => this.recalculate(), 50);
3156
+ setTimeout(() => $xeTable.recalculate(), 50);
3052
3157
  });
3053
3158
  },
3054
3159
  handleTableData(force) {
3055
3160
  const $xeTable = this;
3161
+ const reactData = $xeTable;
3162
+ const internalData = $xeTable;
3163
+ const {
3164
+ scrollYLoad
3165
+ } = reactData;
3056
3166
  const {
3057
- scrollYLoad,
3058
3167
  scrollYStore,
3059
- fullDataRowIdData,
3060
- afterFullData
3061
- } = this;
3062
- let fullList = afterFullData;
3168
+ fullDataRowIdData
3169
+ } = internalData;
3170
+ let fullList = internalData.afterFullData;
3063
3171
  // 是否进行数据处理
3064
3172
  if (force) {
3065
3173
  // 更新数据,处理筛选和排序
@@ -3068,14 +3176,17 @@ const Methods = {
3068
3176
  fullList = handleVirtualTreeToList($xeTable);
3069
3177
  }
3070
3178
  const tableData = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
3179
+ const visibleDataRowIdMaps = {};
3071
3180
  tableData.forEach((row, $index) => {
3072
3181
  const rowid = (0, _util.getRowid)(this, row);
3073
3182
  const rest = fullDataRowIdData[rowid];
3074
3183
  if (rest) {
3075
3184
  rest.$index = $index;
3076
3185
  }
3186
+ visibleDataRowIdMaps[rowid] = row;
3077
3187
  });
3078
3188
  this.tableData = tableData;
3189
+ internalData.visibleDataRowIdData = visibleDataRowIdMaps;
3079
3190
  return this.$nextTick();
3080
3191
  },
3081
3192
  /**
@@ -3160,7 +3271,7 @@ const Methods = {
3160
3271
  internalData.tableFullData = fullData;
3161
3272
  internalData.tableFullTreeData = treeData;
3162
3273
  // 缓存数据
3163
- $xeTable.cacheRowMap(true);
3274
+ $xeTable.cacheRowMap(isReset);
3164
3275
  // 原始数据
3165
3276
  internalData.tableSynchData = datas;
3166
3277
  if (isReset) {
@@ -3178,6 +3289,7 @@ const Methods = {
3178
3289
  $xeTable.clearMergeFooterItems();
3179
3290
  $xeTable.handleTableData(true);
3180
3291
  $xeTable.updateFooter();
3292
+ $xeTable.handleUpdateBodyMerge();
3181
3293
  return $xeTable.$nextTick().then(() => {
3182
3294
  updateHeight($xeTable);
3183
3295
  updateStyle($xeTable);
@@ -3352,7 +3464,7 @@ const Methods = {
3352
3464
  /**
3353
3465
  * 更新数据行的 Map
3354
3466
  */
3355
- cacheRowMap() {
3467
+ cacheRowMap(isReset) {
3356
3468
  const $xeTable = this;
3357
3469
  const props = $xeTable;
3358
3470
  const reactData = $xeTable;
@@ -3372,7 +3484,7 @@ const Methods = {
3372
3484
  const {
3373
3485
  lazy
3374
3486
  } = treeOpts;
3375
- const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
3487
+ const fullAllDataRowIdMaps = isReset ? {} : Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
3376
3488
  const fullDataRowIdMaps = {};
3377
3489
  const {
3378
3490
  handleUpdateRowId
@@ -6381,6 +6493,29 @@ const Methods = {
6381
6493
  this.updateCellAreas();
6382
6494
  this.recalculate(true);
6383
6495
  },
6496
+ /**
6497
+ * 处理合并
6498
+ */
6499
+ handleUpdateBodyMerge() {
6500
+ const $xeTable = this;
6501
+ const reactData = $xeTable;
6502
+ const internalData = $xeTable;
6503
+ const {
6504
+ mergeBodyList
6505
+ } = internalData;
6506
+ internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList);
6507
+ reactData.mergeBodyFlag++;
6508
+ },
6509
+ handleUpdateFooterMerge() {
6510
+ const $xeTable = this;
6511
+ const reactData = $xeTable;
6512
+ const internalData = $xeTable;
6513
+ const {
6514
+ mergeFooterList
6515
+ } = internalData;
6516
+ internalData.mergeFooterCellMaps = buildMergeData(mergeFooterList);
6517
+ reactData.mergeFootFlag++;
6518
+ },
6384
6519
  handleTargetLeaveEvent() {
6385
6520
  const $xeTable = this;
6386
6521
  const internalData = $xeTable;
@@ -10569,26 +10704,33 @@ const Methods = {
10569
10704
  */
10570
10705
  updateFooter() {
10571
10706
  const $xeTable = this;
10707
+ const props = $xeTable;
10708
+ const reactData = $xeTable;
10709
+ const internalData = $xeTable;
10572
10710
  const $xeGrid = $xeTable.$xeGrid;
10573
10711
  const {
10574
10712
  showFooter,
10575
- visibleColumn,
10576
10713
  footerData,
10577
10714
  footerMethod
10578
- } = this;
10715
+ } = props;
10716
+ const {
10717
+ visibleColumn,
10718
+ afterFullData
10719
+ } = internalData;
10579
10720
  let footData = [];
10580
10721
  if (showFooter && footerData && footerData.length) {
10581
10722
  footData = footerData.slice(0);
10582
10723
  } else if (showFooter && footerMethod) {
10583
10724
  footData = visibleColumn.length ? footerMethod({
10584
10725
  columns: visibleColumn,
10585
- data: this.afterFullData,
10726
+ data: afterFullData,
10586
10727
  $table: $xeTable,
10587
10728
  $grid: $xeGrid
10588
10729
  }) : [];
10589
10730
  }
10590
- this.footerTableData = footData;
10591
- return this.$nextTick();
10731
+ reactData.footerTableData = footData;
10732
+ $xeTable.handleUpdateFooterMerge();
10733
+ return $xeTable.$nextTick();
10592
10734
  },
10593
10735
  /**
10594
10736
  * 更新列状态 updateStatus({ row, column }, cellValue)
@@ -10613,12 +10755,14 @@ const Methods = {
10613
10755
  */
10614
10756
  setMergeCells(merges) {
10615
10757
  const $xeTable = this;
10616
- if (this.spanMethod) {
10758
+ const props = $xeTable;
10759
+ if (props.spanMethod) {
10617
10760
  (0, _log.errLog)('vxe.error.errConflicts', ['merge-cells', 'span-method']);
10618
10761
  }
10619
- setMerges(this, merges, this.mergeList, this.afterFullData);
10620
- return this.$nextTick().then(() => {
10621
- this.updateCellAreas();
10762
+ handleBodyMerge($xeTable, merges);
10763
+ $xeTable.handleUpdateBodyMerge();
10764
+ return $xeTable.$nextTick().then(() => {
10765
+ $xeTable.updateCellAreas();
10622
10766
  return updateStyle($xeTable);
10623
10767
  });
10624
10768
  },
@@ -10628,12 +10772,14 @@ const Methods = {
10628
10772
  */
10629
10773
  removeMergeCells(merges) {
10630
10774
  const $xeTable = this;
10631
- if (this.spanMethod) {
10775
+ const props = $xeTable;
10776
+ const internalData = $xeTable;
10777
+ if (props.spanMethod) {
10632
10778
  (0, _log.errLog)('vxe.error.errConflicts', ['merge-cells', 'span-method']);
10633
10779
  }
10634
- const rest = removeMerges(this, merges, this.mergeList, this.afterFullData);
10635
- return this.$nextTick().then(() => {
10636
- this.updateCellAreas();
10780
+ const rest = removeMerges($xeTable, merges, internalData.mergeBodyList, internalData.afterFullData);
10781
+ return $xeTable.$nextTick().then(() => {
10782
+ $xeTable.updateCellAreas();
10637
10783
  updateStyle($xeTable);
10638
10784
  return rest;
10639
10785
  });
@@ -10642,37 +10788,46 @@ const Methods = {
10642
10788
  * 获取所有被合并的单元格
10643
10789
  */
10644
10790
  getMergeCells() {
10645
- return this.mergeList.slice(0);
10791
+ const $xeTable = this;
10792
+ const internalData = $xeTable;
10793
+ return internalData.mergeBodyList.slice(0);
10646
10794
  },
10647
10795
  /**
10648
10796
  * 清除所有单元格合并
10649
10797
  */
10650
10798
  clearMergeCells() {
10651
10799
  const $xeTable = this;
10652
- this.mergeList = [];
10653
- return this.$nextTick().then(() => {
10800
+ const internalData = $xeTable;
10801
+ internalData.mergeBodyList = [];
10802
+ internalData.mergeBodyMaps = {};
10803
+ internalData.mergeBodyCellMaps = {};
10804
+ return $xeTable.$nextTick().then(() => {
10654
10805
  return updateStyle($xeTable);
10655
10806
  });
10656
10807
  },
10657
10808
  setMergeFooterItems(merges) {
10658
10809
  const $xeTable = this;
10659
- if (this.footerSpanMethod) {
10810
+ const props = $xeTable;
10811
+ if (props.footerSpanMethod) {
10660
10812
  (0, _log.errLog)('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
10661
10813
  }
10662
- setMerges(this, merges, this.mergeFooterList);
10663
- return this.$nextTick().then(() => {
10664
- this.updateCellAreas();
10814
+ handleFooterMerge($xeTable, merges);
10815
+ $xeTable.handleUpdateFooterMerge();
10816
+ return $xeTable.$nextTick().then(() => {
10817
+ $xeTable.updateCellAreas();
10665
10818
  return updateStyle($xeTable);
10666
10819
  });
10667
10820
  },
10668
10821
  removeMergeFooterItems(merges) {
10669
10822
  const $xeTable = this;
10670
- if (this.footerSpanMethod) {
10823
+ const props = $xeTable;
10824
+ const internalData = $xeTable;
10825
+ if (props.footerSpanMethod) {
10671
10826
  (0, _log.errLog)('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
10672
10827
  }
10673
- const rest = removeMerges(this, merges, this.mergeFooterList, null);
10674
- return this.$nextTick().then(() => {
10675
- this.updateCellAreas();
10828
+ const rest = removeMerges($xeTable, merges, internalData.mergeFooterList);
10829
+ return $xeTable.$nextTick().then(() => {
10830
+ $xeTable.updateCellAreas();
10676
10831
  updateStyle($xeTable);
10677
10832
  return rest;
10678
10833
  });
@@ -10681,15 +10836,20 @@ const Methods = {
10681
10836
  * 获取所有被合并的表尾
10682
10837
  */
10683
10838
  getMergeFooterItems() {
10684
- return this.mergeFooterList.slice(0);
10839
+ const $xeTable = this;
10840
+ const internalData = $xeTable;
10841
+ return internalData.mergeFooterList.slice(0);
10685
10842
  },
10686
10843
  /**
10687
10844
  * 清除所有表尾合并
10688
10845
  */
10689
10846
  clearMergeFooterItems() {
10690
10847
  const $xeTable = this;
10691
- this.mergeFooterList = [];
10692
- return this.$nextTick().then(() => {
10848
+ const internalData = $xeTable;
10849
+ internalData.mergeFooterList = [];
10850
+ internalData.mergeFooterMaps = {};
10851
+ internalData.mergeFooterCellMaps = {};
10852
+ return $xeTable.$nextTick().then(() => {
10693
10853
  return updateStyle($xeTable);
10694
10854
  });
10695
10855
  },