gaoluyang
2025-03-18 18c2ed01fc7af3738fdc570aaa6ee97700fdb618
src/components/do/b1-inspect-order-plan/Inspection.vue
@@ -1,286 +1,329 @@
<style scoped>
.custom-table .el-table__header-wrapper th {
  background-color: #87CEEB; /* 只对带有my-custom-table类的表格生效 */
  background-color: #87ceeb;
  /* 只对带有my-custom-table类的表格生效 */
  color: #fff;
}
 .container {
    overflow: auto; /* 确保容器能包裹浮动元素 */
    margin-bottom: 10px;
.container {
  overflow: auto;
  /* 确保容器能包裹浮动元素 */
  margin-bottom: 10px;
}
.right-button {
    float: right;
  float: right;
}
  .inspection {
    height: 100%;
    overflow-y: auto;
  }
  .inspection::-webkit-scrollbar {
    width: 0;
  }
.inspection {
  height: 100%;
  overflow-y: auto;
}
  .title {
    height: 60px;
    line-height: 60px;
  }
.inspection::-webkit-scrollbar {
  width: 0;
}
  .search {
    width: 100%;
    margin-bottom: 10px;
    background-color: #fff;
    border-radius: 3px;
  }
.title {
  height: 60px;
  line-height: 60px;
}
  .search .form-inline {
    padding-top: 20px;
    padding-left: 0px;
    text-align: left;
  }
.search {
  width: 100%;
  margin-bottom: 10px;
  background-color: #fff;
  border-radius: 3px;
}
  .center {
    width: calc(100% - 40px);
    /* max-height: 580px; */
    background-color: #fff;
    border-radius: 3px;
    padding: 20px;
    overflow: auto;
  }
.search .form-inline {
  padding-top: 20px;
  padding-left: 0px;
  text-align: left;
}
  .center-box {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    flex-wrap: wrap;
    width: 100%;
    overflow-x: hidden;
    /* overflow-x: scroll; */
    cursor: grab;
  }
.center {
  width: calc(100% - 40px);
  /* max-height: 580px; */
  background-color: #fff;
  border-radius: 3px;
  padding: 20px;
  overflow: auto;
}
  .center-box:active{
    cursor: grabbing;
  }
.center-box {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  flex-wrap: wrap;
  width: 100%;
  overflow-x: hidden;
  /* overflow-x: scroll; */
  cursor: grab;
}
  .tables {
    table-layout: fixed;
    margin: 5px 5px 16px;
  }
.center-box:active {
  cursor: grabbing;
}
  .tables td {
    height: 40px;
    width: 100px;
    text-align: center;
    font-size: 14px;
    word-wrap: break-word;
    white-space: normal;
  }
  .thermal-table{
    min-width: calc(100% - 10px);
    margin: 5px 5px 0;
    table-layout: fixed;
  }
  .thermal-table td {
    min-width: 70px;
    text-align: center;
    font-size: 14px;
    word-wrap: break-word;
    white-space: normal;
    padding: 5px;
  }
  .table-container {
      overflow-x: auto; /* 使容器支持横向滚动 */
      max-width: 100%;  /* 限制容器的最大宽度 */
      margin-bottom: 16px;
  }
.tables {
  table-layout: fixed;
  margin: 5px 5px 16px;
}
  .content {
    display: flex;
    height: 100%;
    align-items: center;
    justify-content: left;
    padding: 5px;
    box-sizing: border-box;
    overflow: hidden;
    user-select: none;
  }
.tables td {
  height: 40px;
  width: 100px;
  text-align: center;
  font-size: 14px;
  word-wrap: break-word;
  white-space: normal;
}
  .content *{
    user-select: none;
  }
.thermal-table {
  min-width: calc(100% - 10px);
  margin: 5px 5px 0;
  table-layout: fixed;
}
  .content-h-0 {
    justify-content: center;
  }
.thermal-table td {
  min-width: 70px;
  text-align: center;
  font-size: 14px;
  word-wrap: break-word;
  white-space: normal;
  padding: 5px;
}
  .content-h-1 {
    justify-content: start;
  }
.table-container {
  overflow-x: auto;
  /* 使容器支持横向滚动 */
  max-width: 100%;
  /* 限制容器的最大宽度 */
  margin-bottom: 16px;
}
  .content-h-2 {
    justify-content: end;
  }
.content {
  display: flex;
  height: 100%;
  align-items: center;
  justify-content: left;
  padding: 5px;
  box-sizing: border-box;
  overflow: hidden;
  user-select: none;
}
  .content-v-0 {
    align-items: center;
  }
.content * {
  user-select: none;
}
  .content-v-1 {
    align-items: start;
  }
.content-h-0 {
  justify-content: center;
}
  .content-v-2 {
    align-items: end;
  }
.content-h-1 {
  justify-content: start;
}
  .table_input {
    width: 100%;
    height: 100%;
  }
  .table_input >>>.el-input__inner{
    border-color: rgba(0, 0, 0, 0.5) !important;
  }
.content-h-2 {
  justify-content: end;
}
  .collection {
    width: 50px;
    height: 100%;
    margin-left: 5px;
    border-color: transparent;
    background-color: #409eff;
    color: #fff;
    border-radius: 4px;
    font-size: 12px;
  }
.content-v-0 {
  align-items: center;
}
  .collection:active {
    opacity: .7;
  }
  .table_caret{
    font-size: 16px;
    margin: 0 5px;
    color: rgba(0, 0, 0, 0.5);
  }
  .table_caret:hover{
    color: #409eff;
    cursor: pointer;
  }
.content-v-1 {
  align-items: start;
}
  .table_caret:active{
    opacity: .8;
  }
  >>>input::-webkit-inner-spin-button {
    -webkit-appearance: none !important;  /* 隐藏微调按钮 */
    margin: 0 !important;  /* 移除微调按钮的边距 */
  }
.content-v-2 {
  align-items: end;
}
  >>>input[type=number] {
      -moz-appearance: textfield !important;  /* 针对 Firefox */
  }
  >>>.el-form-item__content{
    display: inline-flex;
    align-items: center;
  }
  .history-btn{
    display: flex;
    align-items: center;
  }
  .noShow{
    opacity: 0;
  }
.table_input {
  width: 100%;
  height: 100%;
}
.table_input>>>.el-input__inner {
  border-color: rgba(0, 0, 0, 0.5) !important;
}
.collection {
  width: 50px;
  height: 100%;
  margin-left: 5px;
  border-color: transparent;
  background-color: #409eff;
  color: #fff;
  border-radius: 4px;
  font-size: 12px;
}
.collection:active {
  opacity: 0.7;
}
.table_caret {
  font-size: 16px;
  margin: 0 5px;
  color: rgba(0, 0, 0, 0.5);
}
.table_caret:hover {
  color: #409eff;
  cursor: pointer;
}
.table_caret:active {
  opacity: 0.8;
}
>>>input::-webkit-inner-spin-button {
  -webkit-appearance: none !important;
  /* 隐藏微调按钮 */
  margin: 0 !important;
  /* 移除微调按钮的边距 */
}
>>>input[type="number"] {
  -moz-appearance: textfield !important;
  /* 针对 Firefox */
}
>>>.el-form-item__content {
  display: inline-flex;
  align-items: center;
}
.history-btn {
  display: flex;
  align-items: center;
}
.noShow {
  opacity: 0;
}
</style>
<style>
  .inspection .el-form-item__label {
    color: #000;
  }
.inspection .el-form-item__label {
  color: #000;
}
  .inspection .el-drawer__header::before {
    content: "";
    display: inline-block;
    width: 4px;
    height: 30.24px;
    background: #3A7BFA;
    border-radius: 10px;
    margin-left: 32px;
    margin-right: 8.5px;
  }
.inspection .el-drawer__header::before {
  content: "";
  display: inline-block;
  width: 4px;
  height: 30.24px;
  background: #3a7bfa;
  border-radius: 10px;
  margin-left: 32px;
  margin-right: 8.5px;
}
  .inspection .el-drawer__header {
    color: #303133;
    text-align: left;
  }
.inspection .el-drawer__header {
  color: #303133;
  text-align: left;
}
  .inspection .el-input-group__append {
    padding: 0 14px;
    color: #3A7BFA;
    background-color: #fff;
    height: 100%;
    display: flex;
    align-items: center;
  }
.inspection .el-input-group__append {
  padding: 0 14px;
  color: #3a7bfa;
  background-color: #fff;
  height: 100%;
  display: flex;
  align-items: center;
}
  .inspection .center-box .el-input__inner {
    font-size: 12px;
    padding: 0 6px;
    text-align: center;
  }
.inspection .center-box .el-input__inner {
  font-size: 12px;
  padding: 0 6px;
  text-align: center;
}
  .inspection .el-textarea__inner {
    padding: 2px;
  }
.inspection .el-textarea__inner {
  padding: 2px;
}
  .inspection .el-textarea__inner::-webkit-scrollbar {
    width: 0;
  }
.inspection .el-textarea__inner::-webkit-scrollbar {
  width: 0;
}
  .inspection .el-select {
    display: flex;
    align-items: center;
  }
.inspection .el-select {
  display: flex;
  align-items: center;
}
  .inspection .el-textarea__inner {
    min-height: 100% !important;
  }
.inspection .el-textarea__inner {
  min-height: 100% !important;
}
  .inspection .tables .el-input{
    display: flex;
    align-items: center;
  }
  .thermal-table .el-input{
    display: flex;
    align-items: center;
  }
  .custom-dialog .el-dialog__body {
    max-width: 1000px; /* 设置最大宽度 */
  }
.inspection .tables .el-input {
  display: flex;
  align-items: center;
}
.thermal-table .el-input {
  display: flex;
  align-items: center;
}
.custom-dialog .el-dialog__body {
  max-width: 1000px;
  /* 设置最大宽度 */
}
</style>
<template>
  <div v-loading="loading" class="inspection">
    <el-row class="title">
      <el-col :span="12" style="padding-left: 20px;text-align: left;" :class="{noShow:noBack}">检验单详情
      <el-col :span="12" style="padding-left: 20px;text-align: left;" :class="{ noShow: noBack }">检验单详情
      </el-col>
      <el-col :span="12" style="text-align: right;display: flex;align-items: center;justify-content: end">
        <el-button size="small" type="primary" @click="versionDialogVisible=true" v-if="state==1&&tableLists.find(m=>m.templateId==currentTable)&&tableLists.find(m=>m.templateId==currentTable).templateName.includes('电路试验')">电调/非电调模板切换</el-button>
        <el-select v-model="template" size="medium" placeholder="电路预设模板" style="margin-right: 10px;margin-left: 10px;" v-if="state==1&&tableLists.find(m=>m.templateId==currentTable)&&tableLists.find(m=>m.templateId==currentTable).templateName.includes('电路试验')"
          @change="selectInsProductTemplateById">
      <el-col :span="12" style="text-align: right;display: flex;align-items: center;justify-content: end;height: 60px;">
        <el-button size="small" type="primary" @click="versionDialogVisible = true" v-if="
          state == 1 &&
          tableLists.find(m => m.templateId == currentTable) &&
          tableLists
            .find(m => m.templateId == currentTable)
            .templateName.includes('电路试验') &&
          insOrder.sampleType != '无源器件'
        ">电调/非电调模板切换</el-button>
        <el-select v-model="template" size="medium" placeholder="电路预设模板" style="margin-right: 10px;margin-left: 10px;"
          v-if="
            state == 1 &&
            tableLists.find(m => m.templateId == currentTable) &&
            tableLists
              .find(m => m.templateId == currentTable)
              .templateName.includes('电路试验')
          " @change="selectInsProductTemplateById">
          <el-option v-for="(a, ai) in templates" :key="ai" :value="a.id" :label="a.name">
            <span style="float: left">{{ a.name }}</span>
            <i class="el-icon-delete" style="float: right; color: #66b1ff; font-size: 16px;line-height: 34px;"
              @click.stop="handleDelete(a)" v-if="addInsProductTemplatePower"></i>
          </el-option>
        </el-select>
        <el-button size="medium" @click="templateDia=true" v-if="state==1&&tableLists.find(m=>m.templateId==currentTable)&&tableLists.find(m=>m.templateId==currentTable).templateName.includes('电路试验')&&addInsProductTemplatePower">
            <span style="color: #3A7BFA;">保存模板</span>
          </el-button>
        <el-button size="small" type="primary" @click="sampleVisible=true;uploadSample()">样品切换</el-button>
        <el-button size="small" type="primary" @click="taskVisible=true" v-show="!isLook">任务切换</el-button>
        <el-button size="small" type="primary" @click="handleSubmit" v-if="state==1"
        <el-button size="medium" @click="templateDia = true" v-if="
          state == 1 &&
          tableLists.find(m => m.templateId == currentTable) &&
          tableLists
            .find(m => m.templateId == currentTable)
            .templateName.includes('电路试验') &&
          addInsProductTemplatePower
        ">
          <span style="color: #3A7BFA;">保存模板</span>
        </el-button>
        <!-- <el-button size="small" type="primary" @click="sampleVisible=true;uploadSample()">样品切换</el-button> -->
        <el-button size="small" type="primary" @click="taskVisible = true" v-show="!isLook">任务切换</el-button>
        <el-button size="small" type="primary" @click="handleSubmit" v-if="state == 1"
          :loading="submitLoading">提交</el-button>
        <!-- 复核 -->
        <el-button size="small" type="primary" @click="upInsReview(1,'继续试验')" :loading="reviewLoading"
          v-if="state>1&&!isLook">继续试验</el-button>
        <!-- <el-button size="small" type="primary" @click="upInsReview(1,'继续试验')" :loading="reviewLoading"
          v-if="state>1&&!isLook">继续测试下一个样品</el-button>
        <el-button size="small" @click="upInsReview(0,'再次试验')" v-if="state>1&&!isLook" type="danger">再次试验</el-button>
        <el-button size="small" @click="upInsReview(2,'结束试验')" v-if="state>1&&!isLook">结束试验</el-button>
        <el-button size="small" @click="upInsReview(2,'结束试验')" v-if="state>1&&!isLook">此委托单结束</el-button> -->
        <el-button size="small" type="primary" @click="upInsReviewDia = true" v-if="state > 1 && !isLook">复核</el-button>
        <el-button size="small" @click="handleBack" v-if="!noBack">返回</el-button>
      </el-col>
    </el-row>
@@ -291,17 +334,22 @@
        </el-form-item>
        <el-form-item label="样品编号:">
          <el-tooltip :disabled="!currentSample.sampleCode" :content="currentSample.sampleCode">
            <el-input clearable v-model="currentSample.sampleCode" disabled size="small" placeholder="请输入" tooltip></el-input>
            <el-input clearable v-model="currentSample.sampleCode" disabled size="small" placeholder="请输入"
              tooltip></el-input>
          </el-tooltip>
        </el-form-item>
        <el-form-item label="样品名称:">
          <el-input clearable v-model="currentSample.sample" disabled size="small" placeholder="请输入"></el-input>
        </el-form-item>
        <el-form-item label="样品数量:">
          <el-input clearable v-model="sampleProduct.length" disabled size="small" placeholder="请输入" ></el-input>
          <el-input clearable v-model="sampleProduct.length" disabled size="small" placeholder="请输入"></el-input>
        </el-form-item>
        <el-form-item label="试验标准:">
          <span>{{ currentSample.testRequirements?currentSample.testRequirements:'-' }}</span>
          <span>{{
            currentSample.testRequirements
              ? currentSample.testRequirements
              : "-"
          }}</span>
        </el-form-item>
        <el-form-item label="下发时间:">
          <el-input clearable v-model="insOrder.sendTime" disabled size="small" placeholder="请输入"></el-input>
@@ -316,20 +364,29 @@
          <el-tag v-if="currentKey">{{ `NO.${currentKey}` }}</el-tag>
        </el-form-item>
        <el-form-item label="" v-if="insOrder.rule">
          <el-tag>{{ !insOrder.rule.includes('不考虑不确定度')?insOrder.rule.split('-')[0]+' '+insOrder.rule.split('-')[1]+'%':insOrder.rule }}</el-tag>
          <el-tag>{{
            !insOrder.rule.includes("不考虑不确定度")
              ? insOrder.rule.split("-")[0] +
              " " +
              insOrder.rule.split("-")[1] +
              "%"
              : insOrder.rule
          }}</el-tag>
        </el-form-item>
        <el-form-item label="备注:">
          <span style="color:red">{{ insOrder.remark?insOrder.remark:'-' }}</span>
          <span style="color:red">{{
            insOrder.remark ? insOrder.remark : "-"
          }}</span>
        </el-form-item>
      </el-form>
    </div>
    <div class="center">
      <div class="search" style="text-align: left;display: flex;align-items: center;justify-content: space-between;">
        <div style="display: flex;align-items: center;">
          <span v-if="tableList.length>0">检验模板:</span>
          <span v-if="tableList.length > 0">检验模板:</span>
          <el-radio-group v-model="currentTable" size="small">
            <el-radio-button :label="item.templateId" v-for="(item,index) in tableLists" :key="index"
              size="small">{{ item.templateName }}</el-radio-button>
            <el-radio-button :label="item.templateId" v-for="(item, index) in tableLists" :key="index" size="small">{{
              item.templateName }}</el-radio-button>
          </el-radio-group>
          <!-- <span style="margin-left: 20px;margin-right: 10px;">模板版本:</span>
          <el-radio-group v-model="currentTableState" size="small">
@@ -338,18 +395,38 @@
          </el-radio-group> -->
        </div>
        <div style="display: flex;align-items: center;">
          <el-form :inline="true" :model="otherForm" class="form-inline" label-width="50px" style="padding-top: 0;padding-left: 10px;" v-if="PROJECT=='检测中心'">
          <el-form :inline="true" :model="otherForm" class="form-inline" label-width="50px"
            style="padding-top: 0;padding-left: 10px;" v-if="PROJECT == '检测中心'">
            <el-form-item label="温度:" style="margin-bottom: 0;">
              <el-input v-model="otherForm.temperature" :disabled="state>1" size="small" placeholder="" style="width: 90px;" @change="m=>subOtherForm(m,'temperature')" ></el-input>
              <el-input v-model="otherForm.temperature" :disabled="state > 1" size="small" placeholder=""
                style="width: 90px;" @change="m => subOtherForm(m, 'temperature')"></el-input>
              <span style="margin-left: 4px;">℃</span>
            </el-form-item>
            <el-form-item label="湿度:" style="margin-bottom: 0;">
              <el-input v-model="otherForm.humidity" :disabled="state>1" size="small" placeholder="" style="width: 90px;" @change="m=>subOtherForm(m,'humidity')"></el-input>
              <el-input v-model="otherForm.humidity" :disabled="state > 1" size="small" placeholder=""
                style="width: 90px;" @change="m => subOtherForm(m, 'humidity')"></el-input>
              <span style="margin-left: 4px;">%</span>
            </el-form-item>
          </el-form>
          <el-button type="primary" size="small" v-if="(isGet||tableLists.find(m=>m.templateId==currentTable)&&tableLists.find(m=>m.templateId==currentTable).templateName=='温度循环检验原始记录'&&temDataAcquisition)&&PROJECT=='检测中心'&&state==1" @click="getDataAcquisitionDevice" :loading="dataAcquisitionLoading">数据采集</el-button>
          <el-button :type="dataAcquisitionEidtAble?'':'primary'" size="small" v-if="(isGet||(tableLists.find(m=>m.templateId==currentTable)&&tableLists.find(m=>m.templateId==currentTable).templateName=='温度循环检验原始记录'))&&PROJECT=='检测中心'&&collected&&state==1" @click="dataAcquisitionEidtAble=!dataAcquisitionEidtAble">{{dataAcquisitionEidtAble?'关闭编辑':'编辑数采'}}</el-button>
          <el-button type="primary" size="small" v-if="
            (isGet ||
              (tableLists.find(m => m.templateId == currentTable) &&
                tableLists.find(m => m.templateId == currentTable)
                  .templateName == '温度循环检验原始记录' &&
                temDataAcquisition)) &&
            PROJECT == '检测中心' &&
            state == 1
          " @click="getDataAcquisitionDevice" :loading="dataAcquisitionLoading">数据采集</el-button>
          <el-button :type="dataAcquisitionEidtAble ? '' : 'primary'" size="small" v-if="
            (isGet ||
              (tableLists.find(m => m.templateId == currentTable) &&
                tableLists.find(m => m.templateId == currentTable)
                  .templateName == '温度循环检验原始记录')) &&
            PROJECT == '检测中心' &&
            collected &&
            state == 1
          " @click="dataAcquisitionEidtAble = !dataAcquisitionEidtAble">{{ dataAcquisitionEidtAble ? "关闭编辑" : "编辑数采"
            }}</el-button>
        </div>
        <!-- <div class="history-btn" v-if="isLook">
          <el-button type="primary" icon="el-icon-arrow-left" size="small" @click="goHistory(-1)">上一条记录</el-button>
@@ -358,66 +435,151 @@
        </div> -->
      </div>
      <!-- 常规检验原始记录 -->
      <div class="center-box" id="nav" v-loading="tableLoading" v-if="!tableLists.find(m=>m.templateId==currentTable)||(!tableLists.find(m=>m.templateId==currentTable).templateName.includes('电路试验')&&!tableLists.find(m=>m.templateId==currentTable).templateName.includes('温湿度试验')&&!tableLists.find(m=>m.templateId==currentTable).templateName.includes('功率容量'))">
        <table border="1" class="tables" cellpadding="10" v-for="(item,index) in tableList" :key="index+currentTable+currentSample.id">
      <div class="center-box" id="nav" v-loading="tableLoading" v-if="
        !tableLists.find(m => m.templateId == currentTable) ||
        (!tableLists
          .find(m => m.templateId == currentTable)
          .templateName.includes('电路试验') &&
          !tableLists
            .find(m => m.templateId == currentTable)
            .templateName.includes('温湿度试验') &&
          !tableLists
            .find(m => m.templateId == currentTable)
            .templateName.includes('功率容量'))
      ">
        <table border="1" class="tables" cellpadding="10" v-for="(item, index) in tableList"
          :key="index + currentTable + currentSample.id">
          <tbody>
            <tr v-for="(m,i) in item.arr" :key="i">
              <td :id='item.templateId+"-"+n.i+"-"+n.r+"-"+n.c' v-for="(n,j) in m" :key="j"
              v-if="n.v.mc==undefined || Object.keys(n.v.mc).length === 4" :colspan="n.v.mc&&n.v.mc.cs?n.v.mc.cs:1"
                :rowspan="n.v.mc&&n.v.mc.rs?n.v.mc.rs:1"
                :style="`background:${n.v.bg?n.v.bg:''};color:${n.v.fc};font-size:${n.v.fs}px;width:${handleWidth(n)}px !important;height:${item.style.rowlen[n.r]}px;font-wight:${n.v.bl?'bold':''};`">
                <div class="content" :class="`content-h-${n.v.ht} content-v-${n.v.vt}`"
                  :style="`width:${handleWidth(n)}px !important;min-height:${item.style.rowlen[n.r]}px;`">
                  <template v-if="n.v.ps!=undefined && typeof n.v.ps.value ==='string'&& n.v.ps.value.includes('检验值') && state==1">
                    <el-input v-if="getInspectionValueType(n.i) == 1" class="table_input" v-model="n.v.v"
                              :disabled="(getInspectionItemType(n.i) == 1 && !dataAcquisitionEidtAble )|| (n.u != userId && n.u != undefined && n.u != '')"
                              @input="handleInput(n)"
                              @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`, n,'getDataType')" @mousewheel.native.prevent :key="'abc-'+'000'+index+'000'+i+'000'+j"
                              @keydown.enter="changeInput('',`${item.templateId}-${n.r}-${n.c}-${n.i}`, n, 'getDataType')">
            <tr v-for="(m, i) in item.arr" :key="i">
              <td :id="item.templateId + '-' + n.i + '-' + n.r + '-' + n.c" v-for="(n, j) in m" :key="j"
                v-if="n.v.mc == undefined || Object.keys(n.v.mc).length === 4"
                :colspan="n.v.mc && n.v.mc.cs ? n.v.mc.cs : 1" :rowspan="n.v.mc && n.v.mc.rs ? n.v.mc.rs : 1" :style="`background:${n.v.bg ? n.v.bg : ''};color:${n.v.fc
                  };font-size:${n.v.fs}px;width:${handleWidth(
                    n
                  )}px !important;height:${item.style.rowlen[n.r]
                  }px;font-wight:${n.v.bl ? 'bold' : ''};`
                  ">
                <div class="content" :class="`content-h-${n.v.ht} content-v-${n.v.vt}`" :style="`width:${handleWidth(n)}px !important;min-height:${item.style.rowlen[n.r]
                  }px;`
                  ">
                  <template v-if="
                    n.v.ps != undefined &&
                    typeof n.v.ps.value === 'string' &&
                    n.v.ps.value.includes('检验值') &&
                    state == 1
                  ">
                    <el-input v-if="getInspectionValueType(n.i) == 1" class="table_input" v-model="n.v.v" :disabled="(getInspectionItemType(n.i) == 1 &&
                      !dataAcquisitionEidtAble) ||
                      (n.u != userId && n.u != undefined && n.u != '')
                      " @input="handleInput(n)" @change="m =>
                        changeInput(
                          m,
                          `${item.templateId}-${n.r}-${n.c}-${n.i}`,
                          n,
                          'getDataType'
                        )
                        " @mousewheel.native.prevent :key="'abc-' + '000' + index + '000' + i + '000' + j"
                      @keydown.enter="
                        changeInput(
                          '',
                          `${item.templateId}-${n.r}-${n.c}-${n.i}`,
                          n,
                          'getDataType'
                        )
                        ">
                      <!-- <el-button slot="append" type="primary" icon="el-icon-edit" size="mini"
                        v-if="getInspectionItemType(n.i) == 1" @click="getSystemValue(n)"></el-button> -->
                    </el-input>
                    <el-input v-else-if="getInspectionValueType(n.i) == 2" class="table_input" type="textarea"
                      v-model="n.v.v"
                      :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')"
                      @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`,n,'getDataType')" />
                      v-model="n.v.v" :disabled="getInspectionItemType(n.i) == 1 ||
                        (n.u != userId && n.u != undefined && n.u != '')
                        " @change="m =>
                          changeInput(
                            m,
                            `${item.templateId}-${n.r}-${n.c}-${n.i}`,
                            n,
                            'getDataType'
                          )
                          " />
                    <el-select v-else-if="getInspectionValueType(n.i) == 5" class="table_input" v-model="n.v.v"
                      :disabled="state>1||getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')" @visible-change="e=>getDic(e,n.i)"
                       @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`,n,'getDataType')">
                      :disabled="state > 1 ||
                        getInspectionItemType(n.i) == 1 ||
                        (n.u != userId && n.u != undefined && n.u != '')
                        " @visible-change="e => getDic(e, n.i)" @change="m =>
                          changeInput(
                            m,
                            `${item.templateId}-${n.r}-${n.c}-${n.i}`,
                            n,
                            'getDataType'
                          )
                          ">
                      <el-option v-for="(e, i) in enumList" :key="i" :label="e.label" :value="e.value"></el-option>
                    </el-select>
                    <span :style="`font-family:${n.v.ff} !important;`"
                      v-else-if="getInspectionValueType(n.i) == 4">/</span>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='结论'">
                    <el-select v-if="(getInspectionValueType(n.i) == 2 || getInspectionValueType(n.i) == 5) && state==1&&PROJECT=='装备电缆'"
                      class="table_input" v-model="n.v.v" @change="saveInsContext()">
                  <template v-else-if="n.v.ps != undefined && n.v.ps.value === '结论'">
                    <el-select v-if="
                      (getInspectionValueType(n.i) == 2 ||
                        getInspectionValueType(n.i) == 5) &&
                      state == 1 &&
                      PROJECT == '装备电缆'
                    " class="table_input" v-model="n.v.v" @change="saveInsContext()">
                      <el-option label="合格" :value="1"></el-option>
                      <el-option label="不合格" :value="0"></el-option>
                    </el-select>
                    <template v-if="PROJECT=='检测中心'||PROJECT=='装备电缆'&&getInspectionValueType(n.i) != 2 ">
                      <span v-if="n.v.v===1" :style="`font-family:${n.v.ff} !important;color: green;`">合格</span>
                      <span v-else-if="n.v.v===0" :style="`font-family:${n.v.ff} !important;color: red;`">不合格</span>
                      <span v-else-if="n.v.v===3" :style="`font-family:${n.v.ff} !important;color: #3A7BFA;`">不判定</span>
                    <template v-if="
                      PROJECT == '检测中心' ||
                      (PROJECT == '装备电缆' &&
                        getInspectionValueType(n.i) != 2)
                    ">
                      <span v-if="n.v.v === 1" :style="`font-family:${n.v.ff} !important;color: green;`
                        ">合格</span>
                      <span v-else-if="n.v.v === 0" :style="`font-family:${n.v.ff} !important;color: red;`">不合格</span>
                      <span v-else-if="n.v.v === 3" :style="`font-family:${n.v.ff} !important;color: #3A7BFA;`
                        ">不判定</span>
                      <span v-else :style="`font-family:${n.v.ff} !important;`">待定</span>
                    </template>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='设备编码' && state==1">
                    <el-select v-model="n.v.v" placeholder="设备"
                    class="table_input" @visible-change="e=>getEquipOptions(e,n.i)" remote
                      @change="(val)=>changeEquip(val, n)">
                  <template v-else-if="
                    n.v.ps != undefined &&
                    n.v.ps.value === '设备编码' &&
                    state == 1
                  ">
                    <el-select v-model="n.v.v" placeholder="设备" class="table_input"
                      @visible-change="e => getEquipOptions(e, n.i)" remote @change="val => changeEquip(val, n)">
                      <el-option v-for="item in equipOptions" :key="item.value" :label="item.value" :value="item.value">
                      </el-option>
                    </el-select>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='设备名称' && state==1">
                  <span>{{ n.v.v }}</span>
                  <template v-else-if="
                    n.v.ps != undefined &&
                    n.v.ps.value === '设备名称' &&
                    state == 1
                  ">
                    <span>{{ n.v.v }}</span>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='要求值' && state==1">
                    <span :style="`font-family:${n.v.ff} !important;`">{{getTell(n.i)}}</span>
                  <template v-else-if="
                    n.v.ps != undefined &&
                    n.v.ps.value === '要求值' &&
                    state == 1
                  ">
                    <span :style="`font-family:${n.v.ff} !important;`">{{
                      getTell(n.i)
                    }}</span>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='计算值' && state==1"><span :style="`font-family:${n.v.ff} !important;`">{{ toFixed(n.v.v,n.v.ct) }}</span></template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='最终值' && state==1">
                  <template v-else-if="
                    n.v.ps != undefined &&
                    n.v.ps.value === '计算值' &&
                    state == 1
                  "><span :style="`font-family:${n.v.ff} !important;`">{{
                    toFixed(n.v.v, n.v.ct)
                      }}</span></template>
                  <template v-else-if="
                    n.v.ps != undefined &&
                    n.v.ps.value === '最终值' &&
                    state == 1
                  ">
                    <!-- <el-input class="table_input" type="textarea"
                      :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')"
                      v-model="n.v.v" @change="saveInsContext()" v-if="getInspectionValueType(n.i) == 2"></el-input>
