From 6f3fef4a3cbcaae9ee579acc0dc4bf3410087d55 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Mon, 25 May 2026 01:50:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=BB=88=E7=AB=AF=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E7=AB=AF=E5=9F=8E=E5=B8=82=E5=8D=A1=E7=89=87=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scan-terminal/MobileCityCard.tsx | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 frontend/components/dashboard/scan-terminal/MobileCityCard.tsx diff --git a/frontend/components/dashboard/scan-terminal/MobileCityCard.tsx b/frontend/components/dashboard/scan-terminal/MobileCityCard.tsx new file mode 100644 index 00000000..1f8c3291 --- /dev/null +++ b/frontend/components/dashboard/scan-terminal/MobileCityCard.tsx @@ -0,0 +1,76 @@ +"use client"; + +import type { ScanOpportunityRow } from "@/lib/dashboard-types"; +import { + formatPrice, + GAP_COLOR_MAP, + getGapColor, + getSignalLabel, + getSignalState, +} from "@/components/dashboard/scan-terminal/continent-grouping"; + +function rowName(row: ScanOpportunityRow) { + return row.city_display_name || row.display_name || row.city || "--"; +} + +function tempVal(value?: number | null, symbol?: string | null) { + const n = Number(value); + if (!Number.isFinite(n)) return "--"; + return `${n.toFixed(1)}${symbol || "°"}`; +} + +export function MobileCityCard({ + isEn, + onClick, + row, +}: { + isEn: boolean; + onClick: (row: ScanOpportunityRow) => void; + row: ScanOpportunityRow; +}) { + const signal = getSignalState(row); + const gapColor = GAP_COLOR_MAP[getGapColor(row)]; + + return ( + + ); +}