spring
2025-04-08 4f94a66bc8ad9a57295f161de9195d5528b1d181
src/views/business/inspectionTask/index.vue
@@ -1,188 +1,98 @@
<style scoped>
.search {
  background-color: #fff;
  height: 40px;
  display: flex;
  align-items: center;
  margin-top: 20px;
}
.search_thing {
  display: flex;
  align-items: center;
  height: 50px;
}
.search_label {
  width: 100px;
  font-size: 14px;
  text-align: right;
}
.search_input {
  width: calc(100% - 120px);
}
.ins-order-plan-main .search {
  width: 100%;
  height: 40px;
  background-color: #fff;
  border-radius: 3px;
}
.ins-order-plan-main .center {
  background-color: #fff;
  border-radius: 3px;
  padding: 20px;
  padding-top: 0px;
}
.tab {
  list-style-type: none;
  display: flex;
  padding-left: 6px;
}
.tab li {
  line-height: 24px;
  padding: 4px 10px;
  font-size: 14px;
  color: #333333;
  border: 1px solid #eeeeee;
  cursor: pointer;
}
.tab li:nth-child(1) {
  border-radius: 8px 0 0 8px;
}
.tab li:nth-last-child(1) {
  border-radius: 0 8px 8px 0;
}
.tab li.active {
  border-color: #3a7bfa;
  color: #3a7bfa;
}
.center .center-options .center-title {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: right;
}
.center .center-options .center-title span:last-child {
  color: #3a7bfa;
  font-size: 23px;
  font-weight: 400;
}
.view-self-checkbox {
  margin-left: 50px;
}
</style>
<style>
.ins-order-plan-main .el-form-item__label {
  color: #000;
}
</style>
<template>
  <div class="ins-order-plan-main">
    <div v-show="activeFace == 0 && state == 0" style="height: 100%">
  <div class="app-container">
    <div style="height: 100%">
      <div class="search">
        <div class="search_thing">
          <div class="search_label">委托编号:</div>
          <div class="search_input">
            <el-input
              v-model="queryParams.entrustCode"
              clearable
              placeholder="请输入"
              size="small"
              @keyup.enter.native="refreshTable()"
            ></el-input>
          </div>
        </div>
        <div class="search_thing">
          <div class="search_label">检验状态:</div>
          <div class="search_input">
            <el-select
              v-model="queryParams.insState"
              size="small"
              style="width: 100%"
              @change="refreshTable()"
            >
              <el-option
                v-for="(a, i) in dict.type.inspection_task_state"
                :key="i"
                :label="a.label"
                :value="a.value"
              ></el-option>
        <el-form :model="queryParams" ref="queryParams" size="small" :inline="true">
          <el-form-item label="委托编号" prop="entrustCode">
            <el-input v-model="queryParams.entrustCode" clearable placeholder="请输入" size="small"
              @keyup.enter.native="refreshTable()"></el-input>
          </el-form-item>
          <el-form-item label="检验状态" prop="insState">
            <el-select v-model="queryParams.insState" size="small" style="width: 100%" @change="refreshTable()">
              <el-option v-for="(a, i) in dict.type.inspection_task_state" :key="i" :label="a.label"
                :value="a.value"></el-option>
            </el-select>
          </div>
        </div>
        <div class="search_thing" style="padding-left: 30px">
          <el-button size="small" @click="refresh()">重 置</el-button>
          <el-button size="small" type="primary" @click="refreshTable()"
            >查 询</el-button
          >
        </div>
          </el-form-item>
          <el-form-item>
            <el-button size="mini" type="primary" @click="refreshTable()">查询</el-button>
            <el-button size="mini" @click="refresh()">重置</el-button>
          </el-form-item>
        </el-form>
      </div>
      <div class="center">
        <div class="center-options">
          <el-row>
            <el-col :span="21">
              <div style="display: flex; align-items: center">
                <span style="font-size: 14px">试验室种类:</span>
                <ul class="tab">
                  <li
                    v-for="(m, i) in tabList"
                    :key="i"
                    :class="{ active: i == tabIndex }"
                    @click="handleTab(m, i)"
                  >
                    {{ m.label.replace("试验室", "") }}
                  </li>
                </ul>
                <div>
                  <el-checkbox
                    v-model="alone"
                    class="view-self-checkbox"
                    @change="changeCheckBox"
                    ><span>我的任务</span></el-checkbox
                  >
                </div>
              </div>
            </el-col>
            <el-col :span="3">
              <div class="center-title">
                <span>总计任务数量:</span>
                <span>{{ page.total }}</span>
              </div>
            </el-col>
          </el-row>
          <div style="display: flex; align-items: center">
            <span style="font-size: 14px">试验室种类:</span>
            <ul class="tab">
              <li v-for="(m, i) in tabList" :key="i" :class="{ active: i == tabIndex }" @click="handleTab(m, i)">
                {{ m.label.replace("试验室", "") }}
              </li>
            </ul>
            <div>
              <el-checkbox v-model="alone" class="view-self-checkbox"
                @change="changeCheckBox"><span>我的任务</span></el-checkbox>
            </div>
          </div>
          <div class="center-title">
            <span>总计任务数量:</span>
            <span>{{ page.total }}</span>
          </div>
        </div>
        <lims-table
          :tableData="tableData"
          :column="column"
          :page="page"
          :tableLoading="tableLoading"
          :height="'calc(100vh - 290px)'"
          @pagination="pagination"
          key="tableData0"
        ></lims-table>
        <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
          :rowClassName="rowClassName" :height="'calc(100vh - 300px)'" @pagination="pagination" key="tableData0">
          <div slot="action" slot-scope="scope">
            <el-button size="small" type="text" @click="handleDataLook(scope.row)">数据查看</el-button>
            <el-button type="text" size="small"
              :disabled="(scope.row.userName == null || scope.row.insState == 3 || scope.row.insState == 5) && checkPermi(['update:product:onPlan'])"
              @click="editInspection(scope.row)">修改检验值</el-button>
            <el-button type="text" size="small" :disabled="(
              scope.row.userName == null ||
              scope.row.insState == 3 ||
              scope.row.insState == 5 ||
              (scope.row.userName && !scope.row.userName.includes(nickName))
            )" @click="handleInspection(scope.row)">检验</el-button>
            <el-button type="text" size="small" :disabled="(
              scope.row.userName == null ||
              scope.row.insState == 5 ||
              scope.row.insState == 3 ||
              (scope.row.userName && !scope.row.userName.includes(nickName))
            )" @click="handleConnect(scope.row)">交接</el-button>
            <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">原始记录</el-button>
            <el-popover placement="bottom" trigger="hover" style="margin-left: 6px">
              <template #reference>
                <el-button link type="text" size="small">更多</el-button>
              </template>
              <div>
                <el-button :disabled="(scope.row.insState != 3 || scope.row.userName == null ||
                  (scope.row.userName && !scope.row.userName.includes(nickName)))" style="margin-left: 10px"
                  type="text" size="small" @click="download(scope.row)">下载报告</el-button>
                <el-upload ref='upload' :action="javaApi + '/insReport/inReport'" :before-upload="beforeUpload"
                  :data="{ id: scope.row.insReportId }" :headers="uploadHeader" :on-error="onError"
                  :on-success="handleSuccessUp" :show-file-list="false" style="display: inline;margin: 0 6px"
                  accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'>
                  <el-button :disabled="(scope.row.insState != 3 || scope.row.userName == null ||
                    (scope.row.userName && !scope.row.userName.includes(nickName)))" size="small"
                    type="text">上传</el-button>
                </el-upload>
                <el-button :disabled="(scope.row.insState != 3 || scope.row.userName == null ||
                  (scope.row.userName && !scope.row.userName.includes(nickName)))" type="text" size="small"
                  @click="handleRestore(scope.row)">还原</el-button>
                <el-button :disabled="(scope.row.insState != 3 || scope.row.userName == null ||
                  (scope.row.userName && !scope.row.userName.includes(nickName)))" type="text" size="small"
                  @click="handleIssued(scope.row)">查看报告</el-button>
              </div>
            </el-popover>
          </div>
        </lims-table>
      </div>
    </div>
    <el-dialog :visible.sync="claimVisible" title="提示" width="400px">
      是否认领委托编号<span style="color: #33c130">{{
        sampleUserForm.entrustCode
      }}</span
      >的任务
      }}</span>的任务
      <span slot="footer" class="dialog-footer">
        <el-button @click="claimVisible = false">取 消</el-button>
        <el-button :loading="loading" type="primary" @click="confirmClaim"
          >确 定</el-button
        >
        <el-button :loading="loading" type="primary" @click="confirmClaim">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog :visible.sync="connectVisible" title="检验交接" width="400px">
