From f14102ef45408cea2a9bcf8b5d033ea8f2ef0c58 Mon Sep 17 00:00:00 2001 From: engigu Date: Wed, 14 Jan 2026 15:14:21 +0800 Subject: [PATCH] fix: xterminal error --- web/src/components/XTerminal.vue | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/web/src/components/XTerminal.vue b/web/src/components/XTerminal.vue index 368780e..f9f8148 100644 --- a/web/src/components/XTerminal.vue +++ b/web/src/components/XTerminal.vue @@ -60,7 +60,16 @@ function initTerminal(forceConnect = false) { fitAddon = new FitAddon() terminal.loadAddon(fitAddon) terminal.open(terminalRef.value) - fitAddon.fit() + + // 延迟调用 fit,确保 DOM 已渲染 + setTimeout(() => { + try { + fitAddon?.fit() + } catch (e) { + console.warn('Terminal fit failed:', e) + } + }, 50) + terminal.focus() // autoConnect 或者强制连接时才连接 @@ -195,7 +204,11 @@ function dispose() { } function handleResize() { - fitAddon?.fit() + try { + fitAddon?.fit() + } catch (e) { + console.warn('Terminal resize failed:', e) + } } // 暴露方法给父组件 @@ -207,7 +220,8 @@ defineExpose({ onMounted(() => { window.addEventListener('resize', handleResize) - setTimeout(initTerminal, 100) + // 延迟初始化,确保 DOM 完全渲染 + setTimeout(initTerminal, 150) }) onUnmounted(() => {