From 475097d3722a4503849f061b6793e39ea7831563 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 5 Mar 2026 16:11:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/WarMap.tsx | 62 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/src/components/WarMap.tsx b/src/components/WarMap.tsx index c696a01..a1eaf27 100644 --- a/src/components/WarMap.tsx +++ b/src/components/WarMap.tsx @@ -1,4 +1,4 @@ -import { useMemo, useEffect, useRef, useCallback } from 'react' +import { useMemo, useEffect, useRef, useCallback, useState } from 'react' import Map, { Source, Layer } from 'react-map-gl' import type { MapRef } from 'react-map-gl' import type { Map as MapboxMap } from 'mapbox-gl' @@ -215,6 +215,7 @@ export function WarMap() { const israelPathsRef = useRef<[number, number][][]>([]) const hezbollahPathsRef = useRef<[number, number][][]>([]) const hormuzPathsRef = useRef<[number, number][][]>([]) + const [legendOpen, setLegendOpen] = useState(true) const situation = useReplaySituation() const { isReplayMode, playbackTime } = usePlaybackStore() const { usForces, iranForces, conflictEvents = [] } = situation @@ -225,6 +226,13 @@ export function WarMap() { const usLocs = (usForces.keyLocations || []) as KeyLoc[] const irLocs = (iranForces.keyLocations || []) as KeyLoc[] + // 移动端默认收起右侧图例,避免遮挡;桌面端默认展开 + useEffect(() => { + if (typeof window === 'undefined') return + const isMobile = window.matchMedia('(max-width: 640px)').matches + if (isMobile) setLegendOpen(false) + }, []) + const { usNaval, usBaseOp, usBaseDamaged, usBaseAttacked, labelsGeoJson } = useMemo(() => { const naval: GeoJSON.Feature[] = [] const op: GeoJSON.Feature[] = [] @@ -897,6 +905,58 @@ export function WarMap() { 库尔德武装 + {/* 右侧图例模块:可收纳悬浮按钮 */} +
+ {legendOpen ? ( +
+
+ 战场图例 + +
+
+ + 伊朗西部防御线 +
+
+ + 库尔德攻势 / 进攻箭头 +
+
+ + 美国/盟军打击目标 +
+
+ + 霍尔木兹海峡交战区 +
+
+ + 美军基地 / 低烈度 GDELT +
+
+ + 伊朗遭袭目标 / 高烈度事件 +
+
+ ) : ( + + )} +