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, // 输入区动态保留高度(用于同步扩大消息区可滚动范围)