2023-03-04 09:16:33 +08:00
|
|
|
import router from "@/routers/index";
|
|
|
|
|
import { isType } from "@/utils/util";
|
|
|
|
|
import { LOGIN_URL } from "@/config/config";
|
|
|
|
|
import { ElNotification } from "element-plus";
|
|
|
|
|
import { GlobalStore } from "@/stores";
|
|
|
|
|
import { AuthStore } from "@/stores/modules/auth";
|
|
|
|
|
|
|
|
|
|
// 引入 views 文件夹下所有 vue 文件
|
|
|
|
|
const modules = import.meta.glob("@/views/**/*.vue");
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化动态路由
|
|
|
|
|
*/
|
2023-03-24 19:36:11 +08:00
|
|
|
export const initDynamicRouter = async (params?: any) => {
|
2023-03-04 09:16:33 +08:00
|
|
|
const authStore = AuthStore();
|
|
|
|
|
const globalStore = GlobalStore();
|
|
|
|
|
try {
|
|
|
|
|
// 1.获取菜单列表 && 按钮权限(可合并到一个接口获取,根据后端不同可自行改造)
|
2023-03-24 19:36:11 +08:00
|
|
|
await authStore.getAuthMenuList(params);
|
2023-03-04 09:16:33 +08:00
|
|
|
await authStore.getAuthButtonList();
|
2023-04-25 10:48:27 +08:00
|
|
|
// await authStore.getAuthButtonList(params);
|
2023-03-04 09:16:33 +08:00
|
|
|
|
|
|
|
|
// 2.判断当前用户有没有菜单权限
|
|
|
|
|
if (!authStore.authMenuListGet.length) {
|
|
|
|
|
ElNotification({
|
|
|
|
|
title: "无权限访问",
|
|
|
|
|
message: "当前账号无任何菜单权限,请联系系统管理员!",
|
|
|
|
|
type: "warning",
|
|
|
|
|
duration: 3000
|
|
|
|
|
});
|
2023-04-25 10:48:27 +08:00
|
|
|
globalStore.resetStore();
|
|
|
|
|
|
2023-07-05 18:32:25 +08:00
|
|
|
// router.replace(LOGIN_URL);
|
|
|
|
|
router.replace("/load");
|
2023-03-04 09:16:33 +08:00
|
|
|
return Promise.reject("No permission");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 3.添加动态路由
|
2023-11-23 18:50:22 +08:00
|
|
|
authStore.flatMenuListGet.forEach((item: any, index: any) => {
|
2023-03-04 09:16:33 +08:00
|
|
|
item.children && delete item.children;
|
|
|
|
|
if (item.component && isType(item.component) == "string") {
|
|
|
|
|
item.component = modules["/src/views" + item.component + ".vue"];
|
|
|
|
|
}
|
|
|
|
|
if (item.meta.isFull) {
|
|
|
|
|
router.addRoute(item);
|
2023-05-19 17:02:08 +08:00
|
|
|
if (globalStore.path) {
|
|
|
|
|
console.log("big");
|
|
|
|
|
router.push(globalStore.path);
|
|
|
|
|
|
|
|
|
|
globalStore.setPath(null);
|
|
|
|
|
} else {
|
|
|
|
|
// 其他处理
|
|
|
|
|
}
|
2023-03-04 09:16:33 +08:00
|
|
|
} else {
|
|
|
|
|
router.addRoute("layout", item);
|
2023-05-19 17:02:08 +08:00
|
|
|
if (globalStore.path) {
|
2023-05-23 15:23:39 +08:00
|
|
|
// console.log("exec");
|
2023-11-23 18:50:22 +08:00
|
|
|
if (globalStore.path == item.path) {
|
|
|
|
|
router.push(globalStore.path);
|
|
|
|
|
} else {
|
2023-11-27 10:53:14 +08:00
|
|
|
if (item.path != "/") {
|
2023-11-23 18:50:22 +08:00
|
|
|
router.push(item.path);
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-05-19 17:02:08 +08:00
|
|
|
// globalStore.setPath(null);
|
|
|
|
|
} else {
|
|
|
|
|
// 其他处理
|
2023-11-23 18:50:22 +08:00
|
|
|
globalStore.setPath(null);
|
2023-05-19 17:02:08 +08:00
|
|
|
}
|
2023-03-04 09:16:33 +08:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} catch (error) {
|
|
|
|
|
// 💢 当按钮 || 菜单请求出错时,重定向到登陆页
|
2023-04-25 10:48:27 +08:00
|
|
|
globalStore.resetStore();
|
2023-07-05 18:32:25 +08:00
|
|
|
// router.replace(LOGIN_URL);
|
|
|
|
|
router.replace("/load");
|
2023-03-04 09:16:33 +08:00
|
|
|
return Promise.reject(error);
|
|
|
|
|
}
|
|
|
|
|
};
|