完善监测点优化前端请求和回报状态

This commit is contained in:
JIANG
2025-11-04 09:21:31 +08:00
parent 72e046de10
commit 85d73bcd07

View File

@@ -11,15 +11,22 @@ import {
} from "@mui/material"; } from "@mui/material";
import { PlayArrow as PlayArrowIcon } from "@mui/icons-material"; import { PlayArrow as PlayArrowIcon } from "@mui/icons-material";
import { useNotification } from "@refinedev/core"; import { useNotification } from "@refinedev/core";
import { useGetIdentity } from "@refinedev/core";
import axios from "axios"; import axios from "axios";
import { config, NETWORK_NAME } from "@/config/config"; import { config, NETWORK_NAME } from "@/config/config";
type IUser = {
id: number;
name: string;
};
const OptimizationParameters: React.FC = () => { const OptimizationParameters: React.FC = () => {
const { open } = useNotification(); const { open } = useNotification();
const { data: user } = useGetIdentity<IUser>();
// 表单状态 // 表单状态
const [sensorType, setSensorType] = useState<string>("压力"); const [sensorType, setSensorType] = useState<string>("pressure");
const [method, setMethod] = useState<string>("聚类分析"); const [method, setMethod] = useState<string>("kmeans");
const [sensorCount, setSensorCount] = useState<number>(5); const [sensorCount, setSensorCount] = useState<number>(5);
const [minDiameter, setMinDiameter] = useState<number>(5); const [minDiameter, setMinDiameter] = useState<number>(5);
const [schemeName, setSchemeName] = useState<string>( const [schemeName, setSchemeName] = useState<string>(
@@ -30,16 +37,23 @@ const OptimizationParameters: React.FC = () => {
// 传感器类型选项 // 传感器类型选项
const sensorTypeOptions = [ const sensorTypeOptions = [
{ value: "压力", label: "压力" }, { value: "pressure", label: "压力" },
{ value: "流量", label: "流量" }, { value: "flow", label: "流量" },
]; ];
// 方法选项 // 方法选项
const methodOptions = [ const methodOptions = [
{ value: "聚类分析", label: "聚类分析" }, { value: "kmeans", label: "聚类分析" },
{ value: "灵敏度分析", label: "灵敏度分析" }, { value: "sensitivity", label: "灵敏度分析" },
]; ];
// 获取传感器类型的中文标签
const getSensorTypeLabel = (value: string) => {
return (
sensorTypeOptions.find((option) => option.value === value)?.label || value
);
};
// 创建方案 // 创建方案
const handleCreateScheme = async () => { const handleCreateScheme = async () => {
// 验证输入 // 验证输入
@@ -69,28 +83,40 @@ const OptimizationParameters: React.FC = () => {
setAnalyzing(true); setAnalyzing(true);
try { if (!user || !user.name) {
// 构建请求参数 open?.({
const requestData = { type: "error",
network: network, message: "用户信息无效",
scheme_name: schemeName, });
sensor_type: sensorType, return;
method: method, }
sensor_count: sensorCount,
min_diameter: minDiameter,
};
try {
// 发送优化请求 // 发送优化请求
const response = await axios.post( const response = await axios.post(
`${config.backendUrl}/monitoring-optimization/create`, `${config.backendUrl}/sensorplacementscheme/create`,
requestData null,
{
params: {
network: network,
scheme_name: schemeName,
sensor_type: sensorType,
method: method,
sensor_count: sensorCount,
min_diameter: minDiameter,
user_name: user.name,
},
}
); );
if (response.data && response.data.success) { console.log("响应数据:", response.data); // 添加日志以便调试
// 兼容后端返回字符串 "success" 或对象 { success: true }
if (response.data.success === true || response.data === "success") {
open?.({ open?.({
type: "success", type: "success",
message: "方案创建成功", message: "方案创建成功",
description: `方案 "${schemeName}" 已提交优化分析`, description: `方案 "${schemeName}" 已完成优化分析`,
}); });
// 重置方案名称 // 重置方案名称
@@ -193,7 +219,9 @@ const OptimizationParameters: React.FC = () => {
type="number" type="number"
value={sensorCount} value={sensorCount}
onChange={(e) => setSensorCount(parseInt(e.target.value) || 0)} onChange={(e) => setSensorCount(parseInt(e.target.value) || 0)}
inputProps={{ min: 1 }} slotProps={{
htmlInput: { min: 1 },
}}
sx={{ sx={{
"& .MuiOutlinedInput-root": { "& .MuiOutlinedInput-root": {
"&:hover fieldset": { "&:hover fieldset": {
@@ -213,7 +241,7 @@ const OptimizationParameters: React.FC = () => {
variant="subtitle2" variant="subtitle2"
className="mb-2 font-semibold text-gray-700" className="mb-2 font-semibold text-gray-700"
> >
{sensorType} {getSensorTypeLabel(sensorType)}
</Typography> </Typography>
<TextField <TextField
fullWidth fullWidth
@@ -221,7 +249,9 @@ const OptimizationParameters: React.FC = () => {
type="number" type="number"
value={minDiameter} value={minDiameter}
onChange={(e) => setMinDiameter(parseInt(e.target.value) || 0)} onChange={(e) => setMinDiameter(parseInt(e.target.value) || 0)}
inputProps={{ min: 0 }} slotProps={{
htmlInput: { min: 0 },
}}
sx={{ sx={{
"& .MuiOutlinedInput-root": { "& .MuiOutlinedInput-root": {
"&:hover fieldset": { "&:hover fieldset": {