<template>
|
<div class="side-menu-wrapper">
|
<logo :collapse="isCollapse" />
|
<div class="side-menu-content">
|
<el-menu
|
:default-active="activeMenu"
|
:collapse="isCollapse"
|
:background-color="menuStyle.bg"
|
:text-color="menuStyle.text"
|
:unique-opened="false"
|
:active-text-color="menuStyle.activeText"
|
:collapse-transition="false"
|
mode="vertical">
|
<sidebar-item v-for="route in menus" :key="route.path" :item="route" :base-path="route.path" />
|
</el-menu>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { mapGetters } from 'vuex'
|
import Logo from './Logo'
|
import sidebarItem from "./SidebarItem.vue";
|
import routes from "@/router/routes";
|
export default {
|
components: { Logo, sidebarItem},
|
data() {
|
return {
|
menuStyle: {
|
bg: "#304156",
|
text: "#bfcbd9",
|
activeText: "#409EFF"
|
},
|
menus: routes
|
}
|
},
|
computed: {
|
...mapGetters([
|
'sidebar'
|
]),
|
activeMenu() {
|
const route = this.$route;
|
const { meta, path } = route;
|
if (meta.activeMenu) {
|
return meta.activeMenu;
|
}
|
return path;
|
},
|
isCollapse() {
|
return !this.sidebar.opened
|
}
|
}
|
}
|
</script>
|
|
<style lang="less" scoped>
|
.side-menu-wrapper {
|
display: flex;
|
flex-direction: column;
|
.side-menu-content {
|
flex: 1;
|
overflow-y: auto;
|
}
|
}
|
</style>
|