<template> <div class="silder-menu"> <a-layout-sider v-model="collapsed" :trigger="null" collapsible width="200" style="height:100%"> <a-menu mode="inline" theme="dark" :default-selected-keys="[currentKey]" :selectedKeys="[currentKey]" :open-keys="openKeys" :style="{ height: '100%', borderRight: 0 }" @select="selectMenuItem" @openChange="openChangeEvent" > <a-sub-menu v-show="item.system == defaultSystem" v-for="(item) of config" :key="item.key"> <span slot="title"> <a-icon :type="item.icon" /> <span v-show="!collapsed">{{item.title}}</span> </span> <a-menu-item @click="changeMenu(sitem)" v-for="(sitem) of item.children" :key="sitem.key" >{{sitem.title}}</a-menu-item> </a-sub-menu> </a-menu> </a-layout-sider> </div> </template> <script> import config from "@/config/config.js"; import { mapState, mapMutations } from "vuex"; export default { props: { collapsed: { type: Boolean, default: false } }, data() { return { config: config.Menu, openKeys: localStorage.getItem('openkey'), }; }, created() {}, computed: { ...mapState(["currentKey","defaultSystem"]) }, methods: { ...mapMutations(["setCurrentKey","setCurrentSystem","setTabsList"]), // 点击相应菜单导航到相应页面 changeMenu(argments) { localStorage.setItem("currentKey", argments.key); this.$router.push(`/${argments.key}`); this.setTabsList(argments) }, // 选中菜单 selectMenuItem(argments) { this.$emit("select", { currentkey: argments.key }); }, // 菜单组打开或者关闭事件 openChangeEvent(argments) { if (argments.length != 0) { // 如果数组length为0表示所有的菜单都是关闭的 this.openKeys = [argments[argments.length - 1]]; } else { this.openKeys = []; } localStorage.setItem("opkey", this.openKeys); } }, watch: { // 监听路由 $route(to) { console.log(to); let curreentKey = to.path.slice(1); // 设置当前选中菜单 this.setCurrentKey(curreentKey); // 设置当前系统 this.setCurrentSystem(to.meta.system) // 设置当前打开菜单组 this.openKeys = [to.meta.faKey]; localStorage.setItem("opkey", this.openKeys); } } }; </script> <style lang="less" scoped> .silder-menu { height: calc(100vh - 72px); } .sider{ height:100%; overflow-y: auto; } ::-webkit-scrollbar-track-piece { //滚动条凹槽的颜色,还可以设置边框属性 background-color:#f8f8f8; } ::-webkit-scrollbar {//滚动条的宽度 width:9px; height:9px; } ::-webkit-scrollbar-thumb {//滚动条的设置 background-color:#dddddd; background-clip:padding-box; min-height:28px; } ::-webkit-scrollbar-thumb:hover { background-color:#bbb; } </style>