From 5d98b76fd15b230ca7db0129104ddd027ef74a97 Mon Sep 17 00:00:00 2001 From: zoujing Date: Wed, 7 Jan 2026 12:12:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=97=A5=E6=9C=9F=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E7=9A=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Calender/example.vue | 62 +++++++ src/components/Calender/index.vue | 200 ++++++++++++++++------ src/components/Calender/styles/index.scss | 18 ++ src/pages/goods/index.vue | 6 +- 4 files changed, 231 insertions(+), 55 deletions(-) diff --git a/src/components/Calender/example.vue b/src/components/Calender/example.vue index d120867..55eeb9d 100644 --- a/src/components/Calender/example.vue +++ b/src/components/Calender/example.vue @@ -27,6 +27,18 @@ + + + + + 选择有价格的日期范围 + + {{ selectedRange.start }} 至 {{ selectedRange.end }} + + 请选择价格区间(仅含有价夜晚) + + + @@ -35,11 +47,13 @@ 单选日期: {{ selectedDate }} + ¥{{ selectedDatePrice }} 日期范围: {{ selectedRange.start }} 至 {{ selectedRange.end }} (共{{ rangeDays }}天) + 总价:¥{{ selectedRangeTotal }} @@ -62,6 +76,17 @@ @close="handleRangeCalendarClose" @range-select="handleRangeSelect" /> + + + @@ -72,11 +97,14 @@ import Calendar from './index.vue' // 响应式数据 const calendarVisible = ref(false) const rangeCalendarVisible = ref(false) +const priceRangeCalendarVisible = ref(false) const selectedDate = ref('') +const selectedDatePrice = ref(null) const selectedRange = ref({ start: '', end: '' }) +const selectedRangeTotal = ref(null) // 模拟价格数据 const priceData = ref({ @@ -116,6 +144,11 @@ const openRangeCalendar = () => { rangeCalendarVisible.value = true } +// 打开价格区间选择器(必须以价格为准) +const openPriceRangeCalendar = () => { + priceRangeCalendarVisible.value = true +} + // 处理单选日历关闭 const handleCalendarClose = () => { calendarVisible.value = false @@ -129,6 +162,7 @@ const handleRangeCalendarClose = () => { // 处理日期选择 const handleDateSelect = (data) => { selectedDate.value = data.date + selectedDatePrice.value = (data.price !== undefined && data.price !== null && data.price !== '-') ? data.price : null calendarVisible.value = false console.log('选择的日期:', data) } @@ -139,9 +173,37 @@ const handleRangeSelect = (data) => { start: data.startDate, end: data.endDate } + if (data.dateRange && Array.isArray(data.dateRange)) { + const total = data.dateRange.reduce((sum, d) => { + const p = d.price + return sum + (typeof p === 'number' ? p : 0) + }, 0) + selectedRangeTotal.value = total || null + } else { + selectedRangeTotal.value = null + } rangeCalendarVisible.value = false console.log('选择的日期范围:', data) } + +// 处理价格区间选择 +const handlePriceRangeSelect = (data) => { + selectedRange.value = { + start: data.startDate, + end: data.endDate + } + if (data.dateRange && Array.isArray(data.dateRange)) { + const total = data.dateRange.reduce((sum, d) => { + const p = d.price + return sum + (typeof p === 'number' ? p : 0) + }, 0) + selectedRangeTotal.value = total || null + } else { + selectedRangeTotal.value = null + } + priceRangeCalendarVisible.value = false + console.log('价格区间选择:', data) +}