value
2023-09-07 523d7a54fb07fdf756fbc4faa5eb7fef7263a556
src/views/inspectionManagement/commissionInspection/index.vue
@@ -1,36 +1,45 @@
<template>
   <div>
      <div v-if="!showDetail">
      <div>
         <div class="content-main">
            <div class="top-bar">
               <el-form ref="form" :inline="true" :model="searchData">
                  <el-form-item label="委托编号:" class="sermargin">
                     <el-input v-model="searchData.code" class="input-form" placeholder="请输入">
                     <el-input size="small" v-model="searchData.code" class="input-form" placeholder="请输入">
                     </el-input>
                  </el-form-item>
                  <el-form-item label="样品名称:" class="sermargin">
                     <el-input v-model="searchData.name" class="input-form" placeholder="请输入">
                     <el-input size="small" v-model="searchData.name" class="input-form" placeholder="请输入">
                     </el-input>
                  </el-form-item>
                  <el-form-item label="委托单位:" style="margin-right: 20px;">
                     <el-select v-model="searchData.department" placeholder="全部">
                     <el-select v-model="searchData.department" placeholder="全部" size="small">
                        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
                        </el-option>
                     </el-select>
                  </el-form-item>
                  <el-form-item>
                     <el-button type="primary" @click="search">查询</el-button>
                     <el-button type="primary" plain @click="reset">重置</el-button>
                     <el-button type="primary" size="small" @click="search">查询</el-button>
                     <el-button type="primary" size="small" plain @click="reset">重置</el-button>
                  </el-form-item>
               </el-form>
               <el-form>
                  <el-popover placement="left" width="130" trigger="click">
                  <el-popover placement="left" width="410" trigger="click">
                     <div class="vue_qr_div">
                        <span style="color: #0078ff;">扫描二维码<br />获取委托单</span>
                        <vue-qr :text="viewId" :size="100" :margin="0" style="margin-top: 10px;">
                        </vue-qr>
                        <el-row>
                           <el-col>
                              <el-input v-model="view" readonly size="medium" style="width: 250px;margin-right: 10px;"></el-input>
                              <el-button size="small" type="primary" @click="viewDia=true">生成</el-button>
                              <el-button size="small" type="primary" @click="copy">复制</el-button>
                           </el-col>
                        </el-row>
                        <el-row style="margin-top: 10px;">
                           <el-col v-if="viewId==null">当前链接已过期,请点击生成按钮重新生成</el-col>
                           <el-col
                              v-else-if="viewId!=null">当前链接将在{{(parseInt(viewTime2)/60/60)>1?(parseInt(viewTime2)/60/60).toFixed(1)+'小时':Math.round(parseInt(viewTime2)/60)+'分钟'}}后过期</el-col>
                        </el-row>
                     </div>
                     <el-button slot="reference" class="rightBtn" type="primary" @click="goToaddCommision">新增委托</el-button>
                     <el-button size="small" slot="reference" class="rightBtn" type="primary" @click="goToaddCommision">新增委托</el-button>
                  </el-popover>
               </el-form>
            </div>
@@ -44,32 +53,31 @@
                     </el-radio-group>
                  </div>
                  <div class="generateInsp">
                     <el-button type="primary" size="mini" icon="el-icon-document"
                     <el-button @click="addReportBtn" type="primary" size="mini" icon="el-icon-document"
                        style="background-color: rgb(1, 102, 226);">生成报检单</el-button>
                  </div>
               </div>
               <div class="table-box">
                  <el-table ref="commisionTable" :max-height="800" :cell-style="{textAlign: 'center'}"
                     :header-cell-style="{border:'0px',background:'#f5f7fa',color:'#606266',boxShadow: 'inset 0 1px 0 #ebeef5',textAlign: 'center'}"
                     :data="commisionTable" style="width: 100%">
                     <el-table-column type="selection" min-width="10%" />
                  <el-table ref="commisionTable" :max-height="800" :cell-style="{textAlign: 'left'}"
                     :header-cell-style="{border:'0px',background:'#f5f7fa',color:'#606266',boxShadow: 'inset 0 1px 0 #ebeef5',textAlign: 'left'}"
                     :data="commisionTable" @selection-change="handleSelectionChange" style="width: 100%">
                     <el-table-column type="selection" :selectable="checkSelect" min-width="10%" />
                     <el-table-column type="index" label="序号" min-width="10%" />
                     <el-table-column prop="entrust_coding" label="委托编号" min-width="10%" />
                     <el-table-column prop="entrusted" label="委托单位" min-width="12%" />
                     <el-table-column prop="samples_number" label="样品编号" min-width="8%" />
                     <el-table-column prop="samples_number" label="样品数量" min-width="8%" />
                     <el-table-column prop="sample_name" label="样品名称" min-width="8%" />
                     <el-table-column prop="specifications_models" label="规格型号" min-width="12%" />
                     <el-table-column prop="dateSurvey" label="送达时间" min-width="8%" />
                     <el-table-column prop="speName" label="规格型号" min-width="12%" />
                     <el-table-column prop="inspectionTime" label="送样时间" min-width="8%" />
                     <el-table-column prop="completionDeadline" label="完成期限" min-width="8%" />
                     <el-table-column prop="contacts" label="委托编制人" min-width="8%" />
                     <el-table-column prop="inspectionTime" label="检验日期" min-width="8%" />
                     <el-table-column prop="inspection_status" label="状态" min-width="8%">
                        <template slot-scope="scope">
                           <div v-if="scope.row.inspection_status === 1">
                              <span style="color: green;">已检测</span>
                           <div v-if="scope.row.inspection_status === 2">
                              <span style="color: green;">已报检</span>
                           </div>
                           <div v-else>
                              <span style="color: red;">待检测</span>
                              <span style="color: red;">未报检</span>
                           </div>
                        </template>
                     </el-table-column>
