liding
2026-09-20 2b2fa317c30ee2de7a8b6f5fc964532031adea66
fix: 优化报告功能
已修改7个文件
751 ■■■■■ 文件已修改
src/api/business/insReport.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/method/standardMethod/index.vue 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionReview/index.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/productOrder/components/addOrder.vue 312 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/productOrder/components/addView.vue 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/reportPreparation/index.vue 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/customer/index.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/insReport.js
@@ -27,14 +27,23 @@
}
// 单份报告下载
export function downloadReport(id) {
export function downloadReport(id, reportType) {
  return request({
    url: '/insReport/download',
    method: 'get',
    params: { id },
    params: { id, reportType },
    responseType: 'blob'
  })
}
// 重新生成报告
export function regenerateReport(id) {
  return request({
    url: '/insReport/regenerate',
    method: 'post',
    data: { id }
  })
}
// 报告退回到检验任务
export function sendBackTask(query) {
  return request({
src/views/CNAS/process/method/standardMethod/index.vue
@@ -35,7 +35,8 @@
    <el-dialog :title="title" :visible.sync="addDlog" width="500px">
      <el-form :model="addForm" ref="addForm" :rules="addRules" label-position="right" label-width="120px">
        <el-form-item label="行业" prop="industryIds">
          <el-select v-model="addForm.industryIds" multiple filterable clearable collapse-tags placeholder="请选择行业" style="width: 100%">
          <el-select v-model="addForm.industryIds" multiple filterable clearable collapse-tags placeholder="请选择行业"
                     style="width: 100%">
            <el-option v-for="item in industryOptions" :key="item.id" :label="item.laboratoryName" :value="item.id" />
          </el-select>
        </el-form-item>
@@ -73,7 +74,8 @@
          <el-upload ref="addUpload" action="#" :auto-upload="false" multiple :file-list="pendingFiles"
            :on-change="pendingFileChange" :on-remove="pendingFileRemove" :before-upload="beforeFileUpload"
            accept=".jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar">
            <el-button size="small" type="primary">选择附件</el-button><div slot="tip" class="el-upload__tip">支持多个附件,单个不超过10MB</div>
            <el-button size="small" type="primary">选择附件</el-button>
            <div slot="tip" class="el-upload__tip">支持多个附件,单个不超过200MB</div>
          </el-upload>
        </el-form-item>
      </el-form>
@@ -83,7 +85,8 @@
      </span>
    </el-dialog>
    <el-dialog title="标准附件" :visible.sync="attachmentDialog" width="760px">
      <el-upload v-if="currentMethod.id" :action="attachmentAction" :headers="uploadHeader" multiple :show-file-list="false"
      <el-upload v-if="currentMethod.id" :action="attachmentAction" :headers="uploadHeader" multiple
                 :show-file-list="false"
        :before-upload="beforeFileUpload" :on-success="attachmentUploadSuccess"
        accept=".jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar">
        <el-button size="small" type="primary">上传附件</el-button>
@@ -91,10 +94,18 @@
      <el-table :data="attachmentList" border size="small" style="margin-top:12px">
        <el-table-column label="文件名称" prop="fileName" min-width="280" />
        <el-table-column label="上传时间" prop="createTime" width="170" />
        <el-table-column label="操作" width="180"><template slot-scope="scope"><el-button type="text" @click="previewAttachment(scope.row)">预览</el-button><el-button type="text" @click="downloadAttachment(scope.row)">下载</el-button><el-button type="text" style="color:#f56c6c" @click="removeAttachment(scope.row)">删除</el-button></template></el-table-column>
        <el-table-column label="操作" width="180">
          <template slot-scope="scope">
            <el-button type="text" @click="previewAttachment(scope.row)">预览</el-button>
            <el-button type="text" @click="downloadAttachment(scope.row)">下载</el-button>
            <el-button type="text" style="color:#f56c6c" @click="removeAttachment(scope.row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>
    <el-dialog title="预览附件" :visible.sync="previewDialog" fullscreen><file-preview v-if="previewDialog" :current-file="currentAttachment" :file-url="previewUrl" /></el-dialog>
    <el-dialog title="预览附件" :visible.sync="previewDialog" fullscreen>
      <file-preview v-if="previewDialog" :current-file="currentAttachment" :file-url="previewUrl"/>
    </el-dialog>
  </div>
</template>
@@ -107,6 +118,7 @@
  addStandardMethod,
  upStandardMethod, selectIndustryOptions, selectAttachments, uploadAttachment, deleteAttachment,
} from "@/api/cnas/process/method/standardMethod";
export default {
  name: 'StandardMethod',
  components: {
@@ -284,7 +296,11 @@
        this.qualificationList = arr;
      });
    },
    loadIndustryOptions() { selectIndustryOptions().then(res => { this.industryOptions = res.data || []; }); },
    loadIndustryOptions() {
      selectIndustryOptions().then(res => {
        this.industryOptions = res.data || [];
      });
    },
    submitProduct(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
@@ -329,10 +345,24 @@
        }
      });
    },
    beforeFileUpload(file) { if (file.size > 10 * 1024 * 1024) { this.$message.error('上传文件不超过10MB'); return false; } return true; },
    pendingFileChange(file, files) { this.pendingFiles = files; },
    pendingFileRemove(file, files) { this.pendingFiles = files; },
    openAttachments(row) { this.currentMethod = row; this.attachmentDialog = true; this.loadAttachments(); },
    beforeFileUpload(file) {
      if (file.size > 200 * 1024 * 1024) {
        this.$message.error('上传文件不超过200MB');
        return false;
      }
      return true;
    },
    pendingFileChange(file, files) {
      this.pendingFiles = files;
    },
    pendingFileRemove(file, files) {
      this.pendingFiles = files;
    },
    openAttachments(row) {
      this.currentMethod = row;
      this.attachmentDialog = true;
      this.loadAttachments();
    },
    downloadAttachments(row) {
      selectAttachments({ standardMethodId: row.id }).then(res => {
        const attachments = res.data || [];
@@ -349,11 +379,28 @@
        else this.openAttachments(row);
      });
    },
    loadAttachments() { selectAttachments({ standardMethodId: this.currentMethod.id }).then(res => { this.attachmentList = res.data || []; }); },
    attachmentUploadSuccess(res) { if (res.code === 200) { this.$message.success('上传成功'); this.loadAttachments(); } },
    downloadAttachment(row) { this.$download.saveAs(row.fileUrl, row.fileName); },
    previewAttachment(row) { this.currentAttachment = row; this.previewUrl = /\.(jpg|jpeg|png|gif)$/i.test(row.fileUrl) ? this.javaApi + '/img/' + row.fileUrl : this.javaApi + '/word/' + row.fileUrl; this.previewDialog = true; },
    removeAttachment(row) { this.$confirm('是否删除该附件?', '提示', { type: 'warning' }).then(() => deleteAttachment({ id: row.id })).then(() => this.loadAttachments()); },
    loadAttachments() {
      selectAttachments({standardMethodId: this.currentMethod.id}).then(res => {
        this.attachmentList = res.data || [];
      });
    },
    attachmentUploadSuccess(res) {
      if (res.code === 200) {
        this.$message.success('上传成功');
        this.loadAttachments();
      }
    },
    downloadAttachment(row) {
      this.$download.saveAs(row.fileUrl, row.fileName);
    },
    previewAttachment(row) {
      this.currentAttachment = row;
      this.previewUrl = /\.(jpg|jpeg|png|gif)$/i.test(row.fileUrl) ? this.javaApi + '/img/' + row.fileUrl : this.javaApi + '/word/' + row.fileUrl;
      this.previewDialog = true;
    },
    removeAttachment(row) {
      this.$confirm('是否删除该附件?', '提示', {type: 'warning'}).then(() => deleteAttachment({id: row.id})).then(() => this.loadAttachments());
    },
    // 删除
    handleDelete(row) {
      this.$confirm("是否删除该条数据?", "提示", {
@@ -367,9 +414,14 @@
            this.getList();
          });
        })
        .catch(() => { });
        .catch(() => {
        });
    },
  },
  computed: { attachmentAction() { return this.javaApi + '/standardMethod/uploadAttachment?standardMethodId=' + this.currentMethod.id; } },
  computed: {
    attachmentAction() {
      return this.javaApi + '/standardMethod/uploadAttachment?standardMethodId=' + this.currentMethod.id;
    }
  },
};
</script>
src/views/business/inspectionReview/index.vue
@@ -70,7 +70,7 @@
  },
  dicts: ["urgency_level", "inspection_task_state","material_prop_type"],
  computed: {
    ...mapGetters(["nickName", "userId"]),
    ...mapGetters(["nickName", "userId", "roles"]),
  },
  data() {
    return {
@@ -195,6 +195,7 @@
                this.handleReview(row);
              },
              disabled: (row) => {
                if (this.roles.includes("admin")) return false
                return row.checkName == null || (row.checkName && !row.checkName.includes(this.nickName))
              }
            },
@@ -403,7 +404,8 @@
            this.refreshTable()
          }
        })
      }).catch(() => { })
      }).catch(() => {
      })
    },
    // 查看报告
