From 53e930715733bfacc08c7ca85ace248356cce7df Mon Sep 17 00:00:00 2001 From: xubing <18656218039@163.com> Date: Tue, 18 Nov 2025 14:03:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=A0=E4=BA=86=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- out/panels/ConfigPanel.js | 189 ++++++++++++- out/panels/ConfigPanel.js.map | 2 +- out/panels/views/ContainerConfigView.js | 42 ++- out/panels/views/ContainerConfigView.js.map | 2 +- out/panels/views/ProjectListView.js | 11 +- out/panels/views/ProjectListView.js.map | 2 +- out/panels/views/ProjectManagementView.js | 256 ++++++++++++++++++ out/panels/views/ProjectManagementView.js.map | 1 + src/panels/ConfigPanel.ts | 206 +++++++++++++- src/panels/views/ContainerConfigView.ts | 42 ++- src/panels/views/ProjectListView.ts | 11 +- src/panels/views/ProjectManagementView.ts | 255 +++++++++++++++++ 12 files changed, 974 insertions(+), 45 deletions(-) create mode 100644 out/panels/views/ProjectManagementView.js create mode 100644 out/panels/views/ProjectManagementView.js.map create mode 100644 src/panels/views/ProjectManagementView.ts diff --git a/out/panels/ConfigPanel.js b/out/panels/ConfigPanel.js index 0680e22..7cc9796 100644 --- a/out/panels/ConfigPanel.js +++ b/out/panels/ConfigPanel.js @@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.ConfigPanel = void 0; // src/panels/ConfigPanel.ts const vscode = require("vscode"); +const ProjectManagementView_1 = require("./views/ProjectManagementView"); const ProjectListView_1 = require("./views/ProjectListView"); const AircraftConfigView_1 = require("./views/AircraftConfigView"); const ContainerConfigView_1 = require("./views/ContainerConfigView"); @@ -21,14 +22,14 @@ class ConfigPanel { ConfigPanel.currentPanel = new ConfigPanel(panel, extensionUri); } constructor(panel, extensionUri) { - this.currentView = 'projects'; + this.currentView = 'management'; this.currentProjectId = ''; this.currentAircraftId = ''; this.currentContainerId = ''; // 数据存储 this.projects = [ - { id: 'p1', name: '飞行器1' }, - { id: 'p2', name: '飞行器2' } + { id: 'p1', name: '项目1' }, + { id: 'p2', name: '项目2' } ]; this.aircrafts = [ { id: 'a1', name: '飞行器配置1', projectId: 'p1' }, @@ -45,9 +46,12 @@ class ConfigPanel { { id: 'cfg3', name: '配置1', fileName: 'docker-compose.yml', content: '# 配置1内容', containerId: 'c2' }, { id: 'cfg4', name: '配置1', fileName: 'config.yaml', content: '# 配置1内容', containerId: 'c3' } ]; + // 项目存储路径映射 + this.projectPaths = new Map(); this.panel = panel; this.extensionUri = extensionUri; // 初始化各个视图 + this.projectManagementView = new ProjectManagementView_1.ProjectManagementView(extensionUri); this.projectListView = new ProjectListView_1.ProjectListView(extensionUri); this.aircraftConfigView = new AircraftConfigView_1.AircraftConfigView(extensionUri); this.containerConfigView = new ContainerConfigView_1.ContainerConfigView(extensionUri); @@ -60,6 +64,20 @@ class ConfigPanel { setupMessageListener() { this.panel.webview.onDidReceiveMessage(async (data) => { switch (data.type) { + case 'configureProject': + const selectedPath = await this.selectProjectPath(data.projectId, data.projectName); + if (selectedPath) { + this.currentView = 'projects'; + this.currentProjectId = data.projectId; + this.updateWebview(); + } + break; + case 'openProject': + // 已配置的项目直接打开 + this.currentView = 'projects'; + this.currentProjectId = data.projectId; + this.updateWebview(); + break; case 'openAircraftConfig': this.currentView = 'aircrafts'; this.currentProjectId = data.projectId; @@ -75,6 +93,10 @@ class ConfigPanel { this.currentContainerId = data.containerId; this.updateWebview(); break; + case 'goBackToManagement': + this.currentView = 'management'; + this.updateWebview(); + break; case 'goBackToProjects': this.currentView = 'projects'; this.updateWebview(); @@ -98,11 +120,14 @@ class ConfigPanel { case 'updateConfigName': this.updateConfigName(data.configId, data.name); break; + case 'updateConfigFileName': + await this.updateConfigFileName(data.configId, data.fileName); + break; case 'createConfig': this.createConfig(data.name); break; case 'saveConfigFile': - this.saveConfigFile(data.configId, data.content); + await this.saveConfigFileToDisk(data.configId, data.content); break; case 'loadConfigFile': this.loadConfigFile(data.configId); @@ -113,12 +138,83 @@ class ConfigPanel { case 'deleteContainer': this.deleteContainer(data.containerId); break; - case 'deleteConfig': // 新增:删除配置文件的处理 + case 'deleteConfig': this.deleteConfig(data.configId); break; } }); } + // === 项目路径选择 === + async selectProjectPath(projectId, projectName) { + try { + // 提供两种方式:选择现有路径或输入新路径 + const choice = await vscode.window.showQuickPick([ + { + label: '$(folder) 选择现有文件夹', + description: '从文件系统中选择已存在的文件夹', + value: 'select' + }, + { + label: '$(new-folder) 创建新文件夹', + description: '输入新文件夹路径(将自动创建)', + value: 'create' + } + ], { + placeHolder: '选择项目存储方式' + }); + if (!choice) { + return null; + } + if (choice.value === 'select') { + // 选择现有路径 + 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; + this.projectPaths.set(projectId, selectedPath); + vscode.window.showInformationMessage(`项目存储位置已设置: ${selectedPath}`); + return selectedPath; + } + } + else { + // 创建新路径 + 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.projectPaths.set(projectId, pathInput); + vscode.window.showInformationMessage(`项目存储位置已创建: ${pathInput}`); + return pathInput; + } + catch (error) { + vscode.window.showErrorMessage(`创建目录失败: ${error}`); + return null; + } + } + } + return null; + } + catch (error) { + vscode.window.showErrorMessage(`选择存储路径时出错: ${error}`); + return null; + } + } // === 项目相关方法 === updateProjectName(projectId, newName) { const project = this.projects.find(p => p.id === projectId); @@ -157,6 +253,8 @@ class ConfigPanel { // 删除相关的配置 const containerIds = this.containers.filter(c => aircraftIds.includes(c.aircraftId)).map(c => c.id); this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId)); + // 删除项目路径映射 + this.projectPaths.delete(projectId); vscode.window.showInformationMessage(`删除项目: ${projectId}`); this.updateWebview(); } @@ -220,6 +318,15 @@ class ConfigPanel { this.updateWebview(); } } + async updateConfigFileName(configId, fileName) { + const config = this.configs.find(c => c.id === configId); + if (config) { + config.fileName = fileName; + vscode.window.showInformationMessage(`文件名更新: ${fileName}`); + this.updateWebview(); + } + } + // 创建配置文件 createConfig(name) { const newId = 'cfg' + (this.configs.length + 1); const newConfig = { @@ -233,7 +340,7 @@ class ConfigPanel { vscode.window.showInformationMessage(`新建配置: ${name}`); this.updateWebview(); } - // 新增:删除配置文件方法 + // 删除配置文件 deleteConfig(configId) { const config = this.configs.find(c => c.id === configId); if (config) { @@ -242,13 +349,62 @@ class ConfigPanel { this.updateWebview(); } } - saveConfigFile(configId, content) { - const config = this.configs.find(c => c.id === configId); - if (config) { - config.content = content; - vscode.window.showInformationMessage(`配置文件已保存: ${config.name}`); + // 保存配置文件到磁盘 + async saveConfigFileToDisk(configId, content) { + try { + const config = this.configs.find(c => c.id === configId); + if (!config) { + vscode.window.showErrorMessage('未找到配置文件'); + return; + } + const container = this.containers.find(c => c.id === config.containerId); + if (!container) { + vscode.window.showErrorMessage('未找到容器'); + return; + } + const aircraft = this.aircrafts.find(a => a.id === container.aircraftId); + if (!aircraft) { + vscode.window.showErrorMessage('未找到飞行器'); + return; + } + const project = this.projects.find(p => p.id === aircraft.projectId); + if (!project) { + vscode.window.showErrorMessage('未找到项目'); + return; + } + const projectPath = this.projectPaths.get(aircraft.projectId); + if (!projectPath) { + vscode.window.showErrorMessage('未设置项目存储路径,请先配置项目'); + return; + } + // 构建文件路径:项目路径/飞行器名/容器名/文件名 + const aircraftDir = vscode.Uri.joinPath(vscode.Uri.file(projectPath), aircraft.name); + const containerDir = vscode.Uri.joinPath(aircraftDir, container.name); + const fileUri = vscode.Uri.joinPath(containerDir, config.fileName); + // 确保飞行器目录存在 + try { + await vscode.workspace.fs.createDirectory(aircraftDir); + } + catch (error) { + // 目录可能已存在,忽略错误 + } + // 确保容器目录存在 + try { + await vscode.workspace.fs.createDirectory(containerDir); + } + catch (error) { + // 目录可能已存在,忽略错误 + } + // 写入文件 + const uint8Array = new TextEncoder().encode(content); + await vscode.workspace.fs.writeFile(fileUri, uint8Array); + vscode.window.showInformationMessage(`配置文件已保存: ${fileUri.fsPath}`); + } + catch (error) { + vscode.window.showErrorMessage(`保存文件时出错: ${error}`); } } + // 加载配置文件 loadConfigFile(configId) { const config = this.configs.find(c => c.id === configId); if (config) { @@ -264,11 +420,17 @@ class ConfigPanel { }); } } + // 更新视图 updateWebview() { this.panel.webview.html = this.getWebviewContent(); } getWebviewContent() { switch (this.currentView) { + case 'management': + return this.projectManagementView.render({ + projects: this.projects, + projectPaths: this.projectPaths + }); case 'projects': return this.projectListView.render({ projects: this.projects @@ -292,8 +454,9 @@ class ConfigPanel { configs: containerConfigs }); default: - return this.projectListView.render({ - projects: this.projects + return this.projectManagementView.render({ + projects: this.projects, + projectPaths: this.projectPaths }); } } diff --git a/out/panels/ConfigPanel.js.map b/out/panels/ConfigPanel.js.map index d8d539c..ee4da3e 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/views/ContainerConfigView.js b/out/panels/views/ContainerConfigView.js index 36c8686..e0e0e79 100644 --- a/out/panels/views/ContainerConfigView.js +++ b/out/panels/views/ContainerConfigView.js @@ -7,14 +7,14 @@ class ContainerConfigView extends BaseView_1.BaseView { render(data) { const container = data?.container; const configs = data?.configs || []; - // 生成配置列表的 HTML - 添加删除按钮 + // 生成配置列表的 HTML - 添加文件名编辑功能 const configsHtml = configs.map((config) => ` 🔧 ${config.name} - ${config.fileName} + 📄 ${config.fileName} @@ -38,9 +38,9 @@ class ContainerConfigView extends BaseView_1.BaseView { - + - + @@ -58,7 +58,7 @@ class ContainerConfigView extends BaseView_1.BaseView {