@@ -191,18 +101,8 @@
          <span class="required-span">* </span>交接人员:
        </div>
        <div class="search_input">
          <el-select
            v-model="connect.connectPerson"
            filterable
            placeholder="请选择"
            style="width: 100%"
          >
            <el-option
              v-for="item in personList"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
          <el-select v-model="connect.connectPerson" filterable placeholder="请选择" style="width: 100%">
            <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </div>
@@ -212,105 +112,47 @@
          <span class="required-span">* </span>试验室:
        </div>
        <div class="search_input">
          <el-select
            v-model="connect.sonLaboratory"
            filterable
            placeholder="请选择"
            style="width: 100%"
          >
            <el-option
              v-for="item in sonLaboratoryList"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
          <el-select v-model="connect.sonLaboratory" filterable placeholder="请选择" style="width: 100%">
            <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 :loading="loading" type="primary" @click="confirmConnect"
          >确 定</el-button
        >
        <el-button :loading="loading" type="primary" @click="confirmConnect">确 定</el-button>
      </span>
    </el-dialog>
    <div
      v-if="activeFace > 0 && isCopper == null"
      style="width: 100%; height: 100%"
    >
      <!-- <Add :active="activeFace" :currentId="currentId" :examine="examine" /> -->
    </div>
    <div
      v-if="activeFace > 0 && isCopper == 0"
      style="width: 100%; height: 100%"
    >
      <!-- <CustomsInspection
        :active="activeFace"
        :currentId="currentId"
        :customsInspection="customsInspection"
        :isReport="isReport"
      /> -->
    </div>
    <div
      v-if="activeFace > 0 && isCopper == 1"
      style="width: 100%; height: 100%"
    >
      <!-- <CopperOrder :active="activeFace" :currentId="currentId"></CopperOrder> -->
    </div>
    <!--<Inspection
      v-if="state > 0"
      :key="InspectionKey"
      :inspectorList="inspectorList"
      :orderId="orderId"
      :sonLaboratory="sonLaboratory"
      :state="state"
      :typeSource="typeSource"
      @goback="goback"
      @refreshView="refreshView"
    />-->
    <el-dialog :visible.sync="dataDialogVisible" title="数据查看" width="80%">
      <div v-if="dataDialogVisible" style="height: 70vh; overflow-y: auto">
        <lims-table
          :tableData="lookTableData"
          :column="lookColumn"
          :page="lookPage"
          :tableLoading="lookTableLoading"
          :height="'60vh'"
          @pagination="lookPagination"
          key="tableData1"
        ></lims-table>
      <div v-if="dataDialogVisible" style="height: 74vh; overflow-y: auto">
        <div>
          <el-form :model="entity" :inline="true">
            <el-form-item label="检验项" prop="outputWorkTime">
              <el-input v-model="entity.inspectionItem" clearable size="small"></el-input>
            </el-form-item>
            <el-form-item>
              <el-button size="small" type="primary" @click="getLookList">查询</el-button>
            </el-form-item>
          </el-form>
        </div>
        <lims-table :tableData="lookTableData" :column="lookColumn" :page="lookPage" :tableLoading="lookTableLoading"
          :height="'60vh'" @pagination="lookPagination" key="tableData1"></lims-table>
      </div>
    </el-dialog>
    <el-dialog
      :visible.sync="bindDialogVisible"
      title="检验项绑定"
      width="600px"
    >
      <div
        slot="title"
        style="
    <el-dialog :visible.sync="bindDialogVisible" title="检验项绑定" width="600px">
      <div slot="title" style="
          display: flex;
          align-items: center;
          justify-content: space-between;
        "
      >
        ">
        <span>检验项绑定</span>
        <el-button
          style="float: right; margin-left: 360px"
          size="small"
          @click="openBindAdd"
          type="primary"
        >
        <el-button style="float: right; margin-left: 360px" size="small" @click="openBindAdd" type="primary">
          新增
        </el-button>
      </div>
      <el-table :data="bindTableData" style="width: 100%" height="70vh">
        <el-table-column
          prop="inspectionItemClass"
          label="检验项分类"
          width="150"
        >
      <el-table :data="bindTableData" style="width: 100%" height="70vh" v-loading="bindTableDataLoading"
        :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border>
        <el-table-column prop="inspectionItemClass" label="检验项分类" width="150">
        </el-table-column>
        <el-table-column prop="inspectionItem" label="检验项" width="150">
        </el-table-column>