@@ -451,6 +453,7 @@
  margin-bottom: 10px;
  display: flex;
}
.page_total span:last-child {
  color: #3a7bfa;
  font-size: 23px;
src/views/business/productOrder/components/addOrder.vue
@@ -25,62 +25,150 @@
          </el-option>
        </el-select>
        <el-button v-show="active==1" size="small" @click="templateDia=true">保存模板</el-button>
        <el-button v-if="active==1&&addObj.sampleType!=undefined&&(addObj.sampleType.indexOf('电缆')>-1 ||addObj.sampleType.indexOf('综合')>-1)" size="small" type="primary" plain @click="openCableConfig">电缆配置</el-button>
        <el-button v-if="active==1&&addObj.sampleType!=undefined&&addObj.sampleType.indexOf('电缆')>-1" size="small" type="primary" plain @click="openAuxiliaryCore">辅助线芯配置</el-button>
        <el-button v-show="active==1||(tabIndex==4&&active==2)" :loading="saveLoad" size="small" type="primary" @click="save">提交</el-button>
        <el-button
          v-if="active==1&&addObj.sampleType!=undefined&&(addObj.sampleType.indexOf('电缆')>-1 ||addObj.sampleType.indexOf('综合')>-1)"
          size="small" type="primary" plain @click="openCableConfig">电缆配置
        </el-button>
        <el-button v-if="active==1&&addObj.sampleType!=undefined&&addObj.sampleType.indexOf('电缆')>-1" size="small"
                   type="primary" plain @click="openAuxiliaryCore">辅助线芯配置
        </el-button>
        <el-button v-show="active==1||(tabIndex==4&&active==2)" :loading="saveLoad" size="small" type="primary"
                   @click="save">提交
        </el-button>
        <!-- 审核 -->
        <el-button v-show="active==3" :disabled="saveLoad" :loading="saveLoad" size="small"
                   @click="upInsOrderOfState(2)">不通过</el-button>
                   @click="upInsOrderOfState(2)">不通过
        </el-button>
        <el-button v-show="active==3" :loading="saveLoad" size="small" type="primary"
                   @click="upInsOrderOfState(1)">通过</el-button>
                   @click="upInsOrderOfState(1)">通过
        </el-button>
        <el-button size="small" @click="goBack">返回</el-button>
      </div>
    </div>
    <div v-show="!cableConfigShow&&!auxiliaryShow" class="order-body">
      <el-card shadow="never" class="order-card">
        <el-form ref="newJuOrder" class="newju-order-form" :model="addObj" size="small" label-width="108px" label-position="right">
        <el-form ref="newJuOrder" class="newju-order-form" :model="addObj" size="small" label-width="108px"
                 label-position="right">
          <el-row :gutter="16">
            <el-col :span="6"><el-form-item label="检测依据"><el-input v-model="addObj.sample" disabled size="small"><template slot="append"><el-button :disabled="active>1" icon="el-icon-search" size="small" @click="selectStandardTree = true" /></template></el-input></el-form-item></el-col>
            <el-col :span="6">
              <el-form-item label="检测依据">
                <el-input v-model="addObj.sample" disabled size="small">
                  <template slot="append">
                    <el-button :disabled="active>1" icon="el-icon-search" size="small"
                               @click="selectStandardTree = true"/>
                  </template>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="18">
              <el-form-item label="原始记录模板">
                <div v-loading="templateBindingLoading" class="template-tag-list">
                  <el-tag v-for="(item, index) in boundTemplateList" :key="item.templateId" :closable="active==1" size="small" effect="plain" @close="removeBoundTemplate(index)">{{ item.name }}</el-tag>
                  <el-tag v-for="(item, index) in boundTemplateList" :key="item.templateId" :closable="active==1"
                          size="small" effect="plain" @close="removeBoundTemplate(index)">{{ item.name }}
                  </el-tag>
                  <span v-if="!templateBindingLoading && boundTemplateList.length === 0" class="empty-template-text">暂未绑定原始记录模板</span>
                </div>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="16">
            <el-col :span="6"><el-form-item label="样品名称"><el-input v-model="addObj.sampleView" :disabled="active>1" size="small" /></el-form-item></el-col>
            <el-col :span="6"><el-form-item label="生产单位"><el-input v-model="addObj.production" :disabled="active>1" size="small" /></el-form-item></el-col>
            <el-col :span="6"><el-form-item label="委托单位"><el-input v-model="addObj.company" disabled size="small"><template slot="append"><el-button :disabled="active>1" icon="el-icon-search" size="small" @click="openCompanyList" /></template></el-input></el-form-item></el-col>
            <el-col :span="6"><el-form-item label="检验类别"><el-select v-model="addObj.orderType" :disabled="active>1" size="small"><el-option v-for="item in dict.type.check_type1" :key="item.value" :label="item.label" :value="item.value" /></el-select></el-form-item></el-col>
            <el-col :span="6">
              <el-form-item label="样品名称">
                <el-input v-model="addObj.sampleView" :disabled="active>1" size="small"/>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="生产单位">
                <el-input v-model="addObj.production" :disabled="active>1" size="small"/>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="委托单位">
                <el-input v-model="addObj.company" disabled size="small">
                  <template slot="append">
                    <el-button :disabled="active>1" icon="el-icon-search" size="small" @click="openCompanyList"/>
                  </template>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="检验类别">
                <el-select v-model="addObj.orderType" :disabled="active>1" size="small">
                  <el-option v-for="item in dict.type.check_type1" :key="item.value" :label="item.label"
                             :value="item.value"/>
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="16">
            <el-col :span="6"><el-form-item label="样品数量"><el-input v-model="addObj.testQuantity" :disabled="active>1" placeholder="如:2桶、500mL" size="small" /></el-form-item></el-col>
            <el-col :span="6"><el-form-item label="样品编号"><el-input v-model="sampleCode" :disabled="active>1" size="small" /></el-form-item></el-col>
            <el-col :span="6"><el-form-item label="样品外观"><el-input v-model="addObj.sampleStatus" :disabled="active>1" size="small" /></el-form-item></el-col>
            <el-col :span="6"><el-form-item label="送样人"><el-input v-model="addObj.prepareUser" :disabled="active>1" size="small" /></el-form-item></el-col>
            <el-col :span="6">
              <el-form-item label="样品数量">
                <el-input v-model="addObj.testQuantity" :disabled="active>1" placeholder="如:2桶、500mL" size="small"/>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="样品编号">
                <el-input v-model="sampleCode" :disabled="active>1" size="small"/>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="样品外观">
                <el-input v-model="addObj.sampleStatus" :disabled="active>1" size="small"/>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="送样人">
                <el-input v-model="addObj.prepareUser" :disabled="active>1" size="small"/>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="16">
            <el-col :span="6"><el-form-item label="生产日期"><el-date-picker v-model="addObj.productionDate" type="date" value-format="yyyy-MM-dd" :disabled="active>1" size="small" /></el-form-item></el-col>
            <el-col :span="6"><el-form-item label="生产批号"><el-input v-model="addObj.productionBatch" :disabled="active>1" size="small" /></el-form-item></el-col>
            <el-col :span="6"><el-form-item label="送样日期"><el-date-picker v-model="addObj.sampleDate" type="date" value-format="yyyy-MM-dd" :disabled="active>1" size="small" /></el-form-item></el-col>
            <el-col :span="6"><el-form-item label="联系方式"><el-input v-model="addObj.phone" :disabled="active>1" size="small" /></el-form-item></el-col>
            <el-col :span="6">
              <el-form-item label="生产日期">
                <el-date-picker v-model="addObj.productionDate" type="date" value-format="yyyy-MM-dd"
                                :disabled="active>1" size="small"/>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="生产批号">
                <el-input v-model="addObj.productionBatch" :disabled="active>1" size="small"/>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="送样日期">
                <el-date-picker v-model="addObj.sampleDate" type="date" value-format="yyyy-MM-dd" :disabled="active>1"
                                size="small"/>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="联系方式">
                <el-input v-model="addObj.phone" :disabled="active>1" size="small"/>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="16"><el-col :span="12"><el-form-item label="备注"><el-input v-model="addObj.remark" :disabled="active>1" size="small" /></el-form-item></el-col></el-row>
          <el-row :gutter="16">
            <el-col :span="12">
              <el-form-item label="备注">
                <el-input v-model="addObj.remark" :disabled="active>1" size="small"/>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
        <el-form v-if="false" ref="addObj" :inline="true" :model="addObj" :rules="addObjRules" label-width="108px" label-position="right">
        <el-form v-if="false" ref="addObj" :inline="true" :model="addObj" :rules="addObjRules" label-width="108px"
                 label-position="right">
          <el-row>
            <el-col :span="6">
              <el-form-item label="委托编号:" prop="entrustCode">
                <el-input v-model="addObj.entrustCode" clearable disabled placeholder="系统生成" size="small"></el-input>
                <el-input v-model="addObj.entrustCode" clearable disabled placeholder="系统生成"
                          size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="检验类别:" prop="orderType">
                <el-select v-model="addObj.orderType" :disabled="active>1&&tabIndex!=4" clearable size="small" style="width: 100%;">
                  <el-option v-for="(a, ai) in dict.type.check_type1" :key="ai" :label="a.label" :value="a.value"></el-option>
                <el-select v-model="addObj.orderType" :disabled="active>1&&tabIndex!=4" clearable size="small"
                           style="width: 100%;">
                  <el-option v-for="(a, ai) in dict.type.check_type1" :key="ai" :label="a.label"
                             :value="a.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
@@ -91,7 +179,8 @@
            </el-col>
            <el-col :span="6">
              <el-form-item label="委托单位:" prop="company">
                <el-input v-model="addObj.company" disabled placeholder="选择委托单位" size="small" style="width: 208px">
                <el-input v-model="addObj.company" disabled placeholder="选择委托单位" size="small"
                          style="width: 208px">
                  <template slot="append">
                    <el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
                               @click="openCompanyList"></el-button>
@@ -103,21 +192,25 @@
          <el-row>
            <el-col :span="6">
              <el-form-item label="联系方式:" prop="phone">
                <el-input v-model="addObj.phone" :disabled="active>1&&tabIndex!=4" clearable placeholder="选择委托客户" size="small"></el-input>
                <el-input v-model="addObj.phone" :disabled="active>1&&tabIndex!=4" clearable placeholder="选择委托客户"
                          size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="紧急程度:" prop="type">
                <el-select v-model="addObj.type" :disabled="active>1&&tabIndex!=4" clearable size="small">
                  <el-option v-for="(a, ai) in dict.type.urgency_level" :key="ai" :label="a.label" :value="a.value"></el-option>
                  <el-option v-for="(a, ai) in dict.type.urgency_level" :key="ai" :label="a.label"
                             :value="a.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="样品名称:" prop="sample">
                <el-input v-model="addObj.sample" disabled size="small" style="width: 208px">
                  <template slot="append"><el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
                                                     @click="selectStandardTree = true"></el-button></template>
                  <template slot="append">
                    <el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
                               @click="selectStandardTree = true"></el-button>
                  </template>
                </el-input>
              </el-form-item>
            </el-col>
@@ -132,19 +225,22 @@
            <el-col :span="6">
              <el-form-item label="样品状态:" prop="sampleStatus">
                <el-select v-model="addObj.sampleStatus" :disabled="active>1&&tabIndex!=4" size="small">
                  <el-option v-for="(a,ai) in dict.type.sample_status_list" :key="ai" :label="a.label" :value="a.value"></el-option>
                  <el-option v-for="(a,ai) in dict.type.sample_status_list" :key="ai" :label="a.label"
                             :value="a.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="抽检数量:" prop="testQuantity">
                <el-input v-model="addObj.testQuantity" :disabled="active>1&&tabIndex!=4" clearable size="small"></el-input>
                <el-input v-model="addObj.testQuantity" :disabled="active>1&&tabIndex!=4" clearable
                          size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="来样方式:" prop="formType">
                <el-select v-model="addObj.formType" :disabled="active>1&&tabIndex!=4" size="small" clearable>
                  <el-option v-for="(a,ai) in dict.type.form_type" :key="ai" :label="a.label" :value="a.value"></el-option>
                  <el-option v-for="(a,ai) in dict.type.form_type" :key="ai" :label="a.label"
                             :value="a.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
@@ -160,7 +256,8 @@
          <el-row>
            <el-col :span="6">
              <el-form-item label="样品处理方式:" prop="processing">
                <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4" size="mini" style="display: flex; flex-direction: column;">
                <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4" size="mini"
                                style="display: flex; flex-direction: column;">
                  <el-radio :label="0" border style="margin-right: 0">委托单位取回</el-radio>
                  <el-radio :label="1" border>实验室处理</el-radio>
                </el-radio-group>
@@ -190,23 +287,27 @@
          <el-row>
            <el-col :span="6">
              <el-form-item label="委托人:" prop="prepareUser">
                <el-input v-model="addObj.prepareUser" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable size="small"></el-input>
                <el-input v-model="addObj.prepareUser" :disabled="active>1&&tabIndex!=4"
                          :placeholder="active>1 ? '' : '请输入'" clearable size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="委托人英文:" prop="prepareUserEn">
                <el-input v-model="addObj.prepareUserEn" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable size="small"></el-input>
                <el-input v-model="addObj.prepareUserEn" :disabled="active>1&&tabIndex!=4"
                          :placeholder="active>1 ? '' : '请输入'" clearable size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="备注:" prop="remark">
                <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2}"
                          :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small" style="width: 100%" type="textarea"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="备注英文:" prop="remarkEn">
                <el-input v-model="addObj.remarkEn" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                <el-input v-model="addObj.remarkEn" :autosize="{ minRows: 2, maxRows: 2}"
                          :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small" type="textarea"></el-input>
              </el-form-item>
            </el-col>
