// src/views/Company/components/LoadingState.tsx // 统一的加载状态组件 - 黑金主题 import React, { memo } from "react"; import { Center, VStack, Spinner, Text, Box, Skeleton, SimpleGrid } from "@chakra-ui/react"; // 黑金主题配置 const THEME = { gold: "#D4AF37", goldLight: "rgba(212, 175, 55, 0.3)", bgInset: "rgba(26, 32, 44, 0.6)", borderGlass: "rgba(212, 175, 55, 0.2)", textSecondary: "gray.400", radiusSM: "md", radiusMD: "lg", }; interface LoadingStateProps { message?: string; height?: string; /** 使用骨架屏模式(更好的视觉体验) */ variant?: "spinner" | "skeleton"; /** 骨架屏行数 */ skeletonRows?: number; } /** * 骨架屏组件(黑金主题) */ const SkeletonContent: React.FC<{ rows: number }> = memo(({ rows }) => ( {/* 头部骨架 */} {/* 内容骨架行 */} {Array.from({ length: Math.min(rows, 8) }).map((_, i) => ( ))} {/* 图表区域骨架 */} )); SkeletonContent.displayName = "SkeletonContent"; /** * 统一的加载状态组件(黑金主题) * * 用于所有一级 Tab 的 loading 状态展示 * @param variant - "spinner"(默认)或 "skeleton"(骨架屏) */ const LoadingState: React.FC = memo(({ message = "加载中...", height = "300px", variant = "spinner", skeletonRows = 4, }) => { if (variant === "skeleton") { return ( ); } return (
{message}
); }); LoadingState.displayName = "LoadingState"; export default LoadingState;