From 409c7843878db6597cc8e7afbd20bbe105d403d4 Mon Sep 17 00:00:00 2001 From: swcho Date: Mon, 23 Jun 2025 16:20:12 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20-=20=EB=A1=9C=EB=94=A9=EB=B0=94=20?= =?UTF-8?q?=EC=9E=AC=EC=B6=94=EA=B0=80=20-=20=EC=B9=A8=EC=9E=85=EC=88=98?= =?UTF-8?q?=20=EB=B6=84=EC=84=9D=ED=99=98=EA=B2=BD=EC=B2=AD=EC=BD=94?= =?UTF-8?q?=EB=93=9C,=20=EC=8B=9C=EB=8F=84,=20=EC=8B=9C=EA=B5=B0=EA=B5=AC,?= =?UTF-8?q?=20=ED=95=98=EC=88=98=EC=B2=98=EB=A6=AC=EC=9E=A5,=20=ED=95=98?= =?UTF-8?q?=EC=88=98=EC=B2=98=EB=A6=AC=EA=B5=AC=EC=97=AD=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=EA=B0=92=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/(with-base-layout)/ii/BaseLayout.tsx | 125 +++++++++--------- .../(with-base-layout)/ii/irsetting/page.tsx | 29 ++-- .../app/(with-base-layout)/ii/rdii/page.tsx | 10 +- 3 files changed, 85 insertions(+), 79 deletions(-) diff --git a/apps/sn/app/(with-base-layout)/ii/BaseLayout.tsx b/apps/sn/app/(with-base-layout)/ii/BaseLayout.tsx index 6b16ad36a..c6fca1fbd 100644 --- a/apps/sn/app/(with-base-layout)/ii/BaseLayout.tsx +++ b/apps/sn/app/(with-base-layout)/ii/BaseLayout.tsx @@ -7,6 +7,7 @@ import ListDiv from '@common/business_components/ui/list_div' import { SelectBox2 } from '@common/business_components/ui/select/index-2' import { Button, Label } from '@common/components/ui' import { useEffect, useState, type ReactNode } from 'react' +import LoadingOverlay from '@/components/ui/LoadingBar' type TitleName = { mainTitle: string @@ -102,7 +103,7 @@ const BaseLayout = ({ const [processingZoneOptions, setProcessingZoneOptions] = useState([]); const [treatmentFacilityOptions, setTreatmentFacilityOptions] = useState([]); - const [isLoadingAreaData, setIsLoadingAreaData] = useState(false); + const [isLoadingAreaData, setIsLoadingAreaData] = useState(isLoading || false); const [atflId, setAtflId] = useState('') const [fileNm, setFileNm] = useState('') const [dcrpPplMtncBizSn, setDcrpPplMtncBizSn] = useState('') @@ -127,6 +128,7 @@ const BaseLayout = ({ }); const cqlFiltersZone: string[] = []; if (sigungu.val && sigungu.val !== '0') { + // console.log("시군구 코드", sigungu.val); cqlFiltersZone.push(`sgg_cd='${sigungu.val}'`); } if (cqlFiltersZone.length > 0) { @@ -202,71 +204,72 @@ const BaseLayout = ({ return (
- - {/* searchBox.title이 있으면 h3 태그로 제목을 표시합니다. */} - {selectBox?.title && ( -
-

{selectBox.title}

-
- )} -
- {showDatePicker && ( // showDatePicker 값에 따라 DatePicker 렌더링 - <> - - console.log("DatePicker onChange:", date)) - }} - selectClass="ml-5 date-picker-trigger" /> - - )} - setEnoCd?.(val)} - setRtnEnvPartSidoValue={(val) => setCtpvCd?.(val)} - setRtnEnvPartSigunValue={setSigungu} // 선택된 시군구 값을 받을 콜백 함수 전달 - > - onSwageTreatmentPlantChange?.(val)} /> - onSwageProcessingZoneChange?.(val)} /> - - {selectBox?.searchChk ? : null} -
-
- + + + {/* searchBox.title이 있으면 h3 태그로 제목을 표시합니다. */} + {selectBox?.title && (
-

{titleName.firstCardTitle}

+

{selectBox.title}

+
+ )} +
+ {showDatePicker && ( // showDatePicker 값에 따라 DatePicker 렌더링 + <> + + console.log("DatePicker onChange:", date)) + }} + selectClass="ml-5 date-picker-trigger" /> + + )} + setEnoCd?.(val)} + setRtnEnvPartSidoValue={(val) => setCtpvCd?.(val)} + setRtnEnvPartSigunValue={setSigungu} // 선택된 시군구 값을 받을 콜백 함수 전달 + > + onSwageTreatmentPlantChange?.(val)} /> + onSwageProcessingZoneChange?.(val)} /> + + {selectBox?.searchChk ? : null} +
+
+ +
+

{titleName.firstCardTitle}

+
+ {graphBtn ? : null} + {/* 그래프 있을 시 */} + {graphBtn ? : null} + {/* 분석 버튼 */} + {analysisBtn ? : null} +
+
+ + +
+ {/* 폼 정보 입력 칸 */} + {children?.[0]} +
+ + +
+ { + children?.[1] != null ? +
+

{titleName?.secondCardTitle}

- {graphBtn ? : null} + {graphBtn ? : null} {/* 그래프 있을 시 */} - {graphBtn ? : null} - {/* 분석 버튼 */} - {analysisBtn ? : null} + {graphBtn ? : null}
-
- -
- {/* 폼 정보 입력 칸 */} - {children?.[0]} -
-
- -
- { - children?.[1] != null ? -
-

{titleName?.secondCardTitle}

-
- {graphBtn ? : null} - {/* 그래프 있을 시 */} - {graphBtn ? : null} -
-
-
{children?.[1]}
-
: null - } +
{children?.[1]}
+
: null + } ) } diff --git a/apps/sn/app/(with-base-layout)/ii/irsetting/page.tsx b/apps/sn/app/(with-base-layout)/ii/irsetting/page.tsx index 03fb1e82c..03eeec3cf 100644 --- a/apps/sn/app/(with-base-layout)/ii/irsetting/page.tsx +++ b/apps/sn/app/(with-base-layout)/ii/irsetting/page.tsx @@ -125,10 +125,13 @@ const IrSetting = () => { const data = await postData('v1/inftwtAnls', analysisData); console.log("Response from backend:", data); if (data) { + setIsLoadingResult(false); // 로딩 상태 시작 alert("분석 데이터가 성공적으로 제출되었습니다."); resetAllForms(); // 성공 시 폼 초기화 함수 호출 - } else alert("분석 데이터 제출 중 오류가 발생했습니다."); - setIsLoadingResult(false); // 로딩 상태 시작 + } else { + setIsLoadingResult(false); // 로딩 상태 시작 + alert("분석 데이터 제출 중 오류가 발생했습니다."); + } }; // 침입수 분석 실행 버튼 클릭 핸들러 @@ -207,11 +210,11 @@ const IrSetting = () => { // 새로운 JSON 데이터 생성 const combinedAnalysisData = { - enoCd: select1.toString(), // 환경청코드 - ctpvCd: select2.toString(), // 시도코드 - sggCd: select3.val.toString(), // 시군구코드 - swageTmplntCd: select4.toString(), // 하수처리장코드 - swtrmtZoneCd: select5.toString(), // 하수처리구역코드 + enoCd: (select1 && select1 !== '0') ? select1.toString() : null, // 환경청코드 (선택값) + ctpvCd: (select2 && select2 !== '0') ? select2.toString() : null, // 시도코드 (선택값) + sggCd: (select3.val && select3.val !== '0') ? select3.val.toString() : null, // 시군구코드 (선택값) + swageTmplntCd: (select4 && select4 !== '0' && select4 !== 0) ? select4.toString() : null, // 하수처리장코드 (선택값) + swtrmtZoneCd: (select5 && select5 !== '0' && select5 !== 0) ? select5.toString() : null, // 하수처리구역코드 (선택값) aplcnYm: new Date(selectedDate).toISOString().substring(0, 7).replace("-", ""), // 적용연월 drtwSwtcRt: parseFloat(input1) || null, // 오수전환율 (숫자로 변환) anlsInfo: input2, // 분석정보 @@ -346,12 +349,12 @@ const IrSetting = () => {
handleFileSelection(3, file, cd, id)} - showButton={false} - showPreview={true} - accept={".xls, .xlsx, .xlsm, .xltx"} - fileIdx={3} + key={`file-upload-3-${formResetKey}`} // 폼 초기화를 위한 key + onFileSelect={(file, cd, id) => handleFileSelection(3, file, cd, id)} + showButton={false} + showPreview={true} + accept={".xls, .xlsx, .xlsm, .xltx"} + fileIdx={3} />
diff --git a/apps/sn/app/(with-base-layout)/ii/rdii/page.tsx b/apps/sn/app/(with-base-layout)/ii/rdii/page.tsx index 116d87462..ff069d7c3 100644 --- a/apps/sn/app/(with-base-layout)/ii/rdii/page.tsx +++ b/apps/sn/app/(with-base-layout)/ii/rdii/page.tsx @@ -222,12 +222,12 @@ export default function RTKForm() { // 새로운 JSON 데이터 생성 const combinedAnalysisData = { - enoCd: select1.toString(), // 환경청코드 + enoCd: (select1 && select1 !== '0') ? select1.toString() : null, // 환경청코드 (선택값) aplcnYm: new Date(formData.date).toISOString().substring(0, 7).replace("-", ""), // 적용연월 (YYYYMM 형식) - ctpvCd: select2.toString(), // 시도코드 - sggCd: select3.val.toString(), // 시군구코드 - swageTmplntCd: select4.toString(), // 하수처리장코드 - swtrmtZoneCd: select5.toString(), // 하수처리구역코드 + ctpvCd: (select2 && select2 !== '0') ? select2.toString() : null, // 시도코드 (선택값) + sggCd: (select3.val && select3.val !== '0') ? select3.val.toString() : null, // 시군구코드 (선택값) + swageTmplntCd: (select4 && select4 !== '0' && select4 !== 0) ? select4.toString() : null, // 하수처리장코드 (선택값) + swtrmtZoneCd: (select5 && select5 !== '0' && select5 !== 0) ? select5.toString() : null, // 하수처리구역코드 (선택값) atflCd: file1?.atflCd, // 첨부파일CD (오수관망도) atflId: file1?.atflId, // 첨부파일ID (오수관망도) atflInpNm: file1?.file?.name || "", // 오수관망도 파일명