更新ios
This commit is contained in:
@@ -14,7 +14,7 @@ import {
|
||||
PriceHeader,
|
||||
ChartTypeTabs,
|
||||
MinuteChart,
|
||||
ProfessionalKlineChart,
|
||||
KlineChart,
|
||||
OrderBook,
|
||||
RelatedInfoTabs,
|
||||
EventsPanel,
|
||||
@@ -62,6 +62,7 @@ const StockDetailScreen = () => {
|
||||
const [riseAnalysisData, setRiseAnalysisData] = useState([]);
|
||||
const [selectedAnalysis, setSelectedAnalysis] = useState(null);
|
||||
const [analysisModalOpen, setAnalysisModalOpen] = useState(false);
|
||||
const [fallbackOrderBook, setFallbackOrderBook] = useState(null); // API 降级盘口数据
|
||||
|
||||
// Redux 状态
|
||||
const currentStock = useSelector(selectCurrentStock);
|
||||
@@ -99,6 +100,21 @@ const StockDetailScreen = () => {
|
||||
return 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 () => {
|
||||
if (!stockCode) return;
|
||||
@@ -143,8 +159,9 @@ const StockDetailScreen = () => {
|
||||
dispatch(clearCurrentStock());
|
||||
// 重置为分时图
|
||||
dispatch(setChartType('minute'));
|
||||
// 清空本地状态(涨幅分析数据)
|
||||
// 清空本地状态
|
||||
setRiseAnalysisData([]);
|
||||
setFallbackOrderBook(null);
|
||||
}, [dispatch, stockCode]);
|
||||
|
||||
// 初始加载
|
||||
@@ -152,6 +169,22 @@ const StockDetailScreen = () => {
|
||||
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) => {
|
||||
dispatch(setChartType(type));
|
||||
@@ -255,23 +288,25 @@ const StockDetailScreen = () => {
|
||||
loading={isChartLoading}
|
||||
/>
|
||||
) : (
|
||||
<ProfessionalKlineChart
|
||||
<KlineChart
|
||||
data={currentChartData}
|
||||
type={chartType}
|
||||
loading={isChartLoading}
|
||||
riseAnalysisData={riseAnalysisData}
|
||||
onAnalysisPress={handleAnalysisPress}
|
||||
/>
|
||||
)}
|
||||
</Box>
|
||||
|
||||
{/* 5档盘口 - 使用 WebSocket 实时推送的五档数据 */}
|
||||
{/* 5档盘口 - 优先 WebSocket 实时数据,降级到 API 数据 */}
|
||||
{chartType === 'minute' && (
|
||||
<OrderBook
|
||||
askPrices={realtimeQuote?.ask_prices || orderBook.askPrices || []}
|
||||
askVolumes={realtimeQuote?.ask_volumes || orderBook.askVolumes || []}
|
||||
bidPrices={realtimeQuote?.bid_prices || orderBook.bidPrices || []}
|
||||
bidVolumes={realtimeQuote?.bid_volumes || orderBook.bidVolumes || []}
|
||||
preClose={realtimeQuote?.pre_close || quote.pre_close}
|
||||
updateTime={realtimeQuote?.update_time}
|
||||
askPrices={realtimeQuote?.ask_prices || fallbackOrderBook?.ask_prices || orderBook.askPrices || []}
|
||||
askVolumes={realtimeQuote?.ask_volumes || fallbackOrderBook?.ask_volumes || orderBook.askVolumes || []}
|
||||
bidPrices={realtimeQuote?.bid_prices || fallbackOrderBook?.bid_prices || orderBook.bidPrices || []}
|
||||
bidVolumes={realtimeQuote?.bid_volumes || fallbackOrderBook?.bid_volumes || orderBook.bidVolumes || []}
|
||||
preClose={realtimeQuote?.pre_close || fallbackOrderBook?.prev_close || quote.pre_close}
|
||||
updateTime={realtimeQuote?.update_time || fallbackOrderBook?.trade_time}
|
||||
isConnected={wsConnected}
|
||||
/>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user