Commit Graph

295 Commits

Author SHA1 Message Date
imeepos cf7b11d358 fix: 修复批量缩略图生成器白屏问题和屏幕适配权限错误
- 启用批量缩略图生成器路由,取消注释导入和路由配置
- 添加窗口大小调整相关权限到 Tauri capabilities 配置
- 修复屏幕适配服务的权限问题,添加 core🪟allow-set-size 等权限
- 解决批量缩略图生成器页面无法访问的白屏问题
2025-07-24 17:16:47 +08:00
imeepos 90aa401059 fix: 修复相似度检索工具事件冒泡问题和Rust编译错误
- 修复SimilaritySearchCard中外部链接按钮点击时触发卡片选择的事件冒泡问题
- 增强外部链接按钮事件处理,添加preventDefault和stopPropagation
- 改进卡片点击事件处理,检查点击目标避免按钮触发卡片选择
- 修复outfit_search_commands.rs中的lifetime错误,重构描述字段解析逻辑
- 移除相关性阈值过滤逻辑,返回所有搜索结果
- 优化相似度检索工具UI布局和详情模态框功能
- 添加详细的搜索结果展示和外部链接处理功能
2025-07-24 16:45:57 +08:00
imeepos f859bb5322 fix: outfit search 2025-07-24 16:03:23 +08:00
imeepos dadd13721e fix: 修复检索逻辑 2025-07-24 16:01:36 +08:00
imeepos 00855e6861 feat: 相似度检索工具全面优化
 新功能:
- 相关性阈值选择器移至页面顶部,使用CustomSelect组件
- 智能分页系统支持大量页面(如1981页)
- 悬浮上一页/下一页按钮固定在屏幕两侧
- 每页显示数量选择器(6-96条可选)
- 参数持久化到本地存储(关键字/阈值/每页数量)

🔄 自动重新加载:
- 关键字变化:防抖搜索(800ms)
- 相关性阈值变化:立即重新搜索
- 每页数量变化:重置到第一页并重新搜索
- 页码变化:加载对应页面数据

💫 加载状态优化:
- 页面顶部全局搜索状态指示器
- 各控件旁的局部加载状态
- 搜索结果区域加载遮罩
- 分页按钮加载状态

🔧 技术改进:
- S3/GS URL自动转换为CDN URL
- Zustand persist中间件实现状态持久化
- 智能分页算法优化
- 防抖搜索机制
- 完善的错误处理和重试机制
2025-07-24 15:45:37 +08:00
imeepos ef2a561fe2 feat: 实现相似度检索工具
- 基于现有search_similar_outfits功能开发独立的相似度检索小工具
- 遵循promptx/tauri-desktop-app-expert开发规范
- 实现完整的前后端架构:
  * Rust后端命令接口 (similarity_search_commands.rs)
  * TypeScript类型定义 (similaritySearch.ts)
  * Zustand状态管理 (similaritySearchStore.ts)
  * React组件 (SimilaritySearchTool, SimilaritySearchPanel, SimilaritySearchResults, SimilaritySearchCard)
  * 服务层 (similaritySearchService.ts)

功能特性:
- 智能搜索建议和自动完成
- 可调节的相关性阈值 (LOWEST/LOW/MEDIUM/HIGH)
- 快速搜索标签
- 响应式网格布局结果展示
- 优雅的加载状态和错误处理
- 遵循UI/UX设计标准的美观界面

技术实现:
- 复用现有outfit search API和数据模型
- 简化的搜索配置,专注核心功能
- 完整的TypeScript类型安全
- 现代化的React Hooks和状态管理
- TailwindCSS响应式设计
- 平滑的动画和交互效果

集成:
- 添加到快捷工具列表 (/tools/similarity-search)
- 配置React Router路由
- 注册Tauri命令处理器
2025-07-24 14:21:47 +08:00
imeepos 0436267266 feat: 实现相似度检索工具
- 基于现有search_similar_outfits功能开发独立的相似度检索小工具
- 遵循promptx/tauri-desktop-app-expert开发规范
- 实现完整的前后端架构:
  * Rust后端命令接口 (similarity_search_commands.rs)
  * TypeScript类型定义 (similaritySearch.ts)
  * Zustand状态管理 (similaritySearchStore.ts)
  * React组件 (SimilaritySearchTool, SimilaritySearchPanel, SimilaritySearchResults, SimilaritySearchCard)
  * 服务层 (similaritySearchService.ts)

功能特性:
- 智能搜索建议和自动完成
- 可调节的相关性阈值 (LOWEST/LOW/MEDIUM/HIGH)
- 快速搜索标签
- 响应式网格布局结果展示
- 优雅的加载状态和错误处理
- 遵循UI/UX设计标准的美观界面

技术实现:
- 复用现有outfit search API和数据模型
- 简化的搜索配置,专注核心功能
- 完整的TypeScript类型安全
- 现代化的React Hooks和状态管理
- TailwindCSS响应式设计
- 平滑的动画和交互效果

集成:
- 添加到快捷工具列表 (/tools/similarity-search)
- 配置React Router路由
- 注册Tauri命令处理器
2025-07-24 14:14:12 +08:00
imeepos d935dca4e7 实现真实的服装搜索逻辑,直接调用 Google Vertex AI Search API
- 实现 execute_vertex_ai_search 函数,直接调用 Vertex AI Search API
- 添加 get_google_access_token 函数获取访问令牌
- 实现 convert_vertex_response_to_search_results 转换响应格式
- 添加 parse_vertex_result_to_search_result 解析单个搜索结果
- 添加 parse_vertex_product_info 解析产品信息
- 支持搜索过滤器和相关性阈值
- 添加搜索功能的单元测试
- 修复多个编译警告,移除未使用的导入和变量
2025-07-24 13:52:00 +08:00
imeepos 6d86cea892 feat: 优化RAG检索配置以增加知识库数据量
- 修复Vertex AI Search配置,移除不支持的API字段
- 优化system prompt以更好地利用检索信息
- 添加查询增强功能,通过关键词扩展提高检索效果
- 新增RagConfigOptimizer工具类,支持多种优化场景
- 新增RagConfigManager组件,提供可视化配置管理
- 保留客户端配置字段用于未来扩展
- 添加详细的使用示例和文档

主要改进:
1. 解决了API 400错误问题
2. 通过查询优化间接增加检索相关性
3. 提供了完整的配置管理解决方案
4. 支持场景化的RAG配置优化
2025-07-24 12:46:00 +08:00
imeepos 5a60fb8c04 feat: 优化对话服务和RAG功能
更新内容:
- 优化conversation_service.rs对话服务逻辑
- 改进gemini_service.rs API集成
- 更新ChatInterface组件用户体验
- 优化MultiTurnChatTest多轮对话测试
- 改进MultiTurnRagChatTest RAG对话测试
- 更新conversationService前端服务

功能改进:
- 支持maxHistoryMessages历史消息数量控制
- 优化对话上下文管理
- 改进RAG检索和对话集成
- 提升多轮对话的稳定性和准确性

这些更新提升了AI对话功能的整体性能和用户体验
2025-07-23 21:14:17 +08:00
imeepos 78f27983a6 feat: 实现智能屏幕适配功能
新功能:
- 根据用户屏幕尺寸自动调整窗口大小
- 支持小屏幕、中等屏幕、大屏幕、超宽屏的智能适配
- 提供屏幕适配设置页面,用户可自定义配置
- 应用启动时自动应用屏幕适配

技术实现:
- 创建ScreenAdaptationService服务类
- 支持动态获取屏幕信息和显示器配置
- 提供智能适配和手动配置两种模式
- 集成到应用设置页面,提供友好的UI界面

配置选项:
- 默认宽度/高度比例可调节
- 最小窗口尺寸限制
- 最大窗口尺寸比例
- 支持不同屏幕类型的预设配置

用户体验:
- 应用启动时自动适配屏幕
- 设置页面提供实时预览
- 支持一键智能适配和手动微调
- 窗口居中显示,提升视觉体验

适配策略:
- 小屏幕(<1366x768): 95%宽度, 90%高度
- 中等屏幕(1366-1920): 85%宽度, 85%高度
- 大屏幕(>=1920x1080): 75%宽度, 80%高度
- 超宽屏(21:9+): 70%宽度, 85%高度

解决了固定窗口尺寸在不同屏幕上显示不佳的问题
2025-07-23 20:55:51 +08:00
imeepos 0cfacd0662 feat: 实现模板匹配按顺序匹配功能
新功能:
- 添加AI分类权重字段,支持按权重顺序匹配
- 新增PriorityOrder匹配规则类型
- 实现按权重顺序的素材匹配算法
- 添加权重编辑器UI组件

数据模型扩展:
- AiClassification模型添加weight字段
- SegmentMatchingRule枚举添加PriorityOrder类型
- 扩展相关的请求和响应类型定义

数据库迁移:
- 创建019迁移脚本为ai_classifications表添加weight字段
- 为现有数据设置默认权重值
- 添加权重索引提高查询性能

后端服务实现:
- MaterialMatchingService支持按顺序匹配逻辑
- AiClassificationService添加按权重获取分类方法
- 更新所有相关的构造函数和命令处理

前端UI优化:
- SegmentMatchingRuleEditor支持按顺序匹配配置
- 新增WeightEditor组件用于权重设置
- AI分类设置页面集成权重编辑功能
- 更新TypeScript类型定义

测试验证:
- 添加完整的单元测试套件
- 6个测试用例全部通过
- 验证权重排序和匹配规则逻辑

遵循promptx/tauri-desktop-app-expert开发规范
支持用户自定义分类权重,实现智能按顺序匹配
2025-07-23 20:28:36 +08:00
imeepos de620447b4 feat: 实现批量素材导入功能
新功能:
- 支持同时处理多个素材文件的批量导入
- 添加可配置的最大并发导入数量(1-8个)
- 实现基于系统资源的动态并发调整
- 添加内存监控和熔断器保护机制

 技术改进:
- 重构material_commands.rs支持并发处理
- 优化MaterialRepository使用连接池
- 添加指数退避重试机制
- 实现智能资源管理和性能优化

 前端优化:
- 更新MaterialImportDialog添加并发配置
- 保持原有进度显示和状态管理
- 更新TypeScript类型定义

 测试:
- 添加完整的批量导入测试套件
- 7个测试用例全部通过
- 验证并发处理和资源管理功能

 依赖更新:
- 添加num_cpus和winapi依赖
- 支持Windows系统内存检测

遵循promptx/tauri-desktop-app-expert开发规范
理论性能提升2-4倍,支持高并发稳定处理
2025-07-23 19:44:07 +08:00
imeepos f10633f64d fix: 创建material_usage_records表修复素材片段使用状态跟踪
- 创建material_usage_records表存储素材使用记录 (v18)
- 添加相关索引优化查询性能
- 修复模板匹配应用后片段管理显示'已使用为0'的问题
- 支持素材片段使用状态的正确跟踪和更新

现在点击'应用匹配结果'后,对应的素材片段会正确标记为已使用状态。
2025-07-23 19:11:30 +08:00
imeepos a39cc1a12d fix: 添加matching_segment_results表支持模板匹配详细结果
- 创建matching_segment_results表存储成功匹配的片段详情 (v17)
- 创建matching_failed_segment_results表存储失败匹配的片段信息
- 添加相关索引优化查询性能
- 修复'no such table: matching_segment_results'错误

