]> acesimba.cloud Git - codebuddy-web.git/commitdiff
fix: 任务列表页每 5 秒自动刷新状态
authorCodebuddy <codebuddy@localhost>
Fri, 14 Aug 2026 10:17:08 +0000 (18:17 +0800)
committerCodebuddy <codebuddy@localhost>
Fri, 14 Aug 2026 10:17:08 +0000 (18:17 +0800)
- 进入列表页启动定时器,离开/退出登录/进入终端时停止
- 解决列表页状态不随会话实时变化的问题(纯前端,刷新即生效)

frontend/index.html

index 88465b3d15c92f7ad7f6c303872cb73753403af1..af10872e82b77ad2f7f2a88cbc8ee639b28588e0 100644 (file)
@@ -304,11 +304,12 @@ body { position: fixed; top: 0; left: 0; right: 0; bottom: 0; height: 100%; over
   const termContainer = document.getElementById('terminal-container');
 
   function show(page) {
+    stopPickerRefresh();
     loginPage.style.display = 'none';
     pickerPage.style.display = 'none';
     terminalPage.style.display = 'none';
     if (page === 'login') { loginPage.style.display = 'flex'; passwordInput.focus(); }
-    else if (page === 'picker') pickerPage.style.display = 'flex';
+    else if (page === 'picker') { pickerPage.style.display = 'flex'; startPickerRefresh(); }
     else if (page === 'terminal') {
       terminalPage.style.display = 'flex';
       // 显示后重新 fit 并聚焦,避免重连后需要先按一次回车才能输入
@@ -379,6 +380,23 @@ body { position: fixed; top: 0; left: 0; right: 0; bottom: 0; height: 100%; over
     await renderTasks();
   }
 
+  // 列表页自动刷新:进入时启动,离开/退出时停止
+  let pickerTimer = null;
+  let pickerRefreshing = false;
+  function startPickerRefresh() {
+    stopPickerRefresh();
+    pickerTimer = setInterval(refreshTasks, 5000);
+  }
+  function stopPickerRefresh() {
+    if (pickerTimer) { clearInterval(pickerTimer); pickerTimer = null; }
+  }
+  async function refreshTasks() {
+    if (pickerRefreshing) return;
+    pickerRefreshing = true;
+    try { await renderTasks(); } catch (e) { console.warn('refreshTasks failed', e); }
+    finally { pickerRefreshing = false; }
+  }
+
   let showAllTasks = false;
 
   async function renderTasks() {