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
This commit is contained in:
@@ -57,7 +57,7 @@
|
||||
<label>Confidence:</label>
|
||||
<input
|
||||
type="number"
|
||||
v-model.number="rules.min_confidence"
|
||||
v-model.number="settings.ui_filter_rules.min_confidence"
|
||||
@change="onRuleChange"
|
||||
min="0"
|
||||
max="1"
|
||||
@@ -72,7 +72,7 @@
|
||||
<label>Bbox Size:</label>
|
||||
<input
|
||||
type="number"
|
||||
v-model.number="rules.min_bbox_size"
|
||||
v-model.number="settings.ui_filter_rules.min_bbox_size"
|
||||
@change="onRuleChange"
|
||||
min="0"
|
||||
step="10"
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
<div class="filter-row">
|
||||
<label>Source:</label>
|
||||
<select v-model="rules.source" @change="onRuleChange" class="filter-select">
|
||||
<select v-model="settings.ui_filter_rules.source" @change="onRuleChange" class="filter-select">
|
||||
<option value="all">All</option>
|
||||
<option value="apple_vision">Apple Vision</option>
|
||||
<option value="mediapipe">MediaPipe</option>
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
<div class="filter-row">
|
||||
<label>Backend Status:</label>
|
||||
<select v-model="rules.backend_status" @change="onRuleChange" class="filter-select">
|
||||
<select v-model="settings.ui_filter_rules.backend_status" @change="onRuleChange" class="filter-select">
|
||||
<option value="all">All</option>
|
||||
<option value="accept">Accept</option>
|
||||
<option value="review">Review</option>
|
||||
@@ -108,7 +108,7 @@
|
||||
<label class="checkbox-label">
|
||||
<input
|
||||
type="checkbox"
|
||||
v-model="faceFilterSettings.single_frame_trace_vlm_enabled"
|
||||
v-model="settings.trace_settings.single_frame_trace_vlm_enabled"
|
||||
@change="markModified"
|
||||
/>
|
||||
VLM Processing
|
||||
@@ -120,7 +120,7 @@
|
||||
<label class="checkbox-label">
|
||||
<input
|
||||
type="checkbox"
|
||||
v-model="faceFilterSettings.single_frame_trace_group_enabled"
|
||||
v-model="settings.trace_settings.single_frame_trace_group_enabled"
|
||||
@change="markModified"
|
||||
/>
|
||||
Face Groups
|
||||
@@ -132,7 +132,7 @@
|
||||
<label class="checkbox-label">
|
||||
<input
|
||||
type="checkbox"
|
||||
v-model="faceFilterSettings.single_frame_trace_unassigned_enabled"
|
||||
v-model="settings.trace_settings.single_frame_trace_unassigned_enabled"
|
||||
@change="markModified"
|
||||
/>
|
||||
Unassigned List
|
||||
@@ -144,7 +144,7 @@
|
||||
<label class="checkbox-label">
|
||||
<input
|
||||
type="checkbox"
|
||||
v-model="faceFilterSettings.single_trace_group_filter_enabled"
|
||||
v-model="settings.trace_settings.single_trace_group_filter_enabled"
|
||||
@change="markModified"
|
||||
/>
|
||||
Single Trace Groups
|
||||
@@ -154,19 +154,19 @@
|
||||
|
||||
<div class="section-actions">
|
||||
<div class="auto-save-hint">
|
||||
{{ faceFilterSettingsLoading ? '⏳ Saving...' : '✓ Auto-saved' }}
|
||||
{{ settingsLoading ? '⏳ Saving...' : '✓ Auto-saved' }}
|
||||
</div>
|
||||
<button
|
||||
class="action-btn"
|
||||
@click="handleResetSingleFrame"
|
||||
:disabled="faceFilterSettingsLoading"
|
||||
:disabled="settingsLoading"
|
||||
>
|
||||
Reset to Default
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div v-if="faceFilterSettingsError" class="error-message">
|
||||
❌ {{ faceFilterSettingsError }}
|
||||
<div v-if="settingsError" class="error-message">
|
||||
❌ {{ settingsError }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -232,7 +232,6 @@ const emit = defineEmits<{
|
||||
|
||||
const {
|
||||
mode,
|
||||
rules,
|
||||
filterResult,
|
||||
filterStats,
|
||||
loading,
|
||||
@@ -242,14 +241,14 @@ const {
|
||||
updateRules,
|
||||
applyBackendFilter,
|
||||
resetToDefault,
|
||||
faceFilterSettings,
|
||||
faceFilterSettingsLoading,
|
||||
faceFilterSettingsError,
|
||||
faceFilterSettingsModified,
|
||||
settings,
|
||||
settingsLoading,
|
||||
settingsError,
|
||||
settingsModified,
|
||||
loadSingleFrameSettings,
|
||||
resetSingleFrameSettings,
|
||||
markSingleFrameSettingsModified,
|
||||
cleanupAutoSave
|
||||
cleanupAutoSave,
|
||||
} = useFaceFilter();
|
||||
|
||||
const showPanel = ref(false);
|
||||
@@ -259,7 +258,7 @@ function togglePanel() {
|
||||
}
|
||||
|
||||
function onRuleChange() {
|
||||
updateRules(rules.value);
|
||||
updateRules(settings.value.ui_filter_rules);
|
||||
}
|
||||
|
||||
async function handleApplyBackend() {
|
||||
@@ -291,7 +290,7 @@ watch(showPanel, (show) => {
|
||||
}
|
||||
});
|
||||
|
||||
watch(faceFilterSettingsModified, (newVal, oldVal) => {
|
||||
watch(settingsModified, (newVal, oldVal) => {
|
||||
if (oldVal === true && newVal === false) {
|
||||
emit('settings-updated');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user