vxe-table
Version:
一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等...
1 lines • 5.27 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _xeUtils=_interopRequireDefault(require("xe-utils")),_tools=require("../../tools"),_vXETable=_interopRequireDefault(require("../../v-x-e-table"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var _default={methods:{_closeMenu:function(){return Object.assign(this.ctxMenuStore,{visible:!1,selected:null,selectChild:null,showChild:!1}),this.$nextTick()},moveCtxMenu:function(e,t,o,n,i,l,s){var r,c=_xeUtils.default.findIndexOf(s,function(e){return o[n]===e});if(t===i)l&&_tools.UtilTools.hasChildrenList(o.selected)?o.showChild=!0:(o.showChild=!1,o.selectChild=null);else if(38===t){for(var u=c-1;0<=u;u--)if(!1!==s[u].visible){r=s[u];break}o[n]=r||s[s.length-1]}else if(40===t){for(var a=c+1;a<s.length;a++)if(!1!==s[a].visible){r=s[a];break}o[n]=r||s[0]}else!o[n]||13!==t&&32!==t||this.ctxMenuLinkEvent(e,o[n])},handleGlobalContextmenuEvent:function(e){var t=this.$refs,o=this.tId,n=this.editStore,i=this.menuConfig,l=this.contextMenu,s=this.ctxMenuStore,r=this.ctxMenuOpts,c=this.mouseConfig,u=this.mouseOpts,n=n.selected,a=["header","body","footer"];if(i||l){if(s.visible&&t.ctxWrapper&&_tools.DomTools.getEventTargetNode(e,t.ctxWrapper.$el).flag)return void e.preventDefault();if(this._keyCtx){i="body",l={type:i,$grid:this.$xegrid,$table:this,keyboard:!0,columns:this.visibleColumn.slice(0),$event:e};if(c&&u.area){s=this.getActiveCellArea();if(s&&s.row&&s.column)return l.row=s.row,l.column=s.column,void this.openContextMenu(e,i,l)}else if(c&&u.selected&&n.row&&n.column)return l.row=n.row,l.column=n.column,void this.openContextMenu(e,i,l)}for(var h=0;h<a.length;h++){var d=a[h],f=_tools.DomTools.getEventTargetNode(e,this.$el,"vxe-".concat(d,"--column"),function(e){return e.parentNode.parentNode.parentNode.getAttribute("xid")===o}),v={type:d,$grid:this.$xegrid,$table:this,columns:this.visibleColumn.slice(0),$event:e};if(f.flag){var x=f.targetElem,g=this.getColumnNode(x).item,f="".concat(d,"-");return Object.assign(v,{column:g,columnIndex:this.getColumnIndex(g),cell:x}),"body"===d&&(x=this.getRowNode(x.parentNode).item,f="",v.row=x,v.rowIndex=this.getRowIndex(x)),this.openContextMenu(e,d,v),void(this.$listeners["".concat(f,"cell-context-menu")]?("development"===process.env.NODE_ENV&&_tools.UtilTools.warn("vxe.error.delEvent",["".concat(f,"cell-context-menu"),"".concat(f,"cell-menu")]),this.emitEvent("".concat(f,"cell-context-menu"),v,e)):this.emitEvent("".concat(f,"cell-menu"),v,e))}if(_tools.DomTools.getEventTargetNode(e,this.$el,"vxe-table--".concat(d,"-wrapper"),function(e){return e.getAttribute("xid")===o}).flag)return void("cell"===r.trigger?e.preventDefault():this.openContextMenu(e,d,v))}}t.filterWrapper&&!_tools.DomTools.getEventTargetNode(e,t.filterWrapper.$el).flag&&this.closeFilter(),this.closeMenu()},openContextMenu:function(t,e,o){var d,f=this,n=this.isCtxMenu,v=this.ctxMenuStore,i=this.ctxMenuOpts,e=i[e],x=i.visibleMethod;e&&(d=e.options,e.disabled?t.preventDefault():n&&d&&d.length&&(o.options=d,this.preventEvent(t,"event.showMenu",o,null,function(){var i,l,s,r,c,u,n,e,a,h;!x||x(o)?(t.preventDefault(),f.updateZindex(),e=_tools.DomTools.getDomNode(),i=e.scrollTop,l=e.scrollLeft,s=e.visibleHeight,r=e.visibleWidth,c=t.clientY+i,u=t.clientX+l,n=function(){Object.assign(v,{args:o,visible:!0,list:d,selected:null,selectChild:null,showChild:!1,style:{zIndex:f.tZindex,top:"".concat(c,"px"),left:"".concat(u,"px")}}),f.$nextTick(function(){var e=f.$refs.ctxWrapper.$el,t=e.clientHeight,o=e.clientWidth,n=_tools.DomTools.getAbsolutePos(e),e=n.boundingTop,n=n.boundingLeft+o-r;-10<e+t-s&&(v.style.top="".concat(Math.max(i+2,c-t-2),"px")),-10<n&&(v.style.left="".concat(Math.max(l+2,u-o-2),"px"))})},e=o.keyboard,a=o.row,h=o.column,e&&a&&h?f.scrollToRow(a,h).then(function(){var e=f.getCell(a,h),t=_tools.DomTools.getAbsolutePos(e),o=t.boundingTop,t=t.boundingLeft;c=o+i+Math.floor(e.offsetHeight/2),u=t+l+Math.floor(e.offsetWidth/2),n()}):n()):f.closeMenu()}))),this.closeFilter()},ctxMenuMouseoverEvent:function(e,t,o){var r=e.currentTarget,n=this.ctxMenuStore;e.preventDefault(),e.stopPropagation(),n.selected=t,(n.selectChild=o)||(n.showChild=_tools.UtilTools.hasChildrenList(t),n.showChild&&this.$nextTick(function(){var e,t,o,n,i,l,s=r.nextElementSibling;s&&(n=(o=_tools.DomTools.getAbsolutePos(r)).boundingTop,i=o.boundingLeft,e=o.visibleHeight,l=o.visibleWidth,t=n+r.offsetHeight,n=o="",i+r.offsetWidth+s.offsetWidth>l-10&&(o="auto",n="".concat(r.offsetWidth,"px")),l=i="",t+s.offsetHeight>e-10&&(i="auto",l="0"),s.style.left=o,s.style.right=n,s.style.top=i,s.style.bottom=l)}))},ctxMenuMouseoutEvent:function(e,t){var o=this.ctxMenuStore;t.children||(o.selected=null),o.selectChild=null},ctxMenuLinkEvent:function(e,t){var o;t.disabled||!t.code&&t.children&&t.children.length||(o=_vXETable.default.menus.get(t.code),t=Object.assign({menu:t,$grid:this.$xegrid,$table:this,$event:e},this.ctxMenuStore.args),o&&o.call(this,t,e),this.$listeners["context-menu-click"]?("development"===process.env.NODE_ENV&&_tools.UtilTools.warn("vxe.error.delEvent",["context-menu-click","menu-click"]),this.emitEvent("context-menu-click",t,e)):this.emitEvent("menu-click",t,e),this.closeMenu())}}};exports.default=_default;