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={