From a19925fe7ad78ccd82f47c1dfec9e3eada79ee00 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Sat, 21 Mar 2026 00:58:43 +0800 Subject: [PATCH] Fix unstable dashboard modal opening --- .../dashboard/PolyWeatherDashboard.tsx | 6 ++++ frontend/hooks/useDashboardStore.tsx | 36 +++++++------------ 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/frontend/components/dashboard/PolyWeatherDashboard.tsx b/frontend/components/dashboard/PolyWeatherDashboard.tsx index 1670c7ce..2fac4fd7 100644 --- a/frontend/components/dashboard/PolyWeatherDashboard.tsx +++ b/frontend/components/dashboard/PolyWeatherDashboard.tsx @@ -56,6 +56,12 @@ function DashboardScreen() { const store = useDashboardStore(); const { t } = useI18n(); + useEffect(() => { + void import("@/components/dashboard/GuideModal"); + void import("@/components/dashboard/HistoryModal"); + void import("@/components/dashboard/FutureForecastModal"); + }, []); + useEffect(() => { const onKeyDown = (event: KeyboardEvent) => { if (event.key !== "Escape") return; diff --git a/frontend/hooks/useDashboardStore.tsx b/frontend/hooks/useDashboardStore.tsx index 2d7eefa0..c8823fb5 100644 --- a/frontend/hooks/useDashboardStore.tsx +++ b/frontend/hooks/useDashboardStore.tsx @@ -649,7 +649,7 @@ export function DashboardStoreProvider({ openGuide: () => setIsGuideOpen(true), openHistory, openTodayModal: async (forceRefresh?: boolean) => { - if (!selectedCity || loadingState.cityDetail) { + if (!selectedCity) { return; } @@ -659,35 +659,24 @@ export function DashboardStoreProvider({ setSelectedForecastDate(cachedDetail.local_date); setFutureModalDate(cachedDetail.local_date); } - if (!proAccess.subscriptionActive) { - return; - } + if (!proAccess.subscriptionActive) return; - // 乐观 UI: 有缓存则立刻秒开 modal,不阻塞显示 - if (cachedDetail?.local_date) { - setSelectedForecastDate(cachedDetail.local_date); - setFutureModalDate(cachedDetail.local_date); - setLoadingState((current) => ({ ...current, marketScan: true })); - } else { - setLoadingState((current) => ({ - ...current, - refresh: true, - marketScan: true, - })); - } + setLoadingState((current) => ({ + ...current, + refresh: !cachedDetail?.local_date, + marketScan: true, + })); - // 异步静默拉取最新气象与市场数据 try { - const detail = await ensureCityDetail(selectedCity, true); + const detail = await ensureCityDetail( + selectedCity, + Boolean(forceRefresh), + ); setSelectedForecastDate(detail.local_date); setFutureModalDate(detail.local_date); + const marketKey = getMarketScanCacheKey(selectedCity, detail.local_date); try { - // 如果缓存里没有或者想要强制刷新,则拉取最新市场数据 - const marketKey = getMarketScanCacheKey( - selectedCity, - detail.local_date, - ); await ensureCityMarketScan( selectedCity, forceRefresh || !marketScanByCityName[marketKey], @@ -697,6 +686,7 @@ export function DashboardStoreProvider({ } catch {} } catch { if (cachedDetail?.local_date) { + setSelectedForecastDate(cachedDetail.local_date); setFutureModalDate(cachedDetail.local_date); } } finally {