From 2a7d1dd7eff5a18eeca54ec9311050571a54f269 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 24 二月 2025 20:16:08 +0800
Subject: [PATCH] 不合格处理搬迁

---
 src/views/business/unpass/index.vue                |  135 +++++++++
 src/api/business/unpass.js                         |    9 
 src/views/structural/premises/index.vue            |    5 
 src/api/business/unqualifiedHandler.js             |   27 +
 src/views/business/unpass/components/OAProcess.vue |  250 +++++++++++++++++
 src/views/business/unpass/index-manage.vue         |  324 +++++++++++++++++++++++
 src/views/business/inspectionTask/index.vue        |   35 --
 7 files changed, 747 insertions(+), 38 deletions(-)

diff --git a/src/api/business/unpass.js b/src/api/business/unpass.js
index 7803d75..2aa3648 100644
--- a/src/api/business/unpass.js
+++ b/src/api/business/unpass.js
@@ -1,5 +1,4 @@
 // 涓嶅悎鏍肩鐞嗙浉鍏虫帴鍙�
-
 import request from "@/utils/request";
 
 //鏌ヨ杩涜揣楠岃瘉淇℃伅
@@ -73,3 +72,11 @@
     data: data,
   });
 }
+// 鏌ヨ涓嶅悎鏍兼牱鍝佹暟鎹�
+export function pageInsUnPass(data) {
+  return request({
+    url: "/unPass/pageInsUnPass",
+    method: "post",
+    data: data,
+  });
+}
diff --git a/src/api/business/unqualifiedHandler.js b/src/api/business/unqualifiedHandler.js
new file mode 100644
index 0000000..d458b42
--- /dev/null
+++ b/src/api/business/unqualifiedHandler.js
@@ -0,0 +1,27 @@
+// 涓嶅悎鏍煎鐞嗙浉鍏虫帴鍙�
+import request from "@/utils/request";
+
+//鏌ヨ涓嶅悎鏍煎鐞�
+export function page(query) {
+  return request({
+    url: "/unqualifiedHandler/page",
+    method: "get",
+    params: query,
+  });
+}
+//鍒犻櫎涓嶅悎鏍煎鐞�
+export function deleteUnqualifiedHandler(query) {
+  return request({
+    url: "/unqualifiedHandler/deleteUnqualifiedHandler",
+    method: "delete",
+    params: query,
+  });
+}
+//鍒犻櫎涓嶅悎鏍煎鐞�
+export function pushOA(query) {
+  return request({
+    url: "/unqualifiedHandler/pushOA",
+    method: "delete",
+    params: query,
+  });
+}
diff --git a/src/views/business/inspectionTask/index.vue b/src/views/business/inspectionTask/index.vue
index f71274e..600e362 100644
--- a/src/views/business/inspectionTask/index.vue
+++ b/src/views/business/inspectionTask/index.vue
@@ -567,7 +567,6 @@
   },
   mounted() {
     this.queryParams.userId = this.userId;
-    // this.getPower();
     this.refreshTable();
   },
   methods: {
@@ -626,40 +625,6 @@
     handleDataLook(row) {
       this.lookInfo = row;
       this.getLookList();
-    },
-    // 鏉冮檺鍒嗛厤
-    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;
diff --git a/src/views/business/unpass/components/OAProcess.vue b/src/views/business/unpass/components/OAProcess.vue
new file mode 100644
index 0000000..b26260c
--- /dev/null
+++ b/src/views/business/unpass/components/OAProcess.vue
@@ -0,0 +1,250 @@
+<template>
+  <div>
+    <el-dialog :close-on-press-escape="false" :visible.sync="isShow" title="涓嶅悎鏍煎鐞�"
+               width="1040px"
+               @close="$emit('closeOAProcess')">
+
+      <table :border='true' class="table">
+        <tr>
+          <th class="th-title">1妫�楠屽憳</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{oneOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{oneInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{oneName}}<span v-if="oneName">锛�</span>{{oneTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">2妫�娴嬩富绠$‘璁�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{twoOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{twoInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{twoName}}<span v-if="twoName">锛�</span>{{twoTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">3鐗╂祦閮ㄧ‘璁�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{threeOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{threeInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{threeName}}<span v-if="threeName">锛�</span>{{threeTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">4浜у搧宸ョ▼甯堝鐞嗘剰瑙�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{fourOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{fourInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{fourName}}<span v-if="fourName">锛�</span>{{fourTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">5.鎬诲伐鎴栬�呭壇缁忕悊鐨勫鐞嗘剰瑙�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{fiveOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{fiveInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{fiveName}}<span v-if="fiveName">锛�</span>{{fiveTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">6璐ㄩ噺閮�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{sixOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{sixInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{sixName}}<span v-if="sixName">锛�</span>{{sixTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">7璐ㄩ噺閮ㄧ粡鐞�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{sevenOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{sevenInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{sevenName}}<span v-if="sevenName">锛�</span>{{sevenTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">8鏍哥畻鍛�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{eightOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{eightInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{eightName}}<span v-if="eightName">锛�</span>{{eightTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">9鐗╂祦閮ㄧ储璧旂粨鏋�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{nineOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{nineInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{nineName}}<span v-if="nineName">锛�</span>{{nineTime}}</th>
+        </tr>
+      </table>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "OAProcess",
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  props: {
+    OAProcess: {
+      type: Boolean,
+      default: () => false
+    },
+  },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      isShow: this.OAProcess,
+      oneInfo: '',
+      twoInfo: '',
+      threeInfo: '',
+      fourInfo: '',
+      fiveInfo: '',
+      sixInfo: '',
+      sevenInfo: '',
+      eightInfo: '',
+      nineInfo: '',
+      oneTime: '',
+      twoTime: '',
+      threeTime: '',
+      fourTime: '',
+      fiveTime: '',
+      sixTime: '',
+      sevenTime: '',
+      eightTime: '',
+      nineTime: '',
+      oneName: '',
+      twoName: '',
+      threeName: '',
+      fourName: '',
+      fiveName: '',
+      sixName: '',
+      sevenName: '',
+      eightName: '',
+      nineName: '',
+      oneOperation: '',
+      twoOperation: '',
+      threeOperation: '',
+      fourOperation: '',
+      fiveOperation: '',
+      sixOperation: '',
+      sevenOperation: '',
+      eightOperation: '',
+      nineOperation: '',
+    }
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    getInfo (id) {
+      this.$axios.post(this.$api.unqualifiedHandler.getOaFlow, {
+        id: id
+      }).then(res => {
+        if (res.code === 200) {
+          const data = res.data
+          if (data.length > 0) {
+            data.forEach(item => {
+              if (item.nodeName === '1妫�楠屽憳') {
+                this.oneInfo = item.approvalOpinion
+                this.oneTime = item.approvalDate
+                this.oneName = item.approver
+                this.oneOperation = item.operation
+              } else if (item.nodeName === '2妫�娴嬩富绠$‘璁�') {
+                this.twoInfo = item.approvalOpinion
+                this.twoTime = item.approvalDate
+                this.twoName = item.approver
+                this.twoOperation = item.operation
+              } else if (item.nodeName === '3鐗╂祦閮ㄧ‘璁�') {
+                this.threeInfo = item.approvalOpinion
+                this.threeTime = item.approvalDate
+                this.threeName = item.approver
+                this.threeOperation = item.operation
+              } else if (item.nodeName === '4浜у搧宸ョ▼甯堝鐞嗘剰瑙�') {
+                this.fourInfo = item.approvalOpinion
+                this.fourTime = item.approvalDate
+                this.fourName = item.approver
+                this.fourOperation = item.operation
+              } else if (item.nodeName === '5.鎬诲伐鎴栬�呭壇缁忕悊鐨勫鐞嗘剰瑙�') {
+                this.fiveInfo = item.approvalOpinion
+                this.fiveTime = item.approvalDate
+                this.fiveName = item.approver
+                this.fiveOperation = item.operation
+              } else if (item.nodeName === '6璐ㄩ噺閮�') {
+                this.sixInfo = item.approvalOpinion
+                this.sixTime = item.approvalDate
+                this.sixName = item.approver
+                this.sixOperation = item.operation
+              } else if (item.nodeName === '7璐ㄩ噺閮ㄧ粡鐞�') {
+                this.sevenInfo = item.approvalOpinion
+                this.sevenTime = item.approvalDate
+                this.sevenName = item.approver
+                this.sevenOperation = item.operation
+              } else if (item.nodeName === '8鏍哥畻鍛�') {
+                this.eightInfo = item.approvalOpinion
+                this.eightTime = item.approvalDate
+                this.eightName = item.approver
+                this.eightOperation = item.operation
+              } else if (item.nodeName === '9鐗╂祦閮ㄧ储璧旂粨鏋�') {
+                this.nineInfo = item.approvalOpinion
+                this.nineTime = item.approvalDate
+                this.nineName = item.approver
+                this.nineOperation = item.operation
+              }
+            })
+          }
+        }
+      }).catch(err => {
+        this.submitDeclareLoading = false
+        console.log(err)
+      })
+    }
+  },
+}
+</script>
+
+<style scoped>
+.table {
+  width: 100%;
+  height: 500px;
+}
+.th-title {
+  width: 160px;
+  text-align: left;
+  background-color: #e0eaf5;
+  font-size: 16px;
+}
+.th-titleSec {
+  width: 70px;
+  background-color: #e0eaf5;
+  font-size: 16px;
+}
+.th-info {
+  width: 210px;
+  text-align: left;
+  font-size: 16px;
+}
+.th-info1 {
+  width: 100px;
+  text-align: center;
+  font-size: 16px;
+}
+</style>
diff --git a/src/views/business/unpass/index-manage.vue b/src/views/business/unpass/index-manage.vue
new file mode 100644
index 0000000..a7de5dd
--- /dev/null
+++ b/src/views/business/unpass/index-manage.vue
@@ -0,0 +1,324 @@
+<template>
+  <div class="capacity-scope">
+    <div class="search">
+      <div>
+        <el-form :model="entity" ref="entity" size="small" :inline="true">
+          <el-form-item label="瑙勬牸鍨嬪彿" prop="model">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.model"
+                      @keyup.enter.native="refreshTable()"></el-input>
+          </el-form-item>
+          <el-form-item label="鏍峰搧鍚嶇О" prop="sample">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.sample"
+                      @keyup.enter.native="refreshTable()"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">鏌� 璇�</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="refresh">閲� 缃�</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+    <div>
+      <lims-table :tableData="tableData" :column="column"
+                  :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
+    </div>
+    <el-dialog
+      title="鎻愪氦"
+      :show-close="false"
+      :close-on-press-escape="false"
+      :close-on-click-modal="false"
+      :visible.sync="dialogVisible"
+      width="30%">
+      <span>鏄惁纭鎻愪氦OA锛�</span>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="submitOA" :loading="submitOALoading">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="鍒犻櫎"
+      :show-close="false"
+      :close-on-press-escape="false"
+      :close-on-click-modal="false"
+      :visible.sync="deleteVisible"
+      width="30%">
+      <span>鏄惁纭<span style="color: #FF4902">鍒犻櫎</span>OA锛�</span>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="deleteVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="cancelOA" :loading="cancelOALoading">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <UnPassDialog ref="unPassDialog" v-if="unPassDialog"
+                  :orderId="orderId"
+                  @resetForm="resetForm1"
+                  :unPassDialog="unPassDialog"></UnPassDialog>
+    <OAProcess ref="OAProcess"
+               :OAProcess="OAProcess"
+               @closeOAProcess="closeOAProcess"
+               v-if="OAProcess"></OAProcess>
+  </div>
+</template>
+
+<script>
+import UnPassDialog from "./components/unPassDialog.vue";
+import OAProcess from "./components/OAProcess.vue";
+import limsTable from "@/components/Table/lims-table.vue";
+import {deleteUnqualifiedHandler, page, pushOA} from "@/api/business/unqualifiedHandler";
+import ValueTable from "@/components/Table/value-table.vue";
+export default {
+  components: {
+    limsTable,
+    OAProcess,
+    UnPassDialog,
+    ValueTable
+  },
+  data() {
+    return {
+      handlerId: null,
+      entity: {
+        sample: null,
+        model: null,
+      },
+      tableData: [],
+      tableLoading: false,
+      column: [
+        { label: '缂栧彿', prop: 'no' },
+        {
+          label: "OA瀹℃牳鐘舵��",
+          prop: "oaState",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 1) {
+              return "寰呭鏍�";
+            } else if(params == 2) {
+              return "瀹℃牳涓�";
+            }  else if(params == 3) {
+              return "閫氳繃";
+            } else {
+              return "椹冲洖";
+            }
+          },
+          formatType: (params) => {
+            if (params == 1) {
+              return "warning";
+            } else if(params == 2) {
+              return "info";
+            }  else if(params == 3) {
+              return "success";
+            } else {
+              return "danger";
+            }
+          },
+        },
+        { label: '璁㈠崟鍙�', prop: 'orderNo' },
+        {
+          label: "闆朵欢鍙�",
+          prop: "partNo",
+          width: "160px",
+          dataType: "link",
+          linkMethod: "openUnPassDialog",
+        },
+        { label: '闆朵欢鎻忚堪', prop: 'partDesc' },
+        { label: '鐗╂枡鍚嶇О', prop: 'materialName' },
+        { label: '鐢熶骇鎵规', prop: 'productionBatch' },
+        { label: '鍒拌揣鏁伴噺', prop: 'cargoQuantity' },
+        { label: '瑙勬牸鍨嬪彿', prop: 'specsModels' },
+        { label: '鎶ユ鏃ユ湡', prop: 'inspectTime' },
+        { label: '鐘舵��', prop: 'statusDB' },
+        { label: '鍙嶉浜�', prop: 'feedbackUser' },
+        { label: '瑕佹楠岀殑閲囪喘鏁伴噺', prop: 'qtyToInspect' },
+        { label: '鍙嶉鏃ユ湡', prop: 'feedbackTime' },
+        {
+          label: "鍒嗙被",
+          prop: "classification",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "涓�绫讳笉鍚堟牸";
+            } else if(params == 1) {
+              return "浜岀被涓嶅悎鏍�";
+            } else {
+              return null
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "warning";
+            } else if(params == 1) {
+              return "info";
+            } else {
+              return "null";
+            }
+          },
+        },
+        { label: '渚涘簲鍟嗗悕绉�', prop: 'supplierName' },
+        {
+          label: "涓嶅悎鏍煎綊灞�",
+          prop: "offGradeAscription",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "鐢熶骇鍙嶉涓嶅悎鏍�";
+            } else if(params == 1) {
+              return "妫�娴嬩笉鍚堟牸";
+            } else {
+              return null
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "warning";
+            } else if(params == 1) {
+              return "info";
+            } else {
+              return "null";
+            }
+          },
+        },
+        { label: '涓嶅悎鏍兼弿杩�', prop: 'unqualifiedDesc' },
+        {
+          dataType: 'action',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          width: '180px',
+          operation: [
+            {
+              name: '鎻愪氦OA',
+              type: 'text',
+              clickFun: (row) => {
+                this.openOA(row);
+              },
+              disabled: (row, index) => {
+                return row.requestId !== null  // 鏈塺equestId璇存槑宸茬粡鎻愪氦杩嘜A锛屼笉鍙啀娆℃彁浜�
+              }
+            },
+            {
+              name: '鏌ョ湅OA娴佺▼',
+              type: 'text',
+              clickFun: (row) => {
+                this.OAView(row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              clickFun: (row) => {
+                this.deleteOA(row);
+              },
+              disabled: (row, index) => {
+                return row.requestId !== null  // 鏈塺equestId璇存槑宸茬粡鎻愪氦杩嘜A锛屼笉鍙啀娆℃彁浜�
+              }
+            },
+          ]
+        }
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+      statusList: [],
+      dialogVisible: false, // 纭鎻愪氦OA寮规
+      unPassDialog: false, // 涓嶅悎鏍煎鐞嗗脊妗�
+      orderId: '',
+      OAProcess: false, // OA娴佺▼寮规
+      submitOALoading: false, // OA娴佺▼寮规鎻愪氦鎸夐挳loading
+      deleteVisible: false, // OA娴佺▼鍒犻櫎寮规
+      cancelOALoading: false, // OA娴佺▼鍒犻櫎寮规鎻愪氦鎸夐挳loading
+    };
+  },
+  mounted() {
+    this.refreshTable()
+  },
+  methods: {
+    refreshTable() {
+      this.tableLoading = true
+      page({ ...this.page, ...this.entity }).then(res => {
+        this.tableLoading = false
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        this.tableLoading = false
+      })
+    },
+    // 閲嶇疆
+    refresh() {
+      this.resetForm('entity')
+      this.refreshTable()
+    },
+    // 鍒嗛〉鍒囨崲
+    pagination(page) {
+      this.page.size = page.limit
+      this.refreshTable()
+    },
+    // 鎵撳紑涓嶅悎鏍煎鐞嗗脊妗�
+    openUnPassDialog (row) {
+      this.unPassDialog = true
+      this.$nextTick(() => {
+        this.$refs.unPassDialog.getInsOrder('view', row)
+      })
+    },
+    // 鍏抽棴涓嶅悎鏍煎鐞嗗脊妗�
+    resetForm1 () {
+      this.$refs.unPassDialog.$refs['unPassForm'].resetFields();
+      this.unPassDialog = false
+    },
+    // 鎵撳紑鍒犻櫎OA纭寮规
+    deleteOA (row) {
+      this.handlerId = row.handlerId
+      this.deleteVisible = true
+    },
+    // 鎻愪氦鍒犻櫎鐢宠
+    cancelOA () {
+      this.de = true
+      deleteUnqualifiedHandler({id: this.handlerId,}).then(res => {
+        this.cancelOALoading = false
+        if (res.code === 200) {
+          this.deleteVisible = false
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.refreshTable('page')
+        }
+      }).catch(error => {
+        this.cancelOALoading = false
+        console.error(error);
+      });
+    },
+    // 鏌ョ湅鎻愪氦OA鐨勬暟鎹�
+    openOA (row) {
+      this.handlerId = row.handlerId
+      this.dialogVisible = true
+    },
+    // 鏌ョ湅OA娴佺▼
+    OAView (row) {
+      this.OAProcess = true
+      this.$nextTick(() => {
+        this.$refs.OAProcess.getInfo(row.handlerId)
+      })
+    },
+    // 鍏抽棴鏌ョ湅OA娴佺▼鐨勫脊妗�
+    closeOAProcess () {
+      this.OAProcess = false
+    },
+    //鎻愪氦OA
+    submitOA(row) {
+      // 鎻愪氦OA
+      this.submitOALoading = true
+      pushOA({handlerId: this.handlerId,}).then(res => {
+        this.submitOALoading = false
+        if (res.code === 200) {
+          this.dialogVisible = false
+          this.$message.success('鎻愪氦鎴愬姛')
+          this.refreshTable('page')
+        }
+      }).catch(error => {
+        this.submitOALoading = false
+        console.error(error);
+      });
+    }
+  }
+};
+</script>
diff --git a/src/views/business/unpass/index.vue b/src/views/business/unpass/index.vue
new file mode 100644
index 0000000..fb9b01e
--- /dev/null
+++ b/src/views/business/unpass/index.vue
@@ -0,0 +1,135 @@
+<template>
+  <div class="capacity-scope">
+    <div class="search">
+      <div>
+        <el-form :model="entity" ref="entity" size="small" :inline="true">
+          <el-form-item label="瑙勬牸鍨嬪彿" prop="model">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.model"
+                      @keyup.enter.native="refreshTable()"></el-input>
+          </el-form-item>
+          <el-form-item label="鏍峰搧鍚嶇О" prop="sample">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.sample"
+                      @keyup.enter.native="refreshTable()"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">鏌� 璇�</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="refresh">閲� 缃�</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+    <div>
+      <lims-table :tableData="tableData" :column="column"
+                  :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
+    </div>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import {pageInsUnPass} from "@/api/business/unpass";
+
+export default {
+  components: {limsTable},
+  data() {
+    return {
+      entity: {
+        sample: null,
+        model: null,
+      },
+      tableData: [],
+      tableLoading: false,
+      column: [
+        { label: '缂栧彿', prop: 'no' },
+        {
+          label: "OA瀹℃牳鐘舵��",
+          prop: "oaState",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "鍚�";
+            } else {
+              return "鏄�";
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "danger";
+            } else {
+              return "primary";
+            }
+          },
+        },
+        {
+          dataType: 'action',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          width: '180px',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openAdd('edit', row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              clickFun: (row) => {
+                this.delete(row);
+              },
+            },
+            {
+              name: '鍗扮珷绠$悊',
+              type: 'text',
+              clickFun: (row) => {
+                this.fileManagement(row);
+              },
+            },
+          ]
+        }
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+    }
+  },
+  mounted() {
+    this.refreshTable()
+  },
+  methods :{
+    refreshTable() {
+      this.tableLoading = true
+      pageInsUnPass({ ...this.page, ...this.entity }).then(res => {
+        this.tableLoading = false
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        this.tableLoading = false
+      })
+    },
+    // 閲嶇疆
+    refresh() {
+      this.resetForm('entity')
+      this.refreshTable()
+    },
+    // 鍒嗛〉鍒囨崲
+    pagination(page) {
+      this.page.size = page.limit
+      this.refreshTable()
+    },
+  }
+}
+</script>
+<style scoped>
+.search {
+  height: 46px;
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/views/structural/premises/index.vue b/src/views/structural/premises/index.vue
index 1c3ccca..0cb76e1 100644
--- a/src/views/structural/premises/index.vue
+++ b/src/views/structural/premises/index.vue
@@ -22,8 +22,9 @@
       </div>
     </div>
     <div class="table">
-      <lims-table :tableData="tableData" :column="column" :height="'calc(100vh - 250px)'" @pagination="pagination"
-        :page="page" :tableLoading="tableLoading"></lims-table>
+      <lims-table :tableData="tableData" :column="column"
+                  :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
     </div>
     <!--    鏂板瀹為獙瀹�-->
     <el-dialog :title="formTitle" :visible.sync="addDia" width="450px">

--
Gitblit v1.9.3