From 0b57c33ca21f5d5fbf781ed98e6b843dd3488be2 Mon Sep 17 00:00:00 2001 From: shy3130 Date: Sun, 23 Aug 2026 14:21:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=20=E5=BC=82=E5=8A=A8=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=E6=96=B0=E5=A2=9E=20ST=20=E8=BF=87=E6=BB=A4,=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=BC=80=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/AbnormalMoves.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/AbnormalMoves.tsx b/frontend/src/pages/AbnormalMoves.tsx index 384ef28..a5fd15c 100644 --- a/frontend/src/pages/AbnormalMoves.tsx +++ b/frontend/src/pages/AbnormalMoves.tsx @@ -54,6 +54,8 @@ export function AbnormalMoves() { const [minCloseness, setMinCloseness] = useState(0.5) const [query, setQuery] = useState('') const [watchlistOnly, setWatchlistOnly] = useState(false) + // 默认过滤 ST/*ST 风险警示股票 (口径与后端 is_st_name 一致: 名称含 ST) + const [excludeSt, setExcludeSt] = useState(true) const [preview, setPreview] = useState<{ symbol: string; name: string } | null>(null) const overview = useQuery({ @@ -110,12 +112,13 @@ export function AbnormalMoves() { } if (boardFilter !== 'all') list = list.filter(r => r.board === boardFilter) if (watchlistOnly) list = list.filter(r => watchSymbols.has(r.symbol)) + if (excludeSt) list = list.filter(r => !(r.name ?? '').toUpperCase().includes('ST')) const q = query.trim().toLowerCase() if (q) { list = list.filter(r => `${r.symbol} ${r.name ?? ''}`.toLowerCase().includes(q)) } return list - }, [view, windowFilter, direction, boardFilter, watchlistOnly, watchSymbols, query, minCloseness]) + }, [view, windowFilter, direction, boardFilter, watchlistOnly, excludeSt, watchSymbols, query, minCloseness]) const counts = view?.counts const updating = overview.isFetching @@ -298,6 +301,15 @@ export function AbnormalMoves() { /> 只看自选 +