licp
2024-09-10 cb57bc6b4abf45dbb0605c94359c63e3b31b4b87
src/components/view/b1-inspect-order-plan.vue
@@ -97,16 +97,25 @@
   .view-self-checkbox {
      margin-left: 50px;
   }
  .draggable-row {
    cursor: move;
    position: relative;
  }
</style>
<style>
   .ins-order-plan-main .el-form-item__label{
      color: #000;
   }
  .ins-order-plan-main .el-table th.el-table__cell>.cell{
    height: 46px;
    line-height: 30px;
  }
</style>
<template>
   <div class="ins-order-plan-main">
      <div v-show="activeFace == 0&&state==0" style="height: 100%;">
         <p style="font-size: 16px;padding:19.5px 0px">检验任务</p>
         <p style="font-size: 16px;padding-left: 20px;text-align: left;height: 60px;line-height: 60px;">检验任务</p>
         <div class="search">
            <div class="search_thing">
               <div class="search_label">委托编号:</div>
@@ -144,14 +153,107 @@
                  <el-col :span="3">
                     <div class="center-title">
                        <span>总计任务数量:</span>
                        <span v-if="$refs.insOrderPlan != undefined">{{$refs.insOrderPlan.total}}</span>
                        <span>{{total}}</span>
                     </div>
                  </el-col>
               </el-row>
            </div>
            <ValueTable :tableRowClassName="changeRowClass" class="value-table" ref="insOrderPlan"
            <!-- <ValueTable :tableRowClassName="changeRowClass" class="value-table" ref="insOrderPlan"
                    :isColumnWidth="true"
               :url="$api.insOrderPlan.selectInsOrderPlanList" :upUrl="$api.user.updateUser" :componentData="componentData" @handleInspection="handleInspection"
               :key="upIndex"/>
               :key="upIndex"/> -->
          <el-table
          :data="tableData"
          ref="table0"
          border
          style="width: 100%;"
          height="calc(100% - 80px)"
          :row-class-name="rowClassName"
          v-loading="tableLoading"
          row-key="orderStateId"
        >
          <el-table-column
            prop="entrustCode"
            label="委托编号"
            width="140px"
          >
            <template slot-scope="scope">
              <el-button @click="selectAllByOne(scope.row)" type="text" size="small">{{ scope.row.entrustCode }}</el-button>
            </template>
          </el-table-column>
          <el-table-column
            prop="sample"
            label="样品名称"
            width="100px"
          ></el-table-column>
          <el-table-column
            prop="type"
            label="紧急程度"
            width="100px"
          >
            <template slot-scope="scope">
              <el-tag :type="typeList.find(m=>m.value==scope.row.type).type" size="small">{{ typeList.find(m=>m.value==scope.row.type).label }}</el-tag>
            </template>
          </el-table-column>
          <el-table-column
            prop="insState"
            label="状态"
            width="100px"
          >
          <template slot-scope="scope">
              <el-tag :type="insStateList.find(m=>m.value==scope.row.insState).type" size="small">{{ insStateList.find(m=>m.value==scope.row.insState).label }}</el-tag>
            </template></el-table-column>
          <el-table-column
            prop="userName"
            label="检验人"
            width="140px"
          ></el-table-column>
          <el-table-column
            prop="checkName"
            label="复核人"
            width="100px"
          ></el-table-column>
          <el-table-column
            prop="appointed"
            label="约定时间"
            width="120px"
          ></el-table-column>
          <el-table-column
            prop="sendTime"
            label="下发时间"
            width="160px"
          ></el-table-column>
          <el-table-column
            prop="insTime"
            label="检验开始时间"
            width="160px"
          ></el-table-column>
          <el-table-column
            prop="verifyTell"
            label="理由"
            width="150px"
          ></el-table-column>
          <el-table-column
            fixed="right"
            align="center" label="操作"
            width="250px"
          >
          <template slot-scope="scope">
            <el-button @click="handleDataLook(scope.row)" type="text" size="small">数据查看</el-button>
            <el-button @click="handleInspection(scope.row)" type="text" size="small" :disabled="scope.row.userName == null || scope.row.insState == 3 || scope.row.insState == 5||scope.row.insState == 6||(scope.row.userName&&!scope.row.userName.includes(userName))">检验</el-button>
            <el-button @click="handleConnect(scope.row)" type="text" size="small" :disabled="scope.row.userName == null || scope.row.insState == 5  || scope.row.insState == 3||scope.row.insState == 6||(scope.row.userName&&!scope.row.userName.includes(userName))">交接</el-button>
            <el-button @click="handleReview(scope.row)" type="text" size="small" :disabled="scope.row.userName == null || scope.row.insState != 3 ||(scope.row.checkName&&!scope.row.checkName.includes(userName))">复核</el-button>
            <el-button @click="claimFun(scope.row)" type="text" size="small" :disabled="scope.row.userName != null || scope.row.checkName!=null">认领</el-button>
          </template>
          </el-table-column>
        </el-table>
        <div style="display: flex;justify-content: flex-end;width: 100%;margin-top: 10px;">
          <span></span>
          <el-pagination @size-change="refreshTable" @current-change="refreshTable" :current-page="page.current"
            :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper"
            :total="total">
          </el-pagination>
        </div>
         </div>
      </div>
      <el-dialog title="提示" :visible.sync="claimVisible" width="400px">
