=> {
+ console.log(url);
+ const res = await fetch('/cms-service' + url, {
+ method: "GET",
+ });
+ if (res.ok) {
+ const data = await res.json();
+ return data;
+ }
+ throw new Error('Failed to fetch data');
+};
+
export function getCookie(name:string) {
const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
if (match && match[2]) {
diff --git a/apps/sn/app/components/ui/YearRangeSelectBox.tsx b/apps/sn/app/components/ui/YearRangeSelectBox.tsx
index 3dc8818fc..768bfd54c 100644
--- a/apps/sn/app/components/ui/YearRangeSelectBox.tsx
+++ b/apps/sn/app/components/ui/YearRangeSelectBox.tsx
@@ -90,7 +90,7 @@ export function YearRangeSelectBox({
return (
~
`${key}=${decodeURIComponent(value)}`)
.join("&");
- const newUrl = `${RSONE_DC_URL}${pathname}${decodedParams ? `?${decodedParams}` : ""}`;
+ const newUrl = `${DC_URL}${pathname}${decodedParams ? `?${decodedParams}` : ""}`;
console.log(
`[Middleware] Rewriting from '/dc-service' path to: ${newUrl}`,
);
diff --git a/apps/wr/.env.production b/apps/wr/.env.production
index 7e40bdb76..0900b009d 100644
--- a/apps/wr/.env.production
+++ b/apps/wr/.env.production
@@ -1,31 +1,17 @@
-# NEXT_PUBLIC_SITE_ID = WR
-# NEXT_PUBLIC_PORT = 11301
-# NEXT_PUBLIC_PROXY_HOST = http://con.mind-one.co.kr:11301
-# NEXT_PUBLIC_SERVER_API_URL = http://dev.onasys.co.kr:8000
-# NEXT_PUBLIC_GEOSERVER_URL = http://rsone.iptime.org:10010/geoserver
-# NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver
-# NEXT_PUBLIC_CLAIM_NAME = Authorization
-# NEXT_PUBLIC_AUTH_USER_ID = token-id
-# NEXT_PUBLIC_ACCESS_TOKEN = access-token
-# NEXT_PUBLIC_REFRESH_TOKEN = refresh-token
-
-
-
NEXT_PUBLIC_SITE_ID = WR
-NEXT_PUBLIC_PORT = 11301
-NEXT_PUBLIC_PROXY_HOST = http://con.mind-one.co.kr:11301
-# NEXT_PUBLIC_SERVER_API_URL = http://dev.onasys.co.kr:8000
-NEXT_PUBLIC_SERVER_API_URL = http://con.mind-one.co.kr:11080/api/v1
-NEXT_PUBLIC_FO_SERVER_API_URL = http://con.mind-one.co.kr:11082/api/v1
-NEXT_PUBLIC_CS_SERVER_API_URL = http://dev.onasys.co.kr:8000
+NEXT_PUBLIC_PORT = 3000
+NEXT_PUBLIC_PROXY_HOST = http://wr.hasuon.or.kr
+NEXT_PUBLIC_SERVER_API_URL = http://apigateway.iipbs-dev.svc.cluster.local:8000/api/v1
+NEXT_PUBLIC_FO_SERVER_API_URL = http://apigateway.iipbs-dev.svc.cluster.local:8000/operation-service/api/v1
+NEXT_PUBLIC_CS_SERVER_API_URL = http://apigateway.iipbs-dev.svc.cluster.local:8000
NEXT_PUBLIC_CS_TUS_UPLOAD = /attach-service/api/v1/tus/upload
-NEXT_PUBLIC_GEOSERVER_URL = http://rsone.iptime.org:10010/geoserver
-NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver
+NEXT_PUBLIC_GEOSERVER_URL = http://172.29.143.87:8080/geoserver
+NEXT_PUBLIC_LX_GEOSERVER_URL = http://172.29.143.87:8080/geoserver_swl
NEXT_PUBLIC_CLAIM_NAME = Authorization
NEXT_PUBLIC_AUTH_USER_ID = token-id
NEXT_PUBLIC_ACCESS_TOKEN = access-token
NEXT_PUBLIC_REFRESH_TOKEN = refresh-token
-NEXT_PUBLIC_SEWERAGE_API_URL=http://con.mind-one.co.kr:11083/sewerage-service/api # 개발 서버 API
+NEXT_PUBLIC_SEWERAGE_API_URL = http://apigateway.iipbs-dev.svc.cluster.local:8000/sewerage-service/api
diff --git a/apps/wr/app/ruseFcltMng/fcltReg/pbnstReg/page.tsx b/apps/wr/app/ruseFcltMng/fcltReg/pbnstReg/page.tsx
index 05714a336..4ac167f3f 100644
--- a/apps/wr/app/ruseFcltMng/fcltReg/pbnstReg/page.tsx
+++ b/apps/wr/app/ruseFcltMng/fcltReg/pbnstReg/page.tsx
@@ -371,6 +371,7 @@ export default function PublicReuseFaciltyInsert() {
setIndexMng(index);
}}
indexMng={indexMng}
+ readonly={false}
/>
diff --git a/apps/wr/app/stats/rainStat/page.tsx b/apps/wr/app/stats/rainStat/page.tsx
index 591ea5fdf..17e2d4bae 100644
--- a/apps/wr/app/stats/rainStat/page.tsx
+++ b/apps/wr/app/stats/rainStat/page.tsx
@@ -16,50 +16,44 @@ import {
import ListDiv from "@common/business_components/ui/list_div";
import { Button } from "@common/components/ui";
import { useEffect, useState } from "react";
+import toast from "react-hot-toast";
+import { useTranslation } from "react-i18next";
export default function RainStat() {
const { code, rainStat, searchRainStatList } = useWrStore((state) => state);
- const { rainStatList, excelList, rainDetailList } = rainStat;
+ const { rainStatList, rainDetailList } = rainStat;
const [searchYear, setSearchYear] = useState(
String(new Date().getFullYear())
);
- const [exData, setExData] = useState>>();
+ //const [exData, setExData] = useState>>();
const [bdstTable, setBdstTable] = useState();
+ const { t } = useTranslation('base');
useEffect(() => {
- searchRainStatList(searchYear);
- }, [code.cityCd, code.sggCd, searchRainStatList])
+ searchRainStatList(searchYear ,code.cityCd);
+ }, [code.cityCd, searchRainStatList])
const excelDetailDownLoad=() =>{
const sidoList = new Set();
const sidoDataMap = new Map(); // 시도별 데이터를 저장할 Map
const sidoDetailMap = new Map(); // 시도별 상세 데이터를 저장할 Map
- // 먼저 시도별 상세 데이터를 그룹화
- rainDetailList.forEach((item: RainStatProps[]) => {
+ // 복사된 배열을 사용
+ const transformedRainDetailList = rainDetailList.map((originItem: RainStatProps[]) => {
+ const item = [...originItem]; // 원본 복사
const sidoVal = item.at(0)?.toString().trim();
const sigunVal = item.at(1)?.toString().trim();
- let sidoText = '';
- let sigunText = '';
-
const sido = code.cityCd.find((city) => city.val === sidoVal);
const sigun = code.sggCd.find((sgg) => sgg.val === sigunVal);
- sidoText = sido?.text || '';
- sigunText = sigun?.text || '';
-
- // 시도, 시군구 코드를 텍스트로 변환하여 데이터에 할당
- if (item.length > 0) {
- item[0] = sidoText as unknown as RainStatProps;
- }
- if (item.length > 1) {
- item[1] = sigunText as unknown as RainStatProps;
- }
- if (item.length > 2) {
- item[2] = sidoText+' '+sigunText as unknown as RainStatProps;
- }
+ const sidoText = sido?.text || '';
+ const sigunText = sigun?.text || '';
+
+ if (item.length > 0) item[0] = sidoText as unknown as RainStatProps;
+ if (item.length > 1) item[1] = sigunText as unknown as RainStatProps;
+ if (item.length > 2) item[2] = `${sidoText} ${sigunText}` as unknown as RainStatProps;
// 시도별 상세 데이터 수집
if (sidoText) {
@@ -72,53 +66,40 @@ export default function RainStat() {
// 시도별 합계 데이터 수집
if (sidoText && !sidoList.has(sidoText)) {
sidoList.add(sidoText);
- // 시도별 초기 데이터 구조 생성 (예: [시도명, 0, 0, 0, ...])
const initialData: (string | number)[] = [sidoText];
- // 데이터의 나머지 컬럼들을 0으로 초기화 (실제 컬럼 수에 맞게 조정 필요)
for (let i = 1; i < item.length; i++) {
initialData.push(0);
}
sidoDataMap.set(sidoText, initialData);
}
+
+ return item;
});
- // 시도별 합계 계산
- rainDetailList.forEach((item: RainStatProps[]) => {
+ // 이후 합계 계산에서도 transformedRainDetailList 사용
+ transformedRainDetailList.forEach((item: RainStatProps[]) => {
const sidoText = item[0]?.toString();
if (sidoText && sidoDataMap.has(sidoText)) {
const sidoData = sidoDataMap.get(sidoText)!;
- // 각 컬럼의 값을 합계에 더하기 (1번 인덱스부터 시작)
for (let i = 1; i < item.length && i < sidoData.length; i++) {
if(i == 2){
sidoData[i] = '합계';
- } else if(i == 3){
- // 해당 시도의 데이터 개수를 계산
- const sidoDataCount = rainDetailList.filter((data: unknown[]) =>
+ } else if (i == 3) {
+ const sidoDataCount = transformedRainDetailList.filter((data: unknown[]) =>
Array.isArray(data) && data.length > 0 && String(data[0]) === sidoText
).length;
sidoData[i] = sidoDataCount;
} else if( i == 4){
sidoData[i] = '';
- } else if(i == 6){
- // 법정 대상 건축물 개수 (인덱스 6이 'Y'인 경우)
- const bumCnt = rainDetailList.filter((data: unknown[]) =>
+ } else if (i == 6) {
+ const bumCnt = transformedRainDetailList.filter((data: unknown[]) =>
Array.isArray(data) && data.length > 6 && String(data[0]) === sidoText
).filter((data: unknown[]) => String(data[6]) === '대상').length;
sidoData[i] = bumCnt;
- } else if(i==8){
- const value = Number(item[8]) || 0;
+ } else if ([8, 11, 12, 14].includes(i)) {
+ const value = Number(item[i]) || 0;
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
- } else if(i==11){
- const value = Number(item[11]) || 0;
- sidoData[i] = (Number(sidoData[i]) + value) as string | number;
- } else if(i==12){
- const value = Number(item[12]) || 0;
- sidoData[i] = (Number(sidoData[i]) + value) as string | number;
- } else if(i==14){
- const value = Number(item[14]) || 0;
- sidoData[i] = (Number(sidoData[i]) + value) as string | number;
- }
- else {
+ } else {
sidoData[i] = '';
}
}
@@ -144,7 +125,7 @@ export default function RainStat() {
});
const sidoSummaryList = Array.from(sidoDataMap.values());
- const sidoTotalSummary = [['전체', '', '합계', 0, '', '', 0, '', '', 0, 0, 0, 0, 0, 0, '', 0]];
+ const sidoTotalSummary = [['전국', '', '합계', 0, '', '', 0, '', '', 0, 0, 0, 0, 0, 0, '']];
sidoSummaryList.forEach((item: (string | number)[]) => {
item.forEach((value: string | number, index: number) => {
if(typeof value === 'number') {
@@ -158,48 +139,77 @@ export default function RainStat() {
// sidoSummaryList와 rainDetailList를 합쳐서 엑셀 데이터 생성
const excelData = [...sidoTotalSummary, ...sidoSummaryList, ...summaryExcelData];
+
+ console.log(' excelData ', excelData)
excelDownload(
excelData as unknown as [][],
"빗물이용시설 통계",
"sample_rainStats.xlsx",
- "A1:V3",
+ "A1:O3",
4
);
}
const excelClick = () => {
+ if(bdstTable){
+ const tbData = bdstTable .map((item: RainStatProps) => {
+ return {
+ "시도": item.cityText,
+ "개소": item.tmp,
+ "설치비(백만원)": item.instlCst,
+ "저류조용량(m³/년)": item.dtfcltCpct,
+ "연간사용량(m³/년)": item.wtrUsqty,
+ "조경용수": item.lndwtr,
+ "청소화장실용수": item.cleanToilUswtr,
+ "세척살수용수": item.resn,
+ "농업용수": item.farmUswtr,
+ "공업용수": item.indstUswtr,
+ "친수용수": item.hydUswtr,
+ "기타": item.ithlEtcUswtr,
+ "연간운영비(백만원/년)": item.anlOperCst,
+ };
+ })
downloadExcel({
- data: (exData as unknown as JSON[]) ?? [],
+ data: (tbData as unknown as JSON[]) ?? [],
fileName: "재이용통계",
sheetNameArray: ["Sheet1"],
headerRange: "A1:M1"
})
+ }else{
+ toast.error(t('excelDownErrMsg'));
+ }
}
-
- useEffect(() => {
- const transExcel = Array.isArray(excelList) ? excelList : [excelList];
- const excelData = tableData(transExcel, { code });
- const tbData = Array.isArray(excelData)
- ? excelData.map((item: RainStatProps) => {
- return {
- "시도": item.cityText,
- "개소": item.tmp,
- "설치비(백만원)": item.instlCst,
- "저류조용량(m³/년)": item.dtfcltCpct,
- "연간사용량(m³/년)": item.wtrUsqty,
- "조경용수": item.lndwtr,
- "청소화장실용수": item.cleanToilUswtr,
- "세척살수용수": item.resn,
- "농업용수": item.farmUswtr,
- "공업용수": item.indstUswtr,
- "친수용수": item.hydUswtr,
- "기타": item.ithlEtcUswtr,
- "연간운영비(백만원/년)": item.anlOperCst,
- };
- })
- : [];
- setExData(tbData);
- }, [code, excelList])
+
+ // useEffect(() => {
+ // if(excelList && excelList.length>0){
+ // console.log('excelList ', excelList)
+
+ // const transExcel = Array.isArray(excelList) ? excelList : [excelList];
+ // const excelData = tableData(transExcel, { code });
+ // const tbData = Array.isArray(excelData)
+ // ? excelData
+ // .filter((item: RainStatProps) => item.cityText !== '없음')
+ // .map((item: RainStatProps) => {
+ // return {
+ // "시도": item.cityText,
+ // "개소": item.tmp,
+ // "설치비(백만원)": item.instlCst,
+ // "저류조용량(m³/년)": item.dtfcltCpct,
+ // "연간사용량(m³/년)": item.wtrUsqty,
+ // "조경용수": item.lndwtr,
+ // "청소화장실용수": item.cleanToilUswtr,
+ // "세척살수용수": item.resn,
+ // "농업용수": item.farmUswtr,
+ // "공업용수": item.indstUswtr,
+ // "친수용수": item.hydUswtr,
+ // "기타": item.ithlEtcUswtr,
+ // "연간운영비(백만원/년)": item.anlOperCst,
+ // };
+ // })
+ // : [];
+ // setExData(tbData);
+ // }
+ // }, [code, excelList])
useEffect(() => {
const transData = Array.isArray(rainStatList) ? rainStatList : [rainStatList];
@@ -208,11 +218,13 @@ export default function RainStat() {
? data.map((item: RainStatProps) => {
return {
...item,
- ctpvCd: item.cityText
+ ctpvCd: item.cityText==='전체'?'전국': item.cityText,
+ cityText: item.cityText==='전체'?'전국': item.cityText,
};
}).filter((item: RainStatProps) => item.cityText !== '없음')
: [];
+
setBdstTable(tbData);
}, [code, rainStatList]);
@@ -237,7 +249,7 @@ export default function RainStat() {
/>
- {searchRainStatList(searchYear);}}>
+ { searchRainStatList(searchYear ,code.cityCd); }}>
조회
excelClick()}>
diff --git a/apps/wr/app/stats/rswtStat/page.tsx b/apps/wr/app/stats/rswtStat/page.tsx
index c200d0319..99a8bc4f3 100644
--- a/apps/wr/app/stats/rswtStat/page.tsx
+++ b/apps/wr/app/stats/rswtStat/page.tsx
@@ -14,48 +14,26 @@ import {
import ListDiv from "@common/business_components/ui/list_div";
import { Button } from "@common/components/ui";
import { useEffect, useState } from "react";
+import toast, { Toaster } from "react-hot-toast";
+import { useTranslation } from "react-i18next";
export default function RswtStat() {
const { code, rswtStat, searchRswtStatList } = useWrStore((state) => state);
- const { rswtStatList, excelList, rswtDetailList } = rswtStat;
+ const { rswtStatList, rswtDetailList } = rswtStat;
const [rswtTable, setRswtTable] = useState();
const [searchYear, setSearchYear] = useState(
String(new Date().getFullYear())
);
- const [excelData, setExceData] = useState[]>();
+ const { t } = useTranslation('base');
useEffect(() => {
- searchRswtStatList(searchYear)
- }, [searchRswtStatList])
+ searchRswtStatList(searchYear, code.cityCd)
+ }, [searchRswtStatList, code.cityCd])
const excelClick = () => {
- downloadExcel({
- data: (excelData as unknown as JSON[]) ?? [],
- fileName: "중수도재이용통계",
- sheetNameArray: ["Sheet1"],
- headerRange: "A1:N1"
- })
- }
- useEffect(() => {
- const transData = Array.isArray(rswtStatList) ? rswtStatList : [rswtStatList];
- const data = tableData(transData, { code });
- const tbData = Array.isArray(data)
- ? data.map((item: RswtStatProps) => {
- return {
- ...item,
- ctpvCd: item.cityText
- };
- }).filter((item: RswtStatProps) => item.cityText !== '없음')
- : [];
- setRswtTable(tbData);
- }, [code, rswtStatList])
-
- useEffect(() => {
- const transExcel = Array.isArray(excelList) ? excelList : [excelList];
- const exData = tableData(transExcel, { code });
- const tbData = Array.isArray(exData) ?
- exData.map((item: RswtStatProps) => {
+ if (rswtTable) {
+ const data = rswtTable.map((item: RswtStatProps) => {
return {
"시도": item.cityText,
"개소": item.ctpvCnt,
@@ -73,17 +51,44 @@ export default function RswtStat() {
"기타": item.ithlEtcUswtr,
"연간운영비(백만원/년)": item.anlOperCst,
};
- }) : [];
- setExceData(tbData);
- }, [code, excelList])
+ })
+
+ downloadExcel({
+ data: (data as unknown as JSON[]) ?? [],
+ fileName: "중수도재이용통계",
+ sheetNameArray: ["Sheet1"],
+ headerRange: "A1:N1"
+ })
+ } else {
+ toast.error(t("excelDownErrMsg"))
+ }
+ }
+
+ useEffect(() => {
+ const transData = Array.isArray(rswtStatList) ? rswtStatList : [rswtStatList];
+ const cityData = tableData(transData, { code });
+ const tbData = Array.isArray(cityData)
+ ? cityData.map((item: RswtStatProps) => {
+ return {
+ ...item,
+ ctpvCd: item.cityText === '전체' ? '전국' : item.cityText,
+ cityText: item.cityText === '전체' ? '전국' : item.cityText
+ };
+ }) : [];
+
+ setRswtTable(tbData);
+ }, [code, rswtStatList]);
+
+ const excelDetailDownLoad = () => {
- const excelDetailDownLoad=() =>{
const sidoList = new Set();
const sidoDataMap = new Map(); // 시도별 데이터를 저장할 Map
const sidoDetailMap = new Map(); // 시도별 상세 데이터를 저장할 Map
// 먼저 시도별 상세 데이터를 그룹화
- rswtDetailList.forEach((item: RswtStatProps[]) => {
+ const transformedRswtDetailList = rswtDetailList.map((originItem: RswtStatProps[]) => {
+ // rswtDetailList.forEach((item: RswtStatProps[]) => {
+ const item = [...originItem]; // 원본 복사
const sidoVal = item.at(0)?.toString().trim();
const sigunVal = item.at(1)?.toString().trim();
let sidoText = '';
@@ -94,7 +99,7 @@ export default function RswtStat() {
sidoText = sido?.text || '';
sigunText = sigun?.text || '';
-
+
// 시도, 시군구 코드를 텍스트로 변환하여 데이터에 할당
if (item.length > 0) {
item[0] = sidoText as unknown as RswtStatProps;
@@ -103,7 +108,7 @@ export default function RswtStat() {
item[1] = sigunText as unknown as RswtStatProps;
}
if (item.length > 2) {
- item[2] = sidoText+' '+sigunText as unknown as RswtStatProps;
+ item[2] = sidoText + ' ' + sigunText as unknown as RswtStatProps;
}
// 시도별 상세 데이터 수집
@@ -113,7 +118,7 @@ export default function RswtStat() {
}
sidoDetailMap.get(sidoText)!.push(item as unknown as (string | number)[]);
}
-
+
// 시도별 합계 데이터 수집
if (sidoText && !sidoList.has(sidoText)) {
sidoList.add(sidoText);
@@ -125,50 +130,51 @@ export default function RswtStat() {
}
sidoDataMap.set(sidoText, initialData);
}
+ return item;
});
// 시도별 합계 계산
- rswtDetailList.forEach((item: RswtStatProps[]) => {
+ transformedRswtDetailList.forEach((item: RswtStatProps[]) => {
const sidoText = item[0]?.toString();
if (sidoText && sidoDataMap.has(sidoText)) {
const sidoData = sidoDataMap.get(sidoText)!;
// 각 컬럼의 값을 합계에 더하기 (1번 인덱스부터 시작)
for (let i = 1; i < item.length && i < sidoData.length; i++) {
- if(i == 2){
+ if (i == 2) {
sidoData[i] = '합계';
- } else if(i == 3){
+ } else if (i == 3) {
// 해당 시도의 데이터 개수를 계산
- const sidoDataCount = rswtDetailList.filter((data: unknown[]) =>
+ const sidoDataCount = rswtDetailList.filter((data: unknown[]) =>
Array.isArray(data) && data.length > 0 && String(data[0]) === sidoText
).length;
sidoData[i] = sidoDataCount;
- } else if( i == 4){
+ } else if (i == 4) {
sidoData[i] = '';
- } else if(i == 6){
+ } else if (i == 6) {
// 법정 대상 건축물 개수 (인덱스 6이 'Y'인 경우)
- const bumCnt = rswtDetailList.filter((data: unknown[]) =>
+ const bumCnt = rswtDetailList.filter((data: unknown[]) =>
Array.isArray(data) && data.length > 6 && String(data[0]) === sidoText
).filter((data: unknown[]) => String(data[6]) === '대상').length;
sidoData[i] = bumCnt;
- } else if(i==9){
+ } else if (i == 9) {
const value = Number(item[9]) || 0;
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
- } else if(i==10){
+ } else if (i == 10) {
const value = Number(item[10]) || 0;
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
- } else if(i==11){
+ } else if (i == 11) {
const value = Number(item[11]) || 0;
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
- } else if(i==12){
+ } else if (i == 12) {
const value = Number(item[12]) || 0;
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
- }else if(i==13){
+ } else if (i == 13) {
const value = Number(item[13]) || 0;
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
- } else if(i==14){
+ } else if (i == 14) {
const value = Number(item[14]) || 0;
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
- } else if(i==16){
+ } else if (i == 16) {
const value = Number(item[16]) || 0;
sidoData[i] = (Number(sidoData[i]) + value) as string | number;
} else {
@@ -177,15 +183,15 @@ export default function RswtStat() {
}
}
});
-
+
// 시도별로 합계와 상세 데이터를 순서대로 배치
const summaryExcelData: (string | number)[][] = [];
-
+
// 시도별로 순회하면서 합계와 상세 데이터를 추가
Array.from(sidoList).forEach((sidoText) => {
const sidoSummary = sidoDataMap.get(sidoText);
const sidoDetails = sidoDetailMap.get(sidoText) || [];
-
+
if (sidoSummary) {
// 시도 합계 데이터 추가
summaryExcelData.push(sidoSummary);
@@ -197,10 +203,10 @@ export default function RswtStat() {
});
const sidoSummaryList = Array.from(sidoDataMap.values());
- const sidoTotalSummary = [['전체', '', '합계', 0, '', '', 0, '', '', 0, 0, 0, 0, 0, 0, '', 0]];
+ const sidoTotalSummary = [['전국', '', '합계', 0, '', '', 0, '', '', 0, 0, 0, 0, 0, 0, '']];
sidoSummaryList.forEach((item: (string | number)[]) => {
item.forEach((value: string | number, index: number) => {
- if(typeof value === 'number') {
+ if (typeof value === 'number') {
if (sidoTotalSummary[0] && index < sidoTotalSummary[0].length) {
sidoTotalSummary[0][index] = Number(sidoTotalSummary[0][index]) + Number(value);
}
@@ -209,13 +215,13 @@ export default function RswtStat() {
});
// sidoSummaryList와 rainDetailList를 합쳐서 엑셀 데이터 생성
- const excelData = [...sidoTotalSummary,...sidoSummaryList, ...summaryExcelData];
+ const excelData = [...sidoTotalSummary, ...sidoSummaryList, ...summaryExcelData];
excelDownload(
excelData as unknown as [][],
"중수도시설 통계",
"sample_rswtStats.xlsx",
- "A1:Q3",
+ "A1:P3",
4
);
}
@@ -242,7 +248,7 @@ export default function RswtStat() {
className=""
size="sm"
onClick={() => {
- searchRswtStatList(searchYear)
+ searchRswtStatList(searchYear, code.cityCd)
}}
>
조회
@@ -283,6 +289,7 @@ export default function RswtStat() {