<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>