@blueking/vxe-table
Version:
一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟树、列拖拽,懒加载、快捷菜单、数据校验、树形结构、打印、导入导出、自定义模板、渲染器、JSON 配置式...
1 lines • 5.01 kB
JavaScript
var _xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_util=require("../../src/util"),_dom=require("../../../ui/src/dom");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let hooks=_ui.VxeUI.hooks;function getTargetOffset(e,t){let o=0,l=0;var n,r,a=!_dom.browse.firefox&&(0,_dom.hasClass)(e,"vxe-checkbox--label");for(a&&(n=getComputedStyle(e),o-=_xeUtils.default.toNumber(n.paddingTop),l-=_xeUtils.default.toNumber(n.paddingLeft));e&&e!==t;)o+=e.offsetTop,l+=e.offsetLeft,e=e.offsetParent,a&&(r=getComputedStyle(e),o-=_xeUtils.default.toNumber(r.paddingTop),l-=_xeUtils.default.toNumber(r.paddingLeft));return{offsetTop:o,offsetLeft:l}}hooks.add("tableKeyboardModule",{setupTable(M){let{props:m,reactData:E,internalData:D}=M,o=M.getRefMaps().refElem,{computeEditOpts:g,computeCheckboxOpts:u,computeMouseOpts:d,computeTreeOpts:i}=M.getComputeMaps();let s=(e,y)=>{var{column:n,cell:r}=y;if("checkbox"===n.type){let l=o.value;var t=D.elemStore;let I=e.clientX,_=e.clientY,k=(0,_util.getRefElem)(t[`${n.fixed||"main"}-body-wrapper`]||t["main-body-wrapper"]);if(k){let c=k.querySelector(".vxe-table--checkbox-range"),t=document.onmousemove,o=document.onmouseup,u=r.parentElement,d=M.getCheckboxRecords(),i=[],s=1;n=getTargetOffset(e.target,k);let m=n.offsetTop+e.offsetY,g=n.offsetLeft+e.offsetX,f=k.scrollTop,a=u.offsetHeight,h=u.getBoundingClientRect(),p=_-h.y,x=null,v=!1,w=1,b=(e,t)=>{M.dispatchEvent("checkbox-range-"+e,{records:M.getCheckboxRecords(),reserves:M.getCheckboxReserveRecords()},t)},C=e=>{var{clientX:t,clientY:o}=e,t=t-I,o=o-_+(k.scrollTop-f);let l=Math.abs(o),n=Math.abs(t),r=m,a=g;o<s?(r+=o)<s&&(r=s,l=m):l=Math.min(l,k.scrollHeight-m-s),t<s?(a+=t,n>g&&(a=s,n=g)):n=Math.min(n,k.clientWidth-g-s),c.style.height=l+"px",c.style.width=n+"px",c.style.left=a+"px",c.style.top=r+"px",c.style.display="block";t=((e,t,o,l,n,r)=>{let a=0,c=[],u=0;var d=0<r,{scrollYLoad:i,rowHeight:s}=E,m=D.afterFullData;if(i){u=d?n+r:l.height-n+Math.abs(r);i=M.getVTRowIndex(t.row);c=d?m.slice(i,i+Math.ceil(u/s)):m.slice(i-Math.floor(u/s),i+1)}else{u=d?e.clientY-l.y:l.y-e.clientY+l.height;for(var g=d?"next":"previous";o&&a<u;){var f=M.getRowNode(o);f&&(c.push(f.item),a+=o.offsetHeight,o=o[g+"ElementSibling"])}}return c})(e,y,u,h,p,o<s?-l:l);10<l&&t.length!==i.length&&(i=t,e.ctrlKey?t.forEach(e=>{M.handleBatchSelectRows([e],-1===d.indexOf(e))}):(M.setAllCheckboxRow(!1),M.handleCheckedCheckboxRow(t,!0,!1)),b("change",e))},T=()=>{clearTimeout(x),x=null},R=r=>{T(),x=setTimeout(()=>{var e,t,o,l,n;x&&({scrollLeft:e,scrollTop:t,clientHeight:o,scrollHeight:l}=k,n=Math.ceil(50*w/a),v?t+o<l?(M.scrollTo(e,t+n),R(r),C(r)):T():t?(M.scrollTo(e,t-n),R(r),C(r)):T())},50)};(0,_dom.addClass)(l,"drag--range"),document.onmousemove=e=>{e.preventDefault(),e.stopPropagation();var t=e.clientY,o=(0,_dom.getAbsolutePos)(k).boundingTop;t<o?(v=!1,w=o-t,x||R(e)):t>o+k.clientHeight?(v=!0,w=t-o-k.clientHeight,x||R(e)):x&&T(),C(e)},document.onmouseup=e=>{T(),(0,_dom.removeClass)(l,"drag--range"),c.removeAttribute("style"),document.onmousemove=t,document.onmouseup=o,b("end",e)},b("start",e)}}};return{moveTabSelected(e,t,o){var l=m.editConfig,{afterFullData:n,visibleColumn:r}=D,a=g.value;let c,u,d,i=Object.assign({},e);var e=M.getVTRowIndex(i.row),s=M.getVTColumnIndex(i.column),t=(o.preventDefault(),t?s<=0?0<e&&(u=e-1,c=n[u],d=r.length-1):d=s-1:s>=r.length-1?e<n.length-1&&(u=e+1,c=n[u],d=0):d=s+1,r[d]);t&&(c?(i.rowIndex=u,i.row=c):i.rowIndex=e,i.columnIndex=d,i.column=t,i.cell=M.getCellElement(i.row,i.column),l?"click"!==a.trigger&&"dblclick"!==a.trigger||("row"===a.mode?M.handleEdit(i,o):M.scrollToRow(i.row,i.column).then(()=>M.handleSelected(i,o))):M.scrollToRow(i.row,i.column).then(()=>M.handleSelected(i,o)))},moveCurrentRow(e,t,o){var l=m.treeConfig;let n=E.currentRow;var r=D.afterFullData,a=i.value,a=a.children||a.childrenField;let c;if(o.preventDefault(),n?l?({index:l,items:a}=_xeUtils.default.findTree(r,e=>e===n,{children:a}),e&&0<l?c=a[l-1]:t&&l<a.length-1&&(c=a[l+1])):(a=M.getVTRowIndex(n),e&&0<a?c=r[a-1]:t&&a<r.length-1&&(c=r[a+1])):c=r[0],c){let e={$table:M,row:c,rowIndex:M.getRowIndex(c),$rowIndex:M.getVMRowIndex(c)};M.scrollToRow(c).then(()=>M.triggerCurrentRowEvent(o,e))}},moveSelected(e,t,o,l,n,r){var{afterFullData:a,visibleColumn:c}=D;let u=Object.assign({},e);var e=M.getVTRowIndex(u.row),d=M.getVTColumnIndex(u.column);r.preventDefault(),o&&0<e?(u.rowIndex=e-1,u.row=a[u.rowIndex]):n&&e<a.length-1?(u.rowIndex=e+1,u.row=a[u.rowIndex]):t&&d?(u.columnIndex=d-1,u.column=c[u.columnIndex]):l&&d<c.length-1&&(u.columnIndex=d+1,u.column=c[u.columnIndex]),M.scrollToRow(u.row,u.column).then(()=>{u.cell=M.getCellElement(u.row,u.column),M.handleSelected(u,r)})},handleCellMousedownEvent:(e,t)=>{var{editConfig:o,checkboxConfig:l,mouseConfig:n}=m,r=u.value,a=d.value,c=g.value;if(n&&a.area&&M.handleMousedownCellAreaEvent)return M.handleMousedownCellAreaEvent(e,t);l&&r.range&&s(e,t),n&&a.selected&&(o&&"cell"!==c.mode||M.handleSelected(t,e))}}}});