From 7bc1907e9d5ecc3df485cc25959e96d67dfcdc14 Mon Sep 17 00:00:00 2001 From: seaHi Date: Fri, 14 Aug 2026 18:05:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=99=A8=E7=8A=B6=E6=80=81=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E4=B8=8E=E6=97=A5=E5=8E=86=E5=88=97=E8=A1=A8=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/admin/DatePicker.svelte | 33 +++++++++++++--------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/lib/components/admin/DatePicker.svelte b/src/lib/components/admin/DatePicker.svelte index 615bc00..e2cd769 100644 --- a/src/lib/components/admin/DatePicker.svelte +++ b/src/lib/components/admin/DatePicker.svelte @@ -9,22 +9,25 @@ let isOpen = $state(false); - let displayDate = $state(new Date()); + let currentMonth = $state(new Date().getMonth()); + let currentYear = $state(new Date().getFullYear()); $effect(() => { - if (value) { - const parsed = new Date(value); - if (!isNaN(parsed.getTime())) { - displayDate = parsed; + if (isOpen) { + if (value) { + const parsed = new Date(value); + if (!isNaN(parsed.getTime())) { + currentMonth = parsed.getMonth(); + currentYear = parsed.getFullYear(); + } + } else { + const now = new Date(); + currentMonth = now.getMonth(); + currentYear = now.getFullYear(); } - } else { - displayDate = new Date(); } }); - let currentMonth = $state(displayDate.getMonth()); - let currentYear = $state(displayDate.getFullYear()); - let container: HTMLDivElement; function handleOutsideClick(e: MouseEvent) { @@ -66,6 +69,9 @@ let daysInMonth = $derived(new Date(currentYear, currentMonth + 1, 0).getDate()); let firstDayOfWeek = $derived(new Date(currentYear, currentMonth, 1).getDay()); // 0 is Sunday + let emptyDays = $derived(Array.from({ length: firstDayOfWeek }).map((v, i) => i)); + let monthDays = $derived(Array.from({ length: daysInMonth }).map((v, i) => i + 1)); + const weekDays = ['日', '一', '二', '三', '四', '五', '六']; @@ -100,16 +106,15 @@
- {#each weekDays as wd} + {#each weekDays as wd (wd)}
{wd}
{/each} - {#each Array(firstDayOfWeek) as _} + {#each emptyDays as i (i)}
{/each} - {#each Array(daysInMonth) as _, i} - {@const day = i + 1} + {#each monthDays as day (day)} {@const isSelected = value === `${currentYear}-${String(currentMonth + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`}