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.
- package/package.json +11 -0
- package/template/.env.development +2 -0
- package/template/.env.production +2 -0
- package/template/.env.test +2 -0
- package/template/.kiro/specs/course-backend-integration/.config.kiro +1 -0
- package/template/.kiro/specs/course-backend-integration/design.md +234 -0
- package/template/.kiro/specs/course-backend-integration/requirements.md +116 -0
- package/template/.kiro/specs/course-backend-integration/tasks.md +0 -0
- package/template/COMPLETION_CHECKLIST.md +305 -0
- package/template/DEPLOYMENT_GUIDE.md +391 -0
- package/template/FINAL_SUMMARY.md +428 -0
- package/template/IMPLEMENTATION_SUMMARY.md +382 -0
- package/template/INTEGRATION_GUIDE.md +458 -0
- package/template/PROJECT_OVERVIEW.md +343 -0
- package/template/QUICK_START.md +273 -0
- package/template/RBAC_Tutorial.md +424 -0
- package/template/README.md +16 -0
- package/template/React_Antd_TS_Tutorial.md +279 -0
- package/template/START_ALL.md +163 -0
- package/template/SYSTEM_MANAGEMENT.md +247 -0
- package/template/eslint.config.js +29 -0
- package/template/index.html +13 -0
- package/template/koa-server/README.md +65 -0
- package/template/koa-server/app.js +625 -0
- package/template/koa-server/package-lock.json +1547 -0
- package/template/koa-server/package.json +26 -0
- package/template/koa-server/public/assets/index-B1Cj4mG9.css +1 -0
- package/template/koa-server/public/assets/index-Mgxg-xqT.js +503 -0
- package/template/koa-server/public/favicon.svg +1 -0
- package/template/koa-server/public/icons.svg +24 -0
- package/template/koa-server/public/index.html +14 -0
- package/template/koa-server/uploads/1774265088480-962006467.png +0 -0
- package/template/koa-server/uploads/file-1774346891704-610962013.png +0 -0
- package/template/koa-server/uploads/file-1774346898887-58636533.png +0 -0
- package/template/koa-server/uploads/file-1774346912676-771862547.png +0 -0
- package/template/koa-server/uploads/file-1774347025308-130037894.png +0 -0
- package/template/koa-server/uploads/file-1774347031104-766499773.png +0 -0
- package/template/koa-server/uploads/file-1774347094969-731402203.png +0 -0
- package/template/koa-server/uploads/file-1774347101948-330296656.png +0 -0
- package/template/koa-server/uploads/file-1774351682377-932868720.png +0 -0
- package/template/koa-server/uploads/file-1774352037654-877426905.png +0 -0
- package/template/koa-server/uploads/file-1774352175463-386248997.png +0 -0
- package/template/koa-server/uploads/file-1774361446433-405859961.png +0 -0
- package/template/koa-server/uploads/file-1774361512207-465806267.png +0 -0
- package/template/lianxi.html +15 -0
- package/template/package-lock.json +6307 -0
- package/template/package.json +36 -0
- package/template/public/favicon.svg +1 -0
- package/template/public/icons.svg +24 -0
- package/template/src/App.css +184 -0
- package/template/src/App.tsx +44 -0
- package/template/src/api/course.ts +86 -0
- package/template/src/api/menu.ts +55 -0
- package/template/src/api/role.ts +58 -0
- package/template/src/api/user.ts +58 -0
- package/template/src/assets/hero.png +0 -0
- package/template/src/assets/react.svg +1 -0
- package/template/src/assets/vite.svg +1 -0
- package/template/src/components/Child.tsx +10 -0
- package/template/src/components/MainLayout.tsx +169 -0
- package/template/src/components/SunZi.tsx +13 -0
- package/template/src/contexts/ThemeContext.tsx +33 -0
- package/template/src/hooks/usePermission.tsx +62 -0
- package/template/src/index.css +111 -0
- package/template/src/main.tsx +13 -0
- package/template/src/pages/Dashboard.tsx +39 -0
- package/template/src/pages/Users.tsx +95 -0
- package/template/src/pages/banner/BannerList.tsx +182 -0
- package/template/src/pages/course/Course.tsx +586 -0
- package/template/src/pages/course/CourseList.tsx +168 -0
- package/template/src/pages/system/menu/Menu.tsx +501 -0
- package/template/src/pages/system/role/Role.tsx +458 -0
- package/template/src/pages/system/user/User.tsx +364 -0
- package/template/src/types/permission.ts +21 -0
- package/template/src/utils/request.tsx +94 -0
- package/template/src/vite-env.d.ts +1 -0
- package/template/tsconfig.app.json +32 -0
- package/template/tsconfig.json +7 -0
- package/template/tsconfig.node.json +13 -0
- package/template/vite.config.ts +30 -0
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
# 前后端集成完整指南
|
|
2
|
+
|
|
3
|
+
## 项目架构
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
admin-system/
|
|
7
|
+
├── 前端应用 (React + TypeScript + Vite)
|
|
8
|
+
│ ├── src/
|
|
9
|
+
│ │ ├── api/ # API 服务层
|
|
10
|
+
│ │ │ ├── user.ts # 用户 API
|
|
11
|
+
│ │ │ ├── role.ts # 角色 API
|
|
12
|
+
│ │ │ └── menu.ts # 菜单 API
|
|
13
|
+
│ │ ├── utils/
|
|
14
|
+
│ │ │ └── request.tsx # axios 二次封装
|
|
15
|
+
│ │ └── pages/system/ # 管理模块
|
|
16
|
+
│ │ ├── user/User.tsx
|
|
17
|
+
│ │ ├── role/Role.tsx
|
|
18
|
+
│ │ └── menu/Menu.tsx
|
|
19
|
+
│ └── .env.development # 开发环境配置
|
|
20
|
+
│
|
|
21
|
+
└── 后端服务 (Koa)
|
|
22
|
+
└── koa-server/
|
|
23
|
+
├── app.js # 主应用文件
|
|
24
|
+
└── package.json # 依赖配置
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 技术栈
|
|
28
|
+
|
|
29
|
+
### 前端
|
|
30
|
+
- React 19.2.4
|
|
31
|
+
- TypeScript 5.9.3
|
|
32
|
+
- Ant Design 6.3.2
|
|
33
|
+
- Axios 1.6.0
|
|
34
|
+
- Vite 5.4.0
|
|
35
|
+
|
|
36
|
+
### 后端
|
|
37
|
+
- Koa 2.14.2
|
|
38
|
+
- Koa Router 12.0.0
|
|
39
|
+
- Koa CORS 0.0.16
|
|
40
|
+
- Koa Body Parser 4.4.1
|
|
41
|
+
|
|
42
|
+
## 集成步骤
|
|
43
|
+
|
|
44
|
+
### 第一步:环境准备
|
|
45
|
+
|
|
46
|
+
1. **安装 Node.js**
|
|
47
|
+
- 版本要求:v20.18.0+
|
|
48
|
+
- 下载地址:https://nodejs.org/
|
|
49
|
+
|
|
50
|
+
2. **克隆项目**
|
|
51
|
+
```bash
|
|
52
|
+
git clone <项目地址>
|
|
53
|
+
cd admin-system
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
3. **安装前端依赖**
|
|
57
|
+
```bash
|
|
58
|
+
npm install
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
4. **安装后端依赖**
|
|
62
|
+
```bash
|
|
63
|
+
cd koa-server
|
|
64
|
+
npm install
|
|
65
|
+
cd ..
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 第二步:配置环境变量
|
|
69
|
+
|
|
70
|
+
1. **前端开发环境配置** (`.env.development`)
|
|
71
|
+
```
|
|
72
|
+
VITE_API_URL=http://localhost:8080
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
2. **前端测试环境配置** (`.env.test`)
|
|
76
|
+
```
|
|
77
|
+
VITE_API_URL=http://localhost:8081
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
3. **前端生产环境配置** (`.env.production`)
|
|
81
|
+
```
|
|
82
|
+
VITE_API_URL=http://47.113.230.113
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 第三步:启动服务
|
|
86
|
+
|
|
87
|
+
#### 方式一:分别启动(推荐)
|
|
88
|
+
|
|
89
|
+
**终端 1 - 启动后端服务**
|
|
90
|
+
```bash
|
|
91
|
+
cd koa-server
|
|
92
|
+
npm run dev
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
输出应该显示:
|
|
96
|
+
```
|
|
97
|
+
Koa 服务器已启动: http://localhost:8080
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**终端 2 - 启动前端应用**
|
|
101
|
+
```bash
|
|
102
|
+
npm run dev
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
输出应该显示:
|
|
106
|
+
```
|
|
107
|
+
VITE v5.4.21 ready in 518 ms
|
|
108
|
+
➜ Local: http://localhost:5173/
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### 方式二:使用 npm 脚本
|
|
112
|
+
|
|
113
|
+
在 `package.json` 中添加:
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"scripts": {
|
|
117
|
+
"dev:all": "concurrently \"cd koa-server && npm run dev\" \"npm run dev\""
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
然后运行:
|
|
123
|
+
```bash
|
|
124
|
+
npm run dev:all
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 第四步:验证集成
|
|
128
|
+
|
|
129
|
+
1. **打开浏览器**
|
|
130
|
+
访问 `http://localhost:5173`
|
|
131
|
+
|
|
132
|
+
2. **测试 API 连接**
|
|
133
|
+
- 打开浏览器开发者工具(F12)
|
|
134
|
+
- 切换到 Network 标签
|
|
135
|
+
- 点击左侧菜单"系统管理" > "用户管理"
|
|
136
|
+
- 观察网络请求,应该看到 `/system/user/list` 请求
|
|
137
|
+
|
|
138
|
+
3. **验证数据加载**
|
|
139
|
+
- 用户列表应该显示 3 个用户
|
|
140
|
+
- 角色列表应该显示 3 个角色
|
|
141
|
+
- 菜单列表应该显示树形菜单
|
|
142
|
+
|
|
143
|
+
## API 集成详解
|
|
144
|
+
|
|
145
|
+
### 请求工具 (`src/utils/request.tsx`)
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
import { request } from '@/utils/request';
|
|
149
|
+
|
|
150
|
+
// GET 请求
|
|
151
|
+
const data = await request.get('/system/user/list', { params: { pageNum: 1 } });
|
|
152
|
+
|
|
153
|
+
// POST 请求
|
|
154
|
+
const result = await request.post('/system/user', { username: 'test' });
|
|
155
|
+
|
|
156
|
+
// PUT 请求
|
|
157
|
+
const updated = await request.put('/system/user', { id: '1', username: 'new' });
|
|
158
|
+
|
|
159
|
+
// DELETE 请求
|
|
160
|
+
await request.delete('/system/user/1');
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### API 服务层 (`src/api/user.ts`)
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
import { request } from '@/utils/request';
|
|
167
|
+
|
|
168
|
+
// 获取用户列表
|
|
169
|
+
export const getUserList = (params) =>
|
|
170
|
+
request.get('/system/user/list', { params });
|
|
171
|
+
|
|
172
|
+
// 新增用户
|
|
173
|
+
export const addUser = (data) =>
|
|
174
|
+
request.post('/system/user', data);
|
|
175
|
+
|
|
176
|
+
// 编辑用户
|
|
177
|
+
export const updateUser = (data) =>
|
|
178
|
+
request.put('/system/user', data);
|
|
179
|
+
|
|
180
|
+
// 删除用户
|
|
181
|
+
export const deleteUser = (id) =>
|
|
182
|
+
request.delete(`/system/user/${id}`);
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 页面集成 (`src/pages/system/user/User.tsx`)
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
import { getUserList, addUser, updateUser, deleteUser } from '@/api/user';
|
|
189
|
+
|
|
190
|
+
// 获取列表
|
|
191
|
+
const fetchUsers = async () => {
|
|
192
|
+
const response = await getUserList({ pageNum: 1, pageSize: 10 });
|
|
193
|
+
setUsers(response.rows);
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
// 新增
|
|
197
|
+
const handleAdd = async (data) => {
|
|
198
|
+
await addUser(data);
|
|
199
|
+
fetchUsers();
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
// 编辑
|
|
203
|
+
const handleEdit = async (data) => {
|
|
204
|
+
await updateUser(data);
|
|
205
|
+
fetchUsers();
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
// 删除
|
|
209
|
+
const handleDelete = async (id) => {
|
|
210
|
+
await deleteUser(id);
|
|
211
|
+
fetchUsers();
|
|
212
|
+
};
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## 后端 API 文档
|
|
216
|
+
|
|
217
|
+
### 用户管理
|
|
218
|
+
|
|
219
|
+
| 方法 | 端点 | 说明 |
|
|
220
|
+
|------|------|------|
|
|
221
|
+
| GET | `/system/user/list` | 获取用户列表 |
|
|
222
|
+
| GET | `/system/user/:id` | 获取用户详情 |
|
|
223
|
+
| POST | `/system/user` | 新增用户 |
|
|
224
|
+
| PUT | `/system/user` | 编辑用户 |
|
|
225
|
+
| DELETE | `/system/user/:id` | 删除用户 |
|
|
226
|
+
|
|
227
|
+
### 角色管理
|
|
228
|
+
|
|
229
|
+
| 方法 | 端点 | 说明 |
|
|
230
|
+
|------|------|------|
|
|
231
|
+
| GET | `/system/role/list` | 获取角色列表 |
|
|
232
|
+
| GET | `/system/role/:id` | 获取角色详情 |
|
|
233
|
+
| POST | `/system/role` | 新增角色 |
|
|
234
|
+
| PUT | `/system/role` | 编辑角色 |
|
|
235
|
+
| DELETE | `/system/role/:id` | 删除角色 |
|
|
236
|
+
|
|
237
|
+
### 菜单管理
|
|
238
|
+
|
|
239
|
+
| 方法 | 端点 | 说明 |
|
|
240
|
+
|------|------|------|
|
|
241
|
+
| GET | `/system/menu/list` | 获取菜单列表 |
|
|
242
|
+
| GET | `/system/menu/:id` | 获取菜单详情 |
|
|
243
|
+
| POST | `/system/menu` | 新增菜单 |
|
|
244
|
+
| PUT | `/system/menu` | 编辑菜单 |
|
|
245
|
+
| DELETE | `/system/menu/:id` | 删除菜单 |
|
|
246
|
+
|
|
247
|
+
## 测试场景
|
|
248
|
+
|
|
249
|
+
### 场景 1:用户管理
|
|
250
|
+
|
|
251
|
+
1. **查看用户列表**
|
|
252
|
+
- 访问 `/system/user`
|
|
253
|
+
- 应该显示 3 个用户
|
|
254
|
+
|
|
255
|
+
2. **新增用户**
|
|
256
|
+
- 点击"新增"按钮
|
|
257
|
+
- 填写用户信息
|
|
258
|
+
- 点击"确定"
|
|
259
|
+
- 列表应该更新
|
|
260
|
+
|
|
261
|
+
3. **编辑用户**
|
|
262
|
+
- 点击编辑图标
|
|
263
|
+
- 修改用户信息
|
|
264
|
+
- 点击"确定"
|
|
265
|
+
- 列表应该更新
|
|
266
|
+
|
|
267
|
+
4. **删除用户**
|
|
268
|
+
- 点击删除图标
|
|
269
|
+
- 确认删除
|
|
270
|
+
- 列表应该更新
|
|
271
|
+
|
|
272
|
+
### 场景 2:角色管理
|
|
273
|
+
|
|
274
|
+
1. **查看角色列表**
|
|
275
|
+
- 访问 `/system/role`
|
|
276
|
+
- 应该显示 3 个角色
|
|
277
|
+
|
|
278
|
+
2. **分配权限**
|
|
279
|
+
- 新增或编辑角色
|
|
280
|
+
- 在权限分配区域选择权限
|
|
281
|
+
- 点击"确定"
|
|
282
|
+
- 权限应该被保存
|
|
283
|
+
|
|
284
|
+
### 场景 3:菜单管理
|
|
285
|
+
|
|
286
|
+
1. **查看菜单树**
|
|
287
|
+
- 访问 `/system/menu`
|
|
288
|
+
- 应该显示树形菜单
|
|
289
|
+
|
|
290
|
+
2. **添加子菜单**
|
|
291
|
+
- 点击"+"按钮
|
|
292
|
+
- 填写菜单信息
|
|
293
|
+
- 点击"确定"
|
|
294
|
+
- 菜单树应该更新
|
|
295
|
+
|
|
296
|
+
## 错误处理
|
|
297
|
+
|
|
298
|
+
### 常见错误
|
|
299
|
+
|
|
300
|
+
1. **CORS 错误**
|
|
301
|
+
```
|
|
302
|
+
Access to XMLHttpRequest blocked by CORS policy
|
|
303
|
+
```
|
|
304
|
+
解决:确保后端已启用 CORS 中间件
|
|
305
|
+
|
|
306
|
+
2. **连接超时**
|
|
307
|
+
```
|
|
308
|
+
Network Error: timeout of 10000ms exceeded
|
|
309
|
+
```
|
|
310
|
+
解决:检查后端服务是否启动
|
|
311
|
+
|
|
312
|
+
3. **404 错误**
|
|
313
|
+
```
|
|
314
|
+
404 Not Found
|
|
315
|
+
```
|
|
316
|
+
解决:检查 API 端点是否正确
|
|
317
|
+
|
|
318
|
+
4. **500 错误**
|
|
319
|
+
```
|
|
320
|
+
500 Internal Server Error
|
|
321
|
+
```
|
|
322
|
+
解决:查看后端日志,检查服务器错误
|
|
323
|
+
|
|
324
|
+
## 调试技巧
|
|
325
|
+
|
|
326
|
+
### 前端调试
|
|
327
|
+
|
|
328
|
+
1. **打开开发者工具**
|
|
329
|
+
```
|
|
330
|
+
F12 或 Ctrl+Shift+I
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
2. **查看网络请求**
|
|
334
|
+
- 切换到 Network 标签
|
|
335
|
+
- 执行操作
|
|
336
|
+
- 查看请求和响应
|
|
337
|
+
|
|
338
|
+
3. **查看控制台日志**
|
|
339
|
+
- 切换到 Console 标签
|
|
340
|
+
- 查看错误信息
|
|
341
|
+
|
|
342
|
+
4. **使用 React DevTools**
|
|
343
|
+
- 安装浏览器扩展
|
|
344
|
+
- 查看组件状态
|
|
345
|
+
|
|
346
|
+
### 后端调试
|
|
347
|
+
|
|
348
|
+
1. **查看服务器日志**
|
|
349
|
+
```
|
|
350
|
+
Koa 服务器已启动: http://localhost:8080
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
2. **测试 API**
|
|
354
|
+
```bash
|
|
355
|
+
curl http://localhost:8080/system/user/list
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
3. **使用 Postman**
|
|
359
|
+
- 导入 API 集合
|
|
360
|
+
- 测试各个端点
|
|
361
|
+
|
|
362
|
+
## 性能优化
|
|
363
|
+
|
|
364
|
+
### 前端优化
|
|
365
|
+
|
|
366
|
+
1. **代码分割**
|
|
367
|
+
```typescript
|
|
368
|
+
const User = lazy(() => import('./pages/system/user/User'));
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
2. **缓存策略**
|
|
372
|
+
```typescript
|
|
373
|
+
const cache = new Map();
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
3. **请求去重**
|
|
377
|
+
```typescript
|
|
378
|
+
const pending = new Map();
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### 后端优化
|
|
382
|
+
|
|
383
|
+
1. **数据库索引**
|
|
384
|
+
- 为常用查询字段添加索引
|
|
385
|
+
|
|
386
|
+
2. **缓存策略**
|
|
387
|
+
- 使用 Redis 缓存热数据
|
|
388
|
+
|
|
389
|
+
3. **分页加载**
|
|
390
|
+
- 实现分页和懒加载
|
|
391
|
+
|
|
392
|
+
## 部署指南
|
|
393
|
+
|
|
394
|
+
### 前端部署
|
|
395
|
+
|
|
396
|
+
1. **构建生产版本**
|
|
397
|
+
```bash
|
|
398
|
+
npm run build
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
2. **部署到服务器**
|
|
402
|
+
```bash
|
|
403
|
+
# 上传 dist 目录到服务器
|
|
404
|
+
scp -r dist/* user@server:/var/www/admin-system
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### 后端部署
|
|
408
|
+
|
|
409
|
+
1. **安装生产依赖**
|
|
410
|
+
```bash
|
|
411
|
+
cd koa-server
|
|
412
|
+
npm install --production
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
2. **使用 PM2 启动**
|
|
416
|
+
```bash
|
|
417
|
+
npm install -g pm2
|
|
418
|
+
pm2 start app.js --name admin-server
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
## 常见问题
|
|
422
|
+
|
|
423
|
+
### Q: 如何修改 API 地址?
|
|
424
|
+
A: 修改 `.env.development` 中的 `VITE_API_URL`
|
|
425
|
+
|
|
426
|
+
### Q: 如何添加新的 API?
|
|
427
|
+
A: 在 `src/api/` 目录下创建新文件,参考现有 API 的写法
|
|
428
|
+
|
|
429
|
+
### Q: 如何处理认证?
|
|
430
|
+
A: 在 `src/utils/request.tsx` 的请求拦截器中添加 token
|
|
431
|
+
|
|
432
|
+
### Q: 如何处理错误?
|
|
433
|
+
A: 在 `src/utils/request.tsx` 的响应拦截器中处理错误
|
|
434
|
+
|
|
435
|
+
## 下一步
|
|
436
|
+
|
|
437
|
+
1. **数据库集成**
|
|
438
|
+
- 连接 MongoDB 或 MySQL
|
|
439
|
+
- 实现数据持久化
|
|
440
|
+
|
|
441
|
+
2. **用户认证**
|
|
442
|
+
- 实现登录功能
|
|
443
|
+
- 添加 JWT 认证
|
|
444
|
+
|
|
445
|
+
3. **权限管理**
|
|
446
|
+
- 实现基于角色的访问控制
|
|
447
|
+
- 添加权限验证
|
|
448
|
+
|
|
449
|
+
4. **监控和日志**
|
|
450
|
+
- 添加操作日志
|
|
451
|
+
- 实现性能监控
|
|
452
|
+
|
|
453
|
+
## 支持
|
|
454
|
+
|
|
455
|
+
如有问题,请查看:
|
|
456
|
+
- 前端文档:`SYSTEM_MANAGEMENT.md`
|
|
457
|
+
- 后端文档:`koa-server/README.md`
|
|
458
|
+
- 启动指南:`START_ALL.md`
|