// 우수토실 import { UiModal, UiTable } from '@common/business_components/ui'; import { Button, TableHead, TableRow } from '@common/components/ui'; import React, { useState, useEffect, useCallback } from 'react'; import { untrtSwgRainCol3, untrtSwgRainCol4, untrtSwgRainCol5 } from '../common/table'; import { VerticalTable } from '@/components/ui/verticalTable'; import { getData } from "@/components/lib/api"; import { formatDisplayData } from '@/components/lib/utils/formatDisplayValue'; import { Label } from '@radix-ui/react-label'; const inputColumn = [ { id: "prrtymngYn", title: "중점여부", type: "select", options: ["우수토실", "중점우수토실"] }, { id: "swtrmtZoneNm", title: "처리구역", type: "input" }, ]; const Ssc = ({ featureData, isMainSsc, chmbrXcnts, chmbrYdnts, onSaveClick }: { featureData: any, isMainSsc?: boolean, chmbrXcnts?: string, chmbrYdnts?: string, onSaveClick?: () => void }) => { const [isModalOpen, setIsModalOpen] = useState(false); const [isDataLoaded, setIsDataLoaded] = useState(false); const [formData, setFormData] = useState({}); const [rainMeasureData, setRainMeasureData] = useState({}); // 강우, 측정 정보 const [mntrngsData, setMntrngsData] = useState([]); // 수량/수질측정 정보 const [totalCount, setTotalCount] = useState(0); const [totalDetailCount, setTotalDetailCount] = useState(0); const [selectedRowIndex, setSelectedRowIndex] = useState(-1); const [curPage, setCurPage] = useState(1); const [curDetailPage, setCurDetailPage] = useState(1); const [isResetPage, setIsResetPage] = useState(true); const [isResetDetailPage, setIsResetDetailPage] = useState(true); const [isResetSelection, setIsResetSelection] = useState(false); console.log('featureData', featureData); // 강우, 측정 정보 API 호출 함수 const fetchRainMeasureData = async (chmbrXcnts: string, chmbrYdnts: string) => { setIsResetDetailPage(true); setIsResetSelection(true); if (!chmbrXcnts || !chmbrYdnts) { console.warn('추가 데이터 호출 실패: 필수 매개변수 누락', { chmbrXcnts, chmbrYdnts }); return []; } try { const queryParams = new URLSearchParams({ chmbrXcnts: chmbrXcnts, chmbrYdnts: chmbrYdnts, page: `${curPage - 1}`, size: '3', }); console.log('queryParams', queryParams.toString()); console.log(`추가 데이터 API 호출 시작: v1/onsemiro/getSwgRainsByGeomety?${queryParams.toString()}`); const result = await getData(`v1/onsemiro/getSwgRainsByGeomety?${queryParams.toString()}`); console.log('추가 데이터 API 호출 성공:', result); const processedDataArray: any[] = result.content.map((data: any) => { // 🎯 formatDisplayData로 기본 포맷팅 적용 const formattedItem = formatDisplayData(data); // 🎯 추가 데이터 조합 return { ...formattedItem, flwmtrCombined: `${data.flwmtrMesureTpEtc || '-'} / ${data.flwmtrKnd || '-'}`, }; }); setRainMeasureData(processedDataArray); setTotalCount(result?.totalElements || 0); } catch (error) { console.error('추가 데이터 로딩 실패:', error); return []; } }; // 수량/수질측정 정보 API 호출 함수 const fetchMntrngsData = async (adstDstrCd: string, manageNo: string) => { setIsResetDetailPage(true); if (!adstDstrCd || !manageNo) { console.warn('추가 데이터 호출 실패: 필수 매개변수 누락', { adstDstrCd, manageNo }); return []; } try { const queryParams = new URLSearchParams({ page: `${curDetailPage - 1}`, size: '3', }); console.log(`SSC 추가 데이터 API 호출 시작: v1/onsemiro/swgRain/${adstDstrCd}/${manageNo}/mntrngs?${queryParams.toString()}`); const result = await getData(`v1/onsemiro/swgRain/${adstDstrCd}/${manageNo}/mntrngs?${queryParams.toString()}`); console.log('SSC 추가 데이터 API 호출 성공:', result); // 각 아이템 전처리 const processedDataArray = result.content.map((data: any) => { // 기본 포맷팅 적용 const formattedItem = formatDisplayData(data); return { ...formattedItem, }; }); console.log('processedDataArray', processedDataArray); setMntrngsData(processedDataArray); setTotalDetailCount(result?.totalElements || 0); } catch (error) { console.error('추가 데이터 로딩 실패:', error); return []; } }; // 🎯 추가 데이터는 별도 useEffect로 비동기 로딩 useEffect(() => { // 강우/측정 정보 데이터 호출 if (isMainSsc && chmbrXcnts && chmbrYdnts) { fetchRainMeasureData(chmbrXcnts, chmbrYdnts) } }, [chmbrXcnts, chmbrYdnts]); const openModal = () => { setIsModalOpen(true); }; const closeModal = () => { setIsModalOpen(false); if (!isDataLoaded) { setTimeout(() => setIsDataLoaded(true), 100); } }; // featureData가 변경될 때 formData 초기화 useEffect(() => { if (featureData) { setFormData(featureData); setMntrngsData([]); } }, [featureData]); // featureData가 변경될 때 formData 초기화 useEffect(() => { // showTable이 true일 때만 fetch (최초 렌더 방지) setIsResetDetailPage(false); setSelectedRowIndex(-1); if (chmbrXcnts && chmbrYdnts) fetchRainMeasureData(chmbrXcnts, chmbrYdnts); }, [curPage]); // 페이지 변경 시마다 데이터 fetch useEffect(() => { if (chmbrXcnts && chmbrYdnts && selectedRowIndex !== -1) fetchMntrngsData(rainMeasureData[selectedRowIndex].adstDstrCd, rainMeasureData[selectedRowIndex].manageNo); }, [curDetailPage]); // 폼 데이터가 변경될 때 호출될 핸들러 const handleFormDataChange = (newFormData: any) => { setFormData(newFormData); }; // 저장 버튼 클릭 시 최신 formData를 부모에게 전달 const handleSaveClick = () => { if (onSaveClick) { // 저장 전에 formData를 부모 컴포넌트의 handleSaveClick에 전달 onSaveClick(); } }; // 테이블 셀 클릭 핸들러 추가 const handleCellClick = async (index: number | undefined, headId: string) => { if (index !== undefined && rainMeasureData) { await fetchMntrngsData(rainMeasureData[index].adstDstrCd, rainMeasureData[index].manageNo); setSelectedRowIndex(index); } }; const renderModalBody = () => (
{/* 강우정보 테이블 */} {/* 측정정보 테이블 */} {/* 커스텀 헤더 */} 수량 수질 측정시작일시 측정종료일시 측정간격(분) 측정기기설치위치 유량계 종류 및 모델명 채수시작일시 채수종료일시 채수횟수
{/* 수량/수질측정 정보 테이블 */}
) return (
{!isMainSsc && ( )} {isMainSsc && (

중점우수토실 운영정보

)}
) } export default Ssc