From 9dd11bd6a971e13aa74ad7a8994f9710edb42590 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 25 二月 2025 15:05:51 +0800
Subject: [PATCH] 修改导出

---
 src/views/CNAS/systemManagement/customerSatisfaction/index.vue                              |    7 
 src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue |   28 -
 src/views/CNAS/systemManagement/managementReview/components/reviewReport.vue                |   27 -
 src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue        |   33 -
 src/views/structural/capabilityAndLaboratory/laboratory/index.vue                           |  257 +++------------
 src/api/cnas/process/reportResults.js                                                       |   29 +
 src/views/CNAS/process/reportResults/index.vue                                              |  431 ++++++++++++++++++++++++++
 src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue                              |   89 ++---
 src/views/CNAS/systemManagement/managementReview/components/meetingRecords.vue              |   27 -
 9 files changed, 549 insertions(+), 379 deletions(-)

diff --git a/src/api/cnas/process/reportResults.js b/src/api/cnas/process/reportResults.js
new file mode 100644
index 0000000..4f140af
--- /dev/null
+++ b/src/api/cnas/process/reportResults.js
@@ -0,0 +1,29 @@
+// 鎶ュ憡缁撴灉鐩稿叧鎺ュ彛
+import request from "@/utils/request";
+
+//8鎶ュ憡缁撴灉-瀵煎嚭
+export function exportProcessReport(query) {
+  return request({
+    url: "/processReport/exportProcessReport",
+    method: "get",
+    params: query,
+  });
+}
+
+// 8鎶ュ憡缁撴灉-鏂板
+export function addProcessReport(data) {
+  return request({
+    url: "/processReport/addProcessReport",
+    method: "post",
+    data: data,
+  });
+}
+
+// 8鎶ュ憡缁撴灉-淇敼
+export function doProcessReport(data) {
+  return request({
+    url: "/processReport/doProcessReport",
+    method: "post",
+    data: data,
+  });
+}
diff --git a/src/views/CNAS/process/reportResults/index.vue b/src/views/CNAS/process/reportResults/index.vue
new file mode 100644
index 0000000..dd4403e
--- /dev/null
+++ b/src/views/CNAS/process/reportResults/index.vue
@@ -0,0 +1,431 @@
+<template>
+  <div class="report-results">
+    <el-row class="title">
+      <el-col :span="12" style="padding-left: 20px;text-align: left;">鎶ュ憡缁撴灉</el-col>
+      <el-col :span="12" style="text-align: right;">
+        <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower">瀵煎嚭</el-button>
+        <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
+      </el-col>
+    </el-row>
+    <div class="search">
+      <div class="search_thing">
+        <div class="search_label">妫�楠屾姤鍛婄紪鍙凤細</div>
+        <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.insReportCode"
+            @keyup.enter.native="refreshTable()"></el-input></div>
+      </div>
+      <div class="search_thing" style="padding-left: 30px;">
+        <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+        <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+      </div>
+    </div>
+    <div class="table">
+      <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 290px)'"
+        :page="page" @pagination="pagination"></lims-table>
+      <!-- <ValueTable ref="ValueTable" :url="$api.processReport.pageProcessReport"
+        :delUrl="$api.processReport.delProcessReport" :componentData="componentData" :key="upIndex" /> -->
+    </div>
+    <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px" top="6vh">
+      <el-row>
+        <el-col :span="24" style="margin-bottom: 16px;">
+          <div class="search_thing">
+            <div class="search_label">妫�楠屾姤鍛婄紪鍙凤細</div>
+            <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+                v-model="addInfo.insReportCode"></el-input></div>
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-bottom: 16px;">
+          <div class="search_thing">
+            <div class="search_label">椤垫暟锛�</div>
+            <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+                v-model="addInfo.pages"></el-input></div>
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-bottom: 16px;">
+          <div class="search_thing">
+            <div class="search_label">鍙戦�佷唤鏁帮細</div>
+            <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+                v-model="addInfo.number"></el-input></div>
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-bottom: 16px;">
+          <div class="search_thing">
+            <div class="search_label">鍙戝線浣曞锛�</div>
+            <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+                v-model="addInfo.send"></el-input></div>
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-bottom: 16px;">
+          <div class="search_thing">
+            <div class="search_label">鍙戦�佹柟寮忥細</div>
+            <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+                v-model="addInfo.method"></el-input></div>
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-bottom: 16px;">
+          <div class="search_thing">
+            <div class="search_label">鍙戦�佹棩鏈燂細</div>
+            <div class="search_input">
+              <el-date-picker v-model="addInfo.sendTime" type="date" size="small" placeholder="閫夋嫨鏃ユ湡" format="yyyy-MM-dd"
+                value-format="yyyy-MM-dd" style="width: 100%;">
+              </el-date-picker>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-bottom: 16px;">
+          <div class="search_thing">
+            <div class="search_label">鍙戦�佷汉锛�</div>
+            <div class="search_input">
+              <el-select v-model="addInfo.sendUser" placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+                <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-bottom: 16px;">
+          <div class="search_thing">
+            <div class="search_label">绛炬敹浜猴細</div>
+            <div class="search_input">
+              <el-select v-model="addInfo.signatory" placeholder="璇烽�夋嫨" size="small" style="width: 100%;" multiple>
+                <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="24" style="margin-bottom: 16px;">
+          <div class="search_thing">
+            <div class="search_label">澶囨敞锛�</div>
+            <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.remark"
+                type="textarea" :rows="2"></el-input></div>
+          </div>
+        </el-col>
+      </el-row>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="addDialogVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="handleAdd" :loading="addLoading">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+  exportProcessReport,
+  doProcessReport,
+  addProcessReport
+} from '@/api/cnas/process/reportResults.js'
+import {
+  selectUserCondition,
+} from "@/api/business/inspectionTask.js";
+export default {
+  components: {
+    limsTable
+  },
+  data() {
+    return {
+      outLoading: false,
+      addPower: true,
+      outPower: true,
+      componentData: {
+        entity: {
+          insReportCode: null,
+          // sendUserName: null,
+          orderBy: {
+            field: 'createTime',
+            order: 'desc'
+          }
+        },
+        isIndex: true,
+        showSelect: true,
+        select: true,
+        selectMethod: 'handleChangeTask',
+        do: [
+          {
+            id: 'handleWork',
+            font: '淇敼',
+            type: 'text',
+            method: 'handleWork'
+          },
+          {
+            id: 'delete',
+            font: '鍒犻櫎',
+            type: 'text',
+            method: 'doDiy'
+          }
+        ],
+        tagField: {},
+        selectField: {
+          sendUser: {
+            select: []
+          },
+          signatory: {
+            select: []
+          },
+        },
+        // addUpload:['signatoryUrl'],
+        requiredAdd: [],
+        requiredUp: [],
+        needSort: [],
+        inputType: ''
+      },
+      entityCopy: {},
+      upIndex: 0,
+      personList: [],
+      title: '鏂板',
+      addDialogVisible: false,
+      addInfo: {
+        signatory: []
+      },
+      addLoading: false,
+      mutilSelect: [],
+      queryParams: {},
+      tableData: [],
+      column: [
+        { label: "缂栧彿", prop: "number" },
+        { label: "杈呭姪椤圭洰鍚嶇О", prop: "auxiliaryProject", width: "120px" },
+        {
+          label: "瀹為獙瀹�",
+          prop: "laboratory",
+          dataType: "tag",
+          formatData: (params) => {
+            return this.laboratoryList.find((m) => m.value == params).label;
+          },
+        },
+        { label: "鍗曚綅", prop: "unit" },
+        { label: "鏍稿噯宸ユ椂", prop: "approvedWorkingHour" },
+        { label: "閮ㄩ棬", prop: "department" },
+        { label: "澶囨敞", prop: "remarks" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.openAdd("缂栬緫", row);
+              },
+              showHide: (row) => {
+                return this.checkPermi([
+                  "performance:manHour:workTimeConfig:edit",
+                ]);
+              },
+            },
+            {
+              name: "鍒犻櫎",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDelete(row);
+              },
+              showHide: (row) => {
+                return this.checkPermi([
+                  "performance:manHour:workTimeConfig:del",
+                ]);
+              },
+            },
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
+    }
+  },
+  mounted() {
+    // this.entityCopy = this.HaveJson(this.componentData.entity);
+    // this.getPower()
+    this.getAuthorizedPerson()
+  },
+  methods: {
+    getPower() {
+      let power = JSON.parse(sessionStorage.getItem('power'))
+      let up = false
+      let del = false
+      let add = false
+      let out = false
+      for (var i = 0; i < power.length; i++) {
+        if (power[i].menuMethod == 'doProcessReport') {
+          up = true
+        }
+        if (power[i].menuMethod == 'addProcessReport') {
+          add = true
+        }
+        if (power[i].menuMethod == 'delProcessReport') {
+          del = true
+        }
+        if (power[i].menuMethod == 'exportProcessReport') {
+          out = true
+        }
+      }
+      if (!up) {
+        this.componentData.do.splice(1, 1)
+      }
+      if (!del) {
+        this.componentData.do.splice(0, 1)
+      }
+      this.outPower = out
+      this.addPower = add
+    },
+    handleDown() {
+      if (this.mutilSelect.length == 0) {
+        this.$message.warning('璇烽�夋嫨瑕佸鍑虹殑鏁版嵁')
+        return
+      }
+      // html瀵煎嚭涓簑ord锛屾牱瀛愬お涓戜簡锛屼唬鐮佸厛鏀剧潃鍚�
+      // exportHtmlToWord(this.$refs.content,'妫�楠屾姤鍛婂彂鏀剧櫥璁拌〃')
+      this.outLoading = true
+      exportProcessReport({ ids: this.mutilSelect.map(m => m.id) }).then(res => {
+        this.outLoading = false
+        if (res.code === 201) return
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const url = this.javaApi + '/word/' + res.message;
+        this.$download.saveAs(url, "鎶ュ憡缁撴灉");
+      })
+    },
+    openAdd() {
+      this.title = '鏂板'
+      this.addInfo = {
+        signatory: []
+      }
+      this.addDialogVisible = true;
+    },
+    refreshTable() {
+      this.$refs['ValueTable'].selectList()
+    },
+    refresh() {
+      this.componentData.entity = this.HaveJson(this.entityCopy)
+      this.upIndex++
+      this.refreshTable()
+    },
+    getAuthorizedPerson() {
+      selectUserCondition().then(res => {
+        let data = []
+        res.data.forEach(a => {
+          data.push({
+            label: a.name,
+            value: a.id
+          })
+        })
+        this.personList = data
+      })
+    },
+    handleAdd() {
+      this.addLoading = true
+      delete this.addInfo.createTime
+      delete this.addInfo.createUser
+      delete this.addInfo.updateTime
+      delete this.addInfo.signatoryUrl
+      delete this.addInfo.updateUserer
+      delete this.addInfo.sendUserName
+      let addInfo = this.HaveJson(this.addInfo)
+      addInfo.signatory = addInfo.signatory.join(',')
+      if (this.title == '鏂板') {
+        addProcessReport(addInfo).then(res => {
+          this.addLoading = false
+          if (res.code == 201) {
+            return
+          }
+          this.addDialogVisible = false
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+          this.refreshTable()
+        }).catch(err => { })
+      } else {
+        doProcessReport(addInfo).then(res => {
+          this.addLoading = false
+          if (res.code == 201) {
+            return
+          }
+          this.addDialogVisible = false
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+          this.refreshTable()
+        }).catch(err => { })
+      }
+    },
+    handleWork(row) {
+      this.title = '淇敼'
+      this.addInfo = row
+      console.log(this.addInfo)
+      this.addInfo.signatory = this.addInfo.signatory ? this.addInfo.signatory.split(',').map(m => Number(m)) : []
+      this.addDialogVisible = true;
+    },
+    handleChangeTask(list) {
+      this.mutilSelect = list
+    }
+  }
+}
+</script>
+
+<style scoped>
+.title {
+  height: 60px;
+  line-height: 60px;
+}
+
+.search {
+  background-color: #fff;
+  height: 80px;
+  display: flex;
+  align-items: center;
+}
+
+.search_thing {
+  width: 350px;
+  display: flex;
+  align-items: center;
+}
+
+.search_label {
+  width: 110px;
+  font-size: 14px;
+  text-align: right;
+}
+
+.search_input {
+  width: calc(100% - 110px);
+}
+
+.table {
+  margin-top: 10px;
+  background-color: #fff;
+  width: calc(100% - 40px);
+  height: calc(100% - 60px - 80px - 10px - 40px);
+  padding: 20px;
+}
+
+.tables {
+  table-layout: fixed;
+  width: 100%;
+  margin-top: 10px;
+}
+
+.tables td {
+  height: 40px;
+  width: 100px;
+  text-align: center;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+}
+
+.en {
+  font-size: 12px;
+  word-break: break-word;
+  /* 鑷姩鏂 */
+  overflow-wrap: break-word;
+  /* 闃叉婧㈠嚭 */
+  white-space: normal;
+  /* 榛樿鎹㈣ */
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue b/src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue
index b6bb91f..1a67d66 100644
--- a/src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue
+++ b/src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue
@@ -19,34 +19,34 @@
     </div>
     <div class="table">
       <lims-table :tableData="tableData" :column="columns" :height="'calc(100vh - 250px)'" @pagination="pagination"
-                  :page="page" :tableLoading="tableLoading"></lims-table>
+        :page="page" :tableLoading="tableLoading"></lims-table>
     </div>
     <AddRecord ref="addRecordRef" @submit="submit"></AddRecord>
   </div>
 
-<!--    <div class="tables">-->
-<!--      <ZTTable-->
-<!--        :column="columns"-->
-<!--        :table-data="tableData"-->
-<!--      >-->
-<!--        <template slot="action" slot-scope="{ row }">-->
-<!--          <el-button type="text" @click="edit(row)">缂栬緫</el-button>-->
-<!--        </template>-->
-<!--      </ZTTable>-->
-<!--      <div class="pagination">-->
-<!--        <div></div>-->
-<!--        <el-pagination-->
-<!--          :page-size="pagination.pageSize"-->
-<!--          :page-sizes="[10, 20, 30, 40]"-->
-<!--          :total="pagination.total"-->
-<!--          layout="total, sizes, prev, pager, next, jumper"-->
-<!--          @current-change="handleCurrent"-->
-<!--          @size-change="handleSize"-->
-<!--        >-->
-<!--        </el-pagination>-->
-<!--      </div>-->
-<!--    </div>-->
-<!--    <AddRecord ref="addRecordRef" @submit="submit"></AddRecord>-->
+  <!--    <div class="tables">-->
+  <!--      <ZTTable-->
+  <!--        :column="columns"-->
+  <!--        :table-data="tableData"-->
+  <!--      >-->
+  <!--        <template slot="action" slot-scope="{ row }">-->
+  <!--          <el-button type="text" @click="edit(row)">缂栬緫</el-button>-->
+  <!--        </template>-->
+  <!--      </ZTTable>-->
+  <!--      <div class="pagination">-->
+  <!--        <div></div>-->
+  <!--        <el-pagination-->
+  <!--          :page-size="pagination.pageSize"-->
+  <!--          :page-sizes="[10, 20, 30, 40]"-->
+  <!--          :total="pagination.total"-->
+  <!--          layout="total, sizes, prev, pager, next, jumper"-->
+  <!--          @current-change="handleCurrent"-->
+  <!--          @size-change="handleSize"-->
+  <!--        >-->
+  <!--        </el-pagination>-->
+  <!--      </div>-->
+  <!--    </div>-->
+  <!--    <AddRecord ref="addRecordRef" @submit="submit"></AddRecord>-->
 </template>
 
 <script>
@@ -138,8 +138,8 @@
   },
   methods: {
     async getTableData() {
-      const res = await  getPageAcceptance(this.form);
-      if(res.code === 200){
+      const res = await getPageAcceptance(this.form);
+      if (res.code === 200) {
         this.tableData = res.data.records;
         this.page.total = res.data.total;
       }
@@ -150,9 +150,9 @@
     },
     async submit(form) {
 
-      const {code} = await form.acceptance.id ? updateAcceptanc(this.form):addAcceptance((this.form));
-      if(code == 200) {
-        this.$message.success(`${form.acceptance.id ? '缂栬緫':'娣诲姞'}鎴愬姛`)
+      const { code } = await form.acceptance.id ? updateAcceptanc(this.form) : addAcceptance((this.form));
+      if (code == 200) {
+        this.$message.success(`${form.acceptance.id ? '缂栬緫' : '娣诲姞'}鎴愬姛`)
         this.getTableData()
       }
     },
@@ -169,7 +169,7 @@
         url: getAcceptanceDetails,
         params: { id }
       })
-      if(code == 200) {
+      if (code == 200) {
         return data;
       }
     },
@@ -183,33 +183,8 @@
         url: `${exportAcceptance}`,
         responseType: "blob"
       })
