更新ios

This commit is contained in:
2026-01-18 18:02:19 +08:00
parent d5aebd3b3d
commit 1d24650fe4

View File

@@ -14,7 +14,7 @@ import {
PriceHeader, PriceHeader,
ChartTypeTabs, ChartTypeTabs,
MinuteChart, MinuteChart,
ProfessionalKlineChart, KlineChart,
OrderBook, OrderBook,
RelatedInfoTabs, RelatedInfoTabs,
EventsPanel, EventsPanel,
@@ -62,6 +62,7 @@ const StockDetailScreen = () => {
const [riseAnalysisData, setRiseAnalysisData] = useState([]); const [riseAnalysisData, setRiseAnalysisData] = useState([]);
const [selectedAnalysis, setSelectedAnalysis] = useState(null); const [selectedAnalysis, setSelectedAnalysis] = useState(null);
const [analysisModalOpen, setAnalysisModalOpen] = useState(false); const [analysisModalOpen, setAnalysisModalOpen] = useState(false);
const [fallbackOrderBook, setFallbackOrderBook] = useState(null); // API 降级盘口数据
// Redux 状态 // Redux 状态
const currentStock = useSelector(selectCurrentStock); const currentStock = useSelector(selectCurrentStock);
@@ -99,6 +100,21 @@ const StockDetailScreen = () => {
return stockCode; return stockCode;
}, [currentStock?.stock_name, stockName, stockCode]); }, [currentStock?.stock_name, stockName, stockCode]);
// 加载盘口数据降级方案WebSocket 无数据时从 API 获取)
const loadOrderBookFallback = useCallback(async () => {
if (!stockCode) return;
try {
const result = await stockDetailService.getOrderBook(stockCode);
if (result.success && result.data) {
setFallbackOrderBook(result.data);
console.log('[StockDetailScreen] 降级盘口数据:', result.data.trade_time);
}
} catch (error) {
console.error('[StockDetailScreen] 加载降级盘口失败:', error);
}
}, [stockCode]);
// 加载涨幅分析数据 // 加载涨幅分析数据
const loadRiseAnalysis = useCallback(async () => { const loadRiseAnalysis = useCallback(async () => {
if (!stockCode) return; if (!stockCode) return;
@@ -143,8 +159,9 @@ const StockDetailScreen = () => {
dispatch(clearCurrentStock()); dispatch(clearCurrentStock());
// 重置为分时图 // 重置为分时图
dispatch(setChartType('minute')); dispatch(setChartType('minute'));
// 清空本地状态(涨幅分析数据) // 清空本地状态
setRiseAnalysisData([]); setRiseAnalysisData([]);
setFallbackOrderBook(null);
}, [dispatch, stockCode]); }, [dispatch, stockCode]);
// 初始加载 // 初始加载
@@ -152,6 +169,22 @@ const StockDetailScreen = () => {
loadStockData(); loadStockData();
}, [loadStockData]); }, [loadStockData]);
// 盘口数据降级分时图模式下WebSocket 3秒内无数据则从 API 获取
useEffect(() => {
if (chartType !== 'minute') return;
// 检查 WebSocket 是否有五档数据
const hasWsOrderBook = realtimeQuote?.bid_prices?.length > 0 || realtimeQuote?.ask_prices?.length > 0;
if (!hasWsOrderBook && !fallbackOrderBook) {
// 延迟 2 秒后加载降级数据,给 WebSocket 一点时间
const timer = setTimeout(() => {
loadOrderBookFallback();
}, 2000);
return () => clearTimeout(timer);
}
}, [chartType, realtimeQuote, fallbackOrderBook, loadOrderBookFallback]);
// 切换图表类型 // 切换图表类型
const handleChartTypeChange = useCallback((type) => { const handleChartTypeChange = useCallback((type) => {
dispatch(setChartType(type)); dispatch(setChartType(type));
@@ -255,23 +288,25 @@ const StockDetailScreen = () => {
loading={isChartLoading} loading={isChartLoading}
/> />
) : ( ) : (
<ProfessionalKlineChart <KlineChart
data={currentChartData} data={currentChartData}
type={chartType} type={chartType}
loading={isChartLoading} loading={isChartLoading}
riseAnalysisData={riseAnalysisData}
onAnalysisPress={handleAnalysisPress}
/> />
)} )}
</Box> </Box>
{/* 5档盘口 - 使用 WebSocket 实时推送的五档数据 */} {/* 5档盘口 - 优先 WebSocket 实时数据,降级到 API 数据 */}
{chartType === 'minute' && ( {chartType === 'minute' && (
<OrderBook <OrderBook
askPrices={realtimeQuote?.ask_prices || orderBook.askPrices || []} askPrices={realtimeQuote?.ask_prices || fallbackOrderBook?.ask_prices || orderBook.askPrices || []}
askVolumes={realtimeQuote?.ask_volumes || orderBook.askVolumes || []} askVolumes={realtimeQuote?.ask_volumes || fallbackOrderBook?.ask_volumes || orderBook.askVolumes || []}
bidPrices={realtimeQuote?.bid_prices || orderBook.bidPrices || []} bidPrices={realtimeQuote?.bid_prices || fallbackOrderBook?.bid_prices || orderBook.bidPrices || []}
bidVolumes={realtimeQuote?.bid_volumes || orderBook.bidVolumes || []} bidVolumes={realtimeQuote?.bid_volumes || fallbackOrderBook?.bid_volumes || orderBook.bidVolumes || []}
preClose={realtimeQuote?.pre_close || quote.pre_close} preClose={realtimeQuote?.pre_close || fallbackOrderBook?.prev_close || quote.pre_close}
updateTime={realtimeQuote?.update_time} updateTime={realtimeQuote?.update_time || fallbackOrderBook?.trade_time}
isConnected={wsConnected} isConnected={wsConnected}
/> />
)} )}