<template> <li ref="contextMenu" @click="handleClick(item, $event)" :class="itemClass" :title="item[field]"> <div class="label" :class="(item.hoverBtn||item.chooseIcon)?'withHoverBtn':''"> <i class="iconfont" :class="item.iconClass" v-if="item.iconClass"></i> <span class="item-label" v-html="item.html||item[field]"></span> <span class="children-indicator iconfont icon-arrow-right trigger" v-if="item.children"></span> <div class="chooseIcon" v-if="item.chooseIcon" :title="item.chooseIcon.title"> <i :class="item.chooseIcon.iconClass"></i> </div> <div class="hoverBtn" v-if="item.hoverBtn" :title="item.hoverBtn.title" @click="hoverBtnHandleClick(item.hoverBtn,$event)"> <i :class="item.hoverBtn.iconClass"></i> </div> </div> <ul class="context-menu" v-if="item.children" :style="contextMenuStyle"> <context-menu-item v-for="(childItem, index) in item.children" :item="childItem" :field="field" :key="index"> </context-menu-item> </ul> </li> </template> <script> export default { name: 'context-menu-item', props: { item: { type: Object, }, field:{ type:String, default:'title' } }, inject:['getActiveKey','setActiveKey'], data(){ return { contextMenuStyle:"", } }, computed:{ itemClass() { let item =this.item; return { // 'item-active':(item.id!=null)&&this.activeKey==item.id, 'item-active':item.actived, 'item-disabled': this.isItemDisabled(item) }; }, activeKey(){ return this.getActiveKey(); }, }, watch:{ "item.children":{ handler:function(val,old){ setTimeout(()=>{ if(!this.$refs.contextMenu){ this.contextMenuStyle= ""; }else{ let _domRect=this.$refs.contextMenu.getBoundingClientRect(); this.contextMenuStyle= "max-height:calc(100vh - "+(_domRect.top+30)+"px)"; } },100); }, immediate: true, deep: true } }, methods: { handleClick(item, event) { // !item.children&&this.setActiveKey(item.id); if (typeof item.handler !== 'undefined') { if (!this.isItemDisabled(item)) { item.handler(event); } else { event.stopPropagation(); } }else{ } }, hoverBtnHandleClick(item,event){ event.stopPropagation(); if (typeof item.handler !== 'undefined') { item.handler(event); } }, isItemDisabled(item) { if (typeof item.disabled !== 'undefined') { return item.disabled; } return false; }, }, }; </script>