import { useAuthStore } from '@/state/modules/auth'; import { Router } from 'uni-mini-router/lib/interfaces'; export function createRouterGuard(router: Router) { createBeforeEachGuard(router); createAfterEachGuard(router); } function createBeforeEachGuard(router: Router) { router.beforeEach((to, _, next) => { const authStore = useAuthStore(); // @ts-ignore if (to && to?.meta?.ignoreAuth) { // 如果目标路由忽略验证直接跳转 next(); } else if (!authStore.isLogin && to && to.name !== 'Login') { // 如果没有登录且目标路由不是登录页面则跳转到登录页面 // 将目标路由和参数传入登录页面,登录成功后直接跳转到目标路由,优化体验 next({ name: 'Login', params: { redirect: to.name!, tabBar: to?.meta?.tabBar, ...to.query }, navType: 'push' }); } else if (authStore.isLogin && to && to.name === 'Login') { // 如果已经登录且目标页面是登录页面则跳转至首页 next({ name: 'Home', navType: 'replaceAll' }); } else { next(); } }); } function createAfterEachGuard(router: Router) { router.afterEach((to) => { // @ts-ignore if (to && to?.meta?.ignoreAuth) return; const authStore = useAuthStore(); if (!authStore.isLogin && to && to.name !== 'Login') { // 如果没有登录且目标路由不是登录页面则跳转到登录页面 router.push({ name: 'Login', params: { tabBar: to?.meta?.tabBar, ...to.query }}); } else if (authStore.isLogin && to && to.name === 'Login') { // 如果已经登录且目标页面是登录页面则跳转至首页 router.replaceAll({ name: 'Home' }); } }); }