@@ -163,9 +265,9 @@
      </el-dialog>
    <el-dialog title="检验交接" :visible.sync="connectVisible" width="400px">
         <div class="search_thing">
        <div class="search_label" style="width:90px">交接人员:</div>
        <div class="search_label" style="width:90px"><span class="required-span">* </span>交接人员:</div>
        <div class="search_input">
          <el-select v-model="connectPerson" placeholder="请选择" style="width: 100%;">
          <el-select v-model="connect.connectPerson" placeholder="请选择" style="width: 100%;" filterable>
            <el-option
              v-for="item in personList"
              :key="item.value"
@@ -175,16 +277,35 @@
          </el-select>
        </div>
      </div>
      <!-- <div class="search_thing">
        <div class="search_label" style="width:90px"><span class="required-span">* </span>试验室:</div>
        <div class="search_input">
          <el-select v-model="connect.sonLaboratory" placeholder="请选择" style="width: 100%;" filterable>
            <el-option
              v-for="item in sonLaboratoryList"
              :key="item.value"
              :label="item.label"
              :value="item.value">
            </el-option>
          </el-select>
        </div>
      </div> -->
         <span slot="footer" class="dialog-footer">
            <el-button @click="connectVisible = false">取 消</el-button>
            <el-button type="primary" @click="confirmConnect" :loading="loading">确 定</el-button>
         </span>
      </el-dialog>
      <div style="width: 100%;height: 100%;" v-if="activeFace >0">
         <Add :active="activeFace" :currentId="currentId"/>
         <Add :active="activeFace" :currentId="currentId" :examine="examine"/>
      </div>
    <Inspection v-if="state>0" @goback="goback" :orderId="orderId" :sonLaboratory="componentData.entity.sonLaboratory" :state="state"/>
   </div>
    <Inspection v-if="state>0" @goback="goback" :orderId="orderId" :inspectorList="inspectorList" :sonLaboratory="componentData.entity.sonLaboratory" :state="state" :orderStateId="orderStateId" :version="version"/>
      <el-dialog title="数据查看" :visible.sync="dataDialogVisible" width="80%">
            <div style="height: 70vh;overflow-y: auto;" v-if="dataDialogVisible">
               <ValueTable ref="ValueTableDataLook" :rowKey="'insProductId'" :url="$api.insOrder.selectSampleAndProductByOrderId"
                  :componentData="componentDataDataLook"/>
            </div>
         </el-dialog>
  </div>
