/* * @Author: 田鑫 * @Date: 2023-03-05 14:46:43 * @LastEditors: 田鑫 * @LastEditTime: 2023-03-05 15:59:25 * @Description: 路由登录状态守卫 */ import type { Router, LocationQueryRaw } from 'vue-router'; import NProgress from 'nprogress'; // progress bar import { isLogin, clearAllLocalStorage } from '@/utils/auth'; import { useUserStore } from '@/stores/modules/user'; export default function setupUserLoginInfoGuard(router: Router) { router.beforeEach(async (to, from, next) => { console.log('access login info router guard'); NProgress.start(); if (to.name === 'auth') { next(); } const userStore = useUserStore(); //* 判断用户是否登录,若登录则放过,进入下一步 //* 若无,则清空所有缓存并弹回登录鉴权页 if (isLogin()) { if (userStore.role) { next(); } else { userStore.getUserInfo(); next(); } } else { clearAllLocalStorage(); // todo 跳转回登录鉴权页,当前为mock路由地址 next({ name: 'auth', query: { redirect: to.name, ...to.query, } as LocationQueryRaw, }); } }); }