diff --git a/api/allMovieType.ts b/api/allMovieType.ts index 0b1a7b3..75f9f82 100644 --- a/api/allMovieType.ts +++ b/api/allMovieType.ts @@ -484,13 +484,7 @@ export interface CharacterUpdateAndRegenerateResponse { /** 角色描述(已更新) */ character_description: string; /** 重新生成产物的图片地址 */ - image_path?: string; - /** 角色类型/作用 */ - role?: string; - /** 性别 */ - gender?: string; - /** 角色简要说明/摘要 */ - brief?: string; + image_url?: string; /** 从角色描述提取的高亮关键词/短语 */ highlights: string[]; } diff --git a/api/video_flow.ts b/api/video_flow.ts index 22a63b2..9029be2 100644 --- a/api/video_flow.ts +++ b/api/video_flow.ts @@ -304,7 +304,7 @@ export const applyRoleToShots = async (request: { message?: string; }>; }>> => { - return post("/movie/apply_role_to_shots", request); + return post("/movie/regenerate_shot_video", request); }; /** diff --git a/app/service/Interaction/RoleService.ts b/app/service/Interaction/RoleService.ts index 17ba847..5fb6302 100644 --- a/app/service/Interaction/RoleService.ts +++ b/app/service/Interaction/RoleService.ts @@ -164,7 +164,7 @@ export const useRoleServiceHook = (): UseRoleService => { console.error('优化角色文本失败:', error); throw error; } - }, [roleEditUseCase, currentRoleText, selectedRole]); + }, [roleEditUseCase, currentRoleText, selectedRole, selectRole]); /** * 修改AI文本 @@ -408,7 +408,7 @@ export const useRoleServiceHook = (): UseRoleService => { const result = await roleEditUseCase.saveRegeneratedCharacterToLibrary( selectedRole, projectId, - User.id + String(User.id) ); console.log('角色保存到角色库成功:', result); diff --git a/app/service/Interaction/RoleShotService.ts b/app/service/Interaction/RoleShotService.ts index 9954297..a3716b6 100644 --- a/app/service/Interaction/RoleShotService.ts +++ b/app/service/Interaction/RoleShotService.ts @@ -149,12 +149,6 @@ export const useRoleShotServiceHook = (projectId: string,selectRole?:RoleEntity) */ const applyRoleToSelectedShots = useCallback(async (newRole: RoleEntity) => { try { - // 检查是否有选中的分镜 - const selectedShots = shotSelectionList.filter(shot => shot.selected); - if (selectedShots.length === 0) { - throw new Error('请先选择要应用角色的分镜'); - } - // 检查是否有选中的角色 if (!selectedRole||!selectedRole.generateText ) { throw new Error('请先选择要应用的角色'); @@ -179,7 +173,7 @@ export const useRoleShotServiceHook = (projectId: string,selectRole?:RoleEntity) ]; // 循环调用接口,为每个选中的分镜单独调用 - selectedShots.forEach(async (shot) => { + shotSelectionList.forEach(async (shot) => { try { // 调用应用角色到分镜接口(不等待完成) applyRoleToShots({ @@ -201,7 +195,7 @@ export const useRoleShotServiceHook = (projectId: string,selectRole?:RoleEntity) } }); - console.log(`开始为 ${selectedShots.length} 个分镜替换角色`); + console.log(`开始为 ${shotSelectionList.length} 个分镜替换角色`); // 延迟重置替换状态,给用户一些反馈时间 setTimeout(() => { diff --git a/app/service/Interaction/ShotService.ts b/app/service/Interaction/ShotService.ts index bc4928f..de32f96 100644 --- a/app/service/Interaction/ShotService.ts +++ b/app/service/Interaction/ShotService.ts @@ -76,7 +76,7 @@ export const useShotService = (): UseShotService => { const segments = await vidoEditUseCase.getVideoSegmentList(projectId); setProjectId(projectId); setVideoSegments(segments); - setIntervalIdHandler(); + setIntervalIdHandler(projectId); } catch (error) { console.error("获取视频片段列表失败:", error); } finally { @@ -86,7 +86,8 @@ export const useShotService = (): UseShotService => { [vidoEditUseCase] ); - const setIntervalIdHandler = async (): Promise => { + const setIntervalIdHandler = async (projectId: string): Promise => { + // 每次执行前先清除之前的定时器,确保只存在一个定时器 if (intervalId) { clearInterval(intervalId); @@ -95,9 +96,6 @@ export const useShotService = (): UseShotService => { // 定义定时任务,每5秒执行一次 const newIntervalId = setInterval(async () => { try { - if (!projectId) { - return; - } const segments = await vidoEditUseCase.getVideoSegmentList(projectId); setVideoSegments(prevSegments => { diff --git a/app/service/usecase/RoleEditUseCase.ts b/app/service/usecase/RoleEditUseCase.ts index ce97cd3..286b146 100644 --- a/app/service/usecase/RoleEditUseCase.ts +++ b/app/service/usecase/RoleEditUseCase.ts @@ -240,12 +240,11 @@ export class RoleEditUseCase { loadingProgress: 100, disableEdit: false })), // 将高亮关键词转换为TagValueObject格式 - imageUrl: characterData.image_path || '', + imageUrl: characterData.image_url || '', loadingProgress: 100, disableEdit: false, updatedAt: Date.now() }; - return roleEntity; } catch (error) { console.error('AI生成角色失败:', error); diff --git a/components/pages/work-flow/media-viewer.tsx b/components/pages/work-flow/media-viewer.tsx index 8ee3be3..e94e7a4 100644 --- a/components/pages/work-flow/media-viewer.tsx +++ b/components/pages/work-flow/media-viewer.tsx @@ -148,6 +148,7 @@ export function MediaViewer({ // 包装编辑按钮点击事件 const handleEditClick = (tab: string) => { + // TODO 点击没有任何事件效果,页面没变化 setUserHasInteracted(true); onEditModalOpen(tab); }; diff --git a/components/pages/work-flow/use-edit-data.tsx b/components/pages/work-flow/use-edit-data.tsx index de6452a..8b3f522 100644 --- a/components/pages/work-flow/use-edit-data.tsx +++ b/components/pages/work-flow/use-edit-data.tsx @@ -45,8 +45,9 @@ export const useEditData = (tabType: string) => { optimizeRoleText, updateRoleText, regenerateRole, - uploadImageToQiniu, - saveRoleToLibrary + uploadImageAndUpdateRole, + saveRoleToLibrary, + } = useRoleServiceHook(); const { @@ -58,9 +59,18 @@ export const useEditData = (tabType: string) => { toggleSelectAllShots, toggleShotSelection, applyRoleToSelectedShots, - clearShotSelection + clearShotSelection, + setSelectedRole } = useRoleShotServiceHook(projectId, selectedRole || undefined); + useEffect(() => { + console.log('useEditData-----selectedRole', selectedRole); + if(selectedRole){ + setSelectedRole(selectedRole); + } + + }, [selectedRole]); + useEffect(() => { if (tabType === 'shot') { getVideoSegmentList(projectId).then(() => { @@ -107,7 +117,7 @@ export const useEditData = (tabType: string) => { updateRoleText, regenerateRole, fetchUserRoleLibrary, - uploadImageToQiniu, + uploadImageAndUpdateRole, // role shot shotSelectionList, selectedRoleId, diff --git a/components/pages/work-flow/use-workflow-data.tsx b/components/pages/work-flow/use-workflow-data.tsx index 2a77e2b..e73d092 100644 --- a/components/pages/work-flow/use-workflow-data.tsx +++ b/components/pages/work-flow/use-workflow-data.tsx @@ -93,7 +93,8 @@ export function useWorkflowData() { } = useScriptService(); // 初始化剧本 useEffect(() => { - console.log('开始初始化剧本', originalText); + console.log('开始初始化剧本', originalText,episodeId); + // TODO 为什么一开始没项目id originalText && initializeFromProject(episodeId, originalText).then(() => { console.log('应用剧本'); // 自动模式下 应用剧本;手动模式 需要点击 下一步 触发 diff --git a/components/ui/character-tab-content.tsx b/components/ui/character-tab-content.tsx index 09f7fa9..0ac1a41 100644 --- a/components/ui/character-tab-content.tsx +++ b/components/ui/character-tab-content.tsx @@ -90,7 +90,7 @@ export function CharacterTabContent({ updateRoleText, regenerateRole, fetchUserRoleLibrary, - uploadImageToQiniu, + uploadImageAndUpdateRole, // role shot shotSelectionList, fetchRoleShots, @@ -230,7 +230,7 @@ export function CharacterTabContent({ } setIsUploading(true); - uploadImageToQiniu(file).then((data) => { + uploadImageAndUpdateRole(file).then((data) => { console.log('上传图片成功', data); // 清空input的值,这样同一个文件可以重复选择 event.target.value = '';