|  |  | 
 |  |  | 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: [] } | 
 |  |  |     addHomeMenu(remoteMenu); | 
 |  |  |     addUserSettingMenu(remoteMenu); | 
 |  |  |     patchRouteItems(rootMenu, remoteMenu); | 
 |  |  |     console.log(rootMenu); | 
 |  |  |  | 
 |  |  |     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); | 
 |  |  |         } else { | 
 |  |  |             // parent | 
 |  |  |             const newRoute = { | 
 |  |  |                 name: menu.name, | 
 |  |  |                 path: menu.path, | 
 |  |  |                 routes: [], | 
 |  |  |                 children: [], | 
 |  |  |             } | 
 |  |  |             parent.routes.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') | 
 |  |  |     }) | 
 |  |  | 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')
 | 
 |  |  |     })
 | 
 |  |  | } |