-      const blob = new Blob([res], {type: 'application/octet-stream'});
-      //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
-      let reader = new FileReader();
-      reader.readAsText(blob, 'utf-8');
-      reader.onload = () => {
-        try {
-          let result = JSON.parse(reader.result);
-          if (result.message) {
-            this.$message.error(result.message);
-          } else {
-            const url = URL.createObjectURL(blob);
-            const link = document.createElement('a');
-            link.href = url;
-            link.download = '鏍囧噯鐗╄川楠屾敹.xlsx';
-            link.click();
-            this.$message.success('瀵煎嚭鎴愬姛')
-          }
-        } catch (err) {
-          console.log(err);
-          const url = URL.createObjectURL(blob);
-          const link = document.createElement('a');
-          link.href = url;
-          link.download = '鏍囧噯鐗╄川楠屾敹.xlsx';
-          link.click();
-          this.$message.success('瀵煎嚭鎴愬姛')
-        }
-      }
+      const blob = new Blob([res], { type: 'application/octet-stream' });
+      this.$download.saveAs(blob, '鏍囧噯鐗╄川楠屾敹.xlsx');
     },
 
     // 鍒嗛〉鍒囨崲
diff --git a/src/views/CNAS/systemManagement/customerSatisfaction/index.vue b/src/views/CNAS/systemManagement/customerSatisfaction/index.vue
index 414a023..a85c943 100644
--- a/src/views/CNAS/systemManagement/customerSatisfaction/index.vue
+++ b/src/views/CNAS/systemManagement/customerSatisfaction/index.vue
@@ -310,13 +310,10 @@
       let url = '';
       if (row.type == 1) {
         url = this.javaApi + '/img/' + row.fileUrl
-        file.downloadIamge(url, row.fileName)
+        this.$download.saveAs(url, row.fileName);
       } else {
         url = this.javaApi + '/word/' + row.fileUrl
-        const link = document.createElement('a');
-        link.href = url;
-        link.download = row.fileName;
-        link.click();
+        this.$download.saveAs(url, row.fileName);
       }
     },
     // 鍒犻櫎瀹㈡埛鍒嗘瀽闄勪欢
