# react+hooks+ts+vite模版 **Repository Path**: chen1142399899/react-hooks-ts-vite-template ## Basic Information - **Project Name**: react+hooks+ts+vite模版 - **Description**: react18+vite+ts+antd模版 拒绝花里胡哨 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-07-04 - **Last Updated**: 2026-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # React + TypeScript + Vite 企业级管理系统模板 一个基于 React 18 + TypeScript + Vite + Ant Design 5 的现代化企业级管理系统模板,包含完整的权限管理、路由守卫、状态管理等企业级功能。 ## ✨ 核心特性 - 🚀 **现代化技术栈**:React 18 + TypeScript + Vite - 🎨 **UI 框架**:Ant Design 5.16.1,开箱即用的高质量组件 - 🔐 **权限管理**:基于路由和菜单的权限控制系统,支持角色和权限双重验证 - 📦 **状态管理**:Redux Toolkit,现代化的状态管理方案 - 🛣️ **路由管理**:React Router v6 + RouterProvider,支持懒加载和权限拦截 - 🎯 **TypeScript**:完整的类型定义,提供良好的开发体验 - 📱 **响应式设计**:支持移动端适配 - 🎨 **样式方案**:SCSS + CSS Modules,支持主题定制 - 🔧 **代码分割**:路由懒加载,优化首屏加载速度 ## 📦 使用的插件和依赖 ### 核心依赖 | 包名 | 版本 | 说明 | |------|------|------| | react | ^18.2.0 | React 核心库 | | react-dom | ^18.2.0 | React DOM 渲染库 | | react-router-dom | ^6.22.3 | React 路由库 | | @reduxjs/toolkit | ^2.2.3 | Redux 工具包 | | react-redux | ^9.1.1 | React Redux 绑定 | | antd | ^5.16.1 | Ant Design UI 组件库 | | @ant-design/icons | ^5.3.6 | Ant Design 图标库 | | axios | ^1.6.8 | HTTP 请求库 | | sass | ^1.74.1 | SCSS 预处理器 | ### 开发依赖 | 包名 | 版本 | 说明 | |------|------|------| | vite | ^5.2.0 | 构建工具 | | @vitejs/plugin-react-swc | ^3.5.0 | Vite React 插件(SWC 编译) | | vite-plugin-imp | ^2.4.0 | Ant Design 按需加载插件 | | typescript | ^5.2.2 | TypeScript 编译器 | | @typescript-eslint/eslint-plugin | ^7.2.0 | TypeScript ESLint 插件 | | @typescript-eslint/parser | ^7.2.0 | TypeScript ESLint 解析器 | | eslint | ^8.57.0 | 代码检查工具 | | eslint-plugin-react-hooks | ^4.6.0 | React Hooks ESLint 插件 | | eslint-plugin-react-refresh | ^0.4.6 | React Refresh ESLint 插件 | ## 📁 项目结构 ``` react-hooks-ts-vite-template-master/ ├── public/ # 静态资源目录 ├── src/ │ ├── assets/ # 资源文件 │ │ ├── style/ # 全局样式 │ │ │ ├── variables.scss # SCSS 变量 │ │ │ └── main.scss # 全局样式 │ │ └── react.svg # SVG 图标 │ ├── layout/ # 布局组件 │ │ ├── index.tsx # 主布局组件 │ │ ├── index.scss # 布局样式 │ │ ├── breadcrumb/ # 面包屑导航 │ │ │ ├── index.tsx │ │ │ └── index.scss │ │ └── selectNav/ # 用户下拉菜单 │ │ ├── index.tsx │ │ └── index.module.scss │ ├── pages/ # 页面组件 │ │ ├── dashboard/ # 仪表盘 │ │ ├── login/ # 登录页 │ │ ├── system/ # 系统管理 │ │ │ ├── user/ # 用户管理 │ │ │ ├── role/ # 角色管理 │ │ │ └── settings/ # 系统设置 │ │ ├── commonUse/ # 常用功能 │ │ ├── 404/ # 404 页面 │ │ └── ... │ ├── router/ # 路由配置 │ │ ├── index.tsx # 路由导出 │ │ ├── config.tsx # 路由配置 │ │ ├── createRouter.tsx # 创建路由实例 │ │ ├── loader.tsx # 路由加载器(权限检查) │ │ ├── components.tsx # 路由组件(Loading、withSuspense) │ │ ├── types.ts # 路由类型定义 │ │ ├── utils.ts # 路由工具函数 │ │ ├── exports.ts # 路由导出(避免 Fast Refresh 警告) │ │ ├── guard.tsx # 路由守卫(已废弃,使用 loader.tsx) │ │ └── README.md # 路由模块文档 │ ├── store/ # Redux 状态管理 │ │ ├── index.ts # Store 配置 │ │ ├── modules/ # 状态模块 │ │ │ ├── auth.ts # 认证模块 │ │ │ ├── router.ts # 路由状态模块 │ │ │ └── counterSlice.ts # 示例模块 │ │ └── reducers/ # Reducer 配置 │ │ └── index.ts │ ├── utils/ # 工具函数 │ │ ├── request.ts # HTTP 请求封装 │ │ ├── config.ts # 配置文件 │ │ └── permission.ts # 权限工具函数 │ ├── type/ # 类型定义 │ │ └── index.d.ts │ ├── App.tsx # 根组件 │ ├── main.tsx # 入口文件 │ └── index.scss # 全局样式入口 ├── .eslintrc.cjs # ESLint 配置 ├── index.html # HTML 模板 ├── package.json # 依赖配置 ├── tsconfig.json # TypeScript 配置 ├── vite.config.ts # Vite 配置 └── README.md # 项目说明文档 ``` ## 🚀 快速开始 ### 环境要求 - Node.js >= 16.0.0 - npm >= 7.0.0 或 pnpm >= 7.0.0 ### 安装依赖 ```bash # 使用 npm npm install # 或使用 pnpm(推荐) pnpm install ``` ### 启动开发服务器 ```bash npm run dev ``` 开发服务器将在 `http://localhost:5173` 启动。 ### 构建生产版本 ```bash npm run build ``` 构建产物将输出到 `dist` 目录。 ### 预览生产构建 ```bash npm run preview ``` ### 代码检查 ```bash npm run lint ``` ## 🔑 登录账号 项目提供了两个测试账号: - **管理员**:`admin` / `123456`(拥有所有权限) - **普通用户**:`user` / `123456`(拥有部分权限) ## 📋 功能模块 ### 1. 仪表盘(Dashboard) - 数据统计展示 - 最近交易记录 - 系统信息展示 - 快捷操作入口 ### 2. 用户管理 - 用户列表展示 - 新增/编辑/删除用户 - 用户状态管理 - 权限:`system:user:view` ### 3. 角色管理 - 角色列表展示 - 角色权限配置 - 角色管理 - 权限:`system:role:view` ### 4. 系统设置 - 基础设置 - 安全设置 - 通知设置 - 权限:`system:settings:view` ## 🔐 权限系统 ### 权限标识格式 权限标识采用 `模块:操作` 的格式,例如: - `system:view` - 系统管理查看权限 - `system:user:view` - 用户管理查看权限 - `system:user:edit` - 用户管理编辑权限 - `common:use` - 常用功能使用权限 - `common:use:svg` - SVG 功能使用权限 - `component:view` - 组件查看权限 ### 路由权限配置 在 `src/router/config.tsx` 中配置路由权限: ```typescript { path: '/system/user', element: withSuspense(UserManagement), meta: { title: '用户管理', label: '用户管理', icon: , permissions: ['system:user:view'], // 权限标识数组 requiresAuth: true, // 是否需要登录 order: 1 // 菜单排序 } } ``` ### 组件权限控制 使用 `PermissionWrapper` 组件: ```tsx import { PermissionWrapper } from '@/utils/permission' ``` ### 权限检查流程 1. **路由级别**:在 `src/router/loader.tsx` 中进行路由权限检查 2. **菜单级别**:在 `src/layout/index.tsx` 中根据权限过滤菜单 3. **组件级别**:使用 `PermissionWrapper` 组件控制组件显示 ## 🛠️ 技术栈详解 ### React Router v6 + RouterProvider 项目使用 React Router v6 的 `RouterProvider` API,通过 `createBrowserRouter` 创建路由实例。 **路由加载器(Loader)**: - 在路由加载前进行权限检查 - 未登录用户自动重定向到登录页 - 无权限用户重定向到首页或 403 页面 **路由配置**: - 所有路由在 `src/router/config.tsx` 中统一配置 - 支持路由懒加载,优化首屏性能 - 支持嵌套路由和路由元信息 ### Redux Toolkit 使用 Redux Toolkit 进行状态管理,包含以下模块: - **auth**:认证状态(登录状态、用户信息、权限信息) - **router**:路由状态(当前路由、面包屑等) ### Ant Design 5 - 使用 `vite-plugin-imp` 实现按需加载 - 支持主题定制(通过 SCSS 变量) - 完整的 TypeScript 类型支持 ### HTTP 请求封装 `src/utils/request.ts` 提供了完整的 HTTP 请求封装: ```typescript import request from '@/utils/request' // GET 请求 const users = await request.get('/api/users', { page: 1, size: 10 }) // POST 请求(显示成功提示) await request.post('/api/users', userData, { showSuccess: true }) // PUT 请求 await request.put(`/api/users/${id}`, userData) // DELETE 请求 await request.delete(`/api/users/${id}`) // 文件上传 const formData = new FormData() formData.append('file', file) await request.upload('/api/upload', formData, { showSuccess: true }) ``` **特性**: - 自动添加 token 到请求头 - 统一错误处理 - 支持请求/响应拦截器 - 自动处理 token 过期 ## 📝 开发规范 ### 代码规范 - 使用 ESLint 进行代码检查 - 使用 TypeScript 严格模式 - 遵循 React Hooks 最佳实践 - 组件使用函数式组件 + Hooks ### 文件命名规范 - **组件文件**:使用 PascalCase,如 `UserManagement.tsx` - **工具文件**:使用 camelCase,如 `permission.ts` - **样式文件**:使用 kebab-case,如 `index.scss` - **类型文件**:使用 camelCase + `.d.ts`,如 `index.d.ts` ### 目录结构规范 - 每个功能模块独立目录 - 组件、样式、类型文件放在同一目录 - 公共组件放在 `src/components`(如需要) - 工具函数放在 `src/utils` ### Git 提交规范 建议使用 [Conventional Commits](https://www.conventionalcommits.org/): ``` feat: 添加用户管理功能 fix: 修复登录跳转问题 docs: 更新 README 文档 style: 调整样式格式 refactor: 重构路由配置 test: 添加单元测试 chore: 更新依赖版本 ``` ## 🔧 配置说明 ### Vite 配置 `vite.config.ts` 主要配置: - **路径别名**:`@` 指向 `src` 目录 - **Ant Design 按需加载**:使用 `vite-plugin-imp` - **SCSS 全局变量**:自动注入 `src/assets/style/variables.scss` ### TypeScript 配置 `tsconfig.json` 主要配置: - **严格模式**:启用所有严格类型检查 - **路径别名**:支持 `@/*` 路径别名 - **JSX**:使用 `react-jsx` 模式 ### ESLint 配置 `.eslintrc.cjs` 主要配置: - TypeScript ESLint 规则 - React Hooks 规则 - React Refresh 规则 ## 🎨 样式方案 ### SCSS 变量 在 `src/assets/style/variables.scss` 中定义全局变量: ```scss $primary-color: #1890ff; $success-color: #52c41a; $text-primary: #262626; // ... ``` ### 全局样式 在 `src/assets/style/main.scss` 中定义全局样式: - 卡片样式 - 表格样式 - 按钮样式 - 滚动条样式 ### 组件样式 - 使用 SCSS 模块化 - 支持 CSS Modules(`.module.scss`) - 支持全局样式(`.scss`) ## 🐛 常见问题 ### 1. 路由跳转后自动返回登录页 **原因**:权限检查失败或 token 过期 **解决**: - 检查 `src/store/modules/auth.ts` 中的权限配置 - 检查路由配置中的 `permissions` 是否正确 - 检查 `src/router/loader.tsx` 中的权限检查逻辑 ### 2. 菜单不显示 **原因**:权限过滤导致菜单被隐藏 **解决**: - 检查用户权限是否包含路由所需的权限 - 检查 `src/layout/index.tsx` 中的菜单生成逻辑 - 检查路由配置中的 `hidden` 属性 ### 3. TypeScript 类型错误 **原因**:类型定义不完整或类型不匹配 **解决**: - 检查 `src/router/types.ts` 中的类型定义 - 检查组件 props 的类型定义 - 使用 `as` 进行类型断言(谨慎使用) ### 4. 请求失败或 token 过期 **原因**:HTTP 请求拦截器检测到 token 过期 **解决**: - 检查 `src/utils/request.ts` 中的拦截器逻辑 - 检查后端返回的状态码 - 重新登录获取新的 token ## 📚 相关文档 - [React 官方文档](https://react.dev/) - [TypeScript 官方文档](https://www.typescriptlang.org/) - [Vite 官方文档](https://vitejs.dev/) - [Ant Design 官方文档](https://ant.design/) - [React Router 官方文档](https://reactrouter.com/) - [Redux Toolkit 官方文档](https://redux-toolkit.js.org/) ## 🤝 贡献指南 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request ## 📄 License MIT License ## 👥 作者 - 项目维护者:[Your Name] - 邮箱:[your.email@example.com] ## 🙏 致谢 感谢以下开源项目的支持: - [React](https://react.dev/) - [Ant Design](https://ant.design/) - [Vite](https://vitejs.dev/) - [Redux Toolkit](https://redux-toolkit.js.org/) --- **注意**:`src/router/guard.tsx` 文件已废弃,权限检查已迁移到 `src/router/loader.tsx`。如需查看旧的守卫实现,请参考该文件。