zouyu
3 天以前 12c8999bab7206bc652fd69ac4f364d84c9e7153
不合格处理:支持多生产批次提交oa;oa流程查看调整
已修改7个文件
1497 ■■■■■ 文件已修改
src/api/business/unpass.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/unqualifiedHandler.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Table/lims-table.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/inspection.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/unpass/components/OAProcess.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/unpass/components/unPassDialog.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/unpass/index-manage.vue 1230 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/unpass.js
@@ -46,6 +46,15 @@
  });
}
// 查询检验下单内容详情列表
export function getInsOrderList(data) {
  return request({
    url: "/insOrder/getInsOrderList",
    method: "post",
    data: data,
  });
}
// 查看OA详情
export function getUnqualifiedHandler(query) {
  return request({
src/api/business/unqualifiedHandler.js
@@ -42,3 +42,10 @@
    responseType: "blob",
  });
}
// 查询不合格处理记录
export function getList() {
  return request({
    url: "/unqualifiedHandler/getList",
    method: "get",
  });
}
src/components/Table/lims-table.vue
@@ -316,6 +316,7 @@
        this.tableData.forEach((_, index) => {
          this.$set(this.uploadKeys, index, Date.now());
        });
        this.calculateSpanInfo();
        this.refreshTableLayout();
      },
      immediate: true
