diff --git a/apps/sn/app/(with-base-layout)/ii/BaseLayout.tsx b/apps/sn/app/(with-base-layout)/ii/BaseLayout.tsx index d2d7d2672..51ac4d291 100644 --- a/apps/sn/app/(with-base-layout)/ii/BaseLayout.tsx +++ b/apps/sn/app/(with-base-layout)/ii/BaseLayout.tsx @@ -218,7 +218,7 @@ const BaseLayout = ({
{showDatePicker && ( // showDatePicker 값에 따라 DatePicker 렌더링 <> - + { // aplcnYm이 없으면 현재 연월을 기본값으로 설정 @@ -247,7 +247,7 @@ const BaseLayout = ({ setAplcnYmTo?.(value); // string 값을 직접 전달 } }} - selectClass="ml-5 w-[100px]" + selectClass="w-[100px]" startYear={1900} // 시작 연도 설정 /> @@ -258,7 +258,7 @@ const BaseLayout = ({ setRtnEnvPartSidoValue={(val) => setCtpvCd?.(val)} setRtnEnvPartSigunValue={setSigungu} // 선택된 시군구 값을 받을 콜백 함수 전달 > - onSwageTreatmentPlantChange?.(val)} selectContentClass="z-[101]" /> + onSwageTreatmentPlantChange?.(val)} selectContentClass="z-[101]" /> {/* onSwageProcessingZoneChange?.(val)} selectContentClass="z-[101]" /> */} {selectBox?.searchChk ? : null} diff --git a/apps/sn/app/(with-base-layout)/ii/rdiiResult/page.tsx b/apps/sn/app/(with-base-layout)/ii/rdiiResult/page.tsx index 25fc6c374..fa06087bb 100644 --- a/apps/sn/app/(with-base-layout)/ii/rdiiResult/page.tsx +++ b/apps/sn/app/(with-base-layout)/ii/rdiiResult/page.tsx @@ -1,5 +1,5 @@ 'use client' -import { deleteData, getData } from '@/components/lib/api' +import { deleteData, getData, useCookieAuth } from '@/components/lib/api' import { UiTable, downloadExcelWithKoreanHeaders } from '@common/business_components/ui' import { zodResolver } from '@hookform/resolvers/zod' import { useState, useEffect } from 'react' @@ -53,6 +53,8 @@ const tableColumn = [ ] const Result = () => { + const AUTH = useCookieAuth(); + const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { @@ -81,24 +83,27 @@ const Result = () => { const [totalData, setTotalData] = useState(0) //총 데이터 수 const [isLoadingResult, setIsLoadingResult] = useState(false); // 로딩 상태 const [selectedRowData, setSelectedRowData] = useState(null); - const [selectedRowIndex, setSelectedRowIndex] = useState(undefined); const [resetSelection, setResetSelection] = useState(false); + const [curPage, setCurPage] = useState(1); // 현재 페이지 useEffect(() => { // setCurPage(1); handleSearchButtonClick(); }, []) + useEffect(() => { + // setCurPage(1); + handleSearchButtonClick(); + }, [curPage]) - const handleSearchButtonClick = async (customFormValues?: Partial) => { + + const handleSearchButtonClick = async () => { setIsLoadingResult(true); setResetSelection(true); - const formValues = customFormValues || form.getValues(); // react-hook-form에서 현재 값 가져오기 + const formValues = form.getValues(); // react-hook-form에서 현재 값 가져오기 console.log("formValues", formValues); - let inftwtAnlsSearchDto; - // swageTmplntCd 처리 로직 추가 const processedSwageTmplntCd = formValues.swageTmplntCd && formValues.swageTmplntCd !== '0' ? (() => { @@ -108,30 +113,21 @@ const Result = () => { })() : null; - if (customFormValues) { - inftwtAnlsSearchDto = { - "aplcnYmFrom": formValues.aplcnYmFrom, - "aplcnYmTo": formValues.aplcnYmTo, - "enoCd": formValues.enoCd, - "ctpvCd": formValues.ctpvCd, - "sggCd": formValues.sggCd, - "swageTmplntCd": processedSwageTmplntCd, - }; - } else { - inftwtAnlsSearchDto = { - "aplcnYmFrom": formValues.aplcnYmFrom && formValues.aplcnYmFrom !== '' ? formValues.aplcnYmFrom : null, - "aplcnYmTo": formValues.aplcnYmTo && formValues.aplcnYmTo !== '' ? formValues.aplcnYmTo : null, - "enoCd": formValues.enoCd === '0' ? null : formValues.enoCd, - "ctpvCd": formValues.ctpvCd === '0' ? null : formValues.ctpvCd, - "sggCd": formValues.sggCd?.val === '0' ? null : formValues.sggCd?.val, - "swageTmplntCd": processedSwageTmplntCd, - }; - } + let inftwtAnlsSearchDto = { + "aplcnYmFrom": formValues.aplcnYmFrom && formValues.aplcnYmFrom !== '' ? formValues.aplcnYmFrom : null, + "aplcnYmTo": formValues.aplcnYmTo && formValues.aplcnYmTo !== '' ? formValues.aplcnYmTo : null, + "enoCd": formValues.enoCd === '0' ? null : formValues.enoCd, + "ctpvCd": formValues.ctpvCd === '0' ? null : formValues.ctpvCd, + "sggCd": formValues.sggCd?.val === '0' ? null : formValues.sggCd?.val, + "swageTmplntCd": processedSwageTmplntCd, + "auth": AUTH, + }; + console.log("Search DTO:", inftwtAnlsSearchDto); const queryParams = new URLSearchParams({ - page: '0', - size: '10000000', + page: `${curPage - 1}`, + size: '10', sort: 'rainInfwtAnlsSn,desc' }); Object.entries(inftwtAnlsSearchDto).forEach(([key, value]) => { @@ -153,14 +149,13 @@ const Result = () => { // 추가 처리 및 일련번호 추가 return { ...formattedItem, - rowNumber: index + 1, // 1부터 시작하는 일련번호 추가 + rowNumber: (curPage - 1) * 10 + index + 1, // 1부터 시작하는 일련번호 추가 scsYn: item.scsYn === null || item.scsYn === undefined ? 'N' : item.scsYn // scsYn이 null이면 'N'으로 변경 }; }); // 선택된 행 초기화 setSelectedRowData(null); - setSelectedRowIndex(undefined); setTableData(dataWithRowNumber); setTotalData(dataWithRowNumber.length); @@ -173,6 +168,7 @@ const Result = () => { alert("분석결과 조회 중 오류가 발생했습니다."); setTableData([]); setTotalData(0); + setSelectedRowData(null); } setResetSelection(false); }; @@ -181,7 +177,6 @@ const Result = () => { const handleCellClick = (index: number | undefined, headId: string) => { if (index !== undefined && tableData[index]) { setSelectedRowData(tableData[index]); - setSelectedRowIndex(index); console.log("Selected row data:", tableData[index]); } }; @@ -258,16 +253,8 @@ const Result = () => { // 테이블 선택 상태 초기화 트리거 setResetSelection(true); - // 삭제 후 테이블 새로고침을 위해 재검색 - const customFormValues: Partial = { - aplcnYmFrom: selectedRowData.aplcnYmFrom || null, - aplcnYmTo: selectedRowData.aplcnYmTo || null, - enoCd: selectedRowData.enoCd || null, - ctpvCd: selectedRowData.ctpvCd || null, - sggCd: selectedRowData.sggCd || null, - swageTmplntCd: selectedRowData.swageTmplntCd || null, - }; - await handleSearchButtonClick(customFormValues); + // 검색 버튼 클릭 이벤트 트리거 + await handleSearchButtonClick(); setIsLoadingResult(false); @@ -320,9 +307,8 @@ const Result = () => { tableData={tableData} total={totalData} pageSize={10} - children={undefined} cellClick={handleCellClick} - onPageChange={(e) => { }} + onPageChange={setCurPage} resetSelection={resetSelection} />
diff --git a/apps/sn/app/(with-base-layout)/ii/result/page.tsx b/apps/sn/app/(with-base-layout)/ii/result/page.tsx index b285cc5e1..d6084e95e 100644 --- a/apps/sn/app/(with-base-layout)/ii/result/page.tsx +++ b/apps/sn/app/(with-base-layout)/ii/result/page.tsx @@ -74,26 +74,32 @@ const Result = () => { } }) + const AUTH = useCookieAuth(); const [tableData, setTableData] = useState([]); // API 조회 결과 저장 상태 - const [totalData, setTotalData] = useState(0) //총 데이터 수 + const [totalData, setTotalData] = useState(0) //총 데이터 수l const [isLoadingResult, setIsLoadingResult] = useState(false); // 로딩 상태 const [selectedRowData, setSelectedRowData] = useState(null); - const [selectedRowIndex, setSelectedRowIndex] = useState(undefined); const [resetSelection, setResetSelection] = useState(false); + const [curPage, setCurPage] = useState(1); // 현재 페이지 useEffect(() => { // setCurPage(1); handleSearchButtonClick(); }, []) - const auth = useCookieAuth(); - const handleSearchButtonClick = async (customFormValues?: Partial) => { + + // 페이지 변경 시마다 데이터 fetch + useEffect(() => { + handleSearchButtonClick(); + }, [curPage]); + + const handleSearchButtonClick = async () => { setIsLoadingResult(true); setResetSelection(true); - const formValues = customFormValues || form.getValues(); // react-hook-form에서 현재 값 가져오기 + const formValues = form.getValues(); // react-hook-form에서 현재 값 가져오기 console.log("formValues", formValues); - let inftwtAnlsSearchDto; + // swageTmplntCd 처리 로직 추가 const processedSwageTmplntCd = formValues.swageTmplntCd && formValues.swageTmplntCd !== '0' @@ -104,34 +110,22 @@ const Result = () => { })() : null; - if (customFormValues) { - inftwtAnlsSearchDto = { - "aplcnYmFrom": formValues.aplcnYmFrom, - "aplcnYmTo": formValues.aplcnYmTo, - "enoCd": formValues.enoCd, - "ctpvCd": formValues.ctpvCd, - "sggCd": formValues.sggCd, - "swageTmplntCd": processedSwageTmplntCd, - // "swtrmtZoneCd": formValues.swtrmtZoneCd, - "auth" : auth, - }; - } else { - inftwtAnlsSearchDto = { - "aplcnYmFrom": formValues.aplcnYmFrom && formValues.aplcnYmFrom !== '' ? formValues.aplcnYmFrom : null, - "aplcnYmTo": formValues.aplcnYmTo && formValues.aplcnYmTo !== '' ? formValues.aplcnYmTo : null, - "enoCd": formValues.enoCd === '0' ? null : formValues.enoCd, - "ctpvCd": formValues.ctpvCd === '0' ? null : formValues.ctpvCd, - "sggCd": formValues.sggCd?.val === '0' ? null : formValues.sggCd?.val, - "swageTmplntCd": processedSwageTmplntCd, - // "swtrmtZoneCd": formValues.swtrmtZoneCd === '0' ? null : formValues.swtrmtZoneCd, - "auth" : auth, - }; - } + let inftwtAnlsSearchDto = { + "aplcnYmFrom": formValues.aplcnYmFrom && formValues.aplcnYmFrom !== '' ? formValues.aplcnYmFrom : null, + "aplcnYmTo": formValues.aplcnYmTo && formValues.aplcnYmTo !== '' ? formValues.aplcnYmTo : null, + "enoCd": formValues.enoCd === '0' ? null : formValues.enoCd, + "ctpvCd": formValues.ctpvCd === '0' ? null : formValues.ctpvCd, + "sggCd": formValues.sggCd?.val === '0' ? null : formValues.sggCd?.val, + "swageTmplntCd": processedSwageTmplntCd, + // "swtrmtZoneCd": formValues.swtrmtZoneCd === '0' ? null : formValues.swtrmtZoneCd, + "auth": AUTH, + }; + console.log("Search DTO:", inftwtAnlsSearchDto); const queryParams = new URLSearchParams({ - page: '0', - size: '10000000', + page: `${curPage - 1}`, + size: '10', sort: 'inftwtAnlsSn,desc' }); Object.entries(inftwtAnlsSearchDto).forEach(([key, value]) => { @@ -144,6 +138,7 @@ const Result = () => { console.log("API: ", `v1/inftwtAnls${queryString ? `?${queryString}` : ''}`); try { const data = await getData(`v1/inftwtAnls${queryString ? `?${queryString}` : ''}`); + console.log("API response:", data); // 🎯 각 아이템을 개별적으로 포맷팅하면서 일련번호 추가 const dataWithRowNumber = (data.content || []).map((item: any, index: number) => { @@ -153,17 +148,16 @@ const Result = () => { // 추가 처리 및 일련번호 추가 return { ...formattedItem, - rowNumber: index + 1, // 1부터 시작하는 일련번호 추가 + rowNumber: (curPage - 1) * 10 + index + 1, // 1부터 시작하는 일련번호 추가 scsYn: item.scsYn === null || item.scsYn === undefined ? 'N' : item.scsYn // scsYn이 null이면 'N'으로 변경 }; }); - + // 선택된 행 초기화 setSelectedRowData(null); - setSelectedRowIndex(undefined); setTableData(dataWithRowNumber); - setTotalData(dataWithRowNumber.length); + setTotalData(data?.totalElements || 0); // totalElements가 없을 경우 0으로 설정 console.log("response:", data); console.log("response data:", dataWithRowNumber); setIsLoadingResult(false); @@ -174,7 +168,6 @@ const Result = () => { setTableData([]); setTotalData(0); setSelectedRowData(null); - setSelectedRowIndex(undefined); } setResetSelection(false); }; @@ -183,7 +176,6 @@ const Result = () => { const handleCellClick = (index: number | undefined, headId: string) => { if (index !== undefined && tableData[index]) { setSelectedRowData(tableData[index]); - setSelectedRowIndex(index); console.log("Selected row data:", tableData[index]); } }; @@ -261,18 +253,9 @@ const Result = () => { // 테이블 선택 상태 초기화 트리거 setResetSelection(true); - - // 삭제 후 테이블 새로고침을 위해 재검색 - const customFormValues: Partial = { - aplcnYmFrom: selectedRowData.aplcnYmFrom || null, - aplcnYmTo: selectedRowData.aplcnYmTo || null, - enoCd: selectedRowData.enoCd || null, - ctpvCd: selectedRowData.ctpvCd || null, - sggCd: selectedRowData.sggCd || null, - swageTmplntCd: selectedRowData.swageTmplntCd || null, - // swtrmtZoneCd: selectedRowData.swtrmtZoneCd || null, - }; - await handleSearchButtonClick(customFormValues); + + // 검색 버튼 클릭 이벤트 트리거 + await handleSearchButtonClick(); setIsLoadingResult(false); @@ -325,9 +308,8 @@ const Result = () => { tableData={tableData} total={totalData} pageSize={10} - children={undefined} cellClick={handleCellClick} - onPageChange={(e) => { }} + onPageChange={setCurPage} resetSelection={resetSelection} />