feat(task-2.14): 剪辑计划编辑器完整版 — 三栏布局 + 拖拽 + 素材面板 #145
Reference in New Issue
Block a user
Delete Branch "feature/task-2.14-editing-planner-full"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
任务 2.14:剪辑计划编辑器(完整版)
改动内容
新增
editPlansAPI 模块(Mock 数据,预留真实接口)新增 MediaPanel 组件(左侧面板)
application/x-media-asset)重写 TimelinePanel 组件(中间时间线)
application/x-clip-index)新增 ClipPropertiesPanel 组件(右侧属性面板)
升级 EditingPlanner 主页面
重写 EditingPlanner.css
验收标准
技术细节
feat(phase8): 任务 2.04 — 剪辑计划 CRUD APIto feat(task-2.14): 剪辑计划编辑器完整版 — 三栏布局 + 拖拽 + 素材面板代码审查结果:✅ 通过
PR #145 — feat(phase8): 任务 2.04 — 剪辑计划 CRUD API + 任务 2.14 前端编辑器重构
变更: 9 文件,+2733/-578
分支:
feature/task-2.14-editing-planner-full→develop审查范围: 后端 API (304行) + 前端 API 层 (336行) + 编辑器重构 (CSS/TSX/组件) + 测试 (496行)
👍 优点
后端 API (edit_plans.py)
_apply_status_transition()使用 transition_map 将目标状态映射到领域方法,非法流转自动抛 ValueError → 400前端编辑器重构
8. 组件架构升级 — 三栏布局重构为 MediaPanel(素材+模板 Tab) / TimelinePanel(时间线) / ClipPropertiesPanel(片段属性),职责清晰
9. 拖拽交互完整 — 素材从左侧拖入时间线、片段间拖拽排序、拖放指示器动画
10. CSS 变量全覆盖 — 无硬编码颜色,响应式三级断点 (1200/768/480)
11. 可视化时长条 — 按比例显示片段时长,颜色区分,hover 缩放效果
12. 前端 API 层规范 — TypeScript 类型完整,Mock + TODO 注释清晰,常量集中管理
🔧 建议
P2-1:list_plans 按 template_id 筛选时全量查询计算 total
查两次数据库,第二次拉取最多 10000 条只为算 count。测试中的 StubEditPlanRepository.count() 已支持
template_id参数,说明接口已具备。建议:这样只需一次查询。
P2-2:handleSave 同时保存剪辑计划 + 模板,存在部分失败风险
用户点击「保存」可能同时触发两个 API 调用(剪辑计划 + 模板),一个成功一个失败时状态不一致。建议后续拆分为明确的「保存计划」和「保存模板」操作,或使用
Promise.all+ 错误回滚。P3-1:_to_response hasattr 可简化
EditPlan 领域实体的 status 应为 EditPlanStatus 枚举,hasattr 检查不必要。与 PR #144 同模式,建议后续统一清理。
P3-2:delete_plan 使用硬删除,与 edit_templates 软删除不一致
edit_templates (PR #144) 使用
deactivate()软删除,edit_plans 使用repo.delete()硬删除。如为有意设计(剪辑计划无需回收站),建议加注释说明。P3-3:handleAssetDragStart 为空函数
TODO 占位可接受,建议后续任务中实现或移除。
📊 审查总结
结论:✅ 通过,可合并到 develop。 2 个 P2 建议(list_plans N+1 查询、双保存逻辑)建议在后续迭代中优化。