From ad6e4484b7a67f66d92c258d9f7a2d45491042a8 Mon Sep 17 00:00:00 2001 From: leedj312 Date: Mon, 15 Sep 2025 15:36:56 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AC=BC=EC=9E=AC=EC=9D=B4=EC=9A=A9=20?= =?UTF-8?q?=EA=B3=B5=ED=86=B5=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/sdmInfoInsertForm/component.tsx | 2 +- .../matMng/coMat/coMatRvw/page.tsx | 2 +- apps/wr/app/store/common/code/basicCode.tsx | 113 ++- apps/wr/app/store/common/code/index.ts | 92 ++- .../app/store/matDmd/ruseCaseMng/headList.tsx | 2 +- .../prfmncReg/chkgdnReg/rainChkgdn/excel.tsx | 2 +- .../chkgdnReg/rainChkgdn/headList.tsx | 2 +- .../chkgdnReg/rswrtChkgdn/headList.tsx | 4 +- .../chkgdnSttn/rainChkgdnSttn/headList.tsx | 4 +- .../chkgdnSttn/rswtChkgdnSttn/headList.tsx | 4 +- .../fcltSttn/pbnstSttn/headList.tsx | 2 +- .../ruseFcltMng/fcltSttn/rainSttn/excel.tsx | 4 +- .../fcltSttn/rainSttn/headList.tsx | 4 +- .../ruseFcltMng/fcltSttn/rswtSttn/excel.tsx | 12 +- .../ruseFcltMng/fcltSttn/rswtSttn/index.tsx | 29 +- apps/wr/components/lib/func/commom.tsx | 19 +- apps/wr/components/lib/func/mapUtil.ts | 2 +- .../buseWaterQulity/buseWaterQulity.tsx | 2 +- .../mngRegFormDetail/mngRegFormDetail.tsx | 1 - .../ui/form/fcltReg/rswtrReg/rswtrRegForm.tsx | 675 +++++++++--------- .../LayerPopUp/RainFacility/RainFacility.tsx | 6 +- .../LayerPopUp/RswtFacilty/RswtFacilty.tsx | 6 +- apps/wr/public/sample_rswtSttn.xlsx | Bin 10856 -> 9020 bytes 23 files changed, 537 insertions(+), 452 deletions(-) diff --git a/apps/dm/components/ui/sdmInfoInsertForm/component.tsx b/apps/dm/components/ui/sdmInfoInsertForm/component.tsx index 7c6c13b32..5cfa526b8 100644 --- a/apps/dm/components/ui/sdmInfoInsertForm/component.tsx +++ b/apps/dm/components/ui/sdmInfoInsertForm/component.tsx @@ -637,7 +637,7 @@ export function SdmInfoRegForm({ }} />
- +
( - +
= {}; +//export const lwCds: Record = {}; export const yn: SelectDataType[] = [ { val: "Y", text: "Y" }, { val: "N", text: "N" }, @@ -54,14 +53,14 @@ export const ruseSeCd: SelectDataType[] = [ { val: "개량", text: "개량" }, ]; -// export const ruseBizMthdCd: SelectDataType[] = [ -// { val: "재정", text: "재정" }, -// { val: "민간투자", text: "민간투자" }, -// { val: "자체", text: "자체" }, -// ]; +export const ruseBizMthdCd: SelectDataType[] = [ + { val: "재정", text: "재정" }, + { val: "민간투자", text: "민간투자" }, + { val: "자체", text: "자체" }, +]; // 공통 건축물 용도 -export const bdstUsgCd: SelectDataType[] =lwCds?.bdstUsgCd?.concat(lwCds?.rswtBdstType??[])??[] +//export const bdstUsgCd: SelectDataType[] =lwCds?.bdstUsgCd?.concat(lwCds?.rswtBdstType??[])??[] // [ // { val: "-1", text: "확인불가" }, @@ -112,7 +111,7 @@ export const bdstUsgCd: SelectDataType[] =lwCds?.bdstUsgCd?.concat(lwCds?.rswtBd // { val: "45", text: "기타" }, // ]; - export const rswtBdstType: SelectDataType[] = lwCds?.rswtBdstType??[] +// export const rswtBdstType: SelectDataType[] = lwCds?.rswtBdstType??[] //[ // { val: "17", text: "숙박업" }, // { val: "18", text: "목욕장업" }, @@ -221,7 +220,7 @@ export const chBuCd = [ // ]; //물리화학적처리(스크린, 응집, 침전)/생물학적처리(활성슬러지법 등)/소독(염소, UV 등)/기타 -export const rswtPrscCdMthdCd = lwCds['rswtPrscCdMthdCd']??[] +//export const rswtPrscCdMthdCd = lwCds['rswtPrscCdMthdCd']??[] // { // val: "물리화학적처리(스크린,응집,침전)", // text: "물리화학적처리(스크린,응집,침전)", @@ -389,55 +388,55 @@ export const sewageOutFclttUse = [ text: "공업용수", }, ]; -const codeMApping = { - WR001: "bdstUsgCd", - WR002: "rswtBdstType", - WR003: "rainFcltCd", - WR004: "bdstGrntchClass", - WR005: "rswtPrscCdMthdCd", // 아직 디 못바꿈 - WR006: "orgwtKndCd", //작업 완ㅛ - WR007: "ruseMngMtd", // 작업완료 - WR008: "rusePrcsMthdCd", //w작업완료 - WR009: "erctUswtrPrcsMeth",//w작업완료 - WR010: "ruseFcltSpot",// inout은 yn 만 사용해야 함으로 해당 코드는 사용안함. - WR011: "pplQulity", - WR012: "pplLenght", - WR013: "bdstFilterYn", // 사용 불가 yn만 사용해야함으로 해당코드 사용 안함 - WR014: "rainRswtMng", // 지도점검 등록 시변경 - WR015: "rainFcltFlowRate", //지도점검 등록 시변경 - WR016: "dmdUszCd", // 지도점검 등록 시변경 - WR017: "sewageInFcltUse", //하수재이용 장내 - WR018: "sewageOutFclttUse", // 하수재이용 장외 - WR019: "htdPowerMthdCd", - WR020: "htdUtztnUsgCd", -}; -export const getCommonUpCd = async () => { - const upCd = await getFetchWithCount( - fetchType.LOCAL, - "/cms-service/api/v1/up-codes?keyword=&upCd=&cdSe=&useYn=Y&siteId=WR&page=0&size=100&sort=string" - ); +// const codeMApping = { +// WR001: "bdstUsgCd", +// WR002: "rswtBdstType", +// WR003: "rainFcltCd", +// WR004: "bdstGrntchClass", +// WR005: "rswtPrscCdMthdCd", // 아직 디 못바꿈 +// WR006: "orgwtKndCd", //작업 완ㅛ +// WR007: "ruseMngMtd", // 작업완료 +// WR008: "rusePrcsMthdCd", //w작업완료 +// WR009: "erctUswtrPrcsMeth",//w작업완료 +// WR010: "ruseFcltSpot",// inout은 yn 만 사용해야 함으로 해당 코드는 사용안함. +// WR011: "pplQulity", +// WR012: "pplLenght", +// WR013: "bdstFilterYn", // 사용 불가 yn만 사용해야함으로 해당코드 사용 안함 +// WR014: "rainRswtMng", // 지도점검 등록 시변경 +// WR015: "rainFcltFlowRate", //지도점검 등록 시변경 +// WR016: "dmdUszCd", // 지도점검 등록 시변경 +// WR017: "sewageInFcltUse", //하수재이용 장내 +// WR018: "sewageOutFclttUse", // 하수재이용 장외 +// WR019: "htdPowerMthdCd", +// WR020: "htdUtztnUsgCd", +// }; +// export const getCommonUpCd = async () => { +// const upCd = await getFetchWithCount( +// fetchType.LOCAL, +// "/cms-service/api/v1/up-codes?keyword=&upCd=&cdSe=&useYn=Y&siteId=WR&page=0&size=100&sort=string" +// ); - const upWrCode: string[] = upCd.content - .filter((item: any) => item.upCd.slice(0, 2) === "WR") - .map((cd: any) => cd.upCd); +// const upWrCode: string[] = upCd.content +// .filter((item: any) => item.upCd.slice(0, 2) === "WR") +// .map((cd: any) => cd.upCd); - await Promise.all( - upWrCode.map(async (cd) => { - const mapping = codeMApping[cd as keyof typeof codeMApping]; - if (!mapping) return; +// await Promise.all( +// upWrCode.map(async (cd) => { +// const mapping = codeMApping[cd as keyof typeof codeMApping]; +// if (!mapping) return; - const lwCd = await getFetchWithCount( - fetchType.LOCAL, - `/cms-service/api/v1/lwpo-cds/up-cd/${cd}` - ); +// const lwCd = await getFetchWithCount( +// fetchType.LOCAL, +// `/cms-service/api/v1/lwpo-cds/up-cd/${cd}` +// ); - const list = Array.isArray(lwCd) ? lwCd : lwCd.content ?? []; +// const list = Array.isArray(lwCd) ? lwCd : lwCd.content ?? []; - lwCds[mapping] = list.map((it: any) => ({ - text: it.lwpoCdNm, - val: it.lwpoCd, - })); - }) - ); - -}; \ No newline at end of file +// lwCds[mapping] = list.map((it: any) => ({ +// text: it.lwpoCdNm, +// val: it.lwpoCd, +// })); +// }) +// ); +// console.log('lwCds ', lwCds) +// }; \ No newline at end of file diff --git a/apps/wr/app/store/common/code/index.ts b/apps/wr/app/store/common/code/index.ts index 822c95ddb..9905db719 100644 --- a/apps/wr/app/store/common/code/index.ts +++ b/apps/wr/app/store/common/code/index.ts @@ -1,4 +1,4 @@ -import { getFetch } from "@/components/lib/api"; +import { fetchType, getFetch, getFetchWithCount } from "@/components/lib/api"; import type { EnvPartSelectDataType, SelectDataType, @@ -7,14 +7,94 @@ import { bdstFilterYn, bdstIncenYn, chBuCd, - lwCds, - rswtPrscCdMthdCd, + ruseBizMthdCd, ruseSeCd, yn, } from "./basicCode"; export const btnClass = "p-4 m-2 text-white rounded-sm text-lg font-medium "; const laeSecd = "41"; +export const lwCds: Record = {}; + + + +const codeMApping = { + WR001: "bdstUsgCd", + WR002: "rswtBdstType", + WR003: "rainFcltCd", + WR004: "bdstGrntchClass", + WR005: "rswtPrscCdMthdCd", // 아직 디 못바꿈 + WR006: "orgwtKndCd", //작업 완ㅛ + WR007: "ruseMngMtd", // 작업완료 + WR008: "rusePrcsMthdCd", //w작업완료 + WR009: "erctUswtrPrcsMeth",//w작업완료 + WR010: "ruseFcltSpot",// inout은 yn 만 사용해야 함으로 해당 코드는 사용안함. + WR011: "pplQulity", + WR012: "pplLenght", + WR013: "bdstFilterYn", // 사용 불가 yn만 사용해야함으로 해당코드 사용 안함 + WR014: "rainRswtMng", // 지도점검 등록 시변경 + WR015: "rainFcltFlowRate", //지도점검 등록 시변경 + WR016: "dmdUszCd", // 지도점검 등록 시변경 + WR017: "sewageInFcltUse", //하수재이용 장내 + WR018: "sewageOutFclttUse", // 하수재이용 장외 + WR019: "htdPowerMthdCd", + WR020: "htdUtztnUsgCd", +}; +export const getCommonUpCd = async (set:any) => { + + try { + let lwCdCode :Record = {}; + const upCd = await getFetchWithCount( + fetchType.LOCAL, + "/cms-service/api/v1/up-codes?keyword=&upCd=&cdSe=&useYn=Y&siteId=WR&page=0&size=100&sort=string" + ); + + const upWrCode: string[] = upCd.content + .filter((item: any) => item.upCd.slice(0, 2) === "WR") + .map((cd: any) => cd.upCd); + + await Promise.all( + upWrCode.map(async (cd) => { + const mapping = codeMApping[cd as keyof typeof codeMApping]; + if (!mapping) return; + + const lwCd = await getFetchWithCount( + fetchType.LOCAL, + `/cms-service/api/v1/lwpo-cds/up-cd/${cd}` + ); + + const list = Array.isArray(lwCd) ? lwCd : lwCd.content ?? []; + + lwCds[mapping] = list.map((it: any) => ({ + text: it.lwpoCdNm, + val: it.lwpoCd, + })); + }) + ); + lwCdCode=lwCds + set((state: comCodeState) => ({ + code: { + ...state.code, + rainFcltCd: lwCdCode['rainFcltCd']??[], + bdstUsgCd: lwCdCode['bdstUsgCd']??[] , + orgwtKndCd: lwCdCode['orgwtKndCd']??[] , + pplQulity: lwCdCode['pplQulity']??[] , + pplLenght: lwCdCode['pplLenght']??[] , + dmdUszCd: lwCdCode['dmdUszCd']??[] , + ruseMngMtd: lwCdCode['ruseMngMtd']??[], + rusePrcsMthdCd: lwCdCode['rusePrcsMthdCd']??[], + erctUswtrPrcsMeth: lwCdCode['erctUswtrPrcsMeth']??[], + bdstGrntchClass: lwCdCode['bdstGrntchClass']??[], + htdPowerMthdCd: lwCdCode['htdPowerMthdCd']??[], + htdUtztnUsgCd: lwCdCode['htdUtztnUsgCd']??[], + rswtBdstType:lwCdCode['rswtBdstType']??[] , + }, + })); + }catch(e){ + console.log('com code error ', e) + } + +}; //물재이용 주소 코드: devU01TX0FVVEgyMDI1MDgyNTEwMzkwNDExNjEwNTM= export const buildingType = { RST: "RST", @@ -172,7 +252,7 @@ export type comCodeState = { bdstFilterYn: SelectDataType[]; bdstIncenYn: SelectDataType[]; bdstGrntchClass: SelectDataType[]; - rswtPrscCdMthdCd: SelectDataType[]; + // rswtPrscCdMthdCd: SelectDataType[]; htdPowerMthdCd: SelectDataType[]; htdUtztnUsgCd: SelectDataType[]; rswtBdstType:SelectDataType[]; @@ -202,13 +282,13 @@ export const comCodeStateExport: comCodeState = { buildingType: buildingType, ruseMngMtd: lwCds['ruseMngMtd']??[], ruseSeCd: ruseSeCd, - ruseBizMthdCd: lwCds['ruseBizMthdCd']??[], + ruseBizMthdCd: ruseBizMthdCd, rusePrcsMthdCd: lwCds['rusePrcsMthdCd']??[], erctUswtrPrcsMeth: lwCds['erctUswtrPrcsMeth']??[], bdstFilterYn: bdstFilterYn, bdstIncenYn: bdstIncenYn, bdstGrntchClass: lwCds['bdstGrntchClass']??[], - rswtPrscCdMthdCd: rswtPrscCdMthdCd, // 공단연락오면 바꿔야함 + // rswtPrscCdMthdCd: rswtPrscCdMthdCd, // 공단연락오면 바꿔야함 htdPowerMthdCd: lwCds['htdPowerMthdCd']??[], htdUtztnUsgCd: lwCds['htdUtztnUsgCd']??[], userSiSggCd: laeSecd, diff --git a/apps/wr/app/store/matDmd/ruseCaseMng/headList.tsx b/apps/wr/app/store/matDmd/ruseCaseMng/headList.tsx index 024f40fe7..33d5ee353 100644 --- a/apps/wr/app/store/matDmd/ruseCaseMng/headList.tsx +++ b/apps/wr/app/store/matDmd/ruseCaseMng/headList.tsx @@ -167,7 +167,7 @@ export const ruseCaseHeadListExport: TableUpperProps[] = [ }, { id: "grnteWqPh", - title: "수소이온농도(ph)​", + title: "수소이온농도(pH)​", visible: true, row: 1, }, diff --git a/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/excel.tsx b/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/excel.tsx index 84619f307..21636860a 100644 --- a/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/excel.tsx +++ b/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/excel.tsx @@ -189,7 +189,7 @@ export const excelToRainChkData = (excelData: any, year: string) => { rain.rainyDetails?.forEach((key) => { if (key.ph?.length > 1 && isInvalidNumber(key.ph)) { - issues.push(defaultMessage + `PH: 숫자 형식 아님 /입력값:${key.ph}`); + issues.push(defaultMessage + `pH: 숫자 형식 아님 /입력값:${key.ph}`); } if (key.trbt?.length > 1 && isInvalidNumber(key.trbt)) { issues.push( diff --git a/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList.tsx b/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList.tsx index d2c0bf7d7..b615b6532 100644 --- a/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList.tsx +++ b/apps/wr/app/store/prfmncReg/chkgdnReg/rainChkgdn/headList.tsx @@ -152,7 +152,7 @@ export const rainChkgdnHeadListExport: TableUpperProps[] = [ { id: "totalRuseFcltUtztnQnt", title: "연간빗물이용량(m³)" }, { id: "ph", - title: "수소이온농도(ph)", + title: "수소이온농도(pH)", upName: "useQuilty", upSequnce: 1, type: "number", diff --git a/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList.tsx b/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList.tsx index 652e0fea7..6e94ec4e6 100644 --- a/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList.tsx +++ b/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/headList.tsx @@ -168,7 +168,7 @@ export const rswtChkHeadListExport: TableUpperProps[] = [ { id: "crmty", title: "색도(도)", upName: "useQuilty", upSequnce: 6 ,type: "number"}, { id: "tn", title: "총질소(T-N)(mg/L)", upName: "useQuilty", upSequnce: 7 ,type: "number"}, { id: "tph", title: "총인(T-P)(mg/L)", upName: "useQuilty", upSequnce: 8 ,type: "number"}, - { id: "ph", title: "수소이온농도(ph)", upName: "useQuilty", upSequnce: 9,type: "text" }, + { id: "ph", title: "수소이온농도(pH)", upName: "useQuilty", upSequnce: 9,type: "text" }, { id: "clIonQnt", title: "염화물(mg/L)", upName: "useQuilty", upSequnce: 10 ,type: "number"}, { @@ -238,7 +238,7 @@ export const rswtChkHeadListExport: TableUpperProps[] = [ }, { id: "tn", title: "T-N", upName: "detailQulity", upSequnce: 8, edit: true }, { id: "tph", title: "T-P", upName: "detailQulity", upSequnce: 9, edit: true }, - { id: "ph", title: "PH", upName: "detailQulity", upSequnce: 10, edit: true }, + { id: "ph", title: "pH", upName: "detailQulity", upSequnce: 10, edit: true }, { id: "clIonQnt", title: "염화물", diff --git a/apps/wr/app/store/prfmncSttn/chkgdnSttn/rainChkgdnSttn/headList.tsx b/apps/wr/app/store/prfmncSttn/chkgdnSttn/rainChkgdnSttn/headList.tsx index 0d995fbe3..51b9634d3 100644 --- a/apps/wr/app/store/prfmncSttn/chkgdnSttn/rainChkgdnSttn/headList.tsx +++ b/apps/wr/app/store/prfmncSttn/chkgdnSttn/rainChkgdnSttn/headList.tsx @@ -15,7 +15,7 @@ export const rainChkgdnHeadSttnExport: TableUpperProps[] = [ { id: "totalRuseFcltUtztnQnt", title: "연간빗물이용량(m³)" }, { id: "ph", - title: "수소이온농도(ph)", + title: "수소이온농도(pH)", upName: "useQuilty", upSequnce: 1, type: "number", @@ -153,7 +153,7 @@ export const rswtDetailHeadListExport: TableUpperProps[] = [ upName: "detailQulity", upSequnce: 9, }, - { id: "ph", title: "PH", upName: "detailQulity", upSequnce: 10 }, + { id: "ph", title: "pH", upName: "detailQulity", upSequnce: 10 }, { id: "clIonQnt", title: "염화물", diff --git a/apps/wr/app/store/prfmncSttn/chkgdnSttn/rswtChkgdnSttn/headList.tsx b/apps/wr/app/store/prfmncSttn/chkgdnSttn/rswtChkgdnSttn/headList.tsx index eb4d70781..831266e36 100644 --- a/apps/wr/app/store/prfmncSttn/chkgdnSttn/rswtChkgdnSttn/headList.tsx +++ b/apps/wr/app/store/prfmncSttn/chkgdnSttn/rswtChkgdnSttn/headList.tsx @@ -64,7 +64,7 @@ export const rswtChkSttnHeadListExport: TableUpperProps[] = [ upSequnce: 8, type: "number", }, - { id: "ph", title: "수소이온농도(ph)", upName: "useQuilty", upSequnce: 9, type: "text" }, + { id: "ph", title: "수소이온농도(pH)", upName: "useQuilty", upSequnce: 9, type: "text" }, { id: "clIonQnt", title: "염화물(mg/L)", @@ -132,7 +132,7 @@ export const rswtDetailSttnHeadListExport: TableUpperProps[] = [ }, { id: "tn", title: "T-N", upName: "detailQulity", upSequnce: 8}, { id: "tph", title: "T-P", upName: "detailQulity", upSequnce: 9 }, - { id: "ph", title: "PH", upName: "detailQulity", upSequnce: 10 }, + { id: "ph", title: "pH", upName: "detailQulity", upSequnce: 10 }, { id: "clIonQnt", title: "염화물", diff --git a/apps/wr/app/store/ruseFcltMng/fcltSttn/pbnstSttn/headList.tsx b/apps/wr/app/store/ruseFcltMng/fcltSttn/pbnstSttn/headList.tsx index 60b726e2b..a1d1193b2 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltSttn/pbnstSttn/headList.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltSttn/pbnstSttn/headList.tsx @@ -461,7 +461,7 @@ export const ruseGuranteeHeadListExport: TableUpperProps[] = [ { id: "crmty", title: "색도(도)", visible: true }, { id: "tn", title: "총질소(mg/L)", visible: true }, { id: "tph", title: "총인(mg/L)", visible: true }, - { id: "ph", title: "수소이온농도(ph)", visible: true }, + { id: "ph", title: "수소이온농도(pH)", visible: true }, { id: "clIonQnt", title: "염화물(mg/L)", visible: true }, { id: "cdtnv", title: "전기전도도(μs/cm)​", visible: true }, ]; diff --git a/apps/wr/app/store/ruseFcltMng/fcltSttn/rainSttn/excel.tsx b/apps/wr/app/store/ruseFcltMng/fcltSttn/rainSttn/excel.tsx index 65f02e26b..e82ca7b3c 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltSttn/rainSttn/excel.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltSttn/rainSttn/excel.tsx @@ -1,6 +1,6 @@ import type { SelectDataType } from "@common/business_components/ui"; import type { customRainBdst } from "../../fcltReg/rainReg"; -import { bdstUsgCd } from "@/app/store/common/code/basicCode"; +import { lwCds } from "@/app/store/common/code"; //TODO: 공통코드시 삭제되니 수정 해야됨 export const excelRainSttnParsing = ( excel: { data: customRainBdst[] }, @@ -16,7 +16,7 @@ export const excelRainSttnParsing = ( sggCode.find((sgg) => sgg.val === item.sggCd?.toString())?.text ?? "", item.bdstNm ?? "", item.daddr ?? "", - bdstUsgCd.find((cd) => cd.val === item.reuseBuilding?.[0]?.bdstUsgCd.toString())?.text ?? "", //건축물용도 + lwCds?.bdstUsgCd?.find((cd) => cd.val === item.reuseBuilding?.[0]?.bdstUsgCd.toString())?.text ?? "", //건축물용도 String(item.frstArchPrmsnDt ?? ""), String(item.archArea.split('.')[0] === '-1' ? '확인불가' : item.archArea.split('.')[0]), String(item.chgBuilding.length > 0 ? "Y" : "N"), diff --git a/apps/wr/app/store/ruseFcltMng/fcltSttn/rainSttn/headList.tsx b/apps/wr/app/store/ruseFcltMng/fcltSttn/rainSttn/headList.tsx index e78183cc5..89bcc0e29 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltSttn/rainSttn/headList.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltSttn/rainSttn/headList.tsx @@ -445,7 +445,7 @@ export const rainSttnDetailNodeListExport:CommonTableProps[] = [ rowSpan: 1, colSpan: 4 }, - { id: "ph", title: "PH", + { id: "ph", title: "pH", visible: true, row: 2, rowSpan: 1, @@ -524,7 +524,7 @@ export const rainSttnDetailHeadListExport:CommonTableProps[] = [ colSpan: 1 }, - { id: "ph", title: "PH", + { id: "ph", title: "pH", visible: true, row: 1, rowSpan: 1, diff --git a/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/excel.tsx b/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/excel.tsx index b3d3835c2..847353b32 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/excel.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/excel.tsx @@ -1,21 +1,19 @@ -import { bdstUsgCd } from "@/app/store/common/code/basicCode"; import type { SelectDataType } from "@common/business_components/ui"; import type { customRswtBdst } from "../../fcltReg/rswtReg"; + export const excelRSwtSttnParsing = ( excel: { data: customRswtBdst[] }, - sidoCode: SelectDataType[], - sggCode: SelectDataType[] + code: Record ): string[][] => { const excelExportData: string[][] = []; excel.data.forEach((item) => { - console.log("item", item) excelExportData.push([ - sidoCode.find((sido) => sido.val === item.ctpvCd.toString())?.text ?? "", - sggCode.find((sgg) => sgg.val === item.sggCd.toString())?.text ?? "", + code.sidoCode?.find((sido) => sido.val === item.ctpvCd.toString())?.text ?? "", + code.sggCode?.find((sgg) => sgg.val === item.sggCd.toString())?.text ?? "", item.bdstNm ?? "", item.daddr ?? "", - bdstUsgCd.find((cd)=> cd.val === item.reuseBuilding?.[0]?.bdstUsgCd.toString())?.text ?? "", //건축물용도 + code?.bdstUsgCd?.find((cd)=> cd.val === item.reuseBuilding?.[0]?.bdstUsgCd.toString())?.text ?? "", //건축물용도 String(item.frstArchPrmsnDt ?? ""), String(item.archArea.split('.')[0] === '-1' ? '확인불가' : item.archArea.split('.')[0]), // String(item.reuseBuilding?.[0]?.rswtrObj.wtrUsqty ?? "0"), //물사용량 diff --git a/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/index.tsx b/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/index.tsx index 1d4617442..1abcf2f4c 100644 --- a/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/index.tsx +++ b/apps/wr/app/store/ruseFcltMng/fcltSttn/rswtSttn/index.tsx @@ -31,8 +31,7 @@ export type rswtSttnState = { type rswtSttnActions = { rswtSttnInit: (isExcel: boolean, page: number, total: number, con: string, txt: string, - sidoCode: SelectDataType[], - sggCode: SelectDataType[]) => void; + code: Record) => void; rswtSttnSearch: (isExcel: boolean, page: number, total: number, con: string, txt: string, sidoCode: SelectDataType[], sggCode: SelectDataType[]) => void; @@ -60,9 +59,7 @@ export const rswtSttnActionsExport: (set: any) => rswtSttnActions = ( set: any ) => { return { - rswtSttnInit: async (isExcel: boolean, page: number, total: number, con: string, txt: string, - sidoCode: SelectDataType[], - sggCode: SelectDataType[]) => { + rswtSttnInit: async (isExcel: boolean, page: number, total: number, con: string, txt: string, code: Record) => { try { const rswtSttnRes = await getFetchWithCount( fetchType.WR, @@ -73,17 +70,17 @@ export const rswtSttnActionsExport: (set: any) => rswtSttnActions = ( (txt ? `/${txt}` : "") ); if (isExcel) { - const rswtExcel = excelRSwtSttnParsing(rswtSttnRes, sidoCode, sggCode); - set((state: rswtSttnState) => { - return { - ...state, - rswtSttn: { - ...state.rswtSttn, - excelList: rswtExcel, - }, - }; - }); - } else + const rswtExcel = excelRSwtSttnParsing(rswtSttnRes, code); + set((state: rswtSttnState) => { + return { + ...state, + rswtSttn: { + ...state.rswtSttn, + excelList: rswtExcel, + }, + }; + }); + } set((state: rswtSttnState) => { return { diff --git a/apps/wr/components/lib/func/commom.tsx b/apps/wr/components/lib/func/commom.tsx index 144aace66..1e15fae1c 100644 --- a/apps/wr/components/lib/func/commom.tsx +++ b/apps/wr/components/lib/func/commom.tsx @@ -1,5 +1,4 @@ -import type { comCodeState } from "@/app/store/common/code"; -import { lwCds } from "@/app/store/common/code/basicCode"; +import { lwCds, type comCodeState } from "@/app/store/common/code"; import { filePickedBlob, filePickedBlobArray, @@ -34,12 +33,11 @@ export const getCity = (val: string, sggCd: SelectDataType[]) => { // cd text 넣기 export const tableData = (data: any, code: comCodeState) => { const chCode = code.code; - return data?.map( (item: { sggCd: string; ctpvCd: string; - reuseBuilding: { lawTrgtYn: any; bdstUsgCd: any }[]; + reuseBuilding: { lawTrgtYn: string; bdstUsgCd: string ,grntchBdstCertGrd:string}[]; }) => { let returnData = {}; const sggText = chCode.sggCd.find( @@ -49,16 +47,25 @@ export const tableData = (data: any, code: comCodeState) => { (cd) => cd.val === String(item.ctpvCd).trim() )?.text; if (item?.reuseBuilding?.length > 0) { - const bdsgUsgText = chCode.bdstUsgCd.find( - (cd) => Number(cd.val) === item?.reuseBuilding[0]?.bdstUsgCd + + const bdsgUsgText = chCode?.bdstTotalUsgType?.find( + (cd) => cd.val === item?.reuseBuilding[0]?.bdstUsgCd )?.text; + const lawTrgtYn = item?.reuseBuilding[0]?.lawTrgtYn; + + + const grntchBdstCertGrdText =chCode?.bdstGrntchClass?.find( + (cd) => cd.val === item?.reuseBuilding[0]?.grntchBdstCertGrd + )?.text; + returnData = { ...item, sggText: sggText ?? "없음", cityText: cityText ?? "없음", bdsgUsgText: bdsgUsgText, lawTrgtYn: lawTrgtYn, + grntchBdstCertGrdText:grntchBdstCertGrdText }; } else { returnData = { diff --git a/apps/wr/components/lib/func/mapUtil.ts b/apps/wr/components/lib/func/mapUtil.ts index 13ce5b82a..a39bf17d7 100644 --- a/apps/wr/components/lib/func/mapUtil.ts +++ b/apps/wr/components/lib/func/mapUtil.ts @@ -197,7 +197,7 @@ export const getOverLayObj = (fclType: string, data: any,code?:any) => { newObj = { 건물용도: code?.bdstUsgCd.find((item) => item.val===String(data?.reuseBuilding[0].bdstUsgCd) )?.text ?? '확인불가', 설치완료일: data?.reuseBuilding[0]?.instlCmptnDt ?? '확인불가', - "주요 처리공정": code?.rswtPrscCdMthdCd.find((item) => item.val===data?.reuseBuilding[0]?.rswtrObj.filtrTrtmfctProcs)?.text ?? '확인불가', + "주요 처리공정": data?.reuseBuilding[0]?.rswtrObj.filtrTrtmfctProcs ?? '확인불가', 원수종류: code?.orgwtKndCd.find((item) => item.val === data?.reuseBuilding[0]?.rswtrObj.orgwtKndCd)?.text ?? '확인불가', //이용용도: isCode.filtrTrtmfctUsgCd data?.reuseBuilding[0]?.rswtrObj.altUswtrKndCd ?? '확인불가', }; diff --git a/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/buseWaterQulity/buseWaterQulity.tsx b/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/buseWaterQulity/buseWaterQulity.tsx index fd9ed6126..dd43658d1 100644 --- a/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/buseWaterQulity/buseWaterQulity.tsx +++ b/apps/wr/components/ui/form/fcltReg/pbnstReg/buseReg/buseWaterQulity/buseWaterQulity.tsx @@ -460,7 +460,7 @@ export function BuseWaterQulity({ />
- +
void; readonly?: boolean; isMap?: boolean; - }) { - const { code, rswtBdstUpdate, rswtBdstReg } = useWrStore( - (state) => state - ); + const { code, rswtBdstUpdate, rswtBdstReg } = useWrStore((state) => state); // const [divStyle, setDivStyle] = useState("h-[53vh]"); useEffect(() => { - if(isMap){ + if (isMap) { } }, [isMap]); // const defaultValues: z.infer = rswtZod.parse({}); @@ -64,29 +61,30 @@ export default function RswtrRegForm({ "reuseBuilding.0.rswtrObj.filtrTrtmfctProcs", ]); - const { t } = useTranslation('base'); + const { t } = useTranslation("base"); const onSubmit = (values: z.infer) => { if (isModal) { const handleConfirm = async () => { rswtBdstReg(values, "41"); if (setIsModal) setIsModal(false); }; - confirmToast(t('isInsertMsg'), handleConfirm); - + confirmToast(t("isInsertMsg"), handleConfirm); } else { const handleConfirm = async () => { rswtBdstUpdate(values, "41"); }; - confirmToast(t('isUpdateMsg'), handleConfirm); + confirmToast(t("isUpdateMsg"), handleConfirm); } }; - const filtrTrtmfctCpct = form.watch('reuseBuilding.0.rswtrObj.filtrTrtmfctCpct') + const filtrTrtmfctCpct = form.watch( + "reuseBuilding.0.rswtrObj.filtrTrtmfctCpct" + ); const cleanRswtData = (raw: any): z.infer => { const buildings = - raw?.reuseBuilding && raw.reuseBuilding.length > 0 - ? raw.reuseBuilding - : [{}]; + raw?.reuseBuilding && raw.reuseBuilding.length > 0 + ? raw.reuseBuilding + : [{}]; return { ...raw, frstArchPrmsnDt: raw?.frstArchPrmsnDt @@ -95,20 +93,21 @@ export default function RswtrRegForm({ archChgPrmsnDt: raw?.archChgPrmsnDt ? new Date(raw?.archChgPrmsnDt) : null, - reuseBuilding:buildings.map((item: any) => ({ + reuseBuilding: buildings.map((item: any) => ({ ...item, instlCmptnDt: item?.instlCmptnDt ? new Date(item.instlCmptnDt) : new Date(), // item?.instlCmptnDt가 유효하지 않으면 현재 날짜로 초기화 operMngCd: item?.operMngCd || "", // null → "" - instlCstSprtYn: item?.instlCstSprtYn || 'N', // null → "Y" - grntchBdstCertYn: item?.grntchBdstCertYn ||'N', + instlCstSprtYn: item?.instlCstSprtYn || "N", // null → "Y" + grntchBdstCertYn: item?.grntchBdstCertYn || "N", bdstUsgCd: item?.bdstUsgCd ?? Number("-1"), // null → "-1" rswtrObj: { ...item?.rswtrObj, filtrTrtmfctYn: item?.rainyObj?.filtrTrtmfctYn || code.yn[0]?.val, filtrTrtmfctCpct: item?.rswtrObj?.filtrTrtmfctCpct ?? null, - filtrTrtmfctProcs: item?.rswtrObj?.filtrTrtmfctProcs || code.rswtPrscCdMthdCd[0]?.val, + filtrTrtmfctProcs: + item?.rswtrObj?.filtrTrtmfctProcs||'', orgwtKndCd: item?.rswtrObj?.orgwtKndCd || code.orgwtKndCd[0]?.val, }, })), @@ -118,8 +117,8 @@ export default function RswtrRegForm({ // console.log(' formform ', form.watch()) // },[form.formState]) useEffect(() => { - console.log(' filtrTrtmfctCpct ', filtrTrtmfctCpct) - }, [filtrTrtmfctCpct]) + console.log(" filtrTrtmfctCpct ", filtrTrtmfctCpct); + }, [filtrTrtmfctCpct]); useEffect(() => { console.log("form errors:", form.formState.errors); @@ -133,7 +132,6 @@ export default function RswtrRegForm({ form.setValue("reuseBuilding.0.instlCstSprtAmt", 0); } - if (grntchBdstCertYn === "D") { form.setValue("reuseBuilding.0.grntchBdstCertYr", "0000"); form.setValue("reuseBuilding.0.grntchBdstCertNo", "확인불가"); @@ -141,7 +139,6 @@ export default function RswtrRegForm({ } else if (instlCstSprtYn === "D") { form.setValue("reuseBuilding.0.instlCstSprtAmt", -1); } - }, [grntchBdstCertYn, instlCstSprtYn, filtrTrtmfctProcs, form]); useEffect(() => { @@ -149,7 +146,11 @@ export default function RswtrRegForm({ }, [rswtForm, form]); + useEffect(() =>{ + console.log('code orgin ', code) + console.log('code ', code.orgwtKndCd) + },[code]) return (
@@ -176,335 +177,343 @@ export default function RswtrRegForm({
{/* */} - {isModal && rswtForm != undefined ? : <>} - {isModal ? ( -

- 중수도 시설 정보{" "} -

- ) : ( - <> - )} -

기본정보

-
-
- ( - - field.onChange(date), + {isModal && rswtForm != undefined ? : <>} + {isModal ? ( +

+ 중수도 시설 정보{" "} +

+ ) : ( + <> + )} +

기본정보

+
+
+ ( + + field.onChange(date), + }} + selectClass={"w-full"} + readOnly={readonly} + /> + + )} + /> +
+
+ { + const value = field.value; + const isUnknown = value === null || value === -1; // 또는 Number(value) === -1 + return ( + + { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + field.onChange(""); // 초기화 + } + }} + onChange={(e) => { + if (readonly) return; + handleMinusNumberChange(e, field.onChange); }} - selectClass={"w-full"} readOnly={readonly} + maxLength={numSize} /> - )} - /> -
-
- { - const value = field.value; - const isUnknown = value === null || value === -1; // 또는 Number(value) === -1 - return ( - - +
+
+
+

중수도 시설 정보

+
+ +
+
+ { + const value = field.value; + const isUnknown = value === null || value === -1; // 또는 Number(value) === -1 + + return ( + + { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + console.log("value"); + field.onChange(""); // 초기화 } - onFocus={() => { - // 입력 시 자동으로 확인불가 해제 - if (isUnknown && !readonly) { - field.onChange(""); // 초기화 - } - }} - onChange={(e) => { - if (readonly) return; - handleMinusNumberChange(e, field.onChange); - }} - readOnly={readonly} - maxLength={numSize} - /> - - ); - }} - /> -
+ }} + onChange={(e) => { + if (readonly) return; + handleMinusNumberChange(e, field.onChange); + }} + readOnly={readonly} + maxLength={numSize} + /> + + ); + }} + />
-
-

