From c6cf2c79a17617d6c8abcdbf58611eb807642b28 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Thu, 5 Mar 2026 17:10:52 +0800 Subject: [PATCH] feat: Implement initial PolyWeather map application frontend with dark theme UI and data collection module. --- src/data_collection/weather_sources.py | 17 ++++-- web/static/app.js | 17 +++++- web/static/index.html | 53 ++++++++++++++----- web/static/style.css | 72 ++++++++++++++++++++++++++ 4 files changed, 140 insertions(+), 19 deletions(-) diff --git a/src/data_collection/weather_sources.py b/src/data_collection/weather_sources.py index 35e44511..7db38242 100644 --- a/src/data_collection/weather_sources.py +++ b/src/data_collection/weather_sources.py @@ -1390,12 +1390,23 @@ class WeatherDataCollector: } if city_lower in turkish_provinces: istno, province = turkish_provinces[city_lower] + # 核心逻辑:实测用 istno (17128), 预报强制去 17130 拿 mgm_data = self.fetch_from_mgm(istno) + + # 如果当前是机场站 (17128),我们额外去 17130 拿一次预报 + if istno == "17128": + mgm_city_center = self.fetch_from_mgm("17130") + if mgm_city_center and mgm_data: + # 用市中心的预报覆盖机场可能缺失的预报 + mgm_data["today_high"] = mgm_city_center.get("today_high") + mgm_data["daily_forecasts"] = mgm_city_center.get("daily_forecasts") + logger.info("⚡ 已同步 MGM 安卡拉总部 (17130) 的官方最高温预报") + if mgm_data: results["mgm"] = mgm_data - nearby = self.fetch_mgm_nearby_stations(province, root_ist_no=istno) - if nearby: - results["mgm_nearby"] = nearby + nearby = self.fetch_mgm_nearby_stations(province, root_ist_no=istno) + if nearby: + results["mgm_nearby"] = nearby # 全球通用:对有预定义集群的城市,抓取周边 METAR 参考站 if city_lower in self.CITY_METAR_CLUSTERS and "mgm_nearby" not in results: diff --git a/web/static/app.js b/web/static/app.js index 94b0f120..3d6b137a 100644 --- a/web/static/app.js +++ b/web/static/app.js @@ -1270,17 +1270,30 @@ document.addEventListener("DOMContentLoaded", async () => { if (e.key === "Escape") closePanel(); }); - // History Modal Events + // Modal Event Listeners + const histModal = document.getElementById("historyModal"); + const guideModal = document.getElementById("guideModal"); + document .getElementById("btnShowHistory") .addEventListener("click", openHistoryModal); document .getElementById("historyModalClose") .addEventListener("click", closeHistoryModal); - document.getElementById("historyModal").addEventListener("click", (e) => { + histModal.addEventListener("click", (e) => { if (e.target.id === "historyModal") closeHistoryModal(); }); + document.getElementById("btnShowGuide").addEventListener("click", () => { + guideModal.classList.remove("hidden"); + }); + document.getElementById("guideModalClose").addEventListener("click", () => { + guideModal.classList.add("hidden"); + }); + guideModal.addEventListener("click", (e) => { + if (e.target.id === "guideModal") guideModal.classList.add("hidden"); + }); + // Refresh all button document .getElementById("refreshAllBtn") diff --git a/web/static/index.html b/web/static/index.html index ce220497..b2412e75 100644 --- a/web/static/index.html +++ b/web/static/index.html @@ -29,12 +29,12 @@