From 1df1f77b139a574f5bb9c1b41135a6257f7b7e29 Mon Sep 17 00:00:00 2001 From: Sakurasan <26715255+Sakurasan@users.noreply.github.com> Date: Thu, 17 Sep 2026 20:34:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=83=AD=E7=82=B9=E8=82=A1=E8=BF=BD?= =?UTF-8?q?=E8=B8=AA=E5=A2=9E=E5=8A=A0=E8=BF=913/5/10=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E6=97=A5=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/routes/core_stocks.py | 6 +++--- src/lib/core-stock-api.ts | 6 +++--- src/routes/core-stocks.tsx | 23 +++++++++++++++++------ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/backend/routes/core_stocks.py b/backend/routes/core_stocks.py index b39cb7a..22d7a7e 100644 --- a/backend/routes/core_stocks.py +++ b/backend/routes/core_stocks.py @@ -20,11 +20,11 @@ def _recent_trade_dates(conn, n: int = 10) -> list[str]: return [r["trade_date"] for r in reversed(rows)] -@router.get("/active", summary="活跃核心股 + 最近10日涨幅矩阵") -async def active_core_stocks(): +@router.get("/active", summary="活跃核心股 + 最近N日涨幅矩阵") +async def active_core_stocks(days: int = Query(10, ge=1, le=30, description="交易日天数")): conn = get_connection() try: - dates = _recent_trade_dates(conn, 10) + dates = _recent_trade_dates(conn, days) if not dates: return JSONResponse({"dates": [], "stocks": []}, headers=_NO_CACHE_HEADERS) diff --git a/src/lib/core-stock-api.ts b/src/lib/core-stock-api.ts index 49fb647..96ed3f4 100644 --- a/src/lib/core-stock-api.ts +++ b/src/lib/core-stock-api.ts @@ -33,11 +33,11 @@ export interface CoreStockHistoryResponse { items: CoreStockHistoryItem[]; } -/** 获取活跃核心股 + 最近10日涨幅矩阵 */ -export async function fetchActiveCoreStocks(): Promise { +/** 获取活跃核心股 + 最近N日涨幅矩阵 */ +export async function fetchActiveCoreStocks(days: number = 10): Promise { const baseUrl = getApiBaseUrl(); try { - const resp = await fetch(`${baseUrl}/api/core-stocks/active`, { method: "GET", cache: "no-store" }); + const resp = await fetch(`${baseUrl}/api/core-stocks/active?days=${days}`, { method: "GET", cache: "no-store" }); if (!resp.ok) return { dates: [], stocks: [] }; return resp.json(); } catch (err) { diff --git a/src/routes/core-stocks.tsx b/src/routes/core-stocks.tsx index a8b7bd4..331a2de 100644 --- a/src/routes/core-stocks.tsx +++ b/src/routes/core-stocks.tsx @@ -1,8 +1,9 @@ import { createFileRoute, Link } from "@tanstack/react-router"; import { useQuery } from "@tanstack/react-query"; -import { Fragment } from "react"; +import { Fragment, useState } from "react"; import { fetchActiveCoreStocks } from "@/lib/core-stock-api"; import { ArrowLeft, RefreshCw, Flame } from "lucide-react"; +import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; export const Route = createFileRoute("/core-stocks")({ component: CoreStocksPage, @@ -16,9 +17,10 @@ function formatGain(v: number | null | undefined): string { } function CoreStocksPage() { + const [days, setDays] = useState(10); const { data, isLoading, isFetching, refetch } = useQuery({ - queryKey: ["core-stocks", "active"], - queryFn: fetchActiveCoreStocks, + queryKey: ["core-stocks", "active", days], + queryFn: () => fetchActiveCoreStocks(days), staleTime: 60_000, retry: false, }); @@ -48,9 +50,18 @@ function CoreStocksPage() {
-

- 活跃热点股(最近 10 个交易日内上榜)· 按上榜次数排序 · 共 {stocks.length} 只 -

+
+

+ 活跃热点股(最近 {days} 个交易日内上榜)· 按上榜次数排序 · 共 {stocks.length} 只 +

+ setDays(Number(v))}> + + 近3日 + 近5日 + 近10日 + + +
{isLoading ? (