曹睿
2025-02-25 83be7ca0c138b64b3447cc207b63c7933690f6ec
src/views/business/inspectionReview/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,434 @@
<template>
  <div class="app-container">
    <div>
      <el-form :model="entity" ref="entity" size="small" :inline="true">
        <el-form-item label="委托编号" prop="entrustCode">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="entity.entrustCode"
                    @keyup.enter.native="refreshTable()"></el-input>
        </el-form-item>
        <el-form-item label="下单类别" prop="entrustCode">
          <el-select size="small" v-model="entity.typeSource" clearable style="width: 100%;" @change="refreshTable()">
            <el-option v-for="(a, i) in typeSourceList" :key="i" :label="a.label" :value="a.value"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button icon="el-icon-refresh" size="mini" @click="refresh">重 ç½®</el-button>
          <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">查 è¯¢</el-button>
        </el-form-item>
      </el-form>
      <div class="page_total">
        <span>总计任务数量:</span>
        <span>{{page.total}}</span>
      </div>
    </div>
    <div>
      <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
                  :rowClassName="rowClassName" :height="'calc(100vh - 270px)'" @pagination="pagination"
                  key="tableData0"></lims-table>
    </div>
<!--    <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == null">-->
<!--      <Add :active="activeFace" :currentId="currentId"/>-->
<!--    </div>-->
<!--    <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == 0">-->
<!--      <CustomsInspection :active="activeFace" :customsInspection="customsInspection" :currentId="currentId"/>-->
<!--    </div>-->
<!--    <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == 1">-->
<!--      <CopperOrder :active="activeFace" :currentId="currentId"></CopperOrder>-->
<!--    </div>-->
<!--    <Inspection v-if="state>0" @goback="goback" :orderId="orderId" :sonLaboratory="componentData.entity.sonLaboratory" :typeSource="typeSource" :state="state"/>-->
<!--    &lt;!&ndash;产业链信息查看&ndash;&gt;-->
<!--    <ShowInfo v-if="showInfoDialog" :showInfoDialog="showInfoDialog" ref="showInfoDialog"></ShowInfo>-->
    <!--报告查看-->
    <el-dialog title="报告查看" :visible.sync="issuedVisible" width="80vw" :modal-append-to-body="false"
               :fullscreen="fullscreen">
      <div class="full-screen">
        <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i>
        <img src="@/assets/images/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" >
      </div>
      <div style="height: 80vh;" v-if="issuedVisible">
        <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
      </div>
    </el-dialog>
    <el-dialog title="查看附件" :visible.sync="lookDialogVisible" width="800px" top="5vh" fullscreen>
      <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.tempUrlPdf" :currentFile="{}"
                   style="max-height: 90vh;overflow-y: auto;" />
    </el-dialog>
  </div>
