From 8f1355ba16fb9013fcf7b696894d7b82e450e3b2 Mon Sep 17 00:00:00 2001 From: imeepos Date: Tue, 15 Jul 2025 13:18:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=9F=A5=E8=AF=A2NULL=E5=80=BC=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=92=8CTauri=E5=91=BD=E4=BB=A4=E5=8F=82=E6=95=B0=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复video_classification_repository中get_classification_stats函数的NULL值处理 - 将SUM()查询结果从直接获取i32改为Option并提供默认值0 - 修复get_templates_by_project等命令的参数命名,使用camelCase以匹配前端调用 - 解决'Invalid column type Null at index: 1, name: pending'错误 - 解决'invalid args projectId for command get_templates_by_project'错误 --- .../video_classification_repository.rs | 12 ++++++------ .../project_template_binding_commands.rs | 18 +++++++++--------- .../services/projectTemplateBindingService.ts | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/desktop/src-tauri/src/data/repositories/video_classification_repository.rs b/apps/desktop/src-tauri/src/data/repositories/video_classification_repository.rs index 8950fb9..ec9b392 100644 --- a/apps/desktop/src-tauri/src/data/repositories/video_classification_repository.rs +++ b/apps/desktop/src-tauri/src/data/repositories/video_classification_repository.rs @@ -511,11 +511,11 @@ impl VideoClassificationRepository { ))?; let task_stats = stmt.query_row([&pending_json, &uploading_json, &analyzing_json, &completed_json, &failed_json], |row| { - let total: i32 = row.get(0)?; - let pending: i32 = row.get(1)?; - let processing: i32 = row.get(2)?; - let completed: i32 = row.get(3)?; - let failed: i32 = row.get(4)?; + let total: i32 = row.get::<_, Option>(0)?.unwrap_or(0); + let pending: i32 = row.get::<_, Option>(1)?.unwrap_or(0); + let processing: i32 = row.get::<_, Option>(2)?.unwrap_or(0); + let completed: i32 = row.get::<_, Option>(3)?.unwrap_or(0); + let failed: i32 = row.get::<_, Option>(4)?.unwrap_or(0); Ok((total, pending, processing, completed, failed)) })?; @@ -530,7 +530,7 @@ impl VideoClassificationRepository { let record_stats = stmt.query_row([], |row| { Ok(( - row.get::<_, i32>(0)?, + row.get::<_, Option>(0)?.unwrap_or(0), row.get::<_, Option>(1)?.unwrap_or(0.0), row.get::<_, Option>(2)?.unwrap_or(0.0), )) diff --git a/apps/desktop/src-tauri/src/presentation/commands/project_template_binding_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/project_template_binding_commands.rs index 8c92788..aa7239e 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/project_template_binding_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/project_template_binding_commands.rs @@ -96,12 +96,12 @@ pub async fn list_project_template_bindings( /// 获取项目的模板列表 #[tauri::command] pub async fn get_templates_by_project( - project_id: String, + projectId: String, state: State<'_, AppState>, ) -> Result, String> { let service = create_service(&state)?; - service.get_templates_by_project(&project_id) + service.get_templates_by_project(&projectId) .await .map_err(|e| e.to_string()) } @@ -109,12 +109,12 @@ pub async fn get_templates_by_project( /// 获取模板的项目列表 #[tauri::command] pub async fn get_projects_by_template( - template_id: String, + templateId: String, state: State<'_, AppState>, ) -> Result, String> { let service = create_service(&state)?; - service.get_projects_by_template(&template_id) + service.get_projects_by_template(&templateId) .await .map_err(|e| e.to_string()) } @@ -174,12 +174,12 @@ pub async fn deactivate_project_template_binding( /// 获取项目的主要模板绑定 #[tauri::command] pub async fn get_primary_template_binding_for_project( - project_id: String, + projectId: String, state: State<'_, AppState>, ) -> Result, String> { let service = create_service(&state)?; - service.get_primary_binding_for_project(&project_id) + service.get_primary_binding_for_project(&projectId) .await .map_err(|e| e.to_string()) } @@ -187,13 +187,13 @@ pub async fn get_primary_template_binding_for_project( /// 设置项目的主要模板 #[tauri::command] pub async fn set_primary_template_for_project( - project_id: String, - template_id: String, + projectId: String, + templateId: String, state: State<'_, AppState>, ) -> Result { let service = create_service(&state)?; - service.set_primary_template(&project_id, &template_id) + service.set_primary_template(&projectId, &templateId) .await .map_err(|e| e.to_string()) } diff --git a/apps/desktop/src/services/projectTemplateBindingService.ts b/apps/desktop/src/services/projectTemplateBindingService.ts index 7bfe73f..196e83d 100644 --- a/apps/desktop/src/services/projectTemplateBindingService.ts +++ b/apps/desktop/src/services/projectTemplateBindingService.ts @@ -95,7 +95,7 @@ export class ProjectTemplateBindingService { */ static async getTemplatesByProject(projectId: string): Promise { try { - return await invoke('get_templates_by_project', { project_id: projectId }); + return await invoke('get_templates_by_project', { projectId }); } catch (error) { console.error('获取项目模板列表失败:', error); throw new Error(`获取项目模板列表失败: ${error}`); @@ -107,7 +107,7 @@ export class ProjectTemplateBindingService { */ static async getProjectsByTemplate(templateId: string): Promise { try { - return await invoke('get_projects_by_template', { template_id: templateId }); + return await invoke('get_projects_by_template', { templateId }); } catch (error) { console.error('获取模板项目列表失败:', error); throw new Error(`获取模板项目列表失败: ${error}`);