diff --git a/src/app/OlMap/Controls/HistoryDataPanel.tsx b/src/app/OlMap/Controls/HistoryDataPanel.tsx index ddb988d..813b110 100644 --- a/src/app/OlMap/Controls/HistoryDataPanel.tsx +++ b/src/app/OlMap/Controls/HistoryDataPanel.tsx @@ -1,6 +1,14 @@ "use client"; -import React, { useCallback, useEffect, useMemo, useState } from "react"; +import React, { + useCallback, + useEffect, + useMemo, + useRef, + useState, +} from "react"; +import Draggable from "react-draggable"; + import { Box, Button, @@ -294,6 +302,7 @@ const SCADADataPanel: React.FC = ({ const [selectedSource, setSelectedSource] = useState< "raw" | "clean" | "sim" | "all" >(() => (deviceIds.length === 1 ? "all" : "clean")); + const draggableRef = useRef(null); // 获取 SCADA 设备信息,生成 deviceLabels useEffect(() => { @@ -648,214 +657,216 @@ const SCADADataPanel: React.FC = ({ return ( <> {/* 主面板 */} - + - {/* Header */} - - - - - 历史数据 - - - - - - - {/* Controls */} - - - + - { - if (value && dayjs.isDayjs(value) && value.isValid()) { - setFrom(value); - } - }} - onAccept={(value) => { - if ( - value && - dayjs.isDayjs(value) && - value.isValid() && - hasDevices - ) { - handleFetch("date-change"); - } - }} - maxDateTime={to} - slotProps={{ - textField: { fullWidth: true, size: "small" }, - }} - /> - { - if (value && dayjs.isDayjs(value) && value.isValid()) { - setTo(value); - } - }} - onAccept={(value) => { - if ( - value && - dayjs.isDayjs(value) && - value.isValid() && - hasDevices - ) { - handleFetch("date-change"); - } - }} - minDateTime={from} - slotProps={{ - textField: { fullWidth: true, size: "small" }, + + + 历史数据 + + - - setActiveTab(value)} - variant="fullWidth" + + + + {/* Controls */} + + + + + { + if (value && dayjs.isDayjs(value) && value.isValid()) { + setFrom(value); + } + }} + onAccept={(value) => { + if ( + value && + dayjs.isDayjs(value) && + value.isValid() && + hasDevices + ) { + handleFetch("date-change"); + } + }} + maxDateTime={to} + slotProps={{ + textField: { fullWidth: true, size: "small" }, + }} + /> + { + if (value && dayjs.isDayjs(value) && value.isValid()) { + setTo(value); + } + }} + onAccept={(value) => { + if ( + value && + dayjs.isDayjs(value) && + value.isValid() && + hasDevices + ) { + handleFetch("date-change"); + } + }} + minDateTime={from} + slotProps={{ + textField: { fullWidth: true, size: "small" }, + }} + /> + + - } - iconPosition="start" - label="曲线" - /> - } - iconPosition="start" - label="表格" - /> - - - - - - - + setActiveTab(value)} + variant="fullWidth" + > + } + iconPosition="start" + label="曲线" + /> + } + iconPosition="start" + label="表格" + /> + + + + + + + + - - + - {!hasDevices && ( - - 未选择任何设备,无法获取数据。 - - )} - {error && ( - - 获取数据失败:{error} - - )} - + {!hasDevices && ( + + 未选择任何设备,无法获取数据。 + + )} + {error && ( + + 获取数据失败:{error} + + )} + - + - {/* Content */} - - {loadingState === "loading" && ( - - - - )} + {/* Content */} + + {loadingState === "loading" && ( + + + + )} - {activeTab === "chart" ? renderChart() : renderTable()} + {activeTab === "chart" ? renderChart() : renderTable()} + - + ); };