48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
/*
|
|
* @Author: RenXiaoDong
|
|
* @Date: 2025-06-22 22:59:16
|
|
*/
|
|
import type { Router } from 'vue-router';
|
|
import { message } from 'ant-design-vue';
|
|
import NProgress from 'nprogress';
|
|
import { goUserLogin } from '@/utils/user';
|
|
// import router from '@/router';
|
|
import { checkRoutePermission } from '@/permission/permission';
|
|
|
|
import { useUserStore } from '@/stores/modules/user';
|
|
|
|
export default function setupUserLoginInfoGuard(router: Router) {
|
|
router.beforeEach(async (to, from, next) => {
|
|
NProgress.start();
|
|
const userStore = useUserStore();
|
|
|
|
const routeName = to?.name as string;
|
|
const requiresAuth = to?.meta?.requiresAuth || false;
|
|
const requireLogin = to?.meta?.requireLogin || false;
|
|
const query = to?.query ?? {};
|
|
|
|
if (requireLogin && !userStore.isLogin) {
|
|
goUserLogin(query);
|
|
next();
|
|
return;
|
|
}
|
|
|
|
if (requiresAuth) {
|
|
const hasPermission = checkRoutePermission(routeName);
|
|
|
|
if (!hasPermission) {
|
|
message.error('您没有权限访问该页面');
|
|
next('/trial');
|
|
return;
|
|
}
|
|
next();
|
|
return;
|
|
}
|
|
|
|
next();
|
|
});
|
|
router.afterEach((to) => {
|
|
NProgress.done();
|
|
});
|
|
}
|