📝 编辑配置文件

- +
@@ -84,6 +84,23 @@ class ContainerConfigView extends BaseView_1.BaseView { ); } + function editFileName(configId, currentFileName) { + showPromptDialog( + '修改文件名', + '请输入新的文件名(包含扩展名):', + currentFileName, + function(newFileName) { + if (newFileName && newFileName !== currentFileName) { + vscode.postMessage({ + type: 'updateConfigFileName', + configId: configId, + fileName: newFileName + }); + } + } + ); + } + function openConfigFile(configId) { currentConfigId = configId; document.getElementById('configEditor').style.display = 'block'; @@ -110,7 +127,6 @@ class ContainerConfigView extends BaseView_1.BaseView { ); } - // 新增:删除配置函数 function deleteConfig(configId) { showConfirmDialog( '确认删除', @@ -232,6 +248,20 @@ class ContainerConfigView extends BaseView_1.BaseView { document.getElementById('configContent').value = message.content; } }); + + // 修改:点击文件名时打开编辑器 + document.addEventListener('click', function(event) { + if (event.target.classList.contains('editable') && event.target.textContent.includes('📄')) { + const row = event.target.closest('tr'); + if (row) { + const configNameCell = row.querySelector('td:first-child .editable'); + if (configNameCell) { + const configId = configNameCell.onclick.toString().match(/'([^']+)'/)[1]; + openConfigFile(configId); + } + } + } + }); `; diff --git a/out/panels/views/ContainerConfigView.js.map b/out/panels/views/ContainerConfigView.js.map index 03892c0..b34ea0b 100644 --- a/out/panels/views/ContainerConfigView.js.map +++ b/out/panels/views/ContainerConfigView.js.map @@ -1 +1 @@ -{"version":3,"file":"ContainerConfigView.js","sourceRoot":"","sources":["../../../src/panels/views/ContainerConfigView.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAC1C,yCAAsC;AAGtC,MAAa,mBAAoB,SAAQ,mBAAQ;IAC7C,MAAM,CAAC,IAA0B;QAC7B,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;QAEpC,wBAAwB;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAsB,EAAE,EAAE,CAAC;;;sEAGE,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,IAAI;;;uEAG/C,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC,QAAQ;;;wEAG9B,MAAM,CAAC,EAAE;;;SAGxE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;gFAI0D,SAAS,EAAE,IAAI,IAAI,MAAM;;;;;;;;;;;;;cAa3F,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8LjB,CAAC;IACL,CAAC;CACJ;AA3OD,kDA2OC"} \ No newline at end of file +{"version":3,"file":"ContainerConfigView.js","sourceRoot":"","sources":["../../../src/panels/views/ContainerConfigView.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAC1C,yCAAsC;AAGtC,MAAa,mBAAoB,SAAQ,mBAAQ;IAC7C,MAAM,CAAC,IAA0B;QAC7B,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;QAEpC,2BAA2B;QAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAsB,EAAE,EAAE,CAAC;;;sEAGE,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,IAAI;;;oEAGlD,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC,QAAQ,UAAU,MAAM,CAAC,QAAQ;;;wEAGpD,MAAM,CAAC,EAAE;;;SAGxE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;gFAI0D,SAAS,EAAE,IAAI,IAAI,MAAM;;;;;;;;;;;;;cAa3F,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4NjB,CAAC;IACL,CAAC;CACJ;AAzQD,kDAyQC"} \ No newline at end of file diff --git a/out/panels/views/ProjectListView.js b/out/panels/views/ProjectListView.js index 06a3e6d..e026734 100644 --- a/out/panels/views/ProjectListView.js +++ b/out/panels/views/ProjectListView.js @@ -25,11 +25,14 @@ class ProjectListView extends BaseView_1.BaseView { - 项目管理 + 飞行器项目管理 ${this.getStyles()} -