@@ -214,19 +315,22 @@
          <el-row>
            <el-col :span="6">
              <el-form-item label="样品名称:" prop="sampleView">
                <el-input v-model="addObj.sampleView" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                <el-input v-model="addObj.sampleView" :disabled="active>1&&tabIndex!=4"
                          :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="样品名称英文:" prop="sampleViewEn">
                <el-input v-model="addObj.sampleViewEn" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                <el-input v-model="addObj.sampleViewEn" :disabled="active>1&&tabIndex!=4"
                          :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="委托人工号:" prop="prepareCode">
                <el-input v-model="addObj.prepareCode" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                <el-input v-model="addObj.prepareCode" :disabled="active>1&&tabIndex!=4"
                          :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small"></el-input>
              </el-form-item>
            </el-col>
@@ -260,7 +364,8 @@
            <span style="width: 150px;font-size: 14px;text-align: right;">特殊标准:</span>
            <el-input v-model="specialStandardMethod" :disabled="!isSpecial" clearable size="small"></el-input>
            <el-button v-show="active==1" size="small" style="margin-left: 10px"
                       type="primary" @click="editSpecial">编辑</el-button>
                       type="primary" @click="editSpecial">编辑
            </el-button>
          </div>
        </div>
        <el-table ref="sampleTable" :data="sampleList" border class="el-table sampleTable" highlight-current-row
@@ -309,7 +414,8 @@
            <template slot-scope="scope">
              <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1"
                :loading="methodLoad" :readonly="active>1" clearable placeholder="检验标准"
                size="small" style="width: 100%;" @change="(value)=>methodChange(value, scope.row)" @clear="productList = []" @focus="methodFocus">
                         size="small" style="width: 100%;" @change="(value)=>methodChange(value, scope.row)"
                         @clear="productList = []" @focus="methodFocus">
                <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
                </el-option>
              </el-select>
@@ -341,8 +447,10 @@
                  :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }"
          max-height="400px" style="margin-bottom: 10px;" tooltip-effect="dark"
          @select="selectOne" @selection-change="selectProduct" @select-all="handleAll">
          <el-table-column v-if="canSelectProduct" :selectable="selectable0" type="selection" width="65"></el-table-column>
          <el-table-column label="检验项分类" min-width="140" prop="inspectionItemClass" show-overflow-tooltip></el-table-column>
          <el-table-column v-if="canSelectProduct" :selectable="selectable0" type="selection"
                           width="65"></el-table-column>
          <el-table-column label="检验项分类" min-width="140" prop="inspectionItemClass"
                           show-overflow-tooltip></el-table-column>
          <el-table-column label="检验项" min-width="140" prop="inspectionItem" show-overflow-tooltip>
            <template slot="header" slot-scope="scope">
              <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
@@ -372,7 +480,9 @@
          </el-table-column>
          <el-table-column label="要求值" min-width="220px" prop="ask">
            <template slot-scope="scope">
              <el-input v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)&&scope.row.inspectionValueType!='5'" v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求值"
              <el-input
                v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)&&scope.row.inspectionValueType!='5'"
                v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求值"
                        size="small" type="textarea"
                        @change="e=>requestChange(e,scope.row,'ask')"></el-input>
              <span v-else>
@@ -382,7 +492,8 @@
          </el-table-column>
          <el-table-column label="要求描述" min-width="220px" prop="tell">
            <template slot-scope="scope">
              <el-input v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)" v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求描述"
              <el-input v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)" v-model="scope.row.tell"
                        :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求描述"
                size="small" type="textarea"
                @change="e=>requestChange(e,scope.row,'tell')"></el-input>
              <span v-else>
@@ -392,7 +503,8 @@
          </el-table-column>
          <el-table-column label="条件" min-width="140" prop="radius" show-overflow-tooltip>
            <template slot-scope="scope">
              <el-input v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)" v-model="scope.row.radius" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="条件"
              <el-input v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)" v-model="scope.row.radius"
                        :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="条件"
                        size="small" type="textarea"
                        @change="e=>requestChange(e,scope.row,'radius')">
              </el-input>
@@ -415,12 +527,17 @@
          <el-table-column label="计量单位" prop="unit" show-overflow-tooltip width="100"></el-table-column>
          <el-table-column label="单价" prop="price" show-overflow-tooltip width="100"></el-table-column>
          <el-table-column label="区间" min-width="120" prop="section" show-overflow-tooltip></el-table-column>
          <el-table-column :filter-method="filterHandler" :filters="filters" label="子实验室" min-width="130" prop="sonLaboratory"
          <el-table-column :filter-method="filterHandler" :filters="filters" label="子实验室" min-width="130"
                           prop="sonLaboratory"
            show-overflow-tooltip></el-table-column>
            <el-table-column v-if="isSpecial&&active==1" label="操作" width="100">
            <template slot-scope="scope">
              <el-button v-if="!scope.row.repetitionTag" size="small" type="text" @click="addProductList(productList,scope.row,scope.$index)">插入行</el-button>
              <el-button v-if="!!scope.row.repetitionTag&&scope.row.delete" size="small" type="text" @click="deleteProductList(scope.$index,productList)">删除</el-button>
              <el-button v-if="!scope.row.repetitionTag" size="small" type="text"
                         @click="addProductList(productList,scope.row,scope.$index)">插入行
              </el-button>
              <el-button v-if="!!scope.row.repetitionTag&&scope.row.delete" size="small" type="text"
                         @click="deleteProductList(scope.$index,productList)">删除
              </el-button>
            </template>
          </el-table-column>
        </el-table>
@@ -428,6 +545,16 @@
    </div>
    <el-dialog :visible.sync="selectUserDia" title="选择单位" width="70%">
      <div v-if="selectUserDia" class="body">
        <el-form :inline="true" size="small" @submit.native.prevent>
          <el-form-item label="委托单位">
            <el-input v-model="companyQuery" clearable placeholder="请输入委托单位"
                      @keyup.enter.native="searchCompany"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="searchCompany">查询</el-button>
            <el-button @click="resetCompanySearch">重置</el-button>
          </el-form-item>
        </el-form>
        <lims-table :tableData="tableData1" :column="column1"
                    :isSelection="true" :handleSelectionChange="selectMethod"
                    @pagination="pagination1" height="400px" key="tableData1"
@@ -439,16 +566,19 @@
      </span>
    </el-dialog>
    <el-dialog :visible.sync="selectStandardTree" title="选择样品" width="500px">
      <div v-if="selectStandardTree" v-loading="selectStandardTreeLoading" class="body"  style="height: 60vh;overflow-y: auto;user-select: none;">
      <div v-if="selectStandardTree" v-loading="selectStandardTreeLoading" class="body"
           style="height: 60vh;overflow-y: auto;user-select: none;">
        <el-row>
          <el-col :span="24">
            <el-input v-model="search" clearable placeholder="输入关键字进行搜索" size="small"
              style="margin-bottom: 5px;" suffix-icon="el-icon-search" @blur="searchFilter" @clear="searchFilter"
                      style="margin-bottom: 5px;" suffix-icon="el-icon-search" @blur="searchFilter"
                      @clear="searchFilter"
              @keyup.enter.native="searchFilter"></el-input>
          </el-col>
        </el-row>
        <el-tree ref="tree" :data="list" :default-expanded-keys="expandedKeys" :filter-node-method="filterNode"
          :props="{ children: 'children', label: 'label' }" highlight-current node-key="label" @node-click="handleNodeClick"
                 :props="{ children: 'children', label: 'label' }" highlight-current node-key="label"
                 @node-click="handleNodeClick"
          @node-expand="nodeOpen" @node-collapse="nodeClose" @dblclick.native="activeStandardTree">
          <div slot-scope="{ node, data }" class="custom-tree-node">
            <el-row>
@@ -478,7 +608,8 @@
        <el-button :loading="templateLoading" type="primary" @click="addTemplateDia">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false" :visible.sync="issuedDialogVisible" title="检验下发" width="400px">
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false"
               :visible.sync="issuedDialogVisible" title="检验下发" width="400px">
      <div class="body" style="max-height: 60vh;">
        <el-row>
          <el-col :span="22" class="search_thing">
@@ -492,7 +623,8 @@
          <el-col :span="22" class="search_thing">
            <div class="search_label"><span class="required-span">* </span>指派人员:</div>
            <div class="search_input">
              <el-select v-model="distributeData.userId" filterable placeholder="请选择" size="small" style="width: 100%;" @change="changeUser">
              <el-select v-model="distributeData.userId" filterable placeholder="请选择" size="small"
                         style="width: 100%;" @change="changeUser">
                <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
@@ -501,8 +633,10 @@
          <el-col v-if="distributeData.userId" :span="22" class="search_thing">
            <div class="search_label">试验室:</div>
            <div class="search_input">
              <el-select v-model="distributeData.sonLaboratory" filterable placeholder="请选择" size="small" style="width: 100%;">
                <el-option v-for="item in newJuLaboratoryList" :key="item.value" :label="item.label" :value="item.value">
              <el-select v-model="distributeData.sonLaboratory" filterable placeholder="请选择" size="small"
                         style="width: 100%;">
                <el-option v-for="item in newJuLaboratoryList" :key="item.value" :label="item.label"
                           :value="item.value">
                </el-option>
              </el-select>
            </div>
@@ -535,11 +669,14 @@
      </span>
    </el-dialog>
    <!--电缆配置-->
    <cableConfig v-if="cableConfigShow" ref="cableConfigShow" :active="active" :isSpecial="isSpecial" :sampleSelectionList="sampleSelectionList" @goBackAdd="goBackAdd"/>
    <cableConfig v-if="cableConfigShow" ref="cableConfigShow" :active="active" :isSpecial="isSpecial"
                 :sampleSelectionList="sampleSelectionList" @goBackAdd="goBackAdd"/>
    <!--辅助线芯配置-->
    <auxiliary-wire-core v-if="auxiliaryShow" :active="active" :isSpecial="isSpecial" :sampleSelectionList="sampleSelectionList" @goBackAdd2="goBackAdd2"></auxiliary-wire-core>
    <auxiliary-wire-core v-if="auxiliaryShow" :active="active" :isSpecial="isSpecial"
                         :sampleSelectionList="sampleSelectionList" @goBackAdd2="goBackAdd2"></auxiliary-wire-core>
    <!--特殊值处理框-->
    <el-dialog :before-close="beforeClose" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false"
    <el-dialog :before-close="beforeClose" :close-on-click-modal="false" :close-on-press-escape="false"
               :show-close="false"
               :visible.sync="bsm1DiaAll"
               min-width="400px"
               title="检测到特殊项,请作出以下选择">
@@ -550,7 +687,8 @@
            <div class="search_label" style="width: 80px;"><span class="required-span">* </span>选项:</div>
            <div class="search_input">
              <el-radio-group v-model="item.bsm1Val" v-removeAriaHidden @input="upBsmAll(item)">
                <el-radio v-for="(a, ai) in JSON.parse(item.bsmRow.sectionCopy)" :key="ai" :label="a" style="margin-bottom: 2px;margin-top: 2px;"></el-radio>
                <el-radio v-for="(a, ai) in JSON.parse(item.bsmRow.sectionCopy)" :key="ai" :label="a"
                          style="margin-bottom: 2px;margin-top: 2px;"></el-radio>
              </el-radio-group>
            </div>
          </el-col>
@@ -559,7 +697,8 @@
            <div class="search_input">
              <el-radio-group v-model="item.bsm1Val" v-removeAriaHidden @input="upBsmAll(item)">
                <el-radio v-for="(a, ai) in JSON.parse(item.bsmRow.sectionCopy)" :key="ai"
                          :label="a">{{JSON.parse(item.bsmRow.askCopy)[ai]}}</el-radio>
                          :label="a">{{ JSON.parse(item.bsmRow.askCopy)[ai] }}
                </el-radio>
              </el-radio-group>
            </div>
          </el-col>
@@ -602,7 +741,8 @@
          label="识别符值"
          prop="value">
          <template slot-scope="scope">
            <el-input v-model="scope.row.value" placeholder="请输入" size="small" @input="inputValueHandler(scope.row,scope.$index)"></el-input>
            <el-input v-model="scope.row.value" placeholder="请输入" size="small"
                      @input="inputValueHandler(scope.row,scope.$index)"></el-input>
          </template>
        </el-table-column>
      </el-table>
@@ -760,6 +900,7 @@
      tableData1: [],
      tableLoading1: false,
      multipleSelection: [],
      companyQuery: '',
      column1: [
        {label: '客户名称', prop: 'company'},
        {label: '客户单位EN', prop: 'companyEn'},
@@ -1077,10 +1218,11 @@
      },
      openCompanyList () {
        this.selectUserDia = true
        this.getCompanyList()
      this.resetCompanySearch()
      },
      getCompanyList () {
        selectCustomPageList({...this.page1}).then(res => {
      this.tableLoading1 = true
      selectCustomPageList({company: this.companyQuery, ...this.page1}).then(res => {
          this.tableLoading1 = false
          if (res.code === 200) {
            this.tableData1 = res.data.records
@@ -1092,6 +1234,15 @@
      },
      pagination1 (page) {
        this.page1.size = page.limit
      this.getCompanyList()
    },
    searchCompany() {
      this.page1.current = 1
      this.getCompanyList()
    },
    resetCompanySearch() {
      this.companyQuery = ''
      this.page1.current = 1
        this.getCompanyList()
      },
      selectMethod (row) {
@@ -1180,7 +1331,8 @@
              return code[index] + '' + num
            }
          }
        }catch(e){}
      } catch (e) {
      }
      },
      replaceAll(str,find,value) {
        if (str === undefined) {
@@ -1732,7 +1884,8 @@
            row.sectionCopy = sectionCopy
            row.ask = arr1[index]
            row.tell = arr4[index]
          } catch(e) {}
        } catch (e) {
        }
        }
        this.sampleList.forEach(item => {
          if (this.sampleIds.indexOf(item.id) > -1||this.currentMethod.id==item.id) {
@@ -1772,6 +1925,7 @@
            temp.pop();
          }
        }
        backtrack([], nums);
        return result;
      },
