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