@@ -318,30 +160,17 @@
        </el-table-column>
        <el-table-column label="操作">
          <template slot-scope="scope">
            <el-button size="mini" type="text" @click="handleDelete(scope.row)"
              >删除</el-button
            >
            <el-button size="mini" type="text" @click="handleDelete(scope.row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>
    <el-dialog
      :visible.sync="bindAddDialogVisible"
      title="选择绑定"
      width="600px"
    >
      <el-table
        :data="bindAddTableData"
        style="width: 100%"
        height="60vh"
        @selection-change="handleBindAddSelectionChange"
      >
    <el-dialog :visible.sync="bindAddDialogVisible" title="选择绑定" width="600px">
      <el-table :data="bindAddTableData" style="width: 100%" height="60vh"
        :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border
        @selection-change="handleBindAddSelectionChange">
        <el-table-column type="selection" width="55"> </el-table-column>
        <el-table-column
          prop="inspectionItemClass"
          label="检验项分类"
          width="150"
        >
        <el-table-column prop="inspectionItemClass" label="检验项分类" width="150">
        </el-table-column>
        <el-table-column prop="inspectionItem" label="检验项" width="150">
        </el-table-column>
@@ -350,40 +179,49 @@
      </el-table>
      <span slot="footer" class="dialog-footer">
        <el-button @click="bindAddDialogVisible = false">取 消</el-button>
        <el-button :loading="loading" type="primary" @click="bindAdd"
          >绑 定</el-button
        >
        <el-button :loading="loading" type="primary" @click="bindAdd">绑 定</el-button>
      </span>
    </el-dialog>
    <!-- <un-pass-retest-result
      v-if="retestVisible"
      :retestInfo="retestInfo"
      :retestVisible="retestVisible"
      @closeRetestLook="closeRetestLook"
    ></un-pass-retest-result> -->
    <!--产业链信息查看-->
    <!-- <ShowInfo
      v-if="showInfoDialog"
      ref="showInfoDialog"
      :showInfoDialog="showInfoDialog"
    ></ShowInfo> -->
    <!--修改检验值弹框-->
    <edit-inspection-item ref="editInspectionItem"></edit-inspection-item>
    <!--查看工时弹框-->
    <viewManHourDia ref="viewManHourDia"></viewManHourDia>
    <!--不合格复测查看弹框-->
    <un-pass-retest-result v-if="retestVisible" :retestInfo="retestInfo" :retestVisible="retestVisible"
      @closeRetestLook="closeRetestLook"></un-pass-retest-result>
    <!--报告查看-->
    <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 ValueTable from "@/components/Table/value-table.vue";
