UNPKG

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.7 kB
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:nl}=rl,{computeEditOpts:sl,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:Rl,computeIsBodyRenderOptimize:z,computeRendererOpts:yl}=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=nl.lastSTime;return!!(l||t&&Date.now()<t+e)},El=(r,o,i)=>{var n=o.column,s=ol.treeConfig,d=xl.value,u=ml.value,c=pl.value,p=l.value,{slots:n,treeNode:v}=n,g=nl.fullAllDataRowIdData;if(s&&v&&(p.showLine||p.line)){if(n&&n.line)return rl.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)(rl,l)]||{},a=`${v.lineHeight||0}px`):e&&t&&(n=g[(0,_util.getRowid)(rl,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=(A,e,l,q,F,t,B,j,a,r,L,U,o)=>{var i=rl.xeGrid,N=rl.xeGantt,{columnKey:G,resizable:n,showOverflow:s,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:re,scrollYLoad:oe,mergeBodyFlag:ie,calcCellHeightFlag:v,resizeHeightFlag:g,resizeWidthFlag:ne,editStore:se,isAllOverflow:de,validErrorMaps:x,currColFlag:ue}=il,{fullAllDataRowIdData:ce,fullColumnIdData:h,mergeBodyCellMaps:pe,visibleColumn:ve,afterFullData:ge,mergeBodyList:xe,scrollXStore:he,scrollYStore:me,keepUpdateFieldMaps:we,currentCol:_e}=nl,m=xl.value,w=hl.value,_=gl.value,fe=sl.value,f=vl.value,be=fl.value,ye=bl.value,Ce=Rl.value,b=yl.value,{isAllColumnDrag:be,isAllRowDrag:Re}=be,y=ml.value,C=_l.value,Ee=pl.value,v=v?m.height||y.height:0,{disabledMethod:R,isCrossDrag:De,isPeerDrag:Ie}=C,Oe=wl.value,Se=dl.value,Me=cl.value,Te=ul.value,Me=Me.selectCellToRow,{field:ke,type:$e,cellRender:E,editRender:He,align:ze,showOverflow:Ae,className:qe,treeNode:Fe,rowResize:Be,padding:D,verticalAlign:I,slots:je}=r,{verticalAlign:O,minHeight:Le,maxHeight:Ue}=m,se=se.actived,Ne=ce[e]||{},S=r.id,h=h[S]||{},E=He||E,b=E&&E.name?b[E.name]||renderer.get(E.name):null,E=b?b.tableCellClassName||b.cellClassName:null,Ge=b?b.tableCellStyle||b.cellStyle:"";let We=f.showAll;var Ve=h.index,h=h._index,He=(0,_utils.isEnableConf)(He),g=g?Ne.resizeHeight:0;let M=te&&(l?r.fixed!==l:!!r.fixed);var D=(0,_utils.getDefaultConfig)(D,null===p?m.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)(Ae,s),Ae="ellipsis"===(!0===D?f.mode:D);let T="title"===(!0===D?f.mode:D),k="tooltip"===(!0===D?f.mode:D);s=de||T||k||Ae,f=_xeUtils.default.isBoolean(r.resizable)?r.resizable:Oe.resizable||n,D=!!v,n=0<g;let Ke;v={},g=ze||(b?b.tableCellAlign:"")||Y,ze=_xeUtils.default.eqNull(I)?O:I,b=x[e+":"+S],Y=u&&w.showErrorMessage&&("default"===w.message?d||1<Z.length:"inline"===w.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:h,fixed:l,source:sourceType,type:renderType,isHidden:!!M,level:F,visibleData:ge,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)&&(v.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)&&(v.onMouseleave=e=>{Cl()||(k||We)&&rl.handleTargetLeaveEvent(e),rl.dispatchEvent("cell-mouseleave",Object.assign({cell:e.currentTarget},$),e)}),(H||_.range||J)&&(v.onMousedown=e=>{rl.triggerCellMousedownEvent(e,$)}),H&&(v.onMouseup=rl.triggerCellMouseupEvent),v.onClick=e=>{rl.triggerCellClickEvent(e,$)},!(v.onDblclick=e=>{rl.triggerCellDblclickEvent(e,$)})),Qe=1,Ze=1;if(ie&&xe.length){I=pe[a+":"+h];if(I){var{rowspan:x,colspan:u}=I;if(!x||!u)return renderEmptyElement(rl);1<x&&(z=!0,Ze=x,O.rowspan=x),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&&(fe.showStatus||fe.showUpdateStatus)&&we[ke]&&(Ke=rl.isUpdateByRow(t,ke));N=!s&&(oe||re);let el=(0,_util.getCellRestHeight)(Ne,m,y,Ee);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&&oe&&16<Z.length&&!V&&!Ce.immediate&&(a<me.visibleStartIndex-me.preloadSize||a>me.visibleEndIndex+me.preloadSize)||te&&re&&10<ee.length&&!ye.immediate&&!r.fixed&&(h<he.visibleStartIndex-he.preloadSize||h>he.visibleEndIndex+he.preloadSize))&&(ll=!0),1<Ze&&(j=ge[a+Ze-1])&&(o=ce[(0,_util.getRowid)(rl,j)])&&(el+=o.oTop+(0,_util.getCellRestHeight)(o,m,y,Ee)-Ne.oTop-(0,_util.getCellRestHeight)(Ne,m,y,Ee));C={};if(Ue&&(C.maxHeight=Ue+"px"),s&&ne){let l=0;if(1<Qe)for(let e=1;e<Qe;e++){var tl=ve[Ve+e];tl&&(l+=tl.renderWidth)}C.width=r.renderWidth+l-Te+"px"}oe||re||s||D||n?C.height=el+"px":C.minHeight=el+"px",Le&&(C.minHeight=Le+"px");R=[];M&&de?R.push((0,_vue.h)("div",{key:"tc",class:["vxe-cell",{"c--title":T,"c--tooltip":k,"c--ellipsis":Ae}],style:C})):(V&&R.push(...El(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":Ae}],style:C,title:T?rl.getCellLabel(t,r):null},c)),Y&&b&&(_=b.rule,ie=je?je.valid:null,xe=Object.assign(Object.assign(Object.assign({},$),b),{rule:b}),R.push((0,_vue.h)("div",{key:"tcv",class:["vxe-cell--valid-error-tip",(0,_dom.getPropClass)(w.className,xe)],style:_&&_.maxWidth?{width:_.maxWidth+"px"}:null},[(0,_vue.h)("div",{class:"vxe-cell--valid-error-wrapper vxe-cell--valid-error-theme-"+(w.theme||"normal")},[ie?rl.callSlot(ie,xe):[(0,_vue.h)("span",{class:"vxe-cell--valid-error-msg"},b.content)]])]))));let al=!1;return J&&Se.area&&!h&&Me&&(al=!0),!M&&f&&be&&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,$)})),(Be||Re)&&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,ze?"col--vertical-"+ze:"",g?"col--"+g:"",$e?"col--"+$e:"",{"col--last":A,"col--tree-node":Fe,"col--edit":He,"col--ellipsis":s,"col--cs-height":D,"col--rs-height":n,"col--to-row":al,"col--auto-height":N,"col--max-height":Ue,"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&&de||ll,"is--drag-cell":H&&(De||Ie||!F),"is--drag-disabled":Je,"col--dirty":Ke,"col--active":Q&&He&&se.row===t&&(se.column===r||"row"===fe.mode),"col--valid-error":!!b,"show--valid-bg":b&&w.showErrorBackground,"col--current":ue&&_e===r},(0,_dom.getPropClass)(E,$),(0,_dom.getPropClass)(qe,$),(0,_dom.getPropClass)(P,$)],key:G||re||oe||Oe.useKey||y.useKey||Oe.drag?S:L},O),{style:Object.assign({},_xeUtils.default.isFunction(Ge)?Ge($):Ge,_xeUtils.default.isFunction(X)?X($):X)}),v),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}=nl,W=gl.value,Q=e.value,V=l.value,P=sl.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 n=r,s=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:n})},p.onMouseleave=()=>{Cl()||rl.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:rl,seq:d,rowid:o,fixed:h,type:renderType,level:s,row:a,rowIndex:n,$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-"+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&&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,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||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=s*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: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":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=nl.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=nl.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:n,tableData:s,isColLoading:d,overflowX:u,scrollXLoad:c,scrollYLoad:p,dragRow:v,dragCol:g}=il,{visibleColumn:x,fullAllDataRowIdData:h,fullColumnIdData:m}=nl,w=D.value,_=dl.value;let f=s,b=o;s=z.value;d||!r&&u||(b=x),r&&s&&(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||n||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&&(n=u._index,c=v._index,x<n?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):(m=yl.value,(u=(p=w.name?m[w.name]||renderer.get(w.name):null)?p.renderTableEmpty||p.renderTableEmptyView||p.renderEmpty:null)?(0,_vn.getSlotVNs)(u(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:s?"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,s,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)])])])}}});