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: , } 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') }) }