From 630e9cbba11c36c7d49242f6ca55cb97b252edcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=9C=B1?= <10714957+xiao-zhu245@user.noreply.gitee.com> Date: Wed, 9 Jul 2025 23:19:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=85=A8=E5=B1=8F=E7=BB=88?= =?UTF-8?q?=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pages/TerminalPage.tsx | 361 +++++++++++++++++++++++++++--- 1 file changed, 331 insertions(+), 30 deletions(-) diff --git a/client/src/pages/TerminalPage.tsx b/client/src/pages/TerminalPage.tsx index 1bdb680..dc70a56 100644 --- a/client/src/pages/TerminalPage.tsx +++ b/client/src/pages/TerminalPage.tsx @@ -310,11 +310,34 @@ const TerminalPage: React.FC = () => { }) } - // 调整终端大小 + // 调整终端大小 - 增加延迟确保DOM完全更新 setTimeout(() => { const activeSession = sessions.find(s => s.id === activeSessionId) - if (activeSession) { + if (activeSession && terminalContainerRef.current) { try { + // 强制重新计算容器大小 + const container = terminalContainerRef.current + + // 在全屏模式下,强制刷新容器布局 + if (isFullscreen) { + container.style.width = '100vw' + container.style.height = 'calc(100vh - 60px)' + container.style.maxWidth = '100vw' + } else { + container.style.width = '' + container.style.height = '' + container.style.maxWidth = '' + } + + // 强制浏览器重新计算布局 + container.offsetHeight + + const containerWidth = container.clientWidth || 800 + const containerHeight = container.clientHeight || 600 + + console.log(`全屏切换后容器大小: ${containerWidth}x${containerHeight}, 全屏状态: ${isFullscreen}`) + + // 调整终端大小以适应新的容器 activeSession.fitAddon.fit() // 获取调整后的实际大小 @@ -329,7 +352,7 @@ const TerminalPage: React.FC = () => { console.error('全屏状态变化时调整终端失败:', error) } } - }, 200) + }, 500) } catch (error) { console.error('全屏切换失败:', error) addNotification({ @@ -769,11 +792,34 @@ const TerminalPage: React.FC = () => { message: '全屏模式已关闭' }) } - // 调整终端大小 + // 调整终端大小 - 增加延迟确保DOM完全更新 setTimeout(() => { const activeSession = sessions.find(s => s.id === activeSessionId) - if (activeSession) { + if (activeSession && terminalContainerRef.current) { try { + // 强制重新计算容器大小 + const container = terminalContainerRef.current + + // 在全屏模式下,强制刷新容器布局 + if (isCurrentlyFullscreen) { + container.style.width = '100vw' + container.style.height = 'calc(100vh - 60px)' + container.style.maxWidth = '100vw' + } else { + container.style.width = '' + container.style.height = '' + container.style.maxWidth = '' + } + + // 强制浏览器重新计算布局 + container.offsetHeight + + const containerWidth = container.clientWidth || 800 + const containerHeight = container.clientHeight || 600 + + console.log(`全屏模式切换后容器大小: ${containerWidth}x${containerHeight}, 全屏状态: ${isCurrentlyFullscreen}`) + + // 调整终端大小以适应新的容器 activeSession.fitAddon.fit() // 获取调整后的实际大小 @@ -785,10 +831,10 @@ const TerminalPage: React.FC = () => { socketClient.resizeTerminal(activeSession.id, cols, rows) } } catch (error) { - console.error('全屏模式切换时调整终端失败:', error) + console.error('全屏模式切换时调整终端大小失败:', error) } } - }, 200) + }, 500) } } @@ -801,22 +847,287 @@ const TerminalPage: React.FC = () => { } }, [activeSessionId, sessions, isFullscreen, addNotification]) - // 判断侧边栏是否应该显示 - const shouldShowSidebar = !isFullscreen && (!sidebarCollapsed || sidebarHovered) + // 计算是否应该显示侧边栏内容 + const shouldShowSidebar = !sidebarCollapsed || sidebarHovered + // 全屏模式下的渲染 + if (isFullscreen) { + return ( +
暂无终端会话
+暂无终端会话
+ +