From 10f6f34127160f1e1fb889c595346eeb6b684de5 Mon Sep 17 00:00:00 2001 From: xubing <18656218039@163.com> Date: Fri, 30 Jan 2026 11:26:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- out/panels/ConfigPanel.js | 426 ++++-------------- out/panels/ConfigPanel.js.map | 2 +- out/panels/services/ProjectService.js | 115 ++--- out/panels/services/ProjectService.js.map | 2 +- src/panels/ConfigPanel.ts | 499 +++++----------------- src/panels/services/ProjectService.ts | 125 ++---- 6 files changed, 264 insertions(+), 905 deletions(-) diff --git a/out/panels/ConfigPanel.js b/out/panels/ConfigPanel.js index 477253d..3941fbe 100644 --- a/out/panels/ConfigPanel.js +++ b/out/panels/ConfigPanel.js @@ -35,9 +35,6 @@ const ProjectService_1 = require("./services/ProjectService"); const GitService_1 = require("./services/GitService"); const StorageService_1 = require("./services/StorageService"); class ConfigPanel { - // ============================================= - // 公共方法 - // ============================================= static createOrShow(extensionUri) { const column = vscode.window.activeTextEditor?.viewColumn || vscode.ViewColumn.One; if (ConfigPanel.currentPanel) { @@ -52,29 +49,23 @@ class ConfigPanel { ConfigPanel.currentPanel = new ConfigPanel(panel, extensionUri); } constructor(panel, extensionUri) { - // 视图状态管理 this.currentView = 'projects'; this.currentProjectId = ''; this.currentAircraftId = ''; this.currentContainerId = ''; this.currentModuleFolderId = ''; - // 仓库配置 this.repoConfigs = []; this.currentCloneScope = 'config'; - // 状态管理 this.isWebviewDisposed = false; this.currentModuleFolderFileTree = []; this.panel = panel; this.extensionUri = extensionUri; this.isWebviewDisposed = false; - // 初始化服务 this.projectService = new ProjectService_1.ProjectService(); - // 初始化视图 this.projectView = new ProjectView_1.ProjectView(extensionUri); this.aircraftView = new AircraftView_1.AircraftView(extensionUri); this.containerView = new ContainerView_1.ContainerView(extensionUri); this.configView = new ConfigView_1.ConfigView(extensionUri); - // 加载仓库配置 void this.loadRepoConfigs(); this.updateWebview(); this.setupMessageListener(); @@ -83,9 +74,6 @@ class ConfigPanel { ConfigPanel.currentPanel = undefined; }); } - // ============================================= - // 仓库配置相关 - // ============================================= async loadRepoConfigs() { this.repoConfigs = await StorageService_1.StorageService.loadRepoConfigs(this.extensionUri); } @@ -93,9 +81,6 @@ class ConfigPanel { await StorageService_1.StorageService.openRepoConfig(this.extensionUri); await this.loadRepoConfigs(); } - /** - * 按作用域弹出仓库选择弹窗(仅用于“获取仓库 -> 获取分支”) - */ async openRepoSelectForScope(scope) { this.currentCloneScope = scope; await this.loadRepoConfigs(); @@ -110,15 +95,9 @@ class ConfigPanel { repos: this.repoConfigs.map(r => ({ name: r.name })) }); } - /** - * ConfigView 使用的默认版本(保持兼容) - */ async openRepoSelect() { return this.openRepoSelectForScope('config'); } - /** - * 弹出“上传代码”时的仓库 + 分支选择弹窗 (模块文件夹专用) - */ async openUploadRepoSelect(folderId, folderType) { await this.loadRepoConfigs(); if (this.repoConfigs.length === 0) { @@ -134,9 +113,6 @@ class ConfigPanel { folderType }); } - /** - * 弹出“上传代码”时的仓库 + 分支选择弹窗 (Project/Aircraft/Container 专用) - */ async openUploadRepoSelectForScope(scope, id) { await this.loadRepoConfigs(); if (this.repoConfigs.length === 0) { @@ -149,12 +125,9 @@ class ConfigPanel { type: 'showUploadRepoSelect', repos: this.repoConfigs.map(r => ({ name: r.name })), folderId: id, - folderType: scope // 传递 scope 作为类型 + folderType: scope }); } - /** - * “获取仓库”弹窗确认后:用于拉取分支 - */ async handleRepoSelectedForBranches(repoName) { await this.loadRepoConfigs(); const repo = this.repoConfigs.find(r => r.name === repoName); @@ -165,12 +138,7 @@ class ConfigPanel { this.currentRepoForBranches = repo; await this.fetchBranchesForRepo(repo); } - /** - * “上传代码”弹窗确认后:根据 type 决定上传逻辑,并使用用户输入的 branchName - */ - async handleUploadRepoSelected(id, // 现在是通用 ID (folderId, projectId, aircraftId, containerId) - type, // 扩展类型 - repoName, branchName) { + async handleUploadRepoSelected(id, type, repoName, branchName) { const trimmedBranch = (branchName || '').trim(); if (!trimmedBranch) { vscode.window.showErrorMessage('分支名称不能为空'); @@ -183,21 +151,15 @@ class ConfigPanel { return; } if (type === 'local') { - // 本地模块 -> 选中仓库 + 指定分支 (原逻辑) await this.uploadLocalModuleFolder(id, repo.url, trimmedBranch, repo.username, repo.token); } else if (type === 'git') { - // Git 模块 -> 选中仓库 + 指定分支 (原逻辑) await this.processGitUploadWithBranch(id, repo, trimmedBranch); } else { - // 新增逻辑:Project, Aircraft, Container 上传 await this.uploadProjectAircraftContainer(id, type, repo, trimmedBranch); } } - /** - * Git 模块上传(可能换仓库 / 改名),使用用户指定的分支 - */ async processGitUploadWithBranch(folderId, repo, branchName) { const folder = this.projectService.getModuleFolder(folderId); if (!folder || folder.type !== 'git') { @@ -213,12 +175,10 @@ class ConfigPanel { vscode.window.showErrorMessage("无法确定 Git 模块文件夹路径"); return; } - // 未改名 + 还是原来的仓库 → 直接在原分支上 push(更新代码) if (!isRenamed && isSameRepo) { await this.uploadGitModuleFolder(folderId); return; } - // 改了名字 或 换了仓库 → 使用“用户输入的分支名”进行推送 await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, title: `正在上传 Git 仓库: ${folder.name}`, @@ -226,7 +186,6 @@ class ConfigPanel { }, async (progress) => { try { progress.report({ increment: 0, message: '准备上传...' }); - // 这里使用 GitService.pushToRepoUrl,它负责 checkout 和 push await GitService_1.GitService.pushToRepoUrl(fullPath, repo.url, branchName, repo.username, repo.token); this.projectService.updateModuleFolder(folderId, { uploaded: true, @@ -244,9 +203,6 @@ class ConfigPanel { } }); } - // ============================================= - // Webview 消息处理 - // ============================================= setupMessageListener() { this.panel.webview.onDidReceiveMessage(async (data) => { if (this.isWebviewDisposed) { @@ -266,7 +222,6 @@ class ConfigPanel { } async handleWebviewMessage(data) { const messageHandlers = { - // 导航相关 'openExistingProject': () => this.openExistingProject(), 'configureProject': (data) => this.handleConfigureProject(data), 'openProject': (data) => this.handleOpenProject(data), @@ -275,56 +230,43 @@ class ConfigPanel { 'goBackToProjects': () => this.handleGoBackToProjects(), 'goBackToAircrafts': () => this.handleGoBackToAircrafts(), 'goBackToContainers': () => this.handleGoBackToContainers(), - // 项目管理 (MODIFIED) 'updateProjectName': (data) => this.updateProjectName(data.projectId, data.name), 'createProject': (data) => this.createProject(data.name), 'deleteProject': (data) => this.deleteProject(data.projectId), - // 飞行器管理 (MODIFIED) 'updateAircraftName': (data) => this.updateAircraftName(data.aircraftId, data.name), 'createAircraft': (data) => this.createAircraft(data.name), 'deleteAircraft': (data) => this.deleteAircraft(data.aircraftId), - // 容器管理 (MODIFIED) 'updateContainerName': (data) => this.updateContainerName(data.containerId, data.name), 'createContainer': (data) => this.createContainer(data.name), 'deleteContainer': (data) => this.deleteContainer(data.containerId), - // 模块管理 - // [修改] 接收新的文件名 'updateConfigName': (data) => this.updateConfigName(data.configId, data.name, data.fileName), 'createConfig': (data) => this.createConfig(data.name), 'deleteConfig': (data) => this.deleteConfig(data.configId), 'openConfigFileInVSCode': (data) => this.openConfigFileInVSCode(data.configId), 'mergeConfigs': (data) => this.mergeConfigs(data.configIds, data.displayName, data.folderName), - // Git 仓库管理 'openRepoConfig': () => this.openRepoConfig(), 'openRepoSelect': () => this.openRepoSelect(), 'openRepoSelectForProject': () => this.openRepoSelectForScope('project'), 'openRepoSelectForAircraft': () => this.openRepoSelectForScope('aircraft'), 'openRepoSelectForContainer': () => this.openRepoSelectForScope('container'), 'repoSelectedForBranches': (data) => this.handleRepoSelectedForBranches(data.repoName), - // Git 分支管理 'fetchBranches': (data) => this.fetchBranches(data.url), 'cloneBranches': (data) => this.cloneBranches(data.branches), 'cancelBranchSelection': () => this.handleCancelBranchSelection(), - // 模块文件夹管理 'loadModuleFolder': (data) => this.loadModuleFolder(data.folderId), 'syncGitModuleFolder': (data) => this.syncGitModuleFolder(data.folderId), 'deleteModuleFolder': (data) => this.deleteModuleFolder(data.folderId), 'importGitFile': (data) => this.importGitFile(data.filePath), 'openTheModuleFolder': (data) => this.openTheModuleFolder(data.moduleType, data.id), - // [修改] 接收新的显示名称和磁盘文件夹名称 'renameModuleFolder': (data) => this.renameModuleFolder(data.folderId, data.newName, data.newFolderName), - // 模块上传功能 (原逻辑) 'uploadGitModuleFolder': (data) => this.uploadGitModuleFolder(data.folderId, data.username, data.password), 'openRepoSelectForUpload': (data) => this.openUploadRepoSelect(data.folderId, 'local'), 'uploadLocalModuleFolder': (data) => this.uploadLocalModuleFolder(data.folderId, data.repoUrl, data.branchName), 'openRepoSelectForGitUpload': (data) => this.openUploadRepoSelect(data.folderId, 'git'), - // 新增:Project/Aircraft/Container 上传 'openRepoSelectForProjectUpload': (data) => this.openUploadRepoSelectForScope('project', data.projectId), 'openRepoSelectForAircraftUpload': (data) => this.openUploadRepoSelectForScope('aircraft', data.aircraftId), 'openRepoSelectForContainerUpload': (data) => this.openUploadRepoSelectForScope('container', data.containerId), - // 统一的上传时 仓库+分支 选择确认 - 'uploadRepoSelected': (data) => this.handleUploadRepoSelected(data.folderId, data.folderType, // 此时 data.folderType 可能是 'project' | 'aircraft' | 'container' - data.repoName, data.branchName) + 'uploadRepoSelected': (data) => this.handleUploadRepoSelected(data.folderId, data.folderType, data.repoName, data.branchName) }; const handler = messageHandlers[data.type]; if (handler) { @@ -334,9 +276,6 @@ class ConfigPanel { console.warn(`未知的消息类型: ${data.type}`); } } - // ============================================= - // 导航处理方法 - // ============================================= async handleConfigureProject(data) { const selectedPath = await this.selectProjectPath(data.projectId, data.projectName); if (selectedPath) { @@ -384,29 +323,24 @@ class ConfigPanel { console.log('❌ 取消分支选择'); this.updateWebview(); } - // ============================================= - // 项目管理方法 (MODIFIED) - // ============================================= - /** - * 重命名项目:更新内存数据、重命名磁盘文件夹、更新项目路径(MODIFIED) - */ async updateProjectName(projectId, newName) { const project = this.projectService.getProjects().find(p => p.id === projectId); if (!project) return; + if (project.name !== newName && this.projectService.isProjectNameExists(newName)) { + vscode.window.showErrorMessage(`❌ 项目名称 "${newName}" 已存在`); + this.updateWebview(); + return; + } const paths = this.projectService.getProjectOldAndNewPaths(projectId, newName); if (!paths) { vscode.window.showErrorMessage('无法获取项目路径'); return; } try { - // 1. 重命名磁盘文件夹 await this.projectService.renameDirectoryOnDisk(paths.oldPath, paths.newPath); - // 2. 更新内存中的项目名称和项目路径 if (this.projectService.updateProjectName(projectId, newName)) { - // 必须更新 projectPaths map this.projectService.setProjectPath(projectId, paths.newPath); - // 3. 保存数据到新的项目路径下的 .dcsp-data.json await this.saveCurrentProjectData(); vscode.window.showInformationMessage(`✅ 项目名称和文件夹已更新: ${newName}`); this.updateWebview(); @@ -417,17 +351,17 @@ class ConfigPanel { } } async createProject(name) { + if (this.projectService.isProjectNameExists(name)) { + vscode.window.showErrorMessage(`❌ 项目名称 "${name}" 已存在`); + return; + } const newId = await this.projectService.createProject(name); this.currentProjectId = newId; vscode.window.showInformationMessage(`新建项目: ${name}`); this.updateWebview(); } - /** - * 删除项目,同时删除磁盘上的文件夹 - */ async deleteProject(projectId) { const project = this.projectService.getProjects().find(p => p.id === projectId); - // 获取项目存储路径 const projectPath = this.projectService.getProjectPath(projectId); if (!project) return; @@ -436,19 +370,15 @@ class ConfigPanel { return; } try { - // 1. 删除磁盘上的文件夹 if (projectPath) { await this.projectService.deleteDirectoryFromDisk(projectPath); } - // 2. 从内存中删除 (同时会清理所有子数据) if (this.projectService.deleteProject(projectId)) { - // 如果删除的是当前正在查看的项目,则返回 Projects 视图 if (this.currentProjectId === projectId) { this.currentProjectId = ''; this.currentView = 'projects'; } vscode.window.showInformationMessage(`项目已删除: ${project.name}`); - // 如果还有其他项目在内存中,保存一下最新的数据状态 if (this.currentProjectId) { await this.saveCurrentProjectData(); } @@ -459,27 +389,23 @@ class ConfigPanel { vscode.window.showErrorMessage(`删除项目文件夹失败: ${error}`); } } - // ============================================= - // 飞行器管理方法 (MODIFIED) - // ============================================= - /** - * 重命名飞行器:更新内存数据、重命名磁盘文件夹(MODIFIED) - */ async updateAircraftName(aircraftId, newName) { const aircraft = this.projectService.getAircraft(aircraftId); if (!aircraft) return; + if (aircraft.name !== newName && this.projectService.isAircraftNameExists(this.currentProjectId, newName)) { + vscode.window.showErrorMessage(`❌ 飞行器名称 "${newName}" 已存在`); + this.updateWebview(); + return; + } const paths = this.projectService.getAircraftOldAndNewPaths(aircraftId, newName); if (!paths) { vscode.window.showErrorMessage('无法获取飞行器路径'); return; } try { - // 1. 重命名磁盘文件夹 await this.projectService.renameDirectoryOnDisk(paths.oldPath, paths.newPath); - // 2. 更新内存中的飞行器名称 if (this.projectService.updateAircraftName(aircraftId, newName)) { - // 3. 保存数据到 .dcsp-data.json await this.saveCurrentProjectData(); vscode.window.showInformationMessage(`✅ 飞行器名称和文件夹已更新: ${newName}`); this.updateWebview(); @@ -494,14 +420,15 @@ class ConfigPanel { vscode.window.showErrorMessage('无法创建飞行器:未找到当前项目'); return; } + if (this.projectService.isAircraftNameExists(this.currentProjectId, name)) { + vscode.window.showErrorMessage(`❌ 该项目下已存在名为 "${name}" 的飞行器`); + return; + } const aircraftId = await this.projectService.createAircraft(name, this.currentProjectId); vscode.window.showInformationMessage(`新建飞行器: ${name}`); await this.saveCurrentProjectData(); this.updateWebview(); } - /** - * 删除飞行器,同时删除磁盘上的文件夹 - */ async deleteAircraft(aircraftId) { const aircraft = this.projectService.getAircraftsByProject(this.currentProjectId) .find(a => a.id === aircraftId); @@ -513,11 +440,9 @@ class ConfigPanel { } const dirPath = this.projectService.getAircraftDirectoryPath(aircraftId); try { - // 1. 删除磁盘上的文件夹 if (dirPath) { await this.projectService.deleteDirectoryFromDisk(dirPath); } - // 2. 从内存中删除 (同时会清理所有子数据) if (this.projectService.deleteAircraft(aircraftId)) { vscode.window.showInformationMessage(`飞行器已删除: ${aircraft.name}`); await this.saveCurrentProjectData(); @@ -528,27 +453,23 @@ class ConfigPanel { vscode.window.showErrorMessage(`删除飞行器文件夹失败: ${error}`); } } - // ============================================= - // 容器管理方法 (MODIFIED) - // ============================================= - /** - * 重命名容器:更新内存数据、重命名磁盘文件夹(MODIFIED) - */ async updateContainerName(containerId, newName) { const container = this.projectService.getContainer(containerId); if (!container) return; + if (container.name !== newName && this.projectService.isContainerNameExists(this.currentAircraftId, newName)) { + vscode.window.showErrorMessage(`❌ 容器名称 "${newName}" 已存在`); + this.updateWebview(); + return; + } const paths = this.projectService.getContainerOldAndNewPaths(containerId, newName); if (!paths) { vscode.window.showErrorMessage('无法获取容器路径'); return; } try { - // 1. 重命名磁盘文件夹 await this.projectService.renameDirectoryOnDisk(paths.oldPath, paths.newPath); - // 2. 更新内存中的容器名称 if (this.projectService.updateContainerName(containerId, newName)) { - // 3. 保存数据到 .dcsp-data.json await this.saveCurrentProjectData(); vscode.window.showInformationMessage(`✅ 容器名称和文件夹已更新: ${newName}`); this.updateWebview(); @@ -563,14 +484,15 @@ class ConfigPanel { vscode.window.showErrorMessage('无法创建容器:未找到当前飞行器'); return; } + if (this.projectService.isContainerNameExists(this.currentAircraftId, name)) { + vscode.window.showErrorMessage(`❌ 该飞行器下已存在名为 "${name}" 的容器`); + return; + } const containerId = await this.projectService.createContainer(name, this.currentAircraftId); vscode.window.showInformationMessage(`新建容器: ${name} (包含2个默认配置文件)`); await this.saveCurrentProjectData(); this.updateWebview(); } - /** - * 删除容器,同时删除磁盘上的文件夹 - */ async deleteContainer(containerId) { const container = this.projectService.getContainersByAircraft(this.currentAircraftId) .find(c => c.id === containerId); @@ -582,11 +504,9 @@ class ConfigPanel { } const dirPath = this.projectService.getContainerDirectoryPath(containerId); try { - // 1. 删除磁盘上的文件夹 if (dirPath) { await this.projectService.deleteDirectoryFromDisk(dirPath); } - // 2. 从内存中删除 (同时会清理所有子数据) if (this.projectService.deleteContainer(containerId)) { vscode.window.showInformationMessage(`容器已删除: ${container.name}`); await this.saveCurrentProjectData(); @@ -597,20 +517,23 @@ class ConfigPanel { vscode.window.showErrorMessage(`删除容器文件夹失败: ${error}`); } } - // ============================================= - // 模块管理方法 - // ============================================= - /** - * [修改] 同时更新配置显示名称和文件名,并处理磁盘文件重命名 - */ async updateConfigName(configId, newName, newFileName) { const config = this.projectService.getConfig(configId); if (!config) return; + const check = this.projectService.isConfigOrFolderConflict(config.containerId, newName, newFileName, configId); + if (check.nameConflict) { + vscode.window.showErrorMessage(`❌ 显示名称 "${newName}" 已占用`); + this.updateWebview(); + return; + } + if (check.fileConflict) { + vscode.window.showErrorMessage(`❌ 文件名 "${newFileName}" 已在磁盘中存在`); + this.updateWebview(); + return; + } try { - // 1. 重命名磁盘文件 await this.projectService.renameConfigFileOnDisk(configId, newFileName); - // 2. 更新内存数据 if (this.projectService.updateConfigName(configId, newName, newFileName)) { vscode.window.showInformationMessage(`✅ 配置/文件名已更新: ${newName} / ${newFileName}`); await this.saveCurrentProjectData(); @@ -622,7 +545,12 @@ class ConfigPanel { } } async createConfig(name) { - // 注意:真正创建文件内容的逻辑放在 ProjectService.createConfig 里处理 + const fileName = this.projectService.sanitizeFileName(name); + const check = this.projectService.isConfigOrFolderConflict(this.currentContainerId, name, fileName); + if (check.nameConflict || check.fileConflict) { + vscode.window.showErrorMessage(`❌ 配置名称或文件名 "${name}" 已存在`); + return; + } const configId = await this.projectService.createConfig(name, this.currentContainerId); vscode.window.showInformationMessage(`新建配置: ${name}`); await this.saveCurrentProjectData(); @@ -637,9 +565,7 @@ class ConfigPanel { return; } try { - // 删除配置文件(磁盘) await this.projectService.deleteConfigFileFromDisk(configId); - // 从内存中删除 this.projectService.deleteConfig(configId); vscode.window.showInformationMessage(`删除配置: ${config.name}`); await this.saveCurrentProjectData(); @@ -654,6 +580,11 @@ class ConfigPanel { vscode.window.showErrorMessage('未找到当前容器'); return; } + const check = this.projectService.isConfigOrFolderConflict(this.currentContainerId, displayName, folderName); + if (check.nameConflict || check.fileConflict) { + vscode.window.showErrorMessage(`❌ 合并后的文件夹名称或显示名 "${displayName}" 已存在`); + return; + } if (configIds.length < 2) { vscode.window.showErrorMessage('请至少选择两个配置文件进行合并'); return; @@ -670,7 +601,6 @@ class ConfigPanel { vscode.window.showErrorMessage('未找到项目路径'); return; } - // 获取选中的配置(仅元信息,不含 content) const selectedConfigs = configIds .map(id => this.projectService.getConfig(id)) .filter(Boolean); @@ -678,11 +608,9 @@ class ConfigPanel { vscode.window.showErrorMessage('部分配置文件未找到'); return; } - // 创建合并文件夹 const mergeFolderPath = path.join(projectPath, this.getAircraftName(), container.name, folderName); await vscode.workspace.fs.createDirectory(vscode.Uri.file(mergeFolderPath)); const fs = require('fs'); - // 复制文件到合并文件夹:完全基于磁盘文件 for (const config of selectedConfigs) { if (!config) continue; @@ -692,13 +620,11 @@ class ConfigPanel { await fs.promises.copyFile(sourcePath, targetPath); } else { - // 找不到源文件:写一个占位注释文件 const placeholder = `# 原配置文件 "${config.fileName}" 未在磁盘中找到\n` + `# 仅保留占位文件,建议手动补充内容\n\n`; await fs.promises.writeFile(targetPath, placeholder, 'utf8'); } } - // 创建模块文件夹记录(使用 ProjectService 的统一 ID 生成) const relativePath = `/${this.currentProjectId}/${this.getAircraftName()}/${container.name}/${folderName}`; const newFolder = { id: this.projectService.generateUniqueId('local-'), @@ -708,7 +634,6 @@ class ConfigPanel { containerId: this.currentContainerId }; this.projectService.addModuleFolder(newFolder); - // 删除原配置(包括磁盘上的配置文件) for (const configId of configIds) { await this.projectService.deleteConfigFileFromDisk(configId); this.projectService.deleteConfig(configId); @@ -732,9 +657,6 @@ class ConfigPanel { const container = containers.find(c => c.id === this.currentContainerId); return container?.name || '未知容器'; } - // ============================================= - // Git 分支管理方法 - // ============================================= async fetchBranchesForRepo(repo) { await this.fetchBranches(repo.url, repo); } @@ -776,9 +698,6 @@ class ConfigPanel { vscode.window.showErrorMessage(`获取分支失败: ${error}`); } } - /** - * 根据当前作用域,把选中的分支克隆到不同层级 - */ async cloneBranches(branches) { if (!this.currentRepoForBranches) { vscode.window.showErrorMessage('请先通过"获取仓库"选择一个仓库'); @@ -800,9 +719,6 @@ class ConfigPanel { break; } } - /** - * 原有逻辑:在 ConfigView 中,把分支克隆为当前容器下的 git 模块文件夹 - */ async cloneBranchesToModuleFolders(branches) { if (!this.currentRepoForBranches) { vscode.window.showErrorMessage('请先通过"获取仓库"选择一个仓库'); @@ -821,21 +737,24 @@ class ConfigPanel { }, async (progress) => { for (let i = 0; i < branches.length; i++) { const branch = branches[i]; + const folderNames = GitService_1.GitService.generateModuleFolderName(url, branch); + const check = this.projectService.isConfigOrFolderConflict(this.currentContainerId, repoDisplayName, folderNames.folderName); + if (check.nameConflict || check.fileConflict) { + vscode.window.showErrorMessage(`❌ 克隆分支失败:名为 "${folderNames.folderName}" 的模块已存在`); + failCount++; + continue; + } const progressPercent = (i / branches.length) * 100; progress.report({ increment: progressPercent, message: `克隆分支: ${branch} (${i + 1}/${branches.length})` }); - console.log(`📥 开始克隆分支: ${branch}`); try { - const folderNames = GitService_1.GitService.generateModuleFolderName(url, branch); await this.addGitModuleFolder(url, repoDisplayName, folderNames.folderName, branch, this.currentRepoForBranches?.username, this.currentRepoForBranches?.token); successCount++; - console.log(`✅ 分支克隆成功: ${branch}`); } catch (error) { failCount++; - console.error(`❌ 分支克隆失败: ${branch}`, error); } } }); @@ -851,10 +770,6 @@ class ConfigPanel { vscode.window.showErrorMessage(`克隆分支失败: ${error}`); } } - /** - * ProjectView 用:把分支克隆为完整项目 - * 每个分支会弹出一个路径输入框,克隆整个仓库到该路径,如果有 .dcsp-data.json 则自动加载为项目 - */ async cloneBranchesToProjects(branches) { if (!this.currentRepoForBranches) { vscode.window.showErrorMessage('请先通过"获取仓库"选择一个仓库'); @@ -895,7 +810,6 @@ class ConfigPanel { }); try { await GitService_1.GitService.cloneRepository(url, targetPath, branch, undefined, this.currentRepoForBranches?.username, this.currentRepoForBranches?.token); - // 克隆完成后,尝试加载项目数据(如果有 .dcsp-data.json) try { const projectId = await this.projectService.loadProjectData(targetPath); if (projectId) { @@ -903,7 +817,6 @@ class ConfigPanel { successCount++; } else { - // 没有 dscp-data 也算成功克隆,只是不会自动出现在列表里 successCount++; } } @@ -928,10 +841,6 @@ class ConfigPanel { this.currentView = 'projects'; this.updateWebview(); } - /** - * AircraftView 用:把分支克隆为当前项目下的飞行器 - * 目标路径:/<分支名>,克隆后自动解析容器/配置/模块,并写入 dscp-data.json - */ async cloneBranchesToAircrafts(branches) { if (!this.currentRepoForBranches) { vscode.window.showErrorMessage('请先通过"获取仓库"选择一个仓库'); @@ -961,6 +870,11 @@ class ConfigPanel { const aircraftName = branch.trim(); if (!aircraftName) continue; + if (this.projectService.isAircraftNameExists(this.currentProjectId, aircraftName)) { + vscode.window.showErrorMessage(`❌ 克隆飞行器失败:名为 "${aircraftName}" 的飞行器已存在`); + failCount++; + continue; + } const localPath = path.join(projectPath, aircraftName); progress.report({ message: `克隆飞行器分支: ${branch} (${i + 1}/${branches.length})` @@ -987,10 +901,6 @@ class ConfigPanel { this.currentView = 'aircrafts'; this.updateWebview(); } - /** - * ContainerView 用:把分支克隆为当前飞行器下的容器 - * 目标路径:/<当前飞行器名>/<分支名>,克隆后自动解析配置/模块,并写入 dscp-data.json - */ async cloneBranchesToContainers(branches) { if (!this.currentRepoForBranches) { vscode.window.showErrorMessage('请先通过"获取仓库"选择一个仓库'); @@ -1025,6 +935,11 @@ class ConfigPanel { const containerName = branch.trim(); if (!containerName) continue; + if (this.projectService.isContainerNameExists(this.currentAircraftId, containerName)) { + vscode.window.showErrorMessage(`❌ 克隆容器失败:名为 "${containerName}" 的容器已存在`); + failCount++; + continue; + } const localPath = path.join(projectPath, aircraftName, containerName); progress.report({ message: `克隆容器分支: ${branch} (${i + 1}/${branches.length})` @@ -1066,17 +981,9 @@ class ConfigPanel { vscode.window.showErrorMessage('未找到相关项目数据'); return; } - // 使用 ProjectService 的统一 ID 生成 const folderId = this.projectService.generateUniqueId('git-'); const relativePath = `/${this.currentProjectId}/${this.getAircraftName()}/${this.getContainerName()}/${folderName}`; const localPath = path.join(projectPath, this.getAircraftName(), this.getContainerName(), folderName); - console.log(`📁 准备克隆仓库: ${displayName}, 分支: ${branch}, 路径: ${localPath}`); - const existingFolder = this.projectService.getModuleFoldersByContainer(this.currentContainerId) - .find(folder => folder.localPath === relativePath); - if (existingFolder) { - vscode.window.showWarningMessage(`该路径的模块文件夹已存在: ${folderName}`); - return; - } const newFolder = { id: folderId, name: displayName, @@ -1093,9 +1000,7 @@ class ConfigPanel { }, async (progress) => { progress.report({ increment: 0 }); try { - // 使用 GitService 克隆仓库 await GitService_1.GitService.cloneRepository(url, localPath, branch, (event) => { - console.log(`📊 克隆进度: ${event.phase} - ${event.loaded}/${event.total}`); if (event.total) { const percent = (event.loaded / event.total) * 100; progress.report({ @@ -1107,56 +1012,42 @@ class ConfigPanel { progress.report({ message: `${event.phase}...` }); } }, username, token); - console.log('✅ Git克隆成功完成'); - const clonedContents = await require('fs').promises.readdir(localPath); - console.log(`📁 克隆后的目录内容:`, clonedContents); - if (clonedContents.length === 0) { - throw new Error('克隆后目录为空,可能克隆失败'); - } this.projectService.addModuleFolder(newFolder); await this.saveCurrentProjectData(); - console.log('✅ Git模块文件夹数据已保存到项目文件'); vscode.window.showInformationMessage(`Git 仓库克隆成功: ${displayName}`); if (!this.isWebviewDisposed) { - console.log('🌳 开始加载模块文件夹文件树...'); this.currentModuleFolderId = folderId; await this.loadModuleFolderFileTree(folderId); - console.log('✅ 模块文件夹文件树加载完成'); } } catch (error) { - console.error('❌ 在克隆过程中捕获错误:', error); try { if (require('fs').existsSync(localPath)) { await require('fs').promises.rm(localPath, { recursive: true, force: true }); - console.log('🧹 已清理克隆失败的目录'); } } - catch (cleanupError) { - console.error('清理失败目录时出错:', cleanupError); - } + catch (cleanupError) { } vscode.window.showErrorMessage(`克隆仓库失败: ${error}`); throw error; } }); } catch (error) { - console.error('❌ 在addGitModuleFolder外部捕获错误:', error); vscode.window.showErrorMessage(`添加 Git 模块文件夹失败: ${error}`); } } - // ============================================= - // 模块文件夹管理方法 - // ============================================= - /** - * [修改] 同时处理显示名称和磁盘文件夹名称的重命名 - */ async renameModuleFolder(folderId, newName, newFolderName) { const folder = this.projectService.getModuleFolder(folderId); if (!folder) { vscode.window.showErrorMessage('未找到模块文件夹'); return; } + const check = this.projectService.isConfigOrFolderConflict(folder.containerId, newName, newFolderName, folderId); + if (check.nameConflict || check.fileConflict) { + vscode.window.showErrorMessage(`❌ 文件夹显示名称或磁盘名称 "${newFolderName}" 冲突`); + this.updateWebview(); + return; + } const fullPath = this.projectService.getModuleFolderFullPath(folder); if (!fullPath) { vscode.window.showErrorMessage('无法获取模块文件夹路径'); @@ -1166,13 +1057,8 @@ class ConfigPanel { if (!oldFolderName) return; const newFullPath = path.join(path.dirname(fullPath), newFolderName); - const isDiskRenameNeeded = oldFolderName !== newFolderName; try { - if (isDiskRenameNeeded) { - // 1. 重命名磁盘文件夹 - await this.projectService.renameDirectoryOnDisk(fullPath, newFullPath); - } - // 2. 更新内存数据:显示名和 localPath + await this.projectService.renameDirectoryOnDisk(fullPath, newFullPath); const newLocalPath = folder.localPath.replace(new RegExp(`/${oldFolderName}$`), '/' + newFolderName); this.projectService.updateModuleFolder(folderId, { name: newName, @@ -1267,9 +1153,7 @@ class ConfigPanel { const sourceFullPath = path.join(fullPath, filePath); const content = await fs.promises.readFile(sourceFullPath, 'utf8'); const fileName = path.basename(filePath); - // 1. 先创建一个配置(ProjectService.createConfig 内部会在磁盘上生成文件) const configId = await this.projectService.createConfig(fileName, this.currentContainerId); - // 2. 再把 Git 文件的内容写到该配置文件上,覆盖默认模板 const targetConfigPath = this.projectService.getConfigFilePath(configId); if (!targetConfigPath) { vscode.window.showErrorMessage('无法获取新配置文件的路径'); @@ -1286,16 +1170,9 @@ class ConfigPanel { vscode.window.showErrorMessage(`导入文件失败: ${error}`); } } - // ============================================= - // 上传功能方法 - // ============================================= - /** - * 上传 Project / Aircraft / Container 目录到 Git 仓库 - */ async uploadProjectAircraftContainer(id, type, repo, branchName) { let fullPath = null; let name = ''; - // 1. 获取目标目录的完整路径和名称 if (type === 'project') { fullPath = this.projectService.getProjectPath(id) || null; name = this.projectService.getProjects().find(p => p.id === id)?.name || 'Project'; @@ -1315,7 +1192,7 @@ class ConfigPanel { } } if (!fullPath || !require('fs').existsSync(fullPath)) { - vscode.window.showErrorMessage(`无法获取 ${type} "${name}" 的有效路径或目录不存在。请先配置项目路径并确保目录存在。`); + vscode.window.showErrorMessage(`无法获取 ${type} "${name}" 的有效路径或目录不存在。`); return; } await vscode.window.withProgress({ @@ -1326,43 +1203,31 @@ class ConfigPanel { try { progress.report({ increment: 0, message: '检查目录...' }); const fs = require('fs'); - // 检查目录是否为空 const dirContents = await fs.promises.readdir(fullPath); if (dirContents.length === 0) { throw new Error('目录为空,无法上传'); } - // 2. 检查是否为 Git 仓库并初始化 let isGitRepo = false; - try { - // Check for .git directory - if (fs.existsSync(path.join(fullPath, '.git'))) { - isGitRepo = true; - } + if (fs.existsSync(path.join(fullPath, '.git'))) { + isGitRepo = true; } - catch (e) { /* ignore */ } if (!isGitRepo) { progress.report({ increment: 10, message: '初始化 Git 仓库...' }); - // initRepository 内部会创建并切换到指定分支 await GitService_1.GitService.initRepository(fullPath, branchName); } - // 3. 配置远程仓库 progress.report({ increment: 20, message: '配置远程仓库...' }); try { - // 尝试移除旧的 origin 远程,以避免冲突 await GitService_1.GitService.removeRemote(fullPath); } - catch (e) { /* ignore if no remote */ } + catch (e) { } await GitService_1.GitService.addRemote(fullPath, repo.url, repo.username, repo.token); - // 4. 提交并推送 progress.report({ increment: 40, message: '提交并推送到远程仓库...' }); - // commitAndPushToBranch 内部会 add, commit, checkout -B, push await GitService_1.GitService.commitAndPushToBranch(fullPath, branchName, repo.url, repo.username, repo.token); progress.report({ increment: 100, message: '完成' }); vscode.window.showInformationMessage(`✅ ${type} ${name} 已成功上传到 ${repo.name} 的分支 ${branchName}`); this.updateWebview(); } catch (error) { - console.error(`❌ ${type} 上传失败:`, error); vscode.window.showErrorMessage(`推送失败: ${error.message || error}`); } }); @@ -1393,7 +1258,6 @@ class ConfigPanel { this.updateWebview(); } catch (error) { - console.error('❌ Git 上传失败:', error); vscode.window.showErrorMessage(`推送失败: ${error.message || error}`); } }); @@ -1440,7 +1304,6 @@ class ConfigPanel { this.updateWebview(); } catch (error) { - console.error('❌ 本地文件夹上传失败:', error); vscode.window.showErrorMessage(`推送失败: ${error.message || error}`); try { const gitDir = path.join(fullPath, '.git'); @@ -1449,20 +1312,13 @@ class ConfigPanel { await fs.promises.rm(gitDir, { recursive: true, force: true }); } } - catch (cleanupError) { - console.error('清理 .git 文件夹失败:', cleanupError); - } + catch (cleanupError) { } } }); } - // ============================================= - // 文件树和模块文件夹方法 - // ============================================= async loadModuleFolderFileTree(folderId) { - if (this.isWebviewDisposed) { - console.log('⚠️ Webview 已被销毁,跳过文件树加载'); + if (this.isWebviewDisposed) return; - } const folder = this.projectService.getModuleFolder(folderId); if (!folder) return; @@ -1473,7 +1329,6 @@ class ConfigPanel { }); } catch (error) { - console.log('⚠️ 无法发送加载消息,Webview 可能已被销毁'); return; } try { @@ -1484,13 +1339,10 @@ class ConfigPanel { } } catch (error) { - console.error('加载模块文件夹文件树失败:', error); this.currentModuleFolderFileTree = []; } - if (this.isWebviewDisposed) { - console.log('⚠️ Webview 已被销毁,跳过完成通知'); + if (this.isWebviewDisposed) return; - } try { this.panel.webview.postMessage({ type: 'moduleFolderLoading', @@ -1498,9 +1350,7 @@ class ConfigPanel { }); this.updateWebview(); } - catch (error) { - console.log('⚠️ 无法发送完成消息,Webview 可能已被销毁'); - } + catch (error) { } } async openConfigFileInVSCode(configId) { const config = this.projectService.getConfig(configId); @@ -1564,32 +1414,6 @@ class ConfigPanel { vscode.window.showErrorMessage(`打开模块文件夹文件失败: ${error}`); } } - // [删除] 此方法已被上面的 renameModuleFolder 替换 - // private async renameModuleFolder(folderId: string, newName: string): Promise { - // const folder = this.projectService.getModuleFolder(folderId); - // if (!folder) { - // vscode.window.showErrorMessage('未找到模块文件夹'); - // return; - // } - // const oldName = folder.localPath.split('/').pop(); - // if (!oldName) return; - // const fullPath = this.projectService.getModuleFolderFullPath(folder); - // if (!fullPath) return; - // const newFullPath = path.join(path.dirname(fullPath), newName); - // try { - // const fs = require('fs'); - // await fs.promises.rename(fullPath, newFullPath); - // this.projectService.renameModuleFolder(folderId, newName); - // await this.saveCurrentProjectData(); - // vscode.window.showInformationMessage(`已重命名文件夹: ${oldName} → ${newName}`); - // this.updateWebview(); - // } catch (error) { - // vscode.window.showErrorMessage('重命名失败: ' + error); - // } - // } - // ============================================= - // 项目路径选择方法 - // ============================================= async openExistingProject() { try { const result = await vscode.window.showOpenDialog({ @@ -1622,8 +1446,8 @@ class ConfigPanel { if (pathInput) { try { const dirUri = vscode.Uri.file(pathInput); - await vscode.workspace.fs.createDirectory(dirUri); // 自动创建目录 - this.projectService.setProjectPath(projectId, pathInput); // 保存路径 + await vscode.workspace.fs.createDirectory(dirUri); + this.projectService.setProjectPath(projectId, pathInput); vscode.window.showInformationMessage(`项目存储位置已创建: ${pathInput}`); await this.saveCurrentProjectData(); return pathInput; @@ -1640,63 +1464,6 @@ class ConfigPanel { return null; } } - async selectExistingProjectPath(projectId, projectName) { - const result = await vscode.window.showOpenDialog({ - canSelectFiles: false, - canSelectFolders: true, - canSelectMany: false, - openLabel: `选择 ${projectName} 的存储位置`, - title: `为项目 "${projectName}" 选择存储文件夹` - }); - if (result && result.length > 0) { - const selectedPath = result[0].fsPath; - const hasExistingData = await StorageService_1.StorageService.checkProjectPathHasData(selectedPath); - if (hasExistingData) { - const loadChoice = await vscode.window.showWarningMessage(`在路径 ${selectedPath} 中检测到现有项目数据,是否加载?`, { modal: true }, '是,加载现有数据', '否,创建新项目'); - if (loadChoice === '是,加载现有数据') { - const success = await this.loadProjectData(selectedPath); - if (success) { - // loadProjectData 里已经设置好了 currentProjectId 和 projectPath - return selectedPath; - } - } - // 如果选择“否,创建新项目”,就往下走,覆盖旧数据 - } - // 没有旧数据,或者选择了“创建新项目”,把当前 projectId 绑定到这个路径 - this.projectService.setProjectPath(projectId, selectedPath); - vscode.window.showInformationMessage(`项目存储位置已设置: ${selectedPath}`); - await this.saveCurrentProjectData(); - return selectedPath; - } - return null; - } - async createNewProjectPath(projectId, projectName) { - const pathInput = await vscode.window.showInputBox({ - prompt: '请输入项目存储路径(绝对路径)', - placeHolder: `/path/to/your/project/${projectName}`, - validateInput: (value) => { - if (!value) { - return '路径不能为空'; - } - return null; - } - }); - if (pathInput) { - try { - const dirUri = vscode.Uri.file(pathInput); - await vscode.workspace.fs.createDirectory(dirUri); - this.projectService.setProjectPath(projectId, pathInput); - vscode.window.showInformationMessage(`项目存储位置已创建: ${pathInput}`); - await this.saveCurrentProjectData(); - return pathInput; - } - catch (error) { - vscode.window.showErrorMessage(`创建目录失败: ${error}`); - return null; - } - } - return null; - } async loadProjectData(projectPath) { try { const projectId = await this.projectService.loadProjectData(projectPath); @@ -1714,33 +1481,19 @@ class ConfigPanel { return false; } } - // ============================================= - // 数据持久化 - // ============================================= async saveCurrentProjectData() { if (!this.currentProjectId) { - console.warn('未找到当前项目,数据将不会保存'); return; } await this.projectService.saveCurrentProjectData(this.currentProjectId); } - // ============================================= - // Webview 更新方法 - // ============================================= - // ============================================= - // Webview 更新方法 - // ============================================= updateWebview() { - if (this.isWebviewDisposed) { - console.log('⚠️ Webview 已被销毁,跳过更新'); + if (this.isWebviewDisposed) return; - } try { this.panel.webview.html = this.getWebviewContent(); } - catch (error) { - console.error('更新 Webview 失败:', error); - } + catch (error) { } } getWebviewContent() { switch (this.currentView) { @@ -1758,7 +1511,6 @@ class ConfigPanel { const project = this.projectService.getProjects().find(p => p.id === this.currentProjectId); const currentAircraft = this.projectService.getAircraftsByProject(this.currentProjectId) .find(a => a.id === this.currentAircraftId); - // ✅ 只在 UI 层隐藏名为 .git 的容器 const projectContainers = this.projectService .getContainersByAircraft(this.currentAircraftId) .filter(c => c.name !== '.git'); diff --git a/out/panels/ConfigPanel.js.map b/out/panels/ConfigPanel.js.map index 4ce1db6..892bda9 100644 --- a/out/panels/ConfigPanel.js.map +++ b/out/panels/ConfigPanel.js.map @@ -1 +1 @@ -{"version":3,"file":"ConfigPanel.js","sourceRoot":"","sources":["../../src/panels/ConfigPanel.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ConfigPanel.js","sourceRoot":"","sources":["../../src/panels/ConfigPanel.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out/panels/services/ProjectService.js b/out/panels/services/ProjectService.js index 87f6033..f41768c 100644 --- a/out/panels/services/ProjectService.js +++ b/out/panels/services/ProjectService.js @@ -52,11 +52,10 @@ class ProjectService { * 文件名/文件夹名净化:保留大小写,允许中文、字母、数字、-、_、. */ sanitizeFileName(name) { - let fileName = name.trim(); // 移除 .toLowerCase() 以保留大小写 + let fileName = name.trim(); // 1. 替换所有空格为下划线 fileName = fileName.replace(/\s+/g, '_'); // 2. 移除特殊字符 - // 在正则中增加了 A-Z 以及 \. (注意:\u4e00-\u9fa5 匹配中文) fileName = fileName.replace(/[^\u4e00-\u9fa5a-zA-Z0-9_\-\.]/g, ''); // 3. 确保不为空 if (fileName.length === 0) { @@ -64,6 +63,31 @@ class ProjectService { } return fileName; } + // =============== 查重工具方法 (新增) =============== + /** 检查项目名是否重复 */ + isProjectNameExists(name) { + return this.projects.some(p => p.name === name); + } + /** 检查指定项目下的飞行器名是否重复 */ + isAircraftNameExists(projectId, name) { + return this.aircrafts.some(a => a.projectId === projectId && a.name === name); + } + /** 检查指定飞行器下的容器名是否重复 */ + isContainerNameExists(aircraftId, name) { + return this.containers.some(c => c.aircraftId === aircraftId && c.name === name); + } + /** 检查指定容器下的配置名或文件名是否重复 */ + isConfigOrFolderConflict(containerId, name, fileName, excludeId) { + const configs = this.getConfigsByContainer(containerId); + const folders = this.getModuleFoldersByContainer(containerId); + // 检查显示名称冲突 (排除自身) + const nameConflict = configs.some(c => c.id !== excludeId && c.name === name) || + folders.some(f => f.id !== excludeId && f.name === name); + // 检查磁盘文件名/文件夹名冲突 (排除自身) + const fileConflict = configs.some(c => c.id !== excludeId && c.fileName === fileName) || + folders.some(f => f.id !== excludeId && f.localPath.split('/').pop() === fileName); + return { nameConflict, fileConflict }; + } // =============== 项目相关方法 =============== getProjects() { return this.projects; @@ -98,12 +122,10 @@ class ProjectService { const project = this.projects.find(p => p.id === projectId); if (!project) return false; - // 先把要删的 id 都算出来,再统一过滤 const relatedAircrafts = this.aircrafts.filter(a => a.projectId === projectId); const aircraftIds = relatedAircrafts.map(a => a.id); const relatedContainers = this.containers.filter(c => aircraftIds.includes(c.aircraftId)); const containerIds = relatedContainers.map(c => c.id); - // 真正删除数据 this.projects = this.projects.filter(p => p.id !== projectId); this.aircrafts = this.aircrafts.filter(a => a.projectId !== projectId); this.containers = this.containers.filter(c => !aircraftIds.includes(c.aircraftId)); @@ -127,7 +149,6 @@ class ProjectService { projectId: projectId }; this.aircrafts.push(newAircraft); - // 创建飞行器目录 await this.createAircraftDirectory(newAircraft); return newId; } @@ -143,23 +164,15 @@ class ProjectService { const aircraft = this.aircrafts.find(a => a.id === aircraftId); if (!aircraft) return false; - // ⚠️ 先算出要删的 containerIds const relatedContainers = this.containers.filter(c => c.aircraftId === aircraftId); const containerIds = relatedContainers.map(c => c.id); - // 删除飞机自身和容器 this.aircrafts = this.aircrafts.filter(a => a.id !== aircraftId); this.containers = this.containers.filter(c => c.aircraftId !== aircraftId); - // 再删关联的 config 和 moduleFolder this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId)); this.moduleFolders = this.moduleFolders.filter(folder => !containerIds.includes(folder.containerId)); return true; } - /** - * 从已存在的磁盘目录导入飞行器 - * 不会创建/删除任何文件,只在内存中补充 Aircraft / Container / ModuleFolder 数据 - */ async importAircraftFromExistingFolder(projectId, aircraftName) { - // 已存在同名飞行器直接返回 const existed = this.getAircraftsByProject(projectId).find(a => a.name === aircraftName); if (existed) { return existed.id; @@ -177,10 +190,8 @@ class ProjectService { } const aircraftDir = path.join(projectPath, aircraftName); if (!fs.existsSync(aircraftDir)) { - // 目录不存在就不再解析子目录 return newId; } - // 每个子目录视为一个容器(排除 .git) const entries = await fs.promises.readdir(aircraftDir, { withFileTypes: true }); for (const entry of entries) { if (!entry.isDirectory()) @@ -192,12 +203,6 @@ class ProjectService { return newId; } // =============== 容器相关方法 =============== - /** - * ⚠️ 这里不再做 .git 过滤: - * - 我们只会通过 createContainer / importContainerFromExistingFolder 创建容器 - * - importContainerFromExistingFolder 内部已经排除了 .git - * 所以不会出现名字叫 ".git" 的容器 - */ getContainersByAircraft(aircraftId) { return this.containers.filter(c => c.aircraftId === aircraftId); } @@ -213,7 +218,6 @@ class ProjectService { }; this.containers.push(newContainer); await this.createContainerDirectory(newContainer); - // UI 手动创建的容器,仍然保留“默认两个配置”的行为 await this.createDefaultConfigs(newContainer); return newId; } @@ -234,15 +238,6 @@ class ProjectService { this.moduleFolders = this.moduleFolders.filter(folder => folder.containerId !== containerId); return true; } - /** - * 从已存在的磁盘目录导入容器 - * - * ✅ 你的最新需求: - * - 不创建“默认两个配置” - * - 自动扫描容器目录下的『子文件夹』 - * - 每个子文件夹创建一个 ModuleFolder(type: 'local') - * - 排除 `.git` 子文件夹 - */ async importContainerFromExistingFolder(aircraftId, containerName) { if (containerName === '.git') { throw new Error('不能将 .git 导入为容器'); @@ -258,15 +253,9 @@ class ProjectService { aircraftId }; this.containers.push(container); - // 🚩 关键逻辑:扫描容器目录下的子文件夹 -> 创建 ModuleFolder await this.scanContainerModuleFolders(container); - // 不再创建默认两个配置(不调用 createDefaultConfigs) - // 也不创建目录(目录是 Git 克隆出来的,本来就存在) return newId; } - /** - * 扫描容器目录中的子文件夹(不含 .git),将其作为本地模块文件夹记录 - */ async scanContainerModuleFolders(container) { try { const aircraft = this.aircrafts.find(a => a.id === container.aircraftId); @@ -308,10 +297,8 @@ class ProjectService { getConfig(configId) { return this.configs.find(c => c.id === configId); } - // src/panels/services/ProjectService.ts async createConfig(name, containerId) { const newId = this.generateUniqueId('cfg', this.configs); - // 使用净化后的文件名 const newFileName = this.sanitizeFileName(name); const newConfig = { id: newId, @@ -320,15 +307,11 @@ class ProjectService { containerId: containerId }; this.configs.push(newConfig); - // 1. 首先确保父级容器目录存在 await this.ensureContainerDirectoryExists(containerId); - // 2. 获取文件的完整磁盘路径 const filePath = this.getConfigFilePath(newId); if (filePath) { try { const fileUri = vscode.Uri.file(filePath); - // 3. 真实创建文件:写入一个空的 Uint8Array 即可创建一个空文件 - // 如果你希望有默认内容,可以在这里自定义 TextEncoder().encode("...") await vscode.workspace.fs.writeFile(fileUri, new Uint8Array()); console.log(`✅ 磁盘文件已真实创建: ${filePath}`); } @@ -338,9 +321,6 @@ class ProjectService { } return newId; } - /** - * [修改] 同时更新配置显示名称和文件名称 - */ updateConfigName(configId, newName, newFileName) { const config = this.configs.find(c => c.id === configId); if (config) { @@ -357,19 +337,14 @@ class ProjectService { this.configs = this.configs.filter(c => c.id !== configId); return true; } - /** - * [新增] 重命名磁盘上的配置文件 - */ async renameConfigFileOnDisk(configId, newFileName) { const config = this.configs.find(c => c.id === configId); if (!config) return false; const oldFilePath = this.getConfigFilePath(configId); - // 为了计算新路径,临时使用新的文件名 const oldFileName = config.fileName; config.fileName = newFileName; const newFilePath = this.getConfigFilePath(configId); - // 恢复旧的文件名,因为 ProjectService.updateConfigName 会在 ConfigPanel 中调用 config.fileName = oldFileName; if (!oldFilePath || !newFilePath) { return false; @@ -415,23 +390,16 @@ class ProjectService { this.moduleFolders = this.moduleFolders.filter(f => f.id !== folderId); return true; } - // =============== 文件系统操作 (新增/修改) =============== - /** - * 获取项目目录重命名所需的旧路径和新路径(新增) - */ + // =============== 文件系统操作 =============== getProjectOldAndNewPaths(projectId, newName) { const project = this.projects.find(p => p.id === projectId); const oldPath = this.projectPaths.get(projectId); if (!project || !oldPath) return null; const parentDir = path.dirname(oldPath); - // 新路径使用新的项目名称作为文件夹名 const newPath = path.join(parentDir, newName); return { oldPath, newPath }; } - /** - * 获取飞行器目录的完整路径 - */ getAircraftDirectoryPath(aircraftId) { const aircraft = this.getAircraft(aircraftId); if (!aircraft) @@ -441,10 +409,6 @@ class ProjectService { return null; return path.join(projectPath, aircraft.name); } - /** - * 获取飞行器目录重命名所需的旧路径和新路径(新增) - * 注意:oldPath使用内存中当前的名称,newPath使用将要更新的新名称 - */ getAircraftOldAndNewPaths(aircraftId, newName) { const aircraft = this.aircrafts.find(a => a.id === aircraftId); if (!aircraft) @@ -456,9 +420,6 @@ class ProjectService { const newPath = path.join(projectPath, newName); return { oldPath, newPath }; } - /** - * 获取容器目录的完整路径 - */ getContainerDirectoryPath(containerId) { const container = this.getContainer(containerId); if (!container) @@ -471,10 +432,6 @@ class ProjectService { return null; return path.join(projectPath, aircraft.name, container.name); } - /** - * 获取容器目录重命名所需的旧路径和新路径(新增) - * 注意:oldPath使用内存中当前的名称,newPath使用将要更新的新名称 - */ getContainerOldAndNewPaths(containerId, newName) { const container = this.containers.find(c => c.id === containerId); if (!container) @@ -490,9 +447,6 @@ class ProjectService { const newPath = path.join(aircraftDir, newName); return { oldPath, newPath }; } - /** - * 递归删除目录 - */ async deleteDirectoryFromDisk(directoryPath) { if (!directoryPath) return false; @@ -506,12 +460,9 @@ class ProjectService { } catch (error) { console.error(`删除目录失败: ${error}`); - throw error; // Re-throw to be handled by ConfigPanel + throw error; } } - /** - * 重命名磁盘上的目录(新增) - */ async renameDirectoryOnDisk(oldPath, newPath) { if (!oldPath || !newPath) return false; @@ -526,7 +477,7 @@ class ProjectService { } catch (error) { console.error(`重命名目录失败: ${error}`); - throw error; // Re-throw to be handled by ConfigPanel + throw error; } } async createAircraftDirectory(aircraft) { @@ -586,10 +537,6 @@ class ProjectService { console.error(`确保容器目录存在失败: ${error}`); } } - /** - * 仅用于「新建容器」时的默认两个配置 - * (导入容器时不会调用) - */ async createDefaultConfigs(container) { this.configs.push({ id: this.generateUniqueId('cfg', this.configs), @@ -630,18 +577,15 @@ class ProjectService { if (!projectId) { return null; } - // 先根据旧的 projectId 算出要清理的 aircraft / container / config / moduleFolder const existingAircrafts = this.aircrafts.filter(a => a.projectId === projectId); const aircraftIds = existingAircrafts.map(a => a.id); const existingContainers = this.containers.filter(c => aircraftIds.includes(c.aircraftId)); const containerIds = existingContainers.map(c => c.id); - // 清理旧数据(同一个 projectId 的) this.projects = this.projects.filter(p => p.id !== projectId); this.aircrafts = this.aircrafts.filter(a => a.projectId !== projectId); this.containers = this.containers.filter(c => !aircraftIds.includes(c.aircraftId)); this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId)); this.moduleFolders = this.moduleFolders.filter(folder => !containerIds.includes(folder.containerId)); - // ⭐ 载入新数据时顺便过滤掉名字为 ".git" 的容器(避免历史数据带进来) const cleanedContainers = data.containers.filter(c => c.name !== '.git'); this.projects.push(...data.projects); this.aircrafts.push(...data.aircrafts); @@ -694,7 +638,6 @@ class ProjectService { const pathParts = folder.localPath.split('/').filter(part => part); if (pathParts.length < 4) return null; - // 路径的最后一部分是文件夹的名称 const folderName = pathParts[pathParts.length - 1]; return path.join(projectPath, aircraft.name, container.name, folderName); } diff --git a/out/panels/services/ProjectService.js.map b/out/panels/services/ProjectService.js.map index ffe78c6..f8686d1 100644 --- a/out/panels/services/ProjectService.js.map +++ b/out/panels/services/ProjectService.js.map @@ -1 +1 @@ -{"version":3,"file":"ProjectService.js","sourceRoot":"","sources":["../../../src/panels/services/ProjectService.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ProjectService.js","sourceRoot":"","sources":["../../../src/panels/services/ProjectService.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/panels/ConfigPanel.ts b/src/panels/ConfigPanel.ts index bc1b107..bf58e54 100755 --- a/src/panels/ConfigPanel.ts +++ b/src/panels/ConfigPanel.ts @@ -10,7 +10,6 @@ import { GitService } from './services/GitService'; import { StorageService } from './services/StorageService'; import { ModuleFolder } from './types/CommonTypes'; -// 仓库配置项接口 interface RepoConfigItem { name: string; url: string; @@ -18,7 +17,6 @@ interface RepoConfigItem { token?: string; } -// Git文件树接口 interface GitFileTree { name: string; type: 'file' | 'folder'; @@ -33,35 +31,26 @@ export class ConfigPanel { public readonly panel: vscode.WebviewPanel; private readonly extensionUri: vscode.Uri; - // 服务实例 private projectService: ProjectService; - // 视图状态管理 private currentView: 'projects' | 'aircrafts' | 'containers' | 'configs' = 'projects'; private currentProjectId: string = ''; private currentAircraftId: string = ''; private currentContainerId: string = ''; private currentModuleFolderId: string = ''; - // 仓库配置 private repoConfigs: RepoConfigItem[] = []; private currentRepoForBranches: RepoConfigItem | undefined; private currentCloneScope: CloneScope = 'config'; - // 状态管理 private isWebviewDisposed: boolean = false; private currentModuleFolderFileTree: GitFileTree[] = []; - // 视图实例 private readonly projectView: ProjectView; private readonly aircraftView: AircraftView; private readonly containerView: ContainerView; private readonly configView: ConfigView; - // ============================================= - // 公共方法 - // ============================================= - public static createOrShow(extensionUri: vscode.Uri) { const column = vscode.window.activeTextEditor?.viewColumn || vscode.ViewColumn.One; @@ -89,16 +78,13 @@ export class ConfigPanel { this.extensionUri = extensionUri; this.isWebviewDisposed = false; - // 初始化服务 this.projectService = new ProjectService(); - // 初始化视图 this.projectView = new ProjectView(extensionUri); this.aircraftView = new AircraftView(extensionUri); this.containerView = new ContainerView(extensionUri); this.configView = new ConfigView(extensionUri); - // 加载仓库配置 void this.loadRepoConfigs(); this.updateWebview(); @@ -110,10 +96,6 @@ export class ConfigPanel { }); } - // ============================================= - // 仓库配置相关 - // ============================================= - private async loadRepoConfigs(): Promise { this.repoConfigs = await StorageService.loadRepoConfigs(this.extensionUri); } @@ -123,9 +105,6 @@ export class ConfigPanel { await this.loadRepoConfigs(); } - /** - * 按作用域弹出仓库选择弹窗(仅用于“获取仓库 -> 获取分支”) - */ private async openRepoSelectForScope(scope: CloneScope): Promise { this.currentCloneScope = scope; await this.loadRepoConfigs(); @@ -143,16 +122,10 @@ export class ConfigPanel { }); } - /** - * ConfigView 使用的默认版本(保持兼容) - */ private async openRepoSelect(): Promise { return this.openRepoSelectForScope('config'); } - /** - * 弹出“上传代码”时的仓库 + 分支选择弹窗 (模块文件夹专用) - */ private async openUploadRepoSelect(folderId: string, folderType: 'git' | 'local'): Promise { await this.loadRepoConfigs(); @@ -171,9 +144,6 @@ export class ConfigPanel { }); } - /** - * 弹出“上传代码”时的仓库 + 分支选择弹窗 (Project/Aircraft/Container 专用) - */ private async openUploadRepoSelectForScope( scope: 'project' | 'aircraft' | 'container', id: string @@ -191,13 +161,10 @@ export class ConfigPanel { type: 'showUploadRepoSelect', repos: this.repoConfigs.map(r => ({ name: r.name })), folderId: id, - folderType: scope // 传递 scope 作为类型 + folderType: scope }); } - /** - * “获取仓库”弹窗确认后:用于拉取分支 - */ private async handleRepoSelectedForBranches(repoName: string): Promise { await this.loadRepoConfigs(); const repo = this.repoConfigs.find(r => r.name === repoName); @@ -211,12 +178,9 @@ export class ConfigPanel { await this.fetchBranchesForRepo(repo); } - /** - * “上传代码”弹窗确认后:根据 type 决定上传逻辑,并使用用户输入的 branchName - */ private async handleUploadRepoSelected( - id: string, // 现在是通用 ID (folderId, projectId, aircraftId, containerId) - type: 'git' | 'local' | 'project' | 'aircraft' | 'container', // 扩展类型 + id: string, + type: 'git' | 'local' | 'project' | 'aircraft' | 'container', repoName: string, branchName: string ): Promise { @@ -234,7 +198,6 @@ export class ConfigPanel { } if (type === 'local') { - // 本地模块 -> 选中仓库 + 指定分支 (原逻辑) await this.uploadLocalModuleFolder( id, repo.url, @@ -243,17 +206,12 @@ export class ConfigPanel { repo.token ); } else if (type === 'git') { - // Git 模块 -> 选中仓库 + 指定分支 (原逻辑) await this.processGitUploadWithBranch(id, repo, trimmedBranch); } else { - // 新增逻辑:Project, Aircraft, Container 上传 await this.uploadProjectAircraftContainer(id, type, repo, trimmedBranch); } } - /** - * Git 模块上传(可能换仓库 / 改名),使用用户指定的分支 - */ private async processGitUploadWithBranch( folderId: string, repo: RepoConfigItem, @@ -277,13 +235,11 @@ export class ConfigPanel { return; } - // 未改名 + 还是原来的仓库 → 直接在原分支上 push(更新代码) if (!isRenamed && isSameRepo) { await this.uploadGitModuleFolder(folderId); return; } - // 改了名字 或 换了仓库 → 使用“用户输入的分支名”进行推送 await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, title: `正在上传 Git 仓库: ${folder.name}`, @@ -292,7 +248,6 @@ export class ConfigPanel { try { progress.report({ increment: 0, message: '准备上传...' }); - // 这里使用 GitService.pushToRepoUrl,它负责 checkout 和 push await GitService.pushToRepoUrl( fullPath, repo.url, @@ -319,10 +274,6 @@ export class ConfigPanel { }); } - // ============================================= - // Webview 消息处理 - // ============================================= - private setupMessageListener() { this.panel.webview.onDidReceiveMessage(async (data) => { if (this.isWebviewDisposed) { @@ -343,7 +294,6 @@ export class ConfigPanel { private async handleWebviewMessage(data: any): Promise { const messageHandlers: { [key: string]: (data: any) => Promise } = { - // 导航相关 'openExistingProject': () => this.openExistingProject(), 'configureProject': (data) => this.handleConfigureProject(data), 'openProject': (data) => this.handleOpenProject(data), @@ -353,66 +303,54 @@ export class ConfigPanel { 'goBackToAircrafts': () => this.handleGoBackToAircrafts(), 'goBackToContainers': () => this.handleGoBackToContainers(), - // 项目管理 (MODIFIED) 'updateProjectName': (data) => this.updateProjectName(data.projectId, data.name), 'createProject': (data) => this.createProject(data.name), 'deleteProject': (data) => this.deleteProject(data.projectId), - // 飞行器管理 (MODIFIED) 'updateAircraftName': (data) => this.updateAircraftName(data.aircraftId, data.name), 'createAircraft': (data) => this.createAircraft(data.name), 'deleteAircraft': (data) => this.deleteAircraft(data.aircraftId), - // 容器管理 (MODIFIED) 'updateContainerName': (data) => this.updateContainerName(data.containerId, data.name), 'createContainer': (data) => this.createContainer(data.name), 'deleteContainer': (data) => this.deleteContainer(data.containerId), - // 模块管理 - // [修改] 接收新的文件名 'updateConfigName': (data) => this.updateConfigName(data.configId, data.name, data.fileName), 'createConfig': (data) => this.createConfig(data.name), 'deleteConfig': (data) => this.deleteConfig(data.configId), 'openConfigFileInVSCode': (data) => this.openConfigFileInVSCode(data.configId), 'mergeConfigs': (data) => this.mergeConfigs(data.configIds, data.displayName, data.folderName), - // Git 仓库管理 'openRepoConfig': () => this.openRepoConfig(), - 'openRepoSelect': () => this.openRepoSelect(), // ConfigView 用 + 'openRepoSelect': () => this.openRepoSelect(), 'openRepoSelectForProject': () => this.openRepoSelectForScope('project'), 'openRepoSelectForAircraft': () => this.openRepoSelectForScope('aircraft'), 'openRepoSelectForContainer': () => this.openRepoSelectForScope('container'), 'repoSelectedForBranches': (data) => this.handleRepoSelectedForBranches(data.repoName), - // Git 分支管理 'fetchBranches': (data) => this.fetchBranches(data.url), 'cloneBranches': (data) => this.cloneBranches(data.branches), 'cancelBranchSelection': () => this.handleCancelBranchSelection(), - // 模块文件夹管理 'loadModuleFolder': (data) => this.loadModuleFolder(data.folderId), 'syncGitModuleFolder': (data) => this.syncGitModuleFolder(data.folderId), 'deleteModuleFolder': (data) => this.deleteModuleFolder(data.folderId), 'importGitFile': (data) => this.importGitFile(data.filePath), 'openTheModuleFolder': (data) => this.openTheModuleFolder(data.moduleType, data.id), - // [修改] 接收新的显示名称和磁盘文件夹名称 'renameModuleFolder': (data) => this.renameModuleFolder(data.folderId, data.newName, data.newFolderName), - // 模块上传功能 (原逻辑) 'uploadGitModuleFolder': (data) => this.uploadGitModuleFolder(data.folderId, data.username, data.password), 'openRepoSelectForUpload': (data) => this.openUploadRepoSelect(data.folderId, 'local'), 'uploadLocalModuleFolder': (data) => this.uploadLocalModuleFolder(data.folderId, data.repoUrl, data.branchName), 'openRepoSelectForGitUpload': (data) => this.openUploadRepoSelect(data.folderId, 'git'), - // 新增:Project/Aircraft/Container 上传 'openRepoSelectForProjectUpload': (data) => this.openUploadRepoSelectForScope('project', data.projectId), 'openRepoSelectForAircraftUpload': (data) => this.openUploadRepoSelectForScope('aircraft', data.aircraftId), 'openRepoSelectForContainerUpload': (data) => this.openUploadRepoSelectForScope('container', data.containerId), - // 统一的上传时 仓库+分支 选择确认 'uploadRepoSelected': (data) => this.handleUploadRepoSelected( data.folderId, - data.folderType, // 此时 data.folderType 可能是 'project' | 'aircraft' | 'container' + data.folderType, data.repoName, data.branchName ) @@ -426,10 +364,6 @@ export class ConfigPanel { } } - // ============================================= - // 导航处理方法 - // ============================================= - private async handleConfigureProject(data: any): Promise { const selectedPath = await this.selectProjectPath(data.projectId, data.projectName); if (selectedPath) { @@ -485,17 +419,16 @@ export class ConfigPanel { this.updateWebview(); } - // ============================================= - // 项目管理方法 (MODIFIED) - // ============================================= - - /** - * 重命名项目:更新内存数据、重命名磁盘文件夹、更新项目路径(MODIFIED) - */ private async updateProjectName(projectId: string, newName: string): Promise { const project = this.projectService.getProjects().find(p => p.id === projectId); if (!project) return; + if (project.name !== newName && this.projectService.isProjectNameExists(newName)) { + vscode.window.showErrorMessage(`❌ 项目名称 "${newName}" 已存在`); + this.updateWebview(); + return; + } + const paths = this.projectService.getProjectOldAndNewPaths(projectId, newName); if (!paths) { vscode.window.showErrorMessage('无法获取项目路径'); @@ -503,15 +436,11 @@ export class ConfigPanel { } try { - // 1. 重命名磁盘文件夹 await this.projectService.renameDirectoryOnDisk(paths.oldPath, paths.newPath); - // 2. 更新内存中的项目名称和项目路径 if (this.projectService.updateProjectName(projectId, newName)) { - // 必须更新 projectPaths map this.projectService.setProjectPath(projectId, paths.newPath); - // 3. 保存数据到新的项目路径下的 .dcsp-data.json await this.saveCurrentProjectData(); vscode.window.showInformationMessage(`✅ 项目名称和文件夹已更新: ${newName}`); @@ -523,6 +452,10 @@ export class ConfigPanel { } private async createProject(name: string): Promise { + if (this.projectService.isProjectNameExists(name)) { + vscode.window.showErrorMessage(`❌ 项目名称 "${name}" 已存在`); + return; + } const newId = await this.projectService.createProject(name); this.currentProjectId = newId; @@ -530,12 +463,8 @@ export class ConfigPanel { this.updateWebview(); } - /** - * 删除项目,同时删除磁盘上的文件夹 - */ private async deleteProject(projectId: string): Promise { const project = this.projectService.getProjects().find(p => p.id === projectId); - // 获取项目存储路径 const projectPath = this.projectService.getProjectPath(projectId); if (!project) return; @@ -552,15 +481,12 @@ export class ConfigPanel { } try { - // 1. 删除磁盘上的文件夹 if (projectPath) { await this.projectService.deleteDirectoryFromDisk(projectPath); } - // 2. 从内存中删除 (同时会清理所有子数据) if (this.projectService.deleteProject(projectId)) { - // 如果删除的是当前正在查看的项目,则返回 Projects 视图 if (this.currentProjectId === projectId) { this.currentProjectId = ''; this.currentView = 'projects'; @@ -568,7 +494,6 @@ export class ConfigPanel { vscode.window.showInformationMessage(`项目已删除: ${project.name}`); - // 如果还有其他项目在内存中,保存一下最新的数据状态 if (this.currentProjectId) { await this.saveCurrentProjectData(); } @@ -580,17 +505,16 @@ export class ConfigPanel { } } - // ============================================= - // 飞行器管理方法 (MODIFIED) - // ============================================= - - /** - * 重命名飞行器:更新内存数据、重命名磁盘文件夹(MODIFIED) - */ private async updateAircraftName(aircraftId: string, newName: string): Promise { const aircraft = this.projectService.getAircraft(aircraftId); if (!aircraft) return; + if (aircraft.name !== newName && this.projectService.isAircraftNameExists(this.currentProjectId, newName)) { + vscode.window.showErrorMessage(`❌ 飞行器名称 "${newName}" 已存在`); + this.updateWebview(); + return; + } + const paths = this.projectService.getAircraftOldAndNewPaths(aircraftId, newName); if (!paths) { vscode.window.showErrorMessage('无法获取飞行器路径'); @@ -598,12 +522,9 @@ export class ConfigPanel { } try { - // 1. 重命名磁盘文件夹 await this.projectService.renameDirectoryOnDisk(paths.oldPath, paths.newPath); - // 2. 更新内存中的飞行器名称 if (this.projectService.updateAircraftName(aircraftId, newName)) { - // 3. 保存数据到 .dcsp-data.json await this.saveCurrentProjectData(); vscode.window.showInformationMessage(`✅ 飞行器名称和文件夹已更新: ${newName}`); @@ -619,6 +540,11 @@ export class ConfigPanel { vscode.window.showErrorMessage('无法创建飞行器:未找到当前项目'); return; } + + if (this.projectService.isAircraftNameExists(this.currentProjectId, name)) { + vscode.window.showErrorMessage(`❌ 该项目下已存在名为 "${name}" 的飞行器`); + return; + } const aircraftId = await this.projectService.createAircraft(name, this.currentProjectId); vscode.window.showInformationMessage(`新建飞行器: ${name}`); @@ -626,9 +552,6 @@ export class ConfigPanel { this.updateWebview(); } - /** - * 删除飞行器,同时删除磁盘上的文件夹 - */ private async deleteAircraft(aircraftId: string): Promise { const aircraft = this.projectService.getAircraftsByProject(this.currentProjectId) .find(a => a.id === aircraftId); @@ -648,12 +571,10 @@ export class ConfigPanel { const dirPath = this.projectService.getAircraftDirectoryPath(aircraftId); try { - // 1. 删除磁盘上的文件夹 if (dirPath) { await this.projectService.deleteDirectoryFromDisk(dirPath); } - // 2. 从内存中删除 (同时会清理所有子数据) if (this.projectService.deleteAircraft(aircraftId)) { vscode.window.showInformationMessage(`飞行器已删除: ${aircraft.name}`); await this.saveCurrentProjectData(); @@ -664,17 +585,16 @@ export class ConfigPanel { } } - // ============================================= - // 容器管理方法 (MODIFIED) - // ============================================= - - /** - * 重命名容器:更新内存数据、重命名磁盘文件夹(MODIFIED) - */ private async updateContainerName(containerId: string, newName: string): Promise { const container = this.projectService.getContainer(containerId); if (!container) return; + if (container.name !== newName && this.projectService.isContainerNameExists(this.currentAircraftId, newName)) { + vscode.window.showErrorMessage(`❌ 容器名称 "${newName}" 已存在`); + this.updateWebview(); + return; + } + const paths = this.projectService.getContainerOldAndNewPaths(containerId, newName); if (!paths) { vscode.window.showErrorMessage('无法获取容器路径'); @@ -682,12 +602,9 @@ export class ConfigPanel { } try { - // 1. 重命名磁盘文件夹 await this.projectService.renameDirectoryOnDisk(paths.oldPath, paths.newPath); - // 2. 更新内存中的容器名称 if (this.projectService.updateContainerName(containerId, newName)) { - // 3. 保存数据到 .dcsp-data.json await this.saveCurrentProjectData(); vscode.window.showInformationMessage(`✅ 容器名称和文件夹已更新: ${newName}`); @@ -703,6 +620,11 @@ export class ConfigPanel { vscode.window.showErrorMessage('无法创建容器:未找到当前飞行器'); return; } + + if (this.projectService.isContainerNameExists(this.currentAircraftId, name)) { + vscode.window.showErrorMessage(`❌ 该飞行器下已存在名为 "${name}" 的容器`); + return; + } const containerId = await this.projectService.createContainer(name, this.currentAircraftId); vscode.window.showInformationMessage(`新建容器: ${name} (包含2个默认配置文件)`); @@ -710,9 +632,6 @@ export class ConfigPanel { this.updateWebview(); } - /** - * 删除容器,同时删除磁盘上的文件夹 - */ private async deleteContainer(containerId: string): Promise { const container = this.projectService.getContainersByAircraft(this.currentAircraftId) .find(c => c.id === containerId); @@ -732,12 +651,10 @@ export class ConfigPanel { const dirPath = this.projectService.getContainerDirectoryPath(containerId); try { - // 1. 删除磁盘上的文件夹 if (dirPath) { await this.projectService.deleteDirectoryFromDisk(dirPath); } - // 2. 从内存中删除 (同时会清理所有子数据) if (this.projectService.deleteContainer(containerId)) { vscode.window.showInformationMessage(`容器已删除: ${container.name}`); await this.saveCurrentProjectData(); @@ -748,22 +665,25 @@ export class ConfigPanel { } } - // ============================================= - // 模块管理方法 - // ============================================= - - /** - * [修改] 同时更新配置显示名称和文件名,并处理磁盘文件重命名 - */ private async updateConfigName(configId: string, newName: string, newFileName: string): Promise { const config = this.projectService.getConfig(configId); if (!config) return; + const check = this.projectService.isConfigOrFolderConflict(config.containerId, newName, newFileName, configId); + if (check.nameConflict) { + vscode.window.showErrorMessage(`❌ 显示名称 "${newName}" 已占用`); + this.updateWebview(); + return; + } + if (check.fileConflict) { + vscode.window.showErrorMessage(`❌ 文件名 "${newFileName}" 已在磁盘中存在`); + this.updateWebview(); + return; + } + try { - // 1. 重命名磁盘文件 await this.projectService.renameConfigFileOnDisk(configId, newFileName); - // 2. 更新内存数据 if (this.projectService.updateConfigName(configId, newName, newFileName)) { vscode.window.showInformationMessage(`✅ 配置/文件名已更新: ${newName} / ${newFileName}`); await this.saveCurrentProjectData(); @@ -775,7 +695,13 @@ export class ConfigPanel { } private async createConfig(name: string): Promise { - // 注意:真正创建文件内容的逻辑放在 ProjectService.createConfig 里处理 + const fileName = this.projectService.sanitizeFileName(name); + const check = this.projectService.isConfigOrFolderConflict(this.currentContainerId, name, fileName); + if (check.nameConflict || check.fileConflict) { + vscode.window.showErrorMessage(`❌ 配置名称或文件名 "${name}" 已存在`); + return; + } + const configId = await this.projectService.createConfig(name, this.currentContainerId); vscode.window.showInformationMessage(`新建配置: ${name}`); await this.saveCurrentProjectData(); @@ -798,10 +724,8 @@ export class ConfigPanel { } try { - // 删除配置文件(磁盘) await this.projectService.deleteConfigFileFromDisk(configId); - // 从内存中删除 this.projectService.deleteConfig(configId); vscode.window.showInformationMessage(`删除配置: ${config.name}`); @@ -818,6 +742,12 @@ export class ConfigPanel { vscode.window.showErrorMessage('未找到当前容器'); return; } + + const check = this.projectService.isConfigOrFolderConflict(this.currentContainerId, displayName, folderName); + if (check.nameConflict || check.fileConflict) { + vscode.window.showErrorMessage(`❌ 合并后的文件夹名称或显示名 "${displayName}" 已存在`); + return; + } if (configIds.length < 2) { vscode.window.showErrorMessage('请至少选择两个配置文件进行合并'); @@ -838,7 +768,6 @@ export class ConfigPanel { return; } - // 获取选中的配置(仅元信息,不含 content) const selectedConfigs = configIds .map(id => this.projectService.getConfig(id)) .filter(Boolean); @@ -848,13 +777,11 @@ export class ConfigPanel { return; } - // 创建合并文件夹 const mergeFolderPath = path.join(projectPath, this.getAircraftName(), container.name, folderName); await vscode.workspace.fs.createDirectory(vscode.Uri.file(mergeFolderPath)); const fs = require('fs'); - // 复制文件到合并文件夹:完全基于磁盘文件 for (const config of selectedConfigs) { if (!config) continue; @@ -864,7 +791,6 @@ export class ConfigPanel { if (sourcePath && fs.existsSync(sourcePath)) { await fs.promises.copyFile(sourcePath, targetPath); } else { - // 找不到源文件:写一个占位注释文件 const placeholder = `# 原配置文件 "${config.fileName}" 未在磁盘中找到\n` + `# 仅保留占位文件,建议手动补充内容\n\n`; @@ -872,7 +798,6 @@ export class ConfigPanel { } } - // 创建模块文件夹记录(使用 ProjectService 的统一 ID 生成) const relativePath = `/${this.currentProjectId}/${this.getAircraftName()}/${container.name}/${folderName}`; const newFolder: ModuleFolder = { id: this.projectService.generateUniqueId('local-'), @@ -884,7 +809,6 @@ export class ConfigPanel { this.projectService.addModuleFolder(newFolder); - // 删除原配置(包括磁盘上的配置文件) for (const configId of configIds) { await this.projectService.deleteConfigFileFromDisk(configId); this.projectService.deleteConfig(configId); @@ -912,10 +836,6 @@ export class ConfigPanel { return container?.name || '未知容器'; } - // ============================================= - // Git 分支管理方法 - // ============================================= - private async fetchBranchesForRepo(repo: RepoConfigItem): Promise { await this.fetchBranches(repo.url, repo); } @@ -970,9 +890,6 @@ export class ConfigPanel { } } - /** - * 根据当前作用域,把选中的分支克隆到不同层级 - */ private async cloneBranches(branches: string[]): Promise { if (!this.currentRepoForBranches) { vscode.window.showErrorMessage('请先通过"获取仓库"选择一个仓库'); @@ -996,9 +913,6 @@ export class ConfigPanel { } } - /** - * 原有逻辑:在 ConfigView 中,把分支克隆为当前容器下的 git 模块文件夹 - */ private async cloneBranchesToModuleFolders(branches: string[]): Promise { if (!this.currentRepoForBranches) { vscode.window.showErrorMessage('请先通过"获取仓库"选择一个仓库'); @@ -1021,15 +935,22 @@ export class ConfigPanel { }, async (progress) => { for (let i = 0; i < branches.length; i++) { const branch = branches[i]; + + const folderNames = GitService.generateModuleFolderName(url, branch); + const check = this.projectService.isConfigOrFolderConflict(this.currentContainerId, repoDisplayName, folderNames.folderName); + if (check.nameConflict || check.fileConflict) { + vscode.window.showErrorMessage(`❌ 克隆分支失败:名为 "${folderNames.folderName}" 的模块已存在`); + failCount++; + continue; + } + const progressPercent = (i / branches.length) * 100; progress.report({ increment: progressPercent, message: `克隆分支: ${branch} (${i + 1}/${branches.length})` }); - console.log(`📥 开始克隆分支: ${branch}`); try { - const folderNames = GitService.generateModuleFolderName(url, branch); await this.addGitModuleFolder( url, repoDisplayName, @@ -1040,10 +961,8 @@ export class ConfigPanel { ); successCount++; - console.log(`✅ 分支克隆成功: ${branch}`); } catch (error) { failCount++; - console.error(`❌ 分支克隆失败: ${branch}`, error); } } }); @@ -1060,10 +979,6 @@ export class ConfigPanel { } } - /** - * ProjectView 用:把分支克隆为完整项目 - * 每个分支会弹出一个路径输入框,克隆整个仓库到该路径,如果有 .dcsp-data.json 则自动加载为项目 - */ private async cloneBranchesToProjects(branches: string[]): Promise { if (!this.currentRepoForBranches) { vscode.window.showErrorMessage('请先通过"获取仓库"选择一个仓库'); @@ -1120,14 +1035,12 @@ export class ConfigPanel { this.currentRepoForBranches?.token ); - // 克隆完成后,尝试加载项目数据(如果有 .dcsp-data.json) try { const projectId = await this.projectService.loadProjectData(targetPath); if (projectId) { this.currentProjectId = projectId; successCount++; } else { - // 没有 dscp-data 也算成功克隆,只是不会自动出现在列表里 successCount++; } } catch (err) { @@ -1153,10 +1066,6 @@ export class ConfigPanel { this.updateWebview(); } - /** - * AircraftView 用:把分支克隆为当前项目下的飞行器 - * 目标路径:/<分支名>,克隆后自动解析容器/配置/模块,并写入 dscp-data.json - */ private async cloneBranchesToAircrafts(branches: string[]): Promise { if (!this.currentRepoForBranches) { vscode.window.showErrorMessage('请先通过"获取仓库"选择一个仓库'); @@ -1191,6 +1100,12 @@ export class ConfigPanel { const aircraftName = branch.trim(); if (!aircraftName) continue; + if (this.projectService.isAircraftNameExists(this.currentProjectId, aircraftName)) { + vscode.window.showErrorMessage(`❌ 克隆飞行器失败:名为 "${aircraftName}" 的飞行器已存在`); + failCount++; + continue; + } + const localPath = path.join(projectPath, aircraftName); progress.report({ @@ -1229,10 +1144,6 @@ export class ConfigPanel { this.updateWebview(); } - /** - * ContainerView 用:把分支克隆为当前飞行器下的容器 - * 目标路径:/<当前飞行器名>/<分支名>,克隆后自动解析配置/模块,并写入 dscp-data.json - */ private async cloneBranchesToContainers(branches: string[]): Promise { if (!this.currentRepoForBranches) { vscode.window.showErrorMessage('请先通过"获取仓库"选择一个仓库'); @@ -1273,6 +1184,12 @@ export class ConfigPanel { const containerName = branch.trim(); if (!containerName) continue; + if (this.projectService.isContainerNameExists(this.currentAircraftId, containerName)) { + vscode.window.showErrorMessage(`❌ 克隆容器失败:名为 "${containerName}" 的容器已存在`); + failCount++; + continue; + } + const localPath = path.join(projectPath, aircraftName, containerName); progress.report({ @@ -1336,21 +1253,10 @@ export class ConfigPanel { return; } - // 使用 ProjectService 的统一 ID 生成 const folderId = this.projectService.generateUniqueId('git-'); const relativePath = `/${this.currentProjectId}/${this.getAircraftName()}/${this.getContainerName()}/${folderName}`; const localPath = path.join(projectPath, this.getAircraftName(), this.getContainerName(), folderName); - console.log(`📁 准备克隆仓库: ${displayName}, 分支: ${branch}, 路径: ${localPath}`); - - const existingFolder = this.projectService.getModuleFoldersByContainer(this.currentContainerId) - .find(folder => folder.localPath === relativePath); - - if (existingFolder) { - vscode.window.showWarningMessage(`该路径的模块文件夹已存在: ${folderName}`); - return; - } - const newFolder: ModuleFolder = { id: folderId, name: displayName, @@ -1369,13 +1275,11 @@ export class ConfigPanel { progress.report({ increment: 0 }); try { - // 使用 GitService 克隆仓库 await GitService.cloneRepository( url, localPath, branch, (event: any) => { - console.log(`📊 克隆进度: ${event.phase} - ${event.loaded}/${event.total}`); if (event.total) { const percent = (event.loaded / event.total) * 100; progress.report({ @@ -1390,39 +1294,22 @@ export class ConfigPanel { token ); - console.log('✅ Git克隆成功完成'); - - const clonedContents = await require('fs').promises.readdir(localPath); - console.log(`📁 克隆后的目录内容:`, clonedContents); - - if (clonedContents.length === 0) { - throw new Error('克隆后目录为空,可能克隆失败'); - } - this.projectService.addModuleFolder(newFolder); await this.saveCurrentProjectData(); - console.log('✅ Git模块文件夹数据已保存到项目文件'); vscode.window.showInformationMessage(`Git 仓库克隆成功: ${displayName}`); if (!this.isWebviewDisposed) { - console.log('🌳 开始加载模块文件夹文件树...'); this.currentModuleFolderId = folderId; await this.loadModuleFolderFileTree(folderId); - console.log('✅ 模块文件夹文件树加载完成'); } } catch (error) { - console.error('❌ 在克隆过程中捕获错误:', error); - try { if (require('fs').existsSync(localPath)) { await require('fs').promises.rm(localPath, { recursive: true, force: true }); - console.log('🧹 已清理克隆失败的目录'); } - } catch (cleanupError) { - console.error('清理失败目录时出错:', cleanupError); - } + } catch (cleanupError) {} vscode.window.showErrorMessage(`克隆仓库失败: ${error}`); throw error; @@ -1430,18 +1317,10 @@ export class ConfigPanel { }); } catch (error) { - console.error('❌ 在addGitModuleFolder外部捕获错误:', error); vscode.window.showErrorMessage(`添加 Git 模块文件夹失败: ${error}`); } } - // ============================================= - // 模块文件夹管理方法 - // ============================================= - - /** - * [修改] 同时处理显示名称和磁盘文件夹名称的重命名 - */ private async renameModuleFolder(folderId: string, newName: string, newFolderName: string): Promise { const folder = this.projectService.getModuleFolder(folderId); if (!folder) { @@ -1449,6 +1328,13 @@ export class ConfigPanel { return; } + const check = this.projectService.isConfigOrFolderConflict(folder.containerId, newName, newFolderName, folderId); + if (check.nameConflict || check.fileConflict) { + vscode.window.showErrorMessage(`❌ 文件夹显示名称或磁盘名称 "${newFolderName}" 冲突`); + this.updateWebview(); + return; + } + const fullPath = this.projectService.getModuleFolderFullPath(folder); if (!fullPath) { vscode.window.showErrorMessage('无法获取模块文件夹路径'); @@ -1459,15 +1345,10 @@ export class ConfigPanel { if (!oldFolderName) return; const newFullPath = path.join(path.dirname(fullPath), newFolderName); - const isDiskRenameNeeded = oldFolderName !== newFolderName; try { - if (isDiskRenameNeeded) { - // 1. 重命名磁盘文件夹 - await this.projectService.renameDirectoryOnDisk(fullPath, newFullPath); - } + await this.projectService.renameDirectoryOnDisk(fullPath, newFullPath); - // 2. 更新内存数据:显示名和 localPath const newLocalPath = folder.localPath.replace(new RegExp(`/${oldFolderName}$`), '/' + newFolderName); this.projectService.updateModuleFolder(folderId, { @@ -1585,10 +1466,8 @@ export class ConfigPanel { const content = await fs.promises.readFile(sourceFullPath, 'utf8'); const fileName = path.basename(filePath); - // 1. 先创建一个配置(ProjectService.createConfig 内部会在磁盘上生成文件) const configId = await this.projectService.createConfig(fileName, this.currentContainerId); - // 2. 再把 Git 文件的内容写到该配置文件上,覆盖默认模板 const targetConfigPath = this.projectService.getConfigFilePath(configId); if (!targetConfigPath) { vscode.window.showErrorMessage('无法获取新配置文件的路径'); @@ -1609,13 +1488,6 @@ export class ConfigPanel { } } - // ============================================= - // 上传功能方法 - // ============================================= - - /** - * 上传 Project / Aircraft / Container 目录到 Git 仓库 - */ private async uploadProjectAircraftContainer( id: string, type: 'project' | 'aircraft' | 'container', @@ -1625,7 +1497,6 @@ export class ConfigPanel { let fullPath: string | null = null; let name: string = ''; - // 1. 获取目标目录的完整路径和名称 if (type === 'project') { fullPath = this.projectService.getProjectPath(id) || null; name = this.projectService.getProjects().find(p => p.id === id)?.name || 'Project'; @@ -1644,7 +1515,7 @@ export class ConfigPanel { } if (!fullPath || !require('fs').existsSync(fullPath)) { - vscode.window.showErrorMessage(`无法获取 ${type} "${name}" 的有效路径或目录不存在。请先配置项目路径并确保目录存在。`); + vscode.window.showErrorMessage(`无法获取 ${type} "${name}" 的有效路径或目录不存在。`); return; } @@ -1657,38 +1528,28 @@ export class ConfigPanel { progress.report({ increment: 0, message: '检查目录...' }); const fs = require('fs'); - // 检查目录是否为空 const dirContents = await fs.promises.readdir(fullPath!); if (dirContents.length === 0) { throw new Error('目录为空,无法上传'); } - // 2. 检查是否为 Git 仓库并初始化 let isGitRepo = false; - try { - // Check for .git directory - if (fs.existsSync(path.join(fullPath!, '.git'))) { - isGitRepo = true; - } - } catch (e) { /* ignore */ } + if (fs.existsSync(path.join(fullPath!, '.git'))) { + isGitRepo = true; + } if (!isGitRepo) { progress.report({ increment: 10, message: '初始化 Git 仓库...' }); - // initRepository 内部会创建并切换到指定分支 await GitService.initRepository(fullPath!, branchName); } - // 3. 配置远程仓库 progress.report({ increment: 20, message: '配置远程仓库...' }); try { - // 尝试移除旧的 origin 远程,以避免冲突 await GitService.removeRemote(fullPath!); - } catch(e) { /* ignore if no remote */ } + } catch(e) {} await GitService.addRemote(fullPath!, repo.url, repo.username, repo.token); - // 4. 提交并推送 progress.report({ increment: 40, message: '提交并推送到远程仓库...' }); - // commitAndPushToBranch 内部会 add, commit, checkout -B, push await GitService.commitAndPushToBranch(fullPath!, branchName, repo.url, repo.username, repo.token); progress.report({ increment: 100, message: '完成' }); @@ -1696,7 +1557,6 @@ export class ConfigPanel { vscode.window.showInformationMessage(`✅ ${type} ${name} 已成功上传到 ${repo.name} 的分支 ${branchName}`); this.updateWebview(); } catch (error: any) { - console.error(`❌ ${type} 上传失败:`, error); vscode.window.showErrorMessage(`推送失败: ${error.message || error}`); } }); @@ -1734,7 +1594,6 @@ export class ConfigPanel { this.updateWebview(); } catch (error: any) { - console.error('❌ Git 上传失败:', error); vscode.window.showErrorMessage(`推送失败: ${error.message || error}`); } }); @@ -1799,7 +1658,6 @@ export class ConfigPanel { this.updateWebview(); } catch (error: any) { - console.error('❌ 本地文件夹上传失败:', error); vscode.window.showErrorMessage(`推送失败: ${error.message || error}`); try { @@ -1808,22 +1666,13 @@ export class ConfigPanel { if (fs.existsSync(gitDir)) { await fs.promises.rm(gitDir, { recursive: true, force: true }); } - } catch (cleanupError) { - console.error('清理 .git 文件夹失败:', cleanupError); - } + } catch (cleanupError) {} } }); } - // ============================================= - // 文件树和模块文件夹方法 - // ============================================= - private async loadModuleFolderFileTree(folderId: string): Promise { - if (this.isWebviewDisposed) { - console.log('⚠️ Webview 已被销毁,跳过文件树加载'); - return; - } + if (this.isWebviewDisposed) return; const folder = this.projectService.getModuleFolder(folderId); if (!folder) return; @@ -1833,10 +1682,7 @@ export class ConfigPanel { type: 'moduleFolderLoading', loading: true }); - } catch (error) { - console.log('⚠️ 无法发送加载消息,Webview 可能已被销毁'); - return; - } + } catch (error) { return; } try { const fullPath = this.projectService.getModuleFolderFullPath(folder); @@ -1846,14 +1692,10 @@ export class ConfigPanel { } } catch (error) { - console.error('加载模块文件夹文件树失败:', error); this.currentModuleFolderFileTree = []; } - if (this.isWebviewDisposed) { - console.log('⚠️ Webview 已被销毁,跳过完成通知'); - return; - } + if (this.isWebviewDisposed) return; try { this.panel.webview.postMessage({ @@ -1862,9 +1704,7 @@ export class ConfigPanel { }); this.updateWebview(); - } catch (error) { - console.log('⚠️ 无法发送完成消息,Webview 可能已被销毁'); - } + } catch (error) {} } private async openConfigFileInVSCode(configId: string): Promise { @@ -1940,40 +1780,6 @@ export class ConfigPanel { } } - // [删除] 此方法已被上面的 renameModuleFolder 替换 - // private async renameModuleFolder(folderId: string, newName: string): Promise { - // const folder = this.projectService.getModuleFolder(folderId); - // if (!folder) { - // vscode.window.showErrorMessage('未找到模块文件夹'); - // return; - // } - - // const oldName = folder.localPath.split('/').pop(); - // if (!oldName) return; - - // const fullPath = this.projectService.getModuleFolderFullPath(folder); - // if (!fullPath) return; - - // const newFullPath = path.join(path.dirname(fullPath), newName); - - // try { - // const fs = require('fs'); - // await fs.promises.rename(fullPath, newFullPath); - - // this.projectService.renameModuleFolder(folderId, newName); - // await this.saveCurrentProjectData(); - - // vscode.window.showInformationMessage(`已重命名文件夹: ${oldName} → ${newName}`); - // this.updateWebview(); - // } catch (error) { - // vscode.window.showErrorMessage('重命名失败: ' + error); - // } - // } - - // ============================================= - // 项目路径选择方法 - // ============================================= - private async openExistingProject(): Promise { try { const result = await vscode.window.showOpenDialog({ @@ -2007,13 +1813,13 @@ export class ConfigPanel { if (pathInput) { try { const dirUri = vscode.Uri.file(pathInput); - await vscode.workspace.fs.createDirectory(dirUri); // 自动创建目录 - this.projectService.setProjectPath(projectId, pathInput); // 保存路径 + await vscode.workspace.fs.createDirectory(dirUri); + this.projectService.setProjectPath(projectId, pathInput); vscode.window.showInformationMessage(`项目存储位置已创建: ${pathInput}`); await this.saveCurrentProjectData(); return pathInput; } catch (error) { - vscode.window.showErrorMessage(`创建目录失败: ${error}`); + vscode.window.showErrorMessage(`创建目录失败: ${error}`); return null; } } @@ -2024,78 +1830,6 @@ export class ConfigPanel { } } - - private async selectExistingProjectPath(projectId: string, projectName: string): Promise { - const result = await vscode.window.showOpenDialog({ - canSelectFiles: false, - canSelectFolders: true, - canSelectMany: false, - openLabel: `选择 ${projectName} 的存储位置`, - title: `为项目 "${projectName}" 选择存储文件夹` - }); - - if (result && result.length > 0) { - const selectedPath = result[0].fsPath; - - const hasExistingData = await StorageService.checkProjectPathHasData(selectedPath); - if (hasExistingData) { - const loadChoice = await vscode.window.showWarningMessage( - `在路径 ${selectedPath} 中检测到现有项目数据,是否加载?`, - { modal: true }, - '是,加载现有数据', - '否,创建新项目' - ); - - if (loadChoice === '是,加载现有数据') { - const success = await this.loadProjectData(selectedPath); - if (success) { - // loadProjectData 里已经设置好了 currentProjectId 和 projectPath - return selectedPath; - } - } - // 如果选择“否,创建新项目”,就往下走,覆盖旧数据 - } - - // 没有旧数据,或者选择了“创建新项目”,把当前 projectId 绑定到这个路径 - this.projectService.setProjectPath(projectId, selectedPath); - vscode.window.showInformationMessage(`项目存储位置已设置: ${selectedPath}`); - await this.saveCurrentProjectData(); - return selectedPath; - } - - return null; - } - - private async createNewProjectPath(projectId: string, projectName: string): Promise { - const pathInput = await vscode.window.showInputBox({ - prompt: '请输入项目存储路径(绝对路径)', - placeHolder: `/path/to/your/project/${projectName}`, - validateInput: (value) => { - if (!value) { - return '路径不能为空'; - } - return null; - } - }); - - if (pathInput) { - try { - const dirUri = vscode.Uri.file(pathInput); - await vscode.workspace.fs.createDirectory(dirUri); - - this.projectService.setProjectPath(projectId, pathInput); - vscode.window.showInformationMessage(`项目存储位置已创建: ${pathInput}`); - await this.saveCurrentProjectData(); - return pathInput; - } catch (error) { - vscode.window.showErrorMessage(`创建目录失败: ${error}`); - return null; - } - } - - return null; - } - private async loadProjectData(projectPath: string): Promise { try { const projectId = await this.projectService.loadProjectData(projectPath); @@ -2114,38 +1848,20 @@ export class ConfigPanel { } } - // ============================================= - // 数据持久化 - // ============================================= - private async saveCurrentProjectData(): Promise { if (!this.currentProjectId) { - console.warn('未找到当前项目,数据将不会保存'); return; } await this.projectService.saveCurrentProjectData(this.currentProjectId); } - // ============================================= - // Webview 更新方法 - // ============================================= - - // ============================================= - // Webview 更新方法 - // ============================================= - private updateWebview() { - if (this.isWebviewDisposed) { - console.log('⚠️ Webview 已被销毁,跳过更新'); - return; - } + if (this.isWebviewDisposed) return; try { this.panel.webview.html = this.getWebviewContent(); - } catch (error) { - console.error('更新 Webview 失败:', error); - } + } catch (error) {} } private getWebviewContent(): string { @@ -2165,7 +1881,6 @@ export class ConfigPanel { const currentAircraft = this.projectService.getAircraftsByProject(this.currentProjectId) .find(a => a.id === this.currentAircraftId); - // ✅ 只在 UI 层隐藏名为 .git 的容器 const projectContainers = this.projectService .getContainersByAircraft(this.currentAircraftId) .filter(c => c.name !== '.git'); diff --git a/src/panels/services/ProjectService.ts b/src/panels/services/ProjectService.ts index ad3dea0..5b776d8 100755 --- a/src/panels/services/ProjectService.ts +++ b/src/panels/services/ProjectService.ts @@ -34,13 +34,12 @@ export class ProjectService { * 文件名/文件夹名净化:保留大小写,允许中文、字母、数字、-、_、. */ public sanitizeFileName(name: string): string { - let fileName = name.trim(); // 移除 .toLowerCase() 以保留大小写 + let fileName = name.trim(); // 1. 替换所有空格为下划线 fileName = fileName.replace(/\s+/g, '_'); // 2. 移除特殊字符 - // 在正则中增加了 A-Z 以及 \. (注意:\u4e00-\u9fa5 匹配中文) fileName = fileName.replace(/[^\u4e00-\u9fa5a-zA-Z0-9_\-\.]/g, ''); // 3. 确保不为空 @@ -50,6 +49,39 @@ export class ProjectService { return fileName; } + // =============== 查重工具方法 (新增) =============== + + /** 检查项目名是否重复 */ + isProjectNameExists(name: string): boolean { + return this.projects.some(p => p.name === name); + } + + /** 检查指定项目下的飞行器名是否重复 */ + isAircraftNameExists(projectId: string, name: string): boolean { + return this.aircrafts.some(a => a.projectId === projectId && a.name === name); + } + + /** 检查指定飞行器下的容器名是否重复 */ + isContainerNameExists(aircraftId: string, name: string): boolean { + return this.containers.some(c => c.aircraftId === aircraftId && c.name === name); + } + + /** 检查指定容器下的配置名或文件名是否重复 */ + isConfigOrFolderConflict(containerId: string, name: string, fileName: string, excludeId?: string): { nameConflict: boolean, fileConflict: boolean } { + const configs = this.getConfigsByContainer(containerId); + const folders = this.getModuleFoldersByContainer(containerId); + + // 检查显示名称冲突 (排除自身) + const nameConflict = configs.some(c => c.id !== excludeId && c.name === name) || + folders.some(f => f.id !== excludeId && f.name === name); + + // 检查磁盘文件名/文件夹名冲突 (排除自身) + const fileConflict = configs.some(c => c.id !== excludeId && c.fileName === fileName) || + folders.some(f => f.id !== excludeId && f.localPath.split('/').pop() === fileName); + + return { nameConflict, fileConflict }; + } + // =============== 项目相关方法 =============== getProjects(): Project[] { @@ -91,14 +123,12 @@ export class ProjectService { const project = this.projects.find(p => p.id === projectId); if (!project) return false; - // 先把要删的 id 都算出来,再统一过滤 const relatedAircrafts = this.aircrafts.filter(a => a.projectId === projectId); const aircraftIds = relatedAircrafts.map(a => a.id); const relatedContainers = this.containers.filter(c => aircraftIds.includes(c.aircraftId)); const containerIds = relatedContainers.map(c => c.id); - // 真正删除数据 this.projects = this.projects.filter(p => p.id !== projectId); this.aircrafts = this.aircrafts.filter(a => a.projectId !== projectId); this.containers = this.containers.filter(c => !aircraftIds.includes(c.aircraftId)); @@ -129,7 +159,6 @@ export class ProjectService { }; this.aircrafts.push(newAircraft); - // 创建飞行器目录 await this.createAircraftDirectory(newAircraft); return newId; } @@ -147,27 +176,19 @@ export class ProjectService { const aircraft = this.aircrafts.find(a => a.id === aircraftId); if (!aircraft) return false; - // ⚠️ 先算出要删的 containerIds const relatedContainers = this.containers.filter(c => c.aircraftId === aircraftId); const containerIds = relatedContainers.map(c => c.id); - // 删除飞机自身和容器 this.aircrafts = this.aircrafts.filter(a => a.id !== aircraftId); this.containers = this.containers.filter(c => c.aircraftId !== aircraftId); - // 再删关联的 config 和 moduleFolder this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId)); this.moduleFolders = this.moduleFolders.filter(folder => !containerIds.includes(folder.containerId)); return true; } - /** - * 从已存在的磁盘目录导入飞行器 - * 不会创建/删除任何文件,只在内存中补充 Aircraft / Container / ModuleFolder 数据 - */ async importAircraftFromExistingFolder(projectId: string, aircraftName: string): Promise { - // 已存在同名飞行器直接返回 const existed = this.getAircraftsByProject(projectId).find(a => a.name === aircraftName); if (existed) { return existed.id; @@ -188,11 +209,9 @@ export class ProjectService { const aircraftDir = path.join(projectPath, aircraftName); if (!fs.existsSync(aircraftDir)) { - // 目录不存在就不再解析子目录 return newId; } - // 每个子目录视为一个容器(排除 .git) const entries = await fs.promises.readdir(aircraftDir, { withFileTypes: true }); for (const entry of entries) { if (!entry.isDirectory()) continue; @@ -206,12 +225,6 @@ export class ProjectService { // =============== 容器相关方法 =============== - /** - * ⚠️ 这里不再做 .git 过滤: - * - 我们只会通过 createContainer / importContainerFromExistingFolder 创建容器 - * - importContainerFromExistingFolder 内部已经排除了 .git - * 所以不会出现名字叫 ".git" 的容器 - */ getContainersByAircraft(aircraftId: string): Container[] { return this.containers.filter(c => c.aircraftId === aircraftId); } @@ -230,7 +243,6 @@ export class ProjectService { this.containers.push(newContainer); await this.createContainerDirectory(newContainer); - // UI 手动创建的容器,仍然保留“默认两个配置”的行为 await this.createDefaultConfigs(newContainer); return newId; @@ -256,15 +268,6 @@ export class ProjectService { return true; } - /** - * 从已存在的磁盘目录导入容器 - * - * ✅ 你的最新需求: - * - 不创建“默认两个配置” - * - 自动扫描容器目录下的『子文件夹』 - * - 每个子文件夹创建一个 ModuleFolder(type: 'local') - * - 排除 `.git` 子文件夹 - */ async importContainerFromExistingFolder(aircraftId: string, containerName: string): Promise { if (containerName === '.git') { throw new Error('不能将 .git 导入为容器'); @@ -283,18 +286,11 @@ export class ProjectService { }; this.containers.push(container); - // 🚩 关键逻辑:扫描容器目录下的子文件夹 -> 创建 ModuleFolder await this.scanContainerModuleFolders(container); - // 不再创建默认两个配置(不调用 createDefaultConfigs) - // 也不创建目录(目录是 Git 克隆出来的,本来就存在) - return newId; } - /** - * 扫描容器目录中的子文件夹(不含 .git),将其作为本地模块文件夹记录 - */ private async scanContainerModuleFolders(container: Container): Promise { try { const aircraft = this.aircrafts.find(a => a.id === container.aircraftId); @@ -343,11 +339,8 @@ export class ProjectService { return this.configs.find(c => c.id === configId); } -// src/panels/services/ProjectService.ts - async createConfig(name: string, containerId: string): Promise { const newId = this.generateUniqueId('cfg', this.configs); - // 使用净化后的文件名 const newFileName = this.sanitizeFileName(name); const newConfig: Config = { @@ -358,16 +351,12 @@ export class ProjectService { }; this.configs.push(newConfig); - // 1. 首先确保父级容器目录存在 await this.ensureContainerDirectoryExists(containerId); - // 2. 获取文件的完整磁盘路径 const filePath = this.getConfigFilePath(newId); if (filePath) { try { const fileUri = vscode.Uri.file(filePath); - // 3. 真实创建文件:写入一个空的 Uint8Array 即可创建一个空文件 - // 如果你希望有默认内容,可以在这里自定义 TextEncoder().encode("...") await vscode.workspace.fs.writeFile(fileUri, new Uint8Array()); console.log(`✅ 磁盘文件已真实创建: ${filePath}`); } catch (error) { @@ -378,9 +367,6 @@ export class ProjectService { return newId; } - /** - * [修改] 同时更新配置显示名称和文件名称 - */ updateConfigName(configId: string, newName: string, newFileName: string): boolean { const config = this.configs.find(c => c.id === configId); if (config) { @@ -399,19 +385,14 @@ export class ProjectService { return true; } - /** - * [新增] 重命名磁盘上的配置文件 - */ async renameConfigFileOnDisk(configId: string, newFileName: string): Promise { const config = this.configs.find(c => c.id === configId); if (!config) return false; const oldFilePath = this.getConfigFilePath(configId); - // 为了计算新路径,临时使用新的文件名 const oldFileName = config.fileName; config.fileName = newFileName; const newFilePath = this.getConfigFilePath(configId); - // 恢复旧的文件名,因为 ProjectService.updateConfigName 会在 ConfigPanel 中调用 config.fileName = oldFileName; if (!oldFilePath || !newFilePath) { @@ -467,11 +448,8 @@ export class ProjectService { return true; } - // =============== 文件系统操作 (新增/修改) =============== + // =============== 文件系统操作 =============== - /** - * 获取项目目录重命名所需的旧路径和新路径(新增) - */ getProjectOldAndNewPaths(projectId: string, newName: string): { oldPath: string, newPath: string } | null { const project = this.projects.find(p => p.id === projectId); const oldPath = this.projectPaths.get(projectId); @@ -479,15 +457,11 @@ export class ProjectService { if (!project || !oldPath) return null; const parentDir = path.dirname(oldPath); - // 新路径使用新的项目名称作为文件夹名 const newPath = path.join(parentDir, newName); return { oldPath, newPath }; } - /** - * 获取飞行器目录的完整路径 - */ getAircraftDirectoryPath(aircraftId: string): string | null { const aircraft = this.getAircraft(aircraftId); if (!aircraft) return null; @@ -498,10 +472,6 @@ export class ProjectService { return path.join(projectPath, aircraft.name); } - /** - * 获取飞行器目录重命名所需的旧路径和新路径(新增) - * 注意:oldPath使用内存中当前的名称,newPath使用将要更新的新名称 - */ getAircraftOldAndNewPaths(aircraftId: string, newName: string): { oldPath: string, newPath: string } | null { const aircraft = this.aircrafts.find(a => a.id === aircraftId); if (!aircraft) return null; @@ -516,9 +486,6 @@ export class ProjectService { } - /** - * 获取容器目录的完整路径 - */ getContainerDirectoryPath(containerId: string): string | null { const container = this.getContainer(containerId); if (!container) return null; @@ -532,10 +499,6 @@ export class ProjectService { return path.join(projectPath, aircraft.name, container.name); } - /** - * 获取容器目录重命名所需的旧路径和新路径(新增) - * 注意:oldPath使用内存中当前的名称,newPath使用将要更新的新名称 - */ getContainerOldAndNewPaths(containerId: string, newName: string): { oldPath: string, newPath: string } | null { const container = this.containers.find(c => c.id === containerId); if (!container) return null; @@ -554,9 +517,6 @@ export class ProjectService { } - /** - * 递归删除目录 - */ async deleteDirectoryFromDisk(directoryPath: string): Promise { if (!directoryPath) return false; @@ -569,13 +529,10 @@ export class ProjectService { return false; } catch (error) { console.error(`删除目录失败: ${error}`); - throw error; // Re-throw to be handled by ConfigPanel + throw error; } } - /** - * 重命名磁盘上的目录(新增) - */ async renameDirectoryOnDisk(oldPath: string, newPath: string): Promise { if (!oldPath || !newPath) return false; @@ -589,7 +546,7 @@ export class ProjectService { return false; } catch (error) { console.error(`重命名目录失败: ${error}`); - throw error; // Re-throw to be handled by ConfigPanel + throw error; } } @@ -659,10 +616,6 @@ export class ProjectService { } } - /** - * 仅用于「新建容器」时的默认两个配置 - * (导入容器时不会调用) - */ private async createDefaultConfigs(container: Container): Promise { this.configs.push({ id: this.generateUniqueId('cfg', this.configs), @@ -709,21 +662,18 @@ export class ProjectService { return null; } - // 先根据旧的 projectId 算出要清理的 aircraft / container / config / moduleFolder const existingAircrafts = this.aircrafts.filter(a => a.projectId === projectId); const aircraftIds = existingAircrafts.map(a => a.id); const existingContainers = this.containers.filter(c => aircraftIds.includes(c.aircraftId)); const containerIds = existingContainers.map(c => c.id); - // 清理旧数据(同一个 projectId 的) this.projects = this.projects.filter(p => p.id !== projectId); this.aircrafts = this.aircrafts.filter(a => a.projectId !== projectId); this.containers = this.containers.filter(c => !aircraftIds.includes(c.aircraftId)); this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId)); this.moduleFolders = this.moduleFolders.filter(folder => !containerIds.includes(folder.containerId)); - // ⭐ 载入新数据时顺便过滤掉名字为 ".git" 的容器(避免历史数据带进来) const cleanedContainers = data.containers.filter(c => c.name !== '.git'); this.projects.push(...data.projects); @@ -778,7 +728,6 @@ export class ProjectService { const pathParts = folder.localPath.split('/').filter(part => part); if (pathParts.length < 4) return null; - // 路径的最后一部分是文件夹的名称 const folderName = pathParts[pathParts.length - 1]; return path.join(projectPath, aircraft.name, container.name, folderName); }