src/views/business/productOrder/index.vue
@@ -39,30 +39,31 @@
        </el-form-item>
      </el-form>
    </div>
    <div class="table-tab">
      <div>
        <ul class="tab">
          <li :class="{ active: tabIndex === 0 }" v-if="checkPermi(['get:insOrder:reviewed'])" @click="handleTab(0)">待审核</li>
          <li :class="{ active: tabIndex === 1 }" v-if="checkPermi(['get:insOrder:checkout'])" @click="handleTab(1)">检验中</li>
          <li :class="{ active: tabIndex === 2 }" v-if="checkPermi(['get:insOrder:customerOrdered'])" @click="handleTab(2)">委托已检</li>
          <li :class="{ active: tabIndex === 3 }" v-if="checkPermi(['get:insOrder:spotCheck'])" @click="handleTab(3)">抽样已检</li>
          <li :class="{ active: tabIndex === 4 }" v-if="checkPermi(['get:insOrder:sendBack'])" @click="handleTab(4)">退回</li>
          <li :class="{ active: tabIndex === 5 }" v-if="checkPermi(['get:insOrder:revocation'])" @click="handleTab(5)">撤销</li>
          <li :class="{ active: tabIndex === 6 }" v-if="checkPermi(['get:insOrder:all'])" @click="handleTab(6)">全部</li>
        </ul>
    <div class="container" v-loading="isLoading">
      <div class="table-tab">
        <div>
          <ul class="tab">
            <li :class="{ active: tabIndex === 0 }" v-if="checkPermi(['get:insOrder:reviewed'])" @click="handleTab(0)">待审核</li>
            <li :class="{ active: tabIndex === 1 }" v-if="checkPermi(['get:insOrder:checkout'])" @click="handleTab(1)">检验中</li>
            <li :class="{ active: tabIndex === 2 }" v-if="checkPermi(['get:insOrder:customerOrdered'])" @click="handleTab(2)">委托已检</li>
            <li :class="{ active: tabIndex === 3 }" v-if="checkPermi(['get:insOrder:spotCheck'])" @click="handleTab(3)">抽样已检</li>
            <li :class="{ active: tabIndex === 4 }" v-if="checkPermi(['get:insOrder:sendBack'])" @click="handleTab(4)">退回</li>
            <li :class="{ active: tabIndex === 5 }" v-if="checkPermi(['get:insOrder:revocation'])" @click="handleTab(5)">撤销</li>
            <li :class="{ active: tabIndex === 6 }" v-if="checkPermi(['get:insOrder:all'])" @click="handleTab(6)">全部</li>
          </ul>
        </div>
        <div>
          <el-button v-if="tabIndex === 2 || tabIndex === 3 || tabIndex === 6" size="small"
                     @click="downLoad">导出</el-button>
          <el-button size="small" type="primary" @click="openPrint">标签打印</el-button>
          <el-button v-if="checkPermi(['add:insOrder'])" size="small" type="primary" @click="playOrder(1)">下单</el-button>
        </div>
      </div>
      <div>
        <el-button v-if="tabIndex === 2 || tabIndex === 3 || tabIndex === 6" size="small"
          @click="downLoad">导出</el-button>
        <el-button v-if="tabIndex === 1" size="small" type="primary" @click="openAddIns">添加检验项</el-button>
        <el-button size="small" type="primary" @click="openPrint">标签打印</el-button>
        <el-button v-if="checkPermi(['add:insOrder'])" size="small" type="primary" @click="playOrder(1)">下单</el-button>
      <div class="table">
        <lims-table :tableData="tableData" :column="column" :isSelection="true" :handleSelectionChange="selectMethod"
                    @pagination="pagination" :height="'calc(100vh - 280px)'" :key="upIndex" :page="page"
                    :tableLoading="tableLoading"></lims-table>
      </div>
    </div>
    <div class="table">
      <lims-table :tableData="tableData" :column="column" :isSelection="true" :handleSelectionChange="selectMethod"
        @pagination="pagination" :height="'calc(100vh - 280px)'" :key="upIndex" :page="page"
        :tableLoading="tableLoading"></lims-table>
    </div>
    <div>
      <!-- 审核 -->
