diff --git a/src/layout/index.tsx b/src/layout/index.tsx index 28a1785..6bce624 100644 --- a/src/layout/index.tsx +++ b/src/layout/index.tsx @@ -18,7 +18,8 @@ import Content from './content'; import userService from '@/request/service/user'; import authService from '@/request/service/auth'; import { useRequest } from "@/hooks/use-request"; -// import menuData from '../../mock/menu.json' + + const BasicLayout: React.FC = () => { @@ -103,7 +104,8 @@ const BasicLayout: React.FC = () => { }) } } - menuList.data.forEach(item => fixAndPushMenu(item)) + menuList.data.forEach(item => fixAndPushMenu(item)); + setMenus(menuList.data) //([...formatedMenus, ...menuList.data]); console.log('components', components); replaceRoutes('*', [ diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 0e1dc22..13243ab 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -10,3 +10,24 @@ export function getParamsBySearchParams(query: URLSearchParams) { ); return params as T; } + + +export function convertToTree(source: T[], keyExtra: (item: T) => string | number, parentKeyExtra: (item: T) => string | number): T[] { + const sourceMap: {[key: string | number]: T} = {}; + for(const item of source) { + const children = (item as any)['children'] ? (item as any)['children'] : []; + (item as any).children = children; + sourceMap[keyExtra(item)] = item; + } + const rootKeys = []; + for(const item of source) { + const parentKey = parentKeyExtra(item); + if(parentKey in sourceMap) { + (sourceMap[parentKey] as any).children?.push(item) + } else { + rootKeys.push(keyExtra(item)) + } + } + + return rootKeys.map(key => sourceMap[key]) +}