This version of Antigravity is no longer supported. Please upgrade to receive the latest features.

This commit is contained in:
2569718930@qq.com
2026-05-01 11:37:09 +08:00
parent 6c203bee60
commit 118d4e44df
4 changed files with 25 additions and 4 deletions
@@ -24,11 +24,15 @@ export async function GET(
const { name } = await context.params;
const forceRefresh = req.nextUrl.searchParams.get("force_refresh") ?? "false";
const depth = req.nextUrl.searchParams.get("depth");
const marketSlug = req.nextUrl.searchParams.get("market_slug");
const targetDate = req.nextUrl.searchParams.get("target_date");
const searchParams = new URLSearchParams({
force_refresh: forceRefresh,
});
if (depth) {
searchParams.set("depth", depth);
}
if (marketSlug) {
searchParams.set("market_slug", marketSlug);
}
@@ -37,6 +37,15 @@ export function countDetailForecastDays(detail?: CityDetail | null) {
export function isFullEnoughForDeepAnalysis(detail?: CityDetail | null) {
if (!detail) return false;
if (detail.detail_depth && detail.detail_depth !== "full") return false;
const hourlyTimes = Array.isArray(detail.hourly?.times)
? detail.hourly?.times || []
: [];
const hourlyTemps = Array.isArray(detail.hourly?.temps)
? detail.hourly?.temps || []
: [];
if (!detail.local_time || hourlyTimes.length === 0 || hourlyTemps.length === 0) {
return false;
}
return (
countDetailModels(detail, detail.local_date) > 1 &&
countDetailForecastDays(detail) > 1
@@ -49,6 +49,7 @@ type TerminalQueryOptions = {
};
type CityDetailQueryOptions = {
depth?: "panel" | "market" | "nearby" | "full";
forceRefresh?: boolean;
marketSlug?: string | null;
signal?: AbortSignal;
@@ -273,6 +274,7 @@ async function getTerminal({
async function getCityDetail(city: string, options: CityDetailQueryOptions = {}) {
const params = new URLSearchParams({
depth: options.depth || "full",
force_refresh: String(options.forceRefresh ?? false),
});
if (options.marketSlug) params.set("market_slug", options.marketSlug);
+10 -4
View File
@@ -135,7 +135,7 @@ function buildCalibratedFuturePath({
currentMinutes: number | null;
reversionMinutes?: number | null;
}) {
if (currentMinutes == null || !times.length || !observations.length) {
if (!times.length || !observations.length) {
return {
adjustmentDelta: null as number | null,
future: new Array(times.length).fill(null) as Array<number | null>,
@@ -151,15 +151,21 @@ function buildCalibratedFuturePath({
},
null,
);
if (latestObservationMinute == null && currentMinutes == null) {
return {
adjustmentDelta: null as number | null,
future: new Array(times.length).fill(null) as Array<number | null>,
};
}
// In practice the backend `local_time` can lag the latest METAR/official
// observation by one refresh cycle. Anchor the future line to the newest
// observation when it is newer, otherwise the "no future obs" guard can
// suppress the calibrated path even though the user already sees a fresh
// green observation point on the chart.
const pathStartMinutes =
latestObservationMinute != null
? Math.max(currentMinutes, latestObservationMinute)
: currentMinutes;
latestObservationMinute == null || currentMinutes == null
? latestObservationMinute ?? currentMinutes ?? 0
: Math.max(currentMinutes, latestObservationMinute);
const deltas = normalizedObservations
.map((item) => {