@@ -128,11 +129,11 @@
              </div>
            </el-col>
            <el-col class="search_thing" style="width: 95%;">
              <div class="search_label"><span class="required-span">* </span>试验室:</div>
              <div class="search_label">试验室:</div>
              <div class="search_input">
                <el-select v-model="distributeData.sonLaboratory" clearable filterable placeholder="请选择" size="small"
                  style="width: 100%;">
                  <el-option v-for="(item, i) in sonLaboratoryList" :key="i + 'oooo'" :label="item.label"
                  <el-option v-for="(item, i) in newJuLaboratoryList" :key="i + 'oooo'" :label="item.label"
                    :value="item.value">
                  </el-option>
                </el-select>
@@ -164,7 +165,7 @@
        <div v-if="deleteDialogVisible" style="height: 70vh;overflow-y: auto;">
          <lims-table :tableData="componentDataDelete" :column="columnDelete" :isSelection="true"
            :handleSelectionChange="selectDelete" @pagination="paginationDelete" height="500px"
            key="componentDataDelete" :page="pageDelete" :tableLoading="tableLoadingDelete"></lims-table>
            :key="orderId" :page="pageDelete" :tableLoading="tableLoadingDelete"></lims-table>
        </div>
        <span slot="footer" class="dialog-footer">
          <el-row>
@@ -292,8 +293,6 @@
    <!--标签打印弹框-->
    <print-dialog v-if="printDialog" ref="printDialog" :printDialog="printDialog"
      @closePrintDialog="closePrintDialog"></print-dialog>
    <!--添加遗漏检验项弹框-->
    <add-inspection-dia v-if="addInspectionDia" ref="addInspectionDia"></add-inspection-dia>
    <!--修改样品型号弹框-->
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
               :visible.sync="dialogVisible" title="修改样品型号" width="80%">
