From 315e4a7ae755a881b4f0675e832139550297c87d Mon Sep 17 00:00:00 2001
From: zhang1106 <849185023@qq.com>
Date: Sat, 20 Dec 2025 08:28:14 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9C=BA=E6=9F=9C=E5=8F=AF=E8=A7=86=E5=8C=96?=
=?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E4=BC=98=E5=8C=96=E4=BA=86=E6=9C=BA?=
=?UTF-8?q?=E6=9F=9C=E6=9C=BA=E6=88=BF=E4=B8=8B=E6=8B=89=E6=A1=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/src/pages/RackVisualization.jsx | 97 +++++++++++++++++++++---
1 file changed, 86 insertions(+), 11 deletions(-)
diff --git a/frontend/src/pages/RackVisualization.jsx b/frontend/src/pages/RackVisualization.jsx
index 0d55682..1a95d5f 100644
--- a/frontend/src/pages/RackVisualization.jsx
+++ b/frontend/src/pages/RackVisualization.jsx
@@ -89,6 +89,7 @@ class ErrorBoundary extends React.Component {
function RackVisualization() {
const [racks, setRacks] = useState([]);
const [selectedRack, setSelectedRack] = useState(null);
+ const [selectedRoom, setSelectedRoom] = useState(null);
const [loading, setLoading] = useState(true);
const [devices, setDevices] = useState([]);
const [loadingDevices, setLoadingDevices] = useState(false);
@@ -115,10 +116,20 @@ function RackVisualization() {
setRacks(validRacks);
if (validRacks.length > 0) {
- setSelectedRack(validRacks[0]);
- fetchDevices(validRacks[0].rackId);
+ // 自动选择第一个机柜
+ const firstRack = validRacks[0];
+ setSelectedRack(firstRack);
+
+ // 设置对应的机房
+ if (firstRack?.Room) {
+ const roomKey = firstRack.Room.roomId || firstRack.Room.id || firstRack.Room.name;
+ setSelectedRoom(roomKey);
+ }
+
+ fetchDevices(firstRack.rackId);
} else {
setSelectedRack(null);
+ setSelectedRoom(null);
setDevices([]);
message.warning('未找到有效的机柜数据');
}
@@ -511,6 +522,52 @@ function RackVisualization() {
return marks;
};
+ // 获取机房列表
+ const getRooms = () => {
+ const roomMap = new Map();
+ racks.forEach(rack => {
+ if (rack?.Room) {
+ const roomKey = rack.Room.roomId || rack.Room.id || rack.Room.name;
+ if (!roomMap.has(roomKey)) {
+ roomMap.set(roomKey, {
+ ...rack.Room,
+ key: roomKey
+ });
+ }
+ }
+ });
+ return Array.from(roomMap.values());
+ };
+
+ // 获取指定机房下的机柜
+ const getRacksByRoom = (roomId) => {
+ return racks.filter(rack => {
+ const rackRoomId = rack?.Room?.roomId || rack?.Room?.id;
+ return rackRoomId === roomId;
+ });
+ };
+
+ // 选择机房
+ const handleRoomChange = (roomId) => {
+ console.log('选择机房:', roomId);
+ setSelectedRoom(roomId);
+
+ // 重置机柜选择
+ setSelectedRack(null);
+ setDevices([]);
+
+ // 如果选择了机房,获取该机房下的机柜
+ if (roomId) {
+ const roomRacks = getRacksByRoom(roomId);
+ if (roomRacks.length > 0) {
+ // 自动选择第一个机柜
+ const firstRack = roomRacks[0];
+ setSelectedRack(firstRack);
+ fetchDevices(firstRack.rackId);
+ }
+ }
+ };
+
// 选择机柜
const handleRackChange = (rackId) => {
const rack = racks.find(r => r.rackId === rackId);
@@ -552,17 +609,33 @@ function RackVisualization() {
title="机柜可视化"
extra={