/**
* StockQuoteCard - 股票行情卡片组件
*
* 深空 FUI 设计风格(Glassmorphism + Ash Thorp + James Turrell)
* - 半透明玻璃态卡片,漂浮在深空中
* - 光影深度,弥散背景光
* - 极致圆角,科幻数据终端感
*
* 保留原有所有功能:
* - 股票头部(名称、代码、行业、对比、关注、分享)
* - 价格显示(当前价、涨跌幅)
* - 次要行情(今开、昨收、最高、最低)
* - 关键指标(PE、市值、股本、换手率、52周)
* - 主力动态(净流入、机构持仓、买卖比)
* - 公司信息(成立、注册资本、所在地、官网、简介)
*/
import React, { memo } from 'react';
import {
Box,
Flex,
HStack,
VStack,
Text,
Badge,
IconButton,
Tooltip,
Skeleton,
Progress,
Link,
Icon,
useDisclosure,
} from '@chakra-ui/react';
import { Share2, Calendar, Coins, MapPin, Globe } from 'lucide-react';
import FavoriteButton from '@components/FavoriteButton';
import { StockCompareModal, CompareStockInput } from './components';
import { useStockQuoteData, useStockCompare } from './hooks';
import { DEEP_SPACE_THEME, glassCardStyle, decorativeElements } from './components/theme';
import { formatPrice, formatChangePercent, formatNetInflow } from './components/formatters';
import { formatRegisteredCapital, formatDate } from '../CompanyOverview/utils';
import type { StockQuoteCardProps } from './types';
const T = DEEP_SPACE_THEME;
/**
* 装饰性光效组件
*/
const GlowDecorations: React.FC = () => (
<>
{/* 顶部金色光条 */}
{/* 左上角光晕 */}
{/* 右下角光晕 */}
{/* 背景网格 */}
>
);
/**
* 加载骨架屏
*/
const LoadingSkeleton: React.FC = () => (
{/* 头部骨架 */}
{/* 价格骨架 */}
{/* 内容骨架 */}
);
/**
* 玻璃态内嵌区块
*/
interface GlassSectionProps {
title: string;
children: React.ReactNode;
flex?: number | string;
}
const GlassSection: React.FC = ({ title, children, flex = 1 }) => (
{/* 区块顶部光条 */}
{title}
{children}
);
/**
* 指标行组件
*/
interface MetricRowProps {
label: string;
value: string | number;
valueColor?: string;
highlight?: boolean;
}
const MetricRow: React.FC = ({
label,
value,
valueColor = T.textWhite,
highlight = false,
}) => (
{label}
{value}
);
const StockQuoteCard: React.FC = ({
stockCode,
isInWatchlist = false,
isWatchlistLoading = false,
onWatchlistToggle,
}) => {
const { quoteData, basicInfo, isLoading } = useStockQuoteData(stockCode);
const {
currentStockInfo,
compareStockInfo,
isCompareLoading,
handleCompare: triggerCompare,
clearCompare,
} = useStockCompare(stockCode);
const { isOpen: isCompareModalOpen, onOpen: openCompareModal, onClose: closeCompareModal } = useDisclosure();
const handleCompare = (compareCode: string) => {
triggerCompare(compareCode);
openCompareModal();
};
const handleCloseCompare = () => {
closeCompareModal();
clearCompare();
};
// 加载中
if (isLoading || !quoteData) {
return ;
}
// 涨跌判断
const isUp = quoteData.changePercent >= 0;
const priceColor = isUp ? T.upColor : T.downColor;
const priceGlow = isUp ? T.upGlow : T.downGlow;
const priceBg = isUp ? T.upColorMuted : T.downColorMuted;
const inflowColor = (quoteData.mainNetInflow || 0) >= 0 ? T.upColor : T.downColor;
return (
<>
{/* 内容区域(在装饰层之上)*/}
{/* ========== 头部区域 ========== */}
{/* 左侧:股票名称 + 代码 + 行业 */}
{quoteData.name}
({quoteData.code})
{/* 行业标签 */}
{(quoteData.industryL1 || quoteData.industry) && (
{quoteData.industryL1 && quoteData.industry
? `${quoteData.industryL1} · ${quoteData.industry}`
: quoteData.industry || quoteData.industryL1}
)}
{/* 指数标签 */}
{quoteData.indexTags && quoteData.indexTags.length > 0 && (
{quoteData.indexTags.join('、')}
)}
{/* 右侧:操作按钮 */}
{})}
colorScheme="gold"
size="sm"
/>
}
variant="ghost"
color={T.textSecondary}
size="sm"
borderRadius={T.radiusSM}
_hover={{ bg: T.borderGlass, color: T.textPrimary }}
/>
{quoteData.updateTime?.split(' ')[1] || '--:--'}
{/* ========== 价格区域 ========== */}
{formatPrice(quoteData.currentPrice)}
{formatChangePercent(quoteData.changePercent)}
{/* ========== 次要行情 ========== */}
今开:
{formatPrice(quoteData.todayOpen)}
昨收:
{formatPrice(quoteData.yesterdayClose)}
最高:
{formatPrice(quoteData.todayHigh)}
最低:
{formatPrice(quoteData.todayLow)}
{/* ========== 数据区块(三列布局)========== */}
{/* 第一列:估值指标 */}
5 ? T.orange : T.textWhite}
/>
{/* 第二列:市值股本 */}
{/* 第三列:主力动态 */}
{/* 买卖比例条 */}
{/* ========== 公司信息(已注释)========== */}
{/* {basicInfo && (
<>
成立:
{formatDate(basicInfo.establish_date)}
注册资本:
{formatRegisteredCapital(basicInfo.reg_capital)}
所在地:
{basicInfo.province} {basicInfo.city}
{basicInfo.website ? (
访问官网
) : (
暂无官网
)}
公司简介:
{basicInfo.company_intro || '暂无'}
>
)} */}
{/* 股票对比弹窗 */}
>
);
};
export default memo(StockQuoteCard);