现在模板匹配功能可以正常保存和查询详细的片段匹配结果。
2025-07-23 19:03:05 +08:00
imeepos d1448f7073 fix: 修复数据库表结构问题并添加默认AI分类数据
- 修复video_classification_records表结构,添加缺失字段 (v10)
- 修复template_matching_results表结构,添加缺失字段 (v11)
- 创建video_classification_tasks表 (v12)
- 创建export_records表 (v13)
- 创建project_template_bindings表 (v14)
- 添加默认AI分类数据:全身、上半身、中段特写、下半身 (v15)
- 修复AI分类表中的日期时间格式问题 (v16)

解决了所有'no such table'和'no such column'错误,
现在应用程序可以正常使用所有功能模块。
2025-07-23 19:00:13 +08:00
imeepos 4291230acb fix: 修复React渲染错误和数据库迁移问题
- 修复ModelDetail.tsx中直接渲染Gender枚举导致的React错误
- 修复TemplateDetailModal.tsx中直接渲染TemplateMaterialType和TrackType枚举的问题
- 添加枚举到中文文本的转换函数(getGenderText, getMaterialTypeText, getTrackTypeText)
- 实现完整的数据库迁移系统,支持版本化迁移
- 添加迁移v9修复template_materials表file_size字段允许NULL
- 改进数据库迁移执行逻辑,使用execute_batch方法
- 添加数据库集成测试和迁移测试
- 修复template_materials表约束问题,解决模板导入失败

主要变更:
- 新增数据库迁移系统(migrations.rs)
- 新增9个数据库迁移文件(v1-v9)
- 修复前端枚举渲染问题
- 完善数据库测试覆盖
2025-07-23 18:30:52 +08:00
imeepos 4269b72c04 feat: 实现批量缩略图生成器功能
- 添加批量缩略图生成的数据模型和类型定义
- 实现ThumbnailGeneratorService核心服务
- 实现BatchThumbnailProcessor批量处理器
- 添加Tauri命令接口支持前端调用
- 创建完整的前端UI组件和页面
- 支持多种时间戳配置和尺寸预设
- 支持时间轴缩略图生成
- 支持并发处理和进度监控
- 集成到便捷工具页面

遵循promptx/tauri-desktop-app-expert开发规范
2025-07-23 13:44:19 +08:00
imeepos 29a4c32096 feat: 完善水印处理工具功能
- 修复批量处理进度条不更新问题
  - 实现任务状态管理器(task_manager.rs)
  - 添加实时进度更新和任务状态跟踪
  - 完善前端进度轮询逻辑

- 丰富水印检测结果展示
  - 添加详细检测结果信息(位置、置信度、类型等)
  - 显示处理统计和性能信息
  - 优化结果展示UI和用户体验

- 修复水印模板上传和删除功能
  - 实现内存存储系统管理模板
  - 修复参数匹配问题
  - 添加模板缩略图展示功能

- 优化文件上传体验
  - 使用Tauri Dialog API替代HTML5文件输入
  - 实现原生文件选择器
  - 添加WatermarkTemplateThumbnail组件

- 完善水印工具集成
  - 创建WatermarkTool页面
  - 添加到便捷工具列表
  - 完善路由配置和UI展示
2025-07-23 12:51:49 +08:00
imeepos c3cad2254c fix: 调整大模型参数 2025-07-22 19:11:06 +08:00
imeepos 4fd6e8b0f4 fix: system 系统提示词优化 2025-07-22 18:57:48 +08:00
imeepos dd0a4f1470 fix: system 系统提示词优化 2025-07-22 18:57:18 +08:00
imeepos 3a67bbf52a fix: 优化markdown解析器 2025-07-22 18:40:03 +08:00
imeepos 34895c2d55 fix: 优化markdown解析器 2025-07-22 18:36:13 +08:00
imeepos e70bf2b6c0 fix: 优化markdown解析器 2025-07-22 18:25:21 +08:00
imeepos 26518569f4 fix: 优化markdown解析器 2025-07-22 18:23:00 +08:00
imeepos cd7e9b351d fix: 优化markdown解析器 2025-07-22 18:15:52 +08:00
imeepos 66c737e2ed fix: 优化markdown解析器 2025-07-22 18:13:53 +08:00
imeepos 9d3eb6d925 fix: 优化markdown解析器 2025-07-22 18:06:46 +08:00
imeepos eb9ec73889 fix: 优化markdown解析器 2025-07-22 16:43:17 +08:00
imeepos ba2ff0a2b0 fix: 优化markdown解析器 2025-07-22 16:16:11 +08:00
imeepos dde679fd6e fix: markdown解析bug 2025-07-22 16:09:31 +08:00
imeepos f92d9a7c39 fix: 优化markdown解析器 2025-07-22 15:04:37 +08:00
imeepos cb5a137ec9 fix: 添加文字图片关联关系 2025-07-22 12:21:39 +08:00
imeepos e6d54e44aa fix: remove test error 2025-07-22 11:46:04 +08:00
imeepos 730b0f32b5 fix: 修复历史消息总是0的问题
- 添加ensure_session_exists方法确保会话在保存消息前存在
- 修复会话ID不匹配导致的历史消息丢失问题
- 在保存消息前自动创建会话,使用前端传递的session_id
- 添加详细的调试日志跟踪会话创建和消息保存过程
- 使用INSERT OR REPLACE确保会话记录的正确性

问题原因:
- 前端传递的session_id与数据库中的会话ID不匹配
- 消息保存时会话不存在,导致外键约束失败
- 历史查询时找不到对应的会话,返回空结果

现在多轮对话应该能正确保存和加载历史消息了
2025-07-22 11:32:53 +08:00
imeepos 4293fbb4c7 fix: 重构ConversationRepository使用只读连接避免锁竞争
- 修改ConversationRepository使用Database而不是直接的连接
- 为读操作使用专用只读连接,避免与写操作的锁竞争
- 实现非阻塞连接获取,避免查询卡住问题
- 添加连接获取失败时的降级处理
- 优化数据库访问性能,提高并发能力

核心改进:
 只读连接 - 查询操作使用专用只读连接
 非阻塞获取 - 使用try_get_read_connection避免阻塞
 降级处理 - 连接不可用时返回默认值而不是阻塞
 性能优化 - 减少锁竞争,提高并发性能
 错误恢复 - 连接问题时的优雅降级

这应该解决多轮RAG查询卡在get_conversation_history的问题
2025-07-22 11:26:48 +08:00
imeepos dca2c15bb9 fix: 修复多轮RAG查询卡住问题 2025-07-22 11:16:30 +08:00
imeepos 35b7a489c2 debug: 添加详细调试日志定位多轮RAG查询卡住问题 2025-07-22 11:09:15 +08:00
imeepos 0b42ea8dcc feat: 改造query_llm_with_grounding支持多轮对话
- 扩展RAG Grounding数据模型支持会话管理
- 添加多轮对话的RAG查询方法query_llm_with_grounding_multi_turn
- 集成现有会话管理服务,支持历史消息存储和检索
- 更新前端类型定义和服务层,支持多轮对话参数
- 创建多轮RAG对话测试组件和页面
- 支持系统提示词、历史消息数量控制等配置选项
- 保持向后兼容,单轮对话功能不受影响

核心功能:
 多轮RAG对话 - 基于检索增强生成的多轮对话
 会话历史管理 - 自动保存和加载对话历史
 智能检索增强 - 结合Vertex AI Search的知识检索
 上下文保持 - 在多轮对话中保持对话上下文
 灵活配置 - 支持历史消息数量、系统提示词等配置
 来源追踪 - 显示检索来源和相关性信息

遵循promptx/tauri-desktop-app-expert开发规范
2025-07-22 10:56:54 +08:00
imeepos 8b92cc130c feat: 完善多轮对话功能实现
- 修复编译错误和类型问题
- 添加完整的单元测试套件
- 创建多轮对话测试组件和页面
- 添加详细的功能文档和使用说明
- 优化错误处理和类型安全
- 遵循promptx开发规范的完整实现

功能特性:
 多轮对话支持 - 历史消息传递和上下文保持
 会话管理 - session_id管理和生命周期控制
 数据持久化 - 完整的会话历史存储
 类型安全 - 完整的TypeScript类型定义
 测试覆盖 - 单元测试和集成测试
 文档完善 - 详细的实现文档和使用指南
2025-07-22 10:43:36 +08:00
imeepos 5296039785 feat: 实现多轮对话功能
- 添加会话管理数据模型和仓库层
- 扩展Gemini服务支持多轮对话的contents数组构建
- 实现会话历史存储和检索功能
- 添加多轮对话业务服务层
- 创建前端TypeScript类型定义和服务层
- 实现Tauri命令处理多轮对话请求
- 添加会话管理功能(创建、删除、更新标题等)
- 创建多轮对话测试组件和页面
- 遵循promptx/tauri-desktop-app-expert开发规范
- 支持session_id管理和历史消息传递
- 实现完整的四层架构设计
2025-07-22 10:39:26 +08:00
imeepos 317b9bb8b2 fix: add system prompt 2025-07-22 10:18:40 +08:00
imeepos 343688af56 chore: bump version to 0.2.1 2025-07-21 23:43:20 +08:00
imeepos 07ecd9cee7 feat: 优化聊天界面为女装穿搭专业顾问
-  更新UI主题为粉色系,适配女装穿搭业务
-  默认展示12张图片卡片,支持展开查看全部
-  默认隐藏AI文字回答,点击查看详情时显示
-  新增智能标签汇总功能,支持多选标签生成搜索
-  优化提示词和建议问题,专注女装穿搭场景
-  修复加载状态显示问题,优化用户体验
-  支持gs://到Google Storage的URI转换
-  增强图片卡片交互,悬停显示查看原图按钮
2025-07-21 22:56:57 +08:00
imeepos 1fb5468ecc feat: 实现RAG Grounding服务功能
基于promptx/outfit-match中的query_llm_with_grounding实现,遵循Tauri开发规范

## 新增功能
- 实现RAG Grounding核心服务逻辑
- 支持基于Vertex AI Search的检索增强生成
- 集成Cloudflare Gateway和Google Gemini API
- 提供完整的TypeScript类型定义和前端服务封装

## 技术架构
- Rust后端:GeminiService扩展RAG功能
- Tauri命令:query_rag_grounding, test_rag_grounding_connection, get_rag_grounding_config
- 前端服务:RagGroundingService类,支持统计监控和错误处理
- 数据模型:完整的请求/响应结构和配置管理

## 核心特性
- 检索增强生成:基于数据存储的智能检索和内容生成
- 容错机制:内置重试机制和错误处理
- 性能监控:响应时间统计和性能指标
- 类型安全:完整的TypeScript类型定义
- 会话管理:支持上下文保持的对话功能

## 测试覆盖
- 25个单元测试,覆盖核心功能和边界情况
- 包括序列化/反序列化、错误处理、配置验证等
- 所有测试通过,确保功能正确性

## 文档和示例
- 完整的API文档 (docs/rag-grounding-api.md)
- 详细的使用示例 (examples/rag-grounding-usage.ts)
- 包含最佳实践和错误处理指南

## 遵循规范
- 严格遵循promptx/tauri-desktop-app-expert开发规范
- 安全第一:最小权限原则,数据加密保护
- 性能优先:异步处理,响应时间优化
- 模块化设计:清晰的架构分层
- 错误处理完善:全面的错误处理和用户反馈
2025-07-21 21:07:03 +08:00
imeepos c3c72ce8bd feat: 实现一键匹配实时进度通讯
修复问题:
- 一键匹配进度条没有逐步递增,只在开始和结束时更新

实现内容:
1. 后端进度事件发送:
   - 在事件总线中添加BatchMatchingProgress事件类型
   - 在批量匹配服务中集成Tauri事件发送
   - 在每个模板匹配开始时发送实时进度事件

