舜岳 b5f7e31b70
fix: 修复跳转到登录页面传参错误
Signed-off-by: 舜岳 <5680075+shunyue@user.noreply.gitee.com>
2023-05-09 08:24:52 +00:00

43 lines
1.8 KiB
TypeScript

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' });
}
});
}