# React-admin-vite
**Repository Path**: jiangsihan/react-admin-vite
## Basic Information
- **Project Name**: React-admin-vite
- **Description**: 基于 React 18 + Vite 4 + Ant Design 6 的现代化后台管理系统模板。适用于后台管理 Web 项目的二次开发,帮助开发人员快速搭建后台管理项目。它使用了最新的前端技术栈,内置了 i18n 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件。访问地址:https://jiangyiming.cn/frontend/reactadmin
- **Primary Language**: JavaScript
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: https://jiangyiming.cn/frontend/reactadmin
- **GVP Project**: No
## Statistics
- **Stars**: 40
- **Forks**: 16
- **Created**: 2023-04-26
- **Last Updated**: 2026-01-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: React, vite, Ant-Design
## README
# React-Admin-Vite
基于 React 18 + Vite 4 + Ant Design 6 的现代化后台管理系统模板。
react-admin-vite 适用于后台管理 web 项目的二次开发,帮助开发人员快速搭建后台管理项目。
**请仔细阅读本文档以后再进行使用!**
访问地址:https://jiangyiming.cn/frontend/reactadmin
代码仓库:https://gitee.com/jiangsihan/react-admin-vite
## 🎨 1. 主题配置
本项目采用 `ThemeContext` 进行全局主题状态管理,结合 Ant Design v5+ 的 Design Token 能力,实现了灵活的主题定制方案。
### 主题定制选项
用户可以通过点击右上角的"设置"按钮打开主题配置抽屉,支持以下配置项:
- **整体风格**:
- 亮色菜单风格 (Light)
- 暗色菜单风格 (Dark)
- 暗黑模式 (Real Dark)
- 跟随系统 (Auto)
- **主题色**:提供 8 种预设颜色(拂晓蓝、薄暮、火山、日暮、明青、极光绿、极客蓝、酱紫)。
- **导航模式**:
- 侧边菜单布局 (Broadside)
- 顶部菜单布局 (Top)
- 混合菜单布局 (Left - 侧边栏+顶部栏)
- **内容区域**:
- 顶栏固定
- 内容区域宽度(流式/定宽)
- **其他设置**:
- 色弱模式
- 灰色模式
- 紧凑模式
- 全局圆角设置
### 主题变量配置
主题状态通过 `src/components/ThemeContext.jsx` 管理,并持久化存储在 Cookie 中。主要变量包括:
| 变量名 | 说明 | 默认值 |
|Data | Description | Default |
|---|---|---|
| `isDark` | 是否开启暗黑模式 | `false` |
| `primaryColor` | 主题主色 | `#1890ff` |
| `borderRadius` | 全局圆角 | `6` |
| `navTheme` | 导航栏主题样式 | `light` |
| `layoutMode` | 整体布局模式 | `broadside` |
| `weakOrGray` | 特殊模式(weak/gray) | `''` |
### 代码示例:获取主题状态
```jsx
import { useThemeContext } from "@/components/ThemeContext";
const MyComponent = () => {
const { isDark, primaryColor, updateTheme } = useThemeContext();
return (
当前模式:{isDark ? "暗黑" : "亮色"}
);
};
```
---
## 🛣️ 2. 路由菜单配置
项目支持**本地路由**和**动态路由**两种模式,通过 `public/config/index.js` 中的 `ISROUTER` 参数控制。
### 路由方案
- **本地路由 (`ISROUTER: false`)**:
- 路由定义在 `src/routes/index.jsx`。
- 适合简单的静态展示型项目。
- **动态路由 (`ISROUTER: true`)**:
- 菜单数据由后端接口返回(或模拟接口)。
- 数据存储在 LocalStorage 中 (`ROOT_APP_INFO`)。
- 通过 `src/routes/setRouter.js` 中的 `setmenu` 方法将后端数据转换为 React Router 可用的路由结构。
- **组件映射**:后端返回的 `component` 字符串(如 `"dashboard/analysis"`)会自动映射到 `src/pages/dashboard/analysis/index.jsx`。
### 动态路由数据结构规范 (后端返回格式)参考 src/assets/res.router.json
```json
{
"id": "...",
"name": "菜单名称",
"url": "/path/to/menu",
"component": "component/path",
"redirect": null,
"icon": "IconName",
"isRoute": boolean, // 是否路由菜单
"keepAlive": boolean, // 是否缓存
"hidden": 0/1, // 是否隐藏 (1=隐藏, 0=显示)
"alwaysShow": boolean, // 是否聚合路由
"internalOrExternal": 0/1, // 外部链接 (1=是, 0=否)
"children": [
{
"id": "...",
"name": "子菜单名称",
"url": "/path/to/submenu",
"component": "component/path",
"redirect": null,
"icon": "IconName",
"isRoute": boolean,
"keepAlive": boolean,
"hidden": 0/1,
"alwaysShow": boolean,
"internalOrExternal": 0/1
}
]
...
}
```
#### 返回后处理转为以下格式或静态路由配置(前端可直接使用)src/routes/index.jsx
```json
{
label: "菜单名称",
key: "/dashboard/analysis",
element: lazy(() => import("@/pages/dashboard/analysis")),
icon: ,
disabled: false,
hidden: false,
route: true,
keepAlive: false,
alwaysShow: false,
internalOrExternal: false,
children: [
{
label: "子菜单名称",
key: "/path/to/submenu",
element: lazy(() => import("@/pages/component/path")),
icon: ,
disabled: false,
hidden: false,
route: true,
keepAlive: false,
alwaysShow: false,
internalOrExternal: false,
}
]
},
```
### 权限控制
#### 动态路由模式 (`ISROUTER: true`)
权限控制深度集成在动态路由加载流程中:
1. 用户登录后获取 `menuList`。
2. 前端根据 `menuList` 动态生成路由表。
3. 未在 `menuList` 中的路由将不会被注册,访问会进入 404 或 403 页面。
4. 关于菜单权限在角色授权里动态配置。
#### 静态路由模式 (`ISROUTER: false`)
在 `src/routes/index.jsx` 中通过 `roles` 字段配置菜单/路由的可见性:
```javascript
{
// ... 其他配置
roles: ['admin', 'manager'], // 仅 admin 和 manager 角色可见
}
```
- **不配置 `roles` 或为 `undefined`**: 所有用户可见。
- **配置为 `[]` (空数组)**: 任何角色都不可见(隐藏)。
- **配置为 `['roleA', 'roleB']`**: 仅拥有 `roleA` 或 `roleB` 的用户可见。
---
## 🛠️ 3. 技术栈文档
| 技术 | 版本 | 说明 |
| --------------------- | --------- | ---------------- |
| [**React**](https://react.dev/) | `^18.2.0` | 核心框架 |
| [**Vite**](https://vitejs.dev/) | `^4.4.9` | 极速构建工具 |
| [**Ant Design**](https://ant.design/) | `^6.2.0` | 企业级 UI 组件库 |
| [**@ant-design/icons**](https://ant.design/components/icon) | `^6.1.0` | 图标库 |
| [**@ant-design/charts**](https://charts.ant.design/) | `^2.6.7` | 图表库AntV |
| [**React Router**](https://reactrouter.com/) | `^6.10.0` | 路由管理 |
| [**Redux**](https://redux.js.org/) | `^4.2.1` | 状态管理 |
| [**Axios**](https://axios-http.com/) | `^1.3.6` | HTTP 请求库 |
| [**i18next**](https://www.i18next.com/) | `^25.7.4` | 国际化方案 |
| [**Less**](https://lesscss.org/) | `^4.1.3` | CSS 预处理器 |
| [**moment**](https://momentjs.com/) | `^2.29.4` | 日期处理库 |
| [**react-activation**](https://github.com/CJY0208/react-activation) | `^0.13.4` | 页面组件缓存KeepAlive |
| [**crypto-js**](https://cryptojs.gitbook.io/docs/) | `^4.1.1` | 加密库 |
### 关键集成方案
- **路由懒加载**:使用 `React.lazy` + `import.meta.glob` 实现组件的按需加载。
- **全局状态**:使用 `ThemeContext` 管理 UI 状态,`Redux` 管理业务数据。
- **国际化**:集成 `react-i18next`,支持中英切换。
---
## ⚙️ 4. 配置文件说明
全局配置文件位于 `public/config/index.js`,该文件在运行时加载,修改后无需重新打包即可生效。
### 配置参数解析
```javascript
window.envConfig = {
// 环境地址标识
// 0: 开发环境 (使用本地代理)
// 1: 测试环境
// 2: 生产环境
key: 2,
// 是否开启代理 (仅在 key=0 时有效)
// true: 使用 /api/ 前缀进行代理
// false: 直接请求 noProxyUrl
proxy: true,
// 路由模式开关
// true: 请求后端获取动态菜单
// false: 使用 src/routes/index.jsx 中的本地配置
ISROUTER: true,
// 系统显示的名称
ROOT_APP_NAME: "React-admin-vite",
// 本地存储 Key (防止多项目部署在同一域名下缓存冲突)
ROOT_APP_INFO: "React-Admin-Info",
// API 基础配置 (通常在下方的 switch 语句中根据 key 自动设置)
API_BASE_URL: "",
API_BASE_PORT: "",
API_BASE_TIMEOUT: 10, // 请求超时时间 (秒)
};
```
### 使用场景示例
**场景 1:本地开发调试接口**
```javascript
// public/config/index.js
window.envConfig = {
key: 0,
proxy: true, // 开启代理,配合 vite.config.js 中的 proxy 配置
// ...
};
```
**场景 2:部署到生产环境**
```javascript
// public/config/index.js
window.envConfig = {
key: 2,
// ...
};
// 底部 switch 自动匹配:
// window.envConfig['API_BASE_URL'] = 'https://jiangyiming.cn/'
```
---
## 👨💻 5. 作者信息
- **作者**:江一铭
- **个人网站**:[https://jiangyiming.cn/](https://jiangyiming.cn/)
- **联系邮箱**:jianghaoluck@163.com
- **更新时间**:2026-01-15
---
> 文档最后更新时间:2026-01-15