fo: 총인설비 수질현황 기간별 exceldownload
This commit is contained in:
@@ -35,7 +35,7 @@ export default function FacilityTermModalHeader<T extends { msrDt: string }>({
|
||||
const [endDate, setEndDate] = useState<Date>(new Date(Number(searchYear), 11, 31));
|
||||
const startPickerRef = useRef<HTMLDivElement>(null);
|
||||
const endPickerRef = useRef<HTMLDivElement>(null);
|
||||
const [flowPanel, setFlowPanel] = useState<string>(selectFlowPanel[0]?.val ?? '0'); // 초기값 "전체"
|
||||
const [flowPanel, setFlowPanel] = useState<string>(selectFlowPanel[0]?.val ?? '0'); // 강수구분 : 초기값 "전체"
|
||||
const [copySearchList, setCopySearchList] = useState<T[]>(searchList);
|
||||
const [standSearchList, setStandSearchList] = useState<T[]>(searchList);
|
||||
|
||||
|
||||
@@ -52,12 +52,10 @@ const tabList3 = [
|
||||
|
||||
export default function WaterQualityModal({ fcltyName = '', facilityCd = '', searchYear = new Date().getFullYear().toString() }: ModalProps) {
|
||||
const [tabName, setTabName] = useState<string>('tab_num1');
|
||||
|
||||
// 그리드 관련
|
||||
const { FacilityWaterQltyModal,
|
||||
searchFacilityWaterQltyListHist,
|
||||
Common
|
||||
} = useFoStore((state) => state);
|
||||
// 날짜 필터링 관련 상태
|
||||
const [copyYearList, setCopyYearList] = useState<FacilityWaterQltyProps[]>([]);
|
||||
const [chongInWaterQltyYearList, setChongInWaterQltyYearList] = useState<FacilityWaterQltyProps[]>([]);
|
||||
const { FacilityWaterQltyModal, searchFacilityWaterQltyListHist, Common } = useFoStore((state) => state);
|
||||
const { btnClass, COD_YEAR } = Common;
|
||||
const {
|
||||
upHeadListModalYear,
|
||||
@@ -72,6 +70,16 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
const prevExcelListRef = useRef<modalExcelType[] | null>(null);
|
||||
const prevChoinginExcelListRef = useRef<modalChoinginExcelType[] | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
searchFacilityWaterQltyListHist(searchYear, facilityCd);
|
||||
}, [searchYear, facilityCd, searchFacilityWaterQltyListHist]);
|
||||
|
||||
useEffect(() => {
|
||||
const filteredYearData = setFilterAfterData(facilityWaterQltyYearList);
|
||||
setCopyYearList(filteredYearData as FacilityWaterQltyProps[]);
|
||||
setChongInWaterQltyYearList(filteredYearData as FacilityWaterQltyProps[]);
|
||||
}, [facilityWaterQltyYearList]);
|
||||
|
||||
// 필터링 된 후 최대, 최소, 평균 값 계산
|
||||
const setFilterAfterData = (filteredData: FacilityWaterQltyProps[]) => {
|
||||
// 쉼표가 포함된 문자열을 숫자로 변환하는 함수
|
||||
@@ -313,7 +321,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
addr: "",
|
||||
fctCpc: 0,
|
||||
noProcessInflAmnt: roundNumber(minNoProcessInflAmnt, 0),
|
||||
infoRnDay: Math.round(minInfoRnDay * 10) / 10 ? '0.0' : roundNumber(minInfoRnDay, 1),
|
||||
infoRnDay: Math.round(minInfoRnDay * 10) / 10 ? roundNumber(minInfoRnDay, 1) : '0.0',
|
||||
tpInflWqltBod: Math.round(minTpInflWqltBod * 10) / 10 && minTpInflWqltBod != 99999999 ? roundNumber(minTpInflWqltBod, 1) : '0.0',
|
||||
tpInflWqltTp: Math.round(minTpInflWqltTp * 1000) / 1000 && minTpInflWqltTp != 99999999 ? roundNumber(minTpInflWqltTp, 3) : '0.000'
|
||||
},
|
||||
@@ -323,20 +331,6 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
return newFilteredData;
|
||||
}
|
||||
|
||||
// 날짜 필터링 관련 상태
|
||||
const [copyYearList, setCopyYearList] = useState<FacilityWaterQltyProps[]>([]);
|
||||
const [chongInWaterQltyYearList, setChongInWaterQltyYearList] = useState<FacilityWaterQltyProps[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
searchFacilityWaterQltyListHist(searchYear, facilityCd);
|
||||
}, [searchYear, facilityCd, searchFacilityWaterQltyListHist]);
|
||||
|
||||
useEffect(() => {
|
||||
const filteredYearData = setFilterAfterData(facilityWaterQltyYearList);
|
||||
setCopyYearList(filteredYearData as FacilityWaterQltyProps[]);
|
||||
setChongInWaterQltyYearList(filteredYearData as FacilityWaterQltyProps[]);
|
||||
}, [facilityWaterQltyYearList]);
|
||||
|
||||
const yesterDay = new Date();
|
||||
yesterDay.setDate(yesterDay.getDate() - 1);
|
||||
const yesterDayStr = yesterDay.toISOString().split('T')[0];
|
||||
@@ -350,7 +344,8 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
|
||||
const filterData = useCallback((returnType: ReturnType<FacilityWaterQltyProps>) => {
|
||||
const filteredData = setFilterAfterData(returnType.filteredList);
|
||||
setCopyYearList(filteredData as FacilityWaterQltyProps[]);
|
||||
setCopyYearList(filteredData as FacilityWaterQltyProps[]); // 처리시설 수질현황
|
||||
setChongInWaterQltyYearList(filteredData as FacilityWaterQltyProps[]); // 총인설비 수질현황
|
||||
}, []);
|
||||
|
||||
const excelDownload = () => {
|
||||
@@ -393,6 +388,8 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
const excelDownList: modalChoinginExcelType[] = [];
|
||||
if (chongInWaterQltyYearList.length > 0) {
|
||||
chongInWaterQltyYearList.forEach((item) => {
|
||||
// if (copyYearList.length > 0) {
|
||||
// copyYearList.forEach((item) => {
|
||||
excelDownList.push({
|
||||
날짜: item.msrDt,
|
||||
"유입BOD(mg/L)": CommaToNumber(item.tpInflWqltBod),
|
||||
@@ -432,7 +429,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
{/* 처리시설 수질현황 */}
|
||||
<TabsContent value="tab_num1">
|
||||
<UITab tabList={tabList2} defaultValue="tab_term_year">
|
||||
<TabsContent value="tab_term_year">
|
||||
<TabsContent value="tab_term_year">{/* 연간 */}
|
||||
<FacilityTermModalHeader<FacilityWaterQltyProps>
|
||||
searchList={facilityWaterQltyYearList}
|
||||
fcltyCd={facilityCd} fcltyName={fcltyName} tabName="tab_term_year"
|
||||
@@ -449,9 +446,9 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
<HeadMakeColSpan upHeadList={upHeadListModalYear} layoutNum={3} />
|
||||
</UiTable>
|
||||
</div>
|
||||
<div className="card-header">
|
||||
<div className="card-header border-t mt-1">
|
||||
<h3 className="text-2xl font-medium text-label">수질 TMS</h3>
|
||||
{/*<h3 className="text-2xl font-medium text-label text-right">({msrmtDate?msrmtDate.substring(0,4)+'-'+msrmtDate.substring(4,6)+'-'+msrmtDate.substring(6,8):yesterDayStr})</h3> */}
|
||||
<h3 className="text-2xl font-medium text-label text-right">({msrmtDate ? msrmtDate.substring(0, 4) + '-' + msrmtDate.substring(4, 6) + '-' + msrmtDate.substring(6, 8) : yesterDayStr})</h3>
|
||||
</div>
|
||||
<div className="overflow-y-auto h-[250px]">
|
||||
<UiTable
|
||||
@@ -507,7 +504,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
</div>
|
||||
</TabsContent>
|
||||
|
||||
<TabsContent value="tab_term_chuncheon">{/* 청천 */}
|
||||
<TabsContent value="tab_term_chuncheon">{/* 청천시 */}
|
||||
<FacilityTermModalHeader<FacilityWaterQltyProps>
|
||||
searchList={facilityWaterQltyYearList}
|
||||
fcltyCd={facilityCd} fcltyName={fcltyName} tabName="tab_term_chuncheon"
|
||||
@@ -552,7 +549,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
{/* 총인설비 수질현황 */}
|
||||
<TabsContent value="tab_num2" >
|
||||
<UITab tabList={tabList3} defaultValue="tab_term_year_chongin">
|
||||
<TabsContent value="tab_term_year_chongin">
|
||||
<TabsContent value="tab_term_year_chongin">{/* 연간 */}
|
||||
<FacilityTermModalHeader<FacilityWaterQltyProps>
|
||||
searchList={chongInWaterQltyYearList}
|
||||
fcltyCd={facilityCd} fcltyName={fcltyName} tabName="tab_term_year"
|
||||
@@ -571,7 +568,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
</div>
|
||||
</TabsContent>
|
||||
|
||||
<TabsContent value="tab_term_summer_chongin">
|
||||
<TabsContent value="tab_term_summer_chongin">{/* 하절기 */}
|
||||
<FacilityTermModalHeader<FacilityWaterQltyProps>
|
||||
searchList={chongInWaterQltyYearList}
|
||||
fcltyCd={facilityCd} fcltyName={fcltyName} tabName="tab_term_summer"
|
||||
@@ -590,7 +587,7 @@ export default function WaterQualityModal({ fcltyName = '', facilityCd = '', sea
|
||||
</div>
|
||||
</TabsContent>
|
||||
|
||||
<TabsContent value="tab_term_winter_chongin">
|
||||
<TabsContent value="tab_term_winter_chongin">{/* 동절기 */}
|
||||
<FacilityTermModalHeader<FacilityWaterQltyProps>
|
||||
searchList={chongInWaterQltyYearList}
|
||||
fcltyCd={facilityCd} fcltyName={fcltyName} tabName="tab_term_winter"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import DataForm, { roundNumber } from "@/app/components/common/DataForm";
|
||||
import type { TableUpperProps } from "../dashboard";
|
||||
import CalcRainEffect from "@/app/components/common/CalcRainEffect";
|
||||
import { COD_YEAR } from "../common";
|
||||
import { COD_YEAR } from "../common"; // 2021년
|
||||
import CommaToNumber from "@/app/components/common/CommaToNumber";
|
||||
export type { TableUpperProps };
|
||||
|
||||
@@ -431,7 +431,7 @@ const dataFormSetting = (item: FacilityWaterQltyProps) => {
|
||||
}
|
||||
|
||||
export type FacilityWaterQltyStore = FacilityWaterQltyType & FacilityWaterQltyActions;
|
||||
// 타입 정의를 분리하여 가독성 향상
|
||||
|
||||
type SetFunc = (fn: (state: FacilityWaterQltyType) => FacilityWaterQltyType) => void;
|
||||
export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions => {
|
||||
return {
|
||||
@@ -447,7 +447,9 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
|
||||
* @param operationValue : 운영상태코드
|
||||
* @param fcltyNm : 시설명
|
||||
*/
|
||||
searchFacilityWaterQltyList: async (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => {
|
||||
searchFacilityWaterQltyList: async (pageNo: number, pageSize: number, searchYear: string, part?: string
|
||||
, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => {
|
||||
|
||||
set((state: FacilityWaterQltyType) => ({
|
||||
...state,
|
||||
FacilityWaterQltyMain: {
|
||||
@@ -567,7 +569,6 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
|
||||
tn: res1.data.tnAvgVl,
|
||||
tp: res1.data.tpAvgVl,
|
||||
});
|
||||
|
||||
rtnTmsList.push({
|
||||
part: '최대',
|
||||
toc: res1.data.tocMaxVl,
|
||||
@@ -575,7 +576,6 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
|
||||
tn: res1.data.tnMaxVl,
|
||||
tp: res1.data.tpMaxVl,
|
||||
});
|
||||
|
||||
rtnTmsList.push({
|
||||
part: '최소',
|
||||
toc: res1.data.tocMinVl,
|
||||
@@ -586,30 +586,9 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
|
||||
|
||||
rtnMsrmtDate = res1.data.msrmtDate;
|
||||
} else {
|
||||
rtnTmsList.push({
|
||||
part: '평균',
|
||||
toc: 0,
|
||||
ss: 0,
|
||||
tn: 0,
|
||||
tp: 0,
|
||||
});
|
||||
|
||||
rtnTmsList.push({
|
||||
part: '최대',
|
||||
toc: 0,
|
||||
ss: 0,
|
||||
tn: 0,
|
||||
tp: 0,
|
||||
});
|
||||
|
||||
rtnTmsList.push({
|
||||
part: '최소',
|
||||
toc: 0,
|
||||
ss: 0,
|
||||
tn: 0,
|
||||
tp: 0,
|
||||
});
|
||||
|
||||
rtnTmsList.push({ part: '평균', toc: 0, ss: 0, tn: 0, tp: 0, });
|
||||
rtnTmsList.push({ part: '최대', toc: 0, ss: 0, tn: 0, tp: 0, });
|
||||
rtnTmsList.push({ part: '최소', toc: 0, ss: 0, tn: 0, tp: 0, });
|
||||
rtnMsrmtDate = '';
|
||||
}
|
||||
|
||||
@@ -633,10 +612,8 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
|
||||
* [(강우시 일별유입유량*강우시 일별유입BOD)-(청천시 연평균유입유량*청천시 연평균유입BOD)]
|
||||
/강우시 일별유입BOD)
|
||||
*/
|
||||
//let rainInflAmnt = 0;
|
||||
let sunnyInflAmnt = 0;
|
||||
let sunnyBod = 0;
|
||||
//let rainDay = 0;
|
||||
let sunnyDay = 0;
|
||||
|
||||
data.forEach(item => {
|
||||
@@ -700,12 +677,12 @@ export const facilityWaterQltyReducer = (set: SetFunc): FacilityWaterQltyActions
|
||||
item.efflWqltToc = Number(Math.round(Number(item.efflWqltToc) * 10) / 10).toFixed(1);
|
||||
}
|
||||
|
||||
if (item.tpInflWqltBod) {
|
||||
if (item.tpInflWqltBod) { // 총인 유입수질 BOD(mg/L)
|
||||
item.tpInflWqltBod = item.tpInflWqltBod ? Number(Math.round(Number(item.tpInflWqltBod) * 10) / 10).toFixed(1) : Number(item.tpInflWqltBod) === 0 ? '0.0' : '';
|
||||
} else {
|
||||
item.tpInflWqltBod = '';
|
||||
}
|
||||
if (item.tpInflWqltTp) {
|
||||
if (item.tpInflWqltTp) { // 총인 유입수질 TP(mg/L)
|
||||
item.tpInflWqltTp = item.tpInflWqltTp ? Number(Math.round(Number(item.tpInflWqltTp) * 1000) / 1000).toFixed(3) : Number(item.tpInflWqltTp) === 0 ? '0.000' : '';
|
||||
} else {
|
||||
item.tpInflWqltTp = '';
|
||||
|
||||
Reference in New Issue
Block a user