更新工作流数据管理逻辑,新增任务数据结构以跟踪草图、角色、镜头草图和视频的状态和数量。同时,优化ScriptRenderer组件的状态管理,确保在不同来源下正确处理工作流暂停状态。修改编辑模态中的按钮文本为“应用”。

This commit is contained in:
北枳 2025-08-12 23:07:33 +08:00
parent f147b72db6
commit d588bb18e2
3 changed files with 55 additions and 33 deletions

View File

@ -82,6 +82,15 @@ export function useWorkflowData() {
const [isPauseWorkFlow, setIsPauseWorkFlow] = useState(false); const [isPauseWorkFlow, setIsPauseWorkFlow] = useState(false);
const [mode, setMode] = useState<'automatic' | 'manual'>('automatic'); const [mode, setMode] = useState<'automatic' | 'manual'>('automatic');
const taskData: any = {
sketch: { data: [], total_count: -1 },
character: { data: [], total_count: -1 },
shot_sketch: { data: [], total_count: -1 },
video: { data: [], total_count: -1 },
status: '0'
};
let loadingText: any = LOADING_TEXT_MAP.initializing;
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const { sketchCount, videoCount } = useAppSelector((state) => state.workflow); const { sketchCount, videoCount } = useAppSelector((state) => state.workflow);
@ -193,8 +202,8 @@ export function useWorkflowData() {
throw new Error(response.message); throw new Error(response.message);
} }
let loadingText: any = LOADING_TEXT_MAP.initializing;
let finalStep = '0', sketchCount = 0, isChange = false; let sketchCount = 0;
const all_task_data = response.data; const all_task_data = response.data;
// all_task_data 下标0 和 下标1 换位置 // all_task_data 下标0 和 下标1 换位置
const temp = all_task_data[0]; const temp = all_task_data[0];
@ -205,8 +214,9 @@ export function useWorkflowData() {
for (const task of all_task_data) { for (const task of all_task_data) {
// 如果有已完成的数据,同步到状态 // 如果有已完成的数据,同步到状态
if (task.task_name === 'generate_sketch' && task.task_result) { console.log('000000000', taskData);
finalStep = '1'; if (task.task_name === 'generate_sketch' && (task.task_status !== 'COMPLETED' || taskData.sketch.total_count !== taskData.sketch.data.length)) {
taskData.status = '1';
const realSketchResultData = task.task_result.data.filter((item: any) => item.image_path); const realSketchResultData = task.task_result.data.filter((item: any) => item.image_path);
if (realSketchResultData.length >= 0) { if (realSketchResultData.length >= 0) {
// 正在生成草图中 替换 sketch 数据 // 正在生成草图中 替换 sketch 数据
@ -217,6 +227,7 @@ export function useWorkflowData() {
script: sketch.sketch_name script: sketch.sketch_name
}); });
} }
taskData.sketch.data = sketchList;
setTaskSketch(sketchList); setTaskSketch(sketchList);
setTaskScenes(sketchList); setTaskScenes(sketchList);
updateSketchCount(sketchList.length); updateSketchCount(sketchList.length);
@ -225,15 +236,16 @@ export function useWorkflowData() {
} }
if (task.task_status === 'COMPLETED') { if (task.task_status === 'COMPLETED') {
// 草图生成完成 // 草图生成完成
taskData.sketch.total_count = taskData.sketch.data.length;
setIsGeneratingSketch(false); setIsGeneratingSketch(false);
sketchCount = task.task_result.total_count; sketchCount = task.task_result.total_count;
console.log('----------草图生成完成', sketchCount); console.log('----------草图生成完成', sketchCount);
loadingText = LOADING_TEXT_MAP.sketchComplete; loadingText = LOADING_TEXT_MAP.sketchComplete;
finalStep = '2'; taskData.status = '2';
} }
setTotalSketchCount(task.task_result.total_count); setTotalSketchCount(task.task_result.total_count);
} }
if (task.task_name === 'generate_character' && task.task_result) { if (task.task_name === 'generate_character' && (task.task_status !== 'COMPLETED' || taskData.character.total_count !== taskData.character.data.length)) {
if (task.task_result.data.length >= 0 && roles.length !== task.task_result.data.length) { if (task.task_result.data.length >= 0 && roles.length !== task.task_result.data.length) {
// 正在生成角色中 替换角色数据 // 正在生成角色中 替换角色数据
const characterList = []; const characterList = [];
@ -246,21 +258,23 @@ export function useWorkflowData() {
roleDescription: character.character_description roleDescription: character.character_description
}); });
} }
taskData.character.data = characterList;
setRoles(characterList); setRoles(characterList);
loadingText = LOADING_TEXT_MAP.newCharacter(characterList.length, task.task_result.total_count); loadingText = LOADING_TEXT_MAP.newCharacter(characterList.length, task.task_result.total_count);
} }
if (task.task_status === 'COMPLETED') { if (task.task_status === 'COMPLETED') {
console.log('----------角色生成完成,有几个分镜', sketchCount); console.log('----------角色生成完成,有几个分镜', sketchCount);
// 角色生成完成 // 角色生成完成
finalStep = '3'; taskData.character.total_count = taskData.character.data.length;
taskData.status = '3';
loadingText = LOADING_TEXT_MAP.getShotSketchStatus; loadingText = LOADING_TEXT_MAP.getShotSketchStatus;
} }
} }
if (task.task_name === 'generate_shot_sketch' && task.task_result) { if (task.task_name === 'generate_shot_sketch' && (task.task_status !== 'COMPLETED' || taskData.shot_sketch.total_count !== taskData.shot_sketch.data.length)) {
const realShotResultData = task.task_result.data.filter((item: any) => item.url); const realShotResultData = task.task_result.data.filter((item: any) => item.url);
if (realShotResultData.length >= 0) { if (realShotResultData.length >= 0) {
finalStep = '1'; taskData.status = '1';
console.log('----------正在生成草图中 替换 sketch 数据', taskShotSketch.length, realShotResultData.length); console.log('----------正在生成草图中 替换 sketch 数据', taskShotSketch.length, realShotResultData.length);
// 正在生成草图中 替换 sketch 数据 // 正在生成草图中 替换 sketch 数据
const sketchList = []; const sketchList = [];
@ -270,6 +284,7 @@ export function useWorkflowData() {
script: sketch.description script: sketch.description
}); });
} }
taskData.shot_sketch.data = sketchList;
setTaskSketch(sketchList); setTaskSketch(sketchList);
setTaskShotSketch(sketchList); setTaskShotSketch(sketchList);
updateSketchCount(sketchList.length); updateSketchCount(sketchList.length);
@ -278,16 +293,17 @@ export function useWorkflowData() {
} }
if (task.task_status === 'COMPLETED') { if (task.task_status === 'COMPLETED') {
// 草图生成完成 // 草图生成完成
taskData.shot_sketch.total_count = taskData.shot_sketch.data.length;
setIsGeneratingSketch(false); setIsGeneratingSketch(false);
setIsGeneratingVideo(true); setIsGeneratingVideo(true);
sketchCount = task.task_result.total_count; sketchCount = task.task_result.total_count;
console.log('----------草图生成完成', sketchCount); console.log('----------草图生成完成', sketchCount);
loadingText = LOADING_TEXT_MAP.getVideoStatus; loadingText = LOADING_TEXT_MAP.getVideoStatus;
finalStep = '3'; taskData.status = '3';
} }
setTotalSketchCount(task.task_result.total_count); setTotalSketchCount(task.task_result.total_count);
} }
if (task.task_name === 'generate_videos' && task.task_result) { if (task.task_name === 'generate_videos' && (task.task_status !== 'COMPLETED' || taskData.video.total_count !== taskData.video.data.length)) {
const realTaskResultData = task.task_result.data.filter((item: any) => item.urls && item.urls.length > 0); const realTaskResultData = task.task_result.data.filter((item: any) => item.urls && item.urls.length > 0);
if (realTaskResultData.length >= 0) { if (realTaskResultData.length >= 0) {
console.log('----------正在生成视频中', realTaskResultData.length); console.log('----------正在生成视频中', realTaskResultData.length);
@ -302,6 +318,7 @@ export function useWorkflowData() {
video_id: video.video_id, video_id: video.video_id,
}); });
} }
taskData.video.data = videoList;
setTaskVideos(videoList); setTaskVideos(videoList);
updateVideoCount(videoList.length); updateVideoCount(videoList.length);
setIsGeneratingVideo(true); setIsGeneratingVideo(true);
@ -310,11 +327,12 @@ export function useWorkflowData() {
if (task.task_status === 'COMPLETED') { if (task.task_status === 'COMPLETED') {
console.log('----------视频生成完成'); console.log('----------视频生成完成');
// 视频生成完成 // 视频生成完成
taskData.video.total_count = taskData.video.data.length;
setIsGeneratingVideo(false); setIsGeneratingVideo(false);
finalStep = '4'; taskData.status = '4';
// 暂时没有音频生成 直接跳过 // 暂时没有音频生成 直接跳过
finalStep = '5'; taskData.status = '5';
loadingText = LOADING_TEXT_MAP.postProduction('generating rough cut video...'); loadingText = LOADING_TEXT_MAP.postProduction('generating rough cut video...');
} }
} }
@ -324,7 +342,7 @@ export function useWorkflowData() {
setFinal({ setFinal({
url: task.task_result.video, url: task.task_result.video,
}) })
finalStep = '5.5'; taskData.status = '5.5';
loadingText = LOADING_TEXT_MAP.postProduction('generating fine-grained video clips...'); loadingText = LOADING_TEXT_MAP.postProduction('generating fine-grained video clips...');
} }
} }
@ -334,7 +352,7 @@ export function useWorkflowData() {
setFinal({ setFinal({
url: task.task_result.video, url: task.task_result.video,
}) })
finalStep = '6'; taskData.status = '6';
loadingText = LOADING_TEXT_MAP.complete; loadingText = LOADING_TEXT_MAP.complete;
// 停止轮询 // 停止轮询
@ -343,14 +361,14 @@ export function useWorkflowData() {
} }
} }
console.log('----------finalStep', finalStep); console.log('----------finalStep', taskData.status);
// 设置步骤 // 设置步骤
setCurrentStep(finalStep); setCurrentStep(taskData.status);
setTaskObject(prev => { setTaskObject(prev => {
if (!prev) return null; if (!prev) return null;
return { return {
...prev, ...prev,
taskStatus: finalStep taskStatus: taskData.status
}; };
}); });
setCurrentLoadingText(loadingText); setCurrentLoadingText(loadingText);

