| | |
| | | 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"; |
| | | |
| | |
| | | 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; |
| | |
| | | |
| | | /** 过滤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)) |
| | | ); |
| | |
| | | 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); |
| | |
| | | } else { |
| | | return new Promise(resolve => { |
| | | getAsyncRoutes().then(({ data }) => { |
| | | // handleAsyncRoutes(cloneDeep(data)); |
| | | // storageLocal().setItem(key, data); |
| | | handleAsyncRoutes(cloneDeep(data)); |
| | | storageLocal().setItem(key, data); |
| | | resolve(router); |
| | | }); |
| | | }); |
| | |
| | | } else { |
| | | return new Promise(resolve => { |
| | | getAsyncRoutes().then(({ data }) => { |
| | | // handleAsyncRoutes(cloneDeep(data)); |
| | | handleAsyncRoutes(cloneDeep(data)); |
| | | resolve(router); |
| | | }); |
| | | }); |
| | |
| | | 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, |
| | |
| | | usePermissionStoreHook().wholeMenus[0]?.children[0] |
| | | ); |
| | | tag && useMultiTagsStoreHook().handleTags("push", topMenu); |
| | | console.log(topMenu, "topMenu"); |
| | | // console.log(topMenu, "topMenu"); |
| | | |
| | | return topMenu; |
| | | } |
| | | |