150 lines
4.8 KiB
TypeScript
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,
|
|
},
|
|
}));
|
|
},
|
|
};
|
|
}; |