diff --git a/changelogs/2026-03/2026-03-22_insurance_scheme_frontend_fix.md b/changelogs/2026-03/2026-03-22_insurance_scheme_frontend_fix.md index 4d008e0..85e6428 100644 --- a/changelogs/2026-03/2026-03-22_insurance_scheme_frontend_fix.md +++ b/changelogs/2026-03/2026-03-22_insurance_scheme_frontend_fix.md @@ -1,42 +1,45 @@ -# 保险方案编辑页 — 前端表单校验问题 +# 保险方案编辑页 — 结束天显示为 -1 的处理 **日期**: 2026-03-22 **页面**: 保险管理 → 保险方案 → 编辑方案 -**类型**: 前端 BUG +**类型**: 前端展示优化 --- ## 问题描述 -保险方案编辑页面,保险段配置中的数值字段缺少前端校验,允许输入负数或不合理值。 +保险方案编辑弹窗中,第2段的"结束天"显示为 `-1`,看起来像数据错误,但实际上 **`-1` 是后端约定的特殊值,表示"到行程最后一天"**。 -### 需要修复的字段 +数据库中 `day_offset_end = -1` 表示该段覆盖到行程结束,后端投保时会自动用方案的 `total_days` 替换 `-1`。 -| 字段 | 当前问题 | 校验规则 | -|------|---------|---------| -| 起始天 | 可输入负数或0 | `>= 1`,整数 | -| 结束天 | 可输入负数(截图中出现 `-1`) | `>= 起始天`,整数 | -| 排序 | 可输入负数 | `>= 0`,整数 | +## 前端需要处理 -### 交叉校验 -- **结束天 >= 起始天**:结束天不能小于起始天 -- **段之间不能重叠**:第2段的起始天应 > 第1段的结束天 +### 1. 编辑表单中展示 -1 的处理 -### 建议前端处理方式 +**方式A(推荐)**:将"结束天"改为下拉或单选: +- 选项1: 输入具体天数(`` 组件设置 `:min="1"` 防止负数输入 -2. 结束天的 `:min` 动态绑定为当前段的起始天值 -3. 保存前做表单级校验,提示具体哪个段有问题 +**方式B(简单)**:在结束天输入框旁显示提示文字: +- 当值为 `-1` 时,显示"(到最后一天)" +- `` 的 `:min` 设为 `-1`(允许 -1 这个特殊值) -### 后端校验(已加) +### 2. 列表中展示 +如果列表展示了结束天,`-1` 应显示为"最后一天"或替换为方案的 `totalDays` 值。 -后端已增加 `@Min` 校验,如果前端没拦住,后端会返回 400: -```json -{ - "code": 400, - "message": "参数校验失败", - "data": { "endDay": "结束天不能为负数" } -} -``` +### 3. 其他表单校验仍建议加上 +- 起始天:`>= 1` +- 排序:`>= 0` +- 结束天为正数时:`>= 起始天` -建议前端也加上校验,避免用户填完才发现不对。 +## 数据说明 + +当前所有多段方案的最后一段 `day_offset_end` 都是 `-1`,这是**正常数据,不需要修改数据库**: + +| 方案 | 第1段结束天 | 第2段结束天 | +|------|-----------|-----------| +| 4日行程 | 2 | -1(=4) | +| 5日行程 | 2 | -1(=5) | +| 6日行程 | 3 | -1(=6) | +| 7日行程 | 3 | -1(=7) | +| 8日行程 | 4 | -1(=8) |