diff --git a/apps/wr/app/ruseFcltMng/fcltReg/pbnstReg/page.tsx b/apps/wr/app/ruseFcltMng/fcltReg/pbnstReg/page.tsx index a3c4e4110..8994e46c1 100644 --- a/apps/wr/app/ruseFcltMng/fcltReg/pbnstReg/page.tsx +++ b/apps/wr/app/ruseFcltMng/fcltReg/pbnstReg/page.tsx @@ -10,20 +10,20 @@ import { } from "@common/business_components"; import { Button, Input } from "@common/components"; import { useWrStore } from "../../../store"; -import { PbnstBuseForm } from "@/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm"; import { Tabs, TabsList, TabsTrigger, TabsContent } from "@common/components"; -import { PbnstMngForm } from "@/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm"; import { useEffect, useState } from "react"; -import type { customPbnst, ruseFcltType } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg"; import ListDiv from "@common/business_components/ui/list_div"; import { tableData } from "@/components/lib/func/commom"; +import type { customPbnst, ruseFcltType } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type"; +import { PbnstMngForm } from "@/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm"; +import { PbnstBuseForm } from "@/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm"; export default function PublicReuseFaciltyInsert() { - const { code, pubFac, pubHasuInit } = useWrStore((state) => state); - const { pubFacHeadList } = pubFac; + const { code, pbnst, pubHasuInit } = useWrStore((state) => state); + const { pubFacHeadList,pbnstHasuRes } = pbnst; - const {pbnstReg} = pubFac + const {pbnstRes} = pbnst const [currentTab, setCurrentTab] = useState("mng"); const [fcltMng, setFcltMng] = useState(); const [searchTxt, setSearchTxt] = useState(); @@ -31,17 +31,17 @@ export default function PublicReuseFaciltyInsert() { useEffect(() => { - if (!pubFac.isInit) { + if (!pbnst.isInit) { pubHasuInit(undefined); } - }, [pubFac.isInit, pubHasuInit]); + }, [pbnst.isInit, pubHasuInit]); useEffect(() => { if (code.sggCd.length > 0) { - setbdstTable(tableData(pbnstReg, { code })); + setbdstTable(tableData(pbnstHasuRes, { code })); } - }, [code, pbnstReg]); + }, [code, pbnstHasuRes]); const onSelectValue = (val: string) => { @@ -109,7 +109,7 @@ useEffect(() => { total={10} headName={"공공 하수처리시설 등록"} cellClick={cellClick} - onPageChange={(page: number) => { } } children={undefined} /> + onPageChange={(page: number) => { } } children={undefined} /> diff --git a/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx b/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx index 955a4f7d6..c6ffe6807 100644 --- a/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx +++ b/apps/wr/app/ruseFcltMng/prfmncReg/chkgdnReg/page.tsx @@ -88,7 +88,7 @@ export default function Page() { if (rswtChkgdn.excelList[0]?.data.length > 1) excelArrayDownload( - "중수도_점검결과_이용량현황", + "중수도시설 지도점검", "sample_rs_chk.xlsx", rswtChkgdn.excelList ); diff --git a/apps/wr/app/ruseFcltMng/prfmncSttn/chkgdnSttn/page.tsx b/apps/wr/app/ruseFcltMng/prfmncSttn/chkgdnSttn/page.tsx index f0bf16393..eca2033c4 100644 --- a/apps/wr/app/ruseFcltMng/prfmncSttn/chkgdnSttn/page.tsx +++ b/apps/wr/app/ruseFcltMng/prfmncSttn/chkgdnSttn/page.tsx @@ -70,8 +70,6 @@ export default function Page() { },[rswtChkSttn.isInit, rswtChkSttnInit]) - - const handleClick = useCallback( (data: any) => { if (data) setIsModal({ open: !isModal.open, data: data }); @@ -79,9 +77,6 @@ export default function Page() { [isModal] ); const excelDown=() =>{ - - - console.log("excelDown" , rainChkSttn.sttnExcelList) if(rainChkSttn.sttnExcelList && selFcltDiv === "RNB"){ excelDownload( rainChkSttn.sttnExcelList, @@ -90,10 +85,7 @@ const excelDown=() =>{ "A1:Q2", 3 ); - - }else if(rswtChkSttn.sttnExcelList && selFcltDiv === "RST"){ - console.log("rswtChkSttn " , rswtChkSttn.sttnExcelList) excelDownload( rswtChkSttn.sttnExcelList, "중수도시설 지도점검 현황", diff --git a/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/excel.tsx b/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/excel.tsx index f8593fa51..1364d6660 100644 --- a/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/excel.tsx +++ b/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/excel.tsx @@ -28,6 +28,7 @@ export const rswtMakeExcelSample = ( "", "", "", + "", useType, "", "", @@ -72,6 +73,7 @@ export const rswtMakeExcelSample = ( "", "", "", + "", useType, "", "", @@ -145,15 +147,15 @@ export const excelToRswtGuideData = (excelData: any, year: string) => { return { bdstRuseFcltFk: Number(item["NO"]), + operMngCd: item["운영관리형태"], + anlOperCst: Number(item["연간운영비(원/년)"]) ?? 0, + prcsCpct: item["처리용량(m³)"], + spwtPositn: item["채수지점"], chckYmd:checkYmd, utztnUsgCd: item["이용용도"], - spwtPositn: item["유량측정방법"], + guideDetails: makeGuidDetail, rgtr: TEST_UUID, mdfr: TEST_UUID, - oilqMeasMthd: item["운영관리형태"], - anlOperCst: Number(item["연간운영비(원/년)"]) ?? 0, - operMngCd: item["유량측정방법"], - guideDetails: makeGuidDetail, }; } @@ -210,13 +212,13 @@ export const excelToRswtPolution = (excelData: any, year: string) => { bdstRuseFcltFk: Number(item["NO"]), chckYmd: checkYmd, utztnUsgCd: item["이용용도"], - spwtPositn: item["유량측정방법"], + operMngCd: item["운영관리형태"], + anlOperCst: Number(item["연간운영비(원/년)"]) ?? 0, + prcsCpct: item["처리용량(m³)"], + spwtPositn: item["채수지점"], + rswtrPollutions: makePoluttion, rgtr: TEST_UUID, mdfr: TEST_UUID, - oilqMeasMthd: item["운영관리형태"], - anlOperCst: Number(item["연간운영비(원/년)"]) ?? 0, - operMngCd: item["유량측정방법"], - rswtrPolutions: makePoluttion, rswtrDetails: [ { utztnUsgCd: item["이용용도"], diff --git a/apps/wr/app/store/ruseFcltMng/fcltReg/bdstReg/index.tsx b/apps/wr/app/store/ruseFcltMng/fcltReg/bdstReg/index.tsx index 4b35220da..f72bf7692 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltReg/bdstReg/index.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltReg/bdstReg/index.tsx @@ -1,6 +1,5 @@ import { getFetch } from "@/components/lib/api"; import { TEST_UUID, type customRainBdst } from "../rainReg"; -import type { TableProps } from "../pbnstReg"; import type { customHtdflBdst } from "../htdflReg"; import type { customRswtBdst } from "../rswtReg"; @@ -23,7 +22,7 @@ type TableUpperProps = { ]; - const bdstChgHeadList: TableProps[] = [ + const bdstChgHeadList: TableUpperProps[] = [ { id: "bdstChgNm", title: "구분" }, { id: "archChgPrmsnDt", title: "허가일" }, { id: "archChgArea", title: "변경면적" }, @@ -144,10 +143,6 @@ const isRswtBdst = (data: any): data is customRswtBdst =>{ } - - - - export type bdstFulType = bdstState & bdstActions; @@ -155,7 +150,7 @@ export type bdstState = { bdst: { bdstBase: any[]; moUpHeadList:TableUpperProps[] - bdstChgHeadList:TableProps[] + bdstChgHeadList:TableUpperProps[] }; }; diff --git a/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/headList.tsx b/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/headList.tsx index ef4101e9a..f24d33ad3 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/headList.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/headList.tsx @@ -2,6 +2,9 @@ import type { chHeadType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn/head import type { TableUpperProps } from "../rainReg"; + + + export const pubFacHeadListExport: TableUpperProps[] = [ { id: "sido", title: "시도" }, { id: "gugun", title: "시군구" }, @@ -33,41 +36,41 @@ export type formDetailType ={ export const wasteWaterFcltINfo:formDetailType[]=[ - {id:'username' , lable:'폐수배출물신고 허가여부'}, - {id:'username' , lable:'Tms설치여부'}, - {id:'username' , lable:'공공하수도유입제외 허가여부'}, + {id:'wwtEmsnFcltPrmsnYn' , lable:'폐수배출물신고 허가여부'}, + {id:'tmsInstlYn' , lable:'Tms설치여부'}, + {id:'pbnstDrngInflwExclYn' , lable:'공공하수도유입제외 허가여부'}, ] export const concentratedWaterInfo:formDetailType[]=[ -{id:'username' , lable:'눙축수 발생량(m³/일)'}, -{id:'username' , lable:'눙축수연계지점'}, -{id:'username' , lable:'시설용량(m³/일)'}, -{id:'username' , lable:'눙축수처리방식'}, -{id:'username' , lable:'눙축수처리공법'}, +{id:'erctWtrOcrnCpct' , lable:'눙축수 발생량(m³/일)'}, +{id:'erctUswtrLinkSpt' , lable:'눙축수연계지점'}, +{id:'erctUswtrFcltCpct' , lable:'시설용량(m³/일)'}, +{id:'erctUswtrPrcsMeth' , lable:'눙축수처리방식'}, +{id:'erctUswtrPrcsMsrcCd' , lable:'눙축수처리공법'}, ] export const ruseFcltinfo:formDetailType[]=[ - {id:'username' , lable:'시설용량(m³/일)'}, - {id:'username' , lable:'주처리공법'}, - {id:'username' , lable:'위치(주소)'}, - {id:'username' , lable:'재처리방식'}, - {id:'username' , lable:'위치(처리장 내외)'}, - {id:'username' , lable:'메인공급펌프 용량'}, + {id:'rprcsFcltCpct' , lable:'시설용량(m³/일)'}, + {id:'majorPrcsMsrcCd' , lable:'주처리공법'}, + {id:'addr' , lable:'위치(주소)'}, + {id:'rprcsMthdCd' , lable:'재처리방식'}, + {id:'inoutYn' , lable:'위치(처리장 내외)'},// 머가 내? 외?, + {id:'mainSplyPumpCpct' , lable:'메인공급펌프 용량'}, ] export const businessMoneyInfo:formDetailType[]=[ - {id:'username' , lable:'국고'}, - {id:'username' , lable:'지방비'}, + {id:'gvsbs' , lable:'국고'}, + {id:'lcep' , lable:'지방비'}, {id:'username' , lable:'민간투자비'}, - {id:'username' , lable:'원인자부담금'}, - {id:'username' , lable:'기타'}, - {id:'username' , lable:'합계'}, + {id:'cusr_alotm' , lable:'원인자부담금'}, + {id:'etc' , lable:'기타'}, + {id:'totalMoney' , lable:'합계'}, ] export const businessSttnInfo:formDetailType[]=[ - {id:'username' , lable:'구분'}, - {id:'username' , lable:'사업방식'}, - {id:'username' , lable:'사업준공일' ,type:'date'}, - {id:'username' , lable:'설치승인인가일' ,type:'date'} , + {id:'seCd' , lable:'구분'}, + {id:'bizMthdCd' , lable:'사업방식'}, + {id:'bizCmcnDay' , lable:'사업준공일' ,type:'date'}, + {id:'instlAprvSncnDt' , lable:'설치승인인가일' ,type:'date'} , ] \ No newline at end of file diff --git a/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/index.tsx b/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/index.tsx index 6438fecaf..b8e3a00ea 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/index.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/index.tsx @@ -3,128 +3,142 @@ import type { TableUpperProps } from "../rainReg"; import { getFetch } from "@/components/lib/api"; import type { chHeadType } from "@/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList"; import { pubFacHeadListExport, pubMngNmExport, pubMngUpHeadListExport } from "./headList"; +import { exampleData, fcBizSchema, type customPbnst, type pubHasuType } from "./type"; +import type { SelectDataType } from "@common/business_components/ui"; -export const pbnstZod = z.object({ - bscFctCd:z.string(), - sido:z.string().default(""), - gugun: z.string().default(""), - bscFctNm:z.string().default(""), - efflWqltStndrdNm:z.string().default(""), - fctCpc:z.number().default(0) - -}) - - -export type customPbnst = z.infer - - -export const pbnstReg =[] as customPbnst[]; -export type TableProps = { - id: string; - title: string; -}; - - - - -export type selectLabel = { - text: string; - val: string; -}; - -export type publicReuseFacilityType = { - sido: string; - sigungo: string; - facilityName: string; - location: string; - locationgubun: string; - facilityCapacity: string; - yn?: string; - authoDay?: string; - area?: string; - reuse?: string; - register?: string; - swtrmtFcltFk: string; -}; -export type fcltOperInfoType = { - mng: string; - subCo: string; - startDay: string; - endDay: string; - pbnstRuseFcltPk: string; -}; - -export type ruseFcltType = { - swtrmtFcltFk: string; - pbnstRuseFcltPk:string; - fcltNm:string; - fcltCpct: number; - swtrmtCpct: number; - ruseCpct:number; - splyExtraCpct:number; -}; -const selectLabel: selectLabel[] = [{ text: "test", val: "1" }]; +const selectLabel: SelectDataType[] = [{ text: "test", val: "1" }]; const pubFacHeadList= pubFacHeadListExport; const pubMngUpHeadList = pubMngUpHeadListExport const pubMngNm= pubMngNmExport; export type pubFacState = { - pubFac: { + pbnst: { isInit: boolean; - pubFacHeadList: TableProps[]; + pubFacHeadList: TableUpperProps[]; pubMngUpHeadList: TableUpperProps[]; pubMngNm: chHeadType[]; - selectLabel: selectLabel[]; - pbnstReg:customPbnst[]; - } + pbnstHasuRes: pubHasuType[] + selectLabel: SelectDataType[]; + pbnstRes: customPbnst[]; + pbnstBizCycle: SelectDataType[]; + }; }; type pubFacActions = { - pubHasuInit: (txt:string|undefined) => void; + pbnstRegInit: (sgg: string) => void; + pbnstRegSearch: (txt: string | undefined, sgg: string) => void; + pbnstReg: (txt: string | undefined) => void; + pubHasuInit: (txt: string | undefined) => void; }; export type pubFacType = pubFacState & pubFacActions; export const pubFacStateExport: pubFacState = { - pubFac: { + pbnst: { isInit: false, pubFacHeadList: pubFacHeadList, pubMngUpHeadList: pubMngUpHeadList, selectLabel: selectLabel, - pubMngNm:pubMngNm, - pbnstReg:pbnstReg, + pubMngNm: pubMngNm, + pbnstHasuRes: [], + pbnstRes: [], + pbnstBizCycle:[] }, - }; -const initFetch = async (txt:string|undefined) => { - - const rainRes =await getFetch("common", `/prcsFclt/info/1/10/'A'/41220` +(txt? `/${txt}`:'')+'/0'+'/1' ); - - return rainRes +const initFetch = async (txt: string | undefined) => { + const rainRes = await getFetch( + "common", + `/prcsFclt/info/1/10/A/41220` + (txt ? `/${txt}` : "") + "/500" + "/1" + ); + return rainRes; }; + +const getBizCycle = async (fcBizs: z.infer[] ) => { + const pbnstBizCycle =fcBizs.map((item: z.infer) => { + return { + text: `${item.cycl}차수`, + val: item.cycl, + }; + }); + return pbnstBizCycle; +} export const pubFacActionsExport: (set: any) => pubFacActions = (set: any) => { return { - pubHasuInit: async(txt:string |undefined)=>{ - try{ - const pbnstReg = await initFetch(txt) - return set((state:pubFacState)=>({ + pubHasuInit: async (txt: string | undefined) => { + try { + const pbnstHasuRes = await initFetch(txt); + + + return set((state: pubFacState) => ({ ...state, - pubFac:{ - ...state.pubFac, - pbnstReg:pbnstReg, + pbnst: { + ...state.pbnst, + pbnstHasuRes:pbnstHasuRes, isInit: false, - } - })) - - }catch(errorHasu){ - console.log(errorHasu) + }, + })); + } catch (errorHasu) { + console.log(errorHasu); } + }, + pbnstRegInit: async (txt: string | undefined) => { + try { + //const pbnstRes = await initFetch(txt); + const pbnstRes = exampleData; - } + const pbnstBizCycle = getBizCycle(pbnstRes?.fcBizs); + return set((state: pubFacState) => ({ + ...state, + pbnst: { + ...state.pbnst, + pbnstRes: pbnstRes, + pbnstBizCycle:pbnstBizCycle, + isInit: false, + }, + })); + } catch (errorHasu) { + console.log(errorHasu); + } + }, + pbnstRegSearch: async (txt: string | undefined, sgg: string) => { + try { + const pbnstRes = await getFetch( + "wr", + `/api/v1/reuseFc/pubFc` + (txt ? `/${txt}` : "") + `/${sgg}` + ); + const pbnstBizCycle = getBizCycle(pbnstRes.fcBizs); + return set((state: pubFacState) => ({ + ...state, + pbnst: { + ...state.pbnst, + pbnstReg: pbnstRes, + pbnstBizCycle:pbnstBizCycle, + isInit: false, + }, + })); + } catch (errorHasu) { + console.log(errorHasu); + } + }, + pbnstReg: async (txt: string | undefined) => { + try { + const pbnstRes = await initFetch(txt); + return set((state: pubFacState) => ({ + ...state, + pbnst: { + ...state.pbnst, + pbnstRes: pbnstRes, + isInit: false, + }, + })); + } catch (errorHasu) { + console.log(errorHasu); + } + }, }; }; diff --git a/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/type.tsx b/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/type.tsx new file mode 100644 index 000000000..1a8f1479f --- /dev/null +++ b/apps/wr/app/store/ruseFcltMng/fcltReg/pbnstReg/type.tsx @@ -0,0 +1,442 @@ +import { z } from "zod"; + +export type customPbnst = z.infer; + +export const pbnstReg = [] as customPbnst[]; +export type TableProps = { + id: string; + title: string; +}; + +export type selectLabel = { + text: string; + val: string; +}; + +export type publicReuseFacilityType = { + sido: string; + sigungo: string; + facilityName: string; + location: string; + locationgubun: string; + facilityCapacity: string; + yn?: string; + authoDay?: string; + area?: string; + reuse?: string; + register?: string; + swtrmtFcltFk: string; +}; +export type fcltOperInfoType = { + mng: string; + subCo: string; + startDay: string; + endDay: string; + pbnstRuseFcltPk: string; +}; + +export type ruseFcltType = { + swtrmtFcltFk: string; + pbnstRuseFcltPk: string; + fcltNm: string; + fcltCpct: number; + swtrmtCpct: number; + ruseCpct: number; + splyExtraCpct: number; +}; + +const pplInstlSchema = z.object({ + ruseFcltBizFk: z.string(), + pdmt: z.string(), + ppMqlt: z.string(), + cpct: z.string(), +}); +const fcFileSchema = z.object({ + ruseFcltFk: z.number().default(0), + fileTkn: z.string().default("test"), + filePath: z.string().default("test"), + fileKnd: z.string().default("test"), + regDt: z.date().default(new Date()), + rgtr: z.string().default("test"), + mdfcnDt: z.date().default(new Date()), + mdfr: z.string().default("test"), +}); + +const fcOperSchema = z.object({ + pbnstRuseFcltOperInfoPk: z.number().default(0), + pbnstRuseFcltFk: z.number().default(0), + operMthd: z.string(), + rprtvBzenty: z.string(), + bgngDt: z.date().default(new Date()), + endDt: z.date().default(new Date()), + regDt: z.date().default(new Date()), + rgtr: z.string().default("test"), + mdfcnDt: z.date().default(new Date()), + mdfr: z.string().default("test"), +}); + +const fcOrgwtSchema = z.object({ + pbnstRuseFcltBizFk: z.number().default(0), + swtrmtFcltFk: z.number().default(0), + orgwtWtritQnt: z.string(), + tmsYn: z.string(), + dschgFmYn: z.string(), + dtlPstnExpln: z.string(), + regDt: z.date().default(new Date()), + rgtr: z.string().default("test"), + mdfcnDt: z.date().default(new Date()), + mdfr: z.string().default("test"), +}); + +const fcPrfmncSchema = z.object({ + pbnstRuseFcltFk: z.number().default(0), + ym: z.string(), + wshwtr: z.string(), + coolUswtr: z.string(), + cleanUswtr: z.string(), + drwtUswtr: z.string(), + dltnUswtr: z.string(), + ithlRswtr: z.string(), + ithlEtcUswtr: z.string(), + cleanToilUswtr: z.string(), + resn: z.string(), + lndwtr: z.string(), + hydUswtr: z.string(), + rvrKeepUswtr: z.string(), + farmUswtr: z.string(), + ugwtChr: z.string(), + indstUswtr: z.string(), + regDt: z.date().default(new Date()), + rgtr: z.string().default("test"), + mdfcnDt: z.date().default(new Date()), + mdfr: z.string().default("test"), +}); + +export const fcBizSchema = z.object({ + pbnstRuseFcltBizPk: z.number().default(0), + pbnstRuseFcltFk: z.number().default(0), + cycl: z.string(), + seCd: z.string(), + bizMthdCd: z.string(), + instlAprvSncnDt: z.string(), + bizCmcnDay: z.string(), + gvsbs: z.string(), + lcep: z.string(), + cusrAlotm: z.string(), + etc: z.string(), + totalMoney: z.string(), + rprcsFcltCpct: z.string(), + majorPrcsMsrcCd: z.string(), + addr: z.string(), + rprcsMthdCd: z.string(), + inoutYn: z.string(), + mainSplyPumpCpct: z.string(), + erctWtrOcrnCpct: z.string(), + erctUswtrLinkSpt: z.string(), + erctUswtrFcltCpct: z.string(), + erctUswtrPrcsMeth: z.string(), + erctUswtrPrcsMsrcCd: z.string(), + wwtEmsnFcltPrmsnYn: z.string(), + tmsInstlYn: z.string(), + pbnstDrngInflwExclYn: z.string(), + bod: z.string(), + grssClfg: z.string(), + combResdch: z.string(), + trbt: z.string(), + clIonQnt: z.string(), + smll: z.string(), + crmty: z.string(), + tph: z.string(), + tn: z.string(), + ph: z.string(), + cdtnv: z.string(), + designCst: z.string(), + cstrnSpvsCst: z.string(), + fcltSbsdCst: z.string(), + wstCst: z.string(), + cnstCmcnCst: z.string(), + mntrgEqpmntInstlCst: z.string(), + gisDbCst: z.string(), + elpwrMtrngCst: z.string(), + mchnCst: z.string(), + archCst: z.string(), + pplCst: z.string(), + ruseFcltCst: z.string(), + designCstClcln: z.string(), + cstrnSpvsCstClcln: z.string(), + fcltSbsdCstClcln: z.string(), + wstCstClcln: z.string(), + cnstCmcnCstClcln: z.string(), + mntrgEqpmntInstlCstClcln: z.string(), + gisDbCstClcln: z.string(), + elpwrMtrngCstClcln: z.string(), + mchnCstClcln: z.string(), + archCstClcln: z.string(), + pplCstClcln: z.string(), + ruseFcltCstClcln: z.string(), + fcOrgwts: z.array(fcOrgwtSchema), + pplInstls: z.array(pplInstlSchema), + flg: z.string(), + regDt: z.string(), + rgtr: z.string(), + mdfcnDt: z.string(), + mdfr: z.string(), +}); + +export const pbnstRegZod = z.object({ + pbnstRuseFcltPk: z.number().default(0), + swtrmtFcltFk: z.string(), + ruseUtztnFcltNm: z.string(), + fcltCpct: z.string(), + ruseCpct: z.string(), + splyExtraCpct: z.string(), + regDt: z.date().default(new Date()), + rgtr: z.string().default("test"), + mdfcnDt: z.date().default(new Date()), + mdfr: z.string().default("test"), + fcFiles: z.array(fcFileSchema), + fcBizs: z.array(fcBizSchema), + fcOpers: z.array(fcOperSchema), +}); + +const pubHasuZod = z.object({ + bscFctCd: z.string(), + sido: z.string().default(""), + gugun: z.string().default(""), + bscFctNm: z.string().default(""), + efflWqltStndrdNm: z.string().default(""), + fctCpc: z.number().default(0), +}); + +export type pubHasuType = z.infer; + +//관경 제외 +export const exampleData = { + pbnstRuseFcltPk: 1, + swtrmtFcltFk: "SWTRMT-001", + ruseUtztnFcltNm: "재이용시설 A", + fcltCpct: "100", + ruseCpct: "90", + splyExtraCpct: "10", + regDt: new Date("2025-05-21T11:03:26.434810"), + rgtr: "admin", + mdfr: "admin", + mdfcnDt: new Date("2025-05-21T11:03:26.434810"), + fcFiles: [], + fcBizs: [ + { + pbnstRuseFcltBizPk: 10, + pbnstRuseFcltFk: 1, + cycl: "1", + seCd: "A010", + bizMthdCd: "M02", + instlAprvSncnDt: "2022-01-01", + bizCmcnDay: "2022-02-01", + gvsbs: "정부지원", + lcep: "지자체", + cusrAlotm: "고객", + etc: "비고 없음", + totalMoney: "100000000", + rprcsFcltCpct: "50", + majorPrcsMsrcCd: "MP01", + addr: "서울시 종로구", + rprcsMthdCd: "RP01", + inoutYn: "Y", + mainSplyPumpCpct: "30", + erctWtrOcrnCpct: "5", + erctUswtrLinkSpt: "있음", + erctUswtrFcltCpct: "20", + erctUswtrPrcsMeth: "생물학적", + erctUswtrPrcsMsrcCd: "EM01", + wwtEmsnFcltPrmsnYn: "Y", + tmsInstlYn: "N", + pbnstDrngInflwExclYn: "Y", + bod: "30", + grssClfg: "양호", + combResdch: "적정", + trbt: "10", + clIonQnt: "5", + smll: "없음", + crmty: "정상", + tph: "0.2", + tn: "2", + ph: "7.2", + cdtnv: "100", + designCst: "1000", + cstrnSpvsCst: "500", + fcltSbsdCst: "200", + wstCst: "300", + cnstCmcnCst: "1000", + mntrgEqpmntInstlCst: "150", + gisDbCst: "200", + elpwrMtrngCst: "180", + mchnCst: "700", + archCst: "400", + pplCst: "300", + ruseFcltCst: "5000", + designCstClcln: "990", + cstrnSpvsCstClcln: "480", + fcltSbsdCstClcln: "190", + wstCstClcln: "280", + cnstCmcnCstClcln: "980", + mntrgEqpmntInstlCstClcln: "140", + gisDbCstClcln: "190", + elpwrMtrngCstClcln: "170", + mchnCstClcln: "680", + archCstClcln: "380", + pplCstClcln: "290", + ruseFcltCstClcln: "4800", + fcOrgwts: [ + { + pbnstRuseFcltBizFk: 10, + swtrmtFcltFk: 1, + orgwtWtritQnt: "100", + tmsYn: "Y", + dschgFmYn: "N", + dtlPstnExpln: "배출 위치", + regDt: new Date("2025-05-21T11:03:26.434810"), + rgtr: "admin", + mdfcnDt: new Date("2025-05-21T11:03:26.434810"), + mdfr: "admin", + }, + { + pbnstRuseFcltBizFk: 10, + swtrmtFcltFk: 2, + orgwtWtritQnt: "153", + tmsYn: "Y", + dschgFmYn: "N", + dtlPstnExpln: "배출 위치22", + regDt: new Date("2025-05-21T11:03:26.434810"), + rgtr: "admin", + mdfcnDt: new Date("2025-05-21T11:03:26.434810"), + mdfr: "admin", + }, + ], + flg: "N", + regDt: "2022-01-01", + rgtr: "admin", + mdfcnDt: "2022-02-01", + mdfr: "admin", + }, + { + pbnstRuseFcltBizPk: 11, + pbnstRuseFcltFk: 1, + cycl: "2", + seCd: "A011", + bizMthdCd: "M02", + instlAprvSncnDt: "2022-01-01", + bizCmcnDay: "2022-02-01", + gvsbs: "민간", + lcep: "지자체", + cusrAlotm: "고객", + etc: "비고 없음", + totalMoney: "100000000", + rprcsFcltCpct: "50", + majorPrcsMsrcCd: "MP01", + addr: "부산시 해운대구", + rprcsMthdCd: "RP01", + inoutYn: "Y", + mainSplyPumpCpct: "30", + erctWtrOcrnCpct: "5", + erctUswtrLinkSpt: "있음", + erctUswtrFcltCpct: "20", + erctUswtrPrcsMeth: "생물학적", + erctUswtrPrcsMsrcCd: "EM01", + wwtEmsnFcltPrmsnYn: "Y", + tmsInstlYn: "N", + pbnstDrngInflwExclYn: "Y", + bod: "30", + grssClfg: "양호", + combResdch: "적정", + trbt: "10", + clIonQnt: "5", + smll: "없음", + crmty: "정상", + tph: "0.2", + tn: "2", + ph: "7.2", + cdtnv: "100", + designCst: "1000", + cstrnSpvsCst: "500", + fcltSbsdCst: "200", + wstCst: "300", + cnstCmcnCst: "1000", + mntrgEqpmntInstlCst: "150", + gisDbCst: "200", + elpwrMtrngCst: "180", + mchnCst: "700", + archCst: "400", + pplCst: "300", + ruseFcltCst: "5000", + designCstClcln: "990", + cstrnSpvsCstClcln: "480", + fcltSbsdCstClcln: "190", + wstCstClcln: "280", + cnstCmcnCstClcln: "980", + mntrgEqpmntInstlCstClcln: "140", + gisDbCstClcln: "190", + elpwrMtrngCstClcln: "170", + mchnCstClcln: "680", + archCstClcln: "380", + pplCstClcln: "290", + ruseFcltCstClcln: "4800", + fcOrgwts: [ + { + pbnstRuseFcltBizFk: 11, + swtrmtFcltFk: 1, + orgwtWtritQnt: "152", + tmsYn: "Y", + dschgFmYn: "N", + dtlPstnExpln: "배출 위치1", + regDt: new Date("2025-05-21T11:03:26.434810"), + rgtr: "admin", + mdfcnDt: new Date("2025-05-21T11:03:26.434810"), + mdfr: "admin", + }, + { + pbnstRuseFcltBizFk: 11, + swtrmtFcltFk: 1, + orgwtWtritQnt: "150", + tmsYn: "Y", + dschgFmYn: "N", + dtlPstnExpln: "배출 위치", + regDt: new Date("2025-05-21T11:03:26.434810"), + rgtr: "admin", + mdfcnDt: new Date("2025-05-21T11:03:26.434810"), + mdfr: "admin", + }, + ], + flg: "N", + regDt: "2022-01-01", + rgtr: "manager", + mdfcnDt: "2022-02-01", + mdfr: "manager", + }, + ], + fcOpers: [ + { + pbnstRuseFcltOperInfoPk: 100, + pbnstRuseFcltFk: 1, + operMthd: "위탁", + rprtvBzenty: "기관명", + bgngDt: new Date("2025-05-21T11:03:26.434810"), + endDt: new Date("2025-05-21T11:03:26.434810"), + regDt: new Date("2025-05-21T11:03:26.434810"), + rgtr: "admin", + mdfcnDt: new Date("2025-05-21T11:03:26.434810"), + mdfr: "admin", + }, + { + pbnstRuseFcltOperInfoPk: 101, + pbnstRuseFcltFk: 1, + operMthd: "직영", + rprtvBzenty: "기관명", + bgngDt: new Date("2025-05-21T11:03:26.434810"), + endDt: new Date("2025-05-21T11:03:26.434810"), + regDt: new Date("2025-05-21T11:03:26.434810"), + rgtr: "admin", + mdfcnDt: new Date("2025-05-21T11:03:26.434810"), + mdfr: "admin", + }, + ], +}; diff --git a/apps/wr/components/lib/config/index.ts b/apps/wr/components/lib/config/index.ts index 4028f6cc3..0ed7b82dd 100644 --- a/apps/wr/components/lib/config/index.ts +++ b/apps/wr/components/lib/config/index.ts @@ -12,3 +12,5 @@ export const DEV_URL_FO = `http://con.mind-one.co.kr:${DEV_PORT_NEW}/api/v1`; +export const CS_URL= 'http://dev.onasys.co.kr:8000' +export const CS_TUS_UPLOAD= "/attach-service/api/v1/tus/upload"; \ No newline at end of file diff --git a/apps/wr/components/lib/useTus_wr/useTusWr.tsx b/apps/wr/components/lib/useTus_wr/useTusWr.tsx new file mode 100644 index 000000000..4aedb71d3 --- /dev/null +++ b/apps/wr/components/lib/useTus_wr/useTusWr.tsx @@ -0,0 +1,53 @@ +import { Upload, type HttpRequest, type HttpResponse, type OnSuccessPayload } from "tus-js-client"; +import { CS_TUS_UPLOAD, CS_URL } from "../config"; + +type UploadOptions = { + handleUploadStart?: (upload: Upload) => void; + handleProgress?: (percentage: string) => void; + handleSuccess?: (payload :OnSuccessPayload) => void; + handleResponse?: (req:HttpRequest, res: HttpResponse) => void; +}; + +export function TusClientUpload(oFile: File, setUpload: (upload: Upload) => void, options?: UploadOptions) { + const Authorization = "Authorization"; + const AUTH_USER_ID = "token-id"; + + //CS_URL + const uploader = new Upload(oFile, { + endpoint: 'http://localhost:3001' + CS_TUS_UPLOAD, + chunkSize: 10* 1024 * 1024, + headers: { + Authorization: "", + AUTH_USER_ID: "", + }, + metadata: { + filename: oFile.name, + filetype: oFile.type, + }, + onError(error) { + console.error(`Failed because: ${error}`); + }, + onProgress(bytesUploaded, bytesTotal) { + const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2); + options?.handleProgress?.(percentage); + }, + onAfterResponse(req, res) { + const fileInfo = res.getHeader("X-File-Info"); + if (fileInfo === undefined || fileInfo === null) return; + + options?.handleResponse?.(res); + }, + onSuccess(payload :OnSuccessPayload) { + options?.handleSuccess?.(payload); + }, + }); + uploader.start(); + + options?.handleUploadStart?.(uploader); + + console.log("upload start >>>>>", uploader); + + + // setUpload(uploader); +} +// diff --git a/apps/wr/components/ui/form/fcltReg/bdstReg/bdstReg.tsx b/apps/wr/components/ui/form/fcltReg/bdstReg/bdstReg.tsx index 744e7bf4e..638f45915 100644 --- a/apps/wr/components/ui/form/fcltReg/bdstReg/bdstReg.tsx +++ b/apps/wr/components/ui/form/fcltReg/bdstReg/bdstReg.tsx @@ -303,8 +303,7 @@ export default function BdstReg({ form }: { form: any }) { selectClass={selectClass} selectArray={code.chBuCd} onSelectValue={val => f.onChange(val)} - value={f.value ?? code.chBuCd[0]?.val} - /> + value={f.value ?? code.chBuCd[0]?.val} className={""} label={""} /> )} /> diff --git a/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm.tsx b/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm.tsx index adba3284a..912d9dc77 100644 --- a/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm.tsx +++ b/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/bugRegForm.tsx @@ -2,15 +2,12 @@ import { SelectBox } from "@common/business_components"; import { - DatePicker, - FileUpload, FormUi, - UiTable, } from "@common/business_components/ui"; import { Form, FormField } from "@common/business_components/ui/form"; import { Button, Input, TableHead, TableRow } from "@common/components"; import { zodResolver } from "@hookform/resolvers/zod"; -import { useState } from "react"; +import { use, useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { useWrStore } from "@/app/store"; @@ -21,7 +18,6 @@ import { import { commonButonSize, formH1Class, - formH2Class, formTableName, } from "@/components/lib/class/comClass"; import MngRegFormDetail from "../mngReg/mngRegFormDetail/mngRegFormDetail"; @@ -32,25 +28,22 @@ import { ruseFcltinfo, wasteWaterFcltINfo, } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/headList"; +import { pbnstRegZod } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type"; -const formSchema = z.object({ - username: z.string().min(2).max(50), - facilityName: z.string().min(2).max(50), -}); export function PbnstBuseForm() { - const { code, pubFac } = useWrStore((state) => state); - const { pubMngUpHeadList } = pubFac; + const { code, pbnst } = useWrStore((state) => state); + const { pubMngUpHeadList,pbnstBizCycle } = pbnst; + const [getBizCycle, setBizCycle] = useState(''); - const form = useForm>({ - resolver: zodResolver(formSchema), - defaultValues: { - username: "", - }, + + const form = useForm>({ + resolver: zodResolver(pbnstRegZod), + }); // 2. Define a submit handler. - function onSubmit(values: z.infer) { + function onSubmit(values: z.infer) { // Do something with the form values. // ✅ This will be type-safe and validated. console.log(values); @@ -62,6 +55,11 @@ export function PbnstBuseForm() { const [instlAprvDate, setInstlAprvDate] = useState(new Date()); const [bizCmcnDate, setBizCmcnDate] = useState(new Date()); const [files, setFiles] = useState(null); + useEffect(() => { + if (getBizCycle ) { + console.log("getBizCycle", getBizCycle); + } + }, [getBizCycle]); return (
@@ -76,108 +74,21 @@ export function PbnstBuseForm() {

등록차수

- ( - + 0 && pbnstBizCycle[0]? pbnstBizCycle[0].val : ""} className={""} selectClass={selectClass} - onSelectValue={() => {}} - {...field} - > - - )} - /> + onSelectValue={(val) => {setBizCycle}} + > + + +
- {/*
-

사업현황

-
- -
-
- ( - - {}} - /> - - )} - /> -
- -
- ( - - {}} - /> - - )} - /> -
-
- ( - - - - )} - /> -
-
- ( - - { - if (date) setInstlAprvDate(date); - }, - }} - mode="single" - {...field} - /> - - )} - /> -
-
*/} state); - const { pubMngUpHeadList, isInit } = pubFac; + const { pbnst } = useWrStore((state) => state); + const { pubMngUpHeadList, isInit } = pbnst; const [ruseOperData, setRuseOperData] = useState(); - const [files, setFiles] = useState(null); + const [planFiles, setPlanFiles] = useState(null); + const [relationfiles, setRelationFiles] = useState(null); + const [isModalOpen, setIsModalOpen] = useState(false); + const [upload, setUpload] = useState(null); + const [progress, setProgress] = useState(0); + + const handleProgress = (percentage: string) => { + + console.log("handleProgress", percentage); + setProgress(Number(percentage)); + }; + const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { @@ -69,6 +85,35 @@ export function PbnstMngForm({ data }: { data: ruseFcltType[] }) { console.log(values); } + const testFile = () => { + if (relationfiles && relationfiles[0]) + TusClientUpload(relationfiles[0], setUpload, { + handleUploadStart: () => { + console.log("handleUploadStart"); + }, + handleProgress, + handleResponse: (req, res) => { + console.log(" handleResponse req", req); + console.log("handleResponse res", res); + }, + handleSuccess: (a) => { + console.log("req", a); + + }, + }); + }; + + useEffect(() => { + if (relationfiles && relationfiles[0]) + console.log("relationfiles ", relationfiles[0]); + + // TusClientUpload( + // relationfiles[0],{ + // handleUploadStart: setUpload, + // handleProgress, + // handleSuccess: setUpload, + // }) + }, [relationfiles]); const headMakeColSpan = (upHeadList: TableUpperProps[]) => { return ( <> @@ -127,26 +172,24 @@ export function PbnstMngForm({ data }: { data: ruseFcltType[] }) {
- -
-
- 재이용시설 운영정보 - -
- - - +
+
+ 재이용시설 운영정보 +
+ +

재이용수 공급 가능량

@@ -207,8 +250,8 @@ export function PbnstMngForm({ data }: { data: ruseFcltType[] }) { render={({}) => ( @@ -222,8 +265,8 @@ export function PbnstMngForm({ data }: { data: ruseFcltType[] }) { render={({}) => ( diff --git a/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx b/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx index 5ebb88015..1256c0b56 100644 --- a/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx +++ b/apps/wr/components/ui/modal/chkgd/chkgdExcel/chkgdExcel.tsx @@ -85,10 +85,11 @@ export default function ChkgdExcel({ type }: { type: string }) { guide.utztnUsgCd === polution.utztnUsgCd ); + if (fusion) { return { ...guide, - rswtrPolutions: fusion?.rswtrPollutions, + rswtrPollutions: fusion?.rswtrPollutions, rswtrDetails:fusion?.rswtrDetails }; } else { @@ -104,10 +105,13 @@ export default function ChkgdExcel({ type }: { type: string }) { (item) => !guideKey.has(keyGenerator(item)) ); + const listTotalData:rswtChkZodType[] =[ ...totalData, ...onlypolution ] + + setExcelRswtData(listTotalData); } }); diff --git a/apps/wr/middleware.ts b/apps/wr/middleware.ts new file mode 100644 index 000000000..3ac0d64ed --- /dev/null +++ b/apps/wr/middleware.ts @@ -0,0 +1,50 @@ +import { NextRequest, NextResponse } from "next/server"; +import { CS_URL } from "./components/lib/config"; +//import { CLAIM_NAME, AUTH_USER_ID } from "./src/shared/config"; + +const CLAIM_NAME = "Authorization" +const AUTH_USER_ID = "token-id" +const serverApiUrl = + CS_URL; +export function middleware(req: NextRequest) { + const pathname = req.nextUrl.pathname; + console.log(`[Middleware] Request URL: ${req.url}`); + const searchParams = req.nextUrl.searchParams; + + if (pathname.startsWith("/server")) { + const queryParams = searchParams.toString(); + const newUrl = `${serverApiUrl}${pathname.replace("/server", "")}${queryParams ? `?${queryParams}` : "" + }`; + console.log(`[Middleware] Rewriting from '/server' path to: ${newUrl}`); + return NextResponse.rewrite(new URL(newUrl)); + } + + if (pathname.startsWith("/attach-service")) { + const requestHeaders = new Headers(req.headers); + const token = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhMGVjN2EwNy03NTJhLTRmN2YtODlhNi04NTRlNjNkMmUzYTAiLCJpYXQiOjE3NDc4MTM2MDksImV4cCI6MTc0NzgxMzkwOX0.XGiDHC-ljuEdN6M638q0nDet6XRQcO8o66LKvZZ07r4rGykn2ba8yagC_-8LVpVjrkPzIVZnW10I2fQWgAGT5Q" + const userId = 'a0ec7a07-752a-4f7f-89a6-854e63d2e3a0'; + //const token = req.cookies.get(CLAIM_NAME)?.value; + //const userId = req.cookies.get(AUTH_USER_ID)?.value; + const newUrl = `${serverApiUrl}${pathname}`; + + console.log("serverApiUrl ", serverApiUrl); + console.log("pathname ", pathname); + + + if (token) requestHeaders.set(CLAIM_NAME, token); + if (userId) requestHeaders.set(AUTH_USER_ID, userId); + + console.log( + `[Middleware] Rewriting from '/attach-service' path to: ${newUrl}`, + ); + return NextResponse.rewrite(new URL(newUrl), { + headers: requestHeaders, + }); + } + + return NextResponse.next(); +} + +export const config = { + matcher: ["/server/:path*", "/attach-service/:path*"], +}; diff --git a/apps/wr/package.json b/apps/wr/package.json index 54a7878b4..58a01dc42 100644 --- a/apps/wr/package.json +++ b/apps/wr/package.json @@ -9,9 +9,9 @@ "lint": "next lint" }, "dependencies": { + "@common/assets": "workspace:*", "@common/business_components": "workspace:*", "@common/components": "workspace:*", - "@common/assets": "workspace:*", "@hookform/resolvers": "^4.1.3", "@tanstack/react-table": "^8.21.2", "class-variance-authority": "^0.7.1", @@ -22,6 +22,7 @@ "react-hot-toast": "^2.5.2", "tailwind-merge": "^3.0.1", "tailwindcss-animate": "^1.0.7", + "tus-js-client": "^4.3.1", "zod": "^3.24.2" }, "devDependencies": { diff --git a/apps/wr/public/sample_rs_chk.xlsx b/apps/wr/public/sample_rs_chk.xlsx index 1569fbbce..39b0e7d3e 100644 Binary files a/apps/wr/public/sample_rs_chk.xlsx and b/apps/wr/public/sample_rs_chk.xlsx differ