From 41979c945a21877a233a8b25f8d013eb7649bdd3 Mon Sep 17 00:00:00 2001 From: jyha00 Date: Fri, 20 Jun 2025 14:23:33 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EC=9E=A0=EC=9E=AC=EC=88=98=EC=9A=94?= =?UTF-8?q?=EC=B2=98=20=EC=97=91=EC=85=80=20=EB=8B=A4=EC=9A=B4=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wr/app/matMng/coMng/ldrmntCoSttn/page.tsx | 86 +++++++++++++++---- .../app/store/matDmd/ldrmntCoSttn/index.tsx | 37 +++++--- 2 files changed, 94 insertions(+), 29 deletions(-) diff --git a/apps/wr/app/matMng/coMng/ldrmntCoSttn/page.tsx b/apps/wr/app/matMng/coMng/ldrmntCoSttn/page.tsx index bd48782aa..f5dffbf8b 100644 --- a/apps/wr/app/matMng/coMng/ldrmntCoSttn/page.tsx +++ b/apps/wr/app/matMng/coMng/ldrmntCoSttn/page.tsx @@ -15,6 +15,7 @@ import type { objSearchType } from "@/components/ui/modal/fcltReg/bdstRegModal/b import CoDetailModal from "@/components/ui/modal/sttn/sttnDetailModal/coDatailModal"; import { ContentsDiv, + downloadExcel, SearchDiv, SearchFormLeft, SearchFormRight, @@ -34,7 +35,7 @@ export default function LdrmntCoSttn() { const { code, ldrmnt, ldrmntInit, ldrmntSearch, } = useWrStore( (state) => state ); - const { ldrmntRes } = ldrmnt; + const { ldrmntRes, excelList } = ldrmnt; const [detailModal, setDetailModal] = useState<{ isOpen: boolean, data: customLdrmnt | undefined }>({ data: undefined, isOpen: false }) const [pageNation, setPageNation] = useState(1); const [selectSgg, setSelectSgg] = useState() @@ -42,7 +43,8 @@ export default function LdrmntCoSttn() { const [bdstTable, setBdstTable] = useState(); const [searchTxt, setSearchTxt] = useState(); const ref = useRef({} as ReturnType); - const codeData = getCityOrSgg(ref); + const [excelData, setExcelData] = useState(); + const excelClick = useCallback(() => { excelDownload( @@ -54,6 +56,15 @@ export default function LdrmntCoSttn() { ); }, []); + const excelDownloadClick = () => { + downloadExcel({ + data: excelData ?? [], + fileName: "잠재수요처 관리", + sheetNameArray: ["Sheet1"], + headerRange: "A1:F1" + }) + } + const [isExcelOpen, setIsExcelOpen] = useState<{ isModal: boolean; }>({ isModal: false }); @@ -78,7 +89,7 @@ export default function LdrmntCoSttn() { useEffect(() => { if (!ldrmnt.isInit) { - ldrmntInit(codeData ?? "0"); + ldrmntInit("0"); } }, [ldrmnt.isInit, ldrmntInit]); @@ -88,15 +99,61 @@ export default function LdrmntCoSttn() { const tbData = Array.isArray(data) ? data.map((item: customLdrmnt) => ({ ...item, - ctpvCd: item.fctryAddr.split(" ")[0] || "", + ctpvCd: item.fctryAddr.split(" ")[0] || "", sggCd: item.fctryAddr.split(" ")[1] || "" - + })) : []; - + setBdstTable(tbData); }, [ldrmntRes, code]); + useEffect(() => { + const transData = Array.isArray(excelList) ? excelList : [excelList]; + const exData = tableData(transData, { code }); + const data = Array.isArray(exData) + ? exData.map((item: customLdrmnt) => { + return { + "시도": item.fctryAddr.split(" ")[0] || "", + "시군구": item.fctryAddr.split(" ")[1] || "", + "회사명": item.dmdCoNm, + "공장주소": item.fctryAddr, + "공장관리번호": item.fctryMngNo, + "전화번호": item.telno + } + }) : []; + setExcelData(data) + }, [excelList]) + + + useEffect(() => { + let cityTxt = ''; + let sggTxt = ''; + + if (objSearch?.city.toString().length > 0) { + cityTxt = code.cityCd.find((item) => item.val === objSearch?.city)?.text ?? ''; + } + + if (objSearch?.sgg.toString().length > 1) { + sggTxt = code.sggCd.find((item) => item.val === objSearch?.sgg)?.text ?? ''; + } + + let cityNm = ""; + + if (sggTxt !== "0") { + cityNm = cityTxt + " " + sggTxt; + } else { + cityNm = cityTxt; + } + + if (cityNm) { + if (cityTxt === '') cityNm = "0"; + ldrmntSearch(pageNation, cityNm, searchTxt || ""); + } else { + ldrmntSearch(pageNation, "", searchTxt || ""); + } + }, [pageNation, objSearch, code, searchTxt, ldrmntSearch]) + return ( <> @@ -148,18 +205,17 @@ export default function LdrmntCoSttn() { sggTxt = code.sggCd.find((item) => item.val === objSearch?.sgg)?.text ?? ''; } - let url = "" + let cityNm = "" if (sggTxt !== "0") { - url = cityTxt + " " + sggTxt + cityNm = cityTxt + " " + sggTxt } else { - url = cityTxt + cityNm = cityTxt } - - if (url) { - if(cityTxt === '') url = "0"; - ldrmntSearch(url, searchTxt || ""); + if (cityNm) { + if (cityTxt === '') cityNm = "0"; + ldrmntSearch(pageNation, cityNm, searchTxt || ""); } }} > @@ -177,9 +233,7 @@ export default function LdrmntCoSttn() { diff --git a/apps/wr/app/store/matDmd/ldrmntCoSttn/index.tsx b/apps/wr/app/store/matDmd/ldrmntCoSttn/index.tsx index f5005654d..d1176528a 100644 --- a/apps/wr/app/store/matDmd/ldrmntCoSttn/index.tsx +++ b/apps/wr/app/store/matDmd/ldrmntCoSttn/index.tsx @@ -19,16 +19,22 @@ export type ldrmntState = { ldrmnt: { ldrmntHeadList: CommonTableProps[]; ldrmntNodeList: CommonTableProps[]; - excelList: []; + excelList: ExcelType[]; isInit: boolean; ldrmntRes: customLdrmnt[]; }; }; +type ExcelType = { + [key: string]: string | number | undefined; +}; + +const excelDownList: ExcelType[] = []; + type ldrmntActions = { ldrmntRegData: (data: any[]) => void, ldrmntInit: (con: string) => void - ldrmntSearch: (sggCd: string, coNm: string) => void; + ldrmntSearch: (page: number, sggCd: string, coNm: string) => void; ldrmntUpdate: (ldrmntRes: customLdrmnt) => void; ldrmntDelete: () => void; }; @@ -51,12 +57,10 @@ export const ldrmntActionsExport: (set: any) => ldrmntActions = ( return { ldrmntInit: async (con: string) => { try { - console.log("con", con) const ldrmntRes = await getFetch( fetchType.WR, `/reuseFc/request/temp/1/20/${con}` ); - console.log("initres", ldrmntRes) set((state: ldrmntState) => { return { ...state, @@ -73,7 +77,6 @@ export const ldrmntActionsExport: (set: any) => ldrmntActions = ( }, ldrmntRegData: async (data) => { try { - const response = await postFectch( "/reuseFc/request/temp", data, @@ -98,32 +101,41 @@ export const ldrmntActionsExport: (set: any) => ldrmntActions = ( } }, - ldrmntSearch: async (sggCd: string, coNm: string) => { + ldrmntSearch: async (page: number, sggCd: string, coNm: string) => { let searchUrl = ""; - console.log("인덱스", sggCd) if (sggCd !== "") { if (coNm !== "") { - searchUrl = `/reuseFc/request/temp/1/20/${sggCd}/${coNm}`; + searchUrl = `/reuseFc/request/temp/${page}/20/${sggCd}/${coNm}`; } else { - searchUrl = `/reuseFc/request/temp/1/20/${sggCd}`; + searchUrl = `/reuseFc/request/temp/${page}/20/${sggCd}`; } } - console.log("searchUrl", searchUrl) - try { const ldrmntRes = await getFetch( fetchType.WR, searchUrl ); - console.log("search", ldrmntRes) + + ldrmntRes.forEach((item: customLdrmnt) => { + excelDownList.push({ + ctpvCd: item.ctpvCd, + sggCd: item.sggCd, + dmdCoNm: item.dmdCoNm, + fctryAddr: item.fctryAddr, + fctryMngNo: item.fctryMngNo, + telno: item.telno, + }) + }) + set((state: ldrmntState) => { return { ...state, ldrmnt: { ...state.ldrmnt, ldrmntRes: ldrmntRes, + excelList: excelDownList, }, } }) @@ -134,7 +146,6 @@ export const ldrmntActionsExport: (set: any) => ldrmntActions = ( ldrmntUpdate: async (ldrmntRes: customLdrmnt) => { try { ldrmntRes.rgtr = TEST_UUID; - console.log("ldrmntRes", ldrmntRes); const response = await putFectch( `/reuseFc/request/temp`, ldrmntRes From 79b39fc22fca956dc5cc29cac4ee2829127ba9b3 Mon Sep 17 00:00:00 2001 From: jyha00 Date: Fri, 20 Jun 2025 16:35:45 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=EC=A4=91=EC=88=98=EB=8F=84=EC=8B=9C?= =?UTF-8?q?=EC=84=A4=ED=98=84=ED=99=A9=20=EC=97=91=EC=85=80=20=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=EB=A1=9C=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruseFcltMng/fcltSttn/rswtSttn/page.tsx | 35 +++++----- .../ruseFcltMng/fcltSttn/rswtSttn/excel.tsx | 27 ++++---- .../ruseFcltMng/fcltSttn/rswtSttn/index.tsx | 65 +++++++++--------- apps/wr/public/sample_rswtSttn.xlsx | Bin 9159 -> 10806 bytes 4 files changed, 64 insertions(+), 63 deletions(-) diff --git a/apps/wr/app/ruseFcltMng/fcltSttn/rswtSttn/page.tsx b/apps/wr/app/ruseFcltMng/fcltSttn/rswtSttn/page.tsx index 48f6aa452..2cecd8e91 100644 --- a/apps/wr/app/ruseFcltMng/fcltSttn/rswtSttn/page.tsx +++ b/apps/wr/app/ruseFcltMng/fcltSttn/rswtSttn/page.tsx @@ -34,7 +34,7 @@ export default function RswtSttn() { const [isChHead, setIsChHead] = useState(false); const ref = useRef({} as ReturnType); const [bdstTable, setBdstTable] = useState(); - const [detailModal, setDetailModal] = useState<{isOpen:boolean,data:customRswtBdst|undefined}>({data:undefined,isOpen:false }) + const [detailModal, setDetailModal] = useState<{ isOpen: boolean, data: customRswtBdst | undefined }>({ data: undefined, isOpen: false }) const [bdstChgProps, setBdstChgProps] = useState<{ isOpen: boolean; chBuilding: chgBuilding[]; @@ -43,18 +43,18 @@ export default function RswtSttn() { const codeCityOrSgg = getCityOrSgg(ref); -const cellClick=(index:number|undefined, headId: string)=>{ + const cellClick = (index: number | undefined, headId: string) => { - if(headId!=='chBuildingYn' && index!==undefined && bdstTable!==undefined){ - setDetailModal({isOpen:true ,data:bdstTable[index] }) - }else if( headId==='chBuildingYn' && index!==undefined && bdstTable!==undefined){ + if (headId !== 'chBuildingYn' && index !== undefined && bdstTable !== undefined) { + setDetailModal({ isOpen: true, data: bdstTable[index] }) + } else if (headId === 'chBuildingYn' && index !== undefined && bdstTable !== undefined) { if ( bdstTable[index] && - bdstTable[index]?.chBuildingYn ==='Y' - + bdstTable[index]?.chBuildingYn === 'Y' + ) { - setBdstChgProps({ isOpen:true , chBuilding: bdstTable[index].chgBuilding}); + setBdstChgProps({ isOpen: true, chBuilding: bdstTable[index].chgBuilding }); } } @@ -74,7 +74,7 @@ const cellClick=(index:number|undefined, headId: string)=>{ ...item, ...item.reuseBuilding[0], ...item.reuseBuilding[0]?.rswtrObj, - chBuildingYn:item?.chgBuilding[0]?.bdstChgNm!==null &&item?.chgBuilding.length>0?'Y':'N' + chBuildingYn: item?.chgBuilding[0]?.bdstChgNm !== null && item?.chgBuilding.length > 0 ? 'Y' : 'N' })) .filter( (item: customRswtBdst) => @@ -91,17 +91,18 @@ const cellClick=(index:number|undefined, headId: string)=>{ excelDownload( rswtSttn.excelList, "중수도시설 현황", - "sample_rswtSttn.xlsx" + "sample_rswtSttn.xlsx", + "A1:W3", ); } }, [rswtSttn.excelList]); const excelClick = useCallback( (returnType: ReturnType) => { - if(codeCityOrSgg) - rswtSttnSearch(1, "10000", codeCityOrSgg); + if (codeCityOrSgg) + rswtSttnSearch(1, "10000", codeCityOrSgg); }, - [rswtSttnSearch,codeCityOrSgg] + [rswtSttnSearch, codeCityOrSgg] ); useEffect(() => { @@ -134,11 +135,11 @@ const cellClick=(index:number|undefined, headId: string)=>{ leftChildren={undefined} queryClick={function (returnType: ReturnType): void { // '{partValue: 'A', sidoValue: '0', sigunValue: '0', regionValue: '0', unitWaterShedValue: '0', …}' - if(codeCityOrSgg) - rswtSttnSearch(1, "20", codeCityOrSgg); + if (codeCityOrSgg) + rswtSttnSearch(1, "20", codeCityOrSgg); }} excelClick={excelClick} - initClick={function (): void {}} + initClick={function (): void { }} btnClass={btnClass} ref={ref} /> @@ -156,7 +157,7 @@ const cellClick=(index:number|undefined, headId: string)=>{ headlist={rswtSttn.rswtSttHeadList} pageSize={20} total={10000} - cellClick={(index: number | undefined,headId:string)=>{cellClick(index ?? undefined,headId)} } + cellClick={(index: number | undefined, headId: string) => { cellClick(index ?? undefined, headId) }} onPageChange={setPageNation} > diff --git a/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/excel.tsx b/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/excel.tsx index 9a342274d..5c0ecf0b3 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/excel.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/excel.tsx @@ -5,24 +5,25 @@ export const excelRSwtSttnParsing = (data: customRswtBdst[]): string[][] => { data.forEach((item) => { excelExportData.push([ - String(item.cityText), - String(item.sggText), + String(item.ctpvCd), + String(item.sggCd), item.bdstNm ?? "", item.daddr ?? "", String(item.bdstUsgText ?? ""), String(item.frstArchPrmsnDt ?? ""), String(item.archArea ?? ""), - String(item.reuseBuilding?.[0]?.rswtrObj.oblgTrgtWtrUsqty ?? ""), - String(item.chgBuilding.length>0 ? "Y" :"N"), - String(item.reuseBuilding?.[0]?.lawTrgtYn ?? ""), - String(item.reuseBuilding?.[0]?.instlCmptnDt ?? ""), - String(item.reuseBuilding?.[0]?.instlCst ?? ""), - item.reuseBuilding?.[0]?.rswtrObj?.orgwtKndCd ?? "", - String(item.reuseBuilding?.[0]?.rswtrObj.filtrTrtmfctCpct ?? ""), - String(item.reuseBuilding?.[0]?.rswtrObj?.filtrTrtmfctProcs ?? ""), - String(item.reuseBuilding?.[0]?.rswtrObj?.filtrTrtmfctUsgCd ?? ""), - String(item.reuseBuilding?.[0]?.instlCstSprtYn ?? ""), - String(item.reuseBuilding?.[0]?.instlCstSprtAmt ?? ""), + String(item.reuseBuilding?.[0]?.rswtrObj.wtrUsqty ?? "0"), //물사용량 + String(item.chgBuilding.length>0 ? "Y" :"N"), //중축・개축・재축여부 + String(item.reuseBuilding?.[0]?.lawTrgtYn ?? ""), //법적의무대상여부 + String(item.reuseBuilding?.[0]?.rswtrObj.oblgTrgtWtrUsqty ?? ""), //의무대상물사용량 + String(item.reuseBuilding?.[0]?.instlCmptnDt ?? ""), //설치완료일시 + String(item.reuseBuilding?.[0]?.instlCst ?? ""), //설치비용 + item.reuseBuilding?.[0]?.rswtrObj?.orgwtKndCd ?? "", //원수종류 + String(item.reuseBuilding?.[0]?.rswtrObj.filtrTrtmfctCpct ?? ""), //처리시설용량 + String(item.reuseBuilding?.[0]?.rswtrObj?.filtrTrtmfctProcs ?? ""), //주요처리공정 + String(item.reuseBuilding?.[0]?.rswtrObj?.filtrTrtmfctUsgCd ?? ""), //이용용도 + String(item.reuseBuilding?.[0]?.instlCstSprtYn ?? ""), //설치지원비용여부 + String(item.reuseBuilding?.[0]?.instlCstSprtAmt ?? ""), //설치지원비용 String(item.reuseBuilding?.[0]?.grntchBdstCertYn ?? ""), String(item.reuseBuilding?.[0]?.grntchBdstCertYr ?? ""), String(item.reuseBuilding?.[0]?.grntchBdstCertNo ?? ""), diff --git a/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/index.tsx b/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/index.tsx index 05c845fde..775e22e0c 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/index.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/index.tsx @@ -1,17 +1,17 @@ import type { CommonTableProps } from "@/app/store/common/type/header"; -import type { customRswtBdst } from "../../fcltReg/rswtReg"; -import type { sttnHeadListType } from "../rainSttn/headList"; -import type { z } from "zod"; -import { rswtSttHeadListExport, rswtSttNodeListExport } from "./headList"; -import { controlHeadView } from "../rainSttn"; import { fetchType, getFetch } from "@/components/lib/api"; -import { excelRainSttnParsing } from "../rainSttn/excel"; +import type { z } from "zod"; +import type { customRswtBdst } from "../../fcltReg/rswtReg"; +import { controlHeadView } from "../rainSttn"; +import type { sttnHeadListType } from "../rainSttn/headList"; +import { excelRSwtSttnParsing } from "./excel"; +import { rswtSttHeadListExport, rswtSttNodeListExport } from "./headList"; // 테이블 헤드 리스트 const rswtSttNodeList = rswtSttNodeListExport; -const rswtSttHeadList = rswtSttHeadListExport; +const rswtSttHeadList = rswtSttHeadListExport; const rswtSttnRes: customRswtBdst[] = []; @@ -29,7 +29,7 @@ export type rswtSttnState = { type rswtSttnActions = { - rswtSttnInit:(con:string) => void; + rswtSttnInit: (con: string) => void; rswtSttnSearch: (page: number, total: string, con: string) => void; rswtChSttnHead: ( headList: z.infer, @@ -56,27 +56,27 @@ export const rswtSttnActionsExport: (set: any) => rswtSttnActions = ( set: any ) => { return { - rswtSttnInit: async( con:string)=>{ - try{ - - const rswtSttnRes = await getFetch( - fetchType.WR, - `/reuseFc/waterreuseFc/1/20/${con}` - ); - set((state: rswtSttnState) => { - return { - ...state, - rswtSttn: { - ...state.rswtSttn, - rswtSttnRes: rswtSttnRes, - isInit: false, - }, - }; - }); - }catch(e){ - console.log(e) - } - }, + rswtSttnInit: async (con: string) => { + try { + + const rswtSttnRes = await getFetch( + fetchType.WR, + `/reuseFc/waterreuseFc/1/20/${con}` + ); + set((state: rswtSttnState) => { + return { + ...state, + rswtSttn: { + ...state.rswtSttn, + rswtSttnRes: rswtSttnRes, + isInit: false, + }, + }; + }); + } catch (e) { + console.log(e) + } + }, rswtSttnSearch: async (page: number, total: string, con: string) => { try { const rswtSttnRes = await getFetch( @@ -84,13 +84,13 @@ export const rswtSttnActionsExport: (set: any) => rswtSttnActions = ( `/reuseFc/waterreuseFc/${page}/${total}/${con}` ); if (Number(total) > 9000) { - const rainExcel = excelRainSttnParsing(rswtSttnRes); + const rswtExcel = excelRSwtSttnParsing(rswtSttnRes); set((state: rswtSttnState) => { return { ...state, rswtSttn: { ...state.rswtSttn, - excelList: rainExcel, + excelList: rswtExcel, }, }; }); @@ -114,8 +114,7 @@ export const rswtSttnActionsExport: (set: any) => rswtSttnActions = ( headList: z.infer ): Promise => { - console.log('head ', headList) - const changeNodeList= controlHeadView(headList,rswtSttNodeList) + const changeNodeList = controlHeadView(headList, rswtSttNodeList) return set((state: rswtSttnState) => ({ rswtSttn: { diff --git a/apps/wr/public/sample_rswtSttn.xlsx b/apps/wr/public/sample_rswtSttn.xlsx index 9f602475286e37f996002d81a9eef0bfd61d51ca..f64b37ea34efcb3e8a75dfe170def88a3aeba7cd 100644 GIT binary patch literal 10806 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 From 98f976eaeaf62ef29abe0c5e27f171a9628fb2df Mon Sep 17 00:00:00 2001 From: jyha00 Date: Fri, 20 Jun 2025 17:06:49 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EB=B9=97=EB=AC=BC=EC=9E=AC=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=EC=8B=9C=EC=84=A4=ED=98=84=ED=99=A9=20=EC=97=91?= =?UTF-8?q?=EC=85=80=20=EB=8B=A4=EC=9A=B4=EB=A1=9C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95,=20=EC=98=A8=EB=B0=B0=EC=88=98=EC=8B=9C=EC=84=A4?= =?UTF-8?q?=ED=98=84=ED=99=A9=20=EC=A1=B0=ED=9A=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruseFcltMng/fcltSttn/htdflSttn/page.tsx | 11 +- .../ruseFcltMng/fcltSttn/rainSttn/page.tsx | 40 ++--- .../ruseFcltMng/fcltSttn/htdflSttn/index.tsx | 142 +++++++++--------- apps/wr/public/sample_rainSttn.xlsx | Bin 9091 -> 10734 bytes 4 files changed, 95 insertions(+), 98 deletions(-) diff --git a/apps/wr/app/ruseFcltMng/fcltSttn/htdflSttn/page.tsx b/apps/wr/app/ruseFcltMng/fcltSttn/htdflSttn/page.tsx index e8362edbe..00af0e72d 100644 --- a/apps/wr/app/ruseFcltMng/fcltSttn/htdflSttn/page.tsx +++ b/apps/wr/app/ruseFcltMng/fcltSttn/htdflSttn/page.tsx @@ -6,12 +6,14 @@ import type { chgBuilding, customRainBdst, } from "@/app/store/ruseFcltMng/fcltReg/rainReg"; +import { excelHtdflSttnParsing } from "@/app/store/ruseFcltMng/fcltSttn/htdflSttn/excel"; import { excelDownload, getCityOrSgg, tableData, } from "@/components/lib/func/commom"; import HeadChModal from "@/components/ui/modal/sttn/headChModal/headChModal"; +import SttnDetailModal from "@/components/ui/modal/sttn/sttnDetailModal/sttnDetailModal"; import { ContentsDiv, SearchBaseForm, @@ -21,12 +23,9 @@ import { type ReturnType, } from "@common/business_components/ui"; import ListDiv from "@common/business_components/ui/list_div"; -import { makeFcltRegHead } from "@common/business_components/ui/table/makeFcltRegHead"; -import SttnDetailModal from "@/components/ui/modal/sttn/sttnDetailModal/sttnDetailModal"; -import BdstChgModal from "@/components/ui/modal/fcltReg/bdstChgModal/bdstChgModal"; +import { HeadMakeColSpan } from "@common/business_components/ui/table/HeadMakeColSpan"; import { Button } from "@common/components/ui"; import { useCallback, useEffect, useRef, useState } from "react"; -import { excelHtdflSttnParsing } from "@/app/store/ruseFcltMng/fcltSttn/htdflSttn/excel"; export default function HtdflSttn() { const { code, htdflSttn, htdflSttnSearch, initHtdfl } = useWrStore( @@ -139,7 +138,7 @@ export default function HtdflSttn() { } else { con = returnType.sidoValue; } - // rainSttnSearch(1, "20", con); + htdflSttnSearch(pageNation, "20", con); }} excelClick={excelClick} initClick={function (): void {}} @@ -155,7 +154,7 @@ export default function HtdflSttn() { headName={[]} tableData={bdstTable || []} children={ - + } headlist={htdflSttn.htdflSttHeadList} pageSize={20} diff --git a/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/page.tsx b/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/page.tsx index ebdd64a4e..52edb193e 100644 --- a/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/page.tsx +++ b/apps/wr/app/ruseFcltMng/fcltSttn/rainSttn/page.tsx @@ -34,7 +34,7 @@ export default function RainSttn() { const [pageNation, setPageNation] = useState(1); const [isChHead, setIsChHead] = useState(false); const [bdstTable, setBdstTable] = useState(); - const [detailModal, setDetailModal] = useState<{isOpen:boolean,data:customRainBdst|undefined}>({data:undefined,isOpen:false }) + const [detailModal, setDetailModal] = useState<{ isOpen: boolean, data: customRainBdst | undefined }>({ data: undefined, isOpen: false }) const [bdstChgProps, setBdstChgProps] = useState<{ isOpen: boolean; chBuilding: chgBuilding[]; @@ -42,23 +42,22 @@ export default function RainSttn() { const codeData = getCityOrSgg(ref); - const cellClick=(index:number|undefined, headId: string)=>{ + const cellClick = (index: number | undefined, headId: string) => { - if(headId!=='chBuildingYn' && index!==undefined && bdstTable!==undefined){ - setDetailModal({isOpen:true ,data:bdstTable[index] }) - }else if( headId==='chBuildingYn' && index!==undefined && bdstTable!==undefined){ + if (headId !== 'chBuildingYn' && index !== undefined && bdstTable !== undefined) { + setDetailModal({ isOpen: true, data: bdstTable[index] }) + } else if (headId === 'chBuildingYn' && index !== undefined && bdstTable !== undefined) { if ( bdstTable[index] && - bdstTable[index]?.chgBuilding[0]?.bdstChgNm!==null - + bdstTable[index]?.chgBuilding[0]?.bdstChgNm !== null + ) { - setBdstChgProps({ isOpen:true , chBuilding: bdstTable[index].chgBuilding}); + setBdstChgProps({ isOpen: true, chBuilding: bdstTable[index].chgBuilding }); } } } - useEffect(() => { if (!rainSttn.isInit) { rainSttnInit(codeData ?? "0"); @@ -73,7 +72,7 @@ export default function RainSttn() { ...item, ...item.reuseBuilding[0], ...item.reuseBuilding[0].rainyObj, - chBuildingYn:item.chgBuilding[0]?.bdstChgNm!==null?'Y':'N' + chBuildingYn: item.chgBuilding[0]?.bdstChgNm !== null ? 'Y' : 'N' })) .filter((item: any) => item.rainyObj !== undefined); @@ -92,14 +91,15 @@ export default function RainSttn() { excelDownload( rainSttn.excelList, "빗물재이용시설 현황", - "sample_rainSttn.xlsx" + "sample_rainSttn.xlsx", + "A1:W3" ); } }, [rainSttn.excelList]); const excelClick = useCallback(() => { if (codeData) rainSttnSearch(1, "10000", codeData); - }, [rainSttnSearch,codeData]); + }, [rainSttnSearch, codeData]); return ( <> @@ -136,7 +136,7 @@ export default function RainSttn() { rainSttnSearch(1, "20", con); }} excelClick={excelClick} - initClick={function (): void {}} + initClick={function (): void { }} btnClass={btnClass} ref={ref} /> @@ -154,7 +154,7 @@ export default function RainSttn() { headlist={rainSttn.rainSttHeadList} pageSize={20} total={100000} - cellClick={(index: number | undefined,headId:string)=>{cellClick(index ?? undefined,headId)} } + cellClick={(index: number | undefined, headId: string) => { cellClick(index ?? undefined, headId) }} onPageChange={setPageNation} > @@ -177,12 +177,12 @@ export default function RainSttn() { } /> { - setDetailModal({...detailModal, isOpen:!detailModal.isOpen}) - }} - bodyClass={"w-[40vw] max-w-none max-h-[calc(100%-70px)]"} - body={}/> + open={detailModal.isOpen} + onOpenChange={() => { + setDetailModal({ ...detailModal, isOpen: !detailModal.isOpen }) + }} + bodyClass={"w-[40vw] max-w-none max-h-[calc(100%-70px)]"} + body={} /> ; htdflSttNodeList: CommonTableProps[]; - htdflSttnRes:customHtdflBdst[] + htdflSttnRes: customHtdflBdst[] excelList: []; }; }; type htdflSttnActions = { - initHtdfl:(con:string) => void; + initHtdfl: (con: string) => void; htdflSttnSearch: (page: number, total: string, con: string) => void; htdflChSttnHead: ( headList: z.infer, @@ -33,16 +33,16 @@ export const htdflSttnStateExport: htdflSttnState = { htdflSttn: { htdflSttHeadList: htdflSttHeadList, htdflSttNodeList: htdflSttNodeList, - htdflSttnRes:[], - excelList:[], + htdflSttnRes: [], + excelList: [], isInit: false, }, }; -const initFetch = async (code:string|number) => { +const initFetch = async (code: string | number) => { const htdflRes = await getFetch( "wr", `/drain/facilityList/1/20/${code}`) - + return htdflRes; }; @@ -50,74 +50,72 @@ export const htdflSttnActionsExport: (set: any) => htdflSttnActions = ( set: any ) => { return { - initHtdfl: async (code: string | number) => { - try { - const htdflSttnRes = await initFetch(code); - set((state: htdflSttnState) => { - return { - ...state, - htdflSttn: { - ...state.htdflSttn, - htdflSttnRes: htdflSttnRes, - isInit: false, - }, - }; - }); - } catch (error) { - console.log(error); - } + initHtdfl: async (code: string | number) => { + try { + const htdflSttnRes = await initFetch(code); + set((state: htdflSttnState) => { + return { + ...state, + htdflSttn: { + ...state.htdflSttn, + htdflSttnRes: htdflSttnRes, + isInit: false, + }, + }; + }); + } catch (error) { + console.log(error); + } + }, + htdflSttnSearch: async (page: number, total: string, con: string) => { + try { + const htdflSttnRes = await getFetch( + fetchType.WR, + `/drain/facilityList/${page}/${total}/${con}` + ); + if (Number(total) > 9000) { + + + set((state: htdflSttnState) => { + + return { + ...state, + htdflSttn: { + ...state.htdflSttn, + excelList: htdflSttnRes, + }, + }; + }); + } else + set((state: htdflSttnState) => { + return { + ...state, + htdflSttn: { + ...state.htdflSttn, + htdflSttnRes: htdflSttnRes, + isInit: false, + }, + }; + }); + } catch (erTxt) { + console.log("error", erTxt); + } + }, + htdflChSttnHead: async ( + headList: z.infer + ): Promise => { + + const changeNodeList = controlHeadView(headList, htdflSttNodeList) + + return set((state: htdflSttnState) => ({ + htdflSttn: { + ...state.htdflSttn, + htdflSttHeadList: headList, + htdflSttNodeList: changeNodeList, }, - htdflSttnSearch: async (page: number, total: string, con: string) => { - try { - console.log(page) - const htdflSttnRes = await getFetch( - fetchType.WR, - `/drain/facilityList/${page}/${total}/${con}` - ); - if (Number(total) > 9000) { - - - set((state: htdflSttnState) => { + })); + }, - return { - ...state, - htdflSttn: { - ...state.htdflSttn, - excelList: htdflSttnRes, - }, - }; - }); - } else - set((state: htdflSttnState) => { - return { - ...state, - htdflSttn: { - ...state.htdflSttn, - htdflSttnRes: htdflSttnRes, - isInit: false, - }, - }; - }); - } catch (erTxt) { - console.log("error", erTxt); - } - }, - htdflChSttnHead: async ( - headList: z.infer - ): Promise => { - - console.log('head ', headList) - const changeNodeList= controlHeadView(headList,htdflSttNodeList) - - return set((state: htdflSttnState) => ({ - htdflSttn: { - ...state.htdflSttn, - htdflSttHeadList: headList, - htdflSttNodeList: changeNodeList, - }, - })); - }, - } } \ No newline at end of file diff --git a/apps/wr/public/sample_rainSttn.xlsx b/apps/wr/public/sample_rainSttn.xlsx index 006e06aba139750794657eec83dcb725105d9c8d..f00a520cf6e2c26951ab8e345e30d95ce40b631f 100644 GIT binary patch literal 10734 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 U!E_J+z=VAmU}{{&@Y~)009H4^c>n+a literal 9091 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 KCztHc+kXMYgj1FP