feat: 创建声明式路由配置系统'

This commit is contained in:
zdl
2025-10-30 14:37:20 +08:00
parent d5881462d2
commit b29c37149a
3 changed files with 335 additions and 0 deletions

190
src/routes/routeConfig.js Normal file
View File

@@ -0,0 +1,190 @@
// src/routes/routeConfig.js
// 声明式路由配置
import { lazyComponents } from './lazy-components';
/**
* 路由保护模式
* - 'modal': 使用 ProtectedRoute (弹窗模式登录)
* - 'redirect': 使用 ProtectedRouteRedirect (跳转模式登录)
* - 'public': 公开访问,无需登录
*/
export const PROTECTION_MODES = {
MODAL: 'modal',
REDIRECT: 'redirect',
PUBLIC: 'public',
};
/**
* 路由配置
* 每个路由对象包含:
* - path: 路由路径
* - component: 组件(从 lazyComponents 引用)
* - protection: 保护模式 (modal/redirect/public)
* - layout: 布局类型 (main/auth/none)
* - meta: 路由元数据(可选,用于面包屑、标题等)
*/
export const routeConfig = [
// ==================== 首页 ====================
{
path: 'home/*',
component: 'HomeLayout', // 非懒加载,直接在 App.js 导入
protection: PROTECTION_MODES.PUBLIC,
layout: 'main',
meta: {
title: '首页',
description: '价值前沿首页'
}
},
// ==================== 社区/内容模块 ====================
{
path: 'community',
component: lazyComponents.Community,
protection: PROTECTION_MODES.MODAL,
layout: 'main',
meta: {
title: '社区',
description: '投资社区交流'
}
},
{
path: 'concepts',
component: lazyComponents.ConceptCenter,
protection: PROTECTION_MODES.MODAL,
layout: 'main',
meta: {
title: '概念中心',
description: '热门概念追踪'
}
},
{
path: 'stocks',
component: lazyComponents.StockOverview,
protection: PROTECTION_MODES.MODAL,
layout: 'main',
meta: {
title: '股票概览',
description: '全市场股票概览'
}
},
{
path: 'limit-analyse',
component: lazyComponents.LimitAnalyse,
protection: PROTECTION_MODES.MODAL,
layout: 'main',
meta: {
title: '涨停分析',
description: '涨停板数据分析'
}
},
// ==================== 交易模块 ====================
{
path: 'trading-simulation',
component: lazyComponents.TradingSimulation,
protection: PROTECTION_MODES.MODAL,
layout: 'main',
meta: {
title: '模拟交易',
description: '模拟盘交易系统'
}
},
// ==================== 事件模块 ====================
{
path: 'event-detail/:eventId',
component: lazyComponents.EventDetail,
protection: PROTECTION_MODES.REDIRECT,
layout: 'main',
meta: {
title: '事件详情',
description: '事件详细信息'
}
},
// ==================== 公司相关模块 ====================
{
path: 'forecast-report',
component: lazyComponents.ForecastReport,
protection: PROTECTION_MODES.REDIRECT,
layout: 'main',
meta: {
title: '财报预测',
description: '上市公司财报预测'
}
},
{
path: 'Financial',
component: lazyComponents.FinancialPanorama,
protection: PROTECTION_MODES.MODAL,
layout: 'main',
meta: {
title: '财务全景',
description: '公司财务全景分析'
}
},
{
path: 'company',
component: lazyComponents.CompanyIndex,
protection: PROTECTION_MODES.MODAL,
layout: 'main',
meta: {
title: '公司',
description: '上市公司信息'
}
},
{
path: 'company/:code',
component: lazyComponents.CompanyIndex,
protection: PROTECTION_MODES.REDIRECT,
layout: 'main',
meta: {
title: '公司详情',
description: '公司详细信息'
}
},
{
path: 'market-data',
component: lazyComponents.MarketDataView,
protection: PROTECTION_MODES.MODAL,
layout: 'main',
meta: {
title: '市场数据',
description: '实时市场数据'
}
},
// ==================== 认证模块 ====================
{
path: 'auth/*',
component: 'Auth', // 非懒加载,直接在 App.js 导入
protection: PROTECTION_MODES.PUBLIC,
layout: 'none',
meta: {
title: '登录/注册',
description: '用户认证'
}
},
];
/**
* 获取所有需要 MainLayout 的路由
*/
export function getMainLayoutRoutes() {
return routeConfig.filter(route => route.layout === 'main');
}
/**
* 获取不需要布局的路由
*/
export function getStandaloneRoutes() {
return routeConfig.filter(route => route.layout === 'none');
}
/**
* 根据路径查找路由配置
*/
export function findRouteByPath(path) {
return routeConfig.find(route => route.path === path);
}