| import { request } from '@umijs/max';  | 
| import React from 'react';  | 
| import { createIcon } from '@/utils/icon-util';  | 
|   | 
| let remoteMenu = null;  | 
|   | 
| export function getRemoteMenu() {  | 
|     return remoteMenu;  | 
| }  | 
|   | 
| export function setRemoteMenu(data) {  | 
|     remoteMenu = data;  | 
| }  | 
|   | 
| export async function getUserInfo(options) {  | 
|     return request('/api/auth/user', {  | 
|         method: 'GET',  | 
|         ...(options || {}),  | 
|     });  | 
| }  | 
|   | 
| export async function getRouters() {  | 
|     return request('/api/auth/menu', {  | 
|     });  | 
| }  | 
|   | 
| export async function getRoutersInfo() {  | 
|     return getRouters().then((res) => {  | 
|         if (res.code === 200) {  | 
|             // return res.data;  | 
|             const routersInfo = convertCompatRouters(res.data);  | 
|             return routersInfo;  | 
|         } else {  | 
|             return [];  | 
|         }  | 
|     });  | 
| }  | 
|   | 
| export function convertCompatRouters(childrens) {  | 
|     const result = childrens.map((item) => {  | 
|         return {  | 
|             name: item.name,  | 
|             path: item.route,  | 
|             component: item.component ? '.' + item.component : null,  | 
|             icon: createIcon(item.icon),  | 
|             // icon: item.icon,  | 
|             // hideChildrenInMenu: item.hidden,  | 
|             // hideInMenu: item.hidden,  | 
|             // authority: item.perms,  | 
|             routes: item.children ? convertCompatRouters(item.children) : undefined,  | 
|         };  | 
|     });  | 
|     return result;  | 
| }  | 
|   | 
| export function patchRouteWithRemoteMenus(routes) {  | 
|     if (remoteMenu === null) { return; }  | 
|     let proLayout = null;  | 
|     for (const routeItem of routes) {  | 
|         if (routeItem.id === 'ant-design-pro-layout') {  | 
|             proLayout = routeItem;  | 
|             break;  | 
|         }  | 
|     }  | 
|   | 
|     const rootMenu = { routes: [], children: [] }  | 
|     addHomeMenu(remoteMenu);  | 
|     addUserSettingMenu(remoteMenu);  | 
|     patchRouteItems(rootMenu, remoteMenu);  | 
|   | 
|     proLayout.children = proLayout.children.concat(rootMenu.routes);  | 
|     proLayout.routes = proLayout.routes.concat(rootMenu.routes);  | 
| }  | 
|   | 
| function patchRouteItems(parent, children) {  | 
|     for (const menu of children) {  | 
|         if (menu.component !== null && menu.component !== undefined) {  | 
|             // children  | 
|             const Component = require(`@/pages${menu.path}/index.jsx`).default  | 
|             const newRoute = {  | 
|                 name: menu.name,  | 
|                 path: menu.path,  | 
|                 element: <Component />,  | 
|             }  | 
|             parent.routes.push(newRoute);  | 
|             parent.children.push(newRoute);  | 
|         } else {  | 
|             // parent  | 
|             const newRoute = {  | 
|                 name: menu.name,  | 
|                 path: menu.path,  | 
|                 routes: [],  | 
|                 children: [],  | 
|             }  | 
|             parent.routes.push(newRoute);  | 
|             parent.children.push(newRoute);  | 
|             if (menu.routes && menu.routes.length > 0) {  | 
|                 for (const route of menu.routes) {  | 
|                     patchRouteItems(newRoute, [route]);  | 
|                 };  | 
|   | 
|             }  | 
|         }  | 
|     }  | 
| }  | 
|   | 
| function addHomeMenu(remoteMenu) {  | 
|     remoteMenu.unshift({  | 
|         name: "首页",  | 
|         path: "/home",  | 
|         component: "/home",  | 
|         icon: createIcon('HomeOutlined')  | 
|     })  | 
| }  | 
|   | 
| function addUserSettingMenu(remoteMenu) {  | 
|     // const settingRoute = {  | 
|     //     name: "个人设置",  | 
|     //     path: "/account/setting",  | 
|     //     component: "/account/setting"  | 
|     // }  | 
|     // remoteMenu.push({  | 
|     //     name: "个人中心",  | 
|     //     path: "/account",  | 
|     //     component: null,  | 
|     //     routes: [settingRoute],  | 
|     //     icon: createIcon('UserOutlined')  | 
|     // })  | 
|   | 
|     remoteMenu.push({  | 
|         name: "个人中心",  | 
|         path: "/account/setting",  | 
|         component: "/account/setting",  | 
|         icon: createIcon('UserOutlined')  | 
|     })  | 
| } |