@@ -1802,7 +1956,8 @@
          }).catch(e => {
            this.$message.error('删除失败')
          })
        }).catch(() => {})
      }).catch(() => {
      })
      },
      // 保存模板
      addTemplateDia() {
@@ -2379,10 +2534,12 @@
>>>.warning-row {
  color: #1890FF;
}
.node_i {
  color: orange;
  font-size: 18px;
}
.template-tag-list {
  min-height: 32px;
  display: flex;
@@ -2390,26 +2547,32 @@
  flex-wrap: wrap;
  gap: 8px;
}
.newju-order-form >>> .el-form-item {
  display: flex;
  margin-right: 0;
}
.newju-order-form >>> .el-form-item__label {
  flex: 0 0 108px;
}
.newju-order-form >>> .el-form-item__content {
  flex: 1;
  min-width: 0;
  margin-left: 0 !important;
}
.newju-order-form >>> .el-input,
.newju-order-form >>> .el-select,
.newju-order-form >>> .el-date-editor {
  width: 100%;
}
.empty-template-text {
  color: #909399;
}
/* 委托单信息:顶部操作栏 */
.order-header {
  display: flex;
@@ -2420,48 +2583,59 @@
  padding-bottom: 12px;
  border-bottom: 1px solid #ebeef5;
}
.order-header__title {
  font-size: 16px;
  font-weight: bold;
  color: #303133;
}
.order-header__actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
}
/* 间距统一交给 gap,去掉相邻按钮自带的 margin-left */
.order-header__actions>>>.el-button+.el-button {
  margin-left: 0;
}
.order-header__quarter {
  width: 220px;
}
.order-header__template {
  width: 160px;
}
/* 委托单信息:表单卡片 */
.order-body {
  margin-top: 12px;
}
.order-card>>>.el-card__body {
  padding: 20px 20px 6px;
}
.order-card>>>.el-form-item {
  margin-bottom: 16px;
}
/* 控件统一占满标签之外的整列宽度:el-date-editor 默认写死 220px、
   el-select 宽度收缩成固有宽度,不指定就会和其他输入框左右边缘对不齐 */
.order-card>>>.el-input,
.order-card>>>.el-select {
  width: 100%;
}
/* append 单元格的 20px 内边距 + 按钮 -10px 负边距是按默认 40px 按钮标定的,
   small 输入下按钮会比输入框高、上下溢出;改成按钮直接撑满单元格 */
.order-card>>>.el-input-group__append {
  padding: 0;
}
.order-card>>>.el-input-group__append .el-button {
  margin: 0;
  padding: 9px 15px;
src/views/business/productOrder/components/addView.vue
@@ -22,14 +22,23 @@
          <el-button v-show="active==1" size="small" @click="templateDia=true">
            <span style="color: #3A7BFA;">保存模板</span>
          </el-button>
          <el-button v-if="active==1&&addObj.sampleType!=undefined&&(addObj.sampleType.indexOf('电缆')>-1 ||addObj.sampleType.indexOf('综合')>-1)" size="small" type="primary" @click="openCableConfig">电缆配置</el-button>
          <el-button v-if="active==1&&addObj.sampleType!=undefined&&addObj.sampleType.indexOf('电缆')>-1" size="small" type="primary" @click="openAuxiliaryCore">辅助线芯配置</el-button>
          <el-button v-show="active==1||(tabIndex==4&&active==2)" :loading="saveLoad" size="small" type="primary" @click="save">提交</el-button>
          <el-button
            v-if="active==1&&addObj.sampleType!=undefined&&(addObj.sampleType.indexOf('电缆')>-1 ||addObj.sampleType.indexOf('综合')>-1)"
            size="small" type="primary" @click="openCableConfig">电缆配置
          </el-button>
          <el-button v-if="active==1&&addObj.sampleType!=undefined&&addObj.sampleType.indexOf('电缆')>-1" size="small"
                     type="primary" @click="openAuxiliaryCore">辅助线芯配置
          </el-button>
          <el-button v-show="active==1||(tabIndex==4&&active==2)" :loading="saveLoad" size="small" type="primary"
                     @click="save">提交
          </el-button>
          <!-- 审核 -->
          <el-button v-show="active==3" :disabled="saveLoad" :loading="saveLoad" size="small"
                     @click="upInsOrderOfState(2)">不通过</el-button>
                     @click="upInsOrderOfState(2)">不通过
          </el-button>
          <el-button v-show="active==3" :loading="saveLoad" size="small" type="primary"
                     @click="upInsOrderOfState(1)">通过</el-button>
                     @click="upInsOrderOfState(1)">通过
          </el-button>
          <el-button size="small" @click="goBack">
            <span style="color: #3A7BFA;">返回</span>
          </el-button>
@@ -54,23 +63,30 @@
          <el-descriptions-item label="联系方式">{{ addObj.phone || '-' }}</el-descriptions-item>
          <el-descriptions-item label="原始记录模板" :span="4">
            <div v-if="boundTemplateList.length" class="template-tag-list">
              <el-tag v-for="item in boundTemplateList" :key="item.templateId" size="small" effect="plain">{{ item.name }}</el-tag>
              <el-tag v-for="item in boundTemplateList" :key="item.templateId" size="small" effect="plain">{{
                  item.name
                }}
              </el-tag>
            </div>
            <span v-else class="order-detail__empty">暂未绑定原始记录模板</span>
          </el-descriptions-item>
          <el-descriptions-item label="备注" :span="4">{{ addObj.remark || '-' }}</el-descriptions-item>
        </el-descriptions>
        <el-form v-show="false" ref="addObj" :inline="true" :model="addObj" :rules="addObjRules" label-width="108px" label-position="right">
        <el-form v-show="false" ref="addObj" :inline="true" :model="addObj" :rules="addObjRules" label-width="108px"
                 label-position="right">
          <el-row>
            <el-col :span="6">
              <el-form-item label="委托编号:" prop="entrustCode">
                <el-input v-model="addObj.entrustCode" clearable disabled placeholder="系统生成" size="small"></el-input>
                <el-input v-model="addObj.entrustCode" clearable disabled placeholder="系统生成"
                          size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="检验类别:" prop="orderType">
                <el-select v-model="addObj.orderType" :disabled="active>1&&tabIndex!=4" clearable size="small" style="width: 100%;">
                  <el-option v-for="(a, ai) in dict.type.check_type1" :key="ai" :label="a.label" :value="a.value"></el-option>
                <el-select v-model="addObj.orderType" :disabled="active>1&&tabIndex!=4" clearable size="small"
                           style="width: 100%;">
                  <el-option v-for="(a, ai) in dict.type.check_type1" :key="ai" :label="a.label"
                             :value="a.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
@@ -81,7 +97,8 @@
            </el-col>
            <el-col :span="6">
              <el-form-item label="委托单位:" prop="company">
                <el-input v-model="addObj.company" disabled placeholder="选择委托单位" size="small" style="width: 208px">
                <el-input v-model="addObj.company" disabled placeholder="选择委托单位" size="small"
                          style="width: 208px">
                  <template slot="append">
                    <el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
                               @click="openCompanyList"></el-button>
@@ -93,21 +110,25 @@
          <el-row>
            <el-col :span="6">
              <el-form-item label="联系方式:" prop="phone">
                <el-input v-model="addObj.phone" :disabled="active>1&&tabIndex!=4" clearable placeholder="选择委托客户" size="small"></el-input>
                <el-input v-model="addObj.phone" :disabled="active>1&&tabIndex!=4" clearable placeholder="选择委托客户"
                          size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="紧急程度:" prop="type">
                <el-select v-model="addObj.type" :disabled="active>1&&tabIndex!=4" clearable size="small">
                  <el-option v-for="(a, ai) in dict.type.urgency_level" :key="ai" :label="a.label" :value="a.value"></el-option>
                  <el-option v-for="(a, ai) in dict.type.urgency_level" :key="ai" :label="a.label"
                             :value="a.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="样品名称:" prop="sample">
                <el-input v-model="addObj.sample" disabled size="small" style="width: 208px">
                  <template slot="append"><el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
                                                     @click="selectStandardTree = true"></el-button></template>
                  <template slot="append">
                    <el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
                               @click="selectStandardTree = true"></el-button>
                  </template>
                </el-input>
              </el-form-item>
            </el-col>
@@ -122,19 +143,22 @@
            <el-col :span="6">
              <el-form-item label="样品状态:" prop="sampleStatus">
                <el-select v-model="addObj.sampleStatus" :disabled="active>1&&tabIndex!=4" size="small">
                  <el-option v-for="(a,ai) in dict.type.sample_status_list" :key="ai" :label="a.label" :value="a.value"></el-option>
                  <el-option v-for="(a,ai) in dict.type.sample_status_list" :key="ai" :label="a.label"
                             :value="a.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="抽检数量:" prop="testQuantity">
                <el-input v-model="addObj.testQuantity" :disabled="active>1&&tabIndex!=4" clearable size="small"></el-input>
                <el-input v-model="addObj.testQuantity" :disabled="active>1&&tabIndex!=4" clearable
                          size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="来样方式:" prop="formType">
                <el-select v-model="addObj.formType" :disabled="active>1&&tabIndex!=4" size="small" clearable>
                  <el-option v-for="(a,ai) in dict.type.form_type" :key="ai" :label="a.label" :value="a.value"></el-option>
                  <el-option v-for="(a,ai) in dict.type.form_type" :key="ai" :label="a.label"
                             :value="a.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
@@ -150,7 +174,8 @@
          <el-row>
            <el-col :span="6">
              <el-form-item label="样品处理方式:" prop="processing">
                <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4" size="mini" style="display: flex; flex-direction: column;">
                <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4" size="mini"
                                style="display: flex; flex-direction: column;">
                  <el-radio :label="0" border style="margin-right: 0">委托单位取回</el-radio>
                  <el-radio :label="1" border>实验室处理</el-radio>
                </el-radio-group>
@@ -180,23 +205,27 @@
          <el-row>
            <el-col :span="6">
              <el-form-item label="委托人:" prop="prepareUser">
                <el-input v-model="addObj.prepareUser" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable size="small"></el-input>
                <el-input v-model="addObj.prepareUser" :disabled="active>1&&tabIndex!=4"
                          :placeholder="active>1 ? '' : '请输入'" clearable size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="委托人英文:" prop="prepareUserEn">
                <el-input v-model="addObj.prepareUserEn" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable size="small"></el-input>
                <el-input v-model="addObj.prepareUserEn" :disabled="active>1&&tabIndex!=4"
                          :placeholder="active>1 ? '' : '请输入'" clearable size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="备注:" prop="remark">
                <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2}"
                          :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small" style="width: 100%" type="textarea"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="备注英文:" prop="remarkEn">
                <el-input v-model="addObj.remarkEn" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                <el-input v-model="addObj.remarkEn" :autosize="{ minRows: 2, maxRows: 2}"
                          :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small" type="textarea"></el-input>
              </el-form-item>
            </el-col>