diff --git a/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue b/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue
index 0548ea4..257bc6b 100644
--- a/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue
+++ b/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue
@@ -394,33 +394,7 @@
       exportManageDocumentIssueRecycle(this.queryParams).then(res => {
         this.outLoading = false
         const blob = new Blob([res], { type: 'application/octet-stream' });
-        // this.$download.saveAs(blob, '鍙戞斁鍥炴敹璁板綍.xlsx')
-        //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
-        let reader = new FileReader();
-        reader.readAsText(blob, 'utf-8');
-        reader.onload = () => {
-          try {
-            let result = JSON.parse(reader.result);
-            if (result.message) {
-              this.$message.error(result.message);
-            } else {
-              const url = URL.createObjectURL(blob);
-              const link = document.createElement('a');
-              link.href = url;
-              link.download = '鍙戞斁鍥炴敹璁板綍.xlsx';
-              link.click();
-              this.$message.success('瀵煎嚭鎴愬姛')
-            }
-          } catch (err) {
-            console.log(err);
-            const url = URL.createObjectURL(blob);
-            const link = document.createElement('a');
-            link.href = url;
-            link.download = '鍙戞斁鍥炴敹璁板綍.xlsx';
-            link.click();
-            this.$message.success('瀵煎嚭鎴愬姛')
-          }
-        }
+        this.$download.saveAs(blob, '鍙戞斁鍥炴敹璁板綍.xlsx');
       })
     },
     changeFileList(e) {
diff --git a/src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue b/src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue
index db15a30..20cd3c2 100644
--- a/src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue
+++ b/src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue
@@ -276,33 +276,7 @@
           return
         }
         const blob = new Blob([res], { type: 'application/octet-stream' });
