You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.1 KiB
4.1 KiB
Changelog: 分镜列表对接后端 API
日期: 2026-02-09
类型: 功能优化
影响范围: ParseFlowDialog 分镜列表展示
变更概述
将 ParseFlowDialog 中的分镜列表从本地 mock 数据切换为后端 API 数据源,实现真实数据展示。
变更详情
1. 数据源切换
修改文件: client/src/components/features/storyboard/ParseFlowDialog.tsx
变更位置: 第 1147-1181 行 useEffect 初始化逻辑
改动内容:
- ✅ 从后端
storyboards数据同步到本地shots状态 - ✅ 使用已有的
convertStoryboardsToShots转换函数 - ✅ 移除 mock 数据:删除自动创建空分镜的逻辑
- ✅ 后端无数据时显示空列表,引导用户手动添加
核心改动:
// 原逻辑:自动创建空分镜(mock)
if (parsed.length === 0) {
const newId = generateUUID();
parsed.push({
id: newId,
title: '新分镜 1',
content: '',
duration: 3,
// ... 其他字段
});
}
// 新逻辑:不自动创建,显示空态
// 用户可通过"添加分镜"按钮手动创建
功能表现
打开弹窗时
| 场景 | 旧行为 | 新行为 |
|---|---|---|
| 后端有分镜 | 显示 mock 数据(1 个空分镜) | 显示后端真实分镜列表 |
| 后端无分镜 | 显示 mock 数据(1 个空分镜) | 显示空态 + "新建分镜"按钮 |
编辑流程
- ✅ 打开弹窗 → 自动加载后端分镜列表
- ✅ 编辑分镜 → 修改本地
shots状态(流畅编辑) - ✅ 点击"应用到项目" → 保存到后端(批量提交)
技术细节
API 调用链
ParseFlowDialog
↓ useStoryboards(projectId)
↓ storyboardApi.getByProjectId()
↓ GET /api/v1/storyboards?project_id={id}
↓ 返回 Storyboard[]
↓ convertStoryboardsToShots()
↓ 转换为 DraftShot[] (本地编辑格式)
↓ setShots() (更新列表状态)
数据转换逻辑
convertStoryboardsToShots 函数负责将后端数据结构转换为前端编辑格式:
{
id: item.id.toString(),
title: item.title,
duration: sb.duration ?? (item.endTime - item.startTime),
shotNumber: shotMatch?.[1] ?? (index + 1).toString(),
shotType: sb.angle || '',
cameraMovement: sb.cameraMovement || '',
description: item.description || '',
characters: [...], // 从 resources 映射
locations: [...],
props: [...],
// ...
}
依赖关系
相关 Hook
useStoryboards(projectId): 获取项目分镜列表useResources(projectId): 获取资源库(用于名称映射)
相关组件
ParseFlowStoryboardListPanel: 分镜列表展示面板StoryboardEditForm: 分镜编辑表单
测试要点
场景 1: 后端有分镜数据
- 打开弹窗
- 验证:分镜列表显示后端数据(标题、时长、描述等)
- 验证:选中第一个分镜,右侧表单显示详情
场景 2: 后端无分镜数据
- 打开弹窗
- 验证:显示空态 UI("暂无分镜")
- 验证:点击"新建分镜"按钮可添加
场景 3: 编辑并保存
- 编辑分镜(修改标题、描述等)
- 点击"应用到项目"
- 验证:后端数据已更新
- 重新打开弹窗,验证:显示最新数据
潜在影响
兼容性
✅ 向下兼容:保留现有编辑逻辑,仅改变数据来源
性能
✅ 无性能退化:
- 使用 React Query 缓存(5 分钟 staleTime)
- 转换逻辑在客户端执行(秒级完成)
用户体验
✅ 改进点:
- 真实数据展示,避免 mock 数据误导
- 空态引导更清晰("新建分镜"按钮)
后续优化建议
- 实时保存: 考虑在字段修改时自动保存(需增加防抖)
- 冲突处理: 多用户同时编辑时的冲突检测
- 离线支持: 编辑缓存到本地存储,网络恢复后同步