Files
frontend/apps/wr/app/store/matDmd/ruseCaseMng/index.tsx
T

150 lines
4.8 KiB
TypeScript

import { fetchType, getFetchWithCount, postFectch } from "@/components/lib/api";
import { toast } from "react-hot-toast";
import type { TableUpperProps } from "../../common/type/header";
import { ruseCaseHeadListExport } from "./headList";
export type ruseCaseState = {
ruseCaseMng: {
ruseHeadList: TableUpperProps[];
ruseCaseMngList: ruseCaseMngExcelProps[];
status: number;
count: number;
excelList?: ruseCaseMngExcelProps[];
};
};
export interface ruseCaseMngExcelProps {
ruseBizNm: string,
bizBgngDate: string,
bizEndDate: string,
splyFcltKnd: string,
splyFcltNm: string,
splyFcltCpct: number | 0 | '',
dmdFcltNm: string,
dmdFcltAddr: string,
ruseFcltCpct: number | 0 | '',
ruseFcltPplLen: string,
ruseFcltUsg: string,
ruseFcltSplyCpct: number | 0 | '',
ruseFcltPrcsMsrc: string,
grnteWqUsg: string,
grnteWqGrssClfg: number | 0 | '',
grnteWqCombResdch: number | 0 | '',
grnteWqTrbt: string,
grnteWqBod: string,
grnteWqSmll: string,
grnteWqCrmty: string,
grnteWqTn: string,
grnteWqTp: string,
grnteWqPh: string,
grnteWqClIonQnt: string,
grnteWqCndctStat: string,
grnteWqRmrk: string,
reqBizReuseFcltCst: number | 0 | '',
reqBizPplCst: number | 0 | '',
reqBizArchCst: number | 0 | '',
reqBizMchnCst: number | 0 | '',
reqBizMtrngCst: number | 0 | '',
reqBizGisCst: number | 0 | '',
reqBizCctvCst: number | 0 | '',
reqBizCmcnCst: number | 0 | '',
reqBizWstCst: number | 0 | '',
reqBizDesignCst: number | 0 | '',
reqBizSpvsCst: number | 0 | '',
reqBizSbsdCst: number | 0 | '',
reqBizEtc: string,
reqBizGrssCst: number | 0 | '',
prcmPlanNlep: number | 0 | '',
prcmPlanLcep: number | 0 | '',
prcmPlanBrdnCst: number | 0 | '',
prcmPlanEcqrRt: number | 0 | '',
prcmPlanGrssCst: number | 0 | '',
clclnNlep: number | 0 | '',
clclnLcep: number | 0 | '',
clclnBrdnCst: number | 0 | '',
clclnEcqrRt: number | 0 | '',
clclnGrssCst: number | 0 | '',
}
type ruseCaseActions = {
ruseCaseMngInit: () => void;
selectRuseCaseMng: (isExcel: boolean, pageNo: number, pageSize: number, sidoCd: string, sigunguCd: string, usageCd: string, name: string) => Promise<void>;
insertRuseCaseMng: (data: any) => Promise<void>;
};
export const fetchSearchRuseCaseMng = async (pageNo: number, pageSize: number, sidoCd: string, sigunguCd: string, usageCd: string, name: string) => {
const tailUrl = '/' + pageNo + '/' + pageSize + ((sigunguCd !== '전체' && sigunguCd !== '') ? `/${sigunguCd}` : (sidoCd != '전체' && sidoCd != '') ? `/${sidoCd}` : `/0`) + (usageCd ? `/${usageCd}` : '/0') + (name ? `/${name}` : '');
const resp = await getFetchWithCount(fetchType.WR, `/reuseFc/pubFcRuseCase${tailUrl}`);
return { data: resp.data, count: resp.count };
};
export const fetchInsertRuseCaseMng = async (data: any) => {
const response = await postFectch('/reuseFc/pubFcRuseCase', data, fetchType.WR);
return { data: response.data, status: response.status };
};
export type ruseCaseType = ruseCaseState & ruseCaseActions;
export const ruseCaseStateExport: ruseCaseState = {
ruseCaseMng: {
ruseHeadList: ruseCaseHeadListExport,
ruseCaseMngList: [],
status: 0,
count: 0,
excelList: undefined,
},
};
export const ruseCaseActionsExport: (set: any) => ruseCaseActions = (
set: any
) => {
return {
ruseCaseMngInit: async () => {
const res = await getFetchWithCount(fetchType.WR, `/reuseFc/pubFcRuseCase/1/10/0/0`);
set((state: ruseCaseState) => ({
ruseCaseMng: {
...state.ruseCaseMng,
ruseCaseMngList: res.data,
count: res.count,
},
}));
},
selectRuseCaseMng: async (isExcel: boolean, pageNo: number, pageSize: number, sidoCd: string, sigunguCd: string, usageCd: string, name: string) => {
const res = await fetchSearchRuseCaseMng(pageNo, pageSize, sidoCd, sigunguCd, usageCd, name);
if (isExcel) {
set((state: ruseCaseState) => {
return {
...state,
ruseCaseMng: {
...state.ruseCaseMng,
count: res.count,
excelList: res.data
},
};
});
} else {
set((state: ruseCaseState) => ({
ruseCaseMng: {
...state.ruseCaseMng,
ruseCaseMngList: res.data,
count: res.count,
},
}));
}
},
insertRuseCaseMng: async (data: any) => {
const response = await fetchInsertRuseCaseMng(data);
if (response.status === 200) {
toast.success("물재이용사례 등록이 완료되었습니다. ");
} else {
toast.error("물재이용사례 등록에 실패하였습니다. ");
}
set((state: ruseCaseState) => ({
ruseCaseMng: {
...state.ruseCaseMng,
status: response.status,
},
}));
},
};
};