wujingjing
2024-07-18 46df470bbba226da5224d9adc1c47ecfadf11e1d
src/router/backEnd.ts
@@ -1,18 +1,14 @@
import { RouteRecordRaw } from 'vue-router';
import { storeToRefs } from 'pinia';
import pinia from '/@/stores/index';
import { useUserInfo } from '/@/stores/userInfo';
import { useRequestOldRoutes } from '/@/stores/requestOldRoutes';
import { Local, Session } from '/@/utils/storage';
import { NextLoading } from '/@/utils/loading';
import type { RouteRecordRaw } from 'vue-router';
import { parseMenuTree, useMenuApi } from '/@/api/menu/index';
import { formatFlatteningRoutes, formatTwoStageRoutes, router } from '/@/router/index';
import { pathMap } from '/@/router/pathMap';
import { dynamicRoutes, notFoundAndNoPower } from '/@/router/route';
import { formatTwoStageRoutes, formatFlatteningRoutes, router } from '/@/router/index';
import pinia from '/@/stores/index';
import { useRequestOldRoutes } from '/@/stores/requestOldRoutes';
import { useRoutesList } from '/@/stores/routesList';
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
import { parseMenuTree, useMenuApi } from '/@/api/menu/index';
import { ElMessage } from 'element-plus';
import { pathMap } from '/@/router/pathMap';
import { accessTokenKey, clearAccessTokens } from '/@/utils/request';
import { menuData } from '../api/menu/menuData';
// 后端控制路由
@@ -38,41 +34,26 @@
 */
export async function initBackEndControlRoutes() {
   // 界面 loading 动画开始执行
   if (window.nextLoading === undefined) NextLoading.start();
   // if (window.nextLoading === undefined) NextLoading.start();
   // 无 token 停止执行下一步
   if (!Local.get(accessTokenKey)) return false;
   // if (!Local.get(accessSessionKey)) return false;
   // 触发初始化用户信息 pinia
   // https://gitee.com/lyt-top/vue-next-admin/issues/I5F1HP
   // await useUserInfo().setUserInfos();
   // 获取路由菜单数据
   const res = (await getBackEndControlRoutes()) as any;
   const formattedTreeMenu = parseMenuTree(menuData as any, pathMap);
   // 无登录权限时,添加判断
   // https://gitee.com/lyt-top/vue-next-admin/issues/I64HVO
   // if (res.data.length <= 0) return Promise.resolve(true);
   // 存储接口原始路由(未处理component),根据需求选择使用
   useRequestOldRoutes().setRequestOldRoutes(JSON.parse(JSON.stringify(formattedTreeMenu)));
   if (res?.Code === 0) {
      if (res.Data) {
         const formattedTreeMenu = parseMenuTree(res.Data, pathMap);
         // 无登录权限时,添加判断
         // https://gitee.com/lyt-top/vue-next-admin/issues/I64HVO
         // if (res.data.length <= 0) return Promise.resolve(true);
         // 存储接口原始路由(未处理component),根据需求选择使用
         useRequestOldRoutes().setRequestOldRoutes(JSON.parse(JSON.stringify(formattedTreeMenu)));
         // 处理路由(component),替换 dynamicRoutes(/@/router/route)第一个顶级 children 的路由
         dynamicRoutes[0].children = await backEndComponent(formattedTreeMenu);
         // 添加动态路由
         await setAddRoute();
         // 设置路由到 pinia routesList 中(已处理成多级嵌套路由)及缓存多级嵌套数组处理后的一维数组
         await setFilterMenuAndCacheTagsViewRoutes();
      }
      if (!res.Data || res.Data?.length === 0) {
         ElMessage.error('该账号暂时没有菜单,请尝试切换账号!');
         clearAccessTokens();
      }
   } else {
      ElMessage.error('获取菜单失败' + (res?.Message ? `,${JSON.stringify(res.Message)}` : '') + '请尝试切换账号');
      clearAccessTokens();
      return Promise.resolve(true);
   }
   // 处理路由(component),替换 dynamicRoutes(/@/router/route)第一个顶级 children 的路由
   dynamicRoutes[0].children = await backEndComponent(formattedTreeMenu);
   // 添加动态路由
   await setAddRoute();
   // 设置路由到 pinia routesList 中(已处理成多级嵌套路由)及缓存多级嵌套数组处理后的一维数组
   await setFilterMenuAndCacheTagsViewRoutes();
}
/**
@@ -101,7 +82,7 @@
 * @returns 返回替换后的路由数组
 */
export function setFilterRouteEnd() {
   let filterRouteEnd: any = formatTwoStageRoutes(formatFlatteningRoutes(dynamicRoutes));
   const filterRouteEnd: any = formatTwoStageRoutes(formatFlatteningRoutes(dynamicRoutes));
   // notFoundAndNoPower 防止 404、401 不在 layout 布局中,不设置的话,404、401 界面将全屏显示
   // 关联问题 No match found for location with path 'xxx'
   filterRouteEnd[0].children = [...filterRouteEnd[0].children, ...notFoundAndNoPower];
@@ -119,37 +100,6 @@
      router.addRoute(route);
   });
}
/**
 * 请求后端路由菜单接口
 * @description isRequestRoutes 为 true,则开启后端控制路由
 * @returns 返回后端路由菜单数据
 */
export async function getBackEndControlRoutes() {
   // 模拟 admin 与 test
   const stores = useUserInfo();
   let userInfo = (await stores.getUserInfo()) as any;
   const {
      SoftWare: { ID: SoftwareID },
      User: { ID: UserID },
   } = userInfo;
   const params = { SoftwareID, UserID };
   return menuApi.getAdminMenu(params);
   // const auth = userInfos.value.roles[0];
   // 管理员 admin
   // if (auth === 'admin') return menuApi.getAdminMenu();
   // 其它用户 test
   // else return menuApi.getTestMenu();
}
/**
 * 重新请求后端路由菜单接口
 * @description 用于菜单管理界面刷新菜单(未进行测试)
 * @description 路径:/src/views/system/menu/component/addMenu.vue
 */
// export async function setBackEndControlRefreshRoutes() {
//    await getBackEndControlRoutes();
// }
/**
 * 后端路由 component 转换