From 5ca31a53486ae2147ca0bfa9a40aebb837310f68 Mon Sep 17 00:00:00 2001 From: Jasery Date: Tue, 28 Oct 2025 18:34:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=8C=E9=87=87=E7=94=A8=E6=A0=91=E7=8A=B6?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E5=AD=98=E5=82=A8=E6=96=87=E4=BB=B6=E5=92=8C?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=EF=BC=8C=E4=BC=98=E5=8C=96=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=92=8C=E7=BC=96=E8=BE=91=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/IPCs.ts | 51 ++- src/renderer/screens/CreateTemplateScreen.vue | 379 +++++++++--------- src/renderer/screens/TemplateListScreen.vue | 60 ++- src/renderer/store/template.ts | 107 ++++- 4 files changed, 351 insertions(+), 246 deletions(-) diff --git a/src/main/IPCs.ts b/src/main/IPCs.ts index 34c9dba..4524462 100644 --- a/src/main/IPCs.ts +++ b/src/main/IPCs.ts @@ -177,25 +177,40 @@ export default class IPCs { const baseDirPath = join(targetPath, baseDirName) ensureDirSync(baseDirPath) - // Create directories from template - for (const dir of template.directories) { - const dirPath = join(baseDirPath, dir.path) - ensureDirSync(dirPath) - } - - // Create files from template - for (const file of template.files) { - const filePath = join(baseDirPath, file.path) - const fileDir = dirname(filePath) - ensureDirSync(fileDir) + // Helper function to traverse the tree and collect all nodes + const collectAllNodes = (nodes, allNodes = []) => { + for (const node of nodes) { + allNodes.push(node); + if (node.children) { + collectAllNodes(node.children, allNodes); + } + } + return allNodes; + }; + + // Collect all nodes from the tree structure + if (template.treeStructure && template.treeStructure.length > 0) { + const allNodes = collectAllNodes(template.treeStructure); - if (file.sourceFilePath) { - // Copy from source file - const sourceContent = readFileSync(file.sourceFilePath) - writeFileSync(filePath, sourceContent) - } else if (file.content) { - // Write content directly - writeFileSync(filePath, file.content, 'utf-8') + // Process all nodes, making sure directories are created before files + for (const node of allNodes) { + const nodePath = join(baseDirPath, node.path); + + if (node.type === 'directory') { + ensureDirSync(nodePath); + } else if (node.type === 'file') { + const fileDir = dirname(nodePath); + ensureDirSync(fileDir); + + if (node.sourceFilePath) { + // Copy from source file + const sourceContent = readFileSync(node.sourceFilePath); + writeFileSync(nodePath, sourceContent); + } else if (node.content) { + // Write content directly + writeFileSync(nodePath, node.content, 'utf-8'); + } + } } } } diff --git a/src/renderer/screens/CreateTemplateScreen.vue b/src/renderer/screens/CreateTemplateScreen.vue index 3ade01c..704fa97 100644 --- a/src/renderer/screens/CreateTemplateScreen.vue +++ b/src/renderer/screens/CreateTemplateScreen.vue @@ -348,8 +348,7 @@