From 03c113fe1b5d08059e7dabf6d8b4769af23b2a2c Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Mon, 27 Oct 2025 17:21:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=8E=B7=E5=8F=96bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/Company/FinancialPanorama.js | 58 +++++++++- src/views/Company/MarketDataView.js | 141 +++++++++++++++---------- 2 files changed, 138 insertions(+), 61 deletions(-) diff --git a/src/views/Company/FinancialPanorama.js b/src/views/Company/FinancialPanorama.js index 1839fa21..c5e973e7 100644 --- a/src/views/Company/FinancialPanorama.js +++ b/src/views/Company/FinancialPanorama.js @@ -473,6 +473,16 @@ const FinancialPanorama = ({ stockCode: propStockCode }) => { } ]; + // 数组安全检查 + if (!Array.isArray(balanceSheet) || balanceSheet.length === 0) { + return ( + + + 暂无资产负债表数据 + + ); + } + const maxColumns = Math.min(balanceSheet.length, 6); const displayData = balanceSheet.slice(0, maxColumns); @@ -707,6 +717,16 @@ const FinancialPanorama = ({ stockCode: propStockCode }) => { } ]; + // 数组安全检查 + if (!Array.isArray(incomeStatement) || incomeStatement.length === 0) { + return ( + + + 暂无利润表数据 + + ); + } + const maxColumns = Math.min(incomeStatement.length, 6); const displayData = incomeStatement.slice(0, maxColumns); @@ -866,6 +886,16 @@ const FinancialPanorama = ({ stockCode: propStockCode }) => { { name: '自由现金流', key: 'free_cash_flow', path: 'key_metrics.free_cash_flow' }, ]; + // 数组安全检查 + if (!Array.isArray(cashflow) || cashflow.length === 0) { + return ( + + + 暂无现金流量表数据 + + ); + } + const maxColumns = Math.min(cashflow.length, 8); const displayData = cashflow.slice(0, maxColumns); @@ -1069,6 +1099,16 @@ const FinancialPanorama = ({ stockCode: propStockCode }) => { } }; + // 数组安全检查 + if (!Array.isArray(financialMetrics) || financialMetrics.length === 0) { + return ( + + + 暂无财务指标数据 + + ); + } + const maxColumns = Math.min(financialMetrics.length, 6); const displayData = financialMetrics.slice(0, maxColumns); const currentCategory = metricsCategories[selectedCategory]; @@ -1426,8 +1466,9 @@ const FinancialPanorama = ({ stockCode: propStockCode }) => { return ( - {industryRank.map((periodData, periodIdx) => ( - + {Array.isArray(industryRank) && industryRank.length > 0 ? ( + industryRank.map((periodData, periodIdx) => ( + {periodData.report_type} 行业排名 @@ -1486,7 +1527,16 @@ const FinancialPanorama = ({ stockCode: propStockCode }) => { ))} - ))} + )) + ) : ( + + + + 暂无行业排名数据 + + + + )} ); }; @@ -1738,7 +1788,7 @@ const FinancialPanorama = ({ stockCode: propStockCode }) => { // 综合对比分析 const ComparisonAnalysis = () => { - if (!comparison || comparison.length === 0) return null; + if (!Array.isArray(comparison) || comparison.length === 0) return null; const revenueData = comparison.map(item => ({ period: formatUtils.getReportType(item.period), diff --git a/src/views/Company/MarketDataView.js b/src/views/Company/MarketDataView.js index 2aea7ebb..7a9e9595 100644 --- a/src/views/Company/MarketDataView.js +++ b/src/views/Company/MarketDataView.js @@ -1471,7 +1471,7 @@ const MarketDataView = ({ stockCode: propStockCode }) => { - {minuteData.data[0]?.open.toFixed(2)} + {minuteData.data[0]?.open != null ? minuteData.data[0].open.toFixed(2) : '-'} @@ -1485,13 +1485,15 @@ const MarketDataView = ({ stockCode: propStockCode }) => { color={minuteData.data[minuteData.data.length - 1]?.close >= minuteData.data[0]?.open ? theme.success : theme.danger} fontSize="lg" > - {minuteData.data[minuteData.data.length - 1]?.close.toFixed(2)} + {minuteData.data[minuteData.data.length - 1]?.close != null ? minuteData.data[minuteData.data.length - 1].close.toFixed(2) : '-'} = minuteData.data[0]?.open ? 'increase' : 'decrease'} /> - {Math.abs(((minuteData.data[minuteData.data.length - 1]?.close - minuteData.data[0]?.open) / minuteData.data[0]?.open * 100)).toFixed(2)}% + {(minuteData.data[minuteData.data.length - 1]?.close != null && minuteData.data[0]?.open != null) + ? Math.abs(((minuteData.data[minuteData.data.length - 1].close - minuteData.data[0].open) / minuteData.data[0].open * 100)).toFixed(2) + : '0.00'}% @@ -1502,7 +1504,10 @@ const MarketDataView = ({ stockCode: propStockCode }) => { - {Math.max(...minuteData.data.map(item => item.high)).toFixed(2)} + {(() => { + const highs = minuteData.data.map(item => item.high).filter(h => h != null); + return highs.length > 0 ? Math.max(...highs).toFixed(2) : '-'; + })()} @@ -1513,7 +1518,10 @@ const MarketDataView = ({ stockCode: propStockCode }) => { - {Math.min(...minuteData.data.map(item => item.low)).toFixed(2)} + {(() => { + const lows = minuteData.data.map(item => item.low).filter(l => l != null); + return lows.length > 0 ? Math.min(...lows).toFixed(2) : '-'; + })()} @@ -1558,7 +1566,10 @@ const MarketDataView = ({ stockCode: propStockCode }) => { 平均价格 - {(minuteData.data.reduce((sum, item) => sum + item.close, 0) / minuteData.data.length).toFixed(2)} + {(() => { + const closes = minuteData.data.map(item => item.close).filter(c => c != null); + return closes.length > 0 ? (closes.reduce((sum, c) => sum + c, 0) / closes.length).toFixed(2) : '-'; + })()} @@ -1744,7 +1755,7 @@ const MarketDataView = ({ stockCode: propStockCode }) => { 成交额: {formatUtils.formatNumber(dayStats.total_amount)}万元 - 均价: {dayStats.avg_price.toFixed(2)}元 + 均价: {dayStats.avg_price != null ? dayStats.avg_price.toFixed(2) : '-'}元 @@ -1766,23 +1777,23 @@ const MarketDataView = ({ stockCode: propStockCode }) => { {dayStats.deals.map((deal, i) => ( - - {deal.buyer_dept} + + {deal.buyer_dept || '-'} - - {deal.seller_dept} + + {deal.seller_dept || '-'} - {deal.price.toFixed(2)} + {deal.price != null ? deal.price.toFixed(2) : '-'} - {deal.volume.toFixed(2)} + {deal.volume != null ? deal.volume.toFixed(2) : '-'} - {deal.amount.toFixed(2)} + {deal.amount != null ? deal.amount.toFixed(2) : '-'} ))} @@ -1845,22 +1856,26 @@ const MarketDataView = ({ stockCode: propStockCode }) => { 买入前五 - {dayData.buyers.slice(0, 5).map((buyer, i) => ( - - - {buyer.dept_name} - - - {formatUtils.formatNumber(buyer.buy_amount)} - - - ))} + {dayData.buyers && dayData.buyers.length > 0 ? ( + dayData.buyers.slice(0, 5).map((buyer, i) => ( + + + {buyer.dept_name} + + + {formatUtils.formatNumber(buyer.buy_amount)} + + + )) + ) : ( + 暂无数据 + )} @@ -1869,22 +1884,26 @@ const MarketDataView = ({ stockCode: propStockCode }) => { 卖出前五 - {dayData.sellers.slice(0, 5).map((seller, i) => ( - - - {seller.dept_name} - - - {formatUtils.formatNumber(seller.sell_amount)} - - - ))} + {dayData.sellers && dayData.sellers.length > 0 ? ( + dayData.sellers.slice(0, 5).map((seller, i) => ( + + + {seller.dept_name} + + + {formatUtils.formatNumber(seller.sell_amount)} + + + )) + ) : ( + 暂无数据 + )} @@ -1948,19 +1967,27 @@ const MarketDataView = ({ stockCode: propStockCode }) => { - {pledgeData.map((item, idx) => ( - - {item.end_date} - {formatUtils.formatNumber(item.unrestricted_pledge, 0)} - {formatUtils.formatNumber(item.restricted_pledge, 0)} - {formatUtils.formatNumber(item.total_pledge, 0)} - {formatUtils.formatNumber(item.total_shares, 0)} - - {formatUtils.formatPercent(item.pledge_ratio)} + {Array.isArray(pledgeData) && pledgeData.length > 0 ? ( + pledgeData.map((item, idx) => ( + + {item.end_date} + {formatUtils.formatNumber(item.unrestricted_pledge, 0)} + {formatUtils.formatNumber(item.restricted_pledge, 0)} + {formatUtils.formatNumber(item.total_pledge, 0)} + {formatUtils.formatNumber(item.total_shares, 0)} + + {formatUtils.formatPercent(item.pledge_ratio)} + + {item.pledge_count} + + )) + ) : ( + + + 暂无数据 - {item.pledge_count} - ))} + )}