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.6 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 rl=(0,_vue.inject)("$xeTable",{}),{xID:R,props:ol,context:E,reactData:il,internalData:sl}=rl,{computeEditOpts:nl,computeMouseOpts:dl,computeCellOffsetWidth:ul,computeAreaOpts:cl,computeDefaultRowHeight:pl,computeEmptyOpts:D,computeTooltipOpts:vl,computeRadioOpts:e,computeExpandOpts:ae,computeTreeOpts:l,computeCheckboxOpts:gl,computeCellOpts:xl,computeValidOpts:hl,computeRowOpts:ml,computeColumnOpts:wl,computeRowDragOpts:_l,computeResizableOpts:fl,computeVirtualXOpts:bl,computeVirtualYOpts:yl,computeIsBodyRenderOptimize:z}=rl.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)(),H=(0,_vue.ref)(),Cl=()=>{var e=ol.delayHover,l=il.isDragResize,t=sl.lastSTime;return!!(l||t&&Date.now()<t+e)},Rl=(r,o,i)=>{var s=o.column,n=ol.treeConfig,d=xl.value,u=ml.value,c=pl.value,p=l.value,{slots:s,treeNode:v}=s,g=sl.fullAllDataRowIdData;if(n&&v&&(p.showLine||p.line)){if(s&&s.line)return rl.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)(rl,l)]||{},a=`${v.lineHeight||0}px`):e&&t&&(s=g[(0,_util.getRowid)(rl,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=(A,e,l,q,F,t,B,j,a,r,L,U,o)=>{var i=rl.xeGrid,N=rl.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}=ol,{tableData:Z,tableColumn:ee,dragRow:le,overflowX:te,overflowY:ae,scrollXLoad:v,scrollYLoad:re,mergeBodyFlag:oe,calcCellHeightFlag:g,resizeHeightFlag:x,resizeWidthFlag:ie,editStore:se,isAllOverflow:ne,validErrorMaps:h,currColFlag:de}=il,{fullAllDataRowIdData:ue,fullColumnIdData:m,mergeBodyCellMaps:ce,visibleColumn:pe,afterFullData:ve,mergeBodyList:ge,scrollXStore:xe,scrollYStore:he,keepUpdateFieldMaps:me,currentCol:we}=sl,w=xl.value,_=hl.value,f=gl.value,_e=nl.value,b=vl.value,fe=fl.value,be=bl.value,ye=yl.value,{isAllColumnDrag:fe,isAllRowDrag:Ce}=fe,y=ml.value,C=_l.value,Re=pl.value,g=g?w.height||y.height:0,{disabledMethod:R,isCrossDrag:Ee,isPeerDrag:De}=C,Ie=wl.value,Oe=dl.value,Se=cl.value,Me=ul.value,Se=Se.selectCellToRow,{field:Te,type:ke,cellRender:E,editRender:$e,align:He,showOverflow:ze,className:Ae,treeNode:qe,rowResize:Fe,padding:D,verticalAlign:I,slots:Be}=r,{verticalAlign:O,minHeight:je,maxHeight:Le}=w,se=se.actived,Ue=ue[e]||{},S=r.id,m=m[S]||{},E=$e||E,E=E?renderer.get(E.name):null,Ne=E?E.tableCellClassName||E.cellClassName:null,Ge=E?E.tableCellStyle||E.cellStyle:"";let We=b.showAll;var Ve=m.index,m=m._index,$e=(0,_utils.isEnableConf)($e),x=x?Ue.resizeHeight:0;let M=te&&(l?r.fixed!==l:!!r.fixed);var D=(0,_utils.getDefaultConfig)(D,null===p?w.padding:p),p=!0===D,Pe=!!D&&(p||!1!==D.top),Xe=!!D&&(p||!1!==D.bottom),Ye=!!D&&(p||!1!==D.left),p=!!D&&(p||!1!==D.right),D=(0,_utils.getDefaultConfig)(ze,n),ze="ellipsis"===(!0===D?b.mode:D);let T="title"===(!0===D?b.mode:D),k="tooltip"===(!0===D?b.mode:D);n=ne||T||k||ze,b=_xeUtils.default.isBoolean(r.resizable)?r.resizable:Ie.resizable||s,D=!!g,s=0<x;let Ke;g={},x=He||(E?E.tableCellAlign:"")||Y,He=_xeUtils.default.eqNull(I)?O:I,E=h[e+":"+S],Y=u&&_.showErrorMessage&&("default"===_.message?d||1<Z.length:"inline"===_.message),O={colid:S};let $={$table:rl,$grid:i,$gantt:N,isEdit:!1,seq:A,rowid:e,row:t,rowIndex:B,$rowIndex:j,_rowIndex:a,column:r,columnIndex:Ve,$columnIndex:L,_columnIndex:m,fixed:l,source:sourceType,type:renderType,isHidden:!!M,level:F,visibleData:ve,data:Z,items:o},H=!1,Je=!1,z=((H=y.drag?"row"===C.trigger||r.dragSort&&"cell"===C.trigger:H)&&(Je=!(!R||!R($))),(T||k||We||c)&&(g.onMouseover=e=>{Cl()||(T?(0,_dom.updateCellTitle)(e.currentTarget,r):(k||We)&&rl.triggerBodyTooltipEvent(e,$)),rl.dispatchEvent("cell-mouseenter",Object.assign({cell:e.currentTarget},$),e)}),(k||We||c)&&(g.onMouseleave=e=>{Cl()||(k||We)&&rl.handleTargetLeaveEvent(e),rl.dispatchEvent("cell-mouseleave",Object.assign({cell:e.currentTarget},$),e)}),(H||f.range||J)&&(g.onMousedown=e=>{rl.triggerCellMousedownEvent(e,$)}),H&&(g.onMouseup=rl.triggerCellMouseupEvent),g.onClick=e=>{rl.triggerCellClickEvent(e,$)},!(g.onDblclick=e=>{rl.triggerCellDblclickEvent(e,$)})),Qe=1,Ze=1;if(oe&&ge.length){I=ce[a+":"+m];if(I){var{rowspan:h,colspan:u}=I;if(!h||!u)return renderEmptyElement(rl);1<h&&(z=!0,Ze=h,O.rowspan=h),1<u&&(z=!0,Qe=u,O.colspan=u)}}else if(K){var{rowspan:d=1,colspan:i=1}=K($)||{};if(!d||!i)return renderEmptyElement(rl);1<d&&(z=!0,Ze=d,O.rowspan=d),1<i&&(z=!0,Qe=i,O.colspan=i)}!(M=M&&z&&(1<O.colspan||1<O.rowspan)?!1:M)&&Q&&(_e.showStatus||_e.showUpdateStatus)&&me[Te]&&(Ke=rl.isUpdateByRow(t,Te));N=!n&&(re||v);let el=(0,_util.getCellRestHeight)(Ue,w,y,Re);A=L===U.length-1,B=!r.resizeWidth&&("auto"===r.minWidth||"auto"===r.width);let ll=!1;z||le&&(0,_util.getRowid)(rl,le)===e||(ae&&re&&16<Z.length&&!V&&!ye.immediate&&(a<he.visibleStartIndex-he.preloadSize||a>he.visibleEndIndex+he.preloadSize)||te&&v&&10<ee.length&&!be.immediate&&!r.fixed&&(m<xe.visibleStartIndex-xe.preloadSize||m>xe.visibleEndIndex+xe.preloadSize))&&(ll=!0),1<Ze&&(j=ve[a+Ze-1])&&(o=ue[(0,_util.getRowid)(rl,j)])&&(el+=o.oTop+(0,_util.getCellRestHeight)(o,w,y,Re)-Ue.oTop-(0,_util.getCellRestHeight)(Ue,w,y,Re));C={};if(Le&&(C.maxHeight=Le+"px"),n&&ie){let l=0;if(1<Qe)for(let e=1;e<Qe;e++){var tl=pe[Ve+e];tl&&(l+=tl.renderWidth)}C.width=r.renderWidth+l-Me+"px"}re||v||n||D||s?C.height=el+"px":C.minHeight=el+"px",je&&(C.minHeight=je+"px");R=[];M&&ne?R.push((0,_vue.h)("div",{key:"tc",class:["vxe-cell",{"c--title":T,"c--tooltip":k,"c--ellipsis":ze}],style:C})):(V&&R.push(...Rl(e,$,el)),c=[],ll||c.push((0,_vue.h)("div",{colid:S,rowid:e,class:"vxe-cell--wrapper vxe-body-cell--wrapper"},r.renderCell($))),R.push((0,_vue.h)("div",{key:"tc",class:["vxe-cell",{"c--title":T,"c--tooltip":k,"c--ellipsis":ze}],style:C,title:T?rl.getCellLabel(t,r):null},c)),Y&&E&&(f=E.rule,oe=Be?Be.valid:null,ge=Object.assign(Object.assign(Object.assign({},$),E),{rule:E}),R.push((0,_vue.h)("div",{key:"tcv",class:["vxe-cell--valid-error-tip",(0,_dom.getPropClass)(_.className,ge)],style:f&&f.maxWidth?{width:f.maxWidth+"px"}:null},[(0,_vue.h)("div",{class:"vxe-cell--valid-error-wrapper vxe-cell--valid-error-theme-"+(_.theme||"normal")},[oe?rl.callSlot(oe,ge):[(0,_vue.h)("span",{class:"vxe-cell--valid-error-msg"},E.content)]])]))));let al=!1;return J&&Oe.area&&!m&&Se&&(al=!0),!M&&b&&fe&&R.push((0,_vue.h)("div",{key:"tcc",class:["vxe-cell--col-resizable",{"is--line":!W||"none"===W}],onMousedown:e=>rl.handleColResizeMousedownEvent(e,l,$),onDblclick:e=>rl.handleColResizeDblclickEvent(e,$)})),(Fe||Ce)&&y.resizable&&R.push((0,_vue.h)("div",{key:"tcr",class:"vxe-cell--row-resizable",onMousedown:e=>rl.handleRowResizeMousedownEvent(e,$),onDblclick:e=>rl.handleRowResizeDblclickEvent(e,$)})),(0,_vue.h)("td",Object.assign(Object.assign(Object.assign({class:["vxe-table--column vxe-body--column",S,He?"col--vertical-"+He:"",x?"col--"+x:"",ke?"col--"+ke:"",{"col--last":A,"col--tree-node":qe,"col--edit":$e,"col--ellipsis":n,"col--cs-height":D,"col--rs-height":s,"col--to-row":al,"col--auto-height":N,"col--max-height":Le,"fixed--width":!B,"fixed--hidden":M,"is--pg-top":Pe,"is--pg-bottom":Xe,"is--pg-left":Ye,"is--pg-right":p,"is--progress":M&&ne||ll,"is--drag-cell":H&&(Ee||De||!F),"is--drag-disabled":Je,"col--dirty":Ke,"col--active":Q&&$e&&se.row===t&&(se.column===r||"row"===_e.mode),"col--valid-error":!!E,"show--valid-bg":E&&_.showErrorBackground,"col--current":de&&we===r},(0,_dom.getPropClass)(Ne,$),(0,_dom.getPropClass)(Ae,$),(0,_dom.getPropClass)(P,$)],key:G||v||re||Ie.useKey||y.useKey||Ie.drag?S:L},O),{style:Object.assign({},_xeUtils.default.isFunction(Ge)?Ge($):Ge,_xeUtils.default.isFunction(X)?X($):X)}),g),q&&M?[]:R)},re=(h,m,w,_)=>{let f=rl.xeGrid,b=rl.xeGantt,{stripe:y,rowKey:C,highlightHoverRow:R,rowClassName:E,rowStyle:D,editConfig:I,treeConfig:O}=ol,{hasFixedColumn:S,treeExpandedFlag:M,scrollYLoad:T,isAllOverflow:k,rowExpandedFlag:$,expandColumn:H,selectRadioRow:z,pendingRowFlag:A,rowExpandHeightFlag:q,isRowGroupStatus:F}=il,{fullAllDataRowIdData:B,fullColumnIdData:j,treeExpandedMaps:L,pendingRowMaps:U,rowExpandedMaps:N,currentRow:G}=sl,W=gl.value,Q=e.value,V=l.value,P=nl.value,X=ml.value,Z=wl.value,{transform:Y,seqMode:K}=V,ee=V.children||V.childrenField,J=[],le=(0,_util.createHandleGetRowId)(rl).handleGetRowId,te=O||F;return w.forEach((a,r)=>{let o=le(a);var i=B[o]||{};let s=r,n=0,d=-1,u=-1;var c=F&&a.isAggregate,p={},v=((X.isHover||R)&&(p.onMouseover=e=>{Cl()||rl.triggerHoverEvent(e,{row:a,rowIndex:s})},p.onMouseleave=()=>{Cl()||rl.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:rl,seq:d,rowid:o,fixed:h,type:renderType,level:n,row:a,rowIndex:s,$rowIndex:r,_rowIndex:u}),g=H&&!!$&&!!N[o];let e=!1,l=[],t=!1;I&&(t=rl.isInsertByRow(a)),!O||T||Y||(l=a[ee],e=!!M&&l&&0<l.length&&!!L[o]),!X.drag||F||O&&!Y||(p.onDragstart=rl.handleRowDragDragstartEvent,p.onDragend=rl.handleRowDragDragendEvent,p.onDragover=rl.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&&rl.eqRow(z,a),"row--checked":W.highlight&&rl.isCheckedByCheckboxRow(a),"row--pending":!!A&&!!U[o],"row--group":c,"row--current":G&&o===(0,_util.getRowid)(rl,G)},(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||X.useKey||X.drag||Z.drag||F||O?o:r},p),x)),g){var{height:c,padding:v,mode:p}=ae.value;if("fixed"===p){x=i.expandHeight;let e=0;q&&(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"),H||{}).showOverflow,i=H.id,x=j[i]||{},i=_xeUtils.default.eqNull(p)?k:p;let e=-1,l=-1,t=-1;x&&(e=x.index,l=x.$index,t=x._index);p={$table:rl,$grid:f,$gantt:b,seq:d,column:H,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},[H.renderData(p)])])]))}}e&&J.push(...re(h,m,l,_))}),J};(0,_vue.onMounted)(()=>{(0,_vue.nextTick)(()=>{var e=C.fixedType,l=sl.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"]=H})}),(0,_vue.onUnmounted)(()=>{var e=C.fixedType,l=sl.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=rl.xeGrid,t=rl.xeGantt;let{fixedColumn:a,fixedType:r,tableColumn:o}=C;var i=ol.mouseConfig,{isGroup:s,tableData:n,isColLoading:d,overflowX:u,scrollXLoad:c,scrollYLoad:p,dragRow:v,dragCol:g}=il,{visibleColumn:x,fullAllDataRowIdData:h,fullColumnIdData:m}=sl,w=D.value,_=dl.value;let f=n,b=o;n=z.value;d||!r&&u||(b=x),r&&n&&(b=a||[]),p&&v&&2<f.length&&(d=h[(0,_util.getRowid)(rl,v)])&&(u=d._index,x=f[0],p=f[f.length-1],d=h[(0,_util.getRowid)(rl,x)],x=h[(0,_util.getRowid)(rl,p)],d)&&x&&(h=d._index,p=x._index,u<h?f=[v].concat(f):p<u&&(f=f.concat([v]))),r||s||c&&g&&2<b.length&&(d=m[g.id])&&(x=d._index,h=b[0],p=b[b.length-1],u=m[h.id],v=m[p.id],u)&&v&&(s=u._index,c=v._index,x<s?b=[g].concat(b):c<x&&(b=b.concat([g])));let y;d=e?e.empty:null,h={$table:rl,$grid:l,$gantt:t};return y=d?rl.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)):ol.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){rl.triggerBodyScrollEvent(e,r)}},[r?renderEmptyElement(rl):(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},b.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,f,b))]),(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){rl.triggerCellAreaExtendMousedownEvent&&rl.triggerCellAreaExtendMousedownEvent(e,{$table:rl,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(rl),r?renderEmptyElement(rl):(0,_vue.h)("div",{class:"vxe-table--empty-block",ref:H},[(0,_vue.h)("div",{class:"vxe-table--empty-content"},y)])])])}}});