1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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()
- })
- },
- //
- }
|