vxe-table
Version:
一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等...
1 lines • 5.65 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _ctor=_interopRequireDefault(require("xe-utils/ctor")),_tools=require("../../tools");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var browse=_tools.DomTools.browse;function getTargetOffset(e,t){var o=0,l=0,n=!browse.firefox&&_tools.DomTools.hasClass(e,"vxe-checkbox--label");if(n){var r=getComputedStyle(e);o-=_ctor.default.toNumber(r.paddingTop),l-=_ctor.default.toNumber(r.paddingLeft)}for(;e&&e!==t;)if(o+=e.offsetTop,l+=e.offsetLeft,e=e.offsetParent,n){var s=getComputedStyle(e);o-=_ctor.default.toNumber(s.paddingTop),l-=_ctor.default.toNumber(s.paddingLeft)}return{offsetTop:o,offsetLeft:l}}function getCheckboxRangeRows(e,t,o,l){var n=0,r=[],s=0<l,i=0<l?l:Math.abs(l)+o.offsetHeight,c=e.afterFullData,a=e.scrollYStore;if(e.scrollYLoad){var u=e.getVTRowIndex(t.row);r=s?c.slice(u,u+Math.ceil(i/a.rowHeight)):c.slice(u-Math.floor(i/a.rowHeight)+1,u+1)}else for(var h=s?"next":"previous";o&&n<i;)r.push(e.getRowNode(o).item),n+=o.offsetHeight,o=o["".concat(h,"ElementSibling")];return r}var _default={methods:{moveTabSelected:function(e,t,o){var l,n,r,s=this,i=this.afterFullData,c=this.visibleColumn,a=this.editConfig,u=this.editOpts,h=Object.assign({},e),f=this.getVTRowIndex(h.row),d=this.getVTColumnIndex(h.column);o.preventDefault(),t?d<=0?0<f&&(l=i[n=f-1],r=c.length-1):r=d-1:d>=c.length-1?f<i.length-1&&(l=i[n=f+1],r=0):r=d+1;var g=c[r];g&&(l?(h.rowIndex=n,h.row=l):h.rowIndex=f,h.columnIndex=r,h.column=g,h.cell=this.getCell(h.row,h.column),a?"click"!==u.trigger&&"dblclick"!==u.trigger||("row"===u.mode?this.handleActived(h,o):this.scrollToRow(h.row,h.column).then(function(){return s.handleSelected(h,o)})):this.scrollToRow(h.row,h.column).then(function(){return s.handleSelected(h,o)}))},moveCurrentRow:function(e,t,o){var l,n=this,r=this.currentRow,s=this.treeConfig,i=this.treeOpts,c=this.afterFullData;if(o.preventDefault(),r)if(s){var a=_ctor.default.findTree(c,function(e){return e===r},i),u=a.index,h=a.items;e&&0<u?l=h[u-1]:t&&u<h.length-1&&(l=h[u+1])}else{var f=this.getVTRowIndex(r);e&&0<f?l=c[f-1]:t&&f<c.length-1&&(l=c[f+1])}else l=c[0];if(l){var d={$table:this,row:l};this.scrollToRow(l).then(function(){return n.triggerCurrentRowEvent(o,d)})}},moveSelected:function(e,t,o,l,n,r){var s=this,i=this.afterFullData,c=this.visibleColumn,a=Object.assign({},e),u=this.getVTRowIndex(a.row),h=this.getVTColumnIndex(a.column);r.preventDefault(),o&&0<u?(a.rowIndex=u-1,a.row=i[a.rowIndex]):n&&u<i.length-1?(a.rowIndex=u+1,a.row=i[a.rowIndex]):t&&h?(a.columnIndex=h-1,a.column=c[a.columnIndex]):l&&h<c.length-1&&(a.columnIndex=h+1,a.column=c[a.columnIndex]),this.scrollToRow(a.row,a.column).then(function(){a.cell=s.getCell(a.row,a.column),s.handleSelected(a,r)})},triggerHeaderCellMousedownEvent:function(e,t){var o=this.mouseConfig,l=this.mouseOpts;if(o&&l.area&&this.handleHeaderCellAreaEvent){var n=e.currentTarget,r=_tools.DomTools.getEventTargetNode(e,n,"vxe-cell--sort").flag,s=_tools.DomTools.getEventTargetNode(e,n,"vxe-cell--filter").flag;this.handleHeaderCellAreaEvent(e,Object.assign({cell:n,triggerSort:r,triggerFilter:s},t))}this.focus(),this.closeMenu()},triggerCellMousedownEvent:function(e,t){var o=e.currentTarget;t.cell=o,this.handleCellMousedownEvent(e,t),this.focus(),this.closeFilter(),this.closeMenu()},handleCellMousedownEvent:function(e,t){var o=this.editConfig,l=this.editOpts,n=this.handleSelected,r=this.checkboxConfig,s=this.checkboxOpts,i=this.mouseConfig,c=this.mouseOpts;if(i&&c.area&&this.handleCellAreaEvent)return this.handleCellAreaEvent(e,t);r&&s.range&&this.handleCheckboxRangeEvent(e,t),i&&c.selected&&(o&&"cell"!==l.mode||n(t,e))},handleCheckboxRangeEvent:function(e,u){var h=this,t=u.column,o=u.cell;if("checkbox"===t.type){var l=this.$el,n=this.elemStore,f=e.clientX,d=e.clientY,g=n["".concat(t.fixed||"main","-body-wrapper")]||n["main-body-wrapper"],m=g.querySelector(".vxe-table--checkbox-range"),r=document.onmousemove,s=document.onmouseup,v=o.parentNode,p=this.getCheckboxRecords(),w=[],i=getTargetOffset(e.target,g),x=i.offsetTop+e.offsetY,b=i.offsetLeft+e.offsetX,T=g.scrollTop,c=v.offsetHeight,a=null,C=!1,R=1,_=function(e,t){h.emitEvent("checkbox-range-".concat(e),{records:h.getCheckboxRecords(),reserves:h.getCheckboxReserveRecords()},t)},k=function(e){var t=e.clientX,o=e.clientY,l=t-f,n=o-d+(g.scrollTop-T),r=Math.abs(n),s=Math.abs(l),i=x,c=b;n<1?(i+=n)<1&&(i=1,r=x):r=Math.min(r,g.scrollHeight-x-1),l<1?(c+=l,b<s&&(c=1,s=b)):s=Math.min(s,g.clientWidth-b-1),m.style.height="".concat(r,"px"),m.style.width="".concat(s,"px"),m.style.left="".concat(c,"px"),m.style.top="".concat(i,"px"),m.style.display="block";var a=getCheckboxRangeRows(h,u,v,n<1?-r:r);10<r&&a.length!==w.length&&(w=a,e.ctrlKey?a.forEach(function(e){h.handleSelectRow({row:e},-1===p.indexOf(e))}):(h.setAllCheckboxRow(!1),h.setCheckboxRow(a,!0)),_("change",e))},D=function(){clearTimeout(a),a=null},I=function r(s){D(),a=setTimeout(function(){if(a){var e=g.scrollLeft,t=g.scrollTop,o=g.clientHeight,l=g.scrollHeight,n=Math.ceil(50*R/c);C?t+o<l?(h.scrollTo(e,t+n),r(s),k(s)):D():t?(h.scrollTo(e,t-n),r(s),k(s)):D()}},50)};_tools.DomTools.addClass(l,"drag--range"),document.onmousemove=function(e){e.preventDefault(),e.stopPropagation();var t=e.clientY,o=_tools.DomTools.getAbsolutePos(g).boundingTop;t<o?(C=!1,R=o-t,a||I(e)):t>o+g.clientHeight?(C=!0,R=t-o-g.clientHeight,a||I(e)):a&&D(),k(e)},document.onmouseup=function(e){D(),_tools.DomTools.removeClass(l,"drag--range"),m.removeAttribute("style"),document.onmousemove=r,document.onmouseup=s,_("end",e)},_("start",e)}}}};exports.default=_default;