2. 前端进度事件监听:
   - 修改BatchMatchingService支持事件监听
   - 添加batch_matching_progress事件监听器
   - 实时更新进度条状态

3. 事件通讯机制:
   - 使用Tauri的emit系统发送事件到前端
   - 前端通过listen监听实时进度更新
   - 确保进度条能够逐步递增显示

技术细节:
- 后端:使用app_handle.emit()发送进度事件
- 前端:使用listen()监听batch_matching_progress事件
- 进度计算:基于当前轮数、绑定索引和总绑定数

现在一键匹配过程中进度条会实时更新,用户可以看到匹配的实际进展。
2025-07-21 20:07:27 +08:00
imeepos 70e8669ace refactor: 移除模板匹配中的日志并增强死循环防护
优化内容:
1. 移除所有println!和eprintln!日志输出,提升性能
2. 增强批量匹配的死循环防护机制:
   - 添加实质性进展检测(检查是否新增已使用片段)
   - 如果本轮虽有成功匹配但无实质性进展,则终止循环
   - 防止部分匹配成功但不消耗新素材的无效循环

死循环防护机制:
- 原有:本轮无成功匹配时终止
- 原有:最大轮数限制(100轮)
- 原有:预检查机制(每5轮检查模板可匹配性)
- 新增:实质性进展检测,防止无效循环

这确保了批量匹配在各种边界情况下都能正确终止,避免无限循环。
2025-07-21 19:52:05 +08:00
imeepos 5ae7874792 fix: 修正文件名序号001全局限制逻辑
修复问题:
- 将序号001限制从仅针对FilenameSequence规则改为全局限制
- 现在所有匹配规则(AiClassification、RandomMatch、FilenameSequence)都会遵守序号001限制
- 在单个模板匹配过程中,最多只能使用一个文件名以001结尾的视频文件

实现细节:
1. 在match_single_segment方法开始时检查模板是否已使用序号001视频
2. 将此状态传递给所有匹配方法
3. 在每个匹配方法的过滤逻辑中应用序号001限制
4. 统一的过滤逻辑确保一致性

这确保了无论使用哪种匹配规则,都不会在同一个模板中使用多个序号001的视频文件。
2025-07-21 19:24:58 +08:00
imeepos 856d0b1055 fix: 修复匹配记录批量删除功能
- 修复 DeleteConfirmDialog 组件中确认按钮缺少 onClick 事件处理
- 修复 props 解构中缺少 onConfirm 参数的问题
- 修复文件名序号001匹配限制逻辑,确保单个模板匹配过程中只能使用一个序号001的视频

问题原因:
1. DeleteConfirmDialog 确认按钮没有绑定 onConfirm 回调函数
2. 组件 props 解构时遗漏了 onConfirm 参数
3. 序号001限制逻辑在模板匹配过程中的检查时机不正确
2025-07-21 19:18:18 +08:00
imeepos 5091493a8c feat: 添加文件名序号匹配规则功能
- 新增 FilenameUtils 工具类,支持从文件名中提取3位数字序号
- 扩展 SegmentMatchingRule 枚举,添加 FilenameSequence 匹配规则
- 在 MaterialMatchingService 中实现基于文件名序号的匹配逻辑
- 确保每个模板只能使用一个序号为001的视频文件
- 添加全面的单元测试和集成测试
- 支持多种文件名格式:name_001.ext, 001_name.ext, name001.ext 等

遵循 promptx/tauri-desktop-app-expert 开发规范
2025-07-21 19:01:01 +08:00
imeepos a8ed7ed007 feat: 添加YAML智能解析支持到容错JSON解析器
修复tolerant_json_parser无法处理retrievedContext.text中YAML结构的问题
 新增process_yaml_in_json_value方法,递归检查JSON字符串字段中的YAML内容
 即使标准JSON解析成功,也会自动检测并解析YAML字符串字段
 添加YamlStringParsing恢复策略,提供详细的解析统计信息
 更新前端功能特性描述,添加YAML支持说明
 新增完整的测试用例验证YAML解析功能
 支持复杂的YAML嵌套结构、数组和对象解析
 遵循promptx/tauri-desktop-app-expert开发规范
2025-07-21 18:35:21 +08:00
imeepos a8c8f2a085 fix: 修复TolerantJsonParser嵌套JSON解析问题
问题描述:
- TolerantJsonParser在处理复杂嵌套JSON时只能提取部分内容
- 原因是正则表达式模式无法正确匹配嵌套的JSON对象
- 导致Gemini API响应解析不完整,输出长度异常缩短

修复内容:
- 改进JSON对象和数组的正则表达式模式
- 添加手动括号匹配算法作为主要提取方法
- 实现字符串内容的正确处理,避免字符串中的括号干扰
- 优化JSON内容提取逻辑,优先使用最可靠的方法
- 添加comprehensive测试用例验证修复效果

测试结果:
- 复杂嵌套JSON解析测试通过
- 括号匹配算法测试通过
- 字符串处理测试通过
2025-07-21 17:18:28 +08:00
imeepos 764b4d7420 fix: build error 2025-07-21 15:29:31 +08:00
imeepos e9e5837a1f feat: 升级Gemini服务使用TolerantJsonParser进行JSON解析
- 集成tolerant_json_parser.rs到GeminiService中
- 替换原有的正则匹配JSON提取逻辑
- 使用Arc<Mutex<TolerantJsonParser>>支持Clone trait
- 改进错误处理和日志输出,包含解析统计信息
- 添加回退机制,当TolerantJsonParser失败时使用传统方法
- 更新所有GeminiService::new()调用点处理Result返回类型
- 添加全面的测试用例验证新的JSON解析逻辑
- 保持API向后兼容性,方法签名不变

遵循promptx/tauri-desktop-app-expert开发规范
2025-07-21 15:02:37 +08:00
imeepos ff31a48256 fix: resolve unused assignment warning in material_matching_service
- Changed termination_reason from String to Option<String> to eliminate unused assignment warning
- Updated all assignments to use Some() wrapper
- Simplified default value logic using unwrap_or_else()
- Maintains same functionality while making code more idiomatic Rust
2025-07-21 14:34:53 +08:00
imeepos 6bd12a4a63 feat: 实现项目素材批量删除功能
- 后端实现:
  * 在MaterialRepository中添加batch_delete方法,支持事务处理
  * 在MaterialService中添加batch_delete_materials业务逻辑
  * 添加BatchDeleteResult和BatchDeleteFailedItem数据结构
  * 新增batch_delete_materials Tauri命令接口
  * 实现参数验证和错误处理机制

- 前端实现:
  * 创建useBatchSelection Hook管理批量选择状态
  * 实现BatchDeleteConfirmDialog批量删除确认对话框
  * 在MaterialCard组件中添加批量选择支持
  * 在ProjectDetails页面集成批量选择和删除功能
  * 添加批量操作UI控件(全选/取消全选/批量删除按钮)

- 功能特性:
  * 支持最多50个素材的批量选择
  * 单次最多删除100个素材的限制
  * 详细的删除结果反馈(成功/失败统计)
  * 失败项目的具体错误信息显示
  * 批量选择模式的视觉反馈
  * 完善的用户确认和通知机制

- 测试:
  * 添加批量删除功能的单元测试
  * 测试数据结构创建和验证逻辑

遵循Tauri开发规范和前端UI/UX设计标准,提供安全可靠的批量删除体验。
2025-07-21 14:28:06 +08:00
imeepos 6c795a5ddf fix: 修复Rust编译警告,优化代码质量
主要修复:
- 修复snake_case命名规范问题:projectId -> project_id, templateId -> template_id
- 移除未使用的导入:std::sync::Arc
- 修复未使用变量参数:添加下划线前缀标记
- 修复未使用的错误变量:在map_err闭包中使用_e前缀

修复的警告类型:
- unused_imports: 移除未使用的导入
- unused_variables: 标记未使用的参数
- non_snake_case: 修复命名规范
- 将警告数量从29个减少到10个

剩余的10个警告主要是为未来功能预留的死代码,属于正常情况。
2025-07-21 13:57:09 +08:00
imeepos dc61de7cad fix: 修复容错JSON解析器的解析逻辑和前端集成
主要修复:
- 修复extract_pair函数,正确处理object/array/number等直接节点类型
- 在预处理阶段修复无引号键和尾随逗号,避免Tree-sitter解析错误
- 添加详细的调试日志,便于问题诊断
- 优化JsonParserState,每次使用新配置创建解析器实例
- 创建TolerantJsonParser前端组件,支持配置和示例
- 创建TolerantJsonService服务类,封装API调用
- 添加JsonParserDebugPanel调试面板,便于测试后端命令
- 集成到便捷工具页面,提供完整的用户界面

技术改进:
- 支持预设配置模式(严格/宽松/AI模式/快速模式)
- 增强错误恢复策略的调试信息
- 优化前端组件的用户体验和交互设计
- 添加解析统计信息展示和结果导出功能
2025-07-21 13:46:49 +08:00
imeepos 1a76bf6c82 feat: 实现基于Tree-sitter的容错JSON解析器
- 添加TolerantJsonParser核心解析器,支持多种错误恢复策略
- 实现CachedTolerantJsonParser带缓存的解析器,提升性能
- 支持Markdown代码块提取、无引号键、尾随逗号等容错功能
- 添加完整的Tauri命令接口,支持前端调用
- 包含全面的单元测试和集成测试
- 提供详细的API文档和使用示例

主要功能:
- 标准JSON解析、手动修复、正则提取、部分解析等恢复策略
- 支持处理大模型返回的不规范JSON数据
- 内置缓存机制,支持高频解析场景
- 详细的解析统计信息和错误报告
- 遵循Tauri开发规范的分层架构设计
2025-07-21 13:27:19 +08:00
imeepos da4aeaccb9 完成模特动态页面开发,移除标题和描述字段 2025-07-18 16:49:08 +08:00
imeepos b7954497b0 chore: 发布版本 v0.2.0
版本更新内容:
- 更新package.json版本号至0.2.0
- 更新tauri.conf.json版本号至0.2.0
- 更新Cargo.toml版本号至0.2.0
- 添加v0.2.0版本发布说明

主要功能:
 素材类型区分展示功能(图片直显、视频缩略图、音频播放)
 AI分类统计数值溢出问题修复
 后端API扩展和前端组件优化
 安全性和性能提升
2025-07-18 14:31:49 +08:00
imeepos 82b62a4b0f fix: 修复AI分类统计数值溢出问题
问题:成功分类数显示18446744073709552(接近u64最大值)
原因:错误地用分类记录总数减去失败任务数,导致负数转u64溢出

修复内容:
- 扩展ClassificationStats结构体,添加分类记录状态统计
- 改进数据库查询,正确统计各状态的分类记录数
- 修正ai_analysis_log_service中的统计计算逻辑
- 添加数值安全检查,防止负数转无符号整数
- 更新前端类型定义保持一致性

现在统计数据来源一致且逻辑正确:
- 任务统计来自video_classification_tasks表
- 分类记录统计来自video_classification_records表
2025-07-18 14:27:25 +08:00
imeepos eb47a2b8fb feat: 实现素材类型区分展示功能
- 图片素材:直接展示图片内容,支持多种格式(JPG/PNG/GIF等)
- 视频素材:展示缩略图,使用FFmpeg生成首帧
- 音频素材:提供播放控件,支持点击播放/暂停

后端改进:
- 扩展get_material_thumbnail_base64命令支持图片类型
- 新增get_audio_file_base64命令处理音频文件访问
- 自动检测文件MIME类型,安全的文件访问机制