-        //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
-        let reader = new FileReader();
-        reader.readAsText(blob, 'utf-8');
-        reader.onload = () => {
-          try {
-            let result = JSON.parse(reader.result);
-            if (result.message) {
-              this.$message.error(result.message);
-            } else {
-              const url = URL.createObjectURL(blob);
-              const link = document.createElement('a');
-              link.href = url;
-              link.download = '璇勫璁″垝.docx';
-              link.click();
-              this.$download.saveAs(blob, name)
-              this.$message.success('瀵煎嚭鎴愬姛')
-            }
-          } catch (err) {
-            console.log(err);
-            const url = URL.createObjectURL(blob);
-            const link = document.createElement('a');
-            link.href = url;
-            link.download = '璇勫璁″垝.docx';
-            link.click();
-            this.$message.success('瀵煎嚭鎴愬姛')
-          }
-        }
+        this.$download.saveAs(blob, '璇勫璁″垝.docx');
       })
     },
     lookFile(url, name) {
@@ -313,10 +287,7 @@
     handleDown0(url, name) {
       if (!url) return this.$message.warning('鏂囦欢鏈笂浼�')
       let url0 = this.javaApi + '/word/' + url
-      const link = document.createElement('a');
-      link.href = url0;
-      link.target = '_blank';
-      link.click();
+      this.$download.saveAs(url0, name);
     }
   }
 };
