我:
(1)/router/index.js 路由配置文件
import Vue from 'vue'
import Router from 'vue-router'
import Layout from '@/layout/index.vue'
Vue.use(Router)
export const constantRoutes = [
{
path: '/login',
component: () => import('@/views/login/index'),
hidden: true
},
{
path: '/404',
component: () => import('@/views/404')
}
]
// 递归生成路由(data是后台传过来的菜单树数据)
function generateRouters(data) {
const routers = []
for (const item of data) {
const menu = {
path: item.url,
name: item.text,
component: item.hasParent ? resolve => require(['@/views' + item.url + '.vue'], resolve) : Layout,
meta: {
title: item.text,
icon: item.icon
}
}
if (item.children && item.children.length > 0) {
menu.children = [...generateRouters(item.children)]
}
routers.push(menu)
}
return routers
}
export const router = new Router({
// mode: 'history', // require service support
scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes
})
// 添加到路由
export function addMyRouters(data) {
const routesData = constantRoutes.concat(generateRouters(data))
// default page !!!
routesData.push({
path: '/',
redirect: '/dashboard/index'
})
// 404 page must be placed at the end !!!
routesData.push({
path: '*',
redirect: '/404',
hidden: true
})
router.addRoutes(routesData)
}
export default router
(2)/src/store/modules/menu.js 页面缓存-modules配置文件
import Menu from '@/api/Menu'
import { addMyRouters } from '@/router/index'
const state = {
menuList: []
}
// 使用 commit('SET_MENU_LIST', data) 的方式 进行调用
const mutations = {
SET_MENU_LIST: (state, menuList) => {
state.menuList = menuList
}
}
// 使用 await this.$store.dispatch('menu/getSysMenuTree') 的方式 进行调用
const actions = {
getSysMenuTree({ commit }) {
return new Promise((resolve, reject) => {
Menu.getSysMenuTree().then(response => {
const data = response.data
if (data !== null || data !== '' || data !== undefined) {
// 动态添加路由
addMyRouters(data)
}
commit('SET_MENU_LIST', data)
resolve()
}).catch(error => {
reject(error)
})
})
},
resetMenuList({ commit }, menuList) {
commit('SET_MENU_LIST', menuList)
}
}
export default {
namespaced: true,
state,
mutations,
actions
}
(3)/src/store/getters.js 页面缓存-getters配置文件
const getters = {
menuList: state => state.menu.menuList,
}
export default getters
(4)/src/store/index.js 页面缓存-总配置文件
import Vue from 'vue'
import Vuex from 'vuex'
import menu from '@/store/modules/menu'
import getters from '@/store/getters'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
menu,
},
getters
})
export default store