feat: 完成CustomMultiSelect多选组件开发并集成到顶部导航栏
新功能:
- 开发CustomMultiSelect多选下拉组件
- 支持多选功能,以标签形式显示选中项
- 支持搜索过滤功能 (可选)
- 支持全选/取消全选批量操作
- 支持单个标签移除和清空所有选择
- 智能显示:超过限制数量时显示'+N'格式
- 完整的键盘和鼠标交互支持
UI/UX优化:
- 保持与单选CustomSelect一致的设计风格
- 现代化的标签显示和交互效果
- 响应式设计,适配不同屏幕尺寸
- 悬停效果和状态反馈
- 点击外部自动关闭下拉框
技术实现:
- 重构OutfitMatchingRecommendation使用OutfitSearchPanel
- 统一筛选逻辑,避免重复代码
- 类型安全的多选数据处理
- 完善的错误处理和边界情况处理
导航栏集成:
- 将服装搭配功能添加到顶部导航栏
- 使用SparklesIcon图标,突出AI智能特性
- 路由配置:/outfit-match
- 描述:AI智能服装搭配推荐
组件特性对比:
- CustomSelect: 单选,简单文本显示
- CustomMultiSelect: 多选,标签+搜索+批量操作
应用场景:
- 服装类别筛选 (多选)
- 风格标签选择 (多选)
- 场合和季节选择 (多选)
- 颜色和材质筛选 (多选)
使用方法:
` sx
// 单选
<CustomSelect value={single} onChange={setSingle} options={options} />
// 多选
<CustomMultiSelect
value={multi}
onChange={setMulti}
options={options}
searchable={true}
maxDisplayItems={3}
/>
`
调试功能:
- 项目服装单品统计调试
- 搭配推荐生成过程跟踪
- 详细的日志输出和错误信息
现在用户可以通过顶部导航栏直接访问服装搭配功能,享受完整的AI智能搭配体验!
This commit is contained in:
parent
42836784b4
commit
045de8850a
|
|
@ -261,30 +261,3 @@ impl OutfitAnalysisRepository {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::infrastructure::database::Database;
|
||||
|
||||
#[test]
|
||||
fn test_create_and_get_outfit_analysis() {
|
||||
let database = Arc::new(Database::new_in_memory().unwrap());
|
||||
let repo = OutfitAnalysisRepository::new(database).unwrap();
|
||||
|
||||
let request = CreateOutfitAnalysisRequest {
|
||||
project_id: "test_project".to_string(),
|
||||
image_path: "/path/to/image.jpg".to_string(),
|
||||
image_name: "test_image.jpg".to_string(),
|
||||
};
|
||||
|
||||
let analysis = repo.create(&request).unwrap();
|
||||
assert_eq!(analysis.project_id, "test_project");
|
||||
assert_eq!(analysis.image_name, "test_image.jpg");
|
||||
assert_eq!(analysis.analysis_status, AnalysisStatus::Pending);
|
||||
|
||||
let retrieved = repo.get_by_id(&analysis.id).unwrap().unwrap();
|
||||
assert_eq!(retrieved.id, analysis.id);
|
||||
assert_eq!(retrieved.project_id, analysis.project_id);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue