diff --git a/apps/desktop/src-tauri/src/presentation/commands/outfit_search_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/outfit_search_commands.rs index 8fb2025..4da2916 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/outfit_search_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/outfit_search_commands.rs @@ -594,14 +594,7 @@ fn convert_vertex_response_to_search_results( // 应用相关性阈值过滤 let threshold = request.config.relevance_threshold.to_value(); - if search_result.relevance_score >= threshold { - results.push(search_result); - } else { - eprintln!( - "结果被过滤: 评分 {:.2} < 阈值 {:.2}", - search_result.relevance_score, threshold - ); - } + results.push(search_result); } else { eprintln!("解析搜索结果失败"); } @@ -752,11 +745,26 @@ fn parse_vertex_product_info(value: &serde_json::Value) -> Result = styles_array.iter() + .filter_map(|v| v.as_str()) + .map(|s| s.to_string()) + .collect(); + if !styles.is_empty() { + styles.join("、") + } else { + "时尚单品".to_string() + } + } else { + "时尚单品".to_string() + } + } else { + "时尚单品".to_string() + }; let color_pattern = value .get("color_pattern") diff --git a/apps/desktop/src/components/similarity/SimilaritySearchCard.tsx b/apps/desktop/src/components/similarity/SimilaritySearchCard.tsx index 1e418d8..29c13d8 100644 --- a/apps/desktop/src/components/similarity/SimilaritySearchCard.tsx +++ b/apps/desktop/src/components/similarity/SimilaritySearchCard.tsx @@ -15,6 +15,7 @@ import SimilaritySearchService from '../../services/similaritySearchService'; export const SimilaritySearchCard: React.FC = ({ result, onSelect, + onExternalLinkClick, showScore = true, compact = false, }) => { @@ -22,7 +23,13 @@ export const SimilaritySearchCard: React.FC = ({ const [imageError, setImageError] = useState(false); // 处理卡片点击 - const handleCardClick = useCallback(() => { + const handleCardClick = useCallback((e: React.MouseEvent) => { + // 如果点击的是按钮或其子元素,不触发卡片选择 + const target = e.target as HTMLElement; + if (target.closest('button')) { + return; + } + if (onSelect) { onSelect(result); } @@ -30,11 +37,16 @@ export const SimilaritySearchCard: React.FC = ({ // 处理外部链接点击 const handleExternalClick = useCallback((e: React.MouseEvent) => { + e.preventDefault(); e.stopPropagation(); if (result.image_url) { - window.open(result.image_url, '_blank', 'noopener,noreferrer'); + if (onExternalLinkClick) { + onExternalLinkClick(result.image_url); + } else { + window.open(result.image_url, '_blank', 'noopener,noreferrer'); + } } - }, [result.image_url]); + }, [result.image_url, onExternalLinkClick]); // 处理图片加载 const handleImageLoad = useCallback(() => { diff --git a/apps/desktop/src/components/similarity/SimilaritySearchResults.tsx b/apps/desktop/src/components/similarity/SimilaritySearchResults.tsx index d7e9b8d..6cda394 100644 --- a/apps/desktop/src/components/similarity/SimilaritySearchResults.tsx +++ b/apps/desktop/src/components/similarity/SimilaritySearchResults.tsx @@ -26,6 +26,7 @@ export const SimilaritySearchResults: React.FC = ( onPageChange, onPageSizeChange, onResultSelect, + onExternalLinkClick, }) => { // 计算分页信息 const totalPages = SimilaritySearchService.getTotalPages(totalResults, maxResultsPerPage); @@ -164,21 +165,17 @@ export const SimilaritySearchResults: React.FC = (

- -
- - 按相关性排序 -
{/* 结果网格 */} -
+
{results.map((result, index) => ( @@ -197,7 +194,7 @@ export const SimilaritySearchResults: React.FC = ( {onPageSizeChange && (
- 每页显示: + 每页