diff --git a/src/views/CNAS/systemManagement/managementReview/components/meetingRecords.vue b/src/views/CNAS/systemManagement/managementReview/components/meetingRecords.vue
index 819fa92..890ae93 100644
--- a/src/views/CNAS/systemManagement/managementReview/components/meetingRecords.vue
+++ b/src/views/CNAS/systemManagement/managementReview/components/meetingRecords.vue
@@ -172,32 +172,7 @@
           return
         }
         const blob = new Blob([res], { type: 'application/octet-stream' });
-        //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
-        let reader = new FileReader();
-        reader.readAsText(blob, 'utf-8');
-        reader.onload = () => {
-          try {
-            let result = JSON.parse(reader.result);
-            if (result.message) {
-              this.$message.error(result.message);
-            } else {
-              const url = URL.createObjectURL(blob);
-              const link = document.createElement('a');
-              link.href = url;
-              link.download = '浼氳璁板綍.docx';
-              link.click();
-              this.$message.success('瀵煎嚭鎴愬姛')
-            }
-          } catch (err) {
-            console.log(err);
-            const url = URL.createObjectURL(blob);
-            const link = document.createElement('a');
-            link.href = url;
-            link.download = '浼氳璁板綍.docx';
-            link.click();
-            this.$message.success('瀵煎嚭鎴愬姛')
-          }
-        }
+        this.$download.saveAs(blob, '浼氳璁板綍.docx');
       })
     },
   }
diff --git a/src/views/CNAS/systemManagement/managementReview/components/reviewReport.vue b/src/views/CNAS/systemManagement/managementReview/components/reviewReport.vue
index 72a90bc..1599da1 100644
--- a/src/views/CNAS/systemManagement/managementReview/components/reviewReport.vue
+++ b/src/views/CNAS/systemManagement/managementReview/components/reviewReport.vue
@@ -231,32 +231,7 @@
           return
         }
         const blob = new Blob([res], { type: 'application/octet-stream' });
