From 99763ebefb78a9811e752b42f1aa28f679e00bca Mon Sep 17 00:00:00 2001 From: imeepos Date: Fri, 25 Jul 2025 15:48:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=B4=A0=E6=9D=90?= =?UTF-8?q?=E5=BA=93=E6=A3=80=E7=B4=A2=E5=88=97=E8=A1=A8=E8=A7=86=E5=9B=BE?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 列表视图重新设计: - 采用水平布局:左侧缩略图 + 中间内容 + 右侧操作 - 紧凑的20x20图片尺寸,保持清晰度 - 优化信息层次:标题、描述、标签分层显示 - 右侧操作区域:颜色指示器 + 查看按钮 + 时间 交互优化: - 悬停效果:图片缩放、背景渐变、阴影变化 - 评分标识移至图片右上角 - AI推荐标识在悬停时显示 - 标签数量限制和省略显示 布局改进: - 列表项间距调整为3px,更紧凑 - 移除不必要的flex样式冲突 - 保持网格视图原有的卡片布局 - 响应式设计适配不同屏幕尺寸 现在列表视图更加美观实用,信息密度合理! --- .../src/components/material/MaterialCard.tsx | 166 +++++++++++++++++- .../material/MaterialSearchResults.tsx | 6 +- 2 files changed, 167 insertions(+), 5 deletions(-) diff --git a/apps/desktop/src/components/material/MaterialCard.tsx b/apps/desktop/src/components/material/MaterialCard.tsx index 1a0d49a..3129457 100644 --- a/apps/desktop/src/components/material/MaterialCard.tsx +++ b/apps/desktop/src/components/material/MaterialCard.tsx @@ -63,6 +63,170 @@ const MaterialCard: React.FC = ({ const primaryProduct = material.products[0]; const hasMultipleProducts = material.products.length > 1; + // 列表视图的特殊布局 + if (compact) { + return ( +
setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} + > + {/* 装饰性背景 */} +
+ + {/* 左侧图片 */} +
+
+ {!imageError ? ( + {material.style_description} + ) : ( +
+ +
+ )} + + {/* 加载状态 */} + {!imageLoaded && !imageError && ( +
+
+
+ )} +
+ + {/* 评分标识 */} + {showScore && ( +
+ + {MaterialSearchService.formatRelevanceScore(material.relevance_score)} +
+ )} +
+ + {/* 中间内容 */} +
+ {/* 标题和描述 */} +
+

+ {material.style_description || '时尚素材'} +

+ {primaryProduct && ( +

+ {primaryProduct.description} +

+ )} +
+ + {/* 标签行 */} +
+ {/* 类别标签 */} + {primaryProduct && ( +
+ + {primaryProduct.category} + {hasMultipleProducts && ( + +{material.products.length - 1} + )} +
+ )} + + {/* 环境标签 */} + {material.environment_tags.slice(0, 2).map((tag, index) => ( +
+ {tag} +
+ ))} + {material.environment_tags.length > 2 && ( +
+ +{material.environment_tags.length - 2} +
+ )} +
+ + {/* 设计风格 */} + {primaryProduct && primaryProduct.design_styles.length > 0 && ( +
+ {primaryProduct.design_styles.slice(0, 3).map((style, index) => ( +
+ {style} +
+ ))} + {primaryProduct.design_styles.length > 3 && ( +
+ +{primaryProduct.design_styles.length - 3} +
+ )} +
+ )} +
+ + {/* 右侧操作区域 */} +
+ {/* 颜色信息 */} + {primaryProduct && ( +
+ +
+
+ )} + + {/* 操作按钮 */} + + + {/* 时间信息 */} +
+ {new Date(material.created_at).toLocaleDateString()} +
+
+ + {/* AI推荐标识 */} +
+ + AI推荐 +
+
+ ); + } + + // 网格视图的原有布局 return (
= ({ hover:shadow-lg hover:shadow-primary-500/10 hover:-translate-y-1 border border-gray-200 hover:border-primary-300 transform-gpu will-change-transform - ${compact ? 'p-4' : 'p-5'} + p-5 ${className} `} onClick={handleCardClick} diff --git a/apps/desktop/src/components/material/MaterialSearchResults.tsx b/apps/desktop/src/components/material/MaterialSearchResults.tsx index d3f94d6..b19205f 100644 --- a/apps/desktop/src/components/material/MaterialSearchResults.tsx +++ b/apps/desktop/src/components/material/MaterialSearchResults.tsx @@ -191,7 +191,7 @@ const MaterialSearchResults: React.FC = ({
{results.map((material, index) => ( = ({ onSelect={handleMaterialSelect} showScore={true} compact={viewMode === 'list'} - className={`animate-fade-in-up ${isLoading ? 'opacity-50 pointer-events-none' : ''} ${ - viewMode === 'list' ? 'flex flex-row items-center gap-4 p-4' : '' - }`} + className={`animate-fade-in-up ${isLoading ? 'opacity-50 pointer-events-none' : ''}`} /> ))}