import React, { useCallback, useState } from 'react'; import { Grid, List, Loader2, AlertCircle, Package, } from 'lucide-react'; import { MaterialSearchResultsProps } from '../../types/outfitRecommendation'; import { MaterialCard, MaterialSearchPagination } from './index'; import { EmptyState } from '../EmptyState'; import MaterialSearchService from '../../services/materialSearchService'; /** * 素材检索结果列表组件 * 遵循设计系统规范,提供统一的结果展示界面 */ const MaterialSearchResults: React.FC = ({ results, totalSize, currentPage, pageSize, isLoading = false, error, onPageChange, onMaterialSelect, className = '', }) => { // 视图模式状态 const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid'); // 计算分页信息 const totalPages = MaterialSearchService.getTotalPages(totalSize, pageSize); const pageInfo = MaterialSearchService.getPageRangeInfo(currentPage, pageSize, totalSize); // 处理页面变化 const handlePageChange = useCallback((page: number) => { if (page >= 1 && page <= totalPages && !isLoading) { onPageChange(page); } }, [totalPages, onPageChange, isLoading]); // 处理素材选择 const handleMaterialSelect = useCallback((material: any) => { if (onMaterialSelect) { onMaterialSelect(material); } }, [onMaterialSelect]); // 加载状态 if (isLoading && results.length === 0) { return (
{/* 加载标题 */}

正在检索素材...

请稍候,我们正在为您搜索最合适的素材

{/* 加载骨架屏 */}
{[1, 2, 3, 4, 5, 6].map((index) => (
{/* 图片骨架 */}
{/* 标题骨架 */}
{/* 描述骨架 */}
{/* 标签骨架 */}
))}
); } // 错误状态 if (error) { return (
} title="检索失败" description={error} actionText="重新检索" onAction={() => onPageChange(currentPage)} illustration="error" size="md" className="py-12" />
); } // 空状态 if (!results || results.length === 0) { return (
} title="暂无素材结果" description="未找到符合条件的素材,请尝试调整检索条件" actionText="重新检索" onAction={() => onPageChange(1)} illustration="folder" size="md" className="py-12" showTips={true} tips={[ '尝试使用更通用的关键词', '调整颜色和风格过滤条件', '检查网络连接是否正常', ]} />
); } // 正常状态 - 显示结果列表 return (
{/* 列表标题和统计信息 */}

素材检索结果

第 {pageInfo.start}-{pageInfo.end} 项,共 {totalSize} 个素材

{/* 视图切换 */}
{/* 素材卡片展示 */}
{results.map((material, index) => ( ))}
{/* 分页控制 */} {totalPages > 1 && ( )} {/* 底部提示 */}

💡 使用提示

  • 点击素材卡片查看详细信息和产品描述
  • 使用分页控制浏览更多素材结果
  • 相关性评分越高表示与穿搭方案越匹配
  • 可以重新生成检索条件获得不同的结果
{/* 加载遮罩 */} {isLoading && results.length > 0 && (
正在加载...
)}
); }; export default MaterialSearchResults;