<template>
|
<a-menu :style="menuStyle" @click="menuItemClick" v-if="menuVisible" mode="vertical" @contextmenu="menuContextMenu">
|
<template v-for="menuItem in defaultContextMenuList[getCurrentMenuLevel]">
|
<a-menu-item :key="menuItem.code" v-has="menuItem.code">
|
<a-icon :type="menuItem.icon"/>
|
{{ menuItem.label }}
|
</a-menu-item>
|
</template>
|
</a-menu>
|
</template>
|
|
<script>
|
export default {
|
name: 'DeviceStructureTreeContextMenu',
|
components: {},
|
props: {
|
treeParams: {
|
type: Object
|
}
|
},
|
data() {
|
return {
|
menuVisible: false,
|
menuStyle: {
|
position: 'fixed',
|
top: 0,
|
left: 0,
|
border: '1px solid #eee',
|
boxShadow: '0 2px 8px rgba(0, 0, 0, 0.15)',
|
zIndex: 999
|
},
|
defaultContextMenuList: {
|
//车间
|
workshop: [
|
{ label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
|
],
|
//设备
|
device: [
|
{ label: '导入NC文档', code: 'device_nc_import', icon: 'import', isCommonMethod: true },
|
{ label: '权限配置', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true }
|
]
|
}
|
}
|
},
|
computed: {
|
getCurrentMenuLevel() {
|
if (this.treeParams.type === 1) return 'workshop'
|
else return 'device'
|
}
|
},
|
methods: {
|
menuItemClick({ key }) {
|
const menuKey = key
|
const level = this.getCurrentMenuLevel
|
const treeNodeInfo = Object.assign({ treeKey: this.treeParams.key }, this.treeParams)
|
if (treeNodeInfo.type === 2) treeNodeInfo.type = 7
|
// 设备结构树节点中的设备层级为2,但在产品结构树中将设备层级的type设置为7,因此在此处设置为7
|
const menuKeyArray = menuKey.split('_')
|
const isCommonMethod = this.defaultContextMenuList[level].find(item => item.code === menuKey).isCommonMethod
|
// product_add => handleAdd 触发对应组件事件
|
let methodName
|
// 判断是否为公共方法,如果为公共方法则截取专有属性product/component/part/process等字段
|
if (isCommonMethod) {
|
methodName = 'handle' + menuKeyArray.map(item => item[0].toUpperCase() + item.slice(1)).slice(1).join('')
|
} else {
|
methodName = 'handle' + menuKeyArray.map(item => item[0].toUpperCase() + item.slice(1)).join('')
|
}
|
const modalTitle = this.defaultContextMenuList[level].find(item => item.code === menuKey).label
|
this.$bus.$emit('treeMenuItemMethodTrigger', { methodName, modalTitle, treeNodeInfo })
|
},
|
|
/**
|
* 避免单次重复右键后关闭菜单或打开window菜单
|
* @param event 事件对象
|
*/
|
menuContextMenu(event) {
|
event.preventDefault()
|
event.stopPropagation()
|
}
|
}
|
}
|
</script>
|