From 0c53340ba536404e3266126c10ef92fe7240609c Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期一, 24 二月 2025 15:32:35 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev

---
 src/api/standard/standardLibrary.js                           |   35 -
 src/views/standard/standardLibrary/index.vue                  |   91 --
 src/api/business/inspectionTask.js                            |    8 
 public/index.html                                             |    1 
 src/views/business/unpass/components/PurchaseVerification.vue |   31 
 src/views/business/inspectionReview/index.vue                 |  432 ++++++++++++
 src/views/business/reportPreparation/index.vue                | 1221 ++++++++++++++++++++++++++++++++++
 src/components/Onlyoffice/onlyoffice.vue                      |  206 +++++
 src/assets/images/no-full.svg                                 |    1 
 src/views/business/inspectionTask/inspection.vue              |   16 
 src/api/business/insReport.js                                 |   11 
 11 files changed, 1,898 insertions(+), 155 deletions(-)

diff --git a/public/index.html b/public/index.html
index 0a54df5..aba4f3e 100644
--- a/public/index.html
+++ b/public/index.html
@@ -225,6 +225,7 @@
       </div>
     </div>
   </body>
+  <script type='text/javascript' src='http://192.168.21.53:9001/web-apps/apps/api/documents/api.js'></script>
   <script src="<%= BASE_URL %>luckysheet/plugins/js/plugin.js"></script>
   <script src="<%= BASE_URL %>luckysheet/luckysheet.umd.js"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.16.105/pdf.min.js"></script>
diff --git a/src/api/business/insReport.js b/src/api/business/insReport.js
new file mode 100644
index 0000000..70277c8
--- /dev/null
+++ b/src/api/business/insReport.js
@@ -0,0 +1,11 @@
+// 鎶ュ憡缂栧埗椤甸潰鐩稿叧鎺ュ彛
+import request from '@/utils/request'
+
+// 鏌ヨ鍘熸潗鏂欎笅鍗�-寰呬笅鍗�
+export function upReportUrl(query) {
+  return request({
+    url: '/insReport/upReportUrl',
+    method: 'post',
+    data: query
+  })
+}
diff --git a/src/api/business/inspectionTask.js b/src/api/business/inspectionTask.js
index 98e0ead..4187ad6 100644
--- a/src/api/business/inspectionTask.js
+++ b/src/api/business/inspectionTask.js
@@ -51,7 +51,7 @@
   return request({
     url: "/insOrderPlan/upPlanUser",
     method: "post",
-    data: data,
+    params: data,
   });
 }
 
@@ -213,7 +213,7 @@
   return request({
     url: "/insOrderPlan/verifyPlan",
     method: "post",
-    data: data,
+    params: data,
   });
 }
 
@@ -222,7 +222,7 @@
   return request({
     url: "/insOrderPlan/checkSubmitPlan",
     method: "post",
-    data: data,
+    params: data,
   });
 }
 
@@ -231,7 +231,7 @@
   return request({
     url: "/insOrderPlan/submitPlan",
     method: "post",
-    data: data,
+    params: data,
   });
 }
 
diff --git a/src/api/standard/standardLibrary.js b/src/api/standard/standardLibrary.js
index ad374ed..785c6fb 100644
--- a/src/api/standard/standardLibrary.js
+++ b/src/api/standard/standardLibrary.js
@@ -56,15 +56,6 @@
   });
 }
 
-// 缁欐爣鍑嗘爲娣诲姞妫�楠屾爣鍑�
-export function addStandardMethodList(data) {
-  return request({
-    url: "/standardTree/addStandardMethodList",
-    method: "post",
-    data: data,
-  });
-}
-
 // 娣诲姞鏍囧噯鏍�
 export function addStandardTree(data) {
   return request({
@@ -101,32 +92,6 @@
   });
 }
 
