licp
2024-06-07 32a95699e59c5c65e18c08643266c9cbfa380ee4
src/components/view/b1-inspection-order.vue
@@ -9,22 +9,24 @@
      height: 80px;
      display: flex;
      align-items: center;
    overflow: hidden;
   }
   .search_thing {
      display: flex;
      align-items: center;
      height: 50px;
    width: 230px;
   }
   .search_label {
      width: 120px;
      width: 90px;
      font-size: 14px;
      text-align: right;
   }
   .search_input {
      width: calc(100% - 120px);
      width: calc(100% - 90px);
   }
   .table {
@@ -79,28 +81,73 @@
               </el-col>
            </el-row>
         </div>
         <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.entrustCode" @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.sampleType" @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 class="search" :style="`height: ${more?130:80}px;`">
        <el-row :gutter="10" style="width: 100%;">
          <el-col :span="20" style="display: flex;flex-wrap: wrap;">
            <div class="search_thing" style="width: 20%;">
              <div class="search_label">委托编号:</div>
              <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                  v-model="componentData.entity.entrustCode" @keyup.enter.native="refreshTable()"></el-input></div>
            </div>
            <div class="search_thing" style="width: 20%;">
              <div class="search_label">样品名称:</div>
              <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                  v-model="componentData.entity.sampleType" @keyup.enter.native="refreshTable()"></el-input></div>
            </div>
            <div class="search_thing" style="width: 20%;">
              <div class="search_label">样品型号:</div>
              <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                  v-model="componentData.entity.sampleModel" @keyup.enter.native="refreshTable()"></el-input></div>
            </div>
            <div class="search_thing" style="width: 20%;">
              <div class="search_label">样品编号:</div>
              <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                  v-model="componentData.entity.sampleCode" @keyup.enter.native="refreshTable()"></el-input></div>
            </div>
            <div class="search_thing" style="width: 20%;">
              <div class="search_label">下单时间:</div>
              <div class="search_input">
                <el-date-picker style="width:100%" v-model="componentData.entity.createTime"
                type="date"
                size="small"
                format="yyyy-MM-dd"
                value-format="yyyy-MM-dd HH:mm:ss"
                clearable
                placeholder="选择日期">
                </el-date-picker>
              </div>
            </div>
            <div class="search_thing" style="width: 20%;" v-if="more">
              <div class="search_label">下单人:</div>
              <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                  v-model="componentData.entity.name" @keyup.enter.native="refreshTable()"></el-input></div>
            </div>
            <div class="search_thing" style="width: 20%;" v-if="more">
              <div class="search_label">工程名称:</div>
              <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                  v-model="componentData.entity.engineering" @keyup.enter.native="refreshTable()"></el-input></div>
            </div>
            <div class="search_thing" style="width: 20%;" v-if="more">
              <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>
          </el-col>
          <el-col :span="4">
            <div class="search_thing">
              <el-button type="text" :icon="!more?'el-icon-arrow-down':'el-icon-arrow-up'" style="color: #3A7BFA;" @click="more=!more">{{!more?'更多':'收起'}}</el-button>
              <el-button size="small" @click="refresh()">重 置</el-button>
              <el-button size="small" type="primary" @click="refreshTable()">查 询</el-button>
            </div>
          </el-col>
        </el-row>
         </div>
         <div class="table">
            <ul class="tab">
               <li v-for="(m,i) in tabList" :key="i" :class="{active:i==tabIndex}" @click="handleTab(m,i)">{{m.label}}</li>
            </ul>
            <ValueTable ref="ValueTable" :url="$api.insOrder.selectInsOrderParameter" :componentData="componentData"
               :key="upIndex" style="height: calc(100% - 44px)" />
            <ValueTable :style="getStyle()" ref="ValueTable" :url="$api.insOrder.selectInsOrderParameter" :componentData="componentData"
               :key="'b'+upIndex"  />
         </div>
         <!-- 审核 -->
         <el-dialog title="下单审核" :visible.sync="verifyDialogVisible" width="30%" :before-close="handleClose">
@@ -125,7 +172,7 @@
         <!-- 撤销 -->
         <el-dialog title="下单撤销" :visible.sync="quashDialogVisible" width="30%" :before-close="handleClose">
            <p style="font-size:16px;color:#333333" v-if="!isQuash">委托编号<span
                  style="color:#34BD66">ZTMS2023071001</span>的信息是否撤销</p>
                  style="color:#34BD66">{{this.insOrderRow.entrustCode}}</span>的信息是否撤销</p>
            <el-form :label-position="labelPosition" :model="formData" label-width="150px" ref="ruleForm" v-else>
               <el-form-item label="请输入撤销原因:">
                  <el-input v-model="formData.specificationModel" size="small" style="width:60%"></el-input>
@@ -143,10 +190,10 @@
            </span>
         </el-dialog>
         <!-- 下发 -->
         <el-dialog title="检验下发" :visible.sync="issuedDialogVisible" width="400px" :before-close="handleClose">
         <el-dialog title="检验分配" :visible.sync="issuedDialogVisible" width="400px" :before-close="handleClose">
            <div class="body" style="max-height: 60vh;">
               <el-row>
                  <el-col class="search_thing" :span="22">
                  <el-col class="search_thing" style="width: 95%;">
                     <div class="search_label"><span class="required-span">* </span>约定时间:</div>
                     <div class="search_input">
                        <el-date-picker size="small" v-model="distributeData.appointed" type="date" placeholder="选择日期"
@@ -154,11 +201,11 @@
                        </el-date-picker>
                     </div>
                  </el-col>
                  <el-col class="search_thing" :span="22">
                  <el-col class="search_thing" style="width: 95%;">
                     <div class="search_label"><span class="required-span" v-show="distributeData.type==2">* </span>指派人员:</div>
                     <div class="search_input">
                        <el-select v-model="distributeData.userId" placeholder="请选择" size="small" style="width: 100%;">
                           <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
                        <el-select v-model="distributeData.userId" placeholder="请选择" size="small" style="width: 100%;" clearable filterable>
                           <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
                           </el-option>
                        </el-select>
                     </div>
@@ -172,15 +219,15 @@
               </el-row>
            </span>
         </el-dialog>
         <el-dialog title="数据查看" :visible.sync="dataDialogVisible" width="70%" :before-close="handleClose2">
            <div style="height: 70vh;overflow-y: auto;">
               <ValueTable ref="ValueTableDataLook" :url="$api.deviceScope.selectDeviceParameter"
                  :componentData="componentDataDataLook" :key="upIndex" />
         <el-dialog title="数据查看" :visible.sync="dataDialogVisible" width="80%">
            <div style="height: 70vh;overflow-y: auto;" v-if="dataDialogVisible">
               <ValueTable ref="ValueTableDataLook" :url="$api.insOrder.selectSampleAndProductByOrderId"
                  :componentData="componentDataDataLook"/>
            </div>
         </el-dialog>
      </div>
      <div style="width: 100%;height: 100%;" v-if="active >0">
         <Add :active="active" :currentId="currentId" />
         <Add :active="active" :currentId="currentId" v-if="active<4" />
      </div>
   </div>
</template>
@@ -218,7 +265,13 @@
               entity: {
                  entrustCode: null,
                  sampleType: null,
            sampleName: null,
            sampleModel: null,
            sampleCode: null,
                  state: 0,
            name:null,
            engineering:null,
            production:null,
                  orderBy: {
                     field: 'id',
                     order: 'asc'
@@ -233,7 +286,7 @@
                  type: 'text',
                  method: 'handleDataLook',
                  disabFun: (row, index) => {
                     return row.state != 1
                     return row.state != 1 && row.state != 4
                  }
               }, {
                  id: 'download',
@@ -241,7 +294,7 @@
                  type: 'text',
                  method: 'download',
                  disabFun: (row, index) => {
                     return row.state != 1 || row.reportId == null
                     return row.state != 4 || row.reportId == null
                  }
               }, {
                  id: 'verify',
@@ -257,7 +310,7 @@
                  type: 'text',
                  method: 'handlEquash',
                  disabFun: (row, index) => {
                     return row.state == 2 || row.state == 3
                     return row.state != 1 && row.state != 0
                  }
               }, {
                  font: '分配',
@@ -290,7 +343,37 @@
                  },
                  createUser: {
                     select: []
                  }
                  },
            orderType: {
              select: []
            },
            processing: {
              select: [{
                value: 1,
                label: '实验室处理'
              },{
                value: 0,
                label: '委托单位取回'
              }]
            },
            isLeave: {
              select: [{
                value: 1,
                label: '留样'
              },{
                value: 0,
                label: '不留样'
              }]
            },
            send: {
              select: [{
                value: 1,
                label: '自取'
              },{
                value: 0,
                label: '其他'
              }]
            }
               },
               selectField: {},
               requiredAdd: [],
