398 lines
11 KiB
TypeScript
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);
|
|
}
|
|
},
|
|
};
|
|
};
|