vxe-table
Version:
一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等...
1 lines • 12.9 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _xeUtils=_interopRequireDefault(require("xe-utils")),_conf=_interopRequireDefault(require("../../v-x-e-table/src/conf")),_vXETable=_interopRequireDefault(require("../../v-x-e-table")),_tools=require("../../tools"),_util=require("./util"),_dom=require("../../tools/src/dom");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _defineProperty(e,l,t){return l in e?Object.defineProperty(e,l,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[l]=t,e}function _toConsumableArray(e){return _arrayWithoutHoles(e)||_iterableToArray(e)||_unsupportedIterableToArray(e)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,l){if(e){if("string"==typeof e)return _arrayLikeToArray(e,l);var t=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(t="Object"===t&&e.constructor?e.constructor.name:t)||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(e,l):void 0}}function _iterableToArray(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}function _arrayWithoutHoles(e){if(Array.isArray(e))return _arrayLikeToArray(e)}function _arrayLikeToArray(e,l){(null==l||l>e.length)&&(l=e.length);for(var t=0,o=new Array(l);t<l;t++)o[t]=e[t];return o}var scrollProcessTimeout,renderType="body";function isOperateMouse(e){return e._isResize||e.lastScrollTime&&Date.now()<e.lastScrollTime+e.delayHover}function renderLine(e,l,t,o,r,n){var i=n.column,s=t.treeOpts,a=t.treeConfig,c=i.slots,i=i.treeNode;return c&&c.line?t.callSlot(c.line,n,e):a&&i&&s.line?[e("div",{class:"vxe-tree--line-wrapper"},[e("div",{class:"vxe-tree--line",style:{height:"".concat((0,_util.calcTreeLine)(n,r),"px"),left:"".concat(o*s.indent+(o?2-(0,_util.getOffsetSize)(t):0)+16,"px")}})])]:[]}function renderColumn(e,l,t,o,r,n,i,s,a,c,d,u,p,f,h,y){var v,g=t.$listeners,m=t.afterFullData,w=t.tableData,x=t.height,b=t.columnKey,T=t.overflowX,_=t.scrollXLoad,S=t.scrollYLoad,$=t.highlightCurrentRow,C=t.showOverflow,O=t.isAllOverflow,L=t.align,E=t.currentColumn,I=t.cellClassName,k=t.cellStyle,R=t.mergeList,Y=t.spanMethod,A=t.radioOpts,P=t.checkboxOpts,B=t.expandOpts,M=t.treeOpts,D=t.tooltipOpts,U=t.mouseConfig,q=t.editConfig,H=t.editOpts,X=t.editRules,j=t.validOpts,N=t.editStore,W=t.validStore,z=t.tooltipConfig,F=p.type,V=p.cellRender,K=p.editRender,G=p.align,J=p.showOverflow,Q=p.className,Z=p.treeNode,ee=N.actived,le=D.showAll||D.enabled,te=t.getColumnIndex(p),oe=t.getVTColumnIndex(p),re=(0,_tools.isEnableConf)(K),N=i?p.fixed!==i:p.fixed&&T,D=_xeUtils.default.isUndefined(J)||_xeUtils.default.isNull(J)?C:J,T="ellipsis"===D,ne="title"===D,ie=!0===D||"tooltip"===D,J=ne||ie||T,D={},G=G||L,L=W.row===a&&W.column===p,X=X&&j.showMessage&&("default"===j.message?x||1<w.length:"inline"===j.message),x={colid:p.id},se=g["cell-mouseenter"],ae=g["cell-mouseleave"],j=K&&q&&"dblclick"===H.trigger,ce={$table:t,$seq:o,seq:r,rowid:n,row:a,rowIndex:c,$rowIndex:d,_rowIndex:u,column:p,columnIndex:te,$columnIndex:f,_columnIndex:oe,fixed:i,type:renderType,isHidden:N,level:s,visibleData:m,data:w,items:y};if(!_&&!S||J||(T=J=!0),(ne||ie||le||se||z)&&(D.mouseenter=function(e){isOperateMouse(t)||(ne?_tools.DomTools.updateCellTitle(e.currentTarget,p):(ie||le)&&t.triggerBodyTooltipEvent(e,ce),se&&t.emitEvent("cell-mouseenter",Object.assign({cell:e.currentTarget},ce),e))}),(ie||le||ae||z)&&(D.mouseleave=function(e){isOperateMouse(t)||((ie||le)&&t.handleTargetLeaveEvent(e),ae&&t.emitEvent("cell-mouseleave",Object.assign({cell:e.currentTarget},ce),e))}),(P.range||U)&&(D.mousedown=function(e){t.triggerCellMousedownEvent(e,ce)}),($||g["cell-click"]||K&&q||"row"===B.trigger||"cell"===B.trigger||"row"===A.trigger||"radio"===p.type&&"cell"===A.trigger||"row"===P.trigger||"checkbox"===p.type&&"cell"===P.trigger||"row"===M.trigger||p.treeNode&&"cell"===M.trigger)&&(D.click=function(e){t.triggerCellClickEvent(e,ce)}),(j||g["cell-dblclick"])&&(D.dblclick=function(e){t.triggerCellDBLClickEvent(e,ce)}),R.length){u=(0,_util.mergeBodyMethod)(R,u,oe);if(u){var oe=u.rowspan,de=u.colspan;if(!oe||!de)return null;1<oe&&(x.rowspan=oe),1<de&&(x.colspan=de)}}else if(Y){de=Y(ce)||{},Y=de.rowspan,Y=void 0===Y?1:Y,de=de.colspan,de=void 0===de?1:de;if(!Y||!de)return null;1<Y&&(x.rowspan=Y),1<de&&(x.colspan=de)}!(N=N&&R&&(1<x.colspan||1<x.rowspan)?!1:N)&&q&&(K||V)&&(H.showStatus||H.showUpdateStatus)&&(v=t.isUpdateByRow(a,p.property));V=[];return N&&C&&O?V.push(e("div",{class:["vxe-cell",{"c--title":ne,"c--tooltip":ie,"c--ellipsis":T}]})):(V.push.apply(V,_toConsumableArray(renderLine(e,l,t,s,y,ce)).concat([e("div",{class:["vxe-cell",{"c--title":ne,"c--tooltip":ie,"c--ellipsis":T}],attrs:{title:ne?t.getCellLabel(a,p):null}},p.renderCell(e,ce))])),X&&L&&V.push(e("div",{class:"vxe-cell--valid",style:W.rule&&W.rule.maxWidth?{width:"".concat(W.rule.maxWidth,"px")}:null},[e("span",{class:"vxe-cell--valid-msg"},W.content)]))),e("td",{class:["vxe-body--column",p.id,(_defineProperty(e={},"col--".concat(G),G),_defineProperty(e,"col--".concat(F),F),_defineProperty(e,"col--last",f===h.length-1),_defineProperty(e,"col--tree-node",Z),_defineProperty(e,"col--edit",re),_defineProperty(e,"col--ellipsis",J),_defineProperty(e,"fixed--hidden",N),_defineProperty(e,"col--dirty",v),_defineProperty(e,"col--actived",q&&re&&ee.row===a&&(ee.column===p||"row"===H.mode)),_defineProperty(e,"col--valid-error",L),_defineProperty(e,"col--current",E===p),e),_tools.UtilTools.getClass(Q,ce),_tools.UtilTools.getClass(I,ce)],key:b?p.id:f,attrs:x,style:k?_xeUtils.default.isFunction(k)?k(ce):k:null,on:D},V)}function renderRows(u,p,f,h,y,v,g,m){var w=f.stripe,x=f.rowKey,b=f.highlightHoverRow,T=f.rowClassName,_=f.rowStyle,S=f.editConfig,$=f.showOverflow,C=f.treeConfig,O=f.treeOpts,L=f.editOpts,E=f.treeExpandeds,I=f.scrollYLoad,k=f.scrollYStore,R=f.editStore,Y=f.rowExpandeds,A=f.radioOpts,P=f.checkboxOpts,B=f.expandColumn,M=f.hasFixedColumn,D=[];return g.forEach(function(t,o){var e={},r=(i=o)+1;I&&(r+=k.startIndex);var n=f.getVTRowIndex(t),i=f.getRowIndex(t);b&&(e.mouseenter=function(e){isOperateMouse(f)||f.triggerHoverEvent(e,{row:t,rowIndex:i})},e.mouseleave=function(){isOperateMouse(f)||f.clearHoverRow()});var l,s,a=_tools.UtilTools.getRowid(f,t),c={$table:f,$seq:h,seq:r,rowid:a,fixed:v,type:renderType,level:y,row:t,rowIndex:i,$rowIndex:o},d=!1;S&&(d=-1<R.insertList.indexOf(t)),D.push(u("tr",{class:["vxe-body--row",{"row--stripe":w&&(f.getVTRowIndex(t)+1)%2==0,"is--new":d,"row--new":d&&(L.showStatus||L.showInsertStatus),"row--radio":A.highlight&&f.selectRow===t,"row--checked":P.highlight&&f.isCheckedByCheckboxRow(t)},T?_xeUtils.default.isFunction(T)?T(c):T:""],attrs:{rowid:a},style:_?_xeUtils.default.isFunction(_)?_(c):_:null,key:x||C?a:o,on:e},m.map(function(e,l){return renderColumn(u,p,f,h,r,a,v,y,t,i,o,n,e,l,m,g)}))),B&&Y.length&&-1<Y.indexOf(t)&&(C&&(l={paddingLeft:"".concat(y*O.indent+30,"px")}),s=B.showOverflow,c=_xeUtils.default.isUndefined(s)||_xeUtils.default.isNull(s)?$:s,s={$table:f,$seq:h,seq:r,column:B,fixed:v,type:renderType,level:y,row:t,rowIndex:i,$rowIndex:o},D.push(u("tr",{class:"vxe-body--expanded-row",key:"expand_".concat(a),style:_?_xeUtils.default.isFunction(_)?_(s):_:null,on:e},[u("td",{class:["vxe-body--expanded-column",{"fixed--hidden":v&&!M,"col--ellipsis":c}],attrs:{colspan:m.length}},[u("div",{class:"vxe-body--expanded-cell",style:l},[B.renderData(u,s)])])]))),C&&E.length&&((s=t[O.children])&&s.length&&-1<E.indexOf(t)&&D.push.apply(D,_toConsumableArray(renderRows(u,p,f,(h?"".concat(h,"."):"").concat(r),y+1,v,s,m))))}),D}function syncBodyScroll(e,l,t){(l||t)&&(l&&(l.onscroll=null,l.scrollTop=e),t&&(t.onscroll=null,t.scrollTop=e),clearTimeout(scrollProcessTimeout),scrollProcessTimeout=setTimeout(function(){l&&(l.onscroll=l._onscroll),t&&(t.onscroll=t._onscroll)},300))}var _default={name:"VxeTableBody",props:{tableData:Array,tableColumn:Array,fixedColumn:Array,size:String,fixedType:String},data:function(){return{wheelTime:null,wheelYSize:0,wheelYInterval:0,wheelYTotal:0}},mounted:function(){var e=this.$parent,l=this.$el,t=this.$refs,o=this.fixedType,e=e.elemStore,o="".concat(o||"main","-body-");e["".concat(o,"wrapper")]=l,e["".concat(o,"table")]=t.table,e["".concat(o,"colgroup")]=t.colgroup,e["".concat(o,"list")]=t.tbody,e["".concat(o,"xSpace")]=t.xSpace,e["".concat(o,"ySpace")]=t.ySpace,e["".concat(o,"emptyBlock")]=t.emptyBlock,this.$el.onscroll=this.scrollEvent,this.$el._onscroll=this.scrollEvent},beforeDestroy:function(){clearTimeout(this.wheelTime),this.$el._onscroll=null,this.$el.onscroll=null},render:function(t){var e=this._e,l=this.$parent,o=this.fixedColumn,r=this.fixedType,n=l.$scopedSlots,i=l.tId,s=l.tableData,a=l.tableColumn,c=l.showOverflow,d=l.keyboardConfig,u=l.keyboardOpts,p=l.mergeList,f=l.spanMethod,h=l.scrollXLoad,y=l.scrollYLoad,v=l.isAllOverflow,g=l.emptyRender,m=l.emptyOpts,w=l.mouseConfig,x=l.mouseOpts,b=l.sYOpts;return r&&(p.length||f||d&&u.isMerge||!(h||y||c&&v)||(a=o)),m=n.empty?n.empty.call(this,{$table:l},t):(g=g?_vXETable.default.renderer.get(m.name):null)&&g.renderEmpty?g.renderEmpty.call(this,t,m,{$table:l}):l.emptyText||_conf.default.i18n("vxe.table.emptyText"),t("div",{class:["vxe-table--body-wrapper",r?"fixed-".concat(r,"--wrapper"):"body--wrapper"],attrs:{xid:i},on:y&&"wheel"===b.mode?{wheel:this.wheelEvent}:{}},[r?e():t("div",{class:"vxe-body--x-space",ref:"xSpace"}),t("div",{class:"vxe-body--y-space",ref:"ySpace"}),t("table",{class:"vxe-table--body",attrs:{xid:i,cellspacing:0,cellpadding:0,border:0},ref:"table"},[t("colgroup",{ref:"colgroup"},a.map(function(e,l){return t("col",{attrs:{name:e.id},key:l})})),t("tbody",{ref:"tbody"},renderRows(t,this,l,"",0,r,s,a))]),t("div",{class:"vxe-table--checkbox-range"}),w&&x.area?t("div",{class:"vxe-table--cell-area"},[t("span",{class:"vxe-table--cell-main-area"},x.extension?[t("span",{class:"vxe-table--cell-main-area-btn",on:{mousedown:function(e){l.triggerCellExtendMousedownEvent(e,{$table:l,fixed:r,type:renderType})}}})]:null),t("span",{class:"vxe-table--cell-copy-area"}),t("span",{class:"vxe-table--cell-extend-area"}),t("span",{class:"vxe-table--cell-multi-area"}),t("span",{class:"vxe-table--cell-active-area"})]):null,r?null:t("div",{class:"vxe-table--empty-block",ref:"emptyBlock"},[t("div",{class:"vxe-table--empty-content"},m)])])},methods:{scrollEvent:function(e){var l=this.$el,t=this.$parent,o=this.fixedType,r=t.$refs,n=t.highlightHoverRow,i=t.scrollXLoad,s=t.scrollYLoad,a=t.lastScrollTop,c=t.lastScrollLeft,d=r.tableHeader,u=r.tableBody,p=r.leftBody,f=r.rightBody,h=r.tableFooter,y=r.validTip,r=d?d.$el:null,d=h?h.$el:null,h=u.$el,u=p?p.$el:null,p=f?f.$el:null,f=l.scrollTop,l=h.scrollLeft,c=l!==c,a=f!==a;t.lastScrollTop=f,t.lastScrollLeft=l,t.lastScrollTime=Date.now(),n&&t.clearHoverRow(),u&&"left"===o?syncBodyScroll(f=u.scrollTop,h,p):p&&"right"===o?syncBodyScroll(f=p.scrollTop,h,u):(c&&(r&&(r.scrollLeft=h.scrollLeft),d&&(d.scrollLeft=h.scrollLeft)),(u||p)&&(t.checkScrolling(),a&&syncBodyScroll(f,u,p))),i&&c&&t.triggerScrollXEvent(e),s&&a&&t.triggerScrollYEvent(e),c&&y&&y.visible&&y.updatePlacement(),t.emitEvent("scroll",{type:renderType,fixed:o,scrollTop:f,scrollLeft:l,isX:c,isY:a},e)},handleWheel:function(s,a,e,c,d){var u=this,p=this.$parent,l=p.$refs,t=l.tableBody,o=l.leftBody,l=l.rightBody,f=t.$el,h=o?o.$el:null,y=l?l.$el:null,l=this.isPrevWheelTop===a?Math.max(0,this.wheelYSize-this.wheelYTotal):0;this.isPrevWheelTop=a,this.wheelYSize=Math.abs(a?e-l:e+l),this.wheelYInterval=0,this.wheelYTotal=0,clearTimeout(this.wheelTime),function e(){var l,t,o=u.fixedType,r=u.wheelYTotal,n=u.wheelYSize,i=u.wheelYInterval;r<n&&(n<(r+=i=Math.max(5,Math.floor(1.5*i)))&&(i-=r-n),t=f.scrollTop,l=f.clientHeight,n=f.scrollHeight,t=t+i*(a?-1:1),f.scrollTop=t,h&&(h.scrollTop=t),y&&(y.scrollTop=t),(a?t<n-l:0<=t)&&(u.wheelTime=setTimeout(e,10)),u.wheelYTotal=r,u.wheelYInterval=i,p.emitEvent("scroll",{type:renderType,fixed:o,scrollTop:f.scrollTop,scrollLeft:f.scrollLeft,isX:c,isY:d},s))}()},wheelEvent:function(e){var l=e.deltaY,t=e.deltaX,o=this.$el,r=this.$parent,n=r.$refs,i=r.highlightHoverRow,s=r.scrollXLoad,a=r.scrollYLoad,c=r.lastScrollTop,d=r.lastScrollLeft,u=n.tableBody,p=n.validTip,n=u.$el,u=_dom.browse.firefox?40*l:l,l=_dom.browse.firefox?40*t:t,t=u<0;(t?o.scrollTop<=0:o.scrollTop>=o.scrollHeight-o.clientHeight)||(o=o.scrollTop+u,d=(l=n.scrollLeft+l)!==d,(c=o!==c)&&(e.preventDefault(),r.lastScrollTop=o,r.lastScrollLeft=l,r.lastScrollTime=Date.now(),i&&r.clearHoverRow(),this.handleWheel(e,t,u,d,c),s&&d&&r.triggerScrollXEvent(e),a&&c&&r.triggerScrollYEvent(e),d&&p&&p.visible&&p.updatePlacement()))}}};exports.default=_default;