From 83be7ca0c138b64b3447cc207b63c7933690f6ec Mon Sep 17 00:00:00 2001
From: 曹睿 <360930172@qq.com>
Date: 星期二, 25 二月 2025 09:08:58 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev

---
 src/views/business/reportPreparation/index.vue | 1016 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,016 insertions(+), 0 deletions(-)

diff --git a/src/views/business/reportPreparation/index.vue b/src/views/business/reportPreparation/index.vue
new file mode 100644
index 0000000..60a78b9
--- /dev/null
+++ b/src/views/business/reportPreparation/index.vue
@@ -0,0 +1,1016 @@
+<template>
+  <div class="app-container">
+    <div>
+      <el-form :model="entity" ref="entity" size="small" :inline="true">
+        <el-form-item label="鎶ュ憡缂栧彿" prop="code">
+          <el-input v-model="entity.code" clearable placeholder="璇疯緭鍏�"
+                    size="small" @keyup.enter.native="refreshTable()"></el-input>
+        </el-form-item>
+        <el-form-item label="鐘舵��" prop="queryStatus">
+          <el-select v-model="entity.queryStatus" clearable size="small" @change="refreshTable()">
+            <el-option v-for="(a, i) in queryStatusList" :key="i" :label="a.label" :value="a.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="涓嬪崟绫诲埆" prop="typeSource">
+          <el-select v-model="entity.typeSource" clearable size="small" @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 label="妫�楠岀被鍒�" prop="orderType">
+          <el-select v-model="entity.orderType" clearable size="small" @change="refreshTable()">
+            <el-option v-for="(a, i) in orderTypeList" :key="i" :label="a.label" :value="a.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="refresh()">閲嶇疆</el-button>
+          <el-button size="mini" type="primary" @click="refreshTable()">鏌ヨ</el-button>
+          <el-button :loading="outLoading" size="mini" type="primary" @click="handleDowns">鎵归噺涓嬭浇</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div>
+      <lims-table :tableData="valueTableData" :column="column" :page="page" :tableLoading="tableLoading"
+                  :isSelection="true" :handleSelectionChange="handleChange"
+                  :height="'calc(100vh - 290px)'" @pagination="pagination" key="valueTableData">
+        <div slot="action" slot-scope="scope">
+          <el-button size="small" type="text" @click="viewIssued(scope.row)">鏌ョ湅鎶ュ憡</el-button>
+          <el-upload ref='upload1'
+                     style="display: inline;margin: 0 6px"
+                     :action="fileAction1 +'?id='+ scope.row.id"
+                     :auto-upload="true"
+                     :before-upload="fileBeforeUpload1"
+                     :headers="uploadHeader" :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>
+          </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" trigger="hover" style="margin-left: 6px">
+            <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>
+        </div>
+      </lims-table>
+    </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>
+    <!--浜т笟閾句俊鎭煡鐪�-->
+<!--    <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>
+    <!--闄勪欢鏌ョ湅-->
+    <el-dialog :visible.sync="filesDialogVisible" title="闄勪欢鏌ョ湅" width="80%" @closed="closeFilesLook">
+      <div style="margin-bottom: 10px">
+        <el-upload ref='upload'
+                   :action="fileAction"
+                   :auto-upload="true"
+                   :before-upload="fileBeforeUpload" :data="{orderId: filesLookInfo.insOrderId}"
+                   :headers="uploadHeader" :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>
+      <lims-table :tableData="tableDataFile" :column="columnFile" @pagination="paginationFile" height="500px"
+                  key="tableDataFile" :page="pageFile" :tableLoading="tableLoadingFile"></lims-table>
+    </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";
+import {
+  downAll,
+  examineReport,
+  pageInsReport,
+  ratifyReport,
+  sendBackTask,
+  upReportUrl,
+  writeReport
+} from "@/api/business/insReport";
+import {mapGetters} from "vuex";
+import {selectUserCondition} from "@/api/business/inspectionTask";
+import limsTable from "@/components/Table/lims-table.vue";
+import {delfile, downFile, getFileList} from "@/api/business/rawMaterialOrder";
+export default {
+  components: {limsTable, onlyoffice},
+  data() {
+    return {
+      entity: {
+        queryStatus: null,
+        code: null,
+        typeSource: null,
+      },
+      page: {
+        current: 1,
+        size: 20,
+        total: 0
+      },
+      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: {},
+      tableDataFile: [],
+      tableLoadingFile: false,
+      columnFile: [
+        {
+          dataType: 'tag',
+          label: '绫诲瀷',
+          prop: 'type',
+          formatData: (params) => {
+            if (params == 1) {
+              return '鍥剧墖'
+            } else if (params == 2) {
+              return '鏂囦欢'
+            } else {
+              return ''
+            }
+          },
+          formatType: (params) => {
+            if (params == 1) {
+              return 'success'
+            } else if (params == 2) {
+              return 'warning'
+            } else {
+              return ''
+            }
+          }
+        },
+        { label: '闄勪欢鍚嶇О', prop: 'fileName' },
+        { label: '涓婁紶浜�', prop: 'name' },
+        { label: '涓婁紶鏃堕棿', prop: 'createTime' },
+        {
+          dataType: 'action',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          width: '170px',
+          operation: [
+            {
+              name: '涓嬭浇',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row);
+              }
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              clickFun: (row) => {
+                this.delete(row);
+              }
+            },
+          ]
+        }
+      ],
+      pageFile: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+      isCopper: null,
+      tableLoading: false,
+      valueTableData: [],
+      column: [
+        {
+          label: "鎶ュ憡缂栧彿",
+          prop: "code",
+          width: "160px",
+          dataType: "link",
+          linkMethod: "selectAllByOne",
+        },
+        {
+          label: "涓嬪崟绫诲埆",
+          prop: "typeSource",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "鎴愬搧涓嬪崟";
+            } else {
+              return "鍘熸潗鏂欎笅鍗�";
+            }
+          },
+        },
+        {
+          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: "createTime" },
+        { label: "鎻愪氦浜�", prop: "writeUserName" },
+        { label: "鎻愪氦鏃堕棿", prop: "writeTime" },
+        {
+          label: "鎻愪氦鐘舵��",
+          prop: "state",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "寰呮彁浜�";
+            } else {
+              return "宸叉彁浜�";
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "danger";
+            } else {
+              return "success";
+            }
+          },
+        },
+        { label: "瀹℃牳浜�", prop: "examineUser" },
+        { label: "瀹℃牳鏃堕棿", prop: "examineTime" },
+        {
+          label: "瀹℃牳鐘舵��",
+          prop: "isExamine",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "涓嶉�氳繃";
+            } else {
+              return "閫氳繃";
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "danger";
+            } else {
+              return "success";
+            }
+          },
+        },
+        { label: "瀹℃牳澶囨敞", prop: "examineTell" },
+        { label: "鎵瑰噯浜�", prop: "ratifyUser" },
+        { label: "鎵瑰噯鏃堕棿", prop: "ratifyTime" },
+        {
+          label: "鎵瑰噯鐘舵��",
+          prop: "isRatify",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "涓嶆壒鍑�";
+            } else {
+              return "鎵瑰噯";
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "danger";
+            } else {
+              return "success";
+            }
+          },
+        },
+        { label: "鎵瑰噯澶囨敞", prop: "ratifyTell" },
+        {
+          fixed: "right",
+          dataType: "slot",
+          slot: "action",
+          width: '360px',
+          label: "鎿嶄綔"
+        }
+      ],
+      userName: '',
+    }
+  },
+  computed: {
+    ...mapGetters(["nickName", "userId"]),
+    action() {
+      return this.javaApi + '/insReport/upAll'
+    },
+    fileAction() {
+      return this.javaApi + '/unqualifiedHandler/uploadFileByUnqualified'
+    },
+    fileAction1() {
+      return this.javaApi + '/insReport/inReport'
+    }
+  },
+  mounted() {
+    this.refreshTable()
+  },
+  methods: {
+    refreshTable() {
+      this.tableLoading = true
+      pageInsReport({
+        ...this.page,...this.entity
+      }).then(res => {
+        this.tableLoading = false
+        this.page.total = res.data.body.total
+        this.valueTableData = res.data.body.records
+      })
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.refreshTable();
+    },
+    refresh() {
+      this.resetForm('entity')
+      this.refreshTable();
+    },
+    handleChange(arr){
+      this.mutiList = arr
+    },
+    // 鏌ョ湅妫�楠屾暟鎹�
+    viewInspectInfo (row) {
+      //褰撳墠妫�楠屼换鍔$殑妫�楠屼汉鍒楄〃
+      let inspectorList = []
+      if(row.userName){
+        inspectorList = row.userName.split(',')
+      }
+      inspectorList.push(this.nickName)
+      this.$router.push({
+        path: "/inspectionTask/inspection",
+        query: {
+          sonLaboratory: row.sonLaboratory,
+          state: 3,
+          typeSource: row.typeSource,
+          orderId: row.insOrderId,
+          inspectorList: inspectorList,
+        },
+      })
+    },
+    // 鎵撳紑鏌ョ湅闄勪欢寮规
+    handleFileLook (row) {
+      this.filesLookInfo = row
+      this.filesDialogVisible = true
+      this.getFileList()
+    },
+    // 鏌ヨ闄勪欢鏌ョ湅鍒楄〃鍥炶皟
+    getFileList() {
+      this.tableLoadingFile = true
+      getFileList({insOrderId: this.filesLookInfo.insOrderId}).then(res => {
+        this.tableLoadingFile = false
+        if (res.code === 200) {
+          this.tableDataFile = res.data.records
+          this.pageFile.total = res.data.total
+        }
+      }).catch(err => {
+        this.tableLoadingFile = false
+      })
+    },
+    paginationFile(page) {
+      this.pageFile.size = page.limit
+      this.getFileList()
+    },
+    closeFilesLook () {
+      this.filesDialogVisible = false
+    },
+    handleSuccessUp(response, ) {
+      this.upLoading = false;
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+        this.getFileList()
+      }
+    },
+    handleSuccessUp1(response, ) {
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+      }
+    },
+    // 涓嬭浇闄勪欢鐨勬枃浠�
+    handleDown(row){
+      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 => {
+
+      })
+    },
+    // 鍒犻櫎闄勪欢鏂囦欢
+    delete(row) {
+      this.$confirm('鏄惁鍒犻櫎褰撳墠鏁版嵁?', "璀﹀憡", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      }).then(() => {
+        delfile({ id: row.id }).then(res => {
+          if (res.code === 500) {
+            return
+          }
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.getList()
+        }).catch(e => {
+          this.$message.error('鍒犻櫎澶辫触')
+        })
+      }).catch(() => { })
+    },
+    // 鏌ョ湅浜т笟閾句俊鎭�
+    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
+      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()
+    },
+    confirmClaim() {
+      // console.log(this.$refs.Word.getValue())
+    },
+    selectAllByOne(row) {
+      this.isCopper = row.isCopper
+      this.customsInspection = row
+      this.activeFace = 2;
+      this.examine = 1;
+      this.isReport = 1
+      this.currentId = parseInt(row.insOrderId)
+      switch (row.isCopper) {
+        case 0:
+          // 鍘熸潗鏂�
+          this.$router.push({
+            path: "/materialOrder/customsInspection", query: {
+              customsInspection: row,
+              active: this.activeFace,
+              currentId: row.insOrderId,
+              isReport: this.isReport
+            }
+          });
+          break;
+        case null:
+          // 鎴愬搧
+          this.$router.push({
+            path: "/productOrder/add", query: {
+              examine: this.examine,
+              active: this.activeFace,
+              currentId: row.insOrderId
+            }
+          });
+          break;
+        case 1:
+          // 閾滄潗
+          this.$router.push({
+            path: "/materialOrder/copperOrder", query: {
+              active: this.activeFace,
+              currentId: row.insOrderId
+            }
+          });
+          break;
+      }
+    },
+    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) {
+      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 = 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;
+    },
+    // 鏌ョ湅鎶ュ憡
+    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 = 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.viewIssuedVisible = true;
+    },
+    // 閫�鍥炲埌浠诲姟
+    sendBackTask(row) {
+      this.$confirm('纭閫�鍥炲埌妫�楠屼换鍔�?閫�鍥炲悗闇�閲嶆柊鎻愪氦澶嶆牳', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.upLoad = true
+        sendBackTask({id: row.id}).then(res => {
+          this.upLoad = false
+          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;
+      examineReport({
+        id: this.currentInfo.id,
+        userId: this.approver,
+        isExamine: 1
+      }).then(res => {
+        this.loadingIssued = false;
+        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() {
+      selectUserCondition({ type: 0 }).then((res) => {
+        let data = [];
+        res.data.forEach((a) => {
+          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 = 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.approveVisible = true;
+    },
+    // 鎵瑰噯閫氳繃
+    subApprove() {
+      this.loadingApprove = true;
+      ratifyReport({
+        id: this.currentInfo.id,
+        isRatify: 1
+      }).then(res => {
+        this.loadingApprove = false;
+        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
+      writeReport({
+        id: this.currentInfo.id,
+        userId: this.verifyUser,
+      }).then(res => {
+        this.loadingVerify = false
+        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;
+      examineReport({
+        id: this.currentInfo.id,
+        isExamine: 0,
+        examineTell: this.reason
+      }).then(res => {
+        this.loadingIssuedReason = false;
+        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
+      ratifyReport({
+        id: this.currentInfo.id,
+        isRatify: 0,
+        examineTell: this.reason
+      }).then(res => {
+        this.loadingApproveReason = false
+        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>

--
Gitblit v1.9.3