# T-WEB-014 动作管理:预览功能 - **状态**: done - **依赖**: T-WEB-004 / T-WEB-006 - **文档**: v1.6 §4.11(重要) - **契约**: `data-models 0.6.0`(新增 `thumbnailUrl`) ## 目标 审核动作时能**直接看到动作长什么样**,而不是只看文件名与帧数 —— 动作是否可用、是否与曲目匹配,靠肉眼判断最快。 ## 方案 | 项 | 做法 | |--|--| | 服务端缩略图 | `motions/motion-thumbnail.ts` 用关键点序列离线渲染骨架 PNG(前端视角的"动作剪影"),零原生依赖 | | 入库时机 | 预处理 `run()` 末尾生成(**非致命**:失败不阻塞预处理完成,只记录) | | 契约 | `data-models 0.6.0` 给 Motion 增加 `thumbnailUrl`;迁移 `1789600000000-AddMotionThumbnail` | | 管理端预览 | `admin/src/components/MotionPreview.tsx`:3D 骨架回放(Three.js),可拖动时间轴逐帧查看 | | 依赖数据 | `admin/src/lib/keypoint-sequence.ts` 解析 NDJSON,`skeleton-topology.ts` 提供父节点表 | ## 验收 | 验收项 | 结果 | |--|--| | 动作列表显示缩略图 | ✅ 离线渲染的骨架 PNG | | 可逐帧回放查看动作 | ✅ `MotionPreview` 时间轴 + 3D 骨架 | | 缩略图生成失败不影响预处理 | ✅ 非致命分支;错误写入日志 | | 契约三端一致 | ✅ `data-models 0.6.0` → 后续 0.7.0;快照逐字节一致 |