From 98aeda3a463795f15e9a8b86c785d32fb7c57fa6 Mon Sep 17 00:00:00 2001 From: Julian Freeman Date: Sun, 22 Mar 2026 19:40:00 -0400 Subject: [PATCH] fix date ui --- src-tauri/src/db.rs | 1 - src/App.vue | 94 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 89 insertions(+), 6 deletions(-) diff --git a/src-tauri/src/db.rs b/src-tauri/src/db.rs index 6c50eda..b4e7c0b 100644 --- a/src-tauri/src/db.rs +++ b/src-tauri/src/db.rs @@ -1,6 +1,5 @@ use rusqlite::{params, Connection}; use serde::{Deserialize, Serialize}; -use std::path::PathBuf; #[derive(Serialize, Deserialize, Clone)] pub struct Tag { diff --git a/src/App.vue b/src/App.vue index b6927b5..e084dea 100644 --- a/src/App.vue +++ b/src/App.vue @@ -64,11 +64,15 @@ const calendarRef = ref(null); const startTimePickerRef = ref(null); const endTimePickerRef = ref(null); const tagSelectRef = ref(null); +const exportStartCalendarRef = ref(null); +const exportEndCalendarRef = ref(null); const isCalendarOpen = ref(false); const calendarMonth = ref(new Date()); const isStartTimeOpen = ref(false); const isEndTimeOpen = ref(false); +const isExportStartCalendarOpen = ref(false); +const isExportEndCalendarOpen = ref(false); const handleClickOutside = (event: MouseEvent) => { const target = event.target as HTMLElement; @@ -84,6 +88,12 @@ const handleClickOutside = (event: MouseEvent) => { if (isTagSelectOpen.value && tagSelectRef.value && !tagSelectRef.value.contains(target)) { isTagSelectOpen.value = false; } + if (isExportStartCalendarOpen.value && exportStartCalendarRef.value && !exportStartCalendarRef.value.contains(target)) { + isExportStartCalendarOpen.value = false; + } + if (isExportEndCalendarOpen.value && exportEndCalendarRef.value && !exportEndCalendarRef.value.contains(target)) { + isExportEndCalendarOpen.value = false; + } }; const openStartTimePicker = async () => { @@ -349,9 +359,47 @@ const isTagSelectOpen = ref(false); const isExportModalOpen = ref(false); const exportStartDate = ref(new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toLocaleDateString('sv')); const exportEndDate = ref(currentDate.value); +const exportStartMonth = ref(new Date(exportStartDate.value)); +const exportEndMonth = ref(new Date(exportEndDate.value)); + +const exportStartCalendarDays = computed(() => { + const y = exportStartMonth.value.getFullYear(); + const m = exportStartMonth.value.getMonth(); + const firstDay = new Date(y, m, 1).getDay(); + const daysInMonth = new Date(y, m + 1, 0).getDate(); + const days = []; + const padding = (firstDay + 6) % 7; + for (let i = 0; i < padding; i++) days.push(null); + for (let i = 1; i <= daysInMonth; i++) days.push(new Date(y, m, i)); + return days; +}); + +const exportEndCalendarDays = computed(() => { + const y = exportEndMonth.value.getFullYear(); + const m = exportEndMonth.value.getMonth(); + const firstDay = new Date(y, m, 1).getDay(); + const daysInMonth = new Date(y, m + 1, 0).getDate(); + const days = []; + const padding = (firstDay + 6) % 7; + for (let i = 0; i < padding; i++) days.push(null); + for (let i = 1; i <= daysInMonth; i++) days.push(new Date(y, m, i)); + return days; +}); + +const selectExportStartDate = (date: Date) => { + exportStartDate.value = date.toLocaleDateString('sv'); + isExportStartCalendarOpen.value = false; +}; + +const selectExportEndDate = (date: Date) => { + exportEndDate.value = date.toLocaleDateString('sv'); + isExportEndCalendarOpen.value = false; +}; const openExportModal = () => { exportEndDate.value = currentDate.value; + exportStartMonth.value = new Date(exportStartDate.value); + exportEndMonth.value = new Date(exportEndDate.value); isExportModalOpen.value = true; }; @@ -600,16 +648,52 @@ const handleExport = async () => {
-
+

导出事件

-
- - - +
+
+ +
+
+ + {{ exportStartMonth.getFullYear() }}年 {{ exportStartMonth.getMonth()+1 }}月 + +
+
{{d}}
+
+
+ +
+
+
+
+ +
+ +
+
+ + {{ exportEndMonth.getFullYear() }}年 {{ exportEndMonth.getMonth()+1 }}月 + +
+
{{d}}
+
+
+ +
+
+
+