@@ -323,14 +322,16 @@
import vueQr from 'vue-qr'
import PrintJS from 'print-js'
import PrintDialog from "@/views/business/productOrder/components/printDialog.vue";
import AddInspectionDia from "@/views/business/productOrder/components/addInspectionDia.vue";
import limsTable from "@/components/Table/lims-table.vue";
import {
  checkUpdate, delInsOrder, getSampleByOrderId,
  rawAllInsOrderExport,
  selectInsOrderParameter, selectNoProducts, selectOrderManDay,
  selectInsOrderParameter,
  selectNoProducts,
  getRevocationInsProductList,
  selectOrderManDay,
  updateInspected,
  updateOrderEntrustCode, updateSampleModel, updateStatus, upInsOrder, upPlanUser2
  updateOrderEntrustCode, updateSampleModel, updateStatus, upInsOrder
} from "@/api/business/productOrder";
import { selectUserCondition } from "@/api/performance/class";
import { downFile, getFileList, selectSampleAndProductByOrderId } from "@/api/business/rawMaterialOrder";
@@ -339,12 +340,12 @@
  name: 'ProductOrder',
  components: {
    limsTable,
    AddInspectionDia,
    PrintDialog,
    vueQr
  },
  data() {
    return {
      isLoading: false, // 控制加载状态
      entity: {
        orderType: '',
        state: '',
@@ -361,75 +362,27 @@
          linkMethod: "changeEntrustCode",
        },
        { label: '委托单位', prop: 'company' },
        {
          label: "样品名称",
          prop: "sampleName",
          width: "160px",
          dataType: "link",
          linkMethod: "selectAllByOne",
        },
        {
          label: "样品型号",
          prop: "sampleModel",
          width: "160px",
          dataType: "link",
          linkMethod: "editSampleModel",
        },
        { label: '样品数量', prop: 'sampleNum' },
        { label: '检测依据', prop: 'sample' },
        { label: '样品名称', prop: 'sampleView' },
        // {
        //   label: "样品名称",
        //   prop: "sampleName",
        //   width: "160px",
        //   dataType: "link",
        //   linkMethod: "selectAllByOne",
        // },
        // {
        //   label: "样品型号",
        //   prop: "sampleModel",
        //   width: "160px",
        //   dataType: "link",
        //   linkMethod: "editSampleModel",
        // },
        { label: '样品数量', prop: 'testQuantity' },
        { label: '检验人', prop: 'testingName' },
        {
          dataType: 'tag',
          label: '紧急程度',
          prop: 'type',
          formatData: (params) => {
            if (params == 0) {
              return '普通'
            } else if (params == 1) {
              return '优先'
            } else {
              return '紧急'
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return 'success'
            } else if (params == 1) {
              return 'warning'
            } else {
              return 'danger'
            }
          }
        },
        { label: '备注', prop: 'remark' },
        { label: '检验进度%', prop: 'insProgress' },
        { label: '约定时间', prop: 'appointed' },
        {
          dataType: 'tag',
          label: '检验结果',
          prop: 'insResult',
          formatData: (params) => {
            if (params == 1) {
              return '合格'
            } else if (params == 0) {
              return '不合格'
            } else if (params == 3) {
              return '不判定'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
            } else if (params == 0) {
              return 'danger'
            } else if (params == 3) {
              return ''
            } else {
              return null
            }
          }
        },
        { label: '下单时间', prop: 'createTime' },
        { label: '下发时间', prop: 'sendTime' },
        { label: '退回理由', prop: 'tell' },
@@ -439,6 +392,13 @@
          fixed: 'right',
          label: '操作',
          operation: [
            {
              name: '查看详情',
              type: 'text',
              clickFun: (row) => {
                this.selectAllByOne(row);
              }
            },
            {
              name: '数据查看',
              type: 'text',
@@ -759,9 +719,7 @@
      ],
      qrData: [],
      multipleSelection: [],
      sonLaboratoryList: [],
      printDialog: false,
      addInspectionDia: false,
      dialogVisible: false,
      submitListLoad: false,
      sampleList: []
@@ -777,10 +735,19 @@
      }
    }
  },
  dicts: ['sys_sub_lab'],
  computed: {
    ...mapGetters(["nickName"]),
    newJuLaboratoryList() {
      return (this.dict.type.sys_sub_lab || []).filter(item => item.label === '新聚')
    },
  },
  mounted() {
    if (this.checkPermi(['get:raw:await'])) {
      this.tabIndex = 0
    } else {
      this.tabIndex = 2
    }
    this.refreshTable()
    this.getAuthorizedPerson()
  },
