---
date: 2026-05-07
type: backend-fix
module: hl-user-service/explore-category
priority: medium
notify: ["@mmg"]
status: deployed-pending
restart_service: hl-user-service
gitea_pr: 1806
gitea_issue: 1793
related_cases: [ZT-006]
---

# 探索分类详情接口补 status 字段（前端称"主题列表"状态切换无效）

## 现象（ZT-006）

测试报告：admin 端切换探索分类（前端口语称"主题"）的上下架状态，**显示"编辑成功"但实际状态没变**。

## 根因

`ExploreCategoryDetailVO.java` **完全缺 `status` 字段**，导致 `ExploreCategoryService.toDetailVO` builder 也不 set status，前端 EditModal `status: data.status ?? 1` fallback 默认上线，用户切换的真实状态无法回显。

## 修复

PR #1806 已合并 dev。

1. `ExploreCategoryDetailVO` 加 `private Integer status;` 字段，@ApiModelProperty 含字典值说明
2. `ExploreCategoryService.toDetailVO` builder 加 `.status(category.getStatus())` 一行

PUT 切换接口本身是正常的，问题只在 GET detail 不返 status。

## 前端配合（@mmg）

### 1. 详情响应多了 status 字段

```json
GET /admin/explore/category/{id}
{
  "code": 200,
  "data": {
    "id": "...",
    "name": "亲子游",
    "iconUrl": "...",
    "status": 1,        // ← 新增字段（0=下架, 1=上架）
    "sortOrder": 100,
    ...
  }
}
```

### 2. 前端建议改默认值

```js
// 错误（导致"切换无效"幻觉）
status: data.status ?? 1   // ❌ 后端返 null 时默认 1

// 正确（后端现在永远返字段，可以去掉 fallback）
status: data.status        // ✅ 直接用后端字段
// 或
status: data.status ?? 0   // ✅ 兜底用 0（下架）更安全
```

## 重启服务

`hl-user-service` 部署测试服后即可。

## 验收

- [ ] admin GET 探索分类详情 → 响应含 status 字段非 null
- [ ] 切换 status 后再次 GET → status 已变
- [ ] 下架的分类 detail 返 0 不是 1
- [ ] 前端编辑弹窗状态开关正确回显

## 数据修复（建议运营/QA 配合）

BUG 期间用户切换状态可能有错位，运营可参考 BUG 报告里的审计 SQL 对照修：
`docs/tasks/20260507_bug_product_analysis.md`（仓库内）。

## 关联工单
Gitea #1793 已 Closes 关闭。

## 顺手提醒（CP-006 不在本 PR）
测试报告里 CP-006 "产品筛选下拉框只有上/下架，适用小蒙马" 是**不同根因**（产品筛选选项不全），归到产品复核任务，不在本 PR 范围。