@@ -90,9 +98,57 @@
            </div>
         </div>
      </div>
      <div v-else>
         <router-view />
      </div>
      <el-dialog title="链接时长设置" :visible.sync="viewDia" width="30%">
         <div>
            <el-row style="line-height: 46px;">
               <el-col :span="6" style="font-size: 14px;text-align: right;">时长设置:</el-col>
               <el-col :span="14" :offset="1">
                  <el-select v-model="viewTime" size="medium">
                     <el-option label="1 天" :value="1"></el-option>
                     <el-option label="2 天" :value="2"></el-option>
                     <el-option label="3 天" :value="3"></el-option>
                     <el-option label="4 天" :value="4"></el-option>
                     <el-option label="5 天" :value="5"></el-option>
                     <el-option label="6 天" :value="6"></el-option>
                     <el-option label="1 周" :value="7"></el-option>
                  </el-select>
               </el-col>
            </el-row>
         </div>
         <span slot="footer" class="dialog-footer">
            <el-button type="primary" @click="getViewId()">提 交</el-button>
            <el-button @click="viewDia = false">取 消</el-button>
         </span>
      </el-dialog>
      <!-- 隐藏域输入框用来复制 -->
      <input id="copyContext" style="position: absolute;top: 0;left: 0;opacity: 0;z-index: -10;" />
      <el-dialog title="选择日期" :visible.sync="addReportDialog" width="60%">
         <el-form :model="addInspectionForm" :rules="addInspectionFormRules" ref="addInspectionForm">
            <el-form-item label="检验日期" label-width="100px" prop="inspectionDate">
               <el-date-picker v-model="addInspectionForm.inspectionDate" type="daterange" value-format="yyyy-MM-dd"
                  range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
               </el-date-picker>
            </el-form-item>
            <el-form-item label="当前版本" label-width="100px" prop="version">
               <el-select @change="changeVersionFun" v-model="addInspectionForm.version" placeholder="请选择版本">
                  <el-option v-for="item in chooseVersion" :key="item.value" :label="item.label" :value="item.value" ></el-option>
               </el-select>
            </el-form-item>
         </el-form>
         <el-table
            style="width:90%;margin-left:5%" :data="standardLibraryData" row-key="id" border
            default-expand-all :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
            <el-table-column type="index" width="50px" label="序号"></el-table-column>
            <el-table-column label="项目名称" prop="name" sortable></el-table-column>
            <el-table-column prop="unit" label="单位" sortable></el-table-column>
            <el-table-column label="标准值" prop="required" sortable></el-table-column>
            <el-table-column prop="internal" label="内控值" sortable></el-table-column>
         </el-table>
         <div slot="footer" class="dialog-footer">
            <el-button @click="resetForm('addInspectionForm')">取 消</el-button>
            <el-button type="primary" @click="confirmBtn('addInspectionForm')">确 定</el-button>
         </div>
      </el-dialog>
   </div>
