// src/components/Subscription/SubscriptionButton.js import React from 'react'; import { Box, VStack, HStack, Text, Tooltip, Divider, useColorModeValue } from '@chakra-ui/react'; import PropTypes from 'prop-types'; /** * 订阅徽章按钮组件 - 用于导航栏头像旁边 * 简洁显示订阅等级,hover 显示详细卡片式 Tooltip */ export default function SubscriptionButton({ subscriptionInfo, onClick }) { const tooltipBg = useColorModeValue('white', 'gray.800'); const tooltipBorder = useColorModeValue('gray.200', 'gray.600'); const tooltipText = useColorModeValue('gray.700', 'gray.100'); const dividerColor = useColorModeValue('gray.200', 'gray.600'); // 根据订阅类型返回样式配置 const getButtonStyles = () => { if (subscriptionInfo.type === 'max') { return { bg: 'transparent', color: '#3182CE', icon: '👑', label: 'Max', shadow: 'none', hoverShadow: '0 2px 8px rgba(49, 130, 206, 0.2)', border: '1.5px solid', borderColor: '#4299E1', accentColor: '#3182CE', }; } if (subscriptionInfo.type === 'pro') { return { bg: 'transparent', color: '#667eea', icon: '💎', label: 'Pro', shadow: 'none', hoverShadow: '0 2px 8px rgba(102, 126, 234, 0.2)', border: '1.5px solid', borderColor: '#667eea', accentColor: '#667eea', }; } // 基础版 return { bg: 'transparent', color: useColorModeValue('gray.600', 'gray.400'), icon: '✨', label: '基础版', shadow: 'none', hoverShadow: '0 2px 8px rgba(0, 0, 0, 0.1)', border: '1.5px solid', borderColor: useColorModeValue('gray.300', 'gray.600'), accentColor: useColorModeValue('#718096', '#A0AEC0'), }; }; const styles = getButtonStyles(); // 增强的卡片式 Tooltip 内容 const TooltipContent = () => { const { type, days_left, is_active } = subscriptionInfo; // 基础版用户 if (type === 'free') { return ( ✨ 基础版用户 解锁更多高级功能 🚀 立即升级 ); } // 付费用户 const isExpired = !is_active; const isUrgent = days_left < 7; const isWarning = days_left < 30; return ( {type === 'pro' ? '💎 Pro 会员' : '👑 Max 会员'} {isExpired && 已过期} {/* 状态信息 */} {isExpired ? ( 会员已过期,续费恢复权益 ) : ( {isUrgent ? '⚠️' : isWarning ? '⏰' : '📅'} {isUrgent && 紧急!} {' '}还有 {days_left} 天到期 享受全部高级功能 )} {/* 行动按钮 */} {isExpired ? '💳 立即续费' : isUrgent ? '⚡ 紧急续费' : '💼 管理订阅'} ); }; return ( } hasArrow placement="bottom" bg={tooltipBg} color={tooltipText} borderRadius="lg" border="1px solid" borderColor={tooltipBorder} boxShadow="lg" p={3} > {styles.icon} {styles.label} ); } SubscriptionButton.propTypes = { subscriptionInfo: PropTypes.shape({ type: PropTypes.oneOf(['free', 'pro', 'max']).isRequired, days_left: PropTypes.number, is_active: PropTypes.bool, }).isRequired, onClick: PropTypes.func.isRequired, };