终端搜索扩至全字段匹配:city key、中英文 region、market question 等 11 个字段

This commit is contained in:
2569718930@qq.com
2026-05-25 03:45:04 +08:00
parent a764beedd6
commit baafd4fd81
2 changed files with 28 additions and 36 deletions
@@ -883,13 +883,24 @@ function ScanTerminalScreen() {
if (!searchQuery.trim()) return rows;
const q = searchQuery.toLowerCase().trim();
return rows.filter((row) => {
const city = (rowName(row) || "").toLowerCase();
const airport = (row.airport || "").toLowerCase();
const region = ((isEn ? row.trading_region_label : row.trading_region_label_zh) || row.trading_region_label || "").toLowerCase();
const signal = (row.ai_decision || row.v4_metar_decision || row.signal_status || "").toLowerCase();
return city.includes(q) || airport.includes(q) || region.includes(q) || signal.includes(q);
const haystack = [
row.city,
row.city_display_name,
row.display_name,
row.airport,
row.trading_region_label,
row.trading_region_label_zh,
row.market_question,
row.target_label,
row.ai_decision,
row.v4_metar_decision,
row.signal_status,
]
.filter(Boolean)
.map((v) => String(v).toLowerCase());
return haystack.some((s) => s.includes(q));
});
}, [rows, searchQuery, isEn]);
}, [rows, searchQuery]);
const [selectedId, setSelectedId] = useState<string | null>(null);
const selectedRow = useMemo(
@@ -18,36 +18,17 @@ export function ScanTerminalLoadingScreen({
}) {
return (
<div className={rootClassName}>
<div className={clsx("scan-terminal", themeMode === "light" && "light")}>
<main className="scan-data-grid">
<div className="scan-topbar">
<div className="scan-topbar-title">
<strong>
{isEn ? "PolyWeather Terminal" : "PolyWeather 交易决策台"}
</strong>
<span>
{isEn
? "Loading decision cards, city evidence, and market signals"
: "正在加载决策卡、城市证据和市场信号"}
</span>
</div>
<div className="scan-topbar-actions">
<span className="scan-topbar-time">{userLocalTime}</span>
</div>
</div>
<div className="scan-loading-state">
<LoadingSignal
title={
isEn ? "Preparing decision workspace" : "正在准备决策工作台"
}
description={
isEn
? "Checking access, city context and today's tradable weather windows."
: "正在检查权限、城市上下文和今日可交易天气窗口。"
}
/>
</div>
</main>
<div className={clsx("flex h-screen w-full items-center justify-center bg-[#e9edf3]", themeMode === "light" && "light")}>
<LoadingSignal
title={
isEn ? "Preparing decision workspace" : "正在准备决策工作台"
}
description={
isEn
? "Checking access, city context and today's tradable weather windows."
: "正在检查权限、城市上下文和今日可交易天气窗口。"
}
/>
</div>
</div>
);