/* eslint-disable */
|
import router from "./router";
|
import NProgress from "nprogress"; // progress bar
|
import "nprogress/nprogress.css"; // progress bar style
|
import {
|
userInfoCookie,
|
menuListCookie
|
} from "@/utils/auth";
|
import store from "@/store";
|
import {
|
Message
|
} from "element-ui";
|
|
NProgress.configure({
|
showSpinner: false
|
}); // NProgress Configuration
|
|
const whiteList = [
|
"/login",
|
"/reg",
|
"/forget-pwd",
|
"/auth-redirect",
|
"/print/",
|
"/inbound/purchase/print-barcode",
|
"/outbound/operation/order-pick-bill-print",
|
"/outbound/require/allocation-pick-bill-print"
|
]; // no redirect whitelist
|
|
/**
|
* 查找菜单是否有权限
|
* @param routes asyncRouterMap
|
* @param path
|
*/
|
function findRouter(routes, path, parentPath) {
|
const res = [];
|
let isExist = false;
|
|
routes.forEach(route => {
|
var currentPath = route.path;
|
if (currentPath.indexOf("/") != 0) {
|
currentPath = parentPath + "/" + currentPath;
|
}
|
if (currentPath.toLowerCase() == path.toLowerCase()) {
|
isExist = true;
|
return true;
|
} else {
|
if (route.children) {
|
if (findRouter(route.children, path, currentPath)) {
|
isExist = true;
|
}
|
}
|
}
|
});
|
|
return isExist;
|
}
|
|
/**
|
* 校验是否存在白名单中
|
* @param path
|
*/
|
function checkWhite(path) {
|
var isOK = false;
|
whiteList.forEach(item => {
|
if (path.indexOf(item) >= 0) isOK = true;
|
});
|
return isOK;
|
}
|
|
router.beforeEach((to, from, next) => {
|
NProgress.start(); // start progress bar
|
if (checkWhite(to.path)) {
|
// 在免登录白名单,直接进入
|
let userInfo = store.getters.userInfo;
|
if (!userInfo || !userInfo.accessToken) {
|
store.dispatch("GetUserInfo").then(res => {
|
next();
|
NProgress.done();
|
return;
|
});
|
} else {
|
next();
|
NProgress.done();
|
}
|
return;
|
}
|
var userInfo = userInfoCookie.getUserInfo();
|
if (userInfo && userInfo.accessToken) {
|
// determine if there has token
|
/* has token */
|
if (to.path === "/login") {
|
next();
|
NProgress.done(); // if current page is dashboard will not trigger afterEach hook, so manually handle it
|
} else {
|
let userInfo = store.getters.userInfo;
|
var addRouters = store.getters.addRouters;
|
if (!userInfo || !userInfo.accessToken || !addRouters.length) {
|
store.dispatch("GetUserInfo").then(res => {
|
if (!res.menuList) {
|
next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页
|
NProgress.done(); // if current page is login will not trigger afterEach hook, so manually handle it
|
return;
|
}
|
// 生成菜单
|
store.dispatch("GenerateRoutes", res.menuList).then(() => {
|
// 根据roles权限生成可访问的路由表
|
var routers = store.getters.addRouters;
|
if (!routers.length) {
|
Message.error("没有设置任何权限!");
|
userInfoCookie.removeUserInfo(); // 清空登录信息,重新登录
|
next(`/login?redirect=${to.path}`); // 全部重定向到登录页
|
} else {
|
// Message.success("登录成功");
|
router.addRoutes(routers); // 动态添加可访问路由表
|
next({
|
...to,
|
replace: true
|
});
|
}
|
});
|
});
|
} else {
|
var routes = store.getters.permission_routers;
|
const existRoute = findRouter(routes, to.path, "");
|
|
if (existRoute) {
|
next();
|
} else {
|
next({
|
path: "/401",
|
replace: true,
|
query: {
|
noGoBack: true
|
}
|
});
|
}
|
}
|
NProgress.done(); // finish progress bar
|
}
|
} else {
|
next(`/login?redirect=${to.path}`); // 否则全部重定向到登录页
|
NProgress.done(); // if current page is login will not trigger afterEach hook, so manually handle it
|
}
|
});
|
|
router.afterEach(() => {
|
NProgress.done(); // finish progress bar
|
});
|