前端改进:
- MaterialThumbnail组件重构支持三种素材类型
- 集成HTML5 Audio API实现音频播放
- 改进懒加载和缓存机制,优化性能

遵循promptx/tauri-desktop-app-expert开发规范
2025-07-18 14:20:57 +08:00
imeepos 92ff1ee962 fix: 修复素材匹配时未加载片段信息的关键问题
## 问题根因
MaterialMatchingService中直接调用material_repo.get_by_project_id()方法,
该方法只返回素材基本信息,不包含segments字段,导致:
1. material.segments.is_empty()始终为true
2. 匹配逻辑创建虚拟片段,使用原始素材完整时长
3. 10.042秒的原始素材与1.267秒的模板片段比较,超出692.8%

## 解决方案
将所有调用material_repo.get_by_project_id()的地方改为:
MaterialService::get_project_materials()

该方法会:
1. 调用repository.get_by_project_id()获取素材基本信息
2. 为每个素材调用repository.get_segments()加载片段信息
3. 返回包含完整片段信息的素材列表

## 修改位置
1. match_materials方法 - 主要匹配逻辑
2. can_template_be_fully_matched方法 - 模板匹配检查
3. match_materials_with_used_segments方法 - 批量匹配逻辑

## 预期效果
- material.segments不再为空
- 匹配逻辑使用真实的切分片段而不是虚拟片段
- 片段时长将是合理的切分后时长(如1-5秒)而不是原始素材时长
- 时长匹配评分将更加准确

这是一个关键修复,解决了匹配逻辑的根本问题。
2025-07-18 13:48:34 +08:00
imeepos 7909a62e64 debug: 添加素材片段检查日志,确认虚拟片段问题
## 问题发现
从日志显示素材片段时长10.042秒,这是原始素材而不是二次切分片段。

## 添加的日志
1. **素材检查日志**:
   - 素材名称和ID
   - 素材片段数量
   - 分类记录数量

2. **虚拟片段创建日志**:
   - 当素材未切分时的警告
   - 原始素材时长
   - 虚拟片段的segment_id和category
   - 虚拟片段时长

3. **真实片段使用日志**:
   - 当素材已切分时的确认
   - 真实片段的id、时长和category

## 问题分析
匹配逻辑中的问题:
- 当material.segments.is_empty()时,创建虚拟片段
- 虚拟片段使用原始素材的完整时长(如10.042秒)
- 与模板要求时长(如1.267秒)比较,导致超出692.8%

## 根本原因
素材没有被正确切分,导致匹配时使用原始素材时长而不是切分后的片段时长。

这些日志将帮助确认:
1. 素材是否被正确切分
2. 为什么会创建虚拟片段
3. 虚拟片段vs真实片段的使用情况
2025-07-18 13:45:59 +08:00
imeepos c0ab039de9 debug: 添加时长转换和匹配的详细日志
## 添加的日志内容

### 1. 时长转换日志
在AI分类匹配和随机匹配方法中添加:
- 轨道片段ID和名称
- 原始时长(微秒)
- 转换后时长(秒)
- 目标分类信息

### 2. 时长匹配详细日志
在find_best_duration_match方法中添加:
- 目标时长和可选片段数量
- 每个片段的详细信息:
  * 片段ID和素材名称
  * 素材片段时长(秒)
  * 是否满足时长要求
  * 匹配评分
  * 分类信息
- 最终选择的片段信息

### 3. 时长要求检查日志
在MaterialSegment的方法中添加:
- meets_duration_requirement: 显示素材时长vs要求时长的比较
- duration_match_score: 显示详细的评分计算过程

## 目的
确认单位转换是否正确:
- 模板轨道片段时长:微秒
- 素材片段时长:秒
- 转换公式:微秒 / 1,000,000 = 秒

这些日志将帮助验证时长匹配逻辑的正确性。
2025-07-18 13:40:46 +08:00
imeepos 274926182c fix: 修复成功率计算超过100%的问题
## 问题分析
成功率计算逻辑有误:
- 之前的计算:matched_segments / matchable_segments (排除固定片段)
- 问题:固定片段不会被添加到matches中,但应该算作成功的片段

## 正确的成功率计算
成功率 = (成功匹配的片段数 + 固定片段数) / 总片段数

### 修复内容
1. **match_materials方法**
   - 成功片段数 = matched_segments + fixed_segments_count
   - 总片段数 = total_segments (包含所有片段)
   - 成功率 = successful_segments / total_segments

2. **match_materials_with_used_segments方法**
   - 使用相同的计算逻辑确保一致性
   - 修复statistics中的total_segments字段

### 逻辑说明
- 固定片段({固定素材})总是被视为成功的,因为它们不需要匹配
- 成功匹配的片段是通过AI分类或随机匹配成功的片段
- 总成功率 = (AI匹配成功 + 固定片段) / 所有片段

## 预期效果
- 成功率将始终在0-100%范围内
- 固定片段会被正确计入成功率
- 不同匹配方法的成功率计算保持一致
2025-07-18 13:29:07 +08:00
imeepos c5b944c4a3 fix: 修复一键匹配成功后素材片段未标记为已使用的问题
## 问题分析
- 单个匹配:前端会先调用save_matching_result保存匹配结果,然后额外调用create_usage_records_from_matching_result创建素材使用记录
- 一键匹配:只调用了save_matching_result保存匹配结果,但没有创建素材使用记录,导致片段管理显示已使用0

## 解决方案
在MaterialMatchingService的两个保存方法中添加创建素材使用记录的逻辑:

### 1. match_materials_and_save方法
- 在保存匹配结果成功后,自动创建素材使用记录
- 使用批量创建方法提高性能
- 失败时只记录警告,不阻断主流程

### 2. match_materials_with_used_segments方法
- 在一键匹配保存结果后,自动创建素材使用记录
- 确保一键匹配和单个匹配的行为一致

### 3. 使用记录内容
- 记录匹配分数、匹配原因、素材名称、模特名称等上下文信息
- 使用TemplateMatching类型标识使用场景
- 正确关联模板匹配结果ID

## 技术细节
- 使用create_usage_records_batch批量创建提高性能
- 在MaterialUsageRepository中自动更新素材片段的使用状态
- 保持事务一致性,确保数据完整性
- 添加详细日志便于调试和监控

## 测试验证
- 一键匹配成功后,片段管理应正确显示已使用数量
- 素材片段的is_used状态应正确更新
- 使用记录应正确保存到material_usage_records表
2025-07-18 13:24:50 +08:00
imeepos 483d63caaa fix: 修复一键匹配失败入库和成功率超过100%的问题
## 修复内容

### 1. 修复匹配失败时仍然入库的问题
- 在match_materials_with_used_segments方法中添加匹配成功判断
- 只有当所有需要匹配的片段都成功匹配时才保存到数据库
- 匹配失败时不记录资源使用,确保资源可以被后续匹配使用
- 修改match_materials_and_save方法,确保一致的失败处理逻辑

### 2. 修复匹配失败时的资源释放
- 部分匹配失败时,已分配的资源不会被标记为已使用
- 在批量匹配中正确处理部分匹配失败的情况
- 失败的匹配不会影响全局资源使用状态

### 3. 修复成功率计算超过100%的问题
- 统一所有地方的成功率计算逻辑,确保基于可匹配片段计算
- 在前端显示时添加Math.min限制,确保成功率不超过100%
- 修复前端多个组件中成功率显示不一致的问题:
  * BatchMatchingSummaryCard.tsx
  * BatchMatchingResultDialog.tsx
  * TemplateMatchingResultCard.tsx
  * TemplateMatchingResultDetailModal.tsx
  * TemplateMatchingResultStatsPanel.tsx
  * materialMatchingService.ts

### 4. 改进批量匹配逻辑
- 区分完全匹配失败和部分匹配失败
- 部分匹配失败时提供详细的失败原因
- 保持匹配结果用于分析,但不保存到数据库

## 技术细节
- 后端成功率统一为0-1的小数格式
- 前端显示时统一乘以100并限制最大值为100
- 确保匹配失败时的事务一致性
- 添加详细的日志输出便于调试
2025-07-18 13:16:45 +08:00
imeepos 66ceaf3274 fix: 修复批量删除需要点击两次的问题
问题分析:
- 第一次点击批量删除时,onConfirm回调中使用的batchDeleteConfirm.resultIds可能因为React状态更新的异步性而被清空
- handleBatchDelete函数内部会重置batchDeleteConfirm状态,导致竞态条件

解决方案:
- 将对话框关闭逻辑从handleBatchDelete中移出
- 创建handleConfirmBatchDelete函数,在调用删除前先复制resultIds数组并立即关闭对话框
- 修复数据库查询中缺少is_exported和last_exported_at字段的问题
- 添加更好的loading状态管理和用户体验优化

修复内容:
- 修复TemplateMatchingResultRepository中SELECT语句缺少新字段的问题
- 重构批量删除的状态管理逻辑,避免竞态条件
- 添加调试日志帮助问题诊断
- 改进loading状态的视觉反馈
2025-07-18 13:03:17 +08:00
imeepos f6041c6eea feat: 完成模板匹配功能优化
- 修复重复资源使用问题:
  * 修改MaterialMatchingService中的匹配算法,确保每个素材片段在一次匹配中只能被使用一次
  * 添加get_classified_segments_with_exclusions方法支持额外排除片段
  * 重构match_materials_with_used_segments方法正确处理全局使用状态
  * 更新批量匹配逻辑使用新的匹配方法

- 添加批量删除匹配记录功能:
  * 在TemplateMatchingResultService中添加批量删除方法
  * 在MaterialUsageRepository中添加批量删除使用记录的方法
  * 删除匹配记录时自动重置相关资源的使用状态
  * 添加相应的Tauri命令和API接口

- 添加匹配记录导出状态标识:
  * 在TemplateMatchingResult模型中添加is_exported和last_exported_at字段
  * 更新数据库schema和仓库层支持新字段
  * 在导出功能中自动更新导出状态
  * 添加重置导出状态的功能

- 优化一键匹配命名逻辑:
  * 改进命名规则使用模板名称+序号格式
  * 为每个模板维护独立的序号计数器
  * 支持自定义前缀的命名方式

- 更新前端组件支持新功能:
  * 在TemplateMatchingResultManager中添加批量选择和批量删除功能
  * 在TemplateMatchingResultCard中添加选择框和导出状态显示
  * 添加全选/取消全选功能
  * 优化UI显示导出状态标识

- 数据库迁移:
  * 添加is_exported和last_exported_at字段到template_matching_results表
  * 保持向后兼容性
2025-07-18 12:50:04 +08:00
imeepos 822bfe6e9c feat: 为模板匹配片段添加缩略图功能
- 创建SegmentThumbnail组件,支持懒加载和缓存
- 修改TemplateMatchingResultDetailModal,集成缩略图显示
- 添加get_material_segment_by_id API命令获取片段详细信息
- 优化片段信息布局,简化显示内容(只显示片段名称和匹配原因)
- 支持通过material_segment_id获取和显示实际的片段文件名
2025-07-18 12:19:36 +08:00
imeepos 66f50a80c6 fix: 解决AI视频分类并发瓶颈问题
- 移除VideoClassificationService中共享的GeminiService实例
- 改为在classify_video_with_gemini方法中为每个任务创建独立的GeminiService
- 解决Arc<Mutex<GeminiService>>导致的串行处理瓶颈
- 实现真正的并发处理,提升AI分类性能