</template>
<script>
@@ -194,6 +315,7 @@
      getYearAndMonthAndDays
   } from '../../util/date'
   import Add from '../do/b1-ins-order/add.vue'
  import Sortable from 'sortablejs';
   export default {
      components: {
         ValueTable,
@@ -202,6 +324,10 @@
      },
      data() {
         return {
        orderStateId:null,
        version:null,
            examine: null,
        inspectorList: [],//检验人员列表
            alone: false,
            sampleUserForm: {
               entrustCode: null,
@@ -212,32 +338,102 @@
            tabList: [],
            active: 1,
            tabIndex: 0,
        componentDataDataLook: {
               entity: {
                  id: 0,
                  orderBy: {
                     field: 'sampleCode',
                     order: 'asc'
                  }
               },
               isIndex: false,
               showSelect: false,
               select: false,
               do: [],
               tagField: {
                  insState: {
                     select: []
                  },
                  insResult: {
                     select: [{
                        value: 1,
                        label: '合格',
                        type: 'success'
                     },{
                        value: 0,
                        label: '不合格',
                        type: 'danger'
                     },{
                        value: 3,
                        label: '不判定',
                        type: ''
                     }]
                  }
               },
               selectField: {},
          spanConfig:{
            rows:[
              {
                name:'sampleCode',
                index:0
              },
              {
                name:'sample',
                index:1
              },
              {
                name:'model',
                index:5
              }
            ]
          },
               requiredAdd: [],
               requiredUp: []
            },
        dataDialogVisible: false,
            componentData: {
               entity: {
                  sonLaboratory: null,
                  insState: null,
                  userId: null
               },
          sortable:true,
               isIndex: true,
               showSelect: false,
               select: false,
               sort: false,
               init: false,
          needSort: ['createTime', 'sendTime', 'type', 'appointed', 'insState'],
               do: [{
                  id: '',
                  font: '数据查看',
                  type: 'text',
                  method: 'handleDataLook',
            //disabFun: (row, index) => {
              //const user = JSON.parse(localStorage.getItem('user'))
             // let currentUserName = ''
             // if(user){
              //  currentUserName = user.name
              //}
                     //return row.userName.indexOf(currentUserName)<0 && row.checkName.indexOf(currentUserName)<0
                  //}
               },{
                     id: '',
                     font: '检验',
                     type: 'text',
                     method: 'handleInspection',
                     disabFun: (row, index) => {
                        return row.userId == null || row.insState == 3 || row.insState == 5
                        return row.userName == null || row.insState == 3 || row.insState == 5||row.insState == 6||(row.userName&&!row.userName.includes(JSON.parse(localStorage.getItem("user")).name))
                     }
              // disabFun: (row, index) => {
                     //    return row.userId == null || row.insState == 3 || row.insState == 5
                     // }
                  }, {
                     id: '',
                     font: '交接',
                     type: 'text',
                     method: 'handleConnect',
                     disabFun: (row, index) => {
                        return row.userId == null || row.orderUserId == null || row.insState == 5  || row.insState == 3
                        return row.userName == null || row.insState == 5  || row.insState == 3||row.insState == 6||(row.userName&&!row.userName.includes(JSON.parse(localStorage.getItem("user")).name))
                     }
                  },
                  {
@@ -245,8 +441,8 @@
                     font: '复核',
                     type: 'text',
                     method: 'handleReview',
                     disabFun: (row, index) => {
                        return row.userId == null || row.insState != 3
                     disabFun: (row, userName) => {
                        return row.userName == null || row.insState != 3 ||(row.checkName&&!row.checkName.includes(JSON.parse(localStorage.getItem("user")).name))
                     }
                  }, {
                     id: '',
@@ -254,7 +450,7 @@
                     type: 'text',
                     method: 'claimFun',
                     disabFun: (row, index) => {
                        return row.userId != null
                        return row.userName != null || row.checkName!=null
                     }
                  }
               ],
@@ -290,6 +486,7 @@
               requiredAdd: [],
               requiredUp: []
            },
        userName:JSON.parse(localStorage.getItem("user")).name,
            upIndex: 0,
            planTotal: 0,
            insStateList: [],
@@ -300,9 +497,35 @@
            orderId: 0,
        personList:[],
        connectVisible:false,
        connectPerson:'',
        connect:{
          connectPerson:'',
          // sonLaboratory:''
        },
        loading:false,
        currentTime: null
        currentTime: null,
        sonLaboratoryList:[],
        tableData: [],
        page:{
          current:1,
          size:20,
        },
        total:0,
        tableLoading:false,
        jumpTeam:false,
        insResultList:[{
          value: 0,
          label: '不合格',
          type: 'danger'
        },{
          value: 1,
          label: '合格',
          type: 'success'
        },{
          value: '',
          label: '未出结果',
          type: 'info'
        }],
        typeList:[]
         }
      },
      created() {
@@ -315,8 +538,55 @@
      mounted() {
         this.entityCopy = this.HaveJson(this.componentData.entity)
      this.getPower()
      if(this.jumpTeam){
        this.initializeSortable();
      }
      },
      methods: {
      // 拖拽
      initializeSortable() {
        const tableBody = this.$refs.table0.$el.querySelector('.el-table__body-wrapper > table > tbody');
        if (tableBody) {
          Sortable.create(tableBody, {
            handle: '.el-table__row', // 拖动手柄
            animation: 200,
            onEnd: this.handleSortEnd,
          });
        } else {
          console.error('Table body not found.');
        }
      },
      handleSortEnd(evt) {
        const oldIndex = evt.oldIndex;
        const newIndex = evt.newIndex;
        const movedItem = this.tableData[oldIndex];
        if (oldIndex !== newIndex) {
          this.tableData.splice(oldIndex, 1);
          this.tableData.splice(newIndex, 0, movedItem);
        }
        this.upIndex++
        this.$axios.post(this.$api.insOrderPlan.jumpTeam,
          {
            id: movedItem.orderStateId,
            sort: newIndex+1,
            ...this.page
          }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }
        ).then(res => {
        })
      },
      rowClassName({ row, rowIndex }) {
        return 'draggable-row';
      },
         // 数据查看
         handleDataLook(row) {
            this.componentDataDataLook.entity.id = row.id
            this.dataDialogVisible = true;
         },
      // 权限分配
         getPower(radio) {
            let power = JSON.parse(sessionStorage.getItem('power'))
@@ -324,6 +594,7 @@
            let connect = false
            let review = false
        let claim = false
        let jumpTeam = false
            for (var i = 0; i < power.length; i++) {
               if (power[i].menuMethod == 'doInsOrder') {
                  inspection = true
@@ -336,6 +607,9 @@
               }
          if (power[i].menuMethod == 'claimInsOrderPlan') {
                  claim = true
               }
          if (power[i].menuMethod == 'jumpTeam') {
                  jumpTeam = true
               }
            }
            if (!claim) {
@@ -350,6 +624,7 @@
            if (!inspection) {
               this.componentData.do.splice(0, 1)
            }
        this.jumpTeam = jumpTeam
         },
         changeCheckBox(val) {
            this.componentData.entity.userId = val?0:null
@@ -367,7 +642,8 @@
            if (row) {
               this.sampleUserForm = {
                  entrustCode: row.entrustCode,
                  insSampleId: row.id
                  insSampleId: row.id,
                     sonLaboratory: row.sonLaboratory,
               }
               this.claimVisible = true
            }
@@ -383,7 +659,9 @@
            this.loading = false;
                  this.$message.success("认领成功")
                  this.claimVisible = false
                  this.refreshTable()
                  this.refreshTable('page')
               } else {
                  this.loading = false;
               }
            }).catch(error => {
               console.error(error)
@@ -391,7 +669,20 @@
            })
         },
         refreshTable() {
            this.$refs.insOrderPlan.selectList()
            this.tableLoading = true
        this.$axios.post(this.$api.insOrderPlan.selectInsOrderPlanList,{
          entity:this.componentData.entity,
          page:this.page
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then((res) => {
          this.tableLoading = false
          this.total = res.data.body.total
          this.tableData = res.data.body.records
          // this.$refs.table0.doLayout()
        })
         },
         changeRowClass({
            row,
@@ -440,6 +731,7 @@
                  }
               })
               this.componentData.tagField.type.select = data
          this.typeList = data
            })
         },
         getInsStateDicts() {
@@ -479,6 +771,7 @@
         },
         selectAllByOne(row) {
            this.activeFace = 2;
            this.examine = 1;
            this.currentId = parseInt(row.id)
         },
         playOrder(num) {
@@ -486,40 +779,74 @@
         },
         goback() {
            this.state = 0
            this.refreshTable()
            this.refreshTable('page')
         },
      handleInspection(row){
        this.state = 1;
        //当前检验任务的检验人列表
        let inspectorList = []
        if(row.userName){
          inspectorList = row.userName.split(',')
        }
        let user = JSON.parse(localStorage.getItem('user'))
        if(user){
          inspectorList.push(user.name)
        }
        this.inspectorList = inspectorList
            this.orderId = row.id
        this.version = row.version
        this.orderStateId = row.orderStateId
        this.state = 1;
      },
      handleConnect(row){
        this.orderId = row.id
        this.connect = {}
        this.connectVisible=true;
        // this.$axios.post(this.$api.insOrderPlan.upPlanUser2, {
        //     orderId:this.orderId,
        //   }).then(res => {
            //    if (res.code === 200&&res.data.length>0) {
        //     this.sonLaboratoryList = [];
        //     res.data.forEach(m=>{
        //       this.sonLaboratoryList.push({
        //         value:m,
        //         label:m
        //       })
        //     })
        //     // this.connect.sonLaboratory = this.sonLaboratoryList[0].value
            //    }
            // })
      },
      confirmConnect(){
        if(this.connectPerson){
          this.loading = true;
        if(this.connect.connectPerson==null||this.connect.connectPerson==''||this.connect.connectPerson==undefined){
          this.$message.error('未选择交接人员')
          return
        }
        // if(this.connect.sonLaboratory==null||this.connect.sonLaboratory==''||this.connect.sonLaboratory==undefined){
        //   this.$message.error('未选择试验室')
        //   return
        // }
        this.loading = true;
          this.$axios.post(this.$api.insOrderPlan.upPlanUser, {
            orderId:this.orderId,
            userId:this.connectPerson
            userId:this.connect.connectPerson,
            sonLaboratory:this.componentData.entity.sonLaboratory,
          }).then(res => {
               if (res.code === 200) {
            this.loading = false;
                  this.$message.success("操作成功")
                  this.refreshTable()
                  this.refreshTable('page')
               }
          this.connectVisible = false
            }).catch(error => {
               console.error(error)
          this.loading = false;
            })
        }else{
          this.$message.error('未选择交接人员')
        }
      },
      handleReview(row){
        this.state = 2;
            this.orderId = row.id
        this.version = row.version
        this.orderStateId = row.orderStateId
      },
      getAuthorizedPerson() {
            this.$axios.get(this.$api.user.getUserMenu).then(res => {