licp
2024-09-10 cb57bc6b4abf45dbb0605c94359c63e3b31b4b87
src/components/view/b1-inspect-order-plan.vue
@@ -97,6 +97,10 @@
   .view-self-checkbox {
      margin-left: 50px;
   }
  .draggable-row {
    cursor: move;
    position: relative;
  }
</style>
<style>
   .ins-order-plan-main .el-form-item__label{
@@ -149,15 +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">
@@ -202,7 +298,7 @@
      <div style="width: 100%;height: 100%;" v-if="activeFace >0">
         <Add :active="activeFace" :currentId="currentId" :examine="examine"/>
      </div>
    <Inspection v-if="state>0" @goback="goback" :orderId="orderId" :inspectorList="inspectorList" :sonLaboratory="componentData.entity.sonLaboratory" :state="state"/>
    <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"
@@ -219,7 +315,7 @@
      getYearAndMonthAndDays
   } from '../../util/date'
   import Add from '../do/b1-ins-order/add.vue'
import { CellGroup } from 'iview'
  import Sortable from 'sortablejs';
   export default {
      components: {
         ValueTable,
@@ -228,6 +324,8 @@
      },
      data() {
         return {
        orderStateId:null,
        version:null,
            examine: null,
        inspectorList: [],//检验人员列表
            alone: false,
@@ -299,6 +397,7 @@
                  insState: null,
                  userId: null
               },
          sortable:true,
               isIndex: true,
               showSelect: false,
               select: false,
@@ -323,7 +422,7 @@
                     type: 'text',
                     method: 'handleInspection',
                     disabFun: (row, index) => {
                        return row.userName == null || row.insState == 3 || row.insState == 5||(row.userName&&!row.userName.includes(JSON.parse(localStorage.getItem("user")).name))
                        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
@@ -334,7 +433,7 @@
                     type: 'text',
                     method: 'handleConnect',
                     disabFun: (row, index) => {
                        return row.userName == null || row.insState == 5  || row.insState == 3||(row.userName&&!row.userName.includes(JSON.parse(localStorage.getItem("user")).name))
                        return row.userName == null || row.insState == 5  || row.insState == 3||row.insState == 6||(row.userName&&!row.userName.includes(JSON.parse(localStorage.getItem("user")).name))
                     }
                  },
                  {
@@ -387,6 +486,7 @@
               requiredAdd: [],
               requiredUp: []
            },
        userName:JSON.parse(localStorage.getItem("user")).name,
            upIndex: 0,
            planTotal: 0,
            insStateList: [],
@@ -403,7 +503,29 @@
        },
        loading:false,
        currentTime: null,
        sonLaboratoryList:[]
        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() {
@@ -416,8 +538,50 @@
      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
@@ -430,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
@@ -442,6 +607,9 @@
               }
          if (power[i].menuMethod == 'claimInsOrderPlan') {
                  claim = true
               }
          if (power[i].menuMethod == 'jumpTeam') {
                  jumpTeam = true
               }
            }
            if (!claim) {
@@ -456,6 +624,7 @@
            if (!inspection) {
               this.componentData.do.splice(0, 1)
            }
        this.jumpTeam = jumpTeam
         },
         changeCheckBox(val) {
            this.componentData.entity.userId = val?0:null
@@ -474,7 +643,7 @@
               this.sampleUserForm = {
                  entrustCode: row.entrustCode,
                  insSampleId: row.id,
            sonLaboratory: row.sonLaboratory,
                     sonLaboratory: row.sonLaboratory,
               }
               this.claimVisible = true
            }
@@ -491,14 +660,29 @@
                  this.$message.success("认领成功")
                  this.claimVisible = false
                  this.refreshTable('page')
               } else {
                  this.loading = false;
               }
            }).catch(error => {
               console.error(error)
          this.loading = false;
            })
         },
         refreshTable(e) {
            this.$refs.insOrderPlan.selectList(e)
         refreshTable() {
            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,
@@ -547,6 +731,7 @@
                  }
               })
               this.componentData.tagField.type.select = data
          this.typeList = data
            })
         },
         getInsStateDicts() {
@@ -607,8 +792,10 @@
          inspectorList.push(user.name)
        }
        this.inspectorList = inspectorList
        this.state = 1;
            this.orderId = row.id
        this.version = row.version
        this.orderStateId = row.orderStateId
        this.state = 1;
      },
      handleConnect(row){
        this.orderId = row.id
@@ -658,6 +845,8 @@
      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 => {