Files
frontend/apps/wr/app/store/prfmncReg/chkgdnReg/rswrtChkgdn/index.tsx
T
2025-07-14 15:13:39 +09:00

398 lines
11 KiB
TypeScript

import { buildingType } from "@/app/store/common/code";
import type { TableUpperProps } from "@/app/store/common/type/header";
import {
TEST_UUID,
} from "@/app/store/ruseFcltMng/fcltReg/rainReg";
import {
deleteFectch,
fetchType,
getFetch,
getFetchWithCount,
postFectch,
putFectch,
} from "@/components/lib/api";
import { ToastFormUi } from "@/components/ui/toast/toastFromUi";
import type {
SelectDataType,
SheetParameter,
} from "@common/business_components";
import toast from "react-hot-toast";
import { z } from "zod";
import { type chHeadType } from "../rainChkgdn/headList";
import { rswtMakeExcelSample } from "./excel";
import {
rswtChkgdZod,
rswtChkHeadListExport,
rswtDetailHeadListExport,
rswtHeadNmExport,
rswtrDetailsZod,
rswtRuseHeadNmExport,
rswtSplHeadNmExport,
} from "./headList";
export const rswtPageSize = 5;
const rswtChkHeadList = rswtChkHeadListExport;
const rswtDetailHeadList = rswtDetailHeadListExport;
const rswtHeadNm = rswtHeadNmExport;
const rswtRuseHeadNm =rswtRuseHeadNmExport
const rswtSplHeadNm =rswtSplHeadNmExport
export type rswtChkZodType = z.infer<typeof rswtChkgdZod>;
export type rswtrChkDetailsZodType = z.infer<typeof rswtrDetailsZod>;
export type rswtChkgdnState = {
rswtChkgdn: {
rswtChkHeadList: TableUpperProps[];
rswtDetailHeadList: TableUpperProps[];
rswtHeadNm: chHeadType[];
excelList: SheetParameter[];
rswtChkRes: rswtChkZodType[];
rswtChkPolGuide: rswtChkZodType[];
rswtSplHeadNm:chHeadType[]
rswtRuseHeadNm:chHeadType[]
isInit: boolean;
isSttn: boolean;
isLoading:boolean;
rswtChkCount: number;
};
};
type rswtChkgdnActions = {
rswtChkgdnInit: (
pageNo: number,
cnt: number,
year: string,
sggCd: string
) => void;
rswtChkNmSearch: (
pageNo: number,
cnt: number,
year: string,
sggCd: string,
txt: string
) => void;
rswtrChkExcelDownload(
sidoCode: SelectDataType[],
sggCode: SelectDataType[]
): Promise<void>;
rswtChkExceDataUpload: (excelData: rswtChkZodType[]) => void;
rswtChkDelete: (chkgdnPks: number[] ,year:string) => void;
rswtChkDetilsUpdate: (rswtChkDetails: rswtrChkDetailsZodType[] ,year:string) => void;
rswtChkPolAndGuide: (chkGdnPk: number) => void;
rswtChkPolInit: () => void;
rwstPolAndGuideUpdate: (rswtChk: rswtChkZodType[]) => void;
rswtChkHeadChange: (rswtChkgdn: rswtChkgdnState, isEdit: boolean) => void;
};
export type rswtChkgdnType = rswtChkgdnState & rswtChkgdnActions;
export const rswtChkgdnStateExport: rswtChkgdnState = {
rswtChkgdn: {
rswtChkHeadList: rswtChkHeadList,
rswtDetailHeadList: rswtDetailHeadList,
rswtHeadNm: rswtHeadNm,
rswtRuseHeadNm:rswtRuseHeadNm,
rswtSplHeadNm:rswtSplHeadNm,
excelList: [
{
data: [[]],
headerNum: 0,
headerRange: "A1:V3",
sheetName: "",
startCol: "1",
},
],
rswtChkRes: [],
rswtChkPolGuide: [],
isInit: false,
isSttn: false,
isLoading:false,
rswtChkCount: 1,
},
};
const initFetch = async (
pageNo: number,
cnt: number,
year: string | undefined,
sgg: string | undefined
) => {
const currentYear = new Date().getFullYear().toString();
const rswtChkRes = await getFetchWithCount(
"wr",
`/reuseChk/reuseWater` +
(pageNo ? `/${pageNo}` : "/1") +
(cnt ? `/${cnt}` : "/20") +
(year ? `/${year}` : `/${currentYear}`) +
(sgg ? `/${sgg}` : "/0")
);
return rswtChkRes;
};
const makeMdfrChk = (data: rswtChkZodType[] | rswtrChkDetailsZodType[]) => {
const chData = data.map((item) => {
item.mdfr = TEST_UUID;
item.rgtr = TEST_UUID;
if ("rswtrPollutions" in item) {
item?.rswtrPollutions.forEach((pollution) => {
pollution.mdfr = TEST_UUID;
pollution.rgtr = TEST_UUID;
});
}
return item;
});
return chData;
};
export const rswtChkgdnActionsExport: (set: any) => rswtChkgdnActions = (
set: any
) => {
return {
rswtrChkExcelDownload: async (
sidoCode: SelectDataType[],
sggCode: SelectDataType[]
) => {
const data = await getFetch(
fetchType.WR,
`/reuseFc/buildingFlg/${buildingType.RST}/41`
);
const excelList: any = [];
const exceldata = rswtMakeExcelSample(data, sidoCode, sggCode);
excelList.push({
data: exceldata.guideDetail,
headerNum: 0,
headerRange: "A1:AJ1",
});
excelList.push({
data: exceldata.polutions,
headerNum: 0,
headerRange: "A1:BB1",
});
return set((state: rswtChkgdnState) => ({
rswtChkgdn: {
...state.rswtChkgdn,
excelList: excelList,
},
}));
},
rswtChkgdnInit: async (
pageNo: number,
cnt: number,
year: string,
sggCd: string
) => {
// set((state: rswtChkgdnType) => ({ rswtChkgdn: { ...state.rswtChkgdn, isLoading: true } }));
try {
const rswtChkRes = await initFetch(pageNo, cnt, year, sggCd);
set((state: rswtChkgdnState) => ({
...state,
rswtChkgdn: {
...state.rswtChkgdn,
rswtChkRes: rswtChkRes.data,
rswtChkCount: rswtChkRes.count,
isInit: true, // 무한 루프를 방지하기 위해 isInit을 true로 설정
},
}));
} catch (error) {
console.error(error);
// set((state: rswtChkgdnType) => ({
// rswtChkgdn: { ...state.rswtChkgdn, isInit: true },
// }));
} finally {
// set((state: rswtChkgdnType) => ({ rswtChkgdn: { ...state.rswtChkgdn, isLoading: false } }));
}
},
rswtChkNmSearch: async (
pageNo: number,
cnt: number,
year: string,
sggCd: string,
txt: string
) => {
try {
console.log("여기")
const currentYear = new Date().getFullYear().toString();
const rswtChkRes = await getFetchWithCount(
"wr",
`/reuseChk/reuseWater` +
(pageNo ? `/${pageNo}` : "/1") +
(cnt ? `/${cnt}` : "/20") +
(year ? `/${year}` : `/${currentYear}`) +
(sggCd ? `/${sggCd}` : "/0") +
(txt ? `/${txt}` : "")
);
return set((state: rswtChkgdnState) => ({
...state,
rswtChkgdn: {
...state.rswtChkgdn,
rswtChkRes: rswtChkRes.data,
rswtChkCount: rswtChkRes.count,
// isInit: false,
},
}));
} catch (error) {
console.log(error);
}
},
rswtChkExceDataUpload: async (excelData: rswtChkZodType[]) => {
try {
set((state: rswtChkgdnType) => (
{ rswtChkgdn: { ...state.rswtChkgdn, isLoading: true } }));
const res = await postFectch("/reuseChk/reuseWater", excelData);
if (res.ok) {
ToastFormUi({
body: "지도점검 등록이 완료되었습니다.",
title: "지도점검 등록",
});
}
const currentYear = new Date().getFullYear().toString();
const rswtChkRes = await initFetch(1, rswtPageSize, currentYear, "0");
return set((state: rswtChkgdnState) => ({
...state,
rswtChkgdn: {
...state.rswtChkgdn,
rswtChkRes: rswtChkRes.data,
rswtChkCount: rswtChkRes.count,
},
}));
} catch (error) {
console.log(error);
}finally{
set((state: rswtChkgdnType) => (
{ rswtChkgdn: { ...state.rswtChkgdn, isLoading: false } }));
}
},
rswtChkDetilsUpdate: async (rswtChk: rswtrChkDetailsZodType[] ,year:string) => {
try {
const chData = await makeMdfrChk(rswtChk);
const res = await putFectch("/reuseChk/reuseWater", chData);
if (res.ok) {
toast.success("지도점검 과태료 수정이 완료되었습니다. ",)
}
const rswtChkRes = await initFetch(1, rswtPageSize, year, "0");
return set((state: rswtChkgdnState) => ({
...state,
rswtChkgdn: {
...state.rswtChkgdn,
rswtChkRes: rswtChkRes.data,
rswtChkCount: rswtChkRes.count,
},
}));
} catch (error) {
console.log(error);
toast.error("지도점검 과태료 수정 오류입니다. ",)
}
},
rswtChkDelete: async (chkgdnPks: number[] ,year:string) => {
try {
const res = await deleteFectch(`/reuseChk/reuseWater`, chkgdnPks);
if (res) {
toast.success("삭제가 완료되었습니다.")
}
const rswtChkRes = await initFetch(1, rswtPageSize, year, "0");
return set((state: rswtChkgdnState) => ({
...state,
rswtChkgdn: {
...state.rswtChkgdn,
rswtChkRes: rswtChkRes.data,
rswtChkCount: rswtChkRes.count,
},
}));
} catch (error) {
toast.error("삭제 오류입니다.")
console.error(error);
}
},
rswtChkPolAndGuide: async (chkGdnPk: number) => {
try {
const rswtChkPolGuide = await getFetch(
"wr",
`/reuseChk/reuseWater/${chkGdnPk}`
);
return set((state: rswtChkgdnState) => ({
...state,
rswtChkgdn: {
...state.rswtChkgdn,
rswtChkPolGuide: rswtChkPolGuide,
},
}));
} catch (error) {
console.error(error);
}
},
rswtChkPolInit: () => {
try {
return set((state: rswtChkgdnState) => ({
...state,
rswtChkgdn: {
...state.rswtChkgdn,
rswtChkPolGuide: undefined,
},
}));
} catch (error) {
console.error(error);
}
},
rwstPolAndGuideUpdate: async (rswtChk: rswtChkZodType[]) => {
try {
const chData = await makeMdfrChk(rswtChk);
const res = await putFectch(
`/reuseChk/reuseWater/${rswtChk[0]?.chkgdnPk}`,
chData[0]
);
if (res.ok) {
toast.success("지도점검 연간 수질 및 대체수/중수도 수정이 완료되었습니다.")
}
const currentYear = new Date().getFullYear().toString();
const rswtChkRes = await initFetch(1, rswtPageSize, currentYear, "0");
return set((state: rswtChkgdnState) => ({
...state,
rswtChkgdn: {
...state.rswtChkgdn,
rswtChkRes: rswtChkRes,
},
}));
} catch (error) {
console.log(error);
toast.error("지도점검 연간 수질 및 대체수/중수도 수정 오류입니다.")
}
},
rswtChkHeadChange: async (rswtChkgdn: rswtChkgdnState, isEdit: boolean) => {
try {
const rswtChkHeadList = rswtChkgdn.rswtChkgdn.rswtChkHeadList;
const rswtDetailHeadList = rswtChkgdn.rswtChkgdn.rswtDetailHeadList;
rswtChkHeadList.forEach((head) => {
if (head.edit !== undefined) head.edit = isEdit;
});
rswtDetailHeadList.forEach((head) => {
if (head.edit !== undefined) head.edit = isEdit;
});
return set((state: rswtChkgdnState) => ({
...state,
rswtChkgdn: {
...state.rswtChkgdn,
rswtChkHeadList: rswtChkHeadList,
rswtDetailHeadList: rswtDetailHeadList,
},
}));
} catch (e) {
console.error(e);
}
},
};
};