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} |
- ))}
+ )}