Merge remote-tracking branch 'origin/iipbs/fo/dev'

This commit is contained in:
yschoi
2025-08-14 13:34:19 +09:00
12 changed files with 413 additions and 400 deletions
@@ -47,11 +47,6 @@ export default function SearchInputText({label=undefined, setValue=()=>{}, sidoS
}, [fcltyName]);
const handleSuggestionClick = useCallback((bscFctCd: string, bscFctNm: string, fctCpc: number | '', trtFrfNm: string | '', efflWqltStndrdNm: string | '') => {
console.log('bscFctNm : ', bscFctNm);
console.log('bscFctCd : ', bscFctCd);
console.log('fctCpc : ', fctCpc);
console.log('trtFrfNm : ', trtFrfNm);
console.log('efflWqltStndrdNm : ', efflWqltStndrdNm);
setTextValue(bscFctNm);
setValue(bscFctCd, bscFctNm, fctCpc, trtFrfNm, efflWqltStndrdNm);
setIsOpen(false);
@@ -171,7 +171,6 @@ export default function ProcessFacilitySearch({searchYear = '', fcltyList = []}:
el['provisionalApproval'] = waterUsage1;
}
});
console.log('planFcltyList :', planFcltyList);
}
}, [waterUsage1, waterUsage2, waterUsage3, searchYear, planFcltyList]);
// 연도가 바뀌면 hasSearched를 false로 리셋
@@ -74,6 +74,7 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
let avgefflAmnt = 0;
let avginfoRnDay = 0;
console.log('filteredData', filteredData);
filteredData.forEach((item: FlowRateModalInterface) => {
const totInflAmnt = parseNumber(item.totInflAmnt);
const inflAmnt = parseNumber(item.inflAmnt);
@@ -103,6 +104,10 @@ export default function FlowRateModal(props: { fcltyName: string; facilityCd: st
avginfoRnDay += infoRnDay;
});
console.log('maxtotInflAmnt', maxtotInflAmnt, 'maxinflAmnt', maxinflAmnt, 'maxsumFlow', maxsumFlow, 'maxreturnAmnt', maxreturnAmnt, 'maxefflAmnt', maxefflAmnt, 'maxinfoRnDay', maxinfoRnDay);
console.log('mintotInflAmnt', mintotInflAmnt, 'mininflAmnt', mininflAmnt, 'minsumFlow', minsumFlow, 'minreturnAmnt', minreturnAmnt, 'minefflAmnt', minefflAmnt, 'mininfoRnDay', mininfoRnDay);
console.log('avgtotInflAmnt', avgtotInflAmnt, 'avginflAmnt', avginflAmnt, 'avgsumFlow', avgsumFlow, 'avgreturnAmnt', avgreturnAmnt, 'avgefflAmnt', avgefflAmnt, 'avginfoRnDay', avginfoRnDay);
const newFilteredData = [
{
msrDt: '평균',
@@ -34,64 +34,11 @@ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date(
gridListUnderWaterDetail,
} = UnderWaterDetail;
// 필터링 된 후 최대, 최소, 평균 값 계산
const setFilterAfterData = (filteredData: UnderWaterInputModalProps[]) => {
let maxRealSewageInput = Number(filteredData[0]?.realSewageInput ?? 0);
let maxSewageOccur = Number(filteredData[0]?.sewageOccur ?? 0);
let maxUnderWaterInput = Number(filteredData[0]?.underWaterInput ?? 0);
let minRealSewageInput = Number(filteredData[0]?.realSewageInput ?? 0);
let minSewageOccur = Number(filteredData[0]?.sewageOccur ?? 0);
let minUnderWaterInput = Number(filteredData[0]?.underWaterInput ?? 0);
let avgRealSewageInput = 0;
let avgSewageOccur = 0;
let avgUnderWaterInput = 0;
filteredData.forEach((item: UnderWaterInputModalProps) => {
maxRealSewageInput = Math.max(Number(maxRealSewageInput), Number(item.realSewageInput));
maxSewageOccur = Math.max(Number(maxSewageOccur), Number(item.sewageOccur));
maxUnderWaterInput = Math.max(Number(maxUnderWaterInput), Number(item.underWaterInput));
minRealSewageInput = Math.min(Number(minRealSewageInput) || 0, Number(item.realSewageInput));
minSewageOccur = Math.min(Number(minSewageOccur) || 0, Number(item.sewageOccur));
minUnderWaterInput = Math.min(Number(minUnderWaterInput) || 0, Number(item.underWaterInput));
avgRealSewageInput += Number(item.realSewageInput ?? 0);
avgSewageOccur += Number(item.sewageOccur ?? 0);
avgUnderWaterInput += Number(item.underWaterInput ?? 0);
})
const newFilteredData = [
{
msrDt: '평균',
realSewageInput: filteredData.length==0?0:Math.round(Number(avgRealSewageInput) / filteredData.length * 10) / 10,
sewageOccur: filteredData.length==0?0:Math.round(Number(avgSewageOccur) / filteredData.length * 1000) / 1000 ,
underWaterInput: filteredData.length==0?0:Math.round(Number(avgUnderWaterInput) / filteredData.length * 1000) / 1000,
},
{
msrDt : '최대',
realSewageInput : Math.round(maxRealSewageInput * 10) / 10,
sewageOccur : Math.round(maxSewageOccur * 1000) / 1000 ,
underWaterInput : Math.round(maxUnderWaterInput * 1000) / 1000,
},
{
msrDt : '최소',
realSewageInput : Math.round(minRealSewageInput * 10) / 10,
sewageOccur : Math.round(minSewageOccur * 1000) / 1000 ,
underWaterInput : Math.round(minUnderWaterInput * 1000) / 1000,
},
...filteredData
];
return newFilteredData;
}
// 날짜 필터링 관련 상태
const [copyYearList, setCopyYearList] = useState<UnderWaterInputModalProps[]>([]);
useEffect(() => {
const filteredYearData = setFilterAfterData(gridListUnderWaterDetail);
setCopyYearList(filteredYearData as UnderWaterInputModalProps[]);
setCopyYearList(gridListUnderWaterDetail);
}, [gridListUnderWaterDetail]);
useEffect(() => {
@@ -115,9 +62,11 @@ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date(
setPrevEndYmDate(searchYear+'12');
}
}, [searchYear, tabTerm]);
useEffect(()=>{
unserWaterModal(fcltyName, searchYear);
}, [])
unserWaterModal(fcltyName, searchYear, searchYear+'01', searchYear+'12');
}, [fcltyName, searchYear, unserWaterModal]);
useEffect(() => {
if(endYmDate < startYmDate) {
alert('종료일이 시작일보다 작습니다.')
@@ -130,16 +79,13 @@ export default function UnderWaterInputModal({fcltyName='', searchYear=new Date(
// 유효한 경우 현재 값을 이전 값으로 저장
setPrevStartYmDate(startYmDate);
setPrevEndYmDate(endYmDate);
const filteredData = gridListUnderWaterDetail.filter((item: UnderWaterInputModalProps) => {
// msrDt가 "2024-01" 형태이므로 "202401" 형태로 변환
const itemDate = item.msrDt.replace('-', '');
return itemDate >= startYmDate && itemDate <= endYmDate;
});
const filteredYearData = setFilterAfterData(filteredData);
setCopyYearList(filteredYearData as UnderWaterInputModalProps[]);
}, [startYmDate, endYmDate, gridListUnderWaterDetail, prevStartYmDate, prevEndYmDate]);
useEffect(() => {
unserWaterModal(fcltyName, searchYear, prevStartYmDate, prevEndYmDate);
} , [fcltyName, searchYear, unserWaterModal, prevStartYmDate, prevEndYmDate]);
return (
<>
<UITab tabList={tabList1} defaultValue="tab_term_year" onValueChange={(val) => {setTabTerm(val)}}>
+216 -104
View File
@@ -152,21 +152,21 @@ export interface RainManageExcelType {
강우량: string,
강우조건비율: number | '',
일수: number | '',
유입유량: number | '',
시설용량대비: number | '',
설계유입수질BOD: number | '',
설계유입수질TOC: number | '',
설계유입수질SS: number | '',
유입유량: string | number | '',
시설용량대비: string |number | '',
설계유입수질BOD: string | number | '',
설계유입수질TOC: string | number | '',
설계유입수질SS: string | number | '',
설계유입수질TN: string | number | '',
설계유입수질TP: string | number | '',
유입수질BOD: number | '',
유입수질TOC: number | '',
유입수질SS: number | '',
유입수질BOD: string | number | '',
유입수질TOC: string | number | '',
유입수질SS: string | number | '',
유입수질TN: string | number | '',
유입수질TP: string | number | '',
방류수질BOD: number | '',
방류수질TOC: number | '',
방류수질SS: number | '',
방류수질BOD: string | number | '',
방류수질TOC: string |number | '',
방류수질SS: string | number | '',
방류수질TN: string | number | '',
방류수질TP: string | number | '',
}
@@ -1068,21 +1068,21 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
let minDiff=9999999;
let minIndex;
res.forEach((el:any, idx) => {
if(minDiff>Math.abs(Number(targetYear) - Number(el.yr))){
minDiff=Math.abs(Number(targetYear) - Number(el.yr));
if(minDiff>Math.abs(Number(targetYear) - Number(el.planYr))){
minDiff=Math.abs(Number(targetYear) - Number(el.planYr));
minIndex=idx;
}
});
const rtnPlanData = res[minIndex];
planFcltyList.map((el, index) => {
planYearList = [];
planYearList.push(rtnPlanData?rtnPlanData.yrDt4.toString():"");
planYearList.push(rtnPlanData?rtnPlanData.yrDc1.toString():"");
planYearList.push(rtnPlanData?rtnPlanData.yrDc2.toString():"");
planYearList.push(rtnPlanData?rtnPlanData.yrDc3.toString():"");
planYearList.push(rtnPlanData?rtnPlanData.yrDc4.toString():"");
planYearList.push(rtnPlanData?rtnPlanData.planYrDt4.toString():"");
planYearList.push(rtnPlanData?rtnPlanData.planYr.toString():"");
planYearList.push(rtnPlanData?rtnPlanData.planYrDc1.toString():"");
planYearList.push(rtnPlanData?rtnPlanData.planYrDc2.toString():"");
planYearList.push(rtnPlanData?rtnPlanData.planYrDc3.toString():"");
planYearList.push(rtnPlanData?rtnPlanData.planYrDc4.toString():"");
if(index === 0){
el.provisionalApproval = rtnPlanData?rtnPlanData.planSwageQntSumDt4:'';
@@ -1114,14 +1114,13 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
// 임시시
dataFormSettingPlan(el);
console.log('planFcltyList', planFcltyList);
console.log('rtnPlanData', rtnPlanData);
set((state: DashBoardType) => ({
...state,
PlanFclty: {
...state.PlanFclty,
planFcltyList: planFcltyList,
isLoadingPlanFclty: false,
planYearList: planYearList,
},
}));
});
@@ -1139,6 +1138,17 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
const res = await fetchOperationStatus(searchYear, fcltyCd);
const data = res.data;
let yearMaxSumFlow = 1;
let yearMinSumFlow = 1;
let yearAvgSumFlow = 1;
let summerAll = 1;
let summerThree = 1;
let summerRain = 1;
let winterAll = 1;
let winterSunnyMin = 1;
let winterSunnyAvg = 1;
let winterSunnyMax = 1;
if(data && operationalStatusList){
// 유량 - 유입
if (operationalStatusList?.[0]) {
@@ -1171,47 +1181,110 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
operationalStatusList[0].winterSunnyAvg = data.winterSunny === null ? '' : (data.winterSunny.AVG_INFL_AMNT ? data.winterSunny.AVG_INFL_AMNT : 0) + (data.winterSunny.AVG_SUM_FLOW ? data.winterSunny.AVG_SUM_FLOW : 0) + (data.winterSunny.AVG_TP_INFL_WQLT_TP ? data.winterSunny.AVG_TP_INFL_WQLT_TP : 0);
operationalStatusList[0].winterSunnyMax = data.winterSunny === null ? '' : (data.winterSunny.MAX_INFL_AMNT ? data.winterSunny.MAX_INFL_AMNT : 0) + (data.winterSunny.MAX_SUM_FLOW ? data.winterSunny.MAX_SUM_FLOW : 0) + (data.winterSunny.MAX_TP_INFL_WQLT_TP ? data.winterSunny.MAX_TP_INFL_WQLT_TP : 0);
// 연계처리수
let yearDay = 0;
let summerDay = 0;
let winterDay = 0;
let summerRainDay = 0;
let summerChungchunDay = 0;
let winterChungchuDay = 0;
let yearSumFlow = 0;
let maxYearSumFlow = 0;
let minYearSumFlow = 9999999;
let summerSumFlow = 0;
let summerChungchunSumFlow = 0;
let summerRainDaySumFlow = 0;
let winterSumFlow = 0;
let winterChungchunSumFlow = 0;
let minWinterChungchunSumFlow = 9999999;
let maxWinterChungchunSumFlow = 0;
// 연계처리수,지하수유입량
const bscFctCd = fcltyCd;
const res2 = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear) as ApiResponse;
const calData = calRainEffectDay(res2.data, 'SUNNY');
let chungcunSumFlow = 0;
let sumSummerChungcunDay = 0;
let sumSummerChungcunFlow = 0;
let sumWinterChungcunDay = 0;
let sumWinterChungcunFlow = 0;
/* let yearSumFlow = 0;
let summerSumFlow = 0;
let winterSumFlow = 0; */
calData.forEach((flowItem: FlowDataItem) => {
chungcunSumFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0;
//yearSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0;
if(flowItem.msrDt.substring(4,6) ==='06' || flowItem.msrDt.substring(4,6) ==='07' || flowItem.msrDt.substring(4,6) ==='08'){
sumSummerChungcunDay += 1;
sumSummerChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0;
//summerSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0;
}else if(flowItem.msrDt.substring(4,6) ==='01' || flowItem.msrDt.substring(4,6) ==='02'){
sumWinterChungcunDay += 1;
sumWinterChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0;
// winterSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0;
yearDay = res2.data?res2.data.length:1;
res2.data.forEach((item: FlowDataItem) => {
yearSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0;
if(maxYearSumFlow < (item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0)) {
maxYearSumFlow = item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0;
}
if(minYearSumFlow > (item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0) || minYearSumFlow === 0) {
minYearSumFlow = item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0;
}
if(item.msrDt.substring(4,6) === '06' || item.msrDt.substring(4,6) === '07' || item.msrDt.substring(4,6) === '08') {
summerDay += 1;
summerSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0;
} else if(item.msrDt.substring(4,6) === '01' || item.msrDt.substring(4,6) === '02') {
winterDay += 1;
winterSumFlow += item.sumFlow && item.sumFlow !== 'x' ? Number(item.sumFlow.toString().trim()) : 0;
}
});
const calData = calRainEffectDay(res2.data, 'SUNNY');
const calRainDate = calRainEffectDay(res2.data, 'RAIN');
// 지하수유입량 - 청천시 기준
let chungcunSumFlow = 0;
let sumSummerChungcunFlow = 0;
let sumWinterChungcunFlow = 0;
// 하절기, 동절기 청천시 계산
calData.forEach((flowItem: FlowDataItem) => {
chungcunSumFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0;
if(flowItem.msrDt.substring(4,6) ==='06' || flowItem.msrDt.substring(4,6) ==='07' || flowItem.msrDt.substring(4,6) ==='08'){
summerChungchunDay += 1;
summerChungchunSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0;
sumSummerChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0;
}else if(flowItem.msrDt.substring(4,6) ==='01' || flowItem.msrDt.substring(4,6) ==='02'){
if(minWinterChungchunSumFlow > (flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0) || minWinterChungchunSumFlow === 0) {
minWinterChungchunSumFlow = flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0;
}
if(maxWinterChungchunSumFlow < (flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0)) {
maxWinterChungchunSumFlow = flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0;
}
winterChungchuDay += 1;
winterChungchunSumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0;
sumWinterChungcunFlow += flowItem.inflAmnt && flowItem.inflAmnt !== 'x' ? Number(flowItem.inflAmnt.toString().trim()) : 0;
}
});
// 하절기 강우시 계산
calRainDate.forEach((flowItem: FlowDataItem) => {
if(flowItem.msrDt.substring(4,6) === '06' || flowItem.msrDt.substring(4,6) === '07' || flowItem.msrDt.substring(4,6) === '08') {
summerRainDay += 1;
summerRainDaySumFlow += flowItem.sumFlow && flowItem.sumFlow !== 'x' ? Number(flowItem.sumFlow.toString().trim()) : 0;
}
});
operationalStatusList[0].yearAvg = Number(operationalStatusList[0].yearAvg) + (yearSumFlow&&Number(yearSumFlow) != 0?Number(yearSumFlow / yearDay):0);
operationalStatusList[0].yearMax = Number(operationalStatusList[0].yearMax) + Number(maxYearSumFlow);
operationalStatusList[0].yearMin = Number(operationalStatusList[0].yearMin) + Number(minYearSumFlow);
operationalStatusList[0].summerAll = Number(operationalStatusList[0].summerAll) + (summerSumFlow&&Number(summerSumFlow)!=0?Number(summerSumFlow / summerDay):0);
operationalStatusList[0].summerThree = Number(operationalStatusList[0].summerThree) + (summerRainDaySumFlow&&Number(summerRainDaySumFlow)!=0?Number(summerRainDaySumFlow / summerRainDay):0);
operationalStatusList[0].summerRain = Number(operationalStatusList[0].summerRain) + (summerChungchunSumFlow&&Number(summerChungchunSumFlow)!=0?Number(summerChungchunSumFlow / summerChungchunDay):0);
operationalStatusList[0].winterAll = Number(operationalStatusList[0].winterAll) + (winterSumFlow&&Number(winterSumFlow)!=0?Number(winterSumFlow / winterDay):0);
operationalStatusList[0].winterSunnyMin = Number(operationalStatusList[0].winterSunnyMin) + Number(minWinterChungchunSumFlow);
operationalStatusList[0].winterSunnyMax = Number(operationalStatusList[0].winterSunnyMax) + (winterChungchunSumFlow&&Number(winterChungchunSumFlow)!=0?Number(winterChungchunSumFlow / winterChungchuDay):0);
operationalStatusList[0].winterSunnyAvg = Number(operationalStatusList[0].winterSunnyAvg) + Number(maxWinterChungchunSumFlow);
// 연계처리수
/* const avgYearSumFlow = yearSumFlow / calData.length;
const avgSummerSumFlow = summerSumFlow / calData.length;
const avgWinterSumFlow = winterSumFlow / calData.length; */
yearAvgSumFlow = Number((yearSumFlow&&Number(yearSumFlow)!=0)?(yearSumFlow / yearDay):'');
yearMaxSumFlow = maxYearSumFlow;
yearMinSumFlow = minYearSumFlow;
summerAll = summerSumFlow&&Number(summerSumFlow)!=0?Number(summerSumFlow / summerDay):0
summerThree= summerRainDaySumFlow&&Number(summerRainDaySumFlow)!=0?Number(summerRainDaySumFlow / summerRainDay):0;
summerRain = summerChungchunSumFlow&&Number(summerChungchunSumFlow)!=0?Number(summerChungchunSumFlow / summerChungchunDay):0;
winterAll = winterSumFlow&&Number(winterSumFlow)!=0?Number(winterSumFlow / winterDay):0;
winterSunnyMin = minWinterChungchunSumFlow;
winterSunnyAvg = winterChungchunSumFlow&&Number(winterChungchunSumFlow)!=0?(winterChungchunSumFlow / winterChungchuDay):0;
winterSunnyMax = maxWinterChungchunSumFlow;
// 지하수유입량
const usage = chungcunSumFlow / calData.length;
const summerUsage = sumSummerChungcunFlow / sumSummerChungcunDay;
const winterUsage = sumWinterChungcunFlow / sumWinterChungcunDay;
const summerUsage = sumSummerChungcunFlow / summerChungchunDay;
const winterUsage = sumWinterChungcunFlow / winterChungchuDay;
operationalStatusList[0].groundWaterAvg = Math.round((usage-(usage*0.65*0.8)) * 100) / 100;
operationalStatusList[0].groundWaterSummer = Math.round((summerUsage-(summerUsage*0.65*0.8)) * 100) / 100;
@@ -1253,7 +1326,22 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
}
}
}
if(operationalStatusList[2]){
operationalStatusList[2].yearAvg = yearAvgSumFlow;
operationalStatusList[2].yearMax = yearMaxSumFlow;
operationalStatusList[2].yearMin = yearMinSumFlow;
operationalStatusList[2].summerAll = summerAll;
operationalStatusList[2].summerThree = summerThree;
operationalStatusList[2].summerRain = summerRain;
operationalStatusList[2].winterAll = winterAll;
operationalStatusList[2].winterSunnyMin = winterSunnyMin;
operationalStatusList[2].winterSunnyAvg = winterSunnyAvg;
operationalStatusList[2].winterSunnyMax = winterSunnyMax;
dataFormSetting(operationalStatusList[2]);
}
}
//const excelDownList: RainManageExcelType[] = [];
/* if(isExcel){
res.data.forEach(item => {
@@ -1449,7 +1537,31 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
const rainEffectList = calRainEffectDayRainManage(res.data.wqltObjs);
// Process the data and create rain management list
const totItemCnt = rainEffectList?rainEffectList.length : 1;
let totInflAssctBfrWqltBod = 0;
let totInflAssctBfrWqltToc = 0;
let totInflAssctBfrWqltSs = 0;
let totInflAssctBfrWqltTn = 0;
let totInflAssctBfrWqltTp = 0;
let totEfflWqltBod = 0;
let totEfflWqltToc = 0;
let totEfflWqltSs = 0;
let totEfflWqltTn = 0;
let totEfflWqltTp = 0;
rainEffectList.forEach((item: RainManageListProps) => {
totInflAssctBfrWqltBod += item.inflAssctBfrWqltBod ? Number(item.inflAssctBfrWqltBod.toString().trim()) : 0;
totInflAssctBfrWqltToc += item.inflAssctBfrWqltToc ? Number(item.inflAssctBfrWqltToc.toString().trim()) : 0;
totInflAssctBfrWqltSs += item.inflAssctBfrWqltSs ? Number(item.inflAssctBfrWqltSs.toString().trim()) : 0;
totInflAssctBfrWqltTn += item.inflAssctBfrWqltTn ? Number(item.inflAssctBfrWqltTn.toString().trim()) : 0;
totInflAssctBfrWqltTp += item.inflAssctBfrWqltTp ? Number(item.inflAssctBfrWqltTp.toString().trim()) : 0;
totEfflWqltBod += item.efflWqltBod ? Number(item.efflWqltBod.toString().trim()) : 0;
totEfflWqltToc += item.efflWqltToc ? Number(item.efflWqltToc.toString().trim()) : 0;
totEfflWqltSs += item.efflWqltSs ? Number(item.efflWqltSs.toString().trim()) : 0;
totEfflWqltTn += item.efflWqltTn ? Number(item.efflWqltTn.toString().trim()) : 0;
totEfflWqltTp += item.efflWqltTp ? Number(item.efflWqltTp.toString().trim()) : 0;
if(Number(item.infoRnDay) >= 3 && Number(item.infoRnDay) < 10){
rainDate[1] = Number(rainDate[1] || 0) + 1;
inflAmtCnt[1] = Number(inflAmtCnt[1] || 0) + 1;
@@ -1537,7 +1649,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
inflAssctBfrWqltSsCnt[4] = Number(inflAssctBfrWqltSsCnt[4] || 0) + 1;
inflAssctBfrWqltSs[4] = Number(inflAssctBfrWqltSs[4] || 0) + Number(item.inflAssctBfrWqltSs || 0);
inflAssctBfrWqltTnCnt[4] = Number(inflAssctBfrWqltTnCnt[4] || 0) + 1;
inflAssctBfrWqltTn[4] = Number(inflAssctBfrWqltTn[5] || 0) + Number(item.inflAssctBfrWqltTn || 0);
inflAssctBfrWqltTn[4] = Number(inflAssctBfrWqltTn[4] || 0) + Number(item.inflAssctBfrWqltTn || 0);
inflAssctBfrWqltTpCnt[4] = Number(inflAssctBfrWqltTpCnt[4] || 0) + 1;
inflAssctBfrWqltTp[4] = Number(inflAssctBfrWqltTp[4] || 0) + Number(item.inflAssctBfrWqltTp || 0);
efflWqltBodCnt[4] = Number(efflWqltBodCnt[4] || 0) + 1;
@@ -1546,9 +1658,9 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
efflWqltToc[4] = Number(efflWqltToc[4] || 0) + Number(item.efflWqltToc || 0);
efflWqltSsCnt[4] = Number(efflWqltSsCnt[4] || 0) + 1;
efflWqltSs[4] = Number(efflWqltSs[4] || 0) + Number(item.efflWqltSs || 0);
efflWqltTnCnt[4] = Number(efflWqltTnCnt[5] || 0) + 1;
efflWqltTnCnt[4] = Number(efflWqltTnCnt[4] || 0) + 1;
efflWqltTn[4] = Number(efflWqltTn[4] || 0) + Number(item.efflWqltTn || 0);
efflWqltTpCnt[4] = Number(efflWqltTpCnt[5] || 0) + 1;
efflWqltTpCnt[4] = Number(efflWqltTpCnt[4] || 0) + 1;
efflWqltTp[4] = Number(efflWqltTp[4] || 0) + Number(item.efflWqltTp || 0);
}else if(Number(item.infoRnDay) >= 40 && Number(item.infoRnDay) < 50){
rainDate[5] = Number(rainDate[5] || 0) + 1;
@@ -1683,7 +1795,7 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
// 평균 및 합계 계산
const calculateAverage = (value: number, count: number) => {
return count > 0 ? Number((value / count).toFixed(1)) : 0;
return count > 0 ? Number((value / count)) : 0;
};
// 데이터 있는 항목만 계산
@@ -1710,44 +1822,44 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
// 합계 계산 (index 0)
const calculateTotal = (arr: number[]) => {
return Number((arr.slice(1).reduce((sum, val) => sum + Number(val), 0)).toFixed(1));
return Number((arr.slice(1).reduce((sum, val) => sum + Number(val), 0)));
};
inflAmnt[0] = calculateAverage(calculateTotal(inflAmnt), dataIsCount);
fcltyCpct[0] = calculateTotal(fcltyCpct);
inflAssctBfrWqltBod[0] = Number((calculateTotal(inflAssctBfrWqltBod)/7).toFixed(1));
inflAssctBfrWqltToc[0] = Number((calculateTotal(inflAssctBfrWqltToc)/7).toFixed(1));
inflAssctBfrWqltSs[0] = Number((calculateTotal(inflAssctBfrWqltSs)/7).toFixed(1));
inflAssctBfrWqltTn[0] = Number((calculateTotal(inflAssctBfrWqltTn)/7).toFixed(3));
inflAssctBfrWqltTp[0] = Number((calculateTotal(inflAssctBfrWqltTp)/7).toFixed(3));
efflWqltBod[0] = Number((calculateTotal(efflWqltBod)/7).toFixed(1));
efflWqltToc[0] = Number((calculateTotal(efflWqltToc)/7).toFixed(1));
efflWqltSs[0] = Number((calculateTotal(efflWqltSs as number[])/7).toFixed(1));
efflWqltTn[0] = Number((calculateTotal(efflWqltTn as number[])/7).toFixed(3));
efflWqltTp[0] = Number((calculateTotal(efflWqltTp as number[])/7).toFixed(3));
inflAssctBfrWqltBod[0] = Number((Math.round((totInflAssctBfrWqltBod / totItemCnt) * 10) / 10).toFixed(1));
inflAssctBfrWqltToc[0] = Number((Math.round((totInflAssctBfrWqltToc / totItemCnt) * 10) / 10).toFixed(1));
inflAssctBfrWqltSs[0] = Number((Math.round((totInflAssctBfrWqltSs / totItemCnt) * 10) / 10).toFixed(1));
inflAssctBfrWqltTn[0] = Number((Math.round((totInflAssctBfrWqltTn / totItemCnt) * 1000) / 1000).toFixed(3));
inflAssctBfrWqltTp[0] = Number((Math.round((totInflAssctBfrWqltTp / totItemCnt) * 1000) / 1000).toFixed(3));
efflWqltBod[0] = Number((Math.round((totEfflWqltBod / totItemCnt) * 10) / 10).toFixed(1));
efflWqltToc[0] = Number((Math.round((totEfflWqltToc / totItemCnt) * 10) / 10).toFixed(1));
efflWqltSs[0] = Number((Math.round((totEfflWqltSs / totItemCnt) * 10) / 10).toFixed(1));
efflWqltTn[0] = Number((Math.round((totEfflWqltTn / totItemCnt) * 1000) / 1000).toFixed(3));
efflWqltTp[0] = Number((Math.round((totEfflWqltTp / totItemCnt) * 1000) / 1000).toFixed(3));
// 최종 리스트
const filteredData = itemList.map((item, index) => ({
rainItem: item,
rainRate: rainRate[index] || '0',
rainDay: rainDate[index] ? Number(rainDate[index].toFixed(1)) : '',
inflAmnt: inflAmnt[index] ? Number(inflAmnt[index].toFixed(1)) : '',
fctCpc: inflAmnt[index] ? Number((inflAmnt[index] / fcltyCpcValue).toFixed(1)) : '',
dsInflWqltBod: dsInflWqltBod[index] ? Number(dsInflWqltBod[index].toFixed(1)) : '',
dsInflWqltCod: dsInflWqltCod[index] ? Number(dsInflWqltCod[index].toFixed(1)) : '',
dsInflWqltSs: dsInflWqltSs[index] ? Number(dsInflWqltSs[index].toFixed(1)) : '',
dsInflWqltTn: dsInflWqltTn[index] ? dsInflWqltTn[index].toFixed(3) : '',
dsInflWqltTp: dsInflWqltTp[index] ? dsInflWqltTp[index].toFixed(3) : '',
inflAssctBfrWqltBod: inflAssctBfrWqltBod[index] ? Number(inflAssctBfrWqltBod[index].toFixed(1)) : '',
inflAssctBfrWqltToc: inflAssctBfrWqltToc[index] ? Number(inflAssctBfrWqltToc[index].toFixed(1)) : '',
inflAssctBfrWqltSs: inflAssctBfrWqltSs[index] ? Number(inflAssctBfrWqltSs[index].toFixed(1)) : '',
inflAssctBfrWqltTn: inflAssctBfrWqltTn[index] ? inflAssctBfrWqltTn[index].toFixed(3) : '',
inflAssctBfrWqltTp: inflAssctBfrWqltTp[index] ? inflAssctBfrWqltTp[index].toFixed(3) : '',
efflWqltBod: efflWqltBod[index] ? Number(efflWqltBod[index].toFixed(1)) : '',
efflWqltToc: efflWqltToc[index] ? Number(efflWqltToc[index].toFixed(1)) : '',
efflWqltSs: efflWqltSs[index] ? Number(efflWqltSs[index].toFixed(1)) : '',
efflWqltTn: efflWqltTn[index] ? efflWqltTn[index].toFixed(3) : '',
efflWqltTp: efflWqltTp[index] ? efflWqltTp[index].toFixed(3) : ''
inflAmnt: inflAmnt[index] ? Number((Math.round(inflAmnt[index] * 10) / 10).toFixed(1)) : '',
fctCpc: inflAmnt[index] ? (Math.round((inflAmnt[index] / fcltyCpcValue) * 10) / 10).toFixed(1) : '',
dsInflWqltBod: dsInflWqltBod[index] ? (Math.round(dsInflWqltBod[index] * 10) / 10).toFixed(1) : '',
dsInflWqltCod: dsInflWqltCod[index] ? (Math.round(dsInflWqltCod[index] * 10) / 10).toFixed(1) : '',
dsInflWqltSs: dsInflWqltSs[index] ? (Math.round(dsInflWqltSs[index] * 10) / 10).toFixed(1) : '',
dsInflWqltTn: dsInflWqltTn[index] ? (Math.round(dsInflWqltTn[index] * 1000) / 1000).toFixed(3) : '',
dsInflWqltTp: dsInflWqltTp[index] ? (Math.round(dsInflWqltTp[index] * 1000) / 1000).toFixed(3) : '',
inflAssctBfrWqltBod: inflAssctBfrWqltBod[index] ? (Math.round(inflAssctBfrWqltBod[index] * 10) / 10).toFixed(1) : '',
inflAssctBfrWqltToc: inflAssctBfrWqltToc[index] ? (Math.round(inflAssctBfrWqltToc[index] * 10) / 10).toFixed(1) : '',
inflAssctBfrWqltSs: inflAssctBfrWqltSs[index] ? (Math.round(inflAssctBfrWqltSs[index] * 10) / 10).toFixed(1) : '',
inflAssctBfrWqltTn: inflAssctBfrWqltTn[index] ? (Math.round(inflAssctBfrWqltTn[index] * 1000) / 1000).toFixed(3) : '',
inflAssctBfrWqltTp: inflAssctBfrWqltTp[index] ? (Math.round(inflAssctBfrWqltTp[index] * 1000) / 1000).toFixed(3) : '',
efflWqltBod: efflWqltBod[index] ? (Math.round(efflWqltBod[index] * 10) / 10).toFixed(1): '',
efflWqltToc: efflWqltToc[index] ? (Math.round(efflWqltToc[index] * 10) / 10).toFixed(1) : '',
efflWqltSs: efflWqltSs[index] ? (Math.round(efflWqltSs[index] * 10) / 10).toFixed(1) : '',
efflWqltTn: efflWqltTn[index] ? (Math.round(efflWqltTn[index] * 1000) / 1000).toFixed(3) : '',
efflWqltTp: efflWqltTp[index] ? (Math.round(efflWqltTp[index] * 1000) / 1000).toFixed(3) : ''
}));
const excelList : RainManageExcelType[] = [];
@@ -1757,23 +1869,23 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
강우량: item.rainItem,
강우조건비율: item.rainRate ? Number(Number(item.rainRate).toFixed(1)) : '',
일수: item.rainDay ? Number(Number(item.rainDay).toFixed(1)) : '',
유입유량: item.inflAmnt ? Number(Number(item.inflAmnt).toFixed(1)) : '',
시설용량대비: item.fctCpc ? Number(Number(item.fctCpc).toFixed(1)) : '',
설계유입수질BOD: item.dsInflWqltBod ? Number(Number(item.dsInflWqltBod).toFixed(1)) : '',
설계유입수질TOC: item.dsInflWqltCod ? Number(Number(item.dsInflWqltCod).toFixed(1)) : '',
설계유입수질SS: item.dsInflWqltSs ? Number(Number(item.dsInflWqltSs).toFixed(1)) : '',
설계유입수질TN: item.dsInflWqltTn ? Number(item.dsInflWqltTn).toFixed(3) : '',
설계유입수질TP: item.dsInflWqltTp ? Number(item.dsInflWqltTp).toFixed(3) : '',
유입수질BOD: item.inflAssctBfrWqltBod ? Number(Number(item.inflAssctBfrWqltBod).toFixed(1)) : '',
유입수질TOC: item.inflAssctBfrWqltToc ? Number(Number(item.inflAssctBfrWqltToc).toFixed(1)) : '',
유입수질SS: item.inflAssctBfrWqltSs ? Number(Number(item.inflAssctBfrWqltSs).toFixed(1)) : '',
유입수질TN: item.inflAssctBfrWqltTn ? Number(item.inflAssctBfrWqltTn).toFixed(3) : '',
유입수질TP: item.inflAssctBfrWqltTp ? Number(item.inflAssctBfrWqltTp).toFixed(3) : '',
방류수질BOD: item.efflWqltBod ? Number(Number(item.efflWqltBod).toFixed(1)) : '',
방류수질TOC: item.efflWqltToc ? Number(Number(item.efflWqltToc).toFixed(1)) : '',
방류수질SS: item.efflWqltSs ? Number(Number(item.efflWqltSs).toFixed(1)) : '',
방류수질TN: item.efflWqltTn ? Number(item.efflWqltTn).toFixed(3) : '',
방류수질TP: item.efflWqltTp ? Number(item.efflWqltTp).toFixed(3) : '',
유입유량: item.inflAmnt ? Number((Math.round(Number(item.inflAmnt) * 10) / 10).toFixed(1)) : '',
시설용량대비: item.fctCpc ? (Math.round(Number(item.fctCpc) * 10) / 10).toFixed(1) : '',
설계유입수질BOD: item.dsInflWqltBod ? (Math.round(Number(item.dsInflWqltBod) * 10) / 10).toFixed(1) : '',
설계유입수질TOC: item.dsInflWqltCod ? (Math.round(Number(item.dsInflWqltCod) * 10) / 10).toFixed(1) : '',
설계유입수질SS: item.dsInflWqltSs ? (Math.round(Number(item.dsInflWqltSs) * 10) / 10).toFixed(1) : '',
설계유입수질TN: item.dsInflWqltTn ?(Math.round(Number(item.dsInflWqltTn) * 1000) / 1000).toFixed(3) : '',
설계유입수질TP: item.dsInflWqltTp ? (Math.round(Number(item.dsInflWqltTp) * 1000) / 1000).toFixed(3) : '',
유입수질BOD: item.inflAssctBfrWqltBod ? (Math.round(Number(item.inflAssctBfrWqltBod) * 10) / 10).toFixed(1) : '',
유입수질TOC: item.inflAssctBfrWqltToc ? (Math.round(Number(item.inflAssctBfrWqltToc) * 10) / 10).toFixed(1) : '',
유입수질SS: item.inflAssctBfrWqltSs ? (Math.round(Number(item.inflAssctBfrWqltSs) * 10) / 10).toFixed(1) : '',
유입수질TN: item.inflAssctBfrWqltTn ? (Math.round(Number(item.inflAssctBfrWqltTn) * 1000) / 1000).toFixed(3) : '',
유입수질TP: item.inflAssctBfrWqltTp ? (Math.round(Number(item.inflAssctBfrWqltTp) * 1000) / 1000).toFixed(3) : '',
방류수질BOD: item.efflWqltBod ? (Math.round(Number(item.efflWqltBod) * 10) / 10).toFixed(1) : '',
방류수질TOC: item.efflWqltToc ? (Math.round(Number(item.efflWqltToc) * 10) / 10).toFixed(1) : '',
방류수질SS: item.efflWqltSs ? (Math.round(Number(item.efflWqltSs) * 10) / 10).toFixed(1) : '',
방류수질TN: item.efflWqltTn ? (Math.round(Number(item.efflWqltTn) * 1000) / 1000).toFixed(3) : '',
방류수질TP: item.efflWqltTp ? (Math.round(Number(item.efflWqltTp) * 1000) / 1000).toFixed(3) : '',
});
});
}
@@ -1782,12 +1894,12 @@ export const dashBoardReducer:(set:(fn: (state: DashBoardType) => DashBoardType)
...state,
RainManage: isExcel ? {
...state.RainManage,
rainManageList: filteredData as RainManageListProps[],
rainManageList: filteredData as any[],
excelList: excelList,
isLoadingRainManage : false,
} : {
...state.RainManage,
rainManageList: filteredData as RainManageListProps[],
rainManageList: filteredData as any[],
isLoadingRainManage : false,
}
}));
@@ -269,7 +269,7 @@ const fetchFacilityWaterQltyTmsList = async (facilityCd: string|undefined) => {
};
// 시설정보 수질 리스트 데이터 호출(모달-이력)
const fetchFacilityWaterQltyListHist = async (searchYear: string|undefined, facilityCd: string|undefined): Promise<WaterQualityHistoryResponse | null> => {
export const fetchFacilityWaterQltyListHist = async (searchYear: string|undefined, facilityCd: string|undefined): Promise<WaterQualityHistoryResponse | null> => {
try {//
const res = await getFetch('fo', '/fclt/qlty/hist/' + searchYear + '/' + facilityCd);
return res;
@@ -623,6 +623,7 @@ export const facilityWaterQltyReducer = (set: (fn: (state: FacilityWaterQltyType
if(item.efflWqltTn){
item.efflWqltTn = Number(Math.round(Number(item.efflWqltTn) * 1000)/1000).toFixed(3);
}
if(item.inflAssctBfrWqltTp){
item.inflAssctBfrWqltTp = Number(Math.round(Number(item.inflAssctBfrWqltTp) * 1000)/1000).toFixed(3);
}
+39 -39
View File
@@ -19,12 +19,12 @@ export type ProcessAreaProps = {
location : string,
fctCpc : number | '',
ruse : boolean,
yrDt4 : string,
yr : string,
yrDc1 : string,
yrDc2 : string,
yrDc3 : string,
yrDc4 : string,
planYrDt4 : string,
planYr : string,
planYrDc1 : string,
planYrDc2 : string,
planYrDc3 : string,
planYrDc4 : string,
/**
* 증설계획
*/
@@ -236,17 +236,17 @@ const fetchProcessAreaList = async (pageNo : number, pageSize : number, ctpvNm :
res.map(async (item: ProcessAreaProps) => {
upHeadList1.forEach((head:TableUpperProps) => {
/* if (head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') {
head.title = '현재\n(' + item.yr + '년)';
head.title = '현재\n(' + item.planYr + '년)';
} else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') {
head.title = '1단계\n(' + item.yrDc1 + '년)';
head.title = '1단계\n(' + item.planYrDc1 + '년)';
} else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') {
head.title = '2단계\n(' + item.yrDc2 + '년)';
head.title = '2단계\n(' + item.planYrDc2 + '년)';
} else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') {
head.title = '3단계\n(' + item.yrDc3 + '년)';
head.title = '3단계\n(' + item.planYrDc3 + '년)';
} else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') {
head.title = '4단계\n(' + item.yrDc4 + '년)';
head.title = '4단계\n(' + item.planYrDc4 + '년)';
} else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') {
head.title = '기승인\n4단계(' + item.yrDt4 + '년)';
head.title = '기승인\n4단계(' + item.planYrDt4 + '년)';
} */
if (head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') {
head.title = '현재';
@@ -432,51 +432,51 @@ export const processAreaReducer:(set:SetStateFunction)=>ProcessAreaActions=(set:
set((state: ProcessAreaType) => {
const rtnData = state.ProcessArea.processAreaList.find((item: ProcessAreaProps) => item.swtrmtFcltCd === swtrmtFcltCd);
if (rtnData) {
upHeadListFcltyImproveInfo.forEach((head:TableUpperProps) => {
if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') {
head.title = rtnData.yr? '현재\n(' + rtnData.yr + '년)':head.title = '현재';
} else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') {
head.title = rtnData.yrDc1? '1단계\n(' + rtnData.yrDc1 + '년)':head.title = '1단계';
} else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') {
head.title = rtnData.yrDc2? '2단계\n(' + rtnData.yrDc2 + '년)':head.title = '2단계';
} else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') {
head.title = rtnData.yrDc3? '3단계\n(' + rtnData.yrDc3 + '년)':head.title = '3단계';
} else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') {
head.title = rtnData.yrDc4? '4단계\n(' + rtnData.yrDc4 + '년)':head.title = '4단계';
} else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') {
head.title = rtnData.yrDt4? '기승인\n4단계(' + rtnData.yrDt4 + '년)':head.title = '기승인\n4단계';
}
});
upHeadListFcltyImproveInfo.forEach((head:TableUpperProps) => {
if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') {
head.title = rtnData.planYr? '현재\n(' + rtnData.planYr + '년)':head.title = '현재';
} else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') {
head.title = rtnData.planYrDc1? '1단계\n(' + rtnData.planYrDc1 + '년)':head.title = '1단계';
} else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') {
head.title = rtnData.planYrDc2? '2단계\n(' + rtnData.planYrDc2 + '년)':head.title = '2단계';
} else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') {
head.title = rtnData.planYrDc3? '3단계\n(' + rtnData.planYrDc3 + '년)':head.title = '3단계';
} else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') {
head.title = rtnData.planYrDc4? '4단계\n(' + rtnData.planYrDc4 + '년)':head.title = '4단계';
} else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') {
head.title = rtnData.planYrDt4? '기승인\n4단계(' + rtnData.planYrDt4 + '년)':head.title = '기승인\n4단계';
}
});
upHeadListProcessAreaPlan.forEach((head:TableUpperProps) => {
if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') {
head.title = rtnData.yr? '현재\n(' + rtnData.yr + '년)':head.title = '현재';
head.title = rtnData.planYr? '현재\n(' + rtnData.planYr + '년)':head.title = '현재';
} else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') {
head.title = rtnData.yrDc1?'1단계\n(' + rtnData.yrDc1 + '년)':head.title = '1단계';
head.title = rtnData.planYrDc1?'1단계\n(' + rtnData.planYrDc1 + '년)':head.title = '1단계';
} else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') {
head.title = rtnData.yrDc2?'2단계\n(' + rtnData.yrDc2 + '년)':head.title = '2단계';
head.title = rtnData.planYrDc2?'2단계\n(' + rtnData.planYrDc2 + '년)':head.title = '2단계';
} else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') {
head.title = rtnData.yrDc3? '3단계\n(' + rtnData.yrDc3 + '년)':head.title = '3단계';
head.title = rtnData.planYrDc3? '3단계\n(' + rtnData.planYrDc3 + '년)':head.title = '3단계';
} else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') {
head.title = rtnData.yrDc4?'4단계\n(' + rtnData.yrDc4 + '년)':head.title = '4단계';
head.title = rtnData.planYrDc4?'4단계\n(' + rtnData.planYrDc4 + '년)':head.title = '4단계';
} else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') {
head.title = rtnData.yrDt4?'기승인\n4단계(' + rtnData.yrDt4 + '년)':head.title = '기승인\n4단계';
head.title = rtnData.planYrDt4?'기승인\n4단계(' + rtnData.planYrDt4 + '년)':head.title = '기승인\n4단계';
}
});
upHeadListProcessPopulation.forEach((head:TableUpperProps) => {
if(head.id === 'planSwageQntSum' || head.id === 'swtrmtPpltnCnt' || head.id === 'swtrmtZoneArea') {
head.title = rtnData.yr?'현재\n(' + rtnData.yr + '년)':head.title = '현재';
head.title = rtnData.planYr?'현재\n(' + rtnData.planYr + '년)':head.title = '현재';
} else if(head.id === 'planSwageQntSumDc1' || head.id === 'swtrmtPpltnCntDc1' || head.id === 'swtrmtZoneAreaDc1') {
head.title = rtnData.yrDc1?'1단계\n(' + rtnData.yrDc1 + '년)':head.title = '1단계';
head.title = rtnData.planYrDc1?'1단계\n(' + rtnData.planYrDc1 + '년)':head.title = '1단계';
} else if(head.id === 'planSwageQntSumDc2' || head.id === 'swtrmtPpltnCntDc2' || head.id === 'swtrmtZoneAreaDc2') {
head.title = rtnData.yrDc2?'2단계\n(' + rtnData.yrDc2 + '년)':head.title = '2단계';
head.title = rtnData.planYrDc2?'2단계\n(' + rtnData.planYrDc2 + '년)':head.title = '2단계';
} else if(head.id === 'planSwageQntSumDc3' || head.id === 'swtrmtPpltnCntDc3' || head.id === 'swtrmtZoneAreaDc3') {
head.title = rtnData.yrDc3?'3단계\n(' + rtnData.yrDc3 + '년)':head.title = '3단계';
head.title = rtnData.planYrDc3?'3단계\n(' + rtnData.planYrDc3 + '년)':head.title = '3단계';
} else if(head.id === 'planSwageQntSumDc4' || head.id === 'swtrmtPpltnCntDc4' || head.id === 'swtrmtZoneAreaDc4') {
head.title = rtnData.yrDc4?'4단계\n(' + rtnData.yrDc4 + '년)':head.title = '4단계';
head.title = rtnData.planYrDc4?'4단계\n(' + rtnData.planYrDc4 + '년)':head.title = '4단계';
} else if(head.id === 'planSwageQntSumDt4' || head.id === 'swtrmtPpltnCntDt4' || head.id === 'swtrmtZoneAreaDt4') {
head.title = rtnData.yrDt4?'기승인\n4단계(' + rtnData.yrDt4 + '년)':head.title = '기승인\n4단계';
head.title = rtnData.planYrDt4?'기승인\n4단계(' + rtnData.planYrDt4 + '년)':head.title = '기승인\n4단계';
}
});
@@ -676,7 +676,6 @@ export const processFacilityReducer:(set:SetStateFunction)=>ProcessFacilityActio
item.plInflWqltBod = item.plInflWqltBod ? Number(item.plInflWqltBod).toFixed(1) : '';
item.dsInflWqltBod = item.dsInflWqltBod ? Number(item.dsInflWqltBod).toFixed(1) : '';
}) */
console.log(res.data);
set((state:ProcessFacilityType) => ({
...state,
ProcessFacilityList: {
+39 -1
View File
@@ -1,6 +1,8 @@
import { getFetch } from "@/app/components/api";
import DataForm from "@/app/components/common/DataForm";
import type { TableUpperProps } from "../dashboard";
import { getFetch } from "@/app/components/api";
import { fetchFacilityWaterQltyListHist } from "../facilityWaterQlty";
import { calRainEffectDay } from "../underWaterInput";
export type { TableUpperProps };
/**====================================
* Store - 타입
@@ -27,6 +29,7 @@ export type RdiProps = {
rvbsn : string,
lgbsn : string,
mdmbsn : string,
rainEffectDay : number, // 강우영향일
}
export interface RdiInterface {
@@ -242,6 +245,41 @@ export const rdiReducer:(set:SetStateFunction)=>RdiActions=(set: SetStateFunctio
}
})
// 청천히 동절기 유입bod를 새로 구하기 위해서 재 호출
for (const item of rtnData) {
const fcltyCd = item.bscFctCd;
let winterInflBod = 0;
const res: any = await fetchFacilityWaterQltyListHist(searchYear, fcltyCd);
if (res?.data) {
const rtnWqltData = res.data.wqltObjs;
rtnWqltData.forEach((dataItem: any) => {
dataItem.rainEffectDay = 0;
});
calRainEffectDay(rtnWqltData, 'SUNNY');
const rtnWqltWinterData = rtnWqltData.filter((dataItem: any) =>
(dataItem.msrDt.substring(4, 6) === '01' ||
dataItem.msrDt.substring(4, 6) === '02') &&
dataItem.rainEffectDay == 0
);
rtnWqltWinterData.forEach((dataItem: any) => {
winterInflBod += dataItem.inflAssctBfrWqltBod
? Number(dataItem.inflAssctBfrWqltBod)
: 0;
});
if (rtnWqltWinterData.length > 0) {
winterInflBod = winterInflBod / rtnWqltWinterData.length;
}
}
item.winterAvgBodLowRainfall = winterInflBod;
}
rtnData.forEach((item: RdiProps) => {
dataFormSetting(item)
})
+4 -13
View File
@@ -129,7 +129,6 @@ const fetchSewageOccurList = async (pageNo: number, pageSize: number, searchYear
const tailStr = partCd ? '/'+ partCd + '/' + nameCd + '/' + fcltCpct + '/' + operationValue + (fcltyNm && fcltyNm !== '' ? '/' + fcltyNm : '') : '';
const url = '/fclt/flow/' + pageNo + '/' + pageSize + '/' + searchYear + tailStr;
const res = await getFetch('fo', url);
console.log("res", res.data);
return { data: res.data, count: res.count }
/*
@@ -237,10 +236,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => {
let sumChungcunDay = 0;
let chungcunSumFlow = 0;
let totWaterUsage = 0;
if(bscFctCd === '11200PB001R'){
console.log('res2.data : ',res2.data);
}
// 강우영향일 계산 (강우량이 3 초과이면 무조건 강우영향일)
for(let idx = 0; idx < res2.data.length; idx++) {
const item = res2.data[idx];
@@ -281,10 +277,6 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => {
}
}
}
if(bscFctCd === '11200PB001R'){
console.log('calData : ',res2.data);
}
res2.data.forEach((item: FlowDataItem) => {
@@ -312,8 +304,8 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => {
중권역: item.mdmbsn,
환경청: item.rgnNm,
시설명: item.bscFctNm,
시도: item.sidoNm, // sido ?? 타입에러 나서 수정함
시군구: item.sggNm, //sgg ??
시도: item.sidoNm,
시군구: item.sggNm,
주소: item.daddr,
시설용량: item.fctCpc,
물사용량: item.waterUsage,
@@ -345,7 +337,6 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => {
const monthData: SewageOccurDetailProps[] = [];
let tot = 0, cnt= 0;
console.log('startYearMonth : ', startYearMonth, 'endYearMonth : ', endYearMonth);
if(startYearMonth) {
res.data = res.data.filter((item: FlowDataItem) => {
const month = item.msrDt?.substring(0, 6);
@@ -373,7 +364,7 @@ export const sewageOccurReducer:(set:any)=>SewageOccurActions=(set: any) => {
tot += Number(item.inflAmnt)
cnt++
})
console.log('tot', tot, cnt, tot/cnt, tot/cnt*0.65);
const tableData:modalTableType[] = []
let maxWaterUsage = 0;
+30 -19
View File
@@ -1,6 +1,6 @@
import { getFetch } from "@/app/components/api";
import DataForm from "@/app/components/common/DataForm";
import type { TableUpperProps } from "../dashboard";
import { getFetch } from "@/app/components/api";
import type { ExcelType, UnderWaterInputModalProps, UnderWaterProps } from "./types";
export type { TableUpperProps };
@@ -201,7 +201,7 @@ const fetchUnderWaterList = async (pageNo: number, pageSize: number, searchYear:
====================================*/
export type UnderWaterActions = {
searchUnderWaterList: (pageNo: number, pageSize: number, searchYear: string, part?: string, nameCd?: string, fcltCpct?: string, operationValue?: string, fcltyNm?: string) => void;
unserWaterModal:(bscFctCd:string, searchYear:string)=>void
unserWaterModal:(bscFctCd:string, searchYear:string, startYm:string, endYm:string)=>void
}
export type UnderWaterType = {
@@ -261,7 +261,13 @@ const dataFormSetting=(item : UnderWaterProps)=> {
export type UnderWaterStore = UnderWaterType & UnderWaterActions;
export const calRainEffectDay = (data: FlowDataItem[], weather: string) => {
/**
*
* @param data
* @param weather ('ALL' | 'SUNNY' | 'RAINY')
* @returns
*/
export const calRainEffectDay = (data: any, weather: string) => {
// 강우영향일 계산 (강우량이 3 이상이면 무조건 강우영향일)
for(let idx = 0; idx < data.length; idx++) {
const item = data[idx];
@@ -359,6 +365,11 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy
const summerUsage = sumSummerChungcunFlow / sumSummerChungcunDay;
const winterUsage = sumWinterChungcunFlow / sumWinterChungcunDay;
if(bscFctCd === '11200PB001R') {
console.log('calData.length : ', calData.length);
console.log('usage : ', usage, 'summerUsage : ', summerUsage, 'winterUsage : ', winterUsage);
}
item.underWaterInputYear = Math.round((usage-(usage*0.65*0.8)) * 100) / 100;
item.underWaterInputSummer = Math.round((summerUsage-(summerUsage*0.65*0.8)) * 100) / 100;
item.underWaterInputWinter = Math.round((winterUsage-(winterUsage*0.65*0.8)) * 100) / 100;
@@ -412,25 +423,19 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy
},
}))
},
unserWaterModal:async (bscFctCd, searchYear)=>{
console.log('searchYear : ', searchYear);
unserWaterModal:async (bscFctCd, searchYear, startYm, endYm)=>{
const res = await getFetch('fo', '/fclt/flow/' + bscFctCd + '/' + searchYear);
const monthData: SewageOccurDetailProps[] = [];
const calData = calRainEffectDay(res.data, 'SUNNY');
let tot = 0, cnt= 0;
let tmpTot = 0;
calData.forEach((item: FlowDataItem) => {
tmpTot += Number(item.inflAmnt);
})
console.log('tmpTot : ', tmpTot/calData.length);
let tot = 0;
let cnt = 0;
calData.forEach((item: FlowDataItem) => {
const month = item.msrDt?.substring(4, 6);
const monthIdx = month ? Number(month) - 1 : -1;
if (monthIdx >= 0) {
if (monthIdx >= 0 && (monthIdx>=Number(startYm.substring(4,6))-1 && monthIdx <= Number(endYm.substring(4, 6))-1)) {
if (typeof monthData[monthIdx] === 'object') {
monthData[monthIdx].sum += Number(item.inflAmnt);
monthData[monthIdx].cnt++;
@@ -438,9 +443,12 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy
monthData[monthIdx] = {cnt:1, sum:Number(item.inflAmnt), yr:item.msrDt.substring(0,4), usege:0};
}
}
tot += Number(item.inflAmnt)
cnt++
})
if(month >= startYm.substring(4, 6) && month <= endYm.substring(4, 6)){
cnt++;
tot += item.inflAmnt && item.inflAmnt !== 'x' ? Number(item.inflAmnt.toString().trim()) : 0;
}
});
const tableData:UnderWaterInputModalProps[] = []
let maxWaterUsage = 0;
@@ -463,13 +471,16 @@ export const underWaterReducer:(set:(fn: (state: UnderWaterType) => UnderWaterTy
}
});
avgWaterUsage = tot/cnt
console.log('tot', tot, 'calData.length', calData.length);
avgWaterUsage = tot/cnt;
console.log(avgWaterUsage);
const newData= [
{
msrDt: '평균',
realSewageInput:Math.round(avgWaterUsage*100) /100,
sewageOccur:Math.round(avgWaterUsage*0.65*0.8 * 100) / 100,
underWaterInput:Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.8)) * 100) / 100,
underWaterInput: Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.8)) * 100) / 100
//underWaterInput:Math.round((avgWaterUsage-(avgWaterUsage*0.65*0.8)) * 100) / 100,
},
{
msrDt: '최대',
+68 -152
View File
@@ -247,6 +247,12 @@ importers:
dayjs:
specifier: ^1.11.13
version: 1.11.13
dotenv:
specifier: ^17.2.1
version: 17.2.1
find-up:
specifier: ^7.0.0
version: 7.0.0
js-cookie:
specifier: ^3.0.5
version: 3.0.5
@@ -274,9 +280,6 @@ importers:
tus-js-client:
specifier: ^4.3.1
version: 4.3.1
yargs:
specifier: ^18.0.0
version: 18.0.0
zod:
specifier: ^3.24.2
version: 3.25.76
@@ -296,6 +299,9 @@ importers:
'@types/webpack':
specifier: ^5.28.5
version: 5.28.5
'@types/yargs':
specifier: ^17.0.33
version: 17.0.33
eslint:
specifier: ^9
version: 9.33.0
@@ -4995,28 +5001,14 @@ packages:
- webpack-cli
dev: true
/@typescript-eslint/eslint-plugin@8.25.0(@typescript-eslint/parser@8.39.0)(eslint@9.33.0)(typescript@5.6.3):
resolution: {integrity: sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
/@types/yargs-parser@21.0.3:
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
dev: true
/@types/yargs@17.0.33:
resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.39.0(eslint@9.33.0)(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.25.0
'@typescript-eslint/type-utils': 8.25.0(eslint@9.33.0)(typescript@5.6.3)
'@typescript-eslint/utils': 8.25.0(eslint@9.33.0)(typescript@5.6.3)
'@typescript-eslint/visitor-keys': 8.25.0
eslint: 9.33.0
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
ts-api-utils: 2.1.0(typescript@5.6.3)
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
'@types/yargs-parser': 21.0.3
dev: true
/@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0)(eslint@9.33.0)(typescript@5.6.3):
@@ -5089,14 +5081,6 @@ packages:
- supports-color
dev: true
/@typescript-eslint/scope-manager@8.25.0:
resolution: {integrity: sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies:
'@typescript-eslint/types': 8.25.0
'@typescript-eslint/visitor-keys': 8.25.0
dev: true
/@typescript-eslint/scope-manager@8.39.0:
resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -5123,23 +5107,6 @@ packages:
typescript: 5.9.2
dev: true
/@typescript-eslint/type-utils@8.25.0(eslint@9.33.0)(typescript@5.6.3):
resolution: {integrity: sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
dependencies:
'@typescript-eslint/typescript-estree': 8.25.0(typescript@5.6.3)
'@typescript-eslint/utils': 8.25.0(eslint@9.33.0)(typescript@5.6.3)
debug: 4.4.1
eslint: 9.33.0
ts-api-utils: 2.1.0(typescript@5.6.3)
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/type-utils@8.39.0(eslint@9.33.0)(typescript@5.6.3):
resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -5158,35 +5125,11 @@ packages:
- supports-color
dev: true
/@typescript-eslint/types@8.25.0:
resolution: {integrity: sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
/@typescript-eslint/types@8.39.0:
resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
/@typescript-eslint/typescript-estree@8.25.0(typescript@5.6.3):
resolution: {integrity: sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.8.0'
dependencies:
'@typescript-eslint/types': 8.25.0
'@typescript-eslint/visitor-keys': 8.25.0
debug: 4.4.1
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.2
ts-api-utils: 2.1.0(typescript@5.6.3)
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/typescript-estree@8.39.0(typescript@5.6.3):
resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -5229,23 +5172,6 @@ packages:
- supports-color
dev: true
/@typescript-eslint/utils@8.25.0(eslint@9.33.0)(typescript@5.6.3):
resolution: {integrity: sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0)
'@typescript-eslint/scope-manager': 8.25.0
'@typescript-eslint/types': 8.25.0
'@typescript-eslint/typescript-estree': 8.25.0(typescript@5.6.3)
eslint: 9.33.0
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/utils@8.39.0(eslint@9.33.0)(typescript@5.6.3):
resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -5263,14 +5189,6 @@ packages:
- supports-color
dev: true
/@typescript-eslint/visitor-keys@8.25.0:
resolution: {integrity: sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies:
'@typescript-eslint/types': 8.25.0
eslint-visitor-keys: 4.2.1
dev: true
/@typescript-eslint/visitor-keys@8.39.0:
resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -6159,15 +6077,6 @@ packages:
wrap-ansi: 7.0.0
dev: true
/cliui@9.0.1:
resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==}
engines: {node: '>=20'}
dependencies:
string-width: 7.2.0
strip-ansi: 7.1.0
wrap-ansi: 9.0.0
dev: false
/clsx@2.1.1:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
@@ -6651,6 +6560,11 @@ packages:
csstype: 3.1.3
dev: false
/dotenv@17.2.1:
resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==}
engines: {node: '>=12'}
dev: false
/dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -6704,10 +6618,6 @@ packages:
resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==}
dev: false
/emoji-regex@10.4.0:
resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
dev: false
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -7006,7 +6916,7 @@ packages:
dependencies:
'@next/eslint-plugin-next': 15.1.7
'@rushstack/eslint-patch': 1.12.0
'@typescript-eslint/eslint-plugin': 8.25.0(@typescript-eslint/parser@8.39.0)(eslint@9.33.0)(typescript@5.6.3)
'@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/parser@8.39.0)(eslint@9.33.0)(typescript@5.6.3)
'@typescript-eslint/parser': 8.39.0(eslint@9.33.0)(typescript@5.6.3)
eslint: 9.33.0
eslint-import-resolver-node: 0.3.9
@@ -7437,6 +7347,15 @@ packages:
path-exists: 4.0.0
dev: true
/find-up@7.0.0:
resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
engines: {node: '>=18'}
dependencies:
locate-path: 7.2.0
path-exists: 5.0.0
unicorn-magic: 0.1.0
dev: false
/flat-cache@4.0.1:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
@@ -7571,11 +7490,6 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
/get-east-asian-width@1.3.0:
resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
engines: {node: '>=18'}
dev: false
/get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -8396,6 +8310,13 @@ packages:
p-locate: 5.0.0
dev: true
/locate-path@7.2.0:
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
p-locate: 6.0.0
dev: false
/lodash-es@4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: true
@@ -8921,6 +8842,13 @@ packages:
yocto-queue: 0.1.0
dev: true
/p-limit@4.0.0:
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
yocto-queue: 1.2.1
dev: false
/p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
@@ -8935,6 +8863,13 @@ packages:
p-limit: 3.1.0
dev: true
/p-locate@6.0.0:
resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
p-limit: 4.0.0
dev: false
/p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
@@ -8976,6 +8911,11 @@ packages:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
/path-exists@5.0.0:
resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dev: false
/path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@@ -10236,15 +10176,6 @@ packages:
emoji-regex: 9.2.2
strip-ansi: 7.1.0
/string-width@7.2.0:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
dependencies:
emoji-regex: 10.4.0
get-east-asian-width: 1.3.0
strip-ansi: 7.1.0
dev: false
/string.prototype.includes@2.0.1:
resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
engines: {node: '>= 0.4'}
@@ -10829,6 +10760,11 @@ packages:
/undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
/unicorn-magic@0.1.0:
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
engines: {node: '>=18'}
dev: false
/unicorn-magic@0.3.0:
resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
@@ -11262,15 +11198,6 @@ packages:
string-width: 5.1.2
strip-ansi: 7.1.0
/wrap-ansi@9.0.0:
resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
engines: {node: '>=18'}
dependencies:
ansi-styles: 6.2.1
string-width: 7.2.0
strip-ansi: 7.1.0
dev: false
/ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
@@ -11318,6 +11245,7 @@ packages:
/y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
dev: true
/yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
@@ -11346,11 +11274,6 @@ packages:
engines: {node: '>=12'}
dev: true
/yargs-parser@22.0.0:
resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
engines: {node: ^20.19.0 || ^22.12.0 || >=23}
dev: false
/yargs@15.4.1:
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
engines: {node: '>=8'}
@@ -11381,23 +11304,16 @@ packages:
yargs-parser: 21.1.1
dev: true
/yargs@18.0.0:
resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==}
engines: {node: ^20.19.0 || ^22.12.0 || >=23}
dependencies:
cliui: 9.0.1
escalade: 3.2.0
get-caller-file: 2.0.5
string-width: 7.2.0
y18n: 5.0.8
yargs-parser: 22.0.0
dev: false
/yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
dev: true
/yocto-queue@1.2.1:
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
engines: {node: '>=12.20'}
dev: false
/zod-validation-error@3.5.3(zod@3.25.76):
resolution: {integrity: sha512-OT5Y8lbUadqVZCsnyFaTQ4/O2mys4tj7PqhdbBCp7McPwvIEKfPtdA6QfPeFQK2/Rz5LgwmAXRJTugBNBi0btw==}
engines: {node: '>=18.0.0'}