하수재이용 시설 테스트 중

This commit is contained in:
leedj312
2025-06-24 19:14:47 +09:00
parent dc772ca96c
commit 3f0c3126e9
9 changed files with 677 additions and 667 deletions
@@ -42,14 +42,12 @@ export default function PublicReuseFaciltyInsert() {
searchFclts,
pubHasuInit,
pbnstRegClick,
pbnstMngData,
pbnstRuseFcltUpdate,
pubHasuSearch,
pbnstRuseBizUpdate,
} = useWrStore((state) => state);
const { pubFacHeadList, pbnstHasuRes, pbnstRes } = pbnst;
const [currentTab, setCurrentTab] = useState<string>("mng");
const [pbnstBiz, setPbnstBiz] = useState<fcBizType[]>();
const [isRuseReg, setIsRuseReg] = useState<{
isModal: boolean;
data: pubHasuType;
@@ -61,18 +59,12 @@ export default function PublicReuseFaciltyInsert() {
const [bdstTable, setbdstTable] = useState<pubHasuType[]>();
const [selectRow, setSelectRow] = useState<pubHasuType>();
// const form = useForm<z.infer<typeof pbnstRegArrayZod>>({
// resolver: zodResolver(pbnstRegArrayZod),
// defaultValues: pbnstRegArrayZod.parse([]),
// mode: "onChange",
// });
const form = useForm<{
items: z.infer<typeof pbnstRegZod>[];
}>({
resolver: zodResolver(z.object({ items: pbnstRegArrayZod })),
defaultValues: { items: pbnstRegArrayZod.parse([]) },
mode:"onChange"
// defaultValues: { items: pbnstRegArrayZod.parse([]) },
mode: "onChange",
});
const {
fields: items,
@@ -84,21 +76,31 @@ export default function PublicReuseFaciltyInsert() {
});
useEffect(() => {
if (!pbnst.isInit) {
pubHasuInit("1", "11");
pubHasuInit("1", "0");
}
}, [pbnst.isInit, pubHasuInit]);
const onSubmit = async (valuse: { items: PbnstRegArrrayType }) => {
const data = writeRgtrAndMdfr(valuse.items);
let bizs = [] as fcBizType[];
data.forEach((fclt) => {
bizs = [...bizs, ...fclt.fcBizs];
});
const pbnst =data.map((fclt) => {
return({
pbnstRuseFcltPk: fclt.pbnstRuseFcltPk,
fcltCpct: fclt.fcltCpct,
ruseCpct: fclt.ruseCpct,
splyExtraCpct: fclt.splyExtraCpct,
rgtr: fclt.rgtr,
mdfr: fclt.mdfr,
fcFiles: fclt.fcFiles,
fcOpers: fclt.fcOpers,
})
})
await pbnstRuseFcltUpdate(pbnst as customPbnst[]);
await pbnstRuseFcltUpdate(data);
await pbnstRuseBizUpdate(bizs);
await pbnstRuseBizUpdate(bizs);
};
useEffect(() => {
@@ -114,9 +116,8 @@ export default function PublicReuseFaciltyInsert() {
const cellClick = (val: number | undefined) => {
if (val === undefined) return;
const selectRow = pbnstHasuRes?.[val];
setSelectRow(pbnstHasuRes?.[val])
setSelectRow(pbnstHasuRes?.[val]);
if (selectRow) {
//setIsRuseReg({ ...isRuseReg, data: selectRow });
pbnstRegClick(selectRow);
}
};
@@ -126,8 +127,13 @@ export default function PublicReuseFaciltyInsert() {
};
useEffect(() => {
if (pbnst.pbnstRes) {
if (pbnst.pbnstRes&& pbnst.pbnstRes?.length>0) {
console.log("pbnst.pbnstRes", pbnstRes);
form.reset({ items: pbnstRegArrayZod.parse(pbnst.pbnstRes) });
}else{
console.log("pbnst.pbnstRes is null", pbnstRes);
form.reset({ items: [] });
}
}, [pbnst.pbnstRes]);
useEffect(() => {
@@ -137,39 +143,55 @@ export default function PublicReuseFaciltyInsert() {
}, [indexMng]);
useEffect(() => {
console.log("form errors:", form.formState.errors);
}, [form.formState.errors]);
console.log("form errors:", form.formState.errors);
}, [form.formState.errors]);
const appendPbnstRuseFclt = useCallback(() => {
const selecTableRow = selectRow;
const appendPbnstRuseFclt = useCallback(() => {
if (pbnstRes && pbnstRes.length > 0) {
const lastPbnst = pbnstRes[pbnstRes.length - 1];
console.log('lastPbnst.swtrmtFcltFk ', lastPbnst)
if(lastPbnst){
if (lastPbnst && selecTableRow) {
append(
pbnstRegZod.parse({
pbnstRuseFcltPk: String(lastPbnst.pbnstRuseFcltPk) + String(pbnstRes.length + 1),
pbnstRuseFcltPk:
String(selecTableRow.bscFctCd) + String(pbnstRes.length + 1),
ruseUtztnFcltNm: "",
fcBizs: [fcBizSchema.parse({pbnstRuseFcltFk:String(lastPbnst.pbnstRuseFcltPk) + String(pbnstRes.length + 1),cycl:1})] as fcBizType[],
fcBizs: [
fcBizSchema.parse({
pbnstRuseFcltFk:
String(lastPbnst.pbnstRuseFcltPk) +
String(pbnstRes.length + 1),
cycl: 1,
}),
] as fcBizType[],
})
);
setIsRuseReg({ ...isRuseReg, isModal: true })
setIsRuseReg({ ...isRuseReg, isModal: true });
}
} else {
if(selectRow){
if (selecTableRow) {
append(
pbnstRegZod.parse({
pbnstRuseFcltPk: String(selectRow.bscFctCd)+'1',
ruseUtztnFcltNm: "",
regDt: null,
mdfcnDt: null,
fcBizs: [fcBizSchema.parse({pbnstRuseFcltFk:String(selectRow.bscFctCd)+'1',cycl:1})] as fcBizType[],
})
);
setIsRuseReg({ ...isRuseReg, isModal: true })
pbnstRegZod.parse({
pbnstRuseFcltPk: String(selecTableRow.bscFctCd)+'1',
ruseUtztnFcltNm: "",
regDt: null,
mdfcnDt: null,
fcBizs: [fcBizSchema.parse({pbnstRuseFcltFk:String(selecTableRow.bscFctCd)+'1',cycl:1})] as fcBizType[],
})
)
setIsRuseReg({ ...isRuseReg, isModal: true });
}
}
},[pbnstRegZod,pbnstRes,append,selectRow])
}, [pbnstRegZod, pbnstRes, append, selectRow, form]);
useEffect(() => {
// console.log(" page getgetvaslue ", form.getValues());
}, [form.getValues()]);
return (
<>
<ContentsDiv>
@@ -192,8 +214,8 @@ export default function PublicReuseFaciltyInsert() {
size={"sm"}
onClick={(e) => {
searchTxt && searchTxt?.length > 0
? pubHasuSearch("1", "11", searchTxt)
: pubHasuInit("1", "11");
? pubHasuSearch("1", "0", searchTxt)
: pubHasuInit("1", "0");
}}
>
조회
@@ -202,13 +224,14 @@ export default function PublicReuseFaciltyInsert() {
size={"sm"}
className=""
onClick={() => {
pbnstMngData([] as customPbnst[]);
if(!selectRow){
toast.error("하수리시시설을 테이블을 선택하고 등록버튼을 눌러주세요")
return
}else{
appendPbnstRuseFclt()
// pbnstMngData([] as customPbnst[]);
if (!selectRow) {
toast.error(
"하수리시시설을 테이블을 선택하고 등록버튼을 눌러주세요"
);
return;
} else {
appendPbnstRuseFclt();
}
}}
>
@@ -260,6 +283,7 @@ export default function PublicReuseFaciltyInsert() {
formType="update"
form={form}
setIndexMng={(index: number) => {
console.log("setIndexMng", index);
setIndexMng(index);
}}
indexMng={indexMng}
@@ -286,10 +310,10 @@ export default function PublicReuseFaciltyInsert() {
data={isRuseReg.data || ({} as customPbnst)}
></PbnstRegModal>
}
bodyClass="w-[68vw] max-w-none h-[90vh]"
bodyClass="w-[68vw] max-w-none h-[90vh]"
open={isRuseReg.isModal}
onOpenChange={(open) => {
remove(form.getValues("items").length - 1)
remove(form.getValues("items").length - 1);
setIsRuseReg({ data: {} as pubHasuType, isModal: open });
}}
/>
@@ -4,6 +4,7 @@ import type { pubHasuType } from "../../ruseFcltMng/fcltReg/pbnstReg/type";
import type { FcPrfType, PrfType } from "./type";
import type { TableUpperProps } from "../../common/type/header";
import { ToastFormUi } from "@/components/ui/toast/toastFromUi";
import toast from "react-hot-toast";
const pbnstPrfmncHeadList = pbnstPrfmncHeadListExport;
const monthHeadList = monthHeadListExport;
@@ -94,18 +95,13 @@ export const pbnstPrfmncActionsExport: (set: any) => pbnstPrfmncActions = (
console.log('ressponse ', ressponse)
if(ressponse.status === 200){
ToastFormUi({
body: "하수재이용 시설 실적 등록이 완료되었습니다. ",
title: "하수재이용 시설 실적 등록",
});
toast.success("하수재이용 시설 실적 등록이 완료되었습니다.")
}
}catch(e){
console.log(e)
ToastFormUi({
body: "하수재이용 시설 실적 등록이 실패하였습니다. ",
title: "하수재이용 시설 실적 등록",
});
toast.error("하수재이용 시설 실적 등록이 실패하였습니다.")
}
},
@@ -24,6 +24,7 @@ import {
fcOrgwtsHeadListExport,
} from "./headList";
import type { TableUpperProps } from "@/app/store/common/type/header";
import toast from "react-hot-toast";
const selectLabel: SelectDataType[] = [{ text: "test", val: "1" }];
const pubFacHeadList = pubFacHeadListExport;
@@ -62,9 +63,9 @@ type pubFacActions = {
appendRuseFclt(array: customPbnst[]): void;
fileDelete: (atflCd: string) => void;
fileDownLoad: (atflCd: string) => void;
pbnstMngData: (data: customPbnst[]) => void;
pbnstBizData(data: fcBizType): void;
getBizCycle: (pbnstObj: customPbnst) => void;
//pbnstMngData: (data: customPbnst[]) => void;
//pbnstBizData(data: fcBizType): void;
// getBizCycle: (pbnstObj: customPbnst) => void;
getpbnstInsertIndex: (data: pbnstInsertIndex) => void;
pbnstRuseFcltUpdate: (ruseRes: customPbnst[]) => void;
pbnstRuseBizUpdate: (ruseRes: fcBizType[]) => void;
@@ -100,14 +101,20 @@ const checkWrRegList = async () => {
const hasuListFetch = async (page: string, sggOrCity: string, searchTxt?:string) => {
const checkWrRegListRes = await checkWrRegList();
let url = `/prcsFclt/ruseInfo/${page ? page : 1}/10/A/${sggOrCity ? sggOrCity : "11"}/0/1/SW`;
console.log(' checkWrRegListRes ', checkWrRegListRes)
let url = `/prcsFclt/ruseInfo/${page ? page : 1}/10/A/${sggOrCity? sggOrCity : "11"}/0/1/SW`;
const data = checkWrRegListRes.filter((item:string) => item !== "")
console.log(' checkWrRegListRes ' )
if(searchTxt){
url= url +`/${searchTxt}`
}
const rainRes = await postFectch(
url,
checkWrRegListRes,
data,
fetchType.COMMON
);
@@ -200,7 +207,6 @@ export const pubFacActionsExport: (set: any) => pubFacActions = (set: any) => {
pbnstRegClick: async (pubHasuRes: pubHasuType) => {
try {
const pbnstRes = await initFetch(pubHasuRes.bscFctCd);
console.log('pbnstRes ' , pbnstRes)
return set((state: pubFacState) => ({
...state,
pbnst: {
@@ -234,14 +240,19 @@ export const pubFacActionsExport: (set: any) => pubFacActions = (set: any) => {
const response = await postFectch(
`/reuseFc/pubFc`,
JSON.stringify( pbnstRes)
pbnstRes
);
if( response.status === 200) {
toast.success(`${pbnstRes.ruseUtztnFcltNm} 하수재이용 시설이 등록되었습니다.`);
}
const pbnstHasuRes = await hasuListFetch('1', '0');
return set((state: pubFacState) => ({
...state,
pbnst: {
...state.pbnst,
pbnstRes: response.data,
pbnstRes: pbnstHasuRes,
isInit: false,
},
}));
@@ -334,41 +345,41 @@ export const pubFacActionsExport: (set: any) => pubFacActions = (set: any) => {
}
},
pbnstMngData: (data: customPbnst[]) => {
if (data.length > 0) {
}
return set((state: pubFacState) => {
state.pbnst.pbnstMngRegData = data;
state.pbnst.pbnstBizCycle =
data.length <= 0
? [{ text: "없음", val: "1" }]
: state.pbnst.pbnstBizCycle;
return state;
});
},
// pbnstMngData: (data: customPbnst[]) => {
// if (data.length > 0) {
// }
// return set((state: pubFacState) => {
// state.pbnst.pbnstMngRegData = data;
// state.pbnst.pbnstBizCycle =
// data.length <= 0
// ? [{ text: "없음", val: "1" }]
// : state.pbnst.pbnstBizCycle;
// return state;
// });
// },
pbnstBizData: (data: fcBizType) => {
return set((state: pubFacState) => {
if (state.pbnst.pbnstMngRegData) {
const regData = state.pbnst.pbnstMngRegData.find(
(item) => data.pbnstRuseFcltFk === item.pbnstRuseFcltPk
);
if (regData) {
const bizIdx = regData.fcBizs.findIndex(
(item) => item.pbnstRuseFcltBizPk == data.pbnstRuseFcltBizPk
);
// pbnstBizData: (data: fcBizType) => {
// return set((state: pubFacState) => {
// if (state.pbnst.pbnstMngRegData) {
// const regData = state.pbnst.pbnstMngRegData.find(
// (item) => data.pbnstRuseFcltFk === item.pbnstRuseFcltPk
// );
// if (regData) {
// const bizIdx = regData.fcBizs.findIndex(
// (item) => item.pbnstRuseFcltBizPk == data.pbnstRuseFcltBizPk
// );
if (bizIdx >= 0) {
regData.fcBizs[bizIdx] = data;
const pbnstData = state.pbnst.pbnstMngRegData
state.pbnst.pbnstMngRegData= [...pbnstData]
// if (bizIdx >= 0) {
// regData.fcBizs[bizIdx] = data;
// const pbnstData = state.pbnst.pbnstMngRegData
// state.pbnst.pbnstMngRegData= [...pbnstData]
}
}
}
return state;
});
},
// }
// }
// }
// return state;
// });
// },
getpbnstInsertIndex: async (data: pbnstInsertIndex) => {
return set((state: pubFacState) => {
state.pbnst.pbnsUpdateIndex = data;
@@ -57,7 +57,7 @@ export type PbnstDemandComType = {
dmdAplyPswd: string | '';
splyCpct: number | 0;
splyFmYn:string|'Y'
dmdInfoFk:string|''
// dmdInfoFk:string|''
}
const pubHasuZod = z.object({
@@ -129,7 +129,7 @@ const fcOrgwtSchema = z.object({
});
const dmdColist = z.object({
dmdInfoFk: z.string().default(''),
dmdInfoPk: z.string().default(''),
dmdCoNm: z.string().default(''),
daddr: z.string(),
useUsgCd: z.string().nullish(),
File diff suppressed because it is too large Load Diff
@@ -37,7 +37,6 @@ export type FilesType = {
export function PbnstMngForm({
form,
formType,
firstFcltData,
indexMng,
setIndexMng,
}: {
@@ -51,12 +50,8 @@ export function PbnstMngForm({
code,
pbnst,
pbnstInsert,
pbnstMngData,
fileDelete,
fileDownLoad,
getBizCycle,
getpbnstInsertIndex,
appendRuseFclt,
} = useWrStore((state) => state);
const { pbnstRes } = pbnst;
@@ -67,8 +62,6 @@ export function PbnstMngForm({
const [mngMtdCode, setMngMtdCode] =
useState<{ name: string; val: SelectDataType[] }[]>();
const [progress, setProgress] = useState(0);
const {
fields: fcOpersField,
append,
@@ -221,12 +214,19 @@ export function PbnstMngForm({
}, [pbnst.pbnstMngRegData]);
useEffect(() => {
if (pbnst.pbnstRes && pbnst.pbnstRes?.length <= 0) return;
const fcltNmList = pbnst.pbnstRes?.map((item, index) => ({
text: item.ruseUtztnFcltNm,
val: String(index),
}));
if (fcltNmList) setFcltNm(fcltNmList);
if (pbnst.pbnstRes && pbnst.pbnstRes?.length >= 0) {
const fcltNmList = pbnst.pbnstRes?.map((item, index) => ({
text: item.ruseUtztnFcltNm,
val: String(index),
}));
console.log(' fcltNmList ', fcltNmList)
if (fcltNmList) setFcltNm(fcltNmList);
}else{
setFcltNm(null);
}
}, [pbnst.pbnstRes]);
// 2. Define a submit handler.
@@ -253,6 +253,16 @@ export function PbnstMngForm({
}
}, [code]);
useEffect(() =>{
// console.log(' fcltNm ', watchedItem?.ruseUtztnFcltNm)
},[watchedItem])
useEffect(() => {
console.log(" form indexMng ", indexMng);
}, [indexMng]);
return (
<div className=" !mx-[1.6rem] !p-0r">
<div>
@@ -266,33 +276,29 @@ export function PbnstMngForm({
</Label>
{formType === "update" ? (
<FormField
key={`items.${indexMng}.ruseUtztnFcltNm-key`}
control={form.control}
name={`items.${indexMng}.ruseUtztnFcltNm`}
render={({ field }) => (
<FormUi label="">
<SelectBox
label=""
selectArray={fcltNm ?? []}
onSelectValue={(val) => {
setIndexMng(Number(val));
field.onChange(val);
}}
value={field.value ?? ""}
className={""}
selectClass={undefined}
/>
</FormUi>
)}
/>
<FormUi label="">
<SelectBox
label=""
key={`fclt-selector-${indexMng}`}
selectArray={fcltNm ?? []}
onSelectValue={(val) => {
setIndexMng(Number(val));
}}
value={String(indexMng)}
className={""}
selectClass={undefined}
/>
</FormUi>
) : (
<FormField
control={form.control}
name={`items.${indexMng}.ruseUtztnFcltNm`}
key={`items-ruseUtztnFcltNm-${indexMng}`}
render={({ field }) => (
<FormUi label="">
<Input
className="!text-2xl"
placeholder=""
type="text"
@@ -86,6 +86,8 @@ export default function RainRegForm({
});
console.log("Form initialized with default values:", form.getValues());
return () => subscription.unsubscribe();
}, [form]);
@@ -26,7 +26,7 @@ export function PbnstRegModal({
data: pubHasuType;
form: UseFormReturn<{ items: PbnstRegArrrayType }>;
}) {
const { pbnst, pbnstInsert, pbnstMngData } = useWrStore((state) => {
const { pbnst, pbnstInsert } = useWrStore((state) => {
return state;
});
const [pbnstBdstForm, setPbnstBdstForm] = useState<customPbnst>(
@@ -57,48 +57,18 @@ export function PbnstRegModal({
useEffect(() => {
if (data) {
const firstForm = form.getValues("items");
console.log('mngIndex ', firstForm.length)
setIndexMng(firstForm.length - 1)
// console.log(' firstForm ', firstForm)
// let regData;
// if (pbnstRes && pbnstRes?.length > 0) {
// regData = {
// swtrmtFcltFk: String(data.bscFctCd),
// pbnstRuseFcltPk: String(data.bscFctCd) + String(pbnstRes.length + 1),
// fcBizs: [
// {
// pbnstRuseFcltFk:
// String(data.bscFctCd) + String(pbnstRes.length + 1),
// cycl: 1,
// } as unknown as fcBizType,
// ],
// };
// //regData= pbnstRegZod.parse(regData)
// //setPbnstBdstForm(regData as unknown as customPbnst);
// // pbnstMngData([regData] as unknown as customPbnst[])
// } else {
// regData = {
// swtrmtFcltFk: String(data.bscFctCd),
// pbnstRuseFcltPk: String(data.bscFctCd + "1"),
// fcBizs: [
// {
// pbnstRuseFcltFk: String(data.bscFctCd + "1"),
// cycl: 1,
// } as unknown as fcBizType,
// ],
// };
// //regData= pbnstRegZod.parse(regData)
// // setPbnstBdstForm(regData as unknown as customPbnst);
// // pbnstMngData([regData] as unknown as customPbnst[])
// }
// regData = pbnstRegZod.parse(regData);
// setPbnstBdstForm(regData as unknown as customPbnst);
}
setIndexMng(firstForm.length - 1) }
}, [data, form]);
useEffect(() => {
console.log(' form.getValues() ' ,form.getValues())
}, [form.getValues()]);
return (
<>
<h1 className="text-2xl font-medium text-label pl-8">
@@ -21,8 +21,7 @@ import {
TableHeader,
TableRow,
} from "@common/components/ui";
import { read } from "fs";
import React, { useEffect, useState } from "react";
import React from "react";
type RuseMngTableProps = {
tableData: any[];
@@ -39,8 +38,6 @@ type RuseMngTableProps = {
const RuseMngTableForm = React.forwardRef<any, RuseMngTableProps>(
({ tableData, headList, upHeadList, code, onTableSet, indexMng, form,formNm,indexBiz }, ref) => {
console.log('tableData ', tableData)
return (
<>
<Table key={`table-${indexMng}-${indexBiz}`} variant="secondary">
@@ -119,6 +116,7 @@ const RuseMngTableForm = React.forwardRef<any, RuseMngTableProps>(
field.onChange(val);
}
}}
readOnly ={head.readonly ? true : false}
// Disabled prop removed as SelectBox does not support it
></SelectBox>
) : head.type === "date" ? (
@@ -133,6 +131,7 @@ const RuseMngTableForm = React.forwardRef<any, RuseMngTableProps>(
},
}}
selectClass={"w-full"}
readOnly ={head.readonly ? true : false}
/>
) : head.type === "checkbox" ? (
<Checkbox