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