// src/views/Community/components/DynamicNewsDetail/EventHeaderInfo.js // 事件头部信息区组件 import React from 'react'; import { Box, Flex, HStack, Heading, Text, useColorModeValue, } from '@chakra-ui/react'; import { ViewIcon } from '@chakra-ui/icons'; import moment from 'moment'; import StockChangeIndicators from '../../../../components/StockChangeIndicators'; import EventFollowButton from '../EventCard/EventFollowButton'; /** * 事件头部信息区组件 * @param {Object} props * @param {Object} props.event - 事件对象 * @param {Object} props.importance - 重要性配置对象(包含 level, color 等) * @param {boolean} props.isFollowing - 是否已关注 * @param {number} props.followerCount - 关注数 * @param {Function} props.onToggleFollow - 切换关注回调 */ const EventHeaderInfo = ({ event, importance, isFollowing, followerCount, onToggleFollow }) => { const sectionBg = useColorModeValue('gray.50', 'gray.750'); const headingColor = useColorModeValue('gray.700', 'gray.200'); // 获取重要性文本 const getImportanceText = () => { const levelMap = { 'S': '极高', 'A': '高', 'B': '中', 'C': '低' }; return levelMap[importance.level] || '中'; }; // 格式化涨跌幅数字 const formatChange = (value) => { if (value === null || value === undefined) return '--'; const prefix = value > 0 ? '+' : ''; return `${prefix}${value.toFixed(2)}%`; }; return ( {/* 粉色圆角标签(左上角绝对定位) */} {event.related_avg_chg !== null && event.related_avg_chg !== undefined && ( {formatChange(event.related_avg_chg)} )} {/* 第一行:标题 + 关注按钮 */} {/* 标题 */} {event.title} {/* 关注按钮 */} {/* 第二行:浏览数 + 日期 */} {/* 浏览数 */} {(event.view_count || 0).toLocaleString()}次浏览 {/* 日期 */} {moment(event.created_at).format('YYYY年MM月DD日')} {/* 第三行:涨跌幅指标 + 重要性文本 */} {/* 重要性文本 */} 重要性:{getImportanceText()} ); }; export default EventHeaderInfo;