Fix unstable dashboard modal opening

This commit is contained in:
2569718930@qq.com
2026-03-21 00:58:43 +08:00
parent 8959faac91
commit a19925fe7a
2 changed files with 19 additions and 23 deletions
@@ -56,6 +56,12 @@ function DashboardScreen() {
const store = useDashboardStore(); const store = useDashboardStore();
const { t } = useI18n(); const { t } = useI18n();
useEffect(() => {
void import("@/components/dashboard/GuideModal");
void import("@/components/dashboard/HistoryModal");
void import("@/components/dashboard/FutureForecastModal");
}, []);
useEffect(() => { useEffect(() => {
const onKeyDown = (event: KeyboardEvent) => { const onKeyDown = (event: KeyboardEvent) => {
if (event.key !== "Escape") return; if (event.key !== "Escape") return;
+13 -23
View File
@@ -649,7 +649,7 @@ export function DashboardStoreProvider({
openGuide: () => setIsGuideOpen(true), openGuide: () => setIsGuideOpen(true),
openHistory, openHistory,
openTodayModal: async (forceRefresh?: boolean) => { openTodayModal: async (forceRefresh?: boolean) => {
if (!selectedCity || loadingState.cityDetail) { if (!selectedCity) {
return; return;
} }
@@ -659,35 +659,24 @@ export function DashboardStoreProvider({
setSelectedForecastDate(cachedDetail.local_date); setSelectedForecastDate(cachedDetail.local_date);
setFutureModalDate(cachedDetail.local_date); setFutureModalDate(cachedDetail.local_date);
} }
if (!proAccess.subscriptionActive) { if (!proAccess.subscriptionActive) return;
return;
}
// 乐观 UI: 有缓存则立刻秒开 modal,不阻塞显示 setLoadingState((current) => ({
if (cachedDetail?.local_date) { ...current,
setSelectedForecastDate(cachedDetail.local_date); refresh: !cachedDetail?.local_date,
setFutureModalDate(cachedDetail.local_date); marketScan: true,
setLoadingState((current) => ({ ...current, marketScan: true })); }));
} else {
setLoadingState((current) => ({
...current,
refresh: true,
marketScan: true,
}));
}
// 异步静默拉取最新气象与市场数据
try { try {
const detail = await ensureCityDetail(selectedCity, true); const detail = await ensureCityDetail(
selectedCity,
Boolean(forceRefresh),
);
setSelectedForecastDate(detail.local_date); setSelectedForecastDate(detail.local_date);
setFutureModalDate(detail.local_date); setFutureModalDate(detail.local_date);
const marketKey = getMarketScanCacheKey(selectedCity, detail.local_date);
try { try {
// 如果缓存里没有或者想要强制刷新,则拉取最新市场数据
const marketKey = getMarketScanCacheKey(
selectedCity,
detail.local_date,
);
await ensureCityMarketScan( await ensureCityMarketScan(
selectedCity, selectedCity,
forceRefresh || !marketScanByCityName[marketKey], forceRefresh || !marketScanByCityName[marketKey],
@@ -697,6 +686,7 @@ export function DashboardStoreProvider({
} catch {} } catch {}
} catch { } catch {
if (cachedDetail?.local_date) { if (cachedDetail?.local_date) {
setSelectedForecastDate(cachedDetail.local_date);
setFutureModalDate(cachedDetail.local_date); setFutureModalDate(cachedDetail.local_date);
} }
} finally { } finally {