gaoluyang
2025-02-19 f139ecdb194a47ba4c34af9601de342688090d45
src/views/business/inspectionTask/index.vue
@@ -1,14 +1,10 @@
<style scoped>
.ins-order-plan-main .title {
  font-size: 20px;
  color: #3a7bfa;
}
.search {
  background-color: #fff;
  height: 80px;
  height: 40px;
  display: flex;
  align-items: center;
  margin-top: 20px;
}
.search_thing {
@@ -18,7 +14,7 @@
}
.search_label {
  width: 120px;
  width: 100px;
  font-size: 14px;
  text-align: right;
}
@@ -29,39 +25,27 @@
.ins-order-plan-main .search {
  width: 100%;
  margin-bottom: 10px;
  height: 80px;
  height: 40px;
  background-color: #fff;
  border-radius: 3px;
}
.search .form-inline {
  height: 50px;
  padding-top: 20px;
  padding-left: 50px;
}
.ins-order-plan-main .center {
  width: calc(100% - 40px);
  height: calc(100% - 60px - 80px - 40px);
  background-color: #fff;
  border-radius: 3px;
  padding: 20px;
}
.ins-order-plan-main .center .value-table {
  width: 100%;
  height: calc(100% - 68px);
  padding-top: 0px;
}
.tab {
  list-style-type: none;
  display: flex;
  padding-left: 6px;
}
.tab li {
  line-height: 24px;
  padding: 6px 14px;
  padding: 4px 10px;
  font-size: 14px;
  color: #333333;
  border: 1px solid #eeeeee;
@@ -102,32 +86,16 @@
.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-left: 20px;
          text-align: left;
          height: 60px;
          line-height: 60px;
        "
      >
        检验任务
      </p>
      <div class="search">
        <div class="search_thing">
          <div class="search_label">委托编号:</div>
          <div class="search_input">
            <el-input
              v-model="componentData.entity.entrustCode"
              v-model="queryParams.entrustCode"
              clearable
              placeholder="请输入"
              size="small"
@@ -139,13 +107,13 @@
          <div class="search_label">检验状态:</div>
          <div class="search_input">
            <el-select
              v-model="componentData.entity.insState"
              v-model="queryParams.insState"
              size="small"
              style="width: 100%"
              @change="refreshTable()"
            >
              <el-option
                v-for="(a, i) in insStateList"
                v-for="(a, i) in dict.type.inspection_task_state"
                :key="i"
                :label="a.label"
                :value="a.value"
@@ -153,14 +121,6 @@
            </el-select>
          </div>
        </div>
        <!--        <div class="search_thing">-->
        <!--          <div class="search_label">下单类别:</div>-->
        <!--          <div class="search_input">-->
        <!--            <el-select v-model="componentData.entity.typeSource" clearable size="small" 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>-->
        <!--          </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()"
@@ -172,10 +132,8 @@
        <div class="center-options">
          <el-row>
            <el-col :span="21">
              <div
                style="display: flex; align-items: center; margin-bottom: 10px"
              >
                <span style="margin-right: 8px">试验室种类:</span>
              <div style="display: flex; align-items: center">
                <span style="font-size: 14px">试验室种类:</span>
                <ul class="tab">
                  <li
                    v-for="(m, i) in tabList"
@@ -199,14 +157,12 @@
            <el-col :span="3">
              <div class="center-title">
                <span>总计任务数量:</span>
                <span v-if="$refs.insOrderPlan != undefined">{{
                  $refs.insOrderPlan.total
                }}</span>
                <span>{{ page.total }}</span>
              </div>
            </el-col>
          </el-row>
        </div>
        <ValueTable
        <!-- <ValueTable
          :key="upIndex"
          ref="insOrderPlan"
          :componentData="componentData"
@@ -216,7 +172,15 @@
          :url="$api.insOrderPlan.selectInsOrderPlanList"
          class="value-table"
          @handleInspection="handleInspection"
        />
        /> -->
        <lims-table
          :tableData="tableData"
          :column="column"
          :page="page"
          :tableLoading="tableLoading"
          :height="'calc(100vh - 290px)'"
          @pagination="pagination"
        ></lims-table>
      </div>
    </div>
    <el-dialog :visible.sync="claimVisible" title="提示" width="400px">
@@ -398,12 +362,12 @@
        >
      </span>
    </el-dialog>
    <un-pass-retest-result
    <!-- <un-pass-retest-result
      v-if="retestVisible"
      :retestInfo="retestInfo"
      :retestVisible="retestVisible"
      @closeRetestLook="closeRetestLook"
    ></un-pass-retest-result>
    ></un-pass-retest-result> -->
    <!--产业链信息查看-->
    <!-- <ShowInfo
      v-if="showInfoDialog"
@@ -422,16 +386,37 @@
// 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 {
  getRetestResult,
  claimInsOrderPlan,
  upPlanUser2,
  upPlanUser,
  selectUserCondition,
  getBindingProductByProductId,
  getProductTreeByProductId,
  bindingProductTreeByProductId,
  delProductTreeByProductId,
  selectInsOrderPlanList,
} from "@/api/business/inspectionTask.js";
import { mapGetters } from "vuex";
export default {
  components: {
    EditInspectionItem,
    // CopperOrder,
    // ShowInfo,
    ValueTable,
    limsTable,
    // Inspection,
    // Add,
    // CustomsInspection,
    // UnPassRetestResult
  },
  dicts: ["urgency_level", "inspection_task_state"],
  computed: {
    ...mapGetters(["name", "userId"]),
  },
  data() {
    return {
@@ -742,30 +727,212 @@
      isCopper: null,
      bindCurrentInfo: {},
      lookInfo: {},
      orderTypeList: [
        {
          value: "Customer-ordered test",
          label: "委托试验",
          type: "success",
          effect: "plain",
        },
        {
          value: "抽检",
          label: "抽检",
          type: "",
          effect: "plain",
        },
        {
          value: "进厂检验",
          label: "进厂检验",
          type: "info",
          effect: "plain",
        },
        {
          value: "Quarterly inspection",
          label: "季度检验",
          type: "warning",
          effect: "plain",
        },
      ],
      urgencyLevel: [],
      inspectionTaskState: [],
      tableData: [],
      column: [
        {
          label: "委托编号",
          prop: "entrustCode",
          width: "140px",
          dataType: "link",
          linkMethod: "selectAllByOne",
        },
        { label: "样品名称", prop: "sample", width: "140px" },
        {
          label: "下单类别",
          prop: "typeSource",
          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",
          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: "操作",
          width: "260px",
          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);
              },
            },
          ],
        },
      ],
      page: {
        total: 0,
        size: 10,
        current: 0,
      },
      tableLoading: false,
      queryParams: {},
    };
  },
  created() {
    // this.getLaboratoryDicts()
    this.getTypeDicts();
    this.getInsStateDicts();
    this.getAuthorizedPerson();
    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);
    });
  },
  mounted() {
    this.entityCopy = this.HaveJson(this.componentData.entity);
    let user = JSON.parse(localStorage.getItem("user"));
    this.componentData.entity.userId = user.userId;
    this.getPower();
    this.queryParams.userId = this.userId;
    // this.getPower();
    this.refreshTable();
  },
  methods: {
    getList() {
      this.tableLoading = true;
      let param = { ...this.queryParams, ...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.getList();
    },
    // 修改检验值
    editInspection(row) {
      this.$refs.editInspectionItem.showDialog(row.id);
    },
    // 刷新页面
    refreshView() {
      this.InspectionKey++;
      this.getList();
    },
    // 数据查看
    handleDataLook(row) {
@@ -775,13 +942,7 @@
    },
    // 查看不合格复测结果
    getRetestResult(row) {
      this.$axios
        .get(
          this.$api.insOrder.getRetestResult +
            "?insProductId=" +
            row.insProductId
        )
        .then((res) => {
      getRetestResult({ insProductId: row.insProductId }).then((res) => {
          if (res.code == 201) return;
          this.retestVisible = true;
          this.retestInfo = res.data;
@@ -826,15 +987,19 @@
      }
    },
    changeCheckBox(val) {
      this.componentData.entity.userId = val ? 0 : null;
      this.queryParams.userId = val ? 0 : null;
      this.refreshTable();
    },
    refresh() {
      this.componentData.entity = this.HaveJson(this.entityCopy);
      let user = JSON.parse(localStorage.getItem("user"));
      this.componentData.entity.userId = user.userId;
      this.queryParams = {};
      this.queryParams.userId = this.userId;
      this.alone = true;
      this.refreshTable();
    },
    refreshTable(e) {
      this.page.current = 1;
      this.queryParams.typeSource = this.tabIndex;
      this.getList();
    },
    // claimFun(row) {
    //    if (row) {
@@ -855,12 +1020,7 @@
    },
    confirmClaim() {
      this.loading = true;
      this.$axios
        .post(this.$api.insOrderPlan.claimInsOrderPlan, this.sampleUserForm, {
          headers: {
            "Content-Type": "application/json",
          },
        })
      claimInsOrderPlan(this.sampleUserForm)
        .then((res) => {
          if (res.code === 200 && res.data) {
            this.loading = false;
@@ -873,10 +1033,6 @@
          console.error(error);
          this.loading = false;
        });
    },
    refreshTable(e) {
      this.componentData.entity.typeSource = this.tabIndex;
      this.$refs.insOrderPlan.selectList(e);
    },
    changeRowClass({ row, rowIndex }) {
      if (this.currentTime == row.appointed) {
@@ -891,61 +1047,21 @@
        sampleName: null,
        state: null,
      };
      this.componentData.entity.insState = null;
      this.componentData.entity.sampleName = null;
      this.queryParams.insState = null;
      this.queryParams.sampleName = null;
      this.refreshTable();
    },
    onSubmit() {
      this.componentData.entity.insState = this.searchForm.state;
      this.componentData.entity.sampleName = this.searchForm.sampleName;
      this.queryParams.insState = this.searchForm.state;
      this.queryParams.sampleName = this.searchForm.sampleName;
      this.$nextTick(() => {
        this.refreshTable();
      });
    },
    handleTab(m, i) {
      this.tabIndex = i;
      this.componentData.entity.sonLaboratory = "";
      this.queryParams.sonLaboratory = "";
      this.refreshTable();
    },
    getTypeDicts() {
      this.$axios
        .post(this.$api.enums.selectEnumByCategory, {
          category: "紧急程度",
        })
        .then((res) => {
          let data = res.data;
          data.forEach((ele) => {
            if (ele.value === "0") {
              ele.type = "success";
            } else if (ele.value === "1") {
              ele.type = "warning";
            } else if (ele.value === "2") {
              ele.type = "danger";
            }
          });
          this.componentData.tagField.type.select = data;
        });
    },
    getInsStateDicts() {
      this.$axios
        .post(this.$api.enums.selectEnumByCategory, {
          category: "检验任务状态",
        })
        .then((res) => {
          let data = res.data;
          this.insStateList = data;
          data.forEach((ele) => {
            //0:待检验 1:检验中 2:已检验 3:待复核 4:复核未通过 5:复核通过
            if (["2", "5"].includes(ele.value)) {
              ele.type = "success";
            } else if (["1", "3"].includes(ele.value)) {
              ele.type = "warning";
            } else if (["0", "4"].includes(ele.value)) {
              ele.type = "danger";
            }
          });
          this.componentData.tagField.insState.select = data;
        });
    },
    // getLaboratoryDicts() {
    //    this.$axios.post(this.$api.enums.selectEnumByCategory, {
@@ -985,9 +1101,8 @@
      if (row.userName) {
        inspectorList = row.userName.split(",");
      }
      let user = JSON.parse(localStorage.getItem("user"));
      if (user) {
        inspectorList.push(user.name);
      if (this.name) {
        inspectorList.push(this.name);
      }
      this.inspectorList = inspectorList;
      this.sonLaboratory = row.sonLaboratory;
@@ -1002,9 +1117,8 @@
      if (row.userName) {
        inspectorList = row.userName.split(",");
      }
      let user = JSON.parse(localStorage.getItem("user"));
      if (user) {
        inspectorList.push(user.name);
      if (this.name) {
        inspectorList.push(this.name);
      }
      this.inspectorList = inspectorList;
      this.sonLaboratory = row.sonLaboratory;
@@ -1016,11 +1130,7 @@
      this.orderId = row.id;
      this.connect = {};
      this.connectVisible = true;
      this.$axios
        .post(this.$api.insOrderPlan.upPlanUser2, {
          orderId: this.orderId,
        })
        .then((res) => {
      upPlanUser2({ orderId: this.orderId }).then((res) => {
          if (res.code === 200 && res.data.length > 0) {
            this.sonLaboratoryList = [];
            res.data.forEach((m) => {
@@ -1051,8 +1161,7 @@
        return;
      }
      this.loading = true;
      this.$axios
        .post(this.$api.insOrderPlan.upPlanUser, {
      upPlanUser({
          orderId: this.orderId,
          userId: this.connect.connectPerson,
          sonLaboratory: this.connect.sonLaboratory,
@@ -1075,7 +1184,7 @@
      this.orderId = row.id;
    },
    getAuthorizedPerson() {
      this.$axios.get(this.$api.user.getUserMenu).then((res) => {
      selectUserCondition().then((res) => {
        let data = [];
        res.data.forEach((a) => {
          data.push({
@@ -1089,12 +1198,7 @@
    // 绑定检验项绑定
    getBinding(row) {
      this.bindCurrentInfo = row;
      this.$axios
        .get(
          this.$api.insOrderPlan.getBindingProductByProductId +
            "?productId=" +
            row.insProductId
        )
      getBindingProductByProductId({ productId: row.insProductId })
        .then((res) => {
          if (res.coe == 201) {
            // this.$message.error('未绑定检验项')
@@ -1109,12 +1213,9 @@
        });
    },
    openBindAdd() {
      this.$axios
        .get(
          this.$api.insOrderPlan.getProductTreeByProductId +
            "?productId=" +
            this.bindCurrentInfo.insProductId
        )
      getProductTreeByProductId({
        productId: this.bindCurrentInfo.insProductId,
      })
        .then((res) => {
          if (res.coe == 201) {
            // this.$message.error('未绑定检验项')
@@ -1140,20 +1241,10 @@
        delete item.template;
      });
      this.loading = true;
      this.$axios
        .post(
          this.$api.insOrderPlan.bindingProductTreeByProductId,
          {
      bindingProductTreeByProductId({
            insProductId: this.bindCurrentInfo.insProductId,
            insProductBindingList: this.chooseBindAddList,
          },
          {
            headers: {
              "Content-Type": "application/json",
            },
            noQs: true,
          }
        )
      })
        .then((res) => {
          this.loading = false;
          if (res.code == 201) {
@@ -1174,12 +1265,7 @@
        cancelButtonText: "取消",
        type: "warning",
      }).then(async () => {
        this.$axios
          .get(
            this.$api.insOrderPlan.delProductTreeByProductId +
              "?productId=" +
              row.id
          )
        delProductTreeByProductId({ productId: row.id })
          .then((res) => {
            if (res.coe == 201) {
              // this.$message.error('未绑定检验项')