<template>
|
<div v-if="navMenus.length<=0" style="padding:20px;">
|
<el-alert title="无子集菜单" center type="info" :closable="false"></el-alert>
|
</div>
|
<template v-for="navMenu in navMenus" v-bind:key="navMenu">
|
<el-menu-item v-if="!hasChildren(navMenu)" :index="navMenu.path">
|
<a v-if="navMenu.meta&&navMenu.meta.type=='link'" :href="navMenu.path" target="_blank" @click.stop='()=>{}'></a>
|
<!-- <el-icon><Warning /></el-icon> -->
|
<el-icon>
|
<component v-if="icons.includes(navMenu.source)" :is="navMenu.source"/>
|
<component v-if="!icons.includes(navMenu.source)" :is="'TakeawayBox'"/>
|
<!-- <el-icon v-if="navMenu.meta&&navMenu.meta.icon"><component :is="navMenu.meta.icon || 'el-icon-menu'"/></el-icon> -->
|
</el-icon>
|
<template #title>
|
<span>{{navMenu.meta.title}}</span>
|
<span v-if="navMenu.meta.tag" class="menu-tag">{{navMenu.meta.tag}}</span>
|
</template>
|
</el-menu-item>
|
<el-sub-menu v-else :index="navMenu.path">
|
<template #title>
|
<el-icon v-if="navMenu.parentId!='0' &&navMenu.meta&&navMenu.meta.icon">
|
<component v-if="icons.includes(navMenu.source)" :is="navMenu.source"/>
|
<component v-if="!icons.includes(navMenu.source)" :is="'TakeawayBox'"/>
|
<!-- <component :is="navMenu.meta.icon || 'el-icon-menu'"/> -->
|
</el-icon>
|
<span>{{navMenu.meta.title}}</span>
|
<span v-if="navMenu.meta.tag" class="menu-tag">{{navMenu.meta.tag}}</span>
|
</template>
|
<NavMenu :navMenus="navMenu.children"></NavMenu>
|
</el-sub-menu>
|
</template>
|
</template>
|
|
<script>
|
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
|
let icons = []
|
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
|
icons.push(key)
|
}
|
export default {
|
name: 'NavMenu',
|
props: ['navMenus'],
|
data() {
|
return {
|
icons
|
}
|
},
|
components: {
|
...ElementPlusIconsVue
|
},
|
methods: {
|
hasChildren(item) {
|
return item.children && !item.children.every(item => item.meta.hidden)
|
//return item.parentId == '0';
|
}
|
},
|
mounted(){
|
}
|
}
|
</script>
|