5.8 KiB
5.8 KiB
草原指南字段级操作记录与分页接口
日期:2026-07-14
后端 Issue:HL #4977
发布范围:先合入
dev,再同步dev-v3并部署 TEST;当前不合入main、不部署正式环境
1. 变更目的
草原指南编辑页原“操作记录”只有创建时间和最后编辑时间,无法说明谁修改了什么。本次新增独立分页接口,响应结构参考产品日志时间线,提供:
- 操作类型和中文摘要;
- 操作所属页面区域;
- 操作人 ID、名称快照和操作时间;
- 本次真实变化的字段;
- 字段中文名、旧值、新值和变更类型;
- 富文本、正文图片和生效封面等长值的摘要与哈希。
2. 接口
GET /admin/grassland-guide/videos/{videoId}/operation-logs?page=1&pageSize=20
查询参数:
| 参数 | 必填 | 默认值 | 规则 |
|---|---|---|---|
videoId |
是 | - | 草原指南视频 ID |
page |
否 | 1 |
最小 1 |
pageSize |
否 | 20 |
1-100 |
分页顺序固定为 createTime DESC, id DESC,前端按 records 追加加载即可。只有 SUPER_ADMIN、OPERATOR 可以查询字段级历史值。
3. 响应示例
{
"code": 200,
"message": "success",
"data": {
"records": [
{
"id": "2077195939797688322",
"videoId": "2076195939797688322",
"action": "UPDATE",
"actionLabel": "编辑",
"step": "BASIC",
"stepLabel": "基础信息",
"detail": "编辑基础信息",
"changedFields": ["title", "summary"],
"fromStatus": "PUBLISHED",
"toStatus": "PUBLISHED",
"operatorId": "10001",
"operatorName": "yangchunsheng",
"createTime": "2026-07-14 13:56:19",
"changes": [
{
"field": "title",
"fieldLabel": "视频标题",
"oldValue": "草原指南验收",
"newValue": "草原指南验收|草原蜱虫怎么预防和处理",
"changeType": "MODIFY",
"oldHash": null,
"newHash": null
}
]
}
],
"total": 12,
"page": 1,
"pageSize": 20
},
"success": true
}
4. 字段枚举
action:
| 值 | actionLabel |
含义 |
|---|---|---|
CREATE |
新建 | 创建草稿 |
UPDATE |
编辑 | 更新内容或展示配置 |
PUBLISH |
上线 | 首次发布或重新发布 |
OFFLINE |
下线 | 已发布内容下线 |
DELETE |
删除 | 删除草稿或已下架内容 |
step:
| 值 | 含义 |
|---|---|
BASIC |
基础信息 |
CONTENT |
图文正文 |
PUBLISH_SETTING |
发布设置 |
DISPLAY_SETTING |
展示设置 |
MULTIPLE |
一次操作涉及多个区域,使用 stepLabel 展示具体区域 |
changeType:ADD、MODIFY、DELETE。
5. 前端接入规则
- 编辑页打开时请求第一页,滚动到底部后按
page + 1加载;不要一次拉取全部日志。 - 时间线标题可使用
actionLabel + stepLabel,说明文本直接使用detail。 - 字段差异直接渲染
changes[].fieldLabel/oldValue/newValue,不要自行把字段英文名转换为中文。 - 所有
id、videoId、operatorId都按字符串处理。 fromStatus、toStatus可为空;状态没有变化的编辑操作也可能两者相同。- 历史日志只有
changedFields,changes会返回空数组;页面应展示动作、操作人和时间,不要报错。 - 富文本正文不返回整篇 HTML;
oldValue/newValue是去标签后的摘要,oldHash/newHash用于判断完整内容是否不同。 - 正文图片返回“共 N 张”;生效封面返回脱敏摘要,例如
封面#1a2b3c4d,不会下发完整 OSS 地址。 - 后端只记录真实变化字段;无变化字段不会出现在
changes中。
6. 与既有接口的关系
- 草原指南列表、详情、创建、编辑、发布、下架和删除接口路径均不变。
- 详情中的
createdAt/updatedAt/createdBy/updatedBy保持兼容,但不再承担完整操作历史展示。 - 本接口不返回、也不接收
version;前端继续不维护版本号。 - 本文件只说明操作记录,不合并到素材上传、MP4 校验或删除功能的 changelog。
7. 联调清单
- 首次进入加载第一页,向下滚动可稳定分页且不重复。
- 编辑标题、简介、正文、展示设置后可显示对应旧值和新值。
- 发布、重新发布、下线和删除显示正确动作及状态变化。
- 历史日志
changes=[]时页面正常降级。 - 非
SUPER_ADMIN、OPERATOR角色不展示字段级操作历史入口。
8. 后端 TEST 验证(2026-07-14)
- 后端 PR:HL #4980 已合入
dev;HL #4981 已由dev同步至dev-v3。 - TEST 部署任务
5681477a成功,hl-resource-service的8082/8182双实例均健康;部署内容与origin/dev-v3一致。 - Flyway
20260714.001执行成功,changes JSON、operator_name VARCHAR(64)已落库。 - 真实
EXPLAIN命中idx_ggol_video_time(video_id, operated_at, log_id),使用倒序索引扫描。 - 受控业务 API 验收已完成:临时草稿执行
CREATE → UPDATE → DELETE,操作日志总数和顺序正确;标题、简介、正文、精选、登录鉴权、排序权重均返回真实旧值和新值。 contentHtml只返回纯文本摘要和哈希,不返回原始 HTML;删除后详情返回371001,该视频的三条历史日志仍可分页查询。- 以
pageSize=1/2跨页验证未出现重复 ID;8082/8182OpenAPI 均只包含videoId/page/pageSize,没有version。 - 以上是后端验收证据;第 7 节仍是前端接入自测清单,不以页面或按钮作为本后端工单关单条件。