<!--
 * @Description: 统计报表 => 停车场模块
 * @Author: 空白格
 * @Date: 2022-08-03 11:55:13
 * @LastEditors: 空白格
 * @LastEditTime: 2022-11-16 09:38:11
 * @FilePath: \parking_operation\pages\statisticalReport\parkModel\index.vue
 * @Copyright: Copyright (c) 2016~2022 by 空白格, All Rights Reserved. 
-->
<template>
  <view class="report">
    <view class="report-header">
      <view class="report-header-left">
        <template v-if="templateKey === 'reallyReceivable'">
          <view class="tab">
            <view class="tab-item" v-for="(item, index) in tabList" :key="index" :class="{ active: tabCur === item.value }" @click="tabClick(item)">{{
              item.label
            }}</view>
          </view>
        </template>
        <template v-else>
          <uni-datetime-picker v-model="curDate" type="daterange" @change="dateChange">
            <u--text text="日期查询" color="#1767F2"></u--text>
          </uni-datetime-picker>
        </template>
      </view>
      <view class="report-header-right">{{ currentDate }}</view>
    </view>
    <view class="report-content">
      <template v-if="templateKey === 'parkingReallyIncome'">
        <ParkingReallyIncome ref="parkingReallyIncome" />
      </template>
      <template v-else-if="templateKey === 'arrearsReport'">
        <ArrearsReport ref="arrearsReport" />
      </template>
      <template v-else-if="templateKey === 'revenueReport'">
        <RevenueReport ref="revenueReport" />
      </template>
      <template v-else-if="templateKey === 'reallyReceivable'">
        <ReallyReceivable ref="reallyReceivable" />
      </template>
    </view>
    <!-- 年 -->
    <u-picker :show="yearPicker" :columns="yearList" :defaultIndex="defaultYear" @confirm="yearConfirm" @cancel="yearPicker = false" />
    <!-- 月 -->
    <u-picker :show="monthPicker" :columns="monthList" :defaultIndex="defaultMonth" @confirm="monthConfirm" @cancel="monthPicker = false" />
    <!-- 日 -->
    <u-picker :show="dayPicker" :columns="dayList" :defaultIndex="defaultDay" @confirm="dayConfirm" @cancel="dayPicker = false" />
  </view>
</template>

