From 2203e220e71fe69bb89b7c01e431eaea08bdaf0d Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 25 二月 2025 14:23:22 +0800
Subject: [PATCH] 搬迁内审管理

---
 src/api/cnas/systemManagement/documentControl.js                                            |   13 
 src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue |   52 
 src/views/standard/standardLibrary/index.vue                                                |   35 
 src/views/CNAS/systemManagement/managementReview/components/reviewReport.vue                |  291 +++++++++
 src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue                          |    2 
 src/views/CNAS/systemManagement/managementReview/components/meetingRecordsDia.vue           |  158 ++++
 src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue        |  339 ++++++++++
 src/views/CNAS/systemManagement/managementReview/components/meetingRecords.vue              |  221 ++++++
 src/api/cnas/systemManagement/measuresDealRisks.js                                          |    8 
 src/api/cnas/systemManagement/internalAuditManagement.js                                    |   24 
 src/utils/request.js                                                                        |    3 
 src/views/CNAS/systemManagement/managementReview/components/reviewReportDia.vue             |  259 ++++++++
 src/views/CNAS/systemManagement/managementReview/components/managementFormDIa.vue           |  246 +++++++
 src/views/CNAS/systemManagement/managementReview/index.vue                                  |   48 +
 src/views/performance/manHour/workTimeConfig.vue                                            |    4 
 src/api/cnas/systemManagement/managementReview.js                                           |  159 ++++
 16 files changed, 1,785 insertions(+), 77 deletions(-)

diff --git a/src/api/cnas/systemManagement/documentControl.js b/src/api/cnas/systemManagement/documentControl.js
index 2d35c9e..3fc97b7 100644
--- a/src/api/cnas/systemManagement/documentControl.js
+++ b/src/api/cnas/systemManagement/documentControl.js
@@ -63,9 +63,7 @@
   return request({
     url: "/manageDocumentControlled/checkManageDocumentControlledPdf",
     method: "get",
-    headers: {
-      responseType: "blob",
-    },
+    responseType: "blob",
     params: query,
   });
 }
@@ -112,6 +110,7 @@
   return request({
     url: "/manageDocumentIssueRecycle/exportManageDocumentIssueRecycle",
     method: "get",
+    responseType: "blob",
     params: query,
   });
 }
@@ -121,7 +120,7 @@
   return request({
     url: "/manageDocumentIssueRecycle/addManageDocumentIssueRecycle",
     method: "post",
-    headers: { "Content-Type": "application/x-www-form-urlencoded" },
+    responseType: "blob",
     data: data,
   });
 }
@@ -167,7 +166,7 @@
   return request({
     url: "/manageDocumentAlter/exportManageDocumentAlter",
     method: "get",
-    headers: { responseType: "blob" },
+    responseType: "blob",
     params: query,
   });
 }
@@ -197,7 +196,7 @@
   return request({
     url: "/manageDocumentAlter/checkManageDocumentAlterPdf",
     method: "get",
-    headers: { responseType: "blob" },
+    responseType: "blob",
     params: query,
   });
 }
@@ -262,7 +261,7 @@
   return request({
     url: "/manageDocumentCancel/exportManageDocumentCancel",
     method: "get",
-    headers: { responseType: "blob" },
+    responseType: "blob",
     params: query,
   });
 }
diff --git a/src/api/cnas/systemManagement/internalAuditManagement.js b/src/api/cnas/systemManagement/internalAuditManagement.js
index e7ae621..4e22f4f 100644
--- a/src/api/cnas/systemManagement/internalAuditManagement.js
+++ b/src/api/cnas/systemManagement/internalAuditManagement.js
@@ -24,9 +24,7 @@
   return request({
     url: "/internalPlan/exportInternalPlan",
     method: "get",
-    headers: {
-      responseType: "blob",
-    },
+    responseType: "blob",
     params: query,
   });
 }
@@ -99,9 +97,7 @@
   return request({
     url: "/internalImplement/exportInternalImplement",
     method: "get",
-    headers: {
-      responseType: "blob",
-    },
+    responseType: "blob",
     params: query,
   });
 }
@@ -165,9 +161,7 @@
   return request({
     url: "/internalMeeting/exportInternalMeeting",
     method: "get",
-    headers: {
-      responseType: "blob",
-    },
+    responseType: "blob",
     params: query,
   });
 }
@@ -222,9 +216,7 @@
   return request({
     url: "/internalCheck/exportInternalCheck",
     method: "get",
-    headers: {
-      responseType: "blob",
-    },
+    responseType: "blob",
     params: query,
   });
 }
@@ -279,9 +271,7 @@
   return request({
     url: "/internalCorrect/exportInternalCorrect",
     method: "get",
-    headers: {
-      responseType: "blob",
-    },
+    responseType: "blob",
     params: query,
   });
 }
@@ -327,9 +317,7 @@
   return request({
     url: "/internalReport/exportInternalReport",
     method: "get",
-    headers: {
-      responseType: "blob",
-    },
+    responseType: "blob",
     params: query,
   });
 }
