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:
@@ -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">
|
||||
主营业务
|
||||
|
||||
Reference in New Issue
Block a user