Files
orion-visor/orion-visor-ui/src/router/guard/user-login-info.ts

51 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-07-24 10:05:07 +08:00
import type { Router, LocationQueryRaw } from 'vue-router';
2023-07-27 18:48:15 +08:00
import NProgress from 'nprogress';
2023-07-24 10:05:07 +08:00
import { useUserStore } from '@/store';
import { isLogin } from '@/utils/auth';
2023-07-27 18:48:15 +08:00
/**
*
*/
2023-07-24 10:05:07 +08:00
export default function setupUserLoginInfoGuard(router: Router) {
router.beforeEach(async (to, from, next) => {
NProgress.start();
const userStore = useUserStore();
if (isLogin()) {
2023-07-27 18:48:15 +08:00
// 获取用户信息
if (userStore.id) {
2023-07-24 10:05:07 +08:00
next();
} else {
try {
2023-07-27 18:48:15 +08:00
// 获取用户信息
2023-07-24 10:05:07 +08:00
await userStore.info();
next();
} catch (error) {
2023-07-27 18:48:15 +08:00
// 获取失败退出登录
2023-07-24 10:05:07 +08:00
await userStore.logout();
next({
name: 'login',
query: {
redirect: to.name,
...to.query,
} as LocationQueryRaw,
});
}
}
} else {
2023-07-27 18:48:15 +08:00
// 未登录跳转到登录页
2023-07-24 10:05:07 +08:00
if (to.name === 'login') {
next();
return;
}
2023-07-27 18:48:15 +08:00
// 跳转到登录页
2023-07-24 10:05:07 +08:00
next({
name: 'login',
query: {
redirect: to.name,
...to.query,
} as LocationQueryRaw,
});
}
});
}