zt-admin-template 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/package.json +11 -0
  2. package/template/.env.development +2 -0
  3. package/template/.env.production +2 -0
  4. package/template/.env.test +2 -0
  5. package/template/.kiro/specs/course-backend-integration/.config.kiro +1 -0
  6. package/template/.kiro/specs/course-backend-integration/design.md +234 -0
  7. package/template/.kiro/specs/course-backend-integration/requirements.md +116 -0
  8. package/template/.kiro/specs/course-backend-integration/tasks.md +0 -0
  9. package/template/COMPLETION_CHECKLIST.md +305 -0
  10. package/template/DEPLOYMENT_GUIDE.md +391 -0
  11. package/template/FINAL_SUMMARY.md +428 -0
  12. package/template/IMPLEMENTATION_SUMMARY.md +382 -0
  13. package/template/INTEGRATION_GUIDE.md +458 -0
  14. package/template/PROJECT_OVERVIEW.md +343 -0
  15. package/template/QUICK_START.md +273 -0
  16. package/template/RBAC_Tutorial.md +424 -0
  17. package/template/README.md +16 -0
  18. package/template/React_Antd_TS_Tutorial.md +279 -0
  19. package/template/START_ALL.md +163 -0
  20. package/template/SYSTEM_MANAGEMENT.md +247 -0
  21. package/template/eslint.config.js +29 -0
  22. package/template/index.html +13 -0
  23. package/template/koa-server/README.md +65 -0
  24. package/template/koa-server/app.js +625 -0
  25. package/template/koa-server/package-lock.json +1547 -0
  26. package/template/koa-server/package.json +26 -0
  27. package/template/koa-server/public/assets/index-B1Cj4mG9.css +1 -0
  28. package/template/koa-server/public/assets/index-Mgxg-xqT.js +503 -0
  29. package/template/koa-server/public/favicon.svg +1 -0
  30. package/template/koa-server/public/icons.svg +24 -0
  31. package/template/koa-server/public/index.html +14 -0
  32. package/template/koa-server/uploads/1774265088480-962006467.png +0 -0
  33. package/template/koa-server/uploads/file-1774346891704-610962013.png +0 -0
  34. package/template/koa-server/uploads/file-1774346898887-58636533.png +0 -0
  35. package/template/koa-server/uploads/file-1774346912676-771862547.png +0 -0
  36. package/template/koa-server/uploads/file-1774347025308-130037894.png +0 -0
  37. package/template/koa-server/uploads/file-1774347031104-766499773.png +0 -0
  38. package/template/koa-server/uploads/file-1774347094969-731402203.png +0 -0
  39. package/template/koa-server/uploads/file-1774347101948-330296656.png +0 -0
  40. package/template/koa-server/uploads/file-1774351682377-932868720.png +0 -0
  41. package/template/koa-server/uploads/file-1774352037654-877426905.png +0 -0
  42. package/template/koa-server/uploads/file-1774352175463-386248997.png +0 -0
  43. package/template/koa-server/uploads/file-1774361446433-405859961.png +0 -0
  44. package/template/koa-server/uploads/file-1774361512207-465806267.png +0 -0
  45. package/template/lianxi.html +15 -0
  46. package/template/package-lock.json +6307 -0
  47. package/template/package.json +36 -0
  48. package/template/public/favicon.svg +1 -0
  49. package/template/public/icons.svg +24 -0
  50. package/template/src/App.css +184 -0
  51. package/template/src/App.tsx +44 -0
  52. package/template/src/api/course.ts +86 -0
  53. package/template/src/api/menu.ts +55 -0
  54. package/template/src/api/role.ts +58 -0
  55. package/template/src/api/user.ts +58 -0
  56. package/template/src/assets/hero.png +0 -0
  57. package/template/src/assets/react.svg +1 -0
  58. package/template/src/assets/vite.svg +1 -0
  59. package/template/src/components/Child.tsx +10 -0
  60. package/template/src/components/MainLayout.tsx +169 -0
  61. package/template/src/components/SunZi.tsx +13 -0
  62. package/template/src/contexts/ThemeContext.tsx +33 -0
  63. package/template/src/hooks/usePermission.tsx +62 -0
  64. package/template/src/index.css +111 -0
  65. package/template/src/main.tsx +13 -0
  66. package/template/src/pages/Dashboard.tsx +39 -0
  67. package/template/src/pages/Users.tsx +95 -0
  68. package/template/src/pages/banner/BannerList.tsx +182 -0
  69. package/template/src/pages/course/Course.tsx +586 -0
  70. package/template/src/pages/course/CourseList.tsx +168 -0
  71. package/template/src/pages/system/menu/Menu.tsx +501 -0
  72. package/template/src/pages/system/role/Role.tsx +458 -0
  73. package/template/src/pages/system/user/User.tsx +364 -0
  74. package/template/src/types/permission.ts +21 -0
  75. package/template/src/utils/request.tsx +94 -0
  76. package/template/src/vite-env.d.ts +1 -0
  77. package/template/tsconfig.app.json +32 -0
  78. package/template/tsconfig.json +7 -0
  79. package/template/tsconfig.node.json +13 -0
  80. package/template/vite.config.ts +30 -0
