refactor(floorplan): 重构平面图组件与样式

- 移除未使用的编辑模式、热力图、搜索等功能
- 将样式代码抽离到独立样式文件
- 优化工具栏和缩放控制组件实现
- 添加导出图片功能
- 简化上下文状态管理
- 优化设备提示框和空状态显示
This commit is contained in:
zhang1106
2026-05-07 15:14:40 +08:00
parent c717ce30d6
commit 54b0a8e7bb
23 changed files with 564 additions and 1371 deletions
@@ -1,28 +1,33 @@
import React, { useState, useEffect, useCallback } from 'react';
import { Select, Spin } from 'antd';
import React, { useState, useEffect, useRef } from 'react';
import { Select, Spin, message } from 'antd';
import { HomeOutlined } from '@ant-design/icons';
import axios from 'axios';
import { RoomOptionContent, RoomIndicator } from '../styles';
const RoomSelector = ({ selectedRoomId, onRoomChange }) => {
const [rooms, setRooms] = useState([]);
const [loading, setLoading] = useState(false);
const fetchRooms = useCallback(async () => {
setLoading(true);
try {
const response = await axios.get('/api/rooms', { params: { pageSize: 1000 } });
setRooms(response.data.rooms || []);
if (!selectedRoomId && response.data.rooms?.length > 0) {
onRoomChange(response.data.rooms[0].roomId);
}
} catch (err) {
console.error('获取机房列表失败:', err);
} finally {
setLoading(false);
}
}, [selectedRoomId, onRoomChange]);
const hasAutoSelected = useRef(false);
useEffect(() => {
const fetchRooms = async () => {
setLoading(true);
try {
const response = await axios.get('/api/rooms', { params: { pageSize: 1000 } });
const roomList = response.data.rooms || [];
setRooms(roomList);
if (!hasAutoSelected.current && roomList.length > 0 && !selectedRoomId) {
hasAutoSelected.current = true;
onRoomChange(roomList[0].roomId);
}
} catch (err) {
message.error('获取机房列表失败');
} finally {
setLoading(false);
}
};
fetchRooms();
}, []);
@@ -36,15 +41,10 @@ const RoomSelector = ({ selectedRoomId, onRoomChange }) => {
options={rooms.map(r => ({
value: r.roomId,
label: (
<div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
<div style={{
width: 6,
height: 6,
borderRadius: '50%',
background: '#1677ff',
}} />
<RoomOptionContent>
<RoomIndicator />
{r.name}
</div>
</RoomOptionContent>
),
}))}
notFoundContent={loading ? <Spin size="small" /> : '暂无机房'}