diff --git a/apps/sn/app/(map-layout)/map/components/common/table.ts b/apps/sn/app/(map-layout)/map/components/common/table.ts index 68448af71..3148b7ea2 100644 --- a/apps/sn/app/(map-layout)/map/components/common/table.ts +++ b/apps/sn/app/(map-layout)/map/components/common/table.ts @@ -28,10 +28,11 @@ export const MsSwagePplCol = [ // { id: 'lyrTypeNm', title: '레이어타입명' }, ] export const MsSwagePplCol2 = [ + { id: 'rowNumber', title: '일련번호' }, { id: 'fcltMngNo', title: '시설 관리번호' }, { id: 'instMngNo', title: '기관 관리번호' }, { id: 'instlYmd', title: '설치일자' }, - { id: 'mapshtNo', title: '도엽번호' }, + // { id: 'mapshtNo', title: '도엽번호' }, { id: 'pdmt', title: '관경(mm)' }, { id: 'prlg', title: '연장(m)' }, { id: 'avgGrdn', title: '평균구배(m/m)' }, @@ -296,10 +297,11 @@ export const SwtrmtFcltCol = [ // { id: 'obsrvnSptCd', title: '관측지점코드' }, ]; export const SwtrmtFcltCol2 = [ + { id: 'rowNumber', title: '일련번호' }, { id: 'swtrmtFcltNm', title: '하수처리시설명' }, { id: 'fcltCpct', title: '시설용량(㎥/d)' }, { id: 'rgnExpln', title: '지역설명' }, - { id: 'cmcnYmd', title: '준공일자' }, + // { id: 'cmcnYmd', title: '준공일자' }, { id: 'oprtngStrtYmd', title: '가동개시일자' }, // { id: 'clsgYmd', title: '폐쇄일자' }, // { id: 'prcsMsrcCd', title: '처리공법코드' }, @@ -319,7 +321,7 @@ export const SwtrmtFcltCol2 = [ // { id: 'pllnArea', title: '부지면적(m²)' }, // { id: 'mngRprtvBzentyNm', title: '관리대행업체명' }, { id: 'swtrmtPpltnCnt', title: '하수처리인구수(인)' }, - { id: 'prcsZoneAreaSum', title: '처리구역면적합계(m²)' }, + // { id: 'prcsZoneAreaSum', title: '처리구역면적합계(m²)' }, // { id: 'xcrd', title: 'X좌표' }, // { id: 'ycrd', title: 'Y좌표' }, // { id: 'oprtngSttsCd', title: '가동상태코드' }, @@ -346,6 +348,7 @@ export const SwtrmtPrcsZoneCol = [ { id: 'swtrmt_fclt_nm', title: '하수처리시설명' }, ]; export const SwtrmtPrcsZoneCol2 = [ + { id: 'rowNumber', title: '일련번호' }, // { id: 'swtrmtZoneSn', title: '하수처리구역 일련번호' }, { id: 'swtrmtZoneNm', title: '하수처리구역명' }, // { id: 'swtrmt_fclt_cd', title: '하수처리시설코드' }, @@ -380,12 +383,13 @@ export const MsSwageMhlCol = [ // { id: 'inst_mng_no', title: '기관관리번호' } ]; export const MsSwageMhlCol2 = [ + { id: 'rowNumber', title: '일련번호' }, // { id: 'fid', title: 'FID' }, // { id: 'geom', title: 'geometry' }, // { id: 'ftreSmbolCd', title: '지형지물부호코드' }, { id: 'fcltMngNo', title: '시설관리번호' }, // { id: 'pbadmsEmdCd', title: '행정읍면동코드' }, - { id: 'mapshtNo', title: '도엽번호' }, + // { id: 'mapshtNo', title: '도엽번호' }, // { id: 'mngInstCd', title: '관리기관코드' }, { id: 'instlYmd', title: '설치일자' }, // { id: 'lastDrdgnYmd', title: '최종준설일자' }, @@ -487,12 +491,13 @@ export const ExclnSewagePumpCol = [ // { id: 'instMngNo', title: '기관관리번호' }, ] export const ExclnSewagePumpCol2 = [ + { id: 'rowNumber', title: '일련번호' }, // { id: 'fid', title: 'FID' }, // { id: 'geom', title: 'geometry' }, // { id: 'ftreSmbolCd', title: '지형지물부호코드' }, { id: 'fcltMngNo', title: '시설관리번호' }, // { id: 'pbadmsEmdCd', title: '행정읍면동코드' }, - { id: 'mapshtNo', title: '도엽번호' }, + // { id: 'mapshtNo', title: '도엽번호' }, // { id: 'mngInstCd', title: '관리기관코드' }, { id: 'instlYmd', title: '설치일자' }, { id: 'swagePmstnNm', title: '하수펌프장명' }, @@ -528,6 +533,7 @@ export const DrtwSewagePumpCol = [ // { id: 'instMngNo', title: '기관관리번호' }, ] export const DrtwSewagePumpCol2 = [ + { id: 'rowNumber', title: '일련번호' }, // { id: 'fid', title: 'FID' }, // { id: 'geom', title: 'geometry' }, // { id: 'ftreSmbolCd', title: '지형지물부호코드' }, @@ -574,6 +580,7 @@ export const stofcbrCol = [ { id: 'drtn_angl', title: '방향각도(°)' }, ] export const stofcbrCol2 = [ + { id: 'rowNumber', title: '일련번호' }, // { id: 'ftreSmbolCd', title: '지형지물부호코드' }, { id: 'fcltMngNo', title: '시설관리번호' }, // { id: 'pbadmsEmdCd', title: '행정읍면동코드' }, @@ -650,7 +657,8 @@ export const dateFields = [ // 🎯 camelCase 버전 추가 'instlYmd', 'lastDrdgnYmd', 'cmcnYmd', 'oprtngStrtYmd', 'clsgYmd', 'mesureBeginDt', 'mesureEndDt', 'qltwtrBeginDt', 'qltwtrEndDt', - 'rainBeginDt', 'rainEndDt' + 'rainBeginDt', 'rainEndDt', + 'flfmtBgngYmd', 'flfmtEndYmd', 'flfmtYr' ]; // 🎯 연월 필드들 (yyyymm -> yyyy년 m월) @@ -677,5 +685,6 @@ export const numberFields = [ 'worflwWallHgt', 'swrPplEqpAr', 'swrTrtPopl', 'weirHg', 'weirLt', 'precdngDry', 'rainFall', 'cntncTime', 'rainIn', - 'mesureIntrvl', 'qltwtrCo', 'rnysnFvlc', 'clarFvlc' + 'mesureIntrvl', 'qltwtrCo', 'rnysnFvlc', 'clarFvlc', + 'bizAmt', 'count' ]; \ No newline at end of file diff --git a/apps/sn/app/(map-layout)/map/searchModal/searchModal.tsx b/apps/sn/app/(map-layout)/map/searchModal/searchModal.tsx index b7661d9a4..cd8b76af7 100644 --- a/apps/sn/app/(map-layout)/map/searchModal/searchModal.tsx +++ b/apps/sn/app/(map-layout)/map/searchModal/searchModal.tsx @@ -5,13 +5,14 @@ import React, { useEffect, useMemo, useState } from 'react'; import { ExclnSewagePumpCol2, MsSwageMhlCol2, MsSwagePplCol2, stofcbrCol2, SwtrmtFcltCol2, SwtrmtPrcsZoneCol2 } from '../components/common/table'; //import { useDcTree, flattenFolders, useSggCd, useCityCd } from './components/searchModalReportApi'; import { type SelectDataType } from '../commonStore'; -import { MS_SWAGE_PPL_CODES, MS_SWAGE_PPL_USE_CODES } from '../components/common/table'; +import { MS_SWAGE_PPL_CODES, MS_SWAGE_PPL_USE_CODES, MS_SWAGE_MHL_CODES } from '../components/common/table'; import { addFileName, flattenFolders, getFileDownload, useCityCd, useDcTree, useSggCd } from '../components/searchModalReportApi'; // import { useBizByFcltStore } from "../../../store/StoreProvider"; import { getData } from "@/components/lib/api"; import BasicTab, { BASIC_TYPES } from './basicTab'; import OperationTab, { BIZ_TY_CD, operationCleaningTableHeadlist, operationInspectionTableHeadlist, operationMaintenanceTableHeadlist, operationTableHeadlist, WORK_TYPES } from './operationTab'; import ReportTab, { reportTableHeadlist } from './reportTab'; +import { formatDisplayData } from '@/components/lib/utils/formatDisplayValue'; const API_URL = `${process.env.NEXT_PUBLIC_SEWERAGE_API_URL}`; @@ -140,10 +141,18 @@ const SearchModal: React.FC = ({ end: "", }); setShowTable(false); - setTableCount(0); setTableData([]); + setDetailTableData([]); + setTableCount(0); + setDetailTableCount(0); + setCurPage(1); // 페이지를 1로 초기화 + setDetailCurPage(1); // 페이지를 1로 초기화 + setIsResetPage(true); // 페이지를 초기화 + setIsResetDetailPage(true); // 디테일 페이지를 초기화 + setIsResetSelection(true); // 선택 초기화 + setIsResetDetailSelection(true); // 선택 초기화 // queryParams는 fetchFilteredData 내에서 매번 새로 생성되므로 별도 상태 초기화는 필요 없음 - }, [activeTab, basicType, open]); + }, [activeTab, basicType, workType, open]); useEffect(() => { setActiveTab(TABS[0]?.val ?? "basic"); @@ -177,6 +186,7 @@ const SearchModal: React.FC = ({ setIsLoading(true); // 로딩 시작 setIsResetSelection(true); // 선택 초기화 setIsResetDetailSelection(true); // 선택 초기화 + try { let cqlFilters: string[] = []; if (activeTab === 'basic') { @@ -201,7 +211,23 @@ const SearchModal: React.FC = ({ const res = await axios.get(`${API_URL}/v1/fclts?${queryParams.toString()}`); console.log('필터링된 API 결과(개수):', res.data.count); console.log('필터링된 API 결과(데이터):', res.data.data); - setTableData(res.data.data || []); + + // 🎯 각 아이템을 개별적으로 포맷팅하면서 일련번호 추가 + const dataWithRowNumber = (res.data.data || []).map((item: any, index: number) => { + // 🎯 먼저 각 아이템을 포맷팅 + const formattedItem = formatDisplayData(item); + const matched = MS_SWAGE_MHL_CODES.find(code => code.val === item?.mqltCd?.trim()); + + // 추가 처리 및 일련번호 추가 + return { + ...formattedItem, + rowNumber: (curPage - 1) * 10 + index + 1, // 1부터 시작하는 일련번호 추가 + scsYn: item.scsYn === null || item.scsYn === undefined ? 'N' : item.scsYn, // scsYn이 null이면 'N'으로 변경 + mqltCd: matched ? matched.text : item.mqltCd, + }; + }); + + setTableData(dataWithRowNumber); setTableCount(res.data.count || []); console.log('tableCount 상태 업데이트 후:', res.data.count); // tableCount 로그 추가 @@ -239,9 +265,11 @@ const SearchModal: React.FC = ({ console.log('필터링된 API 결과(데이터):', res.content); const mappedContent = (res.content || []).map((item: any) => { + console.log("item:", item); + const formattedItem = formatDisplayData(item); const matched = BIZ_TY_CD.find(code => code.lwpoCd === item.bizTyCd); return { - ...item, + ...formattedItem, bizTyCd: matched ? matched.lwpoCdNm : item.bizTyCd, }; }); @@ -293,8 +321,8 @@ const SearchModal: React.FC = ({ setTableData([]); } finally { setIsLoading(false); // 로딩 종료 - setIsResetSelection(false); - setIsResetDetailSelection(false); + // setIsResetSelection(false); + // setIsResetDetailSelection(false); } }; @@ -458,13 +486,17 @@ const SearchModal: React.FC = ({ // 조회 버튼 클릭 시 1페이지로 이동 및 데이터 초기화 const handleSearch = () => { - setCurPage(1); // 페이지를 1로 초기화 - setDetailCurPage(1); // 페이지를 1로 초기화 - setIsResetPage(true); // 페이지를 1로 초기화 - setIsResetDetailPage(true); // 페이지를 1로 초기화 - setIsResetSelection(true); // 선택 초기화 - setIsResetDetailSelection(true); // 선택 초기화 + // setCurPage(1); // 페이지를 1로 초기화 + // setDetailCurPage(1); // 페이지를 1로 초기화 + // setIsResetPage(true); // 페이지를 초기화 + // setIsResetDetailPage(true); // 디테일 페이지를 초기화 + // setIsResetSelection(true); // 선택 초기화 + // setIsResetDetailSelection(true); // 선택 초기화 fetchFilteredData(); + setIsResetPage(false); // 페이지를 초기화 + setIsResetDetailPage(false); // 디테일 페이지를 초기화 + setIsResetSelection(false); // 선택 초기화 + setIsResetDetailSelection(false); // 선택 초기화 setShowTable(true); }; @@ -479,6 +511,7 @@ const SearchModal: React.FC = ({ const handleOperationCellClick = async (index?: number | undefined, headId?: String) => { setIsResetDetailPage(true); // 페이지를 1로 초기화 setIsResetDetailSelection(true); // 선택 초기화 + setIsResetDetailPage(true); // 디테일 페이지를 초기화 if (typeof index === "number") { setIsDetailLoading(true); @@ -659,7 +692,7 @@ const SearchModal: React.FC = ({ { const label = BASIC_TYPES.find((type) => type.val === basicType)?.text - return (<>{label} 조회 결과 ({tableCount})건); + return (<>{label} 조회 결과 ({tableCount.toLocaleString('ko-KR')})건); })() } tableData={tableData} @@ -668,7 +701,7 @@ const SearchModal: React.FC = ({ total={tableCount} cellClick={activeTab === 'report' ? handleReportCellClick : handleBasicCellClick} onPageChange={setCurPage} - resetPageNo={isResetPage} + resetPageNo={true} resetSelection={isResetSelection} /> @@ -684,7 +717,7 @@ const SearchModal: React.FC = ({ headName={ (() => { const label = WORK_TYPES.find((type) => type.val === workType)?.text - return (<>{label} 사업 현황 ({tableCount})건); + return (<>{label} 사업 현황 ({tableCount.toLocaleString('ko-KR')})건); })() } tableData={tableData} @@ -706,7 +739,7 @@ const SearchModal: React.FC = ({ headName={ (() => { const label = WORK_TYPES.find((type) => type.val === workType)?.text - return (<>{label} 결과표 ({detailTableCount})건); + return (<>{label} 결과표 ({detailTableCount.toLocaleString('ko-KR')})건); })() } tableData={detailTableData}