diff --git a/src/api/cnas/systemManagement/managementReview.js b/src/api/cnas/systemManagement/managementReview.js
new file mode 100644
index 0000000..5d410d3
--- /dev/null
+++ b/src/api/cnas/systemManagement/managementReview.js
@@ -0,0 +1,159 @@
+// 绠$悊璇勫鐩稿叧鎺ュ彛
+import request from "@/utils/request";
+
+// 绠$悊璁″垝-涓婁紶闄勪欢
+export function addReviewProgramFile(data) {
+  return request({
+    url: "/manageReviewProgramFile/addReviewProgramFile",
+    method: "post",
+    headers: { "Content-Type": "application/x-www-form-urlencoded" },
+    data: data,
+  });
+}
+
+//绠$悊璁″垝-闄勪欢鍒楄〃
+export function selectReviewProgramFile(query) {
+  return request({
+    url: "/manageReviewProgramFile/selectReviewProgramFile",
+    method: "get",
+    params: query,
+  });
+}
+
+//绠$悊璁″垝-鏌ヨ绠$悊璇勫璁″垝
+export function getPageReviewProgram(query) {
+  return request({
+    url: "/manageReviewProgram/getPageReviewProgram",
+    method: "get",
+    params: query,
+  });
+}
+
+//绠$悊璁″垝-鍒犻櫎绠$悊璇勫璁″垝
+export function deleteReviewProgram(query) {
+  return request({
+    url: "/manageReviewProgram/deleteReviewProgram",
+    method: "delete",
+    params: query,
+  });
+}
+
+//绠$悊璁″垝
+export function exportReviewProgram(query) {
+  return request({
+    url: "/manageReviewProgram/exportReviewProgram",
+    method: "get",
+    responseType: "blob",
+    params: query,
+  });
+}
+
+// 绠$悊璁″垝-缂栬緫绠$悊璇勫璁″垝
+export function modifyReviewProgram(data) {
+  return request({
+    url: "/manageReviewProgram/modifyReviewProgram",
+    method: "post",
+    data: data,
+  });
+}
+
+//浼氳璁板綍-鏌ヨ绠$悊璇勫浼氳璁板綍
+export function getPageMeeting(query) {
+  return request({
+    url: "/manageMeeting/getPageMeeting",
+    method: "get",
+    params: query,
+  });
+}
+
+//浼氳璁板綍-鍒犻櫎绠$悊璇勫浼氳璁板綍
+export function deleteMeeting(query) {
+  return request({
+    url: "/manageMeeting/deleteMeeting",
+    method: "delete",
+    params: query,
+  });
+}
+
+//浼氳璁板綍-涓嬭浇绠$悊璇勫浼氳璁板綍
+export function exportMeeting(query) {
+  return request({
+    url: "/manageMeeting/exportMeeting",
+    method: "get",
+    responseType: "blob",
+    params: query,
+  });
+}
+
+// 绠$悊璁″垝-鏂板绠$悊璇勫浼氳璁板綍
+export function addMeeting(data) {
+  return request({
+    url: "/manageMeeting/addMeeting",
+    method: "post",
+    data: data,
+  });
+}
+
+// 绠$悊璁″垝-淇敼绠$悊璇勫浼氳璁板綍
+export function modifyMeeting(data) {
+  return request({
+    url: "/manageMeeting/modifyMeeting",
+    method: "post",
+    data: data,
+  });
+}
+
+//璇勫浼氳鎶ュ憡-鏌ヨ绠$悊璇勫浼氳鎶ュ憡
+export function getPageReviewReport(query) {
+  return request({
+    url: "/manageReviewReport/getPageReviewReport",
+    method: "get",
+    params: query,
+  });
+}
+
+//璇勫浼氳鎶ュ憡-鍒犻櫎绠$悊璇勫浼氳鎶ュ憡
+export function deleteReviewReport(query) {
+  return request({
+    url: "/manageReviewReport/deleteReviewReport",
+    method: "delete",
+    params: query,
+  });
+}
+
+//璇勫浼氳鎶ュ憡-涓嬭浇
+export function exportReviewReport(query) {
+  return request({
+    url: "/manageReviewReport/exportReviewReport",
+    method: "get",
+    responseType: "blob",
+    params: query,
+  });
+}
+
+// 璇勫浼氳鎶ュ憡-缂栬緫绠$悊璇勫浼氳鎶ュ憡
+export function modifyReviewReport(data) {
+  return request({
+    url: "/manageReviewReport/modifyReviewReport",
+    method: "post",
+    data: data,
+  });
+}
+
+// 璇勫浼氳鎶ュ憡-鏂板绠$悊璇勫浼氳鎶ュ憡
+export function addReviewReport(data) {
+  return request({
+    url: "/manageReviewReport/addReviewReport",
+    method: "post",
+    data: data,
+  });
+}
+
+// 璇勫浼氳鎶ュ憡-鏂板绠$悊璇勫璁″垝
+export function addReviewProgram(data) {
+  return request({
+    url: "/manageReviewProgram/addReviewProgram",
+    method: "post",
+    data: data,
+  });
+}
diff --git a/src/api/cnas/systemManagement/measuresDealRisks.js b/src/api/cnas/systemManagement/measuresDealRisks.js
index 2649410..268b1a0 100644
--- a/src/api/cnas/systemManagement/measuresDealRisks.js
+++ b/src/api/cnas/systemManagement/measuresDealRisks.js
@@ -51,9 +51,7 @@
   return request({
     url: "/manageRiskAssessmentResults/exportHazardFactorIdentification",
     method: "get",
-    headers: {
-      responseType: "blob",
-    },
+    responseType: "blob",
     params: query,
   });
 }
@@ -108,9 +106,7 @@
   return request({
     url: "/manageControlPlanList/exportSignificantRiskFactors",
     method: "get",
-    headers: {
-      responseType: "blob",
-    },
+    responseType: "blob",
     params: query,
   });
 }
diff --git a/src/utils/request.js b/src/utils/request.js
index 1a89ee8..dc2024b 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -36,6 +36,9 @@
       url = url.slice(0, -1);
       config.params = {};
       config.url = url;
+      config.headers["responseType"] = config.headers["responseType"]
+        ? config.headers["responseType"]
+        : ""; // 璁╂瘡涓姹傛惡甯﹁嚜瀹氫箟token 璇锋牴鎹疄闄呮儏鍐佃嚜琛屼慨鏀�
     }
     if (
       !isRepeatSubmit &&
diff --git a/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue b/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue
index 1aba02d..0548ea4 100644
--- a/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue
+++ b/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue
@@ -394,33 +394,33 @@
       exportManageDocumentIssueRecycle(this.queryParams).then(res => {
         this.outLoading = false
         const blob = new Blob([res], { type: 'application/octet-stream' });
-        this.$download.saveAs(blob, '鍙戞斁鍥炴敹璁板綍.xlsx')
+        // 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('瀵煎嚭鎴愬姛')
-        //   }
-        // }
+        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('瀵煎嚭鎴愬姛')
+          }
+        }
       })
     },
     changeFileList(e) {
diff --git a/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue b/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue
index 7e956bd..8431ad9 100644
--- a/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue
+++ b/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue
@@ -285,7 +285,7 @@
         this.outLoading = false
         if (res.code == 201) return this.$message.error('瀵煎嚭澶辫触')
         this.$message.success('瀵煎嚭鎴愬姛')
-        let url = this.javaApi + 'word/' + res.message
+        let url = this.javaApi + '/word/' + res.message
         this.$download.saveAs(url, '鏂囦欢瀹℃壒璁板綍')
       })
     },
