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