@@ -471,13 +472,15 @@
    calculateSpanInfo() {
      // 初始化每列的合并信息
      this.spanList = [];
      // 计算数据列在el-table中的真实起始索引:序号列(1列) + 可选的选择列(1列)
      const colOffset = this.isSelection ? 2 : 1;
      this.column.forEach((m, i) => {
        if (m.mergeCol) {
          this.spanList.push({
            arr: [],
            position: 0,
            name: m.prop,
            index: i + 1,
            index: i + colOffset,
          });
        }
      });
src/views/business/inspectionTask/inspection.vue
@@ -1150,7 +1150,7 @@
    <UnPassDialog
      v-if="unPassDialog"
      ref="unPassDialog"
      :orderId="orderId"
      :selectOrderIds="[orderId]"
      :unPassDialog="unPassDialog"
      @resetForm="resetForm"
    ></UnPassDialog>
@@ -4065,11 +4065,6 @@
  display: inline-flex;
  align-items: center;
}
</style>
<style scoped>
/* .inspection .el-form-item__label {
  color: #000;
} */
.inspection .el-drawer__header::before {
  content: "";
src/views/business/unpass/components/OAProcess.vue
@@ -12,6 +12,7 @@
        <el-timeline-item
          placement="top"
          v-for="node in isOldData?oldNodes:newNodes"
          v-if="(node.classType && node.classType===classType) || node.classType==='-1'"
          :key="node.id"
          :timestamp="node.name"
          :icon="node.hasData ? 'el-icon-check' : 'el-icon-time'"
@@ -29,7 +30,7 @@
                <span class="value">{{ node.time || "-" }}</span>
              </div>
              <div class="detail-item">
                <span class="label">{{node.name && node.name==='1检验员'?'不合格描述:':'处理意见:'}}</span>
                <span class="label">{{node.infoTitle}}</span>
                <span class="value">{{ node.info || "-" }}</span>
              </div>
            </div>
@@ -67,6 +68,7 @@
          id: 1,
          name: "1检验员",
          info: "",
          infoTitle:"不合格情况描述:",
          time: "",
          operator: "",
          operation: "",
@@ -75,6 +77,7 @@
        {
          id: 2,
          name: "2检测主管确认",
          infoTitle:"处理意见:",
          info: "",
          time: "",
          operator: "",
@@ -84,6 +87,7 @@
        {
          id: 3,
          name: "3物流部确认",
          infoTitle:"处理意见:",
          info: "",
          time: "",
          operator: "",
@@ -93,6 +97,7 @@
        {
          id: 4,
          name: "4产品工程师处理意见",
          infoTitle:"处理意见:",
          info: "",
          time: "",
          operator: "",
@@ -102,6 +107,7 @@
        {
          id: 5,
          name: "5.总工或者副经理的处理意见",
          infoTitle:"处理意见:",
          info: "",
          time: "",
          operator: "",
@@ -111,6 +117,7 @@
        {
          id: 6,
          name: "6质量部处理意见",
          infoTitle:"处理意见:",
          info: "",
          time: "",
          operator: "",
@@ -120,6 +127,7 @@
        {
          id: 7,
          name: "7质量部经理",
          infoTitle:"处理意见:",
          info: "",
          time: "",
          operator: "",
@@ -129,6 +137,7 @@
        {
          id: 8,
          name: "8核算员",
          infoTitle:"处理意见:",
          info: "",
          time: "",
          operator: "",
@@ -138,6 +147,7 @@
        {
          id: 9,
          name: "9物流部索赔结果",
          infoTitle:"处理意见:",
          info: "",
          time: "",
          operator: "",
@@ -149,8 +159,10 @@
      newNodes:[
        {
          id: 1,
          classType: "-1",
          name: "1申请",
          info: "",
          infoTitle:"不合格情况描述:",
          time: "",
          operator: "",
          operation: "",
@@ -158,8 +170,10 @@
        },
        {
          id: 2,
          name: "2质量部经理",
          classType: "-1",
          name: "2质量经理",
          info: "",
          infoTitle:"对不合格产品的处理要求:",
          time: "",
          operator: "",
          operation: "",
@@ -167,7 +181,9 @@
        },
        {
          id: 3,
          classType: "0",
          name: "3工艺(一类不合格)",
          infoTitle:"改进要求:",
          info: "",
          time: "",
          operator: "",
@@ -176,7 +192,9 @@
        },
        {
          id: 4,
          classType: "1",
          name: "3工艺(二类不合格)",
          infoTitle:"改进要求:",
          info: "",
          time: "",
          operator: "",
@@ -185,8 +203,10 @@
        },
        {
          id: 5,
          classType: "0",
          name: "4技术经理(一类不合格)",
          info: "",
          infoTitle:"措施要求:",
          time: "",
          operator: "",
          operation: "",
@@ -194,8 +214,10 @@
        },
        {
          id: 6,
          classType: "1",
          name: "4技术经理(二类不合格)",
          info: "",
          infoTitle:"措施要求:",
          time: "",
          operator: "",
          operation: "",
@@ -203,8 +225,10 @@
        },
        {
          id: 7,
          classType: "0",
          name: "5核算(一类不合格)",
          info: "",
          infoTitle:"索赔要求(人民币RMB¥):",
          time: "",
          operator: "",
          operation: "",
@@ -212,8 +236,10 @@
        },
        {
          id: 8,
          classType: "1",
          name: "5总经理(二类不合格)",
          info: "",
          infoTitle:"最终处理意见:",
          time: "",
          operator: "",
          operation: "",
@@ -221,8 +247,10 @@
        },
        {
          id: 9,
          classType: "0",
          name: "6归档(一类不合格)",
          info: "",
          infoTitle:"处理意见:",
          time: "",
          operator: "",
          operation: "",
@@ -230,8 +258,10 @@
        },
        {
          id: 10,
          classType: "1",
          name: "6核算(二类不合格)",
          info: "",
          infoTitle:"索赔要求(人民币RMB¥):",
          time: "",
          operator: "",
          operation: "",
@@ -239,19 +269,23 @@
        },
        {
          id: 11,
          classType: "1",
          name: "7归档(二类不合格)",
          info: "",
          infoTitle:"处理意见:",
          time: "",
          operator: "",
          operation: "",
          hasData: false,
        },
      ]
      ],
      classType:null,
    };
  },
  // 方法集合
  methods: {
    getInfo(id,unqualifiedDesc) {
    getInfo(id,unqualifiedDesc,classType) {
      if(classType)this.classType = classType;
      getOaFlow({
        id: id,
      })
@@ -264,7 +298,7 @@
                const node = nodes.find((n) => n.name === item.nodeName);
                if (node) {
                  node.time = item.approvalDate + " " + item.approvalTime;
                  if(item.nodeName && item.nodeName==="1检验员"){
                  if(item.nodeName && ['1检验员','1申请'].includes(item.nodeName)){
                    node.info=unqualifiedDesc;
                  }else{
                    node.info = item.approvalOpinion;
@@ -318,7 +352,7 @@
  font-weight: 500;
  color: #606266;
  margin-right: 8px;
  min-width: 90px;
  min-width: 110px;
}
.value {
src/views/business/unpass/components/unPassDialog.vue
@@ -1,65 +1,99 @@
<template>
  <div>
    <el-dialog :title="type==='view'?'不合格处理详情':'不合格处理提交'" :visible.sync="isShow" width="740px" :show-close="false" :close-on-click-modal="false"
      :close-on-press-escape="false">
      <div class="search">
        <el-form :inline="true" :model="unPassForm" :rules="unPassFormRules" ref="unPassForm" class="form-inline"
    <el-dialog :title="type==='view'?'不合格处理详情':'不合格处理提交'" :visible.sync="isShow" width="40%" :show-close="false" :close-on-click-modal="false"
      :close-on-press-escape="false" append-to-body>
      <div>
        <el-form :model="unPassForm" :rules="unPassFormRules" ref="unPassForm"
          label-width="120px">
          <div>
            <el-form-item class="headLine" label="标题:" style="width: 100%" prop="headline">
              <el-input clearable v-model="unPassForm.headline" size="small" :disabled="type === 'view'" type="textarea"
                placeholder="请输入"></el-input>
            </el-form-item>
          </div>
          <el-form-item label="供应商名称:">
            <el-input clearable v-model="unPassForm.supplierName" disabled size="small" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="物料名称:" prop="materialName">
            <el-tooltip class="item" effect="dark" placement="top" :content="unPassForm.materialName">
              <el-input clearable v-model="unPassForm.materialName" :disabled="type==='view'" size="small" placeholder="请输入"></el-input>
            </el-tooltip>
          </el-form-item>
          <el-form-item label="生产批次:">
            <el-input clearable v-model="unPassForm.productionBatch" disabled size="small" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="到货数量:">
            <el-input clearable v-model="unPassForm.cargoQuantity" disabled size="small" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="规格型号:">
            <el-input clearable v-model="unPassForm.specsModels" disabled size="small" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="报检时间:">
            <el-date-picker v-model="unPassForm.inspectTime" format="yyyy-MM-dd" value-format="yyyy-MM-dd" size="small"
              disabled style="width: 175px" type="date" placeholder="选择日期">
            </el-date-picker>
          </el-form-item>
          <el-form-item label="反馈人:">
            <el-input clearable v-model="unPassForm.feedbackUser" disabled size="small" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="反馈时间:" prop="feedbackTime">
            <el-date-picker  :picker-options="{ disabledDate: this.disabledDate }" v-model="unPassForm.feedbackTime" :disabled="type === 'view'" format="yyyy-MM-dd"
              value-format="yyyy-MM-dd" size="small" style="width: 175px" type="date" placeholder="选择日期">
            </el-date-picker>
          </el-form-item>
          <el-form-item label="分类:" prop="classification">
            <el-select v-model="unPassForm.classification" :disabled="type === 'view' || !unPassForm.id" size="small" placeholder="请选择">
              <el-option v-for="item in classificationOptions" :key="item.value" :label="item.label"
                :value="item.value">
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="不合格归属:" prop="offGradeAscription">
            <el-select v-model="unPassForm.offGradeAscription" :disabled="type === 'view'" size="small"
              placeholder="请选择">
              <el-option v-for="item in offGradeAscriptionOptions" :key="item.value" :label="item.label"
                :value="item.value">
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="不合格情况描述:" prop="unqualifiedDesc">
            <el-input clearable type="textarea" v-model="unPassForm.unqualifiedDesc" :disabled="type === 'view'"
              style="width: 484px" size="small" placeholder="请输入"></el-input>
          </el-form-item>
          <el-row >
            <el-col :span="24">
              <el-form-item label="标题" prop="headline">
                <el-input style="width:100%" clearable v-model="unPassForm.headline" size="small" :disabled="type === 'view'" type="textarea"
                          placeholder="请输入"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row >
            <el-col :span="12">
              <el-form-item label="供应商名称">
                <el-input style="width:100%" clearable v-model="unPassForm.supplierName" disabled size="small" placeholder="请输入"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="物料名称" prop="materialName">
                <el-input style="width:100%" clearable v-model="unPassForm.materialName" :disabled="type==='view'" size="small" placeholder="请输入"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row >
            <el-col :span="12">
              <el-form-item label="生产批次">
                <el-input style="width:100%" clearable v-model="unPassForm.productionBatch" disabled size="small" placeholder="请输入"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="到货数量">
                <el-input style="width:100%" clearable v-model="unPassForm.cargoQuantity" disabled size="small" placeholder="请输入" >
                  <template slot="append">{{unPassForm.buyUnitMeas}}</template>
                </el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row >
            <el-col :span="12">
              <el-form-item label="规格型号">
                <el-input style="width:100%" clearable v-model="unPassForm.specsModels" disabled size="small" placeholder="请输入"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="报检时间">
                <el-date-picker style="width:100%" v-model="unPassForm.inspectTime" format="yyyy-MM-dd" value-format="yyyy-MM-dd" size="small"
                                disabled type="date" placeholder="选择日期">
                </el-date-picker>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row >
            <el-col :span="12">
              <el-form-item label="反馈人">
                <el-input style="width:100%" clearable v-model="unPassForm.feedbackUser" disabled size="small" placeholder="请输入"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="反馈时间" prop="feedbackTime">
                <el-date-picker style="width:100%" :picker-options="{ disabledDate: this.disabledDate }" v-model="unPassForm.feedbackTime" :disabled="type === 'view'" format="yyyy-MM-dd"
                                 value-format="yyyy-MM-dd" size="small" type="date" placeholder="选择日期">
                </el-date-picker>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row >
            <el-col :span="12">
              <el-form-item label="分类" prop="classification">
                <el-select style="width:100%" v-model="unPassForm.classification" :disabled="type === 'view' || !unPassForm.id" size="small" placeholder="请选择">
                  <el-option v-for="item in classificationOptions" :key="item.value" :label="item.label"
                             :value="item.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="不合格归属" prop="offGradeAscription">
                <el-select style="width:100%" v-model="unPassForm.offGradeAscription" :disabled="type === 'view'" size="small"
                           placeholder="请选择">
                  <el-option v-for="item in offGradeAscriptionOptions" :key="item.value" :label="item.label"
                             :value="item.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row >
            <el-col :span="24">
              <el-form-item label="不合格情况描述" prop="unqualifiedDesc">
                <el-input style="width:100%" clearable type="textarea" v-model="unPassForm.unqualifiedDesc" :disabled="type === 'view'"
                           size="small" placeholder="请输入"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
        <el-upload v-if="type !== 'view'" ref="upload" :action="action2" :on-change="beforeUpload" :on-error="onError"
          :on-remove="handleRemoveFile" :on-success="getUnpassUrl" :headers="uploadHeader" :file-list="unPassFilesList">
@@ -84,7 +118,7 @@
</template>
<script>
import { getInsOrder, getUnqualifiedHandler, downFile, addUnqualifiedHandler,reSubmitPushOa } from '@/api/business/unpass.js'
import { getInsOrder,getInsOrderList, getUnqualifiedHandler, downFile, addUnqualifiedHandler,reSubmitPushOa } from '@/api/business/unpass.js'
import {mapGetters} from "vuex";
export default {
  name: "unPassDialog",
@@ -95,9 +129,11 @@
      type: Boolean,
      default: () => false
    },
    orderId: {
      type: String,
      default: () => null
    selectOrderIds: {
      type: Array,
      default: () => {
        return []
      }
    },
  },
  data() {
@@ -152,21 +188,22 @@
      this.type = type
      if (type === 'add') {
        // 赋值默认数据
        getInsOrder({
          orderId: this.orderId
        getInsOrderList({
          selectOrderIds: this.selectOrderIds
        }).then(res => {
          if (res.code === 200) {
            this.unPassForm.feedbackTime = new Date().toISOString().substring(0, 10) // 报检时间
            this.unPassForm.headline = `No.0020-中天耐丝-供应商质量异常反馈流程-${res.data.insOrderTemplate.supplierName}-${this.unPassForm.feedbackTime}` // 标题
            this.unPassForm.headline = `No.0020-中天耐丝-供应商质量异常反馈流程-${res.data.supplierName}-${this.unPassForm.feedbackTime}` // 标题
            this.unPassForm.feedbackUser = this.nickName // 反馈人
            this.unPassForm.insOrderId = res.data.insOrder.id // 订单id
            this.unPassForm.materialName = res.data.insOrder.sampleType // 物料名称
            this.unPassForm.specsModels = res.data.insOrder.partDetail // 规格型号
            this.unPassForm.inventoryQuantityId = res.data.insOrderTemplate.inventoryQuantityId // 原材料id
            this.unPassForm.supplierName = res.data.insOrderTemplate.supplierName // 供应商名称
            this.unPassForm.productionBatch = res.data.insOrderTemplate.updateBatchNo // 生产批次
            this.unPassForm.cargoQuantity = res.data.insOrderTemplate.qtyArrived + res.data.insOrderTemplate.buyUnitMeas // 到货数量
            this.unPassForm.inspectTime = res.data.insOrderTemplate.sendTime.substring(0, 10)  // 报检时间
            // this.unPassForm.insOrderId = res.data.insOrder.id // 订单id
            this.unPassForm.materialName = res.data.sampleType // 物料名称
            this.unPassForm.specsModels = res.data.partDetail // 规格型号
            // this.unPassForm.inventoryQuantityId = res.data.inventoryQuantityId // 原材料id
            this.unPassForm.supplierName = res.data.supplierName // 供应商名称
            this.unPassForm.productionBatch = res.data.updateBatchNo // 生产批次
            this.unPassForm.cargoQuantity = res.data.qtyArrived // 到货数量
            this.unPassForm.buyUnitMeas = res.data.buyUnitMeas // 采购单位
            this.unPassForm.inspectTime = res.data.sendTime  // 报检时间
          }
        })
      } else {
@@ -201,7 +238,10 @@
            delete item.orderBy
          })
          this.handlunPassLoading = true
          addUnqualifiedHandler(this.unPassForm).then(res => {
          addUnqualifiedHandler({
            ...this.unPassForm,
            selectOrderIds: this.selectOrderIds
          }).then(res => {
            if (res.code === 200) {
              this.$message.success('提交成功')
              this.$emit('resetForm')
@@ -288,7 +328,4 @@
</script>
<style scoped>
.headLine>>>.el-form-item__content {
  width: 68%;
}
</style>
src/views/business/unpass/index-manage.vue
@@ -4,39 +4,85 @@
      <div>
        <el-form :model="entity" ref="entity" size="small" :inline="true">
          <el-form-item label="IFS域" prop="contract">
            <el-select @keyup.enter.native="refreshTable" v-model="entity.contract" clearable placeholder="请选择" size="small">
              <el-option label="ZTNS" value="ZTNS"/>
              <el-option label="KJNS" value="KJNS"/>
            <el-select
              @keyup.enter.native="refreshTable"
              v-model="entity.contract"
              clearable
              placeholder="请选择"
              size="small"
            >
              <el-option label="ZTNS" value="ZTNS" />
              <el-option label="KJNS" value="KJNS" />
            </el-select>
          </el-form-item>
          <el-form-item label="批号" prop="updateBatchNo">
            <el-input v-model="entity.updateBatchNo" clearable placeholder="请输入" size="small"
                      @keyup.enter.native="refreshTable()">
            <el-input
              v-model="entity.updateBatchNo"
              clearable
              placeholder="请输入"
              size="small"
              @keyup.enter.native="refreshTable()"
            >
            </el-input>
          </el-form-item>
          <el-form-item label="订单编号" prop="no">
            <el-input size="small" placeholder="请输入" clearable v-model="entity.no"
                      @keyup.enter.native="refreshTable()"></el-input>
            <el-input
              size="small"
              placeholder="请输入"
              clearable
              v-model="entity.no"
              @keyup.enter.native="refreshTable()"
            ></el-input>
          </el-form-item>
          <el-form-item label="规格型号" prop="specsModels">
            <el-input size="small" placeholder="请输入" clearable v-model="entity.specsModels"
                      @keyup.enter.native="refreshTable()"></el-input>
            <el-input
              size="small"
              placeholder="请输入"
              clearable
              v-model="entity.specsModels"
              @keyup.enter.native="refreshTable()"
            ></el-input>
          </el-form-item>
          <el-form-item label="样品名称" prop="sample">
            <el-input size="small" placeholder="请输入" clearable v-model="entity.sample"
                      @keyup.enter.native="refreshTable()"></el-input>
            <el-input
              size="small"
              placeholder="请输入"
              clearable
              v-model="entity.sample"
              @keyup.enter.native="refreshTable()"
            ></el-input>
          </el-form-item>
          <el-form-item label="物料属性" prop="materialProp">
            <el-select clearable size="small" v-model="entity.materialProp" style="width: 100%" @change="refreshTable()">
              <el-option v-for="dict in dict.type.material_prop_type" :key="dict.value" :label="dict.label"
                         :value="dict.value">
            <el-select
              clearable
              size="small"
              v-model="entity.materialProp"
              style="width: 100%"
              @change="refreshTable()"
            >
              <el-option
                v-for="dict in dict.type.material_prop_type"
                :key="dict.value"
                :label="dict.label"
                :value="dict.value"
              >
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="OA审核状态" prop="operation">
            <el-select clearable size="small" v-model="entity.operation" style="width: 100%" @change="refreshTable()">
              <el-option v-for="dict in dict.type.oa_workflow_state" :key="dict.value" :label="dict.label"
                         :value="dict.value">
            <el-select
              clearable
              size="small"
              v-model="entity.operation"
              style="width: 100%"
              @change="refreshTable()"
            >
              <el-option
                v-for="dict in dict.type.oa_workflow_state"
                :key="dict.value"
                :label="dict.label"
                :value="dict.value"
              >
              </el-option>
            </el-select>
          </el-form-item>
@@ -49,26 +95,47 @@
              clearable
              value-format="yyyy-MM-dd"
              v-model="entity.feedbackDateTime"
              @keyup.enter.native="refreshTable()">
              @keyup.enter.native="refreshTable()"
            >
            </el-date-picker>
          </el-form-item>
          <el-form-item label="供应商名称" prop="supplierName">
            <el-input size="small" placeholder="请输入" clearable v-model="entity.supplierName"
                      @keyup.enter.native="refreshTable()"></el-input>
            <el-input
              size="small"
              placeholder="请输入"
              clearable
              v-model="entity.supplierName"
              @keyup.enter.native="refreshTable()"
            ></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" size="mini" @click="refreshTable">查询</el-button>
            <el-button type="primary" size="mini" @click="refreshTable"
              >查询</el-button
            >
            <el-button size="mini" @click="refresh">重置</el-button>
            <el-button :loading="exportLoading" type="success" size="mini" @click="exportUnqualifiedHandler">导出</el-button>
            <el-button type="primary" size="mini" @click="openInsOrderDialog">新增不合格处理</el-button>
            <el-button
              :loading="exportLoading"
              type="success"
              size="mini"
              @click="exportUnqualifiedHandler"
              >导出</el-button
            >
            <el-button type="primary" size="mini" @click="openInsOrderDialog"
              >新增不合格处理</el-button
            >
          </el-form-item>
        </el-form>
      </div>
    </div>
    <div>
      <lims-table :tableData="tableData" :column="column"
                  :more="true" @pagination="pagination"
                  :page="page" :tableLoading="tableLoading"></lims-table>
      <lims-table
        :tableData="tableData"
        :column="column"
        :more="true"
        @pagination="pagination"
        :page="page"
        :tableLoading="tableLoading"
      ></lims-table>
    </div>
    <el-dialog
      title="提交"
@@ -76,24 +143,14 @@
      :close-on-press-escape="false"
      :close-on-click-modal="false"
      :visible.sync="dialogVisible"
      width="30%">
      width="30%"
    >
      <span>是否确认提交OA?</span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="submitOA" :loading="submitOALoading">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog
      title="删除"
      :show-close="false"
      :close-on-press-escape="false"
      :close-on-click-modal="false"
      :visible.sync="deleteVisible"
      width="30%">
      <span>是否确认<span style="color: #FF4902">删除</span>OA?</span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="deleteVisible = false">取 消</el-button>
        <el-button type="primary" @click="cancelOA" :loading="cancelOALoading">确 定</el-button>
        <el-button type="primary" @click="submitOA" :loading="submitOALoading"
          >确 定</el-button
        >
      </span>
    </el-dialog>
    <el-dialog
@@ -102,408 +159,437 @@
      :close-on-click-modal="false"
      :visible.sync="insOrderVisible"
      @closed="resetInsOrderForm"
      width="50%">
      <el-row :gutter="20" style="margin-bottom:10px">
      @open="getListData"
      width="50%"
    >
      <el-row :gutter="20" style="margin-bottom: 10px">
        <el-col :span="12">
          <el-input clearable size="small" v-model="lotBatchNo" placeholder="请输入批次号"></el-input>
          <el-input
            clearable
            size="small"
            v-model="lotBatchNo"
            placeholder="请输入批次号"
          ></el-input>
        </el-col>
        <el-col :span="12">
          <el-button size="small" type="primary" @click="searchInsOrderList">搜索</el-button>
          <el-button size="small" type="primary" @click="searchInsOrderList"
            >搜索</el-button
          >
        </el-col>
      </el-row>
      <el-tabs v-model="activeName" @tab-click="searchInsOrderList">
        <el-tab-pane label="原材料下单" name="raw">
          <lims-table ref="rawInsOrderTable"
                      v-if="activeName==='raw'"
                      :tableData="insOrderDataList"
                      :column="insOrderTableDataColumn"
                      :isSelection="true"
                      :selectionSelectable="insOrderSelectable"
                      :handleSelectionChange="selectRawMethod"
                      :rowClassName="insOrderRowClassName"
                      @pagination="insOrderPageination"
                      :height="500"
                      :page="insOrderPage"
                      :tableLoading="insOrderTableLoading">
          <lims-table
            ref="rawInsOrderTable"
            v-if="activeName === 'raw'"
            :tableData="insOrderDataList"
            :column="insOrderTableDataColumn"
            :isSelection="true"
            :selectionSelectable="insOrderSelectable"
            :handleSelectionChange="handlerSelection"
            :rowClassName="insOrderRowClassName"
            @pagination="insOrderPageination"
            :height="500"
            :page="insOrderPage"
            :tableLoading="insOrderTableLoading"
          >
          </lims-table>
        </el-tab-pane>
        <el-tab-pane label="外购下单" name="wg">
          <lims-table ref="wgInsOrderTable"
                      v-if="activeName==='wg'"
                      :tableData="wgInsOrderDataList"
                      :column="wgInsOrderTableDataColumn"
                      :isSelection="true"
                      :selectionSelectable="insOrderSelectable"
                      :handleSelectionChange="selectWgMethod"
                      :rowClassName="insOrderRowClassName"
                      @pagination="wgInsOrderPageination"
                      :height="500"
                      :page="wgInsOrderPage"
                      :tableLoading="insOrderTableLoading">
          <lims-table
            ref="wgInsOrderTable"
            v-if="activeName === 'wg'"
            :tableData="wgInsOrderDataList"
            :column="wgInsOrderTableDataColumn"
            :isSelection="true"
            :selectionSelectable="insOrderSelectable"
            :handleSelectionChange="handlerSelection"
            :rowClassName="insOrderRowClassName"
            @pagination="wgInsOrderPageination"
            :height="500"
            :page="wgInsOrderPage"
            :tableLoading="insOrderTableLoading"
          >
          </lims-table>
        </el-tab-pane>
      </el-tabs>
      <span slot="footer" class="dialog-footer">
        <el-button @click="resetInsOrderForm">取 消</el-button>
        <el-button type="primary" @click="openAddUnqualifiedHandlerView">确 定</el-button>
        <el-button type="primary" @click="openAddUnqualifiedHandlerView"
          >确 定</el-button
        >
      </span>
    </el-dialog>
    <UnPassDialog ref="unPassDialog" v-if="unPassDialog"
                  :orderId="orderId"
                  @resetForm="resetForm1"
                  :unPassDialog="unPassDialog"></UnPassDialog>
    <OAProcess ref="OAProcess"
               :OAProcess="OAProcess"
               :isOldData="isOldData"
               @closeOAProcess="closeOAProcess"
               v-if="OAProcess"></OAProcess>
    <UnPassDialog
      ref="unPassDialog"
      v-if="unPassDialog"
      :selectOrderIds="selectOrderIds"
      @resetForm="resetForm1"
      :unPassDialog="unPassDialog"
    ></UnPassDialog>
    <OAProcess
      ref="OAProcess"
      :OAProcess="OAProcess"
      :isOldData="isOldData"
      @closeOAProcess="closeOAProcess"
      v-if="OAProcess"
    ></OAProcess>
  </div>
</template>
<script>
import {getIfsByAll} from "@/api/business/rawMaterialOrder";
import {  getIfsByAll as getIfsByWgAll } from "@/api/business/outsourcingFinishProductInspection";
import { getIfsByAll } from "@/api/business/rawMaterialOrder";
import { getIfsByAll as getIfsByWgAll } from "@/api/business/outsourcingFinishProductInspection";
import UnPassDialog from "./components/unPassDialog.vue";
import OAProcess from "./components/OAProcess.vue";
import limsTable from "@/components/Table/lims-table.vue";
import {deleteUnqualifiedHandler, page, pushOA,exportUnqualifiedHandler} from "@/api/business/unqualifiedHandler";
import {transformExcel} from '@/utils/file'
import {
  deleteUnqualifiedHandler,
  page,
  pushOA,
  exportUnqualifiedHandler,
  getList
} from "@/api/business/unqualifiedHandler";
import { transformExcel } from "@/utils/file";
export default {
  components: {
    limsTable,
    OAProcess,
    UnPassDialog,
  },
  dicts: ['material_prop_type','oa_workflow_state','categories_no_conformities','attribution_no_conformities'],
  dicts: [
    "material_prop_type",
    "oa_workflow_state",
    "categories_no_conformities",
    "attribution_no_conformities",
  ],
  data() {
    return {
      activeName: 'raw',
      lotBatchNo:null,
      insOrderVisible:false,
      insOrderTableLoading:false,
      insOrderDataList:[],
      insOrderTableDataColumn:[
      activeName: "raw",
      lotBatchNo: null,
      insOrderVisible: false,
      insOrderTableLoading: false,
      insOrderDataList: [],
      insOrderTableDataColumn: [
        {
          label: 'IFS域',
          prop: 'contract',
          width: '120px',
          dataType: 'tag',
          label: "IFS域",
          prop: "contract",
          width: "120px",
          dataType: "tag",
          formatData: (params) => {
            return params
            return params;
          },
          formatType: (params) => {
            if (params === 'ZTNS') {
              return ''
            } else if (params === 'KJNS') {
              return 'success'
            }else {
              return null
            if (params === "ZTNS") {
              return "";
            } else if (params === "KJNS") {
              return "success";
            } else {
              return null;
            }
          }
          },
        },
        { label: '委托编号', prop: 'entrustCode', width: "160px", },
        { label: "委托编号", prop: "entrustCode", width: "160px" },
        {
          dataType: 'tag',
          label: '检验状态',
          prop: 'inspectStatus',
          dataType: "tag",
          label: "检验状态",
          prop: "inspectStatus",
          formatData: (params) => {
            if (params == 0) {
              return '检验中'
              return "检验中";
            } else if (params == 1) {
              return '合格'
              return "合格";
            } else if (params == 2) {
              return '不合格'
              return "不合格";
            } else if (params == 3) {
              return '未下单'
              return "未下单";
            } else if (params == 4) {
              return '让步放行'
              return "让步放行";
            } else {
              return null
              return null;
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return 'warning'
              return "warning";
            } else if (params == 1) {
              return 'success'
              return "success";
            } else if (params == 2) {
              return 'danger'
              return "danger";
            } else if (params == 3) {
              return 'info'
              return "info";
            } else if (params == 4) {
              return ''
              return "";
            } else {
              return null
              return null;
            }
          }
          },
        },
        { label: '订单号', prop: 'orderNo' },
        { label: '抵达的采购数量', prop: 'purQtyInStore' ,width:'160' },
        { label: '下发时间', prop: 'sendTime',width:'160' },
        { label: '批号', prop: 'updateBatchNo',width:'160' },
        { label: '零件号', prop: 'partNo',width:'140' },
        { label: '零件描述', prop: 'partDesc' },
        { label: '供应商编码', prop: 'supplierId',width:'140' },
        { label: '供应商名称', prop: 'supplierName',width:'140' },
        { label: "订单号", prop: "orderNo" },
        { label: "抵达的采购数量", prop: "purQtyInStore", width: "160" },
        { label: "下发时间", prop: "sendTime", width: "160" },
        { label: "批号", prop: "updateBatchNo", width: "160" },
        { label: "零件号", prop: "partNo", width: "140" },
        { label: "零件描述", prop: "partDesc" },
        { label: "供应商编码", prop: "supplierId", width: "140" },
        { label: "供应商名称", prop: "supplierName", width: "140" },
        {
          dataType: 'tag',
          label: '免检',
          prop: 'isExemption',
          dataType: "tag",
          label: "免检",
          prop: "isExemption",
          formatData: (params) => {
            if (params == 1) {
              return '免检'
              return "免检";
            } else {
              return null
              return null;
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
              return "success";
            } else {
              return null
            }
          }
        },
        {
          label: '样品名称',
          prop: 'sampleName',
          width: "160px"
        },
        { label: '样品型号', prop: 'sampleModel' },
        { label: '检验人', prop: 'userName' },
        {
          label: '物料属性',
          prop: 'materialProp',
          formatData: (params) => {
            if (!params) return null
            for (let i = 0; i < this.dict.type.material_prop_type.length; i++) {
              const item = this.dict.type.material_prop_type[i]
              if (item.value == params) {
                return item.label
              }
            }
            return null
          }
        },
        {
          dataType: 'tag',
          label: '物料类型',
          prop: 'isExpire',
          formatData: (params) => {
            if (params == 1) {
              return '过期物料'
            } else {
              return null
              return null;
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'info'
            } else {
              return null
            }
          }
        },
        { label: '单位', prop: 'buyUnitMeas' },
        { label: '接收时间', prop: 'receiverDate',width:'160' },
        { label: '报检时间', prop: 'declareDate',width:'160' },
      ],
      insOrderPage:{
        total: 0,
        size: 20,
        current: 1
      },
      wgInsOrderTableDataColumn:[
        {
          label: 'IFS域',
          prop: 'contract',
          width: '120px',
          dataType: 'tag',
          formatData: (params) => {
            return params
          },
          formatType: (params) => {
            if (params === 'ZTNS') {
              return ''
            } else if (params === 'KJNS') {
              return 'success'
            }else {
              return null
            }
          }
        },
        { label: '委托编号', prop: 'entrustCode', width: "160px", },
        {
          dataType: 'tag',
          label: '检验状态',
          prop: 'inspectStatus',
          formatData: (params) => {
            if (params == 0) {
              return '检验中'
            } else if (params == 1) {
              return '合格'
            } else if (params == 2) {
              return '不合格'
            } else if (params == 3) {
              return '未下单'
            } else if (params == 4) {
              return '让步放行'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return 'warning'
            } else if (params == 1) {
              return 'success'
            } else if (params == 2) {
              return 'danger'
            } else if (params == 3) {
              return 'info'
            } else if (params == 4) {
              return ''
            } else {
              return null
            }
          }
        },
        { label: '订单号', prop: 'orderNo' },
        { label: '抵达的采购数量', prop: 'purQtyInStore', width: '130px' },
        { label: '下发时间', prop: 'sendTime', width: '130px' },
        { label: '批号', prop: 'updateBatchNo', width: '130px' },
        { label: '零件号', prop: 'partNo', width: '140px' },
        { label: '零件描述', prop: 'partDesc' },
        { label: '供应商名称', prop: 'supplierName' },
        {
          dataType: 'tag',
          label: '免检',
          prop: 'isExemption',
          formatData: (params) => {
            if (params == 1) {
              return '免检'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
            } else {
              return null
            }
          }
        },
        {
          label: '样品名称',
          prop: 'sampleName',
          label: "样品名称",
          prop: "sampleName",
          width: "160px",
        },
        { label: '样品型号', prop: 'sampleModel' },
        { label: '检验人', prop: 'userName' },
        { label: "样品型号", prop: "sampleModel" },
        { label: "检验人", prop: "userName" },
        {
          label: '物料属性',
          prop: 'materialProp',
          label: "物料属性",
          prop: "materialProp",
          formatData: (params) => {
            if (!params) return null
            if (!params) return null;
            for (let i = 0; i < this.dict.type.material_prop_type.length; i++) {
              const item = this.dict.type.material_prop_type[i]
              const item = this.dict.type.material_prop_type[i];
              if (item.value == params) {
                return item.label
                return item.label;
              }
            }
            return null
          }
            return null;
          },
        },
        {
          dataType: 'tag',
          label: '物料类型',
          prop: 'isExpire',
          dataType: "tag",
          label: "物料类型",
          prop: "isExpire",
          formatData: (params) => {
            if (params == 1) {
              return '过期物料'
              return "过期物料";
            } else {
              return null
              return null;
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'info'
              return "info";
            } else {
              return null
              return null;
            }
          }
          },
        },
        { label: '单位', prop: 'buyUnitMeas' },
        { label: '接收时间', prop: 'receiverDate' },
        { label: '报检时间', prop: 'declareDate' },
        { label: "单位", prop: "buyUnitMeas" },
        { label: "接收时间", prop: "receiverDate", width: "160" },
        { label: "报检时间", prop: "declareDate", width: "160" },
      ],
      wgInsOrderPage:{
      insOrderPage: {
        total: 0,
        size: 20,
        current: 1
        current: 1,
      },
      wgInsOrderTableLoading:false,
      wgInsOrderDataList:[],
      wgInsOrderTableDataColumn: [
        {
          label: "IFS域",
          prop: "contract",
          width: "120px",
          dataType: "tag",
          formatData: (params) => {
            return params;
          },
          formatType: (params) => {
            if (params === "ZTNS") {
              return "";
            } else if (params === "KJNS") {
              return "success";
            } else {
              return null;
            }
          },
        },
        { label: "委托编号", prop: "entrustCode", width: "160px" },
        {
          dataType: "tag",
          label: "检验状态",
          prop: "inspectStatus",
          formatData: (params) => {
            if (params == 0) {
              return "检验中";
            } else if (params == 1) {
              return "合格";
            } else if (params == 2) {
              return "不合格";
            } else if (params == 3) {
              return "未下单";
            } else if (params == 4) {
              return "让步放行";
            } else {
              return null;
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return "warning";
            } else if (params == 1) {
              return "success";
            } else if (params == 2) {
              return "danger";
            } else if (params == 3) {
              return "info";
            } else if (params == 4) {
              return "";
            } else {
              return null;
            }
          },
        },
        { label: "订单号", prop: "orderNo" },
        { label: "抵达的采购数量", prop: "purQtyInStore", width: "130px" },
        { label: "下发时间", prop: "sendTime", width: "130px" },
        { label: "批号", prop: "updateBatchNo", width: "130px" },
        { label: "零件号", prop: "partNo", width: "140px" },
        { label: "零件描述", prop: "partDesc" },
        { label: "供应商名称", prop: "supplierName" },
        {
          dataType: "tag",
          label: "免检",
          prop: "isExemption",
          formatData: (params) => {
            if (params == 1) {
              return "免检";
            } else {
              return null;
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return "success";
            } else {
              return null;
            }
          },
        },
        {
          label: "样品名称",
          prop: "sampleName",
          width: "160px",
        },
        { label: "样品型号", prop: "sampleModel" },
        { label: "检验人", prop: "userName" },
        {
          label: "物料属性",
          prop: "materialProp",
          formatData: (params) => {
            if (!params) return null;
            for (let i = 0; i < this.dict.type.material_prop_type.length; i++) {
              const item = this.dict.type.material_prop_type[i];
              if (item.value == params) {
                return item.label;
              }
            }
            return null;
          },
        },
        {
          dataType: "tag",
          label: "物料类型",
          prop: "isExpire",
          formatData: (params) => {
            if (params == 1) {
              return "过期物料";
            } else {
              return null;
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return "info";
            } else {
              return null;
            }
          },
        },
        { label: "单位", prop: "buyUnitMeas" },
        { label: "接收时间", prop: "receiverDate" },
        { label: "报检时间", prop: "declareDate" },
      ],
      wgInsOrderPage: {
        total: 0,
        size: 20,
        current: 1,
      },
      wgInsOrderTableLoading: false,
      wgInsOrderDataList: [],
      handlerId: null,
      contract:null,
      contract: null,
      groupId: null,
      entity: {
        contract: null,
        sample: null,
        specsModels: null,
        supplierName: null,
        feedbackDateTime:[],
        feedbackDateTime: [],
        materialProp: null,
        operation:null
        operation: null,
      },
      tableData: [],
      tableLoading: false,
      column: [
        {
          label: 'IFS域',
          prop: 'contract',
          width: '80px',
          dataType: 'tag',
          label: "IFS域",
          prop: "contract",
          width: "80px",
          dataType: "tag",
          formatData: (params) => {
            return params
            return params;
          },
          formatType: (params) => {
            if (params === 'ZTNS') {
              return ''
            } else if (params === 'KJNS') {
              return 'success'
            }else {
              return null
            if (params === "ZTNS") {
              return "";
            } else if (params === "KJNS") {
              return "success";
            } else {
              return null;
            }
          }
          },
        },
        { label: '编号', prop: 'no', width: "160px", },
        { label: "编号", prop: "no", width: "160px" },
        {
          label: "OA审核状态",
          prop: "operation",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            return params
            return params;
          },
          formatType: (params) => {
            if(params){
              this.dict.type.oa_workflow_state.forEach(item => {
                if(item.value === params){
                  params = item.raw.listClass
            if (params) {
              this.dict.type.oa_workflow_state.forEach((item) => {
                if (item.value === params) {
                  params = item.raw.listClass;
                }
              });
            }
            return params
            return params;
          },
        },
        { label: '订单号', prop: 'orderNo' },
        { label: "订单号", prop: "orderNo" },
        {
          label: "零件号",
          prop: "partNo",
@@ -511,388 +597,390 @@
          dataType: "link",
          linkMethod: "openUnPassDialog",
        },
        { label: '零件描述', prop: 'partDesc',width: "160px" },
        { label: "零件描述", prop: "partDesc", width: "160px" },
        {
          label: '物料属性',
          prop: 'materialProp',
          label: "物料属性",
          prop: "materialProp",
          formatData: (params) => {
            if (!params) return null
            if (!params) return null;
            for (let i = 0; i < this.dict.type.material_prop_type.length; i++) {
              const item = this.dict.type.material_prop_type[i]
              const item = this.dict.type.material_prop_type[i];
              if (item.value == params) {
                return item.label
                return item.label;
              }
            }
            return null
          }
            return null;
          },
        },
        { label: '物料名称', prop: 'materialName',width: "160px" },
        { label: '生产批次', prop: 'productionBatch',width: "160px" },
        { label: '到货数量', prop: 'cargoQuantity' },
        { label: '规格型号', prop: 'specsModels',width:'140' },
        { label: '报检日期', prop: 'inspectTime',width:'120' },
        { label: '状态', prop: 'statusDB' },
        { label: '反馈人', prop: 'feedbackUser' },
        { label: '要检验的采购数量', prop: 'qtyToInspect',width: "140px" },
        { label: '反馈日期', prop: 'feedbackTime',width: "100px" },
        { label: "物料名称", prop: "materialName", width: "160px" },
        { label: "生产批次", prop: "productionBatch", width: "160px" },
        { label: "到货数量",prop: "cargoQuantity"},
        { label: "采购单位",prop: "buyUnitMeas"},
        { label: "规格型号", prop: "specsModels", width: "140" },
        { label: "报检日期", prop: "inspectTime", width: "120" },
        { label: "状态", prop: "statusDB" },
        { label: "反馈人", prop: "feedbackUser" },
        { label: "要检验的采购数量", prop: "qtyToInspect", width: "140px" },
        { label: "反馈日期", prop: "feedbackTime", width: "100px" },
        {
          label: "分类",
          prop: "classification",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            let label = null
            this.dict.type.categories_no_conformities.forEach(item=>{
              if(item.raw.dictValue==params){
                label = item.raw.dictLabel
            let label = null;
            this.dict.type.categories_no_conformities.forEach((item) => {
              if (item.raw.dictValue == params) {
                label = item.raw.dictLabel;
              }
            })
            return label
            });
            return label;
          },
          formatType: (params) => {
            let type = null
            this.dict.type.categories_no_conformities.forEach(item=>{
              if(item.raw.dictValue==params){
                type =  item.raw.listClass
            let type = null;
            this.dict.type.categories_no_conformities.forEach((item) => {
              if (item.raw.dictValue == params) {
                type = item.raw.listClass;
              }
            })
            return type
            });
            return type;
          },
        },
        { label: '供应商编码', prop: 'supplierId',width:'140' },
        { label: '供应商名称', prop: 'supplierName',width:'140' },
        { label: "供应商编码", prop: "supplierId", width: "140" },
        { label: "供应商名称", prop: "supplierName", width: "140" },
        {
          label: "不合格归属",
          prop: "offGradeAscription",
          width: "120px",
          dataType: "tag",
          formatData: (params) => {
            let label = params
            this.dict.type.attribution_no_conformities.forEach(item=>{
              if(item.raw.dictValue==params){
                label = item.raw.dictLabel
            let label = params;
            this.dict.type.attribution_no_conformities.forEach((item) => {
              if (item.raw.dictValue == params) {
                label = item.raw.dictLabel;
              }
            })
            return label
            });
            return label;
          },
          formatType: (params) => {
            let type = null
            this.dict.type.attribution_no_conformities.forEach(item=>{
              if(item.raw.dictValue==params){
                type = item.raw.listClass
            let type = null;
            this.dict.type.attribution_no_conformities.forEach((item) => {
              if (item.raw.dictValue == params) {
                type = item.raw.listClass;
              }
            })
            return type
            });
            return type;
          },
        },
        { label: '不合格描述', prop: 'unqualifiedDesc',width: "160px" },
        { label: "不合格描述", prop: "unqualifiedDesc", width: "160px" },
        {
          dataType: 'action',
          fixed: 'right',
          label: '操作',
          width: '220px',
          dataType: "action",
          fixed: "right",
          label: "操作",
          prop:'groupId',
          mergeCol:true,
          width: "220px",
          operation: [
            {
              name: (row)=>{
                return row.requestId !== null && row.operation==='退回' ? '重新提交' : '提交OA'
              name: (row) => {
                return row.requestId !== null && row.operation === "退回"
                  ? "重新提交"
                  : "提交OA";
              },
              type: 'text',
              type: "text",
              clickFun: (row) => {
                this.openOA(row);
              },
              disabled: (row, index) => {
                return row.requestId !== null && row.operation!=='退回'  // 有requestId说明已经提交过OA,不可再次提交
              }
                return row.requestId !== null && row.operation !== "退回"; // 有requestId说明已经提交过OA,不可再次提交
              },
            },
            {
              name: '查看OA流程',
              type: 'text',
              name: "查看OA流程",
              type: "text",
              clickFun: (row) => {
                this.OAView(row);
              },
            },
            {
              name: '删除',
              type: 'text',
              name: "删除",
              type: "text",
              clickFun: (row) => {
                this.deleteOA(row);
              },
              disabled: (row, index) => {
                return row.requestId !== null && row.operation!=='退回'  // 有requestId说明已经提交过OA,不可再次提交
              }
                return row.requestId !== null && row.operation !== "退回"; // 有requestId说明已经提交过OA,不可再次提交
              },
            },
          ]
        }
          ],
        },
      ],
      page: {
        total: 0,
        size: 20,
        current: 1
        current: 1,
      },
      statusList: [],
      dialogVisible: false, // 确认提交OA弹框
      unPassDialog: false, // 不合格处理弹框
      orderId: '',
      selectOrderIds: [],
      multipleSelection: [],
      OAProcess: false, // OA流程弹框
      submitOALoading: false, // OA流程弹框提交按钮loading
      deleteVisible: false, // OA流程删除弹框
      cancelOALoading: false, // OA流程删除弹框提交按钮loading
      exportLoading:false,
      isOldData: true,//是否是旧数据
      exportLoading: false,
      isOldData: true, //是否是旧数据
      insOrderIds: [],
      rowColSplitNodes: [],
    };
  },
  mounted() {
    this.refreshTable()
    this.refreshTable();
  },
  methods: {
    getInsOrderRowId(row) {
      if (!row) {
        return ''
      }
      const currentId = row.enterOrderId || row.insOrderId || row.orderId || row.id
      return currentId ? String(currentId) : ''
    },
    getExistingInsOrderIds() {
      const ids = new Set()
      this.tableData.forEach(row => {
        ['insOrderId'].forEach(key => {
          if (row[key] !== undefined && row[key] !== null && row[key] !== '') {
            ids.add(String(row[key]))
          }
        })
    getListData(){
      getList().then(res => {
        this.insOrderIds = [];
        if(res.code === 200){
          this.insOrderIds = res.data;
        }
      }).catch(err => {
        console.error(err)
      })
      return ids
    },
    isDisabledInsOrderRow(row) {
      const currentId = this.getInsOrderRowId(row)
      if (!currentId) {
        return false
      }
      return this.getExistingInsOrderIds().has(currentId)
    },
    insOrderSelectable(row) {
      return !this.isDisabledInsOrderRow(row)
      const existsInMain = this.insOrderIds.some(
        (id) => id === row.enterOrderId
      );
      return !existsInMain;
    },
    insOrderRowClassName({ row }) {
      return this.isDisabledInsOrderRow(row) ? 'disabled-selection-row' : ''
      const existsInMain = this.insOrderIds.some(
        (id) => id === row.enterOrderId
      );
      return existsInMain ? "disabled-selection-row" : "";
    },
    resetInsOrderForm(){
      this.activeName = 'raw'
      this.insOrderDataList = []
      this.wgInsOrderDataList = []
      this.lotBatchNo = null
      this.orderId = ''
    resetInsOrderForm() {
      this.activeName = "raw";
      this.insOrderDataList = [];
      this.wgInsOrderDataList = [];
      this.lotBatchNo = null;
      this.multipleSelection = [];
      this.insOrderPage = {
        total: 0,
        size: 20,
        current: 1,
      }
      };
      this.wgInsOrderPage = {
        total: 0,
        size: 20,
        current: 1,
      }
      this.$nextTick(()=>{
        this.insOrderVisible = false
      })
      };
      this.$nextTick(() => {
        this.insOrderVisible = false;
      });
    },
    openInsOrderDialog(){
      this.insOrderVisible = true
    openInsOrderDialog() {
      this.insOrderVisible = true;
    },
    searchInsOrderList(){
      this.insOrderTableLoading = true
    searchInsOrderList() {
      this.multipleSelection = [];
      this.insOrderTableLoading = true;
      const params = {
        updateBatchNo: this.lotBatchNo,
        isInspect: 1,
      }
      if(this.activeName==='raw'){
        getIfsByAll({...params,...this.insOrderPage}).then(res => {
          this.insOrderTableLoading = false
          if (res.code === 200) {
            this.insOrderDataList = res.data.records
            this.insOrderPage.total = res.data.total
          }
        }).catch(err => {
          this.insOrderTableLoading = false
        })
      }else if(this.activeName==='wg'){
        getIfsByWgAll({...params,...this.wgInsOrderPage}).then(res => {
          this.insOrderTableLoading = false
          if (res.code === 200) {
            this.wgInsOrderDataList = res.data.records
            this.wgInsOrderPage.total = res.data.total
          }
        }).catch(err => {
          this.insOrderTableLoading = false
        })
      };
      if (this.activeName === "raw") {
        getIfsByAll({ ...params, ...this.insOrderPage })
          .then((res) => {
            this.insOrderTableLoading = false;
            if (res.code === 200) {
              this.insOrderDataList = res.data.records;
              this.insOrderPage.total = res.data.total;
            }
          })
          .catch((err) => {
            this.insOrderTableLoading = false;
          });
      } else if (this.activeName === "wg") {
        getIfsByWgAll({ ...params, ...this.wgInsOrderPage })
          .then((res) => {
            this.insOrderTableLoading = false;
            if (res.code === 200) {
              this.wgInsOrderDataList = res.data.records;
              this.wgInsOrderPage.total = res.data.total;
            }
          })
          .catch((err) => {
            this.insOrderTableLoading = false;
          });
      }
    },
    insOrderPageination(page){
      this.insOrderPage.size = page.limit
      this.searchInsOrderList()
    insOrderPageination(page) {
      this.insOrderPage.size = page.limit;
      this.searchInsOrderList();
    },
    wgInsOrderPageination(page){
      this.wgInsOrderPage.size = page.limit
      this.searchInsOrderList()
    wgInsOrderPageination(page) {
      this.wgInsOrderPage.size = page.limit;
      this.searchInsOrderList();
    },
    selectRawMethod(val){
    handlerSelection(val) {
      if (!val || val.length === 0) {
        this.orderId = ''
        return
      }
      const currentRow = val[val.length - 1]
      this.orderId = this.getInsOrderRowId(currentRow)
      if (val.length > 1 && this.$refs.rawInsOrderTable && this.$refs.rawInsOrderTable.$refs.multipleTable) {
        this.$refs.rawInsOrderTable.$refs.multipleTable.clearSelection()
        this.$refs.rawInsOrderTable.$refs.multipleTable.toggleRowSelection(currentRow, true)
      }
    },
    selectWgMethod(val){
      if (!val || val.length === 0) {
        this.orderId = ''
        return
      }
      const currentRow = val[val.length - 1]
      this.orderId = this.getInsOrderRowId(currentRow)
      if (val.length > 1 && this.$refs.wgInsOrderTable && this.$refs.wgInsOrderTable.$refs.multipleTable) {
        this.$refs.wgInsOrderTable.$refs.multipleTable.clearSelection()
        this.$refs.wgInsOrderTable.$refs.multipleTable.toggleRowSelection(currentRow, true)
      }
    },
    //打开新增不合格处理弹框
    openAddUnqualifiedHandlerView(){
      if(!this.orderId){
        this.$message.warning("请选择一条订单记录")
        this.multipleSelection = [];
        return;
      }
      this.multipleSelection = val
    },
    //打开新增不合格处理弹框
    openAddUnqualifiedHandlerView() {
      if (!this.multipleSelection || this.multipleSelection.length === 0) {
        this.$message.warning("请至少选择一条订单记录");
        return;
      }
      const contracts = [...new Set(this.multipleSelection.map(item=>{return item.contract}))]
      if(contracts && contracts.length>1){
        this.$message.warning("请选择相同IFS域的订单");
        return;
      }
      const partNos = [...new Set(this.multipleSelection.map(item=>{return item.partNo}))]
      if(partNos && partNos.length>1){
        this.$message.warning("请选择相同零件的订单");
        return;
      }
      this.selectOrderIds = this.multipleSelection.map(item=>{return item.enterOrderId})
      this.insOrderVisible = false
      this.unPassDialog = true;
      this.$nextTick(() => {
        this.$refs.unPassDialog.getInsOrder('add');
        this.$refs.unPassDialog.getInsOrder("add");
      });
    },
    exportUnqualifiedHandler(){
      this.exportLoading = true
      const newEntity = { ...this.entity }
    exportUnqualifiedHandler() {
      this.exportLoading = true;
      const newEntity = { ...this.entity };
      if (newEntity.feedbackDateTime && newEntity.feedbackDateTime.length > 0) {
        newEntity.feedbackStartTime = newEntity.feedbackDateTime[0]
        newEntity.feedbackEndTime = newEntity.feedbackDateTime[1]
        newEntity.feedbackStartTime = newEntity.feedbackDateTime[0];
        newEntity.feedbackEndTime = newEntity.feedbackDateTime[1];
      }
      exportUnqualifiedHandler({...newEntity}).then(res=>{
        transformExcel(res,'不合格处理记录.xlsx')
        this.exportLoading = false
      }).catch(error=>{
        console.error(error)
      })
      exportUnqualifiedHandler({ ...newEntity })
        .then((res) => {
          transformExcel(res, "不合格处理记录.xlsx");
          this.exportLoading = false;
        })
        .catch((error) => {
          console.error(error);
        });
    },
    refreshTable() {
      this.tableLoading = true
      const newEntity = { ...this.entity }
      this.tableLoading = true;
      const newEntity = { ...this.entity };
      if (newEntity.feedbackDateTime && newEntity.feedbackDateTime.length > 0) {
        newEntity.feedbackStartTime = newEntity.feedbackDateTime[0]
        newEntity.feedbackEndTime = newEntity.feedbackDateTime[1]
        newEntity.feedbackStartTime = newEntity.feedbackDateTime[0];
        newEntity.feedbackEndTime = newEntity.feedbackDateTime[1];
      }
      page({ ...this.page, ...newEntity }).then(res => {
        this.tableLoading = false
        this.tableData = res.data.records
        this.page.total = res.data.total
      }).catch(err => {
        this.tableLoading = false
      })
      page({ ...this.page, ...newEntity })
        .then((res) => {
          this.tableLoading = false;
          this.tableData = res.data.records;
          this.page.total = res.data.total;
        })
        .catch((err) => {
          this.tableLoading = false;
        });
    },
    // 重置
    refresh() {
      this.resetForm('entity')
      this.refreshTable()
      this.resetForm("entity");
      this.refreshTable();
    },
    // 分页切换
    pagination(page) {
      this.page.size = page.limit
      this.refreshTable()
      this.page.size = page.limit;
      this.refreshTable();
    },
    // 打开不合格处理弹框
    openUnPassDialog (row) {
      this.unPassDialog = true
    openUnPassDialog(row) {
      this.unPassDialog = true;
      this.$nextTick(() => {
        this.$refs.unPassDialog.getInsOrder('view', row)
      })
    },
    // 关闭不合格处理弹框
    resetForm1 () {
      this.$refs.unPassDialog.$refs['unPassForm'].resetFields();
      this.unPassDialog = false
      this.$nextTick(()=>{
        this.refreshTable('page')
      })
    },
    // 打开删除OA确认弹框
    deleteOA (row) {
      this.handlerId = row.handlerId
      this.deleteVisible = true
    },
    // 提交删除申请
    cancelOA () {
      this.de = true
      deleteUnqualifiedHandler({id: this.handlerId,}).then(res => {
        this.cancelOALoading = false
        if (res.code === 200) {
          this.deleteVisible = false
          this.$message.success('删除成功')
          this.refreshTable('page')
        }
      }).catch(error => {
        this.cancelOALoading = false
        console.error(error);
        this.$refs.unPassDialog.getInsOrder("view", row);
      });
    },
    // 关闭不合格处理弹框
    resetForm1() {
      this.$refs.unPassDialog.$refs["unPassForm"].resetFields();
      this.unPassDialog = false;
      this.$nextTick(() => {
        this.refreshTable("page");
      });
    },
    // 删除OA确认弹框
    deleteOA(row) {
      this.$confirm('是否确认删除当前OA流程?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteUnqualifiedHandler({ groupId: row.groupId })
          .then((res) => {
            if (res.code === 200) {
              this.$message.success("删除成功");
              this.refreshTable("page");
            }
          })
          .catch((error) => {
            console.error(error);
          });
      }).catch(() => { });
    },
    // 查看提交OA的数据
    openOA (row) {
      this.handlerId = row.handlerId
      this.contract = row.contract
      if(row && row.requestId !== null  ){
    openOA(row) {
      this.handlerId = row.handlerId;
      this.contract = row.contract;
      this.groupId = row.groupId;
      if (row && row.requestId !== null) {
        // 重新提交OA,打开编辑弹框
        this.unPassDialog = true
        this.unPassDialog = true;
        this.$nextTick(() => {
          this.$refs.unPassDialog.getInsOrder('resubmit', row)
        })
      }else{
        this.dialogVisible = true
          this.$refs.unPassDialog.getInsOrder("resubmit", row);
        });
      } else {
        this.dialogVisible = true;
      }
    },
    // 查看OA流程
    OAView (row) {
      this.OAProcess = true
      this.isOldData = row.isOldData
    OAView(row) {
      this.OAProcess = true;
      this.isOldData = row.isOldData;
      this.$nextTick(() => {
        this.$refs.OAProcess.getInfo(row.handlerId,row?row.unqualifiedDesc:"")
      })
        this.$refs.OAProcess.getInfo(
          row.handlerId,
          row ? row.unqualifiedDesc : "",
          row.classification
        );
      });
    },
    // 关闭查看OA流程的弹框
    closeOAProcess () {
      this.OAProcess = false
    closeOAProcess() {
      this.OAProcess = false;
    },
    //提交OA
    submitOA(row) {
      // 提交OA
      this.submitOALoading = true
      pushOA({handlerId: this.handlerId,contract:this.contract}).then(res => {
        this.submitOALoading = false
        if (res.code === 200) {
          this.dialogVisible = false
          this.$message.success('提交成功')
          this.refreshTable('page')
        }
      }).catch(error => {
        this.submitOALoading = false
        console.error(error);
      });
    }
  }
      this.submitOALoading = true;
      pushOA({ handlerId: this.handlerId, contract: this.contract,groupId: this.groupId })
        .then((res) => {
          this.submitOALoading = false;
          if (res.code === 200) {
            this.dialogVisible = false;
            this.$message.success("提交成功");
            this.refreshTable("page");
          }
        })
        .catch((error) => {
          this.submitOALoading = false;
          console.error(error);
        });
    },
  },
};
</script>