From 939bd0fc883e986e2789a857bfb48728b3667ef6 Mon Sep 17 00:00:00 2001 From: Nan Kyung Lee Date: Mon, 16 Mar 2026 08:59:18 +0900 Subject: [PATCH] =?UTF-8?q?feat(prediction):=20KOSPS/=EC=95=99=EC=83=81?= =?UTF-8?q?=EB=B8=94=20=EC=A4=80=EB=B9=84=EC=A4=91=20=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?+=20=EA=B8=B0=EB=B3=B8=20=EB=AA=A8=EB=8D=B8=20POSEIDON=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - KOSPS 모델 클릭 시 "준비중" alert 팝업 - 앙상블 모델 클릭 시 "준비중" alert 팝업 - 기본 선택 모델을 KOSPS → POSEIDON으로 변경 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../tabs/prediction/components/OilSpillView.tsx | 4 ++-- .../components/PredictionInputSection.tsx | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/frontend/src/tabs/prediction/components/OilSpillView.tsx b/frontend/src/tabs/prediction/components/OilSpillView.tsx index 82e4d17..2ecf8e2 100755 --- a/frontend/src/tabs/prediction/components/OilSpillView.tsx +++ b/frontend/src/tabs/prediction/components/OilSpillView.tsx @@ -105,7 +105,7 @@ export function OilSpillView() { const [isSelectingLocation, setIsSelectingLocation] = useState(false) const [oilTrajectory, setOilTrajectory] = useState>([]) const [isRunningSimulation, setIsRunningSimulation] = useState(false) - const [selectedModels, setSelectedModels] = useState>(new Set(['KOSPS'])) + const [selectedModels, setSelectedModels] = useState>(new Set(['POSEIDON'])) const [predictionTime, setPredictionTime] = useState(48) const [spillType, setSpillType] = useState('연속') const [oilType, setOilType] = useState('벙커C유') @@ -163,7 +163,7 @@ export function OilSpillView() { // 분석 탭 초기 진입 시 기본 데모 자동 표시 useEffect(() => { if (activeSubTab === 'analysis' && oilTrajectory.length === 0 && !selectedAnalysis) { - const models = Array.from(selectedModels.size > 0 ? selectedModels : new Set(['KOSPS'])) + const models = Array.from(selectedModels.size > 0 ? selectedModels : new Set(['POSEIDON'])) const demoTrajectory = generateDemoTrajectory(incidentCoord, models, predictionTime) setOilTrajectory(demoTrajectory) const demoBooms = generateAIBoomLines(demoTrajectory, incidentCoord, algorithmSettings) diff --git a/frontend/src/tabs/prediction/components/PredictionInputSection.tsx b/frontend/src/tabs/prediction/components/PredictionInputSection.tsx index ea9c2c3..8770243 100644 --- a/frontend/src/tabs/prediction/components/PredictionInputSection.tsx +++ b/frontend/src/tabs/prediction/components/PredictionInputSection.tsx @@ -338,14 +338,18 @@ const PredictionInputSection = ({ {/* Model Selection (다중 선택) */}
{([ - { id: 'KOSPS' as PredictionModel, color: 'var(--cyan)' }, - { id: 'POSEIDON' as PredictionModel, color: 'var(--red)' }, - { id: 'OpenDrift' as PredictionModel, color: 'var(--blue)' }, + { id: 'KOSPS' as PredictionModel, color: 'var(--cyan)', ready: false }, + { id: 'POSEIDON' as PredictionModel, color: 'var(--red)', ready: true }, + { id: 'OpenDrift' as PredictionModel, color: 'var(--blue)', ready: true }, ] as const).map(m => (
{ + if (!m.ready) { + alert(`${m.id} 모델은 현재 준비중입니다.`) + return + } const next = new Set(selectedModels) if (next.has(m.id)) { next.delete(m.id) @@ -362,11 +366,7 @@ const PredictionInputSection = ({
{ - if (selectedModels.size === ALL_MODELS.length) { - onModelsChange(new Set(['KOSPS'])) - } else { - onModelsChange(new Set(ALL_MODELS)) - } + alert('앙상블 모델은 현재 준비중입니다.') }} >