diff --git a/changelogs-v2/2026-07/38_房务底部驳回按钮仍误展示-前端待处理-管理后台.md b/changelogs-v2/2026-07/38_房务底部驳回按钮仍误展示-前端待处理-管理后台.md new file mode 100644 index 0000000..a1c7193 --- /dev/null +++ b/changelogs-v2/2026-07/38_房务底部驳回按钮仍误展示-前端待处理-管理后台.md @@ -0,0 +1,97 @@ +# 房务底部驳回需求按钮仍误展示 + +- 状态:front-end urgent +- 影响端:管理后台房务详情弹窗 +- 关联通知: + - `29_4777_房务清空配房信息与驳回按钮动作契约-前端待处理-管理后台.md` + +## 问题 + +2026-07-07 复测时,房务详情弹窗底部仍显示“驳回需求”按钮。这是纯前端展示/交互问题:后端 action 和接口守卫已经正确。 + +当前订单示例: + +- 订单:`2074303545149980674` +- 订单号:`HL20260707092437709` +- 状态:`CLAIMING / 配房中` +- 配房进度:`1/2` +- 第 1 晚:已有酒店/配房数据 +- 第 2 晚:待配房 + +这种场景不能驳回需求。只要任意 day 还有 active 配房/询房数据,驳回按钮都不能展示为可操作入口。 + +## 后端当前返回 + +接口: + +```http +GET /admin/house/orders/2074303545149980674 +``` + +关键字段: + +```json +{ + "actions": { + "canRejectRequirement": { + "enabled": false, + "code": "REJECT_REQUIREMENT", + "label": "驳回需求", + "disabledReason": "已有配房, 不能驳回, 请先清空/删除配房", + "endpoint": "POST /v3/admin/order/2074303545149980674/hotel-requirement/supplier-reject" + }, + "canClearAssignments": { + "enabled": true, + "code": "CLEAR_ASSIGNMENTS", + "label": "清空配房", + "disabledReason": null, + "endpoint": "DELETE /v3/admin/order/hotel-requirements/2074310408247623681/assignments" + } + }, + "requirement": { + "actions": { + "canRejectRequirement": false, + "canClearAssignments": true + } + } +} +``` + +强制调用驳回接口也会被后端拒绝: + +```http +POST /v3/admin/order/2074303545149980674/hotel-requirement/supplier-reject +``` + +返回: + +```json +{ + "code": 582086, + "success": false, + "message": "该需求已有配房记录, 不能驳回, 请走替换/修改配房" +} +``` + +## 前端必须修改 + +1. 底部“驳回需求”按钮必须绑定 `data.actions.canRejectRequirement.enabled`。 +2. `enabled=false` 时优先不展示“驳回需求”按钮。 +3. 如果产品交互坚持保留按钮,则必须是真 disabled: + - `disabled=true` + - 不绑定提交/打开驳回弹窗的点击事件 + - 展示 `disabledReason` +4. 禁止用这些条件自行推断驳回可用性: + - `houseStatus === CLAIMING` + - 配房进度不是满配,例如 `1/2` + - 当前在“配房中”流程节点 + - 第 2 晚仍待配房 +5. 前端只需要做展示控制,不需要在前端判断“有没有配房数据”。是否能驳回以后端 action 为准。 +6. 清空任意 day 或整体清空后,必须重新拉取详情;只有刷新后后端返回 `enabled=true` 才能展示/启用驳回入口。 + +## 验收 + +- 订单 `2074303545149980674`:第 1 晚已有酒店数据、第 2 晚待配房,底部不能出现可点击“驳回需求”。 +- 只要 `actions.canRejectRequirement.enabled=false`,按钮隐藏或真实禁用。 +- 点击禁用态按钮不会打开驳回原因弹窗,不会调用驳回接口。 +- 清空全部配房后刷新详情,如果后端返回 `enabled=true`,才允许显示/启用驳回。