import React, { useState, useCallback } from 'react'; import { Sparkles, MapPin, Clock, Palette, Tag, Camera, ExternalLink, ChevronRight, Sun, Moon, Sunrise, Sunset, Search, } from 'lucide-react'; import { OutfitRecommendationCardProps } from '../../types/outfitRecommendation'; /** * 穿搭方案推荐卡片组件 * 遵循设计系统规范,提供统一的方案展示界面 */ export const OutfitRecommendationCard: React.FC = ({ recommendation, onSelect, onSceneSearch, onMaterialSearch, showDetails = true, compact = false, className = '', }) => { const [isExpanded, setIsExpanded] = useState(false); // 处理卡片点击 const handleCardClick = useCallback((e: React.MouseEvent) => { // 如果点击的是按钮或其子元素,不触发卡片选择 const target = e.target as HTMLElement; if (target.closest('button')) { return; } if (onSelect) { onSelect(recommendation); } }, [recommendation, onSelect]); // 处理场景检索 const handleSceneSearch = useCallback((e: React.MouseEvent) => { e.stopPropagation(); if (onSceneSearch) { onSceneSearch(recommendation); } }, [recommendation, onSceneSearch]); // 处理素材检索 const handleMaterialSearch = useCallback((e: React.MouseEvent) => { e.stopPropagation(); if (onMaterialSearch) { onMaterialSearch(recommendation); } }, [recommendation, onMaterialSearch]); // 处理展开/收起 const handleToggleExpand = useCallback((e: React.MouseEvent) => { e.stopPropagation(); setIsExpanded(!isExpanded); }, [isExpanded]); // 获取时间段图标 const getTimeIcon = (timeOfDay: string) => { switch (timeOfDay.toLowerCase()) { case '早晨': case '上午': return ; case '中午': case '下午': return ; case '傍晚': case '黄昏': return ; case '晚上': case '夜晚': return ; default: return ; } }; return (
{/* 装饰性背景 */}
{/* 标题和描述 */}

{recommendation.title}

{recommendation.description}

{/* 风格标签 */}
{recommendation.overall_style}
{recommendation.style_tags.slice(0, 2).map((tag, index) => (
{tag}
))} {recommendation.style_tags.length > 2 && (
+{recommendation.style_tags.length - 2}
)}
{/* 主要色彩 */} {recommendation.primary_colors.length > 0 && (
{recommendation.primary_colors.slice(0, 4).map((color, index) => (
))} {recommendation.primary_colors.length > 4 && ( +{recommendation.primary_colors.length - 4} )}
)} {/* 适合场合和季节 */}
适合场合:
{recommendation.occasions.slice(0, 2).join('、')} {recommendation.occasions.length > 2 && '...'}
适合季节:
{recommendation.seasons.join('、')}
{/* 详细信息 (可展开) */} {showDetails && ( <> {/* 展开/收起按钮 */} {/* 展开的详细内容 */} {isExpanded && (
{/* 穿搭单品 */} {recommendation.items.length > 0 && (

穿搭单品

{recommendation.items.map((item, index) => (
{item.category}
{item.description}
))}
)} {/* 场景推荐 */} {recommendation.scene_recommendations.length > 0 && (

推荐场景

{recommendation.scene_recommendations.slice(0, 2).map((scene, index) => (
{scene.name} {scene.scene_type}

{scene.description}

{scene.time_of_day.length > 0 && (
{scene.time_of_day.slice(0, 3).map((time, timeIndex) => (
{getTimeIcon(time)} {time}
))}
)}
))}
)} {/* TikTok优化建议 */} {recommendation.tiktok_tips.length > 0 && (

TikTok优化建议

{recommendation.tiktok_tips.slice(0, 3).map((tip, index) => (
{tip}
))}
)}
)} )} {/* 底部操作按钮 */}
{recommendation.color_theme}
{onMaterialSearch && ( )} {onSceneSearch && ( )}
); }; export default OutfitRecommendationCard;