notify(2026-05-21): 素材审核拆除 + 团队成员角色字典化

- 21_refactor_material_remove_review_feature.md (Closes HL#2789, PR HL#2795)
  通知 mmg 删 reviewMaterials/rejectMaterials API 与批量审核/驳回 UI
  测试服已验证: GET material/list 无 reviewStatus 字段 + material_review_status 字典空

- 21_refactor_team_role_picker_use_staff_type_dict.md (Closes HL#2790, hl-api-changelog#7)
  通知 mmg StaffPickerModal.vue roleOptions 改 useDict('staff_type') 动态加载
  后端零改动 (staff_type 字典 7 项已就绪, 不含 DEPUTY_LEADER/DRIVER)
这个提交包含在:
API Changelog Bot
2026-05-21 14:04:34 +08:00
父节点 c2aef2a3d3
当前提交 1dc7db6480
共修改 2 个文件,包含 291 行新增和 0 行删除
@@ -0,0 +1,131 @@
# refactor(material): 拆除素材审核遗留功能(reviewStatus 字段 + 字典 + DTO 全删)
> **仓库**: HL (后端 hl-resource-service + hl-user-service)
> **关联 PR/Issue**: PR #2795, Closes #2789
> **日期**: 2026-05-21
> **影响范围**: 管理后台「素材库」批量审核/批量驳回功能整体废弃
> **接收方**: mmg (前端)
> **前端**: **需要改动 — 拆按钮 + 删 API**
---
## 🚨 关键变化
「素材审核」功能业务上已不需要,本次全部拆除:
- 后端 `Material.reviewStatus` 字段删除
- DB `material.review_status` 列 DROP
- DB 字典 `material_review_status` DELETE
- `MaterialReviewRequest` DTO 删除
**正式环境之前批量审核接口 `PUT /admin/material/review` 触发的「参数类型错误: materialId='review'(需要 Long 类型)」报错根因就是这两条**:前端调了 `/admin/material/review` 但后端从未实现该接口,Spring 把 `review` 当成 `{materialId}` 路径变量去解析 Long,报错。
---
## 一、API 影响
### 不再存在的接口(后端从未实现)
```
PUT /admin/material/review ← 不再支持(前端有死调用)
PUT /admin/material/reject ← 不再支持(前端有死调用)
```
### 字段移除
| 接口 | 字段 | 改前 | 改后 |
|------|------|------|------|
| `GET /admin/material/list` | `reviewStatus` | 不返回(VO 本就没此字段) | 不返回(一致) |
| `GET /admin/material/{id}` | `reviewStatus` | 不返回(VO 本就没此字段) | 不返回(一致) |
> 实际 VO 层本来就没有 `reviewStatus` 字段,只是 Entity 层和 DB 列还在,本次一并清理。响应字段对前端无任何观测变化。
---
## 🚨 前端需要做的事
### 1. 删除批量审核/批量驳回 API
文件:`hl-ui/src/api/material.js` 第 335-353 行
```js
// 整段删掉
// ========== 素材审核 ==========
/**
* 批量审核通过
*/
export function reviewMaterials(materialIds) {
return http.put('/material/review', { materialIds })
}
/**
* 批量驳回素材(删除)
*/
export function rejectMaterials(materialIds) {
return http.put('/material/reject', { materialIds })
}
```
### 2. 拆 UI 按钮 + 弹窗
文件:`hl-ui/src/views/material/index.vue`
- 删除「批量审核」按钮、「批量驳回」按钮
- 删除「批量审核确认」弹窗及相关逻辑
- 列表/详情若有 `reviewStatus` 列或字段显示,一并删(实际 API 本就不返回)
### 3. 自查
请 mmg 全前端 grep 一遍:
```bash
grep -rE "reviewMaterials|rejectMaterials|material.*review|批量审核|审核通过|审核状态" hl-ui/src
```
如有残留请一并清理。
---
## 二、DB 改动(Flyway 已自动跑)
- `hl-resource-service` `V20260521_001__drop_material_review_status.sql` — `ALTER TABLE material DROP COLUMN review_status`(MySQL 8.0 兼容写法,列不存在时跳过)
- `hl-user-service` `V20260521_006__drop_material_review_status_dict.sql` — `DELETE` `sys_dict_type` + `sys_dict_data` 中 `material_review_status` 全部行
> dev 上的 user-service Flyway 文件名是 `V20260521_002`,dev-v3 上为避免 out-of-order 改名为 `V20260521_006`。两个分支文件名不同但 SQL 内容完全一致。
---
## 三、兼容性 / 风险
- ✅ VO 层本就无 `reviewStatus` 字段,前端列表/详情响应字段零变化
- ✅ Flyway 用 `information_schema` 防御,多环境部署安全(本地无此列也能跑过)
- ✅ DB 历史 `review_status` 值(如 PENDING/REJECTED)随列 DROP 丢失语义,业务已确认不需要
- ⚠️ 前端 `PUT /admin/material/review` `/admin/material/reject` 调用 100% 报错(路径变量 Long 解析失败),mmg 改前端前用户使用「批量审核」按钮会持续报错
---
## 四、测试服验证记录
部署到测试服 (`https://web.test.1814.love:9443`) 后已 round-trip 验证(2026-05-21 14:01):
```
✓ GET /admin/material/list?page=1&pageSize=1
→ 响应 item keys 中无 reviewStatus
✓ GET /admin/dict/data/material_review_status
→ code=200, data=[] (字典已清空)
```
Flyway 自动执行:
- hl-resource-service 启动时跑 `V20260521_001__drop_material_review_status.sql` → `material.review_status` 列已 DROP
- hl-user-service 启动时跑 `V20260521_006__drop_material_review_status_dict.sql` → 字典 `material_review_status` 已 DELETE
---
## 五、联系人
后端:wx(呼籁旅行)
前端:mmg
如有疑问可在 [#2789](https://git.1814.love:8443/wx/HL/issues/2789) 评论区留言。