ソースを参照

正确更新界面状态

黄中银 1 ヶ月 前
コミット
5f06d5a78c
1 ファイル変更57 行追加39 行削除
  1. 57 39
      ApqInstaller/src/js/version.js

+ 57 - 39
ApqInstaller/src/js/version.js

@@ -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;
 }