<template>
  <div class="ele-body">
    <el-card shadow="never">
      <!-- <search ref="search" @search="search"></search> -->
      <seek-page :seekList="seekList" @search="search"></seek-page>
       
      <ele-pro-table ref="table" :columns="columns" :datasource="datasource" :pageSize="20"
        :pageSizes="[20, 30, 40, 50, 100]">
        <!-- 表头工具栏 -->
        <!--        <template v-slot:toolbar>-->
        <!--          <el-button size="small" type="primary" icon="el-icon-plus" class="ele-btn-icon" @click="openEdit('add')">-->
        <!--            添加-->
        <!--          </el-button>-->
        <!--        </template>-->

        <template v-slot:code="{ row }">
          <el-link type="primary" :underline="false" @click="openEdit('detail', row)">
            {{ row.code }}
          </el-link>
        </template>

        <!--        <template v-slot:qualityPlanName="{ row }">-->
        <!--          <div v-if="row.qualityPlanId"> {{ row.qualityPlanName }}</div>-->
        <!--          <div v-else><el-tag size="mini">自建</el-tag></div>-->
        <!--        </template>-->
        <template v-slot:sourceCode="{ row }">
          <div v-if="row.qualityType == 1"> {{ row.qualityPlanCode }}</div>
          <div v-if="row.qualityType == 2">{{ row.workOrderCode }}</div>
        </template>

        <template v-slot:files="scope">
          <el-link v-for="link in scope.row.files" :key="link.id" type="primary" :underline="false"
            @click="downloadFile(link)">
            {{ link.name }}
          </el-link>
        </template>

        <template v-slot:qualityType="{ row }">
          {{ getDictValue('质检计划类型', row.qualityType) }}
        </template>
        <template v-slot:qualityMode="{ row }">
          {{ getDictValue('取样类型', row.qualityMode) }}
        </template>
        <template v-slot:accessory="scope">
          <el-link v-for="link in scope.row.accessory" :key="link.id" type="primary" :underline="false"
            @click="downloadFile(link)">
            {{ link.name }}
          </el-link>
        </template>
        <!-- 操作列 -->
        <template v-slot:action="{ row }">
          <el-link type="primary" :underline="false" v-if="row.status == 0" @click="openEdit('edit', row)">
            报工
          </el-link>
          <el-link type="primary" :underline="false" @click="openNumber(row)">
            合格证
          </el-link>
          <!-- <el-link type="primary" :underline="false">
            质检报告
          </el-link> -->
          <!-- <el-popconfirm class="ele-action" title="确定要删除吗？" @confirm="remove(row)" v-if="row.status == 0">
            <template v-slot:reference>
              <el-link type="danger" :underline="false" icon="el-icon-delete">
                删除
              </el-link>
            </template>
</el-popconfirm> -->
        </template>
      </ele-pro-table>
      <!--  -->
      <el-dialog title="修改" :visible.sync="certificateVisible" width="25%" :before-close="handleClose">
        <el-form :inline="true" :model="formData" class="demo-form-inline">
          <el-form-item label="合格证号">
            <el-input v-model="formData.certificateNumber" placeholder="请输入"></el-input>
          </el-form-item>
        </el-form>
        <span slot="footer" class="dialog-footer">
          <el-button @click="handleClose">取 消</el-button>
          <el-button type="primary" @click="handleSubmit">确 定</el-button>
        </span>
      </el-dialog>
      <!--  -->
    </el-card>
  </div>
</template>
<script>
import search from './components/search.vue';

import { getList, removeItem, updateCertificateNumber } from '@/api/inspectionWork';
import dictMixins from '@/mixins/dictMixins';
import { getFile } from '@/api/system/file';
import { getByCode } from '@/api/system/dictionary-data';

