import {FontIcon} from '@components'; import {TreeRoleMenuData} from '@models'; import {ReactNode} from 'react'; export type ParseMenuType = { key: string; title: string; label: string; pid: string; url: string; icon: ReactNode; children?: ParseMenuType[]; }; export function sortMenu(menus: TreeRoleMenuData[]) { const result: ParseMenuType[] = []; const tempAreaMap = new Map(); menus.forEach(function({id, name, url, img, pId}) { const tempValue: ParseMenuType = { key: id, title: name, label: name, pid: pId, url, icon: img && , }; if (pId === '0') { // 是一级菜单找是否在临时区域有保存的二级菜单 const tempList = tempAreaMap.get(id); result.push({...tempValue, children: tempList ? [...tempList] : []}); } else { // 二级菜单判断是否有对应的一级菜单 如果有加到父组件的children里 // 如果没有放在临时Map中 const idx = result.findIndex(val => val.key === pId); if (idx >= 0) { result[idx].children!.push(tempValue); } else { if (tempAreaMap.has(pId)) { tempAreaMap.get(pId)!.push(tempValue); } else { tempAreaMap.set(pId, [tempValue]); } } } }); return result; }