// 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)}
发布时间
{/* 右侧关注按钮 */}
}
colorScheme={event.is_following ? "red" : "blue"}
variant={event.is_following ? "solid" : "outline"}
size="lg"
onClick={onFollowToggle}
borderRadius="full"
px={8}
py={6}
fontSize="md"
fontWeight="bold"
bg={event.is_following ? undefined : 'white'}
_hover={{
transform: 'translateY(-2px)',
shadow: 'lg'
}}
transition="all 0.2s"
>
{event.is_following ? '已关注' : '关注事件'}
{/* 统计数据卡片 */}
浏览量
{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;