licp
2024-12-19 01966b95701c0b76e83f2dc252dae77bf9515a63
完成cnas7.1搬迁
已添加2个文件
688 ■■■■■ 文件已修改
src/components/view/a7-contract-review.vue 688 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/img/logo2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/a7-contract-review.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,688 @@
<template>
  <div class="contract-review">
    <el-row class="title">
      <el-col :span="12" style="padding-left: 20px;text-align: left;">检验委托单</el-col>
    </el-row>
    <div class="search">
      <div class="search_thing">
        <div class="search_label">试样名称:</div>
        <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="componentData.entity.sample"
            @keyup.enter.native="refreshTable()"></el-input></div>
      </div>
      <div class="search_thing">
        <div class="search_label">委托单位:</div>
        <div class="search_input">
          <el-input size="small" placeholder="请输入" clearable v-model="componentData.entity.company"
            @keyup.enter.native="refreshTable()"></el-input>
        </div>
      </div>
      <div class="search_thing">
        <div class="search_label">生产单位:</div>
        <div class="search_input">
          <el-input size="small" placeholder="请输入" clearable v-model="componentData.entity.production"
            @keyup.enter.native="refreshTable()"></el-input>
        </div>
      </div>
      <div class="search_thing">
        <div class="search_label">委托人:</div>
        <div class="search_input">
          <el-input size="small" placeholder="请输入" clearable v-model="componentData.entity.prepareUser"
            @keyup.enter.native="refreshTable()"></el-input>
        </div>
      </div>
      <div class="search_thing" style="padding-left: 30px;">
        <el-button size="small" @click="refresh()">重 ç½®</el-button>
        <el-button size="small" type="primary" @click="refreshTable()">查 è¯¢</el-button>
      </div>
    </div>
    <div class="table">
      <ValueTable ref="ValueTable" :url="$api.processOrder.pageProcessOrder"
        :componentData="componentData" :delUrl="$api.processOrder.delProcessOrder" :key="upIndex"/>
    </div>
    <el-dialog
      title="补充信息"
      :visible.sync="addDialogVisible"
      width="400px">
      <el-row>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">判定规则:</div>
            <div class="search_input" style="display: flex;align-items: center;">
              <!-- <el-input size="small" placeholder="请输入" clearable v-model="addInfo.rule"></el-input> -->
              <el-radio-group v-model="addInfo.rule" size="small" style="width: 60%;">
                <el-radio label="不考虑不确定度">不考虑不确定度</el-radio>
                <el-radio label="考虑不确定度">考虑不确定度</el-radio>
              </el-radio-group>
              <el-input v-model="addInfo.num" placeholder="请输入" v-if="addInfo.rule=='考虑不确定度'" size="small" style="width: 80px;margin-right: 10px;"></el-input>
              <span v-if="addInfo.rule=='考虑不确定度'"> %</span>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">综合室签名人:</div>
            <div class="search_input">
              <el-select v-model="addInfo.comprehensiveUser" placeholder="请选择" size="small" style="width: 100%;">
                <el-option
                  v-for="item in personList"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                </el-option>
              </el-select>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">接收日期:</div>
            <div class="search_input">
              <el-date-picker
                v-model="addInfo.comprehensiveTime"
                type="date"
                size="small"
                placeholder="选择日期"
                format="yyyy-MM-dd"
                value-format="yyyy-MM-dd" style="width: 100%;">
              </el-date-picker>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">领样员:</div>
            <div class="search_input">
              <el-select v-model="addInfo.issueUser" placeholder="请选择" size="small" style="width: 100%;">
                <el-option
                  v-for="item in personList"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                </el-option>
              </el-select>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">领样日期:</div>
            <div class="search_input">
              <el-date-picker
                v-model="addInfo.issueTime"
                type="date"
                size="small"
                placeholder="选择日期"
                format="yyyy-MM-dd"
                value-format="yyyy-MM-dd" style="width: 100%;">
              </el-date-picker>
            </div>
          </div>
        </el-col>
      </el-row>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addDialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="handleAdd" :loading="addLoading">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog
      :title="title"
      :visible.sync="detailDialogVisible" width="900px" top="20px" :class="{downPdf:title=='下载'}" :modal="title!='下载'">
      <div style="max-height: 75vh;overflow-y: auto;">
        <div id="dialogBody">
          <table border="1" class="tables heads" cellpadding="10" style="border: 1px dashed black;">
            <tr>
              <td rowspan="2">
                <img src="../../../static/img/logo2.png" alt="" style="width: 80%;">
              </td>
              <td>
                <p>记录名称:检验委托单</p>
                <p class="en">Record name: Commission List of Testing</p>
              </td>
              <td>
                <p>保存期限:6å¹´</p>
                <p class="en">Record retention:6 years</p>
              </td>
            </tr>
            <tr>
              <td>
                <p>记录编号: ZTT/QR-16-04-a</p>
                <p class="en">Record number: ZTT/QR-16-04-a</p>
              </td>
              <td>
                <p>归档部门:综合室</p>
                <p class="en">Archive department: general office</p>
              </td>
            </tr>
          </table>
          <h4 style="display: flex;align-items: center;flex-direction: column;justify-content: center;">
            <span style="font-size: 28px;">检 éªŒ å§” æ‰˜ å•</span>
            <span>Commission List of Testing</span>
          </h4>
          <p style="margin-top: 16px;margin-left: 600px;">委托编号:{{ currentInfo.entrustCode }}</p>
          <p style="margin-left: 600px;" class="en">Report No:{{ currentInfo.entrustCode }}</p>
          <table border="1" class="tables" cellpadding="10">
            <tr>
              <td colspan="2">
                <p>试样名称</p>
                <p class="en">Sample name</p>
              </td>
              <td>{{ currentInfo.sample }}</td>
              <td>
                <p>委托时间</p>
                <p class="en">Commission date</p>
              </td>
              <td>{{ currentInfo.createTime }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>型 å·</p>
                <p class="en">Model NO.</p>
              </td>
              <td>{{ currentInfo.sampleType }}</td>
              <td>
                <p>委托单位</p>
                <p class="en">Commission unit</p>
              </td>
              <td>{{ currentInfo.company }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>生产单位</p>
                <p class="en">Production unit</p>
              </td>
              <td>{{ currentInfo.production }}</td>
              <td>
                <p>委托人</p>
                <p class="en">Commission by</p>
              </td>
              <td>{{ currentInfo.prepareUser }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>样品数量</p>
                <p class="en">Quantity</p>
              </td>
              <td>{{ currentInfo.sampleNum }}</td>
              <td>
                <p>样品状态</p>
                <p class="en">Sample status</p>
              </td>
              <td>{{ insStateList.find(m=>m.value==currentInfo.insState)?insStateList.find(m=>m.value==currentInfo.insState).label:'/' }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>是否留样</p>
                <p class="en">Reserve sample or not</p>
              </td>
              <td>
                <span v-if="currentInfo.isLeave==1">是 <span class="en" >Yes</span></span>
                <span v-else>否 <span class="en">No</span></span>
              </td>
              <td>
                <p>样品处理方式</p>
                <p class="en">Sample treatment</p>
              </td>
              <td>
                <span v-if="currentInfo.processing==0">委托单位取回 <span class="en">Taken away by commission unit</span></span>
                <span v-else>实验室处理 <span class="en">Laboratory treatment</span></span>
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <p>约定完成时间(报告日期)</p>
                <p class="en">Agreed completion time</p>
              </td>
              <td>{{ currentInfo.appointed }}</td>
              <td>
                <p>报告发送方式</p>
                <p class="en">Way of report sending</p>
              </td>
              <td>
                <span v-if="currentInfo.send==1">自取 <span class="en">Taken by themselves</span></span>
                <span v-else>其他 <span class="en">Other:</span></span>
              </td>
            </tr>
            <tr>
              <td>
                <p>序号</p>
                <p class="en">NO.</p>
              </td>
              <td>
                <p>样品编号</p>
                <p class="en">Sample number</p>
              </td>
              <td>
                <p>试验项目</p>
                <p class="en">Test item</p>
              </td>
              <td>
                <p>检验依据</p>
                <p class="en">Test standard</p>
              </td>
              <td>
                <p>备注</p>
                <p class="en">Note</p>
              </td>
            </tr>
            <tr v-for="(item,index) in currentInfo.sampleItems
    " :key="index" >
              <td>{{ index+1 }}</td>
              <td>
                <p>{{ item.code }}</p>
                <p>{{ item.model }}</p>
              </td>
              <td>{{ item.product }}</td>
              <td>{{ item.standardMethodList }}</td>
              <td>{{ item.remark }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>判定规则</p>
                <p class="en">Criterion rule</p>
              </td>
              <td colspan="3">
                <span v-if="currentInfo.rule&&!currentInfo.rule.includes('-')">不考虑不确定度 <span class="en">Not considering uncertainty</span></span>
                <span v-else-if="currentInfo.rule&&currentInfo.rule.includes('-')">考虑不确定度 <span class="en">Consider uncertainty ( {{currentInfo.rule.split('-')[1]}}%)</span></span>
                <span v-else>/</span>
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <p>委托人签名</p>
                <p class="en">Signature of consignor</p>
              </td>
              <td>
                <img style="height: 100%;" :src="javaApi+'/img/'+currentInfo.prepareUserUrl" :alt="currentInfo.prepareUser" />
              </td>
              <td>
                <p>委托日期</p>
                <p class="en">Date of consignation</p>
              </td>
              <td>{{ currentInfo.createTime }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>委托人联系电话</p>
                <p class="en">Contact number</p>
              </td>
              <td colspan="3">{{ currentInfo.phone }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>综合室签名</p>
                <p class="en">Signature of general office</p>
              </td>
              <td><img style="height: 100%;" :src="javaApi+'/img/'+currentInfo.comprehensiveUserUrl" :alt="currentInfo.comprehensiveUser" /></td>
              <td>
                <p>接收日期</p>
                <p class="en">Receipt date</p>
              </td>
              <td>{{ currentInfo.comprehensiveTime }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>领样员签名</p>
                <p class="en">Signature of sample taker</p>
              </td>
              <td><img :src="javaApi+'/img/'+currentInfo.issueUserUrl" :alt="currentInfo.issueUser" style="height: 100%;" /></td>
              <td>
                <p>领样日期</p>
                <p class="en">Sample date</p>
              </td>
              <td>{{ currentInfo.issueTime }}</td>
            </tr>
            <tr>
              <td rowspan="3" colspan="2">
                <p>检测机构信息</p>
                <p class="en">Information about Test center</p>
              </td>
              <td colspan="3">
                <p>江苏中天科技股份有限公司检测中心</p>
                <p class="en">Test cnter of Jiangsu ZhongtianTechnology CO.,Ltd</p>
              </td>
            </tr>
            <tr>
              <td colspan="3">
                <p>地址:江苏省如东县河口镇中天路1号</p>
                <p class="en">Address:No.1,Zhongtian Village,Hekou Town,Rudong County,Nantong City,JiangsuProvince</p>
              </td>
            </tr>
            <tr>
              <td colspan="3">
                <p>电话:0513-84885175</p>
                <p class="en">Telephone:0513-84885175</p>
              </td>
            </tr>
          </table>
          <p style="margin-top: 10px;margin-left: 20px;">注:本检验委托单一式二份,一份综合室归档,一份委托单位留存。</p>
          <p class="en" style="margin-left: 20px;">Note:The commission list of testing is done in duplicate, general office and client shall retain their respective one.</p>
        </div>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import ValueTable from '../tool/value-table.vue'
export default {
  components: {
    ValueTable
  },
  data() {
    return {
      title:'检验委托单',
      detailDialogVisible:false,
      addLoading:false,
      addDialogVisible:false,
      outLoading:false,
      componentData: {
        entity: {
          sample: null,
          company: null,
          production:null,
          prepareUser:null,
          orderBy: {
            field: 'createTime',
            order: 'desc'
          }
        },
        isIndex: true,
        showSelect: false,
        select: false,
        do: [{
          id: 'handleLook',
          font: '查看',
          type: 'text',
          method: 'handleLook'
        }, {
          id: 'handleDown',
          font: '下载',
          type: 'text',
          method: 'handleDown'
        }, {
          id: 'delete',
          font: '删除',
          type: 'text',
          method: 'doDiy'
        }, {
          id: 'handleWork',
          font: '补充信息',
          type: 'text',
          method: 'handleWork'
        }],
        tagField: {
          insState:{
            select: [
            {
              label: '待审核',
              value: 0
            }, {
              label: '待检验',
              value: 1
            },
            {
              label: '已检验',
              value: 4
            },
            {
              label: '退回',
              value: 2
            },
            {
              label: '撤销',
              value: 3
            },
            ]
          },
          isLeave:{
            select: [
              {
                value:0,
                label:'不留样'
              },
              {
                value:1,
                label:'留样'
              },
            ]
          },
          processing:{
            select: [
            {
                value:0,
                label:'委托单位取回'
              },
              {
                value:1,
                label:'实验室处理'
              },
            ]
          },
        },
        selectField: {
          sendUser:{
            select: []
          },
          signatory:{
            select: []
          },
        },
        requiredAdd: [],
        requiredUp: [],
        needSort: [],
        inputType: ''
      },
      entityCopy: {},
      upIndex: 0,
      currentInfo:{},
      personList:[],
      addInfo:{},
      insStateList:[
      {
        label: '待审核',
        value: 0
      }, {
        label: '待检验',
        value: 1
      },
      {
        label: '已检验',
        value: 4
      },
      {
        label: '退回',
        value: 2
      },
      {
        label: '撤销',
        value: 3
      },
      ]
    };
  },
  mounted() {
    this.entityCopy = this.HaveJson(this.componentData.entity);
    this.getPower()
    this.getAuthorizedPerson()
  },
  methods: {
    getPower(){
      let power = JSON.parse(sessionStorage.getItem('power'))
      let del = false
      for (var i = 0; i < power.length; i++) {
        if (power[i].menuMethod == 'delProcessOrder') {
          del = true
        }
      }
      if (!del) {
        this.componentData.do.splice(2, 1)
      }
    },
    refreshTable() {
      this.$refs['ValueTable'].selectList()
    },
    refresh() {
      this.componentData.entity = this.HaveJson(this.entityCopy)
      this.upIndex++
      this.refreshTable()
    },
    // å¯¼å‡º
    handleDown(row) {
      // this.$axios.post(this.$api.processOrder.getProcessOrder,{id:row.id}).then(res => {
      //   if(res.code==200){
      //     this.currentInfo = res.data
      //     this.title = '下载';
      //     this.detailDialogVisible = true
      //     setTimeout(() => {
      //     this.$nextTick(() => {
      //       const element = document.getElementById("dialogBody");
      //       exportHtmlToPDF(element,row.sample+'-'+row.sampleType+'-'+'检验委托单').then(res=>{
      //         this.detailDialogVisible = false
      //       })
      //     })
      //   }, 500);
      //   }
      // }).catch(err => {
      // })
      this.$axios.post(this.$api.processOrder.exportInspectionOrder,{id:row.id},{responseType: 'blob'}).then(res => {
        this.$message.success('导出成功')
        const blob = new Blob([res], {
          type: 'application/force-download'
        })
        const filename = decodeURI(row.sample+'-'+row.sampleType+'-'+'检验委托单.docx')
        // åˆ›å»ºä¸€ä¸ªè¶…链接,将文件流赋进去,然后实现这个超链接的单击事件
        const elink = document.createElement('a')
        elink.download = filename
        elink.style.display = 'none'
        elink.href = URL.createObjectURL(blob)
        document.body.appendChild(elink)
        elink.click();
        URL.revokeObjectURL(elink.href) // é‡Šæ”¾URL å¯¹è±¡
        document.body.removeChild(elink)
      }).catch(err => {
      })
    },
    // è¡¥å……
    handleWork(row){
      this.addInfo = {...row}
      this.currentInfo = row;
      this.addDialogVisible = true;
    },
    // äººå‘˜åˆ—表
    getAuthorizedPerson() {
      this.$axios.get(this.$api.user.getUserMenu).then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.name,
            value: a.id
          })
        })
        this.personList = data
      })
    },
    // è¡¥å……保存
    handleAdd(){
      if(this.addInfo.rule=='考虑不确定度'&&!this.addInfo.num){
        return this.$message({
          type: 'error',
          message: '请输入考虑不确定度'
        });
      }else if(this.addInfo.rule=='考虑不确定度'&&this.addInfo.num){
        this.addInfo.rule = '考虑不确定度-'+this.addInfo.num
      }
      this.addLoading = true;
      this.$axios.post(this.$api.processOrder.doProcessOrder, {id:this.currentInfo.id,...this.addInfo},{headers: { 'Content-Type': 'application/json' },noQs:true}).then(res => {
        this.addLoading = false;
        if(res.code==201){
          return
        }
        this.$message({
          type: 'success',
          message: '补充成功'
        });
        this.refreshTable()
        this.addDialogVisible = false;
      }).catch(err => {
      })
    },
    // æŸ¥çœ‹
    handleLook(row){
      this.$axios.post(this.$api.processOrder.getProcessOrder,{id:row.id}).then(res => {
        if(res.code==200){
          this.currentInfo = res.data
          this.title = '检验委托单';
          this.detailDialogVisible = true
        }
      }).catch(err => {
      })
    },
  },
}
</script>
<style scoped>
.title {
    height: 60px;
    line-height: 60px;
  }
  .search {
    background-color: #fff;
    height: 80px;
    display: flex;
    align-items: center;
  }
  .search_thing {
    width: 350px;
    display: flex;
    align-items: center;
  }
  .search_label {
    width: 110px;
    font-size: 14px;
    text-align: right;
  }
  .search_input {
    width: calc(100% - 110px);
  }
  .table {
    margin-top: 10px;
    background-color: #fff;
    width: calc(100% - 40px);
    height: calc(100% - 60px - 80px - 10px - 40px);
    padding: 20px;
  }
  .tables {
    table-layout: fixed;
    width: 100%;
    margin-top: 10px;
  }
  .tables td {
    height: 40px;
    width: 100px;
    text-align: center;
    font-size: 14px;
    word-wrap: break-word;
    white-space: normal;
  }
  .en{
    font-size: 12px;
    word-break: break-word; /* è‡ªåŠ¨æ–­è¡Œ */
    overflow-wrap: break-word; /* é˜²æ­¢æº¢å‡º */
    white-space: normal; /* é»˜è®¤æ¢è¡Œ */
  }
  .heads td {
    border: 1px dashed black; /* å•元格的虚线 */
    padding: 8px;
    text-align: left;
  }
  .downPdf{
    opacity: 0 !important;
  }
</style>
static/img/logo2.png