From 81a11c4594f2f7e822da0408e5ed2cba0f6b8499 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Tue, 9 Dec 2025 11:10:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=8B=86=E5=88=86?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Server/List/components/ServerCard.tsx | 26 ++- .../List/components/ServerEditDialog.tsx | 165 +++++++++++++++++- .../Server/List/components/ServerTable.tsx | 25 ++- .../src/pages/Resource/Server/List/index.tsx | 36 +++- .../src/pages/Resource/Server/List/service.ts | 12 +- .../src/pages/Resource/Server/List/types.ts | 18 +- 6 files changed, 269 insertions(+), 13 deletions(-) diff --git a/frontend/src/pages/Resource/Server/List/components/ServerCard.tsx b/frontend/src/pages/Resource/Server/List/components/ServerCard.tsx index ad144674..d9905c05 100644 --- a/frontend/src/pages/Resource/Server/List/components/ServerCard.tsx +++ b/frontend/src/pages/Resource/Server/List/components/ServerCard.tsx @@ -15,6 +15,7 @@ import { Tags, Tag, FileText, + RefreshCw, } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; @@ -36,11 +37,13 @@ interface ServerCardProps { onEdit: (server: ServerResponse) => void; onDelete: (server: ServerResponse) => void; onSSHConnect: (server: ServerResponse) => void; + onCollectHardware: (server: ServerResponse) => void; isTesting?: boolean; + isCollecting?: boolean; getOsIcon: (osType?: string) => React.ReactNode; } -export const ServerCard: React.FC = ({ server, onTest, onEdit, onDelete, onSSHConnect, isTesting, getOsIcon }) => { +export const ServerCard: React.FC = ({ server, onTest, onEdit, onDelete, onSSHConnect, onCollectHardware, isTesting, isCollecting, getOsIcon }) => { const [expanded, setExpanded] = React.useState(false); const formatTime = (time?: string) => { @@ -252,7 +255,7 @@ export const ServerCard: React.FC = ({ server, onTest, onEdit, size="icon" className="h-7 w-7" onClick={() => onTest(server)} - disabled={isTesting} + disabled={isTesting || isCollecting} > {isTesting ? ( @@ -263,6 +266,25 @@ export const ServerCard: React.FC = ({ server, onTest, onEdit, 测试连接 + + + + + 刷新硬件信息 + + {testSuccess && !isEdit && ( + + ✓ 连接成功,硬件信息已采集 + + )} + diff --git a/frontend/src/pages/Resource/Server/List/components/ServerTable.tsx b/frontend/src/pages/Resource/Server/List/components/ServerTable.tsx index 4b72fc66..24fdb691 100644 --- a/frontend/src/pages/Resource/Server/List/components/ServerTable.tsx +++ b/frontend/src/pages/Resource/Server/List/components/ServerTable.tsx @@ -8,6 +8,7 @@ import { AlertCircle, HelpCircle, Terminal, + RefreshCw, } from 'lucide-react'; import { Table, @@ -36,7 +37,9 @@ interface ServerTableProps { onEdit: (server: ServerResponse) => void; onDelete: (server: ServerResponse) => void; onSSHConnect: (server: ServerResponse) => void; + onCollectHardware: (server: ServerResponse) => void; isTesting?: (serverId: number) => boolean; + isCollecting?: (serverId: number) => boolean; getOsIcon: (osType?: string) => React.ReactNode; } @@ -46,7 +49,9 @@ export const ServerTable: React.FC = ({ onEdit, onDelete, onSSHConnect, + onCollectHardware, isTesting, + isCollecting, getOsIcon, }) => { const formatTime = (time?: string) => { @@ -155,7 +160,7 @@ export const ServerTable: React.FC = ({ variant="ghost" size="sm" onClick={() => onTest(server)} - disabled={isTesting?.(server.id)} + disabled={isTesting?.(server.id) || isCollecting?.(server.id)} className="h-8 w-8 p-0" > {isTesting?.(server.id) ? ( @@ -167,6 +172,24 @@ export const ServerTable: React.FC = ({ 测试连接 + + + + + 刷新硬件信息 +