修复前:所有worker共享一个GeminiService实例,导致串行等待
修复后:每个worker使用独立的GeminiService实例,实现真正并发
2025-07-18 11:56:16 +08:00
imeepos 24d32825cd fix: 提升到80并发 2025-07-18 11:33:54 +08:00
imeepos 176ad61ac0 feat: 实现AI视频分类10个并发任务同时运行
- 重构VideoClassificationQueue支持并发处理架构
- 将max_concurrent_tasks从1提升到10(根据CPU核心数动态调整)
- 实现多worker并发处理机制,使用tokio::spawn创建独立worker
- 添加智能任务分发机制,使用原子操作避免任务重复分配
- 优化错误处理:连续错误限制、超时保护、渐进式重试
- 改进资源管理:CPU核心检测、内存使用优化
- 添加统计更新worker,实时监控处理进度
- 支持worker独立错误恢复,提高系统稳定性

性能提升:理论上可提升10倍处理速度,实际受网络和AI服务限制
2025-07-18 11:32:24 +08:00
imeepos 3dbdca4ee6 feat: 实现AI生成视频前置跳过功能 v0.1.35
- 添加skip_start_ms参数到CreateMaterialRequest和MaterialProcessingConfig
- 在MaterialImportDialog中添加前置跳过毫秒数输入框
- 实现FFmpegService::create_trimmed_video方法创建跳过开头的临时视频
- 在场景检测前处理视频前置跳过,避免AI生成视频相同首帧问题
- 支持同步和异步处理模式,自动调整场景时间戳补偿跳过时间
- 自动清理临时文件,确保资源管理正确

解决问题:
- AI生成视频第一帧相同导致切片后视频首帧重复
- 通过跳过前置毫秒数避免相同首帧进入最终切片结果
2025-07-18 11:11:10 +08:00
imeepos 025237f753 feat: 实现服装搭配/高级筛选功能 - 自定义标签系统
新功能:
- 完整的自定义标签管理系统
- 支持标签分类和标签的CRUD操作
- 标签与实体(素材、模特、项目等)的关联管理
- 批量标签操作支持
- 标签使用统计功能

 数据库:
- 新增 custom_tag_categories 表(标签分类)
- 新增 custom_tags 表(自定义标签)
- 新增 tag_associations 表(标签关联)
- 支持默认标签数据初始化(暂时禁用)

 后端 (Rust):
- CustomTagRepository: 完整的数据访问层
- CustomTagCommands: Tauri命令接口
- 完善的错误处理和类型安全

 前端 (React + TypeScript):
- CustomTagSelector: 功能完整的标签选择器组件
- CustomTagService: API调用服务层
- 完整的TypeScript类型定义
- 集成到FilterPanel中的高级筛选功能

 技术特性:
- 遵循promptx/tauri-desktop-app-expert开发规范
- 使用连接池避免数据库死锁
- 响应式UI设计,支持实时创建标签
- 支持多维度筛选和搜索
- 完整的数据验证和错误处理

 注意事项:
- 默认标签初始化暂时禁用以避免启动阻塞
- 所有功能已编译通过并可正常使用
2025-07-18 10:40:26 +08:00
imeepos c3213bc3fc feat: 完成服装搭配筛选功能优化
-  修复Gemini API JSON截断问题,提高分析成功率90%+
-  实现基于AI识别商品的动态筛选选项
-  将图片分析功能集成到高级筛选面板
-  合并颜色匹配和设计风格筛选为统一商品筛选
-  统一UI颜色设计:未选中浅色,选中蓝色
-  支持AI识别商品的颜色纠正功能
-  优化响应式设计和用户体验

主要改进:
- 智能JSON修复机制处理API响应截断
- 动态生成筛选选项而非硬编码常量
- 一体化商品筛选界面设计
- 统一的颜色设计系统
- 增强的错误处理和用户反馈
2025-07-18 00:54:01 +08:00
imeepos 24d70f4e32 fix: 移除无用代码 2025-07-17 23:29:53 +08:00
imeepos 504b1a6577 feat: 实现服装搭配智能搜索系统
新功能:
- 完整的服装搭配智能搜索系统
- AI图像分析和服装识别
- 智能搜索和过滤功能
- LLM搭配顾问聊天功能
- HSV颜色匹配算法
- 响应式UI界面

 技术实现:
- 统一的GeminiService架构
- 完整的数据模型和类型定义
- Tauri命令接口层
- React前端组件库
- Zustand状态管理
- 数据库扩展支持

 UI/UX:
- 现代化的搭配搜索界面
- 直观的颜色选择器
- 多级筛选面板
- 图像上传和分析
- 搜索结果展示
- AI聊天界面

 测试:
- 核心功能单元测试
- 颜色匹配算法测试
- API集成测试

 文档:
- 完整的系统设计文档
- API接口文档
- 开发指南
2025-07-17 22:35:36 +08:00
imeepos 0883674877 fix: 移除无用代码 2025-07-17 21:01:37 +08:00
imeepos 121f2ebc5d fix: 移除错误代码 2025-07-17 20:59:45 +08:00
imeepos 045de8850a 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智能搭配体验!
2025-07-17 20:08:41 +08:00
imeepos 42836784b4 feat: 完善智能搭配推荐功能和调试工具
新功能:
- 完整实现智能搭配推荐系统
  - OutfitMatchingRecommendation: 完整的推荐界面组件
  - generate_outfit_recommendations: 后端推荐算法
  - 色彩和谐度和风格一致性评分算法
  - 智能场合和季节标签生成
- 添加调试工具 debug_outfit_items_stats
  - 检查项目中的服装单品统计
  - 详细的数据分析和建议

 算法实现:
- 搭配组合生成逻辑
  - 上装+下装+鞋子组合
  - 连衣裙+鞋子组合
  - 可选外套和配饰
- 智能评分系统
  - 色彩和谐度计算 (HSV色彩空间)
  - 风格一致性评估
  - 综合评分和筛选
- 标签生成算法
  - 场合推断 (工作/休闲/正式/运动等)
  - 季节适用性分析

 UI/UX优化:
- 现代化的推荐卡片设计
- 智能筛选面板 (场合/季节/风格/评分)
- 收藏和保存功能
- 详情模态框展示
- 调试按钮和数据检查工具

 问题诊断:
- 添加详细的调试日志
- 搭配组合生成过程跟踪
- 评分计算过程可视化
- 数据统计和分析工具

 当前状态:
- 项目中有2件服装单品 (连衣裙+高跟鞋)
- 数量足够生成搭配推荐
- 正在调试为什么生成0个推荐的问题
2025-07-17 19:47:51 +08:00
imeepos ebe4a24bc0 feat: 完善服装搭配功能 - 服装单品管理和AI分析结果转换
新功能:
- 完善 create_outfit_items_from_analysis 功能
  - 从AI分析结果自动创建服装单品
  - 智能类别映射和数据转换
  - HSV颜色信息解析和处理
  - 批量创建流程和错误处理
- 实现完整的服装单品管理系统
  - OutfitItemList: 列表展示、搜索、筛选、详情查看
  - OutfitItemForm: 创建/编辑表单,动态标签管理
  - 完整的CRUD操作和状态管理
- 集成到OutfitMatch页面的标签页系统

 技术改进:
- 修复编译错误和类型不匹配问题
- 完善错误处理和用户反馈机制
- 实现类型安全的数据转换
- 添加详细的操作日志和状态跟踪

 UI/UX优化:
- 现代化的服装单品卡片设计
- 智能搜索和分类筛选
- 响应式网格布局
- 优雅的表单设计和交互
- 统一的模态框和通知系统

 数据流程:
- 图像上传  AI分析  结果展示  一键创建单品  单品管理
- 完整的用户体验闭环
- 实时状态更新和进度跟踪

 功能完成度:
-  图像上传和保存
-  AI图像分析
-  分析结果展示
-  从分析结果创建服装单品
-  服装单品管理
-  下一步: 智能搭配推荐
2025-07-17 19:21:04 +08:00
imeepos 7b1bb2fb0e feat: 实现服装搭配功能的图像上传和AI分析
新功能:
- 实现完整的图像上传组件 (ImageUploader)
  - 支持拖拽上传、文件选择、预览和验证
  - 文件大小和格式限制
  - 实时预览和文件管理
- 实现AI图像分析结果展示 (OutfitAnalysisResult)
  - 实时状态更新和进度跟踪
  - 分析结果详情查看
  - 自动刷新机制
- 添加文件保存功能 (save_outfit_image 命令)
- 更新OutfitMatch页面为现代化标签页设计

 技术改进:
- 修复服装搭配相关模型的编译错误
- 添加缺失的trait实现 (Eq, Hash)
- 修复生命周期参数问题
- 完善错误处理和用户反馈

 UI/UX优化:
- 现代化的标签页设计
- 响应式布局和优雅动画
- 统一的设计语言和交互体验
- 完善的加载状态和错误处理
2025-07-17 19:05:40 +08:00
imeepos 7fb1dfa95a feat: 添加便捷小工具页面 - AI检索图片/数据清洗功能
- 新增便捷工具页面 (/tools),提供AI检索图片/数据清洗功能
- 支持JSONL格式数据的URI匹配去重处理
- 实现实时进度显示和批量数据处理
- 添加完整的错误处理和用户反馈机制
- 遵循Tauri开发规范和UI/UX设计标准
- 包含测试数据和功能文档

技术实现:
- 后端: Rust异步处理,流式文件读取,进度事件发送
- 前端: React + TypeScript,文件选择对话框,进度条显示
- 导航: 新增便捷工具菜单项,集成到主导航栏
2025-07-17 15:29:59 +08:00
imeepos 1da647fbab feat: 实现循环匹配功能优化
- 优化一键匹配算法,支持循环匹配模板直到素材耗尽
- 新增全局素材使用状态跟踪,避免重复使用素材
- 实现智能终止条件,当无法完整匹配任何模板时自动停止
- 扩展BatchMatchingResult数据结构,添加循环轮数和终止原因字段
- 更新前端界面显示循环匹配进度和详细统计信息
- 添加性能优化:日志优化、预检查机制、最大轮数限制
- 新增全面的单元测试覆盖各种边界情况
- 创建详细的功能文档说明使用方式和注意事项

核心改进:
1. 循环匹配算法 - 持续匹配直到素材不足
2. 全局素材跟踪 - 确保素材不重复使用
3. 智能终止机制 - 自动检测匹配完成条件
4. 性能优化 - 支持大量模板和素材的高效处理
5. 完整测试覆盖 - 确保功能稳定可靠
2025-07-17 14:53:14 +08:00
imeepos c190fdae1b feat: implement export record tracking system
- Add export_count field to template_matching_results table
- Create ExportRecord data model with comprehensive tracking
- Implement ExportRecordRepository for CRUD operations
- Create ExportRecordService for business logic
- Add export record tracking to jianying export functions
- Create ExportRecordManager component with filtering and pagination
- Add ExportRecordsPage with full management interface
- Integrate export records into navigation and routing
- Add Tauri commands for export record management
- Include statistics, validation, and cleanup functionality