-// 鍒犻櫎鏍囧噯鏍戜笅鐨勬楠屾爣鍑�
-export function delStandardMethodByFLSSM(data) {
-  return request({
-    url: "/standardTree/delStandardMethodByFLSSM",
-    method: "post",
-    data: data,
-  });
-}
-
-// 鍒犻櫎鏍囧噯鏍戜笅鐨勬楠屾爣鍑�
-export function delStandardProductByIds(data) {
-  return request({
-    url: "/standardTree/delStandardProductByIds",
-    method: "post",
-    data: data,
-  });
-}
-
-// 鏂板鏍囧噯鏍戜笅鐨勬楠岄」鐩�
-export function addStandardProduct(data) {
-  return request({
-    url: "/standardTree/addStandardProduct",
-    method: "post",
-    data: data,
-  });
-}
 
 // 閫氳繃妫�楠屾爣鍑嗘煡璇㈡楠岄」鐩�
 export function selectStandardProductListByMethodId(query) {
diff --git a/src/assets/images/no-full.svg b/src/assets/images/no-full.svg
new file mode 100644
index 0000000..e78c651
--- /dev/null
+++ b/src/assets/images/no-full.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1712111454775" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5950" width="18" height="18" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M354.133333 682.666667H256v-42.666667h170.666667v170.666667H384v-98.133334L243.2 853.333333l-29.866667-29.866666L354.133333 682.666667z m358.4 0l140.8 140.8-29.866666 29.866666-140.8-140.8V810.666667h-42.666667v-170.666667h170.666667v42.666667h-98.133334zM354.133333 384L213.333333 243.2l29.866667-29.866667L384 354.133333V256h42.666667v170.666667H256V384h98.133333z m358.4 0H810.666667v42.666667h-170.666667V256h42.666667v98.133333L823.466667 213.333333l29.866666 29.866667L712.533333 384z" fill="#606266" p-id="5951"></path></svg>
\ No newline at end of file
diff --git a/src/components/Onlyoffice/onlyoffice.vue b/src/components/Onlyoffice/onlyoffice.vue
new file mode 100644
index 0000000..a903641
--- /dev/null
+++ b/src/components/Onlyoffice/onlyoffice.vue
@@ -0,0 +1,206 @@
+<!--onlyoffice 缂栬緫鍣�-->
+<template>
+  <div id="vabOnlyOffice"></div>
+</template>
+
+<script>
+export default {
+  name: "VabOnlyOffice",
+  props: ['options'],
+  data() {
+    return {
+      doctype: "",
+      docEditor: null,
+      //鍙傝�僾abOnlyOffice缁勪欢鍙傛暟閰嶇疆
+      option: {
+        url: "",
+        isEdit: false,
+        fileType: "",
+        title: "",
+        lang: "zh-CN",
+        isPrint: true,
+        user: {},
+        editUrl: ""
+      }
+    };
+  },
+  created() {
+    if(this.options){
+      const option = this.options
+      this.option.url = option.url
+      this.option.isEdit = option.isEdit === "true" ? true : false
+      this.option.fileType = option.fileType
+      this.option.title = option.title
+      this.option.lang = option.lang
+      this.option.isPrint = option.isPrint
+      this.option.user.id = option.user_id
+      this.option.user.name = option.user_name
+      this.option.editUrl = option.editUrl
+    }else{
+      const option = this.$route.query
+      this.option.url = option.url
+      this.option.isEdit = option.isEdit === "true" ? true : false
+      this.option.fileType = option.fileType
+      this.option.title = option.title
+      this.option.lang = option.lang
+      this.option.isPrint = option.isPrint
+      this.option.user.id = option.user_id
+      this.option.user.name = option.user_name
+      this.option.editUrl = option.editUrl
+    }
+  },
+  beforeDestroy() {
+    if (this.docEditor !== null) {
+      this.docEditor.destroyEditor();
+      this.docEditor = null;
+    }
+  },
+  watch: {
+    option: {
+      handler: function(n) {
+        this.setEditor(n);
+        this.doctype = this.getFileType(n.fileType);
+      },
+      deep: true
+    }
+  },
+  mounted() {
+    if (this.option.url) {
+      this.setEditor(this.option);
+    }
+  },
+  methods: {
+    async setEditor(option) {
+      if (this.docEditor !== null) {
+        this.docEditor.destroyEditor();
+        this.docEditor = null;
+      }
+      this.doctype = this.getFileType(option.fileType);
+      let config = {
+        document: {
+          //鍚庣紑
+          fileType: option.fileType,
+          key: option.key || "",
+          title: option.title,
+          permissions: {
+            edit: option.isEdit, //鏄惁鍙互缂栬緫: 鍙兘鏌ョ湅锛屼紶false
+            print: option.isPrint,
+            download: false
+            // "fillForms": true,//鏄惁鍙互濉啓琛ㄦ牸锛屽鏋滃皢mode鍙傛暟璁剧疆涓篹dit锛屽垯濉啓琛ㄥ崟浠呭鏂囨。缂栬緫鍣ㄥ彲鐢ㄣ�� 榛樿鍊间笌edit鎴杛eview鍙傛暟鐨勫�间竴鑷淬��
+            // "review": true //璺熻釜鍙樺寲
+          },
+          url: option.url
+        },
+        documentType: this.doctype,
+        editorConfig: {
+          callbackUrl: option.editUrl, //"缂栬緫word鍚庝繚瀛樻椂鍥炶皟鐨勫湴鍧�锛岃繖涓猘pi闇�瑕佽嚜宸卞啓浜嗭紝灏嗙紪杈戝悗鐨勬枃浠堕�氳繃杩欎釜api淇濆瓨鍒拌嚜宸辨兂瑕佺殑浣嶇疆
+          lang: option.lang, //璇█璁剧疆
+          //瀹氬埗
+          customization: {
+            autosave: true, //鏄惁鑷姩淇濆瓨
+            chat: true,
+            comments: false,
+            help: false,
+            "hideRightMenu": false,//瀹氫箟鍦ㄧ涓�娆″姞杞芥椂鏄樉绀鸿繕鏄殣钘忓彸渚ц彍鍗曘�� 榛樿鍊间负false
+            //鏄惁鏄剧ず鎻掍欢
+            plugins: false
+          },
+          user: {
+            id: option.user.id,
+            name: option.user.name
+          },
+          mode: option.model ? option.model : "edit"
+        },
+        width: "100%",
+        height: "100%",
+        token: option.token || ""
+      };
+
+      // eslint-disable-next-line no-undef,no-unused-vars
+      this.docEditor = new DocsAPI.DocEditor("vabOnlyOffice", config);
+    },
+    getFileType(fileType) {
+      let docType = "";
+      let fileTypesDoc = [
+        "doc",
+        "docm",
+        "docx",
+        "dot",
+        "dotm",
+        "dotx",
+        "epub",
+        "fodt",
+        "htm",
+        "html",
+        "mht",
+        "odt",
+        "ott",
+        "pdf",
+        "rtf",
+        "txt",
+        "djvu",
+        "xps"
+      ];
+      let fileTypesCsv = [
+        "csv",
+        "fods",
+        "ods",
+        "ots",
+        "xls",
+        "xlsm",
+        "xlsx",
+        "xlt",
+        "xltm",
+        "xltx"
+      ];
+      let fileTypesPPt = [
+        "fodp",
+        "odp",
+        "otp",
+        "pot",
+        "potm",
+        "potx",
+        "pps",
+        "ppsm",
+        "ppsx",
+        "ppt",
+        "pptm",
+        "pptx"
+      ];
+      if (fileTypesDoc.includes(fileType)) {
+        docType = "text";
+      }
+      if (fileTypesCsv.includes(fileType)) {
+        docType = "spreadsheet";
+      }
+      if (fileTypesPPt.includes(fileType)) {
+        docType = "presentation";
+      }
+      return docType;
+    }
+  }
+};
+</script>
+
+<style scoped>
+html,
+body {
+  height: 100%;
+}
+#app {
+  font-family: Avenir, Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  text-align: center;
+  color: #2c3e50;
+  height: 100%;
+}
+.qualityManual-container {
+  padding: 0 !important;
+  height: 100%;
+}
+.qualityManual-container-office {
+  width: 100%;
+  height: calc(100% - 55px);
+}
+</style>
diff --git a/src/views/business/inspectionReview/index.vue b/src/views/business/inspectionReview/index.vue
new file mode 100644
index 0000000..fcebf1b
--- /dev/null
+++ b/src/views/business/inspectionReview/index.vue
@@ -0,0 +1,432 @@
+<template>
+  <div class="app-container">
+    <div>
+      <el-form :model="entity" ref="entity" size="small" :inline="true">
+        <el-form-item label="濮旀墭缂栧彿" prop="entrustCode">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable
+                    v-model="entity.entrustCode"
+                    @keyup.enter.native="refreshTable()"></el-input>
+        </el-form-item>
+        <el-form-item label="涓嬪崟绫诲埆" prop="entrustCode">
+          <el-select size="small" v-model="entity.typeSource" clearable style="width: 100%;" @change="refreshTable()">
+            <el-option v-for="(a, i) in typeSourceList" :key="i" :label="a.label" :value="a.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button icon="el-icon-refresh" size="mini" @click="refresh">閲� 缃�</el-button>
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">鏌� 璇�</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="page_total">
+        <span>鎬昏浠诲姟鏁伴噺:</span>
+        <span>{{page.total}}</span>
+      </div>
+    </div>
+    <div>
+      <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
+                  :rowClassName="rowClassName" :height="'calc(100vh - 270px)'" @pagination="pagination"
+                  key="tableData0"></lims-table>
+    </div>
+<!--    <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == null">-->
+<!--      <Add :active="activeFace" :currentId="currentId"/>-->
+<!--    </div>-->
+<!--    <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == 0">-->
+<!--      <CustomsInspection :active="activeFace" :customsInspection="customsInspection" :currentId="currentId"/>-->
+<!--    </div>-->
+<!--    <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == 1">-->
+<!--      <CopperOrder :active="activeFace" :currentId="currentId"></CopperOrder>-->
+<!--    </div>-->
+<!--    <Inspection v-if="state>0" @goback="goback" :orderId="orderId" :sonLaboratory="componentData.entity.sonLaboratory" :typeSource="typeSource" :state="state"/>-->
+<!--    &lt;!&ndash;浜т笟閾句俊鎭煡鐪�&ndash;&gt;-->
+<!--    <ShowInfo v-if="showInfoDialog" :showInfoDialog="showInfoDialog" ref="showInfoDialog"></ShowInfo>-->
+    <!--鎶ュ憡鏌ョ湅-->
+    <el-dialog title="鎶ュ憡鏌ョ湅" :visible.sync="issuedVisible" width="80vw" :modal-append-to-body="false"
+               :fullscreen="fullscreen">
+      <div class="full-screen">
+        <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i>
+        <img src="@/assets/images/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" >
+      </div>
+      <div style="height: 80vh;" v-if="issuedVisible">
+        <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+      </div>
+    </el-dialog>
+    <el-dialog title="鏌ョ湅闄勪欢" :visible.sync="lookDialogVisible" width="800px" top="5vh" fullscreen>
+      <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.tempUrlPdf" :currentFile="{}"
+                   style="max-height: 90vh;overflow-y: auto;" />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getYearAndMonthAndDays } from "@/utils/date";
+// import ShowInfo from "../do/b1-material-ins-order/showInfo.vue";
+import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue";
+import limsTable from "@/components/Table/lims-table.vue";
+import {selectInsOrderPlanList, selectUserCondition} from "@/api/business/inspectionTask";
+import {mapGetters} from "vuex";
+import {upReportUrl} from "@/api/business/insReport";
+import {delfile} from "@/api/business/rawMaterialOrder";
+import filePreview from "@/components/Preview/filePreview.vue";
+
+export default {
+  components: {
+    filePreview,
+    onlyoffice,
+    limsTable,
+    // ShowInfo,
+  },
+  dicts: ["urgency_level", "inspection_task_state"],
+  computed: {
+    ...mapGetters(["nickName", "userId"]),
+  },
+  data() {
+    return {
+      lookDialogVisible: false,
+      alone: false,
+      tabList: [],
+      active: 1,
+      tabIndex: 0,
+      entity: {
+        sonLaboratory: null,
+        insState: '3',
+        userId: 0,
+        typeSource: null,
+        isCheck: 1
+      },
+      tableData: [],
+      column: [
+        {
+          label: "濮旀墭缂栧彿",
+          prop: "entrustCode",
+          width: "160px",
+          dataType: "link",
+          linkMethod: "selectAllByOne",
+        },
+        { label: "鏍峰搧鍚嶇О", prop: "sample", width: "160px" },
+        {
+          label: "涓嬪崟绫诲埆",
+          prop: "typeSource",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "鎴愬搧涓嬪崟";
+            } else {
+              return "鍘熸潗鏂欎笅鍗�";
+            }
+          },
+        },
+        { label: "鏍峰搧鍨嬪彿", prop: "sampleModel", width: "120px" },
+        {
+          label: "绱ф�ョ▼搴�",
+          prop: "type",
+          dataType: "tag",
+          formatData: (params) => {
+            return this.urgencyLevel.find((m) => m.value == params).label;
+          },
+        },
+        {
+          label: "妫�楠岀被鍨�",
+          prop: "orderType",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            return this.orderTypeList.find((m) => m.value == params).label;
+          },
+          formatType: (params) => {
+            return this.orderTypeList.find((m) => m.value == params).type;
+          },
+        },
+        {
+          label: "鐘舵��",
+          prop: "insState",
+          dataType: "tag",
+          formatData: (params) => {
+            return this.inspectionTaskState.find((m) => m.value == params)
+              .label;
+          },
+          formatType: (params) => {
+            return this.inspectionTaskState.find((m) => m.value == params).type;
+          },
+        },
+        { label: "妫�楠屼汉", prop: "userName" },
+        { label: "澶嶆牳浜�", prop: "checkName" },
+        { label: "绾﹀畾鏃堕棿", prop: "appointed" },
+        { label: "涓嬪彂鏃堕棿", prop: "sendTime", width: "140px" },
+        { label: "妫�楠屽紑濮嬫椂闂�", prop: "insTime", width: "140px" },
+        { label: "鐞嗙敱", prop: "verifyTell", width: "140px" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "澶嶆牳",
+              type: "text",
+              clickFun: (row) => {
+                this.handleReview(row);
+              },
+              disabled: (row) => {
+                return row.userName == null || row.userName && !row.userName.includes(this.nickName)
+              }
+            },
+            {
+              name: "涓嬭浇鎶ュ憡",
+              type: "text",
+              clickFun: (row) => {
+                this.download(row);
+              },
+            },
+            {
+              name: "涓婁紶",
+              type: "text",
+              clickFun: (row) => {
+                this.handleUpload(row);
+              },
+            },
+            {
+              name: "杩樺師",
+              type: "text",
+              clickFun: (row) => {
+                this.handleRestore(row);
+              },
+            },
+            {
+              name: "鏌ョ湅鎶ュ憡",
+              type: "text",
+              clickFun: (row) => {
+                this.handleIssued(row);
+              }
+            },
+            // {
+            //   name: "浜т笟閾�",
+            //   type: "text",
+            //   clickFun: (row) => {
+            //     this.openInfoDialog(row);
+            //   },
+            //   disabled: (row) => {
+            //     return row.typeSource !== 1
+            //   },
+            // }
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
+      upIndex: 0,
+      planTotal: 0,
+      insStateList: [],
+      state:0,//0:鍙拌处椤碉紝1锛氭楠岄〉闈�,2妫�楠岄〉闈�(澶嶆牳)锛岄粯璁や负0
+      activeFace: 0, //1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍革紝榛樿涓�0
+      examine: null,
+      isReport: 0,
+      currentId: null,
+      orderId: 0,
+      personList:[],
+      currentTime: null,
+      sonLaboratoryList:[],
+      typeSourceList: [
+        {label: '鎴愬搧涓嬪崟', value: 0},
+        {label: '鍘熸潗鏂欎笅鍗�', value: 1},
+      ],
+      isCopper: null,
+      customsInspection: {},
+      typeSource: null,// 0:鎴愬搧涓嬪崟锛�1锛氬師鏉愭枡涓嬪崟
+      showInfoDialog: false, // 浜т笟閾句俊鎭煡鐪�
+      issuedVisible: false,
+      fullscreen: false,
+      option:null,
+      orderTypeList: [
+        {label: '濮旀墭璇曢獙', value: 'Customer-ordered test'},
+        {label: '鎶芥', value: '鎶芥'},
+        {label: '杩涘巶妫�楠�', value: '杩涘巶妫�楠�'},
+        {label: '瀛e害妫�楠�', value: 'Quarterly inspection'},
+      ],
+      urgencyLevel: [],
+      inspectionTaskState: [],
+    }
+  },
+  created() {
+    this.getDicts("urgency_level").then((response) => {
+      this.urgencyLevel = this.dictToValue(response.data);
+    });
+    this.getDicts("inspection_task_state").then((response) => {
+      this.inspectionTaskState = this.dictToValue(response.data);
+    });
+    this.getAuthorizedPerson()
+    this.currentTime = getYearAndMonthAndDays()
+  },
+  mounted() {
+    this.refreshTable()
+  },
+  methods: {
+    refreshTable() {
+      this.tableLoading = true;
+      let param = { ...this.entity, ...this.page };
+      delete param.total;
+      selectInsOrderPlanList({ ...param }).then((res) => {
+        this.tableLoading = false;
+        if (res.code === 200) {
+          this.tableData = res.data.records;
+          this.page.total = res.data.total;
+        }
+      }).catch((err) => {
+        this.tableLoading = false;
+      });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.refreshTable();
+    },
+    refresh() {
+      this.resetForm('entity')
+      this.refreshTable()
+    },
+    rowClassName({ row, rowIndex }) {
+      if (this.currentTime == row.appointed) {
+        return "highlight-warning-row-border";
+      } else if (this.currentTime > row.appointed) {
+        return "highlight-danger-row-border";
+      }
+      return "";
+    },
+    // 鏌ョ湅浜т笟閾句俊鎭�
+    // openInfoDialog (row) {
+    //   this.showInfoDialog = true
+    //   this.$nextTick(() => {
+    //     this.$refs.showInfoDialog.getInfo(row.ifsInventoryId)
+    //   })
+    // },
+    selectAllByOne(row) {
+      this.isCopper = row.isCopper
+      this.customsInspection = row
+      this.activeFace = 2;
+      this.examine = 1;
+      this.isReport = 0;
+      this.currentId = parseInt(row.id)
+      switch (row.isCopper) {
+        case 0:
+          // 鍘熸潗鏂�
+          this.$router.push({
+            path: "/materialOrder/customsInspection", query: {
+              customsInspection: row,
+              active: this.activeFace,
+              currentId: this.currentId,
+              isReport: this.isReport
+            }
+          });
+          break;
+        case null:
+          // 鎴愬搧
+          this.$router.push({
+            path: "/productOrder/add", query: {
+              examine: this.examine,
+              active: this.activeFace,
+              currentId: this.currentId
+            }
+          });
+          break;
+        case 1:
+          // 閾滄潗
+          this.$router.push({
+            path: "/materialOrder/copperOrder", query: {
+              active: this.activeFace,
+              currentId: this.currentId
+            }
+          });
+          break;
+      }
+    },
+    // 澶嶆牳鍥炶皟
+    handleReview(row){
+      this.$router.push({
+        path: "/inspectionTask/inspection",
+        query: {
+          sonLaboratory: row.sonLaboratory,
+          state: 2,
+          typeSource: row.typeSource,
+          orderId: row.id,
+        },
+      })
+    },
+    // 涓婁紶鎶ュ憡
+    handleUpload () {
+
+    },
+    // 涓嬭浇鎶ュ憡
+    download(row) {
+      let url = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+      const link = document.createElement('a');
+      link.href = this.javaApi + url;
+      link.target = '_blank';
+      document.body.appendChild(link);
+      link.click();
+    },
+    // 杩樺師鎿嶄綔
+    handleRestore(row) {
+      this.$confirm('鏄惁杩樺師褰撳墠鎶ュ憡?', "璀﹀憡", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      }).then(() => {
+        upReportUrl({id: row.insReportId}).then(res => {
+          if (res.code === 200) {
+            this.$message.success('杩樺師鎴愬姛')
+            this.refreshTable()
+          }
+        })
+      }).catch(() => { })
+
+    },
+    // 鏌ョ湅鎶ュ憡
+    handleIssued(row) {
+      if (!row.tempUrlPdf) return this.$message.warning('鏂囦欢鏈笂浼�')
+      this.currentInfo = row
+      this.lookDialogVisible = true
+      // this.currentInfo = row;
+      // let fileName = row.url
+      // let fileType = "docx"
+      // if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+      //   fileName = row.tempUrlPdf
+      //   fileType = "pdf"
+      // }
+      // fileName = fileName.replace('/word/','')
+      // const userName = this.nickName
+      // this.option = {
+      //   url: this.javaApi + "/word/" + fileName,
+      //   isEdit: false,
+      //   fileType: fileType,
+      //   title: fileName,
+      //   lang: 'zh-CN',
+      //   isPrint: false,
+      //   user_id: 1,
+      //   user_name: userName,
+      //   editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+      // }
+      // this.issuedVisible = true;
+    },
+    getAuthorizedPerson() {
+      selectUserCondition({ type: 1 }).then((res) => {
+        let data = [];
+        res.data.forEach((a) => {
+          data.push({
+            label: a.name,
+            value: a.id,
+          });
+        });
+        this.personList = data;
+      });
+    },
+  }
+}
+</script>
+<style scoped>
+.page_total {
+  margin-bottom: 10px;
+}
+</style>
diff --git a/src/views/business/inspectionTask/inspection.vue b/src/views/business/inspectionTask/inspection.vue
index bf4b3d9..58accdd 100644
--- a/src/views/business/inspectionTask/inspection.vue
+++ b/src/views/business/inspectionTask/inspection.vue
@@ -18,13 +18,9 @@
       </el-col>
       <el-col :span="16" style="text-align: right">
         <el-button size="small" type="primary" @click="refreshView">鍒锋柊</el-button>
