From a24bb159902b40cd912afb17a52e73d4984497d3 Mon Sep 17 00:00:00 2001 From: ljpark Date: Mon, 11 May 2026 16:26:06 +0900 Subject: [PATCH] =?UTF-8?q?wr:=20=EA=B8=B0=EC=A1=B4=20=EA=B3=B5=EA=B8=89?= =?UTF-8?q?=EC=B2=98=20=EC=9E=88=EB=8A=94=20=EA=B2=BD=EC=9A=B0=EC=9D=98=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wr/app/store/matDmd/coMatRvw/index.tsx | 3 +- apps/wr/app/store/matDmd/coMatRvw/type.tsx | 2 +- .../ui/form/coMat/conCostForm/conCostForm.tsx | 51 +++++++++++++------ 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/apps/wr/app/store/matDmd/coMatRvw/index.tsx b/apps/wr/app/store/matDmd/coMatRvw/index.tsx index db4b47370..b347a1df8 100644 --- a/apps/wr/app/store/matDmd/coMatRvw/index.tsx +++ b/apps/wr/app/store/matDmd/coMatRvw/index.tsx @@ -66,7 +66,7 @@ type coRvwActions = { sggCd: string ) => void; }; - +// 수요매칭검토현황 목록 const coMatInit = async ( pageNo: number, pageCnt: number, @@ -149,6 +149,7 @@ export const coRvwActionsExport: (set: any) => coRvwActions = (set: any) => { sggCd: string, dmdCoNm: string ) => { + // 수요처 년도별 정보 검색 let url = `/reuseFc/request/infoList/Sub/${pageNo}/${pageCnt}/${startYear}/${endYear}`; if (sggCd.length > 0) { diff --git a/apps/wr/app/store/matDmd/coMatRvw/type.tsx b/apps/wr/app/store/matDmd/coMatRvw/type.tsx index 771fc03c4..d195953cd 100644 --- a/apps/wr/app/store/matDmd/coMatRvw/type.tsx +++ b/apps/wr/app/store/matDmd/coMatRvw/type.tsx @@ -93,7 +93,7 @@ export const DmdCoReqSchema = z.object({ demandCo: DemandCoSchema.nullish(), // 수요처 정보 demandMatching: DemandMatchingSchema.nullish(), // 매칭 정보 demandCst: DemandCstSchema.nullish(), // 공사비 정보 - ruseUtztnFcltNm: z.string().nullish(), // 공급처 선정 + ruseUtztnFcltNm: z.string().nullish(), // 공급처명 splyCndtList: z.array( z.object({ ruseUtztnFcltNm: z.string(), // 공급처명 diff --git a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx index 8dd87dfb4..3e118154b 100644 --- a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx +++ b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx @@ -122,16 +122,34 @@ export default function ConCostForm({ link.click(); }); }; - const usgPrcsProcsWatch = activeForm.watch("demandCst.usgPrcsProcs"); - const dmndQtyWatch = activeForm.watch("dmndQty"); - const totalConstCost = activeForm.watch("totalConstCost"); - const cstrnCst = activeForm.watch("demandCst.cstrnCst") || 0; - const splyList = activeForm.watch("splyCndtList"); - const useUsgCdWatch = activeForm.watch("useUsgCd"); + const usgPrcsProcsWatch = activeForm.watch("demandCst.usgPrcsProcs"); // 용도에 따른 처리공정 + const dmndQtyWatch = activeForm.watch("dmndQty"); // 요구수량(m³/일) + const totalConstCost = activeForm.watch("totalConstCost"); // 처리시설 총사업비(백만원) + const cstrnCst = activeForm.watch("demandCst.cstrnCst") || 0; // 공급관로 표준공사비(백만원) + const prcsFcltCpctCstrnCst = activeForm.watch("demandCst.prcsFcltCpctCstrnCst") || 0; // 처리시설용량에 따른 공사비(백만원) + const fcltSbsdCstrnCst = activeForm.watch("demandCst.fcltSbsdCstrnCst") || 0; // 시설부대경비 + const splyList = activeForm.watch("splyCndtList"); // 공급처 후보지 목록 + const useUsgCdWatch = activeForm.watch("useUsgCd"); // 사용 용도 코드 + const ruseUtztnFcltNmWatch = activeForm.watch("ruseUtztnFcltNm"); // 선정된 공급처 명 const useUsgCdLabel = - code.sewageOutFclttUse?.find((item) => item.val === useUsgCdWatch)?.text ?? + code.sewageOutFclttUse?.find((item) => item.val === useUsgCdWatch)?.text ?? // 사용 용도 명칭(라벨) String(useUsgCdWatch ?? ""); + useEffect(() => { + const calculatedTotalConstCost = + Number(prcsFcltCpctCstrnCst) + Number(fcltSbsdCstrnCst); + + if ((totalConstCost ?? 0) !== calculatedTotalConstCost) { + activeForm.setValue("totalConstCost", calculatedTotalConstCost); + } + }, [ + activeForm, + prcsFcltCpctCstrnCst, + fcltSbsdCstrnCst, + totalConstCost, + selectionVersion, + ]); + // 용도 변경 시 처리공정 자동 매핑 (시뮬레이션 대응) useEffect(() => { if (useUsgCdWatch) { @@ -239,13 +257,13 @@ export default function ConCostForm({ return; } - // const pk = - // splycd && splycd[0]?.ruseUtztnFcltCd - // ? splycd[0]?.ruseUtztnFcltCd - // : "11000SW001R1"; + // 1순위: 팝업에서 새로 선택한 코드 (lastSub) + // 2순위: 기존 DB에서 불러와 폼에 저장된 코드 (demandMatching.pbnstRuseFcltId) + const pk = + lastSub?.ruseUtztnFcltCd ?? + activeForm.getValues("demandMatching.pbnstRuseFcltId") ?? + null; - const pk =lastSub?.ruseUtztnFcltCd??null; // 후보지 - if (type === "mat") { if (value.demandCst) { const data: DedMatUpdateType = { @@ -652,13 +670,14 @@ export default function ConCostForm({ - )}