whistle.mock-plugins 1.3.1 → 1.4.0-beta.2
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/VERSION.md +29 -0
- package/app/cgi-bin/interfaces.js +2 -0
- package/app/cgi-bin/settings.js +1 -0
- package/app/cgi-bin/stats.js +22 -12
- package/app/cgi-bin/webdav.js +56 -0
- package/app/public/index.html +1 -1
- package/app/public/js/11.index.js +2 -0
- package/app/public/js/11.index.js.LICENSE.txt +5 -0
- package/app/public/js/704.index.js +2 -0
- package/app/public/js/704.index.js.LICENSE.txt +1 -0
- package/app/public/js/798.index.js +2 -0
- package/app/public/js/798.index.js.LICENSE.txt +53 -0
- package/app/public/js/807.index.js +2 -0
- package/app/public/js/807.index.js.LICENSE.txt +1 -0
- package/app/public/js/968.index.js +2 -0
- package/app/public/js/968.index.js.LICENSE.txt +12 -0
- package/app/public/js/index.js +1 -1
- package/app/public/js/index.js.LICENSE.txt +0 -173
- package/lib/routes/settings.js +1 -0
- package/lib/webdav-sync.js +806 -0
- package/package.json +9 -2
- package/API.md +0 -247
- package/COLUMN_RESIZE_IMPLEMENTATION.md +0 -162
- package/FEATURE_ENHANCEMENT.md +0 -157
- package/TEST_GUIDE.md +0 -156
- package/data/features.json +0 -1
- package/data/interfaces.json +0 -1
- package/index.html +0 -52
- package/initialize.js +0 -32
- package/public/bundle.js +0 -2
- package/public/bundle.js.LICENSE.txt +0 -38
- package/public/index.html +0 -1
- package/public/plugin.mock-plugin.html +0 -14
- package/rules.txt +0 -22
- package/ui/src/App.css +0 -173
- package/ui/src/components/AppLayout.js +0 -407
- package/ui/src/components/FeatureCard.js +0 -58
- package/ui/src/components/KeyboardShortcutsHelp.js +0 -58
- package/ui/src/components/Layout.js +0 -94
- package/ui/src/components/MainNav.js +0 -42
- package/ui/src/components/PageContainer.js +0 -16
- package/ui/src/components/VersionModal.js +0 -99
- package/ui/src/components/interface-management/DataManagementDrawer.js +0 -115
- package/ui/src/components/interface-management/DataManagementModal.js +0 -110
- package/ui/src/components/interface-management/InterfaceTestModal.js +0 -313
- package/ui/src/components/interface-management/PreviewModal.js +0 -48
- package/ui/src/components/interface-management/README.md +0 -184
- package/ui/src/components/interface-management/RealResponseRecorder.js +0 -165
- package/ui/src/components/interface-management/ResponseContentEditor.js +0 -645
- package/ui/src/components/interface-management/constants.js +0 -36
- package/ui/src/components/interface-management/index.js +0 -7
- package/ui/src/components/interface-management/utils.js +0 -103
- package/ui/src/hooks/useKeyboardShortcuts.js +0 -99
- package/ui/src/index.html +0 -14
- package/ui/src/index.js +0 -50
- package/ui/src/pages/InterfaceManagementV2.js +0 -2351
- package/ui/src/pages/MockDataV2.js +0 -1089
- package/ui/src/pages/Settings.js +0 -299
- package/ui/src/pages/Sniffer.js +0 -521
- package/ui/src/pages/Stats.js +0 -288
- package/ui/src/services/del_api.js +0 -192
- package/ui/src/styles/app-layout.css +0 -373
- package/ui/src/styles/cyber-theme.css +0 -1234
- package/ui/src/styles/earth-theme.css +0 -618
- package/ui/src/styles/global.css +0 -224
- package/ui/src/styles/interface-management.css +0 -1321
- package/ui/src/styles/mock-data.css +0 -1185
- package/ui/src/styles/settings.css +0 -252
- package/ui/src/styles/version-modal.css +0 -116
- package/webpack.config.js +0 -54
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "whistle.mock-plugins",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0-beta.2",
|
|
4
4
|
"description": "Whistle 插件,用于快速创建 API 模拟数据",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -51,5 +51,12 @@
|
|
|
51
51
|
"whistleConfig": {
|
|
52
52
|
"homepage": "https://github.com/yourusername/whistle.mock-plugin",
|
|
53
53
|
"name": "mock-plugin"
|
|
54
|
-
}
|
|
54
|
+
},
|
|
55
|
+
"files": [
|
|
56
|
+
"lib/",
|
|
57
|
+
"app/cgi-bin/",
|
|
58
|
+
"app/public/",
|
|
59
|
+
"VERSION.md",
|
|
60
|
+
"README.md"
|
|
61
|
+
]
|
|
55
62
|
}
|
package/API.md
DELETED
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
# whistle.mock-plugin API 文档
|
|
2
|
-
|
|
3
|
-
本文档描述了 whistle.mock-plugin 插件的 API 接口和数据模型。
|
|
4
|
-
|
|
5
|
-
## 数据模型
|
|
6
|
-
|
|
7
|
-
### 功能模块 (Feature)
|
|
8
|
-
|
|
9
|
-
功能模块是接口的分组,用于组织和管理相关的接口。
|
|
10
|
-
|
|
11
|
-
| 字段 | 类型 | 描述 |
|
|
12
|
-
| --- | --- | --- |
|
|
13
|
-
| id | string | 功能模块唯一标识符 |
|
|
14
|
-
| name | string | 功能模块名称 |
|
|
15
|
-
| description | string | 功能模块描述 |
|
|
16
|
-
| interfaceCount | number | 该功能模块下的接口数量 |
|
|
17
|
-
| active | boolean | 功能模块是否启用 |
|
|
18
|
-
| createdAt | string | 创建时间,ISO 字符串格式 |
|
|
19
|
-
| updatedAt | string | 最后更新时间,ISO 字符串格式 |
|
|
20
|
-
|
|
21
|
-
### 接口 (Interface)
|
|
22
|
-
|
|
23
|
-
接口定义了匹配规则和响应内容,用于模拟 API 响应。
|
|
24
|
-
|
|
25
|
-
| 字段 | 类型 | 描述 |
|
|
26
|
-
| --- | --- | --- |
|
|
27
|
-
| id | string | 接口唯一标识符 |
|
|
28
|
-
| featureId | string | 所属功能模块 ID |
|
|
29
|
-
| name | string | 接口名称 |
|
|
30
|
-
| urlPattern | string | URL 匹配规则,支持精确匹配、通配符和正则表达式 |
|
|
31
|
-
| proxyType | string | 代理类型,可选值: 'response'(数据模板), 'redirect'(URL重定向), 'file'(文件代理) |
|
|
32
|
-
| responseContent | string | 响应内容,使用 Mock.js 语法 |
|
|
33
|
-
| targetUrl | string | 重定向目标 URL,仅在 proxyType='redirect' 时有效 |
|
|
34
|
-
| filePath | string | 文件路径,仅在 proxyType='file' 时有效 |
|
|
35
|
-
| httpStatus | number | HTTP 状态码 |
|
|
36
|
-
| responseDelay | number | 响应延迟,单位毫秒 |
|
|
37
|
-
| httpMethod | string | HTTP 方法,可选值: 'GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS', 'ALL' |
|
|
38
|
-
| active | boolean | 接口是否启用 |
|
|
39
|
-
| contentType | string | 响应内容类型 |
|
|
40
|
-
| headers | object | 自定义响应头 |
|
|
41
|
-
| createdAt | string | 创建时间,ISO 字符串格式 |
|
|
42
|
-
| updatedAt | string | 最后更新时间,ISO 字符串格式 |
|
|
43
|
-
|
|
44
|
-
### API 响应 (ApiResponse)
|
|
45
|
-
|
|
46
|
-
所有 API 接口的标准响应格式。
|
|
47
|
-
|
|
48
|
-
| 字段 | 类型 | 描述 |
|
|
49
|
-
| --- | --- | --- |
|
|
50
|
-
| code | number | 状态码,0 表示成功,其他值表示错误 |
|
|
51
|
-
| message | string | 状态消息 |
|
|
52
|
-
| data | any | 响应数据,具体结构根据接口而定 |
|
|
53
|
-
|
|
54
|
-
## API 接口
|
|
55
|
-
|
|
56
|
-
### 功能模块
|
|
57
|
-
|
|
58
|
-
#### 获取所有功能模块
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
GET /cgi-bin/features
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
请求参数:无
|
|
65
|
-
|
|
66
|
-
响应示例:
|
|
67
|
-
|
|
68
|
-
```json
|
|
69
|
-
{
|
|
70
|
-
"code": 0,
|
|
71
|
-
"message": "成功",
|
|
72
|
-
"data": [
|
|
73
|
-
{
|
|
74
|
-
"id": "1",
|
|
75
|
-
"name": "用户管理",
|
|
76
|
-
"description": "用户相关接口",
|
|
77
|
-
"interfaceCount": 3,
|
|
78
|
-
"active": true,
|
|
79
|
-
"createdAt": "2023-01-01T00:00:00.000Z",
|
|
80
|
-
"updatedAt": "2023-01-01T00:00:00.000Z"
|
|
81
|
-
}
|
|
82
|
-
]
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
#### 获取指定功能模块的接口列表
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
GET /cgi-bin/interfaces?featureId={featureId}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
请求参数:
|
|
93
|
-
|
|
94
|
-
| 参数 | 类型 | 必填 | 描述 |
|
|
95
|
-
| --- | --- | --- | --- |
|
|
96
|
-
| featureId | string | 是 | 功能模块 ID |
|
|
97
|
-
|
|
98
|
-
响应示例:
|
|
99
|
-
|
|
100
|
-
```json
|
|
101
|
-
{
|
|
102
|
-
"code": 0,
|
|
103
|
-
"message": "成功",
|
|
104
|
-
"data": [
|
|
105
|
-
{
|
|
106
|
-
"id": "1",
|
|
107
|
-
"featureId": "1",
|
|
108
|
-
"name": "获取用户信息",
|
|
109
|
-
"urlPattern": "/api/users/*",
|
|
110
|
-
"proxyType": "response",
|
|
111
|
-
"responseContent": "{\"code\":0,\"data\":{\"id\":1,\"name\":\"test\"}}",
|
|
112
|
-
"httpStatus": 200,
|
|
113
|
-
"contentType": "application/json; charset=utf-8",
|
|
114
|
-
"active": true
|
|
115
|
-
}
|
|
116
|
-
]
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### 接口
|
|
121
|
-
|
|
122
|
-
#### 创建接口
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
POST /cgi-bin/interfaces
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
请求参数:
|
|
129
|
-
|
|
130
|
-
| 参数 | 类型 | 必填 | 描述 |
|
|
131
|
-
| --- | --- | --- | --- |
|
|
132
|
-
| name | string | 是 | 接口名称 |
|
|
133
|
-
| featureId | string | 是 | 功能模块 ID |
|
|
134
|
-
| urlPattern | string | 是 | URL 匹配规则 |
|
|
135
|
-
| proxyType | string | 否 | 代理类型,默认 'response' |
|
|
136
|
-
| responseContent | string | 否 | 响应内容 |
|
|
137
|
-
| httpStatus | number | 否 | HTTP 状态码,默认 200 |
|
|
138
|
-
| contentType | string | 否 | 响应内容类型 |
|
|
139
|
-
| active | boolean | 否 | 是否启用,默认 true |
|
|
140
|
-
|
|
141
|
-
响应示例:
|
|
142
|
-
|
|
143
|
-
```json
|
|
144
|
-
{
|
|
145
|
-
"code": 0,
|
|
146
|
-
"message": "接口创建成功",
|
|
147
|
-
"data": {
|
|
148
|
-
"id": "1",
|
|
149
|
-
"featureId": "1",
|
|
150
|
-
"name": "获取用户信息",
|
|
151
|
-
"urlPattern": "/api/users/*",
|
|
152
|
-
"proxyType": "response",
|
|
153
|
-
"responseContent": "{\"code\":0,\"data\":{\"id\":1,\"name\":\"test\"}}",
|
|
154
|
-
"httpStatus": 200,
|
|
155
|
-
"contentType": "application/json; charset=utf-8",
|
|
156
|
-
"active": true
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
#### 更新接口
|
|
162
|
-
|
|
163
|
-
```
|
|
164
|
-
PUT /cgi-bin/interfaces?id={id}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
请求参数:
|
|
168
|
-
|
|
169
|
-
| 参数 | 类型 | 必填 | 描述 |
|
|
170
|
-
| --- | --- | --- | --- |
|
|
171
|
-
| id | string | 是 | 接口 ID (URL参数) |
|
|
172
|
-
| name | string | 否 | 接口名称 |
|
|
173
|
-
| urlPattern | string | 否 | URL 匹配规则 |
|
|
174
|
-
| proxyType | string | 否 | 代理类型 |
|
|
175
|
-
| responseContent | string | 否 | 响应内容 |
|
|
176
|
-
| httpStatus | number | 否 | HTTP 状态码 |
|
|
177
|
-
| contentType | string | 否 | 响应内容类型 |
|
|
178
|
-
| active | boolean | 否 | 是否启用 |
|
|
179
|
-
|
|
180
|
-
响应示例:
|
|
181
|
-
|
|
182
|
-
```json
|
|
183
|
-
{
|
|
184
|
-
"code": 0,
|
|
185
|
-
"message": "接口更新成功",
|
|
186
|
-
"data": {
|
|
187
|
-
"id": "1",
|
|
188
|
-
"featureId": "1",
|
|
189
|
-
"name": "获取用户信息",
|
|
190
|
-
"urlPattern": "/api/users/*",
|
|
191
|
-
"proxyType": "response",
|
|
192
|
-
"responseContent": "{\"code\":0,\"data\":{\"id\":1,\"name\":\"updated\"}}",
|
|
193
|
-
"httpStatus": 200,
|
|
194
|
-
"contentType": "application/json; charset=utf-8",
|
|
195
|
-
"active": true
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
#### 删除接口
|
|
201
|
-
|
|
202
|
-
```
|
|
203
|
-
DELETE /cgi-bin/interfaces?id={id}
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
请求参数:
|
|
207
|
-
|
|
208
|
-
| 参数 | 类型 | 必填 | 描述 |
|
|
209
|
-
| --- | --- | --- | --- |
|
|
210
|
-
| id | string | 是 | 接口 ID (URL参数) |
|
|
211
|
-
|
|
212
|
-
响应示例:
|
|
213
|
-
|
|
214
|
-
```json
|
|
215
|
-
{
|
|
216
|
-
"code": 0,
|
|
217
|
-
"message": "接口删除成功",
|
|
218
|
-
"data": null
|
|
219
|
-
}
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
#### 测试接口
|
|
223
|
-
|
|
224
|
-
```
|
|
225
|
-
POST /cgi-bin/test-interface
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
请求参数:
|
|
229
|
-
|
|
230
|
-
| 参数 | 类型 | 必填 | 描述 |
|
|
231
|
-
| --- | --- | --- | --- |
|
|
232
|
-
| url | string | 是 | 测试 URL |
|
|
233
|
-
| interfaceId | string | 是 | 接口 ID |
|
|
234
|
-
|
|
235
|
-
响应示例:
|
|
236
|
-
|
|
237
|
-
```json
|
|
238
|
-
{
|
|
239
|
-
"code": 0,
|
|
240
|
-
"message": "成功",
|
|
241
|
-
"data": {
|
|
242
|
-
"statusCode": 200,
|
|
243
|
-
"contentType": "application/json; charset=utf-8",
|
|
244
|
-
"responseBody": "{\"code\":0,\"data\":{\"id\":1,\"name\":\"test\"}}"
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
```
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
# 列宽拖动调整功能实现说明
|
|
2
|
-
|
|
3
|
-
## 实现日期
|
|
4
|
-
2025-11-06
|
|
5
|
-
|
|
6
|
-
## 功能概述
|
|
7
|
-
为接口管理页面的"当前响应"列添加了拖动调整宽度的功能,列内的下拉框(Select)会自动根据列宽进行自适应。
|
|
8
|
-
|
|
9
|
-
## 技术方案
|
|
10
|
-
使用 Ant Design + react-resizable 的组合方案实现列宽拖动调整。
|
|
11
|
-
|
|
12
|
-
## 修改文件清单
|
|
13
|
-
|
|
14
|
-
### 1. package.json
|
|
15
|
-
**修改内容:**
|
|
16
|
-
- 添加 `react-resizable: ^3.0.5` 依赖到 devDependencies
|
|
17
|
-
|
|
18
|
-
**位置:** 第42行
|
|
19
|
-
|
|
20
|
-
### 2. InterfaceManagementV2.js
|
|
21
|
-
**修改内容:**
|
|
22
|
-
|
|
23
|
-
#### 2.1 导入模块(第18-19行)
|
|
24
|
-
```javascript
|
|
25
|
-
import { Resizable } from 'react-resizable';
|
|
26
|
-
import 'react-resizable/css/styles.css';
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
#### 2.2 扩展 tableConfig 状态(第98-123行)
|
|
30
|
-
- 添加 `columnWidths` 字段到状态中
|
|
31
|
-
- 为"当前响应"列设置默认宽度 180px
|
|
32
|
-
- 添加兼容性处理,确保旧缓存数据能正确加载
|
|
33
|
-
|
|
34
|
-
#### 2.3 创建 ResizableTitle 组件(第714-740行)
|
|
35
|
-
- 封装可调整大小的表头组件
|
|
36
|
-
- 集成 react-resizable 的 Resizable 组件
|
|
37
|
-
- 添加拖动手柄和事件处理
|
|
38
|
-
|
|
39
|
-
#### 2.4 创建 handleResize 函数(第742-749行)
|
|
40
|
-
- 处理列宽调整事件
|
|
41
|
-
- 更新 tableConfig.columnWidths
|
|
42
|
-
- 自动保存到 localStorage
|
|
43
|
-
|
|
44
|
-
#### 2.5 修改"当前响应"列配置(第844-881行)
|
|
45
|
-
- 将固定宽度改为动态读取:`tableConfig.columnWidths?.currentResponse || 180`
|
|
46
|
-
- 添加 `onHeaderCell` 属性,配置可调整大小的表头
|
|
47
|
-
- 为 Select 组件添加 `getPopupContainer` 属性,确保下拉菜单正确定位
|
|
48
|
-
|
|
49
|
-
#### 2.6 修改 Table 组件(第1383-1387行)
|
|
50
|
-
- 添加 `components` 属性
|
|
51
|
-
- 配置自定义表头组件:`{ header: { cell: ResizableTitle } }`
|
|
52
|
-
|
|
53
|
-
#### 2.7 更新 handleResetColumns 函数(第680-689行)
|
|
54
|
-
- 重置列配置时同时重置列宽到默认值 180px
|
|
55
|
-
|
|
56
|
-
### 3. interface-management.css
|
|
57
|
-
**修改内容:**
|
|
58
|
-
|
|
59
|
-
添加拖动手柄样式(第1287-1321行):
|
|
60
|
-
- `.react-resizable` - 可调整大小容器的基础样式
|
|
61
|
-
- `.react-resizable-handle` - 拖动手柄的样式和定位
|
|
62
|
-
- `.react-resizable-handle:hover` - 悬停时的视觉反馈
|
|
63
|
-
- `.react-resizable-handle::after` - 拖动指示线的样式
|
|
64
|
-
|
|
65
|
-
## 功能特性
|
|
66
|
-
|
|
67
|
-
### 1. 列宽拖动
|
|
68
|
-
- 鼠标悬停在"当前响应"列的右边缘时,光标变为调整大小的图标
|
|
69
|
-
- 拖动边缘可以调整列宽
|
|
70
|
-
- 拖动时有视觉反馈(蓝色高亮)
|
|
71
|
-
|
|
72
|
-
### 2. 自动保存
|
|
73
|
-
- 调整后的列宽自动保存到 localStorage
|
|
74
|
-
- 页面刷新后保持用户设置的列宽
|
|
75
|
-
|
|
76
|
-
### 3. Select 自适应
|
|
77
|
-
- 列内的下拉框宽度设置为 100%
|
|
78
|
-
- 随列宽变化自动调整
|
|
79
|
-
- 下拉菜单正确定位,不会超出容器
|
|
80
|
-
|
|
81
|
-
### 4. 重置功能
|
|
82
|
-
- 点击"重置"按钮可以恢复默认列宽(180px)
|
|
83
|
-
|
|
84
|
-
### 5. 兼容性处理
|
|
85
|
-
- 兼容旧版本的缓存数据
|
|
86
|
-
- 如果缓存中没有 columnWidths,自动初始化为默认值
|
|
87
|
-
|
|
88
|
-
## 使用说明
|
|
89
|
-
|
|
90
|
-
### 安装依赖
|
|
91
|
-
```bash
|
|
92
|
-
cd whistle.mock-plugin
|
|
93
|
-
npm install
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### 构建项目
|
|
97
|
-
```bash
|
|
98
|
-
npm run build
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### 测试功能
|
|
102
|
-
1. 启动 whistle 服务
|
|
103
|
-
2. 打开接口管理页面
|
|
104
|
-
3. 找到"当前响应"列
|
|
105
|
-
4. 将鼠标移动到列标题的右边缘
|
|
106
|
-
5. 当光标变为调整大小图标时,拖动调整列宽
|
|
107
|
-
6. 刷新页面,验证列宽是否保持
|
|
108
|
-
|
|
109
|
-
## 技术细节
|
|
110
|
-
|
|
111
|
-
### 最小/最大宽度
|
|
112
|
-
当前实现没有设置硬性的最小/最大宽度限制,但可以通过以下方式添加:
|
|
113
|
-
|
|
114
|
-
```javascript
|
|
115
|
-
onResize: (e, { size }) => {
|
|
116
|
-
const minWidth = 120;
|
|
117
|
-
const maxWidth = 400;
|
|
118
|
-
const newWidth = Math.max(minWidth, Math.min(maxWidth, size.width));
|
|
119
|
-
// 更新列宽...
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### 扩展到其他列
|
|
124
|
-
如果需要为其他列也添加拖动调整功能:
|
|
125
|
-
|
|
126
|
-
1. 在 `tableConfig.columnWidths` 中添加对应列的默认宽度
|
|
127
|
-
2. 在列配置中添加 `onHeaderCell` 属性
|
|
128
|
-
3. 使用动态宽度替代固定宽度
|
|
129
|
-
|
|
130
|
-
示例:
|
|
131
|
-
```javascript
|
|
132
|
-
{
|
|
133
|
-
title: '延迟(毫秒)',
|
|
134
|
-
key: 'responseDelay',
|
|
135
|
-
width: tableConfig.columnWidths?.responseDelay || 100,
|
|
136
|
-
onHeaderCell: (column) => ({
|
|
137
|
-
width: column.width,
|
|
138
|
-
onResize: handleResize('responseDelay'),
|
|
139
|
-
}),
|
|
140
|
-
// ...
|
|
141
|
-
}
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## 注意事项
|
|
145
|
-
|
|
146
|
-
1. **性能考虑**:拖动时会频繁更新状态和 localStorage,对于大量数据的表格可能需要添加防抖处理
|
|
147
|
-
2. **浏览器兼容性**:react-resizable 依赖现代浏览器的 API,IE11 可能需要 polyfill
|
|
148
|
-
3. **移动端支持**:当前实现主要针对桌面端,移动端的触摸拖动可能需要额外配置
|
|
149
|
-
|
|
150
|
-
## 后续优化建议
|
|
151
|
-
|
|
152
|
-
1. 添加最小/最大宽度限制,防止列宽过小或过大
|
|
153
|
-
2. 为拖动操作添加防抖,减少状态更新频率
|
|
154
|
-
3. 支持双击列边缘自动调整到最适宽度
|
|
155
|
-
4. 支持更多列的宽度调整
|
|
156
|
-
5. 添加"恢复默认列宽"的快捷按钮
|
|
157
|
-
|
|
158
|
-
## 相关文档
|
|
159
|
-
|
|
160
|
-
- [react-resizable 官方文档](https://github.com/react-grid-layout/react-resizable)
|
|
161
|
-
- [Ant Design Table 可调整列宽示例](https://ant.design/components/table-cn#components-table-demo-resizable-column)
|
|
162
|
-
|
package/FEATURE_ENHANCEMENT.md
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
# 前端表格和列表功能增强
|
|
2
|
-
|
|
3
|
-
本次更新为whistle mock插件的前端界面添加了表格排序、分页大小选择和前端缓存功能。
|
|
4
|
-
|
|
5
|
-
## 🆕 新增功能
|
|
6
|
-
|
|
7
|
-
### 1. 接口管理页面 (InterfaceManagement.js)
|
|
8
|
-
|
|
9
|
-
#### 表格列排序功能
|
|
10
|
-
- **支持的排序列**:
|
|
11
|
-
- 状态 (active) - 启用优先/禁用优先
|
|
12
|
-
- 名称 (name) - 中文字母排序
|
|
13
|
-
- URL匹配规则 (urlPattern) - 字母排序
|
|
14
|
-
- 处理方式 (proxyType) - 字母排序
|
|
15
|
-
- 状态码 (httpStatus) - 数值排序
|
|
16
|
-
- 内容类型 (contentType) - 字母排序
|
|
17
|
-
- 目标URL (targetUrl) - 字母排序
|
|
18
|
-
- 自定义头 (customHeaders) - 按数量排序
|
|
19
|
-
- 请求方法 (httpMethod) - 字母排序
|
|
20
|
-
|
|
21
|
-
- **排序特性**:
|
|
22
|
-
- 支持升序/降序两个方向
|
|
23
|
-
- 点击列标题进行排序
|
|
24
|
-
- 排序状态有视觉指示器
|
|
25
|
-
- 智能处理空值和特殊字符
|
|
26
|
-
|
|
27
|
-
#### 分页功能增强
|
|
28
|
-
- **可选择每页显示数量**:10、20、50、100 条
|
|
29
|
-
- **分页信息显示**:显示当前页范围和总数
|
|
30
|
-
- **快速跳转**:支持直接跳转到指定页面
|
|
31
|
-
- **智能分页**:切换功能模块时自动重置到第一页
|
|
32
|
-
|
|
33
|
-
#### 前端缓存
|
|
34
|
-
- **缓存内容**:
|
|
35
|
-
- 当前排序字段和顺序
|
|
36
|
-
- 每页显示数量
|
|
37
|
-
- 当前页码
|
|
38
|
-
- **缓存键**:`interface-table-config`
|
|
39
|
-
- **自动恢复**:页面刷新后自动恢复上次的表格状态
|
|
40
|
-
|
|
41
|
-
#### 状态栏显示
|
|
42
|
-
- 显示当前功能模块名称
|
|
43
|
-
- 显示接口总数和分页信息
|
|
44
|
-
- 显示当前排序状态
|
|
45
|
-
|
|
46
|
-
### 2. 功能模块管理页面 (MockData.js)
|
|
47
|
-
|
|
48
|
-
#### 卡片列表排序功能
|
|
49
|
-
- **支持的排序字段**:
|
|
50
|
-
- 名称 (name) - 中文字母排序
|
|
51
|
-
- 创建时间 (createdAt) - 时间排序
|
|
52
|
-
- 接口数量 (interfaceCount) - 数值排序
|
|
53
|
-
- 状态 (active) - 启用/禁用排序
|
|
54
|
-
|
|
55
|
-
- **排序控制器**:
|
|
56
|
-
- 下拉选择排序字段
|
|
57
|
-
- 下拉选择排序方向(升序/降序)
|
|
58
|
-
- 实时排序,无需刷新页面
|
|
59
|
-
|
|
60
|
-
#### 分页功能
|
|
61
|
-
- **可选择每页显示数量**:8、12、16、24 个卡片
|
|
62
|
-
- **分页组件**:
|
|
63
|
-
- 页码导航
|
|
64
|
-
- 快速跳转
|
|
65
|
-
- 每页大小选择器
|
|
66
|
-
- 总数统计显示
|
|
67
|
-
|
|
68
|
-
#### 前端缓存
|
|
69
|
-
- **缓存内容**:
|
|
70
|
-
- 排序字段和顺序
|
|
71
|
-
- 每页显示数量
|
|
72
|
-
- 当前页码
|
|
73
|
-
- **缓存键**:`feature-list-config`
|
|
74
|
-
- **状态持久化**:所有设置在页面刷新后保持不变
|
|
75
|
-
|
|
76
|
-
#### 控制栏设计
|
|
77
|
-
- **排序区域**:左侧显示排序选项
|
|
78
|
-
- **分页区域**:右侧显示分页大小和总数
|
|
79
|
-
- **响应式设计**:在小屏幕上自动换行
|
|
80
|
-
|
|
81
|
-
## 🛠️ 技术实现
|
|
82
|
-
|
|
83
|
-
### 缓存机制
|
|
84
|
-
```javascript
|
|
85
|
-
// 读取缓存配置
|
|
86
|
-
const [tableConfig, setTableConfig] = useState(() => {
|
|
87
|
-
const cached = localStorage.getItem('interface-table-config');
|
|
88
|
-
return cached ? JSON.parse(cached) : defaultConfig;
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
// 保存配置到缓存
|
|
92
|
-
const saveTableConfig = (config) => {
|
|
93
|
-
const newConfig = { ...tableConfig, ...config };
|
|
94
|
-
setTableConfig(newConfig);
|
|
95
|
-
localStorage.setItem('interface-table-config', JSON.stringify(newConfig));
|
|
96
|
-
};
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### 排序算法
|
|
100
|
-
- **字符串排序**:使用 `localeCompare` 支持中文排序
|
|
101
|
-
- **数值排序**:使用数值比较,处理空值情况
|
|
102
|
-
- **时间排序**:转换为时间戳进行比较
|
|
103
|
-
- **布尔值排序**:转换为数值进行比较
|
|
104
|
-
|
|
105
|
-
### 分页逻辑
|
|
106
|
-
```javascript
|
|
107
|
-
// 获取分页数据
|
|
108
|
-
const getPaginatedData = () => {
|
|
109
|
-
const sortedData = getSortedData();
|
|
110
|
-
const startIndex = (current - 1) * pageSize;
|
|
111
|
-
const endIndex = startIndex + pageSize;
|
|
112
|
-
return sortedData.slice(startIndex, endIndex);
|
|
113
|
-
};
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
## 🎯 用户体验优化
|
|
117
|
-
|
|
118
|
-
### 视觉反馈
|
|
119
|
-
- 排序状态有明确的图标指示
|
|
120
|
-
- 分页信息清晰显示当前状态
|
|
121
|
-
- 控制栏使用浅色背景区分
|
|
122
|
-
|
|
123
|
-
### 操作便捷性
|
|
124
|
-
- 点击列标题即可排序
|
|
125
|
-
- 分页大小选择器支持快速切换
|
|
126
|
-
- 状态信息实时更新
|
|
127
|
-
|
|
128
|
-
### 性能优化
|
|
129
|
-
- localStorage缓存减少重复配置
|
|
130
|
-
- 智能的默认值设置
|
|
131
|
-
- 分页减少DOM渲染压力
|
|
132
|
-
|
|
133
|
-
## 📋 使用说明
|
|
134
|
-
|
|
135
|
-
### 接口管理页面
|
|
136
|
-
1. **排序**:点击表格列标题进行排序,再次点击切换排序方向
|
|
137
|
-
2. **分页**:使用表格底部的分页控件调整每页显示数量和切换页面
|
|
138
|
-
3. **状态查看**:在列表上方的状态栏查看当前排序和分页信息
|
|
139
|
-
|
|
140
|
-
### 功能模块管理页面
|
|
141
|
-
1. **排序**:使用控制栏左侧的下拉菜单选择排序字段和方向
|
|
142
|
-
2. **分页**:使用控制栏右侧的下拉菜单调整每页显示数量
|
|
143
|
-
3. **导航**:使用底部分页组件进行页面切换
|
|
144
|
-
|
|
145
|
-
## 🔧 配置说明
|
|
146
|
-
|
|
147
|
-
### 默认配置
|
|
148
|
-
- **接口表格**:每页10条,按名称升序排序
|
|
149
|
-
- **功能模块**:每页12个,按名称升序排序
|
|
150
|
-
- **缓存时效**:永久保存直到手动清除
|
|
151
|
-
|
|
152
|
-
### 自定义选项
|
|
153
|
-
- 分页大小可根据需要调整
|
|
154
|
-
- 排序字段可扩展
|
|
155
|
-
- 缓存策略可配置
|
|
156
|
-
|
|
157
|
-
这些功能大大提升了用户在管理大量接口和功能模块时的效率,提供了更好的用户体验。
|