# 【前端待处理·管理后台】景区季节全量清空与标签同步（#5123）

## 目标前端

- 端类型：管理后台（Web）
- 目标仓库：`mmg/hl-ui`
- 目标分支：按前端仓库当前发布流程执行
- 后端工单：`wx/HL #5123`
- 小程序：无需改页面，但必须参与接口与缓存回退验收

## 问题与根因

`src/views/resource/scenic/SeasonDrawer.vue` 的 `handleSave()` 目前只在
`isSeasonConfigured(form)` 为 true 时调用 PUT。已存在的季节被全部清空后，
该判断变为 false，前端既不发 PUT，也没有调用后端已有 DELETE，数据库旧记录仍在，
因此重新打开抽屉会回显旧内容，页签“已配置”和景区列表季节标签也不会消失。

后端同时修复了可空字段写入 null、季节素材引用解绑，以及管理后台/小程序相关缓存依赖失效。
前端不能继续用“不发请求”表达删除已存在季节。

## 接口契约

### 查询季节列表

```http
GET /admin/scenic/spot/{scenicId}/seasons
```

### 保存仍有内容的季节

```http
PUT /admin/scenic/spot/{scenicId}/season/{seasonType}
Content-Type: application/json
```

### 删除已全量清空的季节

```http
DELETE /admin/scenic/spot/{scenicId}/season/{seasonType}
```

`seasonType` 取 `spring`、`summer`、`autumn`、`winter`。DELETE 无请求体，沿用现有管理后台鉴权。

## 前端改动要求

### 1. API 封装

在 `src/api/scenic.js` 新增并导出删除方法，例如：

```js
export function deleteScenicSeason(scenicId, seasonType) {
  return http.delete(`/scenic/spot/${scenicId}/season/${seasonType}`)
}
```

### 2. 记录初始已配置季节

`SeasonDrawer.vue` 每次打开并成功加载季节列表后，记录后端实际返回过的 `seasonType` 集合。

- 加载前清空该集合，避免切换景区时串数据。
- 只以后端列表是否存在记录作为“初始已配置”依据，不要用当前编辑中的
  `isSeasonConfigured()` 反推。
- 查询失败时不得把未知状态当成“从未配置”；应阻止保存或保留错误状态，避免误判删除。

### 3. 保存判定

遍历四季时按以下规则处理：

| 初始状态 | 当前表单 | 请求 |
| --- | --- | --- |
| 不存在 | 全空 | 不请求 |
| 不存在 | 有内容 | PUT |
| 已存在 | 有内容 | PUT |
| 已存在 | 全空 | DELETE |

所有文本字段都按 `trim()` 后判断是否为空；素材按有效 `id` 判断，空壳对象不能让季节继续显示为已配置。

同一次保存中任一季节请求失败时，不得关闭抽屉或显示“全部保存成功”；应保留编辑内容并明确提示失败季节。
全部请求成功后重新 GET 季节列表，再触发父级景区列表刷新，确保以下状态以服务端结果收敛：

- 当前抽屉内容不再回显已删除季节。
- 对应页签“已配置”标记消失。
- 景区列表对应季节标签消失。
- 其他季节和景区基础信息不变。

## 小程序链路说明

小程序产品详情会经 product-service 和 resource-service 读取季节亮点及季节媒体。
后端已为实时产品详情、订单快照、mp-service 产品聚合和景区详情缓存补齐
`table:scenic_season` / `table:scenic_spot` 依赖。

季节删除后，小程序不得继续显示旧 `seasonHighlights`、封面、轮播图或视频；未命中季节时应回退景区本体媒体和节点快照描述。前端管理后台无需主动清小程序 Redis，也不得新增清缓存接口。

## 验收清单

- [ ] 仅配置描述和亮点的季节，两项全部清空并保存后，重新打开不再回显。
- [ ] 对应页签“已配置”标记消失。
- [ ] 保存成功并刷新景区列表后，对应季节标签消失。
- [ ] 保留其他内容时，可单独清空描述、亮点、封面、轮播图和视频。
- [ ] 清空一个季节不影响其他季节及景区基础信息。
- [ ] 从未配置且仍为空的季节不发 PUT 或 DELETE。
- [ ] 查询季节列表失败时不会误发 DELETE。
- [ ] 部分请求失败时抽屉保留，且不会提示全部成功。
- [ ] 小程序产品详情不再返回已删除季节的亮点或媒体。
- [ ] 小程序在季节未命中时正确回退景区本体媒体和节点快照描述。

## 发布说明

- 本文是前端修复与联调通知，不代表已修改或发布 `mmg/hl-ui`。
- 前端完成后须创建并指派自身工单，走分支、PR、测试和发布流程，并关联 `wx/HL #5123`。
- 测试环境验收必须通过网关使用真实管理员鉴权完成 PUT、DELETE、GET 回读；记录不得包含 token、Cookie 或真实隐私数据。
