diff --git a/frontend/src/components/StockDailyKChart.tsx b/frontend/src/components/StockDailyKChart.tsx index 9f87e67..495ecc4 100644 --- a/frontend/src/components/StockDailyKChart.tsx +++ b/frontend/src/components/StockDailyKChart.tsx @@ -54,6 +54,8 @@ interface Props { onDataChange?: (result: StockDailyKChartResult) => void /** 扩展数据列参数(逗号分隔 config_id.field_name),透传给 klineDaily 接口 */ extColumns?: string + /** 日K自动刷新间隔(ms)。undefined = 不轮询(默认)。个股对话框实时刷新时传入, 盘中今日蜡烛随之更新 */ + refetchIntervalMs?: number } function isValidRow(r: any): boolean { @@ -136,6 +138,7 @@ export function StockDailyKChart({ onPriceDoubleClick, onDataChange, extColumns, + refetchIntervalMs, }: Props) { const [activeIndicators, setActiveIndicators] = useState(['vol']) const [showMarkers, setShowMarkers] = useState(true) @@ -150,6 +153,7 @@ export function StockDailyKChart({ queryKey: QK.kline(symbol, dateRange.start, dateRange.end, extColumns), queryFn: () => api.klineDaily(symbol, days, dateRange, extColumns), enabled: !!symbol, + refetchInterval: refetchIntervalMs, placeholderData: (prev) => prev, }) diff --git a/frontend/src/components/StockIntradayChart.tsx b/frontend/src/components/StockIntradayChart.tsx index 95d5ca0..6f014e9 100644 --- a/frontend/src/components/StockIntradayChart.tsx +++ b/frontend/src/components/StockIntradayChart.tsx @@ -36,7 +36,9 @@ export function StockIntradayChart({ const minute = useQuery({ queryKey: QK.klineMinute(symbol, date ?? ''), - queryFn: () => api.klineMinute(symbol, date ?? undefined), + // 轮询上下文 (个股详情) 传 live: 当日盘中后端直接实时拉取最新K, + // 避免读到分钟增量落盘的上一轮本地分区; 历史日期后端自行忽略 live。 + queryFn: () => api.klineMinute(symbol, date ?? undefined, refetchIntervalMs != null), enabled: !!symbol && !!date, refetchInterval: refetchIntervalMs, }) diff --git a/frontend/src/components/StockPanel.tsx b/frontend/src/components/StockPanel.tsx index ef5aa90..04c9544 100644 --- a/frontend/src/components/StockPanel.tsx +++ b/frontend/src/components/StockPanel.tsx @@ -167,6 +167,7 @@ export function StockPanel({ onDataChange={setDailyResult} visibleBars={showIntraday ? 40 : 60} extColumns={extColumns} + refetchIntervalMs={refetchIntervalMs} /> {showIntraday && selectedDate && !intradayDismissed && ( diff --git a/frontend/src/components/StockPreviewDialog.tsx b/frontend/src/components/StockPreviewDialog.tsx index f793d5e..26f422e 100644 --- a/frontend/src/components/StockPreviewDialog.tsx +++ b/frontend/src/components/StockPreviewDialog.tsx @@ -475,6 +475,7 @@ export function StockPreviewDialog({ symbol, name, onClose, triggerInfo }: Props dateRange={dateRange} priceLines={monitorPriceLines} onPriceDoubleClick={openPriceAlert} + refetchIntervalMs={intradayRefetchMs} /> ) : ( <>