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();