@@ -0,0 +1,279 @@
1
+ # React + Ant Design + TypeScript 项目实战教程
2
+
3
+ 本教程基于当前项目,详细讲解如何构建一个基于 React 19、TypeScript、Vite 和 Ant Design 6 的后台管理系统雏形。
4
+
5
+ ## 1. 技术栈
6
+
7
+ - **构建工具**: [Vite](https://vitejs.dev/)
8
+ - **前端框架**: [React](https://react.dev/) (v19)
9
+ - **编程语言**: [TypeScript](https://www.typescriptlang.org/)
10
+ - **UI 组件库**: [Ant Design](https://ant.design/) (v6)
11
+ - **路由管理**: [React Router](https://reactrouter.com/) (v7)
12
+ - **状态管理**: React Context API
13
+
14
+ ## 2. 项目初始化
15
+
16
+ 如果你是从零开始,可以使用 Vite 快速创建一个 React + TypeScript 项目:
17
+
18
+ ```bash
19
+ # 创建项目
20
+ npm create vite@latest admin-system -- --template react-ts
21
+
22
+ # 进入项目目录
23
+ cd admin-system
24
+
25
+ # 安装依赖
26
+ npm install
27
+ ```
28
+
29
+ ### 安装项目所需依赖
30
+
31
+ 安装 Ant Design、图标库和路由:
32
+
33
+ ```bash
34
+ npm install antd @ant-design/icons react-router-dom
35
+ ```
36
+
37
+ ## 3. 项目结构
38
+
39
+ 建议的目录结构如下:
40
+
41
+ ```
42
+ src/
43
+ ├── assets/ # 静态资源
44
+ ├── components/ # 公共组件 (Layout, Header, etc.)
45
+ ├── contexts/ # 全局上下文 (Context)
46
+ ├── pages/ # 页面组件 (Dashboard, Users, etc.)
47
+ ├── App.tsx # 根组件
48
+ ├── main.tsx # 入口文件
49
+ └── vite-env.d.ts # Vite 类型定义
50
+ ```
51
+
52
+ ## 4. 核心功能实现
53
+
54
+ ### 4.1 入口文件配置 (`src/main.tsx`)
55
+
56
+ 配置 `BrowserRouter` 用于路由管理,并使用 `StrictMode` 包裹应用。
57
+
58
+ ```tsx
59
+ import { StrictMode } from 'react'
60
+ import { createRoot } from 'react-dom/client'
61
+ import { BrowserRouter } from 'react-router-dom'
62
+ import App from './App'
63
+
64
+ createRoot(document.getElementById('root')!).render(
65
+ <StrictMode>
66
+ <BrowserRouter>
67
+ <App />
68
+ </BrowserRouter>
69
+ </StrictMode>
70
+ )
71
+ ```
72
+
73
+ ### 4.2 全局状态管理 - ThemeContext (`src/contexts/ThemeContext.tsx`)
74
+
75
+ 使用 Context API 实现主题切换,并结合 TypeScript 定义类型安全接口。
76
+
77
+ ```tsx
78
+ import { createContext, useContext, useState, ReactNode } from "react";
79
+
80
+ // 定义 Context 的数据类型
81
+ interface ThemeContextType {
82
+ theme: string;
83
+ toggleTheme: () => void;
84
+ }
85
+
86
+ // 创建 Context 并提供默认值
87
+ const ThemeContext = createContext<ThemeContextType>({
88
+ theme: "light",
89
+ toggleTheme: () => { }
90
+ })
91
+
92
+ interface ThemeProviderProps {
93
+ children: ReactNode;
94
+ }
95
+
96
+ // Provider 组件
97
+ export function ThemeProvider({ children }: ThemeProviderProps) {
98
+ const [theme, setTheme] = useState<string>("light");
99
+
100
+ const toggleTheme = () => {
101
+ setTheme(prev => prev === "light" ? "dark" : "light");
102
+ }
103
+
104
+ return (
105
+ <ThemeContext.Provider value={{ theme, toggleTheme }}>
106
+ {children}
107
+ </ThemeContext.Provider>
108
+ );
109
+ }
110
+
111
+ // 自定义 Hook 方便使用
112
+ export function useTheme(){
113
+ return useContext(ThemeContext)
114
+ }
115
+ ```
116
+
117
+ ### 4.3 布局组件 - Ant Design Layout (`src/components/MainLayout.tsx`)
118
+
119
+ 使用 Ant Design 的 `Layout` 和 `Menu` 组件构建侧边栏布局。注意 TypeScript 类型的使用。
120
+
121
+ ```tsx
122
+ import React, { useState } from 'react';
123
+ import { Layout, Menu, theme } from 'antd';
124
+ import { PieChartOutlined, UserOutlined } from '@ant-design/icons';
125
+ import { Outlet, useNavigate, useLocation } from 'react-router-dom';
126
+ import type { MenuProps } from 'antd';
127
+
128
+ const { Header, Content, Footer, Sider } = Layout;
129
+
130
+ // 定义菜单项类型助手函数
131
+ type MenuItem = Required<MenuProps>['items'][number];
132
+
133
+ function getItem(
134
+ label: React.ReactNode,
135
+ key: React.Key,
136
+ icon?: React.ReactNode,
137
+ children?: MenuItem[],
138
+ ): MenuItem {
139
+ return { key, icon, children, label } as MenuItem;
140
+ }
141
+
142
+ const items: MenuItem[] = [
143
+ getItem('Dashboard', '/', <PieChartOutlined />),
144
+ getItem('Users', '/users', <UserOutlined />),
145
+ ];
146
+
147
+ const MainLayout: React.FC = () => {
148
+ const [collapsed, setCollapsed] = useState(false);
149
+ const { token: { colorBgContainer } } = theme.useToken();
150
+ const navigate = useNavigate();
151
+ const location = useLocation();
152
+
153
+ return (
154
+ <Layout style={{ minHeight: '100vh' }}>
155
+ <Sider collapsible collapsed={collapsed} onCollapse={setCollapsed}>
156
+ <Menu
157
+ theme="dark"
158
+ defaultSelectedKeys={['/']}
159
+ selectedKeys={[location.pathname]}
160
+ mode="inline"
161
+ items={items}
162
+ onClick={({ key }) => navigate(key)}
163
+ />
164
+ </Sider>
165
+ <Layout>
166
+ <Header style={{ padding: 0, background: colorBgContainer }} />
167
+ <Content style={{ margin: '16px' }}>
168
+ {/* Outlet 用于渲染子路由 */}
169
+ <Outlet />
170
+ </Content>
171
+ </Layout>
172
+ </Layout>
173
+ );
174
+ };
175
+
176
+ export default MainLayout;
177
+ ```
178
+
179
+ ### 4.4 数据展示页面 - Ant Design Table (`src/pages/Users.tsx`)
180
+
181
+ 使用 TypeScript 定义表格列(`ColumnsType`)和数据源(`DataType`)的类型。
182
+
183
+ ```tsx
184
+ import React from 'react';
185
+ import { Table, Tag, Space } from 'antd';
186
+ import type { ColumnsType } from 'antd/es/table';
187
+
188
+ // 定义数据类型接口
189
+ interface DataType {
190
+ key: string;
191
+ name: string;
192
+ age: number;
193
+ tags: string[];
194
+ }
195
+
196
+ // 定义列配置,泛型指定为 DataType
197
+ const columns: ColumnsType<DataType> = [
198
+ {
199
+ title: 'Name',
200
+ dataIndex: 'name',
201
+ key: 'name',
202
+ render: (text) => <a>{text}</a>,
203
+ },
204
+ // ... 其他列
205
+ ];
206
+
207
+ const data: DataType[] = [
208
+ { key: '1', name: 'John Brown', age: 32, tags: ['developer'] },
209
+ ];
210
+
211
+ const Users: React.FC = () => {
212
+ return (
213
+ <div>
214
+ <h2>Users Management</h2>
215
+ <Table columns={columns} dataSource={data} />
216
+ </div>
217
+ );
218
+ };
219
+
220
+ export default Users;
221
+ ```
222
+
223
+ ### 4.5 路由配置与组件组合 (`src/App.tsx`)
224
+
225
+ 虽然当前 `App.tsx` 主要是为了演示 Context 的使用,但通常我们会在这里配置路由。
226
+
227
+ ```tsx
228
+ import React from 'react';
229
+ import Child from './components/Child';
230
+ import { ThemeProvider } from './contexts/ThemeContext';
231
+
232
+ const App: React.FC = () => {
233
+ return (
234
+ <ThemeProvider>
235
+ <Child />
236
+ </ThemeProvider>
237
+ );
238
+ };
239
+
240
+ export default App;
241
+ ```
242
+
243
+ *注意:如果需要启用完整路由,可以将 `App.tsx` 中的 `<ThemeProvider>` 替换为 `<Routes>` 配置,如代码注释所示。*
244
+
245
+ ## 5. 运行与构建
246
+
247
+ ### 开发模式
248
+
249
+ ```bash
250
+ npm run dev
251
+ ```
252
+
253
+ ### 构建生产版本
254
+
255
+ TypeScript 项目构建时会先进行类型检查 (`tsc -b`)。
256
+
257
+ ```bash
258
+ npm run build
259
+ ```
260
+
261
+ ## 6. TypeScript 开发技巧
262
+
263
+ 1. **组件 Props 类型**: 总是为组件 Props 定义接口。
264
+ ```tsx
265
+ interface MyComponentProps {
266
+ title: string;
267
+ isActive?: boolean; // 可选属性
268
+ }
269
+ const MyComponent: React.FC<MyComponentProps> = ({ title, isActive }) => { ... }
270
+ ```
271
+
272
+ 2. **事件处理类型**: React 提供了丰富的事件类型。
273
+ ```tsx
274
+ const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
275
+ console.log(event.target.value);
276
+ }
277
+ ```
278
+
279
+ 3. **Ant Design 类型**: 从 `antd` 或子路径导入组件特定的类型(如 `ColumnsType`, `MenuProps`),这能提供极好的代码补全和类型检查。
@@ -0,0 +1,163 @@
1
+ # 完整启动指南
2
+
3
+ ## 一键启动所有服务
4
+
5
+ ### 方式一:分别启动(推荐)
6
+
7
+ #### 1. 启动后端服务器(新终端窗口)
8
+ ```bash
9
+ cd koa-server
10
+ npm install
11
+ npm run dev
12
+ ```
13
+
14
+ 后端服务器将在 `http://localhost:8080` 启动
15
+
16
+ #### 2. 启动前端应用(新终端窗口)
17
+ ```bash
18
+ npm install
19
+ npm run dev
20
+ ```
21
+
22
+ 前端应用将在 `http://localhost:5173` 启动
23
+
24
+ ### 方式二:使用 npm 脚本
25
+
26
+ 在项目根目录创建启动脚本(Windows):
27
+
28
+ **start-all.bat**
29
+ ```batch
30
+ @echo off
31
+ start cmd /k "cd koa-server && npm install && npm run dev"
32
+ timeout /t 3
33
+ start cmd /k "npm install && npm run dev"
34
+ ```
35
+
36
+ 然后运行:
37
+ ```bash
38
+ start-all.bat
39
+ ```
40
+
41
+ ### 方式三:使用 PowerShell
42
+
43
+ ```powershell
44
+ # 启动后端
45
+ Start-Process powershell -ArgumentList "cd koa-server; npm install; npm run dev"
46
+
47
+ # 等待3秒
48
+ Start-Sleep -Seconds 3
49
+
50
+ # 启动前端
51
+ Start-Process powershell -ArgumentList "npm install; npm run dev"
52
+ ```
53
+
54
+ ## 验证服务
55
+
56
+ ### 检查后端服务
57
+ ```bash
58
+ curl http://localhost:8080/health
59
+ ```
60
+
61
+ 应该返回:
62
+ ```json
63
+ {"status":"ok"}
64
+ ```
65
+
66
+ ### 检查前端应用
67
+ 访问 `http://localhost:5173`
68
+
69
+ ## 环境配置
70
+
71
+ ### 开发环境
72
+ - 前端 API 地址:`http://localhost:8080`
73
+ - 配置文件:`.env.development`
74
+
75
+ ### 测试环境
76
+ - 前端 API 地址:`http://localhost:8081`
77
+ - 配置文件:`.env.test`
78
+ - 构建命令:`npm run build:test`
79
+
80
+ ### 生产环境
81
+ - 前端 API 地址:`http://47.113.230.113`
82
+ - 配置文件:`.env.production`
83
+ - 构建命令:`npm run build`
84
+
85
+ ## 常见问题
86
+
87
+ ### 端口被占用
88
+ 如果 8080 端口被占用,修改 `koa-server/app.js` 中的端口号:
89
+ ```javascript
90
+ const port = 8080; // 改为其他端口,如 8081
91
+ ```
92
+
93
+ ### 跨域问题
94
+ 后端已配置 CORS,如果仍有问题,检查 `koa-server/app.js` 中的 CORS 配置
95
+
96
+ ### API 请求失败
97
+ 1. 确保后端服务已启动
98
+ 2. 检查 `.env.development` 中的 API 地址
99
+ 3. 查看浏览器控制台的错误信息
100
+
101
+ ## 测试流程
102
+
103
+ 1. **启动后端服务**
104
+ ```bash
105
+ cd koa-server && npm run dev
106
+ ```
107
+
108
+ 2. **启动前端应用**
109
+ ```bash
110
+ npm run dev
111
+ ```
112
+
113
+ 3. **访问应用**
114
+ - 打开 `http://localhost:5173`
115
+ - 点击左侧菜单"系统管理"
116
+ - 选择"用户管理"、"角色管理"或"菜单管理"
117
+
118
+ 4. **测试功能**
119
+ - 新增:点击"新增"按钮
120
+ - 编辑:点击编辑图标
121
+ - 删除:点击删除图标
122
+ - 搜索:输入搜索条件点击"搜索"
123
+
124
+ ## 生产部署
125
+
126
+ ### 前端构建
127
+ ```bash
128
+ npm run build
129
+ ```
130
+
131
+ 生成的文件在 `dist` 目录
132
+
133
+ ### 后端部署
134
+ ```bash
135
+ cd koa-server
136
+ npm install --production
137
+ npm start
138
+ ```
139
+
140
+ ## 监控和日志
141
+
142
+ ### 前端日志
143
+ 打开浏览器开发者工具(F12)查看控制台日志
144
+
145
+ ### 后端日志
146
+ 后端服务启动时会输出日志信息
147
+
148
+ ## 性能优化
149
+
150
+ ### 前端
151
+ - 使用 `npm run build` 进行生产构建
152
+ - 启用代码分割和懒加载
153
+
154
+ ### 后端
155
+ - 使用 PM2 进行进程管理
156
+ - 配置负载均衡
157
+
158
+ ## 下一步
159
+
160
+ 1. 集成数据库(MongoDB/MySQL)
161
+ 2. 实现用户认证和授权
162
+ 3. 添加操作日志
163
+ 4. 性能监控和优化
@@ -0,0 +1,247 @@
1
+ # 系统管理模块文档
2
+
3
+ ## 概述
4
+
5
+ 本项目包含三个完整的系统管理模块,基于若依管理系统的设计风格实现:
6
+
7
+ - **用户管理** (`src/pages/system/user/User.tsx`)
8
+ - **角色管理** (`src/pages/system/role/Role.tsx`)
9
+ - **菜单管理** (`src/pages/system/menu/Menu.tsx`)
10
+
11
+ ## 功能特性
12
+
13
+ ### 1. 用户管理
14
+
15
+ #### 主要功能
16
+ - 用户列表展示(分页、排序)
17
+ - 新增用户
18
+ - 编辑用户信息
19
+ - 删除用户
20
+ - 搜索和筛选
21
+
22
+ #### 用户字段
23
+ - 用户编号
24
+ - 用户名称(登录名)
25
+ - 用户昵称
26
+ - 部门
27
+ - 手机号码
28
+ - 邮箱
29
+ - 性别
30
+ - 状态(正常/停用)
31
+ - 创建时间
32
+ - 备注
33
+
34
+ #### 操作
35
+ - **新增**: 点击"新增"按钮打开表单
36
+ - **编辑**: 点击编辑图标修改用户信息
37
+ - **删除**: 点击删除图标,确认后删除用户
38
+ - **搜索**: 按用户名、手机号、创建时间、状态搜索
39
+ - **导出**: 导出用户列表
40
+
41
+ ### 2. 角色管理
42
+
43
+ #### 主要功能
44
+ - 角色列表展示
45
+ - 新增角色
46
+ - 编辑角色
47
+ - 删除角色
48
+ - 权限分配
49
+
50
+ #### 角色字段
51
+ - 角色编号
52
+ - 角色名称
53
+ - 权限字符
54
+ - 显示顺序
55
+ - 状态(正常/停用)
56
+ - 创建时间
57
+ - 备注
58
+
59
+ #### 权限分配
60
+ - 树形权限选择
61
+ - 支持多级权限
62
+ - 权限包括:
63
+ - 系统管理
64
+ - 用户管理(查看、新增、修改、删除)
65
+ - 角色管理(查看、新增、修改、删除)
66
+ - 菜单管理(查看、新增、修改、删除)
67
+ - 业务管理
68
+ - 订单管理(查看、新增)
69
+
70
+ #### 操作
71
+ - **新增**: 创建新角色并分配权限
72
+ - **编辑**: 修改角色信息和权限
73
+ - **删除**: 删除角色
74
+ - **权限分配**: 在弹窗中选择权限
75
+
76
+ ### 3. 菜单管理
77
+
78
+ #### 主要功能
79
+ - 菜单树形展示
80
+ - 新增菜单/子菜单
81
+ - 编辑菜单
82
+ - 删除菜单
83
+ - 展开/折叠菜单树
84
+
85
+ #### 菜单字段
86
+ - 菜单名称
87
+ - 父菜单
88
+ - 排序
89
+ - 菜单类型(目录/菜单/按钮)
90
+ - 路由地址
91
+ - 组件路径
92
+ - 权限标识
93
+ - 菜单图标
94
+ - 是否外链
95
+ - 是否缓存
96
+ - 是否可见
97
+ - 状态(正常/停用)
98
+ - 创建时间
99
+ - 备注
100
+
101
+ #### 菜单类型
102
+ - **M (目录)**: 菜单分类
103
+ - **C (菜单)**: 可访问的菜单项
104
+ - **F (按钮)**: 页面内的操作按钮
105
+
106
+ #### 操作
107
+ - **新增**: 添加顶级菜单
108
+ - **新增子菜单**: 在菜单行点击"+"添加子菜单
109
+ - **编辑**: 修改菜单配置
110
+ - **删除**: 删除菜单及其子菜单
111
+ - **展开/折叠**: 展开或折叠菜单树
112
+
113
+ ## 路由配置
114
+
115
+ 所有管理页面已在 `src/App.tsx` 中配置路由:
116
+
117
+ ```typescript
118
+ <Route path="system/user" element={<User />} />
119
+ <Route path="system/role" element={<Role />} />
120
+ <Route path="system/menu" element={<Menu />} />
121
+ ```
122
+
123
+ ## 菜单导航
124
+
125
+ 在左侧菜单栏中,"系统管理"下包含三个子菜单项:
126
+ - 用户管理
127
+ - 角色管理
128
+ - 菜单管理
129
+
130
+ ## 数据管理
131
+
132
+ ### 状态管理
133
+ 所有数据使用 React 的 `useState` Hook 进行本地状态管理。
134
+
135
+ ### 示例数据
136
+ 每个模块都包含初始示例数据:
137
+
138
+ **用户管理**:
139
+ - admin (管理员)
140
+ - test (测试员)
141
+ - dev (开发者)
142
+
143
+ **角色管理**:
144
+ - 超级管理员 (admin)
145
+ - 普通角色 (common)
146
+ - 测试角色 (test)
147
+
148
+ **菜单管理**:
149
+ - 系统管理 (目录)
150
+ - 用户管理 (菜单)
151
+ - 角色管理 (菜单)
152
+ - 菜单管理 (菜单)
153
+ - 业务管理 (目录)
154
+ - 订单管理 (菜单)
155
+
156
+ ## 表单验证
157
+
158
+ ### 用户管理
159
+ - 用户名称: 必填
160
+ - 用户昵称: 必填
161
+ - 邮箱: 邮箱格式验证
162
+ - 手机号码: 手机号格式验证 (1[3-9]开头的11位数字)
163
+
164
+ ### 角色管理
165
+ - 角色名称: 必填
166
+ - 权限字符: 必填
167
+ - 显示顺序: 必填
168
+
169
+ ### 菜单管理
170
+ - 菜单名称: 必填
171
+ - 路由地址: 必填
172
+ - 菜单类型: 必填
173
+ - 显示顺序: 必填
174
+
175
+ ## 组件依赖
176
+
177
+ 所有管理页面使用以下 Ant Design 组件:
178
+ - Table: 数据表格
179
+ - Form: 表单
180
+ - Modal: 对话框
181
+ - Button: 按钮
182
+ - Input: 输入框
183
+ - Select: 下拉选择
184
+ - Switch: 开关
185
+ - DatePicker: 日期选择
186
+ - Tree: 树形组件(角色管理权限分配)
187
+ - Card: 卡片
188
+ - Row/Col: 栅格布局
189
+ - Space: 间距
190
+ - Tooltip: 提示
191
+ - Popconfirm: 确认对话框
192
+
193
+ ## 扩展建议
194
+
195
+ ### 后端集成
196
+ 1. 将本地状态管理替换为 API 调用
197
+ 2. 实现真实的数据持久化
198
+ 3. 添加权限验证
199
+
200
+ ### 功能增强
201
+ 1. 批量操作(批量删除、批量导出)
202
+ 2. 高级搜索和筛选
203
+ 3. 数据导入功能
204
+ 4. 操作日志记录
205
+ 5. 用户头像上传
206
+ 6. 角色权限预设模板
207
+
208
+ ### 性能优化
209
+ 1. 虚拟滚动处理大数据列表
210
+ 2. 分页加载
211
+ 3. 缓存优化
212
+
213
+ ## 使用示例
214
+
215
+ ### 添加新用户
216
+ 1. 点击"新增"按钮
217
+ 2. 填写用户信息
218
+ 3. 点击"确定"保存
219
+
220
+ ### 分配角色权限
221
+ 1. 在角色管理中点击"新增"
222
+ 2. 填写角色基本信息
223
+ 3. 在权限分配区域选择需要的权限
224
+ 4. 点击"确定"保存
225
+
226
+ ### 管理菜单结构
227
+ 1. 在菜单管理中查看菜单树
228
+ 2. 点击"+"添加子菜单
229
+ 3. 配置菜单路由和权限
230
+ 4. 点击"确定"保存
231
+
232
+ ## 技术栈
233
+
234
+ - React 19.2.4
235
+ - TypeScript 5.9.3
236
+ - Ant Design 6.3.2
237
+ - React Router 7.13.1
238
+ - Dayjs 1.11.10
239
+ - Vite 5.4.0
240
+
241
+ ## 浏览器兼容性
242
+
243
+ 支持所有现代浏览器(Chrome、Firefox、Safari、Edge)
244
+
245
+ ## 许可证
246
+
247
+ MIT
@@ -0,0 +1,29 @@
1
+ import js from '@eslint/js'
2
+ import globals from 'globals'
3
+ import reactHooks from 'eslint-plugin-react-hooks'
4
+ import reactRefresh from 'eslint-plugin-react-refresh'
5
+ import { defineConfig, globalIgnores } from 'eslint/config'
6
+
7
+ export default defineConfig([
8
+ globalIgnores(['dist']),
9
+ {
10
+ files: ['**/*.{js,jsx}'],
11
+ extends: [
12
+ js.configs.recommended,
13
+ reactHooks.configs.flat.recommended,
14
+ reactRefresh.configs.vite,
15
+ ],
16
+ languageOptions: {
17
+ ecmaVersion: 2020,
18
+ globals: globals.browser,
19
+ parserOptions: {
20
+ ecmaVersion: 'latest',
21
+ ecmaFeatures: { jsx: true },
22
+ sourceType: 'module',
23
+ },
24
+ },
25
+ rules: {
26
+ 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
27
+ },
28
+ },
29
+ ])