zhangwei
2025-08-20 115769e9ad3ddc64e21ad7285450c4c563c745ed
src/router/utils.ts
@@ -21,11 +21,15 @@
import { userKey, type DataInfo } from "@/utils/auth";
import { type menuType, routerArrays } from "@/layout/types";
import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
import { useUserStoreHook } from "@/store/modules/user";
import { usePermissionStoreHook } from "@/store/modules/permission";
const IFrame = () => import("@/layout/frame.vue");
// https://cn.vitejs.dev/guide/features.html#glob-import
const modulesRoutes = import.meta.glob("/src/views/**/*.{vue,tsx}");
const quanxianList = ["/item"];
const managerList = ["/user"];
const userInfo = storageLocal().getItem<DataInfo<number>>(userKey);
// 动态路由
import { getAsyncRoutes } from "@/api/routes";
@@ -33,7 +37,7 @@
  const { name, path, parentId, meta } = routeInfo;
  return isAllEmpty(parentId)
    ? isAllEmpty(meta?.rank) ||
      (meta?.rank === 0 && name !== "Welcome" && path !== "/welcome")
      (meta?.rank === 0 && name !== "Home" && path !== "/")
      ? true
      : false
    : false;
@@ -54,9 +58,17 @@
/** 过滤meta中showLink为false的菜单 */
function filterTree(data: RouteComponent[]) {
  const hasFlsh = useUserStoreHook().nowRole.hasFlsh;
  const isManager = useUserStoreHook().isManager;
  const newTree = cloneDeep(data).filter(
    (v: { meta: { showLink: boolean } }) => v.meta?.showLink !== false
    (v: { path: string; meta: { showLink: boolean } }) => {
      quanxianList.includes(v.path) ? (v.meta.showLink = hasFlsh) : null;
      managerList.includes(v.path) ? (v.meta.showLink = isManager) : null;
      return v.meta?.showLink !== false;
    }
  );
  console.log(newTree);
  newTree.forEach(
    (v: { children }) => v.children && (v.children = filterTree(v.children))
  );
@@ -171,7 +183,7 @@
          if (!router.hasRoute(v?.name)) router.addRoute(v);
          const flattenRouters: any = router
            .getRoutes()
            .find(n => n.path === "/welcome");
            .find(n => n.path === "/");
          // 保持router.options.routes[0].children与path为"/"的children一致,防止数据不一致导致异常
          flattenRouters.children = router.options.routes[0].children;
          router.addRoute(flattenRouters);
@@ -205,8 +217,8 @@
    } else {
      return new Promise(resolve => {
        getAsyncRoutes().then(({ data }) => {
          // handleAsyncRoutes(cloneDeep(data));
          // storageLocal().setItem(key, data);
          handleAsyncRoutes(cloneDeep(data));
          storageLocal().setItem(key, data);
          resolve(router);
        });
      });
@@ -214,7 +226,7 @@
  } else {
    return new Promise(resolve => {
      getAsyncRoutes().then(({ data }) => {
        // handleAsyncRoutes(cloneDeep(data));
        handleAsyncRoutes(cloneDeep(data));
        resolve(router);
      });
    });
@@ -249,7 +261,7 @@
  if (routesList?.length === 0) return routesList;
  const newRoutesList: RouteRecordRaw[] = [];
  routesList.forEach((v: RouteRecordRaw) => {
    if (v.path === "/welcome") {
    if (v.path === "/") {
      newRoutesList.push({
        component: v.component,
        name: v.name,
@@ -387,7 +399,8 @@
    usePermissionStoreHook().wholeMenus[0]?.children[0]
  );
  tag && useMultiTagsStoreHook().handleTags("push", topMenu);
  console.log(topMenu, "topMenu");
  // console.log(topMenu, "topMenu");
  return topMenu;
}