fix(analysis): 统一方案名与接口错误提示
Generic Container CI/CD / test-build-publish (push) Successful in 1m2s
Frontend CI/CD v2 / build-test-publish-and-deploy (push) Successful in 1m2s

This commit is contained in:
2026-08-17 18:54:29 +08:00
parent 9e79d52dc8
commit 45def5bba3
12 changed files with 720 additions and 55 deletions
@@ -12,8 +12,16 @@ import { PlayArrow as PlayArrowIcon } from "@mui/icons-material";
import { useNotification } from "@refinedev/core";
import { NETWORK_NAME } from "@/config/config";
import { useControllableObjectState } from "@components/olmap/core/useControllableState";
import { getApiErrorMessage } from "@/lib/apiError";
import { optimizeSensorPlacement } from "./schemeApi";
import type { SensorPlacementScheme } from "./types";
import {
createSchemeName,
isSchemeNameValid,
normalizeSchemeName,
SCHEME_NAME_MAX_LENGTH,
SCHEME_NAME_PREFIXES,
} from "@utils/schemeName";
export interface OptimizationParametersState {
method: string;
@@ -27,7 +35,7 @@ export const createOptimizationParametersState =
method: "kmeans",
sensorCount: 5,
minDiameter: 5,
schemeName: "Fangan" + new Date().getTime(),
schemeName: createSchemeName(SCHEME_NAME_PREFIXES.sensorPlacement),
});
interface OptimizationParametersProps {
@@ -62,7 +70,7 @@ const OptimizationParameters: React.FC<OptimizationParametersProps> = ({
// 创建方案
const handleCreateScheme = async () => {
// 验证输入
if (!schemeName.trim()) {
if (!isSchemeNameValid(schemeName)) {
open?.({
type: "error",
message: "请输入方案名称",
@@ -90,7 +98,7 @@ const OptimizationParameters: React.FC<OptimizationParametersProps> = ({
try {
const created = await optimizeSensorPlacement({
scheme_name: schemeName,
scheme_name: normalizeSchemeName(schemeName),
sensor_type: "pressure",
method: method as "sensitivity" | "kmeans",
sensor_count: sensorCount,
@@ -102,14 +110,16 @@ const OptimizationParameters: React.FC<OptimizationParametersProps> = ({
description: `方案 "${schemeName}" 已完成优化分析`,
});
onSchemeCreated?.(created);
setFormField("schemeName", "Fangan" + new Date().getTime());
} catch (error: any) {
setFormField(
"schemeName",
createSchemeName(SCHEME_NAME_PREFIXES.sensorPlacement),
);
} catch (error) {
console.error("创建方案失败:", error);
open?.({
type: "error",
message: "创建方案失败",
description:
error.response?.data?.message || error.message || "未知错误",
description: getApiErrorMessage(error, "监测点优化请求失败"),
});
} finally {
setAnalyzing(false);
@@ -255,6 +265,13 @@ const OptimizationParameters: React.FC<OptimizationParametersProps> = ({
value={schemeName}
onChange={(e) => setFormField("schemeName", e.target.value)}
placeholder="请输入方案名称"
error={schemeName.trim().length > SCHEME_NAME_MAX_LENGTH}
helperText={
schemeName.trim().length > SCHEME_NAME_MAX_LENGTH
? `方案名称不能超过 ${SCHEME_NAME_MAX_LENGTH} 个字符`
: undefined
}
inputProps={{ maxLength: SCHEME_NAME_MAX_LENGTH }}
sx={{
"& .MuiOutlinedInput-root": {
"&:hover fieldset": {