whistle.mock-plugins 1.1.1-beta.3 → 1.1.1-beta.4
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/FEATURE_ENHANCEMENT.md +157 -0
- package/README.md +211 -63
- package/app/public/js/index.js +1 -1
- package/app/public/js/index.js.LICENSE.txt +2 -0
- package/package.json +1 -1
- package/ui/src/pages/InterfaceManagement.js +119 -1
- package/ui/src/pages/MockData.js +170 -5
|
@@ -0,0 +1,157 @@
|
|
|
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
|
+
这些功能大大提升了用户在管理大量接口和功能模块时的效率,提供了更好的用户体验。
|
package/README.md
CHANGED
|
@@ -1,91 +1,239 @@
|
|
|
1
1
|
# Whistle Mock Plugin
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
一个功能强大的Whistle接口Mock插件,提供完整的API接口模拟解决方案,支持多响应管理、智能参数匹配、灵活代理配置等高级功能。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 🚀 核心功能特性
|
|
6
6
|
|
|
7
7
|
### 1. 功能模块管理
|
|
8
|
+
- **模块化组织**:将相关接口按功能模块分组管理
|
|
9
|
+
- **批量控制**:一键启用/禁用整个功能模块
|
|
10
|
+
- **描述信息**:为每个模块添加详细说明和标签
|
|
11
|
+
- **状态统计**:实时显示模块下接口数量和启用状态
|
|
12
|
+
|
|
13
|
+
### 2. 多响应管理 ⭐ 核心特性
|
|
14
|
+
- **多响应支持**:每个接口可配置多个不同的响应内容
|
|
15
|
+
- **响应切换**:可随时切换不同的响应场景
|
|
16
|
+
- **响应描述**:为每个响应添加名称和详细描述
|
|
17
|
+
- **内容预览**:支持JSON格式化预览和编辑
|
|
18
|
+
- **向下兼容**:完全兼容单响应模式的历史配置
|
|
19
|
+
|
|
20
|
+
### 3. 智能接口匹配
|
|
21
|
+
- **多种匹配模式**:
|
|
22
|
+
- 精确匹配:完全匹配URL路径
|
|
23
|
+
- 通配符匹配:支持 `*` 通配符模式
|
|
24
|
+
- 正则表达式:支持复杂的URL匹配规则
|
|
25
|
+
- **HTTP方法过滤**:支持GET、POST、PUT、DELETE等方法筛选
|
|
26
|
+
- **参数匹配**:支持query参数、body参数的智能匹配
|
|
27
|
+
- **匹配优先级**:精确匹配优先,正则匹配兜底
|
|
28
|
+
|
|
29
|
+
### 4. 代理模式支持
|
|
30
|
+
- **响应模式**:直接返回配置的JSON/HTML响应内容
|
|
31
|
+
- **文件代理**:返回本地文件内容作为响应
|
|
32
|
+
- **URL重定向**:将请求转发到指定的目标URL
|
|
33
|
+
- **参数保留**:重定向时可选择保留原始请求参数
|
|
34
|
+
|
|
35
|
+
### 5. Mock.js 集成
|
|
36
|
+
- **动态数据生成**:集成Mock.js库,支持动态数据生成
|
|
37
|
+
- **模板语法**:支持Mock.js的所有数据模板语法
|
|
38
|
+
- **随机数据**:自动生成随机的姓名、地址、图片等数据
|
|
39
|
+
- **数据类型**:支持字符串、数字、布尔值、数组、对象等所有数据类型
|
|
40
|
+
|
|
41
|
+
### 6. 高级配置选项
|
|
42
|
+
- **响应延迟**:模拟网络延迟,设置响应时间
|
|
43
|
+
- **HTTP状态码**:自定义返回状态码(200、404、500等)
|
|
44
|
+
- **响应头设置**:配置Content-Type、CORS等响应头
|
|
45
|
+
- **请求日志**:详细记录所有匹配的请求信息
|
|
46
|
+
|
|
47
|
+
### 7. 用户界面特性
|
|
48
|
+
- **现代化UI**:基于Ant Design的美观界面
|
|
49
|
+
- **响应式设计**:适配不同屏幕尺寸
|
|
50
|
+
- **实时预览**:JSON内容格式化显示
|
|
51
|
+
- **快速操作**:支持快捷键和批量操作
|
|
52
|
+
- **搜索过滤**:快速查找接口和功能模块
|
|
53
|
+
|
|
54
|
+
## 📋 使用场景
|
|
55
|
+
|
|
56
|
+
### 开发阶段
|
|
57
|
+
- **前后端分离开发**:前端独立开发,不依赖后端接口
|
|
58
|
+
- **接口设计验证**:快速验证接口设计的合理性
|
|
59
|
+
- **并行开发**:前后端团队并行开发,提高效率
|
|
60
|
+
|
|
61
|
+
### 测试阶段
|
|
62
|
+
- **边界测试**:模拟各种异常状态和边界数据
|
|
63
|
+
- **压力测试**:模拟高延迟、超时等网络状况
|
|
64
|
+
- **错误场景**:测试错误处理逻辑和用户体验
|
|
65
|
+
|
|
66
|
+
### 演示阶段
|
|
67
|
+
- **客户演示**:构建稳定的演示环境
|
|
68
|
+
- **功能展示**:展示不同的业务场景和数据状态
|
|
69
|
+
- **原型验证**:快速搭建原型进行需求验证
|
|
70
|
+
|
|
71
|
+
## 🏗️ 项目架构
|
|
8
72
|
|
|
9
|
-
|
|
10
|
-
-
|
|
11
|
-
|
|
73
|
+
```
|
|
74
|
+
whistle.mock-plugin/
|
|
75
|
+
├── lib/ # 核心业务逻辑
|
|
76
|
+
│ ├── models.js # 数据模型定义
|
|
77
|
+
│ ├── ruleManager.js # 规则匹配引擎
|
|
78
|
+
│ └── routes/ # API路由
|
|
79
|
+
│ ├── features.js # 功能模块管理
|
|
80
|
+
│ └── interfaces.js # 接口管理
|
|
81
|
+
├── ui/ # 前端界面
|
|
82
|
+
│ ├── src/
|
|
83
|
+
│ │ ├── components/ # 通用组件
|
|
84
|
+
│ │ ├── pages/ # 页面组件
|
|
85
|
+
│ │ │ ├── Home.js # 首页
|
|
86
|
+
│ │ │ ├── FeatureManagement.js # 功能模块管理
|
|
87
|
+
│ │ │ └── InterfaceManagement.js # 接口管理
|
|
88
|
+
│ │ └── utils/ # 工具函数
|
|
89
|
+
│ └── public/ # 静态资源
|
|
90
|
+
├── app/ # Whistle插件入口
|
|
91
|
+
│ └── index.js # 插件主文件
|
|
92
|
+
├── test/ # 测试文件
|
|
93
|
+
├── package.json # 项目依赖
|
|
94
|
+
└── README.md # 项目文档
|
|
95
|
+
```
|
|
12
96
|
|
|
13
|
-
|
|
97
|
+
## 🔧 安装和使用
|
|
14
98
|
|
|
15
|
-
|
|
99
|
+
### 1. 安装插件
|
|
100
|
+
```bash
|
|
101
|
+
# 通过npm安装
|
|
102
|
+
npm install whistle.mock-plugin -g
|
|
16
103
|
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
104
|
+
# 或通过yarn安装
|
|
105
|
+
yarn global add whistle.mock-plugin
|
|
106
|
+
```
|
|
20
107
|
|
|
21
|
-
###
|
|
108
|
+
### 2. 启动Whistle
|
|
109
|
+
```bash
|
|
110
|
+
# 启动whistle
|
|
111
|
+
w2 start
|
|
22
112
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
113
|
+
# 打开whistle管理界面
|
|
114
|
+
# 访问 http://localhost:8899
|
|
115
|
+
```
|
|
26
116
|
|
|
27
|
-
###
|
|
117
|
+
### 3. 配置插件
|
|
118
|
+
1. 在Whistle管理界面中进入"Plugins"页面
|
|
119
|
+
2. 找到"mock-plugin"并启用
|
|
120
|
+
3. 点击插件名称进入管理界面
|
|
121
|
+
|
|
122
|
+
### 4. 基本使用
|
|
123
|
+
1. **创建功能模块**:点击"添加功能模块"创建一个新的模块
|
|
124
|
+
2. **添加接口**:在功能模块中添加需要Mock的接口
|
|
125
|
+
3. **配置响应**:为接口添加多个响应内容
|
|
126
|
+
4. **启用代理**:启用功能模块和接口,开始拦截请求
|
|
127
|
+
|
|
128
|
+
## 📝 配置示例
|
|
129
|
+
|
|
130
|
+
### 基本接口配置
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"name": "用户信息接口",
|
|
134
|
+
"urlPattern": "/api/user/info",
|
|
135
|
+
"method": "GET",
|
|
136
|
+
"responses": [
|
|
137
|
+
{
|
|
138
|
+
"id": "success",
|
|
139
|
+
"name": "成功响应",
|
|
140
|
+
"description": "正常返回用户信息",
|
|
141
|
+
"content": {
|
|
142
|
+
"code": 200,
|
|
143
|
+
"data": {
|
|
144
|
+
"id": "@integer(10000, 99999)",
|
|
145
|
+
"name": "@cname",
|
|
146
|
+
"email": "@email",
|
|
147
|
+
"avatar": "@image('200x200')"
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"id": "error",
|
|
153
|
+
"name": "错误响应",
|
|
154
|
+
"description": "用户不存在的情况",
|
|
155
|
+
"content": {
|
|
156
|
+
"code": 404,
|
|
157
|
+
"message": "用户不存在"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
```
|
|
28
163
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
164
|
+
### 通配符匹配配置
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"name": "文件下载接口",
|
|
168
|
+
"urlPattern": "/api/files/*",
|
|
169
|
+
"method": "GET",
|
|
170
|
+
"proxyType": "redirect",
|
|
171
|
+
"targetUrl": "https://cdn.example.com/files/",
|
|
172
|
+
"preserveParams": true
|
|
173
|
+
}
|
|
174
|
+
```
|
|
32
175
|
|
|
33
|
-
##
|
|
176
|
+
## 🔄 版本更新记录
|
|
34
177
|
|
|
35
|
-
1.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
178
|
+
### v1.1.0
|
|
179
|
+
#### 🆕 新增功能
|
|
180
|
+
- **多响应管理系统**:每个接口支持配置多个不同的响应内容
|
|
181
|
+
- **响应切换功能**:可在多个响应之间快速切换,便于测试不同场景
|
|
182
|
+
- **响应描述系统**:为每个响应添加名称和详细描述
|
|
183
|
+
- **JSON格式化预览**:响应内容支持JSON格式化显示和编辑
|
|
184
|
+
- **响应管理界面**:全新的响应管理卡片式界面
|
|
39
185
|
|
|
40
|
-
|
|
186
|
+
#### 🔧 优化改进
|
|
187
|
+
- **接口匹配引擎重构**:大幅简化匹配逻辑,提升匹配性能
|
|
188
|
+
- **正则表达式缓存**:避免重复编译正则表达式,提升匹配效率
|
|
189
|
+
- **向下兼容性**:完全兼容旧版本的单响应配置格式
|
|
190
|
+
- **错误处理增强**:完善错误日志记录和异常处理机制
|
|
191
|
+
- **代码简化**:移除复杂的参数匹配功能,专注核心URL匹配
|
|
41
192
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
├── ui/ # 插件UI源代码
|
|
48
|
-
│ ├── src/ # React源代码
|
|
49
|
-
│ ├── package.json # UI依赖配置
|
|
50
|
-
│ └── webpack.config.js # 构建配置
|
|
51
|
-
├── package.json # 插件依赖配置
|
|
52
|
-
└── README.md # 项目说明文档
|
|
53
|
-
```
|
|
193
|
+
#### 🐛 问题修复
|
|
194
|
+
- 修复响应内容保存不生效的问题
|
|
195
|
+
- 修复接口启用状态显示异常的问题
|
|
196
|
+
- 修复正则表达式匹配失效的问题
|
|
197
|
+
- 修复重定向功能参数丢失的问题
|
|
54
198
|
|
|
55
|
-
|
|
199
|
+
#### 🗑️ 移除功能
|
|
200
|
+
- 移除复杂的参数匹配功能(paramMatchers)
|
|
201
|
+
- 移除代理类型区分逻辑
|
|
202
|
+
- 移除模拟请求功能,简化为直接重定向
|
|
56
203
|
|
|
57
|
-
### 1. 首页/概览
|
|
58
204
|
|
|
59
|
-
|
|
60
|
-
- 快速入门指南和使用提示
|
|
61
|
-
- 最近活动记录
|
|
205
|
+
## 🤝 贡献指南
|
|
62
206
|
|
|
63
|
-
|
|
207
|
+
欢迎提交Issue和Pull Request来帮助改进这个项目!
|
|
64
208
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
-
|
|
209
|
+
### 开发环境搭建
|
|
210
|
+
```bash
|
|
211
|
+
# 克隆项目
|
|
212
|
+
git clone [repository-url]
|
|
69
213
|
|
|
70
|
-
|
|
214
|
+
# 安装依赖
|
|
215
|
+
cd whistle.mock-plugin
|
|
216
|
+
npm install
|
|
217
|
+
|
|
218
|
+
# 启动开发服务
|
|
219
|
+
npm run dev
|
|
220
|
+
|
|
221
|
+
# 构建项目
|
|
222
|
+
npm run build
|
|
223
|
+
```
|
|
71
224
|
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
|
|
77
|
-
- 代理方式选择(URL重定向/本地文件/直接响应)
|
|
78
|
-
- 响应配置(状态码、头信息、延迟)
|
|
225
|
+
### 开发规范
|
|
226
|
+
- 使用ESLint进行代码检查
|
|
227
|
+
- 遵循React和Node.js最佳实践
|
|
228
|
+
- 提交前请运行测试用例
|
|
229
|
+
- 提交信息请使用中文并保持简洁明了
|
|
79
230
|
|
|
80
|
-
|
|
231
|
+
## 📄 许可证
|
|
81
232
|
|
|
82
|
-
|
|
83
|
-
- 日志记录设置
|
|
84
|
-
- 默认响应行为配置
|
|
233
|
+
MIT License
|
|
85
234
|
|
|
86
|
-
##
|
|
235
|
+
## 🔗 相关链接
|
|
87
236
|
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
- 数据存储:使用本地文件系统存储配置信息
|
|
237
|
+
- [Whistle官方文档](https://wproxy.org/whistle/)
|
|
238
|
+
- [Mock.js文档](http://mockjs.com/)
|
|
239
|
+
- [Ant Design](https://ant.design/)
|