Files
saas-mbr/abacus-static-framework/src/permission.ts
T

112 lines
3.2 KiB
TypeScript
Raw Normal View History

import router from "@/framework/router";
import { RouteRecordRaw } from 'vue-router';
import pinia from "@/framework/store";
import { usePermissionStoreHook } from "@/framework/store/modules/permission";
import NProgress from "nprogress";
import "nprogress/nprogress.css";
NProgress.configure({ showSpinner: false }); // 进度条
import { useRoutesStore } from "@/framework/store/modules/routes";
import { getSubSystemRouter } from "@/framework/router/dynamicRouter";
import { useUserStoreHook } from "@/framework/store/modules/user";
import { useSettingsStore } from "@/framework/store/modules/settings";
const userStore = useUserStoreHook()
const routesStore = useRoutesStore(pinia);
const permissionStore = usePermissionStoreHook();
const settingsStore = useSettingsStore(pinia);
const whiteList=[''] //白名单配置
/**白名单路由处理 */
function whiteListHandle(to,next){
if (routesStore.hasRoutes) {
next();
} else {
routesStore.routes = getSubSystemRouter()
routesStore.hasRoutes = true
getSubSystemRouter().forEach((route: RouteRecordRaw) => {
router.addRoute(route);
});
next({ ...to, replace: true });
}
}
/**开发环境路由处理 */
async function developmentRouterHandle(to,next){
if (routesStore.hasRoutes) {
next();
return;
}
userStore.getInfo()// 获取登录用户信息
//获取并设置业务域
await permissionStore.setAndGetBusinessDomain().catch((error) => {
console.error(error);
});
routesStore.routes = getSubSystemRouter()
routesStore.hasRoutes = true
getSubSystemRouter().forEach((route: RouteRecordRaw) => {
router.addRoute(route);
});
next({ ...to, replace: true });
}
/**路由处理 */
async function routerHandle(to,next){
if (routesStore.hasRoutes) {
next()
return false
}
try {
userStore.getInfo()// 获取登录用户信息
//获取并设置业务域
await permissionStore.setAndGetBusinessDomain().catch((error) => {
console.error(error);
});
const accessRoutes = await permissionStore.generateRoutes(getSubSystemRouter());
accessRoutes.forEach((route: RouteRecordRaw) => {
router.addRoute(route);
});
routesStore.routes = accessRoutes
routesStore.hasRoutes = true
next({ ...to, replace: true });
} catch (error) {
ElMessage({type: 'error',message: '无菜单权限,请重新登录' })
// setTimeout(()=>{
// window.location.href = settingsStore.loginAddress
// },2000)
}
}
/**
* 全局前置路由守卫,在即将进入路由回调会被触发
* to 表示oruter即将进入的路由对象
* from 表示当前即将离开的路由对象
* next 通过该函数可以重新定义要跳转的路由路径。常用示例:next({ path: '/' }) 表示跳转到重定向页面
*/
router.beforeEach( (to, from, next) => {
NProgress.start() //进度条
/**白名单处理 */
if(whiteList.includes(to.fullPath)){
whiteListHandle(to,next)
return
}
/**路由处理 */
if (import.meta.env.MODE === 'development') {
developmentRouterHandle(to,next)
} else {
routerHandle(to,next)
}
});
/**
* 全局后置路由守卫
*/
router.afterEach(() => {
NProgress.done();//进度条
});