🔖 项目重命名.

This commit is contained in:
lijiahangmax
2024-05-16 00:03:30 +08:00
parent f7189e34cb
commit d3a045ec20
1511 changed files with 4199 additions and 4128 deletions

View File

@@ -0,0 +1,16 @@
import type { Router } from 'vue-router';
import setupUserLoginInfoGuard from './user-login-info';
import setupPermissionGuard from './router-permission';
import setupRouteEmitterGuard from './router-listener-emitter';
/**
* 创建路由守卫
*/
export default function createRouteGuard(router: Router) {
// 路由监听守卫
setupRouteEmitterGuard(router);
// 登录检查守卫
setupUserLoginInfoGuard(router);
// 权限检查守卫
setupPermissionGuard(router);
}

View File

@@ -0,0 +1,11 @@
import type { Router } from 'vue-router';
import { setRouteEmitter } from '@/utils/route-listener';
/**
* 初始化路由监听订阅
*/
export default function setupRouteEmitterGuard(router: Router) {
router.beforeEach(async (to) => {
setRouteEmitter(to);
});
}

View File

@@ -0,0 +1,39 @@
import type { Router } from 'vue-router';
import NProgress from 'nprogress';
import { useMenuStore } from '@/store';
import { NOT_FOUND_ROUTER_NAME, WHITE_ROUTER_LIST } from '../constants';
import usePermission from '@/hooks/permission';
export default function setupPermissionGuard(router: Router) {
router.beforeEach(async (to, from, next) => {
const menuStore = useMenuStore();
// 未加载菜单 并且 不在白名单内 则加载菜单
if (
!menuStore.menuFetched &&
!WHITE_ROUTER_LIST.find((el) => el.name === to.name)
) {
// 加载菜单
await menuStore.fetchMenu();
}
// 检测是否可以访问
const permission = usePermission();
const access = permission.accessRouter(to);
// 刚进入页面时 重定向的 meta 是空的
if (access && to.meta.locale === undefined && menuStore.menuFetched) {
to.meta = to.matched[to.matched.length - 1].meta;
}
if (access) {
// 正常跳转
next();
} else {
// 页面不存在
next({ name: NOT_FOUND_ROUTER_NAME });
}
// 修改页面标题
const locale = to.meta?.locale;
if (locale) {
document.title = locale;
}
NProgress.done();
});
}

View File

@@ -0,0 +1,50 @@
import type { Router, LocationQueryRaw } from 'vue-router';
import NProgress from 'nprogress';
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 (isLogin()) {
// 获取用户信息
if (userStore.id) {
next();
} else {
try {
// 获取用户信息
await userStore.info();
next();
} catch (error) {
// 获取失败退出登录
await userStore.logout();
next({
name: 'login',
query: {
redirect: to.name,
...to.query,
} as LocationQueryRaw,
});
}
}
} else {
// 未登录跳转到登录页
if (to.name === 'login') {
next();
return;
}
// 跳转到登录页
next({
name: 'login',
query: {
redirect: to.name,
...to.query,
} as LocationQueryRaw,
});
}
});
}