-        <el-button v-if="typeSource === 1" size="small" type="primary" @click="openPurchase">杩涜揣楠岃瘉</el-button>
-        <el-button v-if="state === 1 && typeSource === 1" size="small" type="primary"
-          @click="openUnPassDialog('add')">涓嶅悎鏍煎鐞�</el-button>
-        <el-button size="small" type="primary" @click="
-          sampleVisible = true;
-        uploadSample();
-        ">鏍峰搧鍒囨崲</el-button>
+        <el-button v-if="typeSource == 1" size="small" type="primary" @click="openPurchase">杩涜揣楠岃瘉</el-button>
+        <el-button v-if="state == 1 && typeSource == 1" size="small" type="primary" @click="openUnPassDialog('add')">涓嶅悎鏍煎鐞�</el-button>
+        <el-button size="small" type="primary" @click="sampleVisible = true;uploadSample();">鏍峰搧鍒囨崲</el-button>
         <el-button v-if="state == 1" size="small" type="primary" @click="taskVisible = true">浠诲姟鍒囨崲</el-button>
         <el-button v-if="state == 1" size="small" type="primary" @click="addVerifyDia = true">鎻愪氦</el-button>
         <!-- 澶嶆牳 -->
@@ -73,7 +69,7 @@
         </el-form-item>
         <el-form-item label="澶囨敞:">
           <!--          <span style="color:red">{{ insOrder.remark?insOrder.remark:'-' }}</span>-->
-          <el-input v-model="insOrder.remark" :disabled="state !== 1" clearable placeholder="璇疯緭鍏�" size="small"
+          <el-input v-model="insOrder.remark" :disabled="state != 1" clearable placeholder="璇疯緭鍏�" size="small"
             @blur="subOtherForm(insOrder.remark, 'remark')"></el-input>
           <!-- <el-tag v-if="currentKey">{{ insOrder.remark }}</el-tag> -->
         </el-form-item>