// import Inspection from "../do/b1-inspect-order-plan/Inspection.vue";
// import CustomsInspection from "../do/b1-material-ins-order/customs-inspection.vue";
import { getYearAndMonthAndDays } from "@/utils/date";
// import Add from "../do/b1-ins-order/add.vue";
// import ShowInfo from "../do/b1-material-ins-order/showInfo.vue";
// import CopperOrder from "../do/b1-material-ins-order/copper-order.vue";
// import UnPassRetestResult from "../do/b1-material-ins-order/unPassRetestResult.vue";
import EditInspectionItem from "./components/EditInspectionItem.vue";
import limsTable from "@/components/Table/lims-table.vue";
import viewManHourDia from "./components/viewManHourDia.vue"
import UnPassRetestResult from "@/components/rawMaterialInspection/unPassRetestResult.vue"
import {
  getRetestResult,
  claimInsOrderPlan,
  upPlanUser2,
  upPlanUser,
@@ -396,27 +234,33 @@
  selectSampleAndProductByOrderId,
} from "@/api/business/inspectionTask.js";
import { mapGetters } from "vuex";
import { getRetestResult } from "@/api/business/rawMaterialOrder";
import { upReportUrl } from "@/api/business/insReport";
import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue";
import filePreview from "@/components/Preview/filePreview.vue";
export default {
  name: 'InspectionTask',
  components: {
    filePreview, onlyoffice,
    EditInspectionItem,
    // CopperOrder,
    // ShowInfo,
    ValueTable,
    limsTable,
    // Inspection,
    // Add,
    // CustomsInspection,
    // UnPassRetestResult
    viewManHourDia,
    UnPassRetestResult
  },
  dicts: ["urgency_level", "inspection_task_state"],
  computed: {
    ...mapGetters(["name", "userId"]),
    ...mapGetters(["nickName", "userId"]),
  },
  data() {
    return {
      issuedVisible: false,
      fullscreen: false,
      lookDialogVisible: false,
      option: null,
      InspectionKey: 1,
      bindDialogVisible: false,
      bindAddDialogVisible: false,
      bindTableDataLoading: false,
      bindTableData: [],
      bindAddTableData: [],
      chooseBindAddList: [],
@@ -435,85 +279,6 @@
      ],
      active: 1,
      tabIndex: 0,
      componentDataDataLook: {
        entity: {
          id: 0,
          orderBy: {
            field: "sampleCode",
            order: "asc",
          },
        },
        isIndex: false,
        showSelect: false,
        select: false,
        do: [
          {
            id: "parent",
            font: "不合格复测查看",
            type: "text",
            method: "getRetestResult",
            disabFun: (row, index) => {
              return row.insResult != 0;
            },
          },
          {
            id: "parent",
            font: "检验项绑定",
            type: "text",
            method: "getBinding",
            disabFun: (row, index) => {
              return (
                this.lookInfo.userName == null ||
                this.lookInfo.insState == 3 ||
                this.lookInfo.insState == 5
              );
            },
          },
        ],
        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: 6,
            },
          ],
        },
        requiredAdd: [],
        requiredUp: [],
      },
      dataDialogVisible: false,
      planTotal: 0,
      insStateList: [],