-        //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
-        let reader = new FileReader();
-        reader.readAsText(blob, 'utf-8');
-        reader.onload = () => {
-          try {
-            let result = JSON.parse(reader.result);
-            if (result.message) {
-              this.$message.error(result.message);
-            } else {
-              const url = URL.createObjectURL(blob);
-              const link = document.createElement('a');
-              link.href = url;
-              link.download = '璇勫鎶ュ憡.docx';
-              link.click();
-              this.$message.success('瀵煎嚭鎴愬姛')
-            }
-          } catch (err) {
-            console.log(err);
-            const url = URL.createObjectURL(blob);
-            const link = document.createElement('a');
-            link.href = url;
-            link.download = '璇勫鎶ュ憡.docx';
-            link.click();
-            this.$message.success('瀵煎嚭鎴愬姛')
-          }
-        }
+        this.$download.saveAs(blob, '璇勫鎶ュ憡.docx');
       })
     },
     submit(type, row) {
diff --git a/src/views/structural/capabilityAndLaboratory/laboratory/index.vue b/src/views/structural/capabilityAndLaboratory/laboratory/index.vue
index 820d8d2..5e33081 100644
--- a/src/views/structural/capabilityAndLaboratory/laboratory/index.vue
+++ b/src/views/structural/capabilityAndLaboratory/laboratory/index.vue
@@ -3,103 +3,50 @@
     <div>
       <el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
         <el-form-item label="璧勮川鍚嶇О" prop="name">
-          <el-select
-            v-model="queryParams.name"
-            placeholder="閫夋嫨璧勮川鍚嶇О"
-            size="small"
-            @change="refreshTable()"
-          >
-            <el-option
-              v-for="dict in dict.type.cnas_method_qualification"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
-            >
+          <el-select v-model="queryParams.name" placeholder="閫夋嫨璧勮川鍚嶇О" size="small" @change="refreshTable()">
+            <el-option v-for="dict in dict.type.cnas_method_qualification" :key="dict.value" :label="dict.label"
+              :value="dict.value">
               {{ dict.label }}
             </el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button
-            type="primary"
-            icon="el-icon-search"
-            size="mini"
-            @click="refreshTable"
-            >鏌� 璇�</el-button
-          >
-          <el-button icon="el-icon-refresh" size="mini" @click="refresh"
-            >閲� 缃�</el-button
-          >
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">鏌� 璇�</el-button>
+          <el-button icon="el-icon-refresh" size="mini" @click="refresh">閲� 缃�</el-button>
         </el-form-item>
       </el-form>
     </div>
     <div>
       <el-row class="title">
         <el-col :span="12" style="text-align: left">
-          <el-radio-group
-            v-model="radio"
-            @input="selectorSwitch"
-            size="medium"
-            fill="#409EFF"
-          >
+          <el-radio-group v-model="radio" @input="selectorSwitch" size="medium" fill="#409EFF">
             <el-radio-button :label="0">璧勮川鏄庣粏</el-radio-button>
             <el-radio-button :label="1">璧勮川鎬昏</el-radio-button>
           </el-radio-group>
         </el-col>
         <el-col :span="12" style="text-align: right" v-if="radio === 0">
-          <el-button size="small" type="primary" @click="openAdd"
-            >璧勮川鏇存柊</el-button
-          >
-          <el-button size="small" icon="el-icon-delete" @click="handleDel"
-            >鍒犻櫎</el-button
-          >
+          <el-button size="small" type="primary" @click="openAdd">璧勮川鏇存柊</el-button>
+          <el-button size="small" icon="el-icon-delete" @click="handleDel">鍒犻櫎</el-button>
         </el-col>
       </el-row>
     </div>
     <div v-if="radio === 0">
-      <lims-table
-        :tableData="tableData"
-        :column="column"
-        :isSelection="true"
-        :handleSelectionChange="handleSelectionChange"
-        @pagination="pagination"
-        :height="'calc(100vh - 300px)'"
-        :page="page"
-        :tableLoading="tableLoading"
-      ></lims-table>
+      <lims-table :tableData="tableData" :column="column" :isSelection="true"
+        :handleSelectionChange="handleSelectionChange" @pagination="pagination" :height="'calc(100vh - 300px)'"
+        :page="page" :tableLoading="tableLoading"></lims-table>
     </div>
-    <div
-      class="table"
-      v-if="radio === 1"
-      v-loading="pageLoading"
-      @scroll="scrollFn"
-    >
+    <div class="table" v-if="radio === 1" v-loading="pageLoading" @scroll="scrollFn">
       <el-row :gutter="16">
-        <el-col
-          :span="8"
-          v-for="(m, i) in list"
-          :key="i"
-          :xs="24"
-          :sm="12"
-          :md="8"
-          :lg="8"
-          :xl="6"
-          style="margin-bottom: 16px"
-        >
+        <el-col :span="8" v-for="(m, i) in list" :key="i" :xs="24" :sm="12" :md="8" :lg="8" :xl="6"
+          style="margin-bottom: 16px">
           <div class="table-item">
-            <el-image
-              style="
+            <el-image style="
                 width: 102px;
                 height: 102px;
                 margin-right: 20px;
                 border-radius: 16px;
-              "
-              :src="javaApi + '/img/' + m.imageUrl"
-            >
-              <div
-                slot="error"
-                class="image-error"
-                style="
+              " :src="javaApi + '/img/' + m.imageUrl">
+              <div slot="error" class="image-error" style="
                   width: 100px;
                   height: 100px;
                   border-radius: 16px;
@@ -107,18 +54,11 @@
                   align-items: center;
                   justify-content: center;
                   border: 1px solid #eeeeee;
-                "
-              >
-                <i
-                  class="el-icon-picture-outline"
-                  style="font-size: 30px; color: #666666"
-                ></i>
+                ">
+                <i class="el-icon-picture-outline" style="font-size: 30px; color: #666666"></i>
               </div>
             </el-image>
-            <div
-              class="table-item-right"
-              style="flex: 1; font-size: 12px; color: #666666"
-            >
+            <div class="table-item-right" style="flex: 1; font-size: 12px; color: #666666">
               <p style="line-height: 26px">
                 璧勮川鍚嶇О锛�<span style="color: #3a7bfa">{{ m.name }}</span>
               </p>
@@ -126,168 +66,76 @@
               <p style="line-height: 26px">鍒版湡鏃堕棿锛歿{ m.expireTime }}</p>
               <p>
                 <span>鐘舵�侊細</span>
