From 7d716b8b9072e52f3c8b4f3937a0c3431a410b45 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Fri, 12 Jun 2026 00:26:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E7=BB=88=E7=AB=AF=E4=BE=A7=E8=BE=B9?= =?UTF-8?q?=E6=A0=8F=E8=87=AA=E5=8A=A8=E5=BC=80=E5=85=B3=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E4=BB=85=E6=95=B0=E9=87=8F=E5=8F=98=E5=8C=96=E6=97=B6=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 旧逻辑每次轮询都执行开关,导致面板关不掉/瞬间关闭 - 新增 previousTerminalCount 追踪,仅 0→>0 时开、>0→0 时关 --- static/src/app/methods/ui.ts | 19 +++++++++++++------ static/src/app/state.ts | 2 ++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/static/src/app/methods/ui.ts b/static/src/app/methods/ui.ts index c7b4698..ef53740 100644 --- a/static/src/app/methods/ui.ts +++ b/static/src/app/methods/ui.ts @@ -2277,15 +2277,22 @@ export const uiMethods = { if (name) sessions[name] = {}; } this.terminalSessions = sessions; - // 自动打开/关闭终端面板 + // 自动打开/关闭终端面板(仅在数量变化时触发一次) const personalizationStore = usePersonalizationStore(); const autoOpen = personalizationStore.form.auto_open_terminal_panel !== false; - const hasTerminals = Object.keys(sessions).length > 0; - if (autoOpen && hasTerminals && !this.terminalPanelOpen) { - this.toggleTerminalPanel(); - } else if (autoOpen && !hasTerminals && this.terminalPanelOpen) { - this.closeTerminalPanel(); + const count = Object.keys(sessions).length; + const prevCount = this.previousTerminalCount ?? 0; + if (autoOpen) { + // 终端从无到有 → 如果面板没开,打开一次 + if (prevCount === 0 && count > 0 && !this.terminalPanelOpen) { + this.toggleTerminalPanel(); + } + // 终端从有到无 → 如果面板开着,关闭一次 + else if (prevCount > 0 && count === 0 && this.terminalPanelOpen) { + this.closeTerminalPanel(); + } } + this.previousTerminalCount = count; } } catch {} }, diff --git a/static/src/app/state.ts b/static/src/app/state.ts index d9b5274..74c53a9 100644 --- a/static/src/app/state.ts +++ b/static/src/app/state.ts @@ -54,6 +54,8 @@ export function dataState() { terminalSessionLogs: {} as Record, terminalHydrated: {} as Record, terminalCount: 0, + // 上一次检测到的终端数量,用于判断 0→>0(自动开)和 >0→0(自动关) + previousTerminalCount: 0, // 右侧面板上下分割比例(终端占比 0.15~0.85) rightSplitRatio: 0.5, // 输入区动态保留高度(用于同步扩大消息区可滚动范围)