View File

@ -114,12 +114,14 @@ export const ScriptRenderer: React.FC<ScriptRendererProps> = ({ data, setIsPause
if (contentEditableRef.current) { if (contentEditableRef.current) {
const text = contentEditableRef.current.innerText; const text = contentEditableRef.current.innerText;
console.log('contentEditableRef---text', text); console.log('contentEditableRef---text', text);
setAnyAttribute(block.id, text,(old: string)=>{ if (from !== 'tab') {
if(old!==text){ setAnyAttribute(block.id, text,(old: string)=>{
mode.includes('auto') && applyScript(); if(old!==text){
setIsPauseWorkFlow(false); mode.includes('auto') && applyScript();
} setIsPauseWorkFlow(false);
}); }
});
}
} }
}; };
@ -133,18 +135,20 @@ export const ScriptRenderer: React.FC<ScriptRendererProps> = ({ data, setIsPause
}); });
return; return;
} }
setIsPauseWorkFlow(true);
setAddThemeTag(value); setAddThemeTag(value);
setAnyAttribute('categories', value.join(','),(old: string)=>{ if (from !== 'tab') {
if(old!==value.join(',')){ setIsPauseWorkFlow(true);
mode.includes('auto') && applyScript(); setAnyAttribute('categories', value.join(','),(old: string)=>{
setIsPauseWorkFlow(false); if(old!==value.join(',')){
} mode.includes('auto') && applyScript();
}); setIsPauseWorkFlow(false);
}
});
}
}; };
const handleEditBlock = (block: ScriptBlock) => { const handleEditBlock = (block: ScriptBlock) => {
setIsPauseWorkFlow(true); from !== 'tab' && setIsPauseWorkFlow(true);
setIsInit(false); setIsInit(false);
setEditBlockId(block.id); setEditBlockId(block.id);
setActiveBlockId(block.id); setActiveBlockId(block.id);

View File

@ -288,7 +288,7 @@ export function EditModal({
whileTap={{ scale: 0.98 }} whileTap={{ scale: 0.98 }}
onClick={() => {handleSave()}} onClick={() => {handleSave()}}
> >
Save Apply
</motion.button> </motion.button>
</div> </div>
</div> </div>