Follows Tauri development specifications and frontend standards.
2025-07-17 13:03:51 +08:00
imeepos 823a54525e fix: 修改导出文件名为固定的draft_content.json
- 将动态生成的文件名改为固定的draft_content.json
- 更新前端默认保存文件名
- 简化导出相关的日志和提示信息
- 移除V1/V2版本标识,统一为导出功能
2025-07-17 12:39:57 +08:00
imeepos e4e0d89d5b feat: 实现v2导出 2025-07-17 12:34:10 +08:00
imeepos fb6b345188 fix: 修复导出路径中的Windows UNC前缀问题
- 添加normalize_windows_path函数清理路径格式
- 移除导出结果中的\\\\?\\ UNC前缀
- 确保导出的JSON文件中包含标准Windows路径格式
- 提升剪映导入兼容性
2025-07-16 22:39:39 +08:00
imeepos 0495a32c74 feat: 实现导出到剪映功能 (v0.1.28)
- 新增剪映导出数据结构定义 (jianying_export.rs)
- 实现模板匹配结果导出到剪映格式的服务逻辑
- 添加导出到剪映的Tauri命令接口
- 在匹配记录卡片中添加导出按钮
- 实现文件保存对话框和用户交互
- 支持根据模板匹配结果生成完整的draft_content.json
- 自动替换匹配素材路径并生成随机素材ID
- 去除无引用素材,优化导出文件大小

功能特点:
- 完全符合剪映draft_content.json格式规范
- 准确的时间轴和素材路径映射
- 用户友好的导出界面和反馈
- 遵循promptx/tauri-desktop-app-expert开发规范
2025-07-16 22:33:57 +08:00
imeepos e3037916c0 feat: 实现一键匹配功能 (v0.1.26)
- 新增一键匹配后端服务,支持遍历项目模板绑定并逐一匹配
- 在项目详情页添加一键匹配按钮,支持批量匹配操作
- 实现批量匹配进度管理,包括实时进度跟踪和取消功能
- 添加一键匹配结果汇总,包含详细统计和报告导出功能
- 新增批量匹配相关组件:进度对话框、结果对话框、汇总卡片
- 遵循 promptx/tauri-desktop-app-expert 开发规范
- 支持错误处理、状态管理和用户体验优化
2025-07-16 21:52:48 +08:00
imeepos d3ab2aa284 fix: resolve list_matching_results deserialization error
- Add custom deserializer for MatchingResultStatus to handle empty strings
- Add serde(default) attributes to TemplateMatchingResultQueryOptions fields
- Update frontend to send undefined instead of empty string for status filter
- Fix 'unknown variant' and 'missing field' errors in template matching results

Resolves issue where selecting 'All Status' filter caused command failures.
2025-07-16 21:28:45 +08:00
imeepos d5ef9851cd feat: 实现模特详情页视频生成功能
- 新增模特详情页组件,支持照片上传和视频生成
- 实现视频生成数据模型和仓库层
- 集成Dify API进行视频生成
- 添加云存储上传功能,自动转换S3 URL为CDN地址
- 实现统一的删除确认弹框,替换window.confirm
- 支持照片和视频生成任务的删除功能
- 优化UI/UX设计,符合前端开发规范
- 添加完整的错误处理和状态管理

核心功能:
 模特照片上传到云端
 多选照片进行视频生成
 实时任务状态跟踪
 视频生成历史记录
 统一删除确认对话框
 响应式设计和优雅动画
2025-07-16 19:39:44 +08:00
imeepos 52ce437e63 fix: 修复ProjectDetails.tsx中的无限请求问题和模特名称显示
- 修复loadProjectClassificationStats函数的无限循环问题
- 使用useRef跟踪分类统计加载状态,避免重复请求
- 添加模特信息加载功能,显示真实模特名称而非model_id
- 优化useEffect依赖,防止不必要的重新渲染和请求
- 在项目切换和导入完成时正确重置加载状态
2025-07-16 18:33:57 +08:00
imeepos 5d39ddea80 fix: 修复保存 匹配记录的bug 2025-07-16 16:09:55 +08:00
imeepos a325b3ccc8 feat: 实现素材使用状态管理系统
1. 数据库层面改进:
   - 新增material_usage_records表记录素材使用历史
   - 为material_segments表添加usage_count、is_used、last_used_at字段
   - 实现数据库迁移逻辑

2. 数据模型和仓库:
   - 创建MaterialUsageRecord、MaterialUsageStats等数据模型
   - 实现MaterialUsageRepository处理使用记录的CRUD操作
   - 支持批量创建使用记录和统计查询

3. 业务逻辑改进:
   - 修改MaterialMatchingService,在获取素材片段时排除已使用的片段
   - 实现素材使用状态的自动更新机制
   - 支持重置素材使用状态功能

4. 前端集成:
   - 修改handleApplyMatchingResult函数,应用匹配结果时自动创建使用记录
   - 新增多个后端命令支持素材使用状态管理
   - 实现从匹配结果自动创建使用记录的便捷方法

5. 核心功能:
   - 一个素材片段只能使用一次的限制机制
   - 模板匹配时自动排除已使用的素材片段
   - 完整的使用历史记录和统计功能
   - 支持项目级别的使用状态重置

这个实现确保了素材的合理使用,避免重复使用同一素材片段,
同时提供了完整的使用追踪和管理功能。
2025-07-16 14:38:08 +08:00
imeepos 730ac22b84 fix: 修复get_matching_result_detail接口数据类型错误
修复'Invalid column type Real at index: 9, name: match_score'错误

问题根本原因:
1. 数据库schema中match_score字段定义为REAL类型
2. 数据插入时错误地将REAL/INTEGER字段转换为字符串
3. 数据读取时错误地尝试将REAL/INTEGER字段作为String类型获取

修复内容:
1. 修正matching_segment_results表相关字段的数据插入逻辑
   - match_score: 直接使用f64类型而非转换为字符串
   - segment_duration, start_time, end_time: 直接使用u64类型

2. 修正matching_failed_segment_results表相关字段的数据插入逻辑
   - segment_duration, start_time, end_time: 直接使用u64类型

3. 修正row_to_segment_result和row_to_failed_segment_result函数
   - 直接使用原始数据类型而非字符串解析

这确保了数据库操作的类型一致性,解决了get_matching_result_detail接口的错误。
2025-07-16 14:11:14 +08:00
imeepos 3e6c05c4ac fix: 修复模板匹配结果相关的数据类型错误
1. 修复list_matching_results接口'Invalid column type Integer at index: 18, name: is_active'错误
   - 修正template_matching_result_repository.rs中row_to_matching_result函数的is_active字段处理
   - 使用rusqlite::types::Value枚举正确处理多种数据类型

2. 修复数据插入和读取的类型不一致问题
   - 修正数据插入时将INTEGER字段转换为字符串的错误
   - 统一数据类型:数字字段直接使用原始类型而非字符串

3. 实现应用匹配结果功能
   - 修复ProjectDetails.tsx中handleApplyMatchingResult函数
   - 调用save_matching_result API保存匹配结果到数据库
   - 添加成功/失败通知提示

修复的具体问题:
- template_matching_results表的is_active字段类型处理
- 数字字段(total_segments, matched_segments等)的类型转换
- quality_score字段的NULL值处理
- 前端应用匹配结果后保存到数据库的逻辑
2025-07-16 14:05:01 +08:00
imeepos a4cacf42da hotfix: 修复get_all_projects接口description字段NULL值处理问题
- 修复project_repository.rs中row_to_project函数对description字段的错误处理
- 将description字段从String类型改为Option<String>类型正确处理NULL值
- 修复material_repository.rs中类似的问题
- 解决'Invalid column type Null at index: 3, name: description'错误

问题根本原因:
数据库schema允许description为NULL,但代码尝试获取非空String类型,
当description为NULL时导致类型转换失败。

修复方案:
使用Option<String>类型和filter方法正确处理NULL和空字符串情况。
2025-07-16 13:58:04 +08:00
imeepos 1d6de409ed feat: 实现模板匹配结果保存和管理功能
- 新增模板匹配结果数据模型和数据库表结构
- 实现匹配结果Repository层,支持CRUD操作和查询
- 实现匹配结果Service层,提供业务逻辑和统计功能
- 新增Tauri命令接口,支持前端调用
- 实现前端TypeScript类型定义
- 更新MaterialMatchingService,支持自动保存匹配结果
- 新增前端管理界面组件:
  - TemplateMatchingResultManager: 主管理界面
  - TemplateMatchingResultCard: 结果卡片组件
  - TemplateMatchingResultDetailModal: 详情模态框
  - TemplateMatchingResultStatsPanel: 统计面板
- 编写完整的单元测试
- 新增API文档

功能特性:
- 保存匹配结果到数据库,包含成功和失败片段详情
- 支持匹配结果的查询、过滤、排序和分页
- 提供匹配统计信息和质量评分
- 支持软删除和批量操作
- 完整的前端管理界面,支持查看、编辑、删除操作
2025-07-16 13:34:32 +08:00
imeepos ef4c047b30 fix(template-matching): 修复模板素材匹配逻辑
修复的问题:
- 固定素材被错误计入失败统计,导致成功率偏低
- 素材未切分时无可用片段,导致匹配完全失败
- 模板绑定验证逻辑未实现,返回空数据
- 时长单位不一致影响匹配准确性

 主要改进:
- 固定素材现在正确跳过匹配,不计入失败数
- 实现虚拟片段机制,为未切分素材创建虚拟片段
- 完善模板绑定验证逻辑,正确统计片段数量
- 修正时长单位转换,确保匹配准确性
- 增强错误信息,提供更详细的匹配失败原因

 修复效果:
- 修复前: 0个可用片段  匹配完全失败
- 修复后: 44个可用片段  匹配正常工作
- 三种匹配规则(固定素材/AI分类/随机匹配)现在都能正常工作

 技术细节:
- 在匹配前过滤固定素材,避免错误统计
- 为每个分类记录创建对应的虚拟片段
- 成功率基于可匹配片段计算,更准确反映匹配质量
- 实现完整的模板绑定验证,支持匹配预估
2025-07-16 00:56:51 +08:00
imeepos c7f9c9f4bb feat: 为MaterialCard添加缩略图功能并优化UI展示
- 为Material数据模型添加thumbnail_path字段
- 实现get_material_thumbnail_base64 API命令支持Material缩略图生成
- 创建MaterialThumbnail组件,支持懒加载和缓存机制
- 重新设计MaterialCard布局,使用缩略图替换文件类型图标
- 精简MaterialCard信息展示,将详细信息移到可折叠区域
- 优化按钮布局,使界面更加紧凑
- 简化切分片段显示方式,提升用户体验
- 修复数据库DateTime解析问题,支持SQLite和RFC3339两种格式
- 添加数据库迁移支持thumbnail_path字段
- 遵循promptx/tauri-desktop-app-expert开发规范
2025-07-16 00:25:08 +08:00
imeepos b06cae86f9 fix: 修复缩略图生成失败问题
- 增强FFmpeg缩略图生成的错误处理和详细日志
- 实现缩略图生成的重试机制,包括多种时间戳策略
- 添加缩略图生成前的预检查机制
- 优化FFmpeg命令参数,提高兼容性和成功率
- 添加单元测试验证修复效果

修复内容:
1. 增强日志记录,包括FFmpeg命令和输出信息
2. 实现重试机制:原时间戳失败时尝试0秒、中间时间点等
3. 预检查视频文件有效性、时间戳合理性、输出目录可写性
4. 优化FFmpeg参数:添加hide_banner、loglevel、update等选项
5. 在material_commands中使用新的重试机制

解决了FFmpeg执行完成但缩略图文件不存在的问题
2025-07-15 23:29:51 +08:00
imeepos 8c742bf262 feat: 创建统一的缩略图获取接口,使用视频实际尺寸
新增get_segment_thumbnail_base64接口:
- 根据segmentId统一获取缩略图base64数据URL
- 智能检查:数据库路径 -> 文件存在性 -> 自动重新生成
- 完整的错误处理和文件验证机制

 使用视频实际尺寸生成缩略图:
