From 35c65b0510807b54e05ad3a26af8ff7f82793b26 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Tue, 9 Dec 2025 15:16:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=B3=BB=E7=BB=9F=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=BB=B4=E6=8A=A4=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../List/components/ServerEditDialog.tsx | 34 ------ .../src/pages/Resource/Server/List/index.tsx | 102 +++++++++++++----- .../src/pages/Resource/Server/List/service.ts | 10 ++ 3 files changed, 87 insertions(+), 59 deletions(-) diff --git a/frontend/src/pages/Resource/Server/List/components/ServerEditDialog.tsx b/frontend/src/pages/Resource/Server/List/components/ServerEditDialog.tsx index 5c0ecea0..1c44720a 100644 --- a/frontend/src/pages/Resource/Server/List/components/ServerEditDialog.tsx +++ b/frontend/src/pages/Resource/Server/List/components/ServerEditDialog.tsx @@ -685,40 +685,6 @@ export const ServerEditDialog: React.FC = ({ )} - {/* 测试连接按钮 */} -
- - {testSuccess && !isEdit && ( - - ✓ 连接成功,硬件信息已采集 - - )} -
diff --git a/frontend/src/pages/Resource/Server/List/index.tsx b/frontend/src/pages/Resource/Server/List/index.tsx index b3ae0d24..7c27a58d 100644 --- a/frontend/src/pages/Resource/Server/List/index.tsx +++ b/frontend/src/pages/Resource/Server/List/index.tsx @@ -36,7 +36,7 @@ import { DataTablePagination } from '@/components/ui/pagination'; import { Input } from '@/components/ui/input'; import type { ServerResponse, ServerCategoryResponse, ServerStatus, OsType } from './types'; import { ServerStatusLabels, OsTypeLabels } from './types'; -import { getServers, getServerCategories, deleteServer, testServerConnection, collectServerHardware } from './service'; +import { getServers, getServerList, getServerCategories, deleteServer, testServerConnection, collectServerHardware } from './service'; import { CategoryManageDialog } from './components/CategoryManageDialog'; import { AlertRuleManageDialog } from './components/AlertRuleManageDialog'; import { ServerEditDialog } from './components/ServerEditDialog'; @@ -142,19 +142,37 @@ const ServerList: React.FC = () => { }; // 加载服务器列表 - const loadServers = async () => { - setLoading(true); + const loadServers = async (silent: boolean = false) => { + // silent 为 true 时不显示全局 loading 状态(用于操作后的静默刷新) + if (!silent) { + setLoading(true); + } try { - const result = await getServers({ + const params = { categoryId: selectedCategoryId, status: selectedStatus, osType: selectedOsType, - pageNum: pageIndex, - size: pageSize, - }); - if (result) { - setServers(result.content || []); - setTotalElements(result.totalElements || 0); + }; + + // 卡片模式使用 list 接口(无分页),列表模式使用 page 接口(有分页) + if (viewMode === 'grid') { + // 卡片模式:调用 list 接口获取所有数据 + const result = await getServerList(params); + if (result) { + setServers(result); + setTotalElements(result.length); + } + } else { + // 列表模式:调用 page 接口获取分页数据 + const result = await getServers({ + ...params, + pageNum: pageIndex, + size: pageSize, + }); + if (result) { + setServers(result.content || []); + setTotalElements(result.totalElements || 0); + } } } catch (error) { console.error('加载服务器列表失败:', error); @@ -164,7 +182,9 @@ const ServerList: React.FC = () => { description: '无法加载服务器列表', }); } finally { - setLoading(false); + if (!silent) { + setLoading(false); + } } }; @@ -178,6 +198,9 @@ const ServerList: React.FC = () => { title: '连接成功', description: `响应时间: ${result.responseTime}ms`, }); + // 静默刷新服务器列表(不显示加载状态) + await loadServers(true); + await loadStats(); } else { toast({ variant: 'destructive', @@ -199,20 +222,39 @@ const ServerList: React.FC = () => { // 刷新硬件信息 const handleCollectHardware = async (server: ServerResponse) => { setCollectingServerId(server.id); + + // 显示开始采集的提示 + toast({ + title: '正在采集硬件信息...', + description: `正在从 ${server.serverName} 采集最新硬件信息`, + }); + try { const result = await collectServerHardware(server.id); - toast({ - title: '硬件信息已更新', - description: `${result.hostname} - CPU: ${result.cpuCores}核 内存: ${result.memorySize}GB`, - }); - // 刷新服务器列表 - await loadServers(); + + // 静默刷新服务器列表(不显示加载状态) + await loadServers(true); await loadStats(); + + // 显示详细的成功信息 + toast({ + title: '✓ 硬件信息更新成功', + description: ( +
+
{result.hostname}
+
+
• CPU: {result.cpuCores} 核
+
• 内存: {result.memorySize} GB
+
• 磁盘: {result.diskSize} GB
+
+
+ ), + }); } catch (error: any) { toast({ variant: 'destructive', title: '采集失败', - description: error.response?.data?.message || '无法采集硬件信息', + description: error.response?.data?.message || '无法采集硬件信息,请检查服务器连接', }); } finally { setCollectingServerId(null); @@ -250,10 +292,10 @@ const ServerList: React.FC = () => { await deleteServer(serverToDelete.id); }; - // 成功回调 + // 成功回调(新增/编辑服务器后) const handleSuccess = () => { loadCategories(); - loadServers(); + loadServers(true); // 静默刷新 loadStats(); }; @@ -293,10 +335,10 @@ const ServerList: React.FC = () => { ); }); - // 监听筛选条件和分页变化 + // 监听筛选条件、分页和视图模式变化 useEffect(() => { loadServers(); - }, [pageIndex, pageSize, selectedCategoryId, selectedStatus, selectedOsType]); + }, [pageIndex, pageSize, selectedCategoryId, selectedStatus, selectedOsType, viewMode]); // 使用statsData作为统计数据 const stats = statsData; @@ -579,8 +621,8 @@ const ServerList: React.FC = () => { /> )} - {/* 分页 */} - {!loading && servers.length > 0 && ( + {/* 分页(仅列表模式) */} + {!loading && servers.length > 0 && viewMode === 'table' && (
共 {totalElements} 条记录,第 {pageIndex + 1} / {Math.ceil(totalElements / pageSize)} 页 @@ -596,6 +638,16 @@ const ServerList: React.FC = () => { />
)} + + {/* 卡片模式统计信息 */} + {!loading && servers.length > 0 && viewMode === 'grid' && ( +
+ 共 {totalElements} 台服务器 + {searchKeyword && filteredServers.length > 0 && ( + ,搜索结果 {filteredServers.length} 条 + )} +
+ )}
@@ -639,7 +691,7 @@ const ServerList: React.FC = () => { description: `服务器"${serverToDelete?.serverName}"已删除`, }); setServerToDelete(null); - loadServers(); + loadServers(true); // 静默刷新 loadStats(); }} variant="destructive" diff --git a/frontend/src/pages/Resource/Server/List/service.ts b/frontend/src/pages/Resource/Server/List/service.ts index 9f9c528b..c4ffcd1a 100644 --- a/frontend/src/pages/Resource/Server/List/service.ts +++ b/frontend/src/pages/Resource/Server/List/service.ts @@ -65,6 +65,16 @@ export const batchDeleteServerCategories = (ids: number[]) => // ==================== 服务器 ==================== +/** + * 获取服务器列表(不分页) + */ +export const getServerList = (params?: { + categoryId?: number; + status?: string; + osType?: string; +}) => + request.get(`${SERVER_URL}/list`, { params }); + /** * 获取服务器分页列表 */