feat: Face Filter 自動保存(500ms 防抖 + 離開頁面自動保存)

This commit is contained in:
2026-10-07 23:27:37 +08:00
parent 407651eead
commit 5928bc9404
2 changed files with 58 additions and 18 deletions

View File

@@ -234,6 +234,9 @@ export function useFaceFilter() {
const singleFrameSettingsError = ref<string | null>(null);
const singleFrameSettingsModified = ref(false);
const currentFileUuid = ref<string | null>(null);
let autoSaveTimer: ReturnType<typeof setTimeout> | null = null;
// Computed stats
const stats = computed(() => ({
total: allFaces.value.length,
@@ -406,6 +409,7 @@ export function useFaceFilter() {
singleFrameSettingsError.value = null;
try {
currentFileUuid.value = fileUuid;
const profile = await getFileProfile(fileUuid);
singleFrameSettings.value = {
single_frame_trace_vlm_enabled: profile.face_filter.single_frame_trace_vlm_enabled ?? true,
@@ -441,6 +445,29 @@ export function useFaceFilter() {
}
}
function autoSaveSettings() {
if (autoSaveTimer) {
clearTimeout(autoSaveTimer);
}
autoSaveTimer = setTimeout(async () => {
if (currentFileUuid.value && singleFrameSettingsModified.value) {
const success = await saveSingleFrameSettings(currentFileUuid.value);
if (!success) {
console.error('Auto-save failed for single frame settings');
}
}
autoSaveTimer = null;
}, 500);
}
function cleanupAutoSave() {
if (autoSaveTimer) {
clearTimeout(autoSaveTimer);
autoSaveTimer = null;
}
}
function resetSingleFrameSettings() {
singleFrameSettings.value = {
single_frame_trace_vlm_enabled: true,
@@ -449,10 +476,12 @@ export function useFaceFilter() {
single_trace_group_filter_enabled: true,
};
singleFrameSettingsModified.value = true;
autoSaveSettings();
}
function markSingleFrameSettingsModified() {
singleFrameSettingsModified.value = true;
autoSaveSettings();
}
return {
@@ -470,6 +499,7 @@ export function useFaceFilter() {
singleFrameSettingsLoading,
singleFrameSettingsError,
singleFrameSettingsModified,
currentFileUuid,
// Actions
initialize,
@@ -484,6 +514,7 @@ export function useFaceFilter() {
saveSingleFrameSettings,
resetSingleFrameSettings,
markSingleFrameSettingsModified,
cleanupAutoSave,
// API helpers (exposed for direct use)
fetchFaces,