From de789344447831e818ba17da39b3dedbf10ddb2a Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Mon, 25 May 2026 18:04:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=8E=E5=B8=82=E5=88=97=E8=A1=A8=E5=BF=AB?= =?UTF-8?q?=E9=80=9F=E5=8A=A0=E8=BD=BD=20+=20=E7=82=B9=E5=87=BB=E5=9F=8E?= =?UTF-8?q?=E5=B8=82=E6=8C=89=E9=9C=80=E6=8B=89=E5=8F=96=20Polymarket=20?= =?UTF-8?q?=E4=BB=B7=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/ScanTerminalDashboard.tsx | 37 ++++++++++++++++++- .../scan-terminal/scan-terminal-client.ts | 2 +- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/frontend/components/dashboard/ScanTerminalDashboard.tsx b/frontend/components/dashboard/ScanTerminalDashboard.tsx index f751de14..2bd6cfe2 100644 --- a/frontend/components/dashboard/ScanTerminalDashboard.tsx +++ b/frontend/components/dashboard/ScanTerminalDashboard.tsx @@ -247,6 +247,41 @@ function CityContractDetail({ () => (selectedCity ? rows.filter((r) => String(r.city || "").toLowerCase() === selectedCity) : []), [rows, selectedCity], ); + const [priceMap, setPriceMap] = useState | null>(null); + + useEffect(() => { + setPriceMap(null); + if (!selectedCity) return; + let cancelled = false; + const cityName = cityRows[0]?.city_display_name || selectedCity; + fetch(`/api/city/${encodeURIComponent(cityName)}/market-scan?lite=true`, { + cache: "no-store", + headers: { Accept: "application/json" }, + }) + .then(async (res) => { if (!res.ok) return null; return res.json(); }) + .then((json: any) => { + if (cancelled || !json?.market_scan?.scan_rows) return; + const map: Record = {}; + for (const r of json.market_scan.scan_rows) { + const key = r.id || r.market_slug || ""; + if (key && (r.midpoint != null || r.ask != null || r.bid != null)) { + map[key] = { midpoint: r.midpoint, ask: r.ask, bid: r.bid }; + } + } + setPriceMap(map); + }) + .catch(() => {}); + return () => { cancelled = true; }; + }, [selectedCity, cityRows]); + + const pricedRows = useMemo(() => { + if (!priceMap) return cityRows; + return cityRows.map((r) => { + const prices = priceMap[r.id || r.market_slug || ""]; + if (!prices) return r; + return { ...r, ...prices }; + }); + }, [cityRows, priceMap]); return ( @@ -259,7 +294,7 @@ function CityContractDetail({ {isEn ? "No contracts for this city" : "该城市暂无合约"} ) : ( - + )} ); diff --git a/frontend/components/dashboard/scan-terminal/scan-terminal-client.ts b/frontend/components/dashboard/scan-terminal/scan-terminal-client.ts index ef0c4398..9e0b9eb0 100644 --- a/frontend/components/dashboard/scan-terminal/scan-terminal-client.ts +++ b/frontend/components/dashboard/scan-terminal/scan-terminal-client.ts @@ -268,7 +268,7 @@ async function getTerminal({ time_range: "today", limit: "180", force_refresh: String(forceRefresh), - skip_polymarket: "false", + skip_polymarket: "true", }); if (tradingRegion && tradingRegion !== "all") { params.set("trading_region", tradingRegion);