卫星模块获取功能已实现,仅简单测试,未深度测试
This commit is contained in:
@@ -29,27 +29,29 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
`).join('');
|
||||
// 生成模块文件夹的 HTML - 按类别分类显示
|
||||
const moduleFoldersHtml = moduleFolders.map((folder) => {
|
||||
const icon = folder.type === 'git' ? '📁' : '📁';
|
||||
const icon = '📁';
|
||||
// 根据类型和上传状态确定类别显示
|
||||
let category = folder.type === 'git' ? 'git' : 'local';
|
||||
if (folder.uploaded) {
|
||||
category += '(已上传)';
|
||||
}
|
||||
const fileName = folder.localPath.split('/').pop() || '';
|
||||
return `
|
||||
<tr>
|
||||
<td>
|
||||
<span class="editable clickable" onclick="renameModuleFolder('${folder.id}')">
|
||||
${icon} ${folder.name}
|
||||
</span>
|
||||
<!-- 左侧:📁 动力学仓库 / test,仅用于重命名 -->
|
||||
<span class="editable clickable" onclick="renameModuleFolder('${folder.id}', '${folder.name}')">
|
||||
${icon} ${folder.name}
|
||||
</span>
|
||||
</td>
|
||||
<td class="category-${folder.type}">${category}</td>
|
||||
<td>
|
||||
<span class="clickable"
|
||||
onclick="renameModuleFolder('${folder.id}', '${folder.localPath.split('/').pop()}')">
|
||||
📄 ${folder.localPath.split('/').pop()}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<!-- 右侧:文件/文件夹栏,只负责选择并打开文件,不再触发重命名 -->
|
||||
<span class="clickable"
|
||||
onclick="openTheModuleFolder('${folder.id}', '${folder.type}')">
|
||||
📄 ${fileName}
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<button class="btn-upload" onclick="uploadModuleFolder('${folder.id}', '${folder.type}')" style="margin-right: 5px;">上传</button>
|
||||
<button class="btn-delete" onclick="deleteModuleFolder('${folder.id}')">删除</button>
|
||||
@@ -322,24 +324,23 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
let branchTreeData = [];
|
||||
let selectedConfigs = new Set();
|
||||
|
||||
// 只负责“改名”的函数
|
||||
function renameModuleFolder(folderId, oldName) {
|
||||
showPromptDialog(
|
||||
'重命名模块文件夹',
|
||||
'请输入新的名称:',
|
||||
oldName,
|
||||
function(newName) {
|
||||
if (newName && newName.trim() && newName !== oldName) {
|
||||
vscode.postMessage({
|
||||
type: 'renameModuleFolder',
|
||||
folderId: folderId,
|
||||
newName: newName.trim()
|
||||
});
|
||||
}
|
||||
showPromptDialog(
|
||||
'重命名模块文件夹',
|
||||
'请输入新的名称:',
|
||||
oldName || '',
|
||||
function(newName) {
|
||||
if (newName && newName.trim() && newName !== oldName) {
|
||||
vscode.postMessage({
|
||||
type: 'renameModuleFolder',
|
||||
folderId: folderId,
|
||||
newName: newName.trim()
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 配置管理功能
|
||||
function editConfigName(configId, currentName) {
|
||||
@@ -368,7 +369,7 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
});
|
||||
}
|
||||
|
||||
// 统一功能:打开模块文件夹
|
||||
// 统一功能:打开模块文件夹(这里只负责打开,而不是改名)
|
||||
function openTheModuleFolder(id, type) {
|
||||
console.log('📂 打开模块文件夹:', { id, type });
|
||||
vscode.postMessage({
|
||||
@@ -406,7 +407,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
});
|
||||
},
|
||||
function() {
|
||||
// 用户取消删除
|
||||
console.log('❌ 用户取消删除配置文件');
|
||||
}
|
||||
);
|
||||
@@ -427,34 +427,23 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
});
|
||||
},
|
||||
function() {
|
||||
// 用户取消删除
|
||||
console.log('❌ 用户取消删除模块文件夹');
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// 上传模块文件夹功能
|
||||
// 上传模块文件夹功能(区分 local / git)
|
||||
function uploadModuleFolder(folderId, folderType) {
|
||||
console.log('📤 上传模块文件夹:', { folderId, folderType });
|
||||
|
||||
if (folderType === 'git') {
|
||||
// Git 类型:直接上传(相当于 push)
|
||||
showConfirmDialog(
|
||||
'确认上传',
|
||||
'确定要将 Git 文件夹的内容上传到远程仓库吗?这将执行 git push 操作。',
|
||||
function() {
|
||||
vscode.postMessage({
|
||||
type: 'uploadGitModuleFolder',
|
||||
folderId: folderId
|
||||
});
|
||||
},
|
||||
function() {
|
||||
console.log('❌ 用户取消上传 Git 文件夹');
|
||||
}
|
||||
);
|
||||
} else if (folderType === 'local') {
|
||||
// Local 类型:不再手动输入 URL,改为复用“获取仓库”弹窗
|
||||
// 后端将根据选择的仓库 + 本地文件夹名 自动确定 repoUrl 和 分支名
|
||||
// git 类型:先选仓库,然后后端根据是否改名/是否同仓库判断是更新原分支还是新分支上传
|
||||
vscode.postMessage({
|
||||
type: 'openRepoSelectForGitUpload',
|
||||
folderId: folderId
|
||||
});
|
||||
} else {
|
||||
// local 类型:走 local → git 的初始化上传逻辑
|
||||
vscode.postMessage({
|
||||
type: 'openRepoSelectForUpload',
|
||||
folderId: folderId
|
||||
@@ -497,12 +486,10 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
branches: Array.from(selectedBranches)
|
||||
});
|
||||
|
||||
// 重置选择
|
||||
selectedBranches.clear();
|
||||
const checkboxes = document.querySelectorAll('input[type="checkbox"]');
|
||||
checkboxes.forEach(checkbox => checkbox.checked = false);
|
||||
|
||||
// 隐藏分支选择区域
|
||||
document.getElementById('branchSelectionContainer').innerHTML = '';
|
||||
}
|
||||
|
||||
@@ -511,7 +498,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
const checkboxes = document.querySelectorAll('input[type="checkbox"]');
|
||||
checkboxes.forEach(checkbox => checkbox.checked = false);
|
||||
|
||||
// 隐藏分支选择区域
|
||||
document.getElementById('branchSelectionContainer').innerHTML = '';
|
||||
|
||||
vscode.postMessage({
|
||||
@@ -528,7 +514,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
selectedConfigs.delete(configId);
|
||||
}
|
||||
|
||||
// 更新合并按钮状态
|
||||
updateMergeButtonState();
|
||||
console.log('选中的配置文件:', Array.from(selectedConfigs));
|
||||
}
|
||||
@@ -548,7 +533,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
|
||||
console.log('🔄 开始合并选中的配置文件:', Array.from(selectedConfigs));
|
||||
|
||||
// 弹出新的合并对话框
|
||||
showMergeDialog();
|
||||
}
|
||||
|
||||
@@ -584,7 +568,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
|
||||
document.body.appendChild(overlay);
|
||||
|
||||
// 自动聚焦到第一个输入框
|
||||
setTimeout(() => {
|
||||
const displayNameInput = document.getElementById('displayNameInput');
|
||||
if (displayNameInput) {
|
||||
@@ -619,7 +602,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
folderName: folderName
|
||||
});
|
||||
|
||||
// 重置选择
|
||||
selectedConfigs.clear();
|
||||
const checkboxes = document.querySelectorAll('.config-checkbox');
|
||||
checkboxes.forEach(checkbox => checkbox.checked = false);
|
||||
@@ -689,7 +671,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
let html = '<div class="branch-selection" style="margin: 10px 0; padding: 10px; background: var(--vscode-panel-background); border-radius: 4px;">';
|
||||
html += '<h4 class="branch-tree-title" style="margin: 0 0 8px 0;"><span class="tree-icon">🌳</span> 分支树</h4>';
|
||||
|
||||
// 展开/收起按钮
|
||||
html += '<div style="margin-bottom: 8px;">';
|
||||
html += '<button class="back-btn" onclick="expandAllBranches()" style="margin-right: 8px; padding: 2px 6px; font-size: 11px;">展开全部</button>';
|
||||
html += '<button class="back-btn" onclick="collapseAllBranches()" style="padding: 2px 6px; font-size: 11px;">收起全部</button>';
|
||||
@@ -714,7 +695,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
const nodeId = node.fullName.replace(/[^a-zA-Z0-9-]/g, '-');
|
||||
|
||||
if (node.isLeaf) {
|
||||
// 叶子节点(实际分支)
|
||||
html += '<div class="branch-node branch-leaf" style="margin-left: ' + indent + 'px;">';
|
||||
html += '<input type="checkbox" id="branch-' + nodeId + '" class="branch-checkbox" ';
|
||||
html += (node.branch && node.branch.selected ? 'checked' : '') + ' onchange="toggleBranch(\\'' + node.fullName + '\\')">';
|
||||
@@ -725,7 +705,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
html += '</span>';
|
||||
html += '</div>';
|
||||
} else {
|
||||
// 文件夹节点
|
||||
html += '<div class="branch-node" style="margin-left: ' + indent + 'px;">';
|
||||
html += '<span class="branch-expand" onclick="toggleBranchNode(\\'' + node.fullName + '\\')">';
|
||||
html += (node.expanded ? '🪵' : '🪵');
|
||||
@@ -744,18 +723,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
return html;
|
||||
}
|
||||
|
||||
function countLeafNodes(nodes) {
|
||||
let count = 0;
|
||||
nodes.forEach(node => {
|
||||
if (node.isLeaf) {
|
||||
count++;
|
||||
} else if (node.children) {
|
||||
count += countLeafNodes(node.children);
|
||||
}
|
||||
});
|
||||
return count;
|
||||
}
|
||||
|
||||
// 对话框函数
|
||||
function showConfirmDialog(title, message, onConfirm, onCancel) {
|
||||
const overlay = document.createElement('div');
|
||||
@@ -853,7 +820,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
console.log('📄 ConfigView 页面加载完成');
|
||||
|
||||
// 为所有配置复选框添加事件监听
|
||||
document.addEventListener('change', function(event) {
|
||||
if (event.target.classList.contains('config-checkbox')) {
|
||||
const configId = event.target.getAttribute('data-id');
|
||||
@@ -868,7 +834,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
generateBranchesTreeHtml(branches) {
|
||||
if (branches.length === 0)
|
||||
return '';
|
||||
// 构建分支树
|
||||
const branchTree = this.buildBranchTree(branches);
|
||||
let html = '<div class="branch-selection" style="margin: 10px 0; padding: 10px; background: var(--vscode-panel-background); border-radius: 4px;">';
|
||||
html += '<h4 class="branch-tree-title" style="margin: 0 0 8px 0;"><span class="tree-icon">🌳</span> 分支树</h4>';
|
||||
@@ -885,9 +850,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
html += '</div></div>';
|
||||
return html;
|
||||
}
|
||||
/**
|
||||
* 构建分支树状结构
|
||||
*/
|
||||
buildBranchTree(branches) {
|
||||
const root = [];
|
||||
branches.forEach(branch => {
|
||||
@@ -904,31 +866,25 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
fullName: fullName,
|
||||
isLeaf: isLeaf,
|
||||
children: [],
|
||||
level: i
|
||||
level: i,
|
||||
expanded: true
|
||||
};
|
||||
currentLevel.push(node);
|
||||
}
|
||||
if (isLeaf) {
|
||||
node.branch = branch;
|
||||
}
|
||||
else {
|
||||
node.expanded = node.expanded || true; // 默认展开
|
||||
}
|
||||
currentLevel = node.children;
|
||||
}
|
||||
});
|
||||
return root;
|
||||
}
|
||||
/**
|
||||
* 渲染分支树节点
|
||||
*/
|
||||
renderBranchTreeNodes(nodes, level) {
|
||||
let html = '';
|
||||
nodes.forEach(node => {
|
||||
const indent = level * 20;
|
||||
const nodeId = node.fullName.replace(/[^a-zA-Z0-9-]/g, '-');
|
||||
if (node.isLeaf) {
|
||||
// 叶子节点(实际分支)
|
||||
html += '<div class="branch-node branch-leaf" style="margin-left: ' + indent + 'px;">';
|
||||
html += '<input type="checkbox" id="branch-' + nodeId + '" class="branch-checkbox" ';
|
||||
html += (node.branch && node.branch.selected ? 'checked' : '') + ' onchange="toggleBranch(\'' + node.fullName + '\')">';
|
||||
@@ -940,7 +896,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
html += '</div>';
|
||||
}
|
||||
else {
|
||||
// 文件夹节点
|
||||
html += '<div class="branch-node" style="margin-left: ' + indent + 'px;">';
|
||||
html += '<span class="branch-expand" onclick="toggleBranchNode(\'' + node.fullName + '\')">';
|
||||
html += (node.expanded ? '🪵' : '🪵');
|
||||
@@ -957,9 +912,6 @@ class ConfigView extends BaseView_1.BaseView {
|
||||
});
|
||||
return html;
|
||||
}
|
||||
/**
|
||||
* 计算叶子节点数量
|
||||
*/
|
||||
countLeafNodes(nodes) {
|
||||
let count = 0;
|
||||
nodes.forEach(node => {
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user