From 0b4536113537caced92d4a3ee1de294dfa26e1ae Mon Sep 17 00:00:00 2001 From: ljpark Date: Wed, 26 Aug 2026 11:11:18 +0900 Subject: [PATCH] =?UTF-8?q?sn:=20=EC=B9=A8=EC=88=98=EC=98=88=EC=B8=A1?= =?UTF-8?q?=ED=98=84=ED=99=A9=20=ED=8C=9D=EC=97=85=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=A7=80=EB=8F=84=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sn/app/(map-layout)/map/page.tsx | 5 +++++ .../fldngPredcPrst/ui/FldngPredcPrstPopupContent.tsx | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/sn/app/(map-layout)/map/page.tsx b/apps/sn/app/(map-layout)/map/page.tsx index 94da6bc7e..86a3afdf6 100644 --- a/apps/sn/app/(map-layout)/map/page.tsx +++ b/apps/sn/app/(map-layout)/map/page.tsx @@ -3617,6 +3617,11 @@ const Map = () => { FLOOD_DNGR_MAP_LAYER_TYPE ) return; + // 침수예측현황에서 바로 이동한 경우 레이어가 꺼져 있을 수 있으므로 자동 활성화한다. + if (layer.getVisible?.() === false) { + layer.setVisible?.(true); + layer.getSource?.()?.refresh?.(); + } const source = layer.getSource?.(); if (!source?.getFeatures) return; selectLoadedGroupFeatures(source); diff --git a/apps/sn/src/features/fldngPredcPrst/ui/FldngPredcPrstPopupContent.tsx b/apps/sn/src/features/fldngPredcPrst/ui/FldngPredcPrstPopupContent.tsx index 2635ab52c..c9eae02cb 100644 --- a/apps/sn/src/features/fldngPredcPrst/ui/FldngPredcPrstPopupContent.tsx +++ b/apps/sn/src/features/fldngPredcPrst/ui/FldngPredcPrstPopupContent.tsx @@ -8,7 +8,7 @@ import { } from "@common/business_components"; import { Button } from "@common/components"; -import { getBlobData, getRawJson } from "@/components/lib/api"; +import { getBlobData, getData, getRawJson } from "@/components/lib/api"; import { fileDownload } from "@/components/lib/utils/fileDownload"; import LoadingOverlay from "@/components/ui/LoadingBar"; import { windowPopupDefinitions } from "@/features/windowPopup/model/popupDefinitions"; @@ -57,10 +57,10 @@ const PAGE_SIZE = 10; const MAP_FREQUENCIES = new Set([30, 50, 80, 100]); const FREQUENCY_OPTIONS = [30, 50, 80, 100] as const; -/** 도시침수지도 DB의 3자리 빈도 코드로 변환한다. 지도는 100년까지만 제공하므로 그 이상은 100년으로 제한한다. */ +/** 도시침수지도 DB의 3자리 빈도 코드로 변환한다. 30년 이하는 030, 100년 초과는 100으로 제한한다. */ const toFloodMapFrequencyCode = (value: number) => { if (!Number.isFinite(value) || value <= 0) return null; - const normalized = value > 100 ? 100 : value; + const normalized = value <= 30 ? 30 : value > 100 ? 100 : value; if (!MAP_FREQUENCIES.has(normalized)) return null; return String(normalized).padStart(3, "0"); }; @@ -328,7 +328,8 @@ export default function FldngPredcPrstPopupContent() { sggCd: row.sggCd, sbmrgFrqExpln, }); - const extentData = await getRawJson( + // 백엔드 공통 응답({ data: ... })의 data 영역을 반환하는 API 헬퍼를 사용한다. + const extentData = await getData( `/sewerage-service/api/v1/fldng/flood-dngr-map/group/extent?${params.toString()}`, ); const extent = [ @@ -347,13 +348,14 @@ export default function FldngPredcPrstPopupContent() { }, window.location.origin, ); + alert("도시침수지도를 켜고 선택한 도시침수지도의 시군구·빈도로 이동하였습니다."); window.opener.focus(); } catch (error) { console.error("침수예측현황 지도 이동 중 오류:", error); alert( error instanceof Error && error.message.includes("위치 정보") ? error.message - : "도시침수지도 이동에 실패했습니다.", + : "도시침수지도 이동에 실패하였습니다.", ); } finally { setLoading(false);