@@ -1065,7 +1061,7 @@
     },
     // 鎵撳紑杩涜揣楠岃瘉寮规
     openPurchase() {
-      const operationType = this.state === 1 ? "add" : "view";
+      const operationType = this.state == 1 ? "add" : "view";
       this.purchaseDialog = true;
       const item = {
         id: this.currentSample.id,
@@ -3112,7 +3108,7 @@
   align-items: center;
 }
 </style>
-<style>
+<style scoped>
 /* .inspection .el-form-item__label {
   color: #000;
 } */
diff --git a/src/views/business/reportPreparation/index.vue b/src/views/business/reportPreparation/index.vue
new file mode 100644
index 0000000..3d9209a
--- /dev/null
+++ b/src/views/business/reportPreparation/index.vue
@@ -0,0 +1,1221 @@
+<template>
+  <div class="inspection_order">
+    <div v-show="activeFace === 0 && state===0" style="width: 100%;height: 100%;">
+      <div>
+        <el-row class="title">
+          <el-col :span="12" style="padding-left: 20px;text-align: left;">鎶ュ憡缂栧埗</el-col>
+        </el-row>
+      </div>
+      <div class="search" style="position: relative;">
+        <div class="search_thing">
+          <div class="search_label">鎶ュ憡缂栧彿锛�</div>
+          <div class="search_input"><el-input v-model="componentData.entity.code" 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.queryStatus" clearable size="small" style="width: 100%;" @change="refreshTable()">
+              <el-option v-for="(a, i) in queryStatusList" :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">
+          <div class="search_label">妫�楠岀被鍒細</div>
+          <div class="search_input">
+            <el-select v-model="componentData.entity.orderType" clearable size="small" style="width: 100%;" @change="refreshTable()">
+              <el-option v-for="(a, i) in orderTypeList" :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>
+          <el-button :loading="outLoading" size="small" style="margin-right: 16px;" type="primary" @click="handleDowns">鎵归噺涓嬭浇</el-button>
+        </div>
+      </div>
+      <!-- <input id="input" type="file" accept=".doc,.docx"></input> -->
+      <div class="table">
+        <el-table @selection-change="handleChange" :data="valueTableData" style="width: 100%" height="calc(100vh - 21em)" v-loading="tableLoading">
+          <!-- 琛ㄦ牸鍒� -->
+          <el-table-column type="selection" width="55"></el-table-column>
+          <el-table-column header-align="center" align="center" width="70" prop="prop" label="搴忓彿" type="index"></el-table-column>
+          <el-table-column prop="code" label="鎶ュ憡缂栧彿" min-width="180">
+            <template slot-scope="scope">
+              <el-button type="text" @click="selectAllByOne(scope.row)">{{scope.row.code}}</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column prop="typeSource" label="涓嬪崟绫诲埆" min-width="120">
+            <template slot-scope="scope">
+              <el-tag type="info" v-if="scope.row.typeSource === 1" disable-transitions>鍘熸潗鏂欎笅鍗�</el-tag>
+              <el-tag type="info" v-if="scope.row.typeSource === 0" disable-transitions>鎴愬搧涓嬪崟</el-tag>
+            </template>
+          </el-table-column>
+          <el-table-column prop="orderType" label="妫�楠岀被鍒�" min-width="150">
+            <template slot-scope="scope">
+              <el-tag type="success" v-if="scope.row.orderType === 'Customer-ordered test'" disable-transitions>濮旀墭璇曢獙</el-tag>
+              <el-tag v-if="scope.row.orderType === '鎶芥'" disable-transitions>鎶芥</el-tag>
+              <el-tag type="info" v-if="scope.row.orderType === '杩涘巶妫�楠�'" disable-transitions>杩涘巶妫�楠�</el-tag>
+              <el-tag type="warning" v-if="scope.row.orderType === 'Quarterly inspection'" disable-transitions>瀛e害妫�楠�</el-tag>
+            </template>
+          </el-table-column>
+          <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="150"></el-table-column>
+          <el-table-column prop="writeUserName" label="鎻愪氦浜�" min-width="110"></el-table-column>
+          <el-table-column prop="writeTime" label="鎻愪氦鏃堕棿" min-width="150"></el-table-column>
+          <el-table-column prop="state" label="鎻愪氦鐘舵��" min-width="110">
+            <template slot-scope="scope">
+              <el-tag type="danger" v-if="scope.row.state === 0" disable-transitions>寰呮彁浜�</el-tag>
+              <el-tag type="success" v-if="scope.row.state === 1" disable-transitions>宸叉彁浜�</el-tag>
+            </template>
+          </el-table-column>
+          <el-table-column prop="examineUser" label="瀹℃牳浜�" width="110"></el-table-column>
+          <el-table-column prop="examineTime" label="瀹℃牳鏃堕棿" width="180"></el-table-column>
+          <el-table-column prop="isExamine" label="瀹℃牳鐘舵��" width="110">
+            <template slot-scope="scope">
+              <el-tag type="danger" v-if="scope.row.isExamine === 0" disable-transitions>涓嶉�氳繃</el-tag>
+              <el-tag type="success" v-if="scope.row.isExamine === 1" disable-transitions>閫氳繃</el-tag>
+            </template>
+          </el-table-column>
+          <el-table-column prop="examineTell" label="瀹℃牳澶囨敞" width="180"></el-table-column>
+          <el-table-column prop="ratifyUser" label="鎵瑰噯浜�" width="110"></el-table-column>
+          <el-table-column prop="ratifyTime" label="鎵瑰噯鏃堕棿" width="180"></el-table-column>
+          <el-table-column prop="isRatify" label="鎵瑰噯鐘舵��" width="110">
+            <template slot-scope="scope">
+              <el-tag type="danger" v-if="scope.row.isRatify === 0" disable-transitions>涓嶆壒鍑�</el-tag>
+              <el-tag type="success" v-if="scope.row.isRatify === 1" disable-transitions>鎵瑰噯</el-tag>
+            </template>
+          </el-table-column>
+          <el-table-column prop="ratifyTell" label="鎵瑰噯澶囨敞" width="180"></el-table-column>
+          <!-- 鎿嶄綔鎸夐挳 -->
+          <el-table-column label="鎿嶄綔" fixed="right" min-width="360" align="center">
+            <template slot-scope="scope">
+              <el-button size="small" type="text" @click="viewIssued(scope.row)">鏌ョ湅鎶ュ憡</el-button>
+              <el-upload ref='upload1'
+                         style="display: inline"
+                         :action="fileAction1 +'?id='+ scope.row.id"
+                         :auto-upload="true"
+                         :before-upload="fileBeforeUpload1"
+                         :headers="headers" :on-error="onError1"
+                         :on-success="handleSuccessUp1"
+                         :show-file-list="false"
+                         accept='.doc,.docx'>
+                <el-button size="small" type="text" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName">涓婁紶</el-button>
+                <!--                <span>涓婁紶</span>-->
+              </el-upload>
+              <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handleRestore(scope.row)">杩樺師</el-button>
+              <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="sendBackTask(scope.row)">閫�鍥炰换鍔�</el-button>
+              <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handle(scope.row)">鎻愪氦</el-button>
+              <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 ||scope.row.isExamine == 1 || userName !== scope.row.examineUser" @click="handleIssued(scope.row)">瀹℃牳</el-button>
+              <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || userName !== scope.row.ratifyUser" @click="handleApprove(scope.row)">鎵瑰噯</el-button>
+              <el-popover placement="bottom" :width="170" trigger="hover">
+                <template #reference>
+                  <el-button link type="text" size="small">鏇村</el-button>
+                </template>
+                <div>
+                  <el-button style="margin-left: 10px" type="text" size="small" @click="download(scope.row)">涓嬭浇</el-button>
+                  <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">鍘熷璁板綍</el-button>
+                  <el-button type="text" size="small" @click="handleFileLook(scope.row)">闄勪欢涓婁紶</el-button>
+                </div>
+              </el-popover>
+            </template>
+          </el-table-column>
+        </el-table>
+        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current"
+                       style="margin-right: 5%;" :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size"
+                       layout="->,total, sizes, prev, pager, next, jumper" :total="total">
+        </el-pagination>
+      </div>
+    </div>
+    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="claimVisible" title="鍦ㄧ嚎缂栧埗"
+               width="22cm">
+      <div class="full-screen">
+        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px"
+           @click="fullscreen=true;"></i>
+        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;">
+      </div>
+      <Word v-if="claimVisible" ref="Word" :class="{fullscreen:fullscreen}" :value="value" style="height:70vh" />
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="claimVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="confirmClaim">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="issuedVisible" title="鎶ュ憡瀹℃牳"
+               width="80vw">
+      <div class="full-screen">
+        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
+        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
+      </div>
+      <div v-if="issuedVisible" style="height: 80vh;">
+        <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+      </div>
+      <span slot="footer" class="dialog-footer">
+				<el-button :disabled="loadingIssued" @click="issuedReasonVisible=true">涓嶉�氳繃</el-button>
+				<el-button type="primary" @click="subIssued">閫� 杩�</el-button>
+			</span>
+    </el-dialog>
+    <el-dialog :modal-append-to-body="false" :visible.sync="issuedReasonVisible" title="涓嶉�氳繃鍘熷洜" width="400px">
+      <div class="search_thing">
+        <div class="search_label">涓嶉�氳繃鍘熷洜锛�</div>
+        <div class="search_input"><el-input v-model="reason" clearable placeholder="璇疯緭鍏�" size="small"></el-input></div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button :disabled="loadingIssuedReason" @click="issuedReasonVisible=false">鍙栨秷</el-button>
+				<el-button :loading="loadingIssuedReason" type="primary" @click="handleIssuedReason">纭畾</el-button>
+			</span>
+    </el-dialog>
+    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="approveVisible" title="鎶ュ憡鎵瑰噯" width="80vw">
+      <div class="full-screen">
+        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
+        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
+      </div>
+      <div v-if="approveVisible" style="height: 80vh;">
+        <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+      </div>
+      <span slot="footer" class="dialog-footer">
+				<el-button :disabled="loadingApprove" @click="approveReasonVisible=true">涓嶆壒鍑�</el-button>
+				<el-button :loading="loadingApprove" type="primary" @click="subApprove">鎵� 鍑�</el-button>
+			</span>
+    </el-dialog>
+    <el-dialog :modal-append-to-body="false" :visible.sync="approveReasonVisible" title="涓嶆壒鍑嗗師鍥�" width="400px">
+      <div class="search_thing">
+        <div class="search_label">涓嶆壒鍑嗗師鍥狅細</div>
+        <div class="search_input"><el-input v-model="reason" clearable placeholder="璇疯緭鍏�" size="small"></el-input></div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button :disabled="loadingApproveReason" @click="approveReasonVisible=false">鍙栨秷</el-button>
+				<el-button :loading="loadingApproveReason" type="primary" @click="handleApproveReason">纭畾</el-button>
+			</span>
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" :visible.sync="addApproverDia" title="鎸囧畾鎵瑰噯浜哄憳"
+               width="400px"
+               @close="closeAddApproverDia">
+      <div class="body" style="display: flex;padding: 10px;align-items: center;">
+        <div class="search_label" style="width: 150px;"><span class="required-span">*</span>鎵瑰噯浜猴細</div>
+        <div class="search_input" style="width: 100%;">
+          <el-select v-model="approver" clearable filterable placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+            <el-option v-for="(item,i) in approverList" :key="i" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeAddApproverDia">鍙� 娑�</el-button>
+        <el-button :loading="loadingIssued" type="primary" @click="submitAddApprover">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" :visible.sync="addVerifyDia"
+               title="鎸囧畾瀹℃牳浜哄憳"
+               width="400px"
+               @close="closeAddVerifyDia">
+      <div class="body" style="display: flex;padding: 10px;align-items: center;">
+        <div class="search_label" style="width: 150px;"><span class="required-span">*</span>瀹℃牳浜猴細</div>
+        <div class="search_input" style="width: 100%;">
+          <el-select v-model="verifyUser" clearable filterable placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+            <el-option v-for="(item,i) in approverList" :key="i" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeAddVerifyDia">鍙� 娑�</el-button>
+        <el-button :loading="loadingVerify" type="primary" @click="handleSubmit">纭� 瀹�</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>
+    <!--浜т笟閾句俊鎭煡鐪�-->
+    <ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo>
+    <!--鎶ュ憡鏌ョ湅-->
+    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="viewIssuedVisible" title="鎶ュ憡鏌ョ湅"
+               width="80vw">
+      <div class="full-screen">
+        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
+        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
+      </div>
+      <div v-if="viewIssuedVisible" style="height: 80vh;">
+        <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+      </div>
+    </el-dialog>
+    <!--妫�楠屼换鍔′俊鎭煡鐪�-->
+    <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="filesDialogVisible" title="闄勪欢鏌ョ湅" width="80%" @closed="closeFilesLook">
+      <div style="display: flex;justify-content: space-between;">
+        <el-upload ref='upload'
+                   :action="fileAction"
+                   :auto-upload="true"
+                   :before-upload="fileBeforeUpload" :data="{orderId: filesLookInfo.insOrderId}"
+                   :headers="headers" :on-error="onError"
+                   :on-success="handleSuccessUp"
+                   :show-file-list="false"
+                   accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;">
+          <el-button size="small" style="height: 38px" type="primary">闄勪欢涓婁紶</el-button>
+        </el-upload>
+      </div>
+<!--      <div v-if="filesDialogVisible" style="height: 70vh;overflow-y: auto;">-->
+<!--        <ValueTable :key="upIndex"-->
+<!--                    ref="fileList"-->
+<!--                    :componentData="fileComponentData"-->
+<!--                    :delUrl="$api.insOrderPlan.delfile"-->
+<!--                    :url="$api.insOrderPlan.getFileList"-->
+<!--                    class="value-table"/>-->
+<!--      </div>-->
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue";
+// import ShowInfo from "../do/b1-material-ins-order/showInfo.vue";
+import file from "@/utils/file";
+export default {
+  components: {onlyoffice},
+  data() {
+    return {
+      componentData: {
+        entity: {
+          queryStatus: null,
+          code: null,
+          typeSource: null,
+          orderBy: {
+            field: 'id',
+            order: 'desc'
+          }
+        },
+        isIndex: true,
+        showSelect: true,
+        select: true,
+        selectMethod: 'handleChange',
+        do: [
+          {
+            id: '',
+            font: '鏌ョ湅鎶ュ憡',
+            type: 'text',
+            method: 'viewIssued',
+          },
+          {
+            id: 'download',
+            font: '涓嬭浇',
+            type: 'text',
+            method: 'download'
+          }, {
+            id: 'handleUpload',
+            font: '涓婁紶',
+            type: 'upload',
+            uploadConfig: {
+              url: this.$api.insReport.inReport,
+              accept: '.docx'
+            },
+            method: 'handleUpload',
+            disabFun: (row, index) => {
+              return row.state != 0 || userName != row.writeUserName
+            }
+          },
+          {
+            id: 'handleRestore',
+            font: '杩樺師',
+            type: 'text',
+            method: 'handleRestore',
+            disabFun: (row, index) => {
+              return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
+            }
+          },
+          {
+            id: 'sendBackTask',
+            font: '閫�鍥炰换鍔�',
+            type: 'text',
+            method: 'sendBackTask',
+            disabFun: (row, index) => {
+              return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
+            }
+          },
+          {
+            id: 'handle',
+            font: '鎻愪氦',
+            type: 'text',
+            method: 'handle',
+            disabFun: (row, index) => {
+              return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
+            }
+          },
+          {
+            id: 'handleIssued',
+            font: '瀹℃牳',
+            type: 'text',
+            method: 'handleIssued',
+            disabFun: (row, index) => {
+              return row.state == null || row.state == 0 || row.isExamine == 1 || JSON.parse(localStorage.getItem("user")).name != row.examineUser
+            }
+          }, {
+            id: 'handleApprove',
+            font: '鎵瑰噯',
+            type: 'text',
+            method: 'handleApprove',
+            disabFun: (row, index) => {
+              return row.state == null || row.state == 0 || row.isExamine == 0 || row.isExamine == null || row.isRatify == 1 || JSON.parse(localStorage.getItem("user")).name != row.ratifyUser
+            }
+          },
+          {
+            id: '',
+            font: '鍘熷璁板綍',
+            type: 'text',
+            method: 'viewInspectInfo',
+          },
+          {
+            id: '',
+            font: '闄勪欢涓婁紶',
+            type: 'text',
+            method: 'handleFileLook',
+          }
+        ],
+        linkEvent: {
+          code: {
+            method: 'selectAllByOne'
+          }
+        },
+        tagField: {
+          isRatify: {
+            select: [{
+              value: 0,
+              type: 'danger',
+              label: '涓嶆壒鍑�'
+            }, {
+              value: 1,
+              type: 'success',
+              label: '鎵瑰噯'
+            }]
+          },
+          isExamine: {
+            select: [{
+              value: 0,
+              type: 'danger',
+              label: '涓嶉�氳繃'
+            }, {
+              value: 1,
+              type: 'success',
+              label: '閫氳繃'
+            }]
+          },
+          state: {
+            select: [{
+              value: 0,
+              type: 'danger',
+              label: '寰呮彁浜�'
+            }, {
+              value: 1,
+              type: 'success',
+              label: '宸叉彁浜�'
+            }]
+          },
+          typeSource: {
+            select: [{
+              value: 0,
+              label: '鎴愬搧涓嬪崟',
+              type: 'info'
+            },{
+              value: 1,
+              label: '鍘熸潗鏂欎笅鍗�',
+              type: 'info'
+            }]
+          },
+          queryStatus: {
+            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: '瀛e害妫�楠�',
+              type: 'warning',
+              effect: 'plain'
+            }]
+          }
+        },
+        selectField: {},
+        requiredAdd: [],
+        needSort: ['createTime', 'state', 'writeTime', 'isExamine', 'examineTime', 'ratifyTime'],
+        requiredUp: []
+      },
+      page: {
+        current: 1,
+        size: 20,
+      },
+      total: null,
+      entityCopy: {},
+      upIndex: 0,
+      statusList: [],
+      claimVisible: false,
+      issuedVisible: false,
+      issuedReasonVisible: false,
+      approveVisible: false,
+      approveReasonVisible: false,
+      fullscreen: false,
+      loadingApproveReason: false,
+      loadingApprove: false,
+      loadingIssuedReason: false,
+      loadingIssued: false,
+      value: ``,
+      reason: '',
+      currentInfo: null,
+      option:null,
+      mutiList:[],
+      outLoading:false,
+      inLoading:false,
+      addApproverDia: false, // 鎸囧畾瀹℃壒浜哄憳寮规
+      approver: '', // 瀹℃壒浜哄憳
+      approverId: '', // 瀹℃壒浜哄憳
+      approverList: [],
+      addVerifyDia: false, // 鎸囧畾瀹℃牳浜哄憳寮规
+      verifyUser: null, // 瀹℃牳浜哄憳
+      loadingVerify: false, // 瀹℃牳浜哄憳
+      typeSourceList: [
+        {label: '鎴愬搧涓嬪崟', value: 0},
+        {label: '鍘熸潗鏂欎笅鍗�', value: 1},
+      ],
+      orderTypeList: [
+        {label: '濮旀墭璇曢獙', value: 'Customer-ordered test'},
+        {label: '鎶芥', value: '鎶芥'},
+        {label: '杩涘巶妫�楠�', value: '杩涘巶妫�楠�'},
+        {label: '瀛e害妫�楠�', value: 'Quarterly inspection'},
+      ],
+      showInfoDialog: false, // 浜т笟閾句俊鎭煡鐪�
+      isReport: 1,
+      activeFace: 0, // 1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍革紝榛樿涓�0
+      customsInspection: {},
+      currentId: null,
+      examine: null,
+      viewIssuedVisible: false,
+      queryStatusList: [
+        {label: '寰呮彁浜�', value: 0},
+        {label: '寰呭鏍�', value: 1},
+        {label: '寰呮壒鍑�', value: 2},
+      ],
+      state: 0,
+      orderId: 0,
+      inspectorList: [],//妫�楠屼汉鍛樺垪琛�
+      InspectionKey: 1,
+      typeSource: null,// 0:鎴愬搧涓嬪崟锛�1锛氬師鏉愭枡涓嬪崟
+      sonLaboratory: '', // 璇曢獙瀹�
+      filesDialogVisible: false,
+      filesLookInfo: {},
+      fileComponentData: {
+        entity: {
+          insOrderId:''
+        },
+        isIndex: true,
+        showSelect: false,
+        select: false,
+        sort: false,
+        init:false,
+        do: [
+          {
+            id: 'parent',
+            font: '涓嬭浇',
+            type: 'text',
+            method: 'handleDown'
+          },{
+            id: 'delete',
+            font: '鍒犻櫎',
+            type: 'text',
+            method: 'doDiy',
+          }
+        ],
+        isPage: false,
+        linkEvent: {},
+        tagField: {
+          type:{
+            select:[
+              {
+                value: 1,
+                label: '鍥剧墖'
+              },
+              {
+                value: 2,
+                label: '鏂囦欢'
+              }
+            ]
+          }
+        },
+        currentId: '',
+        selectField: {},
+        requiredAdd: [],
+        requiredUp: []
+      },
+      isCopper: null,
+      tableLoading: false,
+      valueTableData: [],
+      userName: ''
+    }
+  },
+  computed: {
+    headers() {
+      return {
+        'token': sessionStorage.getItem('token')
+      }
+    },
+    action() {
+      return this.javaApi + this.$api.insReport.upAll
+    },
+    fileAction() {
+      return this.javaApi + this.$api.insOrderPlan.uploadFile
+    },
+    fileAction1() {
+      return this.javaApi + this.$api.insReport.inReport
+    }
+  },
+  mounted() {
+    this.entityCopy = this.HaveJson(this.componentData.entity)
+    this.userName = JSON.parse(localStorage.getItem("user")).name
+    this.getPower()
+    this.refreshTable()
+  },
+  methods: {
+    handleChange(arr){
+      this.mutiList = arr
+    },
+    // 鏌ョ湅妫�楠屾暟鎹�
+    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.state = 3;
+      this.typeSource = row.typeSource
+      this.orderId = row.insOrderId
+      this.sonLaboratory = row.sonLaboratory
+    },
+    goback() {
+      this.state = 0
+      this.refreshTable('page')
+    },
+    handleFileLook (row) {
+      this.filesLookInfo = row
+      this.filesDialogVisible = true
+      this.fileComponentData.entity.insOrderId = row.insOrderId
+      this.$nextTick(() => {
+        this.$refs['fileList'].selectList()
+      })
+    },
+    closeFilesLook () {
+      this.filesDialogVisible = false
+    },
+    handleSuccessUp(response, ) {
+      this.upLoading = false;
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+        this.$refs.fileList.selectList()
+      }
+    },
+    handleSuccessUp1(response, ) {
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+      }
+    },
+    handleDown(row){
+      this.$axios.post(this.$api.insOrderPlan.downFile, {
+        id: row.id,
+      }).then(res => {
+        if (res.code === 200) {
+          let url = '';
+          if(res.data.type==1){
+            url = this.javaApi+'/img/'+res.data.fileUrl
+            file.downloadIamge(url,row.fileName)
+          }else{
+            url = this.javaApi+'/word/'+res.data.fileUrl
+            const link = document.createElement('a');
+            link.href = url;
+            link.download = row.fileName;
+            link.click();
+          }
+        }
+      }).catch(error => {
+
+      })
+    },
+    // 鍒锋柊椤甸潰
+    refreshView () {
+      this.InspectionKey++
+    },
+    // 鏌ョ湅浜т笟閾句俊鎭�
+    openInfoDialog (row) {
+      this.showInfoDialog = true
+      this.$nextTick(() => {
+        this.$refs.showInfoDialog.getInfo(row.ifsInventoryId)
+      })
+    },
+    handleDowns(){
+      if(this.mutiList.length==0){
+        this.$message.error('璇烽�夋嫨鎶ュ憡')
+        return
+      }
+      let str = this.mutiList.map(m=>m.id).join(',')
+      this.outLoading = true
+      this.$axios.get(this.$api.insReport.downAll+'?ids='+str).then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        // const blob = new Blob([res],{ type: 'application/octet-stream' });
+        // const url = URL.createObjectURL(blob);
+        // const link = document.createElement('a');
+        // link.href = url;
+        // link.download = '鎶ュ憡.zip';
+        // link.click();
+        const link = document.createElement('a');
+        link.href = this.javaApi + res.message;
+        link.target = '_blank';
+        document.body.appendChild(link);
+        link.click();
+      })
+    },
+    beforeUpload(file){
+      const isZip = file.type === 'application/zip' || file.name.endsWith('.zip');
+      if (!isZip) {
+        this.$message.error('涓婁紶鏂囦欢鍙兘鏄� ZIP 鏍煎紡!');
+      }
+      if(isZip){
+        this.inLoading = true;
+      }
+      return isZip;
+    },
+    fileBeforeUpload(file) {
+      let flag = true
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload.clearFiles()
+        flag = false
+      }
+      if (!flag) {
+        return Promise.reject(flag); //姝g‘鐨勭粓姝�
+      }
+    },
+    fileBeforeUpload1(file) {
+      let flag = true
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload1.clearFiles()
+        flag = false
+      }
+      if (!flag) {
+        return Promise.reject(flag); //姝g‘鐨勭粓姝�
+      }
+    },
+    handleSuccess(response,){
+      this.inLoading = false;
+      if (response.code == 200) {
+        this.$message.success('瀵煎叆鎴愬姛')
+        this.refreshTable()
+      }else{
+        this.$message.error(response.message)
+      }
+    },
+    onError(err, file, fileList,type) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload.clearFiles()
+    },
+    onError1(err, file, fileList,type) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload1.clearFiles()
+    },
+    refreshTable(e) {
+      this.tableLoading = false
+      this.$axios.post(this.$api.insReport.pageInsReport, {
+        page: this.page,
+        entity: this.componentData.entity
+      }, {
+        headers: {
+          'Content-Type': 'application/json'
+        }
+      }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) {
+          return
+        }
+        this.total = res.data.body.total
+        this.valueTableData = res.data.body.records
+      })
+    },
+    handleSizeChange(val) {
+      this.page.size = val
+      this.refreshTable();
+    },
+    handleCurrentChange(val) {
+      this.page.current = val
+      this.refreshTable();
+    },
+    refresh() {
+      this.componentData.entity = this.HaveJson(this.entityCopy)
+      this.refreshTable();
+    },
+    async handleWeave(row) {
+      let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+      fileName = fileName.replace('/word/','')
+      const userName = JSON.parse(localStorage.getItem("user")).name;
+      //鍙傝�僾abOnlyOffice缁勪欢鍙傛暟閰嶇疆
+      const { href } = this.$router.resolve({
+        path: `/wordEdit`,
+        query: {
+          url: this.javaApi + "/word/" + fileName,
+          isEdit: true,
+          fileType: "docx",
+          title: fileName,
+          lang: 'zh-CN',
+          isPrint: true,
+          user_id: 1,
+          user_name: userName,
+          editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+        }
+      })
+      window.open(href, '_blank');
+    },
+    // 鏉冮檺鍒嗛厤
+    getPower(radio) {
+      let power = JSON.parse(sessionStorage.getItem('power'))
+      let edit = false
+      let up = false
+      let res = false
+      let sub = false
+      let issued = true
+      let approve = true
+      for (var i = 0; i < power.length; i++) {
+        if (power[i].menuMethod == 'upReportFile') {
+          edit = true
+        }
+        if (power[i].menuMethod == 'inReport') {
+          up = true
+        }
+        if (power[i].menuMethod == 'upReportUrl') {
+          res = true
+        }
+        if (power[i].menuMethod == 'writeReport') {
+          sub = true
+        }
+        if (power[i].menuMethod == 'ratifyReport') {
+          approve = true
+        }
+        if (power[i].menuMethod == 'examineReport') {
+          issued = true
+        }
+      }
+      if (!approve) {
+        this.componentData.do.splice(6, 1)
+      }
+      if (!issued) {
+        this.componentData.do.splice(5, 1)
+      }
+      if (!sub) {
+        this.componentData.do.splice(4, 1)
+      }
+      if (!res) {
+        this.componentData.do.splice(3, 1)
+      }
+      if (!up) {
+        this.componentData.do.splice(2, 1)
+      }
+      if (!edit) {
+        this.componentData.do.splice(0, 1)
+      }
+    },
+    confirmClaim() {
+      // console.log(this.$refs.Word.getValue())
+    },
+    playOrder(num) {
+      this.activeFace = num
+    },
+    async selectAllByOne(row) {
+      this.isCopper = row.isCopper
+      this.customsInspection = row
+      this.activeFace = 2;
+      this.examine = 1;
+      this.isReport = 1
+      this.currentId = parseInt(row.insOrderId)
+    },
+    download(row) {
+      let url = row.urlS ? row.urlS : row.url;
+      const link = document.createElement('a');
+      link.href = this.javaApi + url;
+      link.target = '_blank';
+      document.body.appendChild(link);
+      link.click();
+    },
+    // 杩樺師鎿嶄綔
+    handleRestore(row) {
+      this.$axios.post(this.$api.insReport.upReportUrl, {
+        id: row.id
+      }).then(res => {
+        if (res.code === 200) {
+          this.$message.success('鎿嶄綔鎴愬姛')
+          this.refreshTable('page')
+        }
+      })
+    },
+    // 瀹℃牳鎸夐挳
+    handleIssued(row) {
+      this.currentInfo = row;
+      let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+      let fileType = "docx"
+      if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+        fileName = row.tempUrlPdf
+        fileType = "pdf"
+      }
+      fileName = fileName.replace('/word/','')
+      const userName = JSON.parse(localStorage.getItem("user")).name;
+      this.option = {
+        url: this.javaApi + "/word/" + fileName,
+        isEdit: false,
+        fileType: fileType,
+        title: fileName,
+        lang: 'zh-CN',
+        isPrint: false,
+        user_id: 1,
+        user_name: userName,
+        editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+      }
+      this.issuedVisible = true;
+    },
+    // 鏌ョ湅pdf鎶ュ憡
+    viewIssuedPdf(row) {
+      this.currentInfo = row;
+      let url = row.tempUrlPdf
+      if(url){
+        url = url.split('.')[0]+'.pdf'
+        const link = document.createElement('a');
+        link.href = this.javaApi + url;
+        link.target = '_blank';
+        document.body.appendChild(link);
+        link.click();
+      }
+    },
+    // 鏌ョ湅鎶ュ憡
+    viewIssued(row) {
+      this.currentInfo = row;
+      let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+      let fileType = "docx"
+      if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+        fileName = row.tempUrlPdf
+        fileType = "pdf"
+      }
+      fileName = fileName.replace('/word/','')
+      const userName = JSON.parse(localStorage.getItem("user")).name;
+      this.option = {
+        url: this.javaApi + "/word/" + fileName,
+        isEdit: false,
+        fileType: fileType,
+        title: fileName,
+        lang: 'zh-CN',
+        isPrint: false,
+        user_id: 1,
+        user_name: userName,
+        editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+      }
+      this.viewIssuedVisible = true;
+    },
+    // 閫�鍥炲埌浠诲姟
+    sendBackTask(row) {
+      this.$confirm('纭閫�鍥炲埌妫�楠屼换鍔�?閫�鍥炲悗闇�閲嶆柊鎻愪氦澶嶆牳', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.upLoad = true
+        this.$axios.post(this.$api.insReport.sendBackTask+'?id='+row.id).then(res => {
+          this.upLoad = false
+          if (res.code === 201) {
+            return
+          }
+          this.$message.success('閫�鍥炴垚鍔燂紒')
+          this.refreshTable('page')
+        }).catch(err => {
+          this.upLoad = false
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 瀹℃牳閫氳繃
+    submitAddApprover () {
+      if (!this.approver) {
+        this.$message.error('璇烽�夋嫨瀹℃壒浜�')
+        return
+      }
+      this.loadingIssued = true;
+      this.$axios.post(this.$api.insReport.examineReport, {
+        id: this.currentInfo.id,
+        userId: this.approver,
+        isExamine: 1
+      }).then(res => {
+        this.loadingIssued = false;
+        if (res.code === 201) {
+          return
+        }
+        this.$message.success('鎻愪氦鎴愬姛')
+        this.refreshTable('page')
+        this.currentInfo = null;
+        this.addApproverDia = false
+        this.issuedVisible = false;
+      }).catch(e => {
+        this.$message.error('鎻愪氦澶辫触')
+        this.loadingIssued = false;
+      })
+    },
+    closeAddApproverDia () {
+      this.addApproverDia = false
+      this.approver = ''
+    },
+    // 鐐瑰嚮閫氳繃锛岄渶瑕侀�夋嫨鎵瑰噯浜哄憳
+    subIssued() {
+      this.getAuthorizedPerson()
+      this.addApproverDia = true
+    },
+    // 鑾峰彇浜哄憳鍒楄〃
+    getAuthorizedPerson() {
+      this.$axios.get(this.$api.user.selectQualityUserList).then(res => {
+        let data = []
+        let userName = JSON.parse(localStorage.getItem("user")).name;
+        res.data.forEach(a => {
+          // if(a.name !== userName) {
+          data.push({
+            label: a.name,
+            value: a.id
+          })
+          // }
+        })
+        this.approverList = data
+      })
+    },
+    // 鎵瑰噯鎸夐挳
+    handleApprove(row) {
+      this.currentInfo = row;
+      let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+      let fileType = "docx"
+      if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+        fileName = row.tempUrlPdf
+        fileType = "pdf"
+      }
+      fileName = fileName.replace('/word/','')
+      const userName = JSON.parse(localStorage.getItem("user")).name;
+      this.option = {
+        url: this.javaApi + "/word/" + fileName,
+        isEdit: false,
+        fileType: fileType,
+        title: fileName,
+        lang: 'zh-CN',
+        isPrint: false,
+        user_id: 1,
+        user_name: userName,
+        editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+      }
+      this.approveVisible = true;
+    },
+    // 鎵瑰噯閫氳繃
+    subApprove() {
+      this.loadingApprove = true;
+      this.$axios.post(this.$api.insReport.ratifyReport, {
+        id: this.currentInfo.id,
+        isRatify: 1
+      }).then(res => {
+        this.loadingApprove = false;
+        if (res.code == 201) {
+          this.$message.error('鎵瑰噯澶辫触')
+          return
+        }
+        this.$message.success('宸叉壒鍑�')
+        this.refreshTable('page')
+        this.currentInfo = null;
+        this.approveVisible = false;
+      })
+    },
+    handle (row) {
+      this.getAuthorizedPerson()
+      this.currentInfo = row;
+      this.addVerifyDia = true
+    },
+    // 鎻愪氦瀹℃牳浜烘搷浣�
+    handleSubmit(row) {
+      this.loadingVerify = true
+      this.$axios.post(this.$api.insReport.writeReport, {
+        id: this.currentInfo.id,
+        userId: this.verifyUser,
+      }).then(res => {
+        this.loadingVerify = false
+        if (res.code === 201) {
+          return
+        }
+        this.addVerifyDia = false
+        this.$message.success('鎻愪氦鎴愬姛')
+        this.refreshTable('page')
+      }).catch(e => {
+        this.loadingVerify = false
+        this.$message.error('鎻愪氦澶辫触')
+      })
+    },
+    closeAddVerifyDia () {
+      this.addVerifyDia = false
+      this.verifyUser = ''
+    },
+    // 瀹℃牳涓嶉�氳繃鍘熷洜鎻愪氦
+    handleIssuedReason() {
+      if (!this.reason) {
+        return this.$message.error('璇疯緭鍏ュ師鍥�')
+      }
+      this.loadingIssuedReason = true;
+      this.$axios.post(this.$api.insReport.examineReport, {
+        id: this.currentInfo.id,
+        isExamine: 0,
+        examineTell: this.reason
+      }).then(res => {
+        this.loadingIssuedReason = false;
+        if (res.code === 201) {
+          return
+        }
+        this.$message.success('鎿嶄綔鎴愬姛')
+        this.refreshTable('page')
+        this.currentInfo = null;
+        this.reason = '';
+        this.issuedVisible = false;
+        this.issuedReasonVisible = false;
+      }).catch(e => {
+        this.$message.error('鎿嶄綔澶辫触')
+        this.loadingIssuedReason = false;
+      })
+    },
+    // 涓嶆壒鍑嗗師鍥犳彁浜�
+    handleApproveReason() {
+      if (!this.reason) {
+        return this.$message.error('璇疯緭鍏ュ師鍥�')
+      }
+      this.loadingApproveReason = true
+      this.$axios.post(this.$api.insReport.ratifyReport, {
+        id: this.currentInfo.id,
+        isRatify: 0,
+        examineTell: this.reason
+      }).then(res => {
+        this.loadingApproveReason = false
+        if (res.code === 201) {
+          return
+        }
+        this.$message.success('鎿嶄綔鎴愬姛')
+        this.refreshTable('page')
+        this.currentInfo = null;
+        this.reason = '';
+        this.approveVisible = false;
+        this.approveReasonVisible = false;
+      }).catch(e => {
+        this.$message.error('鎿嶄綔澶辫触')
+        this.loadingIssuedReason = false;
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+.title {
+  height: 60px;
+  line-height: 60px;
+}
+
+.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);
+}
+
+.table {
+  margin-top: 10px;
+  background-color: #fff;
+  width: calc(100% - 40px);
+  height: calc(100% - 60px - 80px - 10px - 40px);
+  padding: 20px;
+}
+
+.el-form-item {
+  margin-bottom: 16px;
+}
+
+.full-screen {
+  position: absolute;
+  right: 52px;
+  top: 22px;
+}
+
+.btns {
+  position: absolute;
+  right: 40px;
+  top: 50%;
+  transform: translate(0, -50%);
+  display: flex;
+  align-items: center;
+}
+
+.fullscreen {
+  height: 82vh
+}
+</style>
diff --git a/src/views/business/unpass/components/PurchaseVerification.vue b/src/views/business/unpass/components/PurchaseVerification.vue
index 2e66c74..1071830 100644
--- a/src/views/business/unpass/components/PurchaseVerification.vue
+++ b/src/views/business/unpass/components/PurchaseVerification.vue
@@ -1,10 +1,10 @@
 <template>
   <div>
-    <el-dialog title="杩涜揣楠岃瘉鍘熷璁板綍" :visible.sync="isShow" width="1000px" :show-close="false" :close-on-click-modal="false"
-      style="max-height: 96vh; margin-top: 2vh" :modal-append-to-body="false" :close-on-press-escape="false">
+    <el-dialog title="杩涜揣楠岃瘉鍘熷璁板綍" :visible.sync="isShow" width="70%" :show-close="false" :close-on-click-modal="false"
+               :modal-append-to-body="false" :close-on-press-escape="false">
       <div class="search">
         <el-form :inline="true" :model="purchaseForm" label-position="right" :rules="purchaseFormRules"
-          ref="purchaseForm" class="form-inline" label-width="130px">
+          ref="purchaseForm" class="form-inline" label-width="120px">
           <el-row>
             <el-col :span="8">
               <el-form-item label="妫�楠岀紪鍙�:">
@@ -55,50 +55,49 @@
           </h4>
           <div class="title">涓�銆佷緵鏂逛骇鍝佹娴嬫姤鍛婄殑鍩烘湰淇℃伅纭</div>
           <el-form-item label="鏉愭枡鍚嶇О:" prop="basicName">
-            <el-radio-group v-model="purchaseForm.basicName" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicName" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="瑙勬牸鍨嬪彿:" prop="basicModel">
-            <el-radio-group v-model="purchaseForm.basicModel" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicModel" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="鏉愭枡鎵瑰彿:" prop="basicBatchNo">
-            <el-radio-group v-model="purchaseForm.basicBatchNo" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicBatchNo" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="鎵ц鏍囧噯:" prop="basicStandard">
-            <el-radio-group v-model="purchaseForm.basicStandard" :disabled="operationType === 'view'"
-              v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicStandard" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="鐢熶骇鏃ユ湡:" prop="basicDate">
-            <el-radio-group v-model="purchaseForm.basicDate" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicDate" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="渚涜揣鏁伴噺:" prop="basicNumber">
-            <el-radio-group v-model="purchaseForm.basicNumber" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicNumber" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="鏉愭枡棰滆壊:" prop="basicColor">
-            <el-radio-group v-model="purchaseForm.basicColor" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicColor" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
@@ -130,7 +129,7 @@
                 <el-table-column prop="inspectionItem" label="楠岃瘉椤圭洰" width="300"></el-table-column>
                 <el-table-column prop="result" label="楠岃瘉缁撴灉">
                   <template slot-scope="scope">
-                    <el-radio-group v-model="scope.row.result" v-removeAriaHidden :disabled="operationType === 'view'">
+                    <el-radio-group v-model="scope.row.result" :disabled="operationType === 'view'">
                       <el-radio label="1">绗﹀悎</el-radio>
                       <el-radio label="2">涓嶇鍚�</el-radio>
                       <el-radio label="3">涓嶉�傜敤</el-radio>
@@ -149,9 +148,7 @@
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="$emit('resetPurchaseDialog')">鍙� 娑�</el-button>
-        <el-button type="primary" @click="handlePurchase" :loading="handlePurchaseLoading"
-          v-if="operationType === 'add'">纭�
-          瀹�</el-button>
+        <el-button type="primary" @click="handlePurchase" :loading="handlePurchaseLoading" v-if="operationType === 'add'">纭畾</el-button>
       </span>
     </el-dialog>
     <el-dialog title="寰呴獙璇侀」鐩�" :visible.sync="factoryVerifyItemDia" width="1000px"
@@ -247,6 +244,7 @@
   // 鏂规硶闆嗗悎
   methods: {
     async getInsOrder(operationType, item) {
+      console.log('operationType----', operationType)
       this.operationType = operationType
       this.info = item
       // 鏌ヨ宸叉彁浜ょ殑鏁版嵁
@@ -346,7 +344,6 @@
 .headLine>>>.el-form-item__content {
   width: 68%;
 }
-
 >>>.el-form-item__content {
   display: inline-block;
 }
@@ -370,7 +367,7 @@
 }
 
 >>>.el-dialog__body {
-  max-height: 700px;
+  max-height: 600px;
   overflow-y: auto;
 }
 </style>
diff --git a/src/views/standard/standardLibrary/index.vue b/src/views/standard/standardLibrary/index.vue
index 21eeeb8..4ead05c 100644
--- a/src/views/standard/standardLibrary/index.vue
+++ b/src/views/standard/standardLibrary/index.vue
@@ -488,14 +488,10 @@
   obtainItemParameterList,
   selectTestObjectByName,
   selectStandardMethods,
-  addStandardMethodList,
   addStandardTree,
   updateStandardTree,
   selectsStandardMethodByFLSSM,
   upStandardProductList,
-  delStandardMethodByFLSSM,
-  delStandardProductByIds,
-  addStandardProduct,
   selectStandardProductListByMethodId,
   updateSection,
   upStandardProducts,
@@ -592,6 +588,7 @@
     this.selectTestObjectByName();
     this.selectStandardMethods();
     this.selectEnumByCategoryForSonLaboratory();
+    this.selectEnumByCategoryForsampleType();
     this.getStandardTemplate();
     this.selectStandardMethodsSec();
     this.token = {
@@ -845,22 +842,6 @@
         this.standardEnum = data;
       });
     },
-    addStandardMethodList() {
-      if (this.standardId == null || this.standardId == "") {
-        this.$message.error("鏍囧噯鏂规硶鏈�夋嫨");
-        return;
-      }
-      this.addLoad2 = true;
-      addStandardMethodList({
-        standardId: this.standardId,
-        tree: this.selectTree,
-      }).then((res) => {
-        this.addLoad2 = false;
-        this.addStandardDia = false;
-        this.$message.success("娣诲姞鎴愬姛");
-        this.selectsStandardMethodByFLSSM();
-      });
-    },
     // 鎻愪氦鍒嗙被娣诲姞
     addStandardTree() {
       if (this.addOb.sampleType == null || this.addOb.sampleType == "") {
@@ -1040,81 +1021,13 @@
         this.$message.success("宸蹭繚瀛�");
       });
     },
-    delStandardMethodByFLSSM(id) {
-      this.$confirm("鏄惁鍒犻櫎褰撳墠鏁版嵁?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning",
-      })
-        .then(() => {
-          this.tableLoad = true;
-          delStandardMethodByFLSSM({ id: id }).then((res) => {
-            if (res.code == 201) {
-              return;
-            }
-            this.$message.success("宸插垹闄�");
-            this.selectsStandardMethodByFLSSM();
-          });
-        })
-        .catch(() => { });
-    },
     handleSelectionChange(val) {
       this.selects = [];
       val.forEach((a) => {
         this.selects.push(a.id);
       });
     },
-    delStandardProductByIds() {
-      if (this.selects.length == 0) {
-        this.$message.error("鏈�変腑鏁版嵁");
-        return;
-      }
-      this.$confirm(
-        "鏄惁鍒犻櫎褰撳墠閫変腑 " + this.selects.length + " 鏉℃暟鎹�?",
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning",
-        }
-      )
-        .then(() => {
-          this.tableLoad = true;
-          delStandardProductByIds({
-            ids: JSON.stringify(this.selects),
-          }).then((res) => {
-            if (res.code == 201) {
-              return;
-            }
-            this.$message.success("宸插垹闄�");
-            this.selectsStandardMethodByFLSSM();
-          });
-        })
-        .catch(() => { });
-    },
-    addStandardProductDo() {
-      let selects = this.$refs.ValueTable.multipleSelection;
-      if (selects.length == 0) {
-        this.$message.error("鏈�夋嫨鏁版嵁");
-        return;
-      }
-      let select = [];
-      selects.forEach((a) => {
-        select.push(a.id);
-      });
-      this.tableLoad = true;
-      addStandardProduct({
-        ids: JSON.stringify(select),
-        tree: this.selectTree,
-      }).then((res) => {
-        if (res.code == 201) {
-          return;
-        }
-        this.$message.success("娣诲姞鎴愬姛");
-        this.selectsStandardMethodByFLSSM();
-      });
-      this.addProductDia = false;
-    },
+
     refreshList() {
       this.batchCopyDia = false;
       const index = this.standardList.findIndex(

--
Gitblit v1.9.3