From cf415a1150ad151576baef367ed7d226dc27e336 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Mon, 25 May 2026 19:09:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=B6=E5=8C=BATab=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=87=AA=E9=80=89=EF=BC=9AlocalStorage?= =?UTF-8?q?=E6=8C=81=E4=B9=85=E5=8C=96=EF=BC=8C=E8=87=B3=E5=B0=91=E4=BF=9D?= =?UTF-8?q?=E7=95=99=E4=B8=80=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit visibleRegions Set + toggleRegion guard(size<=1)。齿轮按钮弹出checkbox选择器。地图Tab仅显示已选时区。 --- .../dashboard/ScanTerminalDashboard.tsx | 64 ++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/frontend/components/dashboard/ScanTerminalDashboard.tsx b/frontend/components/dashboard/ScanTerminalDashboard.tsx index 1029f811..8aa66b54 100644 --- a/frontend/components/dashboard/ScanTerminalDashboard.tsx +++ b/frontend/components/dashboard/ScanTerminalDashboard.tsx @@ -349,6 +349,8 @@ function PolyWeatherTerminal({ setSelectedCity, selectedRegionKey, setSelectedRegionKey, + visibleRegions, + toggleRegion, }: { generatedText: string; isEn: boolean; @@ -367,6 +369,8 @@ function PolyWeatherTerminal({ setSelectedCity: (city: string | null) => void; selectedRegionKey: string; setSelectedRegionKey: (key: string) => void; + visibleRegions: Set; + toggleRegion: (key: string) => void; }) { useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { @@ -629,7 +633,7 @@ function PolyWeatherTerminal({ <> {/* Region tabs */}
- {TRADING_REGIONS.map((r) => ({ + {TRADING_REGIONS.filter((r) => visibleRegions.has(r.key)).map((r) => ({ key: r.key, labelEn: r.labelEn.toUpperCase(), labelZh: r.labelZh, @@ -648,6 +652,42 @@ function PolyWeatherTerminal({ {isEn ? tab.labelEn : tab.labelZh} ))} + {/* Region selector gear */} +
+ +
+ {TRADING_REGIONS.map((r) => { + const checked = visibleRegions.has(r.key); + return ( + + ); + })} +
+
{/* Mobile layout */}
@@ -740,6 +780,26 @@ function ScanTerminalScreen() { const [selectedRegionKey, setSelectedRegionKey] = useState("east_asia"); const [localTimezoneOffsetSeconds, setLocalTimezoneOffsetSeconds] = useState(null); const [useLocalTimezoneDefault, setUseLocalTimezoneDefault] = useState(true); + const [visibleRegions, setVisibleRegions] = useState>(() => { + try { + const stored = localStorage.getItem("polyweather_visible_regions"); + if (stored) return new Set(JSON.parse(stored)); + } catch {} + return new Set(TRADING_REGIONS.map((r) => r.key)); + }); + const toggleRegion = useCallback((key: string) => { + setVisibleRegions((prev) => { + const next = new Set(prev); + if (next.has(key)) { + if (next.size <= 1) return prev; // keep at least one + next.delete(key); + } else { + next.add(key); + } + try { localStorage.setItem("polyweather_visible_regions", JSON.stringify([...next])); } catch {} + return next; + }); + }, []); useEffect(() => { let cancelled = false; @@ -907,6 +967,8 @@ function ScanTerminalScreen() { setSelectedCity={setSelectedCity} selectedRegionKey={selectedRegionKey} setSelectedRegionKey={selectRegionManually} + visibleRegions={visibleRegions} + toggleRegion={toggleRegion} /> ); }