From 4adbcc1c4cebda51d151b9826c15234bc01299df Mon Sep 17 00:00:00 2001 From: Huarch Date: Fri, 17 Jul 2026 11:45:58 +0800 Subject: [PATCH] fix(dma): defer leakage flow validation --- .../DMALeakDetection/AnalysisParameters.tsx | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/components/olmap/DMALeakDetection/AnalysisParameters.tsx b/src/components/olmap/DMALeakDetection/AnalysisParameters.tsx index cf3a1d1..c79b8a6 100644 --- a/src/components/olmap/DMALeakDetection/AnalysisParameters.tsx +++ b/src/components/olmap/DMALeakDetection/AnalysisParameters.tsx @@ -74,18 +74,31 @@ const AnalysisParameters: React.FC = ({ advancedOpen, } = parametersState; const [running, setRunning] = useState(false); + const [qSumInput, setQSumInput] = useState(() => String(qSum)); + React.useEffect(() => { + setQSumInput(String(qSum)); + }, [qSum]); + + const parsedQSum = Number(qSumInput); + const qSumIsValid = + qSumInput.trim() !== "" && Number.isFinite(parsedQSum) && parsedQSum >= 360; const isValid = useMemo(() => { if (!schemeName.trim() || !startTime || !endTime) return false; - return startTime.isBefore(endTime) && qSum >= 360; - }, [schemeName, startTime, endTime, qSum]); + return startTime.isBefore(endTime) && qSumIsValid; + }, [schemeName, startTime, endTime, qSumIsValid]); const handleRun = async () => { if (!isValid || !startTime || !endTime) { - open?.({ type: "error", message: "请完善参数并确认时间范围合法" }); + open?.({ + type: "error", + message: "请完善参数并确认时间范围合法", + description: !qSumIsValid ? `总漏损流量需不小于 360 ${FLOW_DISPLAY_UNIT}` : undefined, + }); return; } + setFormField("qSum", parsedQSum); setRunning(true); open?.({ key: "dma-leak-analysis-progress", @@ -213,12 +226,22 @@ const AnalysisParameters: React.FC = ({ { - const value = Number(e.target.value); - setFormField("qSum", Number.isNaN(value) ? 1440 : Math.max(360, value)); + const rawValue = e.target.value; + setQSumInput(rawValue); + const value = Number(rawValue); + if (rawValue.trim() !== "" && Number.isFinite(value)) { + setFormField("qSum", value); + } }} inputProps={{ min: 360, step: 10 }} + error={qSumInput.trim() !== "" && !qSumIsValid} + helperText={ + qSumInput.trim() !== "" && !qSumIsValid + ? `需不小于 360 ${FLOW_DISPLAY_UNIT}` + : " " + } />