@@ -800,8 +767,9 @@
        }
      }
      const params = { ...this.entity, state: this.tabList[this.tabIndex].value }
      this.tableLoading = true
      this.isLoading = true; // 开始加载
      selectInsOrderParameter({...this.page,...params}).then(res => {
        this.isLoading = false; // 结束加载
        this.upIndex++
        this.tableLoading = false
        if (res.code === 200) {
@@ -809,7 +777,7 @@
          this.page.total = res.data.total
        }
      }).catch(err => {
        this.tableLoading = false
        this.isLoading = false; // 结束加载
      })
    },
    refresh() {
@@ -901,24 +869,14 @@
        font_size: '0.20cm',
      });
    },
    // 打开添加检验项弹框
    openAddIns() {
      if (this.multipleSelection.length === 0) {
        this.$message.warning('请选择需要添加检验项的数据')
        return
      }
      if (this.multipleSelection.length > 1) {
        this.$message.warning('只能选择一条数据')
        return
      }
      this.addInspectionDia = true
      this.$nextTick(() => {
        this.$refs.addInspectionDia.getDataList(this.multipleSelection[0])
      })
    },
    // 导出记录
    downLoad() {
      const params = { ...this.entity, state: this.tabList[this.tabIndex].value }
      let params = {}
      if (this.multipleSelection.length > 0) {
        params.ids = this.multipleSelection.map(item => item.id).join(',');
      } else {
        params = { ...this.entity, state: this.tabList[this.tabIndex].value }
      }
      rawAllInsOrderExport({ ...params }).then(res => {
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '委托检测信息导出.xlsx');
@@ -971,14 +929,26 @@
    },
    // 点击样品名称
    selectAllByOne(row) {
      this.$router.push({
        path: "/productOrder/addView", query: {
          examine: 1,
          active: 2,
          currentId: row.id,
          tabIndex: this.tabIndex,
        }
      });
      if (this.tabIndex === 4) {
        this.$router.push({
          path: "/productOrder/addOrder", query: {
            examine: 1,
            active: 2,
            currentId: row.id,
            tabIndex: this.tabIndex,
          }
        });
      } else {
        this.$router.push({
          path: "/productOrder/addView", query: {
            examine: 1,
            active: 2,
            currentId: row.id,
            tabIndex: this.tabIndex,
          }
        });
      }
    },
    // 修改样品型号
    editSampleModel (row) {
@@ -1141,7 +1111,20 @@
      this.orderId = row.id
      this.revocationInsProductIds = row.revocationInsProductIds
      this.deleteTilte = '撤销审核'
      // this.getRevocationInsProductList()
      this.deleteDialogVisible = true;
    },
    getRevocationInsProductList(){
      this.tableLoadingDelete = true
      getRevocationInsProductList({orderId:this.orderId}).then(res=>{
        if(res.code===200){
          this.componentDataDelete = res.data
        }
        this.tableLoadingDelete = false
      }).catch(error=>{
        console.error(error)
        this.tableLoadingDelete = false
      })
    },
    handleNo() {
      if (this.deleteTilte == '撤销') {
@@ -1160,6 +1143,7 @@
    // 下发
    handleIssued(row) {
      this.issuedDialogVisible = true;
      this.distributeData.sonLaboratory = this.newJuLaboratoryList.length > 0 ? this.newJuLaboratoryList[0].value : ''
      selectOrderManDay({
        id: row.id
      }).then(res => {
@@ -1167,19 +1151,6 @@
        this.distributeData.sampleId = row.sampleId
        this.distributeData.appointed = res.data
        this.distributeData.type = row.type
      })
      upPlanUser2({
        orderId: row.id,
      }).then(res => {
        if (res.code === 200 && res.data.length > 0) {
          this.sonLaboratoryList = [];
          res.data.forEach(m => {
            this.sonLaboratoryList.push({
              value: m,
              label: m
            })
          })
        }
      })
    },
    submitForm2() {
@@ -1190,10 +1161,6 @@
      //
      if (this.distributeData.userId == null || this.distributeData.userId == '') {
        this.$message.error('指派人员未填写')
        return
      }
      if (this.distributeData.userId && (this.distributeData.sonLaboratory == null || this.distributeData.sonLaboratory == '')) {
        this.$message.error('试验室未填写')
        return
      }
      this.upLoad = true;
@@ -1251,6 +1218,7 @@
    },
    handleTab(i) {
      this.tabIndex = i;
      this.multipleSelection = []
      this.refreshTable()
    },
    // 查看检验数据
@@ -1261,16 +1229,29 @@
        inspectorList = row.userName.split(',')
      }
      inspectorList.push(this.nickName)
      this.$router.push({
        path: "/inspectionTask/inspection",
        query: {
          sonLaboratory: row.sonLaboratory,
          state: 3,
          typeSource: row.typeSource,
          orderId: row.id,
          inspectorList: inspectorList,
        },
      })
      if (this.checkPermi(['business:inspectionView'])) {
        this.$router.push({
          name: "InspectionView",
          query: {
            sonLaboratory: row.sonLaboratory,
            state: 3,
            typeSource: row.typeSource,
            orderId: row.id,
            inspectorList: inspectorList,
          },
        })
      } else {
        this.$router.push({
          path: "/inspectionTask/inspection",
          query: {
            sonLaboratory: row.sonLaboratory,
            state: 3,
            typeSource: row.typeSource,
            orderId: row.id,
            inspectorList: inspectorList,
          },
        })
      }
    },
    goback() {
      this.state = 0
@@ -1281,8 +1262,8 @@
      this.InspectionKey++
    },
    changeUser() {
      if (this.sonLaboratoryList.length > 0) {
        this.distributeData.sonLaboratory = this.sonLaboratoryList[0].value
      if (this.newJuLaboratoryList.length > 0) {
        this.distributeData.sonLaboratory = this.newJuLaboratoryList[0].value
      }
    },
    handleDelete(row) {