diff --git a/frontend/src/components/common/TerminalWindowChrome.tsx b/frontend/src/components/common/TerminalWindowChrome.tsx index 346e679..57d8c83 100644 --- a/frontend/src/components/common/TerminalWindowChrome.tsx +++ b/frontend/src/components/common/TerminalWindowChrome.tsx @@ -1,4 +1,5 @@ -// macOS 风格终端标题栏:红黄绿 + user@host:~ // Logan.Li +// macOS 风格终端标题栏:红绿 + user@host:~。终端为固定深色主题, +// 此处的颜色常量是终端专属暗色 token,不跟随全局主题(豁免 var(--dg-*))。 // Logan.Li import type { ReactNode } from 'react'; import { cn } from '@/lib/utils'; @@ -23,6 +24,9 @@ interface TerminalWindowChromeProps { closeLabel: string; fullscreenLabel: string; restoreLabel: string; + /** 连接状态的无障碍文案,与红/绿指示点配套,避免仅靠颜色区分 // Logan.Li */ + connectedLabel?: string; + disconnectedLabel?: string; } export function TerminalWindowChrome({ @@ -35,7 +39,10 @@ export function TerminalWindowChrome({ closeLabel, fullscreenLabel, restoreLabel, + connectedLabel, + disconnectedLabel, }: TerminalWindowChromeProps) { + // 弹窗没有“最小化”语义,只保留红(关闭)绿(全屏切换)两盏灯,去掉误导性黄灯。 // Logan.Li return (
diff --git a/frontend/src/components/server/ServerManager.tsx b/frontend/src/components/server/ServerManager.tsx index d3116c0..2646d0b 100644 --- a/frontend/src/components/server/ServerManager.tsx +++ b/frontend/src/components/server/ServerManager.tsx @@ -128,7 +128,11 @@ export function ServerManager() { const getServerDisplayName = (server: JsonData) => server.alias || server.cloud_instance_name || server.hostname || server.ip || ""; + // 详情抽屉内打开终端/RDP/文件时先关闭抽屉,避免同 z-index 的 Sheet 遮挡弹窗 // Logan.Li + const closeDetailSheet = () => setDetailServer(null); + const openTerminal = (server: JsonData) => { + closeDetailSheet(); setTerminalServer({ id: server.id, name: getServerDisplayName(server), @@ -140,11 +144,13 @@ export function ServerManager() { }; const openRdp = (server: JsonData) => { + closeDetailSheet(); setRdpServer({ id: server.id, name: getServerDisplayName(server), ip: server.ip }); setRdpOpen(true); }; const openFileBrowser = (server: JsonData) => { + closeDetailSheet(); setFileBrowserServer({ id: server.id, name: getServerDisplayName(server) }); setFileBrowserOpen(true); }; diff --git a/frontend/src/components/server/TerminalDialog.tsx b/frontend/src/components/server/TerminalDialog.tsx index fd88d27..c39021c 100644 --- a/frontend/src/components/server/TerminalDialog.tsx +++ b/frontend/src/components/server/TerminalDialog.tsx @@ -38,7 +38,7 @@ interface TerminalDialogProps { serverName: string; serverIp: string; username?: string; - /** ????????????????? SSH ??? // Logan.Li */ + /** 资产是否已配置 SSH 凭据,用于终端连接前的判断 // Logan.Li */ hasAuth?: boolean; } @@ -227,8 +227,10 @@ export function TerminalDialog({ onToggleFullscreen={() => setFullscreen(!fullscreen)} onClose={() => onOpenChange(false)} closeLabel={t("common.close")} - fullscreenLabel={t("server.detailSheet.fullscreen")} - restoreLabel={t("server.detailSheet.exitFullscreen")} + fullscreenLabel={t("common.fullscreen")} + restoreLabel={t("common.exitFullscreen")} + connectedLabel={t("common.connected")} + disconnectedLabel={t("common.disconnected")} /> {!authReady && (
(null); const termRef = useRef(null); const fitRef = useRef(null); @@ -198,17 +200,19 @@ export function LiveMonitorDialog({ open, onOpenChange, sessionId, sessionInfo } : { maxWidth: '960px', width: '92vw' }), }} > - 终端实时监控 - 审计在线 WebSSH 会话 + {t('system.liveMonitor.title')} + {t('system.liveMonitor.description')} setFullscreen(!fullscreen)} onClose={() => onOpenChange(false)} - closeLabel="关闭" - fullscreenLabel="全屏" - restoreLabel="退出全屏" + closeLabel={t('common.close')} + fullscreenLabel={t('common.fullscreen')} + restoreLabel={t('common.exitFullscreen')} + connectedLabel={t('common.connected')} + disconnectedLabel={t('common.disconnected')} trailing={ <> {meta && ( @@ -218,18 +222,18 @@ export function LiveMonitorDialog({ open, onOpenChange, sessionId, sessionInfo } )} {connected && ( - 在线 + {t('common.online')} )} {!connected && !connectError && ( - 连接中 + {t('system.liveMonitor.connecting')} )} {connectError && ( - 连接失败 + {t('system.liveMonitor.connectFailed')} )}