safety-eval-service-frontend/src/pages/Container/Layout/menuConfig.js

193 lines
4.8 KiB
JavaScript

import React from "react";
import {
DashboardOutlined,
FileProtectOutlined,
TeamOutlined,
BankOutlined,
UserSwitchOutlined,
IdcardOutlined,
SafetyCertificateOutlined,
ToolOutlined,
UserOutlined,
BarChartOutlined,
PieChartOutlined,
ExperimentOutlined,
ShopOutlined,
ApartmentOutlined,
SwapOutlined,
LogoutOutlined,
FileTextOutlined,
KeyOutlined,
FormOutlined,
CheckCircleOutlined,
SyncOutlined,
} from "@ant-design/icons";
const menuItems = [
{
key: "/safety-eva/container/Supervision",
label: "监管端",
icon: <DashboardOutlined />,
children: [
{
key: "/safety-eva/container/Supervision/BasicInfo",
label: "基础信息管理",
icon: <FileTextOutlined />,
children: [
{
key: "/safety-eva/container/Supervision/BasicInfo/OrgAccount",
label: "机构账号管理",
icon: <KeyOutlined />,
},
{
key: "/safety-eva/container/Supervision/BasicInfo/RegisteredOrg/List",
label: "已备案机构管理",
icon: <FileProtectOutlined />,
},
{
key: "/safety-eva/container/Supervision/BasicInfo/EvaluatorInfo",
label: "评价师信息管理",
icon: <UserOutlined />,
},
{
key: "/safety-eva/container/Supervision/BasicInfo/EnterprisePortrait",
label: "企业画像管理",
icon: <BarChartOutlined />,
},
],
},
]
},
{
key: "/safety-eva/container/EnterpriseInfo",
label: "企业信息管理",
icon: <ShopOutlined />,
children: [
{
key: "/safety-eva/container/EnterpriseInfo/OrgInfo",
label: "机构信息管理",
icon: <BankOutlined />,
},
{
key: "/safety-eva/container/EnterpriseInfo/QualificationCert",
label: "资质信息管理",
icon: <SafetyCertificateOutlined />,
},
{
key: "/safety-eva/container/EnterpriseInfo/PersonnelChange",
label: "人员变更管理",
icon: <SwapOutlined />,
},
{
key: "/safety-eva/container/EnterpriseInfo/PersonnelInfo/List",
label: "人员信息管理",
icon: <TeamOutlined />,
},
{
key: "/safety-eva/container/EnterpriseInfo/DepartmentPosition",
label: "部门岗位管理",
icon: <ApartmentOutlined />,
},
{
key: "/safety-eva/container/EnterpriseInfo/ResignationApply",
label: "人员离职申请",
icon: <LogoutOutlined />,
},
{
key: "/safety-eva/container/EnterpriseInfo/EquipInfo",
label: "装备信息管理",
icon: <ToolOutlined />,
},
],
},
{
key: "/safety-eva/container/qualApplication",
label: "资质申请管理",
icon: <FormOutlined />,
children: [
{
key: "/safety-eva/container/qualApplication/filingApplication/list",
label: "资质备案申请",
icon: <FormOutlined />,
},
{
key: "/safety-eva/container/qualApplication/filedManage/list",
label: "已备案资质管理",
icon: <CheckCircleOutlined />,
},
{
key: "/safety-eva/container/qualApplication/filingChange/list",
label: "备案变更管理",
icon: <SyncOutlined />,
},
],
},
];
export default menuItems;
/** 扁平化菜单 */
export function flattenMenu(items) {
const result = [];
function walk(list) {
for (const item of list) {
result.push(item);
if (item.children) walk(item.children);
}
}
walk(items);
return result;
}
/**
* 根据路径查找面包屑路径
* 返回从根到叶子节点的菜单项数组
*/
export function findMenuPath(path) {
function search(items, ancestors) {
for (const item of items) {
const current = [...ancestors, item];
if (item.key === path) {
return current;
}
if (item.children) {
const found = search(item.children, current);
if (found) return found;
}
}
return null;
}
return search(menuItems, []) || [];
}
/**
* 根据路径获取页面标签名
*/
export function getPageLabel(path) {
const flat = flattenMenu(menuItems);
const item = flat.find((m) => m.key === path);
return item?.label || path.split("/").filter(Boolean).pop() || "未命名页面";
}
/**
* 根据路径获取默认展开的菜单项
*/
export function getOpenKeys(path) {
const breadcrumb = findMenuPath(path);
return breadcrumb.slice(0, -1).map((i) => i.key);
}
/**
* 根据路径获取选中的菜单项
*/
export function getSelectedKeys(path) {
const allPaths = flattenMenu(menuItems).map((m) => m.key);
let match = "";
for (const p of allPaths) {
if (path.startsWith(p) && p.length > match.length) {
match = p;
}
}
return match ? [match] : [];
}