vxe-table 4.12.5 → 4.13.0-beta.1

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 (50) hide show
  1. package/es/grid/src/grid.js +2 -2
  2. package/es/style.css +1 -1
  3. package/es/table/module/edit/hook.js +10 -9
  4. package/es/table/module/export/hook.js +13 -11
  5. package/es/table/module/keyboard/hook.js +2 -2
  6. package/es/table/src/body.js +11 -13
  7. package/es/table/src/footer.js +3 -16
  8. package/es/table/src/table.js +187 -64
  9. package/es/table/src/util.js +0 -13
  10. package/es/ui/index.js +2 -2
  11. package/es/ui/src/log.js +1 -1
  12. package/lib/grid/src/grid.js +2 -2
  13. package/lib/grid/src/grid.min.js +1 -1
  14. package/lib/index.umd.js +8467 -8510
  15. package/lib/index.umd.min.js +1 -1
  16. package/lib/style.css +1 -1
  17. package/lib/table/module/edit/hook.js +9 -9
  18. package/lib/table/module/edit/hook.min.js +1 -1
  19. package/lib/table/module/export/hook.js +16 -13
  20. package/lib/table/module/export/hook.min.js +1 -1
  21. package/lib/table/module/keyboard/hook.js +2 -2
  22. package/lib/table/module/keyboard/hook.min.js +1 -1
  23. package/lib/table/src/body.js +14 -15
  24. package/lib/table/src/body.min.js +1 -1
  25. package/lib/table/src/footer.js +4 -27
  26. package/lib/table/src/footer.min.js +1 -1
  27. package/lib/table/src/table.js +212 -64
  28. package/lib/table/src/table.min.js +1 -1
  29. package/lib/table/src/util.js +0 -25
  30. package/lib/table/src/util.min.js +1 -1
  31. package/lib/ui/index.js +2 -2
  32. package/lib/ui/index.min.js +1 -1
  33. package/lib/ui/src/log.js +1 -1
  34. package/lib/ui/src/log.min.js +1 -1
  35. package/package.json +2 -2
  36. package/packages/grid/src/grid.ts +2 -2
  37. package/packages/table/module/edit/hook.ts +10 -9
  38. package/packages/table/module/export/hook.ts +15 -13
  39. package/packages/table/module/keyboard/hook.ts +2 -2
  40. package/packages/table/src/body.ts +11 -13
  41. package/packages/table/src/footer.ts +3 -17
  42. package/packages/table/src/table.ts +185 -65
  43. package/packages/table/src/util.ts +0 -14
  44. package/packages/ui/index.ts +1 -1
  45. /package/es/{iconfont.1743479147314.ttf → iconfont.1743583449887.ttf} +0 -0
  46. /package/es/{iconfont.1743479147314.woff → iconfont.1743583449887.woff} +0 -0
  47. /package/es/{iconfont.1743479147314.woff2 → iconfont.1743583449887.woff2} +0 -0
  48. /package/lib/{iconfont.1743479147314.ttf → iconfont.1743583449887.ttf} +0 -0
  49. /package/lib/{iconfont.1743479147314.woff → iconfont.1743583449887.woff} +0 -0
  50. /package/lib/{iconfont.1743479147314.woff2 → iconfont.1743583449887.woff2} +0 -0
@@ -15,30 +15,6 @@ const {
15
15
  renderEmptyElement
16
16
  } = _ui.VxeUI;
