src/views/business/inspectionTask/inspection.vue
@@ -2,17 +2,17 @@
  <div v-loading="loading" class="inspection" style="background-color: rgb(245, 247, 251);">
    <el-row class="title">
      <el-col v-if="insOrder.ifsOrderType!=='02wg'" :span="8" style="text-align: left">
        <el-form :inline="true" :model="otherForm" class="form-inline" label-width="50px"
        <el-form :inline="true" :model="currentOtherForm" class="form-inline" label-width="50px"
          style="text-align: right; padding-top: 0; display: inline">
          <el-form-item label="温度:" style="margin-bottom: 0">
            <el-input v-model="otherForm.temperature" :disabled="state > 1" placeholder="" size="small"
            <el-input v-model="currentOtherForm.temperature" :disabled="state > 1" placeholder="" size="small"
              style="width: 90px; line-height: 60px" @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" placeholder="" size="small"
            <el-input v-model="currentOtherForm.humidity" :disabled="state > 1" placeholder="" size="small"
              style="width: 90px; line-height: 60px" @change="(m) => subOtherForm(m, 'humidity')"></el-input>
            <span style="margin-left: 4px">%</span>
            <span style="margin-left: 4px">%RH</span>
          </el-form-item>
        </el-form>
      </el-col>
@@ -22,7 +22,7 @@
        <el-button v-if="typeSource == 1" size="small" type="primary" @click="openPurchase">进货验证</el-button>
        <el-button v-if="state == 1 && [0,1].includes(Number(typeSource))" size="small" type="primary"
          @click="openUnPassDialog('add')">不合格处理</el-button>
        <el-button size="small" type="primary" @click="sampleVisible = true; uploadSample();">样品切换</el-button>
        <!-- <el-button size="small" type="primary" @click="sampleVisible = true; uploadSample();">样品切换</el-button> -->
        <!--        <el-button v-if="state == 1" size="small" type="primary" @click="taskVisible = true">任务切换</el-button>-->
        <el-button v-if="state == 1" size="small" type="primary" @click="addVerifyDia = true">提交</el-button>
        <!-- 复核 -->
@@ -301,12 +301,12 @@
                        align-items: center;
                        width: 100%;
                      ">
                        <i class="el-icon-caret-left table_caret" style="width: 16px" @click="caretSample(-1)"></i>
                        <!-- <i class="el-icon-caret-left table_caret" style="width: 16px" @click="caretSample(-1)"></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" @click="caretSample(1)"></i>
                        <!-- <i class="el-icon-caret-right table_caret" style="width: 16px" @click="caretSample(1)"></i> -->
                      </div>
                    </template>
                    <template v-else-if="
@@ -336,6 +336,7 @@
      <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
        :height="'calc(100vh - 290px)'" @pagination="pagination" style="height: 100%; margin-top: 16px"></lims-table>
    </div>
    <!-- 样品切换已停用
    <el-drawer :size="550" :visible.sync="sampleVisible" title="样品切换">
      <el-table v-if="sampleVisible" ref="productTable" :current-row-key="currentKey" :data="sampleProduct"
                :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border
@@ -356,7 +357,9 @@
            <span>{{ scope.row.isLeave == 0 ? "否" : "是" }}</span>
          </template>
        </el-table-column>
    -->
        <!-- 检验单会有一个是否有配套样品字段控制显示 -->
    <!--
        <el-table-column v-if="insOrder.mating > 0" label="配套样品型号" min-width="130px" prop="joinModel"
          show-overflow-tooltip></el-table-column>
        <el-table-column v-if="insOrder.mating > 0" label="配套样品名称" min-width="130px" prop="joinName"
@@ -365,6 +368,7 @@
          show-overflow-tooltip></el-table-column>
      </el-table>
    </el-drawer>
    -->
    <el-drawer :size="500" :visible.sync="taskVisible" title="任务切换">
      <lims-table :tableData="tableData0" :column="column0" :page="page0" :tableLoading="tableLoading0"
        :height="'calc(100vh - 90px)'" :currentChange="handleChangeTask"></lims-table>
@@ -685,10 +689,8 @@
        inspectionItem: 1,
        inspectionItemSubclass: "20(常温)",
      },
      otherForm: {
        humidity: null,
        temperature: null,
      },
      // 温度、湿度按模板 id 分组:{ [templateId]: { temperature, humidity } }
      otherForm: {},
      equipForm: {
        value0: null,
        code0: null,
@@ -841,6 +843,15 @@
    action() {
      return this.javaApi + "/insOrderPlan/uploadFile";
    },
    // 当前模板对应的温度、湿度
    currentOtherForm() {
      return (
        this.otherForm[this.currentTable] || {
          temperature: null,
          humidity: null,
        }
      );
    },
  },
  created() {
    this.saveQueue = Promise.resolve();
@@ -915,6 +926,8 @@
              this.tableList = this.tableLists.filter(
                (m) => m.templateId == val1
              );
              // 模板集合可能变化,补齐温度、湿度槽位
              this.tableLists.forEach((m) => this.ensureOtherForm(m.templateId));
              // 对模板进行处理
              this.handleTableData();
            }