diff --git a/src/views/CNAS/systemManagement/managementReview/components/managementFormDIa.vue b/src/views/CNAS/systemManagement/managementReview/components/managementFormDIa.vue
new file mode 100644
index 0000000..5f1d57a
--- /dev/null
+++ b/src/views/CNAS/systemManagement/managementReview/components/managementFormDIa.vue
@@ -0,0 +1,246 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+      :visible.sync="formDia" title="绠$悊璇勫璁″垝" width="80%" @close="closeImplementDia">
+      <el-form ref="form" :model="form" :rules="rules" label-position="right" label-width="auto">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="璇勫鏃堕棿" prop="reviewTime">
+              <el-date-picker v-model="form.reviewTime" :disabled="operationType === 'ratify'" clearable
+                format="yyyy-MM-dd HH:mm:ss" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="datetime"
+                value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璇勫鍦扮偣" prop="judgingLocation">
+              <el-input v-model="form.judgingLocation" :disabled="operationType === 'ratify'" clearable
+                size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="璇勫鐩殑" prop="judgingPurpose">
+              <el-input v-model="form.judgingPurpose" :disabled="operationType === 'ratify'" clearable
+                size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="璇勫鏂瑰紡" prop="judgingMethod">
+              <el-input v-model="form.judgingMethod" :disabled="operationType === 'ratify'" clearable
+                size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鍙傚姞浜哄憳" prop="participants">
+              <!-- <el-input v-model="form.participants" :disabled="operationType === 'ratify'" clearable size="small"></el-input> -->
+              <el-select v-model="form.participants" size="small" style="width: 100%;" filterable
+                :disabled="operationType === 'ratify'" clearable multiple>
+                <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="璇勫鑼冨洿" prop="judgingScope">
+              <el-input v-model="form.judgingScope" :disabled="operationType === 'ratify'" clearable
+                size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="璇勫渚濇嵁" prop="judgingBasis">
+              <el-input v-model="form.judgingBasis" :disabled="operationType === 'ratify'" :rows="3" clearable
+                size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="璇勫涓昏鍐呭" prop="mainContext">
+              <el-input v-model="form.mainContext" :disabled="operationType === 'ratify'" :rows="3" clearable
+                size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鍑嗗宸ヤ綔瑕佹眰" prop="preparationRequirements">
+              <el-input v-model="form.preparationRequirements" :disabled="operationType === 'ratify'" :rows="3"
+                clearable size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeImplementDia">鍙� 娑�</el-button>
+        <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="handleApproval(1)">鎵�
+          鍑�</el-button>
+        <el-button v-if="operationType !== 'ratify'" :loading="loading" type="primary" @click="handleEdit">鎻�
+          浜�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="approvalDialog" title="鎵瑰噯" width="30%" @close="approvalDialog = false">
+      <span>
+        鎵瑰噯澶囨敞锛�
+        <el-input v-model="qualityRemark" type="textarea"></el-input>
+      </span>
+      <span slot="footer" class="dialog-footer">
+        <el-button :loading="approvalLoading" @click="approvalDialog = false">鍙� 娑�</el-button>
+        <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addReviewProgram,
+  modifyReviewProgram,
+} from '@/api/cnas/systemManagement/managementReview.js'
+import { dateFormat } from '@/utils/date'
+import {
+  selectUserCondition,
+} from "@/api/business/inspectionTask.js";
+import { mapGetters } from "vuex";
+export default {
+  name: 'managementFormDIa',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        id: '',
+        reviewTime: '',
+        judgingLocation: '',
+        judgingPurpose: '',
+        judgingMethod: '',
+        participants: [],
+        judgingScope: '',
+        judgingBasis: '',
+        mainContext: '',
+        preparationRequirements: '',
+      },
+      rules: {
+        reviewTime: [{ required: true, message: '璇烽�夋嫨璇勫鏃堕棿', trigger: 'blur' }],
+        judgingLocation: [{ required: true, message: '璇峰~鍐欒瘎瀹″湴鐐�', trigger: 'blur' }],
+        judgingPurpose: [{ required: true, message: '璇峰~鍐欒瘎瀹$洰鐨�', trigger: 'blur' }],
+        judgingMethod: [{ required: true, message: '璇峰~鍐欒瘎瀹℃柟寮�', trigger: 'blur' }],
+        participants: [{ required: true, message: '璇峰~鍐欏弬鍔犱汉鍛�', trigger: 'change' }],
+        judgingScope: [{ required: true, message: '璇峰~鍐欒瘎瀹¤寖鍥�', trigger: 'blur' }],
+        judgingBasis: [{ required: true, message: '璇峰~鍐欒瘎瀹′緷鎹�', trigger: 'blur' }],
+        mainContext: [{ required: true, message: '璇峰~鍐欒瘎瀹′富瑕佸唴瀹�', trigger: 'blur' }],
+        preparationRequirements: [{ required: true, message: '璇峰~鍐欏噯澶囧伐浣滆姹�', trigger: 'blur' }],
+      },
+      operationType: '',
+      approvalDialog: false,
+      approvalLoading: false,
+      qualityRemark: '',
+      personList: [],
+    };
+  },
+  computed: {
+    ...mapGetters(['nickName'])
+  },
+  mounted() {
+    this.getAuthorizedPerson()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia(type, row) {
+      this.formDia = true
+      this.operationType = type
+      if (type !== 'add') {
+        this.form = row
+        this.form.participants = row.participants ? row.participants.split(',').map(m => Number(m)) : []
+      }
+    },
+    // 鏌ヨ璇︽儏
+    // searchInfo (row) {
+    //   this.diaLoading = true
+    //   this.$axios(this.$api.internalReport.getInternalReportOne + '?reportId=' + row.reportId).then(res => {
+    //     this.diaLoading = false
+    //     if (res.code === 201) return
+    //     this.form = res.data
+    //   }).catch(err => {
+    //     console.log(err)
+    //     this.diaLoading = false
+    //   })
+    // },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.loading = true
+          const internalReport = this.HaveJson(this.form)
+          internalReport.participants = internalReport.participants.join(',')
+          if (this.operationType === 'add') {
+            addReviewProgram(internalReport).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeImplementDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          } else if (this.operationType === 'edit') {
+            modifyReviewProgram(internalReport).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeImplementDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 鎻愪氦鎵瑰噯淇℃伅
+    handleApproval(qualityStatus) {
+      this.approvalLoading = true
+      const internalReport = this.HaveJson(this.form)
+      internalReport.approve = this.nickName
+      internalReport.approveDate = dateFormat(new Date())
+      internalReport.participants = internalReport.participants.join(',')
+      modifyReviewProgram(internalReport).then(res => {
+        if (res.code === 200) {
+          this.$message.success('鎻愪氦鎴愬姛锛�');
+          this.approvalDialog = false
+          this.closeImplementDia(this.departId);
+        }
+        this.approvalLoading = false
+      }).catch(() => {
+        this.approvalLoading = false
+      })
+    },
+    closeImplementDia() {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeImplementDia')
+    },
+    getAuthorizedPerson() {
+      selectUserCondition().then(res => {
+        let data = []
+        res.data.forEach(a => {
+          data.push({
+            label: a.name,
+            value: a.id
+          })
+        })
+        this.personList = data
+      })
+    },
+  }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+  margin: 6vh auto 50px !important;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue b/src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue
new file mode 100644
index 0000000..db15a30
--- /dev/null
+++ b/src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue
@@ -0,0 +1,339 @@
+<template>
+  <div>
+    <div class="search-background">
+      <span class="search-group">
+        <span style="width: 160px">璇勫鍦扮偣锛�</span>
+        <el-input v-model="searchForm.judgingLocation" clearable size="small"></el-input>
+        <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+        <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+      </span>
+      <span class="search-group">
+        <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+      </span>
+    </div>
+    <div class="table">
+      <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+        :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+      </limsTable>
+    </div>
+    <management-form-d-ia v-if="managementFormDIa" ref="managementFormDIa"
+      @closeImplementDia="closeImplementDia"></management-form-d-ia>
+    <el-dialog :visible.sync="listDialogVisible" title="鏂囦欢鏌ョ湅" top="15vh" width="400px">
+      <div style="max-height:60vh;overflow-y: auto;">
+        <p v-for="(item, index) in fileList" :key="index">
+          <span>{{ item.fileName }}</span>
+          <el-button icon="el-icon-view" size="small" style="margin-left: 20px;" type="text"
+            @click="lookFile(item.url, item.fileName)">棰勮</el-button>
+          <el-button icon="el-icon-bottom" size="small" style="margin-left: 20px;" type="text"
+            @click="handleDown0(item.url, item.fileName)">涓嬭浇</el-button>
+        </p>
+      </div>
+    </el-dialog>
+    <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" top="5vh" width="800px">
+      <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.url"
+        style="height: 90vh;overflow-y: auto;" />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import ManagementFormDIa from './managementFormDIa.vue';
+import filePreview from "@/components/Preview/filePreview.vue";
+import {
+  addReviewProgramFile,
+  selectReviewProgramFile,
+  getPageReviewProgram,
+  deleteReviewProgram,
+  exportReviewProgram,
+} from '@/api/cnas/systemManagement/managementReview.js'
+
+export default {
+  name: 'managementReviewPlan',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { ManagementFormDIa, limsTable, filePreview },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        judgingLocation: '',
+      },
+      listDialogVisible: false,
+      lookDialogVisible: false,
+      fileList: [],
+      currentInfo: {},
+      tableColumn: [
+        {
+          label: '璇勫鏃堕棿',
+          prop: 'reviewTime',
+        },
+        {
+          label: '璇勫鍦扮偣',
+          prop: 'judgingLocation',
+        },
+        {
+          label: '璇勫鐩殑',
+          prop: 'judgingPurpose',
+        },
+        {
+          label: '璇勫鏂瑰紡',
+          prop: 'judgingMethod',
+        },
+        {
+          label: '璇勫鑼冨洿',
+          prop: 'judgingScope',
+        },
+        // {
+        //   dataType: 'tag',
+        //   label: '鎵瑰噯鐘舵��',
+        //   prop: 'approve',
+        //   minWidth: '100',
+        //   formatData: (params) => {
+        //     if (params === 0) {
+        //       return '涓嶉�氳繃';
+        //     } else if (params === 1) {
+        //       return '閫氳繃';
+        //     } else {
+        //       return null;
+        //     }
+        //   },
+        //   formatType: (params) => {
+        //     if (params === 0) {
+        //       return 'danger';
+        //     } else if (params === 1) {
+        //       return 'success';
+        //     } else {
+        //       return null;
+        //     }
+        //   }
+        // },
+        {
+          dataType: 'action',
+          minWidth: '110',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+              disabled: (row) => {
+                return !!row.approve
+              },
+            },
+            {
+              name: '涓婁紶',
+              type: 'upload',
+              multiple: true,
+              limit: 20,
+              accept: '.doc,.docx,.xls,.xlsx,.jpg,.jpeg,.png,.pdf',
+              clickFun: async (row, file, fileList) => {
+                const formData = new FormData();
+                formData.append('file', file.raw); // 鏂囦欢瀛楁
+                formData.append('id', row.id); // 鏂囦欢鍚嶅瓧娈�
+                let res = await addReviewProgramFile(formData)
+                if (res.code == 200) {
+                  this.$message({ message: '涓婁紶鎴愬姛', type: 'success' });
+                  // this.searchList()
+                  return
+                } else {
+                  this.$message({ message: '涓婁紶澶辫触', type: 'error' });
+                  return
+                }
+              },
+              disabled: (row) => {
+                return !!row.approve
+              },
+            },
+            {
+              name: '鏌ョ湅闄勪欢',
+              type: 'text',
+              clickFun: (row) => {
+                selectReviewProgramFile({ id: row.id }).then(res => {
+                  this.listDialogVisible = true;
+                  this.fileList = res.data.fileList
+                });
+              },
+            },
+            {
+              name: '鎵瑰噯',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('ratify', row);
+              },
+              disabled: (row) => {
+                return !!row.approve
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delPlan(row)
+              },
+              disabled: (row) => {
+                if (row.qualityStatus === 1) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '涓嬭浇',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              }
+            },
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+        total: 0,
+      },
+      managementFormDIa: false,
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      this.tableLoading = true
+      getPageReviewProgram({
+        judgingLocation: this.searchForm.judgingLocation,
+        pages: this.page.current,
+        size: this.page.size
+      }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.tableLoading = false
+      })
+    },
+    // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+    openFormDia(type, row) {
+      this.managementFormDIa = true
+      this.$nextTick(() => {
+        this.$refs.managementFormDIa.openDia(type, row)
+      })
+    },
+    closeImplementDia() {
+      this.managementFormDIa = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.judgingLocation = '';
+      this.searchList()
+    },
+    // 鍒犻櫎
+    delPlan(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        deleteReviewProgram({ id: row.id }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 鍒嗛〉
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+    handleDown(row) {
+      exportReviewProgram({ id: row.id }).then(res => {
+        if (res.code == 201) {
+          this.$message.error(res.message)
+          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('瀵煎嚭鎴愬姛')
+          }
+        }
+      })
+    },
+    lookFile(url, name) {
+      this.currentInfo.url = url
+      this.currentInfo.name = name
+      this.lookDialogVisible = true
+    },
+    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();
+    }
+  }
+};
+</script>
+
+<style scoped>
+.search-background {
+  width: 100%;
+  height: 60px;
+  line-height: 60px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/managementReview/components/meetingRecords.vue b/src/views/CNAS/systemManagement/managementReview/components/meetingRecords.vue
new file mode 100644
index 0000000..819fa92
--- /dev/null
+++ b/src/views/CNAS/systemManagement/managementReview/components/meetingRecords.vue
@@ -0,0 +1,221 @@
+<template>
+  <div>
+    <div class="search-background">
+      <span class="search-group">
+        <span style="width: 160px">浼氳鍦扮偣锛�</span>
+        <el-input v-model="searchForm.place" clearable size="small"></el-input>
+        <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+        <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+      </span>
+      <span class="search-group">
+        <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+      </span>
+    </div>
+    <div class="table">
+      <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+        :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+      </limsTable>
+    </div>
+    <meeting-records-dia v-if="meetingRecordsDia" ref="meetingRecordsDia"
+      @closeYearDia="closeYearDia"></meeting-records-dia>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import MeetingRecordsDia from './meetingRecordsDia.vue';
+import ManagementFormDIa from './managementFormDIa.vue';
+import {
+  getPageMeeting,
+  deleteMeeting,
+  exportMeeting,
+} from '@/api/cnas/systemManagement/managementReview.js'
+
+export default {
+  name: 'meetingRecords',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { ManagementFormDIa, MeetingRecordsDia, limsTable },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        place: '',
+      },
+      tableColumn: [
+        {
+          label: '鏃堕棿',
+          prop: 'meetingTime',
+          minWidth: '100'
+        },
+        {
+          label: '涓绘寔浜�',
+          prop: 'compere',
+          minWidth: '100'
+        },
+        {
+          label: '浼氳鍦扮偣',
+          prop: 'place',
+          minWidth: '100'
+        },
+        {
+          label: '浼氳鍐呭鎽樿',
+          prop: 'content',
+          minWidth: '100'
+        },
+        {
+          dataType: 'action',
+          minWidth: '120',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delPlan(row)
+              }
+            },
+            {
+              name: '涓嬭浇',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              }
+            },
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+        total: 0,
+      },
+      meetingRecordsDia: false
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      this.tableLoading = true
+      getPageMeeting({ place: this.searchForm.place, pages: this.page.current, size: this.page.size }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.tableLoading = false
+      })
+    },
+    // 鏂板锛岀紪杈戝脊妗�
+    openFormDia(type, row) {
+      this.meetingRecordsDia = true
+      this.$nextTick(() => {
+        this.$refs.meetingRecordsDia.openDia(type, row)
+      })
+    },
+    closeYearDia() {
+      this.meetingRecordsDia = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.place = '';
+      this.searchList()
+    },
+    // 鍒犻櫎
+    delPlan(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        deleteMeeting({ id: row.id }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+    handleDown(row) {
+      exportMeeting({ id: row.id }).then(res => {
+        if (res.code == 201) {
+          this.$message.error(res.message)
+          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('瀵煎嚭鎴愬姛')
+          }
+        }
+      })
+    },
+  }
+};
+</script>
+
+<style scoped>
+.search-background {
+  width: 100%;
+  height: 60px;
+  line-height: 60px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/managementReview/components/meetingRecordsDia.vue b/src/views/CNAS/systemManagement/managementReview/components/meetingRecordsDia.vue
new file mode 100644
index 0000000..835e5e4
--- /dev/null
+++ b/src/views/CNAS/systemManagement/managementReview/components/meetingRecordsDia.vue
@@ -0,0 +1,158 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+      :visible.sync="formDia" title="绠$悊璇勫浼氳璁板綍" width="1000px" @close="closeYearDia">
+      <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鏃堕棿" prop="meetingTime">
+              <el-date-picker v-model="form.meetingTime" clearable format="yyyy-MM-dd HH:mm:ss" placeholder="閫夋嫨鏃ユ湡"
+                size="small" style="width: 100%" type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍦扮偣" prop="place">
+              <el-input v-model="form.place" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="涓绘寔浜�" prop="compere">
+              <el-input v-model="form.compere" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="浼氳鍐呭鎽樿" prop="content">
+              <el-input v-model="form.content" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鍙備細浜哄憳" prop="participant">
+              <el-select v-model="form.participant" clearable filterable multiple placeholder="璇烽�夋嫨" size="small"
+                style="width: 100%;">
+                <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeYearDia">鍙� 娑�</el-button>
+        <el-button :loading="loading" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addMeeting,
+  modifyMeeting,
+} from '@/api/cnas/systemManagement/managementReview.js'
+import {
+  selectUserCondition,
+} from "@/api/business/inspectionTask.js";
+export default {
+  name: 'meetingRecordsDia',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        id: '',
+        meetingTime: '',
+        compere: '',
+        place: '',
+        content: '',
+        participant: [],
+      },
+      rules: {
+        meetingTime: [{ required: true, message: '璇峰~鍐欎細璁椂闂�', trigger: 'blur' }],
+        compere: [{ required: true, message: '璇峰~鍐欎富鎸佷汉', trigger: 'blur' }],
+        place: [{ required: true, message: '璇峰~鍐欏湴鐐�', trigger: 'blur' }],
+        content: [{ required: true, message: '璇峰~鍐欎細璁唴瀹规憳瑕�', trigger: 'blur' }],
+        participant: [{ required: true, message: '璇烽�夋嫨鍙傚姞浜哄憳', trigger: 'change' }],
+      },
+      operationType: '',
+      personList: []
+    };
+  },
+  mounted() {
+
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia(type, row) {
+      this.operationType = type
+      this.getAuthorizedPerson()
+      if (type !== 'add') {
+        this.form = row
+        this.form.participant = row.participant.split(',').map(a => {
+          a = Number(a)
+          return a
+        })
+      }
+      this.formDia = true
+    },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.loading = true
+          const internalMeeting = this.HaveJson(this.form)
+          internalMeeting.participant = internalMeeting.participant.join(',')
+          if (this.operationType === 'add') {
+            addMeeting(internalMeeting).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeYearDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          } else if (this.operationType === 'edit') {
+            modifyMeeting(internalMeeting).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeYearDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    closeYearDia() {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeYearDia')
+    },
+    getAuthorizedPerson() {
+      selectUserCondition().then(res => {
+        let data = []
+        res.data.forEach(a => {
+          data.push({
+            label: a.name,
+            value: a.id
+          })
+        })
+        this.personList = data
+      })
+    },
+  }
+};
+</script>
+
+<style scoped></style>
diff --git a/src/views/CNAS/systemManagement/managementReview/components/reviewReport.vue b/src/views/CNAS/systemManagement/managementReview/components/reviewReport.vue
new file mode 100644
index 0000000..72a90bc
--- /dev/null
+++ b/src/views/CNAS/systemManagement/managementReview/components/reviewReport.vue
@@ -0,0 +1,291 @@
+<template>
+  <div>
+    <div class="search-background">
+      <span class="search-group">
+        <span style="width: 160px">鍦扮偣锛�</span>
+        <el-input v-model="searchForm.place" clearable size="small"></el-input>
+        <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+        <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+      </span>
+      <span class="search-group">
+        <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+      </span>
+    </div>
+    <div class="table">
+      <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+        :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+      </limsTable>
+    </div>
+    <review-report-dia v-if="reviewReportDia" ref="reviewReportDia" @closeYearDia="closeYearDia"></review-report-dia>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import ReviewReportDia from './reviewReportDia.vue';
+import {
+  getPageReviewReport,
+  deleteReviewReport,
+  exportReviewReport,
+  modifyReviewReport,
+} from '@/api/cnas/systemManagement/managementReview.js'
+import { mapGetters } from "vuex";
+export default {
+  name: 'reviewReport',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { ReviewReportDia, limsTable },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        place: '',
+      },
+      tableColumn: [
+        {
+          label: '鐩殑',
+          prop: 'objective',
+          minWidth: '100'
+        },
+        {
+          label: '鍦扮偣',
+          prop: 'place',
+          minWidth: '100'
+        },
+        {
+          label: '涓绘寔浜�',
+          prop: 'compere',
+          minWidth: '100'
+        },
+        {
+          label: '璁板綍浜�',
+          prop: 'recordPeople',
+          minWidth: '100'
+        },
+        {
+          label: '鏃ユ湡',
+          prop: 'date',
+          minWidth: '100'
+        },
+        {
+          label: '椤垫',
+          prop: 'page',
+          minWidth: '100'
+        },
+        {
+          label: '璇勫鏂瑰紡',
+          prop: 'judgingMethod',
+          minWidth: '100'
+        },
+        {
+          label: '璇勫渚濇嵁',
+          prop: 'reviewBasis',
+          minWidth: '100'
+        },
+        {
+          dataType: 'action',
+          minWidth: '160',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+              disabled: (row) => {
+                return !!row.audit || !!row.approval
+              }
+            },
+            {
+              name: '瀹℃牳',
+              type: 'text',
+              clickFun: (row) => {
+                this.$confirm('纭畾瀹℃牳閫氳繃?', '鎻愮ず', {
+                  confirmButtonText: '纭畾',
+                  cancelButtonText: '鍙栨秷',
+                  type: 'warning'
+                }).then(() => {
+                  this.submit('audit', row)
+                }).catch(() => {
+                });
+              },
+              disabled: (row) => {
+                return !!row.audit
+              }
+            },
+            {
+              name: '鎵瑰噯',
+              type: 'text',
+              clickFun: (row) => {
+                this.$confirm('纭畾鎵瑰噯閫氳繃?', '鎻愮ず', {
+                  confirmButtonText: '纭畾',
+                  cancelButtonText: '鍙栨秷',
+                  type: 'warning'
+                }).then(() => {
+                  this.submit('approval', row)
+                }).catch(() => {
+                });
+              },
+              disabled: (row) => {
+                return !row.audit || !!row.approval
+              }
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delPlan(row)
+              }
+            },
+            {
+              name: '涓嬭浇',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              }
+            },
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+        total: 0,
+      },
+      reviewReportDia: false,
+    };
+  },
+  computed: {
+    ...mapGetters(['nickName'])
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      this.tableLoading = true
+      getPageReviewReport({ place: this.searchForm.place, pages: this.page.current, size: this.page.size }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.tableLoading = false
+      })
+    },
+    // 鏂板锛岀紪杈戝脊妗�
+    openFormDia(type, row) {
+      this.reviewReportDia = true
+      this.$nextTick(() => {
+        this.$refs.reviewReportDia.openDia(type, row)
+      })
+    },
+    closeYearDia() {
+      this.reviewReportDia = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.place = '';
+      this.searchList()
+    },
+    // 鍒犻櫎
+    delPlan(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        deleteReviewReport({ id: row.id }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+    handleDown(row) {
+      exportReviewReport({ id: row.id }).then(res => {
+        if (res.code == 201) {
+          this.$message.error(res.message)
+          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('瀵煎嚭鎴愬姛')
+          }
+        }
+      })
+    },
+    submit(type, row) {
+      let obj = row
+      obj[type] = this.nickNamee;
+      modifyReviewReport(obj).then(res => {
+        if (res.code === 201) return
+        this.$message.success('鎿嶄綔鎴愬姛')
+        this.searchList()
+      }).catch(err => {
+        console.log('err---', err);
+      })
+    }
+  }
+};
+</script>
+
+<style scoped>
+.search-background {
+  width: 100%;
+  height: 60px;
+  line-height: 60px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/managementReview/components/reviewReportDia.vue b/src/views/CNAS/systemManagement/managementReview/components/reviewReportDia.vue
new file mode 100644
index 0000000..b8afafc
--- /dev/null
+++ b/src/views/CNAS/systemManagement/managementReview/components/reviewReportDia.vue
@@ -0,0 +1,259 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+      :visible.sync="formDia" title="绠$悊璇勫浼氳璁板綍" width="1000px" @close="closeYearDia">
+      <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鐩殑" prop="objective">
+              <el-input v-model="form.objective" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍦扮偣" prop="place">
+              <el-input v-model="form.place" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="涓绘寔浜�" prop="compere">
+              <el-input v-model="form.compere" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璁板綍浜�" prop="recordPeople">
+              <el-input v-model="form.recordPeople" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏃ユ湡" prop="date">
+              <el-date-picker v-model="form.date" clearable format="yyyy-MM-dd HH:mm:ss" placeholder="閫夋嫨鏃ユ湡" size="small"
+                style="width: 100%" type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="椤垫" prop="page">
+              <el-input v-model="form.page" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璇勫鏂瑰紡" prop="judgingMethod">
+              <el-input v-model="form.judgingMethod" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璇勫渚濇嵁" prop="reviewBasis">
+              <el-input v-model="form.reviewBasis" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鍑哄腑浜哄憳" prop="attendess">
+              <!-- <el-input v-model="form.attendess	" clearable size="small"></el-input> -->
+              <el-select v-model="form.attendess" size="small" style="width: 100%;" filterable clearable multiple>
+                <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="璇勫杈撳叆鎯呭喌" prop="reviewInputs">
+              <el-input v-model="form.reviewInputs" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="璇勫杩囩▼姒傚喌" prop="reviewProcess">
+              <el-input v-model="form.reviewProcess" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="涓昏璁姒傝堪" prop="mainTopic">
+              <el-input v-model="form.mainTopic" :rows="5" clearable placeholder="璇疯緭鍏ュ唴瀹癸紝鍙緭鍏ュ嚑鍗冨瓧" size="small"
+                type="textarea">
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="浜嬮」" prop="matters">
+              <el-input v-model="form.matters" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="璐熻矗浜�" prop="head">
+              <el-input v-model="form.head" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="瀹屾垚鏃ユ湡" prop="completionDate">
+              <el-date-picker v-model="form.completionDate" clearable format="yyyy-MM-dd HH:mm:ss" placeholder="閫夋嫨鏃ユ湡"
+                size="small" style="width: 100%" type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="璺熻釜纭浜�" prop="trackingConfirmed">
+              <el-input v-model="form.trackingConfirmed" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="璺熻釜鎯呭喌纭璁板綍" prop="follerUp">
+              <el-input v-model="form.follerUp" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="浣撶郴璇勪环" prop="overallEvaluation">
+              <el-input v-model="form.overallEvaluation" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeYearDia">鍙� 娑�</el-button>
+        <el-button :loading="loading" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addReviewReport,
+  modifyReviewReport,
+} from '@/api/cnas/systemManagement/managementReview.js'
+import {
+  selectUserCondition,
+} from "@/api/business/inspectionTask.js";
+export default {
+  name: 'reviewReportDia',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        id: '',
+        objective: '',
+        place: '',
+        compere: '',
+        recordPeople: '',
+        date: '',
+        page: '',
+        judgingMethod: '',
+        reviewBasis: '',
+        attendess: [],
+        reviewInputs: '',
+        reviewProcess: '',
+        mainTopic: '',
+        matters: '',
+        head: '',
+        completionDate: '',
+        trackingConfirmed: '',
+        follerUp: '',
+        overallEvaluation: '',
+      },
+      rules: {
+        objective: [{ required: true, message: '璇峰~鍐欑洰鐨�', trigger: 'blur' }],
+        place: [{ required: true, message: '璇峰~鍐欏湴鐐�', trigger: 'blur' }],
+        compere: [{ required: true, message: '璇峰~鍐欎富鎸佷汉', trigger: 'blur' }],
+        recordPeople: [{ required: true, message: '璇峰~鍐欒褰曚汉', trigger: 'blur' }],
+        date: [{ required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }],
+        completionDate: [{ required: true, message: '璇烽�夋嫨瀹屾垚鏃ユ湡', trigger: 'change' }],
+        page: [{ required: true, message: '璇峰~鍐欓〉娆�', trigger: 'blur' }],
+        judgingMethod: [{ required: true, message: '璇峰~鍐欒瘎瀹℃柟寮�', trigger: 'blur' }],
+        reviewBasis: [{ required: true, message: '璇峰~鍐欒瘎瀹′緷鎹�', trigger: 'blur' }],
+        attendess: [{ required: true, message: '璇峰~鍐欏嚭甯汉鍛�', trigger: 'change' }],
+        reviewInputs: [{ required: true, message: '璇峰~鍐欒瘎瀹¤緭鍏ユ儏鍐�', trigger: 'blur' }],
+        reviewProcess: [{ required: true, message: '璇峰~鍐欒瘎瀹¤緭鍏ユ儏鍐�', trigger: 'blur' }],
+        mainTopic: [{ required: true, message: '璇峰~鍐欎富瑕佽棰樻杩�', trigger: 'blur' }],
+        matters: [{ required: true, message: '璇峰~鍐欎富瑕佽棰樻杩�', trigger: 'blur' }],
+        head: [{ required: true, message: '璇峰~鍐欒礋璐d汉', trigger: 'blur' }],
+        trackingConfirmed: [{ required: true, message: '璇峰~鍐欒窡韪‘璁や汉', trigger: 'blur' }],
+        follerUp: [{ required: true, message: '璇峰~鍐欒窡韪‘璁や汉', trigger: 'blur' }],
+        overallEvaluation: [{ required: true, message: '璇峰~鍐欎綋绯昏瘎浠�', trigger: 'blur' }],
+      },
+      operationType: '',
+      personList: []
+    };
+  },
+  mounted() {
+
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia(type, row) {
+      this.formDia = true
+      this.operationType = type
+      this.getAuthorizedPerson()
+      if (type !== 'add') {
+        this.form = row
+        this.form.attendess = this.form.attendess ? this.form.attendess.split(',').map(m => Number(m)) : []
+      }
+    },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.loading = true
+          const internalMeeting = this.HaveJson(this.form)
+          internalMeeting.attendess = internalMeeting.attendess ? internalMeeting.attendess.join(',') : ''
+          if (this.operationType === 'add') {
+            addReviewReport(internalMeeting).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeYearDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          } else if (this.operationType === 'edit') {
+            modifyReviewReport(internalMeeting).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeYearDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    closeYearDia() {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeYearDia')
+    },
+    getAuthorizedPerson() {
+      selectUserCondition().then(res => {
+        let data = []
+        res.data.forEach(a => {
+          data.push({
+            label: a.name,
+            value: a.id
+          })
+        })
+        this.personList = data
+      })
+    },
+  }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+  margin: 4vh auto 50px !important;
+}
+
+>>>.el-dialog__body {
+  max-height: 600px;
+  overflow-y: auto;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/managementReview/index.vue b/src/views/CNAS/systemManagement/managementReview/index.vue
new file mode 100644
index 0000000..9111484
--- /dev/null
+++ b/src/views/CNAS/systemManagement/managementReview/index.vue
@@ -0,0 +1,48 @@
+<template>
+  <div class="main">
+    <el-tabs v-model="activeName" class="tab-panel" type="border-card">
+      <el-tab-pane label="绠$悊璇勫璁″垝" name="yearPlan">
+        <management-review-plan></management-review-plan>
+      </el-tab-pane>
+      <el-tab-pane label="浼氳璁板綍" name="implementationPlan">
+        <meeting-records></meeting-records>
+      </el-tab-pane>
+      <el-tab-pane label="璇勫鎶ュ憡" name="meetingSignIn">
+        <review-report></review-report>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import ManagementReviewPlan from './components/managementReviewPlan.vue';
+import MeetingRecords from './components/meetingRecords.vue';
+import ReviewReport from './components/reviewReport.vue';
+
+export default {
+  name: 'a9-management-review',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { ReviewReport, MeetingRecords, ManagementReviewPlan },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      activeName: 'yearPlan',
+    };
+  },
+  mounted() {
+
+  },
+  // 鏂规硶闆嗗悎
+  methods: {}
+};
+</script>
+
+<style scoped>
+.main {
+  padding: 15px 0;
+}
+
+.tab-panel {
+  background: #fff;
+}
+</style>
diff --git a/src/views/performance/manHour/workTimeConfig.vue b/src/views/performance/manHour/workTimeConfig.vue
index 5364c89..4fcad16 100644
--- a/src/views/performance/manHour/workTimeConfig.vue
+++ b/src/views/performance/manHour/workTimeConfig.vue
@@ -30,8 +30,8 @@
         v-if="checkPermi(['performance:manHour:workTimeConfig:add'])">鏂� 澧�</el-button>
     </div>
     <div class="table">