@@ -425,64 +587,106 @@
                      :disabled="state>1" @visible-change="e=>getDic(e,n.i)" @change="saveInsContext()">
                      <el-option v-for="(e, i) in enumList" :key="i" :label="e.label" :value="e.value"></el-option>
                    </el-select> -->
                    <span :style="`font-family:${n.v.ff} !important;`">{{ toFixed(n.v.v,n.v.ct) }}</span>
                    <span :style="`font-family:${n.v.ff} !important;`">{{
                      toFixed(n.v.v, n.v.ct)
                    }}</span>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='样品编号'">
                    <div style="display: flex;flex-wrap: nowrap;align-items: center;width: 100%" :title="currentSample.sampleCode">
                      <i class="el-icon-caret-left table_caret" style="width: 16px;" @click="caretSample(-1)" v-if="!currentFiberOpticTape&&!currentFiberOptic"></i>
                      <div :style="`font-family:${n.v.ff} !important;overflow: hidden;white-space: nowrap;width: calc(100% - 32px);`">{{currentSample.sampleCode}}</div>
                      <i class="el-icon-caret-right table_caret" style="width: 16px;"
                      v-if="!currentFiberOpticTape&&!currentFiberOptic" @click="caretSample(1)"></i>
                  <template v-else-if="
                    n.v.ps != undefined && n.v.ps.value === '样品编号'
                  ">
                    <div style="display: flex;flex-wrap: nowrap;align-items: center;width: 100%"
                      :title="currentSample.sampleCode">
                      <!-- <i class="el-icon-caret-left table_caret" style="width: 16px;" @click="caretSample(-1)" v-if="!currentFiberOpticTape&&!currentFiberOptic"></i> -->
                      <div :style="`font-family:${n.v.ff} !important;overflow: hidden;white-space: nowrap;width: calc(100% - 32px);`
                        ">
                        {{ currentSample.sampleCode }}
                      </div>
                      <!-- <i class="el-icon-caret-right table_caret" style="width: 16px;"
                      v-if="!currentFiberOpticTape&&!currentFiberOptic" @click="caretSample(1)"></i> -->
                    </div>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='样品型号'">
                    <div :style="`font-family:${n.v.ff} !important;`" v-if="currentSample.model!==undefined&&currentSample.model!==null">{{currentSample.model}}</div>
                  <template v-else-if="
                    n.v.ps != undefined && n.v.ps.value === '样品型号'
                  ">
                    <div :style="`font-family:${n.v.ff} !important;`" v-if="
                      currentSample.model !== undefined &&
                      currentSample.model !== null
                    ">
                      {{ currentSample.model }}
                    </div>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='试验标准'">
                    <div :style="`font-family:${n.v.ff} !important;`" v-if="currentSample.testRequirements!==undefined&&currentSample.testRequirements!==null">{{currentSample.testRequirements}}</div>
                  <template v-else-if="
                    n.v.ps != undefined && n.v.ps.value === '试验标准'
                  ">
                    <div :style="`font-family:${n.v.ff} !important;`" v-if="
                      currentSample.testRequirements !== undefined &&
                      currentSample.testRequirements !== null
                    ">
                      {{ currentSample.testRequirements }}
                    </div>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='套管'">
                  <template v-else-if="n.v.ps != undefined && n.v.ps.value === '套管'">
                    <div style="display: flex;flex-wrap: nowrap;align-items: center;">
                      <!-- <i class="el-icon-caret-left table_caret" @click="caretBushing(-1)"></i> -->
                      <div :style="`font-family:${n.v.ff} !important;`">{{currentBushing?currentBushing.color:''}}</div>
                      <div :style="`font-family:${n.v.ff} !important;`">
                        {{ currentBushing ? currentBushing.color : "" }}
                      </div>
                      <!-- <i class="el-icon-caret-right table_caret" @click="caretBushing(1)"></i> -->
                    </div>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='光纤带'">
                  <template v-else-if="n.v.ps != undefined && n.v.ps.value === '光纤带'">
                    <div style="display: flex;flex-wrap: nowrap;align-items: center;">
                      <i class="el-icon-caret-left table_caret" @click="caretTape(-1)
                      " v-if="currentFiberOpticTape"></i>
                      <div :style="`font-family:${n.v.ff} !important;`">{{currentFiberOpticTape?currentFiberOpticTape.code:''}}</div>
                      <i class="el-icon-caret-right table_caret"
                      v-if="currentFiberOpticTape"
                      @click="caretTape(1)"></i>
                    </div>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='光纤'">
                    <div style="display: flex;flex-wrap: nowrap;align-items: center;">
                      <i class="el-icon-caret-left table_caret" @click="caretOptic(-1)"
                      v-if="currentFiberOptic"></i>
                      <div :style="`font-family:${n.v.ff} !important;`">{{currentFiberOptic?currentFiberOptic.color:''}}
                      <i class="el-icon-caret-left table_caret" @click="caretTape(-1)" v-if="currentFiberOpticTape"></i>
                      <div :style="`font-family:${n.v.ff} !important;`">
                        {{
                          currentFiberOpticTape
                            ? currentFiberOpticTape.code
                            : ""
                        }}
                      </div>
                      <i
                      v-if="currentFiberOptic" class="el-icon-caret-right table_caret" @click="caretOptic(1)"></i>
                      <i class="el-icon-caret-right table_caret" v-if="currentFiberOpticTape" @click="caretTape(1)"></i>
                    </div>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='试验前样品检查'">
                    <el-select class="table_input" v-model="n.v.v"
                      :disabled="state>1|| (n.u != userId && n.u != undefined && n.u != '')" @change="(val)=>changeSampleCheck(val, n,'前')">
                  <template v-else-if="n.v.ps != undefined && n.v.ps.value === '光纤'">
                    <div style="display: flex;flex-wrap: nowrap;align-items: center;">
                      <i class="el-icon-caret-left table_caret" @click="caretOptic(-1)" v-if="currentFiberOptic"></i>
                      <div :style="`font-family:${n.v.ff} !important;`">
                        {{ currentFiberOptic ? currentFiberOptic.color : "" }}
                      </div>
                      <i v-if="currentFiberOptic" class="el-icon-caret-right table_caret" @click="caretOptic(1)"></i>
                    </div>
                  </template>
                  <template v-else-if="
                    n.v.ps != undefined && n.v.ps.value === '试验前样品检查'
                  ">
                    <el-select class="table_input" v-model="n.v.v" :disabled="state > 1 ||
                      (n.u != userId && n.u != undefined && n.u != '')
                      " @change="val => changeSampleCheck(val, n, '前')">
                      <el-option label="完好" :value="'完好'"></el-option>
                      <el-option label="破损" :value="'破损'"></el-option>
                    </el-select>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='试验后样品检查'">
                    <el-select class="table_input" v-model="n.v.v"
                      :disabled="state>1|| (n.u != userId && n.u != undefined && n.u != '')" @change="(val)=>changeSampleCheck(val, n,'后')">
                  <template v-else-if="
                    n.v.ps != undefined && n.v.ps.value === '试验后样品检查'
                  ">
                    <el-select class="table_input" v-model="n.v.v" :disabled="state > 1 ||
                      (n.u != userId && n.u != undefined && n.u != '')
                      " @change="val => changeSampleCheck(val, n, '后')">
                      <el-option label="完好" :value="'完好'"></el-option>
                      <el-option label="破损" :value="'破损'"></el-option>
                    </el-select>
                  </template>
                  <span v-else :style="`font-family:${n.v.ff} !important;`" v-html="getValue(n.v)" ></span>
                  <template v-else-if="
                    n.v.ps != undefined && n.v.ps.value === '实验结果'
                  ">
                    <el-select class="table_input" v-model="n.v.v" :disabled="state > 1 ||
                      (n.u != userId && n.u != undefined && n.u != '')
                      " @change="val => changeSampleCheck(val, n, '实验结果')">
                      <el-option label="无异常" :value="'无异常'"></el-option>
                      <el-option label="不合格" :value="'不合格'"></el-option>
                    </el-select>
                  </template>
                  <span v-else :style="`font-family:${n.v.ff} !important;`" v-html="getValue(n.v)"></span>
                </div>
              </td>
            </tr>
@@ -490,173 +694,151 @@
        </table>
      </div>
      <!-- 温度循环检验原始记录 -->
      <div v-loading="tableLoading" v-else-if="tableLists.find(m=>m.templateId==currentTable).templateName=='温度循环检验原始记录'">
      <div v-loading="tableLoading" v-else-if="
        tableLists.find(m => m.templateId == currentTable).templateName ==
        '温度循环检验原始记录'
      ">
        <el-divider></el-divider>
        <h4 style="margin-bottom: 20px;font-size: 24px;font-weight: 400;text-align: center;">温度循环检验原始记录</h4>
        <el-form :inline="true" :model="wareForm" class="form-inline" label-width="100px" style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
        <el-form-item label="型号:" style="margin-bottom: 0;">
          <el-input clearable v-model="wareForm0.model" disabled size="small" placeholder=""></el-input>
        </el-form-item>
        <el-form-item label="试验方法:" style="margin-bottom: 0;">
          <el-input clearable v-model="wareForm0.methodName" disabled size="small" placeholder=""></el-input>
        </el-form-item>
        <!-- <el-form-item label="检测依据:" style="margin-bottom: 0;">
        <h4 style="margin-bottom: 20px;font-size: 24px;font-weight: 400;text-align: center;">
          温度循环检验原始记录
        </h4>
        <el-form :inline="true" :model="wareForm" class="form-inline" label-width="100px"
          style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
          <el-form-item label="型号:" style="margin-bottom: 0;">
            <el-input clearable v-model="wareForm0.model" disabled size="small" placeholder=""></el-input>
          </el-form-item>
          <el-form-item label="试验方法:" style="margin-bottom: 0;">
            <el-input clearable v-model="wareForm0.methodName" disabled size="small" placeholder=""></el-input>
          </el-form-item>
          <!-- <el-form-item label="检测依据:" style="margin-bottom: 0;">
          <el-input clearable v-model="wareForm0.sample" disabled size="small" placeholder=""></el-input>
        </el-form-item> -->
        <el-form-item label="循环次数:" style="margin-bottom: 0;">
          <el-select v-model="wareForm.inspectionItem" placeholder="请选择" size="small" @change="m=>wareFormChange(m,'inspectionItem')">
            <el-option
              v-for="item in numOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="温度:" style="margin-bottom: 0;">
          <el-select v-model="wareForm.inspectionItemSubclass" placeholder="请选择" size="small" @change="m=>wareFormChange(m,'inspectionItemSubclass')">
            <el-option
              v-for="item in temperatureOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value">
            </el-option>
          </el-select>
          <span style="margin-left: 4px;">℃</span>
        </el-form-item>
          <el-form-item label="循环次数:" style="margin-bottom: 0;">
            <el-select v-model="wareForm.inspectionItem" placeholder="请选择" size="small"
              @change="m => wareFormChange(m, 'inspectionItem')">
              <el-option v-for="item in numOptions" :key="item.value" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="温度:" style="margin-bottom: 0;">
            <el-select v-model="wareForm.inspectionItemSubclass" placeholder="请选择" size="small"
              @change="m => wareFormChange(m, 'inspectionItemSubclass')">
              <el-option v-for="item in temperatureOptions" :key="item.value" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
            <span style="margin-left: 4px;">℃</span>
          </el-form-item>
        </el-form>
        <el-divider></el-divider>
        <el-form :inline="true" :model="equipForm" label-width="100px" style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
        <el-form :inline="true" :model="equipForm" label-width="100px"
          style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
          <el-form-item label="仪器名称:">
            <el-input clearable v-model="equipForm.value0" disabled size="small" placeholder=""></el-input>
          </el-form-item>
          <el-form-item label="仪器编号:">
            <el-select v-model="equipForm.code0" :disabled="state>1" placeholder="请选择" size="small">
              <el-option
                v-for="item in equipOptions"
                :key="item.value"
                :label="item.value"
                :value="item.value">
            <el-select v-model="equipForm.code0" :disabled="state > 1" placeholder="请选择" size="small">
              <el-option v-for="item in equipOptions" :key="item.value" :label="item.value" :value="item.value">
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="仪器名称:" >
          <el-form-item label="仪器名称:">
            <el-input clearable v-model="equipForm.value1" disabled size="small" placeholder=""></el-input>
          </el-form-item>
          <el-form-item label="仪器编号:">
            <el-select v-model="equipForm.code1" :disabled="state>1" placeholder="请选择" size="small">
              <el-option
                v-for="item in equipOptions"
                :key="item.value"
                :label="item.value"
                :value="item.value">
            <el-select v-model="equipForm.code1" :disabled="state > 1" placeholder="请选择" size="small">
              <el-option v-for="item in equipOptions" :key="item.value" :label="item.value" :value="item.value">
              </el-option>
            </el-select>
          </el-form-item>
        </el-form>
        <el-table
          :data="wareTableData"
          ref="wareTableData"
          border
          v-loading="wareTableDataLoading"
          style="width: 100%;margin-bottom: 30px;" align="center" v-if="wareForm.inspectionItemSubclass!='20(常温)'&&wareForm.inspectionItemSubclass!='20'||(wareForm.inspectionItemSubclass=='20(常温)'&&wareForm.inspectionItem==1)||(wareForm.inspectionItemSubclass=='20'&&wareForm.inspectionItem==numOptions.length)">
          <el-table-column
            label="序号"
            type="index"
            width="59"
            align="center"
            >
        <el-table :data="wareTableData" ref="wareTableData" border v-loading="wareTableDataLoading"
          style="width: 100%;margin-bottom: 30px;" align="center" v-if="
            (wareForm.inspectionItemSubclass != '20(常温)' &&
              wareForm.inspectionItemSubclass != '20') ||
            (wareForm.inspectionItemSubclass == '20(常温)' &&
              wareForm.inspectionItem == 1) ||
            (wareForm.inspectionItemSubclass == '20' &&
              wareForm.inspectionItem == numOptions.length)
          ">
          <el-table-column label="序号" type="index" width="59" align="center">
          </el-table-column>
          <el-table-column
            prop="bushColor"
            label="管色标"
            width="75"
            align="center">
          <el-table-column prop="bushColor" label="管色标" width="75" align="center">
          </el-table-column>
          <el-table-column
            prop="code"
            label="光纤带编号"
            width="105"
            align="center">
          <el-table-column prop="code" label="光纤带编号" width="105" align="center">
          </el-table-column>
          <el-table-column
            prop="color"
            label="光纤色标"
            align="center"
            width="90">
          <el-table-column prop="color" label="光纤色标" align="center" width="90">
          </el-table-column>
           <template v-for="(item,index) in wareLength">
            <el-table-column
              prop="value0"
              label="外端"
              align="center"
              width="100" :key="(new Date().getTime())+'1234567'">
          <template v-for="(item, index) in wareLength">
            <el-table-column prop="value0" label="外端" align="center" width="100"
              :key="new Date().getTime() + '1234567'">
              <template slot="header">
                {{ '外端'+(index+1) }}
                {{ "外端" + (index + 1) }}
              </template>
              <template slot-scope="scope">
                <el-input size="small" v-model="scope.row.arr[index].value0" placeholder="" :disabled="state>1||!dataAcquisitionEidtAble" @change="m=>changeItem(scope.row.arr[index])"></el-input>
                <el-input size="small" v-model="scope.row.arr[index].value0" placeholder=""
                  :disabled="state > 1 || !dataAcquisitionEidtAble"
                  @change="m => changeItem(scope.row.arr[index])"></el-input>
              </template>
            </el-table-column>
            <el-table-column
              prop="value1"
              label="内端"
              align="center"
              width="100" :key="(new Date().getTime())+'23333333'">
            <el-table-column prop="value1" label="内端" align="center" width="100"
              :key="new Date().getTime() + '23333333'">
              <template slot="header">
                {{ '内端'+(index+1) }}
                {{ "内端" + (index + 1) }}
              </template>
              <template slot-scope="scope">
                <el-input size="small" :disabled="state>1||!dataAcquisitionEidtAble"  v-model="scope.row.arr[index].value1" placeholder="" @change="m=>changeItem(scope.row.arr[index])"></el-input>
                <el-input size="small" :disabled="state > 1 || !dataAcquisitionEidtAble"
                  v-model="scope.row.arr[index].value1" placeholder=""
                  @change="m => changeItem(scope.row.arr[index])"></el-input>
              </template>
            </el-table-column>
            <el-table-column
              prop="comValue"
              align="center"
              min-width="150" :key="(new Date().getTime())+'364654654'">
            <el-table-column prop="comValue" align="center" min-width="150" :key="new Date().getTime() + '364654654'">
              <template slot="header">
                {{ '衰减系数'+item }}
                {{ "衰减系数" + item }}
              </template>
              <template slot-scope="scope">
                <span>{{ scope.row.arr[index].comValue }}</span>
              </template>
            </el-table-column>
            <el-table-column
              prop="resValue"
              label="衰减差"
              align="center"
              v-if="wareForm.inspectionItemSubclass!='20(常温)'"
              min-width="90" :key="(new Date().getTime())+'434634634634'">
            <el-table-column prop="resValue" label="衰减差" align="center"
              v-if="wareForm.inspectionItemSubclass != '20(常温)'" min-width="90"
              :key="new Date().getTime() + '434634634634'">
              <template slot="header">
                {{ '衰减差'+(index+1) }}
                {{ "衰减差" + (index + 1) }}
              </template>
              <template slot-scope="scope">
                <span>{{ scope.row.arr[index].resValue }}</span>
              </template>
            </el-table-column>
            <el-table-column
              prop="insResult"
              label="结论"
              align="center"
              min-width="70" v-if="wareForm.inspectionItemSubclass!='20(常温)'" :key="(new Date().getTime())+'53457689809808-'">
            <el-table-column prop="insResult" label="结论" align="center" min-width="70"
              v-if="wareForm.inspectionItemSubclass != '20(常温)'" :key="new Date().getTime() + '53457689809808-'">
              <template slot="header">
                {{ '结论'+(index+1) }}
                {{ "结论" + (index + 1) }}
              </template>
              <template slot-scope="scope">
                <span v-if="scope.row.arr[index].insResult===1" style="color: green;">合格</span>
                <span v-else-if="scope.row.arr[index].insResult===0" style="color: red;">不合格</span>
                <span v-else-if="scope.row.arr[index].insResult===3" style="color: #3A7BFA;">不判定</span>
                <span v-if="scope.row.arr[index].insResult === 1" style="color: green;">合格</span>
                <span v-else-if="scope.row.arr[index].insResult === 0" style="color: red;">不合格</span>
                <span v-else-if="scope.row.arr[index].insResult === 3" style="color: #3A7BFA;">不判定</span>
                <span v-else>待定</span>
              </template>
            </el-table-column>
           </template>
          </template>
        </el-table>
      </div>
      <!-- 热循环/温升试验检验原始记录 -->
      <div v-loading="tableLoading" v-else-if="tableLists.find(m=>m.templateId==currentTable).templateName.includes('热循环')||tableLists.find(m=>m.templateId==currentTable).templateName.includes('温升试验')">
      <div v-loading="tableLoading" v-else-if="
        tableLists
          .find(m => m.templateId == currentTable)
          .templateName.includes('热循环') ||
        tableLists
          .find(m => m.templateId == currentTable)
          .templateName.includes('温升试验')
      ">
        <el-divider></el-divider>
        <h4 style="margin-bottom: 20px;font-size: 24px;font-weight: 400;text-align: center;">{{tableLists.find(m=>m.templateId==currentTable).templateName}}</h4>
        <el-form :inline="true" :model="wareForm" class="form-inline" label-width="100px" style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
        <h4 style="margin-bottom: 20px;font-size: 24px;font-weight: 400;text-align: center;">
          {{ tableLists.find(m => m.templateId == currentTable).templateName }}
        </h4>
        <el-form :inline="true" :model="wareForm" class="form-inline" label-width="100px"
          style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
          <el-form-item label="仪器名称:" style="margin-bottom: 0;">
            <el-input clearable v-model="equipForm.value0" disabled size="small" placeholder=""></el-input>
          </el-form-item>
@@ -671,32 +853,28 @@
          </el-form-item>
        </el-form>
        <el-divider></el-divider>
        <el-form :inline="true" :model="equipForm" label-width="100px" style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
        <el-form :inline="true" :model="equipForm" label-width="100px"
          style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
          <el-form-item label="仪器编号:">
            <el-select v-model="equipForm.code0" :disabled="state>1" placeholder="请选择" size="small">
              <el-option
                v-for="item in equipOptions"
                :key="item.value"
                :label="item.value"
                :value="item.value">
            <el-select v-model="equipForm.code0" :disabled="state > 1" placeholder="请选择" size="small">
              <el-option v-for="item in equipOptions" :key="item.value" :label="item.value" :value="item.value">
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="仪器编号:">
            <el-select v-model="equipForm.code1" :disabled="state>1" placeholder="请选择" size="small">
              <el-option
                v-for="item in equipOptions"
                :key="item.value"
                :label="item.value"
                :value="item.value">
            <el-select v-model="equipForm.code1" :disabled="state > 1" placeholder="请选择" size="small">
              <el-option v-for="item in equipOptions" :key="item.value" :label="item.value" :value="item.value">
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="循环次数:" v-if="thermalCyclingInfo.inspectionItemClass=='直流电阻'">
            <el-input-number v-model="thermalCyclingInfo.inspectionItem" :min="1" :max="thermalCyclingInfo.max" label="" style="margin-top:4px;width: 190px;" size="small" @change="thermalCyclingChange"></el-input-number>
          <el-form-item label="循环次数:" v-if="thermalCyclingInfo.inspectionItemClass == '直流电阻'">
            <el-input-number v-model="thermalCyclingInfo.inspectionItem" :min="1" :max="thermalCyclingInfo.max" label=""
              style="margin-top:4px;width: 190px;" size="small" @change="thermalCyclingChange"></el-input-number>
          </el-form-item>
          <el-button type="primary" size="small" style="margin-bottom: 22px;margin-left: 30px;" @click="handleAddThermal" v-if="state==1">新增</el-button>
          <el-button size="small" style="margin-bottom: 22px;" @click="handleDeleteThermal" v-if="state==1">删除</el-button>
          <el-button type="primary" size="small" style="margin-bottom: 22px;margin-left: 30px;"
            @click="handleAddThermal" v-if="state == 1">新增</el-button>
          <el-button size="small" style="margin-bottom: 22px;" @click="handleDeleteThermal"
            v-if="state == 1">删除</el-button>
        </el-form>
        <div class="table-container" v-loading="thermalCyclingLoading">
          <table border="1" cellpadding="10" class="thermal-table">
@@ -705,28 +883,34 @@
              <td :colspan="thermalCyclingInfo.length">检验过程值</td>
              <td style="width: 100px;">结论</td>
            </tr>
            <tr v-for="(item,index) in thermalCyclingInfo.arr">
            <tr v-for="(item, index) in thermalCyclingInfo.arr">
              <td style="width: 100px;text-align: center;">{{ item.name }}</td>
              <td v-for="(m,i) in thermalCyclingInfo.length" style="min-width: 150px;">
              <td v-for="(m, i) in thermalCyclingInfo.length" style="min-width: 150px;">
                <div style="display: flex;align-items: center;margin-bottom: 5px;">
                  <label style="width: 100px;white-space: nowrap;font-size: 12px;">温度:</label>
                  <el-input clearable size="small" placeholder="" v-model="item.arr[i].value0" :disabled="state>1" @change="m=>saveThermalCycling(m,item,'value0')"></el-input>
                  <span style="font-size: 12px;margin-left: 13px;margin-right: 13px;"> ℃</span>
                  <el-input clearable size="small" placeholder="" v-model="item.arr[i].value0" :disabled="state > 1"
                    @change="m => saveThermalCycling(m, item, 'value0')"></el-input>
                  <span style="font-size: 12px;margin-left: 13px;margin-right: 13px;">
                    ℃</span>
                </div>
                <div style="display: flex;align-items: center;" v-if="item.name!='环境温度'&&thermalCyclingInfo.inspectionItemClass=='直流电阻'">
                <div style="display: flex;align-items: center;" v-if="
                  item.name != '环境温度' &&
                  thermalCyclingInfo.inspectionItemClass == '直流电阻'
                ">
                  <label style="width: 100px;white-space: nowrap;font-size: 12px;">直流电阻:</label>
                  <el-input clearable size="small" :disabled="state>1" placeholder="" v-model="item.arr[i].value1" @change="saveThermalCycling"></el-input>
                  <el-input clearable size="small" :disabled="state > 1" placeholder="" v-model="item.arr[i].value1"
                    @change="saveThermalCycling"></el-input>
                  <span style="margin-left: 5px;font-size: 12px;"> Ω/km</span>
                </div>
              </td>
              <td>
                <template v-if="item.name=='环境温度'||item.name=='导线温度'">
                <template v-if="item.name == '环境温度' || item.name == '导线温度'">
                  <span>/</span>
                </template>
                <template v-else>
                  <span v-if="item.insResult===1" style="color: green;">合格</span>
                  <span v-else-if="item.insResult===0" style="color: red;">不合格</span>
                  <span v-else-if="item.insResult===3" style="color: #3A7BFA;">不判定</span>
                  <span v-if="item.insResult === 1" style="color: green;">合格</span>
                  <span v-else-if="item.insResult === 0" style="color: red;">不合格</span>
                  <span v-else-if="item.insResult === 3" style="color: #3A7BFA;">不判定</span>
                  <span v-else>待定</span>
                </template>
              </td>
@@ -735,39 +919,60 @@
        </div>
      </div>
      <!-- 电路试验 -->
      <div v-else-if="tableLists.find(m=>m.templateId==currentTable).templateName.includes('电路试验')" style="width: 100%;overflow-x: auto;overflow-y: visible;">
      <div v-else-if="
        tableLists
          .find(m => m.templateId == currentTable)
          .templateName.includes('电路试验')
      " style="width: 100%;overflow-x: auto;overflow-y: visible;">
        <!-- <Circuit></Circuit> -->
        <CircuitParameters1 v-if="currentTableState==0" :insProduct="currentSample.insProduct" :orderId="id" :sampleId="currentSample.id" :state="state" :num="currentSample.num1" :isLook="isLook" :currentNum="currentNum" ref="CircuitParameters"></CircuitParameters1>
        <CircuitParameters2 v-if="currentTableState==1" :insProduct="currentSample.insProduct" :orderId="id" :sampleId="currentSample.id" :state="state" :num="currentSample.num1" :isLook="isLook" :currentNum="currentNum" ref="CircuitParameters"></CircuitParameters2>
        <!-- 电调 -->
        <CircuitParameters1 v-if="currentTableState == 0" :insProduct="currentSample.insProduct" :orderId="id"
          :sampleId="currentSample.id" :state="state" :num="currentSample.num1" :isLook="isLook"
          :currentNum="currentNum" ref="CircuitParameters"></CircuitParameters1>
        <!-- 非电调 -->
        <CircuitParameters2 v-if="currentTableState == 1" :insProduct="currentSample.insProduct" :orderId="id"
          :sampleId="currentSample.id" :state="state" :num="currentSample.num1" :isLook="isLook"
          :currentNum="currentNum" ref="CircuitParameters"></CircuitParameters2>
        <!-- 无源器件 -->
        <CircuitParameters3 v-if="this.insOrder.sampleType == '无源器件'" :insProduct="currentSample.insProduct"
          :orderId="id" :sampleId="currentSample.id" :state="state" :num="currentSample.num1" :isLook="isLook"
          :currentNum="currentNum" ref="CircuitParameters"></CircuitParameters3>
      </div>
      <!-- 温湿度试验 -->
      <div v-else-if="tableLists.find(m=>m.templateId==currentTable).templateName.includes('温湿度试验')">
        <Humidity :insProduct="currentSample.insProduct" :orderId="id" :sampleId="currentSample.id" :state="state" :isLook="isLook" :num="currentSample.num1"/>
      <div v-else-if="
        tableLists
          .find(m => m.templateId == currentTable)
          .templateName.includes('温湿度试验')
      ">
        <Humidity :insProduct="currentSample.insProduct" :orderId="id" :sampleId="currentSample.id" :state="state"
          :isLook="isLook" :num="currentSample.num1" />
      </div>
      <!-- 功率试验 -->
      <div v-else-if="tableLists.find(m=>m.templateId==currentTable).templateName.includes('功率容量')">
        <PowerCapacity :insProduct="currentSample.insProduct" :orderId="id" :sampleId="currentSample.id" :state="state" :isLook="isLook" :num="currentSample.num1"/>
      <div v-else-if="
        tableLists
          .find(m => m.templateId == currentTable)
          .templateName.includes('功率容量')
      ">
        <PowerCapacity :insProduct="currentSample.insProduct" :orderId="id" :sampleId="currentSample.id" :state="state"
          :isLook="isLook" :num="currentSample.num1" />
      </div>
      <el-upload :action="action"
      :data="{
        orderId:id,
        sonLaboratory:sonLaboratory
      }"
      v-if="state==1&&fileAdd"
      :on-success="handleSuccessUp" :show-file-list="false"
        accept='.jpg,.jpeg,.png,.gif,.docx,.xls,.xlsx,.pdf,.zip,.rar,.csv' :headers="headers" :on-change="beforeUpload"
        style="width: 80px !important;"
        :on-error="onError" ref='upload'>
        <el-button size="small" type="primary" v-if="state==1">附件上传</el-button></el-upload>
      <el-upload :action="action" :data="{
        orderId: this.orderId0,
        sampleId: id,
        sonLaboratory: sonLaboratory
      }" v-if="state == 1 && fileAdd" :on-success="handleSuccessUp" :show-file-list="false"
        accept=".jpg,.jpeg,.png,.gif,.docx,.doc,.xls,.xlsx,.pdf,.zip,.rar,.csv" :headers="headers"
        :before-upload="beforeUpload" style="width: 80px !important;" :on-error="onError" ref="upload">
        <el-button size="small" type="primary" v-if="state == 1">附件上传</el-button></el-upload>
      <!-- <span v-if="sonLaboratory === '远场'||sonLaboratory === '近场'" style="color: red;font-size: 12px;">辐射试验尽量上传设备导出的csv文件,不然触发不了报告生成</span> -->
      <ValueTable class="value-table" ref="fileList" :url="$api.insOrderPlan.getFileList"
        :componentData="componentData0"
        :delUrl="$api.insOrderPlan.delfile"
        :key="upIndex" style="height: 100%;margin-top: 16px;"/>
        :componentData="componentData0" :delUrl="$api.insOrderPlan.delfile" :key="upIndex"
        style="height: 100%;margin-top: 16px;" />
    </div>
    <el-drawer title="样品切换" :visible.sync="sampleVisible" :size="500" :modal="!noBack">
      <el-table class="el-table" ref="productTable" :data="sampleProduct" height="100%" tooltip-effect="dark" border
        highlight-current-row @row-click="handleChangeSample" :row-class-name="tableRowClassName"
        :current-row-key="currentKey" :row-key="record=>record.index" v-if="sampleVisible">
        :current-row-key="currentKey" :row-key="record => record.index" v-if="sampleVisible">
        <el-table-column type="index" align="center" label="序号" width="70px" :key="Math.random()">
        </el-table-column>
        <el-table-column prop="sampleCode" label="样品编号" min-width="100px" show-overflow-tooltip></el-table-column>
@@ -775,33 +980,35 @@
        <el-table-column prop="insState" label="检测状态" width="100px" show-overflow-tooltip>
          <template slot-scope="scope">
            <el-tag v-for="(item, i) in typeList" :key="i" v-if="item.value == scope.row.insState" :type="item.type"
              size="medium" style="margin-right: 5px;">{{item.label}}</el-tag>
              size="medium" style="margin-right: 5px;">{{ item.label }}</el-tag>
          </template>
        </el-table-column>
        <el-table-column prop="checkName" label="检验人" min-width="80px" show-overflow-tooltip></el-table-column>
        <el-table-column prop="isLeave" label="是否留样" width="95px" show-overflow-tooltip align="center">
          <template slot-scope="scope">
            <span>{{ scope.row.isLeave==0?'否':'是' }}</span>
            <span>{{ scope.row.isLeave == 0 ? "否" : "是" }}</span>
          </template>
        </el-table-column>
        <!-- 检验单会有一个是否有配套样品字段控制显示 -->
        <el-table-column prop="joinModel" label="配套样品型号" min-width="130px" show-overflow-tooltip
        v-if="insOrder.mating>0"></el-table-column>
          v-if="insOrder.mating > 0"></el-table-column>
        <el-table-column prop="joinName" label="配套样品名称" min-width="130px" show-overflow-tooltip
        v-if="insOrder.mating>0"></el-table-column>
          v-if="insOrder.mating > 0"></el-table-column>
        <el-table-column prop="joinNum" label="配套样品数量" min-width="130px" show-overflow-tooltip
        v-if="insOrder.mating>0"></el-table-column>
          v-if="insOrder.mating > 0"></el-table-column>
      </el-table>
    </el-drawer>
    <el-drawer title="任务切换" :visible.sync="taskVisible" :size="500">
      <ValueTable class="value-table" ref="insOrderPlan" :url="$api.insOrderPlan.inspectionOrderDetailsTaskSwitching"
        :componentData="componentData" :key="upIndex" style="height: 100%;"/>
        :componentData="componentData" :key="upIndex" style="height: 100%;" />
    </el-drawer>
    <el-dialog title="检验复核" :visible.sync="reviewDia" width="500px">
      <div class="body" style="display: flex;padding: 10px;" v-if="reviewDia">
        <div class="search_label" style="width: 150px;"><span class="required-span">* </span>不通过的理由:</div>
        <div class="search_label" style="width: 150px;">
          <span class="required-span">* </span>再次试验的理由:
        </div>
        <div class="search_input" style="width: 100%;">
          <el-input size="small" clearable v-model="noReason" type="textarea" :autosize="{ minRows: 4}"></el-input>
          <el-input size="small" clearable v-model="noReason" type="textarea" :autosize="{ minRows: 4 }"></el-input>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
