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.
196 lines
4.9 KiB
196 lines
4.9 KiB
<template> |
|
<view> |
|
<uni-popup @change="change" ref="popup" type="center"> |
|
<view class="datebody"> |
|
<view style="text-align: end;"> |
|
<uni-icons @click="change({show:false})" type="clear" size="30"></uni-icons> |
|
</view> |
|
<view style="flex: 1;display: flex;flex-wrap: wrap;align-content: flex-start; gap:25rpx"> |
|
<view @click="seleFn(index)" v-for="(item,index) in dateOptions" |
|
:class=" seleIndex==index?'seledatebody_item': 'datebody_item'">{{item.label}}</view> |
|
<uni-datetime-picker @change='pickerClick' type="datetimerange" :start="starDate" :end="endDate" |
|
rangeSeparator="至" v-model="single"> |
|
<view @click="seleIndex=4" :class=" seleIndex==4?'seledatebody_item':'datebody_item'">自定义</view> |
|
</uni-datetime-picker> |
|
</view> |
|
</view> |
|
</uni-popup> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
export default { |
|
props: { |
|
value: { |
|
type: Boolean, |
|
default: false |
|
}, |
|
list: { |
|
type: Array, |
|
default: () => { |
|
return [{ |
|
value: '1', |
|
label: '江' |
|
}, |
|
{ |
|
value: '2', |
|
label: '湖' |
|
} |
|
] |
|
} |
|
} |
|
}, |
|
watch: { |
|
value: function(n, o) { |
|
console.log('监听', n) |
|
if (n) { |
|
this.$refs.popup.open('center') |
|
} else { |
|
this.$refs.popup.close() |
|
} |
|
} |
|
}, |
|
data() { |
|
return { |
|
single: '', |
|
endDate: '', |
|
starDate: '', |
|
seleIndex: 1, |
|
seachValue: '', |
|
dateOptions: [{ |
|
value: 0, |
|
label: '当天' |
|
}, |
|
{ |
|
value: 1, |
|
label: '昨日' |
|
}, |
|
{ |
|
value: 2, |
|
label: '上周' |
|
}, |
|
{ |
|
value: 3, |
|
label: '上月' |
|
} |
|
] |
|
} |
|
}, |
|
created() { |
|
// let date = new Date |
|
// this.starDate = new Date |
|
// this.starDate.setMonth((date.getMonth() - 1 == 0 ? 12 : date.getMonth() - 1)) |
|
// this.starDate.setDate(1) |
|
// this.starDate = |
|
// `${this.starDate.getFullYear()}-${this.starDate.getMonth()+1}-${this.starDate.getDate()} ${this.starDate.getHours()}:${this.starDate.getMinutes()}` |
|
// this.endDate = |
|
// `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}` |
|
}, |
|
methods: { |
|
pickerClick(e) { |
|
this.$emit('input', false) |
|
this.$emit('datePopupChange', e) |
|
}, |
|
handlerDate(date) { |
|
if(date instanceof String || date instanceof Number) { |
|
date = new Date(parseInt(date)) |
|
} |
|
if (!(date instanceof Date)) return {} |
|
return { |
|
y: date.getFullYear(), |
|
M: (date.getMonth() + 1 + '').padStart(2, '0'), |
|
d: (date.getDate() + '').padStart(2, '0'), |
|
} |
|
}, |
|
seleFn(index) { |
|
this.seleIndex = index |
|
let date = new Date() |
|
switch (this.seleIndex) { |
|
case 0: |
|
let dayInfo = this.handlerDate(date) |
|
this.$emit('datePopupChange', [ |
|
`${dayInfo.y}-${dayInfo.M}-${dayInfo.d} 00:00:00`, |
|
`${dayInfo.y}-${dayInfo.M}-${dayInfo.d} 23:59:59` |
|
]) |
|
break; |
|
case 1: |
|
let yesterday = new Date((date.getTime() - (86400000))); |
|
let yesterdayInfo = this.handlerDate(yesterday) |
|
this.$emit('datePopupChange', [ |
|
`${yesterdayInfo.y}-${yesterdayInfo.M}-${yesterdayInfo.d} 00:00:00`, |
|
`${yesterdayInfo.y}-${yesterdayInfo.M}-${yesterdayInfo.d} 23:59:59` |
|
]) |
|
break; |
|
case 2: |
|
let endLastWeek = new Date(date.getTime() - ((date.getDay() == 0 ? 7 : date.getDay()) * 86400000)) |
|
let starLastWeek = new Date(endLastWeek.getTime() - (6 * 86400000)) |
|
|
|
let starLastWeekInfo = this.handlerDate(starLastWeek) |
|
let endLastWeekInfo = this.handlerDate(endLastWeek) |
|
|
|
this.$emit('datePopupChange', [ |
|
`${starLastWeekInfo.y}-${starLastWeekInfo.M}-${starLastWeekInfo.d} 00:00:00`, |
|
`${endLastWeekInfo.y}-${endLastWeekInfo.M}-${endLastWeekInfo.d} 23:59:59` |
|
]) |
|
break; |
|
case 3: |
|
let LastMonth = new Date(date.getTime() - ((86400000 * date.getDate()))) |
|
let LastMonthInfo = this.handlerDate(LastMonth) |
|
this.$emit('datePopupChange', [ |
|
`${LastMonthInfo.y}-${LastMonthInfo.M}-01 00:00:00`, |
|
`${LastMonthInfo.y}-${LastMonthInfo.M}-${LastMonthInfo.d} 23:59:59` |
|
]) |
|
break; |
|
} |
|
this.$emit('input', false) |
|
}, |
|
pickerChange(e) { |
|
this.$emit('pickerChange', this.list[e.detail.value[0]]) |
|
}, |
|
change(e) { |
|
this.$emit('input', e.show) |
|
}, |
|
confirmFn() { |
|
|
|
} |
|
} |
|
} |
|
</script> |
|
|
|
<style scoped> |
|
.seledatebody_item { |
|
width: 140rpx; |
|
height: 60rpx; |
|
background: #ADCEFF; |
|
border-radius: 10px; |
|
color: #FFFFFF; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
margin-top: 18rpx; |
|
} |
|
|
|
.datebody_item { |
|
width: 140rpx; |
|
height: 60rpx; |
|
background: #FFFFFF; |
|
border-radius: 10px; |
|
color: #BBBBBB; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
margin-top: 18rpx; |
|
} |
|
|
|
.datebody { |
|
width: 520rpx; |
|
height: 500rpx; |
|
background: #F0F0F0; |
|
border-radius: 20px !important; |
|
overflow: hidden; |
|
display: flex; |
|
flex-direction: column; |
|
flex-wrap: wrap; |
|
padding: 15rpx 23rpx; |
|
} |
|
</style>
|
|
|