You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
3.1 KiB

<template>
<view class="">
<view class="date-content">
<view class="date-item">
<view class="date-item-label">
开始时间
</view>
<view class="date-item-value" @click="handleOpen('startShow')">
{{startDate || '请选择'}}
</view>
<u-icon v-show="startDate" @click="handleClear('start')" size="16" name="close-circle"></u-icon>
</view>
<view class="date-item">
<view class="date-item-label">
结束时间
</view>
<view class="date-item-value" @click="handleOpen('endShow')">
{{endDate || '请选择'}}
</view>
<u-icon v-show="endDate" @click="handleClear('end')" size="16" name="close-circle"></u-icon>
</view>
</view>
<u-datetime-picker :show="startShow" title="开始时间" :value="start" mode="date" @cancel="startShow = false"
@confirm="changeDate.call(this,$event, 'startDate')" :max-date="getCurTimeForX()"></u-datetime-picker>
<u-datetime-picker :show="endShow" title="结束时间" :value="end" mode="date" @cancel="endShow = false"
@confirm="changeDate.call(this,$event, 'endDate')" :max-date="getCurTimeForX()"></u-datetime-picker>
</view>
</template>
<script>
export default {
name: 'date-search',
props: {
startDate: {
type: String,
default: ''
},
endDate: {
type: String,
default: ''
}
},
computed: {
start: {
get() {
return this.startDate || this.formatTime(this.$moment().subtract(7, 'd'))
},
set(value) {
this.$emit('update:startDate', value)
}
},
end: {
get() {
return this.endDate || this.formatTime()
},
set(value) {
this.$emit('update:endDate', value)
}
}
},
data() {
return {
startShow: false,
endShow: false
}
},
methods: {
getCurTimeForX() {
return (new Date()).getTime()
},
formatTime(time) {
return this.$moment(time).format('YYYY-MM-DD')
},
handleOpen(key) {
this.$nextTick(() => {
this[key] = true
})
},
handleClear(key) {
this[key] = ''
this.$nextTick(() => {
if (!this.endDate && !this.startDate) {
this.$emit('handleSearch')
}
})
},
changeDate(dateEvent, key) {
if (key === 'startDate') {
if (this.endDate && this.endDate < this.formatTime(dateEvent.value)) {
this.$.toast('开始时间不能大于结束时间')
return
} else {
this.start = this.formatTime(dateEvent.value)
}
} else {
if (this.startDate && this.startDate > this.formatTime(dateEvent.value)) {
this.$.toast('结束时间不能小于开始时间')
return
} else {
this.end = this.formatTime(dateEvent.value)
}
}
this.startShow = false
this.endShow = false
this.$nextTick(() => {
if (this.endDate && this.startDate) {
this.$emit('handleSearch')
}
})
},
}
}
</script>
<style lang="scss">
.date-content {
display: flex;
align-items: center;
padding: 10px 10px;
justify-content: space-between;
.date-item {
display: flex;
align-items: center;
&-label {
margin-right: 3px;
}
&-value {
width: 185rpx;
text-align: right;
margin-right: 2px;
}
}
}
</style>