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 看到请修复,不需要建工单。
这个提交包含在:
wx 2026-05-07 14:36:59 +08:00
父节点 c5f9bb1065
当前提交 6f1e0f0b98
共有 3 个文件被更改,包括 236 次插入0 次删除

查看文件

@ -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 → 下拉框回到空