@@ -540,7 +305,6 @@
      customsInspection: {},
      showInfoDialog: false, // 产业链信息查看
      isReport: 0,
      retestVisible: false,
      retestInfo: [],
      isCopper: null,
      bindCurrentInfo: {},
@@ -566,7 +330,7 @@
        },
        {
          value: "Quarterly inspection",
          label: "季度检验",
          label: "可靠性检验",
          type: "warning",
          effect: "plain",
        },
@@ -578,14 +342,15 @@
        {
          label: "委托编号",
          prop: "entrustCode",
          width: "140px",
          width: "160px",
          dataType: "link",
          linkMethod: "selectAllByOne",
        },
        { label: "样品名称", prop: "sample", width: "140px" },
        { label: "样品名称", prop: "sample", width: "160px" },
        {
          label: "下单类别",
          prop: "typeSource",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            if (params == 0) {
@@ -601,12 +366,28 @@
          prop: "type",
          dataType: "tag",
          formatData: (params) => {
            return this.urgencyLevel.find((m) => m.value == params).label;
            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: "orderType",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            return this.orderTypeList.find((m) => m.value == params).label;
@@ -620,11 +401,18 @@
          prop: "insState",
          dataType: "tag",
          formatData: (params) => {
            return this.inspectionTaskState.find((m) => m.value == params)
              .label;
            if (this.inspectionTaskState.find((m) => m.value == params)) {
              return this.inspectionTaskState.find((m) => m.value == params).label;
            } else {
              return null
            }
          },
          formatType: (params) => {
            return this.inspectionTaskState.find((m) => m.value == params).type;
            if (this.inspectionTaskState.find((m) => m.value == params)) {
              return this.inspectionTaskState.find((m) => m.value == params).type;
            } else {
              return null
            }
          },
        },
        { label: "检验人", prop: "userName" },
@@ -634,72 +422,16 @@
        { label: "检验开始时间", prop: "insTime", width: "140px" },
        { label: "理由", prop: "verifyTell", width: "140px" },
        {
          dataType: "action",
          fixed: "right",
          label: "操作",
          operation: [
            {
              name: "数据查看",
              type: "text",
              clickFun: (row) => {
                this.handleDataLook(row);
              },
            },
            {
              name: "修改检验值",
              type: "text",
              clickFun: (row) => {
                this.editInspection(row);
              },
              disabled: (row) => {
                return (
                  row.userName == null || row.insState == 3 || row.insState == 5
                );
              },
            },
            {
              name: "检验",
              type: "text",
              clickFun: (row) => {
                this.handleInspection(row);
              },
              disabled: (row) => {
                return (
                  row.userName == null ||
                  row.insState == 3 ||
                  row.insState == 5 ||
                  (row.userName && !row.userName.includes(this.name))
                );
              },
            },
            {
              name: "交接",
              type: "text",
              clickFun: (row) => {
                this.handleConnect(row);
              },
              disabled: (row) => {
                return (
                  row.userName == null ||
                  row.insState == 5 ||
                  row.insState == 3 ||
                  (row.userName && !row.userName.includes(this.name))
                );
              },
            },
            {
              name: "原始记录",
              type: "text",
              clickFun: (row) => {
                this.viewInspectInfo(row);
              },
            },
          ],
        },
          dataType: "slot",
          slot: "action",
          width: '340px',
          label: "操作"
        }
      ],
      page: {
        total: 0,
        size: 10,
        size: 20,
        current: 0,
      },
      tableLoading: false,
