From 35a0821153ea9dfcc61cc2797a5b695ead9ce722 Mon Sep 17 00:00:00 2001 From: Jasery Date: Fri, 31 Oct 2025 16:37:06 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=A8=A1=E6=9D=BF=E7=AE=A1=E7=90=86):?= =?UTF-8?q?=20=E7=A7=BB=E9=99=A4=E6=9C=AA=E4=BF=9D=E5=AD=98=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=E6=A3=80=E6=B5=8B=E5=B9=B6=E6=8F=90=E5=8F=96=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=8D=A1=E7=89=87=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除CreateTemplateScreen中的未保存更改检测逻辑,简化保存和返回操作 将TemplateListScreen中的模板卡片提取为独立的TemplateCard组件 --- src/renderer/components/TemplateCard.vue | 100 ++++++++++++++++++ src/renderer/screens/CreateTemplateScreen.vue | 27 +---- src/renderer/screens/TemplateListScreen.vue | 85 ++------------- 3 files changed, 109 insertions(+), 103 deletions(-) create mode 100644 src/renderer/components/TemplateCard.vue diff --git a/src/renderer/components/TemplateCard.vue b/src/renderer/components/TemplateCard.vue new file mode 100644 index 0000000..4955aca --- /dev/null +++ b/src/renderer/components/TemplateCard.vue @@ -0,0 +1,100 @@ + + + \ No newline at end of file diff --git a/src/renderer/screens/CreateTemplateScreen.vue b/src/renderer/screens/CreateTemplateScreen.vue index e2569b3..e45f793 100644 --- a/src/renderer/screens/CreateTemplateScreen.vue +++ b/src/renderer/screens/CreateTemplateScreen.vue @@ -62,7 +62,7 @@ @@ -166,7 +166,6 @@ const { getTemplateById } = templateStore const formValid = ref(false) const templateName = ref('') const templateDescription = ref('') -const hasChanges = ref(false) // Dialogs const showFileDialog = ref(false) @@ -195,14 +194,6 @@ const isEditMode = computed(() => !!route.params.id) const requiredRule = (fieldName: string) => (v: string | null | undefined) => !!v || `${fieldName}为必填项` -// Watch for changes to detect unsaved changes -watch( - [templateName, templateDescription, treeStructure], - () => { - hasChanges.value = true - }, - { deep: true } -) // Lifecycle onMounted(async () => { @@ -223,7 +214,6 @@ onMounted(async () => { templateName.value = template.name templateDescription.value = template.description treeStructure.value = [...template.treeStructure] - hasChanges.value = false } else { router.push('/templates') } @@ -431,21 +421,7 @@ const handleFileDialogConfirm = (data: { path: string; sourcePath?: string; sour } const goBack = async () => { - if (hasChanges.value) { - const confirmed = await ConfirmDialogService.confirm({ - title: '确认离开', - message: '您有未保存的更改,确定要离开吗?', - confirmText: '离开', - cancelText: '取消', - confirmColor: 'warning' - }) - - if (confirmed) { - router.push('/templates') - } - } else { router.push('/templates') - } } @@ -540,7 +516,6 @@ const saveTemplate = () => { templateStore.addTemplate(templateData) } - hasChanges.value = false router.push('/templates') } diff --git a/src/renderer/screens/TemplateListScreen.vue b/src/renderer/screens/TemplateListScreen.vue index 1cb4af0..07e5471 100644 --- a/src/renderer/screens/TemplateListScreen.vue +++ b/src/renderer/screens/TemplateListScreen.vue @@ -28,62 +28,13 @@
- - - {{ template.name }} - {{ template.description }} - - - - - - 节点: {{ countTreeNodes(template.treeStructure).files }} - - - 目录: {{ countTreeNodes(template.treeStructure).directories }} - - - - - - - -
- - 查看 - - - 执行 - -
- - - - - - - - 修改 - - - - - - - 删除 - - - -
-
+
@@ -141,6 +92,7 @@ import { useRouter } from 'vue-router' import { useTemplateStore, TreeNode } from '@/renderer/store/template' import { Template } from '@/renderer/store/template' import TemplateTree from '@/renderer/components/TemplateTree.vue' +import TemplateCard from '@/renderer/components/TemplateCard.vue' import { ConfirmDialogService } from '@/renderer/utils/confirm-dialog-service' const router = useRouter() @@ -166,28 +118,7 @@ const executePath = ref('') const baseDirNames = ref('') const executeFormValid = ref(false) -// Count files and directories in tree structure -const countTreeNodes = (nodes: TreeNode[]) => { - let files = 0; - let directories = 0; - const count = (nodeList: TreeNode[]) => { - nodeList.forEach(node => { - if (node.type === 'file') { - files++; - } else if (node.type === 'directory') { - directories++; - if (node.children) { - count(node.children); - } - } - }); - }; - - count(nodes || []); - - return { files, directories }; -} const templateTree = computed(() => { if (!selectedTemplate.value) return []