<template>
|
|
<view class="calendar">
|
|
<uv-calendar
|
|
ref="calendar"
|
|
title="出行日期"
|
|
mode="single"
|
|
rowHeight="110"
|
|
:defaultDate="defaultDate"
|
|
@confirm="confirm"
|
|
></uv-calendar>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
props: {
|
|
value: {
|
|
type: String,
|
|
default: null
|
|
},
|
|
options: {
|
|
type: Array,
|
|
default() {
|
|
return []
|
|
}
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
defaultDate: null,
|
|
}
|
|
},
|
|
computed: {
|
|
selected: {
|
|
set(val) {
|
|
this.$emit('input', val)
|
|
},
|
|
get() {
|
|
return this.value
|
|
}
|
|
},
|
|
startDateList() {
|
|
return this.options.map(item => {
|
|
const { startDate } = item
|
|
|
|
return this.$dayjs(`2025/${startDate}`).format('YYYY-MM-DD')
|
|
})
|
|
},
|
|
},
|
|
onReady() {
|
|
this.$refs.calendar.setFormatter(this.formatter);
|
|
},
|
|
methods: {
|
|
formatter(day) {
|
|
const dateStr = this.$dayjs(day.date).format('YYYY-MM-DD')
|
|
|
|
const index = this.startDateList.findIndex(startDate => startDate === dateStr)
|
|
|
|
if (index === -1) {
|
|
day.disabled = true
|
|
|
|
return day;
|
|
}
|
|
|
|
const { startDate, endDate, currentPrice } = this.options[index]
|
|
|
|
// day.topInfo = `${startDate}-${endDate}`
|
|
day.topInfo = `~${endDate}`
|
|
day.bottomInfo = `¥${currentPrice}`
|
|
return day
|
|
},
|
|
open() {
|
|
if (this.selected) {
|
|
const index = this.options.findIndex(option => option.id === this.selected)
|
|
this.defaultDate = this.startDateList[index]
|
|
}
|
|
|
|
this.$refs.calendar.open();
|
|
},
|
|
confirm(e) {
|
|
const dateStr = e[0]
|
|
const index = this.startDateList.findIndex(startDate => startDate === dateStr)
|
|
|
|
this.selected = this.options[index].id
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
</style>
|