UNPKG

vxe-table-ro-test

Version:

一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟树、列拖拽,懒加载、快捷菜单、数据校验、树形结构、打印、导入导出、自定义模板、渲染器、JSON 配置式...

1 lines 4.91 kB
"use strict";var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_dom=require("../../../ui/src/dom"),_utils=require("../../../ui/src/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const{menus,hooks,globalEvents,GLOBAL_EVENT_KEYS}=_ui.VxeUI,tableMenuMethodKeys=["closeMenu"];hooks.add("tableMenuModule",{setupTable(b){const{xID:m,props:p,reactData:M,internalData:E}=b,{refElem:x,refTableFilter:_,refTableMenu:C}=b.getRefMaps(),{computeMouseOpts:T,computeIsMenu:u,computeMenuOpts:y}=b.getComputeMaps();let w,r={};const L=(t,e,l)=>{const v=M["ctxMenuStore"];var n=u.value,o=y.value,e=o[e];const i=o.visibleMethod;if(e){const{options:f,disabled:s}=e;s?t.preventDefault():n&&f&&f.length&&(l.options=f,b.preventEvent(t,"event.showMenu",l,()=>{if(!i||i(l)){t.preventDefault(),b.updateZindex();const{scrollTop:s,scrollLeft:u,visibleHeight:r,visibleWidth:a}=(0,_dom.getDomNode)();let o=t.clientY+s,i=t.clientX+u;const n=()=>{E._currMenuParams=l,Object.assign(v,{visible:!0,list:f,selected:null,selectChild:null,showChild:!1,style:{zIndex:E.tZindex,top:o+"px",left:i+"px"}}),(0,_vue.nextTick)(()=>{var e=C.value.getRefMaps().refElem.value,t=e.clientHeight,l=e.clientWidth,{boundingTop:e,boundingLeft:n}=(0,_dom.getAbsolutePos)(e),e=e+t-r,n=n+l-a;-10<e&&(v.style.top=Math.max(s+2,o-t-2)+"px"),-10<n&&(v.style.left=Math.max(u+2,i-l-2)+"px")})},{keyboard:e,row:d,column:c}=l;e&&d&&c?b.scrollToRow(d,c).then(()=>{var e,t,l=b.getCellElement(d,c);l&&({boundingTop:e,boundingLeft:t}=(0,_dom.getAbsolutePos)(l),o=e+s+Math.floor(l.offsetHeight/2),i=t+u+Math.floor(l.offsetWidth/2)),n()}):n()}else w.closeMenu()}))}b.closeFilter()};return w={closeMenu(){return Object.assign(M.ctxMenuStore,{visible:!1,selected:null,selectChild:null,showChild:!1}),(0,_vue.nextTick)()}},r={moveCtxMenu(e,t,l,n,o,i){let s;var u=_xeUtils.default.findIndexOf(i,e=>t[l]===e);if(n)o&&(0,_utils.hasChildrenList)(t.selected)?t.showChild=!0:(t.showChild=!1,t.selectChild=null);else if(globalEvents.hasKey(e,GLOBAL_EVENT_KEYS.ARROW_UP)){for(let e=u-1;0<=e;e--)if(!1!==i[e].visible){s=i[e];break}t[l]=s||i[i.length-1]}else if(globalEvents.hasKey(e,GLOBAL_EVENT_KEYS.ARROW_DOWN)){for(let e=u+1;e<i.length;e++)if(!1!==i[e].visible){s=i[e];break}t[l]=s||i[0]}else t[l]&&(globalEvents.hasKey(e,GLOBAL_EVENT_KEYS.ENTER)||globalEvents.hasKey(e,GLOBAL_EVENT_KEYS.SPACEBAR))&&r.ctxMenuLinkEvent(e,t[l])},handleOpenMenuEvent:L,handleGlobalContextmenuEvent(t){var{mouseConfig:e,menuConfig:l}=p,{editStore:n,ctxMenuStore:o}=M,i=E["visibleColumn"],s=_.value,u=C.value,r=T.value,a=y.value,d=x.value,n=n["selected"],c=["header","body","footer"];if((0,_utils.isEnableConf)(l)){if(o.visible&&u&&(0,_dom.getEventTargetNode)(t,u.getRefMaps().refElem.value).flag)return void t.preventDefault();if(E._keyCtx){l="body",o={type:l,$table:b,keyboard:!0,columns:i.slice(0),$event:t};if(e&&r.area){u=b.getActiveCellArea();if(u&&u.row&&u.column)return o.row=u.row,o.column=u.column,void L(t,l,o)}else if(e&&r.selected&&n.row&&n.column)return o.row=n.row,o.column=n.column,void L(t,l,o)}for(let e=0;e<c.length;e++){var v=c[e],f=(0,_dom.getEventTargetNode)(t,d,`vxe-${v}--column`,e=>e.parentNode.parentNode.parentNode.getAttribute("xid")===m),g={type:v,$table:b,columns:i.slice(0),$event:t};if(f.flag){var f=f.targetElem,h=b.getColumnNode(f),h=h?h.item:null;let e=v+"-";h&&Object.assign(g,{column:h,columnIndex:b.getColumnIndex(h),cell:f}),"body"===v&&(f=(h=b.getRowNode(f.parentNode))?h.item:null,e="",f)&&(g.row=f,g.rowIndex=b.getRowIndex(f));h=e+"cell-menu";return L(t,v,g),void b.dispatchEvent(h,g,t)}if((0,_dom.getEventTargetNode)(t,d,`vxe-table--${v}-wrapper`,e=>e.getAttribute("xid")===m).flag)return void("cell"===a.trigger?t.preventDefault():L(t,v,g))}}s&&!(0,_dom.getEventTargetNode)(t,s.$el).flag&&b.closeFilter(),w.closeMenu()},ctxMenuMouseoverEvent(e,t,l){const a=e.currentTarget;var n=M["ctxMenuStore"];e.preventDefault(),e.stopPropagation(),n.selected=t,(n.selectChild=l)||(n.showChild=(0,_utils.hasChildrenList)(t),n.showChild&&(0,_vue.nextTick)(()=>{var o=a.nextElementSibling;if(o){var{boundingTop:i,boundingLeft:s,visibleHeight:u,visibleWidth:r}=(0,_dom.getAbsolutePos)(a),i=i+a.offsetHeight;let e="",t="",l=(s+a.offsetWidth+o.offsetWidth>r-10&&(e="auto",t=a.offsetWidth+"px"),""),n="";i+o.offsetHeight>u-10&&(l="auto",n="0"),o.style.left=e,o.style.right=t,o.style.top=l,o.style.bottom=n}}))},ctxMenuMouseoutEvent(e,t){var l=M["ctxMenuStore"];t.children||(l.selected=null),l.selectChild=null},ctxMenuLinkEvent(e,t){var l;t.disabled||!t.code&&t.children&&t.children.length||(l=menus.get(t.code),t=Object.assign({},E._currMenuParams,{menu:t,$table:b,$grid:b.xegrid,$event:e}),(l=l?l.tableMenuMethod||l.menuMethod:null)&&l(t,e),b.dispatchEvent("menu-click",t,e),w.closeMenu())}},Object.assign(Object.assign({},w),r)},setupGrid(e){return e.extendTableMethods(tableMenuMethodKeys)}});