From 05903e22fc5d0007e4ca8817c2df9941413d831f Mon Sep 17 00:00:00 2001 From: imeepos Date: Fri, 25 Jul 2025 18:13:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A8=A1=E6=9D=BF=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=BC=B9=E6=A1=86=E4=BC=98=E5=8C=96=E5=92=8C=E5=8D=95=E4=B8=AA?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=8A=9F=E8=83=BD=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改模板详情弹框默认选中标签从'概览'改为'轨道' - 修复单个模板匹配记录删除时片段使用状态未正确更新的bug - 新增soft_delete_matching_result_with_usage_reset命令支持单个删除时重置使用状态 - 前端界面优化,提供更好的用户反馈 Changes: - apps/desktop/src/components/template/TemplateDetailModal.tsx: 默认标签页改为tracks - apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs: 新增单个删除重置方法 - apps/desktop/src-tauri/src/presentation/commands/template_matching_result_commands.rs: 新增Tauri命令 - apps/desktop/src-tauri/src/lib.rs: 注册新命令 - apps/desktop/src/components/TemplateMatchingResultManager.tsx: 更新前端删除逻辑 --- .../services/template_matching_result_service.rs | 15 +++++++++++++++ apps/desktop/src-tauri/src/lib.rs | 1 + .../commands/template_matching_result_commands.rs | 15 +++++++++++++++ .../components/TemplateMatchingResultManager.tsx | 5 ++++- .../components/template/TemplateDetailModal.tsx | 2 +- 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs b/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs index bb541ae..3d49a84 100644 --- a/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs +++ b/apps/desktop/src-tauri/src/business/services/template_matching_result_service.rs @@ -201,6 +201,21 @@ impl TemplateMatchingResultService { Ok(self.repository.soft_delete(result_id)?) } + /// 软删除匹配结果并重置资源使用状态 + pub async fn soft_delete_matching_result_with_usage_reset( + &self, + result_id: &str, + material_usage_repo: Arc + ) -> Result<(bool, u32)> { + // 先删除使用记录并重置资源状态 + let deleted_usage_records = material_usage_repo.delete_usage_records_by_matching_results(&[result_id.to_string()])?; + + // 再软删除匹配结果 + let deleted_result = self.soft_delete_matching_result(result_id).await?; + + Ok((deleted_result, deleted_usage_records)) + } + /// 批量删除匹配结果 pub async fn batch_delete_matching_results(&self, result_ids: &[String]) -> Result { let mut deleted_count = 0; diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs index 386544a..3593fb9 100644 --- a/apps/desktop/src-tauri/src/lib.rs +++ b/apps/desktop/src-tauri/src/lib.rs @@ -233,6 +233,7 @@ pub fn run() { commands::template_matching_result_commands::list_matching_results, commands::template_matching_result_commands::delete_matching_result, commands::template_matching_result_commands::soft_delete_matching_result, + commands::template_matching_result_commands::soft_delete_matching_result_with_usage_reset, commands::template_matching_result_commands::batch_delete_matching_results, commands::template_matching_result_commands::batch_soft_delete_matching_results, commands::template_matching_result_commands::batch_delete_matching_results_with_usage_reset, diff --git a/apps/desktop/src-tauri/src/presentation/commands/template_matching_result_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/template_matching_result_commands.rs index d4baf96..2872678 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/template_matching_result_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/template_matching_result_commands.rs @@ -153,6 +153,21 @@ pub async fn soft_delete_matching_result( .map_err(|e| e.to_string()) } +/// 软删除匹配结果并重置资源使用状态 +#[command] +pub async fn soft_delete_matching_result_with_usage_reset( + result_id: String, + database: State<'_, Arc>, +) -> Result<(bool, u32), String> { + let repository = Arc::new(TemplateMatchingResultRepository::new(database.inner().clone())); + let material_usage_repo = Arc::new(crate::data::repositories::material_usage_repository::MaterialUsageRepository::new(database.inner().clone())); + let service = TemplateMatchingResultService::new(repository); + + service.soft_delete_matching_result_with_usage_reset(&result_id, material_usage_repo) + .await + .map_err(|e| e.to_string()) +} + /// 批量删除匹配结果 #[command] pub async fn batch_delete_matching_results( diff --git a/apps/desktop/src/components/TemplateMatchingResultManager.tsx b/apps/desktop/src/components/TemplateMatchingResultManager.tsx index 3f210c4..e720cb8 100644 --- a/apps/desktop/src/components/TemplateMatchingResultManager.tsx +++ b/apps/desktop/src/components/TemplateMatchingResultManager.tsx @@ -116,10 +116,13 @@ export const TemplateMatchingResultManager: React.FC { try { - await invoke('soft_delete_matching_result', { + const [deletedResult, deletedUsageRecords] = await invoke<[boolean, number]>('soft_delete_matching_result_with_usage_reset', { resultId: result.id, }); + console.log(`删除结果: ${deletedResult ? '成功' : '失败'},重置 ${deletedUsageRecords} 条使用记录`); + success(`成功删除匹配结果,重置 ${deletedUsageRecords} 条使用记录`); + // 重新加载列表 await loadResults(); await loadStatistics(); diff --git a/apps/desktop/src/components/template/TemplateDetailModal.tsx b/apps/desktop/src/components/template/TemplateDetailModal.tsx index 2796a10..7522460 100644 --- a/apps/desktop/src/components/template/TemplateDetailModal.tsx +++ b/apps/desktop/src/components/template/TemplateDetailModal.tsx @@ -15,7 +15,7 @@ export const TemplateDetailModal: React.FC = ({ onClose, onTemplateUpdated, }) => { - const [activeTab, setActiveTab] = useState<'overview' | 'materials' | 'tracks'>('overview'); + const [activeTab, setActiveTab] = useState<'overview' | 'materials' | 'tracks'>('tracks'); const [expandedSections, setExpandedSections] = useState>({}); const [expandedMaterials, setExpandedMaterials] = useState>({}); const [expandedSegments, setExpandedSegments] = useState>({});