spring
2025-02-19 2dbb9e797247b975361d47c1b679bee75f29be1b
检验任务列表页面搬迁10%
已修改1个文件
已添加4个文件
1673 ■■■■■ 文件已修改
src/api/business/inspectionTask.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 213 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/components/EditInspectionItem.vue 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/index.vue 1197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/inspection.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/inspectionTask.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
import request from "@/utils/request";
// é€šè¿‡æ£€éªŒå•查询检验数据(数据查看)
export function selectSampleAndProductByOrderId(query) {
  return request({
    url: "/insOrder/selectSampleAndProductByOrderId",
    method: "get",
    params: query,
  });
}
// æ£€éªŒä»»åŠ¡-修改检验值
export function updateProductOnPlan(data) {
  return request({
    url: "/insOrderPlan/updateProductOnPlan",
    method: "post",
    data: data,
  });
}
src/router/index.js
@@ -1,10 +1,10 @@
import Vue from 'vue'
import Router from 'vue-router'
import Vue from "vue";
import Router from "vue-router";
Vue.use(Router)
Vue.use(Router);
/* Layout */
import Layout from '@/layout'
import Layout from "@/layout";
/**
 * Note: è·¯ç”±é…ç½®é¡¹
@@ -31,179 +31,196 @@
// å…¬å…±è·¯ç”±
export const constantRoutes = [
  {
    path: '/redirect',
    path: "/redirect",
    component: Layout,
    hidden: true,
    children: [
      {
        path: '/redirect/:path(.*)',
        component: () => import('@/views/redirect')
      }
    ]
        path: "/redirect/:path(.*)",
        component: () => import("@/views/redirect"),
      },
    ],
  },
  {
    path: '/login',
    component: () => import('@/views/login'),
    hidden: true
    path: "/login",
    component: () => import("@/views/login"),
    hidden: true,
  },
  {
    path: '/register',
    component: () => import('@/views/register'),
    hidden: true
    path: "/register",
    component: () => import("@/views/register"),
    hidden: true,
  },
  {
    path: '/404',
    component: () => import('@/views/error/404'),
    hidden: true
    path: "/404",
    component: () => import("@/views/error/404"),
    hidden: true,
  },
  {
    path: '/401',
    component: () => import('@/views/error/401'),
    hidden: true
    path: "/401",
    component: () => import("@/views/error/401"),
    hidden: true,
  },
  {
    path: '',
    path: "",
    component: Layout,
    redirect: 'index',
    redirect: "index",
    children: [
      {
        path: 'index',
        component: () => import('@/views/index'),
        name: 'Index',
        meta: { title: '首页', icon: 'dashboard', affix: true }
      }
    ]
        path: "index",
        component: () => import("@/views/index"),
        name: "Index",
        meta: { title: "首页", icon: "dashboard", affix: true },
      },
    ],
  },
  {
    path: '/user',
    path: "/user",
    component: Layout,
    hidden: true,
    redirect: 'noredirect',
    redirect: "noredirect",
    children: [
      {
        path: 'profile',
        component: () => import('@/views/system/user/profile/index'),
        name: 'Profile',
        meta: { title: '个人中心', icon: 'user' }
      }
    ]
  }
]
        path: "profile",
        component: () => import("@/views/system/user/profile/index"),
        name: "Profile",
        meta: { title: "个人中心", icon: "user" },
      },
    ],
  },
];
// åŠ¨æ€è·¯ç”±ï¼ŒåŸºäºŽç”¨æˆ·æƒé™åŠ¨æ€åŽ»åŠ è½½
export const dynamicRoutes = [
  {
    // åŽŸææ–™ä¸‹å•
    path: '/materialOrder',
    path: "/materialOrder",
    component: Layout,
    hidden: true,
    permissions: ['business:order'],
    permissions: ["business:order"],
    children: [
      {
        // é“œææ–™ä¸‹å•
        path: 'customsInspection',
        component: () => import('@/views/business/materialOrder/customsInspection'),
        name: 'customsInspection',
        meta: { title: '铜材料下单', activeMenu: '/business/materialOrder' }
      }
    ]
        path: "customsInspection",
        component: () =>
          import("@/views/business/materialOrder/customsInspection"),
        name: "customsInspection",
        meta: { title: "铜材料下单", activeMenu: "/business/materialOrder" },
      },
    ],
  },
  {
    // æ£€éªŒä»»åŠ¡
    path: "/inspectionTask",
    component: Layout,
    hidden: true,
    permissions: ["business:inspection"],
    children: [
      {
        // æ£€éªŒå•详情
        path: "inspection",
        component: () => import("@/views/business/inspectionTask/inspection"),
        name: "inspection",
        meta: { title: "检验单详情", activeMenu: "/business/inspectionTask" },
      },
    ],
  },
  {
    // ç”¨æˆ·ç®¡ç†
    path: '/system/user-auth',
    path: "/system/user-auth",
    component: Layout,
    hidden: true,
    permissions: ['system:user:edit'],
    permissions: ["system:user:edit"],
    children: [
      {
        path: 'role/:userId(\\d+)',
        component: () => import('@/views/system/user/authRole'),
        name: 'AuthRole',
        meta: { title: '分配角色', activeMenu: '/system/user' }
      }
    ]
        path: "role/:userId(\\d+)",
        component: () => import("@/views/system/user/authRole"),
        name: "AuthRole",
        meta: { title: "分配角色", activeMenu: "/system/user" },
      },
    ],
  },
  {
    // è§’色管理
    path: '/system/role-auth',
    path: "/system/role-auth",
    component: Layout,
    hidden: true,
    permissions: ['system:role:edit'],
    permissions: ["system:role:edit"],
    children: [
      {
        path: 'user/:roleId(\\d+)',
        component: () => import('@/views/system/role/authUser'),
        name: 'AuthUser',
        meta: { title: '分配用户', activeMenu: '/system/role' }
      }
    ]
        path: "user/:roleId(\\d+)",
        component: () => import("@/views/system/role/authUser"),
        name: "AuthUser",
        meta: { title: "分配用户", activeMenu: "/system/role" },
      },
    ],
  },
  {
    // æ•°æ®å­—å…¸
    path: '/system/dict-data',
    path: "/system/dict-data",
    component: Layout,
    hidden: true,
    permissions: ['system:dict:list'],
    permissions: ["system:dict:list"],
    children: [
      {
        path: 'index/:dictId(\\d+)',
        component: () => import('@/views/system/dict/data'),
        name: 'Data',
        meta: { title: '字典数据', activeMenu: '/system/dict' }
      }
    ]
        path: "index/:dictId(\\d+)",
        component: () => import("@/views/system/dict/data"),
        name: "Data",
        meta: { title: "字典数据", activeMenu: "/system/dict" },
      },
    ],
  },
  {
    // æ•°æ®å­—å…¸
    path: '/customer',
    path: "/customer",
    component: Layout,
    hidden: true,
    permissions: ['customer:edit'],
    permissions: ["customer:edit"],
  },
  {
    path: '/monitor/job-log',
    path: "/monitor/job-log",
    component: Layout,
    hidden: true,
    permissions: ['monitor:job:list'],
    permissions: ["monitor:job:list"],
    children: [
      {
        path: 'index/:jobId(\\d+)',
        component: () => import('@/views/monitor/job/log'),
        name: 'JobLog',
        meta: { title: '调度日志', activeMenu: '/monitor/job' }
      }
    ]
        path: "index/:jobId(\\d+)",
        component: () => import("@/views/monitor/job/log"),
        name: "JobLog",
        meta: { title: "调度日志", activeMenu: "/monitor/job" },
      },
    ],
  },
  {
    path: '/tool/gen-edit',
    path: "/tool/gen-edit",
    component: Layout,
    hidden: true,
    permissions: ['tool:gen:edit'],
    permissions: ["tool:gen:edit"],
    children: [
      {
        path: 'index/:tableId(\\d+)',
        component: () => import('@/views/tool/gen/editTable'),
        name: 'GenEdit',
        meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
      }
    ]
  }
]
        path: "index/:tableId(\\d+)",
        component: () => import("@/views/tool/gen/editTable"),
        name: "GenEdit",
        meta: { title: "修改生成配置", activeMenu: "/tool/gen" },
      },
    ],
  },
];
// é˜²æ­¢è¿žç»­ç‚¹å‡»å¤šæ¬¡è·¯ç”±æŠ¥é”™
let routerPush = Router.prototype.push;
let routerReplace = Router.prototype.replace;
// push
Router.prototype.push = function push(location) {
  return routerPush.call(this, location).catch(err => err)
}
  return routerPush.call(this, location).catch((err) => err);
};
// replace
Router.prototype.replace = function push(location) {
  return routerReplace.call(this, location).catch(err => err)
}
  return routerReplace.call(this, location).catch((err) => err);
};
export default new Router({
  mode: 'history', // åŽ»æŽ‰url中的#
  mode: "history", // åŽ»æŽ‰url中的#
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})
  routes: constantRoutes,
});
src/views/business/inspectionTask/components/EditInspectionItem.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,244 @@
<template>
  <div>
    <el-dialog
      :visible.sync="editInspectionDia"
      title="修改检验项"
      width="80%"
      @close="editInspectionDia = false"
    >
      <TableCard :showTitle="false">
        <template v-slot:table>
          <lims-table
            :column="editColumn"
            :table-data="editTableData"
            :table-loading="editLoading"
            :page="page"
            height="600"
            style="padding: 0 15px"
            @pagination="pagination"
          >
          </lims-table>
        </template>
      </TableCard>
    </el-dialog>
    <el-dialog :visible.sync="editAskDia" title="修改" width="50%">
      <el-form ref="form" :model="editForm" label-width="100px">
        <el-form-item label="要求值">
          <el-input v-model="editForm.ask" type="textarea"></el-input>
        </el-form-item>
        <el-form-item label="要求描述">
          <el-input v-model="editForm.tell" type="textarea"></el-input>
        </el-form-item>
        <el-form-item label="检验值类型">
          <el-select
            v-model="editForm.inspectionValueType"
            clearable
            placeholder="请选择"
            size="small"
            style="width: 100%"
          >
            <el-option
              v-for="item in inspectionValueTypeList"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            ></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="editAskDia = false">取 æ¶ˆ</el-button>
        <el-button
          :loading="handleEditLoading"
          type="primary"
          @click="handleEdit"
          >ç¡® å®š</el-button
        >
      </span>
    </el-dialog>
  </div>
</template>
<script>
import TableCard from "@/components/TableCard/index.vue";
import limsTable from "@/components/Table/lims-table.vue";
import {
  selectSampleAndProductByOrderId,
  updateProductOnPlan,
} from "@/api/business/inspectionTask.js";
export default {
  name: "EditInspectionItem",
  // import å¼•入的组件需要注入到对象中才能使用
  components: { TableCard, limsTable },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      editInspectionDia: false,
      entity: {
        id: 0,
      },
      inspectionValueTypeList: [], // æ£€éªŒå€¼ç±»åž‹ä¸‹æ‹‰æ¡†
      editColumn: [
        {
          label: "样品编号",
          minWidth: "160px",
          prop: "sampleCode",
        },
        {
          label: "样品名称",
          minWidth: "120px",
          prop: "sample",
        },
        {
          label: "检验项分类",
          minWidth: "120px",
          prop: "inspectionItemClass",
        },
        {
          label: "检验项",
          minWidth: "120px",
          prop: "inspectionItem",
        },
        {
          label: "检验子项",
          minWidth: "120px",
          prop: "inspectionItemSubclass",
        },
        {
          label: "条件",
          minWidth: "120px",
          prop: "radius",
        },
        {
          label: "电缆标识",
          minWidth: "120px",
          prop: "cableTag",
        },
        {
          label: "单位",
          prop: "unit",
        },
        {
          label: "要求值",
          minWidth: "300px",
          prop: "ask",
        },
        {
          label: "要求描述",
          minWidth: "300px",
          prop: "tell",
        },
        {
          label: "样品型号",
          minWidth: "120px",
          prop: "model",
        },
        {
          dataType: "action",
          width: "80px",
          label: "操作",
          fixed: "right",
          operation: [
            {
              name: "编辑",
              type: "text",
              clickFun: (row) => {
                this.editIns(row);
              },
            },
          ],
        },
      ],
      editTableData: [],
      editLoading: false,
      page: {
        total: 0,
        size: 10,
        current: 0,
      },
      editAskDia: false,
      editForm: {
        id: "",
        ask: "",
        tell: "",
        inspectionValueType: "",
      },
      handleEditLoading: false,
    };
  },
  // æ–¹æ³•集合
  methods: {
    showDialog(id) {
      this.editInspectionDia = true;
      this.entity.id = id;
      this.getTableData();
    },
    // èŽ·å–åˆ—è¡¨æ•°æ®
    getTableData() {
      this.editLoading = true;
      selectSampleAndProductByOrderId({
        ...this.entity,
        ...this.page,
      })
        .then((res) => {
          this.editLoading = false;
          if (res.code === 201) return;
          this.editTableData = res.data.body.records;
          this.page.total = res.data.body.total;
        })
        .catch(() => {
          this.editLoading = false;
        });
    },
    // ä¿®æ”¹å¼¹æ¡†
    editIns(row) {
      this.editAskDia = true;
      this.selectEnumByCategoryForInspectionValueType();
      this.editForm = { ...row };
    },
    // æäº¤ä¿®æ”¹
    handleEdit() {
      const params = {
        id: this.editForm.insProductId,
        ask: this.editForm.ask,
        tell: this.editForm.tell,
        inspectionValueType: this.editForm.inspectionValueType,
      };
      this.handleEditLoading = true;
      updateProductOnPlan(params)
        .then((res) => {
          this.handleEditLoading = false;
          if (res.code === 201) return;
          this.$message.success("修改成功");
          this.editAskDia = false;
          this.getTableData();
        })
        .catch(() => {
          this.handleEditLoading = false;
        });
    },
    // å¹´åº¦è®¡åˆ’分页
    pagination({ page, limit }) {
      this.page.current = page;
      this.page.size = limit;
      this.getTableData();
    },
    selectEnumByCategoryForInspectionValueType() {
      this.$axios
        .post(this.$api.enums.selectEnumByCategory, {
          category: "检验值类型",
        })
        .then((res) => {
          this.inspectionValueTypeList = res.data;
        });
    },
  },
};
</script>
<style scoped>
.pagination {
  display: flex;
  justify-content: space-between;
}
</style>
src/views/business/inspectionTask/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1197 @@
<style scoped>
.ins-order-plan-main .title {
  font-size: 20px;
  color: #3a7bfa;
}
.search {
  background-color: #fff;
  height: 80px;
  display: flex;
  align-items: center;
}
.search_thing {
  display: flex;
  align-items: center;
  height: 50px;
}
.search_label {
  width: 120px;
  font-size: 14px;
  text-align: right;
}
.search_input {
  width: calc(100% - 120px);
}
.ins-order-plan-main .search {
  width: 100%;
  margin-bottom: 10px;
  height: 80px;
  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);
}
.tab {
  list-style-type: none;
  display: flex;
}
.tab li {
  line-height: 24px;
  padding: 6px 14px;
  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;
}
.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"
              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="componentData.entity.insState"
              size="small"
              style="width: 100%"
              @change="refreshTable()"
            >
              <el-option
                v-for="(a, i) in insStateList"
                :key="i"
                :label="a.label"
                :value="a.value"
              ></el-option>
            </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()"
            >查 è¯¢</el-button
          >
        </div>
      </div>
      <div class="center">
        <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>
                <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 v-if="$refs.insOrderPlan != undefined">{{
                  $refs.insOrderPlan.total
                }}</span>
              </div>
            </el-col>
          </el-row>
        </div>
        <ValueTable
          :key="upIndex"
          ref="insOrderPlan"
          :componentData="componentData"
          :isColumnWidth="true"
          :tableRowClassName="changeRowClass"
          :upUrl="$api.user.updateUser"
          :url="$api.insOrderPlan.selectInsOrderPlanList"
          class="value-table"
          @handleInspection="handleInspection"
        />
      </div>
    </div>
    <el-dialog :visible.sync="claimVisible" title="提示" width="400px">
      æ˜¯å¦è®¤é¢†å§”托编号<span style="color: #33c130">{{
        sampleUserForm.entrustCode
      }}</span
      >的任务
      <span slot="footer" class="dialog-footer">
        <el-button @click="claimVisible = false">取 æ¶ˆ</el-button>
        <el-button :loading="loading" type="primary" @click="confirmClaim"
          >ç¡® å®š</el-button
        >
      </span>
    </el-dialog>
    <el-dialog :visible.sync="connectVisible" title="检验交接" width="400px">
      <div class="search_thing">
        <div class="search_label" style="width: 90px">
          <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-option>
          </el-select>
        </div>
      </div>
      <div class="search_thing">
        <div class="search_label" style="width: 90px">
          <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-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
        >
      </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">
        <ValueTable
          ref="ValueTableDataLook"
          :componentData="componentDataDataLook"
          :rowKey="'insProductId'"
          :url="$api.insOrder.selectSampleAndProductByOrderId"
        />
      </div>
    </el-dialog>
    <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>
      </div>
      <el-table :data="bindTableData" style="width: 100%" height="70vh">
        <el-table-column
          prop="inspectionItemClass"
          label="检验项分类"
          width="150"
        >
        </el-table-column>
        <el-table-column prop="inspectionItem" label="检验项" width="150">
        </el-table-column>
        <el-table-column prop="inspectionItemSubclass" label="检验子项">
        </el-table-column>
        <el-table-column label="操作">
          <template slot-scope="scope">
            <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-table-column type="selection" width="55"> </el-table-column>
        <el-table-column
          prop="inspectionItemClass"
          label="检验项分类"
          width="150"
        >
        </el-table-column>
        <el-table-column prop="inspectionItem" label="检验项" width="150">
        </el-table-column>
        <el-table-column prop="inspectionItemSubclass" label="检验子项">
        </el-table-column>
      </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
        >
      </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>
  </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 EditInspectionItem from "./components/EditInspectionItem.vue";
export default {
  components: {
    EditInspectionItem,
    // CopperOrder,
    // ShowInfo,
    ValueTable,
    // Inspection,
    // Add,
    // CustomsInspection,
  },
  data() {
    return {
      InspectionKey: 1,
      bindDialogVisible: false,
      bindAddDialogVisible: false,
      bindTableData: [],
      bindAddTableData: [],
      chooseBindAddList: [],
      examine: null,
      inspectorList: [], //检验人员列表
      alone: true,
      sampleUserForm: {
        entrustCode: null,
        insSampleId: null,
        userId: null,
      },
      claimVisible: false,
      tabList: [
        { label: "委托", value: 0 },
        { label: "原材料", value: 1 },
      ],
      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,
      componentData: {
        entity: {
          orderBy: {
            field: "entrustCode",
            order: "asc",
          },
          sonLaboratory: null,
          insState: null,
          userId: null,
          typeSource: null,
        },
        isIndex: true,
        showSelect: false,
        select: false,
        init: false,
        needSort: ["createTime", "sendTime", "type", "appointed", "insState"],
        do: [
          {
            id: "",
            font: "数据查看",
            type: "text",
            method: "handleDataLook",
          },
          {
            id: "",
            font: "修改检验值",
            type: "text",
            method: "editInspection",
            disabFun: (row, index) => {
              return (
                row.userName == null || row.insState == 3 || row.insState == 5
              );
            },
          },
          {
            id: "",
            font: "检验",
            type: "text",
            method: "handleInspection",
            disabFun: (row, index) => {
              return (
                row.userName == null ||
                row.insState == 3 ||
                row.insState == 5 ||
                (row.userName &&
                  !row.userName.includes(
                    JSON.parse(localStorage.getItem("user")).name
                  ))
              );
            },
          },
          {
            id: "",
            font: "交接",
            type: "text",
            method: "handleConnect",
            disabFun: (row, index) => {
              return (
                row.userName == null ||
                row.insState == 5 ||
                row.insState == 3 ||
                (row.userName &&
                  !row.userName.includes(
                    JSON.parse(localStorage.getItem("user")).name
                  ))
              );
            },
          },
          // {
          //   font: '产业链',
          //   type: 'text',
          //   method: 'openInfoDialog',
          //   disabFun: (row, index) => {
          //     return row.typeSource !== 1
          //   }
          // },
          // {
          //     id: '',
          //     font: '认领',
          //     type: 'text',
          //     method: 'claimFun',
          //     disabFun: (row, index) => {
          //         return row.userName != null || row.checkName!=null
          //     }
          // },
          {
            id: "",
            font: "原始记录",
            type: "text",
            method: "viewInspectInfo",
          },
        ],
        linkEvent: {
          entrustCode: {
            method: "selectAllByOne",
          },
        },
        tagField: {
          type: {
            select: [],
          },
          insState: {
            select: [],
          },
          insResult: {
            select: [
              {
                value: 0,
                label: "不合格",
                type: "danger",
              },
              {
                value: 1,
                label: "合格",
                type: "success",
              },
              {
                value: "",
                label: "未出结果",
                type: "info",
              },
            ],
          },
          typeSource: {
            select: [
              {
                value: 0,
                label: "成品下单",
                type: "info",
              },
              {
                value: 1,
                label: "原材料下单",
                type: "info",
              },
              {
                value: 2,
                label: "原材料下单",
                type: "info",
              },
            ],
          },
          orderType: {
            select: [
              {
                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",
              },
            ],
          },
        },
        selectField: {},
        requiredAdd: [],
        requiredUp: [],
      },
      upIndex: 0,
      planTotal: 0,
      insStateList: [],
      state: 0, // 0:台账页,1:检验页面,2检验页面(复核),默认为0,3数据查看
      typeSource: null, // 0:成品下单,1:原材料下单
      sonLaboratory: null, // 0:委托,1:原材料
      activeFace: 0, // 1:下单,2:查看,3:审核,默认为0
      currentId: null,
      entityCopy: {},
      orderId: 0,
      personList: [],
      connectVisible: false,
      connect: {
        connectPerson: "",
        sonLaboratory: "",
      },
      loading: false,
      currentTime: null,
      sonLaboratoryList: [],
      typeSourceList: [
        { label: "成品下单", value: 0 },
        { label: "原材料下单", value: 1 },
      ],
      customsInspection: {},
      showInfoDialog: false, // äº§ä¸šé“¾ä¿¡æ¯æŸ¥çœ‹
      isReport: 0,
      retestVisible: false,
      retestInfo: [],
      isCopper: null,
      bindCurrentInfo: {},
      lookInfo: {},
    };
  },
  created() {
    // this.getLaboratoryDicts()
    this.getTypeDicts();
    this.getInsStateDicts();
    this.getAuthorizedPerson();
    this.currentTime = getYearAndMonthAndDays();
  },
  mounted() {
    this.entityCopy = this.HaveJson(this.componentData.entity);
    let user = JSON.parse(localStorage.getItem("user"));
    this.componentData.entity.userId = user.userId;
    this.getPower();
    this.refreshTable();
  },
  methods: {
    // ä¿®æ”¹æ£€éªŒå€¼
    editInspection(row) {
      this.$refs.editInspectionItem.showDialog(row.id);
    },
    // åˆ·æ–°é¡µé¢
    refreshView() {
      this.InspectionKey++;
    },
    // æ•°æ®æŸ¥çœ‹
    handleDataLook(row) {
      this.lookInfo = row;
      this.componentDataDataLook.entity.id = row.id;
      this.dataDialogVisible = true;
    },
    // æŸ¥çœ‹ä¸åˆæ ¼å¤æµ‹ç»“æžœ
    getRetestResult(row) {
      this.$axios
        .get(
          this.$api.insOrder.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.componentData.entity.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.alone = true;
      this.refreshTable();
    },
    // claimFun(row) {
    //     if (row) {
    //         this.sampleUserForm = {
    //             entrustCode: row.entrustCode,
    //             insSampleId: row.id,
    //       sonLaboratory: row.sonLaboratory,
    //         }
    //         this.claimVisible = true
    //     }
    // },
    // æŸ¥çœ‹äº§ä¸šé“¾ä¿¡æ¯
    openInfoDialog(row) {
      this.showInfoDialog = true;
      this.$nextTick(() => {
        this.$refs.showInfoDialog.getInfo(row.ifsInventoryId);
      });
    },
    confirmClaim() {
      this.loading = true;
      this.$axios
        .post(this.$api.insOrderPlan.claimInsOrderPlan, this.sampleUserForm, {
          headers: {
            "Content-Type": "application/json",
          },
        })
        .then((res) => {
          if (res.code === 200 && res.data) {
            this.loading = false;
            this.$message.success("认领成功");
            this.claimVisible = false;
            this.refreshTable("page");
          }
        })
        .catch((error) => {
          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) {
        return "highlight-warning-row-border";
      } else if (this.currentTime > row.appointed) {
        return "highlight-danger-row-border";
      }
      return "";
    },
    onReset() {
      this.searchForm = {
        sampleName: null,
        state: null,
      };
      this.componentData.entity.insState = null;
      this.componentData.entity.sampleName = null;
      this.refreshTable();
    },
    onSubmit() {
      this.componentData.entity.insState = this.searchForm.state;
      this.componentData.entity.sampleName = this.searchForm.sampleName;
      this.$nextTick(() => {
        this.refreshTable();
      });
    },
    handleTab(m, i) {
      this.tabIndex = i;
      this.componentData.entity.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, {
    //         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;
      this.activeFace = 2;
      this.examine = 1;
      this.isReport = 0;
      this.currentId = parseInt(row.id);
    },
    playOrder(num) {
      this.activeFace = num;
    },
    goback() {
      this.state = 0;
      this.refreshTable("page");
    },
    // è¿›è¡Œæ£€éªŒä»»åŠ¡
    handleInspection(row) {
      //当前检验任务的检验人列表
      let inspectorList = [];
      if (row.userName) {
        inspectorList = row.userName.split(",");
      }
      let user = JSON.parse(localStorage.getItem("user"));
      if (user) {
        inspectorList.push(user.name);
      }
      this.inspectorList = inspectorList;
      this.sonLaboratory = row.sonLaboratory;
      this.state = 1;
      this.typeSource = row.typeSource;
      this.orderId = row.id;
    },
    // æŸ¥çœ‹æ£€éªŒæ•°æ®
    viewInspectInfo(row) {
      //当前检验任务的检验人列表
      let inspectorList = [];
      if (row.userName) {
        inspectorList = row.userName.split(",");
      }
      let user = JSON.parse(localStorage.getItem("user"));
      if (user) {
        inspectorList.push(user.name);
      }
      this.inspectorList = inspectorList;
      this.sonLaboratory = row.sonLaboratory;
      this.state = 3;
      this.typeSource = row.typeSource;
      this.orderId = row.id;
    },
    handleConnect(row) {
      this.orderId = row.id;
      this.connect = {};
      this.connectVisible = true;
      this.$axios
        .post(this.$api.insOrderPlan.upPlanUser2, {
          orderId: this.orderId,
        })
        .then((res) => {
          if (res.code === 200 && res.data.length > 0) {
            this.sonLaboratoryList = [];
            res.data.forEach((m) => {
              this.sonLaboratoryList.push({
                value: m,
                label: m,
              });
            });
            this.connect.sonLaboratory = this.sonLaboratoryList[0].value;
          }
        });
    },
    confirmConnect() {
      if (
        this.connect.connectPerson == null ||
        this.connect.connectPerson == "" ||
        this.connect.connectPerson == undefined
      ) {
        this.$message.error("未选择交接人员");
        return;
      }
      if (
        this.connect.sonLaboratory == null ||
        this.connect.sonLaboratory == "" ||
        this.connect.sonLaboratory == undefined
      ) {
        this.$message.error("未选择试验室");
        return;
      }
      this.loading = true;
      this.$axios
        .post(this.$api.insOrderPlan.upPlanUser, {
          orderId: this.orderId,
          userId: this.connect.connectPerson,
          sonLaboratory: this.connect.sonLaboratory,
        })
        .then((res) => {
          if (res.code === 200) {
            this.loading = false;
            this.$message.success("操作成功");
            this.refreshTable("page");
          }
          this.connectVisible = false;
        })
        .catch((error) => {
          console.error(error);
          this.loading = false;
        });
    },
    handleReview(row) {
      this.state = 2;
      this.orderId = row.id;
    },
    getAuthorizedPerson() {
      this.$axios.get(this.$api.user.getUserMenu).then((res) => {
        let data = [];
        res.data.forEach((a) => {
          data.push({
            label: a.name,
            value: a.id,
          });
        });
        this.personList = data;
      });
    },
    // ç»‘定检验项绑定
    getBinding(row) {
      this.bindCurrentInfo = row;
      this.$axios
        .get(
          this.$api.insOrderPlan.getBindingProductByProductId +
            "?productId=" +
            row.insProductId
        )
        .then((res) => {
          if (res.coe == 201) {
            // this.$message.error('未绑定检验项')
            return;
          }
          // console.log(res)
          this.bindTableData = res.data;
          this.bindDialogVisible = true;
        })
        .catch((error) => {
          console.error(error);
        });
    },
    openBindAdd() {
      this.$axios
        .get(
          this.$api.insOrderPlan.getProductTreeByProductId +
            "?productId=" +
            this.bindCurrentInfo.insProductId
        )
        .then((res) => {
          if (res.coe == 201) {
            // this.$message.error('未绑定检验项')
            return;
          }
          // console.log(res)
          this.bindAddTableData = res.data;
          this.bindAddDialogVisible = true;
        })
        .catch((error) => {
          console.error(error);
        });
    },
    handleBindAddSelectionChange(list) {
      this.chooseBindAddList = list;
    },
    bindAdd() {
      if (this.chooseBindAddList.length == 0) {
        this.$message.error("请选择检验项");
        return;
      }
      this.chooseBindAddList.forEach((item) => {
        delete item.template;
      });
      this.loading = true;
      this.$axios
        .post(
          this.$api.insOrderPlan.bindingProductTreeByProductId,
          {
            insProductId: this.bindCurrentInfo.insProductId,
            insProductBindingList: this.chooseBindAddList,
          },
          {
            headers: {
              "Content-Type": "application/json",
            },
            noQs: true,
          }
        )
        .then((res) => {
          this.loading = false;
          if (res.code == 201) {
            this.$message.error("绑定失败");
            return;
          }
          this.$message.success("绑定成功");
          this.bindAddDialogVisible = false;
          this.getBinding(this.bindCurrentInfo);
        })
        .catch((error) => {
          console.error(error);
        });
    },
    handleDelete(row) {
      this.$confirm("确认删除此检验项, æ˜¯å¦ç»§ç»­?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(async () => {
        this.$axios
          .get(
            this.$api.insOrderPlan.delProductTreeByProductId +
              "?productId=" +
              row.id
          )
          .then((res) => {
            if (res.coe == 201) {
              // this.$message.error('未绑定检验项')
              return;
            }
            this.getBinding(this.bindCurrentInfo);
          })
          .catch((error) => {
            console.error(error);
          });
      });
    },
  },
};
</script>
src/views/business/inspectionTask/inspection.vue