@@ -298,8 +381,9 @@
            },
            componentDataDataLook: {
               entity: {
                  id: 0,
                  orderBy: {
                     field: 'id',
                     field: 'sampleCode',
                     order: 'asc'
                  }
               },
@@ -308,23 +392,38 @@
               select: false,
               do: [],
               tagField: {
                  deviceStatus: {
                  insState: {
                     select: []
                  },
                  insResult: {
                     select: [{
                        value: 0,
                        type: 'success',
                        label: '正常'
                     }, {
                        value: 1,
                        type: 'warning',
                        label: '报废'
                     }, {
                        value: 2,
                        type: 'danger',
                        label: '保修'
                        label: '合格',
                        type: 'success'
                     },{
                        value: 0,
                        label: '不合格',
                        type: 'danger'
                     }]
                  }
               },
               selectField: {},
          spanConfig:{
            rows:[
              {
                name:'sampleCode',
                index:0
              },
              {
                name:'sample',
                index:1
              },
              {
                name:'model',
                index:2
              }
            ]
          },
               requiredAdd: [],
               requiredUp: []
            },
@@ -353,8 +452,10 @@
               },
            ],
            tabIndex: 0,
            active: 0, //1:下单,2:查看,3:审核
            currentId: null
            active: 0, //1:下单,2:查看,3:审核,4:光纤配置,默认为0
            currentId: null,
        more:false,
        insOrderRow:{}
         }
      },
      mounted() {
@@ -362,6 +463,8 @@
         this.getPower()
         this.getUserMenu()
         this.getAuthorizedPerson()
         this.getInsStateDicts()
      this.selectEnumByCategoryForOrderType()
      },
      methods: {
         getAuthorizedPerson() {
@@ -389,6 +492,7 @@
            let up = false
            let del = false
            let add = false
        let revoke = false
            for (var i = 0; i < power.length; i++) {
               if (power[i].menuMethod == 'upInsOrder') {
                  up = true
@@ -396,10 +500,16 @@
               if (power[i].menuMethod == 'addInsOrder') {
                  add = true
               }
          if (power[i].menuMethod == 'updateStatus') {
             revoke = true
          }
            }
            if (!up) {
               this.componentData.do.splice(4, 1)
            }
        if (!revoke) {
           this.componentData.do.splice(3, 1)
        }
            this.addPower = add
         },
         handleClose() {
@@ -429,10 +539,21 @@
         },
         // 数据查看
         handleDataLook(row) {
            this.componentDataDataLook.entity.id = row.id
            this.dataDialogVisible = true;
         },
         // 下载报告
         download(row) {},
         download(row) {
        let url = row.urlS?row.urlS:row.url;
        if(url){
          url = url.split('.')[0]+'.pdf'
          const link = document.createElement('a');
          link.href = this.javaApi + url;
          link.target = '_blank';
          document.body.appendChild(link);
          link.click();
        }
      },
         // 审核
         handleVerify(row) {
            // this.verifyDialogVisible = true;
@@ -442,6 +563,7 @@
         // 撤销
         handlEquash(row) {
            this.quashDialogVisible = true;
        this.insOrderRow=row
         },
         // 下发
         handleIssued(row) {
@@ -486,6 +608,25 @@
         },
         submitForm() {
            this.upLoad = true;
        if (this.tabIndex==1){
          this.axios.put(this.$api.insOrder.updateInspected+"?id="+this.insOrderRow.id).then(res=>{
            if (res.code===200){
              this.upLoad=false
              this.quashDialogVisible=false
              this.refreshTable()
              this.$message.success("更新成功")
            }
          })
        }else{
          this.axios.put(this.$api.insOrder.updateStatus+"?id="+this.insOrderRow.id).then(res=>{
            if (res.code===200){
              this.upLoad = false
              this.quashDialogVisible = false
              this.refreshTable()
              this.$message.success("更新成功")
            }
          })
        }
            let authorizedPerson = this.formData.authorizedPerson.length > 0 ? this.formData.authorizedPerson.join(',') : ''
            delete this.formData.createTime
            delete this.formData.updateTime
@@ -513,7 +654,36 @@
               })
               this.componentData.tagField.createUser.select = data
            })
         }
         },
         getInsStateDicts() {
            this.$axios.post(this.$api.enums.selectEnumByCategory, {
               category: "检验任务状态"
            }).then(res => {
               let data = res.data
               this.insStateList = data
               data.forEach(ele => {
                  //0:待检验 1:检验中 2:已检验 3:待复核 4:复核未通过 5:复核通过
                  if (['2', '5'].includes(ele.value)) {
                     ele.type = 'success'
                  } else if (['1', '3'].includes(ele.value)) {
                     ele.type = 'warning'
                  } else if (['0', '4'].includes(ele.value)) {
                     ele.type = 'danger'
                  }
               })
               this.componentDataDataLook.tagField.insState.select = data
            })
         },
      selectEnumByCategoryForOrderType() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "检验类别"
        }).then(res => {
          this.componentData.tagField.orderType.select = res.data
        })
      },
      getStyle(){
        return 'height: calc(100% - '+(this.more?'94':'44')+'px)'
      }
      }
   }
</script>