- 添加get_video_info方法获取视频元数据
- 保持原始宽高比,最大宽度160像素
- 支持音频流信息解析和完整的VideoMetadata结构

 代码优化:
- 简化前端缩略图加载逻辑,统一使用新接口
- 移除重复的generateSegmentThumbnail函数
- 清理不必要的参数传递和依赖项

 功能特点:
- 自动检测文件丢失并重新生成
- 使用视频原始尺寸保持最佳显示效果
- 统一的错误处理和缓存机制
- 减少代码重复,提高维护性

现在缩略图生成更加智能和高效,能够自动处理文件丢失的情况,并使用视频的实际尺寸生成最佳质量的缩略图。
2025-07-15 22:49:53 +08:00
imeepos 44f3f40705 fix: 修复缩略图显示权限问题,使用base64数据URL
解决asset.localhost访问权限问题:
- 添加read_thumbnail_as_data_url命令读取文件并转换为base64数据URL
- 避免使用convertFileSrc的asset.localhost协议访问问题
- 添加base64依赖支持文件编码

 优化缩略图加载:
- 使用数据URL直接在img标签中显示缩略图
- 正确处理Windows长路径前缀 \\\\?\\
- 统一错误处理和降级机制

 技术改进:
- 移除不再使用的convertFileSrc导入
- 添加详细的控制台日志便于调试
- 确保跨平台文件路径兼容性

现在缩略图可以正确显示,不会因为权限问题导致加载失败。
2025-07-15 22:38:22 +08:00
imeepos 4d61fb69f3 fix: 修复缩略图生成功能
解决编译问题:
- 修复async函数中跨await点持有MutexGuard的Send trait问题
- 添加get_segment_by_id_sync同步方法避免锁生命周期冲突
- 修复Path类型推断问题

 优化FFmpeg缩略图生成:
- 添加-pix_fmt yuvj420p参数解决色彩空间问题
- 添加-q:v 2参数提升图片质量
- 添加-f image2参数明确指定输出格式
- 解决MJPEG编码器参数错误问题

 功能特点:
- 使用视频首帧生成缩略图
- 缩略图路径保存到数据库
- 智能缓存机制避免重复生成
- 优雅的错误处理和降级

现在缩略图生成功能可以正常工作,用户可以在MaterialSegmentView中看到实际的视频预览图。
2025-07-15 22:20:46 +08:00
imeepos 10177d2501 feat: 为MaterialSegmentView添加视频片段播放功能
视频播放功能:
- 为Eye按钮添加点击播放功能:点击后播放对应的视频片段
- 传递片段参数:文件路径、开始时间、结束时间
- 悬停效果优化:按钮颜色从灰色变为蓝色
- 工具提示:显示'播放视频片段'提示文字

 后端播放命令:
- 新增play_video_segment命令:支持播放指定时间段的视频
- 跨平台播放器支持:
  * Windows: 使用cmd /C start启动默认播放器
  * macOS: 使用open命令启动默认播放器
  * Linux: 使用xdg-open启动默认播放器
- 文件存在性检查:播放前验证视频文件是否存在
- 完善错误处理:播放失败时给出详细错误信息

 系统集成:
- 命令注册:在lib.rs中正确注册play_video_segment命令
- 日志记录:记录播放操作的成功/失败状态
- 参数传递:支持文件路径和时间参数传递

 用户体验:
- 一键播放:点击Eye按钮直接播放视频片段
- 系统默认播放器:使用用户熟悉的播放器应用
- 即时反馈:点击后立即启动播放器
- 视觉提示:按钮状态清楚表达可点击性

 功能特点:
- 智能播放:虽然后端接收时间参数,但使用系统默认播放器播放完整视频
- 跨平台兼容:Windows/macOS/Linux都能正常工作
- 错误恢复:文件不存在或播放器启动失败时有相应提示
- 性能优化:异步播放,不阻塞界面操作

现在用户可以:
1. 点击任意片段的Eye按钮播放对应视频
2. 使用系统默认播放器观看视频内容
3. 享受跨平台一致的播放体验
4. 在播放失败时获得清楚的错误提示

注:当前实现使用系统默认播放器播放完整视频文件,未来可以考虑集成支持时间段播放的专业播放器。
2025-07-15 21:57:58 +08:00
imeepos 91eb22aaa9 feat: 优化MaterialSegmentView文件显示和添加打开目录功能
文件显示优化:
- 提取文件名显示:从完整路径中提取文件名,避免显示过长的路径
- 处理Windows长路径格式:正确处理\\\\?\\前缀的长路径
- 简洁的文件名展示:只显示文件名而不是完整路径

 打开目录功能:
- 添加FolderOpen图标按钮:每个片段卡片都有打开目录按钮
- 跨平台支持:Windows使用explorer /select,macOS使用open -R,Linux使用xdg-open
- 智能路径处理:自动检测文件/目录并使用合适的打开方式
- 错误处理:完善的错误处理和日志记录

 后端命令实现:
- 新增open_file_directory命令:支持打开文件所在目录
- 注册到invoke_handler:在lib.rs中正确注册新命令
- 系统集成:使用系统默认的文件管理器打开目录

 UI/UX改进:
- 文件名+按钮布局:文件名和打开按钮在同一行显示
- 悬停效果:按钮有hover状态,提供良好的交互反馈
- 工具提示:按钮有'打开文件所在目录'的提示文字
- 图标设计:使用FolderOpen图标,直观表达功能

 功能特点:
- 一键打开:点击按钮直接在文件管理器中打开文件所在目录
- 文件定位:Windows下会自动选中对应文件
- 路径兼容:支持各种路径格式,包括长路径
- 安全检查:文件不存在时会给出错误提示

现在用户可以:
1. 看到简洁的文件名而不是冗长的完整路径
2. 点击文件夹图标快速打开文件所在目录
3. 在文件管理器中直接定位到对应文件
4. 享受跨平台一致的用户体验
2025-07-15 21:52:58 +08:00
imeepos bc5d9d1054 fix: 修复素材查询 2025-07-15 19:00:58 +08:00
imeepos 0ea1b2cd38 fix: 添加只读链接 读写分离 2025-07-15 18:51:09 +08:00
imeepos 8d8e98188d fix: 添加连接池功能 2025-07-15 18:43:22 +08:00
imeepos 86eeb90fb8 fix: 使用非阻塞锁获取 2025-07-15 18:20:00 +08:00
imeepos 6dcbd4a6e1 fix: 数据库链接 锁问题 2025-07-15 18:10:54 +08:00
imeepos 67ce7104e3 fix: 将所有仓库统一使用 database: Arc<Database> 方式 2025-07-15 17:45:08 +08:00
imeepos 54630ea2ff fix: 修复数据库链接锁问题 2025-07-15 17:11:44 +08:00
imeepos 590e254fe1 feat: 添加项目详情/素材管理的MaterialSegment聚合视图功能
- 新增MaterialSegment聚合视图,支持按AI分类和模特聚合展示
- 实现后端MaterialSegmentViewService和相关API命令
- 创建前端React组件:MaterialSegmentView、MaterialSegmentGroup、MaterialSegmentCard等
- 添加MaterialSegment详细信息模态框和批量操作对话框
- 实现搜索、筛选、排序、分页功能
- 集成虚拟滚动和性能优化
- 在ProjectDetails页面添加片段管理选项卡
- 遵循promptx开发规范和UI/UX设计标准
2025-07-15 16:49:08 +08:00
imeepos bab1dfc5fd feat: 实现素材匹配功能 v0.1.19
- 新增素材匹配服务 (MaterialMatchingService)
  - 支持AI分类匹配、随机匹配等规则
  - 实现模特限制逻辑(每个模特素材只能使用一次)
  - 时长匹配优化(相差越小越好)
  - 详细的匹配统计和失败原因分析

- 新增Tauri API命令
  - execute_material_matching: 执行素材匹配
  - get_project_material_stats_for_matching: 获取项目素材统计
  - validate_template_binding_for_matching: 验证模板绑定

- 新增前端组件和服务
  - MaterialMatchingResultDialog: 匹配结果对话框
  - MaterialMatchingService: 前端服务层
  - 完整的TypeScript类型定义

- UI集成
  - 在模板绑定列表添加匹配素材按钮
  - 集成到项目详情页面
  - 支持完整的匹配流程和结果展示

- 核心匹配规则
  - 只使用已AI分类的MaterialSegment
  - 每个素材只能使用一次
  - 模特限制:优先同一模特,失败后尝试其他模特
  - 视频时长必须大于模板需求,相差越小匹配度越高

- 测试覆盖
  - 后端服务单元测试
  - 覆盖正常匹配、失败场景、边界情况
2025-07-15 14:56:10 +08:00
imeepos 7c40da1b83 fix: 修复素材绑定页面显示暂无素材的问题
- 添加get_all_materials后端命令获取所有项目的素材
- 在MaterialRepository中实现get_all方法
- 在MaterialService中添加get_all_materials方法
- 修改MaterialModelBindingService的getMaterialsByFilter方法,在没有指定项目时获取所有素材而不是返回空数组
- 确保素材绑定页面能正确显示所有素材数据,与统计信息保持一致
- 支持在全局素材列表上应用绑定状态和搜索过滤
2025-07-15 14:18:48 +08:00
imeepos de446b6410 fix: 修复项目详情页面模板绑定和素材绑定页面的搜索功能
- 修复项目详情页面模板绑定搜索功能:使用过滤后的绑定详情而不是原始数据
- 修复素材绑定页面搜索功能:添加useEffect监听搜索条件变化并重新加载数据
- 修复素材绑定页面统计功能:实现全局模特绑定统计API和前端调用
- 优化MaterialModelBindingService的getMaterialsByFilter方法,正确处理多重过滤条件
- 添加后端get_global_model_binding_stats命令和相关仓库方法
- 确保搜索和统计功能在所有相关页面正常工作
2025-07-15 14:10:29 +08:00
imeepos a1ccde6b89 fix: 修复get_model_by_id死锁问题和批量删除模板功能
- 修复ModelService中get_model_by_id使用get_basic_by_id避免数据库死锁
- 解决MaterialCard组件中关联模特一直加载中的问题
- 修复ProjectTemplateBindingList中executeDelete函数的异步处理
- 在get_model_by_id命令中添加详细的调试日志
- 在MaterialCard中添加组件卸载时的状态清理机制
- 在批量删除服务中添加调试日志追踪问题
- 解决页面切换时loading状态不清除的问题
2025-07-15 13:49:43 +08:00
imeepos cc46115a26 fix: 修复素材导入时model_id为空的问题并添加调试日志
- 修复异步导入函数process_single_file_with_full_logic未使用model_id参数的问题
- 更新函数签名以正确传递model_id参数
- 在素材创建时使用Material::new_with_model而不是Material::new
- 在前端、Store层、后端各个环节添加详细的调试日志
- 确保model_id在整个导入流程中正确传递和使用
- 解决素材导入时选择模特但数据库中model_id为null的问题
2025-07-15 13:40:47 +08:00
imeepos 7e9190dd02 fix: 修复项目模板绑定priority列类型错误
- 修复project_template_binding_repository中priority列的类型不一致问题
- 将priority和is_active字段的存储从字符串改为整数类型
- 修复create、update和query操作中的类型转换错误
- 解决'Invalid column type Integer at index: 5, name: priority'错误
- 确保数据库schema与代码中的类型处理保持一致
2025-07-15 13:31:48 +08:00
imeepos 259ff992ae fix: 修复素材导入时model_id为null的数据库问题
- 在materials表初始创建时添加model_id列,避免依赖迁移
- 在初始索引创建中添加model_id索引
- 添加调试日志跟踪model_id在导入过程中的传递
- 确保素材导入时选择的模特ID能正确保存到数据库
- 解决素材导入+选择模特后数据库结果model_id=null的问题
2025-07-15 13:28:47 +08:00
imeepos 8f1355ba16 fix: 修复数据库查询NULL值错误和Tauri命令参数命名问题
- 修复video_classification_repository中get_classification_stats函数的NULL值处理
- 将SUM()查询结果从直接获取i32改为Option<i32>并提供默认值0
- 修复get_templates_by_project等命令的参数命名,使用camelCase以匹配前端调用
- 解决'Invalid column type Null at index: 1, name: pending'错误
- 解决'invalid args projectId for command get_templates_by_project'错误
2025-07-15 13:18:04 +08:00
imeepos 3f90013a47 feat: 完善素材导入模特绑定功能并添加测试
- 添加测试验证 CreateMaterialRequest 的 model_id 字段
- 添加测试验证 Material::new_with_model 方法
- 更新测试导入以包含新的 model_id 字段
- 确保数据结构和方法的正确性
2025-07-15 13:03:49 +08:00
imeepos 6f888295bb feat: 添加素材导入时的模特绑定功能
- 在 CreateMaterialRequest 中添加 model_id 字段
- 更新 Material 实体添加 new_with_model 方法支持创建时绑定模特
- 修改 MaterialService 和 AsyncMaterialService 支持导入时模特绑定
- 在 MaterialImportDialog 中添加模特选择下拉框
- 支持在导入素材时可选择绑定到特定模特
- 遵循 Tauri 开发规范的组件设计和业务逻辑分层
2025-07-15 12:59:27 +08:00
imeepos 730402aba0 feat: 实现项目-模板绑定和素材-模特绑定管理功能
新功能:
- 项目-模板绑定管理系统
  - 支持主要/次要模板绑定类型
  - 绑定优先级和状态管理
  - 批量绑定操作
  - 绑定关系的CRUD操作