<script>
import ParkingReallyIncome from './components/parkingReallyIncome.vue';
import ArrearsReport from './components/arrearsReport.vue';
import RevenueReport from './components/revenueReport.vue';
import ReallyReceivable from './components/reallyReceivable.vue';
export default {
  components: {
    ParkingReallyIncome,
    ArrearsReport,
    RevenueReport,
    ReallyReceivable
  },
  data() {
    return {
      tabList: [
        {
          label: '年',
          value: 2
        },
        {
          label: '月',
          value: 1
        },
        {
          label: '日',
          value: 0
        }
      ],
      templateKey: '',
      // 日期
      curDate: [],
      tabCur: 2,
      // 参数
      params: {
        reportType: 2,
        queryDate: ''
      },
      title: '',
      currentDate: '',
      // 年
      yearPicker: false,
      yearList: this.getYearList(),
      defaultYear: [4],
      currentYear: '',
      yearObj: {},
      // 月
      monthPicker: false,
      monthList: this.getMonthList(),
      defaultMonth: [],
      currentMonth: '01',
      monthObj: {},
      // 日
      dayPicker: false,
      dayList: this.getDayList(),
      defaultDay: [],
      currentDay: '01',
      dayObj: {}
    };
  },
  watch: {
    title(val) {
      if (val) {
        if (typeof val === 'object') {
          if (val.length) {
            let startDateList = val[0].split('-'),
              endDateList = val[1].split('-');
            this.currentDate = `${Number(startDateList[0])}年${Number(startDateList[1])}月${Number(startDateList[2])}日至${Number(
              endDateList[0]
            )}年${Number(endDateList[1])}月${Number(endDateList[2])}日`;
          }
        } else {
          const dateArr = val.split('-');
          switch (this.tabCur) {
            case 0:
              this.currentDate = `${Number(dateArr[0])}年${Number(dateArr[1])}月${Number(dateArr[2])}日`;
              break;
            case 1:
              this.currentDate = `${Number(dateArr[0])}年${Number(dateArr[1])}月`;
              break;
            case 2:
              this.currentDate = `${Number(dateArr[0])}年`;
              break;
            default:
              this.currentDate = '--';
              break;
          }
        }
      }
    }
  },
  onLoad(options) {
    uni.setNavigationBarTitle({
      title: options.title || '路段报表'
    });
    this.templateKey = options.key;
  },
  onShow() {
    let today = uni.$u.timeFormat(new Date(), 'yyyy-mm-dd');
    this.curDate = [today, today];
    // if (
    //   this.templateKey === 'revenueReport' ||
    //   this.templateKey === 'reallyReceivable'
    // ) {
    //   let today = uni.$u.timeFormat(new Date(), 'yyyy-mm-dd');
    //   this.curDate = [today, today];
    // } else {
    //   this.curDate = [];
    // }
    this.$nextTick(() => {
      if (this.templateKey === 'reallyReceivable') {
        this.tabCur = 0;
        this.params.reportType = 0;
        this.currentYear = this.yearList[0][4].value;
        this.yearObj = this.yearList[0][4];
        this.currentMonth = uni.$u.timeFormat(new Date(), 'mm');
        this.currentDay = uni.$u.timeFormat(new Date(), 'dd');
        this.params.queryDate = `${this.currentYear}-${this.currentMonth}-${this.currentDay}`;
        const dateArr = this.params.queryDate.split('-');
        this.currentDate = `${Number(dateArr[0])}年${Number(dateArr[1])}月${Number(dateArr[2])}日`;
        this.$refs[this.templateKey].getData(this.params);
      } else {
        this.title = this.curDate;
        this.$refs[this.templateKey].getData(this.curDate);
      }
    });
  },
  methods: {
    getYearList() {
      const date = new Date();
      const year = date.getFullYear();
      const list = [[]];
      for (let i = year - 4; i < year + 1; i++) {
        const obj = {
          text: String(i),
          value: String(i)
        };
        list[0].push(obj);
      }
      return list;
    },
    getMonthList() {
      const date = new Date();
      const month = date.getMonth();
      const list = [[]];
      for (let i = 1; i < 13; i++) {
        const obj = {
          text: String(i),
          value: String(i)
        };
        if (i < 10) {
          obj.text = '0' + i;
          obj.value = '0' + i;
        }
        list[0].push(obj);
      }
      setTimeout(() => {
        this.defaultMonth = [0];
      }, 1000);
      return list;
    },
    getDayList() {
      const date = new Date();
      const year = date.getFullYear();
      let month = date.getMonth();
      if (this.monthObj) {
        month = parseInt(this.monthObj.value);
        month = String(month);
      }
      const day = date.getDate();
      const dayLen = new Date(year, month, 0).getDate();
      const list = [[]];
      for (let i = 1; i < dayLen + 1; i++) {
        const obj = {
          text: String(i),
          value: String(i)
        };
        if (i < 10) {
          obj.text = '0' + i;
          obj.value = '0' + i;
        }
        list[0].push(obj);
      }
      setTimeout(() => {
        this.defaultDay = [0];
      }, 1000);
      return list;
    },
    tabClick(item) {
      this.tabCur = item.value;
      switch (item.value) {
        case 2:
          this.yearPicker = true;
          break;
        case 1:
          this.monthPicker = true;
          break;
        case 0:
          this.dayPicker = true;
          break;
      }
      this.params.reportType = this.tabCur;
    },
    dateChange(e) {
      this.curDate = e;
      this.title = this.curDate;
      this.$refs[this.templateKey].getData(this.curDate);
    },
    yearConfirm(e) {
      this.defaultYear = [e.indexs[0]];
      this.currentYear = e.value[0].value;
      this.title = e.value[0].text;
      this.yearObj = e.value[0];
      this.params.queryDate = `${this.currentYear}-${this.currentMonth}-${this.currentDay}`;
      this.$refs[this.templateKey].getData(this.params);
      this.yearPicker = false;
    },
    monthConfirm(e) {
      this.defaultMonth = [e.indexs[0]];
      this.currentMonth = e.value[0].value;
      this.monthObj = e.value[0];
      this.title = `${this.yearObj.text}-${this.monthObj.text}`;
      this.params.queryDate = `${this.currentYear}-${this.currentMonth}-${this.currentDay}`;
      this.$refs[this.templateKey].getData(this.params);
      this.monthPicker = false;
      this.dayList = this.getDayList();
    },
    dayConfirm(e) {
      this.defaultDay = [e.indexs[0]];
      this.title = e.value[0].text;
      this.currentDay = e.value[0].value;
      this.dayObj = e.value[0];
      this.params.title = `${this.yearObj.text}-${this.monthObj.text}-${this.dayObj.text}`;
      this.params.queryDate = `${this.currentYear}-${this.currentMonth}-${this.currentDay}`;
      this.$refs[this.templateKey].getData(this.params);
      this.dayPicker = false;
    }
  }
};
</script>

<style lang="scss">
page {
  background-color: #1767f2;
  min-height: calc(100vh - 44px);
}
</style>

<style lang="scss" scoped>
@import './../styles/report.scss';
</style>
