import router from './router'; import store from './store'; import qs from 'qs'; import axios from '@/utils/axios'; import { asyncRoutes, baseRoute } from '@/router'; import NProgress from 'nprogress'; // progress bar import 'nprogress/nprogress.css'; // progress bar style import { getCache, setCache } from '@/utils/sessionStorage'; import getPageTitle from '@/utils/getPageTitle'; const _import = require('./router/_import_production'); // 获取组件的方法 const _mainImport = require('./router/_import_development'); import Layout from '@/Layout'; let getRouter = ''; // 用来获取后台拿到的路由 NProgress.configure({ showSpinner: false }); // NProgress Configuration let _this = this; router.beforeEach(async (to, from, next) => { document.title = to.meta.title + ' - 智能化立体库管理系统'; NProgress.start(); const isLogin = getCache('userInfo'); if (to.path == '/Login') { getRouter = ''; next(); } else { if (!JSON.stringify(isLogin)) { getRouter = ''; next('/Login'); NProgress.done(); } else { if (store.state.permission.addRoutes.length > 0) { NProgress.done(); next(); } else { axios .post( '/Permission/GetUserRolePermission', qs.stringify({ roleName: isLogin.roleName, type: 1 }) ) .then(res => { if (res.code == 0) { let data = res.data || []; let Didproject = null; data.filter((item, index) => { if (item.name == 'Didproject') { Didproject = item; Didproject.meta.affix = true; return data.splice(index, 1); } }); data.unshift(Didproject); let baserouter = routerchildren(res.data); let layer = [{ path: '/', redirect: '/Didproject', children: baserouter }]; getRouter = layer; routerGo(to, next); // 执行路由跳转方法 } }); } } } }); // router. //过滤路由中的children function routerchildren(basrouter) { basrouter.filter(item => { if (item.children == null) { delete item.children; } else if (item.children.length > 0) { routerchildren(item.children); } return true; }); return basrouter; } function routerGo(to, next) { getRouter = filterAsyncRouter(getRouter); // 过滤路由 console.log(getRouter); setCache('baserouter', getRouter); console.log(getRouter); global.addRoutes = getRouter; // 将路由数据传递给全局变量,做侧边栏菜单渲染工作 store.dispatch('permission/generateRoutes', getRouter); router.addRoutes(getRouter); // 动态添加路由 next({ ...to, replace: true }); } function filterAsyncRouter(asyncRouterMap) { // 遍历后台传来的路由字符串,转换为组件对象 asyncRouterMap.forEach(route => { if (route.path) { if (route.path == '/') { route.component = _mainImport('Layout'); } else { route.component = _import(route.path); } } else { route.path = '/test'; } if (route.children && route.children.length > 0) { route.children = filterAsyncRouter(route.children); } }); return asyncRouterMap; } router.afterEach(() => { // finish progress bar NProgress.done(); });