feat(FinancialPanorama): 添加页面骨架屏

- 创建 FinancialPanoramaSkeleton 组件
- 初始加载时显示完整骨架屏(概览面板、图表、主营业务、Tab)
- 优化加载体验,避免内容闪烁

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
zdl
2025-12-19 15:13:24 +08:00
parent e71f42b608
commit 27b0e9375a
6 changed files with 810 additions and 11 deletions

View File

@@ -30,7 +30,6 @@ import {
// 通用组件
import SubTabContainer, { type SubTabConfig } from '@components/SubTabContainer';
import LoadingState from '../LoadingState';
// 内部模块导入
import { useFinancialData, type DataTypeKey } from './hooks';
@@ -42,6 +41,7 @@ import {
MainBusinessAnalysis,
ComparisonAnalysis,
MetricChartModal,
FinancialPanoramaSkeleton,
} from './components';
import {
BalanceSheetTab,
@@ -172,26 +172,31 @@ const FinancialPanorama: React.FC<FinancialPanoramaProps> = ({ stockCode: propSt
]
);
// 初始加载显示骨架屏
if (loading && !stockInfo) {
return (
<Container maxW="container.xl" py={5}>
<FinancialPanoramaSkeleton />
</Container>
);
}
return (
<Container maxW="container.xl" py={5}>
<VStack spacing={6} align="stretch">
{/* 财务全景面板(三列布局:成长能力、盈利与回报、风险与运营) */}
{loading ? (
<LoadingState message="加载财务数据中..." height="300px" variant="skeleton" skeletonRows={6} />
) : (
<FinancialOverviewPanel
stockInfo={stockInfo}
financialMetrics={financialMetrics}
/>
)}
<FinancialOverviewPanel
stockInfo={stockInfo}
financialMetrics={financialMetrics}
/>
{/* 营收与利润趋势 */}
{!loading && comparison && comparison.length > 0 && (
{comparison && comparison.length > 0 && (
<ComparisonAnalysis comparison={comparison} />
)}
{/* 主营业务 */}
{!loading && stockInfo && (
{stockInfo && (
<Box>
<Text fontSize="lg" fontWeight="bold" mb={4} color="#D4AF37">