diff --git a/apps/desktop/src-tauri/src/presentation/commands/outfit_image_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/outfit_image_commands.rs index 1224b23..4fe0d7e 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/outfit_image_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/outfit_image_commands.rs @@ -593,6 +593,16 @@ pub async fn execute_outfit_image_task( style_preferences: None, }; + // 立即更新记录状态为"生成中" + if let Ok(Some(mut record)) = outfit_repo.get_record_by_id(&record_id) { + record.start_processing(); + if let Err(e) = outfit_repo.update_record(&record) { + error!("更新记录状态为生成中失败: {}", e); + } else { + info!("📝 更新记录状态为生成中: {}", record_id); + } + } + // 在后台异步执行生成任务 let app_handle_clone = app_handle.clone(); let record_id_clone = record_id.clone(); @@ -890,9 +900,29 @@ async fn perform_outfit_image_generation( // 创建进度回调 let app_handle_clone = app_handle.clone(); let record_id_clone = record_id.clone(); + let outfit_repo_clone = OutfitImageRepository::new(database.clone()); + let progress_callback = move |progress: WorkflowProgress| { + // 更新数据库中的进度 + if let Ok(Some(mut record)) = outfit_repo_clone.get_record_by_id(&record_id_clone) { + record.progress = progress.progress_percentage / 100.0; // 转换为0-1范围 + if let Err(e) = outfit_repo_clone.update_record(&record) { + warn!("更新记录进度失败: {}", e); + } + } + // 发送进度事件到前端 - if let Err(e) = app_handle_clone.emit("outfit_generation_progress", &progress) { + let progress_event = serde_json::json!({ + "type": "outfit_generation_progress", + "record_id": record_id_clone, + "progress_percentage": progress.progress_percentage, + "current_step": progress.current_step, + "total_steps": progress.total_steps, + "status_message": progress.status_message, + "current_node_id": progress.current_node_id + }); + + if let Err(e) = app_handle_clone.emit("outfit_generation_progress", &progress_event) { warn!("发送进度事件失败: {}", e); } info!("生成进度 - 记录ID: {}, 进度: {}%", record_id_clone, progress.progress_percentage); diff --git a/apps/desktop/src/pages/ModelDetail.tsx b/apps/desktop/src/pages/ModelDetail.tsx index fdd9d76..3a5c797 100644 --- a/apps/desktop/src/pages/ModelDetail.tsx +++ b/apps/desktop/src/pages/ModelDetail.tsx @@ -347,9 +347,16 @@ const ModelDetail: React.FC = () => { loadOutfitRecords(); }, [id]); - // 监听穿搭图片生成完成事件 + // 监听穿搭图片生成事件 useEffect(() => { const setupEventListeners = async () => { + // 监听生成进度事件 + const unlistenProgress = await listen('outfit_generation_progress', (event) => { + console.log('收到穿搭图片生成进度事件:', event.payload); + // 实时更新记录列表显示进度 + loadOutfitRecords(); + }); + // 监听生成完成事件 const unlistenCompleted = await listen('outfit_generation_completed', (event) => { console.log('收到穿搭图片生成完成事件:', event.payload); @@ -366,6 +373,7 @@ const ModelDetail: React.FC = () => { }); return () => { + unlistenProgress(); unlistenCompleted(); unlistenFailed(); };