Files
invest-mind-store/apps/web/src/layouts/menuConfig.tsx
2026-01-12 17:38:55 +08:00

187 lines
4.8 KiB
TypeScript

import {
BarChartOutlined,
FileTextOutlined,
EditOutlined,
SettingOutlined,
DashboardOutlined,
BankOutlined,
UserOutlined,
StockOutlined,
LineChartOutlined,
} from '@ant-design/icons';
import type { ReactNode } from 'react';
/**
* 路由菜单配置项
*/
export interface RouteMenuConfig {
/** 路由路径 */
path: string;
/** 菜单键值(通常与 path 相同) */
key: string;
/** 菜单图标 */
icon: ReactNode;
/** 菜单标签 */
label: string;
/** 页面标题 */
title: string;
/** 页面副标题 */
subtitle: string;
/** 菜单分组:'main' 主要功能,'admin' 管理员功能 */
group: 'main' | 'admin';
/** 是否需要管理员权限 */
requireAdmin?: boolean;
}
/**
* 路由菜单配置列表
*/
export const routeMenuConfig: RouteMenuConfig[] = [
{
path: '/assets',
key: '/assets',
icon: <BarChartOutlined />,
label: '资产账户',
title: '资产账户',
subtitle: '买股票就是买公司',
group: 'main',
},
{
path: '/plans',
key: '/plans',
icon: <FileTextOutlined />,
label: '交易计划',
title: '交易计划',
subtitle: '计划你的交易,交易你的计划',
group: 'main',
},
{
path: '/review',
key: '/review',
icon: <EditOutlined />,
label: '投资复盘',
title: '投资复盘',
subtitle: '回顾过去是为了更好应对将来',
group: 'main',
},
{
path: '/user-info',
key: '/user-info',
icon: <UserOutlined />,
label: '个人资料',
title: '个人资料',
subtitle: '查看和编辑个人信息',
group: 'main',
},
{
path: '/user',
key: '/user',
icon: <UserOutlined />,
label: '用户管理',
title: '用户管理',
subtitle: '管理用户信息',
group: 'admin',
requireAdmin: true,
},
{
path: '/broker',
key: '/broker',
icon: <BankOutlined />,
label: '券商管理',
title: '券商管理',
subtitle: '管理券商信息',
group: 'admin',
requireAdmin: true,
},
{
path: '/stock-info',
key: '/stock-info',
icon: <StockOutlined />,
label: '股票信息',
title: '股票信息',
subtitle: '管理股票基本信息',
group: 'admin',
requireAdmin: true,
},
{
path: '/stock-daily-price',
key: '/stock-daily-price',
icon: <LineChartOutlined />,
label: '股票价格',
title: '股票价格',
subtitle: '查看股票每日价格数据',
group: 'admin',
requireAdmin: true,
},
{
path: '/seo',
key: '/seo',
icon: <SettingOutlined />,
label: 'SEO配置',
title: 'SEO配置',
subtitle: '优化搜索引擎可见性',
group: 'admin',
requireAdmin: true,
},
{
path: '/analytics',
key: '/analytics',
icon: <DashboardOutlined />,
label: '数据统计',
title: '数据统计',
subtitle: '了解用户行为与系统数据',
group: 'admin',
requireAdmin: true,
},
];
/**
* 根据路径获取页面标题信息
*/
export const getPageInfo = (path: string): { title: string; subtitle: string } => {
// 处理根路径
if (path === '/' || path === '') {
const defaultRoute = routeMenuConfig.find((item) => item.path === '/assets');
return defaultRoute
? { title: defaultRoute.title, subtitle: defaultRoute.subtitle }
: { title: '资产账户', subtitle: '买股票就是买公司' };
}
const config = routeMenuConfig.find((item) => item.path === path);
return config
? { title: config.title, subtitle: config.subtitle }
: { title: '资产账户', subtitle: '买股票就是买公司' };
};
/**
* 获取主要功能菜单项
*/
export const getMainMenuItems = () => {
return routeMenuConfig.filter((item) => item.group === 'main');
};
/**
* 获取管理员功能菜单项
*/
export const getAdminMenuItems = () => {
return routeMenuConfig.filter((item) => item.group === 'admin' && item.requireAdmin);
};
/**
* 页面标题映射(用于向后兼容)
*/
export const pageTitles: Record<string, { title: string; subtitle: string }> = (() => {
const titles: Record<string, { title: string; subtitle: string }> = {
'/': getPageInfo('/assets'),
};
routeMenuConfig.forEach((config) => {
titles[config.path] = {
title: config.title,
subtitle: config.subtitle,
};
});
return titles;
})();