@@ -811,10 +1018,12 @@
    </el-dialog>
    <el-dialog title="指定复核人员" :visible.sync="addVerifyDia" width="400px">
      <div class="body" style="display: flex;padding: 10px;align-items: center;">
        <div class="search_label" style="width: 150px;"><span class="required-span">*</span>复核人</div>
        <div class="search_label" style="width: 150px;">
          <span class="required-span">*</span>复核人
        </div>
        <div class="search_input" style="width: 100%;">
          <el-select v-model="verifyUser" placeholder="请选择" size="small" style="width: 100%;" clearable filterable>
            <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
            <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </div>
@@ -824,7 +1033,8 @@
        <el-button type="primary" @click="submit()">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog title="数据采集" :visible.sync="dataGetDia" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false" custom-class="custom-dialog">
    <el-dialog title="数据采集" :visible.sync="dataGetDia" :close-on-click-modal="false" :close-on-press-escape="false"
      :show-close="false" custom-class="custom-dialog">
      <div>
        <table border="1" cellpadding="10" class="thermal-table">
          <tr>
@@ -832,23 +1042,23 @@
            <td style="width: 120px;">检验子项</td>
            <td>数采数据</td>
          </tr>
          <template v-for="(item,index) in getData">
          <template v-for="(item, index) in getData">
            <tr>
              <td :rowspan="item.child.length">{{item.faName}}</td>
              <td :rowspan="item.child.length">{{ item.faName }}</td>
              <td>{{ item.child[0].name }}</td>
              <td style="text-align: left;">
                <el-checkbox-group
                  v-model="getDataIndex" :max="item.child[0].maxNum">
                  <el-checkbox v-for="(n,j) in item.child[0].arr" :label="j" :key="j">{{n}}</el-checkbox>
                <el-checkbox-group v-model="getDataIndex" :max="item.child[0].maxNum">
                  <el-checkbox v-for="(n, j) in item.child[0].arr" :label="j" :key="j">{{ n }}</el-checkbox>
                </el-checkbox-group>
              </td>
            </tr>
            <tr v-for="(m,i) in item.child" :key="i+'bbbbbbbbbbbbbb'" v-show="i>0">
            <tr v-for="(m, i) in item.child" :key="i + 'bbbbbbbbbbbbbb'" v-show="i > 0">
              <td>{{ m.name }}</td>
              <td style="text-align: left;">
                <el-checkbox-group
                  v-model="getDataIndex" :max="m.maxNum">
                  <el-checkbox v-for="(n,j) in m.arr" :label="j" :key="j">{{n}}</el-checkbox>
                <el-checkbox-group v-model="getDataIndex" :max="m.maxNum">
                  <el-checkbox v-for="(n, j) in m.arr" :label="j" :key="j">{{
                    n
                  }}</el-checkbox>
                </el-checkbox-group>
              </td>
            </tr>
@@ -859,13 +1069,8 @@
        <el-button type="primary" @click="submitDataGet()" :loading="getDataIndexLoading">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog
      title="选择电路检验模板版本"
      :visible.sync="versionDialogVisible"
      width="30%"
      :close-on-click-modal="false"
      :close-on-press-escape="false"
      :show-close="false">
    <el-dialog title="选择电路检验模板版本" :visible.sync="versionDialogVisible" width="30%" :close-on-click-modal="false"
      :close-on-press-escape="false" :show-close="false">
      <el-radio-group v-model="currentTableState">
        <el-radio :label="0">电调-电路检验原始记录</el-radio>
        <el-radio :label="1">非电调-电路检验原始记录</el-radio>
@@ -877,56 +1082,69 @@
    <el-dialog title="试验信息" :visible.sync="experimentDia" width="50%">
      <div style="height: 80vh;overflow-y: auto;">
        <div class="body" style="display: flex;padding: 10px;align-items: center;" v-if="experimentDia0">
          <div class="search_label" style="width: 150px;"><span class="required-span">*</span>实验阶段</div>
          <div class="search_label" style="width: 150px;">
            <span class="required-span">*</span>实验阶段
          </div>
          <div class="search_input" style="width: 100%;">
            <el-input clearable v-model="experimentInfo.term" size="small" placeholder=""></el-input>
          </div>
        </div>
        <div class="body" style="display: flex;padding: 10px;align-items: center;" v-if="experimentDia0">
          <div class="search_label" style="width: 150px;"><span class="required-span">*</span>实验操作</div>
          <div class="search_label" style="width: 150px;">
            <span class="required-span">*</span>实验操作
          </div>
          <div class="search_input" style="width: 100%;">
            <el-input clearable v-model="experimentInfo.note" size="small" placeholder="" type="textarea"
            :rows="2"></el-input>
              :rows="2"></el-input>
          </div>
        </div>
        <table border="1" cellpadding="10" class="thermal-table">
          <tr style="font-size: 18px;font-weight: 500;background-color: #F0F1F5;padding: 10px 0;box-sizing: border-box;">
            <td>样品</td>
            <td>样品编号</td>
            <td>型号</td>
            <td>检验项</td>
            <td>检验子项</td>
            <td>工时</td>
          </tr>
          <template v-for="(item,index) in sampleProduct">
            <tr>
              <td :rowspan="item.insProduct.length+1">{{ item.sample }}</td>
              <td :rowspan="item.insProduct.length+1">{{ item.sampleCode }}</td>
              <td :rowspan="item.insProduct.length+1">{{ item.model }}</td>
        <template v-for="(x, y) in newUserInfo">
          <p style="margin: 10px 0;">
            <el-tag size="small">{{ x.name }}</el-tag> 工时填写
          </p>
          <table border="1" cellpadding="10" class="thermal-table">
            <tr
              style="font-size: 18px;font-weight: 500;background-color: #F0F1F5;padding: 10px 0;box-sizing: border-box;">
              <td>样品</td>
              <td>样品编号</td>
              <td>型号</td>
              <td>检验项</td>
              <td>检验子项</td>
              <td>工时</td>
            </tr>
            <tr v-for="(m,i) in item.insProduct" :key="item.id+i">
              <td>{{ m.inspectionItem }}</td>
              <td>{{ m.inspectionItemSubclass }}</td>
              <td><el-input-number v-model="m.outputWorkTime" :min="0" :max="100" label="工时" size="small"></el-input-number></td>
            </tr>
          </template>
        </table>
            <template v-for="(item, index) in sampleProduct">
              <tr>
                <td :rowspan="item.insProduct.length + 1">{{ item.sample }}</td>
                <td :rowspan="item.insProduct.length + 1">
                  {{ item.sampleCode }}
                </td>
                <td :rowspan="item.insProduct.length + 1">{{ item.model }}</td>
              </tr>
              <tr v-for="(m, i) in item.insProduct" :key="item.id + i">
                <td>{{ m.inspectionItem }}</td>
                <td>{{ m.inspectionItemSubclass }}</td>
                <td>
                  <el-input-number v-model="x.timeArr[i]" :min="0" :max="100" label="工时" size="small"></el-input-number>
                </td>
              </tr>
            </template>
          </table>
        </template>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="experimentDia = false">取 消</el-button>
        <el-button type="primary" @click="submit0">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog
      title="文件预览"
      :visible.sync="lookFileVisible"
      width="60%" fullscreen :modal="false">
      <filePreview v-if="lookFileVisible" :fileUrl="currentFile.url"
      :currentFile="currentFile" style="max-height: 87vh;overflow-y: auto;"/>
    <el-dialog title="文件预览" :visible.sync="lookFileVisible" width="60%" fullscreen :modal="false">
      <filePreview v-if="lookFileVisible" :fileUrl="currentFile.url" :currentFile="currentFile"
        style="max-height: 87vh;overflow-y: auto;" />
    </el-dialog>
    <el-dialog title="保存模板" :visible.sync="templateDia" width="400px">
      <div class="body" style="display: flex;align-items: center;" v-if="templateDia">
        <div class="search_label" style="width: 90px;"><span class="required-span">* </span>模板名称:</div>
        <div class="search_label" style="width: 90px;">
          <span class="required-span">* </span>模板名称:
        </div>
        <div class="search_input">
          <el-input size="small" clearable v-model="templateName"></el-input>
        </div>