@@ -204,19 +233,22 @@
          <el-row>
            <el-col :span="6">
              <el-form-item label="样品名称:" prop="sampleView">
                <el-input v-model="addObj.sampleView" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                <el-input v-model="addObj.sampleView" :disabled="active>1&&tabIndex!=4"
                          :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="样品名称英文:" prop="sampleViewEn">
                <el-input v-model="addObj.sampleViewEn" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                <el-input v-model="addObj.sampleViewEn" :disabled="active>1&&tabIndex!=4"
                          :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="委托人工号:" prop="prepareCode">
                <el-input v-model="addObj.prepareCode" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                <el-input v-model="addObj.prepareCode" :disabled="active>1&&tabIndex!=4"
                          :placeholder="active>1 ? '' : '请输入'" clearable
                          size="small"></el-input>
              </el-form-item>
            </el-col>
@@ -250,7 +282,8 @@
            <span style="width: 150px;font-size: 14px;text-align: right;">特殊标准:</span>
            <el-input v-model="specialStandardMethod" :disabled="!isSpecial" clearable size="small"></el-input>
            <el-button v-show="active==1" size="small" style="margin-left: 10px"
                       type="primary" @click="editSpecial">编辑</el-button>
                       type="primary" @click="editSpecial">编辑
            </el-button>
          </div>
        </div>
        <el-table ref="sampleTable" :data="sampleList" border class="el-table sampleTable" highlight-current-row
@@ -299,7 +332,8 @@
            <template slot-scope="scope">
              <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1"
                :loading="methodLoad" :readonly="active>1" clearable placeholder="检验标准"
                size="small" style="width: 100%;" @change="(value)=>methodChange(value, scope.row)" @clear="productList = []" @focus="methodFocus">
                         size="small" style="width: 100%;" @change="(value)=>methodChange(value, scope.row)"
                         @clear="productList = []" @focus="methodFocus">
                <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
                </el-option>
              </el-select>
@@ -324,7 +358,8 @@
          max-height="400px" style="margin-bottom: 10px;" tooltip-effect="dark"
          @select="selectOne" @selection-change="selectProduct" @select-all="handleAll">
          <el-table-column v-if="active==1" :selectable="selectable0" type="selection" width="65"></el-table-column>
          <el-table-column label="检验项分类" min-width="140" prop="inspectionItemClass" show-overflow-tooltip></el-table-column>
          <el-table-column label="检验项分类" min-width="140" prop="inspectionItemClass"
                           show-overflow-tooltip></el-table-column>
          <el-table-column label="检验项" min-width="140" prop="inspectionItem" show-overflow-tooltip>
            <template slot="header" slot-scope="scope">
              <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
@@ -354,7 +389,9 @@
          </el-table-column>
          <el-table-column label="要求值" min-width="220px" prop="ask">
            <template slot-scope="scope">
              <el-input v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)&&scope.row.inspectionValueType!='5'" v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求值"
              <el-input
                v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)&&scope.row.inspectionValueType!='5'"
                v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求值"
                        size="small" type="textarea"
                        @change="e=>requestChange(e,scope.row,'ask')"></el-input>
              <span v-else>
@@ -364,7 +401,8 @@
          </el-table-column>
          <el-table-column label="要求描述" min-width="220px" prop="tell">
            <template slot-scope="scope">
              <el-input v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)" v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求描述"
              <el-input v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)" v-model="scope.row.tell"
                        :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求描述"
                size="small" type="textarea"
                @change="e=>requestChange(e,scope.row,'tell')"></el-input>
              <span v-else>
@@ -374,7 +412,8 @@
          </el-table-column>
          <el-table-column label="条件" min-width="140" prop="radius" show-overflow-tooltip>
            <template slot-scope="scope">
              <el-input v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)" v-model="scope.row.radius" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="条件"
              <el-input v-if="(active==1||tabIndex==4)&&(isAskOnlyRead || isSpecial)" v-model="scope.row.radius"
                        :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="条件"
                        size="small" type="textarea"
                        @change="e=>requestChange(e,scope.row,'radius')">
              </el-input>
@@ -397,12 +436,17 @@
          <el-table-column label="计量单位" prop="unit" show-overflow-tooltip width="100"></el-table-column>
          <el-table-column label="单价" prop="price" show-overflow-tooltip width="100"></el-table-column>
          <el-table-column label="区间" min-width="120" prop="section" show-overflow-tooltip></el-table-column>
          <el-table-column :filter-method="filterHandler" :filters="filters" label="子实验室" min-width="130" prop="sonLaboratory"
          <el-table-column :filter-method="filterHandler" :filters="filters" label="子实验室" min-width="130"
                           prop="sonLaboratory"
            show-overflow-tooltip></el-table-column>
            <el-table-column v-if="isSpecial&&active==1" label="操作" width="100">
            <template slot-scope="scope">
              <el-button v-if="!scope.row.repetitionTag" size="small" type="text" @click="addProductList(productList,scope.row,scope.$index)">插入行</el-button>
              <el-button v-if="!!scope.row.repetitionTag&&scope.row.delete" size="small" type="text" @click="deleteProductList(scope.$index,productList)">删除</el-button>
              <el-button v-if="!scope.row.repetitionTag" size="small" type="text"
                         @click="addProductList(productList,scope.row,scope.$index)">插入行
              </el-button>
              <el-button v-if="!!scope.row.repetitionTag&&scope.row.delete" size="small" type="text"
                         @click="deleteProductList(scope.$index,productList)">删除
              </el-button>
            </template>
          </el-table-column>
        </el-table>
@@ -410,6 +454,16 @@
    </div>
    <el-dialog :visible.sync="selectUserDia" title="选择单位" width="70%">
      <div v-if="selectUserDia" class="body">
        <el-form :inline="true" size="small" @submit.native.prevent>
          <el-form-item label="委托单位">
            <el-input v-model="companyQuery" clearable placeholder="请输入委托单位"
                      @keyup.enter.native="searchCompany"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="searchCompany">查询</el-button>
            <el-button @click="resetCompanySearch">重置</el-button>
          </el-form-item>
        </el-form>
        <lims-table :tableData="tableData1" :column="column1"
                    :isSelection="true" :handleSelectionChange="selectMethod"
                    @pagination="pagination1" height="400px" key="tableData1"
@@ -421,16 +475,19 @@
      </span>
    </el-dialog>
    <el-dialog :visible.sync="selectStandardTree" title="选择样品" width="500px">
      <div v-if="selectStandardTree" v-loading="selectStandardTreeLoading" class="body"  style="height: 60vh;overflow-y: auto;user-select: none;">
      <div v-if="selectStandardTree" v-loading="selectStandardTreeLoading" class="body"
           style="height: 60vh;overflow-y: auto;user-select: none;">
        <el-row>
          <el-col :span="24">
            <el-input v-model="search" clearable placeholder="输入关键字进行搜索" size="small"
              style="margin-bottom: 5px;" suffix-icon="el-icon-search" @blur="searchFilter" @clear="searchFilter"
                      style="margin-bottom: 5px;" suffix-icon="el-icon-search" @blur="searchFilter"
                      @clear="searchFilter"
              @keyup.enter.native="searchFilter"></el-input>
          </el-col>
        </el-row>
        <el-tree ref="tree" :data="list" :default-expanded-keys="expandedKeys" :filter-node-method="filterNode"
          :props="{ children: 'children', label: 'label' }" highlight-current node-key="label" @node-click="handleNodeClick"
                 :props="{ children: 'children', label: 'label' }" highlight-current node-key="label"
                 @node-click="handleNodeClick"
          @node-expand="nodeOpen" @node-collapse="nodeClose" @dblclick.native="activeStandardTree">
          <div slot-scope="{ node, data }" class="custom-tree-node">
            <el-row>
