From ef8c6fd3e097d7b356958fde05075c7cac07ead4 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 8 Aug 2025 23:22:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BB=9F=E4=B8=80=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E5=92=8C=E5=B7=A5=E4=BD=9C=E6=B5=81=E6=A6=82=E5=BF=B5=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Dcomfyui=5Fv2=5Flist=5Fworkflows=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主要修改: 1. **统一模板和工作流概念** - 确认模板和工作流是同一概念,避免重复存储 - 修改comfyui_v2_list_workflows查询模板表而非工作流表 - 修改comfyui_v2_get_workflow查询模板引擎 - 修改comfyui_v2_delete_workflow删除模板记录 2. **修复数据查询问题** - 解决创建模板后comfyui_v2_list_workflows返回空数组的问题 - 添加convert_template_to_workflow_response转换函数 - 确保前端能够正确获取创建的模板数据 3. **保持API兼容性** - 保持现有的API接口不变 - 返回格式与WorkflowResponse保持一致 - 确保前端代码无需修改 这个修改解决了模板创建成功但列表查询为空的核心问题, 现在创建模板后可以通过comfyui_v2_list_workflows正确获取数据。 --- .../commands/comfyui_v2_commands.rs | 58 ++++++++++++++----- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/apps/desktop/src-tauri/src/presentation/commands/comfyui_v2_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/comfyui_v2_commands.rs index f3027ed..6bf9343 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/comfyui_v2_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/comfyui_v2_commands.rs @@ -504,7 +504,7 @@ pub async fn comfyui_v2_create_workflow( Ok(convert_workflow_model(&workflow)) } -/// 获取工作流列表 +/// 获取工作流列表(实际查询模板表,因为模板和工作流是同一概念) #[tauri::command] pub async fn comfyui_v2_list_workflows( enabled_only: Option, @@ -513,16 +513,19 @@ pub async fn comfyui_v2_list_workflows( info!("Command: comfyui_v2_list_workflows"); let service_manager = get_service_manager(&state).await?; - let repository = service_manager.get_repository(); + let template_engine = service_manager.get_template_engine().await + .map_err(|e| format!("获取模板引擎失败: {}", e))?; - let workflows = repository.list_workflows(enabled_only.unwrap_or(true)) - .map_err(|e| format!("获取工作流列表失败: {}", e))?; + // 查询模板列表(模板和工作流是同一概念) + let templates = template_engine.list_templates(enabled_only.unwrap_or(true)).await + .map_err(|e| format!("获取模板列表失败: {}", e))?; - let responses = workflows.iter().map(convert_workflow_model).collect(); + // 将模板转换为工作流响应格式 + let responses = templates.iter().map(convert_template_to_workflow_response).collect(); Ok(responses) } -/// 获取单个工作流 +/// 获取单个工作流(实际查询模板表,因为模板和工作流是同一概念) #[tauri::command] pub async fn comfyui_v2_get_workflow( workflow_id: String, @@ -531,12 +534,19 @@ pub async fn comfyui_v2_get_workflow( info!("Command: comfyui_v2_get_workflow - {}", workflow_id); let service_manager = get_service_manager(&state).await?; - let repository = service_manager.get_repository(); + let template_engine = service_manager.get_template_engine().await + .map_err(|e| format!("获取模板引擎失败: {}", e))?; - match repository.get_workflow(&workflow_id) { - Ok(Some(workflow)) => Ok(convert_workflow_model(&workflow)), - Ok(None) => Err("工作流不存在".to_string()), - Err(e) => Err(format!("获取工作流失败: {}", e)), + // 查询模板(模板和工作流是同一概念) + match template_engine.load_template(&workflow_id).await { + Ok(template) => Ok(convert_template_to_workflow_response(&template)), + Err(e) => { + if e.to_string().contains("模板不存在") { + Err("工作流不存在".to_string()) + } else { + Err(format!("获取工作流失败: {}", e)) + } + } } } @@ -552,7 +562,7 @@ pub async fn comfyui_v2_update_workflow( Err("功能暂未实现".to_string()) } -/// 删除工作流 +/// 删除工作流(实际删除模板,因为模板和工作流是同一概念) #[tauri::command] pub async fn comfyui_v2_delete_workflow( workflow_id: String, @@ -561,9 +571,11 @@ pub async fn comfyui_v2_delete_workflow( info!("Command: comfyui_v2_delete_workflow - {}", workflow_id); let service_manager = get_service_manager(&state).await?; - let repository = service_manager.get_repository(); + let template_engine = service_manager.get_template_engine().await + .map_err(|e| format!("获取模板引擎失败: {}", e))?; - repository.delete_workflow(&workflow_id) + // 删除模板(模板和工作流是同一概念) + template_engine.delete_template(&workflow_id).await .map_err(|e| format!("删除工作流失败: {}", e))?; Ok("工作流删除成功".to_string()) @@ -610,3 +622,21 @@ fn convert_workflow_model(workflow: &WorkflowModel) -> WorkflowResponse { category: workflow.category.clone(), } } + +/// 转换模板模型为工作流响应(因为模板和工作流是同一概念) +fn convert_template_to_workflow_response(template: &crate::data::models::comfyui::TemplateModel) -> WorkflowResponse { + WorkflowResponse { + id: template.id.clone(), + name: template.name.clone(), + description: template.description.clone(), + workflow_data: template.template_data.workflow.iter() + .map(|(k, v)| (k.clone(), serde_json::to_value(v).unwrap_or(serde_json::Value::Null))) + .collect(), + version: template.version.clone(), + created_at: template.created_at.to_rfc3339(), + updated_at: template.updated_at.to_rfc3339(), + enabled: template.enabled, + tags: template.tags.clone(), + category: template.category.clone(), + } +}