</template>
@@ -100,15 +156,30 @@
   import {
      getCommisionList,
      getViewUUID,
      selectViewUUID
      selectViewUUID,
      delLink,
      chooseVersion,
      lookProByVer,
      addInspect
   } from '@/api/inspection/commisioninspection'
   import vueQr from 'vue-qr'
   export default {
      components: {
         vueQr
      },
      data() {
         return {
            standardLibraryData:[],
              chooseVersion: [],
            addInspectionForm: {
               inspectionDate: [],
               version: null
            },
            addInspectionFormRules: {
               inspectionDate: [{
                  required: true,
                  message: '请选择日期区间',
                  trigger: 'change'
               }],
            },
            addReportDialog: false,
            checkData: [],
            form: [],
            searchData: {
               code: '',
@@ -119,7 +190,7 @@
               value: '1',
               label: '部门1'
            }],
            radioValue: 0,
            radioValue: null,
            commisionTable: [{
               specifications_models: "GGXH-AAAAA",
               inspectionTime: "2023-08-03",
@@ -135,15 +206,15 @@
            }],
            conditionsOptions: [{
                  label: '全部',
                  value: 0
                  value: null
               },
               {
                  label: '已检验',
                  value: 1
               },
               {
                  label: '待检验',
                  label: '已报检',
                  value: 2
               },
               {
                  label: '未报检',
                  value: 1
               }
            ],
            currentPage: 1,
@@ -151,7 +222,18 @@
            total: 100,
            showDetail: false,
            day: 1,
            viewId: ''
            view: null,
            viewId: null,
            viewTime: 1,
            viewTime2: 1,
            viewDia: false
         }
      },
      watch:{
         addReportDialog(newVal){
            if(newVal === false){
               this.resetForm("addInspectionForm");
            }
         }
      },
      created() {
@@ -159,11 +241,129 @@
      },
      updated() {
         if (this.$router.currentRoute.name === 'AddCommision') {
            // console.log(this.$router.currentRoute.name)
            this.showDetail = true
         }
      },
      methods: {
         resetForm(formName) {
            this.addInspectionForm.inspectionDate = [],
            this.$refs[formName].resetFields();
            this.addReportDialog = false
         },
         checkSelect(row) {
            if (row.type === 1) {
               return false;
            } else {
               return true;
            }
         },
         handleSelectionChange(val) {
            if (val.length > 1) {
               let data = val.pop();
               this.$refs.commisionTable.clearSelection();
               this.$refs.commisionTable.toggleRowSelection(data);
               this.checkData = data;
            }else{
               this.checkData = val;
            }
         },
         //生成报检单确认按钮
         confirmBtn(formName) {
            this.$refs[formName].validate((valid)=>{
               if(valid){
               let dateArr = this.addInspectionForm.inspectionDate;
               //添加报检单
               let val = this.checkData[0];
               let obj = {
                  "endTime": dateArr[1],
                  "mcode":"mcode",
                  "formTime": val.inspectionTime,
                  "id": val.id,
                  "name": val.sample_name,
                  "num": val.samples_number,
                  "specifications": val.speName,
                  "startTime": dateArr[0],
                  "supplier": val.entrusted,
                  "type": 2,
                  // "unit": "mm",
                  "version": this.addInspectionForm.version
               }
               this.createReport(obj);
               this.addReportDialog = false;
               }
            });
         },
         //生成报检单请求
         async createReport(param) {
            await addInspect(param).then(res =>{
               this.search();
               this.$message.success('报检成功')
               this.$router.push(`/experiment/Viewdetails/${res.data}`)
            }).catch(()=>{
               this.$message.error('报检失败')
            });
         },
         //生成报检单按钮
         addReportBtn() {
            if (this.checkData.length < 1) {
               this.$message.error("请选择一条数据!");
            } else {
               if (this.checkData.length > 1) {
                  this.$message.error("最多选择一条数据!");
               } else {
                  let mcode = this.checkData[0].entrust_coding;
                  let name = this.checkData[0].sample_name;
                  let specifications = this.checkData[0].speName;
                  let id = this.checkData[0].id;
                  this.getChooseVersionFun(mcode,name,specifications,id);
                  this.addReportDialog = true;
               }
            }
         },
         changeVersionFun(){
            let mCode = this.checkData[0].entrust_coding;
            let name = this.checkData[0].sample_name;
            let specifications = this.checkData[0].speName;
            let version = this.addInspectionForm.version;
            let id = this.checkData[0].id;
            this.getProByVersion(mCode,name,specifications,version,id);
         },
         //获取版本下的标准库数据
         async getProByVersion(mCode,name,specifications,version,id){
            var vm = this;
            await lookProByVer({
               id : id,
               mcode : mCode,
               name : name,
               specifications : specifications,
               version: version
            }).then((res)=>{
               var data = res.data;
               for(var i=0;i<data.length;i++){
                  data[i].id = "0" + i;
               }
               vm.standardLibraryData = res.data;
            })
         },
         //获取版本列表
         async getChooseVersionFun(mCode,name,specifications,id){
            var vm = this;
            this.chooseVersion = [];
            await chooseVersion({
            id : id,
            name : name,
            specifications : specifications
            }).then((res)=>{
               vm.getProByVersion(mCode,name,specifications,res.data[0],id);
               for(let i=0;i<res.data.length;i++){
                  vm.chooseVersion.push({
                  value: res.data[i],
                  label: "V"+res.data[i]
                  });
               }
               vm.addInspectionForm.version = res.data[0];
            });
         },
         async getCommisionList() {
            const res = await getCommisionList({
               pageNo: this.currentPage,
@@ -171,7 +371,6 @@
            })
            this.commisionTable = res.data.row
            this.total = res.data.total
            // console.log(res)
            // 获取所有的委托单位名称
            const allDepartmentNames = [...new Set(this.commisionTable.map(item => item.entrusted))]
            // 将allDepartmentNames转换为options需要的格式
@@ -203,11 +402,9 @@
                  inspectionStatus: this.radioValue
               })
            }
            // console.log(res)
            this.commisionTable = res.data.row
            this.total = res.data.total
         },
         // 重置方法
         reset() {
            // 重置搜索条件
@@ -220,24 +417,29 @@
         },
         async radioclick() {
            // 处理点击radio的时间
            console.log('radioValue', this.radioValue)
            if (this.radioValue === 0) {
               this.getCommisionList()
            } else {
               const res = await getCommisionList({
                  pageNo: this.currentPage,
                  pageSize: this.pageSize,
                  inspectionStatus: this.radioValue
               })
               // console.log(res)
               this.commisionTable = res.data.row
               this.total = res.data.total
            } else if(this.radioValue === 1) {
               const res = await getCommisionList({
                  pageNo: this.currentPage,
                  pageSize: this.pageSize,
                  inspectionStatus: this.radioValue
               })
               this.commisionTable = res.data.row
               this.total = res.data.total
            }else{
               this.getCommisionList();
            }
         },
         // 每页条数改变时触发 选择一页显示多少行
         async handleSizeChange(val) {
            // console.log(`每页 ${val} 条`)
            this.currentPage = 1
            this.pageSize = val
            if (this.radioValue === 0) {
@@ -254,7 +456,6 @@
         },
         // 当前页改变时触发 跳转其他页
         async handleCurrentChange(val) {
            // console.log(`当前页: ${val}`)
            this.currentPage = val
            if (this.radioValue === 0) {
               this.getCommisionList()
@@ -269,28 +470,115 @@
            }
         },
         goToaddCommision() {
            // this.$router.push('/inspectionManagement/commissionInspection/addCommision')
            // this.showDetail = true
            selectViewUUID({
               day: this.day
            }).then(res => {
               this.view = `${this.vueIp}/#/addCommision/${res.data.id}`
               this.viewId = res.data.id
               this.viewTime2 = res.data.time
            })
         },
         getViewId() {
            getViewUUID({
               day: this.viewTime == null ? 1 : this.viewTime
            }).then(res => {
               this.viewId = res.data
               this.view = `${this.vueIp}/#/addCommision/${res.data.id}`
               this.viewDia = false
               this.$message.success('链接已生成,点击复制按钮进行复制')
            })
         },
         copy() {
            document.getElementById('copyContext').value = this.view
            const input = document.querySelector('#copyContext');
            input.select()
            if (document.execCommand('copy')) {
               this.$message.success('已复制到剪贴板')
            }
         },
         handleClick(row){
            delLink({
               id: row.id
            }).then(res=>{
               this.$message.success('删除成功')
               this.getCommisionList()
            })
         }
      }
   }
