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: [] } 
 | 
    addMapMenu(remoteMenu) 
 | 
    addHomeMenu(remoteMenu); 
 | 
    addUserSettingMenu(remoteMenu); 
 | 
    patchRouteItems(rootMenu, remoteMenu); 
 | 
  
 | 
    proLayout.children = proLayout.children.concat(rootMenu.children); 
 | 
    proLayout.routes = proLayout.routes.concat(rootMenu.routes); 
 | 
} 
 | 
  
 | 
function patchRouteItems(parent, children) { 
 | 
    for (const menu of children) { 
 | 
        if (menu.component !== null && menu.component !== undefined) { 
 | 
            // children 
 | 
            let Component; 
 | 
            try { 
 | 
                Component = require(`@/pages${menu.path}/index.jsx`).default 
 | 
            } catch (error) { 
 | 
                console.error('An error has occurred: ', error); 
 | 
            } 
 | 
            if (Component) { 
 | 
                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 addMapMenu(remoteMenu) { 
 | 
    remoteMenu.unshift({ 
 | 
        name: "地图监控", 
 | 
        path: "/map", 
 | 
        component: "/map", 
 | 
        icon: createIcon('HeatMapOutlined') 
 | 
    }) 
 | 
} 
 | 
  
 | 
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') 
 | 
    }) 
 | 
} 
 |