f75ebfac88
fix: 修复 Face Filter UI 参数持久化到后端数据库
...
问题:
- UI Filter Rules (min_confidence, min_bbox_size 等) 修改后只保存到 localStorage
- 不会持久化到后端数据库,导致刷新页面或换浏览器后设置丢失
修复:
- updateRules() 函数现在会调用 markSingleFrameSettingsModified()
- 触发 500ms debounce 的 auto-save 到后端 API
- 保存完整的 FaceFilterSettings (包括 ui_filter_rules, processing_thresholds, trace_settings)
变更:
1. src/composables/useFaceFilter.ts
- updateRules() 新增调用 markSingleFrameSettingsModified()
- 确保 UI Filter Rules 修改后自动保存到后端
2. docs/FACE_FILTER_PERSISTENCE_TEST_GUIDE.md
- 完整的测试指南
- 包含调试方法和后端 API 要求
持久化流程:
- FaceFilterPanel 打开 → loadSingleFrameSettings() 从后端加载
- 用户修改参数 → updateRules() → markSingleFrameSettingsModified() → auto-save
- 500ms debounce → saveSingleFrameSettings() → PUT /api/v1/file-profile
测试:
- ✅ TypeScript 编译通过
- ⏳ 需要验证后端 API 支持
测试文件: 020.mp4 (UUID: b496a68800f90770aa7246c877f38985)
2026-10-09 16:25:26 +08:00
8789770af2
fix: 移除 FaceFilterSettings 重复字段,与 Rust 端结构一致
...
问题修正:
- 移除 FaceFilterSettings 中的重复字段
- 简化为三段式结构(ui_filter_rules, processing_thresholds, trace_settings)
- 新增 version 字段用于版本控制
- 删除 useFaceFilter.ts 中的 rules 变量
- 重命名 faceFilterSettings 为 settings
- 更新所有访问方式为 settings.value.ui_filter_rules.*
变更内容:
1. src/types/faceFilter.ts
- FaceFilterSettings 只保留三段式结构
- fromLegacy() 和 defaults() 不再返回重复字段
2. src/composables/useFaceFilter.ts
- 删除 rules 变量(不再需要)
- 删除 defaultRules 常量
- 重命名 faceFilterSettings 为 settings
- 更新 localStorage 逻辑保存完整 settings
- 所有访问改为 settings.value.ui_filter_rules.*
3. src/components/FaceFilterPanel.vue
- 更新 v-model 绑定为 settings.trace_settings.*
- 更新解构,删除 rules
- 更新所有访问为 settings.ui_filter_rules.*
测试:
- ✅ TypeScript 编译通过
- ✅ Vite build 成功
对应 Core API: 86c776ce
修正文档: docs/FACE_FILTER_TYPES_FIX_REQUIRED.md
2026-10-09 15:55:30 +08:00
6423eeed77
feat: 更新 FaceFilterSettings TypeScript 类型定义为三段式统一结构
...
变更内容:
- 创建 src/types/faceFilter.ts 类型定义文件
- 新增 UiFilterRules, ProcessingThresholds, TraceSettings 三个子结构
- 更新 FaceFilterSettings 为三段式统一结构
- min_confidence 范围从 0-100 改为 0.0-1.0
- min_size 重命名为 min_bbox_size
- 新增字段: max_confidence, max_bbox_size, source, backend_status
向后兼容性:
- FaceFilterSettingsMigration.fromLegacy() 自动转换旧格式
- FaceFilterSettingsMigration.defaults() 提供默认值
- 保留向后兼容字段(deprecated 标记)
更新文件:
- src/composables/useFaceFilter.ts: 使用新类型,更新变量名
- src/components/FaceFilterPanel.vue: 更新导入和变量引用
- docs/FACE_FILTER_SETTINGS_MIGRATION_GUIDE.md: 完整迁移指南
测试:
- ✅ TypeScript 编译通过
- ✅ Vite build 成功
对应 Core API commit: 86c776ce
2026-10-09 15:13:50 +08:00
5928bc9404
feat: Face Filter 自動保存(500ms 防抖 + 離開頁面自動保存)
2026-10-07 23:27:37 +08:00
f3d75ebce8
feat: Library 批量注册 + PeopleView 修复 + 国际化
...
Library:
- 添加 checkbox 和鼠标框选功能
- Unregistered 卡片添加快速注册按钮
- 状态标签移至左下方,人脸图标移至左侧中间
- Deep Scan 改为 unregister -> register -> process
- 完整国际化(日语、繁体中文、英语)
PeopleView:
- 修复卡片不显示问题(使用 get_file_traces API)
- 移除对 identity_id 字段的依赖
其他:
- 添加日语语言包
- 添加 useDragSelect composable
- 新增文档:Face Bbox Null Bug Report
2026-10-01 00:42:13 +08:00
7b60ca3d2d
feat: add face filter components and integration guide
...
- useFaceFilter composable: manages face filtering state and API calls
- FaceFilterPanel component: UI for filtering controls
- FaceCard component: text-only face display card
- Integration guide: step-by-step guide for integrating into PeopleView
Implements hybrid filtering mode with:
- Instant mode: client-side filtering (5-10ms)
- Backend mode: server-side complex filtering
- Hybrid mode: backend + instant filtering (AND)
Uses actual Core API endpoints:
- GET /file/{uuid}/faces
- POST /file/{uuid}/faces/filter
- GET /file/{uuid}/face/{faceId}/filter-report
- GET /file/{uuid}/filter-stats
Preferences stored in localStorage.
2026-08-09 21:24:52 +08:00
cb7e1ba0ba
fix: resolve TypeScript compilation errors
...
Fixes:
- VideoPlayer.vue: restore allTags, filteredMarks, marksByTag (removed by mistake)
- PeopleView.vue: fix frameTime scope in playFaceDetailVideo catch block
- Both errors caused white screen on build failure
Root cause:
1. visibleTags duplicate declaration (old + new logic)
2. frameTime undefined in catch block (scope issue)
Solution:
1. Keep allTags/filteredMarks/marksByTag (needed in template)
2. Keep visibleTags (new logic for processor toggles)
3. Move frameTime calculation to correct scope in catch block
2026-07-24 23:33:40 +08:00
7855983dc1
feat: bind/unbind by id, video streaming proxy, unmute default, library refresh, hamburger click-outside
...
- Core API: bind/unbind accept id (integer PK) when face_id is null
- Tauri proxy: stream video responses instead of buffering for seek bar
- VideoPlayer: remove muted attribute, unmute by default
- LibraryView: call invalidateFiles() before ensureFiles() on register/unregister
- PeopleView: close sort panel on click-outside, not just hamburger toggle
- bind_face: prefer face_id, fallback to id when face_id is null
2026-06-18 22:24:03 +08:00