value
2023-09-07 523d7a54fb07fdf756fbc4faa5eb7fef7263a556
src/views/experiment/planAssignments/plan.vue
@@ -17,11 +17,11 @@
      margin: 10px;
      padding: 15px;
      background-color: white;
      height: calc(100vh - 15vh);
      height: calc(100vh - 18vh);
      overflow-y: auto;
   }
   .order_num{
   .order_num {
      border-radius: 1rem;
      width: 35px;
      height: 25px;
@@ -44,53 +44,100 @@
<template>
   <div class="plan">
      <div class="title">
         <span>项目名称:</span>
         <el-input v-model="search.name" size="medium" style="width: 200px;margin-right: 20px;"></el-input>
         <span>检验时间:</span>
         <el-date-picker v-model="search.date" type="daterange" range-separator="至" start-placeholder="开始日期"
            end-placeholder="结束日期" size="medium" style="margin-right: 20px;">
         </el-date-picker>
         <span>检验人:</span>
         <el-input v-model="search.userName" size="medium" style="width: 200px;margin-right: 20px;"></el-input>
         <el-button size="small" type="primary">查询</el-button>
         <el-button size="small">重置</el-button>
         <el-form :model="search" :inline="true" label-position="left">
            <el-form-item prop="code" label="申请单编号:" width="200" style="margin: 20px 10px;">
               <el-input v-model="search.code" size="small" ></el-input>
            </el-form-item>
            <el-form-item prop="date" label="检验时间:" width="200" style="margin: 20px 10px;">
               <el-date-picker v-model="search.date" type="daterange" range-separator="至" start-placeholder="开始日期"
                  end-placeholder="结束日期" size="small" value-format="yyyy-MM-dd" style="margin-right: 20px;">
               </el-date-picker>
            </el-form-item>
            <el-form-item prop="testValue" label="检验结果:" width="200" style="margin: 20px 10px;">
               <el-select v-model="search.testValue" size="small">
                  <el-option label="全部" :value="null"></el-option>
                  <el-option label="合格" :value="1"></el-option>
                  <el-option label="不合格" :value="0"></el-option>
               </el-select>
            </el-form-item>
         </el-form>
         <el-button size="small" type="primary" @click="selectDataList">查询</el-button>
         <el-button size="small" @click="cleanBtn">重置</el-button>
      </div>
      <div class="thing">
         <el-table :data="tableData" style="width: 100%;" row-key="id" default-expand-all
         <el-table :data="tableData" style="width: 100%;" row-key="code" default-expand-all
            :tree-props="{children: 'children', hasChildren: 'hasChildren'}" :key="upIndex">
            <el-table-column type="index" width="50" label="序号">
            </el-table-column>
            <el-table-column prop="date" label="申请单号">
            <el-table-column prop="code" label="申请单号" width="250px">
               <template slot-scope="scope">
                  <div style="display: flex;">
                     <div v-if="scope.row.code=='01'" style="color: #3caaff;background-color: #eff5ff;" class="order_num">01</div>
                     <div v-else-if="scope.row.code=='02'" style="color: #57c981;background-color: #f1fbf4;" class="order_num">02</div>
                     <div v-else-if="scope.row.code=='03'" style="color: #dfa8fb;background-color: #faf2ff;" class="order_num">03</div>
                     <div>{{scope.row.date}}</div>
                     <div v-if="scope.row.orderNum=='01'" style="color: #3caaff;background-color: #eff5ff;" class="order_num">
                        01
                     </div>
                     <div v-else-if="scope.row.orderNum=='02'" style="color: #57c981;background-color: #f1fbf4;"
                        class="order_num">
                        02</div>
                     <div v-else-if="scope.row.orderNum=='03'" style="color: #dfa8fb;background-color: #faf2ff;"
                        class="order_num">
                        03</div>
                     <div>{{scope.row.code}}</div>
                  </div>
               </template>
            </el-table-column>
            <el-table-column prop="name" label="检验结果">
            <el-table-column prop="name" label="名称" width="200px">
            </el-table-column>
            <el-table-column prop="address" label="地址">
            <el-table-column prop="unit" label="单位">
            </el-table-column>
            <el-table-column label="操作" width="80">
            <el-table-column prop="required" label="要求值">
            </el-table-column>
            <el-table-column prop="internal" label="内控值">
            </el-table-column>
            <el-table-column prop="testValue" label="检验值">
            </el-table-column>
            <el-table-column prop="checker" label="执行人">
            </el-table-column>
            <el-table-column prop="instrumentname" label="检验设备">
            </el-table-column>
            <el-table-column prop="testState" label="检验状态" width="100px">
               <template slot-scope="scope">
                  <el-button size="mini" type="primary" v-if="isIfReport(scope.row)">上报</el-button>
                  <el-button size="mini" type="warning" @click="openUpDia(scope.row)"
                     v-else-if="scope.row.code=='03'&&scope.row.insId==undefined&&scope.row.address==null">分配</el-button>
                  <el-button size="mini" type="success" @click="openUpInsDia(scope.row)"
                     v-else-if="scope.row.code=='03'&&scope.row.insId==undefined&&scope.row.name==null">检验</el-button>
                  <el-tag type="success" effect="dark" v-if="scope.row.children!=undefined&&scope.row.testState!=null">已上报</el-tag>
                  <el-tag type="danger" effect="dark" v-else-if="scope.row.children!=undefined&&scope.row.testState==null">未上报</el-tag>
                  <el-tag type="success" v-else-if="scope.row.children==undefined&&scope.row.testState!=null">已检验</el-tag>
                  <el-tag type="danger" v-else-if="scope.row.children==undefined&&scope.row.testState==null">未检验</el-tag>
               </template>
            </el-table-column>
            <el-table-column prop="startTime" label="检验开始" width="100px">
            </el-table-column>
            <el-table-column prop="endTime" label="检验结束" width="100px">
            </el-table-column>
            <el-table-column label="操作" width="150">
               <template slot-scope="scope">
                  <el-button size="mini" :disabled="!isIfReport(scope.row)" type="primary" v-if="scope.row.orderNum == '01'"
                     @click="addReported(scope.row.id)">上报</el-button>
                  <el-button size="mini" type="text" @click="openUpDia(scope.row)"
                     v-if="scope.row.orderNum=='02'&&scope.row.children==undefined&&scope.row.testState==null">分配</el-button>
                  <el-button size="mini" type="text" @click="openUpInsDia(scope.row)"
                     v-if="scope.row.orderNum=='02'&&scope.row.children==undefined&&scope.row.testState==null">检验</el-button>
               </template>
            </el-table-column>
         </el-table>
      </div>
      <el-dialog title="分配设备和人员" :visible.sync="upDia" width="500px" top="30vh">
         <div class="body">
            <el-row style="line-height: 46px;">
            <el-row style="line-height: 50px;">
               <el-col :span="4" style="font-size: 14px;text-align: right;">人员:</el-col>
               <el-col :span="16" :offset="1">
                  <el-input v-model="upData.address" size="small" clearable></el-input>
                  <el-select @change="selectChecker" v-model="upData.checker" size="medium" clearable style="width: 100%;">
                     <el-option v-for="(a, ai) in users" :key="ai" :label="a.name" :value="a.id"></el-option>
                  </el-select>
               </el-col>
            </el-row>
            <el-row style="line-height: 50px;">
               <el-col :span="4" style="font-size: 14px;text-align: right;">设备:</el-col>
               <el-col :span="16" :offset="1">
                  <el-cascader v-model="upData.device" :options="devices" size="medium" style="width: 100%;" clearable
                     :props="{label: 'name',value: 'id',emitPath: false}" :show-all-levels="false"></el-cascader>
               </el-col>
            </el-row>
         </div>
@@ -99,32 +146,40 @@
            <el-button @click="upDia = false">取 消</el-button>
         </span>
      </el-dialog>
      <el-dialog title="检验" :visible.sync="upInsDia" width="500px">
      <el-dialog title="检验" :visible.sync="upInsDia" width="600px">
         <div class="body" style="max-height: 50vh;overflow-y: auto;">
            <el-row style="line-height: 46px;">
               <el-col :span="4" style="font-size: 14px;text-align: right;">样品编码:</el-col>
               <el-col :span="8">{{upData.date}}</el-col>
               <el-col :span="4" style="font-size: 14px;text-align: right;">样品名称:</el-col>
               <el-col :span="8">{{upData.date}}</el-col>
               <el-col :span="5" style="font-size: 14px;text-align: right;">申请单编码:</el-col>
               <el-col :span="7">{{upData.insId}}</el-col>
               <el-col :span="5" style="font-size: 14px;text-align: right;">样品名称:</el-col>
               <el-col :span="7">{{upData.productName}}</el-col>
            </el-row>
            <el-row style="line-height: 46px;">
               <el-col :span="4" style="font-size: 14px;text-align: right;">检验项目:</el-col>
               <el-col :span="8">{{upData.date}}</el-col>
               <el-col :span="4" style="font-size: 14px;text-align: right;">单位:</el-col>
               <el-col :span="8">{{upData.date}}</el-col>
               <el-col :span="5" style="font-size: 14px;text-align: right;">检验项目:</el-col>
               <el-col :span="7">{{upData.name}}</el-col>
               <el-col :span="5" style="font-size: 14px;text-align: right;">单位:</el-col>
               <el-col :span="7">{{upData.unit}}</el-col>
            </el-row>
            <el-row style="line-height: 46px;">
               <el-col :span="4" style="font-size: 14px;text-align: right;">标准值:</el-col>
               <el-col :span="8">{{upData.date}}</el-col>
               <el-col :span="4" style="font-size: 14px;text-align: right;">内控值:</el-col>
               <el-col :span="8">{{upData.date}}</el-col>
               <el-col :span="5" style="font-size: 14px;text-align: right;">标准值:</el-col>
               <el-col :span="7">{{upData.required}}</el-col>
               <el-col :span="5" style="font-size: 14px;text-align: right;">内控值:</el-col>
               <el-col :span="7">{{upData.internal}}</el-col>
            </el-row>
            <el-row style="line-height: 46px;">
               <el-col :span="5" style="font-size: 14px;text-align: right;">检验结果:</el-col>
               <el-col :span="7">
                  <el-tag type="success" v-if="upData.testState==1">合格</el-tag>
                  <el-tag type="danger" v-else-if="upData.testState==0">不合格</el-tag>
                  <el-tag type="info" v-else>无结果</el-tag>
               </el-col>
            </el-row>
            <el-row style="line-height: 46px;">
               <el-col style="text-align: right;"><el-button size="mini" @click="addRes">添加检验值</el-button></el-col>
            </el-row>
            <el-row>
               <el-col>
                  <el-table :data="upData.res" border style="width: 99.9%;" :key="upIndex2">
                  <el-table :data="upData.testValue" border style="width: 99.9%;" :key="upIndex2">
                     <el-table-column type="index" width="100" label="序号">
                     </el-table-column>
                     <el-table-column label="检验值">
@@ -134,10 +189,10 @@
                           </el-input>
                        </template>
                     </el-table-column>
                     <el-table-column label="操作" width="60">
                     <el-table-column label="操作" width="80">
                        <template slot-scope="scope">
                           <el-button size="mini" type="text"
                              @click.native.prevent="deleteRow(scope.$index, upData.res)">删除</el-button>
                              @click.native.prevent="deleteRow(scope.$index, upData.testValue)">删除</el-button>
                        </template>
                     </el-table-column>
                  </el-table>
@@ -145,7 +200,7 @@
            </el-row>
         </div>
         <span slot="footer" class="dialog-footer">
            <el-button type="primary" @click="submitUpData">提 交</el-button>
            <el-button type="primary" @click="submitUpData2">提 交</el-button>
            <el-button @click="upInsDia = false">取 消</el-button>
         </span>
      </el-dialog>
@@ -153,133 +208,186 @@
</template>
<script>
   import {
      get,
      post,
      wpost,
      postFile
   } from "@/api/util/requestUtil.js"
   export default {
      data() {
         return {
            search: {
               name: null,
               code: null,
               date: [],
               userName: null,
               testValue: null,
            },
            tableData: [{
               id: 1,
               insId: 123,
               date: '2016-05-02',
               name: null,
               address: '上海市普陀区金沙江路 1518 弄',
               children: [{
                  id: 33,
                  date: '2016-05-01',
                  name: null,
                  res: '[{"number": 1},{"number": 2}]',
                  address: '上海市普陀区金沙江路 1519 弄'
               }, {
                  id: 34,
                  date: '2016-05-01',
                  name: null,
                  res: '[{"number": 1,"res": "不合格"},{"number": 3,"res": "不合格"}]',
                  address: '上海市普陀区金沙江路 1519 弄',
                  children: [{
                     id: 35,
                     date: 'hhh',
                     name: null,
                     res: '[{"number": 1},{"number": 2}]',
                     address: '上海市普陀区金沙江路 1519 弄'
                  }]
               }]
            }, {
               id: 2,
               insId: 123,
               date: '2016-05-04',
               name: null,
               address: '上海市普陀区金沙江路 1517 弄',
               children: []
            }, {
               id: 3,
               insId: 123,
               date: '2016-05-01',
               children: [{
                  id: 31,
                  date: '2016-05-01',
                  name: null,
                  res: '[{"number": 1},{"number": 2}]',
                  address: '上海市普陀区金沙江路 1519 弄'
               }, {
                  id: 32,
                  date: '2016-05-01',
                  name: null,
                  res: '[]',
                  address: null
               }]
            }],
            tableData: [],
            upDia: false,
            upData: {},
            upIndex: 0,
            upInsDia: false,
            upIndex2: 0
            upIndex2: 0,
            users: [],
            devices: []
         }
      },
      mounted() {
         this.selectDataList()
         this.getUsers()
         this.getDevices()
      },
      methods: {
         selectDataList() {
            this.tableData.forEach(a => {
               a.code = '01'
               if (a.children != undefined) {
                  a.children.forEach(b => {
                     b.code = '02'
                     if (b.children != undefined) {
                        b.children.forEach(c => {
                           c.code = '03'
                           c.res = JSON.parse(c.res)
                        })
                     }
                  })
            var str = {}
            str.code = this.search.code
            str.status = this.search.testValue
            try {
               if (this.search.date.length != 0) {
                  str.beginTime = this.search.date[0]
                  str.endTime = this.search.date[1]
               }
            } catch (e) {}
            get(this.$url.selectAllPlan, str).then(res => {
               this.tableData = JSON.parse(JSON.stringify(res.data).replaceAll('pid', 'code').replaceAll('samplename',
                  'name').replaceAll('inspectionStatus', 'testState'))
               this.tableData.forEach(a => {
                  a.orderNum = '01'
                  if (a.children != undefined) {
                     a.children.forEach(b => {
                        b.orderNum = '02'
                        if (b.testValue == undefined) {
                           b.testValue = []
                        }
                     })
                  }
               })
               this.upIndex++
            })
            this.upIndex++
         },
         isIfReport(row) {
            var count = 0
            if (row.children == undefined) return false
            row.children.forEach(a => {
               if (a.name != null && a.name != undefined) count++
               if (a.testState != null && a.testState != undefined) count++
            })
            return row.insId != undefined && count == row.children.length
            return row.testState == undefined && count == row
               .children.length
         },
         openUpDia(row) {
            // console.log(row);
            this.upDia = true
            this.upData = {
               id: row.id,
               address: row.address
               id: row.code,
               checker: null,
               device: null
            }
            this.upData.checker=row.uId
            this.upData.device=row.isuId
         },
         submitUpData() {
            this.tableData.forEach(a => {
               a.children.forEach(b => {
                  if (b.id == this.upData.id) {
                     b.address = this.upData.address
                  }
               })
            // console.log(this.upData.device);
            // console.log(this.devices);
            // return;
            if (this.upData.checker == null || this.upData.checker == '') {
               this.$message.error('人员未分配')
               return
            } else if (this.upData.device == null || this.upData.device == '') {
               this.$message.error('设备未分配')
               return
            }
            wpost(this.$url.distribution, {
               id: this.upData.id,
               userId: this.upData.checker,
               instrumentId: this.upData.device
            }).then(res => {
               this.$message.success('分配成功')
               this.upDia = false
               this.selectDataList()
            })
            this.$message.success('修改成功')
            this.upIndex++
            this.upDia = false
         },
         selectChecker(){
            // console.log(this.upData.checker);
         },
         openUpInsDia(row) {
            this.upInsDia = true
            this.upData = this.HaveJson(row)
            var str = []
            JSON.parse('[' + this.upData.testValue + ']').forEach(a => {
               str.push({
                  number: a
               })
            })
            this.upData.testValue = this.HaveJson(str)
            this.tableData.forEach(a => {
               a.children.forEach(b => {
                  if (b.code == this.upData.code) {
                     this.upData.insId = a.code
                     this.upData.productName = a.name
                  }
               })
            })
         },
         deleteRow(index, rows) {
            rows.splice(index, 1);
         },
         addRes() {
            this.upData.res.push({
            this.upData.testValue.push({
               "number": null
            })
            this.upIndex2++
         },
         getUsers() {
            get(this.$url.choosecheck).then(res => {
               this.users = res.data
            })
         },
         getDevices() {
            get(this.$url.chooseinstum).then(res => {
               this.devices = res.data
            })
         },
         addReported(id) {
            wpost(this.$url.reported, {
               id: id
            }).then(res => {
               this.$message.success('上报成功')
               this.selectDataList()
            }).catch(e => {
               this.$message.error('上报失败')
            })
         },
         submitUpData2() {
            var data = []
            this.upData.testValue.forEach(a => {
               if (a.number != '' && a.number != null) {
                  data.push(a.number)
               }
            })
            wpost(this.$url.check, {
               id: this.upData.code,
               value: data.toString()
            }).then(res => {
               this.upInsDia = false
               this.selectDataList()
               this.$confirm(
                  `<p style="line-height: 80px">您的项目(${this.upData.name})检验结果为:<span class="${res.data==1?'ins_state_success':'ins_state_error'}">${res.data==1?'合格':'不合格'}</span></p>`,
                  '提交成功', {
                     confirmButtonText: '确定',
                     cancelButtonText: '关闭',
                     dangerouslyUseHTMLString: true,
                     type: `${res.data==1?'success':'error'}`
                  }).then(() => {}).catch(() => {})
            })
         },
         cleanBtn(){
            this.search = {
               code: null,
               date: [],
               testValue: null,
            }
            this.selectDataList()
         }
      }
   }
</script>
</script>