feat:添加mock接口
1. ✅ Profile 和 Settings 页面(2个文件) 2. ✅ EventDetail 页面(1个文件) 3. ✅ 身份验证组件(WechatRegister.js) 4. ✅ Company 页面(CompanyOverview, index, FinancialPanorama, MarketDataView) 5. ✅ Concept 页面(ConceptTimelineModal, ConceptStatsPanel, index)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
// src/views/Market/MarketDataPro.jsx
|
||||
import React, { useState, useEffect, useMemo } from 'react';
|
||||
import { logger } from '../../utils/logger';
|
||||
import {
|
||||
Box,
|
||||
Container,
|
||||
@@ -151,7 +152,7 @@ const marketService = {
|
||||
}
|
||||
return response.json();
|
||||
} catch (error) {
|
||||
console.error(`API request failed for ${url}:`, error);
|
||||
logger.error('marketService', 'apiRequest', error, { url });
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
@@ -317,6 +318,7 @@ const MarketDataView = ({ stockCode: propStockCode }) => {
|
||||
|
||||
// 加载数据
|
||||
const loadMarketData = async () => {
|
||||
logger.debug('MarketDataView', '开始加载市场数据', { stockCode, selectedPeriod });
|
||||
setLoading(true);
|
||||
try {
|
||||
const [summaryRes, tradeRes, fundingRes, bigDealRes, unusualRes, pledgeRes, riseAnalysisRes] = await Promise.all([
|
||||
@@ -337,12 +339,12 @@ const MarketDataView = ({ stockCode: propStockCode }) => {
|
||||
if (pledgeRes.success) setPledgeData(pledgeRes.data);
|
||||
if (riseAnalysisRes.success) {
|
||||
setRiseAnalysisData(riseAnalysisRes.data);
|
||||
|
||||
|
||||
// 创建分析数据映射
|
||||
const tempAnalysisMap = {};
|
||||
if (tradeRes.success && tradeRes.data && riseAnalysisRes.data) {
|
||||
riseAnalysisRes.data.forEach(analysis => {
|
||||
const dateIndex = tradeRes.data.findIndex(item =>
|
||||
const dateIndex = tradeRes.data.findIndex(item =>
|
||||
item.date.substring(0, 10) === analysis.trade_date
|
||||
);
|
||||
if (dateIndex !== -1) {
|
||||
@@ -352,22 +354,14 @@ const MarketDataView = ({ stockCode: propStockCode }) => {
|
||||
}
|
||||
setAnalysisMap(tempAnalysisMap);
|
||||
}
|
||||
|
||||
toast({
|
||||
title: '数据加载成功',
|
||||
status: 'success',
|
||||
duration: 2000,
|
||||
isClosable: true,
|
||||
});
|
||||
|
||||
// ❌ 移除数据加载成功toast
|
||||
logger.info('MarketDataView', '市场数据加载成功', { stockCode });
|
||||
} catch (error) {
|
||||
console.error('Failed to load market data:', error);
|
||||
toast({
|
||||
title: '数据加载失败',
|
||||
description: error.message,
|
||||
status: 'error',
|
||||
duration: 5000,
|
||||
isClosable: true,
|
||||
});
|
||||
logger.error('MarketDataView', 'loadMarketData', error, { stockCode, selectedPeriod });
|
||||
|
||||
// ❌ 移除数据加载失败toast
|
||||
// toast({ title: '数据加载失败', description: error.message, status: 'error', duration: 5000, isClosable: true });
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@@ -375,6 +369,7 @@ const MarketDataView = ({ stockCode: propStockCode }) => {
|
||||
|
||||
// 获取分钟频数据
|
||||
const loadMinuteData = async () => {
|
||||
logger.debug('MarketDataView', '开始加载分钟频数据', { stockCode });
|
||||
setMinuteLoading(true);
|
||||
try {
|
||||
const response = await fetch(
|
||||
@@ -394,19 +389,17 @@ const MarketDataView = ({ stockCode: propStockCode }) => {
|
||||
const data = await response.json();
|
||||
if (data.data && Array.isArray(data.data)) {
|
||||
setMinuteData(data);
|
||||
logger.info('MarketDataView', '分钟频数据加载成功', { stockCode, dataPoints: data.data.length });
|
||||
} else {
|
||||
setMinuteData({ data: [], code: stockCode, name: '', trade_date: '', type: 'minute' });
|
||||
logger.warn('MarketDataView', '分钟频数据为空', { stockCode });
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('Failed to load minute data:', error);
|
||||
toast({
|
||||
title: '分钟数据加载失败',
|
||||
description: error.message,
|
||||
status: 'error',
|
||||
duration: 3000,
|
||||
isClosable: true,
|
||||
});
|
||||
logger.error('MarketDataView', 'loadMinuteData', error, { stockCode });
|
||||
|
||||
// ❌ 移除分钟数据加载失败toast
|
||||
// toast({ title: '分钟数据加载失败', description: error.message, status: 'error', duration: 3000, isClosable: true });
|
||||
setMinuteData({ data: [], code: stockCode, name: '', trade_date: '', type: 'minute' });
|
||||
} finally {
|
||||
setMinuteLoading(false);
|
||||
|
||||
Reference in New Issue
Block a user