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
This commit is contained in:
2026-10-09 15:13:50 +08:00
parent bb374dd374
commit 6423eeed77
4 changed files with 702 additions and 170 deletions

View File

@@ -108,7 +108,7 @@
<label class="checkbox-label">
<input
type="checkbox"
v-model="singleFrameSettings.single_frame_trace_vlm_enabled"
v-model="faceFilterSettings.single_frame_trace_vlm_enabled"
@change="markModified"
/>
VLM Processing
@@ -120,7 +120,7 @@
<label class="checkbox-label">
<input
type="checkbox"
v-model="singleFrameSettings.single_frame_trace_group_enabled"
v-model="faceFilterSettings.single_frame_trace_group_enabled"
@change="markModified"
/>
Face Groups
@@ -132,7 +132,7 @@
<label class="checkbox-label">
<input
type="checkbox"
v-model="singleFrameSettings.single_frame_trace_unassigned_enabled"
v-model="faceFilterSettings.single_frame_trace_unassigned_enabled"
@change="markModified"
/>
Unassigned List
@@ -144,7 +144,7 @@
<label class="checkbox-label">
<input
type="checkbox"
v-model="singleFrameSettings.single_trace_group_filter_enabled"
v-model="faceFilterSettings.single_trace_group_filter_enabled"
@change="markModified"
/>
Single Trace Groups
@@ -154,19 +154,19 @@
<div class="section-actions">
<div class="auto-save-hint">
{{ singleFrameSettingsLoading ? '⏳ Saving...' : '✓ Auto-saved' }}
{{ faceFilterSettingsLoading ? '⏳ Saving...' : '✓ Auto-saved' }}
</div>
<button
class="action-btn"
@click="handleResetSingleFrame"
:disabled="singleFrameSettingsLoading"
:disabled="faceFilterSettingsLoading"
>
Reset to Default
</button>
</div>
<div v-if="singleFrameSettingsError" class="error-message">
❌ {{ singleFrameSettingsError }}
<div v-if="faceFilterSettingsError" class="error-message">
❌ {{ faceFilterSettingsError }}
</div>
</div>
@@ -220,7 +220,7 @@
<script setup lang="ts">
import { ref, watch, onBeforeUnmount } from 'vue';
import { useFaceFilter, type QuickFilterRules } from '../composables/useFaceFilter';
import { useFaceFilter, type UiFilterRules } from '../composables/useFaceFilter';
const props = defineProps<{
fileUuid: string;
@@ -242,10 +242,10 @@ const {
updateRules,
applyBackendFilter,
resetToDefault,
singleFrameSettings,
singleFrameSettingsLoading,
singleFrameSettingsError,
singleFrameSettingsModified,
faceFilterSettings,
faceFilterSettingsLoading,
faceFilterSettingsError,
faceFilterSettingsModified,
loadSingleFrameSettings,
resetSingleFrameSettings,
markSingleFrameSettingsModified,
@@ -291,7 +291,7 @@ watch(showPanel, (show) => {
}
});
watch(singleFrameSettingsModified, (newVal, oldVal) => {
watch(faceFilterSettingsModified, (newVal, oldVal) => {
if (oldVal === true && newVal === false) {
emit('settings-updated');
}