feat: 日期选择的调整

This commit is contained in:
2026-01-07 12:12:01 +08:00
parent 9c658e9f9f
commit 5d98b76fd1
4 changed files with 231 additions and 55 deletions

View File

@@ -27,6 +27,18 @@
</view>
<uni-icons type="calendar" size="20" color="#1890ff"></uni-icons>
</view>
<!-- 价格区间选择示例 -->
<view class="date-input" @tap="openPriceRangeCalendar">
<view class="input-content">
<text class="input-label">选择有价格的日期范围</text>
<text class="input-value" v-if="selectedRange.start && selectedRange.end">
{{ selectedRange.start }} {{ selectedRange.end }}
</text>
<text class="input-placeholder" v-else>请选择价格区间仅含有价夜晚</text>
</view>
<uni-icons type="calendar" size="20" color="#1890ff"></uni-icons>
</view>
</view>
<!-- 结果显示区域 -->
@@ -35,11 +47,13 @@
<view class="result-item" v-if="selectedDate">
<text class="result-label">单选日期</text>
<text class="result-value">{{ selectedDate }}</text>
<text class="result-value" v-if="selectedDatePrice"> ¥{{ selectedDatePrice }} </text>
</view>
<view class="result-item" v-if="selectedRange.start && selectedRange.end">
<text class="result-label">日期范围</text>
<text class="result-value">{{ selectedRange.start }} {{ selectedRange.end }}</text>
<text class="result-days">{{ rangeDays }}</text>
<text class="result-value" v-if="selectedRangeTotal"> 总价¥{{ selectedRangeTotal }} </text>
</view>
</view>
@@ -62,6 +76,17 @@
@close="handleRangeCalendarClose"
@range-select="handleRangeSelect"
/>
<!-- 日历组件 - 价格区间选择模式必须有价格的夜晚 -->
<Calendar
:visible="priceRangeCalendarVisible"
:price-data="priceData"
mode="range"
:range-require-price="true"
:default-value="[selectedRange.start, selectedRange.end]"
@close="handleRangeCalendarClose"
@range-select="handlePriceRangeSelect"
/>
</view>
</template>
@@ -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)
}
</script>
<style lang="scss" scoped>