feat: StockQuoteCard 根据股票代码获取真实行情数据
- 新增 useStockQuote Hook 获取股票行情 - Company 页面使用 Hook 并传递数据给 StockQuoteCard - StockQuoteCard 处理 null 数据显示骨架屏 - 股票代码变化时自动刷新行情数据 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -23,7 +23,6 @@ import { Share2 } from 'lucide-react';
|
||||
|
||||
import FavoriteButton from '@components/FavoriteButton';
|
||||
import type { StockQuoteCardProps } from './types';
|
||||
import { mockStockQuoteData } from './mockData';
|
||||
|
||||
/**
|
||||
* 格式化价格显示
|
||||
@@ -52,7 +51,7 @@ const formatNetInflow = (value: number): string => {
|
||||
};
|
||||
|
||||
const StockQuoteCard: React.FC<StockQuoteCardProps> = ({
|
||||
data = mockStockQuoteData,
|
||||
data,
|
||||
isLoading = false,
|
||||
isInWatchlist = false,
|
||||
isWatchlistLoading = false,
|
||||
@@ -74,19 +73,25 @@ const StockQuoteCard: React.FC<StockQuoteCardProps> = ({
|
||||
// 涨跌颜色(红涨绿跌)
|
||||
const upColor = '#F44336'; // 涨 - 红色
|
||||
const downColor = '#4CAF50'; // 跌 - 绿色
|
||||
const priceColor = data.changePercent >= 0 ? upColor : downColor;
|
||||
const inflowColor = data.mainNetInflow >= 0 ? upColor : downColor;
|
||||
|
||||
if (isLoading) {
|
||||
// 加载中或无数据时显示骨架屏
|
||||
if (isLoading || !data) {
|
||||
return (
|
||||
<Card bg={cardBg} shadow="sm" borderWidth="1px" borderColor={borderColor}>
|
||||
<CardBody>
|
||||
<Skeleton height="120px" />
|
||||
<VStack spacing={4} align="stretch">
|
||||
<Skeleton height="30px" width="200px" />
|
||||
<Skeleton height="60px" />
|
||||
<Skeleton height="80px" />
|
||||
</VStack>
|
||||
</CardBody>
|
||||
</Card>
|
||||
);
|
||||
}
|
||||
|
||||
const priceColor = data.changePercent >= 0 ? upColor : downColor;
|
||||
const inflowColor = data.mainNetInflow >= 0 ? upColor : downColor;
|
||||
|
||||
return (
|
||||
<Card bg={cardBg} shadow="sm" borderWidth="1px" borderColor={borderColor}>
|
||||
<CardBody>
|
||||
@@ -97,7 +102,7 @@ const StockQuoteCard: React.FC<StockQuoteCardProps> = ({
|
||||
<Text fontSize="22px" fontWeight="bold" color={valueColor}>
|
||||
{data.name}({data.code})
|
||||
</Text>
|
||||
{data.indexTags.length > 0 && (
|
||||
{data.indexTags?.length > 0 && (
|
||||
<>
|
||||
<Text color={labelColor} fontSize="22px" fontWeight="light">|</Text>
|
||||
<Text fontSize="16px" color={labelColor}>
|
||||
@@ -128,7 +133,7 @@ const StockQuoteCard: React.FC<StockQuoteCardProps> = ({
|
||||
/>
|
||||
</Tooltip>
|
||||
<Text fontSize="14px" color={labelColor}>
|
||||
{data.updateTime.split(' ')[1]}
|
||||
{data.updateTime?.split(' ')[1] || '--:--'}
|
||||
</Text>
|
||||
</HStack>
|
||||
</Flex>
|
||||
|
||||
Reference in New Issue
Block a user