🚀 飞行器项目管理

+
+

🚀 飞行器项目管理

+ +
配置配置 文件操作操作
@@ -107,6 +110,10 @@ class ProjectListView extends BaseView_1.BaseView { ); } + function goBackToManagement() { + vscode.postMessage({ type: 'goBackToManagement' }); + } + // 对话框函数(与之前相同) function showConfirmDialog(title, message, onConfirm, onCancel) { const overlay = document.createElement('div'); diff --git a/out/panels/views/ProjectListView.js.map b/out/panels/views/ProjectListView.js.map index 25576fb..9f9050a 100644 --- a/out/panels/views/ProjectListView.js.map +++ b/out/panels/views/ProjectListView.js.map @@ -1 +1 @@ -{"version":3,"file":"ProjectListView.js","sourceRoot":"","sources":["../../../src/panels/views/ProjectListView.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,yCAAsC;AAGtC,MAAa,eAAgB,SAAQ,mBAAQ;IACzC,MAAM,CAAC,IAAsB;QACzB,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;QAEtC,eAAe;QACf,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAwB,EAAE,EAAE,CAAC;;;uEAGD,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,IAAI;;;2EAG/C,OAAO,CAAC,EAAE;;;yEAGZ,OAAO,CAAC,EAAE;;;SAG1E,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;;;;;;;;;;cAaR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqJlB,CAAC;IACL,CAAC;CACJ;AA7LD,0CA6LC"} \ No newline at end of file +{"version":3,"file":"ProjectListView.js","sourceRoot":"","sources":["../../../src/panels/views/ProjectListView.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,yCAAsC;AAGtC,MAAa,eAAgB,SAAQ,mBAAQ;IACzC,MAAM,CAAC,IAAsB;QACzB,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;QAEtC,eAAe;QACf,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAwB,EAAE,EAAE,CAAC;;;uEAGD,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,IAAI;;;2EAG/C,OAAO,CAAC,EAAE;;;yEAGZ,OAAO,CAAC,EAAE;;;SAG1E,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;;;;;;;;;;;;;cAgBR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyJlB,CAAC;IACL,CAAC;CACJ;AApMD,0CAoMC"} \ No newline at end of file diff --git a/out/panels/views/ProjectManagementView.js b/out/panels/views/ProjectManagementView.js new file mode 100644 index 0000000..25831b3 --- /dev/null +++ b/out/panels/views/ProjectManagementView.js @@ -0,0 +1,256 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProjectManagementView = void 0; +// src/panels/views/ProjectManagementView.ts +const BaseView_1 = require("./BaseView"); +class ProjectManagementView extends BaseView_1.BaseView { + render(data) { + const projects = data?.projects || []; + const projectPaths = data?.projectPaths || new Map(); + const projectsHtml = projects.map((project) => { + const isConfigured = projectPaths.has(project.id); + const statusIcon = isConfigured ? '✅' : '⚙️'; + const statusText = isConfigured ? '已配置' : '待配置'; + return ` + + + + + + `; + }).join(''); + return ` + + + + + 数字卫星构建平台 + ${this.getStyles()} + + + +

