From 868df4bfba37bddafaf857f3768643094bb7ea0b Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期三, 26 二月 2025 15:48:08 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev

---
 src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue                                                                 |   18 
 src/api/cnas/process/ensureResults/qualityMonitor.js                                                                                 |    0 
 src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue                                             |    2 
 src/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment.js                                                        |  197 +++
 src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue                                             |    2 
 src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue                                               |  510 ++++++++++
 src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue |   72 
 src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue         |   43 
 src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue          |   78 
 src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue                                              |  174 +++
 src/api/cnas/process/ensureResults/qualitySupervise.js                                                                               |  182 +++
 src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue                                                                    |  716 ++++++++++++++
 src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue                                                 |  426 ++++++++
 src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue    |  100 -
 src/main.js                                                                                                                          |   11 
 src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue                                           |    2 
 src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue                                              |  460 +++++++++
 src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue                                                 |    0 
 18 files changed, 2,798 insertions(+), 195 deletions(-)

diff --git a/src/api/cnas/process/ensureResultsValidity/qualityMonitor.js b/src/api/cnas/process/ensureResults/qualityMonitor.js
similarity index 100%
rename from src/api/cnas/process/ensureResultsValidity/qualityMonitor.js
rename to src/api/cnas/process/ensureResults/qualityMonitor.js
diff --git a/src/api/cnas/process/ensureResults/qualitySupervise.js b/src/api/cnas/process/ensureResults/qualitySupervise.js
new file mode 100644
index 0000000..9de4337
--- /dev/null
+++ b/src/api/cnas/process/ensureResults/qualitySupervise.js
@@ -0,0 +1,182 @@
+// 璐ㄩ噺鐩戠潱璁″垝椤甸潰鐩稿叧鎺ュ彛
+import request from '@/utils/request'
+
+// 璐ㄩ噺鐩戠潱骞磋鍒掑垪琛�
+export function pageQualitySupervise(query) {
+  return request({
+    url: '/qualitySupervise/pageQualitySupervise',
+    method: 'get',
+    params: query
+  })
+}
+// 璐ㄩ噺鐩戠潱骞磋鍒掑垪琛�
+export function ratifyQualitySupervise(query) {
+  return request({
+    url: '/qualitySupervise/ratifyQualitySupervise',
+    method: 'post',
+    data: query
+  })
+}
+// 璐ㄩ噺鐩戠潱骞磋鍒掑垪琛�
+export function exportQualitySupervise(query) {
+  return request({
+    url: '/qualitySupervise/exportQualitySupervise',
+    method: 'get',
+    data: query,
+    responseType: "blob"
+  })
+}
+// 鍒犻櫎鐩戠潱璁″垝
+export function delQualitySupervise(query) {
+  return request({
+    url: '/qualitySupervise/delQualitySupervise',
+    method: 'delete',
+    params: query,
+  })
+}
+// 璐ㄩ噺鐩戠潱骞磋鍒掑垪琛�
+export function pageQualitySuperviseDetail(query) {
+  return request({
+    url: '/qualitySupervise/pageQualitySuperviseDetail',
+    method: 'get',
+    params: query,
+  })
+}
+// 瀵煎嚭璐ㄩ噺鐩戠潱璁″垝璁板綍鍗�
+export function exportSuperviseDetailRecord(query) {
+  return request({
+    url: '/qualitySupervise/exportSuperviseDetailRecord',
+    method: 'get',
+    params: query,
+    responseType: "blob"
+  })
+}
+// 瀵煎嚭涓嶇鍚堥」
+export function superviseDetailAccordingExport(query) {
+  return request({
+    url: '/qualitySupervise/superviseDetailAccordingExport',
+    method: 'get',
+    params: query,
+    responseType: "blob"
+  })
+}
+// 瀵煎嚭鐩戠潱绾犳鎺柦
+export function exportSuperviseDetaillCorrect(query) {
+  return request({
+    url: '/qualitySupervise/exportSuperviseDetaillCorrect',
+    method: 'get',
+    params: query,
+    responseType: "blob"
+  })
+}
+// 鍒犻櫎鐩戠潱璁″垝璇︽儏
+export function delQualitySuperviseDetail(query) {
+  return request({
+    url: '/qualitySupervise/delQualitySuperviseDetail',
+    method: 'delete',
+    params: query,
+  })
+}
+// 鏂板鐩戠潱璁″垝璇︽儏
+export function addQualitySuperviseDetail(query) {
+  return request({
+    url: '/qualitySupervise/addQualitySuperviseDetail',
+    method: 'post',
+    data: query,
+  })
+}
+// 淇敼鐩戠潱璁″垝璇︽儏
+export function updateQualitySuperviseDetail(query) {
+  return request({
+    url: '/qualitySupervise/updateQualitySuperviseDetail',
+    method: 'post',
+    data: query,
+  })
+}
+// 鏌ヨ鐩戠潱璁″垝璁板綍娴佺▼璇︽儏
+export function getSuperviseDetailRecord(query) {
+  return request({
+    url: '/qualitySupervise/getSuperviseDetailRecord',
+    method: 'get',
+    params: query,
+  })
+}
+// 鏂板鐩戠潱璁板綍淇℃伅
+export function addSuperviseDetailRecord(query) {
+  return request({
+    url: '/qualitySupervise/addSuperviseDetailRecord',
+    method: 'post',
+    data: query,
+  })
+}
+// 鎻愪氦鐩戠潱璁板綍鎵瑰噯
+export function addSuperviseRecordOpinion(query) {
+  return request({
+    url: '/qualitySupervise/addSuperviseRecordOpinion',
+    method: 'post',
+    data: query,
+  })
+}
+// 鑾峰彇褰撳墠鐩戠潱璁板綍鐨勭洃鐫e憳鍒楄〃
+export function getRecordUser(query) {
+  return request({
+    url: '/qualitySupervise/getRecordUser',
+    method: 'get',
+    params: query,
+  })
+}
+// 鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+export function getSuperviseDetailAccording(query) {
+  return request({
+    url: '/qualitySupervise/getSuperviseDetailAccording',
+    method: 'get',
+    params: query,
+  })
+}
+// (瑁呭娴佺▼)鏂板鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+export function addEquipSuperviseDetailAccording(query) {
+  return request({
+    url: '/qualitySupervise/addEquipSuperviseDetailAccording',
+    method: 'post',
+    data: query,
+  })
+}
+// (瑁呭娴佺▼)鎵瑰噯鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+export function approverEquipSuperviseDetailAccording(query) {
+  return request({
+    url: '/qualitySupervise/approverEquipSuperviseDetailAccording',
+    method: 'post',
+    data: query,
+  })
+}
+// 鏌ヨ鐩戠潱绾犳澶勭悊
+export function getSuperviseDetailCorrect(query) {
+  return request({
+    url: '/qualitySupervise/getSuperviseDetailCorrect',
+    method: 'get',
+    params: query,
+  })
+}
+// (瑁呭娴佺▼)鏂板鐩戠潱绾犳澶勭悊
+export function addEquipSuperviseDetailCorrect(query) {
+  return request({
+    url: '/qualitySupervise/addEquipSuperviseDetailCorrect',
+    method: 'post',
+    data: query,
+  })
+}
+// (瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊
+export function approveEquipSuperviseDetailCorrect(query) {
+  return request({
+    url: '/qualitySupervise/approveEquipSuperviseDetailCorrect',
+    method: 'post',
+    data: query,
+  })
+}
+// (瑁呭娴佺▼)鎵瑰噯鐩戠潱绾犳澶勭悊
+export function getThisYearTrainingDetailed(query) {
+  return request({
+    url: '/personTraining/getThisYearTrainingDetailed',
+    method: 'get'
+  })
+}
diff --git a/src/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment.js b/src/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment.js
index 2d0d1ee..6709093 100644
--- a/src/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment.js
+++ b/src/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment.js
@@ -54,4 +54,201 @@
   })
 }
 
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-鐢垫簮绋冲畾鎬у垹闄�
+export function deleteLaboratoryFacilityPowerStable(query) {
+  return request({
+    url: '/fePowerStable/deleteLaboratoryFacilityPowerStable',
+    method: 'delete',
+    params: query
+  })
+}
+
+// 鐢垫簮绋冲畾鎬�-娴嬪畾閲� 鏍规嵁鐢垫簮绋冲畾鎬ф煡璇�
+export function getFeMeasuredQuantityService(query) {
+  return request({
+    url: "/fePowerStable/getFeMeasuredQuantityService",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鐢垫簮绋冲畾鎬�-娴嬪畾閲� 瀵煎嚭
+export function exportFePowerStable(query) {
+  return request({
+    url: "/fePowerStable/exportFePowerStable",
+    method: "get",
+    responseType: "blob",
+    params: query,
+  });
+}
+
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴嬫煡璇�
+export function getLightningProtectionDetection(query) {
+  return request({
+    url: '/feLightningProtection/getLightningProtectionDetection',
+    method: 'get',
+    params: query
+  })
+}
+
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴嬫柊澧�/淇敼
+export function addLightningProtectionDetection(query) {
+  return request({
+    url: '/feLightningProtection/addLightningProtectionDetection',
+    method: 'post',
+    data: query,
+    headers: {
+      'Content-Type': 'multipart/form-data' // 蹇呴』璁剧疆涓� multipart
+    }
+  })
+}
+
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴嬪垹闄�
+export function deleteLightningProtectionDetection(query) {
+  return request({
+    url: '/feLightningProtection/deleteLightningProtectionDetection',
+    method: 'delete',
+    params: query
+  })
+}
+
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-闃查浄妫�娴嬪鍑�
+export function exportOfLightningProtectionDetection(query) {
+  return request({
+    url: "/feLightningProtection/exportOfLightningProtectionDetection",
+    method: "get",
+    responseType: "blob",
+    params: query,
+  });
+}
+
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鏌ヨ
+export function getFeLightningProtection(query) {
+  return request({
+    url: '/feIllumination/getFeLightningProtection',
+    method: 'get',
+    params: query
+  })
+}
+
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鏂板/淇敼
+export function addFeLightningProtection(query) {
+  return request({
+    url: '/feIllumination/addFeLightningProtection',
+    method: 'post',
+    data: query,
+  })
+}
+
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鍒犻櫎
+export function deleteFeLightningProtection(query) {
+  return request({
+    url: '/feIllumination/deleteFeLightningProtection',
+    method: 'delete',
+    params: query
+  })
+}
+
+// 鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鏍规嵁鐓у害璁板綍鏌ヨ
+export function getFeIlluminationDetectionArea(query) {
+  return request({
+    url: '/feIllumination/getFeIlluminationDetectionArea',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鐓у害璁板綍琛�-妫�娴嬪尯鍩� 鍒犻櫎
+export function deleteFeIlluminationDetectionArea(query) {
+  return request({
+    url: '/feIllumination/deleteFeIlluminationDetectionArea',
+    method: 'delete',
+    params: query
+  })
+}
+
+// 鐓у害璁板綍琛�-妫�娴嬪尯鍩� 瀵煎嚭
+export function exportFeIllumination(query) {
+  return request({
+    url: "/feIllumination/exportFeIllumination",
+    method: "get",
+    responseType: "blob",
+    params: query,
+  });
+}
+
+// 璇曢獙鍖哄煙-鏌ヨ"
+export function getFeTempHumDate(query) {
+  return request({
+    url: '/feTempHumDate/getFeTempHumDate',
+    method: 'get',
+    params: query
+  })
+}
+
+// 璇曢獙鍖哄煙-鏂板/淇敼
+export function addFeTempHumDate(query) {
+  return request({
+    url: '/feTempHumDate/addFeTempHumDate',
+    method: 'post',
+    data: query,
+  })
+}
+
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴﹁褰曟煡璇�
+export function getFeTempHumRecordPage(query) {
+  return request({
+    url: '/feTempHumDate/getFeTempHumRecordPage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴﹁褰曟柊澧�/淇敼
+export function addFeTempHumRecord(query) {
+  return request({
+    url: '/feTempHumDate/addFeTempHumRecord',
+    method: 'post',
+    data: query,
+  })
+}
+
+// 璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴﹁褰曞垹闄�
+export function deleteFeTempHumRecord(query) {
+  return request({
+    url: '/feTempHumDate/deleteFeTempHumRecord',
+    method: 'delete',
+    params: query
+  })
+}
+
+// 璇曢獙鍖哄煙-鍒犻櫎
+export function deleteFeTempHumDate(query) {
+  return request({
+    url: '/feTempHumDate/deleteFeTempHumDate',
+    method: 'delete',
+    params: query
+  })
+}
+
+// // 璁炬柦鍜岀幆澧冩潯浠惰姹�-娓╂箍搴﹁褰� 瀵煎嚭
+export function exportTemperatureAndHumidityRecords(query) {
+  return request({
+    url: "/feTempHumDate/exportTemperatureAndHumidityRecords",
+    method: "get",
+    responseType: "blob",
+    params: query,
+  });
+}
+
+// 娓╂箍搴︾‘璁�
+export function affirmFeTempHumDate(query) {
+  return request({
+    url: '/feTempHumDate/affirmFeTempHumDate',
+    method: 'post',
+    data: query,
+  })
+}
+
+
 
diff --git a/src/main.js b/src/main.js
index 28883c0..5809760 100644
--- a/src/main.js
+++ b/src/main.js
@@ -66,11 +66,20 @@
 };
 Vue.prototype.javaApi = process.env.VUE_APP_BASE_API
   ? process.env.VUE_APP_BASE_API
-  : "http://192.168.0.170:8002";
+  : "http://192.168.1.36:8002";
 Vue.prototype.checkPermi = checkPermi;
 Vue.prototype.uploadHeader = {
   Authorization: "Bearer " + getToken(),
 };
+// 瑙e喅el-radio-group鍗曢�夋鑷韩鐨刡ug
+Vue.directive('removeAriaHidden', {
+  bind(el, binding) {
+    let ariaEls = el.querySelectorAll('.el-radio__original');
+    ariaEls.forEach((item) => {
+      item.removeAttribute('aria-hidden');
+    });
+  }
+})
 
 // 鍏ㄥ眬缁勪欢鎸傝浇
 Vue.component("DictTag", DictTag);
diff --git a/src/views/CNAS/process/ensureResultsValidity/components/ViewRecord.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue
similarity index 100%
rename from src/views/CNAS/process/ensureResultsValidity/components/ViewRecord.vue
rename to src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue
diff --git a/src/views/CNAS/process/ensureResultsValidity/components/carryOutDialog.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue
similarity index 99%
rename from src/views/CNAS/process/ensureResultsValidity/components/carryOutDialog.vue
rename to src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue
index 205ec80..e7379c8 100644
--- a/src/views/CNAS/process/ensureResultsValidity/components/carryOutDialog.vue
+++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue
@@ -184,7 +184,7 @@
 import {
   addQualityMonitorRatify, addQualityMonitorRatifyOpinion,
   getQualityMonitorRatify
-} from "@/api/cnas/process/ensureResultsValidity/qualityMonitor";
+} from "@/api/cnas/process/ensureResults/qualityMonitor";
 import {selectUserCondition} from "@/api/business/inspectionTask";
 
 export default {
diff --git a/src/views/CNAS/process/ensureResultsValidity/components/detailFormDialog.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue
similarity index 98%
rename from src/views/CNAS/process/ensureResultsValidity/components/detailFormDialog.vue
rename to src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue
index 66aa2b8..3089e9b 100644
--- a/src/views/CNAS/process/ensureResultsValidity/components/detailFormDialog.vue
+++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue
@@ -53,7 +53,7 @@
 import {
   addQualityMonitorDetail,
   updateQualityMonitorDetail
-} from "@/api/cnas/process/ensureResultsValidity/qualityMonitor";
+} from "@/api/cnas/process/ensureResults/qualityMonitor";
 
 export default {
   name: 'detailFormDialog',
diff --git a/src/views/CNAS/process/ensureResultsValidity/components/evaluateDialog.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue
similarity index 99%
rename from src/views/CNAS/process/ensureResultsValidity/components/evaluateDialog.vue
rename to src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue
index 06a9db4..78d618b 100644
--- a/src/views/CNAS/process/ensureResultsValidity/components/evaluateDialog.vue
+++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue
@@ -162,7 +162,7 @@
 import {
   addMonitorEvaluateOpinion, addQualityMonitorEvaluate,
   getQualityMonitorEvaluate
-} from "@/api/cnas/process/ensureResultsValidity/qualityMonitor";
+} from "@/api/cnas/process/ensureResults/qualityMonitor";
 import {selectUserCondition} from "@/api/business/inspectionTask";
 import {selectUserDepartmentLimsName} from "@/api/system/user";
 
diff --git a/src/views/CNAS/process/ensureResultsValidity/index.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue
similarity index 98%
rename from src/views/CNAS/process/ensureResultsValidity/index.vue
rename to src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue
index c7f1316..024cb58 100644
--- a/src/views/CNAS/process/ensureResultsValidity/index.vue
+++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue
@@ -19,7 +19,7 @@
         </div>
       </div>
       <lims-table :tableData="yearTableData" :column="yearColumnData" :page="yearPage" :tableLoading="yearLoading"
-                  height="40vh" @pagination="pagination"
+                  height="40vh" @pagination="pagination" :rowClick="rowClick"
                   key="yearTableData"></lims-table>
     </div>
     <div style="margin-top: 20px">
@@ -182,7 +182,7 @@
   examineQualityMonitor, exportQualityMonitorDetail, exportQualityMonitorEvaluate, exportQualityMonitorRatify,
   pageQualityMonitor, pageQualityMonitorDetail, ratifyFinishReport,
   ratifyQualityMonitor
-} from "@/api/cnas/process/ensureResultsValidity/qualityMonitor";
+} from "@/api/cnas/process/ensureResults/qualityMonitor";
 import {selectUserCondition} from "@/api/performance/class";
 import {mapGetters} from "vuex";
 
@@ -534,6 +534,13 @@
       this.uploading = false;
       if (response.code == 200) {
         this.$message.success('涓婁紶鎴愬姛');
+        this.timer = setTimeout(() => {
+          this.uploadDia = false
+          this.fileList = []
+          this.planYear = ''
+          this.examineUserId = ''
+          this.getYearPlanList()
+        }, 1000)
       } else {
         this.$message.error(response.msg)
       }
@@ -548,13 +555,6 @@
         return;
       }
       this.$refs.upload.submit();
-      this.timer = setTimeout(() => {
-        this.uploadDia = false
-        this.fileList = []
-        this.planYear = ''
-        this.examineUserId = ''
-        this.getYearPlanList()
-      }, 1000)
     },
     // end
     // 瀹℃牳
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue
new file mode 100644
index 0000000..3734365
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue
@@ -0,0 +1,174 @@
+<template>
+  <div>
+    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
+               :title="operationType === 'edit'? '缂栬緫' : '鏂板'"
+               :visible.sync="formDia"
+               width="80%" @close="closeDia">
+      <el-form ref="form" :model="form" :rules="rules" label-width="140px">
+        <el-col :span="12">
+          <el-form-item label="鐩戠潱鏃ユ湡" prop="superviseTime">
+            <el-date-picker
+              v-model="form.superviseTime"
+              clearable
+              format="yyyy-MM"
+              placeholder="閫夋嫨鏃ユ湡"
+              size="small"
+              style="width: 100%"
+              type="month"
+              value-format="yyyy-MM">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鐩戠潱鐩殑" prop="supervisePurpose">
+            <el-input v-model="form.supervisePurpose" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鐩戞帶椤圭洰" prop="superviseProject">
+            <el-input v-model="form.superviseProject" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="琚洃鐫d汉鍛�" prop="supervisedUserId">
+            <el-select @change="usePersonName" v-model="form.supervisedUserId" placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+              <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鐩戠潱鍘熷洜" prop="superviseReason">
+            <el-input v-model="form.superviseReason" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="澶囨敞" prop="remark">
+            <el-input v-model="form.remark" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+					<el-button @click="closeDia">鍙� 娑�</el-button>
+					<el-button :loading="upLoad" type="primary" @click="submitForm">纭� 瀹�</el-button>
+        </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addQualitySuperviseDetail,
+  updateQualitySuperviseDetail
+} from "@/api/cnas/process/ensureResults/qualitySupervise";
+import {selectUserCondition} from "@/api/business/inspectionTask";
+
+export default {
+  name: 'detailFormDialog',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  props: ['superviseId'],
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      form: {
+        qualityMonitorDetailsId: '',
+        superviseTime: '',
+        supervisePurpose: '',
+        superviseProject: '',
+        supervisee: '',
+        supervisedUserId: '',
+        superviseReason: '',
+        remark: '',
+        superviseDetailsId: '',
+      },
+      rules: {
+        superviseTime: [{ required: true, message: '璇疯緭鍏ョ洃鐫f棩鏈�', trigger: 'blur' }],
+        supervisePurpose: [{ required: true, message: '璇疯緭鍏ョ洃鐫g洰鐨�', trigger: 'blur' }],
+        superviseProject: [{ required: false, message: '璇疯緭鍏ョ洃鎺ч」鐩�', trigger: 'blur' }],
+      },
+      upLoad: false,
+      operationType: '',
+      userList: [],
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia(type, row) {
+      this.formDia = true
+      this.operationType = type
+      this.getUserList()
+      if (type === 'edit') {
+        this.searchInfo(row)
+      }
+    },
+    usePersonName (value) {
+      const index = this.userList.findIndex(item => item.id === value)
+      if (index > -1) {
+        this.form.supervisee = this.userList[index].name
+      }
+    },
+    searchInfo (row) {
+      this.form = {...row}
+    },
+    // 鎻愪氦琛ㄥ崟
+    submitForm () {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          if (this.operationType === 'add') {
+            this.handleAdd()
+          } else {
+            this.handleEdit()
+          }
+        }
+      })
+    },
+    // 鎻愪氦鏂板
+    handleAdd () {
+      let entity = this.HaveJson(this.form)
+      entity.superviseId = this.superviseId
+      this.upLoad = true
+      addQualitySuperviseDetail(entity).then(res => {
+        this.upLoad = false
+        this.$message.success('鏂板鎴愬姛')
+        this.closeDia()
+      }).catch(err => {
+        console.log('err---', err);
+        this.upLoad = false
+      })
+    },
+    // 鎻愪氦淇敼
+    handleEdit () {
+      const entity = this.HaveJson(this.form)
+      this.upLoad = true
+      updateQualitySuperviseDetail(entity).then(res => {
+        this.upLoad = false
+        if (res.code === 201) return
+        this.$message.success('淇敼鎴愬姛')
+        this.closeDia()
+      }).catch(err => {
+        console.log('err---', err);
+        this.upLoad = false
+      })
+    },
+    // 鍏抽棴寮规
+    closeDia () {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeDia')
+    },
+    getUserList(){
+      selectUserCondition({ type: 0 }).then((res) => {
+        this.userList = res.data;
+      })
+    },
+  }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog__body {
+  max-height: 720px;
+  overflow-y: auto;
+}
+</style>
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue
new file mode 100644
index 0000000..253a812
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue
@@ -0,0 +1,510 @@
+<template>
+  <div>
+    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
+               :visible.sync="formDia"
+               title="涓嶇鍚堝伐浣滄帶鍒跺崟"
+               width="60%" @close="closeProcessingDia">
+      <el-steps :active="currentStep" align-center finish-status="success">
+        <el-step title="涓嶇鍚堝伐浣滄儏鍐佃褰�"></el-step>
+        <el-step title="鎵瑰噯"></el-step>
+      </el-steps>
+      <div style="height: 510px;overflow-y: auto">
+        <table border="1" cellspacing="10" class="tables">
+          <tr>
+            <td class="td-title">
+              <p>鍙戠敓閮ㄩ棬锛�</p>
+            </td>
+            <td class="td-info">
+              <el-input v-if="currentStep === 0" v-model="form.occurrenceDepartment"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.occurrenceDepartment }}</span>
+            </td>
+            <td class="td-title">
+              <p>閮ㄩ棬璐熻矗浜猴細</p>
+            </td>
+            <td class="td-info">
+              <el-input v-if="currentStep === 0" v-model="form.headDepartment"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.headDepartment }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>涓嶇鍚堝伐浣滃彂鐜伴�斿緞锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-radio-group v-model="form.findWay" v-removeAriaHidden :disabled="currentStep !== 0">
+                <el-radio :label="0">绠$悊璇勫</el-radio>
+                <el-radio :label="1">鍐呴儴瀹℃牳</el-radio>
+                <el-radio :label="2">妫�娴嬭繃绋嬫帶鍒�</el-radio>
+                <el-radio :label="3">鍐呴儴璐ㄩ噺鎺у埗</el-radio>
+                <el-radio :label="4">鍐呴儴鐩戠潱</el-radio>
+                <el-radio :label="5">澶栭儴璇勫</el-radio>
+                <el-radio :label="6">澶栭儴鎶曡瘔</el-radio>
+                <el-radio :label="7">鍏朵粬</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>涓嶇鍚堝伐浣滅殑璇︾粏璁板綍锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="currentStep === 0" v-model="form.recordDetail"
+                        :rows="4"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.recordDetail }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>涓嶇鍚堝伐浣滅殑浠ュ強鍙婃潯娆惧彿锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="currentStep === 0" v-model="form.recordAccording"
+                        :rows="4"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.recordAccording }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>琚洃鐫d汉锛�</p>
+            </td>
+            <td class="td-info">
+<!--              <el-select v-if="currentStep === 0" v-model="form.supervisedUserId" clearable-->
+<!--                         filterable-->
+<!--                         placeholder="璇烽�夋嫨" size="small">-->
+<!--                <el-option v-for="(item,i) in supervisedUserList" :key="i" :label="item.label" :value="item.value">-->
+<!--                </el-option>-->
+<!--              </el-select>-->
+              <span class="td-info1"> {{ form.supervisedUserName }}</span>
+            </td>
+            <td class="td-title">
+              <p><span class="required-span">* </span>琚洃鐫f椂闂达細</p>
+            </td>
+            <td class="td-info">
+              <el-date-picker
+                v-if="currentStep === 0"
+                v-model="form.supervisedTime"
+                format="yyyy-MM-dd"
+                placeholder="閫夋嫨鏃ユ湡"
+                size="small"
+                style="width: 80%"
+                type="date"
+                value-format="yyyy-MM-dd">
+              </el-date-picker>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.supervisedTime }}</span>
+            </td>
+          </tr>
+          <tr v-if="currentStep !== 0">
+            <td class="td-title">
+              <p>鍙戠幇閮ㄩ棬锛�</p>
+            </td>
+            <td class="td-info">
+              {{form.foundDepartment}}
+            </td>
+            <td class="td-title">
+              <p>鏃堕棿锛�</p>
+            </td>
+            <td class="td-info">
+              {{form.recordTime}}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title" v-if="currentStep !== 0">
+              <p>璁板綍浜猴細</p>
+            </td>
+            <td class="td-info" v-if="currentStep !== 0">
+              {{form.recordUserName}}
+            </td>
+            <td class="td-title">
+              <p>璁板綍鏃堕棿锛�</p>
+            </td>
+            <td class="td-info" v-if="currentStep === 0">
+              <el-date-picker
+                v-model="form.recordTime"
+                format="yyyy-MM-dd"
+                placeholder="閫夋嫨鏃ユ湡"
+                size="small"
+                style="width: 80%"
+                type="date"
+                value-format="yyyy-MM-dd">
+              </el-date-picker>
+            </td>
+            <td class="td-info" v-if="currentStep !== 0">
+              {{form.recordTime}}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>娑堥櫎涓嶇鍚堝伐浣滄墍閲囧彇鐨勬帾鏂斤細</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="currentStep === 0" v-model="form.eliminateMeasure"
+                        :rows="5"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.eliminateMeasure }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title" v-if="currentStep !== 0">
+              <p>褰撳墠璐熻矗浜猴細</p>
+            </td>
+            <td class="td-info" v-if="currentStep !== 0">
+              {{form.actionsUserName}}
+            </td>
+            <td class="td-title">
+              <p>澶勭悊鏃堕棿锛�</p>
+            </td>
+            <td class="td-info" v-if="currentStep === 0">
+              <el-date-picker
+                v-model="form.actionsTime"
+                format="yyyy-MM-dd"
+                placeholder="閫夋嫨鏃ユ湡"
+                size="small"
+                style="width: 80%"
+                type="date"
+                value-format="yyyy-MM-dd">
+              </el-date-picker>
+            </td>
+            <td class="td-info" v-if="currentStep !== 0">
+              {{form.actionsTime}}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>鏄惁闇�瑕侀噰鍙栫籂姝f帾鏂斤細</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-radio-group v-model="form.isCorrect" v-removeAriaHidden :disabled="currentStep !== 0">
+                <el-radio :label="0">鍚�</el-radio>
+                <el-radio :label="1">鏄�</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>绾犳鎺柦澶勭悊鍗曡窡韪細</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="currentStep === 0" v-model="form.correctContent"
+                        :rows="5"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.correctContent }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title" v-if="currentStep !== 0">
+              <p>褰撳墠璐熻矗浜猴細</p>
+            </td>
+            <td class="td-info" v-if="currentStep !== 0">
+              {{form.correctUserName}}
+            </td>
+            <td class="td-title">
+              <p>绾犳濉啓鏃堕棿锛�</p>
+            </td>
+            <td class="td-info" v-if="currentStep === 0">
+              <el-date-picker
+                v-model="form.correctTime"
+                format="yyyy-MM-dd"
+                placeholder="閫夋嫨鏃ユ湡"
+                size="small"
+                style="width: 80%"
+                type="date"
+                value-format="yyyy-MM-dd">
+              </el-date-picker>
+            </td>
+            <td v-if="currentStep !== 0" class="td-info">
+              {{form.correctTime}}
+            </td>
+          </tr>
+          <tr>
+            <td rowspan="3">
+              <p>鏄惁閫氱煡瀹㈡埛鍙婂彲鎭㈠宸ヤ綔</p>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>閫氱煡瀹㈡埛锛�</p>
+            </td>
+            <td class="td-info" colspan="2">
+              <el-radio-group v-model="form.notifyCustomer" v-removeAriaHidden :disabled="currentStep !== 0">
+                <el-radio :label="0">鍚�</el-radio>
+                <el-radio :label="1">鏄�</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>鎭㈠宸ヤ綔锛�</p>
+            </td>
+            <td class="td-info" colspan="2">
+              <el-radio-group v-model="form.backToWork" v-removeAriaHidden :disabled="currentStep !== 0">
+                <el-radio :label="0">鍚�</el-radio>
+                <el-radio :label="1">鏄�</el-radio>
+              </el-radio-group>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title" v-if="currentStep !== 0">
+              <p>褰撳墠璐熻矗浜猴細</p>
+            </td>
+            <td class="td-info" v-if="currentStep !== 0">
+              {{form.qualityManagerUserName}}
+            </td>
+            <td class="td-title">
+              <p>璐ㄩ噺璐熻矗浜哄~鍐欐椂闂达細</p>
+            </td>
+            <td class="td-info" v-if="currentStep === 0">
+              <el-date-picker
+                v-model="form.qualityManagerTime"
+                format="yyyy-MM-dd"
+                placeholder="閫夋嫨鏃ユ湡"
+                size="small"
+                style="width: 80%"
+                type="date"
+                value-format="yyyy-MM-dd">
+              </el-date-picker>
+            </td>
+            <td v-if="currentStep !== 0" class="td-info">
+              {{form.qualityManagerTime}}
+            </td>
+          </tr>
+          <tr v-if=" currentStep === 0">
+            <td v-if="currentStep === 0" class="td-title">
+              <p><span class="required-span">* </span>璇烽�夋嫨鎵瑰噯浜猴細</p>
+            </td>
+            <td v-if="currentStep === 0" class="td-info" colspan="3">
+              <el-select v-model="form.approverUserId" clearable filterable
+                         placeholder="璇烽�夋嫨" size="small">
+                <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </td>
+          </tr>
+        </table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeProcessingDia">鍙� 娑�</el-button>
+        <el-button v-if="currentStep !== 2" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addEquipSuperviseDetailAccording, approverEquipSuperviseDetailAccording,
+  getSuperviseDetailAccording
+} from "@/api/cnas/process/ensureResults/qualitySupervise";
+import {selectUserCondition} from "@/api/business/inspectionTask";
+
+export default {
+  name: 'processingSheet',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      currentStep: 0,
+      form: {
+        occurrenceDepartment: '',
+        headDepartment: '',
+        findWay: '',
+        recordDetail: '',
+        recordAccording: '',
+        supervisedUserId: '',
+        supervisedUserName: '',
+        supervisedTime: '',
+        actionsUserName: '',
+        eliminateMeasure: '',
+        // correctUserId: '',
+        correctUserName: '',
+        isCorrect: '',
+        // qualityManagerUserId: '',
+        correctContent: '',
+        superviseDetailsId: '',
+        superviseDetailsAccordingId: '',
+        flowType: '',
+        recordUserName: '',
+        recordTime: '',
+        foundDepartment: '',
+        actionsTime: '',
+        correctTime: '',
+        notifyCustomer: '',
+        backToWork: '',
+        qualityManagerUserName: '',
+        qualityManagerTime: '',
+        approverUserId: '',
+        approveId: '',
+      },
+      editLoad: false,
+      personList: [],
+      supervisedUserList: [],
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia (row) {
+      this.formDia = true
+      this.searchInfo(row)
+      this.form.superviseDetailsId = row.superviseDetailsId
+      this.form.approveId = row.approveId
+      this.getAuthorizedPerson() // 鑾峰彇浜哄憳鍒楄〃
+      // this.getSupervisedUserList() // 鑾峰彇褰撳墠閮ㄩ棬浜哄憳
+    },
+    // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+    searchInfo (row) {
+      this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId
+      getSuperviseDetailAccording({superviseDetailsId: row.superviseDetailsId}).then(res => {
+        this.form.supervisedUserId = res.data.supervisedUserId
+        this.form.supervisedUserName = res.data.supervisedUserName
+        if (res.data.superviseDetailsAccordingId === null) {
+          this.currentStep = 0
+        } else {
+          this.form = res.data
+          if (res.data.isFinish === 0) {
+            if (res.data.approverUserId) {
+              this.currentStep = 1
+            }
+          } else {
+            this.currentStep = 2
+          }
+        }
+      }).catch(err => {
+        console.log('err---', err);
+      })
+    },
+    // 鎻愪氦
+    handleEdit () {
+      if (this.currentStep === 0) {
+        if (this.form.findWay === null) {
+          this.$message.warning('璇烽�夋嫨涓嶇鍚堝伐浣滃彂鐜伴�斿緞')
+          return
+        }
+        if (!this.form.supervisedTime) {
+          this.$message.warning('璇烽�夋嫨琚洃鐫f椂闂�')
+          return
+        }
+        if (this.form.notifyCustomer === null) {
+          this.$message.warning('璇烽�夋嫨鏄惁閫氱煡瀹㈡埛')
+          return
+        }
+        if (this.form.backToWork === null) {
+          this.$message.warning('璇烽�夋嫨鏄惁鎭㈠宸ヤ綔')
+          return
+        }
+        if (this.form.isCorrect === null) {
+          this.$message.warning('璇烽�夋嫨鏄惁闇�瑕侀噰鍙栫籂姝f帾鏂�')
+          return
+        }
+        if (!this.form.approverUserId) {
+          this.$message.warning('璇烽�夋嫨鎵瑰噯浜�')
+          return
+        }
+      }
+      this.editLoad = true
+      this.form.flowType = this.currentStep
+      if (this.currentStep === 0) {
+        addEquipSuperviseDetailAccording(this.form).then(res => {
+          this.editLoad = false
+          if (res.code === 201) return
+          this.$message.success('鎻愪氦鎴愬姛')
+          this.closeProcessingDia()
+        }).catch(err => {
+          console.log('err---', err);
+          this.editLoad = false
+        })
+      } else {
+        approverEquipSuperviseDetailAccording(this.form).then(res => {
+          this.editLoad = false
+          if (res.code === 201) return
+          this.$message.success('鎵瑰噯鎴愬姛')
+          this.closeProcessingDia()
+        }).catch(err => {
+          console.log('err---', err);
+          this.editLoad = false
+        })
+      }
+    },
+    // 鍏抽棴寮规
+    closeProcessingDia () {
+      this.formDia = false
+      this.$emit('closeProcessingDia')
+    },
+    getAuthorizedPerson() {
+      selectUserCondition({ type: 1 }).then((res) => {
+        let data = [];
+        res.data.forEach((a) => {
+          data.push({
+            label: a.name,
+            value: a.id,
+          });
+        });
+        this.personList = data;
+      });
+    },
+    // getSupervisedUserList () {
+    //   this.$axios.get(this.$api.user.selectDepartmentLimsUserList).then(res => {
+    //     let data = []
+    //     res.data.forEach(a => {
+    //       data.push({
+    //         label: a.name,
+    //         value: a.id
+    //       })
+    //     })
+    //     this.supervisedUserList = data
+    //   })
+    // },
+  }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+  margin: 20px auto 50px !important;
+}
+.tables {
+  table-layout: fixed;
+  width: 100%;
+  margin-top: 10px;
+}
+.td-title {
+  height: 40px;
+  width: 170px;
+  text-align: center;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+  padding: 6px;
+}
+.td-info {
+  padding: 6px;
+}
+.td-info1 {
+  display: inline-block;
+  width: 100%;
+  text-align: left;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+}
+</style>
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue
new file mode 100644
index 0000000..b5c9e52
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue
@@ -0,0 +1,426 @@
+<template>
+  <div>
+    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
+               :visible.sync="formDia"
+               title="妫�娴嬪伐浣滅洃鐫h褰曡〃"
+               width="70%" @close="closeRecordsDia">
+      <el-steps :active="currentStep" align-center finish-status="success">
+        <el-step title="瀹炴柦"></el-step>
+        <el-step title="鎵瑰噯"></el-step>
+      </el-steps>
+      <div style="height: 470px;overflow-y: auto">
+        <table border="1" cellspacing="10" class="tables">
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>妫�娴嬩汉鍛橈細</p>
+            </td>
+            <td colspan="2">
+              <el-input v-if="currentStep === 0" v-model="form.testMember"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.testMember }}</span>
+            </td>
+            <td class="td-title">
+              <p><span class="required-span">* </span>鐩戠潱鍛橈細</p>
+            </td>
+            <td colspan="2">
+              <el-select v-if="currentStep === 0" @change="usePersonName" v-model="form.supervisorId" placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+                <el-option v-for="item in recordUserList" :key="item.userId" :label="item.userName" :value="item.userId"></el-option>
+              </el-select>
+              <span v-else class="td-info"> {{ form.supervisor }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>妫�娴嬮」鐩細</p>
+            </td>
+            <td>
+              <el-input v-if="currentStep === 0" v-model="form.testItem"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.testItem }}</span>
+            </td>
+            <td class="td-title">
+              <p><span class="required-span">* </span>鏍峰搧缂栧彿锛�</p>
+            </td>
+            <td>
+              <el-input v-if="currentStep === 0" v-model="form.sampleNumber"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.sampleNumber }}</span>
+            </td>
+            <td class="td-title">
+              <p><span class="required-span">* </span>妫�娴嬫棩鏈燂細</p>
+            </td>
+            <td>
+              <el-input v-if="currentStep === 0" v-model="form.testDate"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.testDate }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>浜哄憳锛�</p>
+            </td>
+            <td colspan="5">
+              <el-input v-if="currentStep === 0" v-model="form.personnel"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.personnel }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>浠櫒璁惧锛�</p>
+            </td>
+            <td colspan="5">
+              <el-input v-if="currentStep === 0" v-model="form.device"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.device }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>宸ヤ綔鐜锛�</p>
+            </td>
+            <td colspan="5">
+              <el-input v-if="currentStep === 0" v-model="form.environment"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.environment }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>鏍峰搧閲囬泦锛�</p>
+            </td>
+            <td colspan="5">
+              <el-input v-if="currentStep === 0" v-model="form.sampleCollection"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.sampleCollection }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>鏍峰搧鐨勫噯澶囷細</p>
+            </td>
+            <td colspan="5">
+              <el-input v-if="currentStep === 0" v-model="form.samplePreparation"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.samplePreparation }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>妫�娴嬫柟娉曪細</p>
+            </td>
+            <td colspan="5">
+              <el-input v-if="currentStep === 0" v-model="form.detectionMethod"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.detectionMethod }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>妫�娴嬭褰曪細</p>
+            </td>
+            <td colspan="5">
+              <el-input v-if="currentStep === 0" v-model="form.inspectionRecord"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.inspectionRecord }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>妫�娴嬫姤鍛婏細</p>
+            </td>
+            <td colspan="5">
+              <el-input v-if="currentStep === 0" v-model="form.examiningReport"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small">
+              </el-input>
+              <span v-else class="td-info"> {{ form.examiningReport }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>鐩戠潱鎯呭喌璇勪环锛�</p>
+            </td>
+            <td colspan="5">
+              <el-input v-if="currentStep === 0" v-model="form.supervisionEvaluation"
+                        :rows="4"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-else class="td-info"> {{ form.supervisionEvaluation }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>涓嶇鍚堝鐞嗘剰瑙侊細</p>
+            </td>
+            <td colspan="5">
+              <el-input v-if="currentStep === 0" v-model="form.handlingAdvice"
+                        :rows="4"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-else class="td-info"> {{ form.handlingAdvice }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td v-if="currentStep === 0" class="td-title">
+              <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ユ壒鍑嗕汉锛�</p>
+            </td>
+            <td v-if="currentStep === 0" colspan="5">
+              <el-select v-model="form.ratifyUserId" clearable filterable
+                         placeholder="璇烽�夋嫨" size="small">
+                <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </td>
+            <td v-if="currentStep === 1" class="td-title">
+              <p>鎵瑰噯璐熻矗浜猴細</p>
+            </td>
+            <td v-if="currentStep === 1" class="td-info" colspan="5">
+              {{form.ratifyUserName}}
+            </td>
+          </tr>
+          <tr v-if="currentStep === 1 || currentStep === 2">
+            <td class="td-title">
+              <p><span class="required-span">* </span>瀹℃壒缁撹锛�</p>
+            </td>
+            <td colspan="2">
+              <el-input v-if="currentStep === 1"
+                        v-model="form.ratifyOpinion"
+                        :rows="4"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-if="currentStep === 2" class="td-info"> {{ form.ratifyOpinion }}</span>
+            </td>
+            <td class="td-title">
+              <p v-if="currentStep === 1">璇烽�夋嫨鏄惁绗﹀悎锛�</p>
+              <p v-if="currentStep === 2">鏄惁绗﹀悎锛�</p>
+            </td>
+            <td colspan="2">
+              <el-radio-group v-if="currentStep === 1" v-model="form.isAccording">
+                <el-radio :label="0">涓嶇鍚�</el-radio>
+                <el-radio :label="1">绗﹀悎</el-radio>
+              </el-radio-group>
+              <span v-if="currentStep === 2" class="td-info"> {{ form.isAccording === 0 ? '涓嶇鍚�' : '绗﹀悎' }}</span>
+            </td>
+          </tr>
+        </table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeRecordsDia">鍙� 娑�</el-button>
+        <el-button v-if="currentStep !== 2" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addSuperviseDetailRecord,
+  addSuperviseRecordOpinion, getRecordUser,
+  getSuperviseDetailRecord
+} from "@/api/cnas/process/ensureResults/qualitySupervise";
+import {selectUserCondition} from "@/api/business/inspectionTask";
+
+export default {
+  name: 'recordsDialog',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      form: {
+        superviseDetailsId: '',
+        superviseDetailsRecordId: '',
+        testMember: '',
+        supervisor: '',
+        supervisorId: '',
+        testItem: '',
+        sampleNumber: '',
+        testDate: '',
+        personnel: '',
+        device: '',
+        environment: '',
+        sampleCollection: '',
+        samplePreparation: '',
+        detectionMethod: '',
+        inspectionRecord: '',
+        examiningReport: '',
+        supervisionEvaluation: '',
+        handlingAdvice: '',
+        ratifyUserId: '',
+        ratifyUserName: '',
+        ratifyOpinion: '',
+        isAccording: '',
+      },
+      currentStep: 0,
+      editLoad: false,
+      personList: [],
+      recordUserList: [],
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia(row) {
+      this.formDia = true
+      this.searchInfo(row)
+      this.getAuthorizedPerson()
+    },
+    usePersonName (value) {
+      const index = this.recordUserList.findIndex(item => item.userId === value)
+      if (index > -1) {
+        this.form.supervisor = this.recordUserList[index].userName
+      }
+    },
+    // 鏌ヨ鐩戠潱璁″垝璇︽儏璁板綍娴佺▼淇℃伅
+    searchInfo (row) {
+      getSuperviseDetailRecord({superviseDetailsId: row.superviseDetailsId}).then(res => {
+        // 鏈塻uperviseDetailsRecordId璇存槑鎻愪氦杩囪褰�
+        if (res.data.superviseDetailsRecordId) {
+          // 鏄惁缁撴潫0:鏈粨鏉�, 1:宸茬粨鏉�
+          if (res.data.isFinish === 0) {
+            this.currentStep = 1
+          } else if (res.data.isFinish === 1) {
+            this.currentStep = 2
+          }
+        } else {
+          this.currentStep = 0
+        }
+        this.form = res.data
+        this.form.superviseDetailsId = row.superviseDetailsId
+        this.getRecordUser()
+      }).catch(err => {
+        console.log('err---', err);
+      })
+    },
+    // 鎻愪氦娴佺▼
+    handleEdit () {
+      if (!this.form.testMember || !this.form.supervisor || !this.form.testItem || !this.form.sampleNumber
+        || !this.form.testDate) {
+        this.$message.warning('璇峰~鍐欏畬鏁�')
+        return
+      }
+      if (this.currentStep === 0) {
+        this.addInfo()
+      } else {
+        this.editInfo()
+      }
+    },
+    // 鎻愪氦璁板綍
+    addInfo () {
+      if (!this.form.ratifyUserId) {
+        this.$message.warning('璇烽�夋嫨涓嬩竴姝ユ壒鍑嗕汉')
+        return
+      }
+      this.editLoad = true
+      addSuperviseDetailRecord(this.form).then(res => {
+        this.editLoad = false
+        this.$message.success('鎿嶄綔鎴愬姛')
+        this.closeRecordsDia()
+      }).catch(err => {
+        console.log('err---', err);
+        this.editLoad = false
+      })
+    },
+    // 鎻愪氦鎵瑰噯
+    editInfo () {
+      if (!this.form.ratifyOpinion) {
+        this.$message.warning('璇峰~鍐欏鎵规剰瑙�')
+        return
+      }
+      if (this.form.isAccording === null) {
+        this.$message.warning('璇烽�夋嫨鏄惁绗﹀悎')
+        return
+      }
+      this.editLoad = true
+      addSuperviseRecordOpinion(this.form).then(res => {
+        this.editLoad = false
+        this.$message.success('鎿嶄綔鎴愬姛')
+        this.closeRecordsDia()
+      }).catch(err => {
+        console.log('err---', err);
+        this.editLoad = false
+      })
+    },
+    // 鍏抽棴寮规
+    closeRecordsDia () {
+      this.formDia = false
+      this.$emit('closeRecordsDia')
+    },
+    getAuthorizedPerson() {
+      selectUserCondition({ type: 1 }).then((res) => {
+        let data = [];
+        res.data.forEach((a) => {
+          data.push({
+            label: a.name,
+            value: a.id,
+          });
+        });
+        this.personList = data;
+      });
+    },
+    getRecordUser () {
+      getRecordUser({superviseDetailsId: this.form.superviseDetailsId}).then(res => {
+        this.recordUserList = res.data
+      })
+    },
+  }
+};
+</script>
+
+<style scoped>
+.tables {
+  table-layout: fixed;
+  width: 100%;
+  margin-top: 10px;
+}
+.td-title {
+  height: 40px;
+  text-align: center;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+  padding: 6px;
+}
+.td-info {
+  text-align: center;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+}
+.tables td {
+  height: 40px;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+  padding: 6px;
+}
+</style>
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue
new file mode 100644
index 0000000..0f650e5
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue
@@ -0,0 +1,460 @@
+<template>
+  <div>
+    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
+               :visible.sync="formDia"
+               title="绾犳鎺柦澶勭悊鍗�"
+               width="60%" @close="closeRectifyDia">
+      <el-steps :active="currentStep" align-center finish-status="success">
+        <el-step title="涓嶅悎鏍兼垨鍋忕浜嬪疄鐨勬弿杩�" @click.native="setStep(0)"></el-step>
+        <el-step title="鎵瑰噯" @click.native="setStep(2)"></el-step>
+      </el-steps>
+      <div style="height: 510px;overflow-y: auto">
+        <table border="1" cellspacing="10" class="tables">
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>鍩硅璁″垝锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-select v-model="form.personTrainingDetailedId" clearable filterable
+                         style="width: 100%"
+                         :disabled="currentStep !== 0"
+                         placeholder="璇烽�夋嫨" size="small">
+                <el-option v-for="item in yearTrainingDetailed" :key="item.id" :label="item.trainingObjectives" :value="item.id">
+                </el-option>
+              </el-select>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>涓嶅悎鏍兼垨鍋忕浜嬪疄鐨勬弿杩帮細</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="currentStep === 0" v-model="form.raiseResult"
+                        :rows="2"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.raiseResult }}</span>
+            </td>
+          </tr>
+<!--          <tr v-if="showStep === 0">-->
+<!--            <td v-if="currentStep === 0" class="td-title">-->
+<!--              <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p>-->
+<!--            </td>-->
+<!--            <td v-if="currentStep === 0" class="td-info" colspan="3">-->
+<!--              <el-select v-model="form.causeUserId" clearable filterable-->
+<!--                         placeholder="璇烽�夋嫨" size="small">-->
+<!--                <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">-->
+<!--                </el-option>-->
+<!--              </el-select>-->
+<!--            </td>-->
+<!--          </tr>-->
+          <tr v-if="currentStep !== 0">
+            <td class="td-title">
+              <p>鎻愬嚭浜猴細</p>
+            </td>
+            <td class="td-info">
+              {{form.raiseUserName}}
+            </td>
+            <td class="td-title">
+              <p>鎻愬嚭閮ㄩ棬锛�</p>
+            </td>
+            <td class="td-info">
+              {{form.raiseDepartment}}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>鎻愬嚭鏃ユ湡锛�</p>
+            </td>
+            <td class="td-info" v-if="currentStep === 0">
+              <el-date-picker
+                v-model="form.raiseTime"
+                format="yyyy-MM-dd"
+                placeholder="閫夋嫨鏃ユ湡"
+                size="small"
+                style="width: 80%"
+                type="date"
+                value-format="yyyy-MM-dd">
+              </el-date-picker>
+            </td>
+            <td class="td-info" colspan="3" v-if="currentStep !== 0">
+              {{form.raiseTime}}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>鍘熷洜鍒嗘瀽锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="currentStep === 0" v-model="form.causeResult"
+                        :rows="2"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.causeResult }}</span>
+            </td>
+          </tr>
+          <tr v-if="currentStep !== 0">
+            <td class="td-title">
+              <p>鍘熷洜鍒嗘瀽浜猴細</p>
+            </td>
+            <td class="td-info">
+              {{form.causeUserName}}
+            </td>
+            <td class="td-title">
+              <p>璐d换閮ㄩ棬锛�</p>
+            </td>
+            <td class="td-info">
+              {{form.causeDepartment}}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>鍘熷洜鍒嗘瀽鏃ユ湡锛�</p>
+            </td>
+            <td class="td-info" colspan="3" v-if="currentStep === 0">
+              <el-date-picker
+                v-model="form.causeTime"
+                format="yyyy-MM-dd"
+                placeholder="閫夋嫨鏃ユ湡"
+                size="small"
+                style="width: 80%"
+                type="date"
+                value-format="yyyy-MM-dd">
+              </el-date-picker>
+            </td>
+            <td class="td-info" colspan="3" v-if="currentStep !== 0">
+              {{form.causeTime}}
+            </td>
+          </tr>
+<!--          <tr v-if="showStep === 0">-->
+<!--            <td v-if="currentStep === 0" class="td-title">-->
+<!--              <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p>-->
+<!--            </td>-->
+<!--            <td v-if="currentStep === 0" class="td-info" colspan="3">-->
+<!--              <el-select v-model="form.correctUserId" clearable filterable-->
+<!--                         placeholder="璇烽�夋嫨" size="small">-->
+<!--                <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">-->
+<!--                </el-option>-->
+<!--              </el-select>-->
+<!--            </td>-->
+<!--          </tr>-->
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>绾犳鎺柦锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="currentStep === 0" v-model="form.correctResult"
+                        :rows="2"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.correctResult }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>鎻愬嚭瑕佹眰閮ㄩ棬纭锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="currentStep === 0" v-model="form.raiseDepartmentAffirm"
+                        :rows="2"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.raiseDepartmentAffirm }}</span>
+            </td>
+          </tr>
+          <tr v-if="currentStep !== 0">
+            <td class="td-title">
+              <p>绾犳浜猴細</p>
+            </td>
+            <td class="td-info">
+              {{form.correctUserName}}
+            </td>
+            <td class="td-title">
+              <p>璐d换閮ㄩ棬锛�</p>
+            </td>
+            <td class="td-info">
+              {{form.correctDepartment}}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>绾犳鏃ユ湡锛�</p>
+            </td>
+            <td class="td-info" v-if="currentStep === 0">
+              <el-date-picker
+                v-model="form.correctTime"
+                format="yyyy-MM-dd"
+                placeholder="閫夋嫨鏃ユ湡"
+                size="small"
+                style="width: 80%"
+                type="date"
+                value-format="yyyy-MM-dd">
+              </el-date-picker>
+            </td>
+            <td class="td-info" colspan="3" v-if="currentStep !== 0">
+              {{form.correctTime}}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p><span class="required-span">* </span>瀹炴柦楠岃瘉缁撴灉锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="currentStep === 0" v-model="form.validationResult"
+                        :rows="2"
+                        placeholder="璇疯緭鍏ュ唴瀹�"
+                        size="small"
+                        type="textarea">
+              </el-input>
+              <span v-if="currentStep !== 0" class="td-info1"> {{ form.validationResult }}</span>
+            </td>
+          </tr>
+          <tr v-if="currentStep !== 0">
+            <td class="td-title">
+              <p>楠岃瘉浜猴細</p>
+            </td>
+            <td class="td-info">
+              {{form.validationUserName}}
+            </td>
+            <td class="td-title">
+              <p>璐d换閮ㄩ棬锛�</p>
+            </td>
+            <td class="td-info">
+              {{form.validationDepartment}}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>楠岃瘉鏃ユ湡锛�</p>
+            </td>
+            <td class="td-info" v-if="currentStep === 0">
+              <el-date-picker
+                v-model="form.validationTime"
+                format="yyyy-MM-dd"
+                placeholder="閫夋嫨鏃ユ湡"
+                size="small"
+                style="width: 80%"
+                type="date"
+                value-format="yyyy-MM-dd">
+              </el-date-picker>
+            </td>
+            <td class="td-info" colspan="3" v-if="currentStep !== 0">
+              {{form.validationTime}}
+            </td>
+          </tr>
+          <tr v-if="currentStep === 0">
+            <td v-if="currentStep === 0" class="td-title">
+              <p><span class="required-span">* </span>璇烽�夋嫨鎵瑰噯浜猴細</p>
+            </td>
+            <td v-if="currentStep === 0" class="td-info" colspan="3">
+              <el-select v-model="form.approverUserId" clearable filterable
+                         placeholder="璇烽�夋嫨" size="small">
+                <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </td>
+          </tr>
+        </table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeRectifyDia">鍙� 娑�</el-button>
+        <el-button v-if="currentStep !== 2" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addEquipSuperviseDetailCorrect, approveEquipSuperviseDetailCorrect,
+  getSuperviseDetailCorrect
+} from "@/api/cnas/process/ensureResults/qualitySupervise";
+import {selectUserCondition} from "@/api/business/inspectionTask";
+import {getThisYearTrainingDetailed} from "@/api/cnas/systemManagement/correctiveAction";
+
+export default {
+  name: 'rectifyDialog',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      currentStep: 0,
+      showStep: 0,
+      form: {
+        superviseDetailsId: '',
+        raiseResult: '',
+        vdeRaiseResult: '',
+        // causeUserId: '',
+        raiseUserName: '',
+        raiseDepartment: '',
+        raiseTime: '',
+        causeResult: '',
+        causeUserName: '',
+        causeDepartment: '',
+        causeTime: '',
+        // correctUserId: '',
+        correctResult: '',
+        raiseDepartmentAffirm: '',
+        correctUserName: '',
+        correctDepartment: '',
+        correctTime: '',
+        approverUserId: '',
+        validationResult: '',
+        validationUserName: '',
+        validationDepartment: '',
+        validationTime: '',
+        superviseDetailsCorrectId: '',
+        approveId: '',
+        personTrainingDetailedId: '',
+      },
+      editLoad: false,
+      personList: [],
+      yearTrainingDetailed: [],
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia (row) {
+      this.formDia = true
+      this.searchInfo(row)
+      this.form.superviseDetailsId = row.superviseDetailsId
+      this.form.approveId = row.approveId
+      this.getAuthorizedPerson() // 鑾峰彇浜哄憳鍒楄〃
+      this.getYearTrainingDetailed() // 鑾峰彇鍩硅璁″垝
+    },
+    // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+    searchInfo (row) {
+      this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId
+      getSuperviseDetailCorrect({superviseDetailsId: row.superviseDetailsId}).then(res => {
+        if (res.data.superviseDetailsCorrectId === null) {
+          this.showStep = 0
+          this.currentStep = 0
+        } else {
+          this.form = res.data
+          if (res.data.isFinish === 0) {
+            if (res.data.approverUserId) {
+              this.showStep = 1
+              this.currentStep = 1
+            }
+          } else {
+            this.currentStep = 2
+            this.showStep = 1
+          }
+        }
+      }).catch(err => {
+        console.log('err---', err);
+      })
+    },
+    // 鎻愪氦
+    handleEdit () {
+      if (this.currentStep === 0) {
+        if (!this.form.raiseResult) {
+          this.$message.warning('璇峰~鍐欎笉鍚堟牸鎻忚堪')
+          return
+        }
+        if (!this.form.causeResult) {
+          this.$message.warning('璇峰~鍐欏師鍥犲垎鏋�')
+          return
+        }
+        if (!this.form.correctResult) {
+          this.$message.warning('璇峰~鍐欑籂姝f帾鏂�')
+          return
+        }
+        if (!this.form.validationResult) {
+          this.$message.warning('璇峰~鍐欏疄鏂介獙璇佺粨鏋�')
+          return
+        }
+      }
+      this.editLoad = true
+      this.form.flowType = this.currentStep
+      if (this.currentStep === 0) {
+        addEquipSuperviseDetailCorrect(this.form).then(res => {
+          this.editLoad = false
+          if (res.code === 201) return
+          this.$message.success('鎻愪氦鎴愬姛')
+          this.closeRectifyDia()
+        }).catch(err => {
+          console.log('err---', err);
+          this.editLoad = false
+        })
+      } else {
+        approveEquipSuperviseDetailCorrect(this.form).then(res => {
+          this.editLoad = false
+          if (res.code === 201) return
+          this.$message.success('鎵瑰噯鎴愬姛')
+          this.closeRectifyDia()
+        }).catch(err => {
+          console.log('err---', err);
+          this.editLoad = false
+        })
+      }
+    },
+    // 鍏抽棴寮规
+    closeRectifyDia () {
+      this.formDia = false
+      this.$emit('closeRectifyDia')
+    },
+    setStep (step) {
+      this.showStep = step
+    },
+    getAuthorizedPerson() {
+      selectUserCondition({ type: 1 }).then((res) => {
+        let data = [];
+        res.data.forEach((a) => {
+          data.push({
+            label: a.name,
+            value: a.id,
+          });
+        });
+        this.personList = data;
+      });
+    },
+    getYearTrainingDetailed () {
+      getThisYearTrainingDetailed().then(res => {
+        this.yearTrainingDetailed = res.data
+      })
+    },
+  }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+  margin: 20px auto 50px !important;
+}
+.tables {
+  table-layout: fixed;
+  width: 100%;
+  margin-top: 10px;
+}
+.td-title {
+  height: 40px;
+  width: 170px;
+  text-align: center;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+  padding: 6px;
+}
+.td-info {
+  padding: 6px;
+}
+.td-info1 {
+  display: inline-block;
+  width: 100%;
+  text-align: left;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+}
+</style>
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue
new file mode 100644
index 0000000..f25e0a1
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue
@@ -0,0 +1,716 @@
+<template>
+  <!--  7.7璐ㄩ噺鐩戠潱璁″垝-->
+  <div class="app-container">
+    <div class="table-card">
+      <div style="display: flex;justify-content: space-between;">
+        <el-form :model="yearForm" ref="yearForm" size="small" :inline="true">
+          <el-form-item label="璁″垝鍚嶇О" prop="superviseName">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable
+                      v-model="yearForm.superviseName"
+                      @keyup.enter.native="getYearPlanList"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button icon="el-icon-refresh" size="mini" @click="clearYear">閲� 缃�</el-button>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="getYearPlanList">鏌� 璇�</el-button>
+          </el-form-item>
+        </el-form>
+        <div>
+          <el-button size="small" type="primary" @click="record">瀵煎叆</el-button>
+        </div>
+      </div>
+      <lims-table :tableData="yearTableData" :column="yearColumnData" :page="yearPage" :tableLoading="yearLoading"
+                  height="40vh" @pagination="pagination" :rowClick="rowClick"
+                  key="yearTableData"></lims-table>
+    </div>
+    <div style="margin-top: 20px">
+      <div style="display: flex;justify-content: space-between;">
+        <el-form :model="yearDetailForm" ref="yearDetailForm" size="small" :inline="true">
+          <el-form-item>
+            <el-radio-group v-model="yearDetailForm.causeType" @change="getYearDetailPlanList" size="small">
+              <el-radio-button :label="1">瀹氭湡鐩戠潱</el-radio-button>
+              <el-radio-button :label="2">鍔ㄦ�佺洃鐫�</el-radio-button>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="鐩戞帶鐩殑" prop="supervisePurpose">
+            <el-input v-model="yearDetailForm.supervisePurpose" placeholder="璇疯緭鍏�" size="small"></el-input>
+          </el-form-item>
+          <el-form-item label="鐩戞帶椤圭洰" prop="superviseProject">
+            <el-input v-model="yearDetailForm.superviseProject" placeholder="璇疯緭鍏�" size="small"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button icon="el-icon-refresh" size="mini" @click="clearDetail">閲� 缃�</el-button>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="getYearDetailPlanList">鏌� 璇�</el-button>
+          </el-form-item>
+        </el-form>
+        <div>
+          <el-button size="small" type="primary" @click="showDialog('add')">鏂板</el-button>
+        </div>
+      </div>
+      <lims-table :tableData="yearDetailTableData" :column="yearDetailColumnData" :page="yearDetailPage" :tableLoading="yearDetailLoading"
+                  height="40vh" @pagination="pagination1"
+                  key="yearDetailTableData"></lims-table>
+    </div>
+    <!--鏂板淇敼寮规-->
+    <detail-form-dialog v-if="formDia" ref="formDia" :superviseId="superviseId" @closeDia="closeDia"></detail-form-dialog>
+    <!--璁板綍娴佺▼寮规-->
+    <records-dialog v-if="recordsDia" ref="recordsDia" :superviseId="superviseId" @closeRecordsDia="closeRecordsDia"></records-dialog>
+    <!--涓嶇鍚堝鐞嗘祦绋嬪脊妗�-->
+    <processing-sheet v-if="processingDia" ref="processingDia" :superviseId="superviseId" @closeProcessingDia="closeProcessingDia"></processing-sheet>
+    <!--绾犳澶勭悊娴佺▼寮规-->
+    <rectify-dialog-new v-if="rectifyDia" ref="rectifyDia" :superviseId="superviseId" @closeProcessingDia="closeRectifyDia"></rectify-dialog-new>
+    <el-dialog :visible.sync="ratifyDialog" title="鎵瑰噯" width="30%" @close="closeRatifyDia">
+      <span>
+        鎵瑰噯澶囨敞锛�
+        <el-input v-model="ratifyInfo.ratifyRemark" type="textarea"></el-input>
+      </span>
+      <span slot="footer" class="dialog-footer">
+        <el-button :loading="ratifyLoading" @click="handleRatify(0)">涓嶆壒鍑�</el-button>
+        <el-button :loading="ratifyLoading" type="primary" @click="handleRatify(1)">鎵� 鍑�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      :visible.sync="downloadDialog"
+      title="瀵煎嚭"
+      width="600px">
+          <span>
+            <el-button plain type="primary" @click="controlDown">璁板綍鍗曞鍑�</el-button>
+            <el-button plain type="primary" @click="processingDown">澶勭悊鍗曞鍑�</el-button>
+            <el-button plain type="primary" @click="supervisoryDown">绾犳鍗曞鍑�</el-button>
+          </span>
+      <span slot="footer" class="dialog-footer">
+            <el-button @click="downloadDialog = false">鍙� 娑�</el-button>
+          </span>
+    </el-dialog>
+    <!--瀵煎叆璁″垝-->
+    <el-dialog :visible.sync="uploadDia" title="鏁版嵁瀵煎叆" width="500px"
+               :close-on-click-modal="false" :close-on-press-escape="false">
+      <div style="display: flex; align-items: center;">
+        <span style="width: 80px">骞翠唤锛�</span>
+        <el-date-picker
+          v-model="superviseYear"
+          type="year"
+          value-format="yyyy"
+          clearable
+          size="small"
+          format="yyyy"
+          placeholder="閫夋嫨骞�">
+        </el-date-picker>
+        <span  style="width: 110px">鐩戠潱鍛橈細</span>
+        <el-select v-model="recordUserIds" placeholder="璇烽�夋嫨" size="small"
+                   @change="splitList"
+                   :multiple-limit="2" filterable multiple style="width: 100%">
+          <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </div>
+      <div style="display: flex;align-items: center;margin: 10px 0">
+        <div style="width: 60px">鎵瑰噯浜猴細</div>
+        <el-select v-model="ratifyUserId" clearable
+                   filterable size="small" style="width: 50%;">
+          <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id">
+          </el-option>
+        </el-select>
+      </div>
+      <div style="margin: 0 auto;">
+        <el-upload ref="upload1" :action="action" :auto-upload="false" :file-list="fileList" :headers="uploadHeader" :limit="1"
+                   accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
+                   :on-change="beforeUpload" :on-error="onError" :on-success="handleSuccessUp" drag
+                   :data="{recordUserIds: recordUserIds1, superviseYear: superviseYear, ratifyUserId: ratifyUserId}"
+                   name="file">
+          <i class="el-icon-upload"></i>
+          <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+        </el-upload>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeUploadDia">鍙� 娑�</el-button>
+        <el-button :loading="uploading" type="primary" @click="submitUpload()">涓� 浼�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import DetailFormDialog from './components/detailFormDialog.vue';
+import RecordsDialog from './components/recordsDialog.vue';
+import ProcessingSheet from './components/processingSheet.vue';
+import RectifyDialogNew from './components/rectifyDialogNew.vue';
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+  delQualitySupervise, delQualitySuperviseDetail,
+  exportQualitySupervise, exportSuperviseDetailRecord,
+  pageQualitySupervise, pageQualitySuperviseDetail,
+  ratifyQualitySupervise, superviseDetailAccordingExport,
+  exportSuperviseDetaillCorrect
+} from "@/api/cnas/process/ensureResults/qualitySupervise";
+import {selectUserCondition} from "@/api/business/inspectionTask";
+import {mapGetters} from "vuex";
+
+export default {
+  name: 'a7-quality-control-plan',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {limsTable, RectifyDialogNew, ProcessingSheet, RecordsDialog, DetailFormDialog},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      yearForm: {
+        superviseName: '',
+      },
+      yearPage: {
+        current: 1,
+        size: 20,
+        total: 0
+      },
+      yearColumnData: [
+        {
+          label: '璁″垝鍚嶇О',
+          prop: 'superviseName',
+          minWidth: '150px'
+        }, {
+          label: '缂栧埗浜�',
+          prop: 'writeUserName',
+          minWidth: '100'
+        }, {
+          label: '缂栧埗鏃ユ湡',
+          prop: 'writeTime',
+          minWidth: '160'
+        }, {
+          dataType: 'tag',
+          label: '鎵瑰噯鐘舵��',
+          prop: 'ratifyStatus',
+          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;
+            }
+          }
+        },{
+          label: '鎵瑰噯鍐呭',
+          prop: 'ratifyRemark',
+          minWidth: '100'
+        },{
+          label: '鎵瑰噯浜�',
+          prop: 'ratifyUserName',
+          minWidth: '100'
+        },{
+          label: '鎵瑰噯鏃ユ湡',
+          prop: 'ratifyTime',
+          minWidth: '160'
+        }, {
+          dataType: 'action',
+          minWidth: '170',
+          label: '鎿嶄綔',
+          fixed: 'right',
+          operation: [
+            {
+              name: '鎵瑰噯',
+              type: 'text',
+              disabled: (row) => {
+                if (row.ratifyStatus === 1 || this.userId != row.ratifyUserId) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+              clickFun: (row) => {
+                this.approvalPlan(row)
+              }
+            },
+            {
+              name: '瀵煎嚭',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              },
+              disabled: (row) => {
+                if (row.ratifyStatus !== 1) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delPlan(row)
+              },
+              disabled: (row) => {
+                if (row.ratifyStatus === 1) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            }
+          ]
+        }],
+      yearTableData: [],  // 骞磋〃
+      yearLoading: false,
+      yearDetailForm: {
+        supervisePurpose: '',
+        superviseProject: '',
+        causeType: 1
+      },
+      yearDetailColumnData: [
+        {
+          label: '鐩戠潱鏃ユ湡',
+          prop: 'superviseTime',
+          minWidth: '150px'
+        }, {
+          label: '鐩戠潱鐩殑',
+          prop: 'supervisePurpose',
+          minWidth: '150px',
+          showOverflowTooltip: true,
+        }, {
+          label: '鐩戞帶椤圭洰',
+          prop: 'superviseProject',
+          minWidth: '150px'
+        }, {
+          label: '琚洃鐫d汉鍛�',
+          prop: 'supervisee',
+          minWidth: '150px'
+        }, {
+          label: '鐩戠潱鍘熷洜',
+          prop: 'superviseReason',
+          minWidth: '150px'
+        },{
+          label: '澶囨敞',
+          prop: 'remark',
+          minWidth: '150px'
+        },{
+          dataType: 'action',
+          width: '260',
+          label: '鎿嶄綔',
+          fixed: 'right',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.showDialog('edit', row)
+              }
+            },
+            {
+              name: '璁板綍',
+              type: 'text',
+              clickFun: (row) => {
+                this.records(row)
+              }
+            },
+            {
+              name: '澶勭悊',
+              type: 'text',
+              clickFun: (row) => {
+                this.processing(row)
+              },
+              disabled: (row) => {
+                if (row.isAccording === 1 || row.isAccording === null) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '绾犳',
+              type: 'text',
+              clickFun: (row) => {
+                this.rectify(row)
+              },
+              disabled: (row) => {
+                if (row.isAccording === 1 || row.isAccording === null || row.isCorrect === null || row.isCorrect === 0) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '瀵煎嚭',
+              type: 'text',
+              clickFun: (row) => {
+                this.openDownloadDia(row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delYearPlanDetail(row)
+              }
+            }
+          ]
+        }
+      ],
+      yearDetailTableData: [], // 骞存槑缁嗚〃
+      yearDetailLoading: false,
+      yearDetailPage: {
+        current: 1,
+        size: 20,
+        total: 0
+      },
+      superviseId: '',
+      formDia: false,
+      recordsDia: false,
+      processingDia: false,
+      rectifyDia: false,
+      ratifyDialog: false,
+      ratifyLoading: false,
+      ratifyInfo: {},
+      downloadDialog: false,
+      download: {},
+      uploadDia: false,
+      uploading: false,
+      fileList: [],
+      userList: [],
+      recordUserIds: [],
+      recordUserIds1: '',
+      superviseYear: '',
+      ratifyUserId: '',
+    };
+  },
+  mounted() {
+    this.getYearPlanList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ骞村害璁″垝琛�
+    getYearPlanList () {
+      const entity = {
+        superviseName: this.yearForm.superviseName,
+      }
+      const page = this.yearPage
+      this.yearLoading = true
+      pageQualitySupervise({ ...entity, ...page }).then(res => {
+        this.yearLoading = false
+        this.yearTableData = res.data.records
+        this.yearPage.total = res.data.total
+        if (this.yearTableData.length > 0) {
+          this.rowClick(this.yearTableData[0])
+        }
+      }).catch(err => {
+        console.log('err---', err);
+        this.yearLoading = false
+      })
+    },
+    clearYear () {
+      this.yearForm.superviseName = ''
+      this.getYearPlanList()
+    },
+    pagination({ page, limit }) {
+      this.yearPage.current = page;
+      this.yearPage.size = limit;
+      this.getYearPlanList();
+    },
+    pagination1({ page, limit }) {
+      this.yearDetailPage.current = page;
+      this.yearDetailPage.size = limit;
+      this.getYearPlanList();
+    },
+    // 瀵煎叆娴佺▼
+    beforeUpload(file) {
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload1.clearFiles()
+        return false;
+      }
+    },
+    onError(err, file, fileList) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload1.clearFiles()
+    },
+    handleSuccessUp(response) {
+      this.uploading = false;
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+        this.recordUserIds = []
+        this.superviseYear = ''
+        this.fileList = []
+        this.timer = setTimeout(() => {
+          this.closeUploadDia()
+        }, 1000)
+      }
+    },
+    splitList (val) {
+      const string = this.HaveJson(val)
+      this.recordUserIds1 = string.join(',');
+      console.log(this.recordUserIds1)
+    },
+    // 鎻愪氦瀵煎叆
+    submitUpload() {
+      if (!this.superviseYear) {
+        this.$message.warning('璇烽�夋嫨骞翠唤')
+        return;
+      }
+      if (this.recordUserIds.length === 0) {
+        this.$message.warning('璇烽�夋嫨鐩戠潱鍛�')
+        return;
+      }
+      if (!this.ratifyUserId) {
+        this.$message.warning('璇烽�夋嫨鎵瑰噯浜�')
+        return;
+      }
+      this.uploading = true
+      this.$refs.upload1.submit();
+    },
+    // 鍏抽棴瀵煎叆寮规
+    closeUploadDia () {
+      this.uploadDia = false;
+      this.recordUserIds = []
+      this.ratifyUserId = ''
+      this.superviseYear = ''
+      this.getYearPlanList()
+    },
+    // 鎵撳紑鎶ュ憡寮规
+    record (row) {
+      this.uploadDia = true
+      this.getUserList()
+    },
+    getUserList(){
+      selectUserCondition({ type: 0 }).then((res) => {
+        this.userList = res.data;
+      })
+    },
+    // 鎵瑰噯
+    approvalPlan (row) {
+      this.ratifyDialog = true
+      this.ratifyInfo = row
+    },
+    handleRatify (ratifyStatus) {
+      // 鎵瑰噯鐘舵�� , 0 涓嶉�氳繃, 1閫氳繃
+      this.ratifyInfo.ratifyStatus = ratifyStatus
+      this.ratifyLoading = true
+      ratifyQualitySupervise(this.ratifyInfo).then(res => {
+        this.ratifyLoading = false
+        this.$message.success('鎿嶄綔鎴愬姛')
+        this.closeRatifyDia()
+      }).catch(err => {
+        console.log('err---', err);
+        this.ratifyLoading = false
+      })
+    },
+    closeRatifyDia () {
+      this.ratifyDialog = false
+      this.ratifyInfo.ratifyRemark = ''
+      this.getYearPlanList()
+    },
+    // 瀵煎嚭
+    handleDown (row) {
+      exportQualitySupervise({superviseId: row.superviseId}).then(res => {
+        try {
+          this.outLoading = false
+          const blob = new Blob([res],{ type: 'application/msword' });
+          this.$download.saveAs(blob, row.superviseName + '.docx')
+          this.$message.success('瀵煎嚭鎴愬姛')
+        } catch (error) {
+          console.error('鍒涘缓Blob瀵硅薄鏃跺嚭閿�:', error);
+        }
+      })
+    },
+    // 鍒犻櫎杩涘害璁″垝琛�
+    delPlan (row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.yearLoading = true
+        delQualitySupervise({superviseId: row.superviseId}).then(res => {
+          this.yearLoading = false
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.getYearPlanList()
+        }).catch(err => {
+          this.yearLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 骞村害璁″垝琛ㄦ牸锛岀偣鍑昏鏁版嵁鍚庡埛鏂拌鎯�
+    rowClick(row) {
+      this.superviseId = row.superviseId
+      this.getYearDetailPlanList()
+    },
+    // 鑾峰彇骞村害鏄庣粏琛�
+    getYearDetailPlanList () {
+      const entity = {
+        superviseId: this.superviseId,
+        supervisePurpose: this.yearDetailForm.supervisePurpose,
+        superviseProject: this.yearDetailForm.superviseProject,
+        causeType: this.yearDetailForm.causeType,
+      }
+      const page = this.yearDetailPage
+      this.yearDetailLoading = true
+      pageQualitySuperviseDetail({ ...entity, ...page }).then(res => {
+        this.yearDetailLoading = false
+        this.yearDetailTableData = res.data.records
+        this.yearDetailPage.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.yearDetailLoading = false
+      })
+    },
+    // 閲嶇疆鏄庣粏琛�
+    clearDetail () {
+      this.yearDetailForm = {
+        supervisePurpose: '',
+        superviseProject: ''
+      }
+      this.getYearDetailPlanList()
+    },
+    // 鎵撳紑骞村害鏄庣粏鏂板銆佷慨鏀瑰脊妗�
+    showDialog (type, row) {
+      this.formDia = true
+      this.$nextTick(() => {
+        this.$refs.formDia.openDia(type, row)
+      })
+    },
+    closeDia () {
+      this.formDia = false
+      this.getYearDetailPlanList()
+    },
+    // 璁板綍娴佺▼
+    records (row) {
+      this.recordsDia = true
+      this.$nextTick(() => {
+        this.$refs.recordsDia.openDia(row)
+      })
+    },
+    closeRecordsDia () {
+      this.recordsDia = false
+      this.getYearDetailPlanList()
+    },
+    // 涓嶇鍚堟祦绋嬪脊妗�
+    processing (row) {
+      this.processingDia = true
+      this.$nextTick(() => {
+        this.$refs.processingDia.openDia(row)
+      })
+    },
+    closeProcessingDia () {
+      this.processingDia = false
+      this.getYearDetailPlanList()
+    },
+    // 绾犳娴佺▼寮规
+    rectify (row) {
+      this.rectifyDia = true
+      this.$nextTick(() => {
+        this.$refs.rectifyDia.openDia(row)
+      })
+    },
+    closeRectifyDia () {
+      this.rectifyDia = false
+      this.getYearDetailPlanList()
+    },
+    // 鎵撳紑瀵煎嚭寮规
+    openDownloadDia (row) {
+      this.downloadDialog = true
+      this.download = row
+    },
+    // 瀵煎嚭璁板綍
+    controlDown () {
+      exportSuperviseDetailRecord({superviseDetailsId: this.download.superviseDetailsId}).then(res => {
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '璁板綍瀵煎嚭.docx')
+        this.$message.success('瀵煎嚭鎴愬姛')
+      }).catch(err => {
+        console.log('err---', err);
+      })
+    },
+    // 澶勭悊鍗曞鍑�
+    processingDown () {
+      superviseDetailAccordingExport({superviseDetailsId: this.download.superviseDetailsId}).then(res => {
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '涓嶇鍚堥」瀵煎嚭.docx')
+        this.$message.success('瀵煎嚭鎴愬姛')
+      }).catch(err => {
+        console.log('err---', err);
+      })
+    },
+    // 绾犳鍗曞鍑�
+    supervisoryDown () {
+      exportSuperviseDetaillCorrect({superviseDetailsCorrectId: this.download.superviseDetailsCorrectId}).then(res => {
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '鐩戠潱绾犳鎺柦.docx')
+        this.$message.success('瀵煎嚭鎴愬姛')
+      })
+    },
+    // 鍒犻櫎骞村害璇︽儏鍒楄〃
+    delYearPlanDetail (row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.yearDetailLoading = true
+        delQualitySuperviseDetail({superviseDetailsId: row.superviseDetailsId}).then(res => {
+          this.yearDetailLoading = false
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.getYearDetailPlanList()
+        }).catch(err => {
+          this.yearDetailLoading = false
+          console.log('err---', err);
+        })
+      })
+    },
+  },
+  // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
+  computed: {
+    action() {
+      return this.javaApi + '/qualitySupervise/importQualitySupervise'
+    },
+    ...mapGetters(["userId"]),
+  },
+};
+</script>
+
+<style scoped>
+.table-card {
+  background-color: #ffffff;
+}
+.flex_column {
+  display: flex;
+  height: 80vh;
+  flex-direction: column;
+  overflow: auto;
+  justify-content: space-between;
+}
+
+.pagination {
+  display: flex;
+  justify-content: space-between
+}
+
+.items_center {
+  display: flex;
+  align-items: center;
+}
+
+.date_box {
+  margin: 0 5px;
+}
+
+.search {
+  width: 150px;
+  padding: 0 16px;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue
index 165feb1..a9c7baa 100644
--- a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue
@@ -198,11 +198,23 @@
 </template>
 
 <script>
+import {
+  getFeLightningProtection,
+  deviceScopeSearch,
+  selectUserCondition,
+  treeDevice,
+  addFeLightningProtection,
+  deleteFeLightningProtection,
+  getFeIlluminationDetectionArea,
+  deleteFeIlluminationDetectionArea,
+  exportFeIllumination
+} from '@/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment'
+
 export default {
   data() {
     return {
       search: {
-        size: 20,
+        size: 10,
         current: 1,
         total: 0
       },
@@ -251,17 +263,18 @@
       }
     },
     edit(row) {
-      this.$axios.get(this.$api.facilitiesAndEnvironment.getFeIlluminationDetectionArea + "?intensityIlluminationId=" + row.intensityIlluminationId).then(res => {
+      getFeIlluminationDetectionArea({intensityIlluminationId:row.intensityIlluminationId}).then(res => {
         this.form = {...row}
         this.form.illuminationDetectionAreaList = res.data;
         this.dialogVisible = true
       });
     },
     initData() {
-      this.$axios.get(this.$api.facilitiesAndEnvironment.getFeLightningProtection + '?size=' + this.search.size + '&current=' + this.search.current).then(res => {
-        if (res.code === 201) return;
-        this.tableData = res.data.records;
-        this.search.total = res.data.total;
+      getFeLightningProtection({...this.search}).then(res => {
+        if (res.code === 200){
+          this.tableData = res.data.records;
+          this.search.total = res.data.total;
+        }
       });
     },
     handleSizeChange(val) {
@@ -278,7 +291,7 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteFeLightningProtection + '?intensityIlluminationId=' + row.intensityIlluminationId).then(res => {
+        deleteFeLightningProtection({intensityIlluminationId: row.intensityIlluminationId}).then(res => {
           this.$message.success('鍒犻櫎鎴愬姛锛�')
           this.initData()
         })
@@ -286,10 +299,11 @@
     },
     feMeasuredQuantityListDelete(row, index) {
       if (row.detectionAreaId) {
-        this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteFeIlluminationDetectionArea + '?detectionAreaId=' + row.detectionAreaId).then(res => {
-          if (res.code === 201) return
-          this.form.illuminationDetectionAreaList.splice(index, 1)
-          this.$message.success('鍒犻櫎鎴愬姛锛�')
+        deleteFeIlluminationDetectionArea({detectionAreaId:row.detectionAreaId}).then(res => {
+          if (res.code === 200){
+            this.form.illuminationDetectionAreaList.splice(index, 1)
+            this.$message.success('鍒犻櫎鎴愬姛锛�')
+          }
         })
       } else {
         this.form.illuminationDetectionAreaList.splice(index, 1)
@@ -297,7 +311,7 @@
       }
     },
     openDialog() {
-      this.$axios.get(this.$api.deviceScope.treeDevice).then(res => {
+      treeDevice().then(res => {
         this.cascaderList = res.data;
       });
       this.$nextTick(() => {
@@ -312,7 +326,7 @@
     // 鑾峰彇鎵�鏈夎澶�
     getEquipOptions() {
       this.equipOptions = []
-      this.$axios.get(this.$api.deviceScope.deviceScopeSearch+'?status=0').then(res => {
+      deviceScopeSearch({status:'0'}).then(res => {
         if (res.code === 200 && res.data) {
           this.equipOptions = res.data
         }
@@ -335,11 +349,7 @@
       this.submitLoading = true
       this.$refs.form.validate((valid) => {
         if (valid) {
-          this.$axios.post(this.$api.facilitiesAndEnvironment.addFeLightningProtection, this.form, {
-            headers: {
-              'Content-Type': 'application/json'
-            }
-          }).then(res => {
+          addFeLightningProtection(this.form).then(res => {
             this.submitLoading = false
             if (res.code === 200) {
               this.initData()
@@ -353,7 +363,7 @@
     },
     // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
     getUserList() {
-      this.$axios.get(this.$api.deviceScope.selectUserList).then(res => {
+      selectUserCondition().then(res => {
         if (res.code == 200) {
           this.responsibleOptions = res.data
         }
@@ -369,35 +379,11 @@
     },
     // 瀵煎嚭
     downLoadPost(row) {
-      this.$axios.get(this.$api.facilitiesAndEnvironment.exportFeIllumination + '?intensityIlluminationId=' + row.intensityIlluminationId,{responseType: "blob"}).then(res => {
+      exportFeIllumination({intensityIlluminationId: row.intensityIlluminationId}).then(res => {
         this.outLoading = false
         const blob = new Blob([res],{ type: 'application/msword' });
-        //灏咮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')
+        this.$message.success('瀵煎嚭鎴愬姛')
       })
     },
   }
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue
index 57a7704..48e5b68 100644
--- a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue
@@ -120,11 +120,20 @@
 
 <script>
 
+import {
+  getLightningProtectionDetection,
+  addLightningProtectionDetection,
+  deleteLightningProtectionDetection,
+  exportOfLightningProtectionDetection
+} from '@/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment'
+
+import axios from 'axios';
+
 export default {
   data() {
     return {
       search: {
-        size: 20,
+        size: 10,
         current: 1,
         total: 0
       },
@@ -152,42 +161,20 @@
   methods: {
     // 瀵煎嚭
     downLoadPost() {
-      this.$axios.get(this.$api.facilitiesAndEnvironment.exportOfLightningProtectionDetection,{responseType: "blob"}).then(res => {
+      exportOfLightningProtectionDetection().then(res => {
         this.outLoading = false
         const blob = new Blob([res],{ type: 'application/msword' });
         //灏咮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')
       })
     },
     initData() {
-      this.$axios.get(this.$api.facilitiesAndEnvironment.getLightningProtectionDetection + '?size=' + this.search.size + '&current=' + this.search.current).then(res => {
-        if (res.code === 201) return;
-        this.tableData = res.data.records;
-        this.search.total = res.data.total;
+      getLightningProtectionDetection({...this.search}).then(res => {
+        if (res.code === 200){
+          this.tableData = res.data.records;
+          this.search.total = res.data.total;
+        }
+
       });
     },
     handleSizeChange(val) {
@@ -223,13 +210,11 @@
           if (this.form.fileData.length > 0) {
             params.append("file", this.form.fileData[0].file)
           }
-          this.$axios.post(this.$api.facilitiesAndEnvironment.addLightningProtectionDetection, params, {
-            headers: {'Content-Type': 'multipart/form-data;'},
-            noQs: true
-          }).then(res => {
-            if (res.code === 201) return;
-            this.dialogVisible = false
-            this.initData()
+          addLightningProtectionDetection(params).then(res => {
+            if (res.code === 200){
+              this.dialogVisible = false
+              this.initData()
+            }
           });
         }
       });
@@ -248,7 +233,7 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteLightningProtectionDetection + '?lightningProtectionId=' + row.lightningProtectionId).then(res => {
+        deleteLightningProtectionDetection({lightningProtectionId:row.lightningProtectionId}).then(res => {
           this.$message.success('鍒犻櫎鎴愬姛锛�')
           this.initData()
         })
@@ -266,13 +251,8 @@
     },
     download(row) {
       let url = '';
-
-      // fileDownload.downloadIamge(url, row.fileName)
-      url = this.javaApi + 'img/' + row.systemFileName
-      const link = document.createElement('a');
-      link.href = url;
-      link.download = row.fileName;
-      link.click();
+      url = this.javaApi + '/img/' + row.systemFileName
+      this.$download.saveAs(url, row.fileName)
     }
   }
 }
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue
index b17f95d..9e290ea 100644
--- a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue
@@ -197,7 +197,10 @@
   treeDevice,
   selectUserCondition,
   addLaboratoryFacilityPowerStable,
-  deleteFeMeasuredQuantity
+  deleteFeMeasuredQuantity,
+  getFeMeasuredQuantityService,
+  deleteLaboratoryFacilityPowerStable,
+  exportFePowerStable
 } from '@/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment'
 
 export default {
@@ -268,7 +271,7 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteLaboratoryFacilityPowerStable + '?powerStableId=' + row.powerStableId).then(res => {
+        deleteLaboratoryFacilityPowerStable({powerStableId:row.powerStableId}).then(res => {
           this.$message.success('鍒犻櫎鎴愬姛锛�')
           this.initData()
         })
@@ -311,7 +314,7 @@
     // 鐢垫簮绋冲畾鎬�-娴嬪畾閲忓脊妗嗕腑琛ㄦ牸鐨勫垹闄よ
     feMeasuredQuantityListDelete(row, index) {
       if (row.measuredQuantityId) {
-        this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteFeMeasuredQuantity + '?measuredQuantityId=' + row.measuredQuantityId).then(res => {
+        deleteFeMeasuredQuantity({measuredQuantityId:row.measuredQuantityId}).then(res => {
           if (res.code === 201) return
           this.form.feMeasuredQuantityList.splice(index, 1)
           this.$message.success('鍒犻櫎鎴愬姛锛�')
@@ -350,44 +353,20 @@
     },
     // 瀵煎嚭
     downLoadPost(row) {
-      this.$axios.get(this.$api.facilitiesAndEnvironment.exportFePowerStable + '?powerStableId=' + row.powerStableId,{responseType: "blob"}).then(res => {
+      exportFePowerStable({powerStableId: row.powerStableId}).then(res => {
         this.outLoading = false
         const blob = new Blob([res],{ type: 'application/msword' });
-        //灏咮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')
+        this.$message.success('瀵煎嚭鎴愬姛')
       })
     },
     // 鐢垫簮绋冲畾鎬� 鐐瑰嚮琛岀紪杈戣Е鍙�
     edit(row) {
-      this.$axios.get(this.$api.facilitiesAndEnvironment.getFeMeasuredQuantityService + "?powerStableId=" + row.powerStableId).then(res => {
+      getFeMeasuredQuantityService({powerStableId: row.powerStableId}).then((res => {
         this.form = {...row}
         this.form.feMeasuredQuantityList = res.data;
         this.dialogVisible = true
-      });
+      }))
     },
     // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
     getUserList() {
diff --git a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue
index f848a42..2dbe82a 100644
--- a/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue
+++ b/src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue
@@ -236,6 +236,18 @@
 </template>
 
 <script>
+import {
+  getFeTempHumDate,
+  addFeTempHumDate,
+  getFeTempHumRecordPage,
+  addFeTempHumRecord,
+  selectUserCondition,
+  deleteFeTempHumRecord,
+  deleteFeTempHumDate,
+  exportTemperatureAndHumidityRecords,
+  affirmFeTempHumDate
+} from '@/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment'
+
 export default {
   data() {
     return {
@@ -293,12 +305,7 @@
         dateId: this.approvalRow.dateId,
         subjoin: this.subjoin,
       }
-      this.$axios.post(this.$api.facilitiesAndEnvironment.affirmFeTempHumDate, params, {
-        headers: {
-          'Content-Type': 'application/json'
-        },
-        noQs: true
-      }).then(res => {
+      affirmFeTempHumDate(params).then(res => {
         this.approvalLoading = false
         if (res.code === 200) {
           this.$message.success('纭鎴愬姛锛�')
@@ -310,7 +317,7 @@
       })
     },
     openDialog() {
-      this.$axios.get(this.$api.deviceScope.selectUserList).then(res => {
+      selectUserCondition().then(res => {
         if (res.code == 200) {
           this.responsibleOptions = res.data
         }
@@ -320,11 +327,7 @@
       this.$refs.form.validate((valid) => {
         if (valid) {
           this.submitLoading = true
-          this.$axios.post(this.$api.facilitiesAndEnvironment.addFeTempHumDate, this.form, {
-            headers: {
-              'Content-Type': 'application/json'
-            }
-          }).then(res => {
+          addFeTempHumDate(this.form).then(res => {
             if (res.code === 200) {
               this.$message.success('鏂板鎴愬姛!')
               this.submitLoading = false
@@ -346,11 +349,7 @@
         this.submitLoading = true
         if (valid) {
           this.form1.dateId = this.saveRow.dateId
-          this.$axios.post(this.$api.facilitiesAndEnvironment.addFeTempHumRecord, this.form1, {
-            headers: {
-              'Content-Type': 'application/json'
-            }
-          }).then(res => {
+          addFeTempHumRecord(this.form1).then(res => {
             if (res.code === 200) {
               this.$message.success('鏂板鎴愬姛!')
               this.submitLoading = false
@@ -377,7 +376,7 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteFeTempHumDate + '?dateId=' + row.dateId).then(res => {
+        deleteFeTempHumDate({dateId:row.dateId}).then(res => {
           this.$message.success('鍒犻櫎鎴愬姛锛�')
           this.initData()
         })
@@ -389,35 +388,11 @@
     },
     // 瀵煎嚭
     downLoadPost(row) {
-      this.$axios.get(this.$api.facilitiesAndEnvironment.exportTemperatureAndHumidityRecords + '?dateId=' + row.dateId,{responseType: "blob"}).then(res => {
+      exportTemperatureAndHumidityRecords({dateId:row.dateId}).then(res => {
         this.outLoading = false
         const blob = new Blob([res],{ type: 'application/msword' });
-        //灏咮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')
+        this.$message.success('瀵煎嚭鎴愬姛')
       })
     },
     deleteRowFun1(row) {
@@ -426,28 +401,37 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        this.$axios.delete(this.$api.facilitiesAndEnvironment.deleteFeTempHumRecord + '?tempHumId=' + row.tempHumId).then(res => {
+        deleteFeTempHumRecord({tempHumId:row.tempHumId}).then(res => {
           this.$message.success('鍒犻櫎鎴愬姛锛�')
           this.initData1(this.saveRow.dateId)
         })
       })
     },
     initData() {
-      this.$axios.get(this.$api.facilitiesAndEnvironment.getFeTempHumDate + '?size=' + this.search.size + '&current=' + this.search.current + '&testAreaName=' + this.search.testAreaName).then(res => {
-        if (res.code === 201) return;
-        this.tableData = res.data.records;
-        this.search.total = res.data.total;
-        if (res.data.records.length === 0) {
-          this.tableData1 = []
-          this.saveRow.monthDate = ''
+      getFeTempHumDate({
+        ...this.search,
+        ...this.search}).then(res => {
+        if (res.code === 200){
+          this.tableData = res.data.records;
+          this.search.total = res.data.total;
+          if (res.data.records.length === 0) {
+            this.tableData1 = []
+            this.saveRow.monthDate = ''
+          }
         }
-      });
+
+      })
     },
     initData1(dateId) {
-      this.$axios.get(this.$api.facilitiesAndEnvironment.getFeTempHumRecordPage + '?size=' + this.search1.size + '&current=' + this.search1.current + '&dateId=' + dateId).then(res => {
-        if (res.code === 201) return;
-        this.tableData1 = res.data.records;
-        this.search1.total = res.data.total;
+      let form = {dateId: dateId}
+      getFeTempHumRecordPage({
+        ...this.search1,
+        ...form
+      }).then(res => {
+        if (res.code === 200){
+          this.tableData1 = res.data.records;
+          this.search1.total = res.data.total;
+        }
       });
     },
     handleSizeChange(val) {

--
Gitblit v1.9.3