From 470250549bdf86c1aaa42e548576668d8e29ee2a Mon Sep 17 00:00:00 2001 From: Julian Freeman Date: Sun, 22 Mar 2026 18:42:09 -0400 Subject: [PATCH] auto close seletor --- src/App.vue | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/App.vue b/src/App.vue index e0af868..a065ad8 100644 --- a/src/App.vue +++ b/src/App.vue @@ -60,11 +60,32 @@ let store: any = null; let captureUnlisten: any = null; // --- Custom Picker States --- +const calendarRef = ref(null); +const startTimePickerRef = ref(null); +const endTimePickerRef = ref(null); +const tagSelectRef = ref(null); + const isCalendarOpen = ref(false); const calendarMonth = ref(new Date()); const isStartTimeOpen = ref(false); const isEndTimeOpen = ref(false); +const handleClickOutside = (event: MouseEvent) => { + const target = event.target as HTMLElement; + if (isCalendarOpen.value && calendarRef.value && !calendarRef.value.contains(target)) { + isCalendarOpen.value = false; + } + if (isStartTimeOpen.value && startTimePickerRef.value && !startTimePickerRef.value.contains(target)) { + isStartTimeOpen.value = false; + } + if (isEndTimeOpen.value && endTimePickerRef.value && !endTimePickerRef.value.contains(target)) { + isEndTimeOpen.value = false; + } + if (isTagSelectOpen.value && tagSelectRef.value && !tagSelectRef.value.contains(target)) { + isTagSelectOpen.value = false; + } +}; + const openStartTimePicker = async () => { isStartTimeOpen.value = !isStartTimeOpen.value; isEndTimeOpen.value = false; @@ -105,6 +126,7 @@ const selectCalendarDate = (date: Date) => { // --- Logic --- onMounted(async () => { + window.addEventListener('mousedown', handleClickOutside); store = await load("config.json"); const path = await store.get("savePath"); const dPath = await store.get("dbPath"); @@ -125,7 +147,10 @@ onMounted(async () => { captureUnlisten = await listen("refresh-timeline", () => { loadTimeline(); }); }); -onUnmounted(() => { if (captureUnlisten) captureUnlisten(); }); +onUnmounted(() => { + window.removeEventListener('mousedown', handleClickOutside); + if (captureUnlisten) captureUnlisten(); +}); const selectFolder = async () => { const s = await open({ directory: true }); if (s) savePath.value = s as string; }; const selectDBFile = async () => { const s = await open({ filters: [{ name: "SQLite", extensions: ["db"] }] }); if (s) dbPath.value = s as string; }; @@ -355,7 +380,7 @@ const isTagSelectOpen = ref(false);

历史活动

-
+
-
+
-
+