</script>
<style scoped>
<style scoped lang="scss">
   .top-bar {
      margin: -25px -15px;
      background: #fff;
      display: flex;
      justify-content: space-between;
      padding: 5px 24px 0px 24px;
      padding: 24px 24px 0px 24px;
      .sermargin {
         margin-right: 60px;
      }
      .rightForm {
         display: flex;
         justify-content: space-between;
         /* background-color: #bfa; */
         height: 40px;
         line-height: 40px;
         >div {
            padding: 0px 10px;
            padding-bottom: 10px;
            border: 1px solid rgb(8, 156, 230);
            margin-right: 10px;
            /* height: 40px;
        line-height: 40px; */
         }
         .rightBtn {
            background-color: rgb(1, 102, 226);
         }
      }
   }
   .library-table {
      background-color: #fff;
      flex: 1;
      margin: 0px -15px;
      margin-top: 40px;
      display: flex;
      flex-direction: column;
      .table-header {
         padding: 20px;
         display: flex;
         justify-content: space-between;
         .el-form-item {
            margin-bottom: 30px !important;
         }
      }
      .table-box {
         padding: 0px 20px;
         margin-top: 0px;
         flex: 1;
         background: #fff;
         /* padding: 20px 20px 10px 20px; */
         display: flex;
         flex-direction: column;
         .el-table {
            flex: 1;
         }
         >div:nth-child(2) {
            display: flex;
            justify-content: end;
            margin: 10px 0;
         }
      }
   }
@@ -336,8 +624,9 @@
         }
      }
   }
   .vue_qr_div{
   .vue_qr_div {
      text-align: center;
      color: #0166e2;
   }
</style>
</style>