// src/views/EventDetail/components/EventHeader.js - 改进的事件头部信息组件 import React from 'react'; import { Box, Flex, HStack, VStack, Text, Button, Badge, Avatar, Icon, Tag, TagLabel, Wrap, WrapItem, useColorModeValue, Divider, SimpleGrid, Stat, StatLabel, StatNumber, StatHelpText, StatArrow } from '@chakra-ui/react'; import { Heart, Eye, MessageCircle, Users, Clock, Calendar, LineChart } from 'lucide-react'; const EventHeader = ({ event, onFollowToggle }) => { // 颜色主题 const bgGradient = useColorModeValue( 'linear(to-r, blue.50, purple.50)', 'linear(to-r, blue.900, purple.900)' ); const textPrimary = useColorModeValue('gray.800', 'white'); const textSecondary = useColorModeValue('gray.600', 'gray.300'); const borderColor = useColorModeValue('gray.200', 'gray.600'); const statBg = useColorModeValue('white', 'gray.700'); // 格式化日期 const formatDate = (dateString) => { if (!dateString) return '--'; return new Date(dateString).toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }); }; // 格式化数字 const formatNumber = (num) => { if (!num && num !== 0) return '0'; if (num >= 10000) { return (num / 10000).toFixed(1) + 'w'; } else if (num >= 1000) { return (num / 1000).toFixed(1) + 'k'; } return num.toString(); }; // 获取超预期分数颜色 const getScoreColor = (score) => { if (score >= 80) return 'red'; if (score >= 60) return 'orange'; if (score >= 40) return 'yellow'; return 'green'; }; if (!event) { return 加载中...; } return ( {/* 主要信息区域 */} {/* 装饰性背景图案 */} {/* 左侧内容 */} {/* 事件类型和状态 */} {event.event_type || '未分类'} {event.status === 'active' ? '进行中' : '已结束'} {event.expectation_surprise_score && ( 超预期: {event.expectation_surprise_score}分 )} {/* 事件标题 */} {event.title} {/* 创建者和时间信息 */} {event.creator?.username || '系统'} 创建者 {formatDate(event.created_at)} 发布时间 {/* 右侧关注按钮 */} {/* 统计数据卡片 */} 浏览量 {formatNumber(event.view_count)} 回复数 {formatNumber(event.post_count)} 关注数 {formatNumber(event.follower_count)} 热度分 {event.hot_score ? event.hot_score.toFixed(1) : '0.0'} {/* 事件描述 */} {event.description && ( 事件描述 )} {/* 相关标签 */} {event.keywords_list && event.keywords_list.length > 0 && ( 相关标签 {event.keywords_list.map((tag, index) => ( {tag} ))} )} ); }; export default EventHeader;