</template>
<script>
import { getYearAndMonthAndDays } from "@/utils/date";
// import ShowInfo from "../do/b1-material-ins-order/showInfo.vue";
import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue";
import limsTable from "@/components/Table/lims-table.vue";
import {selectInsOrderPlanList, selectUserCondition} from "@/api/business/inspectionTask";
import {mapGetters} from "vuex";
import {upReportUrl} from "@/api/business/insReport";
import {delfile} from "@/api/business/rawMaterialOrder";
import filePreview from "@/components/Preview/filePreview.vue";
export default {
  components: {
    filePreview,
    onlyoffice,
    limsTable,
    // ShowInfo,
  },
  dicts: ["urgency_level", "inspection_task_state"],
  computed: {
    ...mapGetters(["nickName", "userId"]),
  },
  data() {
    return {
      lookDialogVisible: false,
      alone: false,
      tabList: [],
      active: 1,
      tabIndex: 0,
      entity: {
        sonLaboratory: null,
        insState: '3',
        userId: 0,
        typeSource: null,
        isCheck: 1
      },
      tableData: [],
      column: [
        {
          label: "委托编号",
          prop: "entrustCode",
          width: "160px",
          dataType: "link",
          linkMethod: "selectAllByOne",
        },
        { label: "样品名称", prop: "sample", width: "160px" },
        {
          label: "下单类别",
          prop: "typeSource",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            if (params == 0) {
              return "成品下单";
            } else {
              return "原材料下单";
            }
          },
        },
        { label: "样品型号", prop: "sampleModel", width: "120px" },
        {
          label: "紧急程度",
          prop: "type",
          dataType: "tag",
          formatData: (params) => {
            return this.urgencyLevel.find((m) => m.value == params).label;
          },
        },
        {
          label: "检验类型",
          prop: "orderType",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            return this.orderTypeList.find((m) => m.value == params).label;
          },
          formatType: (params) => {
            return this.orderTypeList.find((m) => m.value == params).type;
          },
        },
        {
          label: "状态",
          prop: "insState",
          dataType: "tag",
          formatData: (params) => {
            return this.inspectionTaskState.find((m) => m.value == params)
              .label;
          },
          formatType: (params) => {
            return this.inspectionTaskState.find((m) => m.value == params).type;
          },
        },
        { label: "检验人", prop: "userName" },
        { label: "复核人", prop: "checkName" },
        { label: "约定时间", prop: "appointed" },
        { label: "下发时间", prop: "sendTime", width: "140px" },
        { label: "检验开始时间", prop: "insTime", width: "140px" },
        { label: "理由", prop: "verifyTell", width: "140px" },
        {
          dataType: "action",
          fixed: "right",
          label: "操作",
          operation: [
            {
              name: "复核",
              type: "text",
              clickFun: (row) => {
                this.handleReview(row);
              },
              disabled: (row) => {
                return row.userName == null || row.userName && !row.userName.includes(this.nickName)
              }
            },
            {
              name: "下载报告",
              type: "text",
              clickFun: (row) => {
                this.download(row);
              },
            },
            {
              name: "上传",
              type: "upload",
              accept: '.doc,.docx',
              url: '/insReport/inReport',
              uploadIdFun: (row) => {
                return row.insReportId
              }
            },
            {
              name: "还原",
              type: "text",
              clickFun: (row) => {
                this.handleRestore(row);
              },
            },
            {
              name: "查看报告",
              type: "text",
              clickFun: (row) => {
                this.handleIssued(row);
              }
            },
            // {
            //   name: "产业链",
            //   type: "text",
            //   clickFun: (row) => {
            //     this.openInfoDialog(row);
            //   },
            //   disabled: (row) => {
            //     return row.typeSource !== 1
            //   },
            // }
          ],
        },
      ],
      page: {
        total: 0,
        size: 10,
        current: 0,
      },
      tableLoading: false,
      upIndex: 0,
      planTotal: 0,
      insStateList: [],
      state:0,//0:台账页,1:检验页面,2检验页面(复核),默认为0
      activeFace: 0, //1:下单,2:查看,3:审核,默认为0
      examine: null,
      isReport: 0,
      currentId: null,
      orderId: 0,
      personList:[],
      currentTime: null,
      sonLaboratoryList:[],
      typeSourceList: [
        {label: '成品下单', value: 0},
        {label: '原材料下单', value: 1},
      ],
      isCopper: null,
      customsInspection: {},
      typeSource: null,// 0:成品下单,1:原材料下单
      showInfoDialog: false, // äº§ä¸šé“¾ä¿¡æ¯æŸ¥çœ‹
      issuedVisible: false,
      fullscreen: false,
      option:null,
      orderTypeList: [
        {label: '委托试验', value: 'Customer-ordered test'},
        {label: '抽检', value: '抽检'},
        {label: '进厂检验', value: '进厂检验'},
        {label: '季度检验', value: 'Quarterly inspection'},
      ],
      urgencyLevel: [],
      inspectionTaskState: [],
    }
  },
  created() {
    this.getDicts("urgency_level").then((response) => {
      this.urgencyLevel = this.dictToValue(response.data);
    });
    this.getDicts("inspection_task_state").then((response) => {
      this.inspectionTaskState = this.dictToValue(response.data);
    });
    this.getAuthorizedPerson()
    this.currentTime = getYearAndMonthAndDays()
  },
  mounted() {
    this.refreshTable()
  },
  methods: {
    refreshTable() {
      this.tableLoading = true;
      let param = { ...this.entity, ...this.page };
      delete param.total;
      selectInsOrderPlanList({ ...param }).then((res) => {
        this.tableLoading = false;
        if (res.code === 200) {
          this.tableData = res.data.records;
          this.page.total = res.data.total;
        }
      }).catch((err) => {
        this.tableLoading = false;
      });
    },
    pagination({ page, limit }) {
      this.page.current = page;
      this.page.size = limit;
      this.refreshTable();
    },
    refresh() {
      this.resetForm('entity')
      this.refreshTable()
    },
    rowClassName({ row, rowIndex }) {
      if (this.currentTime == row.appointed) {
        return "highlight-warning-row-border";
      } else if (this.currentTime > row.appointed) {
        return "highlight-danger-row-border";
      }
      return "";
    },
    // æŸ¥çœ‹äº§ä¸šé“¾ä¿¡æ¯
    // openInfoDialog (row) {
    //   this.showInfoDialog = true
    //   this.$nextTick(() => {
    //     this.$refs.showInfoDialog.getInfo(row.ifsInventoryId)
    //   })
    // },
    selectAllByOne(row) {
      this.isCopper = row.isCopper
      this.customsInspection = row
      this.activeFace = 2;
      this.examine = 1;
      this.isReport = 0;
      this.currentId = parseInt(row.id)
      switch (row.isCopper) {
        case 0:
          // åŽŸææ–™
          this.$router.push({
            path: "/materialOrder/customsInspection", query: {
              customsInspection: row,
              active: this.activeFace,
              currentId: this.currentId,
              isReport: this.isReport
            }
          });
          break;
        case null:
          // æˆå“
          this.$router.push({
            path: "/productOrder/add", query: {
              examine: this.examine,
              active: this.activeFace,
              currentId: this.currentId
            }
          });
          break;
        case 1:
          // é“œæ
          this.$router.push({
            path: "/materialOrder/copperOrder", query: {
              active: this.activeFace,
              currentId: this.currentId
            }
          });
          break;
      }
    },
    // å¤æ ¸å›žè°ƒ
    handleReview(row){
      this.$router.push({
        path: "/inspectionTask/inspection",
        query: {
          sonLaboratory: row.sonLaboratory,
          state: 2,
          typeSource: row.typeSource,
          orderId: row.id,
        },
      })
    },
    // ä¸Šä¼ æŠ¥å‘Š
    handleUpload (row) {
    },
    // ä¸‹è½½æŠ¥å‘Š
    download(row) {
      let url = (row.urlS===null||row.urlS==='')?row.url:row.urlS
      const link = document.createElement('a');
      link.href = this.javaApi + url;
      link.target = '_blank';
      document.body.appendChild(link);
      link.click();
    },
    // è¿˜åŽŸæ“ä½œ
    handleRestore(row) {
      this.$confirm('是否还原当前报告?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        upReportUrl({id: row.insReportId}).then(res => {
          if (res.code === 200) {
            this.$message.success('还原成功')
            this.refreshTable()
          }
        })
      }).catch(() => { })
    },
    // æŸ¥çœ‹æŠ¥å‘Š
    handleIssued(row) {
      if (!row.tempUrlPdf) return this.$message.warning('文件未上传')
      this.currentInfo = row
      this.lookDialogVisible = true
      // this.currentInfo = row;
      // let fileName = row.url
      // let fileType = "docx"
      // if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
      //   fileName = row.tempUrlPdf
      //   fileType = "pdf"
      // }
      // fileName = fileName.replace('/word/','')
      // const userName = this.nickName
      // this.option = {
      //   url: this.javaApi + "/word/" + fileName,
      //   isEdit: false,
      //   fileType: fileType,
      //   title: fileName,
      //   lang: 'zh-CN',
      //   isPrint: false,
      //   user_id: 1,
      //   user_name: userName,
      //   editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
      // }
      // this.issuedVisible = true;
    },
    getAuthorizedPerson() {
      selectUserCondition({ type: 1 }).then((res) => {
        let data = [];
        res.data.forEach((a) => {
          data.push({
            label: a.name,
            value: a.id,
          });
        });
        this.personList = data;
      });
    },
  }
}
</script>
<style scoped>
.page_total {
  margin-bottom: 10px;
}
</style>