🛰️数字卫星构建平台

+
+ ${statusIcon} ${project.name} +
+ ${statusText}${isConfigured ? ` - ${projectPaths.get(project.id)}` : ''} +
+
+ + ${isConfigured ? '打开' : '配置'} + + + +
+ + + + + + + + + ${projectsHtml} + + + + +
项目配置操作
+ +
+ + + +`; + } +} +exports.ProjectManagementView = ProjectManagementView; +//# sourceMappingURL=ProjectManagementView.js.map \ No newline at end of file diff --git a/out/panels/views/ProjectManagementView.js.map b/out/panels/views/ProjectManagementView.js.map new file mode 100644 index 0000000..0a8407b --- /dev/null +++ b/out/panels/views/ProjectManagementView.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ProjectManagementView.js","sourceRoot":"","sources":["../../../src/panels/views/ProjectManagementView.ts"],"names":[],"mappings":";;;AAAA,4CAA4C;AAC5C,yCAAsC;AAGtC,MAAa,qBAAsB,SAAQ,mBAAQ;IAC/C,MAAM,CAAC,IAA0E;QAC7E,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;QAErD,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAwB,EAAE,EAAE;YAC3D,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7C,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAEhD,OAAO;;;kEAG+C,OAAO,CAAC,EAAE,KAAK,UAAU,IAAI,OAAO,CAAC,IAAI;;0BAEjF,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;;yEAItB,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC,IAAI,MAAM,YAAY;0BAC9F,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;;;;yEAIqB,OAAO,CAAC,EAAE;;;SAG1E,CAAA;QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEb,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuCR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8KlB,CAAC;IACL,CAAC;CACJ;AA1PD,sDA0PC"} \ No newline at end of file diff --git a/src/panels/ConfigPanel.ts b/src/panels/ConfigPanel.ts index d9f00bd..c1fd61b 100644 --- a/src/panels/ConfigPanel.ts +++ b/src/panels/ConfigPanel.ts @@ -1,5 +1,6 @@ // src/panels/ConfigPanel.ts import * as vscode from 'vscode'; +import { ProjectManagementView } from './views/ProjectManagementView'; import { ProjectListView } from './views/ProjectListView'; import { AircraftConfigView } from './views/AircraftConfigView'; import { ContainerConfigView } from './views/ContainerConfigView'; @@ -35,15 +36,15 @@ export class ConfigPanel { private readonly panel: vscode.WebviewPanel; private readonly extensionUri: vscode.Uri; - private currentView: 'projects' | 'aircrafts' | 'container' = 'projects'; + private currentView: 'management' | 'projects' | 'aircrafts' | 'container' = 'management'; private currentProjectId: string = ''; private currentAircraftId: string = ''; private currentContainerId: string = ''; // 数据存储 private projects: Project[] = [ - { id: 'p1', name: '飞行器1' }, - { id: 'p2', name: '飞行器2' } + { id: 'p1', name: '项目1' }, + { id: 'p2', name: '项目2' } ]; private aircrafts: Aircraft[] = [ @@ -64,7 +65,11 @@ export class ConfigPanel { { id: 'cfg4', name: '配置1', fileName: 'config.yaml', content: '# 配置1内容', containerId: 'c3' } ]; + // 项目存储路径映射 + private projectPaths: Map = new Map(); + // 视图实例 + private readonly projectManagementView: ProjectManagementView; private readonly projectListView: ProjectListView; private readonly aircraftConfigView: AircraftConfigView; private readonly containerConfigView: ContainerConfigView; @@ -96,6 +101,7 @@ export class ConfigPanel { this.extensionUri = extensionUri; // 初始化各个视图 + this.projectManagementView = new ProjectManagementView(extensionUri); this.projectListView = new ProjectListView(extensionUri); this.aircraftConfigView = new AircraftConfigView(extensionUri); this.containerConfigView = new ContainerConfigView(extensionUri); @@ -111,6 +117,22 @@ export class ConfigPanel { private setupMessageListener() { this.panel.webview.onDidReceiveMessage(async (data) => { switch (data.type) { + case 'configureProject': + const selectedPath = await this.selectProjectPath(data.projectId, data.projectName); + if (selectedPath) { + this.currentView = 'projects'; + this.currentProjectId = data.projectId; + this.updateWebview(); + } + break; + + case 'openProject': + // 已配置的项目直接打开 + this.currentView = 'projects'; + this.currentProjectId = data.projectId; + this.updateWebview(); + break; + case 'openAircraftConfig': this.currentView = 'aircrafts'; this.currentProjectId = data.projectId; @@ -128,6 +150,11 @@ export class ConfigPanel { this.updateWebview(); break; + case 'goBackToManagement': + this.currentView = 'management'; + this.updateWebview(); + break; + case 'goBackToProjects': this.currentView = 'projects'; this.updateWebview(); @@ -158,12 +185,16 @@ export class ConfigPanel { this.updateConfigName(data.configId, data.name); break; + case 'updateConfigFileName': + await this.updateConfigFileName(data.configId, data.fileName); + break; + case 'createConfig': this.createConfig(data.name); break; case 'saveConfigFile': - this.saveConfigFile(data.configId, data.content); + await this.saveConfigFileToDisk(data.configId, data.content); break; case 'loadConfigFile': @@ -178,13 +209,91 @@ export class ConfigPanel { this.deleteContainer(data.containerId); break; - case 'deleteConfig': // 新增:删除配置文件的处理 + case 'deleteConfig': this.deleteConfig(data.configId); break; } }); } + // === 项目路径选择 === + private async selectProjectPath(projectId: string, projectName: string): Promise { + try { + // 提供两种方式:选择现有路径或输入新路径 + const choice = await vscode.window.showQuickPick( + [ + { + label: '$(folder) 选择现有文件夹', + description: '从文件系统中选择已存在的文件夹', + value: 'select' + }, + { + label: '$(new-folder) 创建新文件夹', + description: '输入新文件夹路径(将自动创建)', + value: 'create' + } + ], + { + placeHolder: '选择项目存储方式' + } + ); + + if (!choice) { + return null; + } + + if (choice.value === 'select') { + // 选择现有路径 + 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; + this.projectPaths.set(projectId, selectedPath); + vscode.window.showInformationMessage(`项目存储位置已设置: ${selectedPath}`); + return selectedPath; + } + } else { + // 创建新路径 + 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.projectPaths.set(projectId, pathInput); + vscode.window.showInformationMessage(`项目存储位置已创建: ${pathInput}`); + return pathInput; + } catch (error) { + vscode.window.showErrorMessage(`创建目录失败: ${error}`); + return null; + } + } + } + + return null; + } catch (error) { + vscode.window.showErrorMessage(`选择存储路径时出错: ${error}`); + return null; + } + } + // === 项目相关方法 === private updateProjectName(projectId: string, newName: string) { const project = this.projects.find(p => p.id === projectId); @@ -231,6 +340,9 @@ export class ConfigPanel { const containerIds = this.containers.filter(c => aircraftIds.includes(c.aircraftId)).map(c => c.id); this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId)); + // 删除项目路径映射 + this.projectPaths.delete(projectId); + vscode.window.showInformationMessage(`删除项目: ${projectId}`); this.updateWebview(); } @@ -308,6 +420,15 @@ export class ConfigPanel { } } + private async updateConfigFileName(configId: string, fileName: string): Promise { + const config = this.configs.find(c => c.id === configId); + if (config) { + config.fileName = fileName; + vscode.window.showInformationMessage(`文件名更新: ${fileName}`); + this.updateWebview(); + } + } + // 创建配置文件 private createConfig(name: string) { const newId = 'cfg' + (this.configs.length + 1); @@ -334,12 +455,65 @@ export class ConfigPanel { } } - // 保存配置文件 - private saveConfigFile(configId: string, content: string) { - const config = this.configs.find(c => c.id === configId); - if (config) { - config.content = content; - vscode.window.showInformationMessage(`配置文件已保存: ${config.name}`); + // 保存配置文件到磁盘 + private async saveConfigFileToDisk(configId: string, content: string): Promise { + try { + const config = this.configs.find(c => c.id === configId); + if (!config) { + vscode.window.showErrorMessage('未找到配置文件'); + return; + } + + const container = this.containers.find(c => c.id === config.containerId); + if (!container) { + vscode.window.showErrorMessage('未找到容器'); + return; + } + + const aircraft = this.aircrafts.find(a => a.id === container.aircraftId); + if (!aircraft) { + vscode.window.showErrorMessage('未找到飞行器'); + return; + } + + const project = this.projects.find(p => p.id === aircraft.projectId); + if (!project) { + vscode.window.showErrorMessage('未找到项目'); + return; + } + + const projectPath = this.projectPaths.get(aircraft.projectId); + if (!projectPath) { + vscode.window.showErrorMessage('未设置项目存储路径,请先配置项目'); + return; + } + + // 构建文件路径:项目路径/飞行器名/容器名/文件名 + const aircraftDir = vscode.Uri.joinPath(vscode.Uri.file(projectPath), aircraft.name); + const containerDir = vscode.Uri.joinPath(aircraftDir, container.name); + const fileUri = vscode.Uri.joinPath(containerDir, config.fileName); + + // 确保飞行器目录存在 + try { + await vscode.workspace.fs.createDirectory(aircraftDir); + } catch (error) { + // 目录可能已存在,忽略错误 + } + + // 确保容器目录存在 + try { + await vscode.workspace.fs.createDirectory(containerDir); + } catch (error) { + // 目录可能已存在,忽略错误 + } + + // 写入文件 + const uint8Array = new TextEncoder().encode(content); + await vscode.workspace.fs.writeFile(fileUri, uint8Array); + + vscode.window.showInformationMessage(`配置文件已保存: ${fileUri.fsPath}`); + } catch (error) { + vscode.window.showErrorMessage(`保存文件时出错: ${error}`); } } @@ -366,6 +540,11 @@ export class ConfigPanel { private getWebviewContent(): string { switch (this.currentView) { + case 'management': + return this.projectManagementView.render({ + projects: this.projects, + projectPaths: this.projectPaths + }); case 'projects': return this.projectListView.render({ projects: this.projects @@ -393,8 +572,9 @@ export class ConfigPanel { configs: containerConfigs }); default: - return this.projectListView.render({ - projects: this.projects + return this.projectManagementView.render({ + projects: this.projects, + projectPaths: this.projectPaths }); } } diff --git a/src/panels/views/ContainerConfigView.ts b/src/panels/views/ContainerConfigView.ts index f2d7a0f..b5bfda1 100644 --- a/src/panels/views/ContainerConfigView.ts +++ b/src/panels/views/ContainerConfigView.ts @@ -7,14 +7,14 @@ export class ContainerConfigView extends BaseView { const container = data?.container; const configs = data?.configs || []; - // 生成配置列表的 HTML - 添加删除按钮 + // 生成配置列表的 HTML - 添加文件名编辑功能 const configsHtml = configs.map((config: ConfigViewData) => ` 🔧 ${config.name} - ${config.fileName} + 📄 ${config.fileName} @@ -39,9 +39,9 @@ export class ContainerConfigView extends BaseView { - + - + @@ -59,7 +59,7 @@ export class ContainerConfigView extends BaseView {

📝 编辑配置文件

- +
@@ -85,6 +85,23 @@ export class ContainerConfigView extends BaseView { ); } + function editFileName(configId, currentFileName) { + showPromptDialog( + '修改文件名', + '请输入新的文件名(包含扩展名):', + currentFileName, + function(newFileName) { + if (newFileName && newFileName !== currentFileName) { + vscode.postMessage({ + type: 'updateConfigFileName', + configId: configId, + fileName: newFileName + }); + } + } + ); + } + function openConfigFile(configId) { currentConfigId = configId; document.getElementById('configEditor').style.display = 'block'; @@ -111,7 +128,6 @@ export class ContainerConfigView extends BaseView { ); } - // 新增:删除配置函数 function deleteConfig(configId) { showConfirmDialog( '确认删除', @@ -233,6 +249,20 @@ export class ContainerConfigView extends BaseView { document.getElementById('configContent').value = message.content; } }); + + // 修改:点击文件名时打开编辑器 + document.addEventListener('click', function(event) { + if (event.target.classList.contains('editable') && event.target.textContent.includes('📄')) { + const row = event.target.closest('tr'); + if (row) { + const configNameCell = row.querySelector('td:first-child .editable'); + if (configNameCell) { + const configId = configNameCell.onclick.toString().match(/'([^']+)'/)[1]; + openConfigFile(configId); + } + } + } + }); `; diff --git a/src/panels/views/ProjectListView.ts b/src/panels/views/ProjectListView.ts index baedf2d..92b1a0c 100644 --- a/src/panels/views/ProjectListView.ts +++ b/src/panels/views/ProjectListView.ts @@ -26,11 +26,14 @@ export class ProjectListView extends BaseView { - 项目管理 + 飞行器项目管理 ${this.getStyles()} -

🚀 飞行器项目管理

+
+

🚀 飞行器项目管理

+ +
配置配置 文件操作操作
@@ -108,6 +111,10 @@ export class ProjectListView extends BaseView { ); } + function goBackToManagement() { + vscode.postMessage({ type: 'goBackToManagement' }); + } + // 对话框函数(与之前相同) function showConfirmDialog(title, message, onConfirm, onCancel) { const overlay = document.createElement('div'); diff --git a/src/panels/views/ProjectManagementView.ts b/src/panels/views/ProjectManagementView.ts new file mode 100644 index 0000000..02bff29 --- /dev/null +++ b/src/panels/views/ProjectManagementView.ts @@ -0,0 +1,255 @@ +// src/panels/views/ProjectManagementView.ts +import { BaseView } from './BaseView'; +import { ProjectViewData } from '../types/ViewTypes'; + +export class ProjectManagementView extends BaseView { + render(data?: { projects: ProjectViewData[], projectPaths?: Map }): string { + const projects = data?.projects || []; + const projectPaths = data?.projectPaths || new Map(); + + const projectsHtml = projects.map((project: ProjectViewData) => { + const isConfigured = projectPaths.has(project.id); + const statusIcon = isConfigured ? '✅' : '⚙️'; + const statusText = isConfigured ? '已配置' : '待配置'; + + return ` + + + + + + `}).join(''); + + return ` + + + + + 数字卫星构建平台 + ${this.getStyles()} + + + +

🛰️数字卫星构建平台

+
+ ${statusIcon} ${project.name} +
+ ${statusText}${isConfigured ? ` - ${projectPaths.get(project.id)}` : ''} +
+
+ + ${isConfigured ? '打开' : '配置'} + + + +
+ + + + + + + + + ${projectsHtml} + + + + +
项目配置操作
+ +
+ + + +`; + } +} \ No newline at end of file