🔖 项目重命名.
This commit is contained in:
16
orion-visor-ui/src/router/guard/index.ts
Normal file
16
orion-visor-ui/src/router/guard/index.ts
Normal 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);
|
||||
}
|
||||
11
orion-visor-ui/src/router/guard/router-listener-emitter.ts
Normal file
11
orion-visor-ui/src/router/guard/router-listener-emitter.ts
Normal 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);
|
||||
});
|
||||
}
|
||||
39
orion-visor-ui/src/router/guard/router-permission.ts
Normal file
39
orion-visor-ui/src/router/guard/router-permission.ts
Normal 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();
|
||||
});
|
||||
}
|
||||
50
orion-visor-ui/src/router/guard/user-login-info.ts
Normal file
50
orion-visor-ui/src/router/guard/user-login-info.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user