feat: 增加资产主机详情抽屉并统一终端窗口壳

服务器列表可从右侧查看规格、迷你曲线和进程 TOP;SSH 与审计终端改为 macOS 风格标题栏。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Logan.LiandCursor committed 2026-09-14 09:43:20 +08:00
1 parent 2fd1624bec
commit 4658812876
11 files changed
+871 -142

No files matched your search

@@ -52,6 +52,7 @@ import { ExcelServerImport } from "./ExcelServerImport";
import { ServerForm, EMPTY_FORM, type ServerFormData } from "./ServerForm";
import { getTags } from "./serverHelpers";
import { ServerTableRow } from "./ServerTableRow";
import { ServerDetailSheet } from "./ServerDetailSheet";
import { usePermission } from "@/hooks/usePermission";
import { PageShell } from "@/components/layout/PageShell";
import { ContentPanel } from "@/components/layout/ContentPanel";
@@ -80,6 +81,7 @@ export function ServerManager() {
id: number;
name: string;
ip: string;
username?: string;
hasAuth?: boolean;
} | null>(null);
const [rdpOpen, setRdpOpen] = useState(false);
@@ -95,6 +97,7 @@ export function ServerManager() {
id: number;
name: string;
} | null>(null);
const [detailServer, setDetailServer] = useState<JsonData | null>(null);
// 分页状态
const [page, setPage] = useState(1);
@@ -130,6 +133,7 @@ export function ServerManager() {
id: server.id,
name: getServerDisplayName(server),
ip: server.ip,
username: server.username || "root",
hasAuth: server.has_auth ?? true,
});
setTerminalOpen(true);
@@ -548,6 +552,7 @@ export function ServerManager() {
onOpenRdp={openRdp}
onOpenFiles={openFileBrowser}
onOpenEdit={openEditForm}
onOpenDetail={setDetailServer}
onDelete={handleDelete}
/>
))
@@ -650,9 +655,29 @@ export function ServerManager() {
serverId={terminalServer?.id ?? null}
serverName={terminalServer?.name ?? ""}
serverIp={terminalServer?.ip ?? ""}
username={terminalServer?.username || "root"}
hasAuth={terminalServer?.hasAuth ?? true}
/>
<ServerDetailSheet
open={!!detailServer}
onOpenChange={(v) => {
if (!v) setDetailServer(null);
}}
server={
detailServer
? servers.find((s) => String(s.id) === String(detailServer.id)) || detailServer
: null
}
onOpenTerminal={openTerminal}
onOpenRdp={openRdp}
onOpenFiles={openFileBrowser}
onOpenEdit={(s) => {
setDetailServer(null);
openEditForm(s);
}}
/>
{/* 文件浏览 Dialog */}
<ServerFileBrowser
open={fileBrowserOpen}