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"); /** * 初始化动态路由 */ export const initDynamicRouter = async (params?: any, defaultUrl?: any) => { const authStore = AuthStore(); const globalStore = GlobalStore(); try { // 1.获取菜单列表 && 按钮权限(可合并到一个接口获取,根据后端不同可自行改造) await authStore.getAuthMenuList(params); await authStore.getAuthButtonList(); // await authStore.getAuthButtonList(params); // 2.判断当前用户有没有菜单权限 if (!authStore.authMenuListGet.length) { ElNotification({ title: "无权限访问", message: "当前账号无任何菜单权限,请联系系统管理员!", type: "warning", duration: 3000 }); globalStore.resetStore(); // router.replace(LOGIN_URL); router.replace("/load"); return Promise.reject("No permission"); } // 3.添加动态路由 let toNum = 0; // 记录跳转数,只想跳转一次 authStore.flatMenuListGet.forEach((item: any, index: any) => { 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); if (globalStore.path && !defaultUrl) { console.log("big"); router.push(globalStore.path); globalStore.setPath(null); } else { // 其他处理 } } else { router.addRoute("layout", item); if (globalStore.path) { // console.log("exec"); if (globalStore.path == item.path && !defaultUrl) { router.push(globalStore.path); ++toNum; } else { if (item.path != "/" && toNum < 1 && !defaultUrl) { router.push(item.path); ++toNum; } if (item.path != "/" && toNum < 1 && defaultUrl) { router.push(defaultUrl); ++toNum; } } // globalStore.setPath(null); } else { // 其他处理 globalStore.setPath(null); } } }); } catch (error) { // 💢 当按钮 || 菜单请求出错时,重定向到登陆页 globalStore.resetStore(); // router.replace(LOGIN_URL); router.replace("/load"); return Promise.reject(error); } };