<!--
 * @Author: zhp
 * @Date: 2024-04-15 10:49:13
 * @LastEditTime: 2024-07-08 13:18:08
 * @LastEditors: zhp
 * @Description:
-->
<template>
  <div style="display: flex; flex-direction: column; min-height: calc(100vh - 96px - 35px)">
    <div class="" style="height: auto;">
      <ButtonNav style="padding: 0;" :menus="['邯郸', '瑞昌']" :button-mode="true" @change="currentMenu = $event">
      </ButtonNav>
    </div>
    <div class="app-container" style="margin-top: 8px;flex-grow: 1; height: auto;">
      <el-form :model="listQuery" :inline="true" ref="dataForm" class="blueTip">
        <el-form-item label="时间维度" prop="type">
          <el-select size="small" clearable v-model="listQuery.type" placeholder="请选择" @change="handleChange">
            <el-option v-for="item in timeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item v-show="listQuery.type === 0 || listQuery.type === ''" label="时间范围" prop="reportTime">
          <el-date-picker size="small" clearable v-model="listQuery.reportTime" type="datetimerange" range-separator="至"
            start-placeholder="开始日期" value-format="yyyy-MM-dd" format="yyyy-MM-dd" @change="changeDayTime"
            end-placeholder="结束日期">
          </el-date-picker>
        </el-form-item>
        <el-form-item v-show="listQuery.type === 1" label="时间范围" prop="reportTime">
          <el-date-picker size="small" clearable v-model="listQuery.start" type="week" format="yyyy 第 WW 周"
            placeholder="选择周" style="width: 180px" @change="onValueChange" :picker-options="{'firstDayOfWeek': 1}">
          </el-date-picker>
          至
          <el-date-picker size="small" clearable v-model="listQuery.end" type="week" format="yyyy 第 WW 周"
            placeholder="选择周" style="width: 180px" @change="onValueChange" :picker-options="{'firstDayOfWeek': 1}">
          </el-date-picker>
          <!-- <span v-if="listQuery.start && listQuery.end" style="margin-left: 10px">
            {{ date1 }} 至 {{ date2 }},共 {{ weekNum }} 周
          </span> -->
        </el-form-item>
        <el-form-item v-show="listQuery.type === 2" label="时间范围" prop="reportTime">
          <el-date-picker size="small" clearable v-model="listQuery.reportTime" type="monthrange"
            value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始月份" end-placeholder="结束月份"
            @change="changeTime">
          </el-date-picker>
        </el-form-item>
        <el-form-item v-show="listQuery.type === 3" label="时间范围" prop="reportTime">
          <el-date-picker size="small" clearable v-model="listQuery.start" value-format="yyyy-MM-dd" type="year"
            placeholder="开始时间">
          </el-date-picker>
          ~
          <el-date-picker size="small" clearable v-model="listQuery.end" value-format="yyyy-MM-dd" type="year"
            placeholder="结束时间" @change="getYear">
          </el-date-picker>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" size="small" @click="getDataList">查询</el-button>
          <el-button type="primary" size="small" plain @click="handleExport">导出</el-button>
        </el-form-item>
      </el-form>
      <base-table :span-method="objectSpanMethod" :table-props="tableProps" :page="listQuery.pageNo"
        :limit="listQuery.pageSize" :table-data="tableData" :max-height="tableH">
      </base-table>
    </div>
  </div>
</template>

<script>
// import { parseTime } from '../../core/mixins/code-filter';
import { getComprehensiveDataPage, exportComprehensiveDataPage } from '@/api/report';
// import { getWorkOrderPage, exportExcel, getOverView } from '@/components/buttonNav'
// import inputTable from './inputTable.vue';
// import lineChart from './lineChart';
import moment from 'moment'
import ButtonNav from '@/components/ButtonNav'
// import basicPage from '@/mixins/basic-page'
// import AddOrUpdate from './add-or-updata';
import { factoryList, factoryArray } from "@/utils/constants";
import { publicFormatter } from "@/utils/dict";