-                <el-tag
-                  :type="m.state === 0 ? 'danger' : 'success'"
-                  size="small"
-                  >{{ m.state === 0 ? "澶辨晥" : "鏈夋晥" }}</el-tag
-                >
+                <el-tag :type="m.state === 0 ? 'danger' : 'success'" size="small">{{ m.state === 0 ? "澶辨晥" : "鏈夋晥"
+                  }}</el-tag>
               </p>
             </div>
           </div>
         </el-col>
       </el-row>
-      <div
-        v-if="list.length < 1 && !pageLoading && !isLoding"
-        style="
+      <div v-if="list.length < 1 && !pageLoading && !isLoding" style="
           color: #909399;
           font-size: 14px;
           text-align: center;
           margin-top: 200px;
-        "
-      >
+        ">
         鏆傛棤鏁版嵁
       </div>
       <div v-if="list.length > 0">
-        <el-button
-          v-if="isLoding"
-          type="text"
-          style="display: flex; margin: 0 auto; color: #909399"
-        >
+        <el-button v-if="isLoding" type="text" style="display: flex; margin: 0 auto; color: #909399">
           <i class="el-icon-loading" style="font-size: 20px"></i>
         </el-button>
-        <el-button
-          type="text"
-          v-if="finishLoding"
-          style="display: flex; margin: 0 auto; color: #909399"
-          >宸茬粡娌℃湁鏇村鍟</el-button
-        >
+        <el-button type="text" v-if="finishLoding"
+          style="display: flex; margin: 0 auto; color: #909399">宸茬粡娌℃湁鏇村鍟</el-button>
       </div>
     </div>
-    <el-dialog
-      title="璧勮川鏇存柊"
-      :visible.sync="qualificationsConnectVisible"
-      width="400px"
-    >
-      <el-form
-        ref="formDataRef"
-        :model="formData"
-        label-position="right"
-        :rules="formDataRules"
-        label-width="78px"
-      >
+    <el-dialog title="璧勮川鏇存柊" :visible.sync="qualificationsConnectVisible" width="400px">
+      <el-form ref="formDataRef" :model="formData" label-position="right" :rules="formDataRules" label-width="78px">
         <el-form-item label="璧勮川鍚嶇О" prop="name">
-          <el-select
-            v-model="formData.name"
-            placeholder="璇烽�夋嫨"
-            style="width: 100%"
-            size="small"
-            clearable
-          >
-            <el-option
-              v-for="dict in dict.type.cnas_method_qualification"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
-            >
+          <el-select v-model="formData.name" placeholder="璇烽�夋嫨" style="width: 100%" size="small" clearable>
+            <el-option v-for="dict in dict.type.cnas_method_qualification" :key="dict.value" :label="dict.label"
+              :value="dict.value">
               {{ dict.label }}
             </el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="璧勮川缂栫爜" prop="code">
-          <el-input
-            size="small"
-            placeholder="璇疯緭鍏�"
-            clearable
-            v-model="formData.code"
-          ></el-input>
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="formData.code"></el-input>
         </el-form-item>
         <el-form-item label="棰佸彂鏈烘瀯" prop="organization">