export default {
  mixins: [dictMixins],
  components: {
    search
  },
  data() {
    return {
      columns: [
        {
          type: 'index',
          columnKey: 'index',
          align: 'center',
          label: '序号',
          width: 55,
          showOverflowTooltip: true,
          fixed: 'left'
        },
        {
          prop: 'code',
          label: '质检工单编码',
          slot: 'code',
          align: 'center',
          width: 180,
          showOverflowTooltip: true,
          fixed: 'left'
        },
        {
          prop: 'name',
          slot: 'name',
          width: 120,
          label: '质检工单名称',
          align: 'center',
          showOverflowTooltip: true
        },
        {
          label: '来源单号',
          prop: 'sourceCode',
          slot: 'sourceCode',
          align: 'center',
          width: 160,
          showOverflowTooltip: true
        },
        {
          label: '类型',
          prop: 'qualityType',
          slot: 'qualityType',
          align: 'center',
          width: 120,
          showOverflowTooltip: true
        },
        {
          label: '质检方式',
          prop: 'qualityMode',
          slot: 'qualityMode',
          align: 'center',
          width: 120,
          showOverflowTooltip: true
        }, {
          prop: 'qualityName',
          label: '质检人',
          align: 'center',
          width: 120,
          showOverflowTooltip: true
        },
        {
          prop: 'qualityTime',
          label: '质检时间',
          align: 'center',
          width: 120,
          showOverflowTooltip: true
        },

        {
          prop: 'productCode',
          width: 120,
          label: '编码',
          align: 'center',
          showOverflowTooltip: true
        },
        {
          prop: 'productName',
          width: 120,
          label: '名称',
          align: 'center',
          showOverflowTooltip: true
        },
        {
          prop: 'batchNo',
          label: '批次号',
          align: 'center',
          width: 120,
          showOverflowTooltip: true
        },
        {
          prop: 'specification',
          label: '规格',
          align: 'center',
          showOverflowTooltip: true
        },
        {
          prop: 'brandNo',
          label: '牌号',
          align: 'center',
          showOverflowTooltip: true
        },

        {
          prop: 'produceTaskName',
          label: '工序',
          align: 'center',
          width: 120,
          showOverflowTooltip: true
        },
        {
          prop: 'total',
          label: '总数量',
          align: 'center',
          showOverflowTooltip: true
        },
        {
          prop: 'qualifiedNumber',
          label: '合格数',
          align: 'center',
          showOverflowTooltip: true
        },
        {
          prop: 'qualificationRate',
          label: '合格率',
          align: 'center',
          showOverflowTooltip: true
        },
        {
          prop: 'noQualifiedNumber',
          label: '不合格数',
          align: 'center',
          showOverflowTooltip: true
        },
        {
          prop: 'noQualificationRate',
          label: '不合格率',
          align: 'center',
          showOverflowTooltip: true
        },
        {
          prop: 'hours',
          label: '工时',
          align: 'center',
          showOverflowTooltip: true
        },

        {
          label: '附件',
          prop: 'accessory',
          align: 'center',
          slot: 'accessory',
          showOverflowTooltip: true
        },
        {
          label: '创建时间',
          prop: 'createTime',
          align: 'center',
          width: 160
        },
        {
          prop: 'status',
          label: '状态',
          align: 'center',
          width: 80,
          formatter: (row, column, cellValue) => {
            return cellValue == 0 ? '未报工' : cellValue == 1 ? '已报工' : '';
          },
          fixed: 'right'
        },
        {
          columnKey: 'action',
          label: '操作',
          align: 'center',
          width: 200,
          resizable: false,
          slot: 'action',
          fixed: 'right'
        }
      ],
      formData: {
        certificateNumber: ''
      },
      certificateVisible: false,
      rowData: {},
      typeList:[],//类型列表
      qualityMode:[], //取样类型
      statusList: [{
        value: 0,
        label: '未报工'
      },
      {
        value: 1,
        label: '已报工'
      }]
    };
  },
  created() {
    this.requestDict('质检计划类型');
    this.requestDict('不良品处理类型');
    this.requestDict('取样类型');
    this.getTnspectionPlanType();
    this.getQualityMethodCode();
  },
  computed:{
    seekList() {
      return [
        {
          label: "工单编码：",
          value: "code",
          type: "input",
          placeholder: '',
        },
        {
          label: "工单名称：",
          value: "name",
          type: "input",
          placeholder: '',
        },
        {
          label: "来源单号：",
          value: "sourceCode",
          type: "input",
          placeholder: '',
        },
        {
          label: "类型：",
          value: "qualityType",
          type: "select",
          placeholder: '',
          planList:this.typeList
        },
        {
          label: "质检方式：",
          value: "qualityMode",
          type: "select",
          placeholder: '',
          planList:this.qualityMode

        },
        {
          label: "编码：",
          value: "productCode",
          type: "input",
          placeholder: '',
        },
        {
          label: "名称：",
          value: "productName",
          type: "input",
          placeholder: '',
        },
        {
          label: "状态：",
          value: "status",
          type: "select",
          placeholder: '',
          planList:this.statusList

        },
      ]
    },
  },
  methods: {
    datasource({ page, where, limit }) {
      return getList({
        ...where,
        pageNum: page,
        size: limit
      });
    },
    search(where) {
      this.$refs.table.reload({
        where: where,
        page: 1
      });
    },
    openEdit(type, row) {
      const menusList = this.$store.state.user.menus;
      let found = false;
      for (const item of menusList) {
        if (item.children) {
          for (const item2 of item.children) {
            if (item2.path === '/inspectionWork/edit') {
              found = true;
              const id = type !== 'add' ? row.id : '';
              const qualityType = type !== 'add' ? row.qualityType : null;
              const qualityTimeStart = row.qualityTimeStart || '';

              this.$router.push({
                path: '/inspectionWork/edit',
                query: {
                  type,
                  id,
                  qualityType,
                  qualityTimeStart
                }
              });
              return;
            }
          }
        }

      }

      if (!found) {
        this.$message.error('请到角色管理配置菜单权限！');
      }
    },
    downloadFile(file) {
      getFile({ objectName: file.storePath }, file.name);
    },
    remove(row) {
      removeItem([row.id])
        .then((message) => {
          this.$message.success(message);
          this.done();
        })
        .catch((e) => { });
    },
    done() {
      this.$refs.search.search();
    },
    openNumber(row) {
      this.formData.certificateNumber = row.certificateNumber;
      this.rowData = row;
      this.certificateVisible = true
    },
    handleClose() {
      this.certificateVisible = false;
    },
    async handleSubmit() {
      this.rowData.certificateNumber = this.formData.certificateNumber;
      this.rowData.qualityTimeStart = new Date(this.rowData.qualityTimeStart);
      this.rowData.qualityTimeEnd = new Date(this.rowData.qualityTimeEnd);
      
      const data = await updateCertificateNumber(this.rowData)
      if (data) {
        this.$message.success('修改成功！');
        this.done();
      }
      this.certificateVisible = false;
    },

    async getTnspectionPlanType() {
      let res = await getByCode('inspection_plan_type');
      if (res?.code == 0) {
        let list = res.data.map(item => {
          let key = Object.keys(item)[0]
          return {value: key, label: item[key]}
        })
        this.typeList = list;
      }
    },

    async getQualityMethodCode() {
      let res = await getByCode('quality_method_code');
      if (res?.code == 0) {
        let list = res.data.map(item => {
          let key = Object.keys(item)[0]
          return {value: key, label: item[key]}
        })
        this.qualityMode = list;
      }
    },
  }
};
</script>
