diff --git a/apps/sn/app/(map-layout)/map/SearchModal.tsx b/apps/sn/app/(map-layout)/map/SearchModal.tsx index 74975331e..e893fc036 100644 --- a/apps/sn/app/(map-layout)/map/SearchModal.tsx +++ b/apps/sn/app/(map-layout)/map/SearchModal.tsx @@ -1,7 +1,6 @@ -import FeatureClickEventPopup from './featureClickEventPopup'; import React, { useEffect, useState } from 'react'; import axios from 'axios'; -import { UiModal, UiTable, DatePickerRange } from '@common/business_components/ui'; +import { UiModal, UiTable, DatePickerRange, SelectBox } from '@common/business_components/ui'; import { Button, Input, Label } from '@common/components'; import { UiTable2 } from '@common/business_components/ui/table/index-2'; import { UITab2 } from '@common/business_components/ui/tab/index-2'; @@ -11,8 +10,9 @@ import { SidoSigunguSelectBox } from '@/components/ui/SidoSigunguSelectBox'; import { MsSwagePplCol2, SwtrmtFcltCol2, SwtrmtPrcsZoneCol2, MsSwageMhlCol2, ExclnSewagePumpCol2, stofcbrCol2 } from './components/common/table'; import LoadingOverlay from '@/components/ui/LoadingBar'; //import { useDcTree, flattenFolders, useSggCd, useCityCd } from './components/searchModalReportApi'; -import { useDcTree,flattenFolders, useSggCd, useCityCd, addFileName, getFileDownload } from './components/searchModalReportApi'; +import { useDcTree, flattenFolders, useSggCd, useCityCd, addFileName, getFileDownload } from './components/searchModalReportApi'; import { useCityCdStore, type SelectDataType } from './commonStore'; +import { MS_SWAGE_PPL_USE_CODES, MS_SWAGE_PPL_CODES, MS_SWAGE_MHL_USE_CODES } from '../map/components/common/table'; const API_URL = `${process.env.NEXT_PUBLIC_SEWERAGE_API_URL}`; @@ -95,8 +95,10 @@ const SearchModal: React.FC = ({ const [tableCount, setTableCount] = useState(0); const [curPage, setCurPage] = useState(1); const [basicType, setBasicType] = useState(BASIC_TYPES[0]?.val ?? ""); - const [ctpvCd, setCtpvCd] = useState('0'); - const [sigungu, setSigungu] = useState('0'); + const [시도, set시도] = useState(0); + const [시군구, set시군구] = useState(0); + const [ctpvCd, setCtpvCd] = useState('0'); + const [sigungu, setSigungu] = useState('0'); //const [swageProcessingZone, set처리구역] = useState(""); const [gubun, setGubun] = useState(""); // 하수정비기본계획 report // 날짜 상태 선언 @@ -104,8 +106,8 @@ const SearchModal: React.FC = ({ const [시작2, set시작2] = useState(""); const [종료1, set종료1] = useState(""); const [종료2, set종료2] = useState(""); - const [변수1, set변수1] = useState(""); - const [변수2, set변수2] = useState(""); + const [변수1, set변수1] = useState(""); + const [변수2, set변수2] = useState(""); const [변수3, set변수3] = useState(""); const [변수4, set변수4] = useState(""); // 시작, 종료, 경과년도 @@ -121,7 +123,7 @@ const SearchModal: React.FC = ({ const [가동개시_종료_일, set가동개시_종료_일] = useState(''); const [fromDate, setFromDate] = useState(() => { const date = new Date(); date.setDate(date.getDate() - 7); return date }) const [toDate, setToDate] = useState(new Date()) - const [filteredSiguns, setFilteredSiguns] = useState([{ val: '0', text: '전체', sido: '0' }]); + const [filteredSiguns, setFilteredSiguns] = useState([{ val: '0', text: '전체', sido: '0' }]); // 로딩바 const [isLoading, setIsLoading] = useState(false); @@ -129,7 +131,7 @@ const SearchModal: React.FC = ({ const sidos = useCityCd(); const siguns = useSggCd(); const reportOriginData = useDcTree(""); //:Folder[] - + // 오늘 날짜 구하기 const today = new Date(); const todayYear = today.getFullYear().toString(); @@ -162,7 +164,7 @@ const SearchModal: React.FC = ({ else if (basicType === 'tb_ms_swage_pmstn') dynamicHeadlist = ExclnSewagePumpCol2; // 하수펌프장 else if (basicType === 'tb_ms_stofcbr') dynamicHeadlist = stofcbrCol2; // 우수토실 - + // 조회 버튼 클릭 시 1페이지로 이동하도록 수정 const handleSearch = () => { setCurPage(1); // 페이지를 1로 초기화 @@ -187,17 +189,17 @@ const SearchModal: React.FC = ({ } }; - const handleCtpvCdChange = (val: string|number) => { // 하수도정비기본계획.시도 + const handleCtpvCdChange = (val: string | number) => { // 하수도정비기본계획.시도 const sidoOption = sidos.find((n) => n.val === val); setCtpvCd(String(val)); if (val !== '0') { const filterSiguns = siguns.filter(item => item.sido === sidoOption?.text); - filterSiguns.unshift({ val: '0', text: '전체', sido: '0' }); + filterSiguns.unshift({ val: '0', text: '전체', sido: '0' }); setFilteredSiguns(filterSiguns); - } + } setSigungu("0"); setGubun(""); - setYearFilter({시작: "",종료: "",}); + setYearFilter({ 시작: "", 종료: "", }); } useEffect(() => { @@ -215,6 +217,8 @@ const SearchModal: React.FC = ({ set가동개시_종료_월(""); set가동개시_시작_일(""); set가동개시_종료_일(""); + set시도(0); + set시군구(0); setCtpvCd('0'); setSigungu('0'); setYearFilter({ @@ -237,7 +241,7 @@ const SearchModal: React.FC = ({ } }, [curPage]); - + // 검색 API 호출 함수 const fetchFilteredData = async () => { setIsLoading(true); // 로딩 시작 @@ -248,6 +252,7 @@ const SearchModal: React.FC = ({ size: '10', sort: 'string', }); + console.log('basicType', basicType); let cqlFilters: string[] = []; if (activeTab === 'basic') { @@ -272,27 +277,27 @@ const SearchModal: React.FC = ({ if (ctpvCd !== "0") { // 시도검색 const sidoOption = sidos.find((n) => n.val === ctpvCd); filterReportData = filterReportData.filter(item => item.sido === sidoOption?.text); - } + } if (sigungu !== "0") { // 시군구검색 const sigunguOption = filteredSiguns.find((n) => n.val === sigungu); filterReportData = filterReportData.filter(item => item.sigungu === sigunguOption?.text); } if (yearFilter.시작 != "" && yearFilter.종료 == "") //승인년도검색 - filterReportData = filterReportData.filter(item => (item.approvalYear)? item.approvalYear >= yearFilter.시작+"년" : null); - if (yearFilter.시작 == "" && yearFilter.종료 != "") - filterReportData = filterReportData.filter(item => (item.approvalYear)? item.approvalYear <= yearFilter.종료+"년" : null); + filterReportData = filterReportData.filter(item => (item.approvalYear) ? item.approvalYear >= yearFilter.시작 + "년" : null); + if (yearFilter.시작 == "" && yearFilter.종료 != "") + filterReportData = filterReportData.filter(item => (item.approvalYear) ? item.approvalYear <= yearFilter.종료 + "년" : null); if (yearFilter.시작 != "" && yearFilter.종료 != "") { filterReportData = filterReportData.filter(item => { - return (item.approvalYear)? item.approvalYear >= yearFilter.시작+"년" && item.approvalYear <= yearFilter.종료+"년": null; + return (item.approvalYear) ? item.approvalYear >= yearFilter.시작 + "년" && item.approvalYear <= yearFilter.종료 + "년" : null; }); } if (gubun !== "") { // 구분검색 - filterReportData = filterReportData.filter(item => (item.plantZoneGugun)? String(item.plantZoneGugun).includes(String(gubun)) : null); + filterReportData = filterReportData.filter(item => (item.plantZoneGugun) ? String(item.plantZoneGugun).includes(String(gubun)) : null); } console.log('report count:', filterReportData.length); setTableCount(filterReportData.length || 0); - filterReportData = filterReportData.slice((curPage-1)*10, curPage*10); // paging - filterReportData = filterReportData?.map((item, index)=>({...item, no:(curPage-1)*10+index+1})); + filterReportData = filterReportData.slice((curPage - 1) * 10, curPage * 10); // paging + filterReportData = filterReportData?.map((item, index) => ({ ...item, no: (curPage - 1) * 10 + index + 1 })); //const fileList = await getDcFile("CLS20250530000041"); addFileName(filterReportData).then(data => { filterReportData = data; @@ -378,6 +383,11 @@ const SearchModal: React.FC = ({ cqlFilters.push(`fclt_cpct BETWEEN ${시작1} AND ${종료1}`); else if (시작1) cqlFilters.push(`fclt_cpct >= ${시작1}`); else if (종료1) cqlFilters.push(`fclt_cpct <= ${종료1}`); + // 처리구역 면적 + if (시작2 && 종료2) + cqlFilters.push(`prcsZoneAreaSum BETWEEN ${시작2} AND ${종료2}`); + else if (시작2) cqlFilters.push(`prcsZoneAreaSum >= ${시작2}`); + else if (종료2) cqlFilters.push(`prcsZoneAreaSum <= ${종료2}`); // 하수처리시설명 if (변수1) cqlFilters.push(`swtrmt_fclt_nm ILIKE '%${변수1}%'`); return cqlFilters; @@ -386,8 +396,8 @@ const SearchModal: React.FC = ({ // 하수처리구역용 CQL 필터 생성 const zoneCqlFilters = () => { const cqlFilters: string[] = []; - if (ctpvCd) cqlFilters.push(`ctpv_cd='${ctpvCd}'`); - if (sigungu) cqlFilters.push(`sgg_cd='${sigungu}'`); + if (시도) cqlFilters.push(`ctpv_cd='${시도}'`); + if (시군구) cqlFilters.push(`sgg_cd='${시군구}'`); if (변수1) cqlFilters.push(`swtrmt_zone_nm ILIKE '%${변수1}%'`); if (변수2) cqlFilters.push(`swtrmt_fclt_nm ILIKE '%${변수2}%'`); return cqlFilters; @@ -412,8 +422,7 @@ const SearchModal: React.FC = ({ cqlFilters.push( `instl_ymd >= '${startDate}' and instl_ymd <= '${endDate}'`, ); - // if (변수1) cqlFilters.push(`경과년도='${변수1}'`); - if (변수2) cqlFilters.push(`usg_cd='${변수2}'`); + if (변수1) cqlFilters.push(`usg_cd='${변수1}'`); // 구경(mm) 범위 if (시작1 && 종료1) cqlFilters.push(`swage_mh_diam BETWEEN ${시작1} AND ${종료1}`); else if (시작1) cqlFilters.push(`swage_mh_diam >= ${시작1}`); @@ -447,7 +456,7 @@ const SearchModal: React.FC = ({ cqlFilters.push(`daily_prcs_cpct BETWEEN ${시작1} AND ${종료1}`); else if (시작1) cqlFilters.push(`daily_prcs_cpct >= ${시작1}`); else if (종료1) cqlFilters.push(`daily_prcs_cpct <= ${종료1}`); - // 우수양수능력 범위 + // 양수능력 범위 if (시작2 && 종료2) cqlFilters.push(`excln_wpmp_ablt BETWEEN ${시작2} AND ${종료2}`); else if (시작2) cqlFilters.push(`excln_wpmp_ablt >= ${시작2}`); @@ -514,7 +523,7 @@ const SearchModal: React.FC = ({ // 설치년도 범위 if (ctpvCd) cqlFilters.push(`ctpv_cd='${ctpvCd}'`); if (sigungu) cqlFilters.push(`sgg_cd='${sigungu}'`); - + return cqlFilters; }; @@ -583,38 +592,32 @@ const SearchModal: React.FC = ({ }} /> */} - {/* 용도코드 */} - - { - // 숫자만 입력 허용 - const val = e.target.value.replace(/[^0-9]/g, ""); - set변수1(val); + onSelectValue={(val) => { + set변수1(String(val)); }} /> - {/* 재질코드 */} - - { - // 숫자만 입력 허용 - const val = e.target.value.replace(/[^0-9]/g, ""); - set변수2(val); + onSelectValue={(val) => { + set변수2(String(val)); }} />
{/* 행정읍면동코드 */} -
+
+ {/* 처리구역 면적 */} + + { + // 숫자만 입력 허용 + const val = e.target.value.replace(/[^0-9]/g, ""); + set시작2(val); + }} + /> + ~ + { + // 숫자만 입력 허용 + const val = e.target.value.replace(/[^0-9]/g, ""); + set종료2(val); + }} + /> {/* 하수처리시설명 */}