You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
4.0 KiB
135 lines
4.0 KiB
<template>
|
|
<div class="left-menu">
|
|
<el-submenu v-if="menu.children && menu.children.length >= 1 && menu.children[0].isShow == 1" :index="menu.id" :popper-append-to-body="false">
|
|
<template slot="title">
|
|
<svg class="icon-svg aui-sidebar__menu-icon" aria-hidden="true"><use :xlink:href="`#${menu.icon}`" /></svg>
|
|
<span v-show="$store.state.sidebarFold===false">{{ menu.name }}</span>
|
|
</template>
|
|
<sub-menu v-for="item in menu.children" :key="item.id" :menu="item" />
|
|
</el-submenu>
|
|
<el-menu-item v-else ref="li" :index="menu.id" @click="openMenuHandle(menu.id)">
|
|
<!-- :href="isBrowserTabOpen(menu) ? iframeURL: 'javascript:;'"
|
|
:target="isBrowserTabOpen(menu) ? '_blank' : '_self'" -->
|
|
<a>
|
|
<svg class="icon-svg aui-sidebar__menu-icon" aria-hidden="true"><use :xlink:href="`#${menu.icon}`" /></svg>
|
|
<span v-show="$store.state.sidebarFold===false">{{ menu.name }}</span>
|
|
</a>
|
|
</el-menu-item>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import SubMenu from './main-sidebar-sub-menu.vue'
|
|
export default {
|
|
inject: ['refresh'],
|
|
name: 'SubMenu',
|
|
components: {
|
|
SubMenu
|
|
},
|
|
props: {
|
|
menu: {
|
|
type: Object,
|
|
required: true
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
browserTabOpenList: [
|
|
// '1353981045241810946', // 写死,另打开iframe
|
|
// '1344097112555024386'
|
|
],
|
|
iframeURL: '',
|
|
routerName: ''
|
|
}
|
|
},
|
|
watch: {
|
|
$route(val) {
|
|
// console.log(val)
|
|
this.routerName = val.name
|
|
}
|
|
},
|
|
created() {
|
|
this.routerName = this.$route.name
|
|
// this.$nextTick(() => {
|
|
// if (this.$refs.li) {
|
|
// const $li = this.$refs.li.$el
|
|
// const $a = $li.firstElementChild
|
|
// if ($a) {
|
|
// let pl = '0'; let pr = '0'
|
|
// if ($li.currentStyle) {
|
|
// pl = $li.currentStyle.paddingLeft
|
|
// pr = $li.currentStyle.paddingRight
|
|
// } else {
|
|
// pl = window.document.defaultView.getComputedStyle($li, null).paddingLeft
|
|
// pr = window.document.defaultView.getComputedStyle($li, null).paddingRight
|
|
// }
|
|
// $li.setAttribute('style', 'padding-left: 0; padding-right: 0;')
|
|
// $a.setAttribute('style', `padding-left: ${pl}; padding-right: ${pr};`)
|
|
// }
|
|
// }
|
|
// })
|
|
},
|
|
methods: {
|
|
// 判断menuId
|
|
isMenuIdFun(menuId, dynamicMenuRoutes, callback) {
|
|
dynamicMenuRoutes.forEach((item) => {
|
|
if (item.meta.menuId === menuId) {
|
|
return callback && callback(item)
|
|
} else if (item.children.length > 0) {
|
|
this.isMenuIdFun(menuId, item.children, callback)
|
|
}
|
|
})
|
|
},
|
|
// 是否通过浏览器Tab打开菜单
|
|
isBrowserTabOpen(menu) {
|
|
return this.browserTabOpenList.filter(item => item === menu.id).length >= 1
|
|
// return false
|
|
},
|
|
// 获取浏览器Tab打开菜单URL
|
|
getBrowserTabOpenURL(menuId) {
|
|
this.isMenuIdFun(menuId, window.SITE_CONFIG.dynamicMenuRoutes, (item) => {
|
|
this.iframeURL = item.meta.iframeURL
|
|
})
|
|
},
|
|
// 点击菜单获取id
|
|
openMenuHandle(menuId) {
|
|
this.$store.commit('activeIndexFun', menuId)
|
|
this.isMenuIdFun(menuId, window.SITE_CONFIG.dynamicMenuRoutes, (item) => {
|
|
// console.log(item)
|
|
setTimeout(() => {
|
|
if (this.routerName === item.name) {
|
|
this.refresh()
|
|
} else {
|
|
// console.log(item.name)
|
|
this.$router.push({
|
|
name: item.name
|
|
})
|
|
}
|
|
}, 200)
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.aui-sidebar__menu {
|
|
.el-menu-item > a {
|
|
display: block;
|
|
color: inherit;
|
|
text-decoration: none;
|
|
}
|
|
}
|
|
.left-menu {
|
|
.el-menu-item ,.el-submenu__title{
|
|
padding-left: 4px !important;
|
|
}
|
|
.el-menu--inline {
|
|
padding-left: 10px;
|
|
}
|
|
.el-submenu__icon-arrow {
|
|
top: 60%;
|
|
}
|
|
}
|
|
|
|
</style>
|