import Layout from '@/layout'//引入admin的layout布局 import router from '../router'//引入router import request from '../api/request.js'//自定义封装的请求 import store from '../store'//Vuex export default { // 获取路由菜单 getMenu() { return new Promise((resolve, reject) => { return request.getRoleMenu().then(res => { //声明一个空数组,用来装处理好的菜单信息 const result = [] // 获取到路由菜单,进行数据处理 this.parseRoute(res.data,result) // 添加菜单 this.addMenu(result) //缓存用户菜单,我这里使用的是sessionStorage,用localStorage也可以 sessionStorage.setItem("route", JSON.stringify(res.data)) // 输出成功 resolve() }).catch(err =>{ reject() }) }) }, // 对路由菜单数据处理 parseRoute(fullList, resultList) { return new Promise((resolve, reject) => { let result = [] fullList.forEach( (ele,index) => { let routerObject = null const childrenList = [] routerObject = { path: ele['path'], component: Layout, redirect: ele['redirect']?ele['redirect']:'noRedirect', alwaysShow: ele['alwaysShow'], // 是否始终为根元素 meta: { title: ele.meta['title'], icon: ele.meta['icon'] }, children: childrenList, } const itemResult = ele.children; for (let j = 0; j < itemResult.length; j++) { childrenList.push({ path: itemResult[j]['path'], name: itemResult[j]['name'], hidden: itemResult[j]['hidden'], component: resolve => require([`@/views/${itemResult[j].component}`], resolve), meta: { title: itemResult[j].meta['title'], icon: itemResult[j].meta['icon'], keepAlive: itemResult[j].meta['keepAlive'] == 0 ? false : true, }, }) } //插入组装好的数据 resultList.push(routerObject); //插入最终完整的数据列表 result.push(routerObject); }); //输出已经组装好并且能用的数据 resolve(result) }) }, // 添加菜单 addMenu(data) { return new Promise((resolve, reject) => { // 在处理完的菜单列表数据后面插入404页面,404必须存在菜单列表的最后一项,否则会对所有页面进行拦截,并跳转404页面 data.push({ path: '*', redirect: '/404', hidden: true }) // 打印菜单列表 // console.log(data) // 将可用的路由权限列表存入Vuex store.dispatch('user/modifyMenu', data) // 添加菜单 router.addRoutes(data) // 将路由元注入路由对象,必须添加 router.options.routes.push(data) console.log('router.options.routes', router.options.routes) //输出成功 resolve() }) }, // }