@@ -460,7 +517,8 @@
        <el-button :loading="templateLoading" type="primary" @click="addTemplateDia">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false" :visible.sync="issuedDialogVisible" title="检验下发" width="400px">
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false"
               :visible.sync="issuedDialogVisible" title="检验下发" width="400px">
      <div class="body" style="max-height: 60vh;">
        <el-row>
          <el-col :span="22" class="search_thing">
@@ -474,7 +532,8 @@
          <el-col :span="22" class="search_thing">
            <div class="search_label"><span class="required-span">* </span>指派人员:</div>
            <div class="search_input">
              <el-select v-model="distributeData.userId" filterable placeholder="请选择" size="small" style="width: 100%;" @change="changeUser">
              <el-select v-model="distributeData.userId" filterable placeholder="请选择" size="small"
                         style="width: 100%;" @change="changeUser">
                <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
@@ -483,8 +542,10 @@
          <el-col v-if="distributeData.userId" :span="22" class="search_thing">
            <div class="search_label">试验室:</div>
            <div class="search_input">
              <el-select v-model="distributeData.sonLaboratory" filterable placeholder="请选择" size="small" style="width: 100%;">
                <el-option v-for="item in newJuLaboratoryList" :key="item.value" :label="item.label" :value="item.value">
              <el-select v-model="distributeData.sonLaboratory" filterable placeholder="请选择" size="small"
                         style="width: 100%;">
                <el-option v-for="item in newJuLaboratoryList" :key="item.value" :label="item.label"
                           :value="item.value">
                </el-option>
              </el-select>
            </div>
@@ -517,11 +578,14 @@
      </span>
    </el-dialog>
    <!--电缆配置-->
    <cableConfig v-if="cableConfigShow" ref="cableConfigShow" :active="active" :isSpecial="isSpecial" :sampleSelectionList="sampleSelectionList" @goBackAdd="goBackAdd"/>
    <cableConfig v-if="cableConfigShow" ref="cableConfigShow" :active="active" :isSpecial="isSpecial"
                 :sampleSelectionList="sampleSelectionList" @goBackAdd="goBackAdd"/>
    <!--辅助线芯配置-->
    <auxiliary-wire-core v-if="auxiliaryShow" :active="active" :isSpecial="isSpecial" :sampleSelectionList="sampleSelectionList" @goBackAdd2="goBackAdd2"></auxiliary-wire-core>
    <auxiliary-wire-core v-if="auxiliaryShow" :active="active" :isSpecial="isSpecial"
                         :sampleSelectionList="sampleSelectionList" @goBackAdd2="goBackAdd2"></auxiliary-wire-core>
    <!--特殊值处理框-->
    <el-dialog :before-close="beforeClose" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false"
    <el-dialog :before-close="beforeClose" :close-on-click-modal="false" :close-on-press-escape="false"
               :show-close="false"
               :visible.sync="bsm1DiaAll"
               min-width="400px"
               title="检测到特殊项,请作出以下选择">
@@ -532,7 +596,8 @@
            <div class="search_label" style="width: 80px;"><span class="required-span">* </span>选项:</div>
            <div class="search_input">
              <el-radio-group v-model="item.bsm1Val" v-removeAriaHidden @input="upBsmAll(item)">
                <el-radio v-for="(a, ai) in JSON.parse(item.bsmRow.sectionCopy)" :key="ai" :label="a" style="margin-bottom: 2px;margin-top: 2px;"></el-radio>
                <el-radio v-for="(a, ai) in JSON.parse(item.bsmRow.sectionCopy)" :key="ai" :label="a"
                          style="margin-bottom: 2px;margin-top: 2px;"></el-radio>
              </el-radio-group>
            </div>
          </el-col>
@@ -541,7 +606,8 @@
            <div class="search_input">
              <el-radio-group v-model="item.bsm1Val" v-removeAriaHidden @input="upBsmAll(item)">
                <el-radio v-for="(a, ai) in JSON.parse(item.bsmRow.sectionCopy)" :key="ai"
                          :label="a">{{JSON.parse(item.bsmRow.askCopy)[ai]}}</el-radio>
                          :label="a">{{ JSON.parse(item.bsmRow.askCopy)[ai] }}
                </el-radio>
              </el-radio-group>
            </div>
          </el-col>
@@ -584,7 +650,8 @@
          label="识别符值"
          prop="value">
          <template slot-scope="scope">
            <el-input v-model="scope.row.value" placeholder="请输入" size="small" @input="inputValueHandler(scope.row,scope.$index)"></el-input>
            <el-input v-model="scope.row.value" placeholder="请输入" size="small"
                      @input="inputValueHandler(scope.row,scope.$index)"></el-input>
          </template>
        </el-table-column>
      </el-table>
@@ -735,6 +802,7 @@
      tableData1: [],
      tableLoading1: false,
      multipleSelection: [],
      companyQuery: '',
      column1: [
        {label: '客户名称', prop: 'company'},
        {label: '客户单位EN', prop: 'companyEn'},
@@ -1021,10 +1089,11 @@
      },
      openCompanyList () {
        this.selectUserDia = true
        this.getCompanyList()
      this.resetCompanySearch()
      },
      getCompanyList () {
        selectCustomPageList({...this.page1}).then(res => {
      this.tableLoading1 = true
      selectCustomPageList({company: this.companyQuery, ...this.page1}).then(res => {
          this.tableLoading1 = false
          if (res.code === 200) {
            this.tableData1 = res.data.records
@@ -1036,6 +1105,15 @@
      },
      pagination1 (page) {
        this.page1.size = page.limit
      this.getCompanyList()
    },
    searchCompany() {
      this.page1.current = 1
      this.getCompanyList()
    },
    resetCompanySearch() {
      this.companyQuery = ''
      this.page1.current = 1
        this.getCompanyList()
      },
      selectMethod (row) {
@@ -1112,7 +1190,8 @@
              return code[index] + '' + num
            }
          }
        }catch(e){}
      } catch (e) {
      }
      },
      replaceAll(str,find,value) {
        if (str === undefined) {
@@ -1171,7 +1250,8 @@
                type: "warning"
              }).then(() => {
                this.saveMethod(sampleList)
              }).catch(() => {})
            }).catch(() => {
            })
            }else{
              let isRTS = this.totalArr.find(a => a.ask != null && this.symbolList.find(b=>a.ask.includes(b)) && a.state == 1)
              if (isRTS) {
@@ -1529,7 +1609,8 @@
            } else {
              this.methods = res.data.standardMethodList
            }
          } catch (e) {}
        } catch (e) {
        }
        })
      },
      addStandardTree() {
@@ -1636,7 +1717,8 @@
            row.sectionCopy = sectionCopy
            row.ask = arr1[index]
            row.tell = arr4[index]
          } catch(e) {}
        } catch (e) {
        }
        }
        this.sampleList.forEach(item => {
          if (this.sampleIds.indexOf(item.id) > -1||this.currentMethod.id==item.id) {
@@ -1673,6 +1755,7 @@
            temp.pop();
          }
        }
        backtrack([], nums);
        return result;
      },
