From 166dea2b868a12bd0ecfe060e831a85f7644e4ee Mon Sep 17 00:00:00 2001 From: ljpark Date: Mon, 31 Aug 2026 11:34:19 +0900 Subject: [PATCH] =?UTF-8?q?sn:=20=EC=B9=A8=EC=88=98=ED=9D=94=EC=A0=81?= =?UTF-8?q?=EB=8F=84=20layer=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sn/.env.local | 4 ++-- .../map/components/fldngHstry/fldngHstryTypes.ts | 4 ++++ apps/sn/app/(map-layout)/map/page.tsx | 6 ++++-- packages/common/business_components/src/ui/map/Gis.js | 2 ++ packages/common/business_components/src/ui/map/GisTree.js | 5 ++++- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/apps/sn/.env.local b/apps/sn/.env.local index dce96bf40..3d871b007 100644 --- a/apps/sn/.env.local +++ b/apps/sn/.env.local @@ -12,8 +12,8 @@ NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr NEXT_PUBLIC_NGII_PARAM = 04trYP9_xwLAfALjwZ-B8g&service=WMTS&request=GetTile&version=1.0.0&format=image/png&layer=korean_map&style=korean&tilematrixset=korean&tilematrix={z}&tilecol={x}&tilerow={y} SERVER_API_URL = http://dev.onasys.co.kr:8000 -SEWERAGE_API_URL = http://localhost:8883 -# SEWERAGE_API_URL = http://con.mind-one.co.kr:11083 +# SEWERAGE_API_URL = http://localhost:8883 +SEWERAGE_API_URL = http://con.mind-one.co.kr:11083 DC_URL = https://apigateway.apps.rsonesoft.com # NEXT_PUBLIC_CM_LOGIN_PAGE_URL = http://dev.onasys.co.kr:3000/auth/login NEXT_PUBLIC_CM_LOGIN_PAGE_URL = /auth/login diff --git a/apps/sn/app/(map-layout)/map/components/fldngHstry/fldngHstryTypes.ts b/apps/sn/app/(map-layout)/map/components/fldngHstry/fldngHstryTypes.ts index 2554eae12..28f176144 100644 --- a/apps/sn/app/(map-layout)/map/components/fldngHstry/fldngHstryTypes.ts +++ b/apps/sn/app/(map-layout)/map/components/fldngHstry/fldngHstryTypes.ts @@ -7,6 +7,7 @@ export const FLDNG_HSTRY_ROW_SELECT_MESSAGE = "SN_FLOOD_HISTORY_ROW_SELECT"; export const FLOOD_HISTORY_LAYER_TYPE = "tb_ms_fldng_wtlv_map"; export const FLOOD_HISTORY_PREVIEW_LAYER_TYPE = "tb_sn_flood_trace_mock"; export const FLOOD_HISTORY_LAYER_NAME = "침수흔적위선"; +export const FLOOD_HISTORY_ROOT_NAME = "침수흔적도"; export const FLOOD_HISTORY_AREA_LAYER_ID = "SN_FLOOD_HISTORY_AREA"; export const FLOOD_HISTORY_DEPTH_LAYER_ID = "SN_FLOOD_HISTORY_DEPTH"; export const FLDNG_HSTRY_PAGE_SIZE = 10; @@ -498,6 +499,9 @@ export const isFldngHstryNode = (node: any) => { ); }; +export const isFldngHstryRootNode = (node: any) => + resolveFldngHstryNodeName(node) === FLOOD_HISTORY_ROOT_NAME; + export const isFloodHistoryNode = isFldngHstryNode; export const FLOOD_HISTORY_ROW_SELECT_MESSAGE = FLDNG_HSTRY_ROW_SELECT_MESSAGE; export const FLOOD_HISTORY_PAGE_SIZE = FLDNG_HSTRY_PAGE_SIZE; diff --git a/apps/sn/app/(map-layout)/map/page.tsx b/apps/sn/app/(map-layout)/map/page.tsx index fe387310a..f56934c44 100644 --- a/apps/sn/app/(map-layout)/map/page.tsx +++ b/apps/sn/app/(map-layout)/map/page.tsx @@ -150,6 +150,7 @@ import { FLOOD_HISTORY_POPUP_KEY, FLDNG_HSTRY_ROW_SELECT_MESSAGE, isFldngHstryNode, + isFldngHstryRootNode, type FldngHstryItem, } from "./components/fldngHstry/fldngHstryTypes"; import { @@ -6410,7 +6411,7 @@ const Map = () => { openFloodDngrMapPopupWindow(); return false; } - if (isFldngHstryNode(node)) { + if (isFldngHstryRootNode(node)) { openFldngHstryPopupWindow(); return false; } @@ -9065,8 +9066,9 @@ const Map = () => { isSinkholeRootNode(node) || isSbmrgDngrMapRootNode(node) || isFloodDngrMapRootNode(node) || - isFldngHstryNode(node) + isFldngHstryRootNode(node) } + layerLegendIconVisible={(node: any) => !isFldngHstryRootNode(node)} layerIconRequiresChecked={false} defaultZoom={7.5} defaultLonLat={[129, 36.3]} diff --git a/packages/common/business_components/src/ui/map/Gis.js b/packages/common/business_components/src/ui/map/Gis.js index 36e5635e4..a63afb048 100644 --- a/packages/common/business_components/src/ui/map/Gis.js +++ b/packages/common/business_components/src/ui/map/Gis.js @@ -60,6 +60,7 @@ function Gis({ inlineLayerSettingView, treeSectionClassName = "", layerIconVisible, + layerLegendIconVisible, // 목록·액션 아이콘이 지도 레이어 체크를 선행 조건으로 요구하는지 여부다. layerIconRequiresChecked = true, isPlaying = false, @@ -316,6 +317,7 @@ function Gis({ }} imageVisible={imgVisble} layerIconVisible={layerIconVisible} + layerLegendIconVisible={layerLegendIconVisible} layerIconRequiresChecked={layerIconRequiresChecked} sinkholeLegendIconVisible={sinkholeLegendIconVisible} isPlaying={isPlaying} diff --git a/packages/common/business_components/src/ui/map/GisTree.js b/packages/common/business_components/src/ui/map/GisTree.js index 7f7b01ceb..16636c596 100644 --- a/packages/common/business_components/src/ui/map/GisTree.js +++ b/packages/common/business_components/src/ui/map/GisTree.js @@ -30,6 +30,7 @@ import GisApp from "./lib/gis.core"; * - onProgressChange(total, current): 애니메이션 진행상태 콜백 * - layerSettingView: (선택) 좌측 레이어 트리 하단에 표시할 설정 영역 * - layerIconVisible: (선택) 레이어 행 우측 액션 아이콘 노출 여부를 결정하는 함수 + * - layerLegendIconVisible: (선택) 레이어 행 범례 아이콘 노출 여부를 결정하는 함수 * - layerIconRequiresChecked: (선택) 액션 실행 전에 레이어 체크를 요구할지 여부 * - detachedToggleButton: (선택) 접기/펼치기 버튼을 패널 밖 고정 핸들로 노출할지 여부 */ @@ -48,6 +49,7 @@ export default React.memo(function GisTree({ onProgressChange = () => { }, layerSettingView: LayerSettingView = null, layerIconVisible, + layerLegendIconVisible = () => true, layerIconRequiresChecked = true, sinkholeLegendIconVisible = false, inlineLayerSettingView, @@ -595,7 +597,8 @@ export default React.memo(function GisTree({ String(node.id) === "SN_SINKHOLE" || nodeLabel === "지반침하정보"; const hideTreeLegendIcon = - (isSinkholeRootTreeNode && !sinkholeLegendIconVisible); + (isSinkholeRootTreeNode && !sinkholeLegendIconVisible) || + !layerLegendIconVisible(node); const showLayerActionButton = layerIconVisible?.(node); const showLayerActionIcon = depth > 0 && imageVisible;