|
|
@@ -119,20 +119,64 @@ function setSoftwareLoadingState(software, isLoading, isFailed = false) {
|
|
|
}
|
|
|
|
|
|
// 一键安装页面也需要更新
|
|
|
+ updateAllPaneStatus();
|
|
|
+}
|
|
|
+
|
|
|
+// 更新一键安装页面的状态
|
|
|
+function updateAllPaneStatus() {
|
|
|
const allPane = document.getElementById('all');
|
|
|
- if (allPane) {
|
|
|
- const allInstallBtn = allPane.querySelector('.install-btn');
|
|
|
- const allStatusText = allPane.querySelector('.status-text');
|
|
|
+ if (!allPane) return;
|
|
|
|
|
|
- if (isLoading) {
|
|
|
- if (allInstallBtn && !allInstallBtn.textContent.includes('安装中')) {
|
|
|
- allInstallBtn.disabled = true;
|
|
|
- }
|
|
|
- if (allStatusText && allStatusText.textContent === '就绪') {
|
|
|
- allStatusText.textContent = '加载中...';
|
|
|
+ const allInstallBtn = allPane.querySelector('.install-btn');
|
|
|
+ const allStatusText = allPane.querySelector('.status-text');
|
|
|
+
|
|
|
+ // 检查所有软件的下拉框状态
|
|
|
+ const softwareList = ['nodejs', 'vscode', 'git'];
|
|
|
+ let allLoaded = true;
|
|
|
+ let hasFailure = false;
|
|
|
+ let hasLoading = false;
|
|
|
+
|
|
|
+ softwareList.forEach(software => {
|
|
|
+ const select = document.getElementById(`all-${software}-version`);
|
|
|
+ if (select) {
|
|
|
+ const firstOption = select.options[0];
|
|
|
+ if (firstOption) {
|
|
|
+ const text = firstOption.textContent;
|
|
|
+ if (text === '...' || text === '加载中...') {
|
|
|
+ hasLoading = true;
|
|
|
+ allLoaded = false;
|
|
|
+ } else if (text === '失败' || text === '加载失败') {
|
|
|
+ hasFailure = true;
|
|
|
+ allLoaded = false;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- // 一键安装页面的状态在 loadAllVersions 中统一处理
|
|
|
+ });
|
|
|
+
|
|
|
+ if (hasLoading) {
|
|
|
+ // 还有正在加载的
|
|
|
+ if (allInstallBtn && !allInstallBtn.textContent.includes('安装中')) {
|
|
|
+ allInstallBtn.disabled = true;
|
|
|
+ }
|
|
|
+ if (allStatusText && allStatusText.textContent !== '加载中...') {
|
|
|
+ allStatusText.textContent = '加载中...';
|
|
|
+ }
|
|
|
+ } else if (hasFailure) {
|
|
|
+ // 有加载失败的
|
|
|
+ if (allInstallBtn && !allInstallBtn.textContent.includes('安装中')) {
|
|
|
+ allInstallBtn.disabled = true;
|
|
|
+ }
|
|
|
+ if (allStatusText) {
|
|
|
+ allStatusText.textContent = '部分加载失败';
|
|
|
+ }
|
|
|
+ } else if (allLoaded) {
|
|
|
+ // 全部加载成功
|
|
|
+ if (allInstallBtn && !allInstallBtn.textContent.includes('安装中')) {
|
|
|
+ allInstallBtn.disabled = false;
|
|
|
+ }
|
|
|
+ if (allStatusText && (allStatusText.textContent === '加载中...' || allStatusText.textContent === '部分加载失败')) {
|
|
|
+ allStatusText.textContent = '就绪';
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -208,36 +252,10 @@ async function loadAllVersions() {
|
|
|
// 并行加载所有版本
|
|
|
const loadPromises = softwareList.map(software => loadVersionForSoftware(software));
|
|
|
|
|
|
- // 等待所有加载完成,收集结果
|
|
|
- const results = await Promise.all(loadPromises);
|
|
|
+ // 等待所有加载完成
|
|
|
+ await Promise.all(loadPromises);
|
|
|
|
|
|
- // 检查是否有加载失败的
|
|
|
- const hasFailure = results.some(success => !success);
|
|
|
-
|
|
|
- // 一键安装页面的状态处理
|
|
|
- const allPane = document.getElementById('all');
|
|
|
- if (allPane) {
|
|
|
- const allInstallBtn = allPane.querySelector('.install-btn');
|
|
|
- const allStatusText = allPane.querySelector('.status-text');
|
|
|
-
|
|
|
- if (hasFailure) {
|
|
|
- // 有任何一个加载失败,禁用一键安装按钮
|
|
|
- if (allInstallBtn) {
|
|
|
- allInstallBtn.disabled = true;
|
|
|
- }
|
|
|
- if (allStatusText) {
|
|
|
- allStatusText.textContent = '部分加载失败';
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 全部加载成功
|
|
|
- if (allInstallBtn && !allInstallBtn.textContent.includes('安装中')) {
|
|
|
- allInstallBtn.disabled = false;
|
|
|
- }
|
|
|
- if (allStatusText) {
|
|
|
- allStatusText.textContent = '就绪';
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ // 一键安装页面的状态由 updateAllPaneStatus 在每次加载完成时自动更新
|
|
|
|
|
|
isLoadingVersions = false;
|
|
|
}
|