@@ -1102,13 +1115,15 @@
        this.sampleProduct = res.data.sampleProduct;
        this.currentSample = this.HaveJson(this.sampleProduct[0]);
        let insProduct = this.HaveJson(this.currentSample.insProduct);
        // 温度、湿度赋值
        this.otherForm = {
          temperature: this.insOrder.temperature
            ? this.insOrder.temperature
            : null,
          humidity: this.insOrder.humidity ? this.insOrder.humidity : null,
        };
        // 温度、湿度赋值:按模板 id 分组回显
        this.otherForm = {};
        (this.insOrder.templateConditions || []).forEach((item) => {
          this.$set(this.otherForm, item.templateId, {
            temperature: item.temperature != null ? item.temperature : null,
            humidity: item.humidity != null ? item.humidity : null,
          });
        });
        this.tableLists.forEach((m) => this.ensureOtherForm(m.templateId));
        if (this.typeSource == "1") {
          this.getRawMaterialTag(this.currentSample.id); // 原材料的检验任务查询批数
          this.rawMaterialTag = "1";
@@ -1614,12 +1629,26 @@
        this.worker0 = null;
      }
    },
    // 保存湿度、温度数据
    // 保证模板的温度、湿度槽位存在
    ensureOtherForm(templateId) {
      if (templateId == null) return;
      if (!this.otherForm[templateId]) {
        this.$set(this.otherForm, templateId, {
          temperature: null,
          humidity: null,
        });
      }
    },
    // 保存当前模板的温度、湿度;备注是单据级,不带模板
    subOtherForm(m, type) {
      write({
        [type]: type === "remark" ? m : Number(m),
        id: this.insOrder.id,
      }).then((res) => {
      const payload = { id: this.insOrder.id };
      if (type === "remark") {
        payload.remark = m;
      } else {
        payload.templateId = this.currentTable;
        payload[type] = Number(m);
      }
      write(payload).then((res) => {
        this.$message.success("保存成功");
      });
    },
@@ -1786,6 +1815,8 @@
        this.tableList = null;
        this.tableList = [this.tableLists[0]];
        this.currentTable = this.tableLists[0].templateId;
        // 补齐每个模板的温度、湿度槽位
        this.tableLists.forEach((m) => this.ensureOtherForm(m.templateId));
        // 处理页面列表数据
        this.handleTableData();
      }
@@ -2132,14 +2163,18 @@
    // 对输入值进行格式校验
    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
        const v = n.v.v;
        // 能力范围已废弃,检验值类型不再作为判断依据。整串只由算式字符组成时才规范化格式,
        // 出现中文等其它字符即按文本处理原样保留,否则文字会被逐字删掉
        if (typeof v !== "string" || /[^\d.^e>>≥≤<<断裂脆化\-/+]/.test(v)) {
          return;
        }
        n.v.v = v
          .replace(/\.{2,}/g, ".") //只保留第一个. 清除多余的
          .replace(".", "$#$")
          .replace(/\./g, "")
          .replace("$#$", ".");
        n.v.v = n.v.v.replace(/\/{2,}/g, "/"); //只保留第一个/清除多余的
        n.v.v = n.v.v
          .replace("$#$", ".")
          .replace(/\/{2,}/g, "/") //只保留第一个/清除多余的
          .replace("/", "$#$")
          .replace(/\//g, "")
          .replace("$#$", "/");
@@ -2267,13 +2302,19 @@
        this.$message.error("请选择设备");
        return;
      }
      if (!this.otherForm.humidity && this.insOrder.ifsOrderType!=='02wg') {
        this.$message.error("请输入湿度");
        return;
      }
      if (!this.otherForm.temperature && this.insOrder.ifsOrderType!=='02wg') {
        this.$message.error("请输入温度");
        return;
      if (this.insOrder.ifsOrderType !== "02wg") {
        const labels = { temperature: "温度", humidity: "湿度" };
        const missing = [];
        this.tableLists.forEach((m) => {
          const form = this.otherForm[m.templateId] || {};
          ["temperature", "humidity"].forEach((key) => {
            if (!form[key]) missing.push(`「${m.templateName}」的${labels[key]}`);
          });
        });
        if (missing.length > 0) {
          this.$message.error(`请填写${missing[0]}`);
          return;
        }
      }
      if (!this.insOrder.lotPartId && this.insOrder.ifsOrderType==='02wg') {
        this.$message.error("请填写IFS库存物料批次属性");