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();
|
});
|