From a7c4d251a203a7fa1656507d94b349767154bf26 Mon Sep 17 00:00:00 2001 From: bicochan Date: Mon, 23 Mar 2026 16:44:53 +0900 Subject: [PATCH] =?UTF-8?q?[st]=20feat:=20IMR=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=97=91=EC=85=80=20=EB=8B=A4=EC=9A=B4=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../verification/ImrVerificationHistory.tsx | 37 ++++++++++++++----- .../st/src/entities/statistics/api/queries.ts | 8 +--- .../api/statistics-analysis-result-api.ts | 11 ++++++ 3 files changed, 41 insertions(+), 15 deletions(-) diff --git a/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx b/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx index 583f141dc..852d21d08 100644 --- a/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx +++ b/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx @@ -90,6 +90,7 @@ const ImrVerificationHistory = () => { useState(null); const [selectedDetail, setSelectedDetail] = useState(null); + const [isDownloading, setIsDownloading] = useState(false); // Area B Grid State const [gridRowData, setGridRowData] = useState< @@ -230,6 +231,29 @@ const ImrVerificationHistory = () => { setDateRange(defaultRange); }; + const handleDownload = async () => { + if (!selectedHistory || isDownloading) return; + setIsDownloading(true); + + try { + const blob = await stAnlsRsltApi.downloadExcelImr( + selectedHistory.anlsSn, + ); + const url = window.URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = `IMR_분석결과.xlsx`; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + } catch (error) { + console.error("Failed to download IMR excel", error); + } finally { + setIsDownloading(false); + } + }; + const chartOptions: ChartOptions<"line"> = useMemo( () => ({ responsive: true, @@ -442,16 +466,11 @@ const ImrVerificationHistory = () => { diff --git a/apps/st/src/entities/statistics/api/queries.ts b/apps/st/src/entities/statistics/api/queries.ts index 9a389bcbf..0f0a9b0fb 100644 --- a/apps/st/src/entities/statistics/api/queries.ts +++ b/apps/st/src/entities/statistics/api/queries.ts @@ -14,11 +14,7 @@ export const useStAnlsSidoCombo = () => { export const useStAnlsSigunguCombo = (sidoCd: string) => { return useQuery({ - queryKey: [ - ENDPOINT.STATVERIFY_SERVICE.ST_ANLS_MST, - "sigungu", - sidoCd, - ], + queryKey: [ENDPOINT.STATVERIFY_SERVICE.ST_ANLS_MST, "sigungu", sidoCd], queryFn: () => stAnlsMstApi.getSigunguCombo(sidoCd), enabled: Boolean(sidoCd), }); @@ -40,7 +36,7 @@ export const useStAnlsRsltList = ( anlsSn, vrfcTrgtSn: Number(vrfcTrgtSn), page: 0, - size: 1000, + size: 15000, sort: "admdstCd,asc", }), enabled: !!anlsSn && !!vrfcTrgtSn, diff --git a/apps/st/src/entities/statistics/api/statistics-analysis-result-api.ts b/apps/st/src/entities/statistics/api/statistics-analysis-result-api.ts index fa8983233..2e62fab3c 100644 --- a/apps/st/src/entities/statistics/api/statistics-analysis-result-api.ts +++ b/apps/st/src/entities/statistics/api/statistics-analysis-result-api.ts @@ -60,6 +60,17 @@ export class StAnlsRsltApiService { return response.data; } + + public async downloadExcelImr(anlsSn: number): Promise { + const response = await client.get( + `${ENDPOINT.STATVERIFY_SERVICE.ST_ANLS_RSLT}/excel-down/imr/${anlsSn}`, + { + responseType: "blob", + }, + ); + + return response.data; + } } export const stAnlsRsltApi = new StAnlsRsltApiService();