// import FileSaver from 'file-saver'
// import * as XLSX from 'xlsx'
export default {
  components: { ButtonNav },
  // mixins: [basicPage],
  data() {
    return {
      factoryList,
      factoryArray,
      currentMenu:'邯郸',
      listQuery: {
        pageNo: 1,
        pageSize: 999,
        // size: 10,
        // current: 1,
        factory: undefined,
        // total: 0,
        type: 2,
        startDate: undefined,
        endDate: undefined,
        start: undefined,
        end: undefined,
        reportTime: []
      },
      tableH: this.tableHeight(269),
      timeList: [
        {
          value: 0,
          label: '日'
        },
        {
          value: 1,
          label: '周'
        },
        {
          value: 2,
          label: '月'
        },
        {
          value: 3,
          label: '年'
        }
      ],
      detailOrUpdateVisible: false,
      tableBtn: [
        {
          type: 'detail',
          btnName: '详情',
        },
        // {
        //     type: 'delete',
        //     btnName: '删除',
        //   },
      ].filter((v) => v),
      typeList: [
        {
          name: '芯片',
          id: 0,
        },
        {
          name: '标准组件',
          id: 1,
        },
        {
          name: 'BIPV产品',
          id: 2,
        },
      ],
      otherProps:[],
      tableData: [],
      xAxis: [],
      // currentMenu:null,
      lineData: {},
      data: {}
      // proLineList: [],
      // all: {}
    };
  },
  watch: {
    currentMenu() {
      this.getDataList()
    },
  },
  computed: {
    weekNum() {
      return Math.round((this.end - this.start) / (24 * 60 * 60 * 1000 * 7)) + 1
    },
    tableProps() {
      return [
        {
          prop: 'type',
          label: '玻璃类型',
          fixed: true,
          // filter: (val) => factoryList[val],
          // minWidth: 200,
          // showOverflowtooltip: true
        },
        {
          prop: 'item',
          label: '科目/日期',
          fixed: true,
          // filter: (val) => ['玻璃芯片', '标准组件', 'BIPV', '定制组件'][val]
        },
        {
          prop: 'unit',
          label: '单位',
          fixed: true,
          // filter: publicFormatter('workorder_status')
          // filter: (val) => ['', '芯片工单', '组件类型', 'bipv类型'][val],
        },
        ...this.otherProps
      ]
    },
  },
  // created() {
  //   const currentMonth = new Date()
  //   this.listQuery.reportTime = [moment(currentMonth).format('yyyy-MM-dd HH:mm:ss'), moment(currentMonth).format('yyyy-MM-dd HH:mm:ss')]
  //   this.changeTime()
  // },
  mounted() {
    this.tableH = this.tableHeight(269);
    // this.getOverView()
    const today = new Date()
    const sevenDaysAgo = new Date(today.getTime() - (7 * 24 * 60 * 60 * 1000))
    this.listQuery.startDate = this.getFirstDay()
    this.listQuery.endDate = this.getLastDay()
    this.listQuery.reportTime = [this.listQuery.startDate, this.listQuery.endDate]
    this.getDataList()
  },
  methods: {
    getFirstDay() {
      //当前月第一天
      var y = new Date().getFullYear(); //获取年份
      var m = new Date().getMonth() + 1; //获取月份
      var d = "01";
      m = m < 10 ? "0" + m : m; //月份补 0
      return [y, m, d].join("-");
    },
    getLastDay() {
      //当前月最后一天
      var y = new Date().getFullYear(); //获取年份
      var m = new Date().getMonth() + 1; //获取月份
      var d = new Date(y, m, 0).getDate(); //获取当月最后一日
      m = m < 10 ? "0" + m : m; //月份补 0
      d = d < 10 ? "0" + d : d; //日数补 0
      return [y, m, d].join("-");
    },
    handleChange() {
      this.listQuery.reportTime = []
      this.listQuery.end = null
      this.listQuery.start = null
      this.listQuery.startDate = null
      this.listQuery.endDate = null
    },
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      let spanOneArr = [], concatOne = 0;
      // let spanTwoArr = [], concatTwo = 0;

      this.tableData.map((item, index) => {
        // console.log(inde);
        if (index === 0) {
          spanOneArr.push(1);
        } else {
          //第一列需合并相同内容的判断条件
          if (item.type === this.tableData[index - 1].type) {
            spanOneArr[concatOne] += 1;
            spanOneArr.push(0);
          } else {
            spanOneArr.push(1);
            concatOne = index;
          };
        }
      });

      if (columnIndex === 1) {
        const _row = spanOneArr[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col
        }
      }
    },
    getYear(e) {
      if (this.listQuery.end - this.listQuery.start > 10 * 365 * 24 * 60 * 60 * 1000) {
        this.$message({
          message: '年份起止时间不能超过十年',
          type: 'warning'
        });
        this.listQuery.reportTime = []
        this.listQuery.start = undefined
        this.listQuery.end = undefined
        // console.log();
      } else {
        this.listQuery.startDate = this.listQuery.start
        this.listQuery.endDate = this.listQuery.end
      }
      if (!this.listQuery.start && !this.listQuery.end) {
        this.listQuery.startDate = undefined
        this.listQuery.endDate = undefined
      }
      // console.log(e);
    },
    onValueChange(picker, k) { // 选中近k周后触发的操作
      // console.log(this.listQuery.reportTime[0], this.listQuery.reportTime[1])
      if (this.listQuery.start && this.listQuery.end) {
        console.log(this.listQuery.reportTime)
        this.date1 = moment(this.listQuery.start.getTime() - 24 * 60 * 60 * 1000).format('YYYY-MM-DD HH:mm:ss')
        this.date2 = moment(this.listQuery.end.getTime() + 5 * 24 * 60 * 60 * 1000).format('YYYY-MM-DD HH:mm:ss')
        const numDays = (new Date(this.date2).getTime() - new Date(this.date1).getTime()) / (24 * 3600 * 1000);
        if (numDays > 168) {
          console.log(numDays)
          this.$message({
            message: '周范围不能超过24周',
            type: 'warning'
          });
        } else {
          this.listQuery.startDate = moment(this.listQuery.start.getTime() - 24 * 60 * 60 * 1000).format('YYYY-MM-DD')
          this.listQuery.endDate = moment(this.listQuery.end.getTime() + 5 * 24 * 60 * 60 * 1000).format('YYYY-MM-DD')
        }
      }
      if (!this.listQuery.start && !this.listQuery.end) {
        this.listQuery.startDate = undefined
        this.listQuery.endDate = undefined
      }
    },
    changeDayTime() {
      if (this.listQuery.reportTime) {
        // this.createStartDate = moment(new Date(this.listQuery.reportTime[0]), 'yyyy-MM-dd hh:mm:ss');
        // this.createEndDate = moment(new Date(this.listQuery.reportTime[1]), 'yyyy-MM-dd hh:mm:ss');
        console.log(this.listQuery.reportTime[1])
        const numDays = (this.listQuery.reportTime[1] - this.listQuery.reportTime[0]) / (24 * 3600 * 1000);
        if (numDays > 30) {
          this.$message({
            message: '时间范围不能超过30天',
            type: 'warning'
          });
          this.listQuery.reportTime = [];
        } else {
          this.listQuery.startDate = this.listQuery.reportTime[0]
          this.listQuery.endDate = this.listQuery.reportTime[1]
        }
      } else {
        this.listQuery.startDate = undefined
        this.listQuery.endDate = undefined
      }
    },
    changeTime(value) {
      if (this.listQuery.reportTime) {
        const numDays = this.listQuery.reportTime[1] - this.listQuery.reportTime[0];
        if (numDays > 2 * 365 * 24 * 60 * 60 * 1000) {
          this.$message({
            message: '时间范围不能超过24个月',
            type: 'warning'
          });
          this.listQuery.reportTime = [];
        } else {
          this.listQuery.startDate = this.listQuery.reportTime[0]
          this.listQuery.endDate = this.listQuery.reportTime[1]
        }
      } else {
        this.listQuery.startDate = undefined
        this.listQuery.endDate = undefined
      }
    },
    async getDataList() {
      console.log(this.listQuery.type);
      if (this.listQuery.type == null) {
        return this.$message('请选择时间维度')
      }
      if (!this.listQuery.startDate && !this.listQuery.endDate) {
        return this.$message('请选择起止时间')
      }
      this.otherProps = []
      let arr  = []
      this.currentMenu === '邯郸' ? arr.push(1) : arr.push(0)
      this.listQuery.factory = arr
      const res = await getComprehensiveDataPage(this.listQuery)
      // this.tableData = res.data.list
      let dataArr = [{
        type: '芯片',
        item: 'FTO投入',
        unit: '片'
      },
      {
        type: '芯片',
        item: '芯片产量',
        unit: '片'
        }, {
        type: '芯片',
          item: '芯片平均功率',
          unit: 'W'
        },
        {
          type: '芯片',
          item: '芯片良率',
          unit: '%'
        }, {
          type: '芯片',
          item: '芯片总功率',
          unit: 'MW'
        }, {
          type: '芯片',
          item: 'CSS稼动率',
          unit: '%'
        }, {
          type: '芯片',
          item: '芯片段OEE',
          unit: '%'
        }, {
          type: '芯片',
          item: '芯片产能利用率',
          unit: '%'
        }, {
          type: '芯片',
          item: '芯片人均产量',
          unit: '片/人'
        }, {
          type: '芯片',
          item: '芯片BOM',
          unit: '元/片'
        }, {
          type: '标准组件',
          item: '标准组件产量',
          unit: '片'
        }, {
          type: '标准组件',
          item: '标准组件平均功率',
          unit: 'W'
        }, {
          type: '标准组件',
          item: '标准组件良率',
          unit: '%'
        }, {
          type: '标准组件',
          item: '标准组件总功率',
          unit: 'MW'
        }, {
          type: '标准组件',
          item: '封装线OEE',
          unit: '%'
        },
        {
          type: '标准组件',
          item: '封装线产能利用率',
          unit: '%'
        },
        {
          type: '标准组件',
          item: '标准组件人均产量',
          unit: '片/人'
        },
        {
          type: '标准组件',
          item: '封装BOM',
          unit: '元/片'
        },
        {
          type: 'BIPV',
          item: '芯片使用量',
          unit: '%'
        },
        {
          type: 'BIPV',
          item: 'BIPV产量',
          unit: '㎡'
        },
        {
          type: 'BIPV',
          item: '芯片使用率',
          unit: '%'
        },
          {
          type: 'BIPV',
          item: '人均产量',
          unit: '㎡/人'
        },
        {
          type: 'BIPV',
          item: 'OEM及委外材料成本',
          unit: '元/片'
        },
        {
          type: 'BIPV',
          item: '内部材料成本',
          unit: '元/片'
        },
        {
          type: 'BIPV',
          item: '综合材料成本',
          unit: '元/片'
        },
      ]
      res.data.forEach((ele, index) => {
        let i = index + 1
        // this.chartMsg.xData.push(ele.titleValue)
        this.otherProps.push({
          label: ele.titleValue,
          filter: (val) => (val || val === 0 ? parseFloat(val.toFixed(2)) : "-"),
          prop: 'value' + i
        })
      })
      console.log(this.otherProps)
      res.data.forEach((item, index) => {
        let i = index + 1
        let m = 'value' + i
        // ele.productYieldDataVOList.forEach((item) => {
          dataArr[0]['' + m + ''] = item.ftoInput
        dataArr[1]['' + m + ''] = item.chipYield
        dataArr[2]['' + m + ''] = item.chipAveragePower
        dataArr[3]['' + m + ''] = item.chipYieldRate
        dataArr[4]['' + m + ''] = item.chipTotalPower
        dataArr[5]['' + m + ''] = item.chipCssMarriageRate
        dataArr[6]['' + m + ''] = item.chipOee
        dataArr[7]['' + m + ''] = item.chipCapacityUtilizationRate
        dataArr[8]['' + m + ''] = item.chipAnnualAverageProduction
        dataArr[9]['' + m + ''] = item.chipBom
        dataArr[10]['' + m + ''] = item.componentYield
        dataArr[11]['' + m + ''] = item.componentAveragePower
        dataArr[12]['' + m + ''] = item.componentYieldRate
        dataArr[13]['' + m + ''] = item.componentTotalPower
        dataArr[14]['' + m + ''] = item.componentOee
        dataArr[15]['' + m + ''] = item.componentCapacityUtilizationRate
        dataArr[16]['' + m + ''] = item.componentAnnualAverageProduction
        dataArr[17]['' + m + ''] = item.componentBom
        dataArr[18]['' + m + ''] = item.bipvChipUsage
        dataArr[19]['' + m + ''] = item.bipvProductOutput
        dataArr[20]['' + m + ''] = item.bipvChipUtilizationRate
        dataArr[21]['' + m + ''] = item.bipvAnnualAverageProduction
        dataArr[22]['' + m + ''] = item.bipvOeeMaterialCost
        dataArr[23]['' + m + ''] = item.bipvInsideMaterialCost
        dataArr[24]['' + m + ''] = item.bipvComprehensiveMaterialCost
          // dataArr[25]['' + m + ''] = item.bipvComprehensiveMaterialCost

        // })
        // ele.titleValue
        // .push({
        //   label: ele.titleValue,
        //   props: 'value' + index + 1,
        // })
      })
      console.log(dataArr);
      if (res.data.length === 0) {
        this.tableData = []
      } else {
        if (this.currentMenu != '瑞昌') {
          this.tableData = dataArr
        } else {
          this.tableData = dataArr.filter(function (item) {
            return item.type !== "BIPV"
          });
        }
      }
    },
    buttonClick(val) {
      this.listQuery.factorys = val.factory?.length > 0 ? val.factory : undefined
      // this.listQuery.orderStatus = val.orderStatus?.length > 0 ? val.orderStatus : undefined
      // this.listQuery.time = val.timeSlot?.length > 0 ? val.timeSlot : undefined
      switch (val.btnName) {
        case 'search':
          // this.listQuery.pageNo = 1;
          // this.listQuery.pageSize = 20;
          if (this.listQuery.time) {
            // this.getDataList();
          } else {
            this.$message.warning('请选择时间范围!')
          }
          break;
        case 'export':
          if (this.listQuery.time) {
            this.handleExport();
          } else {
            this.$message.warning('请选择时间范围!')
          }
          break;
        default:
          console.log(val);
      }
    },
    /** 导出按钮操作 */
    handleExport() {

      let fileName = "综合数据.xls";
      exportComprehensiveDataPage(this.listQuery)
        .then((response) => {
          this.$download.excel(response, fileName);
          this.$message.success("导出成功");
        })
        .catch(() => { });
      // this.$modal.confirm('是否确认导出工单数据?').then(() => {
      //   // 处理查询参数
      //   // let params = {...this.listQuery};
      //   // params.current = 1;
      //   // params.size = 999;
      //   this.exportLoading = true;
      //   return exportExcel({
      //     factorys: this.listQuery.factorys,
      //     orderStatus: this.listQuery.orderStatus,
      //     time: this.listQuery.time
      //   });
      // }).then(response => {
      //   this.$download.excel(response, '工单数据.xls');
      //   this.exportLoading = false;
      // }).catch(() => { })
    },
  },
};
</script>

<style scoped>
/* .blueTip { */
/* padding-bottom: 10px; */
/* } */
/* .blueTi */
.view {
  display: flex;
  justify-content: space-around;
  align-items: center;
  flex: 1;
}

.blueTip::before {
  display: inline-block;
  content: '';
  width: 4px;
  height: 18px;
  background: #0B58FF;
  border-radius: 1px;
  margin-right: 8PX;
  margin-top: 8px;
}

.app-container {
  margin: 0 0px 0;
  background-color: #fff;
  border-radius: 4px;
  padding: 16px 16px 0;
  height: calc(100vh - 134px);
  overflow: auto;
}
.noBack{
  background-color:black;
}
</style>