# hwork-web-component 公共包
# 顶部渲染:src/layout/components/Navbar.vue
# src/permission.js
// 根据权限获取菜单
const initPermission = (router, store) =>{
router.beforeEach(async (to, from, next) => {
// 根据权限获取菜单
result = await getAllMenus({ userCode: meInfo.data.userCode, resrSource: '1',isButton:1})
result = result.data
// 菜单数据存入strore
store.dispatch("n_permission/generateRoutes", result);
})
})
# src/store/modules/n_permission.js
const state = {
routes: []
}
const mutations = {
SET_ROUTES: (state, routes) => {
state.routes = routes
}
}
const actions = {
generateRoutes ({ commit }, routes) {
commit('SET_ROUTES', routes)
}
}
# src/store/getters.js
const npmGetters = {
// 顶部和侧边选中高亮相关
headerActiveMenu: state => state.n_sidemenu.headerActiveMenu,
// 所有的路由
permission_routes: state => state.n_permission.routes
}
export default npmGetters
# 侧边栏渲染:src/layout/components/SideMenu/index.vue
<script>
export default {
computed: {
...mapGetters([
'headerActiveMenu',
]),
leftMenu() // 侧边栏数据
const leftmenu = this.permission_routes.filter(
item => item.resrId == this.headerActiveMenu
)[0]
return leftmenu ? leftmenu["children"] : [];
}
},
methods: {
// 设置顶部选中菜单(headerActive)
changeMenuState(data, pathname) {
if(!headerActive){
if (pathname === '/' || pathname === '') {
this.$store.commit("n_sidemenu/SET_HEADER_ACTIVE_MENU", data[0] ? data[0].resrId : '');
}
} else {
this.$store.commit("n_sidemenu/SET_HEADER_ACTIVE_MENU", headerActive);
sessionStorage.setItem('headerActive', headerActive)
}
}
}
}
</script>