docs(frontend-bug): 测试报告暴露的 3 个前端共性 BUG (2026-05-07)
来源:D:/work/资源/WXWork/.../测试用例汇总.xlsx 1. 列表组件重置按钮需点两次(8 处复现:JQ-016/CT-005/ZH-005/YW-003/JD-003/EW-003/DD-006/TK-004)→ hl-ui 通用列表组件,reset 后未触发 fetchList 2. 景区批量改状态下拉框 v-model 不同步(JQ-024)→ el-select 显示值滞后 3. 合同方案新增找不到填写入口(HF-001)→ 路由/菜单/表单组件缺失,跟 HT-001 后端 BUG 可能同源 @mmg 看到请修复,不需要建工单。
这个提交包含在:
父节点
c5f9bb1065
当前提交
6f1e0f0b98
@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
date: 2026-05-07
|
||||||
|
type: frontend-bug
|
||||||
|
module: contract-scheme
|
||||||
|
priority: medium
|
||||||
|
notify: ["@mmg"]
|
||||||
|
status: pending
|
||||||
|
source: 测试用例汇总.xlsx (2026-05-07)
|
||||||
|
related_cases: [HF-001]
|
||||||
|
---
|
||||||
|
|
||||||
|
# 合同方案新增找不到填写入口
|
||||||
|
|
||||||
|
## 现象
|
||||||
|
|
||||||
|
测试用例 HF-001 "正常新增合同方案":
|
||||||
|
|
||||||
|
> 步骤:1. 新增 → 2. 填写名称模板内容 → 3. 保存
|
||||||
|
> 实际结果:**没找到相关的填写**
|
||||||
|
|
||||||
|
## 推断方向(前端)
|
||||||
|
|
||||||
|
可能是:
|
||||||
|
1. 合同方案管理菜单/路由缺失
|
||||||
|
2. 菜单存在但点"新增"按钮没弹出表单 dialog
|
||||||
|
3. dialog 弹出来但内容空白(template 没渲染)
|
||||||
|
|
||||||
|
## 后端确认
|
||||||
|
|
||||||
|
后端 hl-contract-service 的合同方案 admin 接口 **应当存在**(不然合同生成 HT-001 也会挂),具体接口路径可能是:
|
||||||
|
|
||||||
|
- `POST /admin/contract/scheme/save`(按项目 SaveReqVO 命名习惯)
|
||||||
|
- `GET /admin/contract/scheme/page`
|
||||||
|
|
||||||
|
如果后端接口缺失或路径变了,前端会找不到对应 API 来对接。
|
||||||
|
|
||||||
|
## 排查步骤
|
||||||
|
|
||||||
|
1. **检查 hl-ui 路由**:搜 `contract.*scheme` / `合同方案`,确认菜单项是否在 router 配置里
|
||||||
|
2. **检查菜单权限**:admin RBAC 是否给当前账号开放了"合同方案"菜单
|
||||||
|
3. **检查 dialog 表单组件**:是否引用了 `<ContractSchemeForm />` 但组件文件不存在/import 错路径
|
||||||
|
4. **后端 API 确认**:在 hl-ui 的 api 目录搜 `contractScheme` 看有没有对接接口
|
||||||
|
|
||||||
|
## 关联 BUG
|
||||||
|
|
||||||
|
跟 HT-001 "合同生成网络错误" 可能同源 — 如果合同方案根本无法新增,那合同生成也无法选择方案 → 必然失败。
|
||||||
|
|
||||||
|
后端排查时一并看一下。
|
||||||
|
|
||||||
|
## 影响
|
||||||
|
|
||||||
|
- 合同模板配置流程整条断
|
||||||
|
- 阻塞 HT-001 合同生成 BUG 的修复闭环(合同生成依赖方案)
|
||||||
|
|
||||||
|
## 验收
|
||||||
|
|
||||||
|
- [ ] 进入"合同配置 → 合同方案"菜单
|
||||||
|
- [ ] 点击"新增"按钮看到弹窗 / 表单页
|
||||||
|
- [ ] 填名称 + 模板内容 → 保存成功
|
||||||
|
- [ ] 列表能看到新增的方案
|
||||||
|
- [ ] HT-001 合同生成时能选到这个方案
|
||||||
@ -0,0 +1,102 @@
|
|||||||
|
---
|
||||||
|
date: 2026-05-07
|
||||||
|
type: frontend-bug
|
||||||
|
module: hl-ui-list-component
|
||||||
|
priority: medium
|
||||||
|
notify: ["@mmg"]
|
||||||
|
status: pending
|
||||||
|
source: 测试用例汇总.xlsx (2026-05-07)
|
||||||
|
related_cases: [JQ-016, CT-005, ZH-005, YW-003, JD-003, EW-003, DD-006, TK-004]
|
||||||
|
---
|
||||||
|
|
||||||
|
# 列表组件重置按钮需点两次(多模块共性 BUG)
|
||||||
|
|
||||||
|
## 现象
|
||||||
|
|
||||||
|
测试报告里多个列表页(资源全模块 / 订单 / 退款)反复出现一致描述:
|
||||||
|
|
||||||
|
> "条件清空,但未显示全部数据,还需要再次点击重置按钮"
|
||||||
|
|
||||||
|
复现的列表页(已确认 8 处):
|
||||||
|
|
||||||
|
| 模块 | 用例编号 |
|
||||||
|
|------|---------|
|
||||||
|
| 景区 | JQ-016 |
|
||||||
|
| 餐厅 | CT-005 |
|
||||||
|
| 组合备品 | ZH-005 |
|
||||||
|
| 物业 | YW-003 |
|
||||||
|
| 酒店 | JD-003 |
|
||||||
|
| 额外成本 | EW-003 |
|
||||||
|
| 订单 | DD-006 |
|
||||||
|
| 退款 | TK-004 |
|
||||||
|
|
||||||
|
8 个列表页都中招 → 共性问题,**应该在 hl-ui 通用列表组件 / 公共 reset 方法里**。
|
||||||
|
|
||||||
|
## 推断根因
|
||||||
|
|
||||||
|
**第一次点重置**:
|
||||||
|
- 清空筛选表单的 v-model(`queryParams = {}`)
|
||||||
|
- ❌ 但**没有触发 `fetchList()` 重新请求**
|
||||||
|
- 结果:表单看起来重置了,但列表展示的还是上一次筛选后的数据
|
||||||
|
|
||||||
|
**第二次点重置**:
|
||||||
|
- 重置(已经是空表单了)
|
||||||
|
- 触发 `fetchList()` → 拿到全量数据 → 列表更新
|
||||||
|
|
||||||
|
## 修复方向(前端)
|
||||||
|
|
||||||
|
### 错误写法 ❌
|
||||||
|
|
||||||
|
```js
|
||||||
|
// 假设当前实现类似:
|
||||||
|
function resetQuery() {
|
||||||
|
queryParams.value = {}
|
||||||
|
// 漏了!没调 fetchList
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
或者:
|
||||||
|
|
||||||
|
```js
|
||||||
|
// 重置和搜索分开两个按钮,重置只清空不搜索
|
||||||
|
<el-button @click="resetForm">重置</el-button>
|
||||||
|
<el-button @click="handleQuery">搜索</el-button>
|
||||||
|
|
||||||
|
function resetForm() {
|
||||||
|
// 只 reset 表单,不调列表
|
||||||
|
proxy.$refs.queryRef.resetFields()
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 正确写法 ✅
|
||||||
|
|
||||||
|
```js
|
||||||
|
function handleResetQuery() {
|
||||||
|
// 1. 清空表单(含 dataRange 数组)
|
||||||
|
proxy.$refs.queryRef.resetFields()
|
||||||
|
queryParams.value.pageNum = 1
|
||||||
|
// 2. 立即触发列表刷新(不要让用户再点一次)
|
||||||
|
fetchList()
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
或者用一个公共组合式函数 `useListQuery()` 统一封装重置 + 自动刷新。
|
||||||
|
|
||||||
|
## 影响
|
||||||
|
|
||||||
|
- 不阻断业务,但是用户体验问题,所有 list 页面都有
|
||||||
|
- 测试反复反馈 → 应作为通用列表组件 P2 修
|
||||||
|
|
||||||
|
## 后端配合
|
||||||
|
|
||||||
|
无需后端配合,纯前端逻辑问题。
|
||||||
|
|
||||||
|
## 验收
|
||||||
|
|
||||||
|
- [ ] 在任意一个列表页点重置按钮 → 一次就能看到全量数据
|
||||||
|
- [ ] 抽测 8 个用例编号对应的列表页全部修复
|
||||||
|
- [ ] 抽测其他列表页(产品/资源剩余模块/小程序配置)确认无遗漏
|
||||||
|
|
||||||
|
## 不要建工单
|
||||||
|
|
||||||
|
按 wx 项目规则:前端 BUG/feature 都走 changelog 通知 mmg,**不在 wx/HL 或 wx/hl-ui 建工单**。
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
---
|
||||||
|
date: 2026-05-07
|
||||||
|
type: frontend-bug
|
||||||
|
module: resource-scenic-batch-status
|
||||||
|
priority: low
|
||||||
|
notify: ["@mmg"]
|
||||||
|
status: pending
|
||||||
|
source: 测试用例汇总.xlsx (2026-05-07)
|
||||||
|
related_cases: [JQ-024]
|
||||||
|
---
|
||||||
|
|
||||||
|
# 景区批量改状态下拉框 v-model 显示不同步
|
||||||
|
|
||||||
|
## 现象
|
||||||
|
|
||||||
|
测试用例 JQ-024:
|
||||||
|
|
||||||
|
> 1. 勾选多个景区
|
||||||
|
> 2. 点击"批量更改状态"
|
||||||
|
> 3. 在下拉框里选择"下架"
|
||||||
|
> 4. **下拉框显示的还是"上架"**(用户选的"下架"看不到)
|
||||||
|
> 5. 点确定 → 实际状态改成下架(功能本身正常)
|
||||||
|
|
||||||
|
测试人备注:"**功能正常,但有小问题**"。
|
||||||
|
|
||||||
|
## 根因(推断)
|
||||||
|
|
||||||
|
el-select / n-select 的 **v-model 异步同步问题**,跟 memory `experience/backend-dev/nselect-tag-mode-stringify-race.md` 类似但场景不同。
|
||||||
|
|
||||||
|
可能的代码模式:
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<el-select v-model="batchStatus" placeholder="请选择">
|
||||||
|
<el-option label="上架" value="UP" />
|
||||||
|
<el-option label="下架" value="DOWN" />
|
||||||
|
</el-select>
|
||||||
|
```
|
||||||
|
|
||||||
|
如果 `batchStatus` 在 `el-dialog` open 前没初始化(或 dialog 复用时没 reset),v-model 拿不到当前 option 对应的 label,下拉框就显示前一次的值。
|
||||||
|
|
||||||
|
或者 `batchStatus` 是从父组件 `props` 传入但没用 `v-model:`(双向绑定缺一半)。
|
||||||
|
|
||||||
|
## 修复方向(前端)
|
||||||
|
|
||||||
|
### 检查点
|
||||||
|
|
||||||
|
```js
|
||||||
|
// 1. dialog 打开时显式重置 batchStatus
|
||||||
|
function openBatchDialog() {
|
||||||
|
batchStatus.value = '' // 或 null
|
||||||
|
dialogVisible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 选项改变时确保赋值
|
||||||
|
function handleStatusChange(val) {
|
||||||
|
batchStatus.value = val // 不要在这里做条件赋值
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 检查是不是用了 v-model:value 而不是 v-model
|
||||||
|
<el-select v-model="batchStatus"> // 正确
|
||||||
|
<el-select :value="batchStatus" @input="batchStatus = $event"> // 漏了 input 事件就坏
|
||||||
|
```
|
||||||
|
|
||||||
|
## 影响
|
||||||
|
|
||||||
|
- 不阻断业务(用户能选成功,确定后状态对)
|
||||||
|
- 仅显示层 BUG,体验问题
|
||||||
|
|
||||||
|
## 验收
|
||||||
|
|
||||||
|
- [ ] 打开批量改状态 dialog,下拉框选项默认空
|
||||||
|
- [ ] 选"下架" → 下拉框显示"下架"
|
||||||
|
- [ ] 关掉重开 dialog → 下拉框回到空
|
||||||
正在加载...
x
在新工单中引用
屏蔽一个用户