하수재이용현황 수정

This commit is contained in:
leedj312
2025-06-20 10:21:14 +09:00
parent 3e13580e5d
commit a39a03fb8b
2 changed files with 158 additions and 119 deletions
@@ -129,9 +129,7 @@ export function PbnstRegModal({
formType={"reg"}
firstFcltData={pbnstBdstForm}
indexMng={indexMng}
setIndexMng={function (index: number): void {
throw new Error("Function not implemented.");
}}
setIndexMng={setIndexMng}
/>
</TabsContent>
<TabsContent className="max-h-full" value="buse">
@@ -1,9 +1,17 @@
import { useWrStore } from "@/app/store";
import type { TableUpperProps } from "@/app/store/common/type/header";
import { initValInUsage, initValOutUsage, subTotalObj, totalObj, type PrfType } from "@/app/store/prfmncReg/pbnstPrfmncReg/type";
import type {
customPbnst,
fcBizType,
import {
initValInUsage,
initValOutUsage,
subTotalObj,
totalObj,
type PrfType,
} from "@/app/store/prfmncReg/pbnstPrfmncReg/type";
import {
pbnstRegArrayZod,
pbnstRegZod,
type customPbnst,
type fcBizType,
} from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type";
import { PbnstMngForm } from "@/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm";
import { ScrollArea, Title, UiTable } from "@common/business_components/ui";
@@ -15,11 +23,13 @@ import {
Button,
TabsContent,
} from "@common/components/ui";
import { zodResolver } from "@hookform/resolvers/zod";
import { useEffect, useState } from "react";
import { set } from "react-hook-form";
import { set, useForm } from "react-hook-form";
import { z } from "zod";
export function PbnstSttnModal({ data }: { data: customPbnst }) {
const { code, pbnstSttn,prfmnc } = useWrStore((state) => state);
const { code, pbnstSttn, prfmnc } = useWrStore((state) => state);
const [fcltTab, setFcltTab] = useState<string>("fclt");
const [ruseTab, setRuseTab] = useState<string>("inoutTotal");
const [ruseBizData, setRuseBizData] = useState<{
@@ -28,9 +38,22 @@ export function PbnstSttnModal({ data }: { data: customPbnst }) {
}>();
const [ruseHeadList, setRuseHeadList] = useState<TableUpperProps[]>([]);
const [ruseTableData, setRuseTableData] = useState<TableUpperProps[]>([]);
const [prfData , setPrfData] = useState<{inPrf: any[],outPrf: any[], totalPrf:any[] }> ()
const [prfData, setPrfData] = useState<{
inPrf: any[];
outPrf: any[];
totalPrf: any[];
}>();
const [indexMng, setIndexMng] = useState<number>(0);
const [indexBiz, setIndexBiz] = useState<number>(0);
const form = useForm<{
items: z.infer<typeof pbnstRegZod>[];
}>({
resolver: zodResolver(z.object({ items: pbnstRegArrayZod })),
defaultValues: { items: pbnstRegArrayZod.parse([]) },
mode: "onChange",
});
const {monthHeadList } = prfmnc;
const { monthHeadList } = prfmnc;
useEffect(() => {
let tableData;
if (fcltTab === "fclt") {
@@ -38,46 +61,46 @@ export function PbnstSttnModal({ data }: { data: customPbnst }) {
return {
cycl: item.cycl + "차",
seCd: item.seCd,
gvsbs: item.gvsbs??'-',
lcep: item.lcep??'-',
cusrAlotm: item.cusrAlotm??'-',
etc: item.etc??'-',
gvsbs: item.gvsbs ?? "-",
lcep: item.lcep ?? "-",
cusrAlotm: item.cusrAlotm ?? "-",
etc: item.etc ?? "-",
totalMoney:
Number(item.addr) +
Number(item.gvsbs) +
Number(item.lcep) +
Number(item.cusrAlotm),
instlAprvSncnDt: item.instlAprvSncnDt?.toISOString??'-',
bizCmcnDay: item.bizCmcnDay?.toISOString??'-',
rprcsFcltCpct: item.rprcsFcltCpct??'-',
rprcsMthdCd: item.rprcsMthdCd??'-',
majorPrcsMsrcCd: item.majorPrcsMsrcCd??'-',
inoutYn: item.inoutYn??'-',
addr: item.addr??'-',
instlAprvSncnDt: item.instlAprvSncnDt?.toISOString ?? "-",
bizCmcnDay: item.bizCmcnDay?.toISOString ?? "-",
rprcsFcltCpct: item.rprcsFcltCpct ?? "-",
rprcsMthdCd: item.rprcsMthdCd ?? "-",
majorPrcsMsrcCd: item.majorPrcsMsrcCd ?? "-",
inoutYn: item.inoutYn ?? "-",
addr: item.addr ?? "-",
};
});
} else if (fcltTab === "sply") {
tableData = data.fcBizs.flatMap((item: fcBizType) => {
return item?.fcOrgwts?.map((fcOrgwt) => {
return {
cycl: item.cycl + "차",
orgwtWtritQnt: fcOrgwt.orgwtWtritQnt,
tmsYn: fcOrgwt.tmsYn,
dschgFmYn: fcOrgwt.dschgFmYn,
dtlPstnExpln: fcOrgwt.dtlPstnExpln,
};
})
return item?.fcOrgwts?.map((fcOrgwt) => {
return {
cycl: item.cycl + "차",
orgwtWtritQnt: fcOrgwt.orgwtWtritQnt,
tmsYn: fcOrgwt.tmsYn,
dschgFmYn: fcOrgwt.dschgFmYn,
dtlPstnExpln: fcOrgwt.dtlPstnExpln,
};
});
});
} else if (fcltTab === "ppi") {
tableData = data.fcBizs?.flatMap((item: fcBizType) => {
return item?.pplInstls?.map((ppl) => {
return {
cycl: item.cycl + "차",
ppMqlt: ppl.ppMqlt,
pdmt: ppl.pdmt,
cpct: ppl.cpct,
};
})
return item?.pplInstls?.map((ppl) => {
return {
cycl: item.cycl + "차",
ppMqlt: ppl.ppMqlt,
pdmt: ppl.pdmt,
cpct: ppl.cpct,
};
});
});
} else if (fcltTab === "guarantee") {
tableData = data.fcBizs?.map((item: fcBizType) => {
@@ -97,18 +120,20 @@ export function PbnstSttnModal({ data }: { data: customPbnst }) {
});
} else if (fcltTab === "dmdCo") {
tableData = data.fcBizs?.flatMap((item: fcBizType) => {
console.log("item.fcDemands", item.fcDemands);
return item?.fcDemands?.map((dmd) => {
return {
cycl: item.cycl + "차",
dmdCoNm: dmd.dmdCoNm,
daddr: dmd.daddr,
useUsgCd: dmd.useUsgCd,
splyBgngDay: dmd.splyBgngDay?.toISOString,
splyEndDay: dmd.splyEndDay?.toISOString,
splyCpct: dmd.splyCpct,
splyFmYn: dmd.splyFmYn,
};
})
return {
cycl: item.cycl + "차",
dmdCoNm: dmd.dmdCoNm,
daddr: dmd.daddr,
useUsgCd: dmd.useUsgCd,
splyBgngDay: dmd.splyBgngDay?.toISOString,
splyEndDay: dmd.splyEndDay?.toISOString,
splyCpct: dmd.splyCpct,
splyFmYn: dmd.splyFmYn,
};
});
});
}
console.log(tableData);
@@ -137,85 +162,98 @@ export function PbnstSttnModal({ data }: { data: customPbnst }) {
pbnstSttn.ruseDmdHeadList,
]);
const getTablePrfData = (prfList:PrfType[]) => {
const getTablePrfData = (prfList: PrfType[]) => {
const inUsageData = [...initValInUsage];
const outUsageData = [...initValOutUsage];
const inSubtotal = subTotalObj;
const outSubtotal = subTotalObj;
if (prfList) {
prfList?.forEach((prfItem) => {
const month = Number(prfItem?.ym?.slice(4)); // "MM"
const monthKey = `${month}월`;
const month = Number(prfItem?.ym?.slice(4)); // "MM"
const monthKey = `${month}월`;
inUsageData.forEach((inData: any) => {
const usageKey = inData.usage;
const value = (prfItem as any)[usageKey] ?? 0;
inUsageData.forEach((inData: any) => {
const usageKey = inData.usage;
const value = (prfItem as any)[usageKey] ?? 0;
inData[monthKey] = value;
inData.total += value;
inData[monthKey] = value;
inData.total += value;
if (inSubtotal && usageKey !== "subtotal") {
(inSubtotal as any)[monthKey] =
((inSubtotal as any)[monthKey] ?? 0) + value;
inSubtotal.total += value;
}
});
if (inSubtotal && usageKey !== "subtotal") {
(inSubtotal as any)[monthKey] =
((inSubtotal as any)[monthKey] ?? 0) + value;
inSubtotal.total += value;
}
});
outUsageData.forEach((outData: any) => {
const usageKey = outData.usage;
const value = (prfItem as any)[usageKey] ?? 0;
outUsageData.forEach((outData: any) => {
const usageKey = outData.usage;
const value = (prfItem as any)[usageKey] ?? 0;
outData[monthKey] = value;
outData.total += value;
outData[monthKey] = value;
outData.total += value;
if (usageKey !== "subtotal") {
(outSubtotal as any)[monthKey] =
((outSubtotal as any)[monthKey] ?? 0) + value;
outSubtotal.total += value;
}
});
});
inUsageData.push(inSubtotal);
outUsageData.push(outSubtotal);
const usageTotalObj: { [key: string]: any } = totalObj;
for (const key in usageTotalObj) {
if (["usage", "gubun", "edit"].includes(key)) continue;
const val =
(Number((inSubtotal as any)[key]) || 0) +
(Number((outSubtotal as any)[key]) || 0);
if (usageKey !== "subtotal") {
(outSubtotal as any)[monthKey] =
((outSubtotal as any)[monthKey] ?? 0) + value;
outSubtotal.total += value;
}
});
});
inUsageData.push(inSubtotal);
outUsageData.push(outSubtotal);
const usageTotalObj: { [key: string]: any } = totalObj;
for (const key in usageTotalObj) {
if (["usage", "gubun", "edit"].includes(key)) continue;
const val =
(Number((inSubtotal as any)[key]) || 0) +
(Number((outSubtotal as any)[key]) || 0);
(usageTotalObj as any)[key] = val;
}
const tableData = [...inUsageData, ...outUsageData, usageTotalObj];
(usageTotalObj as any)[key] = val;
}
const tableData = [...inUsageData, ...outUsageData, usageTotalObj];
setPrfData({
inPrf: inUsageData,
outPrf: outUsageData,
totalPrf: tableData,
});
setPrfData({
inPrf: inUsageData,
outPrf: outUsageData,
totalPrf: tableData,
});
}
};
useEffect(() => {
if (pbnstSttn.pbnstSttnRes && data) {
const prfList = pbnstSttn.pbnstSttnRes.find(
(item) => item.pbnstRuseFcltPk === data.pbnstRuseFcltPk
)?.prfList;
}
useEffect(() => {
if(pbnstSttn.pbnstSttnRes&&data){
const prfList = pbnstSttn.pbnstSttnRes.find((item) => item.pbnstRuseFcltPk=== data.pbnstRuseFcltPk )?.prfList
if(prfList){
getTablePrfData(prfList)
if (prfList) {
getTablePrfData(prfList);
}
}
}
}, [pbnstSttn.pbnstSttnRes, data]);
useEffect(() => {}, [ruseBizData?.head]);
useEffect(()=>{
if(data){
form.reset({items:[data]})
}
},[data, form])
return (
<>
<div>
<Title title={"하수재이용 시설 상세정보"} />
<ScrollArea className={"h-[70vh]"}>
<PbnstMngForm firstFcltData={data} formType={"sttn"} />
<PbnstMngForm
form={form}
formType={"sttn"}
indexMng={indexMng}
setIndexMng={setIndexMng}
/>
<Tabs defaultValue="mng" onValueChange={setFcltTab}>
<TabsList className="">
<TabsTrigger className="!text-xl" value="fclt">
@@ -245,7 +283,11 @@ export function PbnstSttnModal({ data }: { data: customPbnst }) {
onPageChange={function (page: number): void {
throw new Error("Function not implemented.");
}}
children={fcltTab==='fclt'?<HeadMakeColSpan upHeadList={pbnstSttn.ruseFcltNodeList} />:undefined}
children={
fcltTab === "fclt" ? (
<HeadMakeColSpan upHeadList={pbnstSttn.ruseFcltNodeList} />
) : undefined
}
></UiTable>
</TabsContent>
</Tabs>
@@ -263,22 +305,21 @@ export function PbnstSttnModal({ data }: { data: customPbnst }) {
</TabsTrigger>
</TabsList>
<TabsContent className="max-h-full" value={ruseTab}>
{prfData && (
<UiTable
headName={undefined}
tableData={prfData[ruseTab as keyof typeof prfData] || []}
headlist={monthHeadList || []}
pageSize={0}
total={0}
cellClick={undefined}
onPageChange={function (page: number): void {
throw new Error("Function not implemented.");
}}
></UiTable>
)}
{prfData && (
<UiTable
headName={undefined}
tableData={prfData[ruseTab as keyof typeof prfData] || []}
headlist={monthHeadList || []}
pageSize={0}
total={0}
cellClick={undefined}
onPageChange={function (page: number): void {
throw new Error("Function not implemented.");
}}
></UiTable>
)}
</TabsContent>
</Tabs>
</ScrollArea>
</div>
</>