vxe-table
Version:
A PC-end table component based on Vxe UI, supporting copy-paste, data pivot table, and high-performance virtual list table solution.
1 lines • 14.3 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../ui/src/comp"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../ui"),_util=require("./util"),_dom=require("../../ui/src/dom"),_utils=require("../../ui/src/utils"),_vn=require("../../ui/src/vn");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{getI18n,renderer,renderEmptyElement}=_ui.VxeUI,sourceType="table",renderType="body";var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeTableBody",props:{tableData:Array,tableColumn:Array,fixedColumn:Array,fixedType:{type:String,default:""}},setup(C){let Qe=(0,_vue.inject)("$xeTable",{}),{xID:R,props:Ze,context:E,reactData:el,internalData:ll}=Qe,{computeEditOpts:tl,computeMouseOpts:al,computeCellOffsetWidth:rl,computeAreaOpts:ol,computeDefaultRowHeight:il,computeEmptyOpts:D,computeTooltipOpts:sl,computeRadioOpts:e,computeExpandOpts:ae,computeTreeOpts:l,computeCheckboxOpts:nl,computeCellOpts:dl,computeValidOpts:ul,computeRowOpts:cl,computeColumnOpts:pl,computeRowDragOpts:vl,computeResizableOpts:gl,computeVirtualXOpts:xl,computeVirtualYOpts:hl,computeIsBodyRenderOptimize:q}=Qe.getComputeMaps(),I=(0,_vue.ref)(),O=(0,_vue.ref)(),S=(0,_vue.ref)(),M=(0,_vue.ref)(),T=(0,_vue.ref)(),k=(0,_vue.ref)(),$=(0,_vue.ref)(),z=(0,_vue.ref)(),ml=()=>{var e=Ze.delayHover,{lastScrollTime:l,isDragResize:t}=el;return!!(t||l&&Date.now()<l+e)},wl=(r,o,i)=>{var s=o.column,n=Ze.treeConfig,d=dl.value,u=cl.value,c=il.value,p=l.value,{slots:s,treeNode:v}=s,g=ll.fullAllDataRowIdData;if(n&&v&&(p.showLine||p.line)){if(s&&s.line)return Qe.callSlot(s.line,o);n=g[r];let e=0,l=null,t=null,a="";return(n&&(e=n.level,l=n.items[n.treeIndex-1],t=n.parent),e||p.showRootLine)?(l?(v=g[(0,_util.getRowid)(Qe,l)]||{},a=`${v.lineHeight||0}px`):e&&t&&(s=g[(0,_util.getRowid)(Qe,t)]||{},a=`calc(-1em + ${Math.floor(i/2+(0,_util.getCellRestHeight)(s,d,u,c)/2)}px)`),[(0,_vue.h)("div",{key:"tl",class:"vxe-tree--line-wrapper"},[(0,_vue.h)("div",{class:"vxe-tree--line",style:{height:a,bottom:`-${Math.floor(i/2)}px`,left:`calc(${e*p.indent}px + 1em)`}})])]):[]}return[]},oe=(H,e,l,A,F,t,B,U,a,r,L,N,o)=>{var i=Qe.xeGrid,j=Qe.xeGantt,{columnKey:G,resizable:s,showOverflow:n,border:W,height:d,treeConfig:V,cellClassName:P,cellStyle:X,align:Y,spanMethod:K,mouseConfig:J,editConfig:Q,editRules:u,tooltipConfig:c,padding:p}=Ze,{tableData:Z,tableColumn:ee,dragRow:le,overflowX:te,overflowY:ae,currentColumn:re,scrollXLoad:v,scrollYLoad:g,mergeBodyFlag:oe,calcCellHeightFlag:x,resizeHeightFlag:ie,resizeWidthFlag:se,editStore:ne,isAllOverflow:de,validErrorMaps:h}=el,{fullAllDataRowIdData:ue,fullColumnIdData:m,mergeBodyCellMaps:ce,visibleColumn:pe,afterFullData:ve,mergeBodyList:ge,scrollXStore:xe,scrollYStore:he,keepUpdateFieldMaps:me}=ll,w=dl.value,_=ul.value,we=nl.value,_e=tl.value,b=sl.value,be=gl.value,fe=xl.value,ye=hl.value,{isAllColumnDrag:be,isAllRowDrag:Ce}=be,f=cl.value,y=vl.value,Re=il.value,x=x?w.height||f.height:0,{disabledMethod:C,isCrossDrag:Ee,isPeerDrag:De}=y,Ie=pl.value,Oe=al.value,Se=ol.value,Me=rl.value,Se=Se.selectCellToRow,{field:Te,type:ke,cellRender:R,editRender:E,align:$e,showOverflow:ze,className:qe,treeNode:He,rowResize:Ae,padding:D,verticalAlign:I,slots:Fe}=r,O=w.verticalAlign,ne=ne.actived,Be=ue[e]||{},S=r.id,m=m[S]||{},R=E||R,R=R?renderer.get(R.name):null,Ue=R?R.tableCellClassName||R.cellClassName:null,Le=R?R.tableCellStyle||R.cellStyle:"";let Ne=b.showAll;var je=m.index,b=m._index,m=(0,_utils.isEnableConf)(E),E=ie?Be.resizeHeight:0;let M=te&&(l?r.fixed!==l:!!r.fixed);ie=_xeUtils.default.eqNull(D)?null===p?w.padding:p:D,p=_xeUtils.default.eqNull(ze)?n:ze,D="ellipsis"===p;let T="title"===p,k=!0===p||"tooltip"===p;n=de||T||k||D,ze=_xeUtils.default.isBoolean(r.resizable)?r.resizable:Ie.resizable||s,p=!!x,s=0<E;let Ge;x={},E=$e||(R?R.tableCellAlign:"")||Y,$e=_xeUtils.default.eqNull(I)?O:I,R=h[e+":"+S],Y=u&&_.showErrorMessage&&("default"===_.message?d||1<Z.length:"inline"===_.message),O={colid:S};let $={$table:Qe,$grid:i,$gantt:j,isEdit:!1,seq:H,rowid:e,row:t,rowIndex:B,$rowIndex:U,_rowIndex:a,column:r,columnIndex:je,$columnIndex:L,_columnIndex:b,fixed:l,source:sourceType,type:renderType,isHidden:!!M,level:F,visibleData:ve,data:Z,items:o},z=!1,We=!1,q=((z=f.drag?"row"===y.trigger||r.dragSort&&"cell"===y.trigger:z)&&(We=!(!C||!C($))),(T||k||Ne||c)&&(x.onMouseover=e=>{ml()||(T?(0,_dom.updateCellTitle)(e.currentTarget,r):(k||Ne)&&Qe.triggerBodyTooltipEvent(e,$)),Qe.dispatchEvent("cell-mouseenter",Object.assign({cell:e.currentTarget},$),e)}),(k||Ne||c)&&(x.onMouseleave=e=>{ml()||(k||Ne)&&Qe.handleTargetLeaveEvent(e),Qe.dispatchEvent("cell-mouseleave",Object.assign({cell:e.currentTarget},$),e)}),(z||we.range||J)&&(x.onMousedown=e=>{Qe.triggerCellMousedownEvent(e,$)}),z&&(x.onMouseup=Qe.triggerCellMouseupEvent),x.onClick=e=>{Qe.triggerCellClickEvent(e,$)},!(x.onDblclick=e=>{Qe.triggerCellDblclickEvent(e,$)})),Ve=1,Pe=1;if(oe&&ge.length){I=ce[a+":"+b];if(I){var{rowspan:h,colspan:u}=I;if(!h||!u)return renderEmptyElement(Qe);1<h&&(q=!0,Pe=h,O.rowspan=h),1<u&&(q=!0,Ve=u,O.colspan=u)}}else if(K){var{rowspan:d=1,colspan:i=1}=K($)||{};if(!d||!i)return renderEmptyElement(Qe);1<d&&(q=!0,Pe=d,O.rowspan=d),1<i&&(q=!0,Ve=i,O.colspan=i)}!(M=M&&q&&(1<O.colspan||1<O.rowspan)?!1:M)&&Q&&(_e.showStatus||_e.showUpdateStatus)&&me[Te]&&(Ge=Qe.isUpdateByRow(t,Te));j=!n&&(g||v);let Xe=(0,_util.getCellRestHeight)(Be,w,f,Re);H=L===N.length-1,B=!r.resizeWidth&&("auto"===r.minWidth||"auto"===r.width);let Ye=!1;q||le&&(0,_util.getRowid)(Qe,le)===e||(ae&&g&&16<Z.length&&!V&&!ye.immediate&&(a<he.visibleStartIndex-he.preloadSize||a>he.visibleEndIndex+he.preloadSize)||te&&v&&10<ee.length&&!fe.immediate&&!r.fixed&&(b<xe.visibleStartIndex-xe.preloadSize||b>xe.visibleEndIndex+xe.preloadSize))&&(Ye=!0),1<Pe&&(U=ve[a+Pe-1])&&(o=ue[(0,_util.getRowid)(Qe,U)])&&(Xe+=o.oTop+(0,_util.getCellRestHeight)(o,w,f,Re)-Be.oTop-(0,_util.getCellRestHeight)(Be,w,f,Re));y={};if(n&&se){let l=0;if(1<Ve)for(let e=1;e<Ve;e++){var Ke=pe[je+e];Ke&&(l+=Ke.renderWidth)}y.width=r.renderWidth+l-Me+"px"}g||v||n||p||s?y.height=Xe+"px":y.minHeight=Xe+"px";C=[];M&&de?C.push((0,_vue.h)("div",{key:"tc",class:["vxe-cell",{"c--title":T,"c--tooltip":k,"c--ellipsis":D}],style:y})):(V&&C.push(...wl(e,$,Xe)),C.push((0,_vue.h)("div",{key:"tc",class:["vxe-cell",{"c--title":T,"c--tooltip":k,"c--ellipsis":D}],style:y,title:T?Qe.getCellLabel(t,r):null},Ye?[]:[(0,_vue.h)("div",{colid:S,rowid:e,class:"vxe-cell--wrapper vxe-body-cell--wrapper"},r.renderCell($))])),Y&&R&&(c=R.rule,we=Fe?Fe.valid:null,oe=Object.assign(Object.assign(Object.assign({},$),R),{rule:R}),C.push((0,_vue.h)("div",{key:"tcv",class:["vxe-cell--valid-error-tip",(0,_dom.getPropClass)(_.className,oe)],style:c&&c.maxWidth?{width:c.maxWidth+"px"}:null},[(0,_vue.h)("div",{class:"vxe-cell--valid-error-wrapper vxe-cell--valid-error-theme-"+(_.theme||"normal")},[we?Qe.callSlot(we,oe):[(0,_vue.h)("span",{class:"vxe-cell--valid-error-msg"},R.content)]])]))));let Je=!1;return J&&Oe.area&&!b&&Se&&(Je=!0),!M&&ze&&be&&C.push((0,_vue.h)("div",{key:"tcc",class:["vxe-cell--col-resizable",{"is--line":!W||"none"===W}],onMousedown:e=>Qe.handleColResizeMousedownEvent(e,l,$),onDblclick:e=>Qe.handleColResizeDblclickEvent(e,$)})),(Ae||Ce)&&f.resizable&&C.push((0,_vue.h)("div",{key:"tcr",class:"vxe-cell--row-resizable",onMousedown:e=>Qe.handleRowResizeMousedownEvent(e,$),onDblclick:e=>Qe.handleRowResizeDblclickEvent(e,$)})),(0,_vue.h)("td",Object.assign(Object.assign(Object.assign({class:["vxe-table--column vxe-body--column",S,$e?"col--vertical-"+$e:"",E?"col--"+E:"",ke?"col--"+ke:"",{"col--last":H,"col--tree-node":He,"col--edit":m,"col--ellipsis":n,"col--cs-height":p,"col--rs-height":s,"col--to-row":Je,"col--auto-height":j,"fixed--width":!B,"fixed--hidden":M,"is--padding":ie,"is--progress":M&&de||Ye,"is--drag-cell":z&&(Ee||De||!F),"is--drag-disabled":We,"col--dirty":Ge,"col--active":Q&&m&&ne.row===t&&(ne.column===r||"row"===_e.mode),"col--valid-error":!!R,"show--valid-bg":R&&_.showErrorBackground,"col--current":re===r},(0,_dom.getPropClass)(Ue,$),(0,_dom.getPropClass)(qe,$),(0,_dom.getPropClass)(P,$)],key:G||v||g||Ie.useKey||f.useKey||Ie.drag?S:L},O),{style:Object.assign({},_xeUtils.default.isFunction(Le)?Le($):Le,_xeUtils.default.isFunction(X)?X($):X)}),x),A&&M?[]:C)},re=(h,m,w,_)=>{let b=Qe.xeGrid,f=Qe.xeGantt,{stripe:y,rowKey:C,highlightHoverRow:R,rowClassName:E,rowStyle:D,editConfig:I,treeConfig:O}=Ze,{hasFixedColumn:S,treeExpandedFlag:M,scrollXLoad:T,scrollYLoad:k,isAllOverflow:$,rowExpandedFlag:z,expandColumn:q,selectRadioRow:H,pendingRowFlag:A,rowExpandHeightFlag:F,isRowGroupStatus:B}=el,{fullAllDataRowIdData:U,fullColumnIdData:L,treeExpandedMaps:N,pendingRowMaps:j,rowExpandedMaps:G}=ll,W=nl.value,Q=e.value,V=l.value,P=tl.value,X=cl.value,Z=pl.value,{transform:Y,seqMode:K}=V,ee=V.children||V.childrenField,J=[],le=(0,_util.createHandleGetRowId)(Qe).handleGetRowId,te=O||B;return w.forEach((a,r)=>{let o=le(a);var i=U[o]||{};let s=r,n=0,d=-1,u=-1;var c=B&&a.isAggregate,p={},v=((X.isHover||R)&&(p.onMouseover=e=>{ml()||Qe.triggerHoverEvent(e,{row:a,rowIndex:s})},p.onMouseleave=()=>{ml()||Qe.clearHoverRow()}),i&&(s=i.index,u=i._index,n=i.level,d=i.seq,c||O&&Y&&"increasing"===K?d=i._index+1:O&&"fixed"===K&&(d=i._tIndex+1)),{$table:Qe,seq:d,rowid:o,fixed:h,type:renderType,level:n,row:a,rowIndex:s,$rowIndex:r,_rowIndex:u}),g=q&&!!z&&!!G[o];let e=!1,l=[],t=!1;I&&(t=Qe.isInsertByRow(a)),!O||k||Y||(l=a[ee],e=!!M&&l&&0<l.length&&!!N[o]),!X.drag||B||O&&!Y||(p.onDragstart=Qe.handleRowDragDragstartEvent,p.onDragend=Qe.handleRowDragDragendEvent,p.onDragover=Qe.handleRowDragDragoverEvent);var c=["vxe-body--row",te?"row--level-"+n:"",{"row--stripe":y&&(u+1)%2==0,"is--new":t,"is--expand-row":g,"is--expand-tree":e,"row--new":t&&(P.showStatus||P.showInsertStatus),"row--radio":Q.highlight&&Qe.eqRow(H,a),"row--checked":W.highlight&&Qe.isCheckedByCheckboxRow(a),"row--pending":!!A&&!!j[o],"row--group":c},(0,_dom.getPropClass)(E,v)],x=_.map((e,l)=>oe(d,o,h,m,n,a,s,r,u,e,l,_,w));if(J.push((0,_vue.h)("tr",Object.assign({class:c,rowid:o,style:D?_xeUtils.default.isFunction(D)?D(v):D:null,key:C||T||k||X.useKey||X.drag||Z.drag||B||O?o:r},p),x)),g){var{height:c,padding:v,mode:p}=ae.value;if("fixed"===p){x=i.expandHeight;let e=0;F&&(x||c)&&(e=(x||c||0)+1),J.push((0,_vue.h)("tr",{class:"vxe-body--row-expanded-place",key:"expand_"+o,rowid:o},[(0,_vue.h)("td",{class:"vxe-body--row-expanded-place-column",colspan:_.length,style:{height:e+"px"}})]))}else{g={},p=(c&&(g.height=c+"px"),O&&(g.paddingLeft=n*V.indent+30+"px"),q||{}).showOverflow,i=q.id,x=L[i]||{},i=_xeUtils.default.eqNull(p)?$:p;let e=-1,l=-1,t=-1;x&&(e=x.index,l=x.$index,t=x._index);p={$table:Qe,$grid:b,$gantt:f,seq:d,column:q,columnIndex:e,$columnIndex:l,_columnIndex:t,fixed:h,source:sourceType,type:renderType,level:n,row:a,rowid:o,rowIndex:s,$rowIndex:r,_rowIndex:u,isHidden:!1,isEdit:!1,visibleData:[],data:[],items:[]};J.push((0,_vue.h)("tr",{class:["vxe-body--expanded-row",{"is--padding":v}],key:"expand_"+o},[(0,_vue.h)("td",{class:["vxe-body--expanded-column",{"fixed--hidden":h&&!S,"col--ellipsis":i}],colspan:_.length},[(0,_vue.h)("div",{class:["vxe-body--expanded-cell",{"is--ellipsis":c}],style:g},[q.renderData(p)])])]))}}e&&J.push(...re(h,m,l,_))}),J};(0,_vue.onMounted)(()=>{(0,_vue.nextTick)(()=>{var e=C.fixedType,l=ll.elemStore,e=`${e||"main"}-body-`;l[e+"wrapper"]=I,l[e+"scroll"]=O,l[e+"table"]=S,l[e+"colgroup"]=M,l[e+"list"]=T,l[e+"xSpace"]=k,l[e+"ySpace"]=$,l[e+"emptyBlock"]=z})}),(0,_vue.onUnmounted)(()=>{var e=C.fixedType,l=ll.elemStore,e=`${e||"main"}-body-`;l[e+"wrapper"]=null,l[e+"scroll"]=null,l[e+"table"]=null,l[e+"colgroup"]=null,l[e+"list"]=null,l[e+"xSpace"]=null,l[e+"ySpace"]=null,l[e+"emptyBlock"]=null});return()=>{var e=E.slots,l=Qe.xeGrid,t=Qe.xeGantt;let{fixedColumn:a,fixedType:r,tableColumn:o}=C;var i=Ze.mouseConfig,{isGroup:s,tableData:n,isColLoading:d,overflowX:u,scrollXLoad:c,scrollYLoad:p,dragRow:v,dragCol:g}=el,{visibleColumn:x,fullAllDataRowIdData:h,fullColumnIdData:m}=ll,w=D.value,_=al.value;let b=n,f=o;n=q.value;d||!r&&u||(f=x),r&&n&&(f=a||[]),p&&v&&2<b.length&&(d=h[(0,_util.getRowid)(Qe,v)])&&(u=d._index,x=b[0],p=b[b.length-1],d=h[(0,_util.getRowid)(Qe,x)],x=h[(0,_util.getRowid)(Qe,p)],d)&&x&&(h=d._index,p=x._index,u<h?b=[v].concat(b):p<u&&(b=b.concat([v]))),r||s||c&&g&&2<f.length&&(d=m[g.id])&&(x=d._index,h=f[0],p=f[f.length-1],u=m[h.id],v=m[p.id],u)&&v&&(s=u._index,c=v._index,x<s?f=[g].concat(f):c<x&&(f=f.concat([g])));let y;d=e?e.empty:null,h={$table:Qe,$grid:l,$gantt:t};return y=d?Qe.callSlot(d,h):(p=(m=w.name?renderer.get(w.name):null)?m.renderTableEmpty||m.renderTableEmptyView||m.renderEmpty:null)?(0,_vn.getSlotVNs)(p(w,h)):Ze.emptyText||getI18n("vxe.table.emptyText"),(0,_vue.h)("div",{ref:I,class:["vxe-table--body-wrapper",r?`fixed-${r}--wrapper`:"body--wrapper"],xid:R},[(0,_vue.h)("div",{ref:O,class:"vxe-table--body-inner-wrapper",onScroll(e){Qe.triggerBodyScrollEvent(e,r)}},[r?renderEmptyElement(Qe):(0,_vue.h)("div",{ref:k,class:"vxe-body--x-space"}),(0,_vue.h)("div",{ref:$,class:"vxe-body--y-space"}),(0,_vue.h)("table",{ref:S,class:"vxe-table--body",xid:R,cellspacing:0,cellpadding:0,border:0,xvm:n?"1":null},[(0,_vue.h)("colgroup",{ref:M},f.map((e,l)=>(0,_vue.h)("col",{name:e.id,key:l,style:{width:e.renderWidth+"px"}}))),(0,_vue.h)("tbody",{ref:T},re(r,n,b,f))]),(0,_vue.h)("div",{class:"vxe-table--checkbox-range"}),i&&_.area?(0,_vue.h)("div",{class:"vxe-table--cell-area",xid:R},[(0,_vue.h)("span",{class:"vxe-table--cell-main-area"},_.extension?[(0,_vue.h)("span",{class:"vxe-table--cell-main-area-btn",onMousedown(e){Qe.triggerCellAreaExtendMousedownEvent&&Qe.triggerCellAreaExtendMousedownEvent(e,{$table:Qe,fixed:r,type:renderType})}})]:[]),(0,_vue.h)("span",{class:"vxe-table--cell-clip-area"}),(0,_vue.h)("span",{class:"vxe-table--cell-extend-area"}),(0,_vue.h)("span",{class:"vxe-table--cell-multi-area"}),(0,_vue.h)("span",{class:"vxe-table--cell-active-area"}),(0,_vue.h)("span",{class:"vxe-table--cell-row-status-area"})]):renderEmptyElement(Qe),r?renderEmptyElement(Qe):(0,_vue.h)("div",{class:"vxe-table--empty-block",ref:z},[(0,_vue.h)("div",{class:"vxe-table--empty-content"},y)])])])}}});