중수도 시설 정보

+
+ ( + + {} : field.onChange} + value={field.value ?? code.orgwtKndCd[0]?.val} + readOnly={readonly} + /> + + )} + />
+
+ ( + + { + if (readonly) return; -
-
- { - const value = field.value; - const isUnknown = value === null || value === -1; // 또는 Number(value) === -1 + field.onChange(e.target.value); + }} + maxLength={txtSize} + /> + + )} + /> +
+
- return ( - - +

인센티브 정보

+
+
+

설치비(원) 지원

+
+
+
+ ( + + {} : field.onChange} + value={field.value || code.bdstIncenYn[0]?.val} + readOnly={readonly} + /> + + )} + /> +
+
+ { + const value = field.value; + const isUnknown = value === null || value === -1; // 또는 Number(value) === -1 + return ( + + { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + field.onChange(""); // 초기화 } - onFocus={() => { - // 입력 시 자동으로 확인불가 해제 - if (isUnknown && !readonly) { + }} + onChange={(e) => { + if (readonly) return; + handleMinusNumberChange(e, field.onChange); + }} + disabled={ + instlCstSprtYn === "N" || instlCstSprtYn === "D" + } + maxLength={numSize} + /> + + ); + }} + /> +
+
- console.log('value') - field.onChange(""); // 초기화 - } - }} - onChange={(e) => { - if (readonly) return; - handleMinusNumberChange(e, field.onChange); - }} - readOnly={readonly} - maxLength={numSize} - /> - - ); - }} - /> -
-
- ( - - { } : field.onChange} - value={field.value ?? code.orgwtKndCd[0]?.val} - readOnly={readonly} - /> - - )} - /> -
-
- ( - - { } : field.onChange} - value={field.value || code.rswtPrscCdMthdCd[0]?.val} - readOnly={readonly} - /> - - )} - /> -
+
+

