|
|
@@ -1,3 +1,4 @@
|
|
|
+import authApis from '@/apis/auth';
|
|
|
import { createRouter, createWebHistory } from 'vue-router'
|
|
|
import {useStore} from "@/store";
|
|
|
|
|
|
@@ -17,7 +18,11 @@ const router = createRouter({
|
|
|
// 登录与注册
|
|
|
{
|
|
|
path: "/",
|
|
|
- redirect: "/login"
|
|
|
+ redirect: () => {
|
|
|
+ window.location.href = "https://p-nju.seec.seecoder.cn/login?from=https://air.seec.seecoder.cn/";
|
|
|
+ // {本地门户首页地址}?from={本地eai首页地址}
|
|
|
+ return "/"; // 占位返回值,实际不会执行
|
|
|
+ },
|
|
|
},
|
|
|
{
|
|
|
path: '/login',
|
|
|
@@ -178,27 +183,51 @@ const router = createRouter({
|
|
|
/*
|
|
|
路由守卫
|
|
|
*/
|
|
|
-router.beforeEach((to) => {
|
|
|
- const store = useStore()
|
|
|
- // 判断是否是登录页面,如果是则直接放行
|
|
|
- if (to.path === '/login' || to.path === '/register' || to.path === '/passwordChange'|| to.path === '/admin/login') {
|
|
|
- return true;
|
|
|
- }
|
|
|
- // 判断是否登录,未登录需要登录
|
|
|
- if(!("role" in store.user)){
|
|
|
- router.push('/login')
|
|
|
- }
|
|
|
- let role = store.user.role
|
|
|
- // 1.守卫管理员权限界面
|
|
|
- if(to.meta.roles != null){
|
|
|
- for(let i = 0; i < to.meta.roles.length; i++){
|
|
|
- if(to.meta.roles[i] == role){
|
|
|
- console.log("路由权限满足")
|
|
|
- return
|
|
|
- }
|
|
|
+ router.beforeEach(async (to) => {
|
|
|
+ const store = useStore();
|
|
|
+ const publicPaths = ['/login', '/register', '/passwordChange', '/admin/login'];
|
|
|
+ // 1. 检查URL中的token
|
|
|
+ const urlToken = new URLSearchParams(window.location.search).get('token');
|
|
|
+ if (urlToken) {
|
|
|
+ try {
|
|
|
+ // 等待 token 验证完成
|
|
|
+ const res = await authApis.authToken(urlToken || store.token);
|
|
|
+ const data = res.data.data;
|
|
|
+ // 存储用户状态
|
|
|
+ store.setUser(data);
|
|
|
+ store.setToken(data?.token);
|
|
|
+ localStorage.setItem('Authorization', data?.token);
|
|
|
+ localStorage.setItem('User', JSON.stringify(data));
|
|
|
+ // 清除 URL 中的 token
|
|
|
+ if (urlToken) {
|
|
|
+ window.history.replaceState({}, '', to.path);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果当前路径是公开路径,允许继续;否则跳转到首页
|
|
|
+ if (!publicPaths.includes(to.path)) {
|
|
|
+ return '/home';
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Token验证失败:', error);
|
|
|
+ // 验证失败,清除无效的 token
|
|
|
+ store.setUser(null);
|
|
|
+ store.setToken(null);
|
|
|
+ localStorage.removeItem('Authorization');
|
|
|
+ localStorage.removeItem('User');
|
|
|
}
|
|
|
- router.push('/login')
|
|
|
- }
|
|
|
-})
|
|
|
+ }
|
|
|
+
|
|
|
+ if (publicPaths.includes(to.path)) return true;
|
|
|
+
|
|
|
+ if (!store.user?.role) {
|
|
|
+ return '/login';
|
|
|
+ }
|
|
|
+
|
|
|
+ if (to.meta?.roles && !to.meta.roles.includes(store.user.role)) {
|
|
|
+ return '/login';
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ });
|
|
|
|
|
|
export default router
|