17
17
  const renderType = 'footer';
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
  var _default = exports.default = (0, _vue.defineComponent)({
43
19
  name: 'VxeTableFooter',
44
20
  props: {
@@ -102,11 +78,12 @@ var _default = exports.default = (0, _vue.defineComponent)({
102
78
  scrollXLoad,
103
79
  scrollYLoad,
104
80
  overflowX,
105
- currentColumn,
106
- mergeFooterList
81
+ currentColumn
107
82
  } = tableReactData;
108
83
  const {
109
84
  fullColumnIdData,
85
+ mergeFooterList,
86
+ mergeFooterCellMaps,
110
87
  scrollXStore
111
88
  } = tableInternalData;
112
89
  const tooltipOpts = computeTooltipOpts.value;
@@ -201,7 +178,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
201
178
  let isMergeCell = false;
202
179
  // 合并行或列
203
180
  if (mergeFooterList.length) {
204
- const spanRest = mergeFooterMethod(mergeFooterList, _rowIndex, _columnIndex);
181
+ const spanRest = mergeFooterCellMaps[`${_rowIndex}:${_columnIndex}`];
205
182
  if (spanRest) {
206
183
  const {
207
184
  rowspan,
@@ -1 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../ui"),_dom=require("../../ui/src/dom"),_util=require("./util");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{renderer,renderEmptyElement}=_ui.VxeUI,renderType="footer";function mergeFooterMethod(l,t,o){for(let e=0;e<l.length;e++){var{row:r,col:i,rowspan:n,colspan:a}=l[e];if(-1<i&&-1<r&&n&&a){if(r===t&&i===o)return{rowspan:n,colspan:a};if(r<=t&&t<r+n&&i<=o&&o<i+a)return{rowspan:0,colspan:0}}}}var _default=exports.default=(0,_vue.defineComponent)({name:"VxeTableFooter",props:{footerTableData:{type:Array,default:()=>[]},tableColumn:{type:Array,default:()=>[]},fixedColumn:{type:Array,default:()=>[]},fixedType:{type:String,default:null}},setup(m){let J=(0,_vue.inject)("$xeTable",{}),{xID:g,props:_,reactData:h,internalData:b}=J,{computeTooltipOpts:l,computeColumnOpts:w,computeColumnDragOpts:y,computeCellOpts:t,computeFooterCellOpts:o,computeDefaultRowHeight:r,computeResizableOpts:i}=J.getComputeMaps(),C=(0,_vue.ref)(),T=(0,_vue.ref)(),F=(0,_vue.ref)(),D=(0,_vue.ref)(),O=(0,_vue.ref)(),I=(0,_vue.ref)(),S=(y,C,T,F,D)=>{let O=J.xeGrid,I=m.fixedType,{resizable:S,border:E,footerCellClassName:M,footerCellStyle:k,footerAlign:z,footerSpanMethod:U,align:R,columnKey:$,showFooterOverflow:A}=_,{scrollXLoad:j,scrollYLoad:q,overflowX:L,currentColumn:X,mergeFooterList:N}=h,{fullColumnIdData:G,scrollXStore:H}=b,P=l.value;let W=i.value.isAllColumnDrag,B=w.value;var e=r.value;let K=t.value,V=o.value,Y=(0,_util.getCellHeight)(V.height||K.height)||e;return y.map((l,e)=>{var{type:t,showFooterOverflow:o,footerAlign:r,align:i,footerClassName:n,editRender:a,cellRender:u}=l,s=l.id,d=G[s]||{},a=a||u,u=a?renderer.get(a.name):null;let c=P.showAll;var a=l.children&&l.children.length,a=I?l.fixed!==I&&!a:l.fixed&&L,p=(_xeUtils.default.isBoolean(V.padding)?V:K).padding,o=_xeUtils.default.eqNull(o)?A:o,r=r||(u?u.tableFooterCellAlign:"")||z||i||(u?u.tableCellAlign:"")||R;let f="ellipsis"===o,v="title"===o,x=!0===o||"tooltip"===o,m=v||x||f;var i=_xeUtils.default.isBoolean(l.resizable)?l.resizable:B.resizable||S,u={colid:s},o={},g=d.index,d=d._index,_=d;let h={$table:J,$grid:O,row:T,rowIndex:D,_rowIndex:D,$rowIndex:F,column:l,columnIndex:g,$columnIndex:e,_columnIndex:d,itemIndex:_,items:T,fixed:I,type:renderType,data:C},b=(j&&!m&&(f=m=!0),(v||x||c)&&(o.onMouseenter=e=>{v?(0,_dom.updateCellTitle)(e.currentTarget,l):(x||c)&&J.triggerFooterTooltipEvent(e,h)}),(x||c)&&(o.onMouseleave=e=>{(x||c)&&J.handleTargetLeaveEvent(e)}),o.onClick=e=>{J.dispatchEvent("footer-cell-click",Object.assign({cell:e.currentTarget},h),e)},!(o.onDblclick=e=>{J.dispatchEvent("footer-cell-dblclick",Object.assign({cell:e.currentTarget},h),e)}));if(N.length){g=mergeFooterMethod(N,D,d);if(g){var{rowspan:_,colspan:g}=g;if(!_||!g)return null;1<_&&(b=!0,u.rowspan=_),1<g&&(b=!0,u.colspan=g)}}else if(U){var{rowspan:_=1,colspan:g=1}=U(h)||{};if(!_||!g)return null;1<_&&(u.rowspan=_),1<g&&(u.colspan=g)}_=e===y.length-1,g=!l.resizeWidth&&("auto"===l.minWidth||"auto"===l.width);let w=!1;b||j&&!l.fixed&&(d<H.visibleStartIndex-H.preloadSize||d>H.visibleEndIndex+H.preloadSize)&&(w=!0);d={};return m?d.height=Y+"px":d.minHeight=Y+"px",(0,_vue.h)("td",Object.assign(Object.assign(Object.assign(Object.assign({class:["vxe-footer--column",l.id,{["col--"+r]:r,["col--"+t]:t,"col--last":_,"fixed--width":!g,"fixed--hidden":a,"is--padding":p,"col--ellipsis":m,"col--current":X===l},(0,_dom.getPropClass)(n,h),(0,_dom.getPropClass)(M,h)]},u),{style:k?_xeUtils.default.isFunction(k)?k(h):k:null}),o),{key:$||j||q||B.useKey||B.drag?l.id:e}),[(0,_vue.h)("div",{class:["vxe-cell",{"c--title":v,"c--tooltip":x,"c--ellipsis":f}],style:d},w?[]:[(0,_vue.h)("div",{colid:s,class:"vxe-cell--wrapper"},l.renderFooter(h))]),!a&&i&&W?(0,_vue.h)("div",{class:["vxe-cell--col-resizable",{"is--line":!E||"none"===E}],onMousedown:e=>J.handleColResizeMousedownEvent(e,I,h),onDblclick:e=>J.handleColResizeDblclickEvent(e,h)}):renderEmptyElement(J)])})};return(0,_vue.onMounted)(()=>{(0,_vue.nextTick)(()=>{var e=m.fixedType,l=b.elemStore,e=`${e||"main"}-footer-`;l[e+"wrapper"]=C,l[e+"scroll"]=T,l[e+"table"]=F,l[e+"colgroup"]=D,l[e+"list"]=O,l[e+"xSpace"]=I})}),(0,_vue.onUnmounted)(()=>{var e=m.fixedType,l=b.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}),()=>{let{fixedType:l,fixedColumn:e,tableColumn:t}=m;var{spanMethod:o,footerSpanMethod:r,showFooterOverflow:i}=_,{visibleColumn:n,fullColumnIdData:a}=b,{isGroup:u,isColLoading:s,overflowX:d,scrollXLoad:c,scrollYLoad:p,dragCol:f}=h;let v=t,x=!(c||p||i)||o||r?!1:!0;return s||!l&&d||(v=n),l&&x&&(v=e||[]),l||u||c&&f&&2<v.length&&(p=a[f.id])&&(i=p._index,o=v[0],r=v[v.length-1],s=a[o.id],d=a[r.id],s)&&d&&(n=s._index,u=d._index,i<n?v=[f].concat(v):u<i&&(v=v.concat([f]))),(0,_vue.h)("div",{ref:C,class:["vxe-table--footer-wrapper",l?`fixed-${l}--wrapper`:"body--wrapper"],xid:g},[(0,_vue.h)("div",{ref:T,class:"vxe-table--footer-inner-wrapper",onScroll(e){J.triggerFooterScrollEvent(e,l)}},[l?renderEmptyElement(J):(0,_vue.h)("div",{ref:I,class:"vxe-body--x-space"}),(0,_vue.h)("table",{ref:F,class:"vxe-table--footer",xid:g,cellspacing:0,cellpadding:0,border:0},[(0,_vue.h)("colgroup",{ref:D},v.map((e,l)=>(0,_vue.h)("col",{name:e.id,key:l,style:{width:e.renderWidth+"px"}}))),(0,_vue.h)("tfoot",{ref:O},(r=>{let{fixedType:i,footerTableData:n}=m,{footerRowClassName:a,footerRowStyle:u}=_,{isColLoading:s,isDragColMove:d}=h,c=w.value,p=y.value;return n.map((e,l)=>{let t=l;var o={$table:J,row:e,_rowIndex:t,$rowIndex:l,fixed:i,type:renderType};return!s&&c.drag&&p.animation?(0,_vue.h)(_vue.TransitionGroup,{key:l,name:"vxe-header--col-list"+(d?"":"-disabled"),tag:"tr",class:["vxe-footer--row",a?_xeUtils.default.isFunction(a)?a(o):a:""],style:u?_xeUtils.default.isFunction(u)?u(o):u:null},{default:()=>S(r,n,e,l,t)}):(0,_vue.h)("tr",{key:l,class:["vxe-footer--row",a?_xeUtils.default.isFunction(a)?a(o):a:""],style:u?_xeUtils.default.isFunction(u)?u(o):u:null},S(r,n,e,l,t))})})(v))])])])}}});
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../ui"),_dom=require("../../ui/src/dom"),_util=require("./util");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{renderer,renderEmptyElement}=_ui.VxeUI,renderType="footer";var _default=exports.default=(0,_vue.defineComponent)({name:"VxeTableFooter",props:{footerTableData:{type:Array,default:()=>[]},tableColumn:{type:Array,default:()=>[]},fixedColumn:{type:Array,default:()=>[]},fixedType:{type:String,default:null}},setup(m){let Q=(0,_vue.inject)("$xeTable",{}),{xID:g,props:_,reactData:h,internalData:b}=Q,{computeTooltipOpts:l,computeColumnOpts:y,computeColumnDragOpts:w,computeCellOpts:t,computeFooterCellOpts:o,computeDefaultRowHeight:r,computeResizableOpts:i}=Q.getComputeMaps(),C=(0,_vue.ref)(),T=(0,_vue.ref)(),D=(0,_vue.ref)(),F=(0,_vue.ref)(),O=(0,_vue.ref)(),I=(0,_vue.ref)(),S=(w,C,T,D,F)=>{let O=Q.xeGrid,I=m.fixedType,{resizable:S,border:E,footerCellClassName:M,footerCellStyle:k,footerAlign:z,footerSpanMethod:U,align:R,columnKey:$,showFooterOverflow:A}=_,{scrollXLoad:j,scrollYLoad:q,overflowX:L,currentColumn:X}=h,{fullColumnIdData:N,mergeFooterList:G,mergeFooterCellMaps:H,scrollXStore:P}=b,W=l.value;let B=i.value.isAllColumnDrag,K=y.value;var e=r.value;let V=t.value,Y=o.value,J=(0,_util.getCellHeight)(Y.height||V.height)||e;return w.map((l,e)=>{var{type:t,showFooterOverflow:o,footerAlign:r,align:i,footerClassName:a,editRender:n,cellRender:u}=l,d=l.id,s=N[d]||{},n=n||u,u=n?renderer.get(n.name):null;let c=W.showAll;var n=l.children&&l.children.length,n=I?l.fixed!==I&&!n:l.fixed&&L,p=(_xeUtils.default.isBoolean(Y.padding)?Y:V).padding,o=_xeUtils.default.eqNull(o)?A:o,r=r||(u?u.tableFooterCellAlign:"")||z||i||(u?u.tableCellAlign:"")||R;let f="ellipsis"===o,v="title"===o,x=!0===o||"tooltip"===o,m=v||x||f;var i=_xeUtils.default.isBoolean(l.resizable)?l.resizable:K.resizable||S,u={colid:d},o={},g=s.index,s=s._index,_=s;let h={$table:Q,$grid:O,row:T,rowIndex:F,_rowIndex:F,$rowIndex:D,column:l,columnIndex:g,$columnIndex:e,_columnIndex:s,itemIndex:_,items:T,fixed:I,type:renderType,data:C},b=(j&&!m&&(f=m=!0),(v||x||c)&&(o.onMouseenter=e=>{v?(0,_dom.updateCellTitle)(e.currentTarget,l):(x||c)&&Q.triggerFooterTooltipEvent(e,h)}),(x||c)&&(o.onMouseleave=e=>{(x||c)&&Q.handleTargetLeaveEvent(e)}),o.onClick=e=>{Q.dispatchEvent("footer-cell-click",Object.assign({cell:e.currentTarget},h),e)},!(o.onDblclick=e=>{Q.dispatchEvent("footer-cell-dblclick",Object.assign({cell:e.currentTarget},h),e)}));if(G.length){g=H[F+":"+s];if(g){var{rowspan:_,colspan:g}=g;if(!_||!g)return null;1<_&&(b=!0,u.rowspan=_),1<g&&(b=!0,u.colspan=g)}}else if(U){var{rowspan:_=1,colspan:g=1}=U(h)||{};if(!_||!g)return null;1<_&&(u.rowspan=_),1<g&&(u.colspan=g)}_=e===w.length-1,g=!l.resizeWidth&&("auto"===l.minWidth||"auto"===l.width);let y=!1;b||j&&!l.fixed&&(s<P.visibleStartIndex-P.preloadSize||s>P.visibleEndIndex+P.preloadSize)&&(y=!0);s={};return m?s.height=J+"px":s.minHeight=J+"px",(0,_vue.h)("td",Object.assign(Object.assign(Object.assign(Object.assign({class:["vxe-footer--column",l.id,{["col--"+r]:r,["col--"+t]:t,"col--last":_,"fixed--width":!g,"fixed--hidden":n,"is--padding":p,"col--ellipsis":m,"col--current":X===l},(0,_dom.getPropClass)(a,h),(0,_dom.getPropClass)(M,h)]},u),{style:k?_xeUtils.default.isFunction(k)?k(h):k:null}),o),{key:$||j||q||K.useKey||K.drag?l.id:e}),[(0,_vue.h)("div",{class:["vxe-cell",{"c--title":v,"c--tooltip":x,"c--ellipsis":f}],style:s},y?[]:[(0,_vue.h)("div",{colid:d,class:"vxe-cell--wrapper"},l.renderFooter(h))]),!n&&i&&B?(0,_vue.h)("div",{class:["vxe-cell--col-resizable",{"is--line":!E||"none"===E}],onMousedown:e=>Q.handleColResizeMousedownEvent(e,I,h),onDblclick:e=>Q.handleColResizeDblclickEvent(e,h)}):renderEmptyElement(Q)])})};return(0,_vue.onMounted)(()=>{(0,_vue.nextTick)(()=>{var e=m.fixedType,l=b.elemStore,e=`${e||"main"}-footer-`;l[e+"wrapper"]=C,l[e+"scroll"]=T,l[e+"table"]=D,l[e+"colgroup"]=F,l[e+"list"]=O,l[e+"xSpace"]=I})}),(0,_vue.onUnmounted)(()=>{var e=m.fixedType,l=b.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}),()=>{let{fixedType:l,fixedColumn:e,tableColumn:t}=m;var{spanMethod:o,footerSpanMethod:r,showFooterOverflow:i}=_,{visibleColumn:a,fullColumnIdData:n}=b,{isGroup:u,isColLoading:d,overflowX:s,scrollXLoad:c,scrollYLoad:p,dragCol:f}=h;let v=t,x=!(c||p||i)||o||r?!1:!0;return d||!l&&s||(v=a),l&&x&&(v=e||[]),l||u||c&&f&&2<v.length&&(p=n[f.id])&&(i=p._index,o=v[0],r=v[v.length-1],d=n[o.id],s=n[r.id],d)&&s&&(a=d._index,u=s._index,i<a?v=[f].concat(v):u<i&&(v=v.concat([f]))),(0,_vue.h)("div",{ref:C,class:["vxe-table--footer-wrapper",l?`fixed-${l}--wrapper`:"body--wrapper"],xid:g},[(0,_vue.h)("div",{ref:T,class:"vxe-table--footer-inner-wrapper",onScroll(e){Q.triggerFooterScrollEvent(e,l)}},[l?renderEmptyElement(Q):(0,_vue.h)("div",{ref:I,class:"vxe-body--x-space"}),(0,_vue.h)("table",{ref:D,class:"vxe-table--footer",xid:g,cellspacing:0,cellpadding:0,border:0},[(0,_vue.h)("colgroup",{ref:F},v.map((e,l)=>(0,_vue.h)("col",{name:e.id,key:l,style:{width:e.renderWidth+"px"}}))),(0,_vue.h)("tfoot",{ref:O},(r=>{let{fixedType:i,footerTableData:a}=m,{footerRowClassName:n,footerRowStyle:u}=_,{isColLoading:d,isDragColMove:s}=h,c=y.value,p=w.value;return a.map((e,l)=>{let t=l;var o={$table:Q,row:e,_rowIndex:t,$rowIndex:l,fixed:i,type:renderType};return!d&&c.drag&&p.animation?(0,_vue.h)(_vue.TransitionGroup,{key:l,name:"vxe-header--col-list"+(s?"":"-disabled"),tag:"tr",class:["vxe-footer--row",n?_xeUtils.default.isFunction(n)?n(o):n:""],style:u?_xeUtils.default.isFunction(u)?u(o):u:null},{default:()=>S(r,a,e,l,t)}):(0,_vue.h)("tr",{key:l,class:["vxe-footer--row",n?_xeUtils.default.isFunction(n)?n(o):n:""],style:u?_xeUtils.default.isFunction(u)?u(o):u:null},S(r,a,e,l,t))})})(v))])])])}}});
@@ -108,10 +108,6 @@ var _default = exports.default = (0, _vue.defineComponent)({
108
108
  // 树节点列信息
109
109
  treeNodeColumn: null,
110
110
  hasFixedColumn: false,
111
- // 合并单元格的对象集
112
- mergeList: [],
113
- // 合并表尾数据的对象集
114
- mergeFooterList: [],
115
111
  // 刷新列标识,当列筛选被改变时,触发表格刷新数据
116
112
  upDataFlag: 0,
117
113
  // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
@@ -264,6 +260,8 @@ var _default = exports.default = (0, _vue.defineComponent)({
264
260
  pendingRowFlag: 1,
265
261
  insertRowFlag: 1,
266
262
  removeRowFlag: 1,
263
+ mergeBodyFlag: 1,
264
+ mergeFootFlag: 1,
267
265
  rowHeightStore: {
268
266
  default: 48,
269
267
  medium: 44,
@@ -356,13 +354,26 @@ var _default = exports.default = (0, _vue.defineComponent)({
356
354
  tableFullColumn: [],
357
355
  // 渲染所有列
358
356
  visibleColumn: [],
359
- // 总的缓存数据集
357
+ // 全量数据集(包括当前和已删除)
360
358
  fullAllDataRowIdData: {},
359
+ // 数据集(仅当前)
360
+ fullDataRowIdData: {},
361
+ // 数据集(仅可视)
362
+ visibleDataRowIdData: {},
361
363
  // 渲染中缓存数据
362
364
  sourceDataRowIdData: {},
363
- fullDataRowIdData: {},
364
365
  fullColumnIdData: {},
365
366
  fullColumnFieldData: {},
367
+ // 合并单元格的数据
368
+ mergeBodyList: [],
369
+ mergeBodyMaps: {},
370
+ // 合并表尾的数据
371
+ mergeFooterList: [],
372
+ mergeFooterMaps: {},
373
+ // 已合并单元格数据集合
374
+ mergeBodyCellMaps: {},
375
+ // 已合并表尾数据集合
376
+ mergeFooterCellMaps: {},
366
377
  // 已展开的行集合
367
378
  rowExpandedMaps: {},
368
379
  // 懒加载中的展开行的集合
@@ -694,25 +705,28 @@ var _default = exports.default = (0, _vue.defineComponent)({
694
705
  return Object.assign({}, getConfig().table.customConfig, props.customConfig);
695
706
  });
696
707
  const computeTableRowExpandedList = (0, _vue.computed)(() => {
708
+ const {
709
+ treeConfig
710
+ } = props;
697
711
  const {
698
712
  rowExpandedFlag,
699
- tableData,
700
713
  expandColumn
701
714
  } = reactData;
702
715
  const {
716
+ visibleDataRowIdData,
703
717
  rowExpandedMaps
704
718
  } = internalData;
719
+ const treeOpts = computeTreeOpts.value;
705
720
  const {
706
- handleGetRowId
707
- } = (0, _util.createHandleGetRowId)($xeTable);
721
+ transform
722
+ } = treeOpts;
708
723
  const expandList = [];
709
724
  if (expandColumn && rowExpandedFlag) {
710
- const rowKeys = {};
711
- tableData.forEach(row => {
712
- rowKeys[handleGetRowId(row)] = true;
713
- });
725
+ if (treeConfig && !transform) {
726
+ return _xeUtils.default.values(rowExpandedMaps);
727
+ }
714
728
  _xeUtils.default.each(rowExpandedMaps, (row, rowid) => {
715
- if (rowKeys[rowid]) {
729
+ if (visibleDataRowIdData[rowid]) {
716
730
  expandList.push(row);
717
731
  }
718
732
  });
@@ -1153,55 +1167,157 @@ var _default = exports.default = (0, _vue.defineComponent)({
1153
1167
  }
1154
1168
  }
1155
1169
  };
1156
- const setMerges = (merges, mList, rowList) => {
1170
+ function buildMergeData(mergeConfigs) {
1171
+ const mergeMaps = {};
1172
+ if (mergeConfigs && mergeConfigs.length) {
1173
+ for (let mIndex = 0; mIndex < mergeConfigs.length; mIndex++) {
1174
+ const {
1175
+ row: _rowIndex,
1176
+ col: _columnIndex,
1177
+ rowspan: mergeRowspan,
1178
+ colspan: mergeColspan
1179
+ } = mergeConfigs[mIndex];
1180
+ for (let i = 0; i < mergeRowspan; i++) {
1181
+ for (let j = 0; j < mergeColspan; j++) {
1182
+ mergeMaps[`${_rowIndex + i}:${_columnIndex + j}`] = !i && !j ? {
1183
+ rowspan: mergeRowspan,
1184
+ colspan: mergeColspan
1185
+ } : {
1186
+ rowspan: 0,
1187
+ colspan: 0
1188
+ };
1189
+ }
1190
+ }
1191
+ }
1192
+ }
1193
+ return mergeMaps;
1194
+ }
1195
+ const handleBodyMerge = merges => {
1196
+ const {
1197
+ fullAllDataRowIdData,
1198
+ fullColumnIdData,
1199
+ visibleColumn,
1200
+ afterFullData,
1201
+ mergeBodyList,
1202
+ mergeBodyMaps
1203
+ } = internalData;
1204
+ if (merges) {
1205
+ const {
1206
+ handleGetRowId
1207
+ } = (0, _util.createHandleGetRowId)($xeTable);
1208
+ if (!_xeUtils.default.isArray(merges)) {
1209
+ merges = [merges];
1210
+ }
1211
+ merges.forEach(item => {
1212
+ let {
1213
+ row: margeRow,
1214
+ col: margeCol,
1215
+ rowspan,
1216
+ colspan
1217
+ } = item;
1218
+ let mergeRowIndex = -1;
1219
+ let mergeColumnIndex = -1;
1220
+ if (_xeUtils.default.isNumber(margeRow)) {
1221
+ mergeRowIndex = margeRow;
1222
+ } else {
1223
+ const rowid = margeRow ? handleGetRowId(margeRow) : null;
1224
+ const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
1225
+ if (rowRest) {
1226
+ mergeRowIndex = rowRest._index;
1227
+ }
1228
+ }
1229
+ if (_xeUtils.default.isNumber(margeCol)) {
1230
+ mergeColumnIndex = margeCol;
1231
+ } else {
1232
+ const colid = margeCol ? margeCol.id : null;
1233
+ const colRest = colid ? fullColumnIdData[colid] : null;
1234
+ if (colRest) {
1235
+ mergeColumnIndex = colRest._index;
1236
+ }
1237
+ }
1238
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
1239
+ rowspan = _xeUtils.default.toNumber(rowspan) || 1;
1240
+ colspan = _xeUtils.default.toNumber(colspan) || 1;
1241
+ if (rowspan > 1 || colspan > 1) {
1242
+ const row = afterFullData[mergeRowIndex];
1243
+ const column = visibleColumn[mergeColumnIndex];
1244
+ let mergeItem = mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
1245
+ if (mergeItem) {
1246
+ mergeItem.rowspan = rowspan;
1247
+ mergeItem.colspan = colspan;
1248
+ mergeItem._rowspan = rowspan;
1249
+ mergeItem._colspan = colspan;
1250
+ } else {
1251
+ mergeItem = {
1252
+ row: mergeRowIndex,
1253
+ col: mergeColumnIndex,
1254
+ rowspan,
1255
+ colspan,
1256
+ _row: row,
1257
+ _col: column,
1258
+ _rowspan: rowspan,
1259
+ _colspan: colspan
1260
+ };
1261
+ mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
1262
+ mergeBodyList.push(mergeItem);
1263
+ }
1264
+ }
1265
+ }
1266
+ });
1267
+ }
1268
+ };
1269
+ const handleFooterMerge = merges => {
1270
+ const {
1271
+ footerTableData
1272
+ } = reactData;
1273
+ const {
1274
+ mergeFooterList,
1275
+ mergeFooterMaps
1276
+ } = internalData;
1157
1277
  if (merges) {
1158
- // const { treeConfig } = props
1159
1278
  const {
1160
1279
  visibleColumn
1161
1280
  } = internalData;
1162
1281
  if (!_xeUtils.default.isArray(merges)) {
1163
1282
  merges = [merges];
1164
1283
  }
1165
- // if (treeConfig && merges.length) {
1166
- // errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1167
- // }
1168
1284
  merges.forEach(item => {
1169
1285
  let {
1170
- row,
1171
- col,
1286
+ row: margeRow,
1287
+ col: margeCol,
1172
1288
  rowspan,
1173
1289
  colspan
1174
1290
  } = item;
1175
- if (rowList && _xeUtils.default.isNumber(row)) {
1176
- row = rowList[row];
1177
- }
1178
- if (_xeUtils.default.isNumber(col)) {
1179
- col = visibleColumn[col];
1291
+ const mergeRowIndex = _xeUtils.default.isNumber(margeRow) ? margeRow : -1;
1292
+ let mergeColumnIndex = -1;
1293
+ if (_xeUtils.default.isNumber(margeCol)) {
1294
+ mergeColumnIndex = margeCol;
1180
1295
  }
1181
- if ((rowList ? row : _xeUtils.default.isNumber(row)) && col && (rowspan || colspan)) {
1296
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
1182
1297
  rowspan = _xeUtils.default.toNumber(rowspan) || 1;
1183
1298
  colspan = _xeUtils.default.toNumber(colspan) || 1;
1184
1299
  if (rowspan > 1 || colspan > 1) {
1185
- const mcIndex = _xeUtils.default.findIndexOf(mList, item => (item._row === row || (0, _util.getRowid)($xeTable, item._row) === (0, _util.getRowid)($xeTable, row)) && (item._col.id === col || item._col.id === col.id));
1186
- const mergeItem = mList[mcIndex];
1300
+ const row = footerTableData[mergeRowIndex];
1301
+ const column = visibleColumn[mergeColumnIndex];
1302
+ let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
1187
1303
  if (mergeItem) {
1188
1304
  mergeItem.rowspan = rowspan;
1189
1305
  mergeItem.colspan = colspan;
1190
1306
  mergeItem._rowspan = rowspan;
1191
1307
  mergeItem._colspan = colspan;
1192
1308
  } else {
1193
- const mergeRowIndex = rowList ? $xeTable.findRowIndexOf(rowList, row) : row;
1194
- const mergeColIndex = tableMethods.getVTColumnIndex(col);
1195
- mList.push({
1309
+ mergeItem = {
1196
1310
  row: mergeRowIndex,
1197
- col: mergeColIndex,
1311
+ col: mergeColumnIndex,
1198
1312
  rowspan,
1199
1313
  colspan,
1200
1314
  _row: row,
1201
- _col: col,
1315
+ _col: column,
1202
1316
  _rowspan: rowspan,
1203
1317
  _colspan: colspan
1204
- });
1318
+ };
1319
+ mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
1320
+ mergeFooterList.push(mergeItem);
1205
1321
  }
1206
1322
  }
1207
1323
  }
@@ -3142,7 +3258,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
3142
3258
  internalData.tableFullData = fullData;
3143
3259
  internalData.tableFullTreeData = treeData;
3144
3260
  // 缓存数据
3145
- $xeTable.cacheRowMap(true);
3261
+ $xeTable.cacheRowMap(isReset);
3146
3262
  // 原始数据
3147
3263
  internalData.tableSynchData = datas;
3148
3264
  if (isReset) {
@@ -3160,6 +3276,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
3160
3276
  $xeTable.clearMergeFooterItems();
3161
3277
  $xeTable.handleTableData(true);
3162
3278
  $xeTable.updateFooter();
3279
+ $xeTable.handleUpdateBodyMerge();
3163
3280
  return (0, _vue.nextTick)().then(() => {
3164
3281
  updateHeight();
3165
3282
  updateStyle();
@@ -3274,11 +3391,11 @@ var _default = exports.default = (0, _vue.defineComponent)({
3274
3391
  };
3275
3392
  const loadScrollXData = () => {
3276
3393
  const {
3277
- mergeList,
3278
- mergeFooterList,
3279
3394
  isScrollXBig
3280
3395
  } = reactData;
3281
3396
  const {
3397
+ mergeBodyList,
3398
+ mergeFooterList,
3282
3399
  scrollXStore
3283
3400
  } = internalData;
3284
3401
  const {
@@ -3297,7 +3414,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
3297
3414
  };
3298
3415
  scrollXStore.visibleStartIndex = toVisibleIndex - 1;
3299
3416
  scrollXStore.visibleEndIndex = toVisibleIndex + visibleSize + 1;
3300
- calculateMergerOffsetIndex(mergeList.concat(mergeFooterList), offsetItem, 'col');
3417
+ calculateMergerOffsetIndex(mergeBodyList.concat(mergeFooterList), offsetItem, 'col');
3301
3418
  const {
3302
3419
  startIndex: offsetStartIndex,
3303
3420
  endIndex: offsetEndIndex
@@ -3648,11 +3765,11 @@ var _default = exports.default = (0, _vue.defineComponent)({
3648
3765
  */
3649
3766
  const loadScrollYData = () => {
3650
3767
  const {
3651
- mergeList,
3652
3768
  isAllOverflow,
3653
3769
  isScrollYBig
3654
3770
  } = reactData;
3655
3771
  const {
3772
+ mergeBodyList,
3656
3773
  scrollYStore
3657
3774
  } = internalData;
3658
3775
  const {
@@ -3672,7 +3789,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
3672
3789
  };
3673
3790
  scrollYStore.visibleStartIndex = toVisibleIndex - 1;
3674
3791
  scrollYStore.visibleEndIndex = toVisibleIndex + visibleSize + 1;
3675
- calculateMergerOffsetIndex(mergeList, offsetItem, 'row');
3792
+ calculateMergerOffsetIndex(mergeBodyList, offsetItem, 'row');
3676
3793
  const {
3677
3794
  startIndex: offsetStartIndex,
3678
3795
  endIndex: offsetEndIndex
@@ -4014,7 +4131,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
4014
4131
  * 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
4015
4132
  */
4016
4133
  syncData() {
4017
- (0, _log.warnLog)('vxe.error.delFunc', ['syncData', 'getData']);
4134
+ (0, _log.errLog)('vxe.error.delFunc', ['syncData', 'getData']);
4018
4135
  return (0, _vue.nextTick)().then(() => {
4019
4136
  reactData.tableData = [];
4020
4137
  emit('update:data', internalData.tableFullData);
@@ -6658,6 +6775,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
6658
6775
  }) : [];
6659
6776
  }
6660
6777
  reactData.footerTableData = footData;
6778
+ $xeTable.handleUpdateFooterMerge();
6661
6779
  return (0, _vue.nextTick)();
6662
6780
  },
6663
6781
  /**
@@ -6683,9 +6801,10 @@ var _default = exports.default = (0, _vue.defineComponent)({
6683
6801
  if (props.spanMethod) {
6684
6802
  (0, _log.errLog)('vxe.error.errConflicts', ['merge-cells', 'span-method']);
6685
6803
  }
6686
- setMerges(merges, reactData.mergeList, internalData.afterFullData);
6804
+ handleBodyMerge(merges);
6805
+ $xeTable.handleUpdateBodyMerge();
6687
6806
  return (0, _vue.nextTick)().then(() => {
6688
- tableMethods.updateCellAreas();
6807
+ $xeTable.updateCellAreas();
6689
6808
  return updateStyle();
6690
6809
  });
6691
6810
  },
@@ -6697,9 +6816,9 @@ var _default = exports.default = (0, _vue.defineComponent)({
6697
6816
  if (props.spanMethod) {
6698
6817
  (0, _log.errLog)('vxe.error.errConflicts', ['merge-cells', 'span-method']);
6699
6818
  }
6700
- const rest = removeMerges(merges, reactData.mergeList, internalData.afterFullData);
6819
+ const rest = removeMerges(merges, internalData.mergeBodyList, internalData.afterFullData);
6701
6820
  return (0, _vue.nextTick)().then(() => {
6702
- tableMethods.updateCellAreas();
6821
+ $xeTable.updateCellAreas();
6703
6822
  updateStyle();
6704
6823
  return rest;
6705
6824
  });
@@ -6708,13 +6827,15 @@ var _default = exports.default = (0, _vue.defineComponent)({
6708
6827
  * 获取所有被合并的单元格
6709
6828
  */
6710
6829
  getMergeCells() {
6711
- return reactData.mergeList.slice(0);
6830
+ return internalData.mergeBodyList.slice(0);
6712
6831
  },
6713
6832
  /**
6714
6833
  * 清除所有单元格合并
6715
6834
  */
6716
6835
  clearMergeCells() {
6717
- reactData.mergeList = [];
6836
+ internalData.mergeBodyList = [];
6837
+ internalData.mergeBodyMaps = {};
6838
+ internalData.mergeBodyCellMaps = {};
6718
6839
  return (0, _vue.nextTick)().then(() => {
6719
6840
  return updateStyle();
6720
6841
  });
@@ -6723,7 +6844,8 @@ var _default = exports.default = (0, _vue.defineComponent)({
6723
6844
  if (props.footerSpanMethod) {
6724
6845
  (0, _log.errLog)('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
6725
6846
  }
6726
- setMerges(merges, reactData.mergeFooterList);
6847
+ handleFooterMerge(merges);
6848
+ $xeTable.handleUpdateFooterMerge();
6727
6849
  return (0, _vue.nextTick)().then(() => {
6728
6850
  tableMethods.updateCellAreas();
6729
6851
  return updateStyle();
@@ -6733,7 +6855,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
6733
6855
  if (props.footerSpanMethod) {
6734
6856
  (0, _log.errLog)('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
6735
6857
  }
6736
- const rest = removeMerges(merges, reactData.mergeFooterList);
6858
+ const rest = removeMerges(merges, internalData.mergeFooterList);
6737
6859
  return (0, _vue.nextTick)().then(() => {
6738
6860
  tableMethods.updateCellAreas();
6739
6861
  updateStyle();
@@ -6744,13 +6866,15 @@ var _default = exports.default = (0, _vue.defineComponent)({
6744
6866
  * 获取所有被合并的表尾
6745
6867
  */
6746
6868
  getMergeFooterItems() {
6747
- return reactData.mergeFooterList.slice(0);
6869
+ return internalData.mergeFooterList.slice(0);
6748
6870
  },
6749
6871
  /**
6750
6872
  * 清除所有表尾合并
6751
6873
  */
6752
6874
  clearMergeFooterItems() {
6753
- reactData.mergeFooterList = [];
6875
+ internalData.mergeFooterList = [];
6876
+ internalData.mergeFooterMaps = {};
6877
+ internalData.mergeFooterCellMaps = {};
6754
6878
  return (0, _vue.nextTick)().then(() => {
6755
6879
  return updateStyle();
6756
6880
  });
@@ -7887,20 +8011,23 @@ var _default = exports.default = (0, _vue.defineComponent)({
7887
8011
  fullList = handleVirtualTreeToList();
7888
8012
  }
7889
8013
  const tableData = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
8014
+ const visibleDataRowIdMaps = {};
7890
8015
  tableData.forEach((row, $index) => {
7891
8016
  const rowid = (0, _util.getRowid)($xeTable, row);
7892
8017
  const rest = fullDataRowIdData[rowid];
7893
8018
  if (rest) {
7894
8019
  rest.$index = $index;
7895
8020
  }
8021
+ visibleDataRowIdMaps[rowid] = row;
7896
8022
  });
7897
8023
  reactData.tableData = tableData;
8024
+ internalData.visibleDataRowIdData = visibleDataRowIdMaps;
7898
8025
  return (0, _vue.nextTick)();
7899
8026
  },
7900
8027
  /**
7901
8028
  * 更新数据行的 Map
7902
8029
  */
7903
- cacheRowMap() {
8030
+ cacheRowMap(isReset) {
7904
8031
  const {
7905
8032
  treeConfig
7906
8033
  } = props;
@@ -7916,7 +8043,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
7916
8043
  const {
7917
8044
  lazy
7918
8045
  } = treeOpts;
7919
- const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
8046
+ const fullAllDataRowIdMaps = isReset ? {} : Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
7920
8047
  const fullDataRowIdMaps = {};
7921
8048
  const {
7922
8049
  handleUpdateRowId
@@ -8825,6 +8952,23 @@ var _default = exports.default = (0, _vue.defineComponent)({
8825
8952
  }, checked, isForce) {
8826
8953
  $xeTable.handleBatchSelectRows([row], checked, isForce);
8827
8954
  },
8955
+ /**
8956
+ * 处理合并
8957
+ */
8958
+ handleUpdateBodyMerge() {
8959
+ const {
8960
+ mergeBodyList
8961
+ } = internalData;
8962
+ internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList);
8963
+ reactData.mergeBodyFlag++;
8964
+ },
8965
+ handleUpdateFooterMerge() {
8966
+ const {
8967
+ mergeFooterList
8968
+ } = internalData;
8969
+ internalData.mergeFooterCellMaps = buildMergeData(mergeFooterList);
8970
+ reactData.mergeFootFlag++;
8971
+ },
8828
8972
  triggerHeaderTitleEvent(evnt, iconParams, params) {
8829
8973
  const tipContent = iconParams.content || iconParams.message;
8830
8974
  if (tipContent) {
@@ -11239,20 +11383,22 @@ var _default = exports.default = (0, _vue.defineComponent)({
11239
11383
  } = treeOpts;
11240
11384
  const cellStyle = {};
11241
11385
  const rowid = handleGetRowId(row);
11242
- const rest = fullAllDataRowIdData[rowid];
11386
+ const rowRest = fullAllDataRowIdData[rowid];
11243
11387
  let rowLevel = 0;
11244
11388
  let seq = -1;
11245
- let _rowIndex = 0;
11246
- const rowIndex = $xeTable.getRowIndex(row);
11247
- const $rowIndex = $xeTable.getVMRowIndex(row);
11248
- if (rest) {
11249
- rowLevel = rest.level;
11389
+ let _rowIndex = -1;
11390
+ let rowIndex = -1;
11391
+ let $rowIndex = -1;
11392
+ if (rowRest) {
11393
+ rowLevel = rowRest.level;
11250
11394
  if (treeConfig && transform && seqMode === 'increasing') {
11251
- seq = rest._index + 1;
11395
+ seq = rowRest._index + 1;
11252
11396
  } else {
11253
- seq = rest.seq;
11397
+ seq = rowRest.seq;
11254
11398
  }
11255
- _rowIndex = rest._index;
11399
+ rowIndex = rowRest.index;
11400
+ $rowIndex = rowRest.$index;
11401
+ _rowIndex = rowRest._index;
11256
11402
  }
11257
11403
  if (expandHeight) {
11258
11404
  cellStyle.height = `${expandHeight}px`;
@@ -11835,6 +11981,8 @@ var _default = exports.default = (0, _vue.defineComponent)({
11835
11981
  if (columnOpts.drag || rowOpts.drag || customOpts.allowSort) {
11836
11982
  (0, _dom.initTpImg)();
11837
11983
  }
11984
+ ;
11985
+ window.aa = $xeTable;
11838
11986
  (0, _vue.nextTick)(() => {
11839
11987
  const {
11840
11988
  data,
@@ -11927,7 +12075,7 @@ var _default = exports.default = (0, _vue.defineComponent)({
11927
12075
  if (rowOpts.height && !props.showOverflow) {
11928
12076
  (0, _log.warnLog)('vxe.error.notProp', ['table.show-overflow']);
11929
12077
  }
11930
- if (!$xeTable.handleCellAreaMousedownEvent) {
12078
+ if (!$xeTable.triggerCellAreaMousedownEvent) {
11931
12079
  if (props.areaConfig) {
11932
12080
  (0, _log.warnLog)('vxe.error.notProp', ['area-config']);
11933
12081
  }