import NProgress from 'nprogress'; // progress bar import type { LocationQueryRaw, Router } from 'vue-router'; import { useUserStore } from '@/store'; import { isLogin } from '@/utils/auth'; export default function setupUserLoginInfoGuard(router: Router) { router.beforeEach(async (to, _from, next) => { NProgress.start(); const userStore = useUserStore(); // 登录页不需要校验旧令牌,避免后端未启动或令牌过期时重复请求用户资料。 if (to.name === 'login') { next(); return; } if (isLogin()) { if (userStore.role) { next(); } else { try { await userStore.info(); next(); } catch { await userStore.logout(); next({ name: 'login', query: { redirect: to.name, ...to.query, } as LocationQueryRaw, }); } } } else { next({ name: 'login', query: { redirect: to.name, ...to.query, } as LocationQueryRaw, }); } }); }