diff --git a/frontend/components/dashboard/ScanTerminalDashboard.tsx b/frontend/components/dashboard/ScanTerminalDashboard.tsx index e772ad67..5a22f6b0 100644 --- a/frontend/components/dashboard/ScanTerminalDashboard.tsx +++ b/frontend/components/dashboard/ScanTerminalDashboard.tsx @@ -31,6 +31,7 @@ import { getSignalState, resolveTradingRegionKey, TRADING_REGIONS, + detectLocalRegion, } from "@/components/dashboard/scan-terminal/continent-grouping"; import { MobileCityCard } from "@/components/dashboard/scan-terminal/MobileCityCard"; import { MobileRegionTabs } from "@/components/dashboard/scan-terminal/MobileRegionTabs"; @@ -470,6 +471,10 @@ function PolyWeatherTerminal({ const [activeNavKey, setActiveNavKey] = useState("contracts"); const [selectedRegionKey, setSelectedRegionKey] = useState("east_asia"); + useEffect(() => { + setSelectedRegionKey(detectLocalRegion()); + }, []); + const NAV_ITEMS = [ { key: "contracts", Icon: Table2, labelEn: "Contracts", labelZh: "天气合约" }, { key: "markets", Icon: Activity, labelEn: "Markets", labelZh: "市场概览" }, diff --git a/frontend/components/dashboard/scan-terminal/continent-grouping.ts b/frontend/components/dashboard/scan-terminal/continent-grouping.ts index 86b282f0..cd764241 100644 --- a/frontend/components/dashboard/scan-terminal/continent-grouping.ts +++ b/frontend/components/dashboard/scan-terminal/continent-grouping.ts @@ -12,6 +12,18 @@ export const TRADING_REGIONS = [ export type TradingRegionKey = (typeof TRADING_REGIONS)[number]["key"]; +/** Map browser timezone offset (hours) to the closest trading region. */ +export function detectLocalRegion(): TradingRegionKey { + const offset = -new Date().getTimezoneOffset() / 60; // UTC offset in hours + if (offset >= 8) return "east_asia"; + if (offset >= 7) return "southeast_asia"; + if (offset >= 4.5) return "central_asia"; + if (offset >= 2) return "west_asia"; + if (offset >= -2) return "europe_africa"; + if (offset >= -7) return "north_america"; + return "south_america"; +} + const TRADING_REGION_KEYS = new Set(TRADING_REGIONS.map((region) => region.key)); const CITY_REGION_FALLBACK: Record = {