下载:
GitHub - PanJiaChen/vue-admin-template: a vue2.0 minimal admin template
1、路由(部分代码):
export const asyncRoutes = [
{
type: 'goods',
path: '/goods',
component: Layout,
children: [{
path: 'goods',
component: () => import('@/views/goods/index'),
name: '商品管理',
meta: {
title: '商品管理',
icon: 'el-icon-goods'
}
}]
},
{
type: 'members',
path: '/members',
component: Layout,
children: [{
path: 'members',
component: () => import('@/views/members/index'),
name: '会员管理',
meta: {
title: '会员管理',
icon: 'el-icon-user'
}
}]
},
{
type: 'order',
path: '/order',
component: Layout,
children: [{
path: 'order',
component: () => import('@/views/order/index'),
name: '订单管理',
meta: {
title: '订单管理',
icon: 'el-icon-shoppingCard'
}
}]
},
// 404 page must be placed at the end !!!
{
path: '*',
redirect: '/404',
hidden: true
}
]
2、侧边栏改造:
<template
v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<template v-if="item.type === $store.state.app.sidebar.topNavState">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
</el-menu-item>
</app-link>
</template>
</template>
注意代码
item.type === $store.state.app.sidebar.topNavState
3、store改造
const state = {
sidebar: {
opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
withoutAnimation: false,
topNavState: 'goods'
},
device: 'desktop',
size: Cookies.get('size') || 'medium'
}
4、index.vue改造
<el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect">
<el-menu-item index="1">商品</el-menu-item>
<el-menu-item index="2">会员</el-menu-item>
<el-menu-item index="3">订单</el-menu-item>
</el-menu>
====================================================
/**
* 监听导航菜单切换
*/
handleSelect(key, keyPath) {
// console.log(key, keyPath);
// console.log("state=", this.$store.state)
if (key === '1') {
this.$store.state.app.sidebar.topNavState = 'goods';
this.$router.push(`/`);
} else if (key === '2') {
this.$store.state.app.sidebar.topNavState = 'members';
this.$router.push(`/members/members`)
}
// console.log("state=", this.$store.state)
//缓存选中的导航菜单
localStorage.setItem('topNavState', this.$store.state.app.sidebar.topNavState);
},
====================================================
created() {
this.userData = JSON.parse(localStorage.getItem('userData'));
//获取本地缓存,选中之前选中的导航栏
let topNavState = localStorage.getItem('topNavState');
if (topNavState === 'members') {
this.activeIndex = '2';
this.$store.state.app.sidebar.topNavState = 'members';
} else {
this.activeIndex = '1';
this.$store.state.app.sidebar.topNavState = 'goods';
}
},