+
}
leftChildren={
- <>
-
-
- setSearchYear(String(val))
- }
- />
-
- {
- setPbnRuseNm(searchNm || "");
- }}
- setRtnData={function (rtnData: any[]): void {
- setBdstTable(rtnData);
- }}
- searchList={pbnstSttn.pbnstSearchData || []}
- >
- >
+
+
+ setSearchYear(String(val))
+ }
+ />
+
+ {
+ setPbnRuseNm(e || "");
+ }}
+ />
+
}
queryClick={function (returnType: ReturnType): void {
- // '{partValue: 'A', sidoValue: '0', sigunValue: '0', regionValue: '0', unitWaterShedValue: '0', …}'
- let con;
- if (returnType.sigunValue != "0") {
- con = returnType.sigunValue;
- } else {
- con = returnType.sidoValue;
- }
- // pbnstSttnSearch(1, "20", con);
+ pbnstSttnSearch("1", "20", returnType, pbnRuseNm, searchYear);
}}
excelClick={excelClick}
initClick={function (): void {}}
@@ -191,7 +176,15 @@ export default function PbnstSttn() {
cellClick={(index: number | undefined, headId: string) => {
cellCLick(index);
}}
- onPageChange={setPageNation}
+ onPageChange={(page: number) => {
+ pbnstSttnSearch(
+ String(page),
+ String(13),
+ ref.current,
+ pbnRuseNm,
+ searchYear
+ );
+ }}
>
diff --git a/apps/wr/app/store/prfmncReg/pbnstPrfmncReg/index.tsx b/apps/wr/app/store/prfmncReg/pbnstPrfmncReg/index.tsx
index 37c010890..87e827f60 100644
--- a/apps/wr/app/store/prfmncReg/pbnstPrfmncReg/index.tsx
+++ b/apps/wr/app/store/prfmncReg/pbnstPrfmncReg/index.tsx
@@ -33,7 +33,7 @@ export type pbnstPrfmncType = pbnstPrfmncState & pbnstPrfmncActions;
type pbnstPrfmncActions = {
prfmncHasuInit: (page: string, sggOrCity: string) => void;
- prfmnRegData: (data:PrfType) =>void
+ prfmnRegData: (data: PrfType) => void;
};
const checkWrRegList = async () => {
@@ -47,21 +47,28 @@ const hasuListFetch = async (page: string, sggOrCity: string) => {
checkWrRegListRes?.fcltCds,
fetchType.COMMON
);
- const data = checkWrRegListRes.fcPrfList.map((item: FcPrfType) => {
- const findData = rainRes.data.find(
- (fclt: pubHasuType) =>
- fclt.bscFctCd === item.pbnstRuseFcltPk.substring(0, 11)
+
+
+ const findData = rainRes.data.map((item: pubHasuType) => {
+ const data = checkWrRegListRes?.fcPrfList.find(
+ (fclt: FcPrfType) =>
+ fclt.pbnstRuseFcltPk.substring(0, 11) === item?.bscFctCd
);
- return {
- sido: findData?.sido,
- gugun: findData?.gugun,
- bscFctNm: findData?.bscFctNm,
- ruseUtztnFcltNm: item.ruseUtztnFcltNm,
- pbnstRuseFcltPk: item.pbnstRuseFcltPk,
- prfList : item.prfList
- };
+ if(data !==undefined){
+ return( {
+
+ sido: item.sido,
+ gugun: item.gugun,
+ bscFctNm: item.bscFctNm,
+ bscFctCd: item.bscFctCd,
+ ruseUtztnFcltNm: data.ruseUtztnFcltNm,
+ pbnstRuseFcltPk: data.pbnstRuseFcltPk,
+ prfList: data.prfList,
+ });
+ }
});
- return data;
+
+ return findData;
};
export const pbnstPrfmncActionsExport: (set: any) => pbnstPrfmncActions = (
set: any
@@ -83,26 +90,21 @@ export const pbnstPrfmncActionsExport: (set: any) => pbnstPrfmncActions = (
console.log(errorHasu);
}
},
- prfmnRegData: async (data:PrfType,) => {
- try{
-
+ prfmnRegData: async (data: PrfType) => {
+ try {
const ressponse = await postFectch(
"/reuseFc/pubFcPrf",
data,
fetchType.WR
);
- console.log('ressponse ', ressponse)
-
- if(ressponse.status === 200){
-
- toast.success("하수재이용 시설 실적 등록이 완료되었습니다.")
-
- }
- }catch(e){
- console.log(e)
- toast.error("하수재이용 시설 실적 등록이 실패하였습니다.")
+ if (ressponse.status === 200) {
+ toast.success("하수재이용 시설 실적 등록이 완료되었습니다.");
+ }
+ } catch (e) {
+ console.log(e);
+ toast.error("하수재이용 시설 실적 등록이 실패하였습니다.");
}
},
};
diff --git a/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/index.tsx b/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/index.tsx
index d398b7f6e..5b3ad6813 100644
--- a/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/index.tsx
+++ b/apps/wr/app/store/ruseFcltMng/fcltReg/rainReg/index.tsx
@@ -3,7 +3,76 @@ import { getFetch, postFectch, putFectch } from "@/components/lib/api";
import { z } from "zod";
import { makeMdfr, makeRstr } from "../bdstReg";
+const validationMessages = {
+ required: (field: string) => `${field}을(를) 입력해주세요.`,
+ requiredSelect: (field: string) => `${field}을(를) 선택해주세요.`,
+ yearFormat: '4자리 연도만 입력하세요',
+};
+
export const TEST_UUID= '2d4b151d-1828-41e0-91d9-4cd28ea1cc7e'
+
+const rainyObjSchema = z.object({
+ bdstReuseFcltFk: z.number().nullish(),
+ pntfColKnd: z.string().default(""),
+ pntfColArea: z.number().default(0),
+ dtfcltCpct: z.number().default(0),
+ filtrTrtmfctYn: z.string().default("Y").nullish(),
+ filtrTrtmfctCpct: z.number().nullish().default(0),
+ filtrTrtmfctPrs: z.string().default(""),
+ annRnwtQty: z.number().default(0),
+ oilqMeasMthd: z.string().default("").nullish(),
+ rgtr:z.string().nullish(),
+ mdfr:z.string().nullish(),
+}).refine((data) => data.pntfColKnd.length > 0, {
+ message: validationMessages.requiredSelect("종류"),
+ path: ["pntfColKnd"],
+}).refine((data) => data.pntfColArea > 0, {
+ message: validationMessages.required("면적(m³)"),
+ path: ["pntfColArea"],
+});
+
+const reuseBuildingSchema = z.object({
+ bdstRuseFcltPk: z.number().nullish(),
+ bdstInfoFk:z.number().nullish(),
+ instlCmptnDt: z.coerce.date().default(() => new Date()),
+ instlCst: z.number().nullish(),
+ operMngCd: z.string().optional().default(""),
+ anlOperCst: z.number().default(0),
+ instlCstSprtYn: z.string().default("Y"),
+ instlCstSprtAmt: z.number().nullish(),
+ grntchBdstCertYn: z.string().default("Y"),
+ grntchBdstCertYr: z.string().default("")
+ .refine((year)=> year.length===0 || /^\d{4}$/.test(year),{
+ message: validationMessages.yearFormat
+ }),
+ grntchBdstCertNo: z.string().default(""),
+ grntchBdstCertGrd: z.string().default(""),
+ crgRdctYn: z.string().default("N").nullish(), /// 안쓰는 값
+ crgRdctBss: z.string().default("").nullish(), /// 안쓰는 값
+ crgRdctAmt: z.number().default(0), // 안쓰는 값
+ ruseFcltFlg: z.string().default(""),
+ bdstUsgCd: z.number().default(0),
+ lawTrgtYn: z.string().default("Y"),
+ rgtr:z.string().nullish(),
+ mdfr:z.string().nullish(),
+ rainyObj: rainyObjSchema.default({})
+}).refine((data) => data.bdstUsgCd > 0, {
+ message: validationMessages.requiredSelect("건축물용도"),
+ path: ["bdstUsgCd"],
+});
+
+const chgBuildingSchema = z.object({
+ bdstInfoFk: z.number().nullish(),
+ archChgPrmsnDt: z.coerce.date({required_error: validationMessages.required("허가일")}),
+ archChgArea: z.string().default("-"),
+ bdstChgNm: z.string().default(""),
+ rgtr:z.string().nullish(),
+ mdfr:z.string().nullish(),
+}).refine(data => data.bdstChgNm.length > 0, {
+ message: validationMessages.requiredSelect("구분"),
+ path: ["bdstChgNm"]
+});
+
export const rainZod = z.object({
bdstInfoPk: z.number().optional(),
ctpvCd: z.number().default(0),
@@ -16,62 +85,9 @@ export const rainZod = z.object({
archChgArea: z.number().default(0),
rgtr:z.string().nullish(),
mdfr:z.string().nullish(),
- reuseBuilding: z.array(
- z.object({
- bdstRuseFcltPk: z.number().nullish(),
- bdstInfoFk:z.number().nullish(),
- instlCmptnDt: z.coerce.date().default(() => new Date()),
- instlCst: z.number().nullish(),
- operMngCd: z.string().optional().default(""),
- anlOperCst: z.number().default(0),
- instlCstSprtYn: z.string().default(""),
- instlCstSprtAmt: z.number().nullish(),
- grntchBdstCertYn: z.enum(["Y", "N"]).nullish(),
- grntchBdstCertYr: z.string().default("")
- .refine((year)=> year.length===0 || /^\d{4}$/.test(year),{
- message:'4자리 연도만 입력하세요'
- }),
- grntchBdstCertNo: z.string().default(""),
- grntchBdstCertGrd: z.string().default(""),
- crgRdctYn: z.string().default("N").nullish(), /// 안쓰는 값
- crgRdctBss: z.string().default("").nullish(), /// 안쓰는 값
- crgRdctAmt: z.number().default(0), // 안쓰는 값
- ruseFcltFlg: z.string().default(""),
- bdstUsgCd: z.number().default(0),
- lawTrgtYn: z.enum(["Y", "N"]),
- rgtr:z.string().nullish(),
- mdfr:z.string().nullish(),
-
- rainyObj: z.object({
- bdstReuseFcltFk: z.number().nullish(),
- pntfColKnd: z.string().default(""),
- pntfColArea: z.number().default(0),
- dtfcltCpct: z.number().default(0),
- filtrTrtmfctYn: z.enum(["Y", "N"]).nullish(),
- filtrTrtmfctCpct: z.number().nullish().default(0),
- filtrTrtmfctPrs: z.string().default(""),
- annRnwtQty: z.number().default(0),
- oilqMeasMthd: z.string().default("").nullish(),
- rgtr:z.string().nullish(),
- mdfr:z.string().nullish(),
-
-
- }).default({})
- })
- ).default([]),
-
- chgBuilding: z.array(
- z.object({
- bdstInfoFk: z.number().nullish(),
- archChgPrmsnDt: z.coerce.date(),
- archChgArea: z.string().default("-"),
- bdstChgNm: z.string().default(""),
- rgtr:z.string().nullish(),
- mdfr:z.string().nullish(),
-
- })
- ).default([])
-});
+ reuseBuilding: z.array(reuseBuildingSchema).default([]),
+ chgBuilding: z.array(chgBuildingSchema).default([])
+})
export type chgBuilding={
bdstInfoFk?: number|null,
@@ -254,6 +270,3 @@ export const rainFacActionsExport: (set: any) => rainFacSActions = (
}
}}
-
-
-
diff --git a/apps/wr/app/store/ruseFcltMng/fcltSttn/pbnstSttn/index.tsx b/apps/wr/app/store/ruseFcltMng/fcltSttn/pbnstSttn/index.tsx
index 6ce27db86..33bce5520 100644
--- a/apps/wr/app/store/ruseFcltMng/fcltSttn/pbnstSttn/index.tsx
+++ b/apps/wr/app/store/ruseFcltMng/fcltSttn/pbnstSttn/index.tsx
@@ -9,6 +9,7 @@ import { excelPbnstSttnParsing } from "./excel";
import type { FcPrfType } from "@/app/store/prfmncReg/pbnstPrfmncReg/type";
import type { ReturnType } from "@common/business_components/ui";
import type { WaterReuseFacility } from "./type";
+import moment from "moment";
const pbnstSttHeadList = pbnSttHeadListExport;
const pbnstSttNodeList = pbnstSttNodeListExport;
@@ -166,8 +167,8 @@ const hasuListFetch = async (
outUsage: usage.outUsage,
operMthd: item.operList[0]?.operMthd,
rprtvBzenty: item.operList[0]?.rprtvBzenty,
- bgngDt: item.operList[0]?.bgngDt.toLocaleDateString ?? "",
- endDt: item.operList[0]?.endDt.toLocaleDateString?? "",
+ bgngDt: moment(item.operList[0]?.bgngDt).format("YYYY-MM-DD") ?? "",
+ endDt: moment(item.operList[0]?.endDt).format("YYYY-MM-DD") ?? "",
searchNm: findData.bscFctNm,
searchPk: findData.bscFctCd,
prfList:item?.prfList??[]
diff --git a/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx b/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx
index 08f2b073e..9ec4fc5c0 100644
--- a/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx
+++ b/apps/wr/components/ui/form/fcltReg/rainReg/rainRegForm.tsx
@@ -60,8 +60,10 @@ export default function RainRegForm({
typeof item?.grntchBdstCertYr === "string"
? item?.grntchBdstCertYr
: "", // null → ""
+ // Ensure enum fields are null if empty string to trigger Zod default
rainyObj: {
...item?.rainyObj,
+ filtrTrtmfctYn: item?.rainyObj?.filtrTrtmfctYn === "" ? null : item?.rainyObj?.filtrTrtmfctYn,
},
})),
};
@@ -243,7 +245,7 @@ export default function RainRegForm({
label={""}
selectArray={code.yn}
onSelectValue={readonly ? () => { } : field.onChange}
- value={field.value ?? code.yn[0]?.val}
+ value={field.value || code.yn[0]?.val}
readOnly={readonly}
/>
@@ -278,12 +280,10 @@ export default function RainRegForm({
{
- if (!readonly) handleCommaNumberChange(e, field.onChange);
- }}
+ onChange={field.onChange}
readOnly={filtrTrtmfctYn !== "Y"}
/>