<template>
<div class="monthCard">
<el-date-picker
:clearable="false"
v-model="monthValue"
type="month"
placeholder="选择月"
@change="handleChangeMonth($event)">
</el-date-picker>
</div>
<div class="weekCard">
<el-date-picker
:clearable="false"
v-model="dateValue"
type="week"
:format="bill_date.date"
:picker-options="onPicker"
placeholder="选择周"
@change="showDate($event)">
</el-date-picker>
</div>
<div class="customCard">
<el-date-picker
:clearable="false"
v-model="pickDate"
type="daterange"
value-format="yyyy-MM-dd"
align="right"
unlink-panels
range-separator="至"
:picker-options="pickerBeginDateBefore"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change='selectData'>
</el-date-picker>
</div>
</template>
<script>
import dayjs from 'dayjs';
import format_date from "@/utils/date_format.js";
export default {
name: "ThreeClearHome",
data: function() {
return {
pickDate: ['2023-08-01','2023-09-05'],
timeOptionRange: null,
pickerBeginDateBefore: {
"firstDayOfWeek": 1,
onPick: ({maxDate, minDate}) => {
if (minDate && !maxDate) {
this.timeOptionRange = minDate;
}
if (maxDate) {
this.timeOptionRange = null;
}
},
disabledDate: (time) => {
let secondNum = 6 * 30 * 24 * 60 * 60 * 1000;
let timeOptionRange = this.timeOptionRange;
if (timeOptionRange) {
return time.getTime() > timeOptionRange.getTime() + secondNum || time.getTime() < timeOptionRange.getTime() - secondNum;
}
}
},
dateValue: '',
weekStartDate: '',
weekEndDate: '',
onPicker: {
"firstDayOfWeek": 1,
},
bill_date: {},
monthValue: '',
startDate: '',
endDate: '',
};
},
props: {
},
computed: {
},
components: {
},
watch: {
},
methods: {
showDate() {
let vm = this;
let startTime = dayjs(vm.dateValue).subtract(1, 'day').$d;
let endTime = dayjs(startTime).add(6, 'day').$d;
vm.weekStartDate = format_date("yyyy-MM-dd", new Date(startTime));
vm.weekEndDate = format_date("yyyy-MM-dd", new Date(endTime));
vm.bill_date = Object.assign({}, vm.bill_date, {'date': vm.weekStartDate + ' 至 ' + vm.weekEndDate});
},
getlastWeek() {
let vm = this;
const today = new Date();
const d = today.getDay();
let w = 0;
if (d === 0) {
w = 7;
} else {
w = d;
}
const endTime = today.setDate(today.getDate() - w);
const startTime = dayjs(endTime).subtract(6, 'day').$d;
vm.weekEndDate = format_date("yyyy-MM-dd", new Date(endTime));
vm.weekStartDate = format_date("yyyy-MM-dd", new Date(startTime));
vm.dateValue = format_date("yyyy-MM-dd", new Date(startTime));
vm.bill_date = Object.assign({}, vm.bill_date, {'date': vm.weekStartDate + ' 至 ' + vm.weekEndDate});
},
selectData($event) {
let vm = this;
if ($event===null) {
vm.timeOptionRange = null;
vm.pickerBeginDateBefore={
disabledDate: (time) => {
let secondNum = 6 * 30 * 24 * 60 * 60 * 1000;
let timeOptionRange = vm.timeOptionRange;
if (timeOptionRange) {
return time.getTime() > timeOptionRange.getTime() + secondNum || time.getTime() < timeOptionRange.getTime() - secondNum;
}
}
};
} else {
vm.customStartDate = $event[0];
vm.customEndDate = $event[1];
}
},
handleChangeMonth($event) {
let vm = this;
let date = new Date($event);
let month = (date.getMonth() + 1).toString().padStart(2, '0');
let year = date.getFullYear();
let startTime = year + '-' + month + '-' + '01';
let day = new Date(year, month, 0);
let endTime = year + '-' + month + '-' + day.getDate();
vm.monthStartDate = startTime;
vm.monthEndDate = endTime;
},
getlastMonth() {
let now = new Date();
let nowDate = now.getDate();
let lastMonth = new Date(now.getTime());
lastMonth.setMonth(lastMonth.getMonth());
lastMonth.setDate(0);
let daysOflastMonth = lastMonth.getDate();
lastMonth.setDate(nowDate > daysOflastMonth ? daysOflastMonth : nowDate);
return lastMonth;
},
},
created() {
},
mounted: function() {
let vm = this;
vm.monthValue = format_date("yyyy-MM", new Date(vm.getlastMonth()));
vm.handleChangeMonth(vm.monthValue);
vm.getlastWeek();
}
};
</script>