녹색건축물 인증

+
+
+
+ ( + + {} : field.onChange} + value={field.value || code.yn[0]?.val} + readOnly={readonly} + /> + + )} + />
- -
-

인센티브 정보

-
-
-

설치비(원) 지원

-
-
-
- ( - - { } : field.onChange} - value={field.value || code.bdstIncenYn[0]?.val} - readOnly={readonly} - /> - - )} - /> -
-
- { - const value = field.value; - const isUnknown = value === null || value === -1; // 또는 Number(value) === -1 - return ( - - + { + const isUnknown = + field.value === null || field.value === "0000"; // 또는 Number(value) === -1 + return ( + + { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + field.onChange(""); // 초기화 } - onFocus={() => { - // 입력 시 자동으로 확인불가 해제 - if (isUnknown && !readonly) { - field.onChange(""); // 초기화 - } - }} - onChange={(e) => { - if (readonly) return; - handleMinusNumberChange(e, field.onChange); - }} - disabled={instlCstSprtYn === "N" || instlCstSprtYn === "D"} - maxLength={numSize} - /> - - ); - }} - /> -
-
- -
-

녹색건축물 인증

-
-
-
- ( - - { } : field.onChange} - value={field.value || code.yn[0]?.val} - readOnly={readonly} + }} + value={isUnknown ? "확인불가" : (field.value ?? "")} + onChange={(e) => { + if (readonly) return; + if (e.target.value === "확인불가") { + field.onChange("0000"); + } else { + field.onChange(e.target.value); + } + }} + disabled={ + grntchBdstCertYn == "N" || grntchBdstCertYn == "D" + } + max={4} /> - )} - /> -
-
- { - const isUnknown = field.value === null || field.value === "0000"; // 또는 Number(value) === -1 - return ( - - { - // 입력 시 자동으로 확인불가 해제 - if (isUnknown && !readonly) { - field.onChange(""); // 초기화 - } - }} - value={ - isUnknown ? '확인불가' : field.value ?? ""} - onChange={(e) => { - if (readonly) return - if (e.target.value === '확인불가') { - field.onChange('0000'); - } else { - field.onChange(e.target.value); - } - }} - disabled={grntchBdstCertYn == "N" || grntchBdstCertYn == "D"} - max={4} - /> - - ) - }} - /> -
-
- { - const isUnknown = field.value === null || field.value === "0000"; // 또는 Number(value) === -1 - return ( - - { - // 입력 시 자동으로 확인불가 해제 - if (isUnknown && !readonly) { - field.onChange(""); // 초기화 - } - }} - value={ - isUnknown ? '확인불가' : field.value ?? ""} - onChange={(e) => { - if (readonly) return + ); + }} + /> +
+
+ { + const isUnknown = + field.value === null || field.value === "0000"; // 또는 Number(value) === -1 + return ( + + { + // 입력 시 자동으로 확인불가 해제 + if (isUnknown && !readonly) { + field.onChange(""); // 초기화 + } + }} + value={isUnknown ? "확인불가" : (field.value ?? "")} + onChange={(e) => { + if (readonly) return; - if (e.target.value === '확인불가') { - field.onChange(''); - } else { - field.onChange(e.target.value); - } - }} - disabled={grntchBdstCertYn == "N" || grntchBdstCertYn == "D"} - maxLength={txtSize} - /> - - ) - }} - /> -
-
- ( - - { } : field.onChange} - value={field.value || code.bdstGrntchClass[0]?.val} - readOnly={readonly} + if (e.target.value === "확인불가") { + field.onChange(""); + } else { + field.onChange(e.target.value); + } + }} + disabled={ + grntchBdstCertYn == "N" || grntchBdstCertYn == "D" + } + maxLength={txtSize} /> - )} - /> -
+ ); + }} + />
- +
+ ( + + {} : field.onChange} + value={field.value || code.bdstGrntchClass[0]?.val} + readOnly={readonly} + /> + + )} + /> +
+
+ {/* */} diff --git a/apps/wr/components/ui/map/LayerPopUp/RainFacility/RainFacility.tsx b/apps/wr/components/ui/map/LayerPopUp/RainFacility/RainFacility.tsx index 80bb8d7ec..96ecadcc9 100644 --- a/apps/wr/components/ui/map/LayerPopUp/RainFacility/RainFacility.tsx +++ b/apps/wr/components/ui/map/LayerPopUp/RainFacility/RainFacility.tsx @@ -191,8 +191,7 @@ export function RainFacility({ "1000000", String(con), seartchTxt ?? "", - code.cityCd, - code.sggCd + code as unknown as Record ); } }} @@ -249,8 +248,7 @@ export function RainFacility({ String(rainMapSize), String(con), seartchTxt ?? "", - code.cityCd, - code.sggCd + code as unknown as Record ); setIsReset(false); diff --git a/apps/wr/components/ui/map/LayerPopUp/RswtFacilty/RswtFacilty.tsx b/apps/wr/components/ui/map/LayerPopUp/RswtFacilty/RswtFacilty.tsx index becd76872..5c3c238d6 100644 --- a/apps/wr/components/ui/map/LayerPopUp/RswtFacilty/RswtFacilty.tsx +++ b/apps/wr/components/ui/map/LayerPopUp/RswtFacilty/RswtFacilty.tsx @@ -187,8 +187,7 @@ export function RswtFacility({ "1000000", String(con), seartchTxt ?? "", - code.cityCd, - code.sggCd + code as unknown as Record ); } }} @@ -236,8 +235,7 @@ export function RswtFacility({ String(rainMapSize), String(con), seartchTxt ?? "", - code.cityCd, - code.sggCd + code as unknown as Record ); setIsReset(false); diff --git a/apps/wr/public/sample_rswtSttn.xlsx b/apps/wr/public/sample_rswtSttn.xlsx index cec85971d65b2710e68f9de5473fd808795f6264..1085c6cfc57e6bf71bd0da36f2e4d1bdeb538f0f 100644 GIT binary patch literal 9020 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 S001iFM+;$N=HDDG!2bbl`u?o|