feat: StockQuoteCard 顶部导航区视觉优化
- 股票名称字号放大至 26px,字重 800,突出显示 - 添加行业标签(金融 · 银行),Badge 边框样式 - 保留指数标签(沪深300、上证180) - Mock 数据补充 industry、industry_l1、index_tags 字段 - 类型定义新增 industry、industryL1 可选字段 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -368,6 +368,25 @@ export const stockHandlers = [
|
||||
stockMap[s.code] = s.name;
|
||||
});
|
||||
|
||||
// 行业和指数映射表
|
||||
const stockIndustryMap = {
|
||||
'000001': { industry_l1: '金融', industry: '银行', index_tags: ['沪深300', '上证180'] },
|
||||
'600519': { industry_l1: '消费', industry: '白酒', index_tags: ['沪深300', '上证50'] },
|
||||
'300750': { industry_l1: '工业', industry: '电池', index_tags: ['创业板50'] },
|
||||
'601318': { industry_l1: '金融', industry: '保险', index_tags: ['沪深300', '上证50'] },
|
||||
'600036': { industry_l1: '金融', industry: '银行', index_tags: ['沪深300', '上证50'] },
|
||||
'000858': { industry_l1: '消费', industry: '白酒', index_tags: ['沪深300'] },
|
||||
'002594': { industry_l1: '汽车', industry: '乘用车', index_tags: ['沪深300', '创业板指'] },
|
||||
};
|
||||
|
||||
const defaultIndustries = [
|
||||
{ industry_l1: '科技', industry: '软件' },
|
||||
{ industry_l1: '医药', industry: '化学制药' },
|
||||
{ industry_l1: '消费', industry: '食品' },
|
||||
{ industry_l1: '金融', industry: '证券' },
|
||||
{ industry_l1: '工业', industry: '机械' },
|
||||
];
|
||||
|
||||
// 为每只股票生成报价数据
|
||||
const quotesData = {};
|
||||
codes.forEach(stockCode => {
|
||||
@@ -380,6 +399,11 @@ export const stockHandlers = [
|
||||
// 昨收
|
||||
const prevClose = parseFloat((basePrice - change).toFixed(2));
|
||||
|
||||
// 获取行业和指数信息
|
||||
const codeWithoutSuffix = stockCode.replace(/\.(SH|SZ)$/i, '');
|
||||
const industryInfo = stockIndustryMap[codeWithoutSuffix] ||
|
||||
defaultIndustries[Math.floor(Math.random() * defaultIndustries.length)];
|
||||
|
||||
quotesData[stockCode] = {
|
||||
code: stockCode,
|
||||
name: stockMap[stockCode] || `股票${stockCode}`,
|
||||
@@ -393,7 +417,11 @@ export const stockHandlers = [
|
||||
volume: Math.floor(Math.random() * 100000000),
|
||||
amount: parseFloat((Math.random() * 10000000000).toFixed(2)),
|
||||
market: stockCode.startsWith('6') ? 'SH' : 'SZ',
|
||||
update_time: new Date().toISOString()
|
||||
update_time: new Date().toISOString(),
|
||||
// 行业和指数标签
|
||||
industry_l1: industryInfo.industry_l1,
|
||||
industry: industryInfo.industry,
|
||||
index_tags: industryInfo.index_tags || []
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
@@ -97,18 +97,40 @@ const StockQuoteCard: React.FC<StockQuoteCardProps> = ({
|
||||
<CardBody>
|
||||
{/* 顶部:股票名称 + 关注/分享按钮 + 更新时间 */}
|
||||
<Flex justify="space-between" align="center" mb={4}>
|
||||
{/* 左侧:名称(代码) | 指数标签 */}
|
||||
<HStack spacing={2}>
|
||||
<Text fontSize="22px" fontWeight="bold" color={valueColor}>
|
||||
{data.name}({data.code})
|
||||
{/* 左侧:股票名称 + 行业标签 + 指数标签 */}
|
||||
<HStack spacing={3} align="center">
|
||||
{/* 股票名称 - 突出显示 */}
|
||||
<Text fontSize="26px" fontWeight="800" color={valueColor}>
|
||||
{data.name}
|
||||
</Text>
|
||||
<Text fontSize="18px" fontWeight="normal" color={labelColor}>
|
||||
({data.code})
|
||||
</Text>
|
||||
|
||||
{/* 行业标签 */}
|
||||
{(data.industryL1 || data.industry) && (
|
||||
<Badge
|
||||
bg="transparent"
|
||||
color={labelColor}
|
||||
fontSize="14px"
|
||||
fontWeight="medium"
|
||||
border="1px solid"
|
||||
borderColor={borderColor}
|
||||
px={2}
|
||||
py={0.5}
|
||||
borderRadius="md"
|
||||
>
|
||||
{data.industryL1 && data.industry
|
||||
? `${data.industryL1} · ${data.industry}`
|
||||
: data.industry || data.industryL1}
|
||||
</Badge>
|
||||
)}
|
||||
|
||||
{/* 指数标签 */}
|
||||
{data.indexTags?.length > 0 && (
|
||||
<>
|
||||
<Text color={labelColor} fontSize="22px" fontWeight="light">|</Text>
|
||||
<Text fontSize="16px" color={labelColor}>
|
||||
<Text fontSize="14px" color={labelColor}>
|
||||
{data.indexTags.join('、')}
|
||||
</Text>
|
||||
</>
|
||||
)}
|
||||
</HStack>
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ export interface StockQuoteCardData {
|
||||
name: string; // 股票名称
|
||||
code: string; // 股票代码
|
||||
indexTags: string[]; // 指数标签(如 沪深300、上证50)
|
||||
industry?: string; // 所属行业(二级),如 "银行"
|
||||
industryL1?: string; // 一级行业,如 "金融"
|
||||
|
||||
// 价格信息
|
||||
currentPrice: number; // 当前价格
|
||||
|
||||
@@ -16,6 +16,8 @@ const transformQuoteData = (apiData, stockCode) => {
|
||||
name: apiData.name || apiData.stock_name || '未知',
|
||||
code: apiData.code || apiData.stock_code || stockCode,
|
||||
indexTags: apiData.index_tags || apiData.indexTags || [],
|
||||
industry: apiData.industry || apiData.sw_industry_l2 || '',
|
||||
industryL1: apiData.industry_l1 || apiData.sw_industry_l1 || '',
|
||||
|
||||
// 价格信息
|
||||
currentPrice: apiData.current_price || apiData.currentPrice || apiData.close || 0,
|
||||
|
||||
Reference in New Issue
Block a user