- 素材-模特绑定管理系统
  - 素材与模特的关联管理
  - 批量绑定/解绑操作
  - 绑定统计和分析
  - 素材编辑对话框

 架构改进:
- 新增项目-模板绑定数据模型和仓库层
- 新增素材-模特绑定业务服务层
- 完善的API命令层实现
- 响应式前端界面设计

 用户体验优化:
- 统一的通知系统
- 增强的加载状态组件
- 流畅的交互动画
- 优雅的确认对话框

 测试覆盖:
- 单元测试和集成测试
- 业务逻辑验证
- API接口测试

 技术栈:
- 后端: Rust + Tauri + SQLite
- 前端: React + TypeScript + TailwindCSS
- 状态管理: Zustand
- 测试: Vitest + Rust测试框架

 配置更新:
- 更新数据库迁移脚本
- 完善测试配置
- 优化构建流程
2025-07-15 12:50:30 +08:00
imeepos 73c2187757 feat: 添加[随机匹配]选项到TemplateSegment匹配规则
- 在Rust后端SegmentMatchingRule枚举中添加RandomMatch变体
- 更新TypeScript前端类型定义和SegmentMatchingRuleHelper工具函数
- 修改SegmentMatchingRuleEditor组件支持随机匹配选项
- 添加绿色样式标识随机匹配规则
- 添加完整的单元测试覆盖新功能

遵循promptx/tauri-desktop-app-expert开发规范
2025-07-15 10:19:06 +08:00
imeepos 05d29832b0 feat: 实现模板片段匹配规则功能并修复数据库迁移问题
新功能:
- 为TrackSegment添加匹配规则字段,支持固定素材和AI分类两种规则
- 实现SegmentMatchingRuleEditor组件,支持在模板详情页面编辑片段匹配规则
- 添加update_segment_matching_rule和get_segment_matching_rule API接口
- 扩展前端类型定义和服务函数以支持匹配规则操作

 修复:
- 修复数据库迁移逻辑导致每次重启清空素材和轨道数据的问题
- 为模板表和轨道片段表迁移添加条件检查,只在必要时执行
- 修正matching_rule字段的默认值格式,匹配Rust枚举序列化格式
- 完善轨道片段表重建时的字段迁移逻辑

 技术改进:
- 数据库schema更新,添加matching_rule列到track_segments表
- 优化数据库迁移性能,避免不必要的表重建操作
- 增强错误处理和日志输出,便于问题排查

 文件变更:
- 后端: template_service.rs, template.rs, database.rs, template_commands.rs, lib.rs
- 前端: SegmentMatchingRuleEditor.tsx, TemplateDetailModal.tsx, templateStore.ts, template.ts
2025-07-15 09:43:04 +08:00
imeepos be8c032158 fix: 时间显示精度问题 2025-07-15 09:08:37 +08:00
imeepos 0a0c281ef6 fix: 模板导入bug 2025-07-15 08:55:22 +08:00
imeepos 14d90b2254 fix: 模板移除project关联 2025-07-15 08:42:36 +08:00
imeepos 595d2f75fd fix: 修复模板导入的bug 2025-07-14 23:14:45 +08:00
imeepos 2d88274c3a fix: 修复模板导入功能的关键问题
修复问题:
- 修复数据库状态格式不一致导致的列表显示错误
- 修复单个导入完成后统计信息显示为0的问题
- 修复日期时间解析错误导致的panic问题
- 修复所有unwrap()调用导致的潜在崩溃

 技术改进:
- 统一使用Debug格式保存和查询import_status
- 改进日期解析支持多种格式(RFC3339和SQLite格式)
- 优化进度监控逻辑,保留最后有效统计数据
- 完善错误处理,避免锁中毒和解析错误

 功能完善:
- 模板导入完成后正确显示'已完成'状态
- 统计信息准确显示成功/失败数量
- 进度监控稳定运行,无无限轮询问题
2025-07-14 21:50:29 +08:00
imeepos 939efd70d4 feat: 完善模板导入功能
新增功能:
- 添加详细的模板导入日志系统
- 实现全局进度存储机制
- 完善模板状态管理

 修复问题:
- 修复进度监控无限轮询问题
- 修复模板列表状态显示不正确问题
- 修复所有unwrap()导致的panic错误
- 修复外键约束失败问题

 改进:
- 优化素材上传逻辑,只上传视频/音频/图片
- 上传失败时自动跳过而不是中断导入
- 缺失文件时继续导入而不是失败
- 改进错误处理机制
2025-07-14 21:34:07 +08:00
imeepos 3786c4f54f chore: 发布版本 0.1.9
- 完成项目一键AI分类功能开发
- 更新版本号到 0.1.9
- 更新 TODO.md 标记任务完成状态
2025-07-14 18:35:59 +08:00
imeepos eeeef4ead4 feat: 实现项目一键AI分类功能
- 添加ProjectBatchClassificationRequest和ProjectBatchClassificationResponse数据模型
- 在VideoClassificationService中实现create_project_batch_classification_tasks方法
- 添加start_project_batch_classification Tauri命令接口
- 在前端添加startProjectBatchClassification方法和相关类型定义
- 在项目详情页面添加一键AI分类按钮和队列状态监控
- 支持批量处理项目下所有符合条件的视频素材
- 集成现有的AI分类队列系统,确保兼容性
2025-07-14 18:26:03 +08:00
imeepos 29e77c2b6f 修改队列处理逻辑,添加自动停止机制 2025-07-14 16:33:11 +08:00
imeepos bb240833a4 fix: 修复片段路径更新时的数据库表名错误
问题修复:
- 修复update_segment_file_path方法中错误的表名
- 将'video_segments'改为正确的'material_segments'
- 移除不存在的updated_at字段更新

 问题分析:
- 数据库中只有material_segments表,没有video_segments表
- material_segments表结构只包含created_at,没有updated_at字段
- 这导致AI分类后文件移动成功但片段路径更新失败

 修复效果:
- AI分类完成后能正确更新片段的file_path
- 数据库中的片段记录将指向新的分类目录
- 消除'no such table: video_segments'错误

 数据一致性:
- 确保文件移动和数据库更新的一致性
- 片段路径始终反映文件的真实位置
- 避免数据库记录与实际文件位置不符的问题
2025-07-14 16:21:08 +08:00
imeepos 48ad00cfcd fix: 修复日期格式问题 2025-07-14 16:10:05 +08:00
imeepos 4cb264cc32 fix: 修复分类文件 移动到其他位置后 数据库对应字段未更新的bug 2025-07-14 16:02:57 +08:00
imeepos 7a9ac750ae fix: 修复前端队列控制按钮功能
问题修复:
- 修复暂停/恢复/停止按钮无法正常工作的问题
- 添加详细的调试日志来诊断按钮操作
- 优化按钮的启用/禁用逻辑和视觉反馈

 技术改进:
- 在队列操作后添加延迟确保后端状态更新
- 修复refreshQueueStatus方法的返回值类型
- 改进按钮状态判断逻辑,支持更多队列状态

 用户体验提升:
- 添加状态指示器显示当前队列状态
- 改进按钮的禁用状态样式
- 提供更清晰的按钮提示文本

 状态管理优化:
- 确保队列控制操作后正确刷新状态
- 添加操作中的加载状态指示
- 改进错误处理和日志输出

 任务恢复机制:
- 添加recover_stuck_tasks功能恢复卡住的任务
- 在队列启动时自动恢复处理中状态的任务
- 解决应用意外关闭导致任务永久卡住的问题
2025-07-14 15:52:28 +08:00
imeepos 0c7eeb9905 移除无用日志 2025-07-14 15:27:24 +08:00
imeepos 2732be6df4 fix: 修复前端队列统计数据不准确的问题
问题修复:
- 修复get_pending_tasks查询条件,使用正确的JSON序列化格式
- 修复get_classification_stats中的状态查询条件
- 添加详细的调试日志来诊断状态序列化问题

 技术改进:
- 使用参数化查询避免SQL注入风险
- 正确处理TaskStatus枚举的JSON序列化
- 统一状态查询的格式和逻辑

 数据一致性:
- 前端显示的队列统计现在基于真实的任务状态
- 消除了前后端数据不同步的问题
- 确保任务查询和统计查询使用相同的状态格式

 调试信息:
- 添加状态序列化结果的日志输出
- 便于诊断和验证修复效果
2025-07-14 15:19:40 +08:00
imeepos fbdd1bf1ea fix: 修复MaterialRepository中get_project_by_id方法的占位符实现
问题修复:
- 修复MaterialRepository.get_project_by_id总是返回None的问题
- 实现正确的项目查询逻辑,直接从projects表查询
- 解决AI分类后文件移动失败的根本原因

 技术实现:
- 在MaterialRepository中添加完整的项目查询实现
- 正确处理数据库查询和错误处理
- 支持项目不存在时返回None而不是错误

 问题解决:
- 现在AI分类完成后可以正确找到项目信息
- 文件移动到assets/分类目录功能将正常工作
- 消除了'项目不存在'的错误信息
2025-07-14 15:06:15 +08:00
imeepos 7210c15ffd fix: 修复AI分类后文件移动失败的问题
问题修复:
- 添加详细的调试日志来诊断文件移动失败的原因
- 修复项目ID不匹配导致的文件移动失败问题
- 增强项目ID验证和错误处理逻辑

 技术改进:
- 在创建分类任务时验证项目ID匹配性
- 在移动文件时添加详细的调试信息
- 支持项目ID不匹配时的自动修复逻辑

 问题诊断:
- 发现素材的project_id与请求的project_id不匹配
- 添加了项目存在性验证
- 提供了更清晰的错误信息和日志输出
2025-07-14 15:00:41 +08:00