/** * StockQuoteCard - 股票行情卡片组件 * * 展示股票的实时行情、关键指标和主力动态 */ import React from 'react'; import { Box, Card, CardBody, Flex, HStack, VStack, Text, Badge, Progress, Skeleton, } from '@chakra-ui/react'; import type { StockQuoteCardProps } from './types'; import { mockStockQuoteData } from './mockData'; /** * 格式化价格显示 */ const formatPrice = (price: number): string => { return price.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2, }); }; /** * 格式化涨跌幅显示 */ const formatChangePercent = (percent: number): string => { const sign = percent >= 0 ? '+' : ''; return `${sign}${percent.toFixed(2)}%`; }; /** * 格式化主力净流入显示 */ const formatNetInflow = (value: number): string => { const sign = value >= 0 ? '+' : ''; return `${sign}${value.toFixed(2)}亿`; }; const StockQuoteCard: React.FC = ({ data = mockStockQuoteData, isLoading = false, }) => { // 颜色配置 const cardBg = 'white'; const borderColor = 'gray.200'; const labelColor = 'gray.500'; const valueColor = 'gray.800'; const sectionTitleColor = 'gray.600'; // 涨跌颜色 const priceColor = data.changePercent >= 0 ? 'green.500' : 'red.500'; const inflowColor = data.mainNetInflow >= 0 ? 'green.500' : 'red.500'; if (isLoading) { return ( ); } return ( {/* 顶部:股票名称 + 更新时间 */} {data.name} ({data.code}) {data.indexTags.map((tag) => ( {tag} ))} 更新时间:{data.updateTime} {/* 三栏布局 */} {/* 左栏:价格信息 */} {formatPrice(data.currentPrice)} = 0 ? 'green' : 'red'} fontSize="md" px={2} py={0.5} > {formatChangePercent(data.changePercent)} 今开: {formatPrice(data.todayOpen)} 昨收: {formatPrice(data.yesterdayClose)} {/* 中栏:关键指标 */} 关键指标 市盈率(PE): {data.pe.toFixed(2)} 市净率(PB): {data.pb.toFixed(2)} 流通市值: {data.marketCap} 52周波动: {formatPrice(data.week52Low)}-{formatPrice(data.week52High)} {/* 右栏:主力动态 */} 主力动态 主力净流入: {formatNetInflow(data.mainNetInflow)} 机构持仓: {data.institutionHolding.toFixed(2)}% {/* 买卖比例条 */} 买入{data.buyRatio}% 卖出{data.sellRatio}% ); }; export default StockQuoteCard;