# react-admin-side **Repository Path**: GyYuMine/react-admin-side ## Basic Information - **Project Name**: react-admin-side - **Description**: React 18 TypeScript 5.x类型安全 Ant Design 5.x 企业级 UI 组件库 Vite 5.x 下一代前端构建工具 SCSS CSS 预处理器 React Router DOM v6 路由管理 Zustand 轻量级状态管理 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-08 - **Last Updated**: 2026-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # React + TypeScript + Ant Design 后台管理系统 一个使用最新技术栈构建的现代化后台管理系统,采用模块化架构设计,支持动态路由生成、组件自动导入、SVG图标管理等高级功能。 ## 🚀 技术栈 - **React 19** - 最新版本 - **TypeScript 5.9** - 类型安全 - **Ant Design 6** - 企业级 UI 组件库 - **Vite 8** - 下一代前端构建工具 - **SCSS** - CSS 预处理器 - **React Router DOM v6** - 路由管理 - **Zustand 5** - 轻量级状态管理 - **SVG Icons** - 基于 vite-plugin-svg-icons 的图标方案 ## ✨ 功能特性 ### 核心功能 - ✅ 完整的登录认证系统(JWT Token) - ✅ 路由守卫与权限控制 - ✅ 全局状态管理(Zustand + localStorage 持久化) - ✅ 响应式布局设计 - ✅ 侧边栏折叠/展开 - ✅ 多级嵌套菜单支持(最高支持 5 级菜单) ### 高级特性 - 🎯 **模块化架构** - 支持按业务模块独立开发 - 🔄 **动态路由生成** - 基于环境变量按需加载模块路由 - 📦 **组件自动导入** - 无需手动 import,自动注册全局组件 - 🎨 **SVG 图标系统** - 支持图标缓存、按需加载 - 🔥 **热更新优化** - 组件变化自动更新类型声明 - ⚡ **懒加载** - 路由级代码分割,提升首屏性能 ## 📦 快速开始 ### 环境要求 - Node.js >= 18 - npm >= 9 ### 安装依赖 ```bash npm install ``` ### 启动开发服务器 #### 1. 启动完整应用(所有模块) ```bash npm run dev ``` #### 2. 仅启动指定模块(开发优化) ```bash # 仅启动 UserManage 模块 npm run dev:UserManage # 仅启动 test 模块 npm run dev:test ``` 访问 http://localhost:8080/ ### 生产环境打包 ```bash # 打包所有模块 npm run build # 仅打包 test 模块 npm run build:test ``` ### 预览生产构建 ```bash npm run preview ``` ### 代码检查 ```bash npm run lint ``` ## 🔐 默认登录账号 - 用户名:`1111` - 密码:任意(当前为演示模式,使用硬编码 token) > ⚠️ 注意:当前版本为演示模式,实际项目需对接后端 API 实现真实认证 ## 📁 项目结构 ``` react-admin-side/ ├── public/ # 静态资源 │ └── favicon.svg ├── plugins/ # Vite 插件 │ ├── auto-import.ts # 组件自动导入配置 │ └── dynamic-route-generator.ts # 动态路由生成插件 ├── src/ │ ├── assets/ # 全局静态资源 │ │ ├── icons/ # 全局 SVG 图标 │ │ ├── images/ # 全局图片资源 │ │ └── fonts/ # 全局字体 │ ├── components/ # 全局通用组件 │ │ ├── MyIcon/ # SVG 图标组件 │ │ ├── MyCard/ # 卡片组件 │ │ └── auto-imports.d.ts # 自动生成的类型声明 │ ├── module/ # 业务模块目录(核心特色) │ │ ├── UserManage/ # 用户管理模块 │ │ │ ├── api/ # 模块 API │ │ │ ├── assets/ # 模块专属资源 │ │ │ ├── router/ # 模块路由配置 │ │ │ └── views/ # 模块页面 │ │ └── test/ # 测试模块 │ ├── pages/ # 全局页面 │ │ ├── LoginPage.tsx # 登录页 │ │ ├── BasicLayout/ # 基础布局组件 │ │ ├── UserManagementPage.tsx │ │ ├── SettingsPage.tsx │ │ └── IconExamplePage.tsx │ ├── router/ # 路由配置 │ │ ├── routes.tsx # 全局路由定义 │ │ ├── AppRouter.tsx # 路由入口组件 │ │ ├── ProtectedRoute.tsx # 路由守卫 │ │ └── moduleRoutes.tsx # 动态生成的模块路由(自动生成) │ ├── store/ # 状态管理 │ │ └── authStore.ts # 认证状态(Zustand) │ ├── styles/ # 全局样式 │ │ ├── index.scss # 样式入口 │ │ ├── variables.scss # SCSS 变量 │ │ └── antd-overrides.scss │ ├── typings/ # TypeScript 类型定义 │ │ ├── router.d.ts # 路由类型 │ │ ├── auto-imports-antd.d.ts │ │ └── auto-imports-react.d.ts │ ├── App.tsx # 应用根组件 │ └── main.tsx # 应用入口 ├── dist/ # 构建输出目录 ├── vite.config.ts # Vite 配置 ├── tsconfig.json # TypeScript 配置 └── package.json ``` ### 🎯 模块化架构说明 项目采用**全局 + 模块**的混合架构: - **全局部分** (`src/pages`, `src/components`):所有模块共享的页面和组件 - **模块部分** (`src/module/`):按业务划分的独立模块,每个模块包含自己的路由、页面、API、资源 #### 模块开发流程 1. 在 `src/module/` 下创建新模块目录 2. 模块标准结构: ``` ModuleName/ ├── api/ # 该模块的 API 请求 ├── assets/ # 该模块专属图标、图片 ├── router/ │ └── routes.tsx # 模块路由配置 └── views/ # 模块页面组件 ``` 3. 在 `routes.tsx` 中配置路由,系统会自动加载 #### 模块启动优化 开发时可通过环境变量按需加载模块,提升开发速度: ```bash # 仅加载 UserManage 模块 MODULE_NAME=UserManage npm run dev # 或 npm run dev:UserManage ``` ## 🗺️ 路由说明 ### 路由配置结构 路由采用集中式配置管理,支持以下特性: - 懒加载(`React.lazy`) - 路由守卫(`protected: true`) - 菜单自动生成(`menuItem` 配置) - 多级嵌套(支持 5 级菜单) - 隐藏路由(`hidden: true`) - 重定向(`redirect`) ### 路由配置示例 ```typescript { path: "users", name: "用户管理", element: , protected: true, // 需要登录 menuItem: { // 菜单配置 key: "users", icon: , label: "用户管理", }, } ``` ### 核心路由 | 路径 | 说明 | 权限 | |------|------|------| | `/` | 重定向到登录页 | 公开 | | `/login` | 登录页面 | 公开 | | `/home` | 后台布局容器 | 需登录 | | `/home/users` | 用户管理 | 需登录 | | `/home/icon-example` | 图标示例 | 需登录 | | `/home/settings/basic/profile/avatar/preview` | 五级菜单示例 | 需登录 | | `/home/DashboardPage` | 模块路由示例 | 需登录 | | `*` | 404 页面 | 公开 | ## 🎨 布局说明 ### 经典三栏布局 ``` ┌─────────────────────────────────────────┐ │ Header(顶部导航栏) │ │ [折叠按钮] [用户信息 消息] │ ├──────────┬──────────────────────────────┤ │ │ │ │ Sider │ Content │ │ (侧边栏) │ (内容区域,可滚动) │ │ │ │ │ - Logo │ │ │ - 菜单 │ │ │ │ │ └──────────┴──────────────────────────────┘ ``` ### 布局特性 - **Header**:固定高度,包含折叠按钮、用户信息、消息通知、退出登录 - **Sider**:可折叠,深色主题,支持多级菜单,自动高亮当前路由 - **Content**:仅内容区域滚动,通过 `` 渲染子路由 ### 菜单系统 - 自动从路由配置生成(基于 `menuItem` 字段) - 支持递归多级嵌套 - 自动匹配当前路由高亮 - 点击菜单自动导航 ## 🔧 核心插件说明 ### 1. 动态路由生成插件 (dynamic-route-generator) **功能**:根据环境变量 `MODULE_NAME` 动态生成模块路由文件 **工作原理**: 1. 扫描 `src/module/` 目录下所有模块 2. 根据 `MODULE_NAME` 环境变量过滤模块 3. 自动生成 `src/router/moduleRoutes.tsx` 4. 监听文件变化,自动重新生成(带防抖) **使用场景**: - 开发时按需加载模块,提升构建速度 - 生产环境按模块打包,减小体积 ### 2. 组件自动导入插件 (auto-import) **功能**:自动扫描 `src/components/` 目录,全局注册组件 **工作原理**: 1. 扫描 `components/` 下所有文件夹 2. 查找 `index.tsx` 或同名 `.tsx` 文件 3. 自动生成类型声明文件 `auto-imports.d.ts` 4. 监听文件变化,热更新类型声明 **使用方式**: ```tsx // 无需 import,直接使用 内容 ``` ### 3. Ant Design & React 自动导入 通过 `unplugin-auto-import` 实现: - React Hooks 自动导入(`useState`, `useEffect` 等) - React Router Hooks 自动导入(`useNavigate`, `useLocation` 等) - Ant Design 组件自动导入(`Button`, `Modal` 等) - Zustand Store 自动导入(`useAuthStore`) ## 💡 开发指南 ### 添加新页面(全局) 1. 在 `src/pages/` 创建页面组件 2. 在 `src/router/routes.tsx` 中添加路由配置 3. 配置 `menuItem` 即可自动显示在菜单中 ### 创建新业务模块 1. 在 `src/module/` 下创建模块目录: ```bash mkdir -p src/module/ModuleName/{api,assets/icons,router,views} ``` 2. 创建路由配置文件 `src/module/ModuleName/router/routes.tsx`: ```typescript import React from "react" import type { RouteConfig } from "@/typings/router" import { EyeOutlined } from "@ant-design/icons" export const routes: RouteConfig[] = [ { path: "/MyPage", name: "我的页面", element: React.createElement(React.lazy(() => import("../views/MyPage"))), menuItem: { key: "MyPage", icon: , label: "我的页面", }, }, ] ``` 3. 创建页面组件 `src/module/ModuleName/views/MyPage.tsx` 4. 启动模块: ```bash npm run dev:ModuleName ``` ### 添加全局组件 1. 在 `src/components/` 下创建组件目录: ``` MyComponent/ ├── index.tsx # 组件实现 └── index.scss # 组件样式(可选) ``` 2. 组件会自动注册,无需手动 import 3. 在任意页面使用: ```tsx ``` ### 添加 SVG 图标 1. 将 SVG 文件放入 `src/assets/icons/`(全局)或 `src/module/ModuleName/assets/icons/`(模块专属) 2. 使用 `MyIcon` 组件: ```tsx ``` > 注意:`name` 为文件名(不含 `.svg`),路径分隔符会自动转换为 `-` ## 🛠️ 开发建议 ### 文件命名规范 - 组件文件:PascalCase(如 `LoginPage.tsx`) - 样式文件:与组件同名(如 `LoginPage.scss`) - 工具文件:camelCase(如 `authStore.ts`) - 模块目录:PascalCase(如 `UserManage`) ### 目录组织原则 - **按功能模块组织**:全局页面、模块页面分离 - **组件与样式同目录**:TSX 和 SCSS 放在同一目录 - **模块独立性**:每个模块包含完整的路由、页面、API、资源 ### 代码风格 - 使用 TypeScript 严格模式 - 遵循 React Hooks 最佳实践 - 使用 ESLint 统一代码格式 - 组件使用函数式组件 + TypeScript 类型定义 ### 性能优化 - 路由级懒加载(`React.lazy`) - 按需加载模块(`MODULE_NAME` 环境变量) - SVG 图标缓存(`vite-plugin-svg-icons`) - 构建产物按类型分类输出(JS/CSS/Images/Fonts) ## 📝 License MIT ## 👨‍💻 作者 - **GyYu** - tj_ygy@163.com ## 📅 创建日期 2026-04-03