// src/routes/index.js // 路由渲染器 - 根据配置自动生成 Routes import React from 'react'; import { Routes, Route, Navigate } from 'react-router-dom'; import { Box, useColorMode } from '@chakra-ui/react'; // 路由配置 import { routeConfig, PROTECTION_MODES, getMainLayoutRoutes, getStandaloneRoutes } from './routeConfig'; // 布局组件 (非懒加载) import Auth from '../layouts/Auth'; import HomeLayout from '../layouts/Home'; import MainLayout from '../layouts/MainLayout'; // 保护路由组件 import ProtectedRoute from '../components/ProtectedRoute'; import ProtectedRouteRedirect from '../components/ProtectedRouteRedirect'; /** * 根据保护模式包装组件 */ function wrapWithProtection(Component, protection) { if (protection === PROTECTION_MODES.MODAL) { return ( ); } if (protection === PROTECTION_MODES.REDIRECT) { return ( ); } // PUBLIC - 无保护 return ; } /** * 渲染单个路由 */ function renderRoute(routeItem, index) { const { path, component, protection } = routeItem; // 处理特殊组件(非懒加载) let Component; if (component === 'Auth') { Component = Auth; } else if (component === 'HomeLayout') { Component = HomeLayout; } else { Component = component; } return ( ); } /** * AppRoutes - 应用路由组件 * 替代 App.js 中的 Routes 部分 */ export function AppRoutes() { const { colorMode } = useColorMode(); // 分离路由 const mainLayoutRoutes = getMainLayoutRoutes(); const standaloneRoutes = getStandaloneRoutes(); return ( {/* 带导航栏的主布局 - 所有需要导航栏的页面都在这里 */} }> {mainLayoutRoutes.map((route, index) => renderRoute(route, index))} {/* 不使用布局的路由 */} {standaloneRoutes.map((route, index) => renderRoute(route, index))} {/* 默认重定向到首页 */} } /> {/* 404 页面 */} } /> ); } export default AppRoutes;