From 8c2bdc65eb8d176c4edb5bc798f9f30bacd6b386 Mon Sep 17 00:00:00 2001 From: ljpark Date: Sun, 27 Jul 2025 17:09:25 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B9=A8=EC=9E=85=EC=88=98,RDII=20=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=ED=94=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../popupComponent/chart/infilChart.tsx | 4 +-- .../popupComponent/chart/rdiiChart.tsx | 6 ++-- .../map/searchModal/reportTab.tsx | 28 +++++++++++-------- .../map/searchModal/searchModal.tsx | 18 +++++++++--- .../searchModalReportApi.ts | 20 +++++++++---- .../src/ui/select/index.tsx | 4 ++- 6 files changed, 54 insertions(+), 26 deletions(-) rename apps/sn/app/(map-layout)/map/{components => searchModal}/searchModalReportApi.ts (90%) diff --git a/apps/sn/app/(map-layout)/map/components/popupComponent/chart/infilChart.tsx b/apps/sn/app/(map-layout)/map/components/popupComponent/chart/infilChart.tsx index 111b8f1af..542156c2a 100644 --- a/apps/sn/app/(map-layout)/map/components/popupComponent/chart/infilChart.tsx +++ b/apps/sn/app/(map-layout)/map/components/popupComponent/chart/infilChart.tsx @@ -162,7 +162,7 @@ const InfilChart = ({ pplMngNo }: ModalOpenProp) => { ● 침입수량 산정결과
침입수량 : - {inftwtQty} + {inftwtQty} m³/d
@@ -170,7 +170,7 @@ const InfilChart = ({ pplMngNo }: ModalOpenProp) => { {/* 차트 */}
+ yFieldText2="" yFieldText="유량(m³/h)"/>
{popupOpen && ( diff --git a/apps/sn/app/(map-layout)/map/components/popupComponent/chart/rdiiChart.tsx b/apps/sn/app/(map-layout)/map/components/popupComponent/chart/rdiiChart.tsx index 0270b8dec..b788b9cf6 100644 --- a/apps/sn/app/(map-layout)/map/components/popupComponent/chart/rdiiChart.tsx +++ b/apps/sn/app/(map-layout)/map/components/popupComponent/chart/rdiiChart.tsx @@ -161,17 +161,17 @@ const RdiiChart = ({ pplMngNo }: ModalOpenProp) => { ● 강우유입수량 분석결과
평균RDII : - {rdiiQty} + {rdiiQty} m³/d
적용강우량 : - {rainTotal} + {rainTotal} mm
강우량대비RDII : - {totalVolume} + {totalVolume} m³/mm
diff --git a/apps/sn/app/(map-layout)/map/searchModal/reportTab.tsx b/apps/sn/app/(map-layout)/map/searchModal/reportTab.tsx index 0459cee1d..bdf718578 100644 --- a/apps/sn/app/(map-layout)/map/searchModal/reportTab.tsx +++ b/apps/sn/app/(map-layout)/map/searchModal/reportTab.tsx @@ -2,10 +2,9 @@ import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox'; import { SelectBox } from '@common/business_components/ui'; import { Button, Input } from '@common/components'; import React from 'react'; -//import { useDcTree, flattenFolders, useSggCd, useCityCd } from './components/searchModalReportApi'; +import { reportGubuns } from './searchModalReportApi'; import { type SelectDataType } from '../commonStore'; import { useCityCd, useSggCd } from '../components/searchModalReportApi'; -// import { useBizByFcltStore } from "../../../store/StoreProvider"; // // 하수도정비 기본계획 보고서 @@ -28,13 +27,11 @@ interface BasicTabProps { ctpvCd: string | number; sigungu: string; filteredSiguns: SelectDataType[]; + reportGubun: string; + setReportGubun: (gubun: string) => void; yearFilter: { start: string; end: string; }; handleSearch: () => void; handleCtpvCdChange: (val: string | number) => void; - // onOpenChange?: (open: boolean) => void; - // onFeatureSelect?: (row: any) => void; - // setTableData?: (data: any[]) => void; - // setTableCount?: (count: number) => void; setYearFilter: (filter: { start: string; end: string }) => void; setGubun: (gubun: string) => void; setSigungu: (sigungu: string) => void; @@ -48,12 +45,10 @@ const ReportTab: React.FC = ({ sigungu, filteredSiguns = [{ val: '0', text: '전체', sido: '0' }], yearFilter, + reportGubun, + setReportGubun, handleSearch, handleCtpvCdChange, - // onOpenChange, - // onFeatureSelect, - // setTableData, - // setTableCount, setYearFilter, setGubun, setSigungu, @@ -83,13 +78,24 @@ const ReportTab: React.FC = ({ />
- + {/* { setGubun(e.target.value); }} + /> */} + setReportGubun(String(val))} + selectContentClass="z-[101]" + labelClass='whitespace-nowrap text-xl text-gray-600 pr-2' /> + {/* 승인년도 필터 */} = ({ const [detailBizId, setDetailBizId] = useState(0); const [city, setCity] = useState(0); const [sgg, setSgg] = useState(0); - const [ctpvCd, setCtpvCd] = useState('0'); - const [sigungu, setSigungu] = useState('0'); - const [gubun, setGubun] = useState(""); // 하수정비기본계획 report + const [ctpvCd, setCtpvCd] = useState('0'); // 하수정비기본계획 report + const [sigungu, setSigungu] = useState('0'); // 하수정비기본계획 report + const [gubun, setGubun] = useState(""); // 하수정비기본계획 report + const [reportGubun, setReportGubun] = useState("0"); // 하수정비기본계획 report const [start1, setStart1] = useState(""); const [start2, setStart2] = useState(""); const [end1, setEnd1] = useState(""); @@ -83,6 +84,7 @@ const SearchModal: React.FC = ({ const [yearFilter, setYearFilter] = useState({ start: "", end: "" }); const [filteredSiguns, setFilteredSiguns] = useState([{ val: '0', text: '전체', sido: '0' }]); + // 하수정비기본계획 report const sidos = useCityCd(); const siguns = useSggCd(); const reportOriginData = useDcTree(""); //:Folder[] @@ -136,6 +138,7 @@ const SearchModal: React.FC = ({ setSgg(0); setCtpvCd('0'); setSigungu('0'); + setReportGubun('0'); setYearFilter({ start: "", end: "", @@ -293,6 +296,11 @@ const SearchModal: React.FC = ({ const sigunguOption = filteredSiguns.find((n) => n.val === sigungu); filterReportData = filterReportData.filter(item => item.sigungu === sigunguOption?.text); } + if (reportGubun !== "0") { // 보고서구분검색 + const reportGubunOption = reportGubuns.find((n) => n.val === reportGubun); + filterReportData = filterReportData.filter(item => item.reportGubun === reportGubunOption?.text); + } + if (yearFilter.start != "" && yearFilter.end == "") //승인년도검색 filterReportData = filterReportData.filter(item => (item.approvalYear) ? item.approvalYear >= yearFilter.start + "년" : null); if (yearFilter.start == "" && yearFilter.end != "") @@ -678,6 +686,8 @@ const SearchModal: React.FC = ({ ctpvCd={ctpvCd} sigungu={sigungu} filteredSiguns={filteredSiguns} + reportGubun={reportGubun} + setReportGubun={setReportGubun} yearFilter={yearFilter} handleSearch={handleSearch} handleCtpvCdChange={handleCtpvCdChange} diff --git a/apps/sn/app/(map-layout)/map/components/searchModalReportApi.ts b/apps/sn/app/(map-layout)/map/searchModal/searchModalReportApi.ts similarity index 90% rename from apps/sn/app/(map-layout)/map/components/searchModalReportApi.ts rename to apps/sn/app/(map-layout)/map/searchModal/searchModalReportApi.ts index 8cb349056..bcee09fdd 100644 --- a/apps/sn/app/(map-layout)/map/components/searchModalReportApi.ts +++ b/apps/sn/app/(map-layout)/map/searchModal/searchModalReportApi.ts @@ -31,6 +31,14 @@ const isYear = (value: string): boolean => { return /^[0-9]{4}년$/.test(value); }; +export const reportGubuns = [{val: '0', text: '전체'}, {val: '1', text: '보고서'} + , {val: '2', text: '요약보고서'} , {val: '3', text: '부록'}, {val: '4', text: '기타'}]; + +/** + * Flatten a hierarchical folder structure into a flat array. + * @param data - The hierarchical folder data to flatten. + * @returns An array of flattened folders with their paths and levels. + */ export function flattenFolders(data: Folder[]): FlattenedFolder[] { const result: FlattenedFolder[] = []; const exceptNodeNm = ["부분","통합","전체"]; @@ -165,12 +173,14 @@ export const getCityCd = async (): Promise => { if (!response.ok) throw new Error(`시도 데이터 오류: ${response.status}`); const res = await response.json(); const city = res.data; - const cityCd = city.map((item: any) => ({ + let citys:SelectDataType[] = city.map((item: {adstDstrCd:string, sido:string}) => ({ val: item.adstDstrCd, text: item.sido, })); - cityCd.unshift({ val: '0', text: '전체' }); - return cityCd; + citys = citys.sort((a:SelectDataType, b:SelectDataType) => a.text.localeCompare(b.text)); + citys.unshift({ val: '0', text: '전체' }); + console.log("citys:", citys); + return citys; } catch (error) { console.error('시도 데이터를 가져오는데 실패했습니다:', error); return [{ val: '0', text: '전체', sido: '0' }]; @@ -186,9 +196,9 @@ export const useSggCd = () => { if (result) { setData(result); } + console.log("useSggCd호출"); }; fetch(); - console.log("useSggCd호출"); }, []); return data; }; @@ -222,9 +232,9 @@ export const useCityCd = () => { if (result) { setData(result); } + console.log("useCityCd호출"); }; fetch(); - console.log("useCityCd호출"); }, []); return data; }; diff --git a/packages/common/business_components/src/ui/select/index.tsx b/packages/common/business_components/src/ui/select/index.tsx index 82db6da45..f9dac92d6 100644 --- a/packages/common/business_components/src/ui/select/index.tsx +++ b/packages/common/business_components/src/ui/select/index.tsx @@ -28,6 +28,7 @@ const SelectBox = React.forwardRef< value?: string | number; readOnly?: boolean; // readOnly 속성 추가 selectContentClass?: string; + labelClass?: string; } >( ( @@ -40,6 +41,7 @@ const SelectBox = React.forwardRef< value, readOnly = false, selectContentClass, + labelClass = "w-20 whitespace-nowrap text-xl text-gray-600", }, ref, ) => { @@ -66,7 +68,7 @@ const SelectBox = React.forwardRef< return (
{label && ( -