From 5f559b4e2d3ce567324e69280c70def9cc9e924f Mon Sep 17 00:00:00 2001 From: leedj312 Date: Wed, 13 Aug 2025 13:56:51 +0900 Subject: [PATCH] =?UTF-8?q?=ED=95=98=EC=88=98=EC=B2=98=EB=A6=AC=EC=8B=9C?= =?UTF-8?q?=EC=84=A4=20=ED=8C=9D=EC=97=85=EB=8F=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wr/app/store/map/pbnstMap/excel.ts | 21 +++++++ apps/wr/app/store/map/pbnstMap/index.tsx | 56 +++++++++++++++++- .../LayerPopUp/HasuFacilty/HasuFacility.tsx | 33 +++++++++-- apps/wr/public/sample_hasuMap.xlsx | Bin 0 -> 8671 bytes 4 files changed, 104 insertions(+), 6 deletions(-) create mode 100644 apps/wr/app/store/map/pbnstMap/excel.ts create mode 100644 apps/wr/public/sample_hasuMap.xlsx diff --git a/apps/wr/app/store/map/pbnstMap/excel.ts b/apps/wr/app/store/map/pbnstMap/excel.ts new file mode 100644 index 000000000..63484b12f --- /dev/null +++ b/apps/wr/app/store/map/pbnstMap/excel.ts @@ -0,0 +1,21 @@ + +export const excelHasuMapParsing = ( + excel:{data:any[]} +): string[][] => { + const excelExportData: string[][] = []; + + excel.data.forEach((item) => { + + excelExportData.push([ + item.sido??'', + item.gugun??'', + item.bscFctNm ?? "", + String(item.addr??""), + item.efflWqltStndrdNm ?? "", + String(item.fctCpc ?? ""), + String(item.ruse ?? ""), + String(item.rswtrYn ?? ""), + ]); + }); + return excelExportData; +}; \ No newline at end of file diff --git a/apps/wr/app/store/map/pbnstMap/index.tsx b/apps/wr/app/store/map/pbnstMap/index.tsx index c093431ff..4cd118caa 100644 --- a/apps/wr/app/store/map/pbnstMap/index.tsx +++ b/apps/wr/app/store/map/pbnstMap/index.tsx @@ -1,9 +1,10 @@ import { fetchType, postFectch } from "@/components/lib/api"; import type { pubHasuType } from "../../ruseFcltMng/fcltReg/pbnstReg/type"; import { checkWrRegList } from "../../ruseFcltMng/fcltReg/pbnstReg"; -import type { ReturnType } from "@common/business_components/ui"; +import type { ReturnType} from "@common/business_components/ui"; import { pubFacHeadListExport } from "../../ruseFcltMng/fcltReg/pbnstReg/headList"; import type { TableUpperProps } from "../../common/type/header"; +import { excelHasuMapParsing } from "./excel"; export const pbnMapTableSize = 20; @@ -61,12 +62,23 @@ export type pbnMapState = { pbnMapRes: pubHasuType[]; pbnMapCount: number; pbnMapHeadList: TableUpperProps[]; + hasuMapExcelList:[] }; }; type pbnMapActions = { pbnMapInit: (page: number, pageTotal: number, reurnValue: ReturnType) => void; - pbnMapDetaile: (featureCd: string, data: string) => Promise; + pbnMapSearch: ( + isExcel: boolean, + page: number, + pageTotal: number, + reurnValue: ReturnType, + txt: string, + ) => void; + pbnMapDetaile: ( + featureCd: string, + data: string + ) => Promise; }; export type pbnMapType = pbnMapState & pbnMapActions; @@ -77,6 +89,7 @@ export const pbnMapStateExport: pbnMapState = { pbnMapRes: [], pbnMapCount: 1, pbnMapHeadList: pubFacHeadListExport, + hasuMapExcelList:[] }, }; @@ -124,5 +137,44 @@ export const pbnMapActionsExport: (set: any) => pbnMapActions = (set: any) => { throw error; // 호출부에서 catch 가능하도록 } }, + pbnMapSearch: async ( + isExcel: boolean, + page: number, + pageTotal: number, + reurnValue: ReturnType, + txt: string, + ) => { + try { + const hasuMapRes = await hasuListFetch(page, pageTotal, reurnValue, txt); + if (isExcel) { + const hasuMapExcelList = excelHasuMapParsing( + hasuMapRes + ); + set((state: pbnMapState) => { + return { + ...state, + pbnMap: { + ...state.pbnMap, + hasuMapExcelList: hasuMapExcelList + }, + }; + }); + } else { + set((state: pbnMapState) => { + return { + ...state, + pbnMap: { + ...state.pbnMap, + pbnMapRes: hasuMapRes.data, + pbnMapCount: hasuMapRes.count, + isInit: false, + }, + }; + }); + } + } catch (e) { + console.log(e); + } + }, }; }; diff --git a/apps/wr/components/ui/map/LayerPopUp/HasuFacilty/HasuFacility.tsx b/apps/wr/components/ui/map/LayerPopUp/HasuFacilty/HasuFacility.tsx index 4f9d052de..2a8210aa0 100644 --- a/apps/wr/components/ui/map/LayerPopUp/HasuFacilty/HasuFacility.tsx +++ b/apps/wr/components/ui/map/LayerPopUp/HasuFacilty/HasuFacility.tsx @@ -2,7 +2,7 @@ import { useWrStore } from "@/app/store"; import { btnClass } from "@/app/store/common/code"; import { pbnMapTableSize } from "@/app/store/map/pbnstMap"; import type { pubHasuType } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type"; -import { tableData } from "@/components/lib/func/commom"; +import { excelDownload, tableData } from "@/components/lib/func/commom"; import { ContentsDiv, SearchBaseForm, @@ -13,14 +13,17 @@ import { } from "@common/business_components/ui"; import { Label } from "@common/components/ui"; import { useEffect, useRef, useState } from "react"; +import toast from "react-hot-toast"; +import { useTranslation } from "react-i18next"; export function HasuFacility({rtnFeature}:{rtnFeature:(feature:any)=>void } ) { - const { code, pbnMap, pbnMapInit } = useWrStore((state) => state); + const { code, pbnMap, pbnMapInit ,pbnMapSearch} = useWrStore((state) => state); const [hasuTable, setHasuTable] = useState(); const [isReset, setIsReset] = useState(false); const [pbnRuseNm, setPbnRuseNm] = useState(""); const ref = useRef({} as ReturnType); - const { pbnMapHeadList, pbnMapRes, pbnMapCount } = pbnMap; + const { pbnMapHeadList, pbnMapRes, pbnMapCount ,hasuMapExcelList} = pbnMap; + const { t } = useTranslation("base"); useEffect(() => { if (!pbnMap.isInit) { @@ -39,6 +42,22 @@ export function HasuFacility({rtnFeature}:{rtnFeature:(feature:any)=>void } ) { rtnFeature(pbnMapRes[index]) } }; + + + useEffect(() => { + if (hasuMapExcelList.length > 0) { + excelDownload( + hasuMapExcelList, + "하수처리시설 현황", + "sample_hasuMap.xlsx", + "A1:H1", + 2 + ); + } else { + toast.error(t("excelDownErrMsg")); + } + }, [hasuMapExcelList]); + return ( <> @@ -83,6 +102,10 @@ export function HasuFacility({rtnFeature}:{rtnFeature:(feature:any)=>void } ) { isAdmin={false} excelClick={function (returnType: ReturnType): void { console.log("pbnstSttnSearch ", returnType); + + + pbnMapSearch(true,1, 100000, returnType,'' ) + }} /> @@ -96,7 +119,9 @@ export function HasuFacility({rtnFeature}:{rtnFeature:(feature:any)=>void } ) { headName={""} cellClick={hasuCellClick} onPageChange={(page) => { - pbnMapInit(page, pbnMapTableSize, ref.current); + //pbnMapInit(page, pbnMapTableSize, ref.current); + + pbnMapSearch(false,page, pbnMapTableSize, ref.current,pbnRuseNm??'' ) setIsReset(false); }} resetPageNo={isReset} diff --git a/apps/wr/public/sample_hasuMap.xlsx b/apps/wr/public/sample_hasuMap.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..70fe3a0d1e013b5c5eebaac4ce42e31dabe9d23a GIT binary patch literal 8671 zcmaKS1ymec*Jb1G1PJc#gy8P(PVmOv-QC^YAwY0~yIXJw65L$_L5941Gx;7f|MXg2 zwQg1Iz3$rg^gXA}Zh0v%aC87902;t$g`j03nK!rv004MF0RXtyv#veR(t&~g_c1EI zTeg=GKKM+$O(^l#p|v=4UQw%bg0qk*x39#?M{_hW3CNuj7|h&hES~SrPrvGRPOR+< zTnkcZJ;)YR=pfw22OeaHQ)cvU2wlcc#&6R^$3zm`apEauc&V25aPdLnPlxr(*<%@! zk_&pZdlm)wdGy4p%Z@xkJ9&&)uF%B_jJVUesALKJl3g8^HDx^JO~iP0u|PfmFN4RZ z`+6|yijx+_3nKq7Ei{X{U1~r8fGRKm0Qpr5BO60`dmCE^27OywdRHsU zETwMiWk&dRq(wfg7B**peJs!=k+}SQeG#xetI2ffWkD;6SoMO{g_!tQWiyZOQ88y> z?!;8y_ndP5pc6C&7L7V86#zP!l56?8klWo&%vQ?|pDhm)T6X1iIL~jN%v6cu86Vq>x1*_?1mHiNYk0lXQ-&C#PJpXv__W|ClwKr4rbn! z*l?{D?17R=-kS{r8^SC(r$Zkh>LlBG zi&K=*^lNC37{ZI??eeo?9qY~@VFT}Uo`TY?)Gx$bp}{Ja1i{d-&0+s8rs+cf3L4qoXl&$BM04y zuMl1G+Idqds~$@Fw&bItiV!*{vslp?4A#oboPGtdz&K_HZORYnl8_QtNZGpE%}Cqx zY)b}KgBpqyiBg6cp!;sB5X~9{o|+`sh7Md`lkTOTk91X*eZZpVg6vSx=(&NW%bEc< z98Doii)s^cv(tG$oXIc_YB7+r1Zs;txTo%K2;l(F)+O&ETrY;vCUl6Y)adJPNGafN zk3pf}|I&sSSucj8S+tkfWAy>I0mGBR`Ly9(R!!AW>BM)|$7dMt%(az7{~=8(HF% zn?qaP3SDsl_tvd#Jymlbs;V+U6P{tm3%n3XHLhbP8;;FH$WA{90ep|BfVW+#+eC_D7{~{jrnGcwxGG*GY9BU7-pBDkmxNcZtt0W z7VA|`qTLuy`~_KmCPGVjdZDQ{IzMHgDgp6%4X|PLYXC>@x|hq^x%x(etnRhx;Z9OZX(ruL)gwn zLkqtuX31ma&0cz8jBR2TtWbGtV_C(6$m@C@yYw!uAg?D`aj`Osx zqtoqI%{N}P$Nr=JpI!aGSKyx=zA}E&{B?&PI1A_qnDVllj$#tc(izEJsPX`8QQDar z;7A?iG<_M?lOYO0v}f{+e>yOc_dK zbNUQktrcM$K8K=ST5m|A5$$a{Gr_ka=@Y{*9K(x4x#I$Clqqh{&9HMvIkSmVfBCmIv?jM!zEA)_ z2QdJE_D35>Q=k=);h!VZ@7O%il(E5O#p)orAgE|=T9Wx_hU%mRWNSsJH!C=9EEPMe za2bp;;jV3$xDEbJf{L0?NH4y^PME7mV@K6VE)OnpsJq_4Ly$doYNUh;leZn~YRPvN z@`J%=d-r53HcyC{bVp(4v+ftSP+?wzY15T!{M*)rc^=Yt(ZQ(~p�*;_zF%j(U;4 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 literal 0 HcmV?d00001