-          <el-input
-            size="small"
-            placeholder="璇疯緭鍏�"
-            clearable
-            v-model="formData.organization"
-          ></el-input>
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="formData.organization"></el-input>
         </el-form-item>
         <el-form-item label="璧勮川璇存槑" prop="explanation">
-          <el-input
-            size="small"
-            placeholder="璇疯緭鍏�"
-            clearable
-            v-model="formData.explanation"
-          ></el-input>
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="formData.explanation"></el-input>
         </el-form-item>
         <el-form-item label="棰佸彂鏃堕棿" prop="dateOfIssuance">
-          <el-date-picker
-            style="width: 100%"
-            v-model="formData.dateOfIssuance"
-            type="datetime"
-            size="small"
-            format="yyyy-MM-dd HH:mm:ss"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            clearable
-            placeholder="閫夋嫨鏃ユ湡"
-          >
+          <el-date-picker style="width: 100%" v-model="formData.dateOfIssuance" type="datetime" size="small"
+            format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" clearable placeholder="閫夋嫨鏃ユ湡">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="鍒版湡鏃堕棿" prop="expireTime">
-          <el-date-picker
-            style="width: 100%"
-            v-model="formData.expireTime"
-            type="datetime"
-            size="small"
-            format="yyyy-MM-dd HH:mm:ss"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            clearable
-            placeholder="閫夋嫨鏃ユ湡"
-          >
+          <el-date-picker style="width: 100%" v-model="formData.expireTime" type="datetime" size="small"
+            format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" clearable placeholder="閫夋嫨鏃ユ湡">
           </el-date-picker>
         </el-form-item>
         <el-form-item label="璧勮川鍥剧墖">
-          <el-upload
-            ref="upload"
-            :action="uploadAction"
-            :on-success="(m) => handleSuccessUpImg(m, 'imageUrl')"
-            accept="image/jpg,image/jpeg,image/png"
-            :multiple="false"
-            :limit="1"
-            :headers="headers"
-            :on-change="beforeUpload"
-            :on-error="onError"
-          >
-            <el-button slot="trigger" size="small" type="primary"
-              >閫夊彇鍥剧墖</el-button
-            >
+          <el-upload ref="upload" :action="uploadAction" :on-success="(m) => handleSuccessUpImg(m, 'imageUrl')"
+            accept="image/jpg,image/jpeg,image/png" :multiple="false" :limit="1" :headers="headers"
+            :on-change="beforeUpload" :on-error="onError">
+            <el-button slot="trigger" size="small" type="primary">閫夊彇鍥剧墖</el-button>
           </el-upload>
         </el-form-item>
         <el-form-item label="璧勮川闄勪欢">
-          <el-upload
-            ref="upload1"
-            :action="uploadAction"
-            :on-success="(m) => handleSuccessUpImg(m, 'fileUrl')"
-            accept="image/jpg,image/jpeg,image/png,application/pdf,.doc,.docx"
-            :headers="headers"
-            :multiple="false"
-            :limit="1"
-            :on-change="beforeUpload1"
-            :on-error="onError1"
-          >
-            <el-button slot="trigger" size="small" type="primary"
-              >閫夊彇鏂囦欢</el-button
-            >
+          <el-upload ref="upload1" :action="uploadAction" :on-success="(m) => handleSuccessUpImg(m, 'fileUrl')"
+            accept="image/jpg,image/jpeg,image/png,application/pdf,.doc,.docx" :headers="headers" :multiple="false"
+            :limit="1" :on-change="beforeUpload1" :on-error="onError1">
+            <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>
           </el-upload>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="qualificationsConnectVisible = false"
-          >鍙� 娑�</el-button
-        >
-        <el-button
-          type="primary"
-          @click="confirmQualifications"
-          :loading="loading"
-          >纭� 瀹�</el-button
-        >
+        <el-button @click="qualificationsConnectVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="confirmQualifications" :loading="loading">纭� 瀹�</el-button>
       </span>
     </el-dialog>
   </div>
@@ -480,12 +328,6 @@
     },
     // 璧勮川鏄庣粏闄勪欢涓嬭浇
     handleDownLoad(row) {
-      // let url = row.fileUrl;
-      // const link = document.createElement('a');
-      // link.href = this.javaApi + '/img/'+ url;
-      // document.body.appendChild(link);
-      // link.target = '_blank';
-      // link.click();
       const url = process.env.VUE_APP_BASE_API + "/img/" + row.fileUrl;
       this.$download.saveAs(url, row.fileUrl);
     },
@@ -595,6 +437,7 @@
   line-height: 40px;
   margin-bottom: 10px;
 }
+
 .table-item {
   border-radius: 8px 8px 8px 8px;
   box-shadow: 4px 4px 8px 0px rgba(51, 51, 51, 0.04);

--
Gitblit v1.9.3