diff --git a/src/components/form/datePicker/index.vue b/src/components/form/datePicker/index.vue index fdf148e..fa9cda1 100644 --- a/src/components/form/datePicker/index.vue +++ b/src/components/form/datePicker/index.vue @@ -25,6 +25,8 @@ import { DArrowLeft, VideoPause, DArrowRight } from '@element-plus/icons-vue' import { ref, onMounted } from 'vue' const interval = ref(3) +const timeFlag = ref(1) +const count = ref(0) const disabledPicker = ref(true) const timeValue = ref() const backDisabled = ref(false) @@ -70,8 +72,12 @@ onMounted(() => { }) // 选择时间范围 const timeChange = (e: number) => { + backDisabled.value = false + preDisabled.value = false + count.value = 0 if (e == 1) { disabledPicker.value = true + timeValue.value = [setTime(1), setTime()] } else if (e == 2) { disabledPicker.value = true @@ -84,14 +90,298 @@ const timeChange = (e: number) => { timeValue.value = [setTime(0, 7), setTime()] } else if (e == 5) { disabledPicker.value = false + backDisabled.value = true + preDisabled.value = true + timeValue.value = [setTime(), setTime()] + } + if (e == 1 || e == 2) { + timeFlag.value = 0 + } else { + timeFlag.value = 1 } } -// 上一个 -const preClick = () => {} + // 当前 -const nowTime = () => {} +const nowTime = () => { + timeChange(interval.value) +} +// 上一个 +const preClick = () => { + let startTime = timeValue.value[0] + let endTime = timeValue.value[1] + let year = parseInt(startTime.substring(0, 4)) + let month = parseInt(startTime.substring(5, 7)) + let date = parseInt(startTime.substring(8, 10)) + //按月 + if (interval.value == 3) { + // 换年份 + if (month == 1) { + year = year - 1 + startTime = year + '-12-01' + endTime = year + '-12-31' + } else if (month <= 10) { + month = month - 1 + startTime = year + '-0' + month + '-01' + let day = getDays(year, month) + endTime = year + '-0' + month + '-' + day + } else { + month = month - 1 + startTime = year + '-' + month + '-01' + let day = getDays(year, month) + endTime = year + '-' + month + '-' + day + } + //按周 + } else if (interval.value == 4) { + //根据开始时间推 + let start = new Date(year, month - 1, date) + start.setDate(start.getDate() - 7) + startTime = formatTime(start) + var end = new Date(start) + end.setDate(start.getDate() + 6) + endTime = formatTime(end) + //按季度 + } else if (interval.value == 2) { + // 换年份 + if (month == 1) { + year = year - 1 + startTime = year + '-10-01' + endTime = year + '-12-31' + } else { + // 还是本年 + month = month - 3 + startTime = year + '-0' + month + '-01' + month = month + 2 + var day = getDays(year, month) + endTime = year + '-0' + month + '-' + day + } + //自定义 + } else if (interval.value == 1) { + year = year - 1 + startTime = year + '-01-01' + endTime = year + '-12-31' + } + timeValue.value = [startTime, endTime] + + // 判断向后键的状态 + // var temp = NowgetEndTime() + // timeStatus(temp, endTime) +} //下一个 -const next = () => {} +const next = () => { + //向后 + + let startTime = timeValue.value[0] + let endTime = timeValue.value[1] + let year = parseInt(startTime.substring(0, 4)) + let month = parseInt(startTime.substring(5, 7)) + let date = parseInt(startTime.substring(8, 10)) + var now = new Date() + // 获取当前年份 + var presentY = now.getFullYear() + // 获取当前月份 + var presentM = now.getMonth() + 1 + // 获取当前日期 + var presentD = now.getDate() + if (interval == 3) { + if (month == 12) { + year = year + 1 + // 年份进位后,大于当前的年份,是不科学的 + if (presentY < year) { + startTime = presentY + '-12-01' + if (presentD < 10) { + endTime = presentY + '-12' + '-0' + presentD + } else { + endTime = presentY + '-12' + '-' + presentD + } + // 年份进位后,等于当前的年份 + } else if (presentY == year) { + startTime = year + '-01-01' + if (presentM > 1) { + endTime = year + '-01-31' + } else { + if (presentD < 10) { + endTime = year + '-01' + '-0' + presentD + } else { + endTime = year + '-01' + '-' + presentD + } + } + // 年份进位后,依旧小于当前的年份 + } else { + startTime = year + '-01-01' + endTime = year + '-01-31' + } + } else { + month = month + 1 + // 年份等于当前年份 + if (presentY == year) { + // 月份超过当前月份,是不科学的 + if (month >= presentM) { + if (presentM < 10) { + startTime = year + '-0' + presentM + '-01' + if (presentD < 10) { + endTime = year + '-0' + presentM + '-0' + presentD + } else { + endTime = year + '-0' + presentM + '-' + presentD + } + } else { + startTime = year + '-' + presentM + '-01' + if (presentD < 10) { + endTime = year + '-' + presentM + '-0' + presentD + } else { + endTime = year + '-' + presentM + '-' + presentD + } + } + } else { + if (month < 10) { + startTime = year + '-0' + month + '-01' + var day = getDays(year, month) + endTime = year + '-0' + month + '-' + day + } else { + startTime = year + '-' + month + '-01' + var day = getDays(year, month) + endTime = year + '-' + month + '-' + day + } + } + // 年份小于当前的年份 + } else { + if (month < 10) { + startTime = year + '-0' + month + '-01' + var day = getDays(year, month) + endTime = year + '-0' + month + '-' + day + } else { + startTime = year + '-' + month + '-01' + var day = getDays(year, month) + endTime = year + '-' + month + '-' + day + } + } + } + } else if (interval == 2) { + // 前进需要年份进位 + if (month == 10) { + year = year + 1 + // 年份进位后大于当前年份是不科学的 + if (year > presentY) { + startTime = presentY + '-10-01' + if (presentD < 10) { + endTime = year + '-' + presentM + '-0' + presentD + } else { + endTime = year + '-' + presentM + '-' + presentD + } + } else if (year == presentY) { + startTime = year + '-01-01' + // 当前月份大约3月份 + if (presentM > 3) { + endTime = year + '-03-31' + } else { + // 当前月份也在第一季度里 + if (presentD < 10) { + endTime = year + '-0' + presentM + '-0' + presentD + } else { + endTime = year + '-0' + presentM + '-' + presentD + } + } + } else { + startTime = year + '-01-01' + endTime = year + '-03-31' + } + } else { + month = month + 3 + // 季度进位后,超过当前月份是不科学的 + if (year == presentY) { + if (month >= presentM) { + // 当季度进位后大于当前月,以当前月的时间显示季度 + if (presentM > 0 && presentM < 4) { + // 第一季度 + startTime = year + '-01-01' + if (presentD < 10) { + endTime = year + '-0' + presentM + '-0' + presentD + } else { + endTime = year + '-0' + presentM + '-' + presentD + } + } else if (presentM > 3 && presentM < 7) { + // 第二季度 + startTime = year + '-04-01' + if (presentD < 10) { + endTime = year + '-0' + presentM + '-0' + presentD + } else { + endTime = year + '-0' + presentM + '-' + presentD + } + } else if (presentM > 6 && presentM < 10) { + // 第三季度 + startTime = year + '-07-01' + if (presentD < 10) { + endTime = year + '-0' + presentM + '-0' + presentD + } else { + endTime = year + '-0' + presentM + '-' + presentD + } + } else { + // 第四季度 + startTime = year + '-10-01' + if (presentD < 10) { + endTime = year + '-' + presentM + '-0' + presentD + } else { + endTime = year + '-' + presentM + '-' + presentD + } + } + } else { + if (month == 10) { + startTime = year + '-' + month + '-01' + } else { + startTime = year + '-0' + month + '-01' + } + month = month + 2 + if (month >= presentM) { + endTime = NowgetEndTime() + } else { + var day = getDays(year, month) + endTime = year + '-' + month + '-' + day + } + } + } else { + if (month == 10) { + startTime = year + '-' + month + '-01' + month = month + 2 + var day = getDays(year, month) + endTime = year + '-' + month + '-' + day + } else { + startTime = year + '-0' + month + '-01' + month = month + 2 + var day = getDays(year, month) + endTime = year + '-0' + month + '-' + day + } + } + } + } else if (interval == 5) { + } else if (interval == 4) { + //根据开始时间推 + var start = new Date(year, month - 1, date) + start.setDate(start.getDate() + 7) + startTime = formatTime(start) + var end = new Date(start) + end.setDate(start.getDate() + 6) + endTime = formatTime(end) + } else { + year = year + 1 + // 年份进位后大于当前年份,是不科学的 + if (year >= presentY) { + startTime = presentY + '-01-01' + if (presentM < 10) { + if (presentD < 10) { + endTime = presentY + '-0' + presentM + '-0' + presentD + } else { + endTime = presentY + '-0' + presentM + '-' + presentD + } + } else { + endTime = presentY + '-' + presentM + '-' + presentD + } + } else { + startTime = year + '-01-01' + endTime = year + '-12-31' + } + } + + timeValue.value = [startTime, endTime] +} const setTime = (flag = 0, e = 0) => { let dd = window.XEUtils.toDateString(new Date().getTime() - e * 3600 * 1000 * 24, 'dd') @@ -101,12 +391,11 @@ const setTime = (flag = 0, e = 0) => { } else { data = window.XEUtils.toDateString(new Date().getTime() - e * 3600 * 1000 * 24, 'yyyy-MM-dd') } - console.log('🚀 ~ file: index.vue:98 ~ setTime ~ data:', dd < 4, data) if (flag == 1) { data = data.slice(0, 5) + '01-01' } else if (flag == 2) { - let quarter = data.slice(5, 7) - 0 + let quarter = parseInt(data.slice(5, 7)) if (0 < quarter && quarter <= 3) { data = data.slice(0, 5) + '01-01' } else if (3 < quarter && quarter <= 6) { @@ -124,7 +413,41 @@ const setTime = (flag = 0, e = 0) => { return data } -defineExpose({ timeValue }) +// 获取月份的天数 +const getDays = (year: any, month: any) => { + let max = new Date(year, month, 0).getDate() + return max +} +// 时间格式化 +const formatTime = (time: any) => { + return ( + time.getFullYear() + + '-' + + (time.getMonth() + 1 < 10 ? '0' : '') + + (time.getMonth() + 1) + + '-' + + (time.getDate() < 10 ? '0' : '') + + time.getDate() + ) +} +const NowgetEndTime = () => { + let now = new Date() + let sep = '-' + let year = now.getFullYear() + let month: any = now.getMonth() + 1 + if (month < 10) { + month = '0' + month + } + let date: any = now.getDate() + if (date < 10) { + date = '0' + date + } + + // 拼接当前的日期 + let endTime = year + sep + month + sep + date + return endTime +} +defineExpose({ timeValue, interval, timeFlag })