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