@@ -721,21 +453,24 @@
          type: "",
        },
      ],
      // 数据查看相关字段---开始
      entity: {
        inspectionItem: "",
      },
      lookTableData: [],
      lookColumn: [
        {
          label: "样品编号",
          prop: "sampleCode",
          width: "140px",
          dataType: "link",
          linkMethod: "selectAllByOne",
          mergeCol: true, //合并列
        },
        { label: "样品名称", prop: "sample", width: "140px" },
        { label: "样品名称", prop: "sample", width: "140px", mergeCol: true },
        { label: "检验项分类", prop: "inspectionItemClass" },
        { label: "检验项", prop: "inspectionItem", width: "140px" },
        { label: "检验子项", prop: "inspectionItemSubclass" },
        { label: "单位", prop: "unit" },
        { label: "样品型号", prop: "model" },
        { label: "样品型号", prop: "model", mergeCol: true },
        { label: "条件", prop: "radius" },
        { label: "电缆标识", prop: "cableTag" },
        { label: "试验要求", prop: "tell" },
@@ -745,12 +480,23 @@
          prop: "insResult",
          dataType: "tag",
          formatData: (params) => {
            return this.insResultList.find((m) => m.value == params).label;
            let obj = this.insResultList.find((m) => m.value == params)
            if (obj) {
              return this.insResultList.find((m) => m.value == params).label;
            } else {
              return null
            }
          },
          formatType: (params) => {
            return this.insResultList.find((m) => m.value == params).type;
            let obj = this.insResultList.find((m) => m.value == params)
            if (obj) {
              return this.insResultList.find((m) => m.value == params).type;
            } else {
              return null
            }
          },
        },
        { label: "检验人", prop: "checkUserName" },
        {
          dataType: "action",
          fixed: "right",
@@ -760,10 +506,10 @@
              name: "不合格复测查看",
              type: "text",
              clickFun: (row) => {
                this.getRetestResult(row);
                this.getRetestResultInfo(row);
              },
              disabled: (row) => {
                return row.insResult != 0;
                return row.insResult != 0
              },
            },
            {
@@ -785,14 +531,17 @@
      ],
      lookPage: {
        total: 0,
        size: 10,
        size: 20,
        current: 0,
      },
      lookTableLoading: false,
      // 数据查看相关字段---结束
      retestVisible: false,
    };
  },
  created() {
  mounted() {
    this.getAuthorizedPerson();
    this.queryParams.userId = this.userId;
    this.currentTime = getYearAndMonthAndDays();
    this.getDicts("urgency_level").then((response) => {
      this.urgencyLevel = this.dictToValue(response.data);
@@ -800,10 +549,18 @@
    this.getDicts("inspection_task_state").then((response) => {
      this.inspectionTaskState = this.dictToValue(response.data);
    });
    this.refreshTable();
  },
  mounted() {
  activated() {
    this.getAuthorizedPerson();
    this.queryParams.userId = this.userId;
    // this.getPower();
    this.currentTime = getYearAndMonthAndDays();
    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.refreshTable();
  },
  methods: {
@@ -830,7 +587,7 @@
    },
    getLookList() {
      this.lookTableLoading = true;
      let param = { id: this.lookInfo.id, ...this.lookPage };
      let param = { id: this.lookInfo.id, ...this.lookPage, inspectionItem: this.entity.inspectionItem };
      delete param.total;
      selectSampleAndProductByOrderId({ ...param })
        .then((res) => {
@@ -838,6 +595,7 @@
          if (res.code === 200) {
            this.lookTableData = res.data.records;
            this.lookPage.total = res.data.total;
            this.dataDialogVisible = true;
          }
        })
        .catch((err) => {
@@ -853,61 +611,14 @@
    editInspection(row) {
      this.$refs.editInspectionItem.showDialog(row.id);
    },
    // 刷新页面
    refreshView() {
      this.getList();
    // 查看工时
    viewManHour(row) {
      this.$refs.viewManHourDia.showDialog(row.id, row.insState);
    },
    // 数据查看
    handleDataLook(row) {
      this.lookInfo = row;
      this.getLookList();
      this.dataDialogVisible = true;
    },
    // 查看不合格复测结果
    getRetestResult(row) {
      getRetestResult({ insProductId: row.insProductId }).then((res) => {
        if (res.code == 201) return;
        this.retestVisible = true;
        this.retestInfo = res.data;
      });
    },
    //
    closeRetestLook() {
      this.retestVisible = false;
    },
    // 权限分配
    getPower(radio) {
      let power = JSON.parse(sessionStorage.getItem("power"));
      let inspection = false;
      let connect = false;
      let review = false;
      let claim = false;
      for (var i = 0; i < power.length; i++) {
        if (power[i].menuMethod == "doInsOrder") {
          inspection = true;
        }
        if (power[i].menuMethod == "upPlanUser") {
          connect = true;
        }
        if (power[i].menuMethod == "verifyPlan") {
          review = true;
        }
        if (power[i].menuMethod == "claimInsOrderPlan") {
          claim = true;
        }
      }
      if (!claim) {
        this.componentData.do.splice(3, 1);
      }
      if (!review) {
        this.componentData.do.splice(2, 1);
      }
      if (!connect) {
        this.componentData.do.splice(1, 1);
      }
      if (!inspection) {
        this.componentData.do.splice(0, 1);
      }
    },
    changeCheckBox(val) {
      this.queryParams.userId = val ? 0 : null;
@@ -924,16 +635,57 @@
      this.queryParams.typeSource = this.tabIndex;
      this.getList();
    },
    // claimFun(row) {
    //    if (row) {
    //       this.sampleUserForm = {
    //          entrustCode: row.entrustCode,
    //          insSampleId: row.id,
    //       sonLaboratory: row.sonLaboratory,
    //       }
    //       this.claimVisible = true
    //    }
    // },
    // 下载报告
    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) {
      console.log('================')
      // todo: 查看报告组件
      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;
    },
    // 查看产业链信息
    openInfoDialog(row) {
      this.showInfoDialog = true;
@@ -957,7 +709,7 @@
          this.loading = false;
        });
    },
    changeRowClass({ row, rowIndex }) {
    rowClassName({ row, rowIndex }) {
      if (this.currentTime == row.appointed) {
        return "highlight-warning-row-border";
      } else if (this.currentTime > row.appointed) {
@@ -965,43 +717,11 @@
      }
      return "";
    },
    onReset() {
      this.searchForm = {
        sampleName: null,
        state: null,
      };
      this.queryParams.insState = null;
      this.queryParams.sampleName = null;
      this.refreshTable();
    },
    onSubmit() {
      this.queryParams.insState = this.searchForm.state;
      this.queryParams.sampleName = this.searchForm.sampleName;
      this.$nextTick(() => {
        this.refreshTable();
      });
    },
    handleTab(m, i) {
      this.tabIndex = i;
      this.queryParams.sonLaboratory = "";
      this.refreshTable();
    },
    // getLaboratoryDicts() {
    //    this.$axios.post(this.$api.enums.selectEnumByCategory, {
    //       category: "子实验室"
    //    }).then(res => {
    //       this.tabList = res.data.map(ele => {
    //          return {
    //             label: ele.label,
    //             value: ele.value
    //          }
    //       })
    //       if(this.tabList.length>0){
    //          this.componentData.entity.sonLaboratory = this.tabList[0].value
    //       }
    //       this.refreshTable()
    //    })
    // },
    selectAllByOne(row) {
      this.isCopper = row.isCopper;
      this.customsInspection = row;
@@ -1009,9 +729,39 @@
      this.examine = 1;
      this.isReport = 0;
      this.currentId = parseInt(row.id);
    },
    playOrder(num) {
      this.activeFace = num;
      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;
      }
    },
    goback() {
      this.state = 0;
@@ -1024,14 +774,24 @@
      if (row.userName) {
        inspectorList = row.userName.split(",");
      }
      if (this.name) {
        inspectorList.push(this.name);
      if (this.nickName) {
        inspectorList.push(this.nickName);
      }
      this.inspectorList = inspectorList;
      this.sonLaboratory = row.sonLaboratory;
      this.state = 1;
      this.typeSource = row.typeSource;
      this.orderId = row.id;
      this.$router.push({
        path: "/inspectionTask/inspection",
        query: {
          inspectorList: this.inspectorList,
          sonLaboratory: this.sonLaboratory,
          state: this.state,
          typeSource: this.typeSource,
          orderId: this.orderId,
        },
      });
    },
    // 查看检验数据
    viewInspectInfo(row) {
@@ -1040,14 +800,24 @@
      if (row.userName) {
        inspectorList = row.userName.split(",");
      }
      if (this.name) {
        inspectorList.push(this.name);
      if (this.nickName) {
        inspectorList.push(this.nickName);
      }
      this.inspectorList = inspectorList;
      this.sonLaboratory = row.sonLaboratory;
      this.state = 3;
      this.typeSource = row.typeSource;
      this.orderId = row.id;
      this.$router.push({
        path: "/inspectionTask/inspection",
        query: {
          inspectorList: this.inspectorList,
          sonLaboratory: this.sonLaboratory,
          state: this.state,
          typeSource: this.typeSource,
          orderId: this.orderId,
        },
      });
    },
    handleConnect(row) {
      this.orderId = row.id;
@@ -1102,12 +872,8 @@
          this.loading = false;
        });
    },
    handleReview(row) {
      this.state = 2;
      this.orderId = row.id;
    },
    getAuthorizedPerson() {
      selectUserCondition().then((res) => {
      selectUserCondition({ type: 1 }).then((res) => {
        let data = [];
        res.data.forEach((a) => {
          data.push({
@@ -1118,16 +884,21 @@
        this.personList = data;
      });
    },
    // 查看不合格复测结果
    getRetestResultInfo(row) {
      getRetestResult({ insProductId: row.insProductId }).then(res => {
        this.retestVisible = true
        this.retestInfo = res.data
      })
    },
    closeRetestLook() {
      this.retestVisible = false
    },
    // 绑定检验项绑定
    getBinding(row) {
      this.bindCurrentInfo = row;
      getBindingProductByProductId({ productId: row.insProductId })
        .then((res) => {
          if (res.coe == 201) {
            // this.$message.error('未绑定检验项')
            return;
          }
          // console.log(res)
          this.bindTableData = res.data;
          this.bindDialogVisible = true;
        })
@@ -1140,11 +911,6 @@
        productId: this.bindCurrentInfo.insProductId,
      })
        .then((res) => {
          if (res.coe == 201) {
            // this.$message.error('未绑定检验项')
            return;
          }
          // console.log(res)
          this.bindAddTableData = res.data;
          this.bindAddDialogVisible = true;
        })
@@ -1170,10 +936,6 @@
      })
        .then((res) => {
          this.loading = false;
          if (res.code == 201) {
            this.$message.error("绑定失败");
            return;
          }
          this.$message.success("绑定成功");
          this.bindAddDialogVisible = false;
          this.getBinding(this.bindCurrentInfo);
@@ -1188,19 +950,101 @@
        cancelButtonText: "取消",
        type: "warning",
      }).then(async () => {
        delProductTreeByProductId({ productId: row.id })
          .then((res) => {
            if (res.coe == 201) {
              // this.$message.error('未绑定检验项')
              return;
            }
            this.getBinding(this.bindCurrentInfo);
          })
          .catch((error) => {
            console.error(error);
          });
        this.bindTableDataLoading = true
        delProductTreeByProductId({ productId: row.id }).then((res) => {
          this.bindTableDataLoading = false
          this.getBinding(this.bindCurrentInfo);
        }).catch((error) => {
          this.bindTableDataLoading = false
          console.error(error);
        });
      });
    },
    beforeUpload(file) {
      if (file.size > 1024 * 1024 * 10) {
        this.$message.error('上传文件不超过10M');
        this.$refs.upload.clearFiles()
        return false;
      } else {
        return true;
      }
    },
    onError(error, file, fileList, index) {
      this.$message.error('文件上传失败,请重试');
    },
    onExceed() {
      this.$message.warning("超出文件个数");
    },
    handleSuccessUp(response) {
      if (response.code == 200) {
        this.$refs.upload.clearFiles()
        this.$message.success("上传成功");
        this.refreshTable()
      } else {
        this.$message.error(response.message);
      }
    },
  },
};
</script>
<style scoped>
.search_thing {
  display: flex;
  align-items: center;
  height: 50px;
}
.search_label {
  width: 100px;
  font-size: 14px;
  text-align: right;
}
.search_input {
  width: calc(100% - 120px);
}
.tab {
  list-style-type: none;
  display: flex;
  padding-left: 6px;
}
.tab li {
  line-height: 24px;
  padding: 4px 10px;
  font-size: 14px;
  color: #333333;
  border: 1px solid #eeeeee;
  cursor: pointer;
}
.tab li:nth-child(1) {
  border-radius: 8px 0 0 8px;
}
.tab li:nth-last-child(1) {
  border-radius: 0 8px 8px 0;
}
.tab li.active {
  border-color: #3a7bfa;
  color: #3a7bfa;
}
.center-options {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.center .center-options .center-title span:last-child {
  color: #3a7bfa;
  font-size: 23px;
  font-weight: 400;
}
.view-self-checkbox {
  margin-left: 50px;
}
</style>