import DataForm from "@/app/components/common/DataForm"; import type { TableUpperProps } from "../dashboard"; import { getFetch } from "@/app/components/api"; export type { TableUpperProps }; /**==================================== * Store - 타입 ====================================*/ /** * (1) 메인페이지 */ // 시설별 강수현황 export type RdiProps = { bscFctCd : string, sido : string, sigungo : string, bscFctNm : string, lclgvrnmntNm : string, daddr : string, fctCpc : number, summerMinBodValue : number, inflAmnt : number, winterAvgBodLowRainfall : number, rdiiValue : number, infoRnDay : number, rgnNm : string, rvbsn : string, lgbsn : string, mdmbsn : string, } export interface RdiInterface { bscFctCd : string, sido : string, sigungo : string, bscFctNm : string, lclgvrnmntNm : string, daddr : string, fctCpc : number, summerMinBodValue : number, inflAmnt : number, winterAvgBodLowRainfall : number, rdiiValue : number, infoRnDay : number, rgnNm : string, rvbsn : string, lgbsn : string, mdmbsn : string, } // 모달 export interface RdiInputModalProps { msrDt : string, realSewageInput : number | '', sewageOccur : number | '', underWaterInput : number | '', } /**==================================== * Store - data ====================================*/ /** * (1) 메인페이지 */ // 검색단 const LabelArray:string[] = ['구분', '시도', '시군구','용량별', '시설명', '조회기간', '시설상태', '권역', '단위유역', '중권역', '환경청별']; export interface ExcelType { 시설코드: string, 권역:string|'', 단위유역:string|'', 중권역:string|'', 환경청:string|'', 시도: string, 시군구: string, 시설명: string, 주소: string, 시설용량: number, 하절기강우일최저유입BOD: number | '', 하절기최저유입BOD유입유량: number | '', 동절기청천시유입BOD: number | '', RDII추정 : number | '', RDII추정시일강수량 : number | '', } // 리스트 헤더 const upHeadList1:TableUpperProps[] = [ { id: "bscFctCd", title: "시설코드", row:0, rowSpan:2 }, { id: "A", title: "행정구역", row:0, colSpan:2 }, { id: "sido", title: "시도", upName:"upChangeRe", upSequnce:1, row:1 }, { id: "sigungo", title: "시군구", upName:"upChangeRe",upSequnce:2, row:1 }, { id: "bscFctNm", title: "시설명", row:0, rowSpan:2 }, { id: "daddr", title: "주소", row:0, rowSpan:2 }, { id: "fctCpc", title: "시설용량\n(m³/일)", align:"right", row:0, rowSpan:2 }, { id: "B", title: "하절기 운영현황(6~8월)", row:0, colSpan:2 }, { id: "summerMinBodValue", title: "3mm 이상 강우일 중 최저 유입BOD\n(mg/L)", align:"right", row:1 }, { id: "inflAmnt", title: "하절기최저유입BOD유입유량\n(m³/일)", row:1 }, { id: "C", title: "동절기 운영현황(1~2월)", row:0 }, { id: "winterAvgBodLowRainfall", title: "청천시 유입BOD\n(mg/L)", row:1 }, { id: "rdiiValue", title: "RDII추정", row:0, rowSpan:2 }, { id: "infoRnDay", title: "RDII추정시일강수량\n(mm)", row:0, rowSpan:2 }, ]; const upHeadList2:TableUpperProps[] = [ { id: "bscFctCd", title: "시설코드", row:0, rowSpan:2 }, { id: "A", title: "유역", row:0, colSpan:3 }, { id: "rvbsn", title: "권역", upName:"upChangeRe", upSequnce:1, row:1 }, { id: "lgbsn", title: "단위유역", upName:"upChangeRe", upSequnce:2, row:1 }, { id: "mdmbsn", title: "중권역", upName:"upChangeRe", upSequnce:3, row:1 }, { id: "bscFctNm", title: "시설명", row:0, rowSpan:2 }, { id: "daddr", title: "주소", row:0, rowSpan:2 }, { id: "fctCpc", title: "시설용량(m³/일)", align:"right", row:0, rowSpan:2 }, { id: "B", title: "하절기 운영현황(6~8월)", row:0, colSpan:2 }, { id: "summerMinBodValue", title: "하절기강우일최저유입BOD", align:"right", row:1 }, { id: "inflAmnt", title: "하절기최저유입BOD유입유량", row:1 }, { id: "D", title: "동절기 운영현황(1~2월)", row:0 }, { id: "winterAvgBodLowRainfall", title: "동절기청천시유입BOD", row:1 }, { id: "rdiiValue", title: "RDII추정", row:0, rowSpan:2 }, { id: "infoRnDay", title: "RDII추정시일강수량", row:0, rowSpan:2 }, ]; const upHeadList3:TableUpperProps[] = [ { id: "bscFctCd", title: "시설코드", row:0, rowSpan:2 }, { id: "A", title: "유역", row:0, colSpan:3 }, { id: "rvbsn", title: "권역", upName:"upChangeRe1", upSequnce:1, row:1 }, { id: "lgbsn", title: "단위유역", upName:"upChangeRe1", upSequnce:2, row:1 }, { id: "mdmbsn", title: "중권역", upName:"upChangeRe1", upSequnce:3, row:1 }, { id: "rgnNm", title: "환경청", row:0, rowSpan:2 }, { id: "B", title: "행정구역", row:0, colSpan:2 }, { id: "sido", title: "시도", upName:"upChangeRe2", upSequnce:1, row:1 }, { id: "sigungo", title: "시군구", upName:"upChangeRe2",upSequnce:2, row:1 }, { id: "bscFctNm", title: "시설명", row:0, rowSpan:2 }, { id: "daddr", title: "주소", row:0, rowSpan:2 }, { id: "fctCpc", title: "시설용량(m³/일)", align:"right", row:0, rowSpan:2 }, { id: "C", title: "하절기 운영현황(6~8월)", row:0, colSpan:2 }, { id: "summerMinBodValue", title: "하절기강우일최저유입BOD", align:"right", row:1 }, { id: "inflAmnt", title: "하절기최저유입BOD유입유량", row:1 }, { id: "D", title: "동절기 운영현황(1~2월)", row:0 }, { id: "winterAvgBodLowRainfall", title: "동절기청천시유입BOD", row:1 }, { id: "rdiiValue", title: "RDII추정", row:0, rowSpan:2 }, { id: "infoRnDay", title: "RDII추정시일강수량", row:0, rowSpan:2 }, ]; const rdiList:RdiProps[] = [ ] /**==================================== * Store - API ====================================*/ const fetchRdiList = async (pageNo: number, pageSize: number, searchYear: string, partCd?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => { try{ const tailStr = partCd ? '/'+ partCd + '/' + nameCd + '/' + fcltCpct + '/' + operationValue + (fcltyNm && fcltyNm !== '' ? '/' + fcltyNm : '') : ''; const url = '/rdii/list/' + pageNo + '/' + pageSize + '/' + searchYear + tailStr; console.log(url); const res = await getFetch('fo', url); return { data: res.data, count: res.count } }catch(error){ console.log(error); return { data: rdiList, count: 0 }; } } /**==================================== * Store - expaort ====================================*/ export type RdiActions = { searchRdiList: (pageNo: number, pageSize: number, searchYear: string, partCd?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => void; } export type RdiType = { RdiSearch: { isInit: boolean; labelArray:string[]; }, Rdi : { isInit: boolean; upHeadList1: TableUpperProps[]; upHeadList2: TableUpperProps[]; upHeadList3: TableUpperProps[]; rdiList: RdiProps[]; // Changed from facilityAreaProps to ProcessAreaProps rdiCount: number; excelList: ExcelType[]; isLoading: boolean; }, } export const rdiInitState: RdiType = { RdiSearch: { isInit: false, labelArray: LabelArray, }, Rdi : { isInit : false, upHeadList1 : upHeadList1, upHeadList2 : upHeadList2, upHeadList3 : upHeadList3, rdiList : rdiList, rdiCount : 2, excelList : [], isLoading : true, } } const dataFormSetting=(item : RdiProps)=> { DataForm({ type: 'float1', column: 'fctCpc', item: item as unknown as Record }); DataForm({ type: 'float1', column: 'summerMinBodValue', item: item as unknown as Record}); DataForm({ type: 'float1', column: 'winterAvgBodLowRainfall', item: item as unknown as Record}); DataForm({ type: 'float2', column: 'rdiiValue', item: item as unknown as Record}); DataForm({ type: 'float2', column: 'infoRnDay', item: item as unknown as Record}); } // Add type definitions for state setter function type SetStateFunction = (state: RdiType | ((state: RdiType) => RdiType)) => void; export type RdiStore = RdiType & RdiActions; export const rdiReducer:(set:SetStateFunction)=>RdiActions=(set: SetStateFunction) => { console.log("tableActionsExport"); return { searchRdiList: async (pageNo: number, pageSize: number, searchYear: string, partCd?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => { set((state: RdiType) => ({ ...state, Rdi: { ...state.Rdi, isLoading: true, }, })); const res = await fetchRdiList(pageNo, pageSize, searchYear, partCd, nameCd, fcltCpct, operationValue, fcltyNm); const data = res.data; const excelDownList: ExcelType[] = []; const rtnData = data.map((item: RdiProps) => { return { ...item, sido: item.lclgvrnmntNm.split(' ')[0]?.toString() || '', sigungo: item.lclgvrnmntNm.split(' ')[1]?.toString() || '', inflAmnt: item.inflAmnt?item.inflAmnt.toFixed(1) : '' } }) rtnData.forEach((item: RdiProps) => { dataFormSetting(item) }) if(pageSize>5000){ rtnData.forEach((item: RdiProps) => { excelDownList.push({ 시설코드: item.bscFctCd, 권역: item.rvbsn, 단위유역: item.lgbsn, 중권역: item.mdmbsn, 환경청: item.rgnNm, 시설명: item.bscFctNm, 시도: item.sido, 시군구: item.sigungo, 주소: item.daddr, 시설용량: item.fctCpc, 하절기강우일최저유입BOD: item.summerMinBodValue, 하절기최저유입BOD유입유량: item.inflAmnt, 동절기청천시유입BOD: item.winterAvgBodLowRainfall, RDII추정 : item.rdiiValue, RDII추정시일강수량 : item.infoRnDay, }); }); } set((state: RdiType) => ({ ...state, Rdi: pageSize<5000?{ ...state.Rdi, rdiList: rtnData, rdiCount: res.count, isLoading : false, }:{ ...state.Rdi, excelList: excelDownList, isLoading : false, }, })) }, } }