# react-template
**Repository Path**: qchen007/react-template
## Basic Information
- **Project Name**: react-template
- **Description**: vibing code react template
- **Primary Language**: TypeScript
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-06
- **Last Updated**: 2026-04-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# React Admin - 后台管理系统
基于 React 19 + TypeScript + Ant Design 6.x 的后台管理系统,支持动态路由、权限控制、多标签页和国际化。
## 快速开始
```bash
npm install
npm run dev
```
## 功能特性
- **动态路由** - 基于后端菜单数据自动生成路由
- **权限控制** - 角色 + 权限点双重控制
- **多标签页** - 浏览器风格的多标签导航
- **国际化** - 中英文切换,i18n + Ant Design 组件本地化
## 技术栈
| 分类 | 技术 |
|------|------|
| 框架 | React 19 + TypeScript |
| 构建 | Vite |
| 路由 | React Router v7 |
| 状态 | Zustand (持久化) |
| UI | Ant Design 6.x |
| HTTP | Axios 拦截器封装 |
| i18n | react-i18next |
## 项目结构
```
src/
├── api/ # API 请求函数
├── components/ # 公共组件 (PrivateRoute, Permission, ErrorBoundary)
├── hooks/ # useDynamicRoutes, useHasPermission
├── i18n/ # i18n 配置
├── layout/ # MainLayout, Sidebar, HeaderBar, TabsNav
├── locales/ # zh-CN/, en-US/ 语言文件
├── mock/ # vite-plugin-mock 模拟接口
├── pages/ # 页面组件
├── router/ # 路由配置入口
├── store/ # Zustand store
├── styles/ # Less 全局样式
├── types/ # TypeScript 类型定义
└── utils/ # request, permission, menu 工具函数
```
## 登录账号
| 角色 | 用户名 | 密码 | 说明 |
|------|--------|------|------|
| 管理员 | admin | 123456 | 全部菜单和权限 |
| 普通用户 | user | 123456 | 受限访问 |
## 架构说明
### 动态路由
登录后调用 `/api/menus` 获取菜单树,前端根据 `component` 字段自动发现页面组件:
```
"system/user" → src/pages/system/user/index.tsx
```
### 状态管理
Zustand store 持久化到 localStorage:
- `user` - 用户信息
- `token` - 认证令牌
- `menus` - 菜单树
- `permissions` - 权限列表
- `locale` - 当前语言
- `tabs` / `collapsed` - UI 状态
### 权限控制
**路由级**:菜单配置 `meta.permissions`,无权限跳转 `/403`
**按钮级**:
```tsx
// Hook 方式
const canEdit = useHasPermission('user:edit')
// 组件方式
```
Admin 角色绕过所有权限检查。
### 请求封装
`src/utils/request.ts` 封装 axios 实例:
- 自动注入 `Authorization: Bearer ` 请求头
- 响应格式:`{ code: 200, data, message }`
- 401 跳转登录,403/500 显示错误提示
## Mock 接口
```
POST /api/login # 登录
GET /api/user/info # 用户信息
GET /api/menus # 菜单树(按角色返回)
GET /api/users # 用户列表
GET /api/roles # 角色列表
GET /api/logs # 日志查询
```
## 新增页面
1. 创建 `src/pages///index.tsx`
2. 在菜单管理中添加配置,设置 `component` 字段
3. 设置 `meta.permissions` 控制访问权限
4. 页面标题使用 `meta.titleKey` 指向国际化 key
## 添加 API
```typescript
// src/api/user.ts
import request from '@/utils/request'
export const getUserList = (params?: object) => {
return request.get('/api/users', { params })
}
```
## 国际化
语言文件位于 `src/locales/`:
```
src/locales/
├── zh-CN/common.json
└── en-US/common.json
```
Ant Design 组件本地化通过 `ConfigProvider` 的 `locale` 属性配置。
## License
MIT