hl-api-changelog/changelogs-v2/2026-06/04_3428_退费说明保存500修复+提交弹窗字段显示优化-管理后台.md

97 行
4.8 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# 【后端修复 + 前端优化·管理后台】退费说明保存 500 已修 + 提交确认弹窗字段显示
> **PR**: #3429后端修复| **关联工单**: #3428
> **服务**: hl-resource-service | **更新时间**: 2026-06-04
>
> **存放目录**: `changelogs-v2/2026-06/`
> **影响范围**: 管理后台「编辑景区 / 活动 → 退费说明」tab;前端列表行「确认提交修改」弹窗
---
## ⚠️ 关键说明
1. **后端 bug 已修(前端可重测)**:景区/活动「退费说明」保存**带「生效起 / 生效止」日期**的退费明细时报 500,现已修复并部署测试服。接口契约**未变**,前端无需改调用方式,重新走原保存流程即可。
2. **前端待优化§2**:列表「确认提交修改」弹窗里 `refundNote` 字段显示为英文字段名 + 值「[复杂对象]」,普通运营看不懂,建议改为中文标签「退费说明」+ 可读摘要。
3. **测试数据已补**:已给测试库 **66 个景区**全部补充退费说明示例数据(每个 3 条明细,含带日期明细),方便前端联调展示。
---
## 1. 后端修复说明
### 现象
「编辑景区 → 退费说明」填入带「生效起 / 生效止」日期的退费明细,点保存 → 500
```
服务器内部错误[MyBatisSystemException]: org.apache.ibatis.type.TypeException:
Could not set parameters for mapping: Para...
```
不填日期则保存成功。这也是此前测试库退费说明(带日期)一直存不进的原因。
### 根因
退费明细数组(`items`)以 JSON 列存库MyBatis-Plus JacksonTypeHandler,明细条目含 `effectiveFrom` / `effectiveTo`LocalDate。MP 默认的 JacksonTypeHandler ObjectMapper 未注册 JavaTimeModule,序列化 Java 8 时间类型抛异常,在写库参数阶段表现为「Could not set parameters」→ 500。
### 修复
hl-resource-service 给 JacksonTypeHandler 配置注册了 JavaTimeModule 的 ObjectMapper日期以 ISO 字符串 `yyyy-MM-dd` 存储),纯加性修复,不改接口契约。
### 受影响接口(契约不变,仅恢复正常保存)
| 方法 | 路径 | 说明 |
|---|---|---|
| PUT | `/admin/refund-note` | 退费说明独立保存upsert |
| PUT | `/admin/scenic/spot/{scenicId}` | 景区编辑(融合 refundNote 字段) |
| PUT | `/admin/activity/...`(编辑) | 活动编辑(融合 refundNote 字段) |
### 测试服实测(已通过)
- 带生效起止日期保存 → **200**,回读确认 `effectiveFrom/effectiveTo` 正确落库、`settleScopeLabel` 正常拼装(如「按人」)
- 不带日期保存 → **200**(不回归)
---
## 2. 前端待优化:「确认提交修改」弹窗字段显示
### 现状(截图)
列表行编辑提交时的「确认提交修改」弹窗,对 `refundNote` 字段显示为:
| 字段 | 原值 | 新值 |
|---|---|---|
| `refundNote` | [复杂对象] | [复杂对象] |
两个问题:
1. **字段名是英文 `refundNote`** —— 运营看不懂,应显示中文「退费说明」。
2. **值显示「[复杂对象]」** —— 退费说明是结构化对象(整体介绍 + 明细数组),无法直接 diff,建议给个可读摘要而非「复杂对象」。
### 期望
| 字段 | 期望显示 |
|---|---|
| 字段名 | 「退费说明」(中文标签,建议前端维护字段 key → 中文名映射表) |
| 值 | 可读摘要,如「整体介绍 + N 条明细」,或直接提示「退费说明已修改(点开退费说明 tab 查看)」,避免「复杂对象」字样 |
> 说明:`refundNote` 是后端字段 key,后端不下发中文标签;字段名→中文、复杂对象的友好展示属前端渲染逻辑。其他类似的结构化对象字段如未来的多媒体、行程节点等建议一并按此约定处理。
---
## 3. 测试数据
已通过 `PUT /admin/refund-note` 给测试库 **全部 66 个景区**补充退费说明示例数据:
- 整体介绍:「退改规则如下,赠送项目不退费,具体以下方明细为准。」
- 明细 3 条:出发前 7 天以上0/人,全额退款)/ 出发前 3-6 天30/人,带生效起止 2026-01-01~2026-12-31/ 出发前 48 小时内100/人,不可退)
前端可直接在景区编辑页「退费说明」tab 看到回显数据联调。
---
## 4. 前端动作
1. **重测退费说明保存**:带生效起止日期的明细现可正常保存(原 500 已修)。
2. **优化提交确认弹窗**§2`refundNote` → 中文「退费说明」;值「[复杂对象]」→ 可读摘要。
3. 联调可用测试库已补的 66 个景区退费说明数据。
---
## 5. 关联 / 联系人
- **后端修复 PR**#3429Closes #3428
- **退费说明模块接口契约**:见同目录退费说明相关 changelog
- **后端负责人**@wx
- **前端对接(管理后台)**:待指派