From 44b19dd5d08e5ef98f74cf9fad95cd25c74cc9cb Mon Sep 17 00:00:00 2001 From: Baobhan Sith <80159437+Heavrnl@users.noreply.github.com> Date: Fri, 18 Apr 2025 10:04:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E6=97=B6=E7=BB=88=E7=AB=AF=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E6=97=B6=E5=86=85=E5=AE=B9=E8=A2=AB=E6=B8=85=E7=A9=BA=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/frontend/src/components/Terminal.vue | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/frontend/src/components/Terminal.vue b/packages/frontend/src/components/Terminal.vue index 1e4af59..5426dfd 100644 --- a/packages/frontend/src/components/Terminal.vue +++ b/packages/frontend/src/components/Terminal.vue @@ -46,12 +46,20 @@ const debounce = (func: Function, delay: number) => { }, delay); }; }; + // 防抖处理由 ResizeObserver 触发的 resize 事件 const debouncedEmitResize = debounce((term: Terminal) => { if (term && props.isActive) { // 仅当标签仍处于活动状态时才发送防抖后的 resize const dimensions = { cols: term.cols, rows: term.rows }; console.log(`[Terminal ${props.sessionId}] Debounced resize emit (from ResizeObserver):`, dimensions); emit('resize', dimensions); + // *** 新增:尝试在发送 resize 后强制刷新终端显示 *** + try { + term.refresh(0, term.rows - 1); // Refresh entire viewport + console.log(`[Terminal ${props.sessionId}] Terminal refreshed after debounced resize.`); + } catch (e) { + console.warn(`[Terminal ${props.sessionId}] Terminal refresh failed:`, e); + } } else { console.log(`[Terminal ${props.sessionId}] Debounced resize skipped (inactive).`); } @@ -126,11 +134,11 @@ onMounted(() => { const { height, width } = entry.contentRect; // 获取宽度和高度 // console.log(`[Terminal ${props.sessionId}] ResizeObserver triggered. Size: ${width}x${height}, isActive: ${props.isActive}`); if (height > 0 && width > 0 && terminal) { // 确保宽度和高度都有效,并且终端实例存在 - try { - // *** 新增:立即调用 fit() 来适应前端容器 *** - fitAddon?.fit(); - // 触发防抖的 resize 发送,通知后端潜在的尺寸变化 - debouncedEmitResize(terminal); + try { + // *** 恢复:立即调用 fit() 来适应前端容器 *** + fitAddon?.fit(); + // 触发防抖的 resize 发送,通知后端潜在的尺寸变化 + debouncedEmitResize(terminal); } catch (e) { console.warn("Fit addon resize failed (observer):", e); }