123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <template>
- <div class="dateSelectListBox flex-col">
- <div class="Tabs1 flex-col">
- <div class="timeTabBox">
- <div class="timeTab" :class="{ active: timeType === '0' }" @click="timeChange('0')">
- {{ $t('dateSelectList.today') }}</div>
- <div class="timeTab" :class="{ active: timeType === '1' }" @click="timeChange('1')">
- {{ $t('dateSelectList.yesterday') }}</div>
- <div class="timeTab" :class="{ active: timeType === '2' }" @click="timeChange('2')">
- {{ $t('dateSelectList.thisWeek') }}</div>
- <div class="timeTab" :class="{ active: timeType === '3' }" @click="timeChange('3')">
- {{ $t('dateSelectList.thisMonth') }}</div>
- <div class="timeTab" :class="{ active: timeType === '4' }" @click="timeChange('4')">
- {{ $t('dateSelectList.other') }}
- <div class="block3 flex-col"></div>
- </div>
- <!-- 日期选择 -->
- <van-calendar color="#4d6add" v-model:show="calendarShow" type="range" :max-range="31" :show-confirm="false"
- :allow-same-day="true" :min-date="minDate" :max-date="maxDate" @confirm="calendarConfirm" />
- <!-- 选择统计类型 -->
- <van-popup v-model:show="timeTypeShow" position="bottom">
- <van-picker :title="$t('dateSelectList.timeType')" :columns="timeTypeList" @confirm="timeTypeConfirm"
- @cancel="timeTypeCancel" />
- </van-popup>
- <!-- 按月统计 -->
- <van-popup v-model:show="monthDateShow" position="bottom">
- <van-date-picker v-model="monthDate" :title="$t('dateSelectList.monthDate')" :min-date="minDate" :max-date="maxDate" @confirm="monthDateConfirm" @cancel="monthDateCancel"
- :columns-type="monthDateType" />
- </van-popup>
- <!-- 按年统计 -->
- <van-popup v-model:show="yearDateShow" position="bottom">
- <van-date-picker v-model="yearDate" :title="$t('dateSelectList.monthDate')" :min-date="minDate" :max-date="maxDate" @confirm="yearDateConfirm" @cancel="yearDateCancel"
- :columns-type="yearDateType" />
- </van-popup>
- </div>
- </div>
- </div>
- </template>
- <script>
- import { ref } from "vue";
- import dateUtil from "@/utils/dateUtil";
- import { getLoginUser } from "@/common/js/utils";
- // import { showToast } from "vant";
- import { useI18n } from 'vue-i18n';
- export default {
- name: "dateSelectList",
- components: {},
- setup(props, { emit }) {
- const minDate = new Date(2022, 0, 1);
- const maxDate = new Date();
- const { t } = useI18n();
- const user = getLoginUser();
- // 时间类型
- const timeType = ref("0");
- // 统计类型
- const chartType = ref("0");
- // 时间类型切换
- const timeChange = (data) => {
- timeType.value = data;
- // 当时时间类型切换为其他时间弹出日期控件
- // (data === "4") ? calendarShow.value = true : outputDate();
- (data === "4") ? timeTypeShow.value = true : outputDate();
- };
- let calendarDate = [];
- const calendarShow = ref(false);
- // 其他时间日期组件确认返回
- const calendarConfirm = (data) => {
- calendarShow.value = false;
- // console.log(data);
- calendarDate = data;
- outputDate();
- };
- const outputDate = async () => {
- const params = {};
- // 今日
- if (timeType.value === "0") {
- params.chartType = "day";
- params.startDate = dateUtil.formateDate(
- new Date(new Date(new Date().getTime()).setHours(0, 0, 0, 0)),
- "yyyy-MM-dd hh:mm:ss"
- );
- params.endDate = dateUtil.formateDate(
- new Date(new Date(new Date().getTime()).setHours(23, 59, 59, 59)),
- "yyyy-MM-dd hh:mm:ss"
- );
- params.dateType = "2";
- }
- // 昨日
- if (timeType.value === "1") {
- let yesterday = new Date();
- yesterday.setDate(yesterday.getDate() - 1);
- params.chartType = "day";
- params.startDate = dateUtil.formateDate(
- new Date(new Date(yesterday.getTime()).setHours(0, 0, 0, 0)),
- "yyyy-MM-dd hh:mm:ss"
- );
- params.endDate = dateUtil.formateDate(
- new Date(new Date(yesterday.getTime()).setHours(23, 59, 59, 59)),
- "yyyy-MM-dd hh:mm:ss"
- );
- params.dateType = "2";
- }
- // 本周
- if (timeType.value === "2") {
- const curr = new Date();
- const dayOfWeek = curr.getDay();
- // 如果是周日,将当前日期设置到本周的周一
- if (dayOfWeek === 0 && user.ifForeign != '1') {
- curr.setDate(curr.getDate() - 6); // 将当前日期设置为本周的周一
- }
- const firstday = new Date(
- curr.setDate(curr.getDate() - curr.getDay() + 1)
- );
- const lastday = new Date(
- curr.setDate(curr.getDate() - curr.getDay() + 7)
- );
- params.chartType = "week";
- params.startDate =
- dateUtil.formateDate(firstday, "yyyy-MM-dd") + " 00:00:00";
- params.endDate =
- dateUtil.formateDate(lastday, "yyyy-MM-dd") + " 23:59:59";
- params.dateType = "2";
- }
- // 本月
- if (timeType.value === "3") {
- const now = new Date(); //当前日期
- const nowMonth = now.getMonth(); //当前月
- const nowYear = now.getFullYear(); //当前年
- params.chartType = "month";
- params.startDate =
- dateUtil.formateDate(new Date(nowYear, nowMonth, 1), "yyyy-MM-dd") +
- " 00:00:00";
- params.endDate =
- dateUtil.formateDate(
- new Date(nowYear, nowMonth + 1, 0),
- "yyyy-MM-dd"
- ) + " 23:59:59";
- params.dateType = "0";
- }
- // 其他时间
- if (timeType.value === "4") {
- let startTime = null;
- let endTime = null;
- if (chartType.value == '1') {
- // 按日统计
- const firstday = Date.parse(calendarDate[0]);
- const lastday = Date.parse(calendarDate[1]);
- const diffDate = Math.abs(firstday - lastday);
- const totalDays = Math.floor(diffDate / (1000 * 3600 * 24));
- if (totalDays === 0) {
- params.chartType = "day";
- } else {
- params.chartType = "month";
- }
- timeTypeShow.value = false;
- startTime = calendarDate[0];
- endTime = calendarDate[1];
- params.startDate =
- dateUtil.formateDate(startTime, "yyyy-MM-dd") + " 00:00:00";
- params.endDate =
- dateUtil.formateDate(endTime, "yyyy-MM-dd") + " 23:59:59";
- params.dateType = "2";
- } else if (chartType.value == '2') {
- // 按月统计
- params.chartType = "month";
- startTime = new Date(monthDate.value[0] + '-' + monthDate.value[1] + '-01');
- endTime = new Date(monthDate.value[0], monthDate.value[1], 0);
- params.startDate =
- dateUtil.formateDate(startTime, "yyyy-MM-dd") + " 00:00:00";
- params.endDate =
- dateUtil.formateDate(endTime, "yyyy-MM-dd") + " 23:59:59";
- timeTypeShow.value = false;
- params.dateType = "0";
- } else if (chartType.value == '3') {
- // 按年统计
- params.chartType = "year";
- startTime = new Date(yearDate.value[0] + '-01-01');
- endTime = new Date(yearDate.value[0] + '-12-31');
- params.startDate =
- dateUtil.formateDate(startTime, "yyyy-MM-dd") + " 00:00:00";
- params.endDate =
- dateUtil.formateDate(endTime, "yyyy-MM-dd") + " 23:59:59";
- timeTypeShow.value = false;
- params.dateType = "1";
- }
- }
- emit('update', params);
- };
- // 统计类型
- const timeTypeShow = ref(false);
- const timeTypeList = [
- { text: t('dateSelectList.dayType'), value: "1" },
- { text: t('dateSelectList.monthType'), value: "2" },
- { text: t('dateSelectList.yearType'), value: "3" },
- ];
- const timeTypeConfirm = ({ selectedOptions }) => {
- // console.log('selectedOptions[0].text', selectedOptions[0].value);
- // 按日统计
- chartType.value = selectedOptions[0].value;
- if (selectedOptions[0].value == '1') {
- calendarShow.value = true;
- } else if (selectedOptions[0].value == '2') {
- monthDateShow.value = true;
- } else if (selectedOptions[0].value == '3') {
- yearDateShow.value = true;
- }
- }
- const timeTypeCancel = () => { timeTypeShow.value = false; }
- // 按月统计
- // 创建一个Date对象,表示当前时间
- const currentDate = new Date();
- // 获取当前时间的年份
- const currentYear = currentDate.getFullYear();
- // 获取当前时间的月份(注意,月份是从0开始的,所以要加1)
- const currentMonth = currentDate.getMonth() + 1;
- const monthDateShow = ref(false);
- const monthDate = ref([currentYear, currentMonth]);
- const monthDateType = ['year', 'month'];
- const monthDateConfirm = () => {
- monthDateShow.value = false;
- outputDate();
- }
- const monthDateCancel = () => { monthDateShow.value = false; }
- // 按年统计
- const yearDateShow = ref(false);
- const yearDateType = ['year'];
- const yearDate = ref([currentYear]);
- const yearDateConfirm = () => {
- yearDateShow.value = false;
- outputDate();
- }
- const yearDateCancel = () => { yearDateShow.value = false; }
- return {
- minDate,
- maxDate,
- timeType,
- timeChange,
- calendarShow,
- calendarConfirm,
- timeTypeShow,
- timeTypeList,
- timeTypeConfirm,
- timeTypeCancel,
- monthDateShow,
- monthDateType,
- monthDateConfirm,
- monthDateCancel,
- monthDate,
- yearDateShow,
- yearDateType,
- yearDateConfirm,
- yearDateCancel,
- yearDate
- };
- },
- };
- </script>
- <style lang="less" scoped>
- @import "@/common/style/common.less";
- @import "./index.less";
- </style>
|