@@ -1703,7 +1786,8 @@
          }).catch(e => {
            this.$message.error('删除失败')
          })
        }).catch(() => {})
      }).catch(() => {
      })
      },
      // 保存模板
      addTemplateDia() {
@@ -2244,10 +2328,12 @@
>>>.warning-row {
  color: #1890FF;
}
.node_i {
  color: orange;
  font-size: 18px;
}
.template-tag-list {
  min-height: 32px;
  display: flex;
@@ -2255,23 +2341,28 @@
  flex-wrap: wrap;
  gap: 8px;
}
/* 委托单信息:只读详情 */
.order-detail__title {
  font-size: 16px;
  font-weight: bold;
  color: #303133;
}
.order-detail>>>.el-descriptions-item__label.is-bordered-label {
  width: 104px;
  white-space: nowrap;
}
.order-detail>>>.el-descriptions-item__content {
  color: #303133;
}
/* 描述列表内不需要额外的行高占位,标签行与其它行等高 */
.order-detail .template-tag-list {
  min-height: 0;
}
.order-detail__empty {
  color: #c0c4cc;
}
src/views/business/reportPreparation/index.vue
@@ -53,22 +53,31 @@
            :auto-upload="true" :before-upload="fileBeforeUpload1" :headers="uploadHeader" :on-error="onError1"
            :on-success="handleSuccessUp1" :show-file-list="false" accept='.doc,.docx'>
            <el-button size="small" type="text"
              :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName">上传</el-button>
                       :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName">上传
            </el-button>
          </el-upload>
<!--          <el-button type="text" size="small" :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName"-->
<!--            @click="handleRestore(scope.row)">还原</el-button>-->
          <el-button type="text" size="small" @click="sendBackTask(scope.row)">退回任务</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName"
            @click="sendBackTask(scope.row)">退回任务</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName"
            @click="handle(scope.row)">提交</el-button>
                     @click="handle(scope.row)">提交
          </el-button>
          <el-button type="text" size="small"
            :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 1 || nickName !== scope.row.examineUser"
            @click="handleIssued(scope.row)">审核</el-button>
                     @click="handleIssued(scope.row)">审核
          </el-button>
          <el-button type="text" size="small"
            :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || nickName !== scope.row.ratifyUser"
            @click="handleApprove(scope.row)">批准</el-button>
                     @click="handleApprove(scope.row)">批准
          </el-button>
          <el-button style="margin-left: 10px" type="text" size="small"
                     :disabled="!scope.row.url && !scope.row.urlS" @click="download(scope.row)">下载</el-button>
                     :disabled="!scope.row.url && !scope.row.urlS" @click="download(scope.row)">下载
          </el-button>
          <el-button type="text" size="small"
                     :loading="regeneratingReportId === scope.row.id"
                     :disabled="regeneratingReportId === scope.row.id"
                     @click="handleRegenerate(scope.row)">重新生成
          </el-button>
          <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">原始记录</el-button>
          <el-button type="text" size="small" @click="handleFileLook(scope.row)">附件上传</el-button>
        </div>
@@ -105,7 +114,9 @@
    <el-dialog :modal-append-to-body="false" :visible.sync="issuedReasonVisible" title="不通过原因" width="400px">
      <div class="search_thing">
        <div class="search_label">不通过原因:</div>
        <div class="search_input"><el-input v-model="reason" clearable placeholder="请输入" size="small"></el-input></div>
        <div class="search_input">
          <el-input v-model="reason" clearable placeholder="请输入" size="small"></el-input>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button :disabled="loadingIssuedReason" @click="issuedReasonVisible = false">取消</el-button>
@@ -130,7 +141,9 @@
    <el-dialog :modal-append-to-body="false" :visible.sync="approveReasonVisible" title="不批准原因" width="400px">
      <div class="search_thing">
        <div class="search_label">不批准原因:</div>
        <div class="search_input"><el-input v-model="reason" clearable placeholder="请输入" size="small"></el-input></div>
        <div class="search_input">
          <el-input v-model="reason" clearable placeholder="请输入" size="small"></el-input>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button :disabled="loadingApproveReason" @click="approveReasonVisible = false">取消</el-button>
@@ -189,12 +202,30 @@
        <el-upload ref='upload' :action="fileAction" :auto-upload="true" :before-upload="fileBeforeUpload"
          :data="{ orderId: filesLookInfo.insOrderId }" :headers="uploadHeader" :on-error="onError"
          :on-success="handleSuccessUp" :show-file-list="false"
          accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;">
                   accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                   style="width: 80px !important;">
          <el-button size="small" style="height: 38px" type="primary">附件上传</el-button>
        </el-upload>
      </div>
      <lims-table :tableData="tableDataFile" :column="columnFile" height="600px"
        key="tableDataFile" :tableLoading="tableLoadingFile"></lims-table>
    </el-dialog>
    <el-dialog title="选择下载报告" :visible.sync="downloadDialogVisible" width="400px"
               :close-on-click-modal="false" @closed="closeDownloadDialog">
      <el-form label-width="90px">
        <el-form-item label="报告类型:">
          <el-radio-group v-model="selectedReportType">
            <el-radio :label="0">检测报告</el-radio>
            <el-radio :label="1" :disabled="!downloadRow || !downloadRow.inspectionUrl">检验报告</el-radio>
          </el-radio-group>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="downloadDialogVisible = false">取 消</el-button>
        <el-button type="primary" :loading="downloadingReportType !== null"
                   :disabled="selectedReportType === null || downloadingReportType !== null"
                   @click="downloadSelectedReport(selectedReportType)">下 载</el-button>
      </span>
    </el-dialog>
  </div>
</template>
@@ -207,6 +238,7 @@
  downloadReport,
  examineReport,
  pageInsReport,
  regenerateReport,
  ratifyReport,
  sendBackTask,
  upReportUrl,
@@ -217,6 +249,7 @@
import { selectUserCondition } from "@/api/business/inspectionTask";
import limsTable from "@/components/Table/lims-table.vue";
import {delFile, downFile, getFileList} from "@/api/business/rawMaterialOrder";
export default {
  name: 'ReportPreparation',
  components: { limsTable, onlyoffice },
@@ -255,6 +288,11 @@
      mutiList: [],
      outLoading: false,
      outExportLoading: false,
      regeneratingReportId: null,
      downloadDialogVisible: false,
      downloadRow: null,
      selectedReportType: 0,
      downloadingReportType: null,
      inLoading: false,
      addApproverDia: false, // 指定审批人员弹框
      approver: '', // 审批人员
@@ -492,7 +530,7 @@
          fixed: "right",
          dataType: "slot",
          slot: "action",
          width: '360px',
          width: '440px',
          label: "操作"
        }
      ],
@@ -749,7 +787,28 @@
      }
    },
    download(row) {
      downloadReport(row.id).then(res => {
      this.downloadRow = row
      // 历史数据只有检测报告:直接按检测报告下载,保持原有操作习惯。
      if (!row.inspectionUrl) {
        this.downloadSelectedReport(0)
        return
      }
      this.selectedReportType = 0
      this.downloadDialogVisible = true
    },
    closeDownloadDialog() {
      if (this.downloadingReportType === null) {
        this.downloadRow = null
        this.selectedReportType = 0
      }
    },
    downloadSelectedReport(reportType) {
      if (!this.downloadRow) {
        return
      }
      const row = this.downloadRow
      this.downloadingReportType = reportType
      downloadReport(row.id, reportType).then(res => {
        if (res.type && res.type.includes('application/json')) {
          const reader = new FileReader()
          reader.onload = () => {
@@ -762,11 +821,33 @@
          reader.readAsText(res)
          return
        }
        const reportUrl = row.urlS || row.url || ''
        const reportUrl = reportType === 1 ? row.inspectionUrl : (row.urlS || row.url || '')
        const filename = decodeURIComponent(reportUrl.substring(reportUrl.lastIndexOf('/') + 1)) || `${row.code}.docx`
        this.$download.saveAs(res, filename)
        this.downloadDialogVisible = false
      }).catch(() => {
        this.$message.error('报告下载失败')
      }).finally(() => {
        this.downloadingReportType = null
        if (!this.downloadDialogVisible) {
          this.downloadRow = null
        }
      })
    },
    handleRegenerate(row) {
      this.$confirm('将根据当前原始记录重新生成并覆盖系统报告,是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.regeneratingReportId = row.id
        return regenerateReport(row.id).then(() => {
          this.$message.success('报告重新生成成功')
          this.refreshTable()
        }).finally(() => {
          this.regeneratingReportId = null
        })
      }).catch(() => {
      })
    },
    // 还原操作
src/views/system/customer/index.vue
@@ -27,28 +27,15 @@
        <el-form-item label="客户名称" prop="company">
          <el-input v-model="user.company" size="small" clearable></el-input>
        </el-form-item>
        <el-form-item label="客户单位EN" prop="companyEn">
          <el-input v-model="user.companyEn" size="small" clearable></el-input>
        </el-form-item>
        <el-form-item label="单位地址" prop="address">
          <el-input type="textarea" v-model="user.address" size="small" clearable
                    :autosize="{minRows: 2, maxRows: 4}"></el-input>
        </el-form-item>
        <el-form-item label="单位地址EN" prop="addressEn">
          <el-input type="textarea" v-model="user.addressEn" size="small" clearable
                    :autosize="{minRows: 2, maxRows: 4}"></el-input>
        <el-form-item label="联系人" prop="contact">
          <el-input v-model="user.contact" size="small" clearable></el-input>
        </el-form-item>
        <el-form-item label="单位电话" prop="phone">
          <el-input v-model="user.phone" size="small" clearable></el-input>
        </el-form-item>
        <el-form-item label="加急额度" prop="num">
          <el-input v-model="user.num" size="small" clearable></el-input>
        </el-form-item>
        <el-form-item label="客户编号" prop="code2">
          <el-input v-model="user.code2" size="small" clearable></el-input>
        </el-form-item>
        <el-form-item label="工厂域" prop="code">
          <el-input v-model="user.code" size="small" clearable></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
@@ -75,13 +62,9 @@
      tableData: [],
      column: [
        {label: '客户名称', prop: 'company'},
        {label: '客户单位EN', prop: 'companyEn'},
        {label: '单位地址', prop: 'address'},
        {label: '单位地址EN', prop: 'addressEn'},
        {label: '联系人', prop: 'contact'},
        {label: '单位电话', prop: 'phone'},
        {label: '加急额度', prop: 'num'},
        {label: '客户编号', prop: 'code2'},
        {label: '工厂域', prop: 'code'},
        {
          dataType: 'action',
          fixed: 'right',
@@ -120,8 +103,6 @@
      userRules: {
        company: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
        address: [{ required: true, message: '请输入单位地址', trigger: 'blur' }],
        num: [{ required: true, message: '请输入加急额度', trigger: 'blur' }],
        code2: [{ required: true, message: '请输入客户编号', trigger: 'blur' }],
      },
      loading: false,
      //