diff --git a/apps/sn/app/(map-layout)/map/components/waterRisk/WaterRiskPopupPage.tsx b/apps/sn/app/(map-layout)/map/components/waterRisk/WaterRiskPopupPage.tsx index fa2e8cf84..362d69f0f 100644 --- a/apps/sn/app/(map-layout)/map/components/waterRisk/WaterRiskPopupPage.tsx +++ b/apps/sn/app/(map-layout)/map/components/waterRisk/WaterRiskPopupPage.tsx @@ -174,9 +174,16 @@ const postMessageToOpener = ( const getRiskBadgeClassName = (riskStatus: "DANGER" | "NORMAL") => riskStatus === "DANGER" ? "sn-popup-badge-danger" : "sn-popup-badge-normal"; -/** 날짜까지 포함해 과거 이력에서도 결과 행 선택을 유일하게 식별한다. */ +/** 동일 날짜·지역에 여러 강우이벤트가 있어도 실행별 행 키가 겹치지 않게 식별한다. */ const buildResultRowKey = (row: WaterRiskResultRow) => - `${row.analysisDate ?? ""}:${row.ctpvCd ?? ""}:${row.sggCd ?? ""}:${row.areaId}`; + [ + row.analysisDate ?? "", + row.rainStartedAt ?? "", + row.analysisBaseAt ?? "", + row.ctpvCd ?? "", + row.sggCd ?? "", + row.areaId, + ].join(":"); /** 실제 통수위험 API를 조회하고 선택 결과를 부모 지도에 전달하는 팝업이다. */ export default function WaterRiskPopupPage(_props: WindowPopupContentProps) { diff --git a/apps/sn/app/(map-layout)/map/page.tsx b/apps/sn/app/(map-layout)/map/page.tsx index 95bd5aa08..d90df246e 100644 --- a/apps/sn/app/(map-layout)/map/page.tsx +++ b/apps/sn/app/(map-layout)/map/page.tsx @@ -3432,6 +3432,17 @@ const Map = () => { [selectedWaterRiskApiResult], ); + // 지도카드는 실제 GIS geometry까지 결합된 mapView 위험상태를 목록 상태보다 우선한다. + const selectedWaterRiskDisplayStatus = useMemo< + WaterRiskResultRow["riskStatus"] + >( + () => + selectedWaterRiskMapView?.riskStatus ?? + selectedWaterRiskResultRow?.riskStatus ?? + "NORMAL", + [selectedWaterRiskMapView?.riskStatus, selectedWaterRiskResultRow?.riskStatus], + ); + /** 선택 영역 오른쪽에 중점관리지역 강우·침수 요약카드를 배치한다. */ const syncWaterRiskInfoCardPosition = useCallback(() => { const map = gisMaps.current; @@ -8790,20 +8801,25 @@ const Map = () => { {buildWaterRiskStatusLabel( - selectedWaterRiskResultRow.riskStatus, + selectedWaterRiskDisplayStatus, )}
- capacity 0.8 초과 관로 존재 시{" "} - 위험, 없으면{" "} - 정상 +
+ GIS 매핑 관로 중 Capacity 0.8 이상이 1개라도 있으면{" "} + 위험, 없으면{" "} + 정상 +
+
+ 맨홀 침수유량은 지역 위험 판정에서 제외 +
diff --git a/apps/sn/docs/작업검증/SFR-011-007-통수위험분석/002-qa-SFR-011-007-통수위험분석-통합검증결과.md b/apps/sn/docs/작업검증/SFR-011-007-통수위험분석/002-qa-SFR-011-007-통수위험분석-통합검증결과.md index ee5442281..4d2fee28b 100644 --- a/apps/sn/docs/작업검증/SFR-011-007-통수위험분석/002-qa-SFR-011-007-통수위험분석-통합검증결과.md +++ b/apps/sn/docs/작업검증/SFR-011-007-통수위험분석/002-qa-SFR-011-007-통수위험분석-통합검증결과.md @@ -145,7 +145,7 @@ - 분석기준시간 라벨·값이 현재 탭 행 오른쪽 끝에 표시되고 검색패널에서 제거된 것을 정적 확인했다. - 행 클릭 성공 안내문 제거와 오류 메시지 조건부 렌더링을 확인했다. - 보령 동대궁촌의 목록 최대 침수유량과 지도카드 값이 모두 `121.48m³/s`로 일치함을 실 API로 확인했다. -- 지도카드 위험/정상 판정 설명과 `capacity > 0.8` 서비스 기준이 일치한다. +- 지도카드 안내는 GIS 매핑 관로의 `Capacity >= 0.8`을 지역 위험 기준으로 표시하고, 맨홀 침수유량은 지역 위험 판정에서 제외됨을 명시한다. - 페이지별 데이터 길이·스크롤바에 따른 전체표 확대축소를 제거하고 `1320px` 고정폭·10개 열 비율·긴 행정명 말줄임 처리를 확인했다. - 팝업 컴포넌트에 `window.resizeTo` 호출이 없고 창 크기는 `popupDefinitions`의 `1380×900`으로만 결정되는 것을 정적 확인했다. 검색·결과영역의 overflow 숨김과 결과영역 좌우 여백 보정은 유지한다. diff --git a/apps/sn/docs/작업내용/SFR-011-007-통수위험분석/001-fe-SFR-011-007-통수위험분석-통합구현기록.md b/apps/sn/docs/작업내용/SFR-011-007-통수위험분석/001-fe-SFR-011-007-통수위험분석-통합구현기록.md index e0e0b5521..b7195c50a 100644 --- a/apps/sn/docs/작업내용/SFR-011-007-통수위험분석/001-fe-SFR-011-007-통수위험분석-통합구현기록.md +++ b/apps/sn/docs/작업내용/SFR-011-007-통수위험분석/001-fe-SFR-011-007-통수위험분석-통합구현기록.md @@ -216,7 +216,7 @@ - 분석기준시간은 DB 결과와 독립된 현재 정시이므로 진행중 데이터가 없어도 사라지지 않는다. 입력창으로 오해하지 않도록 테두리·배경 없이 글씨만 표시한다. - `분석기준시간` 라벨과 시각은 현재 탭 행의 오른쪽 끝으로 이동하고 검색패널에는 중점관리지역 선택과 우측 조회 버튼만 유지한다. - 행 선택 성공 후 왼쪽 아래 안내문은 제거하고 오류 메시지만 조건부 표시한다. -- 지도 요약카드에는 capacity 0.8 초과 관로 존재 여부가 위험/정상을 결정한다는 설명을 추가했다. +- 지도 요약카드에는 GIS 매핑 관로 중 Capacity 0.8 이상이 1개라도 있으면 위험이며, 맨홀 침수유량은 지역 위험 판정에서 제외된다는 설명을 표시한다. - 결과표 `No.`를 `No`로 바꾸고 표 전체를 `1320px` 고정폭으로 지정한 뒤 `table-fixed`·`colgroup` 비율을 적용해 1·2페이지의 절대 열 너비를 동일하게 고정했다. - 공통 그리드 교체 후 검색영역과 결과영역의 가로·세로 overflow를 숨기고 결과영역 좌우 여백을 보정해 팝업 내부 스크롤바가 나타나지 않게 했다.