From ec39f6ab566f6028cdbea4aa3247f64250b5293f Mon Sep 17 00:00:00 2001 From: HenryDu8133 <813367384@qq.com> Date: Sun, 13 Sep 2026 09:19:48 +0800 Subject: [PATCH] =?UTF-8?q?perf(admin):=20=E8=B0=83=E5=B0=8F=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=BB=9A=E5=8A=A8=E6=9D=A1=E7=9A=84=E6=BB=9A=E5=8A=A8?= =?UTF-8?q?=E8=B7=A8=E5=BA=A6=EF=BC=8C=E9=81=BF=E5=85=8D=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E9=A3=9E=E5=A4=AA=E8=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 滚轮/左右箭头: 单次滚动量 200px -> 120px (约2~3个日期卡片) - 横向条初始长度: 单选 31天(-15~+15)->19天(-8~+10) / 多选 46天(0~45)->29天(0~28) - 无限扩展步长: 碰到边缘一次+7天 -> +3天(多选额外做了 Math.max(0,start) 防越界) - 回到今日重置范围 / 快捷选期外扩范围 一并调小 --- app/components/Admin/AdminDatePicker.vue | 18 +++++++++--------- app/components/Admin/AdminMultiDatePicker.vue | 14 +++++++------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/components/Admin/AdminDatePicker.vue b/app/components/Admin/AdminDatePicker.vue index 5053b75..95aa9bf 100644 --- a/app/components/Admin/AdminDatePicker.vue +++ b/app/components/Admin/AdminDatePicker.vue @@ -169,7 +169,7 @@ const emit = defineEmits(['update:modelValue', 'change']) const dateSelector = ref(null) const isFirstDateVisible = ref(false) const isLastDateVisible = ref(false) -const dateRange = ref({ start: -15, end: 15 }) +const dateRange = ref({ start: -8, end: 10 }) const showCalendar = ref(false) const pad = (n) => n.toString().padStart(2, '0') @@ -248,7 +248,7 @@ const scrollToDateElement = (behavior = 'smooth') => { const handleWheel = (event) => { event.preventDefault() if (!dateSelector.value) return - const scrollAmount = 200 + const scrollAmount = 120 const currentScroll = dateSelector.value.scrollLeft dateSelector.value.scrollTo({ left: event.deltaY > 0 ? currentScroll + scrollAmount : currentScroll - scrollAmount, @@ -258,7 +258,7 @@ const handleWheel = (event) => { const scrollDates = (direction) => { if (!dateSelector.value) return - const scrollAmount = 200 + const scrollAmount = 120 const currentScroll = dateSelector.value.scrollLeft dateSelector.value.scrollTo({ left: direction === 'right' ? currentScroll + scrollAmount : currentScroll - scrollAmount, @@ -271,14 +271,14 @@ const handleScroll = () => { const { scrollLeft, scrollWidth, clientWidth } = dateSelector.value if (scrollLeft < 50) { const oldScrollWidth = scrollWidth - dateRange.value.start -= 7 + dateRange.value.start -= 3 nextTick(() => { const newScrollWidth = dateSelector.value.scrollWidth dateSelector.value.scrollLeft += newScrollWidth - oldScrollWidth }) } if (scrollWidth - scrollLeft - clientWidth < 50) { - dateRange.value.end += 7 + dateRange.value.end += 3 } } @@ -286,8 +286,8 @@ const scrollToToday = () => { const todayStr = formatDateStr(today) if (props.modelValue !== todayStr) selectDate(todayStr) if (dateRange.value.start > 0 || dateRange.value.end < 0) { - dateRange.value.start = -15 - dateRange.value.end = 15 + dateRange.value.start = -8 + dateRange.value.end = 10 } nextTick(() => scrollToDateElement('smooth')) } @@ -312,8 +312,8 @@ const handleQuickSelect = (dateValue) => { const d = new Date(dateValue) const diffDays = Math.round((d - today) / (1000 * 60 * 60 * 24)) if (diffDays < dateRange.value.start || diffDays > dateRange.value.end) { - dateRange.value.start = diffDays - 5 - dateRange.value.end = diffDays + 10 + dateRange.value.start = diffDays - 3 + dateRange.value.end = diffDays + 5 } nextTick(() => scrollToDateElement('smooth')) }) diff --git a/app/components/Admin/AdminMultiDatePicker.vue b/app/components/Admin/AdminMultiDatePicker.vue index 0fc0140..035a711 100644 --- a/app/components/Admin/AdminMultiDatePicker.vue +++ b/app/components/Admin/AdminMultiDatePicker.vue @@ -191,7 +191,7 @@ const emit = defineEmits(['update:modelValue', 'change']) const dateSelector = ref(null) const isFirstDateVisible = ref(false) const isLastDateVisible = ref(false) -const dateRange = ref({ start: 0, end: 45 }) +const dateRange = ref({ start: 0, end: 28 }) const showCalendar = ref(false) const lastClickedDate = ref('') @@ -343,7 +343,7 @@ const applyBatchAction = (action) => { const handleWheel = (event) => { event.preventDefault() if (!dateSelector.value) return - const scrollAmount = 200 + const scrollAmount = 120 const currentScroll = dateSelector.value.scrollLeft dateSelector.value.scrollTo({ left: event.deltaY > 0 ? currentScroll + scrollAmount : currentScroll - scrollAmount, @@ -353,7 +353,7 @@ const handleWheel = (event) => { const scrollDates = (direction) => { if (!dateSelector.value) return - const scrollAmount = 200 + const scrollAmount = 120 const currentScroll = dateSelector.value.scrollLeft dateSelector.value.scrollTo({ left: direction === 'right' ? currentScroll + scrollAmount : currentScroll - scrollAmount, @@ -364,23 +364,23 @@ const scrollDates = (direction) => { const handleScroll = () => { if (!dateSelector.value) return const { scrollLeft, scrollWidth, clientWidth } = dateSelector.value - if (scrollLeft < 50) { + if (scrollLeft < 50 && dateRange.value.start > 0) { const oldScrollWidth = scrollWidth - dateRange.value.start -= 7 + dateRange.value.start = Math.max(0, dateRange.value.start - 3) nextTick(() => { const newScrollWidth = dateSelector.value.scrollWidth dateSelector.value.scrollLeft += newScrollWidth - oldScrollWidth }) } if (scrollWidth - scrollLeft - clientWidth < 50) { - dateRange.value.end += 7 + dateRange.value.end += 3 } } const scrollToToday = () => { if (dateRange.value.start > 0 || dateRange.value.end < 0) { dateRange.value.start = 0 - dateRange.value.end = 30 + dateRange.value.end = 20 } nextTick(() => { if (!dateSelector.value) return