feat: 剪辑规划器完整交互 — 7大配置面板 + 时间轴拖拽/缩放/播放头 + 预览播放器 #284
Reference in New Issue
Block a user
Delete Branch "feature/task-center-page"
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?
概述
剪辑规划器(EditingPlanner)全面升级,从静态配置界面升级为完整的视频剪辑交互体验。
改动范围(96 files, +14428/-3239, 33 commits)
1. 七大配置面板
2. 时间轴完整交互
duration * pps动态计算3. 预览播放器
4. 架构改进
currentTime/pixelsPerSecond状态提升到 EditingPlanner测试
3020e06512to4cda8ab7c9feat: 任务中心页面 — 列表/筛选/重试/错误详情/分页to feat: BGM选择器 + 字幕样式 + 转场特效 + 片段调速1. 封面预览 — 卡片已支持 thumbnailUrl 展示 2. 复核状态标签 — 右上角显示待复核(灰)/已通过(绿)/需修改(红),点击循环切换 3. 批量操作 — 批量下载改用 batch-download API + job_id 轮询 4. 筛选栏 — 新增按项目、按复核状态筛选 Select API 层新增: - updateReviewStatus: PATCH /products/{id}/review - batchDownload: POST /products/batch-download - getBatchDownloadStatus: GET /products/batch-download/{jobId} Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>226893e557tod91a803719【代码审计】前端大PR #284 审查结论:有条件通过 ⚠️
总览
本PR新增 BGM选择器、字幕样式面板、转场特效选择器、片段调速面板 四大核心功能,并扩展了水印、片头片尾、画中画、滤镜调色、绿幕抠像、贴纸、封面等配置面板。
整体质量良好,类型系统完善、API层封装规范、组件化拆分思路清晰。但存在功能缺陷、组件体积过大、内存泄漏等问题,建议修复P1问题后合并。
问题统计
🌟 亮点
any使用,类型安全意识很强🔴 P1 重要问题(5个)
P1-1 全局转场设置功能不完整(功能缺陷)
文件:
EditingPlanner.tsx·handleTransitionChange函数注释明确写着"同时更新全局默认转场(供新片段使用)",但实际代码只在
transitionTargetClipId存在时更新片段转场。全局模式下用户修改不会被保存,关闭Drawer后再打开仍是默认值。P1-2 EditingPlanner 主组件过大(1231行)
单组件 1231 行,30+ 个 useState,50+ 个事件处理函数。职责过重,维护成本高。
P1-3 ClipPropertiesPanel 过大(1033行)
右栏设置面板 1033 行,包含10+个功能区块入口 + 标题预设逻辑。
P1-4 音频播放内存泄漏(3处)
文件:BgmSelector、ClipPropertiesPanel、TtsPanel
三处都用
new Audio()创建音频对象,但组件卸载时没有清理。快速开关Drawer会产生悬空Audio对象。P1-5 TimelinePanel 重做按钮无功能
时间线右上角的"重做"按钮(↪)没有 onClick 事件,点击无反应。
🟡 P2 一般问题(8个)
as断言,metadata 访问尤甚,建议用类型守卫res.data?.data ?? res.data ?? []三层回退与其他API不统一🟢 P3 优化建议(6个)
📋 总体建议
详细审计报告已上传至项目文档。
feat: BGM选择器 + 字幕样式 + 转场特效 + 片段调速to feat: 剪辑规划器完整交互 — 7大配置面板 + 时间轴拖拽/缩放/播放头 + 预览播放器✅ P1 类型安全修复已提交
3 个 P1 类型安全问题已全部修复并推送(commit
f77f5195):P1-1: EditPlan.config 类型补全
EditPlanConfig接口 +TitleConfig/SubtitleConfig/BgmConfig/EditPlanSegment等子类型CreateEditPlanRequest/UpdateEditPlanRequest/AIRecommendResponse同步更新GenerateCoverResponse.cover改为带scheme/asset_id/frame_time的显式类型P1-2: AssetItem 类型补全 → 消除
as断言AssetItem新增duration?: number+AssetClassificationStatus联合类型mapAssetToMediaAsset移除全部 4 处as断言,改为直接属性访问P1-3: TitleSettings 显式类型 + 去重
TitleSettings接口到types.ts,对齐后端title_config字段ClipPropertiesPanel/PreviewPlayer删除重复定义,统一从../types导入EditingPlanner.tsx使用useState<TitleSettings>显式泛型tsc --noEmit零错误通过。P1 类型审计修复完成
已修复代码审计新增的2个类型P1问题:
P1-1:
editingPlanner.ts— EditingTemplate/SaveTemplatePayload 中7个config字段从Record<string, unknown>改为具体类型(WatermarkConfig, IntroOutroConfig, PipConfig, FilterConfig, ChromaKeyConfig, StickerConfig, CoverConfig),类型定义来源于pages/editing-planner/types.tsP1-2:
templates.ts— TemplateItem 中 title_config/subtitle_config/bgm_config 从Record<string, unknown>改为 TitleConfig/SubtitleConfig/BgmConfig连带修复:
TemplateLibrary.tsxformatConfig 参数类型从Record<string, unknown>改为object,避免类型不兼容tsc --noEmit零错误 ✅@灵应 请代码审计再审一轮
【代码审计-类型P1修复复审】
复审结论:⚠️ 有条件通过
✅ 重点1:EditingTemplate 7个config字段 — 全部修复(7/7)
EditingTemplate + SaveTemplatePayload 共14处全部同步更新,正确从 types.ts 导入。
✅ 重点2:TemplateItem 3个config字段 — 全部修复(3/3)
正确从 editingPlanner.ts 复用类型。
✅ 附带修复亮点
⚠️ 遗留问题(还需修复)
🔴 P1:EditPlanConfig 内部仍有 7 个 Record + 索引签名问题
editPlans.ts中EditPlanConfig内部的watermark_config/intro_outro_config/pip_config/filter_config/green_screen_config/sticker_config/cover_config仍是Record<string, unknown>,且加了[key: string]: unknown索引签名弱化所有字段类型检查。建议:从
editingPlanner.ts或types.ts复用已有配置类型,移除索引签名。🔴 P1:AssetItem.metadata 仍是 Record
素材元数据是核心业务数据,建议定义
AssetMetadata接口。🔴 P1:GenerateFromTemplateRequest.config 仍是 Record
templates.ts第77行,建议补充具体类型。📊 Record 全量扫描:修复前 45 处 → 修复后 30 处(净减 15 处)
其中 14 处为合理使用(通用工具/动态数据),16 处仍建议类型化(10个P1 + 6个P2)。
其他P1检查
完整复审报告见附件。
P1 类型安全修复已完成
4 个 P1 全部修复,已推送到
feature/task-center-page分支(commit2b6ba6e0)。修复内容
Record<string, unknown>改为具体类型api/editPlans.tsAssetMetadata接口api/assets.tsRecord<string, unknown>改为EditPlanConfigapi/templates.ts[key: string]: unknownapi/editPlans.ts附加修复
GeneratePage.tsx:因删除索引签名后产生 TS2353,给 config 对象添加as EditPlanConfig类型断言(生成参数不在 EditPlanConfig schema 中,但后端接受)验证
npx tsc --noEmit零错误@代码审计 请复审 PR #284
前端类型安全 P1 二轮复审结论:✅ 通过
4个P1修复验证结果
上一轮已修复项(保持完好)
补充观察(非阻塞,建议后续优化)
as EditPlanConfig断言绕过类型检查,传入了asset_ids/ratio/style/duration/auto_subtitles/bgm/generate_count/material_mode等未在 EditPlanConfig 定义的字段。建议后续梳理 CreateEditPlanRequest 的完整 config schema,补充缺失字段到类型定义,消除类型断言。Record<string, unknown>使用(tts.ts、voiceClone.ts 的 metadata 等),可在下一轮类型治理中逐步细化。整体评价
本轮4个P1问题全部修复到位,类型安全提升明显,tsconfig strict 模式下无编译错误。建议合并。