import { useState } from 'react' import { ComboBox } from '@common/components/ui/ComboBox' interface HNSLeftPanelProps { activeSubTab: 'analysis' | 'list' onSubTabChange: (tab: 'analysis' | 'list') => void incidentCoord: { lon: number; lat: number } onCoordChange: (coord: { lon: number; lat: number }) => void onMapSelectClick: () => void onRunPrediction: () => void isRunningPrediction: boolean } export function HNSLeftPanel({ activeSubTab, // eslint-disable-next-line @typescript-eslint/no-unused-vars onSubTabChange, incidentCoord, onCoordChange, onMapSelectClick, onRunPrediction, isRunningPrediction }: HNSLeftPanelProps) { const [accidentName, setAccidentName] = useState('울산 온산항 톨루엔 누출') const [predictionTime, setPredictionTime] = useState('24시간') const [locationName, setLocationName] = useState('울산 온산항 제3부두') const [materialCategory, setMaterialCategory] = useState('인화성 액체') const [substance, setSubstance] = useState('톨루엔 (Toluene)') const [unNumber] = useState('UN 1294') const [casNumber] = useState('108-88-3') const [amount, setAmount] = useState('12.0') const [unit, setUnit] = useState('kL') const [releaseType, setReleaseType] = useState('연속 유출') const [algorithm, setAlgorithm] = useState('ALOHA (EPA)') const [criteriaModel, setCriteriaModel] = useState('AEGL') const handleReset = () => { setAccidentName('울산 온산항 톨루엔 누출') setPredictionTime('24시간') setLocationName('울산 온산항 제3부두') setMaterialCategory('인화성 액체') setSubstance('톨루엔 (Toluene)') setAmount('12.0') setUnit('kL') setReleaseType('연속 유출') setAlgorithm('ALOHA (EPA)') setCriteriaModel('AEGL') onCoordChange({ lon: 129.3542, lat: 35.4215 }) } return (
{/* Scrollable Content */}
{activeSubTab === 'analysis' && (
{/* Header */}
🧪
HNS 대기확산 예측
ALOHA/CAMEO 기반 대기확산 시뮬레이션
{/* Single Column Layout */}
{/* 사고 기본정보 */}
📋 사고 기본정보
{/* 사고명 */}
setAccidentName(e.target.value)} />
{/* 사고일시 + 예측시간 */}
{/* 사고지점 */}
onCoordChange({ ...incidentCoord, lat: parseFloat(e.target.value) || 0 })} />
onCoordChange({ ...incidentCoord, lon: parseFloat(e.target.value) || 0 })} />
setLocationName(e.target.value)} />
{/* 기상 정보 */}
🌬 기상정보 (자동조회)
KMA API · 울산 AWS
5.2
풍속(m/s)
SW 225°
풍향
8.5°C
기온
62%
습도
대기안정도 D (중립)
지표 조도 해안
{/* 알고리즘 선택 */}
{/* 물질 정보 */}
🧪 물질 정보
{/* 물질 분류 */}
{/* 물질명 */}
{/* UN번호 / CAS번호 */}
{/* 유출량 + 단위 */}
setAmount(e.target.value)} step="0.1" />
{/* 유출 형태 */}
{/* 물질 위험 특성 */}
⚠ 물질 위험 특성
인화점 4°C
비중 0.867
증기압 22 mmHg
IDLH 500 ppm
TWA 50 ppm
AEGL-2(1h) 150 ppm
{/* AEGL 등급 범례 */}
📊 확산 등급 기준 (AEGL)
AEGL-3 (생명위협) — 500 ppm
AEGL-2 (건강피해) — 150 ppm
AEGL-1 (불쾌감) — 37 ppm
{/* 실행 버튼 */}
)} {activeSubTab === 'list' && (
{/* Header */}
📋
분석 목록
저장된 대기확산 예측 결과
{/* 필터 섹션 */}
🔍 필터
{/* 기간 선택 */}
{}} options={[ { value: '오늘', label: '오늘' }, { value: '최근 7일', label: '최근 7일' }, { value: '최근 30일', label: '최근 30일' }, { value: '전체', label: '전체' } ]} />
{/* 물질 분류 */}
{}} options={[ { value: '전체', label: '전체' }, { value: '유독성 액체', label: '유독성 액체' }, { value: '유독성 기체', label: '유독성 기체' }, { value: '인화성 액체', label: '인화성 액체' }, { value: '인화성 기체', label: '인화성 기체' } ]} />
{/* 위험도 */}
{}} options={[ { value: '전체', label: '전체' }, { value: 'AEGL-3', label: 'AEGL-3' }, { value: 'AEGL-2', label: 'AEGL-2' }, { value: 'AEGL-1', label: 'AEGL-1' } ]} />
{/* 통계 요약 */}
📊 통계
전체 분석 8건
고위험 (AEGL-3) 3건
중위험 (AEGL-2) 5건
)}
) }