<template>
  <div class="app-container">
    <el-form
      :model="queryParams"
      ref="queryForm"
      size="small"
      :inline="true"
      v-show="showSearch"
      label-width="100px"
      class="edit-el-form"
    >
      <el-form-item label="订单编码" prop="orderNo">
        <el-input
          v-model="queryParams.orderNo"
          placeholder="请输入订单编码"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <!--
			<el-form-item label="批次编码" prop="incomeBatchNo">
				<el-input
					v-model="queryParams.incomeBatchNo"
					placeholder="请选择批次编码"
					clearable
					@keyup.enter.native="handleQuery"
				/>
			</el-form-item>-->
      <el-form-item label="产品编号" prop="materialCode">
        <el-input
          v-model="queryParams.materialCode"
          placeholder="请输入产品编号"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="检验类型" prop="typeCode">
        <el-select
          v-model="queryParams.typeCode"
          clearable
          placeholder="请选择检验类型"
          @change="getCheckTypeList"
        >
          <el-option
            v-for="dict in dict.type.check_type"
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="检验节点" prop="checkType">
        <el-select
          v-model="queryParams.checkType"
          clearable
          placeholder="请选择检验节点"
          @change="getProjectListFunc"
        >
          <el-option
            v-for="dict in checkTypeList"
            :key="dict.checkType"
            :label="dict.checkName"
            :value="dict.checkType"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="定量检测项" prop="projectNoArray">
        <el-select
          v-model="queryParams.projectNoArray"
          multiple
          collapse-tags
          placeholder="请选择"
        >
          <el-option
            v-for="item in projectNoOptions"
            :key="item.recordId"
            :label="item.ruleName"
            :value="item.recordId"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="统计单位" prop="supplierCode">
        <el-select
          v-model="queryParams.supplierCode"
          clearable
          placeholder="请选择统计单位"
          filterable
          clearable
        >
          <el-option
            v-for="dict in workCenterList"
            :key="dict.supplierCode"
            :label="dict.supplierName"
            :value="dict.supplierCode"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="生产时间" prop="incomeTimeArray">
        <el-date-picker
          v-model="queryParams.incomeTimeArray"
          format="yyyy-MM-dd"
          type="datetimerange"
          range-separator="至"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
        >
        </el-date-picker>
      </el-form-item>
      <el-form-item>
        <el-button
          type="primary"
          icon="el-icon-search"
          size="mini"
          @click="handleQuery"
          >搜索</el-button
        >
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
          >重置</el-button
        >
      </el-form-item>
    </el-form>

    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          >导出</el-button
        >
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-s-data"
          size="mini"
          @click="handleAnalysis"
          >图标分析</el-button
        >
      </el-col>
      <right-toolbar
        :showSearch.sync="showSearch"
        @queryTable="getList"
      ></right-toolbar>
    </el-row>

    <el-table v-loading="loading" :data="tableList">
      <el-table-column type="expand">
        <template #default="props">
          <el-table
            :data="props.row.details"
            size="mini"
            style="width: 100%; margin-left: 0%"
            :show-header="false"
            class="expandClass"
          >
            ><!---->
            <el-table-column type="expand" />
            <el-table-column
              label="日期"
              align="center"
              prop="ymdms"
              width="150"
            />
            <template v-for="(detail, index) in detailTitleCol2">
              <el-table-column
                :prop="detail.col2Id"
                align="center"
                :key="detail.col2Id"
                :label="detail.col2Name"
                :show-overflow-tooltip="true"
              />
            </template>
          </el-table>
        </template>
      </el-table-column>
      <el-table-column label="日期" align="center" prop="ymdms" width="150" />
      <template v-for="(column1, index) in titleCol1">
        <el-table-column
          align="center"
          :prop="column1.col1Id"
          :key="column1.col1Id"
          :label="column1.col1Name"
        >
          <template v-for="(column2, index) in titleCol2">
            <el-table-column
              :prop="column1.col1Id + column2.col2Id"
              align="center"
              :key="column1.col1Id + column2.col2Id"
              :label="column2.col2Name"
              :show-overflow-tooltip="true"
            />
          </template>
        </el-table-column>
      </template>
    </el-table>
    <!-- 图标分析 -->
    <el-dialog
      :title="title"
      :visible.sync="open"
      width="1880px"
      append-to-body
    >
      <div
        class="echartbox"
        id="echart1"
        style="margin: auto; margin-top: 20px; width: 1820px; height: 545px"
      ></div>
      <div slot="footer" class="dialog-footer">
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import {
  getDLTableAvgInfo,
  getDLDetailList,
  getCheckTypeList,
  getSupplierList,
  getProjectOptionList,
} from "@/api/quality/qcTable";
import * as echarts from "echarts";
import moment from "moment/moment";
export default {
  name: "qcAnalysis",
  dicts: ["check_type"],
  data() {
    return {
      detailListLoading: true,
      refreshNewWorkerTable: true,
      // 选择领料单
      selectPrepare: [],
      // 打印
      formRef: "form",
      validateRules: [],
      printDialogVisible: false,
      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 表格数据
      tableList: [],
      titleCol1: [],
      titleCol2: [],
      detailTitleCol2: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        checkNo: null,
        typeCode: null,
        checkType: null,
        orderNo: null,
        productId: null,
        materialCode: null,
        prodType: null,
        materialName: null,
        productSpc: null,
        wetDetailPlanId: null,
        incomeTime: null,
        incomeBatchNo: null,
        incomeTimeArray: [],
        ymArrayStart: null,
        ymArrayEnd: null,
      },
      workCenterList: [],
      checkTypeList: [],
      projectNoOptions: [],
      // 表单参数
      form: {},
      // 表单校验
      rules: {},
      openReport: false,
      titleReport: "工单报工详情",
      analyzeList: [],
      legenddata: [],
      seriesdata: [],
      xAxisdata: [],
      detailechartslist: [],
      titledata: "",
    };
  },
  created() {
    this.getDate();
    this.getList();
  },
  methods: {
    //产品编码格式化
    productCodeFormate(row, column, cellValue) {
      return cellValue.slice(7, 18); //返回值
    },
    //订单编码格式化
    orderCodeFormate(row, column, cellValue) {
      if (cellValue != null) {
        return cellValue.slice(3, 18); //返回值
      }
    },
    /**获取默认查询时间段**/
    getDate() {
      let start = this.Fungetdate(0);
      let end = this.Fungetdate(0);
      this.queryParams.incomeTimeArray.push(start, end);
    },
    Fungetdate(num) {
      var dd = new Date();
      dd.setDate(dd.getDate() + num);
      var y = dd.getFullYear();
      var m = dd.getMonth() + 1; //获取当前月份的日期
      var d = dd.getDate();
      return y + "-" + m + "-" + d;
    },
    /**获取车间数据**/
    getWorkCenterList() {
      getWorkcenterList(this.queryParams).then((response) => {
        this.workCenterList = response;
      });
    },
    getCheckTypeList(val) {
      //获取检验节点
      getCheckTypeList(val).then((response) => {
        this.checkTypeList = response;
      });
      //获取统计单位
      getSupplierList(val).then((response) => {
        this.workCenterList = response;
      });
    },
    //获取定量检测项
    getProjectListFunc(val) {
      getProjectOptionList(val).then((response) => {
        this.projectNoOptions = response;
      });
    },
    indexMethod(index) {
      return index + 1;
    },
    /** 查询备料单列表 */
    getList() {
      this.loading = true;

      if (this.queryParams.incomeTimeArray.length > 0) {
        this.queryParams.ymArrayStart = moment(
          this.queryParams.incomeTimeArray[0]
        ).format("YYYY-MM-DD");
        this.queryParams.ymArrayEnd = moment(
          this.queryParams.incomeTimeArray[1]
        ).format("YYYY-MM-DD");
      }

      getDLTableAvgInfo(this.queryParams).then((response) => {
        this.titleCol1 = [];
        this.titleCol2 = [];
        this.detailTitleCol2 = [];

        let col1 = response.titleCol1;
        let col2 = response.titleCol2;
        for (let i = 0; i < col1.length; i++) {
          var titleobj1 = {};
          titleobj1.col1Id = "mcode" + i;
          titleobj1.col1Name = col1[i];
          this.titleCol1.push(titleobj1);
        }
        for (let j = 0; j < col2.length; j++) {
          var titleobj2 = {};
          titleobj2.col2Id = "Pcode" + j;
          titleobj2.col2Name = col2[j];
          this.titleCol2.push(titleobj2);
        }

        for (let i = 0; i < col1.length; i++) {
          for (let j = 0; j < col2.length; j++) {
            var detailTitle = {};
            detailTitle.col2Id = "mcode" + i + "Pcode" + j + "Detail";
            detailTitle.col2Name = col2[j];
            this.detailTitleCol2.push(detailTitle);
          }
        }
        this.analyzeList = response;
        this.tableList = response.dxData;

        this.loading = false;
      });
    },
    getanalyzeList() {
      if (this.queryParams.incomeTimeArray.length > 0) {
        this.queryParams.ymArrayStart = moment(
          this.queryParams.incomeTimeArray[0]
        ).format("YYYY-MM-DD");
        this.queryParams.ymArrayEnd = moment(
          this.queryParams.incomeTimeArray[1]
        ).format("YYYY-MM-DD");
      }

      getDLTableAvgInfo(this.queryParams).then((response) => {
        this.detailechartslist = [];
        this.seriesdata = [];
        this.legenddata = [];
        this.xAxisdata = [];
        let col1 = response.titleCol1;
        let col2 = response.titleCol2;
        // mcode0Pcode0
        for (let i = 0; i < col1.length; i++) {
          for (let j = 0; j < col2.length; j++) {
            var detailTitle = {};
            detailTitle.col1Id = "mcode" + i + "Pcode" + j;
            detailTitle.col1Name = col1[i];
            detailTitle.col1xName = col2[j];
            this.detailechartslist.push(detailTitle);
          }
        }
        console.log(
          this.detailechartslist,
          this.seriesdata,
          this.legenddata,
          this.xAxisdata
        );

        if (this.detailechartslist.length > 0) {
          this.analyzeList = response;
          const datalist = this.detailechartslist.map((item) => {
            const xdata = this.analyzeList.dxData.map((d) => {
              return (d.ymdms = moment(d.ymdms, "YYYY-MM-DD AVG").format(
                "YYYY-MM-DD"
              ));
            });
            const datalist = this.analyzeList.dxData.map((d) => d[item.col1Id]);
            return {
              ...item,
              xdata,
              datalist,
            };
          });
          this.xAxisdata = datalist[0].xdata;
          this.titledata = datalist[0].col1xName;
          datalist.forEach((e, index) => {
            this.legenddata.push(e.col1Name);
            if (e.houer) {
              state.xAxisdata = e.col1Name;
            }
            var item = {
              name: e.col1Name,
              type: "bar",
              barGap: 0,
              label: {
                show: true,
                position: "insideBottom",
                distance: 15,
                align: "left",
                verticalAlign: "middle",
                rotate: 90,
                formatter: "{c}  {name|{a}}",
                fontSize: 16,
                rich: {
                  name: {},
                },
              },
              emphasis: {
                focus: "series",
              },
              data: e.datalist,
            };

            this.seriesdata.push(item);
          });
          this.initChart1();
        } else {
          this.$modal.msgError("数据为空");
          this.detailechartslist = [];
          this.seriesdata = [];
          this.legenddata = [];
          this.xAxisdata = [];
          (this.titledata = ""), this.initChart1();
        }
      });
    },
    // 取消按钮
    cancel() {
      this.open = false;
      this.openReport = false;
      this.reset();
    },
    // 表单重置
    reset() {
      this.form = {
        prepareId: null,
        checkNo: null,
        workorderName: null,
        parentOrder: null,
        orderId: null,
        orderNo: null,
        productId: null,
        materialCode: null,
        prodType: null,
        materialName: null,
        productSpc: null,
        wetDetailPlanId: null,
        incomeTime: null,
        incomeBatchNo: null,
        createBy: null,
        createTime: null,
        updateBy: null,
        updateTime: null,
        factoryCode: null,
      };
      this.resetForm("form");
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.getDate();
      this.handleQuery();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map((item) => item.prepareId);
      this.single = selection.length !== 1;
      this.multiple = !selection.length;
      this.selectPrepare = selection;
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.reset();
      this.open = true;
      this.title = "添加备料单";
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      const prepareId = row.prepareId || this.ids;
      getPrepare(prepareId).then((response) => {
        this.form = response.data;
        this.open = true;
        this.title = "修改备料单";
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate((valid) => {
        if (valid) {
          if (this.form.prepareId != null) {
            updatePrepare(this.form).then((response) => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addPrepare(this.form).then((response) => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },
    /** 报工详情按钮操作 */
    handleDetail(row) {
      this.reset();
      let sr = row;

      this.queryParams.orderNo = sr.orderNo;
      getXJCheckTableDetail(this.queryParams).then((response) => {
        this.pOrderTableList = response;
        this.openReport = true;
        this.titleReport = "过程巡检详情";
      });
    },
    /** 导出按钮操作 */
    handleExport() {
      this.download(
        "quality/staticTable/exportDLTable",
        {
          ...this.queryParams,
        },
        `DLTable_${new Date().getTime()}.xlsx`
      );
    },
    // 图表分析
    handleAnalysis() {
      this.title = "图表分析";

      //
      if (
        this.queryParams.projectNoArray.length > 0 &&
        this.queryParams.projectNoArray.length < 2
      ) {
        // this.projectNoOptions.forEach((item) => {
        //   if (item.recordId == this.queryParams.projectNoArray) {
        //     console.log(item);
        //   }
        // });
        this.open = true;
        this.getanalyzeList();
      } else if (this.queryParams.projectNoArray.length < 0) {
        this.$modal.msgError("请选择定量检测项");
      } else {
        this.$modal.msgError("请选择一项定量检测项");
      }
    },
    // 取消
    cancel() {
      this.open = false;
    },
    // 加载图表
    initChart1() {
      const _this = this;
      // mcode0Pcode0  mcode1Pcode0
      var chartDom = document.getElementById("echart1");

      // 检查是否已经初始化了 ECharts 实例
      if (echarts.getInstanceByDom(chartDom)) {
        // 销毁已有的实例
        echarts.dispose(chartDom);
      }
      var myChart1 = echarts.init(document.querySelector("#echart1"));
      var option1 = {
        title: {
          text: this.titledata,
          left: "left",
        },
        grid: {
          left: "0.5%",
          right: "1%",
          top: "8%",
          bottom: "3%",
          containLabel: true,
        },
        tooltip: {
          trigger: "axis",
          axisPointer: {
            type: "shadow",
          },
        },
        legend: {
          top: 10,
          left: "center",
          data: this.legenddata,
        },
        xAxis: [
          {
            axisLabel: {
              rotate: 45,
              interval: 0,
            },
            type: "category",
            axisTick: { show: false },
            data: this.xAxisdata,
          },
        ],
        yAxis: [
          {
            type: "value",
          },
        ],
        series: this.seriesdata,
      };
      myChart1.setOption(option1);
    },
  },
};
</script>
<style>
.my-print-head {
  margin-top: 20px;
  font-weight: bold;
}
.my-print-nav {
  margin-top: 15px;
  margin-bottom: 15px;
}
.my-print-table {
}
.my-print-foot {
  margin-top: 20px;
}
#.el-table .cell {
  white-space: pre-line !important;
}
.el-table .cell.el-tooltip {
  white-space: pre-wrap; /*这是重点。文本换行*/
}
/deep/ .el-table__expand-icon {
  display: none;
}
.expandClass .el-table__expand-icon {
  display: none;
}
</style>