@@ -936,297 +1154,333 @@
        <el-button type="primary" @click="addTemplateDia" :loading="templateLoading">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog title="复核" :visible.sync="upInsReviewDia" width="400px">
      <el-radio-group v-model="upInsReviewType" style="display: flex;flex-direction: column">
        <el-radio :label="1" style="margin: 10px 0; ">继续测试下一个样品或其他站点任务</el-radio>
        <el-radio :label="0" style="margin: 10px 0; ">再次检验该样品</el-radio>
        <el-radio :label="2" style="margin: 10px 0; ">此委托单结束</el-radio>
        <p style="font-size: 12px;color:red">
          慎重:如果还有其他样品在检,点击结束可能会中断,请确保所有样品都检验且复核完成再点击
        </p>
      </el-radio-group>
      <span slot="footer" class="dialog-footer">
        <el-button @click="upInsReviewDia = false">取 消</el-button>
        <el-button type="primary" @click="upInsReview" :loading="reviewLoading">确 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
  import ValueTable from '../../tool/value-table.vue'
  import file from '../../../util/file'
  import excelFunction from '../../../util/excelFountion'
  import CircuitParameters1 from './circuit-parameters1.vue'
  import CircuitParameters2 from './circuit-parameters2.vue'
  import Humidity from './humidity.vue'
  import PowerCapacity from './power-capacity.vue'
  import filePreview from '../../tool/file-preview.vue'
  export default {
    props: ['sonLaboratory', 'orderId', 'state','inspectorList','version','orderStateId','isLook','num1','noBack'],
    components: {
      ValueTable,
      CircuitParameters1,
      CircuitParameters2,
      filePreview,
      Humidity,
      PowerCapacity,
    },
    data() {
      return {
        lookFileVisible:false,//预览文件
        experimentDia:false,
        experimentDia0:false,
        experimentInfo:{
          note:'',
          term:''
import ValueTable from "../../tool/value-table.vue";
import file from "../../../util/file";
import excelFunction from "../../../util/excelFountion";
import CircuitParameters1 from "./circuit-parameters1.vue";
import CircuitParameters2 from "./circuit-parameters2.vue";
import CircuitParameters3 from "./circuit-parameters3.vue";
import Humidity from "./humidity.vue";
import PowerCapacity from "./power-capacity.vue";
import filePreview from "../../tool/file-preview.vue";
export default {
  props: [
    "sonLaboratory",
    "orderId",
    "state",
    "inspectorList",
    "version",
    "orderStateId",
    "isLook",
    "num1",
    "noBack",
    "orderId0",
    "userInfo"
  ],
  components: {
    ValueTable,
    CircuitParameters1,
    CircuitParameters2,
    CircuitParameters3,
    filePreview,
    Humidity,
    PowerCapacity
  },
  data() {
    return {
      lookFileVisible: false, //预览文件
      experimentDia: false,
      experimentDia0: false,
      upInsReviewDia: false,
      upInsReviewType: 1,
      experimentInfo: {
        note: "",
        term: ""
      },
      currentNum: 0,
      versionLoading: false,
      versionDialogVisible: false,
      currentTableState: 0,
      dataGetDia: false,
      wareTableDataLoading: false,
      fileAdd: false,
      sampleVisible: false,
      taskVisible: false,
      submitLoading: false,
      searchForm: {
        sampleName: null,
        state: null
      },
      id: 0,
      componentData: {
        entity: {
          sonLaboratory: null,
          userId: 0
        },
        currentNum:0,
        versionLoading:false,
        versionDialogVisible:false,
        currentTableState:0,
        dataGetDia:false,
        wareTableDataLoading:false,
        fileAdd:false,
        sampleVisible: false,
        taskVisible: false,
        submitLoading: false,
        searchForm: {
          sampleName: null,
          state: null
        isIndex: false,
        showSelect: false,
        select: false,
        selectMethod: "handleChangeTask",
        sort: false,
        do: [],
        isPage: false,
        linkEvent: {},
        tagField: {
          type: {
            select: []
          },
          insState: {
            select: []
          }
        },
        id: 0,
        componentData: {
          entity: {
            sonLaboratory: null,
            userId: 0
          },
          isIndex: false,
          showSelect: false,
          select: false,
          selectMethod: 'handleChangeTask',
          sort: false,
          do: [],
          isPage: false,
          linkEvent: {},
          tagField: {
            type: {
              select: []
            },
            insState: {
              select: []
            },
          },
          currentId: '',
          selectField: {},
          requiredAdd: [],
          requiredUp: []
        currentId: "",
        selectField: {},
        requiredAdd: [],
        requiredUp: []
      },
      componentData0: {
        entity: {
          insSampleId: "",
          sonLaboratory: this.sonLaboratory,
          insOrderId: ""
        },
        componentData0: {
          entity: {
            insOrderId:'',
            sonLaboratory:this.sonLaboratory
          },
          isIndex: true,
          showSelect: false,
          select: false,
          sort: false,
          init:false,
          do: [
        isIndex: true,
        showSelect: false,
        select: false,
        sort: false,
        init: false,
        do: [
          {
                  id: 'handleDown',
                  font: '下载',
                  type: 'text',
                  method: 'handleDown'
               },{
                  id: 'delete',
                  font: '删除',
                  type: 'text',
                  method: 'doDiy',
            id: "handleDown",
            font: "下载",
            type: "text",
            method: "handleDown"
          },
          {
            id: "delete",
            font: "删除",
            type: "text",
            method: "doDiy",
            disabFun: (row, index) => {
                        return this.state!=1
                     }
               },
          {
                  id: '1',
                  font: '预览',
                  type: 'text',
                  method: 'lookFile',
               }
          ],
          isPage: false,
          linkEvent: {},
          tagField: {
            type:{
              select:[
                {
                  value: 1,
                  label: '图片'
                },
                {
                  value: 2,
                  label: '文件'
                }
              ]
              return this.state != 1;
            }
          },
          currentId: '',
          selectField: {},
          requiredAdd: [],
          requiredUp: []
          {
            id: "1",
            font: "预览",
            type: "text",
            method: "lookFile"
          }
        ],
        isPage: false,
        linkEvent: {},
        tagField: {
          type: {
            select: [
              {
                value: 1,
                label: "图片"
              },
              {
                value: 2,
                label: "文件"
              }
            ]
          }
        },
        upIndex: 0,
        changeType:null,
        insOrder: {},
        sampleProduct: [],
        typeList: [],
        urgentList: [],
        currentSample: {}, //当前样品信息
        tableList: [],
        loading: false,
        ps: {},
        param: {},
        currentKey: 1,
        currentKey0: 1,
        currentKey1: 1,
        currentKey2: 1,
        comparisonList: [],
        excelMethodList: [],
        equipOptions: [],
        userId: 0,
        reviewLoading: false,
        reviewDia: false,
        noReason: '',
        tableWidth: 1000,
        currentTable: null,
        tableLists: [],
        widthList: [],
        addVerifyDia: false,
        verifyUser: null,
        personList: [],
        enumList: [],
        fiberOpticTape:[],//光纤带列表
        fiberOptic:[],//光纤列表
        bushing:[],//套管列表
        currentFiberOpticTape:null,//当前光纤带
        currentFiberOptic:null,//当前光纤
        currentBushing:null,//当前套管
        tableLoading:false,
        upLoading:false,
        temptList:null,
        fiber:[],
        fibers:[],
        casing:[],
        currentTab:null,
        wareForm:{
          inspectionItem:1,
          inspectionItemSubclass:'20(常温)',
        },
        wareForm0:{},
        numOptions:[],
        temperatureOptions:[],
        wareTableData:[],
        equipForm:{
          value0:null,
          code0:null,
          value1:null,
          code1:null,
        },
        result: null,
        worker: null,
        worker0: null,
        wareLength:[],
        dataAcquisitionInfo:{},
        dataAcquisitionInfoNew:{},
        dataAcquisitionEidtAble:false,
        isGet:false,
        dataAcquisitionLoading:false,
        collected:false,
        // 热循环---开始
        thermalCyclingInfo:{
          max:0,
          inspectionItem:1,
          arr:[],
          length:1,
          inspectionItemClass:null,
        },
        thermalCyclingLoading:false,
        temDataAcquisition:false,
        getData:[],
        getDataIndex:[],
        getDataIndexLoading:false,
        changeType:null,
        getDataTypeId:'',
        getDataType:null,
        num:0,
        otherForm:{
          temperature:'',
          humidity:''
        },
        currentFile:{},//当前文件
        templates:[],//电路试验模板
        templateDia:false,//电路试验模板保存模板弹框
        template:null,
        templateLoading:false,
        templateName:'',
        addInsProductTemplatePower:false,//配置模板权限
      }
        currentId: "",
        selectField: {},
        requiredAdd: [],
        requiredUp: []
      },
      upIndex: 0,
      changeType: null,
      insOrder: {},
      sampleProduct: [],
      typeList: [],
      urgentList: [],
      currentSample: {}, //当前样品信息
      tableList: [],
      loading: false,
      ps: {},
      param: {},
      currentKey: 1,
      currentKey0: 1,
      currentKey1: 1,
      currentKey2: 1,
      comparisonList: [],
      excelMethodList: [],
      equipOptions: [],
      userId: 0,
      reviewLoading: false,
      reviewDia: false,
      noReason: "",
      tableWidth: 1000,
      currentTable: null,
      tableLists: [],
      widthList: [],
      addVerifyDia: false,
      verifyUser: null,
      personList: [],
      enumList: [],
      fiberOpticTape: [], //光纤带列表
      fiberOptic: [], //光纤列表
      bushing: [], //套管列表
      currentFiberOpticTape: null, //当前光纤带
      currentFiberOptic: null, //当前光纤
      currentBushing: null, //当前套管
      tableLoading: false,
      upLoading: false,
      temptList: null,
      fiber: [],
      fibers: [],
      casing: [],
      currentTab: null,
      wareForm: {
        inspectionItem: 1,
        inspectionItemSubclass: "20(常温)"
      },
      wareForm0: {},
      numOptions: [],
      temperatureOptions: [],
      wareTableData: [],
      equipForm: {
        value0: null,
        code0: null,
        value1: null,
        code1: null
      },
      result: null,
      worker: null,
      worker0: null,
      wareLength: [],
      dataAcquisitionInfo: {},
      dataAcquisitionInfoNew: {},
      dataAcquisitionEidtAble: false,
      isGet: false,
      dataAcquisitionLoading: false,
      collected: false,
      // 热循环---开始
      thermalCyclingInfo: {
        max: 0,
        inspectionItem: 1,
        arr: [],
        length: 1,
        inspectionItemClass: null
      },
      thermalCyclingLoading: false,
      temDataAcquisition: false,
      getData: [],
      getDataIndex: [],
      getDataIndexLoading: false,
      changeType: null,
      getDataTypeId: "",
      getDataType: null,
      num: 0,
      otherForm: {
        temperature: "",
        humidity: ""
      },
      currentFile: {}, //当前文件
      templates: [], //电路试验模板
      templateDia: false, //电路试验模板保存模板弹框
      template: null,
      templateLoading: false,
      templateName: "",
      addInsProductTemplatePower: false, //配置模板权限
      newUserInfo: []
    };
  },
  // 用于上传文件的信息
  computed: {
    headers() {
      return {
        token: sessionStorage.getItem("token")
      };
    },
    // 用于上传文件的信息
    computed: {
         headers() {
            return {
               'token': sessionStorage.getItem('token')
            }
         },
         action() {
            return this.javaApi + this.$api.insOrderPlan.uploadFile
         }
      },
    created() {
      this.componentData.entity.sonLaboratory = this.sonLaboratory;
      this.id = this.orderId;
      this.currentTableState = this.version
      this.num = this.num1
      this.getUserInfo()
    },
    mounted() {
      this.getTypeDicts()
      this.getInsStateDicts()
      this.getComparisonList()
      this.getAuthorizedPerson()
      this.scrollInit()
      this.getPower()
      this.startWorker()
      this.selectInsProductTemplate()
    },
    watch: {
      // 监听任务id,获取任务信息
      id(val) {
        this.loading = true
        this.$axios.post(this.$api.insOrderPlan.doInsOrder, {
          id: val,
    action() {
      return this.javaApi + this.$api.insOrderPlan.uploadFile;
    }
  },
  created() {
    this.componentData.entity.sonLaboratory = this.sonLaboratory;
    this.id = this.orderId;
    this.currentTableState = this.version;
    this.num = this.num1;
    this.getUserInfo();
  },
  mounted() {
    this.getTypeDicts();
    this.getInsStateDicts();
    this.getComparisonList();
    this.getAuthorizedPerson();
    this.scrollInit();
    this.getPower();
    this.startWorker();
  },
  watch: {
    // 监听任务id,获取任务信息
    id(val) {
      this.loading = true;
      this.$axios
        .post(this.$api.insOrderPlan.doInsOrder, {
          sampleId: val,
          laboratory: this.sonLaboratory
        }).then(async res => {
        })
        .then(async res => {
          this.insOrder = res.data.insOrder;
          this.componentData0.entity.insOrderId = val;
          this.$refs.fileList.selectList()
          this.componentData0.entity.insSampleId = val;
          this.componentData0.entity.insOrderId = this.orderId0;
          this.$refs.fileList.selectList();
          this.selectInsProductTemplate();
          this.urgentList.forEach(m => {
            if (m.value == this.insOrder.type) {
              this.insOrder.typeName = m.label
              this.insOrder.typeName = m.label;
            }
          })
          this.loading = false
          if(!res.data.sampleProduct||res.data.sampleProduct.length==0){
            return this.$message.error('该任务没有样品信息')
          });
          this.loading = false;
          if (!res.data.sampleProduct || res.data.sampleProduct.length == 0) {
            return this.$message.error("该任务没有样品信息");
          }
          // 赋值当前样品列表
          this.sampleProduct = res.data.sampleProduct
          this.currentSample = this.HaveJson(this.sampleProduct[0])
          let insProduct = this.HaveJson(this.currentSample.insProduct)
          this.sampleProduct = res.data.sampleProduct;
          this.currentSample = this.HaveJson(this.sampleProduct[0]);
          let insProduct = this.HaveJson(this.currentSample.insProduct);
          // 温度、湿度赋值
          if(insProduct&&insProduct.length>0){
            let {temperature,humidity} = insProduct[0];
          if (insProduct && insProduct.length > 0) {
            let { temperature, humidity } = insProduct[0];
            this.otherForm = {
              temperature:temperature?temperature:null,
              humidity:humidity?humidity:null,
            }
              temperature: temperature ? temperature : null,
              humidity: humidity ? humidity : null
            };
          }
          // 获取当前样品的检验项
          let list = await this.getCurrentProduct(this.currentSample.id,0)
          this.currentSample.insProduct = this.HaveJson(list)
          let list = await this.getCurrentProduct(this.currentSample.id, 0);
          this.currentSample.insProduct = this.HaveJson(list);
          // 初始化传递到后端的参数
          this.param = {}
          this.param = {};
          this.changeType = 0;
          this.currentSample.insProduct.forEach(a => {
            // 是否为成品电缆下的松套管项目,不是则执行初始化
            if(this.handleCasing(a.inspectionItem)){
            if (this.handleCasing(a.inspectionItem)) {
              this.param[a.id] = {
                insValue: [],
                comValue: [],
@@ -1234,569 +1488,683 @@
                equipValue: [],
                equipName: [],
                insResult: null,
                beforeCheck:null,
                afterCheck:null,
              }
                beforeCheck: null,
                afterCheck: null,
                testResult: null
              };
            }
          })
          this.determineWhetherToCollectData()//是否需要数采
          if (this.currentSample.index == undefined) this.currentSample['index'] = 1
          let bushing = this.currentSample.bushing
          this.getTableLists();//处理模板列表信息
          });
          this.determineWhetherToCollectData(); //是否需要数采
          if (this.currentSample.index == undefined)
            this.currentSample["index"] = 1;
          let bushing = this.currentSample.bushing;
          this.getTableLists(); //处理模板列表信息
          this.componentData.currentId = val;
          this.currentKey = 1;
          // 清空光纤配置相关数据---下面信息暂时可忽略
          this.fiberOpticTape = []
          this.fiberOpticTape = [];
          this.currentFiberOpticTape = null;
          this.fiberOptic = []
          this.fiberOptic = [];
          this.currentFiberOptic = null;
          this.bushing = []
          this.bushing = [];
          this.currentBushing = null;
          this.currentTab = null;
          if(bushing&&bushing.length>0){
            this.bushing = bushing
          if (bushing && bushing.length > 0) {
            this.bushing = bushing;
          }
        })
      },
      // 监听当前模板变化
      currentTable(val1, val0) {
        if (val0 != null && val1 != val0) {
          // if(this.tableLists.find(m=>m.templateId==val1)&&(this.tableLists.find(m=>m.templateId==val1).templateName=='成品缆检验原始记录')){
          //   if(this.casing.length>0){
          //     this.handleChange(this.casing[0].id,3)
          //   }
          //   return
          // }
          if(this.changeType&&this.changeType>0){
            // 如果是光纤、光纤带,则不执行下面操作
            return
          }
          this.tableLists.forEach(async (m, i) => {
            if (m.templateId == val1) {
              let list = await this.getCurrentProduct(this.currentSample.id,0)
              this.currentSample.insProduct = this.HaveJson(list)//赋值当前样品的检验项
              this.param = {}//初始化传到后端的参数
              this.currentSample.insProduct.forEach((a, j) => {
                if(this.handleCasing(a.inspectionItem)){
                  this.param[a.id] = {
                    insValue: [],
                    comValue: [],
                    resValue: null,
                    equipValue: [],
                    equipName: [],
                    insResult: null
                  }
                }
              })
              // 去重模板,返回有几个模板
              const mySet1 = new Set();
              this.tableLists = this.currentSample.insProduct.filter(m => {
                let num0 = mySet1.size;
                if (m.templateId != null&&m.template != null) {
                  try {
                    mySet1.add(JSON.stringify({
        });
    },
    // 监听当前模板变化
    currentTable(val1, val0) {
      if (val0 != null && val1 != val0) {
        // if(this.tableLists.find(m=>m.templateId==val1)&&(this.tableLists.find(m=>m.templateId==val1).templateName=='成品缆检验原始记录')){
        //   if(this.casing.length>0){
        //     this.handleChange(this.casing[0].id,3)
        //   }
        //   return
        // }
        if (this.changeType && this.changeType > 0) {
          // 如果是光纤、光纤带,则不执行下面操作
          return;
        }
        this.tableLists.forEach(async (m, i) => {
          if (m.templateId == val1) {
            let list = await this.getCurrentProduct(this.currentSample.id, 0);
            this.currentSample.insProduct = this.HaveJson(list); //赋值当前样品的检验项
            this.param = {}; //初始化传到后端的参数
            this.currentSample.insProduct.forEach((a, j) => {
              if (this.handleCasing(a.inspectionItem)) {
                this.param[a.id] = {
                  insValue: [],
                  comValue: [],
                  resValue: null,
                  equipValue: [],
                  equipName: [],
                  insResult: null
                };
              }
            });
            // 去重模板,返回有几个模板
            const mySet1 = new Set();
            this.tableLists = this.currentSample.insProduct.filter(m => {
              let num0 = mySet1.size;
              if (m.templateId != null && m.template != null) {
                try {
                  mySet1.add(
                    JSON.stringify({
                      template: m.template,
                      templateId: m.templateId
                    }))
                  } catch (error) {
                    console.log(222,error);
                  }
                    })
                  );
                } catch (error) {
                  console.log(222, error);
                }
                let num1 = mySet1.size;
                if (num1 > num0) {
                  return m
                }
              });
              if (this.tableLists && this.tableLists.length > 0) {
                this.tableList = null;
                this.tableList = this.tableLists.filter(m => m.templateId == val1)
                // 对模板进行处理
                this.handleTableData()
              }
              let num1 = mySet1.size;
              if (num1 > num0) {
                return m;
              }
            });
            if (this.tableLists && this.tableLists.length > 0) {
              this.tableList = null;
              this.tableList = this.tableLists.filter(
                m => m.templateId == val1
              );
              // 对模板进行处理
              this.handleTableData();
            }
          })
        }
      },
      // 特殊检验项--监听设备信息改变
      equipForm:{
        deep:true,
        handler(val){
          if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))&&this.equipOptions&&this.equipOptions.length>0){
            // 初始化设备信息
            this.param[this.currentSample.insProduct[0].id].equipValue = []
            this.param[this.currentSample.insProduct[0].id].equipName = []
            if(this.equipForm.code0){
              // 赋值第一个设备的信息
              this.equipForm.value0 = this.equipOptions.find(m=>m.value==this.equipForm.code0).label
              this.param[this.currentSample.insProduct[0].id].equipValue.push({
                i:this.currentSample.insProduct[0].id,
                v:{
                  v:this.equipForm.code0
                }
              })
              this.param[this.currentSample.insProduct[0].id].equipName.push({
                i:this.currentSample.insProduct[0].id,
                v:{
                  v:this.equipForm.value0
                }
              })
            }
            if(this.equipForm.code1){
              // 赋值第二个设备的信息
              this.equipForm.value1 = this.equipOptions.find(m=>m.value==this.equipForm.code1).label
              this.param[this.currentSample.insProduct[0].id].equipValue.push({
                i:this.currentSample.insProduct[0].id,
                v:{
                  v:this.equipForm.code1
                }
              })
              this.param[this.currentSample.insProduct[0].id].equipName.push({
                i:this.currentSample.insProduct[0].id,
                v:{
                  v:this.equipForm.value1
                }
              })
            }
            // 保存数据
            this.saveInsContext(this.currentSample.insProduct[0].id)
          }
        }
      },
        });
      }
    },
    beforeDestroy() {
      // 在组件销毁前确保停止 Worker,避免内存泄漏
      this.stopWorker();
    },
    methods: {
      // 数据采集
      getDataAcquisitionDevice(){
        if(this.tableLists.find(m=>m.templateId==this.currentTable)&&this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'){
          // 温度循环检验原始记录----数采----PK8000
          let temperature = this.wareForm.inspectionItemSubclass;
          if(typeof temperature == 'string'&&temperature.includes('(常温)')){
            temperature = `20℃(常温)`
          }else{
            temperature = temperature + '℃'
    // 特殊检验项--监听设备信息改变
    equipForm: {
      deep: true,
      handler(val) {
        if (
          this.tableLists.find(m => m.templateId == this.currentTable) &&
          (this.tableLists.find(m => m.templateId == this.currentTable)
            .templateName == "温度循环检验原始记录" ||
            this.tableLists
              .find(m => m.templateId == this.currentTable)
              .templateName.includes("热循环") ||
            this.tableLists
              .find(m => m.templateId == this.currentTable)
              .templateName.includes("温升试验")) &&
          this.equipOptions &&
          this.equipOptions.length > 0
        ) {
          // 初始化设备信息
          this.param[this.currentSample.insProduct[0].id].equipValue = [];
          this.param[this.currentSample.insProduct[0].id].equipName = [];
          if (this.equipForm.code0) {
            // 赋值第一个设备的信息
            this.equipForm.value0 = this.equipOptions.find(
              m => m.value == this.equipForm.code0
            ).label;
            this.param[this.currentSample.insProduct[0].id].equipValue.push({
              i: this.currentSample.insProduct[0].id,
              v: {
                v: this.equipForm.code0
              }
            });
            this.param[this.currentSample.insProduct[0].id].equipName.push({
              i: this.currentSample.insProduct[0].id,
              v: {
                v: this.equipForm.value0
              }
            });
          }
          this.dataAcquisitionLoading = true
          this.$axios.post(this.$api.deviceScope.temDataAcquisition,{
            entrustCode:this.insOrder.entrustCode,
            sampleCode:this.currentSample.sampleCode,
            model:this.wareForm0.model,
            cycles:this.wareForm.inspectionItem,
            temperature:temperature,
          }, {
          headers: {
            'Content-Type': 'application/json'
          },
          noQs:true
        }).then(res=>{
            this.dataAcquisitionLoading = false
            if(res.code!=200){
              return
          if (this.equipForm.code1) {
            // 赋值第二个设备的信息
            this.equipForm.value1 = this.equipOptions.find(
              m => m.value == this.equipForm.code1
            ).label;
            this.param[this.currentSample.insProduct[0].id].equipValue.push({
              i: this.currentSample.insProduct[0].id,
              v: {
                v: this.equipForm.code1
              }
            });
            this.param[this.currentSample.insProduct[0].id].equipName.push({
              i: this.currentSample.insProduct[0].id,
              v: {
                v: this.equipForm.value1
              }
            });
          }
          // 保存数据
          this.saveInsContext(this.currentSample.insProduct[0].id);
        }
      }
    }
  },
  beforeDestroy() {
    // 在组件销毁前确保停止 Worker,避免内存泄漏
    this.stopWorker();
  },
  methods: {
    // 数据采集
    getDataAcquisitionDevice() {
      if (
        this.tableLists.find(m => m.templateId == this.currentTable) &&
        this.tableLists.find(m => m.templateId == this.currentTable)
          .templateName == "温度循环检验原始记录"
      ) {
        // 温度循环检验原始记录----数采----PK8000
        let temperature = this.wareForm.inspectionItemSubclass;
        if (typeof temperature == "string" && temperature.includes("(常温)")) {
          temperature = `20℃(常温)`;
        } else {
          temperature = temperature + "℃";
        }
        this.dataAcquisitionLoading = true;
        this.$axios
          .post(
            this.$api.deviceScope.temDataAcquisition,
            {
              entrustCode: this.insOrder.entrustCode,
              sampleCode: this.currentSample.sampleCode,
              model: this.wareForm0.model,
              cycles: this.wareForm.inspectionItem,
              temperature: temperature
            },
            {
              headers: {
                "Content-Type": "application/json"
              },
              noQs: true
            }
          )
          .then(res => {
            this.dataAcquisitionLoading = false;
            if (res.code != 200) {
              return;
            }
            // 赋值回显PK8000的数据
            this.wareFormChange()
          })
        }else{
          // 一般的数据采集
          this.dataAcquisitionLoading = true
          this.$axios.get(this.$api.deviceScope.dataCollection+'?entrustCode='+this.insOrder.entrustCode+'&sampleCode='+this.currentSample.sampleCode + '&id=' + this.currentSample.id).then(res=>{
            this.dataAcquisitionLoading = false
            if(res.code!=200){
              return
            this.wareFormChange();
          });
      } else {
        // 一般的数据采集
        this.dataAcquisitionLoading = true;
        this.$axios
          .get(
            this.$api.deviceScope.dataCollection +
            "?entrustCode=" +
            this.insOrder.entrustCode +
            "&sampleCode=" +
            this.currentSample.sampleCode +
            "&id=" +
            this.currentSample.id
          )
          .then(res => {
            this.dataAcquisitionLoading = false;
            if (res.code != 200) {
              return;
            }
            this.dataAcquisitionInfoNew = this.HaveJson(res.data)
            this.dataAcquisitionInfoNew = this.HaveJson(res.data);
            // 对数采回来的值进行处理
            this.handleDataAcquisition(res.data)
          })
        }
      },
      handleDataAcquisition(data){
        // 是否可以编辑数采数据
        if(this.dataAcquisitionEidtAble){
          this.getDataType = 1;
        }else{
          this.getDataType = 2;
        }
        this.dataAcquisitionInfo = {}
        this.getData = []
        for (let i in data){
          let obj = {
            faName:i,
            child:[]
          }
          // 循环数采数据
          for(let j in data[i]){
            // 拼接字符串  检验项+检验子项
            let str0 = ''
            if(i==j){
              str0 = i+','
            }else{
              str0 = i+','+j
            }
            if(j!='frequency'&&data[i][j]&&(!data[i][j].result||typeof data[i][j].result == 'string')){
              // 处理数采信息格式
              this.dataAcquisitionInfo[str0] = {
                value:data[i][j].result,
                frequency:data[i].frequency
              }
              let list = this.tableList[0].arr
              // 循环页面列表信息,判断数采数据对应页面列表信息的检验项是哪个,并给当前检验项绑定设备信息
              list.forEach((item,index)=>{
                let num0 = 0;
                let str = ''
                item.forEach(m=>{
                  if(m.v.ps&&(m.v.ps.value=='检验子项'||m.v.ps.value=='检验项')){
                    if(m.v.ps&&m.v.ps.value=='检验项'){
                      if(num0==0){
                        str = m.v.v+','
                        num0++
                      }
                    }
                    if(m.v.ps&&m.v.ps.value=='检验子项'){
                      if(num0==1){
                        str = str+m.v.v
                      }
                    }
                  }
                  // 绑定设备信息
                  if(data[i][j].equipName&&data[i][j].equipValue&&m.v&&m.v.ps&&m.v.ps.value=='设备编码'&&str0==str){
                    if(!m.v.v){
                      this.changeEquip(data[i][j].equipValue,m,data[i][j].equipName)
                    }
                  }
                })
              })
            }else if(j!='frequency'&&data[i][j]&&Array.isArray(data[i][j].result)){
              // 如果返回的数采数据是数组,则处理数组
              // 以下逻辑为获取每个检验项可输入的检验值的最大个数
              let str0 = ''
              if(i==j){
                str0 = i+','
              }else{
                str0 = i+','+j
              }
              let list = this.tableList[0].arr
              let maxNum = 0
              list.forEach((item,index)=>{
                let num0 = 0;
                let str = ''
                item.forEach(m=>{
                  if(m.v.ps&&(m.v.ps.value=='检验子项'||m.v.ps.value=='检验项')){
                    if(m.v.ps&&m.v.ps.value=='检验项'){
                      if(num0==0){
                        str = m.v.v+','
                        num0++
                      }
                    }
                    if(m.v.ps&&m.v.ps.value=='检验子项'){
                      if(num0==1){
                        str = str+m.v.v
                      }
                    }
                    let num = 0;
                    list[index].forEach(n=>{
                      if(n.v.ps&&n.v.ps.value&&typeof n.v.ps.value == 'string'&&n.v.ps.value.includes('检验值')){
                        num++
                      }
                    })
                    if(str0==str){
                      maxNum = num
                    }
                  }
                  // 绑定设备
                  if(data[i][j].equipName&&data[i][j].equipValue&&m.v&&m.v.ps&&m.v.ps.value=='设备编码'&&str0==str){
                    if(!m.v.v){
                      this.changeEquip(data[i][j].equipValue,m,data[i][j].equipName)
                    }
                  }
                })
              })
              // let arr3 = []
              // for (let l=0 ;i<data[i][j].result.length;i++){
              //   arr3.push({
              //     id:,
              //     value:
              //   })
              // }
              // 获取到最大检验值输入个数后重组数据
              let obj0 = {
                name:j,
                arr:data[i][j].result,
                maxNum:maxNum,
                value:[]
              }
              // 如果数采返回的数组长度大于最大输入个数,则将数采数据在弹框中展示,用户选择需要手动选择数采的信息
              if(data[i][j].result&&Array.isArray(data[i][j].result)&&data[i][j].result.length>maxNum){
                obj.child.push(obj0)
              }else{
                this.dataAcquisitionInfo[str0] = {
                  value:data[i][j].result
                }
              }
            }
          }
          if(obj.child.length>0){
            this.getData.push(obj)
          }
        }
        // 如果存在数采返回的数组长度大于最大输入个数,则弹出弹框选择
        if(this.getData.length>0){
          this.dataGetDia = true
          this.getDataIndex = []
        }else{
          // 如果都不存在,则,进入处理数采线程里去处理数据
          try {
            // 向 Worker 发送消息,开始处理逻辑
            this.getDataIndexLoading = false
            this.dataGetDia = false
            this.getDataTypeId = ''
            this.worker0.postMessage(JSON.stringify({
              dataAcquisitionInfo: this.dataAcquisitionInfo,
              list:this.tableList[0].arr
            }));
          } catch (error) {
            console.log(1111,error);
          }
        }
        // 监听 Worker 返回的结果
        this.worker0.onmessage = (event) => {
          let result = JSON.parse(event.data);
          if(result.method=='changeInput'){
            // 采集后的数据,需要进行计算的线程进行计算
            let {list,n} = result.value
            this.$set(this.tableList[0],'arr',list)
            this.changeInput('',`${this.currentSample.insProduct[0].templateId}-${n.r}-${n.c}-${n.i}`,n)
          }else if(result.getDataTypeId){
            // 获取到数采最后一项,检验项的ID
            this.getDataTypeId = result.getDataTypeId
          }
            this.handleDataAcquisition(res.data);
          });
      }
    },
    handleDataAcquisition(data) {
      // 是否可以编辑数采数据
      if (this.dataAcquisitionEidtAble) {
        this.getDataType = 1;
      } else {
        this.getDataType = 2;
      }
      this.dataAcquisitionInfo = {};
      this.getData = [];
      for (let i in data) {
        let obj = {
          faName: i,
          child: []
        };
      },
      // 如果存在数采返回的数组长度大于最大输入个数,则弹出弹框选择,这里是弹框的提交
      submitDataGet(){
        if(this.getDataIndex.length==0){
          this.$message.error('请选择需要采集的数据')
          return
        }
        this.getDataIndex.sort((a, b) => a - b);
        for (let i=0;i<this.getData.length;i++){
          for(let j=0;j<this.getData[i].child.length;j++){
            // 对用户选择的数采信息进行处理,赋值
            let arr = []
            for(let k=0;k<this.getDataIndex.length;k++){
              arr.push( this.dataAcquisitionInfoNew[this.getData[i].faName][this.getData[i].child[j].name].result[this.getDataIndex[k]])
        // 循环数采数据
        for (let j in data[i]) {
          // 拼接字符串  检验项+检验子项
          let str0 = "";
          if (i == j) {
            str0 = i + ",";
          } else {
            str0 = i + "," + j;
          }
          if (
            j != "frequency" &&
            data[i][j] &&
            (!data[i][j].result || typeof data[i][j].result == "string")
          ) {
            // 处理数采信息格式
            this.dataAcquisitionInfo[str0] = {
              value: data[i][j].result,
              frequency: data[i].frequency
            };
            let list = this.tableList[0].arr;
            // 循环页面列表信息,判断数采数据对应页面列表信息的检验项是哪个,并给当前检验项绑定设备信息
            list.forEach((item, index) => {
              let num0 = 0;
              let str = "";
              item.forEach(m => {
                if (
                  m.v.ps &&
                  (m.v.ps.value == "检验子项" || m.v.ps.value == "检验项")
                ) {
                  if (m.v.ps && m.v.ps.value == "检验项") {
                    if (num0 == 0) {
                      str = m.v.v + ",";
                      num0++;
                    }
                  }
                  if (m.v.ps && m.v.ps.value == "检验子项") {
                    if (num0 == 1) {
                      str = str + m.v.v;
                    }
                  }
                }
                // 绑定设备信息
                if (
                  data[i][j].equipName &&
                  data[i][j].equipValue &&
                  m.v &&
                  m.v.ps &&
                  m.v.ps.value == "设备编码" &&
                  str0 == str
                ) {
                  if (!m.v.v) {
                    this.changeEquip(
                      data[i][j].equipValue,
                      m,
                      data[i][j].equipName
                    );
                  }
                }
              });
            });
          } else if (
            j != "frequency" &&
            data[i][j] &&
            Array.isArray(data[i][j].result)
          ) {
            // 如果返回的数采数据是数组,则处理数组
            // 以下逻辑为获取每个检验项可输入的检验值的最大个数
            let str0 = "";
            if (i == j) {
              str0 = i + ",";
            } else {
              str0 = i + "," + j;
            }
            this.dataAcquisitionInfoNew[this.getData[i].faName][this.getData[i].child[j].name].result = arr
            let list = this.tableList[0].arr;
            let maxNum = 0;
            list.forEach((item, index) => {
              let num0 = 0;
              let str = "";
              item.forEach(m => {
                if (
                  m.v.ps &&
                  (m.v.ps.value == "检验子项" || m.v.ps.value == "检验项")
                ) {
                  if (m.v.ps && m.v.ps.value == "检验项") {
                    if (num0 == 0) {
                      str = m.v.v + ",";
                      num0++;
                    }
                  }
                  if (m.v.ps && m.v.ps.value == "检验子项") {
                    if (num0 == 1) {
                      str = str + m.v.v;
                    }
                  }
                  let num = 0;
                  list[index].forEach(n => {
                    if (
                      n.v.ps &&
                      n.v.ps.value &&
                      typeof n.v.ps.value == "string" &&
                      n.v.ps.value.includes("检验值")
                    ) {
                      num++;
                    }
                  });
                  if (str0 == str) {
                    maxNum = num;
                  }
                }
                // 绑定设备
                if (
                  data[i][j].equipName &&
                  data[i][j].equipValue &&
                  m.v &&
                  m.v.ps &&
                  m.v.ps.value == "设备编码" &&
                  str0 == str
                ) {
                  if (!m.v.v) {
                    this.changeEquip(
                      data[i][j].equipValue,
                      m,
                      data[i][j].equipName
                    );
                  }
                }
              });
            });
            // let arr3 = []
            // for (let l=0 ;i<data[i][j].result.length;i++){
            //   arr3.push({
            //     id:,
            //     value:
            //   })
            // }
            // 获取到最大检验值输入个数后重组数据
            let obj0 = {
              name: j,
              arr: data[i][j].result,
              maxNum: maxNum,
              value: []
            };
            // 如果数采返回的数组长度大于最大输入个数,则将数采数据在弹框中展示,用户选择需要手动选择数采的信息
            if (
              data[i][j].result &&
              Array.isArray(data[i][j].result) &&
              data[i][j].result.length > maxNum
            ) {
              obj.child.push(obj0);
            } else {
              this.dataAcquisitionInfo[str0] = {
                value: data[i][j].result
              };
            }
          }
        }
        this.getDataIndexLoading = true
        // 赋值完成后需要再次进入处理数采线程里去处理数据
        this.handleDataAcquisition(this.dataAcquisitionInfoNew)
      },
      // 多线程
      startWorker() {
        if (this.worker) {
          this.stopWorker(); // 确保之前的 Worker 已停止
        if (obj.child.length > 0) {
          this.getData.push(obj);
        }
        // 创建 Worker 实例
        this.worker = new Worker('/static/js/worker.js');
        if (this.worker0) {
          this.stopWorker(); // 确保之前的 Worker 已停止
      }
      // 如果存在数采返回的数组长度大于最大输入个数,则弹出弹框选择
      if (this.getData.length > 0) {
        this.dataGetDia = true;
        this.getDataIndex = [];
      } else {
        // 如果都不存在,则,进入处理数采线程里去处理数据
        try {
          // 向 Worker 发送消息,开始处理逻辑
          this.getDataIndexLoading = false;
          this.dataGetDia = false;
          this.getDataTypeId = "";
          this.worker0.postMessage(
            JSON.stringify({
              dataAcquisitionInfo: this.dataAcquisitionInfo,
              list: this.tableList[0].arr
            })
          );
        } catch (error) {
          console.log(1111, error);
        }
        // 创建 Worker 实例
        this.worker0 = new Worker('/static/js/worker0.js');
      },
      // 停止多线程
      stopWorker() {
        if (this.worker) {
          this.worker.terminate();
          this.worker = null;
      }
      // 监听 Worker 返回的结果
      this.worker0.onmessage = event => {
        let result = JSON.parse(event.data);
        if (result.method == "changeInput") {
          // 采集后的数据,需要进行计算的线程进行计算
          let { list, n } = result.value;
          this.$set(this.tableList[0], "arr", list);
          this.changeInput(
            "",
            `${this.currentSample.insProduct[0].templateId}-${n.r}-${n.c}-${n.i}`,
            n
          );
        } else if (result.getDataTypeId) {
          // 获取到数采最后一项,检验项的ID
          this.getDataTypeId = result.getDataTypeId;
        }
        if (this.worker0) {
          this.worker0.terminate();
          this.worker0 = null;
      };
    },
    // 如果存在数采返回的数组长度大于最大输入个数,则弹出弹框选择,这里是弹框的提交
    submitDataGet() {
      if (this.getDataIndex.length == 0) {
        this.$message.error("请选择需要采集的数据");
        return;
      }
      this.getDataIndex.sort((a, b) => a - b);
      for (let i = 0; i < this.getData.length; i++) {
        for (let j = 0; j < this.getData[i].child.length; j++) {
          // 对用户选择的数采信息进行处理,赋值
          let arr = [];
          for (let k = 0; k < this.getDataIndex.length; k++) {
            arr.push(
              this.dataAcquisitionInfoNew[this.getData[i].faName][
                this.getData[i].child[j].name
              ].result[this.getDataIndex[k]]
            );
          }
          this.dataAcquisitionInfoNew[this.getData[i].faName][
            this.getData[i].child[j].name
          ].result = arr;
        }
      },
      // 温度循环---开始
      changeItem(row){
        // 内端、外端进行赋值逻辑处理
      }
      this.getDataIndexLoading = true;
      // 赋值完成后需要再次进入处理数采线程里去处理数据
      this.handleDataAcquisition(this.dataAcquisitionInfoNew);
    },
    // 多线程
    startWorker() {
      if (this.worker) {
        this.stopWorker(); // 确保之前的 Worker 已停止
      }
      // 创建 Worker 实例
      this.worker = new Worker("/static/js/worker.js");
      if (this.worker0) {
        this.stopWorker(); // 确保之前的 Worker 已停止
      }
      // 创建 Worker 实例
      this.worker0 = new Worker("/static/js/worker0.js");
    },
    // 停止多线程
    stopWorker() {
      if (this.worker) {
        this.worker.terminate();
        this.worker = null;
      }
      if (this.worker0) {
        this.worker0.terminate();
        this.worker0 = null;
      }
    },
    // 温度循环---开始
    changeItem(row) {
      // 内端、外端进行赋值逻辑处理
        // 赋值到页面
        if(row.value0&&!row.value1){
          // 赋值内端
          this.$set(row,'comValue',Number(row.value0).toFixed(3))
        }else if(!row.value0&&row.value1){
          // 赋值外端
          this.$set(row,'comValue',Number(row.value1).toFixed(3))
        }else if(row.value0&&row.value1){
          // 赋值计算值
          this.$set(row,'comValue',((Number(row.value0)+Number(row.value1))/2).toFixed(3))
        }else{
          return
        }
        // 赋值到传到后端的参数---特殊项目必须严格按照这种格式传参,否则后端识别不了
        // 赋值内外端
        this.param[row.id].insValue = [
          {
            i:row.id,
            v:{
              v:row.value0
            }
          },
          {
            i:row.id,
            v:{
              v:row.value1
            }
          }
        ]
      // 赋值到页面
      if (row.value0 && !row.value1) {
        // 赋值内端
        this.$set(row, "comValue", Number(row.value0).toFixed(3));
      } else if (!row.value0 && row.value1) {
        // 赋值外端
        this.$set(row, "comValue", Number(row.value1).toFixed(3));
      } else if (row.value0 && row.value1) {
        // 赋值计算值
        this.param[row.id].comValue = [{
            i:row.id,
            v:{
              v:row.comValue
            }
          }]
        // 判断结果,得出结论
        if(this.wareForm.inspectionItemSubclass!='20(常温)'){
          // 给页面列表赋值最终值
          row.resValue = row.comValue?Math.abs(row.comValue-Number(row.insProduct.complue)).toFixed(3):''
          // 给传递到后端的参数赋值最终值
          this.param[row.id].resValue.v.v = row.resValue
          // 判断结论,给页面列表赋值结论
          if(row.ask&&row.resValue){
            if(row.ask.includes('<')){
              row.insResult = row.resValue<row.ask.split('<')[1]?1:0
            }else if(row.ask.includes('>')){
              row.insResult = row.resValue<row.ask.split('>')[1]?1:0
            }else if(row.ask.includes('=')){
              row.insResult = row.resValue==row.ask.split('=')[1]?1:0
            }else if(row.ask.includes('≥')){
              row.insResult = row.resValue>=row.ask.split('≥')[1]?1:0
            }else if(row.ask.includes('≤')){
              row.insResult = row.resValue<=row.ask.split('≤')[1]?1:0
            }
            // 给传递到后端的参数赋值结论
            this.param[row.id].insResult.v.v = row.insResult
        this.$set(
          row,
          "comValue",
          ((Number(row.value0) + Number(row.value1)) / 2).toFixed(3)
        );
      } else {
        return;
      }
      // 赋值到传到后端的参数---特殊项目必须严格按照这种格式传参,否则后端识别不了
      // 赋值内外端
      this.param[row.id].insValue = [
        {
          i: row.id,
          v: {
            v: row.value0
          }
        }else{
          // 20(常温)默认合格
          this.param[row.id].insResult.v.v = 1
        },
        {
          i: row.id,
          v: {
            v: row.value1
          }
        }
        this.$refs.wareTableData.doLayout()
        // 进行数据的保存
        this.saveInsContext()
      },
      // 当循环次数、温度点变化、PK8000数采时会调用,主要是获取信息进行回显
      wareFormChange(m,type){
        if(this.PROJECT!='检测中心'||!this.tableLists.find(m=>m.templateId==this.currentTable)||this.tableLists.find(m=>m.templateId==this.currentTable).templateName!='温度循环检验原始记录'){
          return
      ];
      // 赋值计算值
      this.param[row.id].comValue = [
        {
          i: row.id,
          v: {
            v: row.comValue
          }
        }
        if(m&&type){
          this.wareForm[type] = m
      ];
      // 判断结果,得出结论
      if (this.wareForm.inspectionItemSubclass != "20(常温)") {
        // 给页面列表赋值最终值
        row.resValue = row.comValue
          ? Math.abs(row.comValue - Number(row.insProduct.complue)).toFixed(3)
          : "";
        // 给传递到后端的参数赋值最终值
        this.param[row.id].resValue.v.v = row.resValue;
        // 判断结论,给页面列表赋值结论
        if (row.ask && row.resValue) {
          if (row.ask.includes("<")) {
            row.insResult = row.resValue < row.ask.split("<")[1] ? 1 : 0;
          } else if (row.ask.includes(">")) {
            row.insResult = row.resValue < row.ask.split(">")[1] ? 1 : 0;
          } else if (row.ask.includes("=")) {
            row.insResult = row.resValue == row.ask.split("=")[1] ? 1 : 0;
          } else if (row.ask.includes("≥")) {
            row.insResult = row.resValue >= row.ask.split("≥")[1] ? 1 : 0;
          } else if (row.ask.includes("≤")) {
            row.insResult = row.resValue <= row.ask.split("≤")[1] ? 1 : 0;
          }
          // 给传递到后端的参数赋值结论
          this.param[row.id].insResult.v.v = row.insResult;
        }
        let wareForm = {...this.wareForm}
        if(this.wareForm.inspectionItemSubclass=='20(常温)'){
          wareForm.inspectionItemSubclass ='20℃(常温)'
        }else{
          wareForm.inspectionItemSubclass = wareForm.inspectionItemSubclass+'℃'
        }
        this.wareTableDataLoading = true
        this.$axios.post(this.$api.insOrderPlan.temCycle,{
          sampleId:this.currentSample.id,
      } else {
        // 20(常温)默认合格
        this.param[row.id].insResult.v.v = 1;
      }
      this.$refs.wareTableData.doLayout();
      // 进行数据的保存
      this.saveInsContext();
    },
    // 当循环次数、温度点变化、PK8000数采时会调用,主要是获取信息进行回显
    wareFormChange(m, type) {
      if (
        this.PROJECT != "检测中心" ||
        !this.tableLists.find(m => m.templateId == this.currentTable) ||
        this.tableLists.find(m => m.templateId == this.currentTable)
          .templateName != "温度循环检验原始记录"
      ) {
        return;
      }
      if (m && type) {
        this.wareForm[type] = m;
      }
      let wareForm = { ...this.wareForm };
      if (this.wareForm.inspectionItemSubclass == "20(常温)") {
        wareForm.inspectionItemSubclass = "20℃(常温)";
      } else {
        wareForm.inspectionItemSubclass = wareForm.inspectionItemSubclass + "℃";
      }
      this.wareTableDataLoading = true;
      this.$axios
        .post(this.$api.insOrderPlan.temCycle, {
          sampleId: this.currentSample.id,
          ...wareForm
        }).then(res => {
          this.wareTableDataLoading = false
          if (res.code == 201) return
          let {productVos,sampleVo} = res.data
          this.wareForm0 = sampleVo
        })
        .then(res => {
          this.wareTableDataLoading = false;
          if (res.code == 201) return;
          let { productVos, sampleVo } = res.data;
          this.wareForm0 = sampleVo;
          // 初始化传到后端的参数
          productVos = productVos.map(m=>{
            let obj = {...m,...m.insProduct}
          productVos = productVos.map(m => {
            let obj = { ...m, ...m.insProduct };
            this.param[obj.id] = {
              insValue: [],
              comValue: [],
              resValue: {
                i:obj.id,
                v:{
                  v:null
                i: obj.id,
                v: {
                  v: null
                }
              },
              equipValue: [],
              equipName: [],
              insResult: {
                i:obj.id,
                v:{
                  v:null
                i: obj.id,
                v: {
                  v: null
                }
              }
            }
            let insProductResult = obj.insProductResult
            };
            let insProductResult = obj.insProductResult;
            // 给传递到后端的参数进行赋值,给页面数据赋值
            if(insProductResult){
              for(let i in insProductResult){
            if (insProductResult) {
              for (let i in insProductResult) {
                switch (i) {
                  // 检验值赋值
                  case 'insValue':
                    let insValue = JSON.parse(insProductResult[i])
                    if(insValue&&insValue.length>1){
                  case "insValue":
                    let insValue = JSON.parse(insProductResult[i]);
                    if (insValue && insValue.length > 1) {
                      // 后端的参数进行赋值
                      this.param[obj.id].insValue = [
                        {
                          i:obj.id,
                          v:{
                            v:insValue[0].v
                          i: obj.id,
                          v: {
                            v: insValue[0].v
                          }
                        },
                        {
                          i:obj.id,
                          v:{
                            v:insValue[1].v
                          i: obj.id,
                          v: {
                            v: insValue[1].v
                          }
                        }
                      ]
                      ];
                      // 页面数据赋值
                      obj.value0 = insValue[0].v
                      obj.value1 = insValue[1].v
                    }else if(insValue&&insValue.length==1){
                      obj.value0 = insValue[0].v;
                      obj.value1 = insValue[1].v;
                    } else if (insValue && insValue.length == 1) {
                      // 后端的参数进行赋值
                      this.param[obj.id].insValue = [
                        {
                          i:obj.id,
                          v:{
                            v:insValue[0].v
                          i: obj.id,
                          v: {
                            v: insValue[0].v
                          }
                        },
                        {
                          i:obj.id,
                          v:{
                            v:''
                          i: obj.id,
                          v: {
                            v: ""
                          }
                        }
                      ]
                       // 页面数据赋值
                      obj.value0 = insValue[0].v
                      obj.value1 = ''
                      ];
                      // 页面数据赋值
                      obj.value0 = insValue[0].v;
                      obj.value1 = "";
                    }
                    break;
                    // 计算值赋值
                  case 'comValue':
                  let comValue = JSON.parse(insProductResult[i])
                    if(comValue&&comValue.length>0){
                  // 计算值赋值
                  case "comValue":
                    let comValue = JSON.parse(insProductResult[i]);
                    if (comValue && comValue.length > 0) {
                      // 后端的参数进行赋值
                      this.param[obj.id].comValue = [
                        {
                          i:obj.id,
                          v:{
                            v:comValue[0].v
                          i: obj.id,
                          v: {
                            v: comValue[0].v
                          }
                        }
                      ]
                       // 页面数据赋值
                      obj.comValue = comValue[0].v
                      ];
                      // 页面数据赋值
                      obj.comValue = comValue[0].v;
                    }
                    break;
                  default:
@@ -1806,448 +2174,533 @@
              // 最终值赋值
              // 后端的参数进行赋值
              this.param[obj.id].resValue = {
                i:obj.id,
                v:{
                  v:obj.lastValue
                i: obj.id,
                v: {
                  v: obj.lastValue
                }
              }
              };
              // 页面数据赋值
              obj.resValue = obj.lastValue
              obj.resValue = obj.lastValue;
              // 结论赋值
              // 后端的参数进行赋值
              this.param[obj.id].insResult = {
                i:obj.id,
                v:{
                  v:obj.insResult
                i: obj.id,
                v: {
                  v: obj.insResult
                }
              }
              };
            }
            return obj
          })
            return obj;
          });
          // 以下是对温度循环页面呈现进行处理,去重、数据重置等等
          let arr = []
          let arr0 = []
          let mySet = new Set()
          productVos.forEach((m,i)=>{
            let num0 = mySet.size
            mySet.add(m.inspectionItemClass)
            let num1 = mySet.size
            if(num0!=num1){
              if(i>0){
                arr.push(arr0)
          let arr = [];
          let arr0 = [];
          let mySet = new Set();
          productVos.forEach((m, i) => {
            let num0 = mySet.size;
            mySet.add(m.inspectionItemClass);
            let num1 = mySet.size;
            if (num0 != num1) {
              if (i > 0) {
                arr.push(arr0);
              }
              arr0 = []
              arr0.push(m)
            }else{
              arr0.push(m)
              arr0 = [];
              arr0.push(m);
            } else {
              arr0.push(m);
            }
          })
          arr.push(arr0)
          let arr1 = []
          });
          arr.push(arr0);
          let arr1 = [];
          this.wareLength = [];
          for(let i=0;i<arr.length;i++){
            this.wareLength.push(arr[i][0].inspectionItemClass)
          for (let i = 0; i < arr.length; i++) {
            this.wareLength.push(arr[i][0].inspectionItemClass);
          }
          for(let i=0;i<arr[0].length;i++){
            arr1.push([])
          for (let i = 0; i < arr[0].length; i++) {
            arr1.push([]);
          }
          arr.forEach((item,index)=>{
            item.forEach((m,i)=>{
          arr.forEach((item, index) => {
            item.forEach((m, i) => {
              try {
                arr1[i].push(m)
                arr1[i].push(m);
              } catch (e) {
                console.log(e)
                console.log(e);
              }
            })
          })
          let arr2 = []
          arr1.forEach(item=>{
            });
          });
          let arr2 = [];
          arr1.forEach(item => {
            let obj = {
              bushColor:item[0].bushColor,
              code:item[0].code,
              color:item[0].color,
              arr:item
            }
            arr2.push(obj)
          })
              bushColor: item[0].bushColor,
              code: item[0].code,
              color: item[0].color,
              arr: item
            };
            arr2.push(obj);
          });
          // 这是页面最终呈现的格式
          this.wareTableData = arr2
          this.wareTableData = arr2;
        });
      // 获取设备列表
      this.getEquipOptions(true, this.currentSample.insProduct[0].id);
      // this.$refs.wareTableData&&this.$refs.wareTableData.doLayout()
    },
    // 温度循环---结束
    // 热循环---开始
    // 循环次数切换时调用
    thermalCyclingChange() {
      this.thermalCyclingLoading = true;
      this.$axios
        .post(this.$api.insOrderPlan.temCycle, {
          sampleId: this.currentSample.id,
          inspectionItem: this.thermalCyclingInfo.inspectionItem
        })
        // 获取设备列表
        this.getEquipOptions(true,this.currentSample.insProduct[0].id)
        // this.$refs.wareTableData&&this.$refs.wareTableData.doLayout()
      },
      // 温度循环---结束
      // 热循环---开始
      // 循环次数切换时调用
      thermalCyclingChange(){
        this.thermalCyclingLoading = true
        this.$axios.post(this.$api.insOrderPlan.temCycle,{
          sampleId:this.currentSample.id,
          inspectionItem:this.thermalCyclingInfo.inspectionItem
        }).then(res => {
          this.thermalCyclingLoading = false
          if (res.code == 201) return
          let {productVos,sampleVo} = res.data
          this.thermalCyclingInfo = {...this.thermalCyclingInfo,...sampleVo}
          if(this.thermalCyclingInfo.inspectionItem>1){
            for(let i in this.param){
              if(this.param[i].inspectionItemSubclass){
                delete this.param[i]
        .then(res => {
          this.thermalCyclingLoading = false;
          if (res.code == 201) return;
          let { productVos, sampleVo } = res.data;
          this.thermalCyclingInfo = { ...this.thermalCyclingInfo, ...sampleVo };
          if (this.thermalCyclingInfo.inspectionItem > 1) {
            for (let i in this.param) {
              if (this.param[i].inspectionItemSubclass) {
                delete this.param[i];
              }
            }
          }
          if(productVos.length>0){
            this.thermalCyclingInfo.inspectionItemClass = productVos[0].insProduct.inspectionItemClass
          if (productVos.length > 0) {
            this.thermalCyclingInfo.inspectionItemClass =
              productVos[0].insProduct.inspectionItemClass;
            // 根据检验项,初始化传到后端的参数
            productVos.forEach(item=>{
            productVos.forEach(item => {
              this.param[item.insProduct.id] = {
                insValue: [],
                comValue: [],
                resValue: {
                  i:item.insProduct.id,
                  r:0,
                  c:0,
                  v:{
                    v:null
                  i: item.insProduct.id,
                  r: 0,
                  c: 0,
                  v: {
                    v: null
                  }
                },
                equipValue: [],
                equipName: [],
                insResult: {
                  i:item.insProduct.id,
                  v:{
                    v:null
                  i: item.insProduct.id,
                  v: {
                    v: null
                  }
                },
                inspectionItemSubclass: item.insProduct.inspectionItemSubclass,
              }
              let obj = {...item,...item.insProduct}
              let insProductResult = obj.insProductResult
              if(insProductResult){
                inspectionItemSubclass: item.insProduct.inspectionItemSubclass
              };
              let obj = { ...item, ...item.insProduct };
              let insProductResult = obj.insProductResult;
              if (insProductResult) {
                // 给页面列表赋值,给后端传参赋值
                for(let i in insProductResult){
                for (let i in insProductResult) {
                  switch (i) {
                    case 'insValue':
                    case "insValue":
                      // 给页面列表赋值
                      let insValue = JSON.parse(insProductResult[i])
                      if(insValue&&insValue.length>0){
                        this.thermalCyclingInfo.length = 0
                        this.thermalCyclingInfo.arr.forEach(a=>{
                          if(a.name==obj.inspectionItemSubclass){
                            a.arr = []
                            for(let i=0;i<insValue.length;i++){
                      let insValue = JSON.parse(insProductResult[i]);
                      if (insValue && insValue.length > 0) {
                        this.thermalCyclingInfo.length = 0;
                        this.thermalCyclingInfo.arr.forEach(a => {
                          if (a.name == obj.inspectionItemSubclass) {
                            a.arr = [];
                            for (let i = 0; i < insValue.length; i++) {
                              a.arr.push({
                                value0:insValue[i].v,
                                value1:insValue[i].w,
                              })
                              this.thermalCyclingInfo.length++
                                value0: insValue[i].v,
                                value1: insValue[i].w
                              });
                              this.thermalCyclingInfo.length++;
                            }
                            a.insResult = obj.insResult
                            a.insResult = obj.insResult;
                          }
                        })
                        });
                        // 给后端传参赋值
                        this.param[obj.id].insValue = []
                        insValue.forEach(m=>{
                        this.param[obj.id].insValue = [];
                        insValue.forEach(m => {
                          this.param[obj.id].insValue.push({
                            i:obj.id,
                            r:0,
                            c:0,
                            w:m.w,
                            v:{
                              v:m.v
                            i: obj.id,
                            r: 0,
                            c: 0,
                            w: m.w,
                            v: {
                              v: m.v
                            }
                          })
                        })
                          });
                        });
                      }
                      break;
                  }
                }
                // 给后端传参赋值
                this.param[obj.id].insResult = {
                  i:obj.id,
                  v:{
                    v:obj.insResult
                  i: obj.id,
                  v: {
                    v: obj.insResult
                  }
                }
              }else{
                };
              } else {
                // 给页面列表赋值
                this.thermalCyclingInfo.arr.forEach(a=>{
                  a.insResult = null
                  a.arr = []
                  a.arr.push(
                    {
                    value0:'',
                    value1:''
                  }
                  )
                })
                this.thermalCyclingInfo.length = 1
                this.thermalCyclingInfo.arr.forEach(a => {
                  a.insResult = null;
                  a.arr = [];
                  a.arr.push({
                    value0: "",
                    value1: ""
                  });
                });
                this.thermalCyclingInfo.length = 1;
              }
            })
            });
          }
          // 获取设备列表
          this.getEquipOptions(true,this.currentSample.insProduct[0].id)
        })
      },
      // 添加检验值
      handleAddThermal(){
        this.thermalCyclingInfo.length++
        this.thermalCyclingInfo.arr.forEach(item=>{
          item.arr.push({
            value0:'',
            value1:''
          })
        })
      },
      // 删除检验值
      handleDeleteThermal(){
        if(this.thermalCyclingInfo.length==1){
          this.$message.error('最后一条数据不能删除')
          return
        }else{
          this.thermalCyclingInfo.length--
          this.thermalCyclingInfo.arr.forEach(item=>{
            item.arr.pop()
          })
          // 删除后需要保存一下数据
          this.saveThermalCycling(true,{name:'导线温度'},true)
        }
      },
      saveThermalCycling(m,item,type){
        // 结果判断
        if(m&&item&&type){
          if(item.name=='导线温度'||item.name=='耐张温度'||item.name=='接续温度'){
            this.thermalCyclingInfo.arr.forEach(a=>{
              if(a.name=='耐张温度'){
                a.arr.forEach((b,i)=>{
                  // 获取对应的导线温度
                  let num0 = 0
                  this.thermalCyclingInfo.arr.forEach(c=>{
                    if(c.name=='导线温度'){
                      num0 = c.arr[i].value0
                    }
                  })
                  // 判断结论
                  if(!num0||!b.value0){
                    b.state = null
                  }else if(Number(num0)>Number(b.value0)){
                    b.state = 1
                  }else{
                    b.state = 0
          this.getEquipOptions(true, this.currentSample.insProduct[0].id);
        });
    },
    // 添加检验值
    handleAddThermal() {
      this.thermalCyclingInfo.length++;
      this.thermalCyclingInfo.arr.forEach(item => {
        item.arr.push({
          value0: "",
          value1: ""
        });
      });
    },
    // 删除检验值
    handleDeleteThermal() {
      if (this.thermalCyclingInfo.length == 1) {
        this.$message.error("最后一条数据不能删除");
        return;
      } else {
        this.thermalCyclingInfo.length--;
        this.thermalCyclingInfo.arr.forEach(item => {
          item.arr.pop();
        });
        // 删除后需要保存一下数据
        this.saveThermalCycling(true, { name: "导线温度" }, true);
      }
    },
    saveThermalCycling(m, item, type) {
      // 结果判断
      if (m && item && type) {
        if (
          item.name == "导线温度" ||
          item.name == "耐张温度" ||
          item.name == "接续温度"
        ) {
          this.thermalCyclingInfo.arr.forEach(a => {
            if (a.name == "耐张温度") {
              a.arr.forEach((b, i) => {
                // 获取对应的导线温度
                let num0 = 0;
                this.thermalCyclingInfo.arr.forEach(c => {
                  if (c.name == "导线温度") {
                    num0 = c.arr[i].value0;
                  }
                })
                let state = a.arr.filter(b=>b.state==null).length
                let state0 = a.arr.filter(b=>b.state==0).length
                let state1 = a.arr.filter(b=>b.state==1).length
                if(state>0){
                  // 待定
                  a.insResult = null
                }else if(state0>0){
                  // 不合格
                  a.insResult = 0
                }else if(state1==a.arr.length){
                  // 合格
                  a.insResult = 1
                });
                // 判断结论
                if (!num0 || !b.value0) {
                  b.state = null;
                } else if (Number(num0) > Number(b.value0)) {
                  b.state = 1;
                } else {
                  b.state = 0;
                }
              }
              if(a.name=='接续温度'){
                a.arr.forEach((b,i)=>{
                  // 获取对应的导线温度
                  let num0 = 0
                  this.thermalCyclingInfo.arr.forEach(c=>{
                    if(c.name=='导线温度'){
                      num0 = c.arr[i].value0
                    }
                  })
                  if(!num0||!b.value0){
                    b.state = null
                  }else if(Number(num0)>Number(b.value0)){
                    b.state = 1
                  }else{
                    b.state = 0
                  }
                })
                let state = a.arr.filter(b=>b.state==null).length
                let state0 = a.arr.filter(b=>b.state==0).length
                let state1 = a.arr.filter(b=>b.state==1).length
                if(state>0){
                  a.insResult = null
                }else if(state0>0){
                  a.insResult = 0
                }else if(state1==a.arr.length){
                  a.insResult = 1
                }
              }
            })
          }
        }
        // 给后端传参赋值
        this.thermalCyclingInfo.arr.forEach(item=>{
          for (let i in this.param){
            if(this.param[i].inspectionItemSubclass==item.name){
              switch (item.name){
                case '环境温度':
                  this.param[i].insResult.v.v = 1
                  this.param[i].insValue = []
                  item.arr.forEach(insValue=>{
                    this.param[i].insValue.push({
                      i:i,
                      r:0,
                      c:0,
                      v:{
                        v:insValue.value0
                      }
                    })
                  })
                  break;
                case '导线温度':
                  this.param[i].insResult.v.v = 1
                  this.param[i].insValue = []
                  item.arr.forEach(insValue=>{
                    this.param[i].insValue.push({
                      i:i,
                      r:0,
                      c:0,
                      w:insValue.value1,
                      v:{
                        v:insValue.value0
                      }
                    })
                  })
                  break;
                case '耐张温度':
                  this.param[i].insValue = []
                  item.arr.forEach(insValue=>{
                    this.param[i].insValue.push({
                      i:i,
                      r:0,
                      c:0,
                      w:insValue.value1,
                      v:{
                        v:insValue.value0
                      }
                    })
                  })
                  this.param[i].insResult.v.v = item.insResult
                  break;
                case '接续温度':
                  this.param[i].insValue = []
                  item.arr.forEach(insValue=>{
                    this.param[i].insValue.push({
                      i:i,
                      r:0,
                      c:0,
                      w:insValue.value1,
                      v:{
                        v:insValue.value0
                      }
                    })
                  })
                  this.param[i].insResult.v.v = item.insResult
                  break;
              });
              let state = a.arr.filter(b => b.state == null).length;
              let state0 = a.arr.filter(b => b.state == 0).length;
              let state1 = a.arr.filter(b => b.state == 1).length;
              if (state > 0) {
                // 待定
                a.insResult = null;
              } else if (state0 > 0) {
                // 不合格
                a.insResult = 0;
              } else if (state1 == a.arr.length) {
                // 合格
                a.insResult = 1;
              }
            }
          }
        })
        // 保存数据
        this.saveInsContext()
      },
      // 热循环---结束
      // 保存湿度、温度数据
      subOtherForm(m,type){
        let ids = []
        for (let i in this.param) {
          ids.push(i)
            if (a.name == "接续温度") {
              a.arr.forEach((b, i) => {
                // 获取对应的导线温度
                let num0 = 0;
                this.thermalCyclingInfo.arr.forEach(c => {
                  if (c.name == "导线温度") {
                    num0 = c.arr[i].value0;
                  }
                });
                if (!num0 || !b.value0) {
                  b.state = null;
                } else if (Number(num0) > Number(b.value0)) {
                  b.state = 1;
                } else {
                  b.state = 0;
                }
              });
              let state = a.arr.filter(b => b.state == null).length;
              let state0 = a.arr.filter(b => b.state == 0).length;
              let state1 = a.arr.filter(b => b.state == 1).length;
              if (state > 0) {
                a.insResult = null;
              } else if (state0 > 0) {
                a.insResult = 0;
              } else if (state1 == a.arr.length) {
                a.insResult = 1;
              }
            }
          });
        }
        this.$axios.post(this.$api.insOrderPlan.write,{
          [type]:Number(m),
          ids
        }, {
          headers: {
            'Content-Type': 'application/json'
          },
          noQs:true
        }).then(res => {
          if (res.code == 201) return
          this.$message.success('保存成功')
        })
      },
      // 权限获取
      getPower(){
        let power = JSON.parse(sessionStorage.getItem('power'))
        let fileDel = false
        let fileAdd = false
        let collected = false
        let temDataAcquisition = false
        let addInsProductTemplatePower = false;
        for (var i = 0; i < power.length; i++) {
               if (power[i].menuMethod == 'uploadFile') {
                  fileAdd = true
               }
               if (power[i].menuMethod == 'delfile') {
                  fileDel = true
               }
          if (power[i].menuMethod == 'isItAllowedToModifyTheCollectedValues') {
                  collected = true
               }
          if (power[i].menuMethod == 'temDataAcquisition') {
                  temDataAcquisition = true
               }
          if(power[i].menuMethod == 'addInsProductTemplate'){
            addInsProductTemplatePower = true
      }
      // 给后端传参赋值
      this.thermalCyclingInfo.arr.forEach(item => {
        for (let i in this.param) {
          if (this.param[i].inspectionItemSubclass == item.name) {
            switch (item.name) {
              case "环境温度":
                this.param[i].insResult.v.v = 1;
                this.param[i].insValue = [];
                item.arr.forEach(insValue => {
                  this.param[i].insValue.push({
                    i: i,
                    r: 0,
                    c: 0,
                    v: {
                      v: insValue.value0
                    }
                  });
                });
                break;
              case "导线温度":
                this.param[i].insResult.v.v = 1;
                this.param[i].insValue = [];
                item.arr.forEach(insValue => {
                  this.param[i].insValue.push({
                    i: i,
                    r: 0,
                    c: 0,
                    w: insValue.value1,
                    v: {
                      v: insValue.value0
                    }
                  });
                });
                break;
              case "耐张温度":
                this.param[i].insValue = [];
                item.arr.forEach(insValue => {
                  this.param[i].insValue.push({
                    i: i,
                    r: 0,
                    c: 0,
                    w: insValue.value1,
                    v: {
                      v: insValue.value0
                    }
                  });
                });
                this.param[i].insResult.v.v = item.insResult;
                break;
              case "接续温度":
                this.param[i].insValue = [];
                item.arr.forEach(insValue => {
                  this.param[i].insValue.push({
                    i: i,
                    r: 0,
                    c: 0,
                    w: insValue.value1,
                    v: {
                      v: insValue.value0
                    }
                  });
                });
                this.param[i].insResult.v.v = item.insResult;
                break;
            }
          }
            }
        if (!fileDel) {
               this.componentData0.do.splice(1, 1)
            }
        this.fileAdd = fileAdd
        this.collected = collected
        this.temDataAcquisition = temDataAcquisition
        this.addInsProductTemplatePower = addInsProductTemplatePower
      },
      uploadSample(){
        this.$axios.post(this.$api.insOrderPlan.doInsOrder, {
        }
      });
      // 保存数据
      this.saveInsContext();
    },
    // 热循环---结束
    // 保存湿度、温度数据
    subOtherForm(m, type) {
      let ids = [];
      for (let i in this.param) {
        ids.push(i);
      }
      this.$axios
        .post(
          this.$api.insOrderPlan.write,
          {
            [type]: Number(m),
            ids
          },
          {
            headers: {
              "Content-Type": "application/json"
            },
            noQs: true
          }
        )
        .then(res => {
          if (res.code == 201) return;
          this.$message.success("保存成功");
        });
    },
    // 权限获取
    getPower() {
      let power = JSON.parse(sessionStorage.getItem("power"));
      let fileDel = false;
      let fileAdd = false;
      let collected = false;
      let temDataAcquisition = false;
      let addInsProductTemplatePower = false;
      for (var i = 0; i < power.length; i++) {
        if (power[i].menuMethod == "uploadFile") {
          fileAdd = true;
        }
        if (power[i].menuMethod == "delfile") {
          fileDel = true;
        }
        if (power[i].menuMethod == "isItAllowedToModifyTheCollectedValues") {
          collected = true;
        }
        if (power[i].menuMethod == "temDataAcquisition") {
          temDataAcquisition = true;
        }
        if (power[i].menuMethod == "addInsProductTemplate") {
          addInsProductTemplatePower = true;
        }
      }
      if (!fileDel) {
        this.componentData0.do.splice(1, 1);
      }
      this.fileAdd = fileAdd;
      this.collected = collected;
      this.temDataAcquisition = temDataAcquisition;
      this.addInsProductTemplatePower = addInsProductTemplatePower;
    },
    uploadSample() {
      this.$axios
        .post(this.$api.insOrderPlan.doInsOrder, {
          id: this.id,
          laboratory: this.sonLaboratory
        }).then(async res => {
          this.sampleProduct = res.data.sampleProduct
        })
      },
      // 根据类型、任务id、实验室来获取样品的检验项信息
      async getCurrentProduct(id,type){
        this.tableLoading = true;
        let res = null;
        if(!this.isLook){
          res = await this.$axios.post(this.$api.insOrderPlan.getInsProduct+'?id='+id+'&type='+type+'&laboratory='+this.sonLaboratory)
        }else{
          res = await this.$axios.post(this.$api.insOrderPlan.getInsProduct2+'?id='+id+'&type='+type+'&laboratory='+this.sonLaboratory+'&num='+this.num)
        .then(async res => {
          this.sampleProduct = res.data.sampleProduct;
        });
    },
    // 根据类型、任务id、实验室来获取样品的检验项信息
    async getCurrentProduct(id, type) {
      this.tableLoading = true;
      let res = null;
      if (!this.isLook) {
        res = await this.$axios.post(
          this.$api.insOrderPlan.getInsProduct +
          "?id=" +
          id +
          "&type=" +
          type +
          "&laboratory=" +
          this.sonLaboratory
        );
      } else {
        res = await this.$axios.post(
          this.$api.insOrderPlan.getInsProduct2 +
          "?id=" +
          id +
          "&type=" +
          type +
          "&laboratory=" +
          this.sonLaboratory +
          "&num=" +
          this.num
        );
      }
      this.tableLoading = false;
      return res.data;
    },
    // 切换样品
    async handleChangeSample(row, column, event) {
      // 初始化数据
      this.param = {};
      // 清空光纤配置相关数据
      this.fiberOpticTape = [];
      this.template = "";
      this.currentFiberOpticTape = null;
      this.fiberOptic = [];
      this.currentFiberOptic = null;
      this.bushing = [];
      this.currentBushing = null;
      this.sampleVisible = false;
      // 赋值样品
      this.currentSample = this.HaveJson(row);
      let list = await this.getCurrentProduct(row.id, 0);
      // 赋值样品检验项
      this.currentSample.insProduct = this.HaveJson(list);
      // 初始化后端传参
      this.param = {};
      this.changeType = 0;
      this.currentSample.insProduct.forEach((a, j) => {
        if (this.handleCasing(a.inspectionItem)) {
          this.param[a.id] = {
            insValue: [],
            comValue: [],
            resValue: null,
            equipValue: [],
            equipName: [],
            insResult: null,
            beforeCheck: null,
            afterCheck: null,
            testResult: null
          };
        }
        this.tableLoading = false;
        return res.data
      },
      // 切换样品
      async handleChangeSample(row, column, event) {
        // 初始化数据
        this.param = {}
        // 清空光纤配置相关数据
        this.fiberOpticTape = []
        this.currentFiberOpticTape = null;
        this.fiberOptic = []
        this.currentFiberOptic = null;
        this.bushing = []
        this.currentBushing = null;
        this.sampleVisible = false;
        // 赋值样品
        this.currentSample = this.HaveJson(row)
        let list = await this.getCurrentProduct(row.id,0)
        // 赋值样品检验项
        this.currentSample.insProduct = this.HaveJson(list)
        // 初始化后端传参
        this.param = {}
        this.changeType = 0;
        this.currentSample.insProduct.forEach((a,j) => {
          if(this.handleCasing(a.inspectionItem)){
      });
      let bushing = this.currentSample.bushing;
      if (bushing && bushing.length > 0) {
        this.bushing = bushing;
      }
      // 处理页面列表数据
      this.getTableLists();
      this.currentKey = row.index ? row.index : 0;
      this.currentTab = null;
      // 向多线程去保存页面列表数据,后端传参,当前模板信息
      this.worker.postMessage(
        JSON.stringify({
          type: "saveData",
          tableList: this.tableList,
          param: this.param,
          currentTable: this.currentTable
        })
      );
    },
    // 松套管的判断\如果changeType不等于3那么页面不展示松套管检验项
    handleCasing(inspectionItem) {
      if (this.changeType != 3) {
        if (inspectionItem.includes("松套管")) {
          return false;
        } else {
          return true;
        }
      } else {
        return true;
      }
    },
    // 套管,光纤带,光纤等切换,对应原始记录模板也要切换
    async handleChange(m, type) {
      this.changeType = type;
      if (m) {
        // 获取检验项
        let list = await this.getCurrentProduct(m, type);
        if (list.length > 0) {
          // 初始化后端传参
          this.param = {};
          list.forEach(a => {
            this.param[a.id] = {
              insValue: [],
              comValue: [],
@@ -2255,1644 +2708,2037 @@
              equipValue: [],
              equipName: [],
              insResult: null,
              beforeCheck:null,
              afterCheck:null,
            }
          }
        })
        let bushing = this.currentSample.bushing
        if(bushing&&bushing.length>0){
          this.bushing = bushing
        }
        // 处理页面列表数据
        this.getTableLists();
        this.currentKey = row.index?row.index:0
        this.currentTab = null;
        // 向多线程去保存页面列表数据,后端传参,当前模板信息
        this.worker.postMessage(JSON.stringify({
          type: 'saveData',
          tableList:this.tableList,
          param:this.param,
          currentTable:this.currentTable
        }));
      },
      // 松套管的判断\如果changeType不等于3那么页面不展示松套管检验项
      handleCasing(inspectionItem){
        if(this.changeType!=3){
          if(inspectionItem.includes('松套管')){
            return false
          }else{
            return true
          }
        }else{
          return true
        }
      },
      // 套管,光纤带,光纤等切换,对应原始记录模板也要切换
      async handleChange(m,type){
        this.changeType = type
        if(m){
          // 获取检验项
          let list = await this.getCurrentProduct(m,type)
          if(list.length>0){
            // 初始化后端传参
            this.param = {}
            list.forEach(a => {
              this.param[a.id] = {
                insValue: [],
                comValue: [],
                resValue: null,
                equipValue: [],
                equipName: [],
                insResult: null,
                beforeCheck:null,
                afterCheck:null,
              }
              beforeCheck: null,
              afterCheck: null,
              testResult: null
            };
          });
          // 页面列表数据处理
          this.getTableLists0(list);
          // 向多线程保存数据
          this.worker.postMessage(
            JSON.stringify({
              type: "saveData",
              tableList: this.tableList,
              param: this.param,
              currentTable: this.currentTable,
              bushing: m
            })
            // 页面列表数据处理
            this.getTableLists0(list)
            // 向多线程保存数据
            this.worker.postMessage(JSON.stringify({
              type: 'saveData',
              tableList:this.tableList,
              param:this.param,
              currentTable:this.currentTable,
              bushing:m
            }));
          }else{
            this.tableLists = []
            this.tableList = []
            this.$message.error('检验项为空')
          }
          );
        } else {
          this.tableLists = [];
          this.tableList = [];
          this.$message.error("检验项为空");
        }
      },
      // 改变任务
      handleChangeTask(row) {
        if (row.length > 0) this.id = row[0].id;
        this.taskVisible = false;
      },
      // 字典获取信息
      getTypeDicts() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
      }
    },
    // 改变任务
    handleChangeTask(row) {
      if (row.length > 0) this.id = row[0].id;
      this.taskVisible = false;
    },
    // 字典获取信息
    getTypeDicts() {
      this.$axios
        .post(this.$api.enums.selectEnumByCategory, {
          category: "紧急程度"
        }).then(res => {
          let data = res.data
          data.forEach(ele => {
            if (ele.value === '0') {
              ele.type = 'success'
            } else if (ele.value === '1') {
              ele.type = 'warning'
            } else if (ele.value === '2') {
              ele.type = 'danger'
            }
          })
          this.urgentList = data;
          this.componentData.tagField.type.select = data
        })
      },
      // 字典获取信息
      getInsStateDicts() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
        .then(res => {
          let data = res.data;
          data.forEach(ele => {
            if (ele.value === "0") {
              ele.type = "success";
            } else if (ele.value === "1") {
              ele.type = "warning";
            } else if (ele.value === "2") {
              ele.type = "danger";
            }
          });
          this.urgentList = data;
          this.componentData.tagField.type.select = data;
        });
    },
    // 字典获取信息
    getInsStateDicts() {
      this.$axios
        .post(this.$api.enums.selectEnumByCategory, {
          category: "检验任务状态"
        }).then(res => {
          let data = res.data
        })
        .then(res => {
          let data = res.data;
          data.forEach(ele => {
            //0:待检验 1:检验中 2:已检验 3:待复核 4:复核未通过 5:复核通过
            if (['2', '5'].includes(ele.value)) {
              ele.type = 'success'
            } else if (['1', '3'].includes(ele.value)) {
              ele.type = 'warning'
            } else if (['0', '4'].includes(ele.value)) {
              ele.type = 'danger'
            if (["2", "5"].includes(ele.value)) {
              ele.type = "success";
            } else if (["1", "3"].includes(ele.value)) {
              ele.type = "warning";
            } else if (["0", "4"].includes(ele.value)) {
              ele.type = "danger";
            }
          })
          this.typeList = data
          this.componentData.tagField.insState.select = data
        })
      },
      // 字典获取信息
      getComparisonList() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          });
          this.typeList = data;
          this.componentData.tagField.insState.select = data;
        });
    },
    // 字典获取信息
    getComparisonList() {
      this.$axios
        .post(this.$api.enums.selectEnumByCategory, {
          category: "表格坐标转换"
        }).then(res => {
          let data = res.data
        })
        .then(res => {
          let data = res.data;
          this.comparisonList = data;
        })
      },
      // 获取检验值为下拉时的下拉列表
      selectEnumByCategoryOfSelect(val) {
        this.enumList = []
        if (val === undefined || val === null) {
          return
        }
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: val
        }).then(res => {
          this.enumList = res.data;
        })
      },
      tableRowClassName({
        row,
        rowIndex
      }) {
        row.index = rowIndex + 1;
      },
      // 处理页面列表数据--去重,生成检验模板切换列表
      getTableLists() {
        const mySet1 = new Set();
        this.tableLists = this.currentSample.insProduct.filter(m => {
          let num0 = mySet1.size;
          if (m.templateId != null&&m.template != null) {
            try {
              mySet1.add(JSON.stringify({
                template: m.template,
                templateId: m.templateId
              }))
            } catch (error) {
              console.log(222,error);
            }
          }
          let num1 = mySet1.size;
          if (num1 > num0) {
            return m
          }
        });
        if (this.tableLists && this.tableLists.length > 0) {
          this.tableList = null;
          this.tableList = [this.tableLists[0]]
          this.currentTable = this.tableLists[0].templateId;
          if(this.tableLists.find(m=>m.templateId==this.currentTable)&&this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('电路试验')&&this.currentTableState!=0&&this.currentTableState!=1){
            this.versionDialogVisible = true
          }
          // 处理页面列表数据
          this.handleTableData()
        }
      },
      // 光纤配置相关模板table列表
      getTableLists0(list){
        const mySet1 = new Set();
        this.tableLists = list.filter(m => {
          let num0 = mySet1.size;
          if (m.templateId != null&&m.template != null) {
            try {
              mySet1.add(JSON.stringify({
                template: m.template,
                templateId: m.templateId
              }))
            } catch (error) {
              console.log(333,error);
            }
          }
          let num1 = mySet1.size;
          if (num1 > num0) {
            return m
          }
        });
        if (this.tableLists && this.tableLists.length > 0) {
          this.tableList = null;
          this.tableList = [this.tableLists[0]]
          this.currentTable = this.tableLists[0].templateId;
          this.currentSample.insProduct = this.HaveJson(list)
          // 处理页面列表数据
          this.handleTableData()
        }
      },
      // 处理页面列表数据
      handleTableData() {
        this.excelMethodList = []//excel函数列表
        this.widthList = this.tableList[0].style.columnlen;//页面宽度--根据模板来的
        // 温度循环检验原始记录--开始
        if(this.tableLists.find(m=>m.templateId==this.currentTable)&&this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'){
          // 对要求值进行拆分处理,进而得出页面内容
          let ask = this.currentSample.insProduct[0].ask
          let askList = ask.split(';')
          // 获取循环次数
          this.numOptions = []
          for (let i = 1; i <= askList[askList.length-1]; i++) {
            this.numOptions.push({
              value:i,
              label:i
            })
          }
          let mySet1 = new Set();
          askList.forEach((m,i) => {
            if(i<askList.length-1){
              mySet1.add(m.split(',')[0].replace('℃',''))
            }
          })
          // 获取温度点列表
          this.temperatureOptions = []
          mySet1.forEach(m => {
            this.temperatureOptions.push({
              value:String(m),
              label:m
            })
          })
          // 初始化页面数据
          this.wareTableDataLoading = true
          this.$axios.post(this.$api.deviceScope.temDataAcquisition2,{
            entrustCode:this.insOrder.entrustCode,
            sampleCode:this.currentSample.sampleCode,
            model:this.currentSample.model,
            }, {
            headers: {
              'Content-Type': 'application/json'
            },
            noQs:true
          }).then(res=>{
            // console.log(res.data)
            this.wareFormChange()
          })
          // this.wareFormChange()
        }
        // 温度循环检验原始记录---结束
        // 热循环检验原始记录---开始
        if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))){
          // 根据要求值拆分数据,得到页面渲染的信息
          let ask = this.currentSample.insProduct[0].ask
          let askList = ask.split(';')
          this.thermalCyclingInfo.max = Number(askList[askList.length-1])
          let arr = []
          for (let i = 0; i < askList.length-1; i++) {
            arr.push(askList[i].split(',')[0])
          }
          arr = arr.map(item=>{
            let obj = {}
            obj.name = item;
            if(obj.insResult==null||obj.insResult==undefined){
              obj.arr = [
                {
                  value0:'',
                  value1:'',
                }
              ]
              obj.insResult = null;
            }
            return obj
          })
          this.thermalCyclingInfo.arr = arr;
          // 初始化页面数据
          this.thermalCyclingChange()
        }
        // 热循环检验原始记录---结束
        // 本次循环主要做页面渲染层面的处理--单元格合并预处理
        this.tableList.forEach(a => {
          let mcList = []
          a.template.forEach(b => {
            if (b.v.mc != undefined && b.v.mc.cs != undefined && b.v.mc.rs != undefined) {
              mcList.push(b)
            }
          })
          let count = 0
          mcList.forEach(b => {
            for (var c in a.template) {
              for (var i = 0; i < b.v.mc.cs; i++) {
                for (var i2 = 0; i2 < b.v.mc.rs; i2++) {
                  if (a.template[c].c === b.c + i && a.template[c].r === b.r + i2) {
                    let bb = this.HaveJson(b)
                    a.template[c].v.v = bb.v.v
                    a.template[c].v.ps = bb.v.ps
                    a.template[c].v.fc = bb.v.fc
                    a.template[c].v.fs = bb.v.fs
                    a.template[c].v.ht = bb.v.ht
                    a.template[c].mc = count
                    break
                  }
                }
              }
            }
            count++
          })
        })
        // 本次循环主要是控制合并,以及控制检验项信息是否展示出来,以便后续检验
        this.tableList.forEach(a => {
          let dels = new Set()//需要删除的行
          let ids = []//所有检验项的id
          let set3 = new Set()
          a.template.forEach(b => {
            let size1 = set3.size
            let size2 = set3.add(b.r).size
            if (size1 < size2) {
              let str = ''
              let count4 = 0
              let isThree = 0
              a.template.forEach(c => {
                // 获取到 检验项分类+检验项+检验子项的拼接,如果模板里的信息跟接口返回的检验项信息能够匹配则展示出来
                if (b.r === c.r) {
                  if(c.v.ps != undefined && c.v.ps.value === '检验项分类'&&count4 === 0){
                    // 三级分类
                    isThree = 1
                  }else if(c.v.ps != undefined && c.v.ps.value === '检验项'&&count4 === 0){
                    // 二级分类
                    isThree = 0
                  }
                  if(isThree==0){
                    if (c.v.ps != undefined && c.v.ps.value === '检验项') {
                      if (count4 === 0) {
                        str += c.v.v
                        count4 += 1
                      }
                    } else if (c.v.ps != undefined && c.v.ps.value === '检验子项') {
                      if (count4 === 1) {
                        str += c.v.v
                        count4 += 1
                      }
                    }
                  }else if(isThree==1){
                    if (c.v.ps != undefined && c.v.ps.value === '检验项分类') {
                      if (count4 === 0) {
                        str += c.v.v
                        count4 += 1
                      }
                    }else if (c.v.ps != undefined && c.v.ps.value === '检验项') {
                      if (count4 === 1) {
                        str += c.v.v
                        count4 += 1
                      }
                    } else if (c.v.ps != undefined && c.v.ps.value === '检验子项') {
                      if (count4 === 2) {
                        str += c.v.v
                        count4 += 1
                      }
                    }
                  }
                }
              })
              if (str != '') {
                let count2 = 0
                for (let i in this.currentSample.insProduct) {
                  let inspectionItemClass = this.currentSample.insProduct[i].inspectionItemClass==null||this.currentSample.insProduct[i].inspectionItemClass==undefined?'':this.currentSample.insProduct[i].inspectionItemClass
                  let inspectionItem = this.currentSample
                  .insProduct[i].inspectionItem==null||this.currentSample
                  .insProduct[i].inspectionItem==undefined?'':this.currentSample
                  .insProduct[i].inspectionItem
                  let inspectionItemSubclass = this.currentSample
                  .insProduct[i].inspectionItemSubclass==null||this.currentSample
                  .insProduct[i].inspectionItemSubclass==undefined?'':this.currentSample
                  .insProduct[i].inspectionItemSubclass
                  // 如果相等,那么说明找到了,并且把id存起来,后续检验项也会在页面中显示出来
                  if (this.currentSample.insProduct[i].templateId === a.templateId && inspectionItemClass +inspectionItem+inspectionItemSubclass ===
                    str) {
                    ids.push({
                      r: b.r,
                      id: this.currentSample.insProduct[i].id,
                      product: this.currentSample.insProduct[i]
                    })
                    break
                  }
                  count2++
                }
                if (count2 == this.currentSample.insProduct.length) {
                  dels.add(b.r)
                }
              }
            }
          })
          // 操作删除
          dels.forEach(del => {
            for (let b = 0; b < a.template.length; b++) {
              if (a.template[b].r === del) {
                a.template.splice(b, 1)
                b -= 1
              }
            }
          })
          console.log(4444,a.template)
          // 操作赋值--主要赋值单位,试验方法等信息
          ids.forEach(id => {
            for (let b = 0; b < a.template.length; b++) {
              if (a.template[b].r === id.r) {
                a.template[b].i = id.id
                if (a.template[b].v.ps != undefined && a.template[b].v.ps.value === '单位') {
                  a.template[b].v.v = id.product.unit
                }
                if (a.template[b].v.ps != undefined && (a.template[b].v.ps.value === '试验方法' || a.template[b].v
                    .ps.value === '检测方法')) {
                  a.template[b].v.v = id.product.methodS
                }
                // if (a.template[b].v.ps != undefined && (a.template[b].v.ps.value === '试验标准')) {
                //   a.template[b].v.v = id.product.testRequirements
                // }
              }
            }
          })
          let set2 = new Set()
          // 合并的数据处理,cs  rs  代表合并的数量
          a.template.forEach(b => {
            let size1 = set2.size
            let size2 = set2.add(b.mc).size
            if (b.mc != undefined && size1 < size2) {
              b.v.mc.rs = 0
              b.v.mc.cs = 0
              a.template.forEach(c => {
                if (b.mc === c.mc) {
                  if (b.r === c.r) {
                    b.v.mc.cs += 1
                  }
                  if (b.c === c.c) {
                    b.v.mc.rs += 1
                  }
                }
              })
            }
          })
        })
        // 本次循环主要是对后端传参进行初始化,样式逻辑修改
        this.tableList.forEach(a => {
          let arrs = []
          let set = new Set()
          let count1 = 0
          let conclusionList = []; //结论列表
          let finalList = []; //最终值列表
          // 结论与最终值在这里一一对应,以下两个列表长度肯定是一样的,如果有不一样,那么多半是模板配置得问题
          conclusionList = a.template.filter(n => n.v.ps != undefined && n.v.ps.value === '结论')//结论列表
          finalList = a.template.filter(n => n.v.ps != undefined && n.v.ps.value === '最终值')//最终值列表
          a.template.forEach( b => {
            if (b.v.ps != undefined && b.v.ps.value === '序号' && (b.v.mc == undefined || Object.keys(b.v.mc).length === 4)) {
              // 对序号进行赋值
              count1++
              b.v.v = count1
            }
            if (b.v.ps != undefined && b.v.ps.value === '要求值') {
              // 对要求值进行赋值
              b.v.v = this.getAsk(b.i)
            }
            // 对页面的和给后端传参的检验值,计算值,设备编码,设备名称,最终值,结论进行初始化
            if (b.v.ps != undefined && typeof b.v.ps.value ==='string'&&b.v.ps.value.includes('检验值')) {
              this.$set(b.v, 'v','' )
              // b.v.v = ''
              b.u = ''
              b.i && this.param[b.i]&&this.param[b.i].insValue.push(b)
            }
            if (b.v.ps != undefined && b.v.ps.value === '计算值') {
              this.$set(b.v, 'v','' )
              // b.v.v = ''
              b.i && this.param[b.i]&&this.param[b.i].comValue.push(b)
            }
            if (b.v.ps != undefined && b.v.ps.value === '设备编码') {
              // b.v.v = ''
              this.$set(b.v, 'v', '' )
              b.i && this.param[b.i]&&this.param[b.i].equipValue.push(b)
            }
            if (b.v.ps != undefined && b.v.ps.value === '设备名称') {
              this.$set(b.v, 'v', '' )
              // b.v.v = ''
              b.i && this.param[b.i]&&this.param[b.i].equipName.push(b)
            }
            if (b.v.ps != undefined && b.v.ps.value === '最终值') {
              // b.v.v = ''
              this.$set(b.v, 'v', '' )
              if (b.i !== undefined&&this.param[b.i]&&!this.param[b.i].resValue) {
                this.param[b.i].resValue = b
              }
            }
            if (b.v.ps != undefined && b.v.ps.value === '结论') {
              if (b.i !== undefined&&this.param[b.i]&&!this.param[b.i].insResult) {
                this.param[b.i].insResult = b
                conclusionList.forEach((n, i) => {
                  if (n.r == b.r && n.c == b.c) {
                    b.v.f =
                      `(${this.comparisonList.find(j=>j.value==(finalList[i].c)).label}${finalList[i].r+1})`
                  }
                })
              }
            }
            if (b.v.ps != undefined && b.v.ps.value === '试验前样品检查') {
              // b.v.v = ''
              this.$set(b.v, 'v', '' )
              this.param[b.i].beforeCheck = b
            }
            if (b.v.ps != undefined && b.v.ps.value === '试验后样品检查') {
              // b.v.v = ''
              this.$set(b.v, 'v', '' )
              this.param[b.i].afterCheck = b
            }
            set.add(b.r)
            // 如果模板列表的函数存在,那么加入到excel函数列表里面
            if (b.v.f) {
              this.excelMethodList.push(b)
            }
          })
          // 以下是样式处理逻辑
          set = Array.sort(set)
          set.forEach(b => {
            let arr = []
            a.template.forEach(c => {
              if (c.r === b) {
                arr.push(c)
              }
            })
            arrs.push(arr)
          })
          a.arr = arrs
          this.tableWidth = 0
          for (let i = 0; i < arrs[0].length; i++) {
            this.tableWidth += (a.style.columnlen[i] === undefined ? 100 : a.style.columnlen[i])
          }
        })
        // 本次循环主要是对页面及后端传参进行初始化赋值
        this.currentSample.insProduct.forEach(async a => {
          try {
            // 计算值赋值
            let comValue = JSON.parse(a.insProductResult.comValue)
            for (var i = 0; i < comValue.length; i++) {
              this.param[a.id].comValue[i].v.v = this.toFixed(comValue[i].v,this.param[a.id].comValue[i].v.ct)
            }
          } catch (e) {}
          try {
            // 检验值赋值
            let insValue = JSON.parse(a.insProductResult.insValue)
            for (let i = 0; i < insValue.length; i++) {
              if(this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r)){
                this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r).v.v = this.toFixed(insValue[i].v,this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r).v.ct)
                this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r).u = insValue[i].u
                // this.param[a.id].insValue[i].v.v = insValue[i].v
                // this.param[a.id].insValue[i].u = insValue[i].u
              }
            }
          } catch (e) {}
          try {
            // 设备编号赋值
            let equipValue = JSON.parse(a.insProductResult.equipValue)
            if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))){
              // 特殊项目初始化
              this.param[a.id].equipValue = []
              for (let i = 0; i < equipValue.length; i++) {
                this.param[a.id].equipValue.push({
                  v:{
                    v:''
                  }
                })
              }
            }
            for (let i = 0; i < equipValue.length; i++) {
              if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))){
                // 温度循环设备赋值
                this.$set(this.equipForm,`code`+i,equipValue[i].v)
                this.param[a.id].equipValue[i].v.v = equipValue[i].v
              }else{
                // 普通设备赋值
                this.param[a.id].equipValue[i].v.v = equipValue[i].v
              }
            }
          } catch (e) {}
          try {
            // 设备名称赋值
            let equipName = JSON.parse(a.insProductResult.equipName)
            if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))){
              // 设备名称初始化
              this.param[a.id].equipName = []
              for (let i = 0; i < equipName.length; i++) {
                this.param[a.id].equipName.push({
                  v:{
                    v:''
                  }
                })
              }
            }
            for (let i = 0; i < equipName.length; i++) {
              if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))){
                // 温度循环赋值
                this.$set(this.equipForm,`value`+i,equipName[i].v)
                this.param[a.id].equipName[i].v.v = equipName[i].v
              }else{
                // 普通设备名称赋值
                this.param[a.id].equipName[i].v.v = equipName[i].v
              }
            }
          } catch (e) {}
          try {
            // 最终值赋值
            this.param[a.id].resValue = {v:{v:a.lastValue}}
            // this.param[a.id].resValue.v.v = this.toFixed(a.lastValue,this.param[a.id].resValue.v.ct)
            // 结论赋值
            this.param[a.id].insResult = {v:{v:a.insResult}}
            // this.param[a.id].insResult.v.v = a.insResult
            // 检验前样品检查赋值
            this.param[a.id].afterCheck.v.v = a.insProductResult.afterCheck
            // 检验后样品检查赋值
            this.param[a.id].beforeCheck.v.v = a.insProductResult.beforeCheck
          } catch (e) {
            console.log('error',e)
          }
        })
        // 对excel函数进行处理
        this.handleExcelMethod()
      },
      // 检验值输入后触发的函数
      changeInput(m, code, n,getDataType) {
        // 为数采定义一个逻辑参数
        if(getDataType=='getDataType'){
          this.getDataType = 2;
        }
        let currentInsItemId = null//当前检验项id
        if (n) {
          currentInsItemId = JSON.parse(JSON.stringify(n.i))
          // 需要科学计数法的可以走这里
          if (this.PROJECT === '检测中心') {
            if(this.tableList.find(ele=>ele.inspectionItem=='体积电阻率')){
              if(parseFloat(n.v.v)>=100000){
                let num2 = new this.$Big(n.v.v)
                n.v.v = num2.toExponential()
              }
            }
          }
          // 定义一个函数来验证分数是否有效
          function isValidFraction(fraction) {
            const [numerator, denominator] = fraction.split('/'); // 分子和分母
            return !(!denominator || !numerator);
          }
          const isTrue = isValidFraction(n.v.v)
          if (!isTrue) {
            n.v.v = n.v.v.replace('/', '')
          }
        }
        // 通信特殊处理,检验值填入之后直接保存数据,判断结果默认为3
        for (var i in this.param){
          this.param[i].insResult = {v:{v:3}}
        }
        this.saveInsContext(n.i)
    },
    // 获取检验值为下拉时的下拉列表
    selectEnumByCategoryOfSelect(val) {
      this.enumList = [];
      if (val === undefined || val === null) {
        return;
        // 以下是正常的判断流程,后面有需要则进入此流程
        try {
          // 向 Worker 发送消息,开始处理逻辑
          this.worker.postMessage(JSON.stringify({
            code: code,
            tableList:this.tableList,
            excelMethodList:this.excelMethodList,
            comparisonList:this.comparisonList,
            currentSample:this.currentSample,
            PROJECT:this.PROJECT,
            param:this.param,
            currentTable:this.currentTable,
            getDataTypeId:this.getDataTypeId
          }));
        } catch (error) {
          console.log(444,error);
      }
      this.$axios
        .post(this.$api.enums.selectEnumByCategory, {
          category: val
        })
        .then(res => {
          this.enumList = res.data;
        });
    },
    tableRowClassName({ row, rowIndex }) {
      row.index = rowIndex + 1;
    },
    // 处理页面列表数据--去重,生成检验模板切换列表
    getTableLists() {
      const mySet1 = new Set();
      this.tableLists = this.currentSample.insProduct.filter(m => {
        let num0 = mySet1.size;
        if (m.templateId != null && m.template != null) {
          try {
            mySet1.add(
              JSON.stringify({
                template: m.template,
                templateId: m.templateId
              })
            );
          } catch (error) {
            console.log(222, error);
          }
        }
        // 监听 Worker 返回的结果
        this.worker.onmessage = (event) => {
          this.result = JSON.parse(event.data);
          switch (this.result.method){
            case 'saveInsContext':
              this.$nextTick(()=>{
                // this.$delete(this.tableList[0],'arr')
                this.$set(this.tableList[0],'arr',this.result.value.tableList[0].arr)
                this.param = this.result.value.param
                if(this.result.value.currentInsItemId){
                  currentInsItemId = this.result.value.currentInsItemId
        let num1 = mySet1.size;
        if (num1 > num0) {
          return m;
        }
      });
      if (this.tableLists && this.tableLists.length > 0) {
        this.tableList = null;
        this.tableList = [this.tableLists[0]];
        this.currentTable = this.tableLists[0].templateId;
        if (
          this.tableLists.find(m => m.templateId == this.currentTable) &&
          this.tableLists
            .find(m => m.templateId == this.currentTable)
            .templateName.includes("电路试验") &&
          this.currentTableState != 0 &&
          this.currentTableState != 1 &&
          this.insOrder.sampleType != "无源器件"
        ) {
          this.versionDialogVisible = true;
        }
        // 处理页面列表数据
        this.handleTableData();
      }
    },
    // 光纤配置相关模板table列表
    getTableLists0(list) {
      const mySet1 = new Set();
      this.tableLists = list.filter(m => {
        let num0 = mySet1.size;
        if (m.templateId != null && m.template != null) {
          try {
            mySet1.add(
              JSON.stringify({
                template: m.template,
                templateId: m.templateId
              })
            );
          } catch (error) {
            console.log(333, error);
          }
        }
        let num1 = mySet1.size;
        if (num1 > num0) {
          return m;
        }
      });
      if (this.tableLists && this.tableLists.length > 0) {
        this.tableList = null;
        this.tableList = [this.tableLists[0]];
        this.currentTable = this.tableLists[0].templateId;
        this.currentSample.insProduct = this.HaveJson(list);
        // 处理页面列表数据
        this.handleTableData();
      }
    },
    // 处理页面列表数据
    handleTableData() {
      this.excelMethodList = []; //excel函数列表
      this.widthList = this.tableList[0].style.columnlen; //页面宽度--根据模板来的
      // 温度循环检验原始记录--开始
      if (
        this.tableLists.find(m => m.templateId == this.currentTable) &&
        this.tableLists.find(m => m.templateId == this.currentTable)
          .templateName == "温度循环检验原始记录"
      ) {
        // 对要求值进行拆分处理,进而得出页面内容
        let ask = this.currentSample.insProduct[0].ask;
        let askList = ask.split(";");
        // 获取循环次数
        this.numOptions = [];
        for (let i = 1; i <= askList[askList.length - 1]; i++) {
          this.numOptions.push({
            value: i,
            label: i
          });
        }
        let mySet1 = new Set();
        askList.forEach((m, i) => {
          if (i < askList.length - 1) {
            mySet1.add(m.split(",")[0].replace("℃", ""));
          }
        });
        // 获取温度点列表
        this.temperatureOptions = [];
        mySet1.forEach(m => {
          this.temperatureOptions.push({
            value: String(m),
            label: m
          });
        });
        // 初始化页面数据
        this.wareTableDataLoading = true;
        this.$axios
          .post(
            this.$api.deviceScope.temDataAcquisition2,
            {
              entrustCode: this.insOrder.entrustCode,
              sampleCode: this.currentSample.sampleCode,
              model: this.currentSample.model
            },
            {
              headers: {
                "Content-Type": "application/json"
              },
              noQs: true
            }
          )
          .then(res => {
            // console.log(res.data)
            this.wareFormChange();
          });
        // this.wareFormChange()
      }
      // 温度循环检验原始记录---结束
      // 热循环检验原始记录---开始
      if (
        this.tableLists.find(m => m.templateId == this.currentTable) &&
        (this.tableLists
          .find(m => m.templateId == this.currentTable)
          .templateName.includes("热循环") ||
          this.tableLists
            .find(m => m.templateId == this.currentTable)
            .templateName.includes("温升试验"))
      ) {
        // 根据要求值拆分数据,得到页面渲染的信息
        let ask = this.currentSample.insProduct[0].ask;
        let askList = ask.split(";");
        this.thermalCyclingInfo.max = Number(askList[askList.length - 1]);
        let arr = [];
        for (let i = 0; i < askList.length - 1; i++) {
          arr.push(askList[i].split(",")[0]);
        }
        arr = arr.map(item => {
          let obj = {};
          obj.name = item;
          if (obj.insResult == null || obj.insResult == undefined) {
            obj.arr = [
              {
                value0: "",
                value1: ""
              }
            ];
            obj.insResult = null;
          }
          return obj;
        });
        this.thermalCyclingInfo.arr = arr;
        // 初始化页面数据
        this.thermalCyclingChange();
      }
      // 热循环检验原始记录---结束
      // 本次循环主要做页面渲染层面的处理--单元格合并预处理
      this.tableList.forEach(a => {
        let mcList = [];
        a.template.forEach(b => {
          if (
            b.v.mc != undefined &&
            b.v.mc.cs != undefined &&
            b.v.mc.rs != undefined
          ) {
            mcList.push(b);
          }
        });
        let count = 0;
        mcList.forEach(b => {
          for (var c in a.template) {
            for (var i = 0; i < b.v.mc.cs; i++) {
              for (var i2 = 0; i2 < b.v.mc.rs; i2++) {
                if (
                  a.template[c].c === b.c + i &&
                  a.template[c].r === b.r + i2
                ) {
                  let bb = this.HaveJson(b);
                  a.template[c].v.v = bb.v.v;
                  a.template[c].v.ps = bb.v.ps;
                  a.template[c].v.fc = bb.v.fc;
                  a.template[c].v.fs = bb.v.fs;
                  a.template[c].v.ht = bb.v.ht;
                  a.template[c].mc = count;
                  break;
                }
                // console.log(this.result,123);
                // 特殊处理一下结论,会有这种特殊情况
                for (var i in this.param){
                  if(this.param[i].insResult&&this.param[i].insResult.v&&this.param[i].insResult.v.v){
                    if(this.param[i].insResult.v.v=='合格'){
                      this.$set(this.param[i].insResult.v,'v',1)
                    }else if(this.param[i].insResult.v.v=='不合格'){
                      this.$set(this.param[i].insResult.v,'v',0)
              }
            }
          }
          count++;
        });
      });
      // 本次循环主要是控制合并,以及控制检验项信息是否展示出来,以便后续检验
      this.tableList.forEach(a => {
        let dels = new Set(); //需要删除的行
        let ids = []; //所有检验项的id
        let set3 = new Set();
        a.template.forEach(b => {
          let size1 = set3.size;
          let size2 = set3.add(b.r).size;
          if (size1 < size2) {
            let str = "";
            let count4 = 0;
            let isThree = 0;
            a.template.forEach(c => {
              // 获取到 检验项分类+检验项+检验子项的拼接,如果模板里的信息跟接口返回的检验项信息能够匹配则展示出来
              if (b.r === c.r) {
                if (
                  c.v.ps != undefined &&
                  c.v.ps.value === "检验项分类" &&
                  count4 === 0
                ) {
                  // 三级分类
                  isThree = 1;
                } else if (
                  c.v.ps != undefined &&
                  c.v.ps.value === "检验项" &&
                  count4 === 0
                ) {
                  // 二级分类
                  isThree = 0;
                }
                if (isThree == 0) {
                  if (c.v.ps != undefined && c.v.ps.value === "检验项") {
                    if (count4 === 0) {
                      str += c.v.v;
                      count4 += 1;
                    }
                  } else if (
                    c.v.ps != undefined &&
                    c.v.ps.value === "检验子项"
                  ) {
                    if (count4 === 1) {
                      str += c.v.v;
                      count4 += 1;
                    }
                  }
                } else if (isThree == 1) {
                  if (c.v.ps != undefined && c.v.ps.value === "检验项分类") {
                    if (count4 === 0) {
                      str += c.v.v;
                      count4 += 1;
                    }
                  } else if (c.v.ps != undefined && c.v.ps.value === "检验项") {
                    if (count4 === 1) {
                      str += c.v.v;
                      count4 += 1;
                    }
                  } else if (
                    c.v.ps != undefined &&
                    c.v.ps.value === "检验子项"
                  ) {
                    if (count4 === 2) {
                      str += c.v.v;
                      count4 += 1;
                    }
                  }
                }
                this.saveInsContext(currentInsItemId)
              })
              break;
            case 'tableList':
              this.$nextTick(()=>{
                // 更新数据
                this.$delete(this.tableList[0],'arr')
                this.$set(this.tableList[0],'arr',this.result.value[0].arr)
              })
              break;
            case 'getCurrentInsProduct':
              // 更新页面数据
              this.getCurrentInsProduct(this.result.value)
              break;
          }
        };
      },
      // 是否需要数采
      async determineWhetherToCollectData(){
        let res = await this.$axios.get(this.$api.deviceScope.determineWhetherToCollectData+"?managementNumber=''")
        this.isGet =  res.data
      },
      // 根据后端传参更新页面数据   param => this.tableList[0].insProductResult
      getCurrentInsProduct(pId) {
        if (!this.tableList[0].insProductResult) {
          this.tableList[0].insProductResult = {}
        }
        for (let m in this.param[pId]) {
          let value = this.param[pId][m]
          switch (m) {
            case 'comValue':
              // 赋值计算值
              if (value && value.length > 0) {
                this.tableList[0].insProductResult[m] = [];
                value.forEach((a, i) => {
                  let obj = {
                    v: a.v.v,
                  }
                  this.tableList[0].insProductResult[m].push(obj);
                })
                try {
                  this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
                } catch (error) {
                  console.log(555,error);
                }
              }
              break;
              // 赋值检验值
            case 'insValue':
              if (value && value.length > 0) {
                this.tableList[0].insProductResult[m] = [];
                value.forEach((a, i) => {
                  let obj = {
                    v: a.v.v,
                    u: a.u,
                  }
                  this.tableList[0].insProductResult[m].push(obj);
                })
                try {
                  this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
                } catch (error) {
                  console.log(666,error);
            });
            if (str != "") {
              let count2 = 0;
              for (let i in this.currentSample.insProduct) {
                let inspectionItemClass =
                  this.currentSample.insProduct[i].inspectionItemClass ==
                    null ||
                    this.currentSample.insProduct[i].inspectionItemClass ==
                    undefined
                    ? ""
                    : this.currentSample.insProduct[i].inspectionItemClass;
                let inspectionItem =
                  this.currentSample.insProduct[i].inspectionItem == null ||
                    this.currentSample.insProduct[i].inspectionItem == undefined
                    ? ""
                    : this.currentSample.insProduct[i].inspectionItem;
                let inspectionItemSubclass =
                  this.currentSample.insProduct[i].inspectionItemSubclass ==
                    null ||
                    this.currentSample.insProduct[i].inspectionItemSubclass ==
                    undefined
                    ? ""
                    : this.currentSample.insProduct[i].inspectionItemSubclass;
                // 如果相等,那么说明找到了,并且把id存起来,后续检验项也会在页面中显示出来
                if (
                  this.currentSample.insProduct[i].templateId ===
                  a.templateId &&
                  inspectionItemClass +
                  inspectionItem +
                  inspectionItemSubclass ===
                  str
                ) {
                  ids.push({
                    r: b.r,
                    id: this.currentSample.insProduct[i].id,
                    product: this.currentSample.insProduct[i]
                  });
                  break;
                }
                count2++;
              }
              break;
              // 赋值设备编号
            case 'equipValue':
              if (value && value.length > 0) {
                this.tableList[0].insProductResult[m] = [];
                value.forEach((a, i) => {
                  let obj = {
                    v: a.v.v,
                  }
                  this.tableList[0].insProductResult[m].push(obj);
                })
                try {
                  this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
                } catch (error) {
                  console.log(777,error);
                }
              }
              break;
              // 赋值设备名称
            case 'equipName':
              if (value && value.length > 0) {
                this.tableList[0].insProductResult[m] = [];
                value.forEach((a, i) => {
                  let obj = {
                    v: a.v.v,
                  }
                  this.tableList[0].insProductResult[m].push(obj);
                })
                try {
                  this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
                } catch (error) {
                  console.log(888,error);
                }
              }
              break;
              // 赋值最终值
            case 'resValue':
              this.tableList[0].lastValue = value?value.v.v:''
              break;
              // 赋值结论
            case 'insResult':
              this.tableList[0].insResult = value?value.v.v:''
              break;
          }
        }
      },
      // 对EXCEL函数进行处理
      handleExcelMethod() {
        if (this.excelMethodList.length > 0) {
          this.excelMethodList.map(item => {
            // 得到每个函数的参数列表
            item.valueList = excelFunction.changeParameter(item.v.f);
            return item;
          })
        }
      },
      getValue(v){
        // 对页面展示数据进行处理,@,代表换行
        let str = v.v?v.v:(v.v===0?v.v:(v.ct&&v.ct.s?v.ct.s.length>0&&v.ct.s[0].v.replace(new RegExp('\n', 'g'), '<br/>').replace(new RegExp('@', 'g'), '<br/>'):''))
        // 对数据保留小数点进行处理
        if(v.ct&&v.ct.fa&&v.ct.fa.includes('.')&&str){
          let num = 0
          let str0 = v.ct.fa.split('.')[1]
          num = str0.length
          str = Number(str).toFixed(num)
        }
        if(v.v&&typeof v.v == 'string'&&v.v.includes('@')){
          str = v.v.replace(new RegExp('@', 'g'), '<br/>')
        }
        return str
      },
      // 获取当前输入框类型
      getInspectionValueType(id) {
        for (var a in this.currentSample.insProduct) {
          if (this.currentSample.insProduct[a].id == id) {
            return this.currentSample.insProduct[a].inspectionValueType
          }
        }
      },
      // 获取要求描述
      getTell(id) {
        for (var a in this.currentSample.insProduct) {
          if (this.currentSample.insProduct[a].id == id) {
            return this.currentSample.insProduct[a].tell
          }
        }
      },
      // 动态获取单元格宽度
      handleWidth(n) {
        let sum = 0;
        if (n.v.mc && n.v.mc.cs && n.v.mc.c != undefined) {
          for (let i = 0; i < n.v.mc.cs; i++) {
            let num = this.widthList[i + n.v.mc.c] ? this.widthList[i + n.v.mc.c] : 100
            sum += num;
          }
        } else {
          sum = this.widthList[n.c] ? this.widthList[n.c] : 100
        }
        return sum
      },
      // 对输入值进行格式校验
      handleInput (n) {
        try {
          n.v.v = n.v.v.replace(/[^\d.^e\-/+]/g, '');
          n.v.v = n.v.v.replace(/\.{2,}/g,"."); //只保留第一个. 清除多余的
          n.v.v = n.v.v.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
          n.v.v = n.v.v.replace(/\/{2,}/g,"/"); //只保留第一个/清除多余的
          n.v.v = n.v.v.replace("/","$#$").replace(/\//g,"").replace("$#$","/");
        } catch (error) {
          console.log(error);
        }
      },
      getInspectionItemType(id) {
        for (var a in this.currentSample.insProduct) {
          if (this.currentSample.insProduct[a].id == id) {
            return this.currentSample.insProduct[a].inspectionItemType
          }
        }
      },
      // 获取要求值
      getAsk(id) {
        for (var a in this.currentSample.insProduct) {
          if (this.currentSample.insProduct[a].id == id) {
            return this.currentSample.insProduct[a].ask
          }
        }
      },
      getSystemValue(n) {
        let code = null
        try {
          this.param[n.i].equipValue.forEach(a=>{
            if(a.r === n.r){
              if (a.v.v == null || a.v.v == '') {
                this.$message.error('请先选择采集的设备')
                return
              }else{
                code = a.v.v
              if (count2 == this.currentSample.insProduct.length) {
                dels.add(b.r);
              }
            }
          })
        } catch (e) {
          // console.log(e);
          this.$message.error('找不到设备内容')
          }
        });
        // 操作删除
        dels.forEach(del => {
          for (let b = 0; b < a.template.length; b++) {
            if (a.template[b].r === del) {
              a.template.splice(b, 1);
              b -= 1;
            }
          }
        });
        console.log(4444, a.template);
        // 操作赋值--主要赋值单位,试验方法等信息
        ids.forEach(id => {
          for (let b = 0; b < a.template.length; b++) {
            if (a.template[b].r === id.r) {
              a.template[b].i = id.id;
              if (
                a.template[b].v.ps != undefined &&
                a.template[b].v.ps.value === "单位"
              ) {
                a.template[b].v.v = id.product.unit;
              }
              if (
                a.template[b].v.ps != undefined &&
                (a.template[b].v.ps.value === "试验方法" ||
                  a.template[b].v.ps.value === "检测方法")
              ) {
                a.template[b].v.v = id.product.methodS;
              }
              // if (a.template[b].v.ps != undefined && (a.template[b].v.ps.value === '试验标准')) {
              //   a.template[b].v.v = id.product.testRequirements
              // }
            }
          }
        });
        let set2 = new Set();
        // 合并的数据处理,cs  rs  代表合并的数量
        a.template.forEach(b => {
          let size1 = set2.size;
          let size2 = set2.add(b.mc).size;
          if (b.mc != undefined && size1 < size2) {
            b.v.mc.rs = 0;
            b.v.mc.cs = 0;
            a.template.forEach(c => {
              if (b.mc === c.mc) {
                if (b.r === c.r) {
                  b.v.mc.cs += 1;
                }
                if (b.c === c.c) {
                  b.v.mc.rs += 1;
                }
              }
            });
          }
        });
      });
      // 本次循环主要是对后端传参进行初始化,样式逻辑修改
      this.tableList.forEach(a => {
        let arrs = [];
        let set = new Set();
        let count1 = 0;
        let conclusionList = []; //结论列表
        let finalList = []; //最终值列表
        // 结论与最终值在这里一一对应,以下两个列表长度肯定是一样的,如果有不一样,那么多半是模板配置得问题
        conclusionList = a.template.filter(
          n => n.v.ps != undefined && n.v.ps.value === "结论"
        ); //结论列表
        finalList = a.template.filter(
          n => n.v.ps != undefined && n.v.ps.value === "最终值"
        ); //最终值列表
        a.template.forEach(b => {
          if (
            b.v.ps != undefined &&
            b.v.ps.value === "序号" &&
            (b.v.mc == undefined || Object.keys(b.v.mc).length === 4)
          ) {
            // 对序号进行赋值
            count1++;
            b.v.v = count1;
          }
          if (b.v.ps != undefined && b.v.ps.value === "要求值") {
            // 对要求值进行赋值
            b.v.v = this.getAsk(b.i);
          }
          // 对页面的和给后端传参的检验值,计算值,设备编码,设备名称,最终值,结论进行初始化
          if (
            b.v.ps != undefined &&
            typeof b.v.ps.value === "string" &&
            b.v.ps.value.includes("检验值")
          ) {
            this.$set(b.v, "v", "");
            // b.v.v = ''
            b.u = "";
            b.i && this.param[b.i] && this.param[b.i].insValue.push(b);
          }
          if (b.v.ps != undefined && b.v.ps.value === "计算值") {
            this.$set(b.v, "v", "");
            // b.v.v = ''
            b.i && this.param[b.i] && this.param[b.i].comValue.push(b);
          }
          if (b.v.ps != undefined && b.v.ps.value === "设备编码") {
            // b.v.v = ''
            this.$set(b.v, "v", "");
            b.i && this.param[b.i] && this.param[b.i].equipValue.push(b);
          }
          if (b.v.ps != undefined && b.v.ps.value === "设备名称") {
            this.$set(b.v, "v", "");
            // b.v.v = ''
            b.i && this.param[b.i] && this.param[b.i].equipName.push(b);
          }
          if (b.v.ps != undefined && b.v.ps.value === "最终值") {
            // b.v.v = ''
            this.$set(b.v, "v", "");
            if (
              b.i !== undefined &&
              this.param[b.i] &&
              !this.param[b.i].resValue
            ) {
              this.param[b.i].resValue = b;
            }
          }
          if (b.v.ps != undefined && b.v.ps.value === "结论") {
            if (
              b.i !== undefined &&
              this.param[b.i] &&
              !this.param[b.i].insResult
            ) {
              this.param[b.i].insResult = b;
              conclusionList.forEach((n, i) => {
                if (n.r == b.r && n.c == b.c) {
                  b.v.f = `(${this.comparisonList.find(j => j.value == finalList[i].c)
                    .label
                    }${finalList[i].r + 1})`;
                }
              });
            }
          }
          if (b.v.ps != undefined && b.v.ps.value === "试验前样品检查") {
            // b.v.v = ''
            this.$set(b.v, "v", "");
            this.param[b.i].beforeCheck = b;
          }
          if (b.v.ps != undefined && b.v.ps.value === "试验后样品检查") {
            // b.v.v = ''
            this.$set(b.v, "v", "");
            this.param[b.i].afterCheck = b;
          }
          if (b.v.ps != undefined && b.v.ps.value === "实验结果") {
            // b.v.v = ''
            this.$set(b.v, "v", "");
            this.param[b.i].testResult = b;
          }
          set.add(b.r);
          // 如果模板列表的函数存在,那么加入到excel函数列表里面
          if (b.v.f) {
            this.excelMethodList.push(b);
          }
        });
        // 以下是样式处理逻辑
        set = Array.sort(set);
        set.forEach(b => {
          let arr = [];
          a.template.forEach(c => {
            if (c.r === b) {
              arr.push(c);
            }
          });
          arrs.push(arr);
        });
        a.arr = arrs;
        this.tableWidth = 0;
        for (let i = 0; i < arrs[0].length; i++) {
          this.tableWidth +=
            a.style.columnlen[i] === undefined ? 100 : a.style.columnlen[i];
        }
        // console.log(n, code);
        fetch('http://localhost:82/微信图片_20240518100811.png').then(res=>res.blob()).then(blob=>{
      });
      // 本次循环主要是对页面及后端传参进行初始化赋值
      this.currentSample.insProduct.forEach(async a => {
        try {
          // 计算值赋值
          let comValue = JSON.parse(a.insProductResult.comValue);
          for (var i = 0; i < comValue.length; i++) {
            this.param[a.id].comValue[i].v.v = this.toFixed(
              comValue[i].v,
              this.param[a.id].comValue[i].v.ct
            );
          }
        } catch (e) { }
        try {
          // 检验值赋值
          let insValue = JSON.parse(a.insProductResult.insValue);
          for (let i = 0; i < insValue.length; i++) {
            if (
              this.param[a.id].insValue.find(
                m => m.c == insValue[i].c && m.r == insValue[i].r
              )
            ) {
              this.param[a.id].insValue.find(
                m => m.c == insValue[i].c && m.r == insValue[i].r
              ).v.v = this.toFixed(
                insValue[i].v,
                this.param[a.id].insValue.find(
                  m => m.c == insValue[i].c && m.r == insValue[i].r
                ).v.ct
              );
              this.param[a.id].insValue.find(
                m => m.c == insValue[i].c && m.r == insValue[i].r
              ).u = insValue[i].u;
              // this.param[a.id].insValue[i].v.v = insValue[i].v
              // this.param[a.id].insValue[i].u = insValue[i].u
            }
          }
        } catch (e) { }
        try {
          // 设备编号赋值
          let equipValue = JSON.parse(a.insProductResult.equipValue);
          if (
            this.tableLists.find(m => m.templateId == this.currentTable) &&
            (this.tableLists.find(m => m.templateId == this.currentTable)
              .templateName == "温度循环检验原始记录" ||
              this.tableLists
                .find(m => m.templateId == this.currentTable)
                .templateName.includes("热循环") ||
              this.tableLists
                .find(m => m.templateId == this.currentTable)
                .templateName.includes("温升试验"))
          ) {
            // 特殊项目初始化
            this.param[a.id].equipValue = [];
            for (let i = 0; i < equipValue.length; i++) {
              this.param[a.id].equipValue.push({
                v: {
                  v: ""
                }
              });
            }
          }
          for (let i = 0; i < equipValue.length; i++) {
            if (
              this.tableLists.find(m => m.templateId == this.currentTable) &&
              (this.tableLists.find(m => m.templateId == this.currentTable)
                .templateName == "温度循环检验原始记录" ||
                this.tableLists
                  .find(m => m.templateId == this.currentTable)
                  .templateName.includes("热循环") ||
                this.tableLists
                  .find(m => m.templateId == this.currentTable)
                  .templateName.includes("温升试验"))
            ) {
              // 温度循环设备赋值
              this.$set(this.equipForm, `code` + i, equipValue[i].v);
              this.param[a.id].equipValue[i].v.v = equipValue[i].v;
            } else {
              // 普通设备赋值
              this.param[a.id].equipValue[i].v.v = equipValue[i].v;
            }
          }
        } catch (e) { }
        try {
          // 设备名称赋值
          let equipName = JSON.parse(a.insProductResult.equipName);
          if (
            this.tableLists.find(m => m.templateId == this.currentTable) &&
            (this.tableLists.find(m => m.templateId == this.currentTable)
              .templateName == "温度循环检验原始记录" ||
              this.tableLists
                .find(m => m.templateId == this.currentTable)
                .templateName.includes("热循环") ||
              this.tableLists
                .find(m => m.templateId == this.currentTable)
                .templateName.includes("温升试验"))
          ) {
            // 设备名称初始化
            this.param[a.id].equipName = [];
            for (let i = 0; i < equipName.length; i++) {
              this.param[a.id].equipName.push({
                v: {
                  v: ""
                }
              });
            }
          }
          for (let i = 0; i < equipName.length; i++) {
            if (
              this.tableLists.find(m => m.templateId == this.currentTable) &&
              (this.tableLists.find(m => m.templateId == this.currentTable)
                .templateName == "温度循环检验原始记录" ||
                this.tableLists
                  .find(m => m.templateId == this.currentTable)
                  .templateName.includes("热循环") ||
                this.tableLists
                  .find(m => m.templateId == this.currentTable)
                  .templateName.includes("温升试验"))
            ) {
              // 温度循环赋值
              this.$set(this.equipForm, `value` + i, equipName[i].v);
              this.param[a.id].equipName[i].v.v = equipName[i].v;
            } else {
              // 普通设备名称赋值
              this.param[a.id].equipName[i].v.v = equipName[i].v;
            }
          }
        } catch (e) { }
        try {
          // 实验结果赋值
          this.param[a.id].testResult.v.v = a.insProductResult.testResult;
          // 最终值赋值
          this.param[a.id].resValue = { v: { v: a.lastValue } };
          // this.param[a.id].resValue.v.v = this.toFixed(a.lastValue,this.param[a.id].resValue.v.ct)
          // 结论赋值
          this.param[a.id].insResult = { v: { v: a.insResult } };
          // this.param[a.id].insResult.v.v = a.insResult
          // 检验前样品检查赋值
          this.param[a.id].afterCheck.v.v = a.insProductResult.afterCheck;
          // 检验后样品检查赋值
          this.param[a.id].beforeCheck.v.v = a.insProductResult.beforeCheck;
        } catch (e) {
          console.log("error", e);
        }
      });
      // 对excel函数进行处理
      this.handleExcelMethod();
    },
    // 检验值输入后触发的函数
    changeInput(m, code, n, getDataType) {
      // 为数采定义一个逻辑参数
      if (getDataType == "getDataType") {
        this.getDataType = 2;
      }
      let currentInsItemId = null; //当前检验项id
      if (n) {
        currentInsItemId = JSON.parse(JSON.stringify(n.i));
        // 需要科学计数法的可以走这里
        if (this.PROJECT === "检测中心") {
          if (this.tableList.find(ele => ele.inspectionItem == "体积电阻率")) {
            if (parseFloat(n.v.v) >= 100000) {
              let num2 = new this.$Big(n.v.v);
              n.v.v = num2.toExponential();
            }
          }
        }
        // 定义一个函数来验证分数是否有效
        function isValidFraction(fraction) {
          const [numerator, denominator] = fraction.split("/"); // 分子和分母
          return !(!denominator || !numerator);
        }
        const isTrue = isValidFraction(n.v.v);
        if (!isTrue) {
          n.v.v = n.v.v.replace("/", "");
        }
      }
      // 通信特殊处理,检验值填入之后直接保存数据,判断结果默认为3
      // for (var i in this.param) {
      //   this.param[i].insResult = { v: { v: 3 } };
      // }
      this.saveInsContext(n.i);
      return;
      // 以下是正常的判断流程,后面有需要则进入此流程
      try {
        // 向 Worker 发送消息,开始处理逻辑
        this.worker.postMessage(
          JSON.stringify({
            code: code,
            tableList: this.tableList,
            excelMethodList: this.excelMethodList,
            comparisonList: this.comparisonList,
            currentSample: this.currentSample,
            PROJECT: this.PROJECT,
            param: this.param,
            currentTable: this.currentTable,
            getDataTypeId: this.getDataTypeId
          })
        );
      } catch (error) {
        console.log(444, error);
      }
      // 监听 Worker 返回的结果
      this.worker.onmessage = event => {
        this.result = JSON.parse(event.data);
        switch (this.result.method) {
          case "saveInsContext":
            this.$nextTick(() => {
              // this.$delete(this.tableList[0],'arr')
              this.$set(
                this.tableList[0],
                "arr",
                this.result.value.tableList[0].arr
              );
              this.param = this.result.value.param;
              if (this.result.value.currentInsItemId) {
                currentInsItemId = this.result.value.currentInsItemId;
              }
              // console.log(this.result,123);
              // 特殊处理一下结论,会有这种特殊情况
              for (var i in this.param) {
                if (
                  this.param[i].insResult &&
                  this.param[i].insResult.v &&
                  this.param[i].insResult.v.v
                ) {
                  if (this.param[i].insResult.v.v == "合格") {
                    this.$set(this.param[i].insResult.v, "v", 1);
                  } else if (this.param[i].insResult.v.v == "不合格") {
                    this.$set(this.param[i].insResult.v, "v", 0);
                  }
                }
              }
              this.saveInsContext(currentInsItemId);
            });
            break;
          case "tableList":
            this.$nextTick(() => {
              // 更新数据
              this.$delete(this.tableList[0], "arr");
              this.$set(this.tableList[0], "arr", this.result.value[0].arr);
            });
            break;
          case "getCurrentInsProduct":
            // 更新页面数据
            this.getCurrentInsProduct(this.result.value);
            break;
        }
      };
    },
    // 是否需要数采
    async determineWhetherToCollectData() {
      let res = await this.$axios.get(
        this.$api.deviceScope.determineWhetherToCollectData +
        "?managementNumber=''"
      );
      this.isGet = res.data;
    },
    // 根据后端传参更新页面数据   param => this.tableList[0].insProductResult
    getCurrentInsProduct(pId) {
      if (!this.tableList[0].insProductResult) {
        this.tableList[0].insProductResult = {};
      }
      for (let m in this.param[pId]) {
        let value = this.param[pId][m];
        switch (m) {
          case "comValue":
            // 赋值计算值
            if (value && value.length > 0) {
              this.tableList[0].insProductResult[m] = [];
              value.forEach((a, i) => {
                let obj = {
                  v: a.v.v
                };
                this.tableList[0].insProductResult[m].push(obj);
              });
              try {
                this.tableList[0].insProductResult[m] = JSON.stringify(
                  this.tableList[0].insProductResult[m]
                );
              } catch (error) {
                console.log(555, error);
              }
            }
            break;
          // 赋值检验值
          case "insValue":
            if (value && value.length > 0) {
              this.tableList[0].insProductResult[m] = [];
              value.forEach((a, i) => {
                let obj = {
                  v: a.v.v,
                  u: a.u
                };
                this.tableList[0].insProductResult[m].push(obj);
              });
              try {
                this.tableList[0].insProductResult[m] = JSON.stringify(
                  this.tableList[0].insProductResult[m]
                );
              } catch (error) {
                console.log(666, error);
              }
            }
            break;
          // 赋值设备编号
          case "equipValue":
            if (value && value.length > 0) {
              this.tableList[0].insProductResult[m] = [];
              value.forEach((a, i) => {
                let obj = {
                  v: a.v.v
                };
                this.tableList[0].insProductResult[m].push(obj);
              });
              try {
                this.tableList[0].insProductResult[m] = JSON.stringify(
                  this.tableList[0].insProductResult[m]
                );
              } catch (error) {
                console.log(777, error);
              }
            }
            break;
          // 赋值设备名称
          case "equipName":
            if (value && value.length > 0) {
              this.tableList[0].insProductResult[m] = [];
              value.forEach((a, i) => {
                let obj = {
                  v: a.v.v
                };
                this.tableList[0].insProductResult[m].push(obj);
              });
              try {
                this.tableList[0].insProductResult[m] = JSON.stringify(
                  this.tableList[0].insProductResult[m]
                );
              } catch (error) {
                console.log(888, error);
              }
            }
            break;
          // 赋值最终值
          case "resValue":
            this.tableList[0].lastValue = value ? value.v.v : "";
            break;
          // 赋值结论
          case "insResult":
            this.tableList[0].insResult = value ? value.v.v : "";
            break;
        }
      }
    },
    // 对EXCEL函数进行处理
    handleExcelMethod() {
      if (this.excelMethodList.length > 0) {
        this.excelMethodList.map(item => {
          // 得到每个函数的参数列表
          item.valueList = excelFunction.changeParameter(item.v.f);
          return item;
        });
      }
    },
    getValue(v) {
      // 对页面展示数据进行处理,@,代表换行
      let str = v.v
        ? v.v
        : v.v === 0
          ? v.v
          : v.ct && v.ct.s
            ? v.ct.s.length > 0 &&
            v.ct.s[0].v
              .replace(new RegExp("\n", "g"), "<br/>")
              .replace(new RegExp("@", "g"), "<br/>")
            : "";
      // 对数据保留小数点进行处理
      if (v.ct && v.ct.fa && v.ct.fa.includes(".") && str) {
        let num = 0;
        let str0 = v.ct.fa.split(".")[1];
        num = str0.length;
        str = Number(str).toFixed(num);
      }
      if (v.v && typeof v.v == "string" && v.v.includes("@")) {
        str = v.v.replace(new RegExp("@", "g"), "<br/>");
      }
      return str;
    },
    // 获取当前输入框类型
    getInspectionValueType(id) {
      for (var a in this.currentSample.insProduct) {
        if (this.currentSample.insProduct[a].id == id) {
          return this.currentSample.insProduct[a].inspectionValueType;
        }
      }
    },
    // 获取要求描述
    getTell(id) {
      for (var a in this.currentSample.insProduct) {
        if (this.currentSample.insProduct[a].id == id) {
          return this.currentSample.insProduct[a].tell;
        }
      }
    },
    // 动态获取单元格宽度
    handleWidth(n) {
      let sum = 0;
      if (n.v.mc && n.v.mc.cs && n.v.mc.c != undefined) {
        for (let i = 0; i < n.v.mc.cs; i++) {
          let num = this.widthList[i + n.v.mc.c]
            ? this.widthList[i + n.v.mc.c]
            : 100;
          sum += num;
        }
      } else {
        sum = this.widthList[n.c] ? this.widthList[n.c] : 100;
      }
      return sum;
    },
    // 对输入值进行格式校验
    handleInput(n) {
      try {
        n.v.v = n.v.v.replace(/[^\d.^e\-/+]/g, "");
        n.v.v = n.v.v.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
        n.v.v = n.v.v
          .replace(".", "$#$")
          .replace(/\./g, "")
          .replace("$#$", ".");
        n.v.v = n.v.v.replace(/\/{2,}/g, "/"); //只保留第一个/清除多余的
        n.v.v = n.v.v
          .replace("/", "$#$")
          .replace(/\//g, "")
          .replace("$#$", "/");
      } catch (error) {
        console.log(error);
      }
    },
    getInspectionItemType(id) {
      for (var a in this.currentSample.insProduct) {
        if (this.currentSample.insProduct[a].id == id) {
          return this.currentSample.insProduct[a].inspectionItemType;
        }
      }
    },
    // 获取要求值
    getAsk(id) {
      for (var a in this.currentSample.insProduct) {
        if (this.currentSample.insProduct[a].id == id) {
          return this.currentSample.insProduct[a].tell;
        }
      }
    },
    getSystemValue(n) {
      let code = null;
      try {
        this.param[n.i].equipValue.forEach(a => {
          if (a.r === n.r) {
            if (a.v.v == null || a.v.v == "") {
              this.$message.error("请先选择采集的设备");
              return;
            } else {
              code = a.v.v;
            }
          }
        });
      } catch (e) {
        // console.log(e);
        this.$message.error("找不到设备内容");
      }
      // console.log(n, code);
      fetch("http://localhost:82/微信图片_20240518100811.png")
        .then(res => res.blob())
        .then(blob => {
          // console.log(blob);
          const url = URL.createObjectURL(blob)
          const url = URL.createObjectURL(blob);
          // console.log(url);
        })
        /* this.$message.error('采集失败【已开放手动方式】')
        });
      /* this.$message.error('采集失败【已开放手动方式】')
        for (var a in this.currentSample.insProduct) {
          if (this.currentSample.insProduct[a].id == n.i) {
            this.currentSample.insProduct[a].inspectionItemType = 0
          }
        } */
      },
      // 获取设备
      getEquipOptions(e, id) {
        if (e) {
          this.equipOptions = []
          let product = this.currentSample.insProduct.find(m => m.id == id)
          this.$axios.post(this.$api.deviceScope.selectDeviceByCategory, {
    },
    // 获取设备
    getEquipOptions(e, id) {
      if (e) {
        this.equipOptions = [];
        let product = this.currentSample.insProduct.find(m => m.id == id);
        this.$axios
          .post(this.$api.deviceScope.selectDeviceByCategory, {
            inspectionItem: product.inspectionItem,
            inspectionItemSubclass: product.inspectionItemSubclass
          }).then(res => {
          })
          .then(res => {
            if (res.code === 200 && res.data) {
              this.equipOptions = res.data.map(m => {
                m.value = m.managementNumber
                m.label = m.deviceName
                return m
              })
                m.value = m.managementNumber;
                m.label = m.deviceName;
                return m;
              });
            }
          }).catch(error => {
            console.error(error)
          })
        }
      },
      getDic(e, id) {
        if (e) {
          for (var a in this.currentSample.insProduct) {
            if (this.currentSample.insProduct[a].id == id) {
              let str = this.currentSample.insProduct[a].dic
              this.selectEnumByCategoryOfSelect(str)
              return str
            }
          .catch(error => {
            console.error(error);
          });
      }
    },
    getDic(e, id) {
      if (e) {
        for (var a in this.currentSample.insProduct) {
          if (this.currentSample.insProduct[a].id == id) {
            let str = this.currentSample.insProduct[a].dic;
            this.selectEnumByCategoryOfSelect(str);
            return str;
          }
        }
      },
      getUserInfo() {
        this.$axios.get(this.$api.user.getUserInfo).then(res => {
          this.userId = res.data.id
          this.componentData.entity.userId = res.data.id
          // console.log(1111,this.userId)
        })
      },
      // 复核
      upInsReview(e,type) {
        this.$confirm(`是否${type}?`, "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          if (e == 1||e==2) {
          // 继续试验
          this.reviewLoading = true;
          this.$axios.post(this.$api.insOrderPlan.verifyPlan, {
            orderId: this.orderId,
            type: e,
      }
    },
    getUserInfo() {
      this.$axios.get(this.$api.user.getUserInfo).then(res => {
        this.userId = res.data.id;
        this.componentData.entity.userId = res.data.id;
        // console.log(1111,this.userId)
      });
    },
    // 复核
    upInsReview() {
      if (this.upInsReviewType == 1 || this.upInsReviewType == 2) {
        // 继续试验
        this.reviewLoading = true;
        this.$axios
          .post(this.$api.insOrderPlan.verifyPlan, {
            sampleId: this.orderId,
            type: this.upInsReviewType,
            laboratory: this.sonLaboratory,
            tell: null
          }).then(res => {
          })
          .then(res => {
            if (res.code === 200) {
              this.$message.success("操作成功")
              this.$emit('goback')
              this.$message.success("操作成功");
              this.upInsReviewDia = false;
              this.$emit("goback");
            }
            this.reviewLoading = false;
          }).catch(error => {
            console.error(error)
            this.reviewLoading = false;
          })
        } else{
          // 再次试验
          this.reviewDia = true;
        }
        })
      },
      handleReviewDia() {
        if (this.noReason) {
          this.reviewLoading = true;
          this.$axios.post(this.$api.insOrderPlan.verifyPlan, {
            orderId: this.orderId,
          .catch(error => {
            console.error(error);
            this.reviewLoading = false;
          });
      } else {
        // 再次试验
        this.reviewDia = true;
      }
    },
    handleReviewDia() {
      if (this.noReason) {
        this.reviewLoading = true;
        this.$axios
          .post(this.$api.insOrderPlan.verifyPlan, {
            sampleId: this.orderId,
            type: 0,
            laboratory: this.sonLaboratory,
            tell: this.noReason
          }).then(res => {
          })
          .then(res => {
            if (res.code === 200) {
              this.$message.success("操作成功")
              this.$emit('goback')
              this.$message.success("操作成功");
              this.$emit("goback");
            }
            this.reviewLoading = false;
          }).catch(error => {
            console.error(error)
          })
          .catch(error => {
            console.error(error);
            this.reviewLoading = false;
          })
        } else {
          this.$message.error('未输入不通过原因')
          });
      } else {
        this.$message.error("未输入不通过原因");
      }
    },
    submit0() {
      if (this.sonLaboratory === "电路试验") {
        if (!this.experimentInfo.term) {
          this.$message.error("请输入实验阶段");
          return;
        }
      },
      submit0(){
        if(this.sonLaboratory === '电路试验'){
          if(!this.experimentInfo.term){
            this.$message.error('请输入实验阶段')
            return
          }
          if(!this.experimentInfo.note){
            this.$message.error('请输入实验操作')
            return
          }
        if (!this.experimentInfo.note) {
          this.$message.error("请输入实验操作");
          return;
        }
        let num =0
        this.sampleProduct.forEach(item=>{
          item.insProduct.forEach(a=>{
            if(!a.outputWorkTime){
              num++
      }
      // let num =0
      // this.newUserInfo.forEach(item=>{
      //   item.timeArr.forEach(a=>{
      //     if(!a){
      //       num++
      //     }
      //   })
      // })
      // if(num>0){
      //   this.$message.error('请输入完成工时')
      //   return
      // }
      this.experimentDia = false;
      this.experimentDia0 = false;
      if (this.insOrder.orderType == "C") {
        this.verifyUser = this.insOrder.prepareUserId;
        this.submit();
      } else {
        this.addVerifyDia = true;
      }
    },
    async handleSubmit() {
      if (!this.otherForm.temperature) {
        this.$message.error("请输入温度");
        return;
      }
      if (!this.otherForm.humidity) {
        this.$message.error("请输入湿度");
        return;
      }
      let name = this.tableLists
        .find(m => m.templateId == this.currentTable)
        .templateName
      console.log(2222, name, this.param)
      if (name == '检验原始记录' || name == '辐射试验检测原始记录') {
        let num = 0
        for (let i in this.param) {
          if(!this.param[i].insResult||!this.param[i].insResult.v||(!this.param[i].insResult.v.v&&this.param[i].insResult.v.v!==0)){
              this.$message.error("请输入检验过程值");
              return;
          }else{
            if (this.param[i].insResult.v.v != 0 && this.param[i].insResult.v.v != 1) {
              num++;
            }
          })
          }
        }
        console.log(3333, num)
        if (num > 0) {
          this.$message.error("请输入实验结果");
          return;
        }
      }
      if (name == '辐射试验检测原始记录') {
        let num = 0
        for (let i in this.param) {
          if (!this.param[i].insValue || this.param[i].insValue.length < 2) {
            num = 1
          } else if (this.param[i].insValue.find(m => !m.v.v)) {
            num++
          }
        }
        if (num > 0) {
          this.$message.error("请输入合格数量、不合格量");
          return;
        }
      }
      this.loading = true;
      if (
        this.sonLaboratory === "电路试验" &&
        !(await this.$refs.CircuitParameters.saveAll())
      ) {
        this.loading = false;
        return;
      } else {
        this.loading = false;
      }
      this.experimentDia = true;
      this.newUserInfo = [];
      this.userInfo.name.forEach((item, index) => {
        let timeArr = [];
        this.sampleProduct.forEach(m => {
          m.insProduct.forEach(a => {
            timeArr.push(0);
          });
        });
        let obj = {
          name: item,
          id: this.userInfo.ids[index],
          timeArr: timeArr
        };
        this.newUserInfo.push(obj);
      });
      if (this.sonLaboratory === "电路试验") {
        this.experimentDia0 = true;
      }
    },
    submit() {
      if (this.verifyUser === null || this.verifyUser === "") {
        this.$message.error("请指定复核人员");
        return;
      }
      this.addVerifyDia = false;
      this.submitLoading = true;
      this.$axios
        .post(this.$api.insOrderPlan.checkSubmitPlan, {
          sampleId: this.orderId,
          laboratory: this.sonLaboratory
        })
        if(num>0){
          this.$message.error('请输入完成工时')
          return
        }
        this.experimentDia = false
        this.experimentDia0 = false
        if(this.insOrder.orderType=='C'){
          this.verifyUser = this.insOrder.prepareUserId
          this.submit()
        }else{
          this.addVerifyDia = true
        }
      },
      handleSubmit(){
        if(!this.otherForm.temperature){
          this.$message.error('请输入温度')
          return
        }
        if(!this.otherForm.humidity){
          this.$message.error('请输入湿度')
          return
        }
        this.experimentDia = true
        if (this.sonLaboratory === '电路试验') {
          this.experimentDia0 = true
        }
      },
      submit() {
        if (this.verifyUser === null || this.verifyUser === '') {
          this.$message.error("请指定复核人员")
          return
        }
        this.addVerifyDia = false
        this.submitLoading = true;
        this.$axios.post(this.$api.insOrderPlan.checkSubmitPlan, {
          orderId: this.orderId,
          laboratory: this.sonLaboratory,
        }).then(res => {
        .then(res => {
          if (res.code === 200) {
            let auxiliaryOutputWorkingHoursList = []
            this.sampleProduct.forEach(item=>{
              item.insProduct.forEach(a=>{
                let obj = {
                  inspectionItem:a.inspectionItem,
                  outputWorkTime:a.outputWorkTime,
                  inspectionItemSubclass:a.inspectionItemSubclass,
                  sample:item.sampleCode,
                  insProductId:a.id,
                  num:item.num1
                }
                auxiliaryOutputWorkingHoursList.push(obj)
              })
            })
            if(!res.data||res.data.length==0){
              this.$axios.post(this.$api.insOrderPlan.submitPlan, {
                orderId: this.orderId,
                laboratory: this.sonLaboratory,
                verifyUser: this.verifyUser,
                entrustCode: this.insOrder.entrustCode,
                auxiliaryOutputWorkingHoursList:auxiliaryOutputWorkingHoursList,
                ...this.experimentInfo
              }, {
      headers: {
        'Content-Type': 'application/json'
      },
      noQs:true}).then(res => {
                if (res.code === 200) {
                  this.$message.success("操作成功")
                  this.$emit('goback')
                }
                this.submitLoading = false;
              }).catch(error => {
                console.error(error)
                this.submitLoading = false;
              })
            }else{
              let newData = []
              const h = this.$createElement
            let auxiliaryOutputWorkingHoursList = [];
            this.sampleProduct.forEach(item => {
              item.insProduct.forEach((a, i) => {
                this.newUserInfo.forEach(b => {
                  let obj = {
                    inspectionItem: a.inspectionItem,
                    outputWorkTime: b.timeArr[i],
                    inspectionItemSubclass: a.inspectionItemSubclass,
                    sample: item.sampleCode,
                    insProductId: a.id,
                    num: item.num1,
                    check: b.id
                  };
                  auxiliaryOutputWorkingHoursList.push(obj);
                });
              });
            });
            if (!res.data || res.data.length == 0) {
              this.$axios
                .post(
                  this.$api.insOrderPlan.submitPlan,
                  {
                    sampleId: this.orderId,
                    laboratory: this.sonLaboratory,
                    verifyUser: this.verifyUser,
                    entrustCode: this.insOrder.entrustCode,
                    auxiliaryOutputWorkingHoursList: auxiliaryOutputWorkingHoursList,
                    ...this.experimentInfo
                  },
                  {
                    headers: {
                      "Content-Type": "application/json"
                    },
                    noQs: true
                  }
                )
                .then(res => {
                  if (res.code === 200) {
                    this.$message.success("操作成功");
                    this.$emit("goback");
                  }
                  this.submitLoading = false;
                })
                .catch(error => {
                  console.error(error);
                  this.submitLoading = false;
                });
            } else {
              let newData = [];
              const h = this.$createElement;
              for (let i in res.data) {
                const lastChar = res.data[i].slice(-1);
                if(lastChar=='-'){
                if (lastChar == "-") {
                  res.data[i] = res.data[i].slice(0, -1);
                }
                newData.push(h('p', {style: 'font-size: 14px;color: red;'}, (Number(i)+1)+'、'+res.data[i]))
                newData.push(
                  h(
                    "p",
                    { style: "font-size: 14px;color: red;" },
                    Number(i) + 1 + "、" + res.data[i]
                  )
                );
              }
              newData.push(h('p',  { style: 'font-size: 16px;color:#000;margin-top:12px;overflow-y: auto;max-height:80vh' },'以上项目不合格,确定提交?'))
              this.$confirm('提示',{
                title:'提示',
                message: h('div', null, newData),
              newData.push(
                h(
                  "p",
                  {
                    style:
                      "font-size: 16px;color:#000;margin-top:12px;overflow-y: auto;max-height:80vh"
                  },
                  "以上项目不合格,确定提交?"
                )
              );
              this.$confirm("提示", {
                title: "提示",
                message: h("div", null, newData),
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: ""
              }).then(() => {
                this.$axios.post(this.$api.insOrderPlan.submitPlan, {
                  orderId: this.orderId,
                  laboratory: this.sonLaboratory,
                  verifyUser: this.verifyUser,
                  auxiliaryOutputWorkingHoursList:auxiliaryOutputWorkingHoursList,
                  ...this.experimentInfo
                }, {
      headers: {
        'Content-Type': 'application/json'
      },
      noQs:true}).then( res => {
                  if (res.code === 200) {
                    this.submitLoading = false;
                    this.$message.success("操作成功")
                    this.$emit('goback')
                  }
                }).catch(error => {
                  console.error(error)
              })
                .then(() => {
                  this.$axios
                    .post(
                      this.$api.insOrderPlan.submitPlan,
                      {
                        sampleId: this.orderId,
                        laboratory: this.sonLaboratory,
                        verifyUser: this.verifyUser,
                        auxiliaryOutputWorkingHoursList: auxiliaryOutputWorkingHoursList,
                        ...this.experimentInfo
                      },
                      {
                        headers: {
                          "Content-Type": "application/json"
                        },
                        noQs: true
                      }
                    )
                    .then(res => {
                      if (res.code === 200) {
                        this.submitLoading = false;
                        this.$message.success("操作成功");
                        this.$emit("goback");
                      }
                    })
                    .catch(error => {
                      console.error(error);
                    });
                })
              }).catch(() => {})
                .catch(() => { });
            }
          }
        }).catch(error => {
          console.error(error)
          this.submitLoading = false;
        })
        return
      },
      async handleCType(){
        if(this.insOrder.departmentLims=='质量部'){
          await this.$axios.post(this.$api.insOrderPlan.verifyPlan, {
            orderId: this.orderId,
        .catch(error => {
          console.error(error);
          this.submitLoading = false;
        });
      return;
    },
    async handleCType() {
      if (this.insOrder.departmentLims == "质量部") {
        await this.$axios
          .post(this.$api.insOrderPlan.verifyPlan, {
            sampleId: this.orderId,
            type: 1,
            laboratory: this.sonLaboratory,
            tell: null
          }).then(res => {
          })
          .then(res => {
            if (res.code === 200) {
            }
          }).catch(error => {
          })
        }
      },
      // 统一在这里保存数据
      saveInsContext(currentInsItemId) {
        try {
          console.log(1111,this.param)
          if(this.param){
            let param = null
            if(currentInsItemId){
              param = {[currentInsItemId] : this.param[currentInsItemId]}
            }else{
              param = this.param
            }
            this.$axios.post(this.$api.insOrderPlan.saveInsContext, {
          .catch(error => { });
      }
    },
    // 统一在这里保存数据
    saveInsContext(currentInsItemId) {
      try {
        console.log(1111, this.param);
        if (this.param) {
          let param = null;
          if (currentInsItemId) {
            param = { [currentInsItemId]: this.param[currentInsItemId] };
          } else {
            param = this.param;
          }
          this.$axios
            .post(this.$api.insOrderPlan.saveInsContext, {
              param: JSON.stringify(param),
              currentTable:this.currentTable,
              num:this.currentSample.num1
            }).then(res => {
              if (res.code == 201) {
                this.$message.error('保存失败')
                return
              }
              this.$message.success('已保存')
              currentTable: this.currentTable,
              num: this.currentSample.num1
            })
            // 向 Worker 发送消息,开始处理逻辑
            this.worker.postMessage(JSON.stringify({
              type: 'saveData',
              tableList:this.tableList,
              param:this.param,
              currentTable:this.currentTable
            }));
          }
        }catch (error) {
          console.log(999,error);
        }
      },
      // 设备改变
      changeEquip(val, n,v) {
        this.$set(n.v,'v',val)
        this.tableList[0].arr.forEach((item,index)=>{
          item.forEach((m,i)=>{
            if(this.param[m.i]){
              this.param[m.i].state = 1
            }
            if(m.i==n.i&&m.v.ps&&m.v.ps.value=='设备名称'&&v){
              this.$set(m.v,'v',v)
            }
          })
        })
        for (let i in this.param) {
          if(this.param[i].state!=1){
            delete this.param[i]
          }
        }
        if(val&&v){
          for (let i1 in this.param[n.i].equipName) {
            if (this.param[n.i].equipName[i1].i === n.i && this.param[n.i].equipName[i1].r === n.r) {
              this.$delete(this.param[n.i].equipValue[i1].v,'v')
              this.$set(this.param[n.i].equipValue[i1].v,'v',val)
              this.$delete(this.param[n.i].equipName[i1].v,'v')
              this.$set(this.param[n.i].equipName[i1].v,'v',v)
            }
          }
        }
        for (let i in this.equipOptions) {
          if (this.equipOptions[i].value == val) {
            for (let i1 in this.param[n.i].equipName) {
              if (this.param[n.i].equipName[i1].i === n.i && this.param[n.i].equipName[i1].r === n.r) {
                this.$delete(this.param[n.i].equipValue[i1].v,'v')
                this.$set(this.param[n.i].equipValue[i1].v,'v',val)
                this.$delete(this.param[n.i].equipName[i1].v,'v')
                this.$set(this.param[n.i].equipName[i1].v,'v',this.equipOptions[i].label)
                this.tableList[0].arr.forEach((item,index)=>{
                  item.forEach((m)=>{
                    if(m.i==n.i&&m.v.ps&&m.v.ps.value=='设备名称'){
                      this.$set(m.v,'v',this.equipOptions[i].label)
                    }
                  })
                })
            .then(res => {
              if (res.code == 201) {
                this.$message.error("保存失败");
                return;
              }
              this.$message.success("已保存");
            });
          // 向 Worker 发送消息,开始处理逻辑
          this.worker.postMessage(
            JSON.stringify({
              type: "saveData",
              tableList: this.tableList,
              param: this.param,
              currentTable: this.currentTable
            })
          );
        }
      } catch (error) {
        console.log(999, error);
      }
    },
    // 设备改变
    changeEquip(val, n, v) {
      this.$set(n.v, "v", val);
      this.tableList[0].arr.forEach((item, index) => {
        item.forEach((m, i) => {
          if (this.param[m.i]) {
            this.param[m.i].state = 1;
          }
          if (m.i == n.i && m.v.ps && m.v.ps.value == "设备名称" && v) {
            this.$set(m.v, "v", v);
          }
        });
      });
      for (let i in this.param) {
        if (this.param[i].state != 1) {
          delete this.param[i];
        }
      }
      if (val && v) {
        for (let i1 in this.param[n.i].equipName) {
          if (
            this.param[n.i].equipName[i1].i === n.i &&
            this.param[n.i].equipName[i1].r === n.r
          ) {
            this.$delete(this.param[n.i].equipValue[i1].v, "v");
            this.$set(this.param[n.i].equipValue[i1].v, "v", val);
            this.$delete(this.param[n.i].equipName[i1].v, "v");
            this.$set(this.param[n.i].equipName[i1].v, "v", v);
          }
        }
      }
      for (let i in this.equipOptions) {
        if (this.equipOptions[i].value == val) {
          for (let i1 in this.param[n.i].equipName) {
            if (
              this.param[n.i].equipName[i1].i === n.i &&
              this.param[n.i].equipName[i1].r === n.r
            ) {
              this.$delete(this.param[n.i].equipValue[i1].v, "v");
              this.$set(this.param[n.i].equipValue[i1].v, "v", val);
              this.$delete(this.param[n.i].equipName[i1].v, "v");
              this.$set(
                this.param[n.i].equipName[i1].v,
                "v",
                this.equipOptions[i].label
              );
              this.tableList[0].arr.forEach((item, index) => {
                item.forEach(m => {
                  if (m.i == n.i && m.v.ps && m.v.ps.value == "设备名称") {
                    this.$set(m.v, "v", this.equipOptions[i].label);
                  }
                });
              });
            }
          }
        }
        // 保存数据
        this.saveInsContext(n.i)
      },
      // 样品检查
      changeSampleCheck(val, n,type){
        this.$set(n.v,'v',val)
        if(type=='前'){
          // 检验前
          this.saveInsContext(n.i)
        }else{
          // 检验后
          this.saveInsContext(n.i)
      }
      // 保存数据
      this.saveInsContext(n.i);
    },
    // 样品检查
    changeSampleCheck(val, n, type) {
      this.$set(n.v, "v", val);
      if (type == "前") {
        // 检验前
        this.saveInsContext(n.i);
      } else if ('实验结果') {
        // 实验结果
        if (val == '无异常') {
          this.$set(this.param[n.i], "insResult", {});
          this.$set(this.param[n.i].insResult, "v", {});
          this.$set(this.param[n.i].insResult.v, "v", 1);
        } else if (val == '不合格') {
          this.$set(this.param[n.i], "insResult", {});
          this.$set(this.param[n.i].insResult, "v", {});
          this.$set(this.param[n.i].insResult.v, "v", 0);
        }
      },
      getAuthorizedPerson() {
        this.$axios.get(this.$api.user.getUserMenu).then(res => {
          let data = []
          // let userName = JSON.parse(localStorage.getItem("user")).name;
          res.data.forEach(a => {
            if(!this.inspectorList.includes(a.name)) {
              data.push({
        this.saveInsContext(n.i);
      } else {
        // 检验后
        this.saveInsContext(n.i);
      }
    },
    getAuthorizedPerson() {
      this.$axios.get(this.$api.user.getUserMenu).then(res => {
        let data = [];
        // let userName = JSON.parse(localStorage.getItem("user")).name;
        res.data.forEach(a => {
          if (!this.inspectorList.includes(a.name)) {
            data.push({
              label: a.name,
              value: a.id
            })
            }
          })
          this.personList = data
        })
      },
      scrollInit() {
        // 获取要绑定事件的元素
        const nav = document.getElementById("nav")
        var flag; // 鼠标按下
        var downX; // 鼠标点击的x下标
        var scrollLeft; // 当前元素滚动条的偏移量
        nav.addEventListener("mousedown", function(event) {
          flag = true;
          downX = event.clientX; // 获取到点击的x下标
          scrollLeft = this.scrollLeft; // 获取当前元素滚动条的偏移量
        });
        nav.addEventListener("mousemove", function(event) {
          if (flag) { // 判断是否是鼠标按下滚动元素区域
            var moveX = event.clientX; // 获取移动的x轴
            var scrollX = moveX - downX; // 当前移动的x轴下标减去刚点击下去的x轴下标得到鼠标滑动距离
            this.scrollLeft = scrollLeft - scrollX // 鼠标按下的滚动条偏移量减去当前鼠标的滑动距离
            });
          }
        });
        // 鼠标抬起停止拖动
        nav.addEventListener("mouseup", function() {
          flag = false;
        });
        // 鼠标离开元素停止拖动
        nav.addEventListener("mouseleave", function(event) {
          flag = false;
        });
      },
      // 页面里面切换样品
      async caretSample(num){
        let index = this.currentKey + num
        if(index < 1){
          this.$message.error('当前是第一个样品')
          return
        } else if(index > this.sampleProduct.length){
          this.$message.error('当前是最后一个样品')
          return
        this.personList = data;
      });
    },
    scrollInit() {
      // 获取要绑定事件的元素
      const nav = document.getElementById("nav");
      var flag; // 鼠标按下
      var downX; // 鼠标点击的x下标
      var scrollLeft; // 当前元素滚动条的偏移量
      nav.addEventListener("mousedown", function (event) {
        flag = true;
        downX = event.clientX; // 获取到点击的x下标
        scrollLeft = this.scrollLeft; // 获取当前元素滚动条的偏移量
      });
      nav.addEventListener("mousemove", function (event) {
        if (flag) {
          // 判断是否是鼠标按下滚动元素区域
          var moveX = event.clientX; // 获取移动的x轴
          var scrollX = moveX - downX; // 当前移动的x轴下标减去刚点击下去的x轴下标得到鼠标滑动距离
          this.scrollLeft = scrollLeft - scrollX; // 鼠标按下的滚动条偏移量减去当前鼠标的滑动距离
        }
        this.currentKey = index
        this.currentSample = this.HaveJson(this.sampleProduct[index - 1])
        // 获取检验项
        let list = await this.getCurrentProduct(this.currentSample.id,0)
        this.currentSample.insProduct = this.HaveJson(list)
        // 初始化后端传参
        this.param = {}
        this.changeType = 0;
        this.currentSample.insProduct.forEach((a, j) => {
          if(this.handleCasing(a.inspectionItem)){
            this.param[a.id] = {
              insValue: [],
              comValue: [],
              resValue: null,
              equipValue: [],
              equipName: [],
              insResult: null,
              beforeCheck:null,
              afterCheck:null,
            }
          }
        })
        // 页面数据处理
        this.getTableLists()
        // 更新到多线程
        this.worker.postMessage(JSON.stringify({
          type: 'saveData',
          tableList:this.tableList,
          param:this.param,
          currentTable:this.currentTable
        }));
      },
      caretBushing(num){
        let index = this.currentKey0 + num
        if(index < 1){
          this.$message.error('当前是第一个套管')
          return
        } else if(index > this.bushing.length){
          this.$message.error('当前是最后一个套管')
          return
        }
        this.currentKey0 = index
        this.currentBushing = this.HaveJson(this.bushing[index - 1])
        this.fiberOpticTape = []
        this.currentFiberOpticTape = null;
        this.fiberOptic = []
        this.currentFiberOptic = null;
        if( this.currentBushing.fiber&& this.currentBushing.fiber.length>0){
          // 直接配置光纤
          this.fiberOptic =  this.currentBushing.fiber;
        }else if( this.currentBushing.fibers&& this.currentBushing.fibers.length>0){
          // 配置光纤带后,再配置光纤
          this.fiberOpticTape =  this.currentBushing.fibers;
        }
      },
      async caretTape(num){
        let index = this.currentKey1 + num
        if(index < 1){
          this.$message.error('当前是第一个光纤带')
          return
        } else if(index > this.fiberOpticTape.length){
          this.$message.error('当前是最后一个光纤带')
          return
        }
        this.currentKey1 = index
        this.currentFiberOpticTape = this.HaveJson(this.fiberOpticTape[index - 1])
        this.param = {}
        this.fiberOptic = []
        this.currentFiberOptic = null;
        this.currentFiberOpticTape.productList.forEach(a => {
      });
      // 鼠标抬起停止拖动
      nav.addEventListener("mouseup", function () {
        flag = false;
      });
      // 鼠标离开元素停止拖动
      nav.addEventListener("mouseleave", function (event) {
        flag = false;
      });
    },
    // 页面里面切换样品
    async caretSample(num) {
      let index = this.currentKey + num;
      if (index < 1) {
        this.$message.error("当前是第一个样品");
        return;
      } else if (index > this.sampleProduct.length) {
        this.$message.error("当前是最后一个样品");
        return;
      }
      this.currentKey = index;
      this.currentSample = this.HaveJson(this.sampleProduct[index - 1]);
      // 获取检验项
      let list = await this.getCurrentProduct(this.currentSample.id, 0);
      this.currentSample.insProduct = this.HaveJson(list);
      // 初始化后端传参
      this.param = {};
      this.changeType = 0;
      this.currentSample.insProduct.forEach((a, j) => {
        if (this.handleCasing(a.inspectionItem)) {
          this.param[a.id] = {
            insValue: [],
            comValue: [],
            resValue: null,
            equipValue: [],
            equipName: [],
            insResult: null
          }
        })
        let list = await this.getCurrentProduct(this.currentFiberOpticTape.id,1)
        this.getTableLists0(list)
        if(this.currentFiberOpticTape.fiber&&this.currentFiberOpticTape.fiber.length>0){
          // 配置光纤
          this.fiberOptic = this.currentFiberOpticTape.fiber;
            insResult: null,
            beforeCheck: null,
            afterCheck: null,
            testResult: null
          };
        }
      },
      async caretOptic(num){
        let index = this.currentKey2 + num
        if(index < 1){
          this.$message.error('当前是第一个光纤')
          return
        } else if(index > this.fiberOptic.length){
          this.$message.error('当前是最后一个光纤')
          return
        }
        this.currentKey2 = index
        this.currentFiberOptic = this.HaveJson(this.fiberOptic[index - 1])
        this.currentFiberOptic.productList.forEach(a => {
          this.param[a.id] = {
            insValue: [],
            comValue: [],
            resValue: null,
            equipValue: [],
            equipName: [],
            insResult: null
          }
      });
      // 页面数据处理
      this.getTableLists();
      // 更新到多线程
      this.worker.postMessage(
        JSON.stringify({
          type: "saveData",
          tableList: this.tableList,
          param: this.param,
          currentTable: this.currentTable
        })
        let list = await this.getCurrentProduct(this.currentFiberOptic.id,2)
        this.getTableLists0(list)
      },
      handleSuccessUp(response, ) {
        this.upLoading = false;
            if (response.code == 200) {
          this.$message.success('上传成功');
          this.$refs.fileList.selectList()
            }
         },
      beforeUpload(file) {
            if (file.size > 1024 * 1024 * 10) {
               this.$message.error('上传文件不超过10M');
               this.$refs.upload.clearFiles()
               return false;
            } else {
      );
    },
    caretBushing(num) {
      let index = this.currentKey0 + num;
      if (index < 1) {
        this.$message.error("当前是第一个套管");
        return;
      } else if (index > this.bushing.length) {
        this.$message.error("当前是最后一个套管");
        return;
      }
      this.currentKey0 = index;
      this.currentBushing = this.HaveJson(this.bushing[index - 1]);
      this.fiberOpticTape = [];
      this.currentFiberOpticTape = null;
      this.fiberOptic = [];
      this.currentFiberOptic = null;
      if (this.currentBushing.fiber && this.currentBushing.fiber.length > 0) {
        // 直接配置光纤
        this.fiberOptic = this.currentBushing.fiber;
      } else if (
        this.currentBushing.fibers &&
        this.currentBushing.fibers.length > 0
      ) {
        // 配置光纤带后,再配置光纤
        this.fiberOpticTape = this.currentBushing.fibers;
      }
    },
    async caretTape(num) {
      let index = this.currentKey1 + num;
      if (index < 1) {
        this.$message.error("当前是第一个光纤带");
        return;
      } else if (index > this.fiberOpticTape.length) {
        this.$message.error("当前是最后一个光纤带");
        return;
      }
      this.currentKey1 = index;
      this.currentFiberOpticTape = this.HaveJson(
        this.fiberOpticTape[index - 1]
      );
      this.param = {};
      this.fiberOptic = [];
      this.currentFiberOptic = null;
      this.currentFiberOpticTape.productList.forEach(a => {
        this.param[a.id] = {
          insValue: [],
          comValue: [],
          resValue: null,
          equipValue: [],
          equipName: [],
          insResult: null
        };
      });
      let list = await this.getCurrentProduct(this.currentFiberOpticTape.id, 1);
      this.getTableLists0(list);
      if (
        this.currentFiberOpticTape.fiber &&
        this.currentFiberOpticTape.fiber.length > 0
      ) {
        // 配置光纤
        this.fiberOptic = this.currentFiberOpticTape.fiber;
      }
    },
    async caretOptic(num) {
      let index = this.currentKey2 + num;
      if (index < 1) {
        this.$message.error("当前是第一个光纤");
        return;
      } else if (index > this.fiberOptic.length) {
        this.$message.error("当前是最后一个光纤");
        return;
      }
      this.currentKey2 = index;
      this.currentFiberOptic = this.HaveJson(this.fiberOptic[index - 1]);
      this.currentFiberOptic.productList.forEach(a => {
        this.param[a.id] = {
          insValue: [],
          comValue: [],
          resValue: null,
          equipValue: [],
          equipName: [],
          insResult: null
        };
      });
      let list = await this.getCurrentProduct(this.currentFiberOptic.id, 2);
      this.getTableLists0(list);
    },
    async handleSuccessUp(response) {
      this.upLoading = false;
      if (response.code == 200) {
        this.$message.success("上传成功");
        this.$refs.fileList.selectList();
        if (this.sonLaboratory === "电路试验") {
          // // 电路试验数采
          // 获取当前样品的检验项
          let list = await this.getCurrentProduct(this.currentSample.id, 0);
          this.currentSample.insProduct = this.HaveJson(list);
          this.currentNum++;
        } else if (this.sonLaboratory === "振动") {
          this.getDocAnalysis(response.data)
        }
      } else {
        this.$message.error(response.message);
      }
    },
    getDocAnalysis (data) {
      const psToDataKeyMap = {
        '检验值1': '1',
        '检验值9': '9',
        '检验值10': '10',
        '检验值11': '11',
        '检验值12': '12',
        '检验值13': '13',
      };
      for (let i in this.param) {
        this.param[i].insValue.forEach(a => {
          // 检查当前的ps.value是否在映射表中存在
          if (a.v.ps.value && psToDataKeyMap.hasOwnProperty(a.v.ps.value)) {
            // 使用映射表中的值从data对象获取对应的值
            a.v.v = data[psToDataKeyMap[a.v.ps.value]];
            // 调用保存上下文的方法
            this.saveInsContext(a.i);
          }
        });
      }
    },
    beforeUpload(file) {
      if (
        this.sonLaboratory === "电路试验" &&
        (file.name.includes("交调") || file.name.includes("互调")) &&
        !this.$refs.CircuitParameters.allBandList.find(m => m.band)
      ) {
        this.$message.error("上传附件前请先填写并保存频段");
        return false;
      } else {
        // if(file.name.includes('交调')||file.name.includes('互调')){
        //   this.$refs.CircuitParameters.saveAll()
        // }
        if (file.size > 1024 * 1024 * 10) {
          this.$message.error("上传文件不超过10M");
          this.$refs.upload.clearFiles();
          return false;
        } else {
          this.upLoading = true;
               return true;
            }
         },
      onError(err, file, fileList) {
            this.$message.error('上传失败')
            this.$refs.upload.clearFiles()
         },
      handleDown(row){
        this.$axios.post(this.$api.insOrderPlan.downFile, {
          id: row.id,
        }).then(res => {
          return true;
        }
      }
    },
    onError(err, file, fileList) {
      this.$message.error("上传失败");
      this.$refs.upload.clearFiles();
    },
    handleDown(row) {
      this.$axios
        .post(this.$api.insOrderPlan.downFile, {
          id: row.id
        })
        .then(res => {
          if (res.code === 200) {
            let url = '';
            if(res.data.type==1){
              url = this.javaApi+'/img/'+res.data.fileUrl
              file.downloadIamge(url,row.fileName)
            }else{
              url = this.javaApi+'/word/'+res.data.fileUrl
              const link = document.createElement('a');
            let url = "";
            if (res.data.type == 1) {
              url = this.javaApi + "/img/" + res.data.fileUrl;
              file.downloadIamge(url, row.fileName);
            } else {
              url = this.javaApi + "/word/" + res.data.fileUrl;
              const link = document.createElement("a");
              link.href = url;
              link.download = row.fileName;
              link.click();
            }
          }
        }).catch(error => {
        })
      },
      /**
       * 将数值v保留ct.fa中'##'后的指定小数位数,并返回格式化后的字符串。
       *
       * @param v 要格式化的数值
       * @param ct 包含格式化配置的对象
       * @param ct.fa 格式化配置字符串,若包含'##'则按照其后的内容确定小数位数
       * @returns 格式化后的字符串或原始数值(若配置不符合要求)
       */
      toFixed(v,ct){
        if(v&&ct&&ct.fa){
          if(ct.fa.includes('.')){
            let num = ct.fa.slice(4).length
            return Number(v).toFixed(num)
          }else{
            return v
          }
        }else{
          return v
        .catch(error => { });
    },
    /**
     * 将数值v保留ct.fa中'##'后的指定小数位数,并返回格式化后的字符串。
     *
     * @param v 要格式化的数值
     * @param ct 包含格式化配置的对象
     * @param ct.fa 格式化配置字符串,若包含'##'则按照其后的内容确定小数位数
     * @returns 格式化后的字符串或原始数值(若配置不符合要求)
     */
    toFixed(v, ct) {
      if (v && ct && ct.fa) {
        if (ct.fa.includes(".")) {
          let num = ct.fa.slice(4).length;
          return Number(v).toFixed(num);
        } else {
          return v;
        }
      },
      async getCurrentItem(){
        let list = await this.getCurrentProduct(this.currentSample.id,0)
        this.currentSample.insProduct = this.HaveJson(list)
      },
      saveVersion(){
        if(this.currentTableState!=0&&this.currentTableState!=1){
          this.$message.error('请选择版本')
          return
        }
        this.versionLoading = true;
        this.$axios.post(this.$api.insOrderPlan.chooseVersion, {
      } else {
        return v;
      }
    },
    async getCurrentItem() {
      let list = await this.getCurrentProduct(this.currentSample.id, 0);
      this.currentSample.insProduct = this.HaveJson(list);
    },
    saveVersion() {
      if (this.currentTableState != 0 && this.currentTableState != 1) {
        this.$message.error("请选择版本");
        return;
      }
      this.versionLoading = true;
      this.$axios
        .post(this.$api.insOrderPlan.chooseVersion, {
          orderStateId: this.orderStateId,
          version: this.currentTableState
        }).then(res => {
        })
        .then(res => {
          this.versionLoading = false;
          if(res.code==201){
            return
          if (res.code == 201) {
            return;
          }
          this.versionDialogVisible = false
          this.versionDialogVisible = false;
        });
    },
    async goHistory(num) {
      if (this.num == 1 && num == -1) {
        this.$message.error("当前是第一条记录");
        return;
      } else if (this.num1 == this.num && num == 1) {
        this.$message.error("当前是最后一条记录");
        return;
      }
      this.num = this.num + num;
      this.tableLoading = true;
      await this.handleChangeSample(this.currentSample);
      this.currentNum++;
      this.tableLoading = false;
    },
    lookFile(row) {
      this.currentFile = row;
      if (row.type == 1) {
        this.currentFile.url = this.javaApi + "/img/" + row.fileUrl;
      } else {
        this.currentFile.url = this.javaApi + "/word/" + row.fileUrl;
      }
      this.lookFileVisible = true;
    },
    handleBack() {
      try {
        if (
          !this.isLook &&
          this.state == 1 &&
          this.tableLists
            .find(m => m.templateId == this.currentTable)
            .templateName.includes("电路试验")
        ) {
          this.$confirm("请确认当前数据是否全部保存,是否返回?", "提示", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning"
          }).then(async () => {
            this.loading = true;
            if (await this.$refs.CircuitParameters.saveAll()) {
              this.$emit("goback");
              this.loading = false;
            } else {
              this.loading = false;
            }
          });
        } else {
          this.$emit("goback");
        }
      } catch (error) {
        this.$emit("goback");
      }
    },
    selectInsProductTemplate() {
      this.$axios
        .post(this.$api.insProductTemplate.chooseInsProductTemplate, {
          version: this.insOrder.sampleType == "无源器件" ? 2 : ""
        })
      },
      async goHistory(num){
        if(this.num==1&&num==-1){
          this.$message.error('当前是第一条记录')
          return
        }else if(this.num1==this.num&&num==1){
          this.$message.error('当前是最后一条记录')
          return
        }
        this.num = this.num + num
        this.tableLoading = true
        await this.handleChangeSample(this.currentSample)
        this.currentNum++
        this.tableLoading = false
      },
      lookFile(row){
        this.currentFile = row;
        if(row.type==1){
          this.currentFile.url = this.javaApi+'/img/'+row.fileUrl
        }else{
          this.currentFile.url = this.javaApi+'/word/'+row.fileUrl
        }
        this.lookFileVisible = true
      },
      handleBack(){
        try {
          if(!this.isLook&&this.state==1&&this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('电路试验')){
          this.$confirm('请确认当前数据是否全部保存,是否返回?', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            this.$emit('goback')
          })
        }else{
          this.$emit('goback')
        }
        } catch (error) {
          this.$emit('goback')
        }
      },
      selectInsProductTemplate(){
        this.$axios.post(this.$api.insProductTemplate.chooseInsProductTemplate).then(res => {
          if (res.code == 201) return
          this.templates = res.data
        })
      },
      selectInsProductTemplateById(e){
        if(e){
          this.$axios.post(this.$api.insProductTemplate.getInsProductTemplate + '?id=' + e).then(res => {
            if (res.code == 201) return
            let obj = JSON.parse(res.data.message)
            if(this.currentTableState!=res.data.version){
              this.$message.error('电调/非电调模板版本不一致,请重新选择')
              this.template = null
              return
        .then(res => {
          if (res.code == 201) return;
          this.templates = res.data;
        });
    },
    selectInsProductTemplateById(e) {
      if (e) {
        this.$axios
          .post(this.$api.insProductTemplate.getInsProductTemplate + "?id=" + e)
          .then(res => {
            if (res.code == 201) return;
            let obj = JSON.parse(res.data.message);
            if (
              this.currentTableState != res.data.version &&
              this.insOrder.sampleType != "无源器件"
            ) {
              this.$message.error("电调/非电调模板版本不一致,请重新选择");
              this.template = null;
              return;
            }
            // 当前模板中未包含所有项目
            let state = this.currentSample.insProduct.every(item=>{
              if(obj.allBandList&&obj.allBandList.length>0&&obj.allBandList[0].projectList&&obj.allBandList[0].projectList.length>0&&item.inspectionItemSubclass&&obj.allBandList[0].projectList.find(m=>m.inspectionItemSubclass==item.inspectionItemSubclass)){
                return true
              }else{
                return false
            let state = this.currentSample.insProduct.every(item => {
              if (
                obj.allBandList &&
                obj.allBandList.length > 0 &&
                obj.allBandList[0].projectList &&
                obj.allBandList[0].projectList.length > 0 &&
                item.inspectionItemSubclass &&
                obj.allBandList[0].projectList.find(
                  m => m.inspectionItemSubclass == item.inspectionItemSubclass
                )
              ) {
                return true;
              } else {
                return false;
              }
            })
            if(!state){
              this.template = null
              this.$message.error('当前模板中未包含所有项目,请重新选择')
              return
            });
            if (!state) {
              this.template = null;
              this.$message.error("当前模板中未包含所有项目,请重新选择");
              return;
            }
            // 保存版本
            this.saveVersion()
            // this.saveVersion()
            // 如果模板的检验项多了,则删除多余的
            obj.allBandList.forEach(item=>{
              item.projectList.forEach((m,i)=>{
                if(!this.currentSample.insProduct.find(n=>m.inspectionItemSubclass==n.inspectionItemSubclass)){
                  item.projectList.splice(i,1)
            obj.allBandList.forEach(item => {
              item.projectList.forEach((m, i) => {
                if (
                  !this.currentSample.insProduct.find(
                    n => m.inspectionItemSubclass == n.inspectionItemSubclass
                  )
                ) {
                  item.projectList.splice(i, 1);
                }
              })
            })
            this.$refs.CircuitParameters.upTemplate(obj)
          })
        }
      },
      addTemplateDia(){
        let obj = {
          allBandList:this.$refs.CircuitParameters.allBandList,
          intermodulationNum:this.$refs.CircuitParameters.intermodulationNum,
          angleList:this.$refs.CircuitParameters.angleList,
        }
        if (this.templateName) {
          this.templateLoading = true;
          this.$axios.post(this.$api.insProductTemplate.addInsProductTemplate, {
            name: this.templateName,
            version:this.currentTableState,
            message:JSON.stringify(obj)
          }, {
            headers: {
              'Content-Type': 'application/json'
              });
            });
            this.$refs.CircuitParameters.upTemplate(obj);
          });
      }
    },
    addTemplateDia() {
      let obj = {
        allBandList: this.$refs.CircuitParameters.allBandList,
        intermodulationNum: this.$refs.CircuitParameters.intermodulationNum,
        angleList: this.$refs.CircuitParameters.angleList
      };
      if (this.templateName) {
        this.templateLoading = true;
        this.$axios
          .post(
            this.$api.insProductTemplate.addInsProductTemplate,
            {
              name: this.templateName,
              version:
                this.insOrder.sampleType == "无源器件"
                  ? 2
                  : this.currentTableState,
              message: JSON.stringify(obj)
            },
            {
              headers: {
                "Content-Type": "application/json"
              }
            }
          }).then(res => {
            if (res.code == 201) return
          )
          .then(res => {
            if (res.code == 201) return;
            this.templateLoading = false;
            this.templateDia = false;
            this.$message.success('保存成功')
            this.selectInsProductTemplate()
            this.templateName = ''
          })
        } else {
          this.$message.error('请填写模板名称')
        }
      },
      handleDelete(row){
        this.$confirm('是否删除当前数据?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          this.$axios.post(this.$api.insProductTemplate.delInsProductTemplate, {
            id: row.id
          }).then(res => {
            if (res.code === 201) {
              return
            }
            this.$message.success('删除成功')
            this.selectInsProductTemplate()
          }).catch(e => {
            this.$message.error('删除失败')
          })
        }).catch(() => {})
            this.$message.success("保存成功");
            this.selectInsProductTemplate();
            this.templateName = "";
          });
      } else {
        this.$message.error("请填写模板名称");
      }
    },
    handleDelete(row) {
      this.$confirm("是否删除当前数据?", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          this.$axios
            .post(this.$api.insProductTemplate.delInsProductTemplate, {
              id: row.id
            })
            .then(res => {
              if (res.code === 201) {
                return;
              }
              this.$message.success("删除成功");
              this.selectInsProductTemplate();
            })
            .catch(e => {
              this.$message.error("删除失败");
            });
        })
        .catch(() => { });
    }
  }
};
</script>