89 lines
2.4 KiB
JavaScript
89 lines
2.4 KiB
JavaScript
import store from '@/store';
|
|
import router from '@/router';
|
|
import { notification } from 'ant-design-vue';
|
|
import NProgress from 'nprogress';
|
|
import 'nprogress/nprogress.css';
|
|
|
|
NProgress.configure({ showSpinner: false });
|
|
|
|
const loginPath = '/login';
|
|
const defaultRoutePath = '/race/list';
|
|
const whiteList = ['Login', 'Index']; // 白名单保持不变
|
|
|
|
router.beforeEach(async(to, from, next) => {
|
|
NProgress.start();
|
|
const tokens = window.localStorage.getItem("token");
|
|
|
|
/* 未登录情况下的路由拦截 */
|
|
if (!tokens) {
|
|
// 修改判断逻辑,同时检查路由名称和路径
|
|
if (whiteList.includes(to.name) || to.path === '/Index') {
|
|
next();
|
|
} else {
|
|
next({
|
|
path: loginPath,
|
|
query: {
|
|
redirect: to.fullPath,
|
|
},
|
|
});
|
|
}
|
|
return;
|
|
}
|
|
|
|
/* 已登录情况下访问登录界面的处理 */
|
|
if (to.path === loginPath) {
|
|
next(defaultRoutePath);
|
|
return;
|
|
}
|
|
|
|
/* 已获取用户信息的情况 */
|
|
if (store.getters.permissions != null && store.getters.permissions !== "") {
|
|
next();
|
|
NProgress.done();
|
|
return;
|
|
}
|
|
|
|
/* 未获取用户信息的情况 */
|
|
try {
|
|
await store.dispatch('initUser');
|
|
} catch (e) {
|
|
store.commit('logout');
|
|
next({ path: loginPath, query: { redirect: to.fullPath } });
|
|
notification.error({
|
|
message: '错误',
|
|
description: '请求用户信息失败,请重试',
|
|
});
|
|
NProgress.done();
|
|
return;
|
|
}
|
|
|
|
/* 成功获取用户信息的情况 */
|
|
if (!checkAccess(to)) {
|
|
next({ path: defaultRoutePath, replace: true });
|
|
NProgress.done();
|
|
return;
|
|
}
|
|
|
|
const redirect = decodeURIComponent(from.query.redirect || to.path);
|
|
if (redirect === to.path) {
|
|
next({...to, replace: true });
|
|
} else {
|
|
next(redirect);
|
|
}
|
|
NProgress.done();
|
|
});
|
|
|
|
router.afterEach(() => {
|
|
NProgress.done();
|
|
});
|
|
|
|
function checkAccess(route) {
|
|
const userPrivileges = store.state.user.userPrivileges == null ? 1 : store.state.user.userPrivileges;
|
|
const requiredPrivileges = route.meta.auth;
|
|
console.log(userPrivileges);
|
|
|
|
if (!requiredPrivileges) {
|
|
return true;
|
|
}
|
|
return requiredPrivileges.includes(userPrivileges);
|
|
} |