vxe-table-select-area
Version:
一个基于 vxe-table 的可区域选中复制、粘贴的组件
1 lines • 5.4 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")),_size=_interopRequireDefault(require("../../mixins/size")),_resize=require("../../tools/resize"),_event=require("../../tools/event"),_dom=require("../../tools/dom"),_index=_interopRequireDefault(require("../../loading/index"));function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}var _default2={name:"VxeList",mixins:[_size.default],props:{data:Array,height:[Number,String],maxHeight:[Number,String],loading:Boolean,className:[String,Function],size:{type:String,default:function(){return _conf.default.list.size||_conf.default.size}},autoResize:{type:Boolean,default:function(){return _conf.default.list.autoResize}},syncResize:[Boolean,String,Number],scrollY:Object},data:function(){return{scrollYLoad:!1,bodyHeight:0,topSpaceHeight:0,items:[]}},computed:{sYOpts:function(){return Object.assign({},_conf.default.list.scrollY,this.scrollY)},styles:function(){var t=this.height,e=this.maxHeight,i={};return t?i.height=isNaN(t)?t:"".concat(t,"px"):e&&(i.height="auto",i.maxHeight=isNaN(e)?e:"".concat(e,"px")),i}},watch:{data:function(t){this.loadData(t)},syncResize:function(t){var e=this;t&&(this.recalculate(),this.$nextTick(function(){return setTimeout(function(){return e.recalculate()})}))}},created:function(){Object.assign(this,{fullData:[],lastScrollLeft:0,lastScrollTop:0,scrollYStore:{startIndex:0,endIndex:0,visibleSize:0}}),this.loadData(this.data),_event.GlobalEvent.on(this,"resize",this.handleGlobalResizeEvent)},mounted:function(){var t,e=this;this.autoResize&&((t=(0,_resize.createResizeEvent)(function(){return e.recalculate()})).observe(this.$el),this.$resize=t)},activated:function(){var t=this;this.recalculate().then(function(){return t.refreshScroll()})},beforeDestroy:function(){this.$resize&&this.$resize.disconnect()},destroyed:function(){_event.GlobalEvent.off(this,"resize")},render:function(t){var e=this.$scopedSlots,i=this.styles,s=this.bodyHeight,l=this.topSpaceHeight,r=this.items,a=this.className,o=this.loading;return t("div",{class:["vxe-list",a?_xeUtils.default.isFunction(a)?a({$list:this}):a:"",{"is--loading":o}]},[t("div",{ref:"virtualWrapper",class:"vxe-list--virtual-wrapper",style:i,on:{scroll:this.scrollEvent}},[t("div",{ref:"ySpace",class:"vxe-list--y-space",style:{height:s?"".concat(s,"px"):""}}),t("div",{ref:"virtualBody",class:"vxe-list--body",style:{marginTop:l?"".concat(l,"px"):""}},e.default?e.default.call(this,{items:r,$list:this},t):[])]),t(_index.default,{class:"vxe-list--loading",props:{value:o}})])},methods:{getParentElem:function(){return this.$el.parentNode},loadData:function(t){var e=this,i=this.sYOpts,s=this.scrollYStore,t=t||[];return Object.assign(s,{startIndex:0,endIndex:1,visibleSize:0}),this.fullData=t,this.scrollYLoad=i.enabled&&-1<i.gt&&(0===i.gt||i.gt<=t.length),this.handleData(),this.computeScrollLoad().then(function(){e.refreshScroll()})},reloadData:function(t){return this.clearScroll(),this.loadData(t)},handleData:function(){var t=this.fullData,e=this.scrollYLoad,i=this.scrollYStore;return this.items=e?t.slice(i.startIndex,i.endIndex):t.slice(0),this.$nextTick()},recalculate:function(){var t=this.$el;return t.clientWidth&&t.clientHeight?this.computeScrollLoad():Promise.resolve()},clearScroll:function(){var t=this.$refs.virtualWrapper;return t&&(t.scrollTop=0),this.$nextTick()},refreshScroll:function(){var t=this,e=this.lastScrollLeft,i=this.lastScrollTop;return this.clearScroll().then(function(){if(e||i)return t.lastScrollLeft=0,t.lastScrollTop=0,t.scrollTo(e,i)})},scrollTo:function(t,e){var i=this,s=this.$refs.virtualWrapper;return _xeUtils.default.isNumber(t)&&(s.scrollLeft=t),_xeUtils.default.isNumber(e)&&(s.scrollTop=e),this.scrollYLoad?new Promise(function(t){return setTimeout(function(){return t(i.$nextTick())},50)}):this.$nextTick()},computeScrollLoad:function(){var o=this;return this.$nextTick().then(function(){var t,e=o.$refs,i=o.sYOpts,s=o.scrollYLoad,l=o.scrollYStore,r=e.virtualWrapper,e=e.virtualBody,a=0;(t=e?(t=i.sItem?e.querySelector(i.sItem):t)||e.children[0]:t)&&(a=t.offsetHeight),a=Math.max(20,a),l.rowHeight=a,s?(e=Math.max(8,Math.ceil(r.clientHeight/a)),t=i.oSize?_xeUtils.default.toNumber(i.oSize):_dom.browse.msie?20:_dom.browse.edge?10:0,l.offsetSize=t,l.visibleSize=e,l.endIndex=Math.max(l.startIndex,e+t,l.endIndex),o.updateYData()):o.updateYSpace(),o.rowHeight=a})},scrollEvent:function(t){var e=t.target,i=e.scrollTop,e=e.scrollLeft,s=e!==this.lastScrollLeft,l=i!==this.lastScrollTop;this.lastScrollTop=i,this.lastScrollLeft=e,this.scrollYLoad&&this.loadYData(t),this.$emit("scroll",{scrollLeft:e,scrollTop:i,isX:s,isY:l,$event:t})},loadYData:function(t){var e=this.scrollYStore,i=e.startIndex,s=e.endIndex,l=e.visibleSize,r=e.offsetSize,a=e.rowHeight,t=t.target.scrollTop,t=Math.floor(t/a),a=Math.max(0,t-1-r),r=t+l+r;!(t<=i||s-l-1<=t)||i===a&&s===r||(e.startIndex=a,e.endIndex=r,this.updateYData())},updateYData:function(){this.handleData(),this.updateYSpace()},updateYSpace:function(){var t=this.scrollYStore,e=this.scrollYLoad,i=this.fullData;this.bodyHeight=e?i.length*t.rowHeight:0,this.topSpaceHeight=e?Math.max(t.startIndex*t.rowHeight,0):0},handleGlobalResizeEvent:function(){this.recalculate()}}};exports.default=_default2;