fix(ui): 终端侧边栏自动开关改为仅数量变化时触发一次

- 旧逻辑每次轮询都执行开关,导致面板关不掉/瞬间关闭
- 新增 previousTerminalCount 追踪,仅 0→>0 时开、>0→0 时关
This commit is contained in:
JOJO 2026-06-12 00:26:15 +08:00
parent 2e54f2c343
commit 7d716b8b90
2 changed files with 15 additions and 6 deletions

View File

@ -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 {}
},

View File

@ -54,6 +54,8 @@ export function dataState() {
terminalSessionLogs: {} as Record<string, string>,
terminalHydrated: {} as Record<string, boolean>,
terminalCount: 0,
// 上一次检测到的终端数量,用于判断 0→>0自动开和 >0→0自动关
previousTerminalCount: 0,
// 右侧面板上下分割比例(终端占比 0.15~0.85
rightSplitRatio: 0.5,
// 输入区动态保留高度(用于同步扩大消息区可滚动范围)