UNPKG

vxe-table-select-area

Version:

一个基于 vxe-table 的可区域选中复制、粘贴的组件

1 lines 16.6 kB
"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"),_size=_interopRequireDefault(require("../../mixins/size")),_dom=_interopRequireDefault(require("../../tools/dom")),_vn=require("../../tools/vn"),_index=_interopRequireDefault(require("../../select-area-dom/index")),_constant=require("../../select-area/common/constant"),_clickoutside=require("../../select-area/directives/clickoutside");function _getRequireWildcardCache(e){var t,l;return"function"!=typeof WeakMap?null:(t=new WeakMap,l=new WeakMap,(_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=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function _toPropertyKey(e){e=_toPrimitive(e,"string");return"symbol"===_typeof(e)?e:String(e)}function _toPrimitive(e,t){if("object"!==_typeof(e)||null===e)return e;var l=e[Symbol.toPrimitive];if(void 0===l)return("string"===t?String:Number)(e);l=l.call(e,t||"default");if("object"!==_typeof(l))return l;throw new TypeError("@@toPrimitive must return a primitive value.")}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){var l;if(e)return"string"==typeof e?_arrayLikeToArray(e,t):"Map"===(l="Object"===(l=Object.prototype.toString.call(e).slice(8,-1))&&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,D,t,l,r,o,i,n,a,s,H,c,d,q,u){var N,p=t.$listeners,f=t.afterFullData,y=t.tableData,h=t.height,Y=t.columnKey,m=t.overflowX,v=t.sYOpts,W=t.scrollXLoad,B=t.scrollYLoad,U=t.highlightCurrentRow,j=t.showOverflow,X=t.isAllOverflow,g=t.align,z=t.currentColumn,V=t.cellClassName,b=t.cellStyle,x=t.mergeList,F=t.spanMethod,K=t.radioOpts,G=t.checkboxOpts,J=t.expandOpts,Q=t.treeOpts,w=t.tooltipOpts,Z=t.mouseConfig,_=t.editConfig,T=t.editOpts,ee=t.editRules,S=t.validOpts,te=t.editStore,C=t.validStore,le=t.tooltipConfig,re=t.rowOpts,oe=t.columnOpts,ie=c.type,ne=c.cellRender,O=c.editRender,ae=c.align,E=c.showOverflow,se=c.className,ce=c.treeNode,te=te.actived,v=v.rHeight,L=re.height,R=O||ne,R=R?_vXETable.default.renderer.get(R.name):null,de=R?R.cellClassName:"",R=R?R.cellStyle:"",I=w.showAll||w.enabled,w=t.getColumnIndex(c),ue=t.getVTColumnIndex(c),pe=(0,_utils.isEnableConf)(O),m=o?c.fixed!==o:c.fixed&&m,E=_xeUtils.default.isUndefined(E)||_xeUtils.default.isNull(E)?j:E,$="ellipsis"===E,k="title"===E,A=!0===E||"tooltip"===E,E=k||A||$,M={},ae=ae||g,g=C.row===n&&C.column===c,ee=ee&&S.showMessage&&("default"===S.message?h||1<y.length:"inline"===S.message),h={colid:c.id},fe=p["cell-mouseenter"],ye=p["cell-mouseleave"],S=O&&_&&"dblclick"===T.trigger,P={$table:t,$grid:t.$xegrid,seq:l,rowid:r,row:n,rowIndex:a,$rowIndex:s,_rowIndex:H,column:c,columnIndex:w,$columnIndex:d,_columnIndex:ue,fixed:o,type:renderType,isHidden:m,level:i,visibleData:f,data:y,items:u};if(!W&&!B||E||($=E=!0),(k||A||I||fe||le)&&(M.mouseenter=function(e){isOperateMouse(t)||(k?_dom.default.updateCellTitle(e.currentTarget,c):(A||I)&&t.triggerBodyTooltipEvent(e,P),fe&&(t.bodyCellMouseover({evnt:e,params:P}),t.emitEvent("cell-mouseenter",Object.assign({cell:e.currentTarget},P),e)))}),(A||I||ye||le)&&(M.mouseleave=function(e){isOperateMouse(t)||((A||I)&&t.handleTargetLeaveEvent(e),ye&&t.emitEvent("cell-mouseleave",Object.assign({cell:e.currentTarget},P),e))}),(G.range||Z)&&(M.mousedown=function(e){t.triggerCellMousedownEvent(e,P)}),(re.isCurrent||U||p["cell-click"]||O&&_||"row"===J.trigger||"cell"===J.trigger||"row"===K.trigger||"radio"===c.type&&"cell"===K.trigger||"row"===G.trigger||"checkbox"===c.type&&"cell"===G.trigger||"row"===Q.trigger||c.treeNode&&"cell"===Q.trigger)&&(M.click=function(e){t.triggerCellClickEvent(e,P)}),(S||p["cell-dblclick"])&&(M.dblclick=function(e){t.triggerCellDblclickEvent(e,P)}),x.length){l=(0,_util.mergeBodyMethod)(x,H,ue);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(P)||{},w=s.rowspan,o=void 0===w?1:w,i=s.colspan,f=void 0===i?1:i;if(!o||!f)return null;1<o&&(h.rowspan=o),1<f&&(h.colspan=f)}!(m=m&&x&&(1<h.colspan||1<h.rowspan)?!1:m)&&_&&(O||ne)&&(T.showStatus||T.showUpdateStatus)&&(N=t.isUpdateByRow(n,c.field));y=[];return m&&j&&X?y.push(e("div",{class:["vxe-cell",{"c--title":k,"c--tooltip":A,"c--ellipsis":$}],style:{maxHeight:E&&(v||L)?"".concat(v||L,"px"):""}})):(y.push.apply(y,_toConsumableArray(renderLine(e,D,t,P)).concat([e("div",{class:["vxe-cell",{"c--title":k,"c--tooltip":A,"c--ellipsis":$}],style:{maxHeight:E&&(v||L)?"".concat(v||L,"px"):""},attrs:{title:k?t.getCellLabel(n,c):null}},c.renderCell(e,P))])),ee&&g&&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(u={},"col--".concat(ae),ae),_defineProperty(u,"col--".concat(ie),ie),_defineProperty(u,"col--last",d===q.length-1),_defineProperty(u,"col--tree-node",ce),_defineProperty(u,"col--edit",pe),_defineProperty(u,"col--ellipsis",E),_defineProperty(u,"fixed--hidden",m),_defineProperty(u,"col--dirty",N),_defineProperty(u,"col--actived",_&&pe&&te.row===n&&(te.column===c||"row"===T.mode)),_defineProperty(u,"col--valid-error",g),_defineProperty(u,"col--current",z===c),u),_utils.default.getClass(de,P),_utils.default.getClass(se,P),_utils.default.getClass(V,P)],key:Y||oe.useKey?c.id:d,attrs:h,style:Object.assign({height:E&&(v||L)?"".concat(v||L,"px"):""},_xeUtils.default.isFunction(R)?R(P):R,_xeUtils.default.isFunction(b)?b(P):b),on:M},y)}function renderRows(y,h,m,v,g,b){var x=m.stripe,w=m.rowKey,_=m.highlightHoverRow,T=m.rowClassName,S=m.rowStyle,C=m.editConfig,O=m.showOverflow,E=m.treeConfig,L=m.treeOpts,R=m.expandOpts,I=m.editOpts,$=m.treeExpandeds,k=m.scrollYLoad,A=m.rowExpandeds,M=m.radioOpts,P=m.checkboxOpts,D=m.expandColumn,H=m.hasFixedColumn,q=m.fullAllDataRowIdData,N=m.rowOpts,Y=[];return g.forEach(function(l,r){var e,t={},o=m.getVTRowIndex(l),i=m.getRowIndex(l),n=((N.isHover||_)&&(t.mouseenter=function(e){isOperateMouse(m)||m.triggerHoverEvent(e,{row:l,rowIndex:i})},t.mouseleave=function(){isOperateMouse(m)||m.clearHoverRow()}),(0,_util.getRowid)(m,l)),a=q[n],s=a?a.level:0,c=a?a.seq:-1,a={$table:m,seq:c,rowid:n,fixed:v,type:renderType,level:s,row:l,rowIndex:i,$rowIndex:r},d=D&&A.length&&-1<A.indexOf(l),u=!1,p=[],f=!1;C&&(f=m.isInsertByRow(l)),E&&!k&&!L.transform&&$.length&&(u=(p=l[L.children])&&p.length&&-1<$.indexOf(l)),Y.push(y("tr",{class:["vxe-body--row",E?"row--level-".concat(s):"",{"row--stripe":x&&(m.getVTRowIndex(l)+1)%2==0,"is--new":f,"is--expand-row":d,"is--expand-tree":u,"row--new":f&&(I.showStatus||I.showInsertStatus),"row--radio":M.highlight&&m.selectRow===l,"row--checked":P.highlight&&m.isCheckedByCheckboxRow(l)},T?_xeUtils.default.isFunction(T)?T(a):T:""],attrs:{rowid:n},style:S?_xeUtils.default.isFunction(S)?S(a):S:null,key:w||N.useKey||E?n:r,on:t},b.map(function(e,t){return renderColumn(y,h,m,c,n,v,s,l,i,r,o,e,t,b,g)}))),d&&(f={},(a=R.height)&&(f.height="".concat(a,"px")),E&&(f.paddingLeft="".concat(s*L.indent+30,"px")),d=D.showOverflow,d=_xeUtils.default.isUndefined(d)||_xeUtils.default.isNull(d)?O:d,e={$table:m,seq:c,column:D,fixed:v,type:renderType,level:s,row:l,rowIndex:i,$rowIndex:r},Y.push(y("tr",{class:"vxe-body--expanded-row",key:"expand_".concat(n),style:S?_xeUtils.default.isFunction(S)?S(e):S:null,on:t},[y("td",{class:{"vxe-body--expanded-column":1,"fixed--hidden":v&&!H,"col--ellipsis":d},attrs:{colspan:b.length}},[y("div",{class:{"vxe-body--expanded-cell":1,"is--ellipsis":a},style:f},[D.renderData(y,e)])])]))),u&&Y.push.apply(Y,_toConsumableArray(renderRows(y,h,m,v,p,b)))}),Y}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",mixins:[_size.default],directives:{"click-outside":_clickoutside.clickoutside},props:{tableData:Array,tableColumn:Array,fixedColumn:Array,size:String,fixedType:String},data:function(){return{wheelTime:null,wheelYSize:0,wheelYInterval:0,wheelYTotal:0,editInputRef:"editInputRef"}},mounted:function(){var t=this.$parent,e=this.$el,l=this.$refs,r=this.fixedType,o=t.elemStore,r="".concat(r||"main","-body-");o["".concat(r,"wrapper")]=e,o["".concat(r,"table")]=l.table,o["".concat(r,"colgroup")]=l.colgroup,o["".concat(r,"list")]=l.tbody,o["".concat(r,"xSpace")]=l.xSpace,o["".concat(r,"ySpace")]=l.ySpace,o["".concat(r,"emptyBlock")]=l.emptyBlock,this.$el.onscroll=this.scrollEvent,this.$el._onscroll=this.scrollEvent,t.$on(_constant.EMIT_EVENTS.SELECTION_CORNER_MOUSEDOWN,function(e){t.cellSelectionCornerMousedown(e)}),t.$on(_constant.EMIT_EVENTS.SELECTION_CORNER_MOUSEUP,function(e){t.cellSelectionCornerMouseup(e)}),t.$on(_constant.EMIT_EVENTS.AUTOFILLING_DIRECTION_CHANGE,function(e){t.autofillingDirectionChange(e)})},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.expandColumn,u=t.showOverflow,p=t.keyboardConfig,f=t.keyboardOpts,y=t.mergeList,h=t.spanMethod,m=t.scrollXLoad,v=t.scrollYLoad,g=t.isAllOverflow,b=t.emptyOpts,x=t.mouseConfig,w=t.mouseOpts,_=t.sYOpts;return o&&(s=d||!(m||v||u&&g)||y.length||h||p&&f.isMerge?c:r),u=i.empty?i.empty.call(this,{$table:t},l):(m=(d=b.name?_vXETable.default.renderer.get(b.name):null)?d.renderEmpty:null)?(0,_vn.getSlotVNs)(m.call(this,l,b,{$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:v&&"wheel"===_.mode?{wheel:this.wheelEvent}:{mouseup:function(){t.tableContainerMouseup()}},directives:[{name:"click-outside",value:function(e){t.tableClickOutside(e)}}]},[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"}),x&&w.area?l("div",{class:"vxe-table--cell-area"},[l("span",{class:"vxe-table--cell-main-area"},w.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,l(_index.default,{ref:"VxeSelectAreaDom",props:{tableData:a,tableColumn:s},on:_defineProperty({},_constant.EMIT_EVENTS.CELL_SELECTION_RANGE_DATA_CHANGE,function(e){t.cellSelectionRangeDataChange(e)})}),o?null:l("div",{class:"vxe-table--empty-block",ref:"emptyBlock"},[l("div",{class:"vxe-table--empty-content"},u)])])},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,m=o.tableFooter,o=o.validTip,p=p?p.$el:null,m=m?m.$el:null,f=f.$el,y=y?y.$el:null,h=h?h.$el:null,v=i["main-body-ySpace"],i=i["main-body-xSpace"],v=(s&&v?v:f).clientHeight,i=(a&&i?i:f).clientWidth,t=t.scrollTop,g=f.scrollLeft,d=g!==d,c=t!==c;l.lastScrollTop=t,l.lastScrollLeft=g,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),m)&&(m.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:g,scrollHeight:f.scrollHeight,scrollWidth:f.scrollWidth,bodyHeight:v,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"],m=(r&&n?n:f).clientHeight,v=(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:m,bodyWidth:v,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;