-      <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
-        :height="'calc(100vh - 290px)'" @pagination="pagination"></lims-table>
+      <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 290px)'"
+        :page="page" @pagination="pagination"></lims-table>
     </div>
     <!-- 鏂板/缂栬緫 -->
     <el-dialog :title="title" :visible.sync="timeDia" width="500px">
diff --git a/src/views/standard/standardLibrary/index.vue b/src/views/standard/standardLibrary/index.vue
index 4ead05c..180ad2c 100644
--- a/src/views/standard/standardLibrary/index.vue
+++ b/src/views/standard/standardLibrary/index.vue
@@ -212,10 +212,10 @@
             <el-col :class="{ sort: node.level > 3 }" :span="19" :title="data.label" style="text-align: left">
               <span>
                 <i :class="`node_i ${data.children != undefined
-                    ? data.code === '[1]'
-                      ? 'el-icon-folder-opened'
-                      : 'el-icon-folder'
-                    : 'el-icon-tickets'
+                  ? data.code === '[1]'
+                    ? 'el-icon-folder-opened'
+                    : 'el-icon-folder'
+                  : 'el-icon-tickets'
                   }`"></i>
                 {{ data.label }}
               </span>
@@ -225,7 +225,7 @@
               (node.data.children === null ||
                 node.data.children === undefined)
             " :span="2" style="text-align: right">
-              <el-button size="mini" type="text" @click="editTreeName(node.data)">
+              <el-button size="mini" type="text" @click.stop="editTreeName(node.data)">
                 <i class="el-icon-edit"></i>
               </el-button>
             </el-col>
@@ -286,8 +286,8 @@
             <template slot-scope="scope">
               <el-input v-if="
                 checkPermi(['standard:standardLibrary:upStandardProduct'])
-              " v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="瑕佹眰鍊�"
-                size="small" type="textarea" @change="(value) => upStandardProductList(value, scope.row.id)"></el-input>
+              " v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="瑕佹眰鍊�" size="small"
+                type="textarea" @change="(value) => upStandardProductList(value, scope.row.id)"></el-input>
               <span v-else>{{ scope.row.ask }}</span>
             </template>
           </el-table-column>
@@ -306,7 +306,7 @@
               <el-select v-if="
                 checkPermi(['standard:standardLibrary:upStandardProduct'])
               " v-model="scope.row.methodS" clearable placeholder="璇曢獙鏂规硶" size="small" @change="(value) => upStandardProductListOfMethodS(value, scope.row.id)
-                  ">
+                ">
                 <el-option v-for="(a, i) in scope.row.method &&
                   JSON.parse(scope.row.method)" :key="i" :label="a" :value="a"></el-option>
               </el-select>
@@ -318,7 +318,7 @@
               <el-select v-if="
                 checkPermi(['standard:standardLibrary:upStandardProduct'])
               " v-model="scope.row.radius" clearable placeholder="鏉′欢" size="small" @change="(value) => upStandardProductListOfRadius(value, scope.row.id)
-                  ">
+                ">
                 <el-option v-for="(a, i) in scope.row.radiusList &&
                   JSON.parse(scope.row.radiusList)" :key="i" :label="a" :value="a"></el-option>
               </el-select>
@@ -331,7 +331,7 @@
               <el-input v-if="
                 checkPermi(['standard:standardLibrary:upStandardProduct'])
               " v-model="scope.row.price" placeholder="鍗曚环(鍏�)" size="small" @change="(value) => upStandardProductListOfPrice(value, scope.row.id)
-                  ">
+                ">
               </el-input>
               <span v-else>{{ scope.row.price }}</span>
             </template>
@@ -341,7 +341,7 @@
               <el-input v-if="
                 checkPermi(['standard:standardLibrary:upStandardProduct'])
               " v-model="scope.row.manHour" placeholder="鍗曚环(鍏�)" size="small" @change="(value) => upStandardProductListOfManHour(value, scope.row.id)
-                  ">
+                ">
               </el-input>
               <span v-else>{{ scope.row.manHour }}</span>
             </template>
@@ -351,7 +351,7 @@
             <template slot-scope="scope">
               <el-select v-model="scope.row.templateId" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct'])
                 " filterable size="small" @change="(value) =>
-                    upStandardProductListOfTemplate(value, scope.row.id)
+                  upStandardProductListOfTemplate(value, scope.row.id)
                   ">
                 <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option>
               </el-select>
@@ -367,10 +367,10 @@
             </template>
           </el-table-column>
         </el-table>
-        <el-pagination :current-page="currentPage" :page-size="300" :total="total"
-          layout="total, prev, pager, next, jumper" style="position: absolute; right: 16px; bottom: 1px"
-          @current-change="handleCurrentChange">
-        </el-pagination>
+        <!-- <el-pagination :current-page="currentPage" :page-size="300" :total="total" layout="total"
+          style="position: absolute; right: 16px; bottom: 1px" @current-change="handleCurrentChange">
+        </el-pagination> -->
+        <p style="text-align: right;margin-right: 20px;color: #333;">鍏眥{ total }}鏉�</p>
       </el-row>
     </div>
 
@@ -897,7 +897,8 @@
             return;
           }
           this.$message.success("娣诲姞鎴愬姛");
-          this.selectStandardTreeList();
+          this.$tab.refreshPage();
+          // this.selectStandardTreeList();
           this.updateDia = false;
           this.updateLoad = false;
         })

--
Gitblit v1.9.3