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

---
 src/assets/styles/index.scss                                                                        |    3 
 src/views/structural/premises/index.vue                                                             |   17 
 src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue                                  |   12 
 src/views/CNAS/resourceDemand/standardMaterial/index.vue                                            |  313 +
 src/views/CNAS/systemManagement/documentControl/components/FileList.vue                             |   11 
 src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveActionDIa.vue          |  409 +
 src/views/business/materialOrderComponents/materialOrder/filesLookVisible.vue                       |   10 
 src/api/business/insReport.js                                                                       |   59 
 src/api/cnas/systemManagement/correctiveAction.js                                                   |   59 
 src/api/cnas/systemManagement/measuresDealRisks.js                                                  |  116 
 src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue                               |  448 +
 src/views/business/inspectionTask/index.vue                                                         |   35 
 src/views/CNAS/systemManagement/customerSatisfaction/components/formDialog.vue                      |  256 
 src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue                                      |  230 
 src/views/business/unpass/index-manage.vue                                                          |  324 +
 src/views/CNAS/systemManagement/internalAuditManagement/index.vue                                   |   57 
 src/components/Table/value-table.vue                                                                |    9 
 src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspection.vue              |  254 
 src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveAction.vue             |  182 
 src/components/Table/lims-table.vue                                                                 |   34 
 src/views/CNAS/resourceDemand/standardMaterailRequistion/index.vue                                  |  146 
 src/views/business/unpass/index.vue                                                                 |  135 
 src/views/CNAS/resourceDemand/standardMaterialAccept/component/AddRecord.vue                        |  103 
 src/views/CNAS/systemManagement/correctiveAction/components/ViewTestRecord.vue                      |  169 
 src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSignDia.vue          |  183 
 src/views/business/sample/components/detail.vue                                                     |  197 
 src/views/business/productOrder/components/add.vue                                                  |   38 
 src/views/business/inspectionTask/inspection.vue                                                    |   38 
 src/views/business/productOrder/components/cable-config.vue                                         |  216 
 src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlanDia.vue                  |  342 +
 src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlan.vue                     |  314 +
 src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSign.vue             |  202 
 src/views/CNAS/systemManagement/correctiveAction/components/correctiveInfo.vue                      |  258 
 src/api/business/inspectionTask.js                                                                  |   16 
 src/main.js                                                                                         |    6 
 src/views/CNAS/resourceDemand/standardMaterial/component/returnDia.vue                              |  125 
 src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue                              |  321 
 src/assets/images/no-full.svg                                                                       |    1 
 src/views/business/productOrder/components/auxiliaryWireCore.vue                                    |  154 
 src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspectionDia.vue           |  231 
 src/views/business/inspectionTask/components/InspectionWord.vue                                     | 2330 ++++++++
 src/views/standard/standardLibrary/index.vue                                                        |   91 
 src/views/CNAS/systemManagement/internalAuditManagement/components/ViewTestRecord.vue               |  176 
 src/views/CNAS/systemManagement/internalAuditManagement/components/auditReportDia.vue               |  333 +
 src/views/CNAS/systemManagement/measuresDealRisks/index.vue                                         |   39 
 src/views/business/inspectionReview/index.vue                                                       |  434 +
 src/views/CNAS/process/method/standardMethod/index.vue                                              |    4 
 src/views/CNAS/resourceDemand/standardMaterial/component/formDia.vue                                |  182 
 src/views/CNAS/systemManagement/internalAuditManagement/components/implementationPlan.vue           |  292 +
 src/api/business/rawMaterialOrder.js                                                                |    8 
 src/views/business/unpass/components/OAProcess.vue                                                  |  250 
 src/api/cnas/resourceDemand/standardMaterailRequistion/standardMaterailRequistion.js                |   12 
 src/api/cnas/systemManagement/internalAuditManagement.js                                            |  398 +
 src/views/CNAS/systemManagement/customerSatisfaction/index.vue                                      |  405 +
 src/views/CNAS/systemManagement/internalAuditManagement/components/implementPlanDia.vue             |  307 +
 src/views/CNAS/resourceDemand/standardMaterial/component/borrowDia.vue                              |  148 
 src/views/business/materialOrder/customsInspection.vue                                              |    9 
 src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue                                  |  396 
 src/views/CNAS/systemManagement/internalAuditManagement/components/auditReport.vue                  |  312 +
 src/api/business/unqualifiedHandler.js                                                              |   27 
 src/api/cnas/systemManagement/customerSatisfaction.js                                               |   56 
 src/views/business/sample/index.vue                                                                 |  704 ++
 src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue         |    4 
 public/index.html                                                                                   |    1 
 src/views/CNAS/systemManagement/measuresDealRisks/components/hazardIdentificationRiskAssessment.vue |  332 +
 src/api/cnas/systemManagement/documentRecords.js                                                    |  299 +
 src/views/business/unpass/components/addUnPass.vue                                                  |    2 
 src/api/cnas/resourceDemand/standardMaterial/standardMaterial.js                                    |   59 
 src/views/business/reportPreparation/index.vue                                                      | 1016 +++
 src/api/business/sample.js                                                                          |   90 
 src/views/CNAS/resourceDemand/standardMaterialAccept/component/Step1.vue                            |  201 
 src/api/cnas/resourceDemand/standardMaterialAccept/standardMaterialAccept.js                        |   31 
 src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue                            |  343 
 src/views/business/materialOrder/index.vue                                                          |   12 
 src/api/standard/standardLibrary.js                                                                 |   35 
 src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue                    |  335 
 src/views/system/user/index.vue                                                                     |  211 
 src/api/business/unpass.js                                                                          |    9 
 src/views/login.vue                                                                                 |   57 
 src/views/CNAS/systemManagement/measuresDealRisks/components/listRiskAnalysisControlPlans.vue       |  299 +
 src/views/business/unpass/components/PurchaseVerification.vue                                       |   31 
 src/components/Onlyoffice/onlyoffice.vue                                                            |  206 
 src/components/Preview/filePreview.vue                                                              |    2 
 src/views/CNAS/systemManagement/correctiveAction/index.vue                                          |  203 
 84 files changed, 15,306 insertions(+), 1,418 deletions(-)

diff --git a/public/index.html b/public/index.html
index 0a54df5..aba4f3e 100644
--- a/public/index.html
+++ b/public/index.html
@@ -225,6 +225,7 @@
       </div>
     </div>
   </body>
+  <script type='text/javascript' src='http://192.168.21.53:9001/web-apps/apps/api/documents/api.js'></script>
   <script src="<%= BASE_URL %>luckysheet/plugins/js/plugin.js"></script>
   <script src="<%= BASE_URL %>luckysheet/luckysheet.umd.js"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.16.105/pdf.min.js"></script>
diff --git a/src/api/business/insReport.js b/src/api/business/insReport.js
new file mode 100644
index 0000000..896d9b2
--- /dev/null
+++ b/src/api/business/insReport.js
@@ -0,0 +1,59 @@
+// 鎶ュ憡缂栧埗椤甸潰鐩稿叧鎺ュ彛
+import request from '@/utils/request'
+
+// 鎶ュ憡杩樺師
+export function upReportUrl(query) {
+  return request({
+    url: '/insReport/upReportUrl',
+    method: 'post',
+    data: query
+  })
+}
+// 鏌ヨ妫�楠屾姤鍛婃暟鎹�
+export function pageInsReport(query) {
+  return request({
+    url: '/insReport/pageInsReport',
+    method: 'get',
+    params: query
+  })
+}
+// 鎶ュ憡鎵归噺涓嬭浇
+export function downAll(query) {
+  return request({
+    url: '/insReport/downAll',
+    method: 'get',
+    params: query
+  })
+}
+// 鎶ュ憡閫�鍥炲埌妫�楠屼换鍔�
+export function sendBackTask(query) {
+  return request({
+    url: '/insReport/sendBackTask',
+    method: 'post',
+    data: query
+  })
+}
+// 鎶ュ憡瀹℃牳
+export function examineReport(query) {
+  return request({
+    url: '/insReport/examineReport',
+    method: 'post',
+    data: query
+  })
+}
+// 鎶ュ憡鎻愪氦
+export function writeReport(query) {
+  return request({
+    url: '/insReport/writeReport',
+    method: 'post',
+    data: query
+  })
+}
+// 鎶ュ憡鎵瑰噯
+export function ratifyReport(query) {
+  return request({
+    url: '/insReport/ratifyReport',
+    method: 'post',
+    data: query
+  })
+}
diff --git a/src/api/business/inspectionTask.js b/src/api/business/inspectionTask.js
index 6c52426..4187ad6 100644
--- a/src/api/business/inspectionTask.js
+++ b/src/api/business/inspectionTask.js
@@ -51,7 +51,7 @@
   return request({
     url: "/insOrderPlan/upPlanUser",
     method: "post",
-    data: data,
+    params: data,
   });
 }
 
@@ -213,7 +213,7 @@
   return request({
     url: "/insOrderPlan/verifyPlan",
     method: "post",
-    data: data,
+    params: data,
   });
 }
 
@@ -222,7 +222,7 @@
   return request({
     url: "/insOrderPlan/checkSubmitPlan",
     method: "post",
-    data: data,
+    params: data,
   });
 }
 
@@ -231,7 +231,7 @@
   return request({
     url: "/insOrderPlan/submitPlan",
     method: "post",
-    data: data,
+    params: data,
   });
 }
 
@@ -279,3 +279,11 @@
     params: query,
   });
 }
+// 鏌ヨ澶嶆祴妯$増
+export function getInsProductUnqualifiedRetest(query) {
+  return request({
+    url: "/insOrderPlan/getInsProductUnqualifiedRetest",
+    method: "get",
+    params: query,
+  });
+}
diff --git a/src/api/business/rawMaterialOrder.js b/src/api/business/rawMaterialOrder.js
index 6076b50..4b5c746 100644
--- a/src/api/business/rawMaterialOrder.js
+++ b/src/api/business/rawMaterialOrder.js
@@ -286,3 +286,11 @@
     params: query
   })
 }
+// 淇濆瓨涓嶅悎鏍煎娴嬫暟鎹�
+export function saveUnqualifiedContext(query) {
+  return request({
+    url: '/insOrderPlan/saveUnqualifiedContext',
+    method: 'delete',
+    params: query
+  })
+}
diff --git a/src/api/business/sample.js b/src/api/business/sample.js
new file mode 100644
index 0000000..0e83b2d
--- /dev/null
+++ b/src/api/business/sample.js
@@ -0,0 +1,90 @@
+// 鏍峰搧绠$悊椤甸潰鐩稿叧鎺ュ彛
+import request from '@/utils/request'
+
+// 鏌ヨ浠撳簱
+export function selectWarehouse() {
+  return request({
+    url: '/warehouse/selectWarehouse',
+    method: 'get'
+  })
+}
+// 鏍峰搧鍏ュ簱
+export function inWarehouse(query) {
+  return request({
+    url: '/warehouse/inWarehouse',
+    method: 'post',
+    data: query
+  })
+}
+// 鏍峰搧鍑哄簱
+export function outWarehouse(query) {
+  return request({
+    url: '/warehouse/outWarehouse',
+    method: 'post',
+    data: query
+  })
+}
+// 淇敼浠撳簱
+export function upWarehouse(query) {
+  return request({
+    url: '/warehouse/upWarehouse',
+    method: 'post',
+    data: query
+  })
+}
+// 娣诲姞浠撳簱
+export function addWarehouse(query) {
+  return request({
+    url: '/warehouse/addWarehouse',
+    method: 'post',
+    data: query
+  })
+}
+// 淇敼璐ф灦
+export function upShelf(query) {
+  return request({
+    url: '/warehouse/upShelf',
+    method: 'post',
+    data: query
+  })
+}
+// 娣诲姞璐ф灦
+export function addShelf(query) {
+  return request({
+    url: '/warehouse/addShelf',
+    method: 'post',
+    data: query
+  })
+}
+// 鍒犻櫎浠撳簱
+export function delWarehouse(query) {
+  return request({
+    url: '/warehouse/delWarehouse',
+    method: 'delete',
+    params: query
+  })
+}
+// 鍒犻櫎璐ф灦
+export function delShelf(query) {
+  return request({
+    url: '/warehouse/delShelf',
+    method: 'delete',
+    params: query
+  })
+}
+// 鏌ヨ璐ф灦涓嬬殑瀛樻斁淇℃伅
+export function getWarehouse(query) {
+  return request({
+    url: '/warehouse/getWarehouse',
+    method: 'get',
+    params: query
+  })
+}
+// 鏌ヨ璐ф灦涓嬬殑瀛樻斁淇℃伅
+export function searchSampleId(query) {
+  return request({
+    url: '/warehouse/searchSampleId',
+    method: 'post',
+    data: query
+  })
+}
diff --git a/src/api/business/unpass.js b/src/api/business/unpass.js
index 7803d75..2aa3648 100644
--- a/src/api/business/unpass.js
+++ b/src/api/business/unpass.js
@@ -1,5 +1,4 @@
 // 涓嶅悎鏍肩鐞嗙浉鍏虫帴鍙�
-
 import request from "@/utils/request";
 
 //鏌ヨ杩涜揣楠岃瘉淇℃伅
@@ -73,3 +72,11 @@
     data: data,
   });
 }
+// 鏌ヨ涓嶅悎鏍兼牱鍝佹暟鎹�
+export function pageInsUnPass(data) {
+  return request({
+    url: "/unPass/pageInsUnPass",
+    method: "post",
+    data: data,
+  });
+}
diff --git a/src/api/business/unqualifiedHandler.js b/src/api/business/unqualifiedHandler.js
new file mode 100644
index 0000000..d458b42
--- /dev/null
+++ b/src/api/business/unqualifiedHandler.js
@@ -0,0 +1,27 @@
+// 涓嶅悎鏍煎鐞嗙浉鍏虫帴鍙�
+import request from "@/utils/request";
+
+//鏌ヨ涓嶅悎鏍煎鐞�
+export function page(query) {
+  return request({
+    url: "/unqualifiedHandler/page",
+    method: "get",
+    params: query,
+  });
+}
+//鍒犻櫎涓嶅悎鏍煎鐞�
+export function deleteUnqualifiedHandler(query) {
+  return request({
+    url: "/unqualifiedHandler/deleteUnqualifiedHandler",
+    method: "delete",
+    params: query,
+  });
+}
+//鍒犻櫎涓嶅悎鏍煎鐞�
+export function pushOA(query) {
+  return request({
+    url: "/unqualifiedHandler/pushOA",
+    method: "delete",
+    params: query,
+  });
+}
diff --git a/src/api/cnas/resourceDemand/standardMaterailRequistion/standardMaterailRequistion.js b/src/api/cnas/resourceDemand/standardMaterailRequistion/standardMaterailRequistion.js
new file mode 100644
index 0000000..0353e42
--- /dev/null
+++ b/src/api/cnas/resourceDemand/standardMaterailRequistion/standardMaterailRequistion.js
@@ -0,0 +1,12 @@
+import request from '@/utils/request'
+
+// 鍒嗛〉鏌ヨ
+export function getPageSubstanceRecord(query) {
+  return request({
+    url: '/feStandardSubstanceRecord/getPageSubstanceRecord',
+    method: 'get',
+    params: query
+  })
+}
+
+
diff --git a/src/api/cnas/resourceDemand/standardMaterial/standardMaterial.js b/src/api/cnas/resourceDemand/standardMaterial/standardMaterial.js
new file mode 100644
index 0000000..71f88a9
--- /dev/null
+++ b/src/api/cnas/resourceDemand/standardMaterial/standardMaterial.js
@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+// 鑾峰彇瀹為獙瀹ゅ悕绉�
+export function getPageStandardSubstance(query) {
+  return request({
+    url: '/feStandardSubstance/getPageStandardSubstance',
+    method: 'get',
+    params: query
+  })
+}
+
+//鏍囧噯鐗╄川娓呭崟鏂板缂栬緫
+export function addStandardSubstance(query) {
+  return request({
+    url: '/feStandardSubstance/addStandardSubstance',
+    method: 'post',
+    data: query
+  })
+}
+
+//鍒犻櫎鏍囧噯鐗╄川娓呭崟
+export function removeStandardSubstance(query) {
+  return request({
+    url: '/feStandardSubstance/removeStandardSubstance',
+    method: 'delete',
+    params: query
+  })
+}
+
+// 鏂囦欢鍙樻洿-瀵煎嚭
+export function exportOfStandardSubstanceList(query) {
+  return request({
+    url: "/feStandardSubstance/exportOfStandardSubstanceList",
+    method: "get",
+    responseType: "blob",
+    params: query,
+  });
+}
+
+//鏍囧噯鐗╄川娓呭崟鍊熺敤
+export function borrowSubstance(query) {
+  return request({
+    url: '/feStandardSubstanceRecord/borrowSubstance',
+    method: 'post',
+    data: query
+  })
+}
+
+//鏍囧噯鐗╄川娓呭崟褰掕繕
+export function returnSubstance(query) {
+  return request({
+    url: '/feStandardSubstanceRecord/returnSubstance',
+    method: 'post',
+    data: query
+  })
+}
+
+
+
diff --git a/src/api/cnas/resourceDemand/standardMaterialAccept/standardMaterialAccept.js b/src/api/cnas/resourceDemand/standardMaterialAccept/standardMaterialAccept.js
new file mode 100644
index 0000000..707631a
--- /dev/null
+++ b/src/api/cnas/resourceDemand/standardMaterialAccept/standardMaterialAccept.js
@@ -0,0 +1,31 @@
+import request from '@/utils/request'
+
+export function getPageAcceptance(query) {
+  return request({
+    url: '/feStandardSubstanceAcceptance/getPageAcceptance',
+    method: 'get',
+    params: query
+  })
+}
+
+export function updateAcceptanc(query) {
+  return request({
+    url: '/feStandardSubstanceAcceptance/updateAcceptanc',
+    method: 'post',
+    data: query
+  })
+}
+
+export function addAcceptance(query) {
+  return request({
+    url: '/feStandardSubstanceAcceptance/addAcceptance',
+    method: 'post',
+    data: query
+  })
+}
+
+
+
+
+
+
diff --git a/src/api/cnas/systemManagement/correctiveAction.js b/src/api/cnas/systemManagement/correctiveAction.js
new file mode 100644
index 0000000..ebd9f5c
--- /dev/null
+++ b/src/api/cnas/systemManagement/correctiveAction.js
@@ -0,0 +1,59 @@
+// 绾犳鎺柦鐩稿叧鎺ュ彛
+import request from "@/utils/request";
+
+//鏌ヨ鐩戠潱绾犳鎺柦鍒楄〃
+export function pageSuperviseDetailCorrect(query) {
+  return request({
+    url: "/qualitySupervise/pageSuperviseDetailCorrect",
+    method: "get",
+    params: query,
+  });
+}
+
+//瀵煎嚭鐩戠潱绾犳鎺柦
+export function exportSuperviseDetaillCorrect(query) {
+  return request({
+    url: "/qualitySupervise/exportSuperviseDetaillCorrect",
+    method: "get",
+    headers: {
+      responseType: "blob",
+    },
+    params: query,
+  });
+}
+
+//鏌ヨ鐩戠潱绾犳鎺柦闄勪欢
+export function getSuperviseDetailCorrectFileList(query) {
+  return request({
+    url: "/qualitySupervise/getSuperviseDetailCorrectFileList",
+    method: "get",
+    params: query,
+  });
+}
+
+//鍒犻櫎鐩戠潱绾犳鎺柦闄勪欢
+export function delSuperviseDetailCorrectFile(query) {
+  return request({
+    url: "/qualitySupervise/delSuperviseDetailCorrectFile",
+    method: "delete",
+    params: query,
+  });
+}
+
+//鏌ヨ鐩戠潱绾犳澶勭悊
+export function getSuperviseDetailCorrect(query) {
+  return request({
+    url: "/qualitySupervise/getSuperviseDetailCorrect",
+    method: "get",
+    params: query,
+  });
+}
+
+//鏌ヨ浠婂勾浜哄憳鍩硅淇℃伅
+export function getThisYearTrainingDetailed(query) {
+  return request({
+    url: "/personTraining/getThisYearTrainingDetailed",
+    method: "get",
+    params: query,
+  });
+}
diff --git a/src/api/cnas/systemManagement/customerSatisfaction.js b/src/api/cnas/systemManagement/customerSatisfaction.js
new file mode 100644
index 0000000..5368a4c
--- /dev/null
+++ b/src/api/cnas/systemManagement/customerSatisfaction.js
@@ -0,0 +1,56 @@
+// 瀹㈡埛婊℃剰搴︾浉鍏虫帴鍙�
+import request from "@/utils/request";
+
+//瀹㈡埛婊℃剰搴﹁皟鏌ュ垪琛�
+export function pageClientSatisfaction(query) {
+  return request({
+    url: "/clientSatisfaction/pageClientSatisfaction",
+    method: "get",
+    params: query,
+  });
+}
+
+//鏌ヨ瀹㈡埛鍒嗘瀽闄勪欢
+export function pageAnalyseFile(query) {
+  return request({
+    url: "/clientSatisfaction/pageAnalyseFile",
+    method: "get",
+    params: query,
+  });
+}
+
+//鍒犻櫎鏂板瀹㈡埛婊℃剰搴﹁皟鏌�
+export function delClientSatisfaction(query) {
+  return request({
+    url: "/clientSatisfaction/delClientSatisfaction",
+    method: "delete",
+    params: query,
+  });
+}
+
+//鍒犻櫎瀹㈡埛鍒嗘瀽闄勪欢
+export function delAnalyseFile(query) {
+  return request({
+    url: "/clientSatisfaction/delAnalyseFile",
+    method: "delete",
+    params: query,
+  });
+}
+
+// 鏂板瀹㈡埛婊℃剰搴﹁皟鏌�
+export function addClientSatisfaction(data) {
+  return request({
+    url: "/clientSatisfaction/addClientSatisfaction",
+    method: "post",
+    data: data,
+  });
+}
+
+// 淇敼鏂板瀹㈡埛婊℃剰搴﹁皟鏌�
+export function updateClientSatisfaction(data) {
+  return request({
+    url: "/clientSatisfaction/updateClientSatisfaction",
+    method: "post",
+    data: data,
+  });
+}
diff --git a/src/api/cnas/systemManagement/documentRecords.js b/src/api/cnas/systemManagement/documentRecords.js
index 30fc1d5..1b084f2 100644
--- a/src/api/cnas/systemManagement/documentRecords.js
+++ b/src/api/cnas/systemManagement/documentRecords.js
@@ -63,3 +63,302 @@
     params: query,
   });
 }
+
+// 澶栨潵鏂囦欢纭璁板綍-鏂板
+export function addManageRecordVerify(data) {
+  return request({
+    url: "/manageRecordVerify/addManageRecordVerify",
+    method: "post",
+    data: data,
+  });
+}
+
+//澶栨潵鏂囦欢纭璁板綍-濉啓--鍒楄〃
+export function pageManageRecordVerify(query) {
+  return request({
+    url: "/manageRecordVerify/pageManageRecordVerify",
+    method: "get",
+    params: query,
+  });
+}
+
+// 澶栨潵鏂囦欢纭璁板綍-鍘嗗彶--鎻愪氦
+export function submitManageRecordTotal(data) {
+  return request({
+    url: "/manageRecordTotal/submitManageRecordTotal",
+    method: "post",
+    data: data,
+  });
+}
+
+// 澶栨潵鏂囦欢纭璁板綍-鍘嗗彶--瀹℃牳
+export function ratifyManageRecordTotal(data) {
+  return request({
+    url: "/manageRecordTotal/ratifyManageRecordTotal",
+    method: "post",
+    data: data,
+  });
+}
+
+//澶栨潵鏂囦欢纭璁板綍-濉啓--鍒犻櫎
+export function delManageRecordVerify(query) {
+  return request({
+    url: "/manageRecordVerify/delManageRecordVerify",
+    method: "delete",
+    params: query,
+  });
+}
+
+//澶栨潵鏂囦欢纭璁板綍-鍘嗗彶--鍒楄〃
+export function pageManageRecordTotal(query) {
+  return request({
+    url: "/manageRecordTotal/pageManageRecordTotal",
+    method: "get",
+    params: query,
+  });
+}
+
+// 澶栨潵鏂囦欢纭璁板綍-濉啓--淇敼
+export function doManageRecordVerify(data) {
+  return request({
+    url: "/manageRecordVerify/doManageRecordVerify",
+    method: "post",
+    data: data,
+  });
+}
+
+//鏂囦欢鍙戞斁鍥炴敹璁板綍-瀵煎嚭
+export function exportOutManageRecordIssueRecycle(query) {
+  return request({
+    url: "/manageRecordIssueRecycle/exportOutManageRecordIssueRecycle",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鏂囦欢鍙戞斁鍥炴敹璁板綍-鏂板
+export function addManageRecordIssueRecycle(data) {
+  return request({
+    url: "/manageRecordIssueRecycle/addManageRecordIssueRecycle",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鏂囦欢鍙戞斁鍥炴敹璁板綍-缂栬緫
+export function doManageRecordIssueRecycle(data) {
+  return request({
+    url: "/manageRecordIssueRecycle/doManageRecordIssueRecycle",
+    method: "post",
+    data: data,
+  });
+}
+
+//鏌ヨCNAS浜哄憳渚ц竟鏍�
+export function selectCNSAPersonTree(query) {
+  return request({
+    url: "/personBasicInfo/selectCNSAPersonTree",
+    method: "get",
+    params: query,
+  });
+}
+
+//鏂囦欢鍙戞斁鍥炴敹璁板綍-鍒楄〃
+export function pageManageRecordIssueRecycle(query) {
+  return request({
+    url: "/manageRecordIssueRecycle/pageManageRecordIssueRecycle",
+    method: "get",
+    params: query,
+  });
+}
+
+//鏂囦欢鍙戞斁鍥炴敹璁板綍-鍒犻櫎
+export function delManageRecordIssueRecycle(query) {
+  return request({
+    url: "/manageRecordIssueRecycle/delManageRecordIssueRecycle",
+    method: "delete",
+    params: query,
+  });
+}
+
+//鏂囦欢淇-瀵煎嚭鍒楄〃
+export function exportOutManageRecordAudit(query) {
+  return request({
+    url: "/manageRecordAudit/exportOutManageRecordAudit",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鏂囦欢淇-鏂板
+export function addManageRecordAudit(data) {
+  return request({
+    url: "/manageRecordAudit/addManageRecordAudit",
+    method: "post",
+    headers: { "Content-Type": "application/x-www-form-urlencoded" },
+    data: data,
+  });
+}
+
+// 鏂囦欢淇-缂栬緫
+export function doManageRecordAudit(data) {
+  return request({
+    url: "/manageRecordAudit/doManageRecordAudit",
+    method: "post",
+    headers: { "Content-Type": "application/x-www-form-urlencoded" },
+    data: data,
+  });
+}
+
+// 鏂囦欢淇-鎵瑰噯
+export function ratifyManageRecordAudit(data) {
+  return request({
+    url: "/manageRecordAudit/ratifyManageRecordAudit",
+    method: "post",
+    data: data,
+  });
+}
+
+//鏂囦欢淇-鍒楄〃
+export function pageManageRecordAudit(query) {
+  return request({
+    url: "/manageRecordAudit/pageManageRecordAudit",
+    method: "get",
+    params: query,
+  });
+}
+
+//鏂囦欢淇-鍒犻櫎
+export function delManageRecordAudit(query) {
+  return request({
+    url: "/manageRecordAudit/delManageRecordAudit",
+    method: "delete",
+    params: query,
+  });
+}
+
+//鏂囦欢瀹氭湡瀹℃煡璁板綍-瀵煎嚭
+export function exportOutManageRecordIntervals(query) {
+  return request({
+    url: "/manageRecordIntervals/exportOutManageRecordIntervals",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鏂囦欢瀹氭湡瀹℃煡璁板綍-鏂板
+export function addManageRecordIntervals(data) {
+  return request({
+    url: "/manageRecordIntervals/addManageRecordIntervals",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鏂囦欢瀹氭湡瀹℃煡璁板綍-缂栬緫
+export function doManageRecordIntervals(data) {
+  return request({
+    url: "/manageRecordIntervals/doManageRecordIntervals",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鏂囦欢瀹氭湡瀹℃煡璁板綍-鍘嗗彶璁板綍-鎵瑰噯
+export function ratifyManageRecordIntervalsTotal(data) {
+  return request({
+    url: "/manageRecordIntervalsTotal/ratifyManageRecordIntervalsTotal",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鏂囦欢瀹氭湡瀹℃煡璁板綍-鍘嗗彶璁板綍-鎻愪氦
+export function submitManageRecordIntervalsTotal(data) {
+  return request({
+    url: "/manageRecordIntervalsTotal/submitManageRecordIntervalsTotal",
+    method: "post",
+    data: data,
+  });
+}
+
+//鏂囦欢瀹氭湡瀹℃煡璁板綍-鍒楄〃
+export function pageManageRecordIntervals(query) {
+  return request({
+    url: "/manageRecordIntervals/pageManageRecordIntervals",
+    method: "get",
+    params: query,
+  });
+}
+
+//鏂囦欢瀹氭湡瀹℃煡璁板綍-鍘嗗彶璁板綍-鍒楄〃
+export function pageManageRecordIntervalsTotal(query) {
+  return request({
+    url: "/manageRecordIntervalsTotal/pageManageRecordIntervalsTotal",
+    method: "get",
+    params: query,
+  });
+}
+
+//鏂囦欢瀹氭湡瀹℃煡璁板綍-鍒犻櫎
+export function delManageRecordIntervals(query) {
+  return request({
+    url: "/manageRecordIntervals/delManageRecordIntervals",
+    method: "delete",
+    params: query,
+  });
+}
+
+//鏂囦欢浣滃簾璁板綍-瀵煎嚭
+export function exportOutManageRecordCancel(query) {
+  return request({
+    url: "/manageRecordCancel/exportOutManageRecordCancel",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鏂囦欢浣滃簾璁板綍-鏂板
+export function addManageRecordCancel(data) {
+  return request({
+    url: "/manageRecordCancel/addManageRecordCancel",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鏂囦欢浣滃簾璁板綍-缂栬緫
+export function doManageRecordCancel(data) {
+  return request({
+    url: "/manageRecordCancel/doManageRecordCancel",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鏂囦欢浣滃簾璁板綍-鎵瑰噯
+export function ratifyManageRecordCancel(data) {
+  return request({
+    url: "/manageRecordCancel/ratifyManageRecordCancel",
+    method: "post",
+    data: data,
+  });
+}
+
+//鏂囦欢浣滃簾璁板綍-鍒犻櫎
+export function delManageRecordCancel(query) {
+  return request({
+    url: "/manageRecordCancel/delManageRecordCancel",
+    method: "delete",
+    params: query,
+  });
+}
+
+//鏂囦欢浣滃簾璁板綍-鍒楄〃
+export function pageManageRecordCancel(query) {
+  return request({
+    url: "/manageRecordCancel/pageManageRecordCancel",
+    method: "get",
+    params: query,
+  });
+}
diff --git a/src/api/cnas/systemManagement/internalAuditManagement.js b/src/api/cnas/systemManagement/internalAuditManagement.js
new file mode 100644
index 0000000..e7ae621
--- /dev/null
+++ b/src/api/cnas/systemManagement/internalAuditManagement.js
@@ -0,0 +1,398 @@
+// 鍐呭绠$悊鐩稿叧鎺ュ彛
+import request from "@/utils/request";
+
+//骞村害璁″垝-鍒嗛〉
+export function pageInternalPlan(query) {
+  return request({
+    url: "/internalPlan/pageInternalPlan",
+    method: "get",
+    params: query,
+  });
+}
+
+//骞村害璁″垝-鍒犻櫎
+export function delInternalPlan(query) {
+  return request({
+    url: "/internalPlan/delInternalPlan",
+    method: "delete",
+    params: query,
+  });
+}
+
+//骞村害璁″垝-瀵煎嚭
+export function exportInternalPlan(query) {
+  return request({
+    url: "/internalPlan/exportInternalPlan",
+    method: "get",
+    headers: {
+      responseType: "blob",
+    },
+    params: query,
+  });
+}
+
+//骞村害璁″垝璇︽儏
+export function getInternalPlanOne(query) {
+  return request({
+    url: "/internalPlan/getInternalPlanOne",
+    method: "get",
+    params: query,
+  });
+}
+
+// 骞村害璁″垝-鏂板
+export function addInternalPlan(data) {
+  return request({
+    url: "/internalPlan/addInternalPlan",
+    method: "post",
+    data: data,
+  });
+}
+
+// 骞村害璁″垝-淇敼
+export function updateInternalPlan(data) {
+  return request({
+    url: "/internalPlan/updateInternalPlan",
+    method: "post",
+    data: data,
+  });
+}
+
+// 骞村害璁″垝-瀹℃牳
+export function examineInternalPlan(data) {
+  return request({
+    url: "/internalPlan/examineInternalPlan",
+    method: "post",
+    data: data,
+  });
+}
+
+// 骞村害璁″垝-鎵瑰噯
+export function ratifyInternalPlan(data) {
+  return request({
+    url: "/internalPlan/ratifyInternalPlan",
+    method: "post",
+    data: data,
+  });
+}
+
+//鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ
+export function pageInternalImplement(query) {
+  return request({
+    url: "/internalImplement/pageInternalImplement",
+    method: "get",
+    params: query,
+  });
+}
+
+//鍐呭瀹炴柦璁″垝鍒犻櫎
+export function delInternalImplement(query) {
+  return request({
+    url: "/internalImplement/delInternalImplement",
+    method: "delete",
+    params: query,
+  });
+}
+
+//瀵煎嚭鍐呭瀹炴柦璁″垝
+export function exportInternalImplement(query) {
+  return request({
+    url: "/internalImplement/exportInternalImplement",
+    method: "get",
+    headers: {
+      responseType: "blob",
+    },
+    params: query,
+  });
+}
+
+//鍐呭瀹炴柦璁″垝璇︽儏
+export function getInternalImplementOne(query) {
+  return request({
+    url: "/internalImplement/getInternalImplementOne",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鍐呭瀹炴柦璁″垝鏂板
+export function addInternalImplement(data) {
+  return request({
+    url: "/internalImplement/addInternalImplement",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鍐呭瀹炴柦璁″垝淇敼
+export function updateInternalImplement(data) {
+  return request({
+    url: "/internalImplement/updateInternalImplement",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鍐呭瀹炴柦璁″垝淇敼
+export function ratifyInternalImplement(data) {
+  return request({
+    url: "/internalImplement/ratifyInternalImplement",
+    method: "post",
+    data: data,
+  });
+}
+
+//浼氳绛惧埌鏌ヨ
+export function pageInternalMeeting(query) {
+  return request({
+    url: "/internalMeeting/pageInternalMeeting",
+    method: "get",
+    params: query,
+  });
+}
+
+// 浼氳绛惧埌鍒犻櫎
+export function delInternalMeeting(query) {
+  return request({
+    url: "/internalMeeting/delInternalMeeting",
+    method: "delete",
+    params: query,
+  });
+}
+
+//瀵煎嚭鍐呭浼氳
+export function exportInternalMeeting(query) {
+  return request({
+    url: "/internalMeeting/exportInternalMeeting",
+    method: "get",
+    headers: {
+      responseType: "blob",
+    },
+    params: query,
+  });
+}
+
+//浼氳绛惧埌鏌ヨ璇︽儏
+export function getInternalMeetingOne(query) {
+  return request({
+    url: "/internalMeeting/getInternalMeetingOne",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鏂板浼氳绛惧埌
+export function addInternalMeeting(data) {
+  return request({
+    url: "/internalMeeting/addInternalMeeting",
+    method: "post",
+    data: data,
+  });
+}
+
+// 浼氳绛惧埌淇敼
+export function updateInternalMeeting(data) {
+  return request({
+    url: "/internalMeeting/updateInternalMeeting",
+    method: "post",
+    data: data,
+  });
+}
+
+//鍐呭妫�鏌ュ垎椤垫煡璇�
+export function pageInternalCheck(query) {
+  return request({
+    url: "/internalCheck/pageInternalCheck",
+    method: "get",
+    params: query,
+  });
+}
+
+//鍐呭妫�鏌ュ垹闄�
+export function delInternalCheck(query) {
+  return request({
+    url: "/internalCheck/delInternalCheck",
+    method: "delete",
+    params: query,
+  });
+}
+
+//瀵煎嚭鍐呭妫�鏌�
+export function exportInternalCheck(query) {
+  return request({
+    url: "/internalCheck/exportInternalCheck",
+    method: "get",
+    headers: {
+      responseType: "blob",
+    },
+    params: query,
+  });
+}
+
+//鍐呭妫�鏌ヨ鎯�
+export function getInternalCheckOne(query) {
+  return request({
+    url: "/internalCheck/getInternalCheckOne",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鍐呭妫�鏌ユ柊澧�
+export function addInternalCheck(data) {
+  return request({
+    url: "/internalCheck/addInternalCheck",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鍐呭妫�鏌ヤ慨鏀�
+export function updateInternalCheck(data) {
+  return request({
+    url: "/internalCheck/updateInternalCheck",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鍐呭妫�鏌ユ壒鍑�
+export function ratifyInternalCheck(data) {
+  return request({
+    url: "/internalCheck/ratifyInternalCheck",
+    method: "post",
+    data: data,
+  });
+}
+
+//鏌ヨ鍐呭绠$悊绾犳鎺柦鍒楄〃
+export function pageInternalCorrect(query) {
+  return request({
+    url: "/internalCorrect/pageInternalCorrect",
+    method: "get",
+    params: query,
+  });
+}
+
+//瀵煎嚭鍐呭绠$悊绾犳鎺柦闄勪欢
+export function exportInternalCorrect(query) {
+  return request({
+    url: "/internalCorrect/exportInternalCorrect",
+    method: "get",
+    headers: {
+      responseType: "blob",
+    },
+    params: query,
+  });
+}
+
+//鏌ヨ鍐呭绠$悊绾犳澶勭悊璇︽儏
+export function getInternalCorrect(query) {
+  return request({
+    url: "/internalCorrect/getInternalCorrect",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鎻愪氦鍐呭绠$悊绾犳鎺柦鍒楄〃
+export function addInternalCorrect(data) {
+  return request({
+    url: "/internalCorrect/addInternalCorrect",
+    method: "post",
+    data: data,
+  });
+}
+
+//鍐呭鎶ュ憡鍒犻櫎
+export function delInternalReport(query) {
+  return request({
+    url: "/internalReport/delInternalReport",
+    method: "delete",
+    params: query,
+  });
+}
+
+//鍐呭鎶ュ憡鍒嗛〉鏌ヨ
+export function pageInternalReport(query) {
+  return request({
+    url: "/internalReport/pageInternalReport",
+    method: "get",
+    params: query,
+  });
+}
+
+//瀵煎嚭鍐呭鎶ュ憡
+export function exportInternalReport(query) {
+  return request({
+    url: "/internalReport/exportInternalReport",
+    method: "get",
+    headers: {
+      responseType: "blob",
+    },
+    params: query,
+  });
+}
+
+//鍐呭鎶ュ憡璇︽儏
+export function getInternalReportOne(query) {
+  return request({
+    url: "/internalReport/getInternalReportOne",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鍐呭鎶ュ憡鏂板
+export function addInternalReport(data) {
+  return request({
+    url: "/internalReport/addInternalReport",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鍐呭鎶ュ憡淇敼
+export function updateInternalReport(data) {
+  return request({
+    url: "/internalReport/updateInternalReport",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鍐呭鎶ュ憡瀹℃牳
+export function examineInternalReport(data) {
+  return request({
+    url: "/internalReport/examineInternalReport",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鍐呭鎶ュ憡璐熻矗浜哄~鍐�
+export function qualityInternalReport(data) {
+  return request({
+    url: "/internalReport/qualityInternalReport",
+    method: "post",
+    data: data,
+  });
+}
+
+//鏌ヨ鍐呭绠$悊绾犳鎺柦闄勪欢
+export function getInternalCorrectFileList(query) {
+  return request({
+    url: "/internalCorrect/getInternalCorrectFileList",
+    method: "get",
+    params: query,
+  });
+}
+
+//鍒犻櫎鍐呭绠$悊绾犳鎺柦闄勪欢
+export function delInternalCorrectFile(query) {
+  return request({
+    url: "/internalCorrect/delInternalCorrectFile",
+    method: "delete",
+    params: query,
+  });
+}
diff --git a/src/api/cnas/systemManagement/measuresDealRisks.js b/src/api/cnas/systemManagement/measuresDealRisks.js
new file mode 100644
index 0000000..2649410
--- /dev/null
+++ b/src/api/cnas/systemManagement/measuresDealRisks.js
@@ -0,0 +1,116 @@
+// 搴斿椋庨櫓鐨勬帾鏂界浉鍏虫帴鍙�
+import request from "@/utils/request";
+
+//鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 鍒嗛〉
+export function getPageResults(query) {
+  return request({
+    url: "/manageRiskAssessmentResults/getPageResults",
+    method: "get",
+    params: query,
+  });
+}
+
+// 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 瀹℃壒
+export function dangerousRiskApproval(data) {
+  return request({
+    url: "/manageRiskAssessmentResults/dangerousRiskApproval",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 鎵瑰噯
+export function hazardIdentificationAndRiskApproval(data) {
+  return request({
+    url: "/manageRiskAssessmentResults/hazardIdentificationAndRiskApproval",
+    method: "post",
+    data: data,
+  });
+}
+
+//鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 鍒犻櫎
+export function removeRiskFactors(query) {
+  return request({
+    url: "/manageRiskAssessmentResults/removeRiskFactors",
+    method: "delete",
+    params: query,
+  });
+}
+
+// 鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 鏂板
+export function addNewRiskFactors(data) {
+  return request({
+    url: "/manageRiskAssessmentResults/addNewRiskFactors",
+    method: "post",
+    data: data,
+  });
+}
+
+//鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙� 瀵煎嚭
+export function exportHazardFactorIdentification(query) {
+  return request({
+    url: "/manageRiskAssessmentResults/exportHazardFactorIdentification",
+    method: "get",
+    headers: {
+      responseType: "blob",
+    },
+    params: query,
+  });
+}
+
+//閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鍒嗛〉
+export function getPageList(query) {
+  return request({
+    url: "/manageControlPlanList/getPageList",
+    method: "get",
+    params: query,
+  });
+}
+
+// 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 瀹℃牳
+export function riskAnalysisApprovalOfControlPlanChecklist(data) {
+  return request({
+    url: "/manageControlPlanList/riskAnalysisApprovalOfControlPlanChecklist",
+    method: "post",
+    data: data,
+  });
+}
+
+// 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鎵瑰噯
+export function approvalOfControlPlanChecklist(data) {
+  return request({
+    url: "/manageControlPlanList/approvalOfControlPlanChecklist",
+    method: "post",
+    data: data,
+  });
+}
+
+//閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鍒犻櫎
+export function deleteSignificantRiskFactorAnalysis(query) {
+  return request({
+    url: "/manageControlPlanList/deleteSignificantRiskFactorAnalysis",
+    method: "delete",
+    params: query,
+  });
+}
+
+// 閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 鏂板
+export function analysisOfMajorRiskFactorsAdded(data) {
+  return request({
+    url: "/manageControlPlanList/analysisOfMajorRiskFactorsAdded",
+    method: "post",
+    data: data,
+  });
+}
+
+//閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗� 瀵煎嚭
+export function exportSignificantRiskFactors(query) {
+  return request({
+    url: "/manageControlPlanList/exportSignificantRiskFactors",
+    method: "get",
+    headers: {
+      responseType: "blob",
+    },
+    params: query,
+  });
+}
diff --git a/src/api/standard/standardLibrary.js b/src/api/standard/standardLibrary.js
index ad374ed..785c6fb 100644
--- a/src/api/standard/standardLibrary.js
+++ b/src/api/standard/standardLibrary.js
@@ -56,15 +56,6 @@
   });
 }
 
-// 缁欐爣鍑嗘爲娣诲姞妫�楠屾爣鍑�
-export function addStandardMethodList(data) {
-  return request({
-    url: "/standardTree/addStandardMethodList",
-    method: "post",
-    data: data,
-  });
-}
-
 // 娣诲姞鏍囧噯鏍�
 export function addStandardTree(data) {
   return request({
@@ -101,32 +92,6 @@
   });
 }
 
-// 鍒犻櫎鏍囧噯鏍戜笅鐨勬楠屾爣鍑�
-export function delStandardMethodByFLSSM(data) {
-  return request({
-    url: "/standardTree/delStandardMethodByFLSSM",
-    method: "post",
-    data: data,
-  });
-}
-
-// 鍒犻櫎鏍囧噯鏍戜笅鐨勬楠屾爣鍑�
-export function delStandardProductByIds(data) {
-  return request({
-    url: "/standardTree/delStandardProductByIds",
-    method: "post",
-    data: data,
-  });
-}
-
-// 鏂板鏍囧噯鏍戜笅鐨勬楠岄」鐩�
-export function addStandardProduct(data) {
-  return request({
-    url: "/standardTree/addStandardProduct",
-    method: "post",
-    data: data,
-  });
-}
 
 // 閫氳繃妫�楠屾爣鍑嗘煡璇㈡楠岄」鐩�
 export function selectStandardProductListByMethodId(query) {
diff --git a/src/assets/images/no-full.svg b/src/assets/images/no-full.svg
new file mode 100644
index 0000000..e78c651
--- /dev/null
+++ b/src/assets/images/no-full.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1712111454775" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5950" width="18" height="18" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M354.133333 682.666667H256v-42.666667h170.666667v170.666667H384v-98.133334L243.2 853.333333l-29.866667-29.866666L354.133333 682.666667z m358.4 0l140.8 140.8-29.866666 29.866666-140.8-140.8V810.666667h-42.666667v-170.666667h170.666667v42.666667h-98.133334zM354.133333 384L213.333333 243.2l29.866667-29.866667L384 354.133333V256h42.666667v170.666667H256V384h98.133333z m358.4 0H810.666667v42.666667h-170.666667V256h42.666667v98.133333L823.466667 213.333333l29.866666 29.866667L712.533333 384z" fill="#606266" p-id="5951"></path></svg>
\ No newline at end of file
diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss
index 541cff9..4e3522c 100644
--- a/src/assets/styles/index.scss
+++ b/src/assets/styles/index.scss
@@ -195,3 +195,6 @@
 .required-span {
   color: red;
 }
+table {
+  border-collapse: collapse; /* 鍏抽敭灞炴�э細鍚堝苟杈规 */
+}
diff --git a/src/components/Onlyoffice/onlyoffice.vue b/src/components/Onlyoffice/onlyoffice.vue
new file mode 100644
index 0000000..a903641
--- /dev/null
+++ b/src/components/Onlyoffice/onlyoffice.vue
@@ -0,0 +1,206 @@
+<!--onlyoffice 缂栬緫鍣�-->
+<template>
+  <div id="vabOnlyOffice"></div>
+</template>
+
+<script>
+export default {
+  name: "VabOnlyOffice",
+  props: ['options'],
+  data() {
+    return {
+      doctype: "",
+      docEditor: null,
+      //鍙傝�僾abOnlyOffice缁勪欢鍙傛暟閰嶇疆
+      option: {
+        url: "",
+        isEdit: false,
+        fileType: "",
+        title: "",
+        lang: "zh-CN",
+        isPrint: true,
+        user: {},
+        editUrl: ""
+      }
+    };
+  },
+  created() {
+    if(this.options){
+      const option = this.options
+      this.option.url = option.url
+      this.option.isEdit = option.isEdit === "true" ? true : false
+      this.option.fileType = option.fileType
+      this.option.title = option.title
+      this.option.lang = option.lang
+      this.option.isPrint = option.isPrint
+      this.option.user.id = option.user_id
+      this.option.user.name = option.user_name
+      this.option.editUrl = option.editUrl
+    }else{
+      const option = this.$route.query
+      this.option.url = option.url
+      this.option.isEdit = option.isEdit === "true" ? true : false
+      this.option.fileType = option.fileType
+      this.option.title = option.title
+      this.option.lang = option.lang
+      this.option.isPrint = option.isPrint
+      this.option.user.id = option.user_id
+      this.option.user.name = option.user_name
+      this.option.editUrl = option.editUrl
+    }
+  },
+  beforeDestroy() {
+    if (this.docEditor !== null) {
+      this.docEditor.destroyEditor();
+      this.docEditor = null;
+    }
+  },
+  watch: {
+    option: {
+      handler: function(n) {
+        this.setEditor(n);
+        this.doctype = this.getFileType(n.fileType);
+      },
+      deep: true
+    }
+  },
+  mounted() {
+    if (this.option.url) {
+      this.setEditor(this.option);
+    }
+  },
+  methods: {
+    async setEditor(option) {
+      if (this.docEditor !== null) {
+        this.docEditor.destroyEditor();
+        this.docEditor = null;
+      }
+      this.doctype = this.getFileType(option.fileType);
+      let config = {
+        document: {
+          //鍚庣紑
+          fileType: option.fileType,
+          key: option.key || "",
+          title: option.title,
+          permissions: {
+            edit: option.isEdit, //鏄惁鍙互缂栬緫: 鍙兘鏌ョ湅锛屼紶false
+            print: option.isPrint,
+            download: false
+            // "fillForms": true,//鏄惁鍙互濉啓琛ㄦ牸锛屽鏋滃皢mode鍙傛暟璁剧疆涓篹dit锛屽垯濉啓琛ㄥ崟浠呭鏂囨。缂栬緫鍣ㄥ彲鐢ㄣ�� 榛樿鍊间笌edit鎴杛eview鍙傛暟鐨勫�间竴鑷淬��
+            // "review": true //璺熻釜鍙樺寲
+          },
+          url: option.url
+        },
+        documentType: this.doctype,
+        editorConfig: {
+          callbackUrl: option.editUrl, //"缂栬緫word鍚庝繚瀛樻椂鍥炶皟鐨勫湴鍧�锛岃繖涓猘pi闇�瑕佽嚜宸卞啓浜嗭紝灏嗙紪杈戝悗鐨勬枃浠堕�氳繃杩欎釜api淇濆瓨鍒拌嚜宸辨兂瑕佺殑浣嶇疆
+          lang: option.lang, //璇█璁剧疆
+          //瀹氬埗
+          customization: {
+            autosave: true, //鏄惁鑷姩淇濆瓨
+            chat: true,
+            comments: false,
+            help: false,
+            "hideRightMenu": false,//瀹氫箟鍦ㄧ涓�娆″姞杞芥椂鏄樉绀鸿繕鏄殣钘忓彸渚ц彍鍗曘�� 榛樿鍊间负false
+            //鏄惁鏄剧ず鎻掍欢
+            plugins: false
+          },
+          user: {
+            id: option.user.id,
+            name: option.user.name
+          },
+          mode: option.model ? option.model : "edit"
+        },
+        width: "100%",
+        height: "100%",
+        token: option.token || ""
+      };
+
+      // eslint-disable-next-line no-undef,no-unused-vars
+      this.docEditor = new DocsAPI.DocEditor("vabOnlyOffice", config);
+    },
+    getFileType(fileType) {
+      let docType = "";
+      let fileTypesDoc = [
+        "doc",
+        "docm",
+        "docx",
+        "dot",
+        "dotm",
+        "dotx",
+        "epub",
+        "fodt",
+        "htm",
+        "html",
+        "mht",
+        "odt",
+        "ott",
+        "pdf",
+        "rtf",
+        "txt",
+        "djvu",
+        "xps"
+      ];
+      let fileTypesCsv = [
+        "csv",
+        "fods",
+        "ods",
+        "ots",
+        "xls",
+        "xlsm",
+        "xlsx",
+        "xlt",
+        "xltm",
+        "xltx"
+      ];
+      let fileTypesPPt = [
+        "fodp",
+        "odp",
+        "otp",
+        "pot",
+        "potm",
+        "potx",
+        "pps",
+        "ppsm",
+        "ppsx",
+        "ppt",
+        "pptm",
+        "pptx"
+      ];
+      if (fileTypesDoc.includes(fileType)) {
+        docType = "text";
+      }
+      if (fileTypesCsv.includes(fileType)) {
+        docType = "spreadsheet";
+      }
+      if (fileTypesPPt.includes(fileType)) {
+        docType = "presentation";
+      }
+      return docType;
+    }
+  }
+};
+</script>
+
+<style scoped>
+html,
+body {
+  height: 100%;
+}
+#app {
+  font-family: Avenir, Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  text-align: center;
+  color: #2c3e50;
+  height: 100%;
+}
+.qualityManual-container {
+  padding: 0 !important;
+  height: 100%;
+}
+.qualityManual-container-office {
+  width: 100%;
+  height: calc(100% - 55px);
+}
+</style>
diff --git a/src/components/Preview/filePreview.vue b/src/components/Preview/filePreview.vue
index b449e48..1105afc 100644
--- a/src/components/Preview/filePreview.vue
+++ b/src/components/Preview/filePreview.vue
@@ -5,7 +5,7 @@
     </div>
     <div v-if="isPdf">
       <object :data="fileUrl" type="application/pdf" width="100%" height="750px">
-        <p>鎮ㄧ殑娴忚鍣ㄤ笉鏀寔 PDF 棰勮銆�<a :href="fileUrl">涓嬭浇 PDF 鏂囦欢</a></p>
+        <p>鎮ㄧ殑娴忚鍣ㄤ笉鏀寔 PDF 棰勮銆�<a :href="fileUrl" style="color: #3a7bfa;">涓嬭浇 PDF 鏂囦欢</a></p>
       </object>
     </div>
     <div v-if="isDoc">
diff --git a/src/components/Table/lims-table.vue b/src/components/Table/lims-table.vue
index fb86ea4..05e1d85 100644
--- a/src/components/Table/lims-table.vue
+++ b/src/components/Table/lims-table.vue
@@ -12,7 +12,7 @@
       <el-table-column v-for="(item, index) in column" :key="index" :column-key="item.columnKey"
         :filter-method="item.filterHandler" :filter-multiple="item.filterMultiple" :filtered-value="item.filteredValue"
         :filters="item.filters" :fixed="item.fixed" :label="item.label" :min-width="item.minWidth" :prop="item.prop"
-        :show-overflow-tooltip="item.dataType === 'action' ? false : true" :sortable="item.sortable ? true : false"
+        :show-overflow-tooltip="item.dataType === 'action' || item.dataType === 'slot' ? false : true" :sortable="item.sortable ? true : false"
         :type="item.type" :width="item.dataType === 'action' ? getWidth(item.operation) : item.width
           " align="center">
         <!-- <div class="123" v-if="item.type == ''"> -->
@@ -70,13 +70,21 @@
                 @click="o.clickFun(scope.row)" :key="key">
                 {{ o.name }}
               </el-button>
-              <el-upload action="#" size="mini" :on-change="(file, fileList) => o.clickFun(scope.row, file, fileList)
-                " :multiple="o.multiple ? o.multiple : false" :limit="o.limit ? o.limit : 1"
+              <el-upload
+                :action="javaApi + o.url +'?id=' +(o.uploadIdFun ? o.uploadIdFun(scope.row): scope.row.id) "
+                size="mini"
+                ref="upload"
+                :multiple="o.multiple ? o.multiple : false"
+                :limit="1"
                 :disabled="o.disabled ? o.disabled(scope.row) : false" :accept="o.accept
                   ? o.accept
                   : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                   " v-if="o.type == 'upload'" style="display: inline-block; width: 50px"
-                v-show="o.showHide ? o.showHide(scope.row) : true" :auto-upload="false" :on-exceed="onExceed"
+                v-show="o.showHide ? o.showHide(scope.row) : true"
+                :headers="uploadHeader"
+                :on-error="onError"
+                :on-exceed="onExceed"
+                :on-success="handleSuccessUp"
                 :show-file-list="false" :key="key">
                 <el-button :size="o.size ? o.size : 'small'" type="text"
                   :disabled="o.disabled ? o.disabled(scope.row) : false">{{ o.name }}</el-button>
@@ -268,7 +276,7 @@
       row.forEach((a) => {
         count += a.name.length;
       });
-      return count * 15 + 60 + "px";
+      return count * 15 + 70 + "px";
     },
     iconFn(row) {
       if (row.name === "缂栬緫" || row.name === "淇敼") {
@@ -297,6 +305,22 @@
     setCurrent(row) {
       this.$refs.multipleTable.setCurrentRow();
     },
+    handleSuccessUp(response, label) {
+      if (typeof label === "string") {
+        if (response.code == 200) {
+          this.upData[label] = response.data.url;
+        }
+      } else {
+        if (response.code == 200) {
+          this.$message.success("涓婁紶鎴愬姛");
+        }
+      }
+    },
+    onError(err, file, fileList) {
+      this.$message.error("涓婁紶澶辫触");
+      this.$refs.upload.clearFiles();
+      this.uploading = false;
+    },
     onExceed() {
       this.$message.warning("瓒呭嚭鏂囦欢涓暟");
     },
diff --git a/src/components/Table/value-table.vue b/src/components/Table/value-table.vue
index 3647f3c..95aa411 100644
--- a/src/components/Table/value-table.vue
+++ b/src/components/Table/value-table.vue
@@ -243,14 +243,7 @@
                 v-else
                 ref="upload"
                 :accept="a.uploadConfig.accept"
-                :action="
-                  javaApi +
-                  a.uploadConfig.url +
-                  '?id=' +
-                  (a.uploadConfig.uploadIdFun
-                    ? a.uploadConfig.uploadIdFun(scope.row)
-                    : scope.row.id)
-                "
+                :action="javaApi + a.uploadConfig.url +'?id=' +(a.uploadConfig.uploadIdFun ? a.uploadConfig.uploadIdFun(scope.row): scope.row.id)"
                 :disabled="
                   a.disabFun ? a.disabFun(scope.row, scope.$index) : false
                 "
diff --git a/src/main.js b/src/main.js
index 9ae30ea..28883c0 100644
--- a/src/main.js
+++ b/src/main.js
@@ -48,6 +48,7 @@
 // 瀛楀吀鏁版嵁缁勪欢
 import DictData from "@/components/DictData";
 import { checkPermi } from "@/utils/permission"; // 鏉冮檺鍒ゆ柇鍑芥暟
+import { getToken } from "@/utils/auth";
 
 // 鍏ㄥ眬鏂规硶鎸傝浇
 Vue.prototype.getDicts = getDicts;
@@ -65,8 +66,11 @@
 };
 Vue.prototype.javaApi = process.env.VUE_APP_BASE_API
   ? process.env.VUE_APP_BASE_API
-  : "http://192.168.1.36:8002";
+  : "http://192.168.0.170:8002";
 Vue.prototype.checkPermi = checkPermi;
+Vue.prototype.uploadHeader = {
+  Authorization: "Bearer " + getToken(),
+};
 
 // 鍏ㄥ眬缁勪欢鎸傝浇
 Vue.component("DictTag", DictTag);
diff --git a/src/views/CNAS/process/method/standardMethod/index.vue b/src/views/CNAS/process/method/standardMethod/index.vue
index f29c0e2..bb4602e 100644
--- a/src/views/CNAS/process/method/standardMethod/index.vue
+++ b/src/views/CNAS/process/method/standardMethod/index.vue
@@ -53,9 +53,9 @@
         <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
       </div>
       <div class="btn">
-        <el-button size="small" @click="$refs.ValueTable.openUpload()" v-if="inPower">
+        <!-- <el-button size="small" @click="$refs.ValueTable.openUpload()" v-if="inPower">
           <i class="el-icon-upload2" style="color: #3a7bfa"></i>
-          <span style="color: #3a7bfa">瀵煎叆</span></el-button>
+          <span style="color: #3a7bfa">瀵煎叆</span></el-button> -->
         <el-button size="small" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
       </div>
     </div>
diff --git a/src/views/CNAS/resourceDemand/standardMaterailRequistion/index.vue b/src/views/CNAS/resourceDemand/standardMaterailRequistion/index.vue
new file mode 100644
index 0000000..9d91405
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterailRequistion/index.vue
@@ -0,0 +1,146 @@
+<template>
+  <div class="capacity-scope">
+    <div class="search">
+      <div>
+        <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
+          <el-form-item label="鏍囧噯鐗╄川鍚嶇О" prop="name">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="searchForm.name"
+                      @keyup.enter.native="searchList"></el-input>
+          </el-form-item>
+          <el-form-item label="瑙勬牸鍨嬪彿" prop="factoryManufacturer">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="searchForm.model"
+                      @keyup.enter.native="searchList"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button size="medium"  @click="resetSearchForm">閲� 缃�</el-button>
+            <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+    <div class="table">
+      <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
+    </div>
+  </div>
+</template>
+
+<script>
+import limsTable from '@/components/Table/lims-table.vue'
+import {
+  getPageSubstanceRecord
+} from '@/api/cnas/resourceDemand/standardMaterailRequistion/standardMaterailRequistion'
+
+export default {
+  components: {
+    limsTable
+    // TableCard,
+    // ZTTable,
+  },
+  data() {
+    return {
+      searchForm: {
+        name: '',
+        factoryManufacturer: '',
+      },
+      tableColumn: [
+        {
+          label: '鏍囧噯鐗╄川鍚嶇О',
+          prop: 'name',
+          minWidth: '120'
+        },
+        {
+          label: '瑙勬牸鍨嬪彿',
+          prop: 'model',
+          minWidth: '100'
+        },
+        {
+          label: '鍑哄巶缂栧彿',
+          prop: 'factoryNum',
+          minWidth: '100'
+        },
+        {
+          label: '鏁伴噺',
+          prop: 'factoryNum',
+          minWidth: '100'
+        },
+        {
+          label: '棰嗙敤浜�',
+          prop: 'borrowUser',
+          minWidth: '100'
+        },
+        {
+          label: '棰嗙敤鏃ユ湡',
+          prop: 'borrowDate',
+          minWidth: '100'
+        },
+        {
+          label: '褰掕繕浜�',
+          prop: 'returnIntegrity',
+          minWidth: '100'
+        },
+        {
+          label: '褰掕繕鏃ユ湡',
+          prop: 'returnDate',
+          minWidth: '100'
+        },
+        {
+          label: '褰掕繕鏃剁姸鎬�',
+          prop: 'returnIntegrity',
+          minWidth: '100'
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+      total: 0,
+      formDia: false,
+      borrowDia: false,
+      returnDia: false,
+    }
+  },
+  mounted() {
+    this.searchList()
+  },
+  methods :{
+    // 鏌ヨ鍒楄〃
+    searchList () {
+      this.tableLoading = true
+      getPageSubstanceRecord({
+        ...this.page,
+        ...this.searchForm
+      }).then(res => {
+        this.tableLoading = false
+        if (res.code === 200){
+          this.tableData = res.data.records
+          this.page.total = res.data.total
+        }
+      }).catch(err => {
+        this.tableLoading = false
+      })
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm () {
+      this.searchForm.name = '';
+      this.searchForm.model = '';
+      this.searchList()
+    },
+    // 鍒嗛〉鍒囨崲
+    pagination(page) {
+      this.page.size = page.limit
+      this.searchList();
+    },
+  }
+}
+</script>
+<style scoped>
+.search {
+  height: 46px;
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/standardMaterial/component/borrowDia.vue b/src/views/CNAS/resourceDemand/standardMaterial/component/borrowDia.vue
new file mode 100644
index 0000000..c3e37a9
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterial/component/borrowDia.vue
@@ -0,0 +1,148 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false"
+               :close-on-press-escape="false"
+               :visible.sync="formDia"
+               title="鏍囧噯鐗╄川鍊熺敤"
+               width="80%" @close="closeBorrowDia">
+      <el-form ref="form" :model="form" :rules="rules" label-position="right" label-width="auto">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鏍囧噯鐗╄川鍚嶇О">
+              <el-input v-model="form.name" disabled size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍨嬪彿">
+              <el-input v-model="form.model" disabled size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="瀹屽ソ鎬�" prop="integrity">
+              <el-input v-model="form.integrity" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍊熺敤浜�" prop="borrowUser">
+              <el-input v-model="form.borrowUser" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鑱旂郴鏂瑰紡" prop="phone">
+              <el-input v-model="form.phone" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍊熷嚭鏃ユ湡" prop="borrowDate">
+              <el-date-picker
+                v-model="form.borrowDate"
+                clearable
+                format="yyyy-MM-dd HH:mm:ss" placeholder="閫夋嫨鏃ユ湡"
+                size="small" style="width: 100%"
+                type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="绾﹀畾褰掕繕鏃ユ湡" prop="borrowReturnDate">
+              <el-date-picker
+                v-model="form.borrowReturnDate"
+                clearable
+                format="yyyy-MM-dd HH:mm:ss" placeholder="閫夋嫨鏃ユ湡"
+                size="small" style="width: 100%"
+                type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍊熷嚭浜�" prop="lender">
+              <el-input v-model="form.lender" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeBorrowDia">鍙� 娑�</el-button>
+        <el-button :loading="loading" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  borrowSubstance
+} from "@/api/cnas/resourceDemand/standardMaterial/standardMaterial";
+
+export default {
+  name: 'borrowDia',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        name: '',
+        model: '',
+        integrity: '',
+        borrowUser: '',
+        phone: '',
+        borrowDate: '',
+        borrowReturnDate: '',
+        lender: '',
+        substanceId: ''
+      },
+      rules: {
+        integrity: [{required: true, message: '璇峰~鍐欏畬濂芥��',trigger: 'blur'}],
+        borrowUser: [{required: true, message: '璇峰~鍐欏�熺敤浜�',trigger: 'blur'}],
+        phone: [{required: true, message: '璇峰~鍐欒仈绯绘柟寮�',trigger: 'blur'}],
+        borrowDate: [{required: true, message: '璇烽�夋嫨鍊熷嚭鏃ユ湡',trigger: 'change'}],
+        borrowReturnDate: [{required: true, message: '璇烽�夋嫨绾﹀畾褰掕繕鏃ユ湡',trigger: 'change'}],
+        lender: [{required: true, message: '璇烽�夋嫨lender',trigger: 'blur'}],
+      },
+    };
+  },
+  mounted() {
+
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia (row) {
+      this.formDia = true
+      this.form.name = row.name
+      this.form.model = row.model
+      this.form.substanceId = row.id
+    },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit () {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.loading = true
+          this.form.status = '0';
+          borrowSubstance(this.form).then(res =>{
+            this.loading = false
+            if (res.code === 200) {
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeBorrowDia()
+            }
+          })
+        } else {
+          return false;
+        }
+      });
+    },
+    closeBorrowDia () {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeBorrowDia')
+    },
+  }
+};
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/CNAS/resourceDemand/standardMaterial/component/formDia.vue b/src/views/CNAS/resourceDemand/standardMaterial/component/formDia.vue
new file mode 100644
index 0000000..1741ffd
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterial/component/formDia.vue
@@ -0,0 +1,182 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false"
+               :close-on-press-escape="false"
+               :visible.sync="formDia"
+               title="鏍囧噯鐗╄川"
+               width="80%" @close="closeYearDia">
+      <el-form ref="form" :model="form" :rules="rules" label-position="right" label-width="auto">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鏍囧噯鐗╄川鍚嶇О" prop="name">
+              <el-input v-model="form.name" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="瑙勬牸鍨嬪彿" prop="model">
+              <el-input v-model="form.model" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鐢熶骇鍘傚" prop="factoryManufacturer">
+              <el-input v-model="form.factoryManufacturer" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍑哄巶缂栧彿" prop="factoryNum">
+              <el-input v-model="form.factoryNum" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="绠$悊缂栧彿" prop="manageNum">
+              <el-input v-model="form.manageNum" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="涓嶇‘瀹氬害" prop="uncertainty">
+              <el-input v-model="form.uncertainty" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏁伴噺" prop="quantity">
+              <el-input v-model="form.quantity" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璐疆鏃ユ湡" prop="acquisitionDate">
+              <el-date-picker
+                v-model="form.acquisitionDate"
+                clearable
+                format="yyyy-MM-dd HH:mm:ss" placeholder="閫夋嫨鏃ユ湡"
+                size="small" style="width: 100%"
+                type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏈夋晥鏈�" prop="effectiveDate">
+              <el-date-picker
+                v-model="form.effectiveDate"
+                clearable
+                format="yyyy-MM-dd HH:mm:ss" placeholder="閫夋嫨鏃ユ湡"
+                size="small" style="width: 100%"
+                type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="妗f缂栧彿" prop="fileNum">
+              <el-input v-model="form.fileNum" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="瀛樻斁浣嶇疆" prop="position">
+              <el-input v-model="form.position" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="澶囨敞" prop="remark">
+              <el-input v-model="form.remark" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeYearDia">鍙� 娑�</el-button>
+        <el-button :loading="loading" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+
+import {
+  addStandardSubstance
+} from "@/api/cnas/resourceDemand/standardMaterial/standardMaterial";
+
+export default {
+  name: 'formDia',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        name: '',
+        model: '',
+        factoryManufacturer: '',
+        factoryNum: '',
+        manageNum: '',
+        uncertainty: '',
+        quantity: '',
+        acquisitionDate: '',
+        effectiveDate: '',
+        fileNum: '',
+        position: '',
+        remark: '',
+        id: '',
+      },
+      rules: {
+        name: [{required: true, message: '璇峰~鍐欐爣鍑嗙墿璐ㄥ悕绉�',trigger: 'blur'}],
+        model: [{required: true, message: '璇峰~鍐欒鏍煎瀷鍙�',trigger: 'blur'}],
+        factoryManufacturer: [{required: true, message: '璇峰~鍐欑敓浜у巶瀹�',trigger: 'blur'}],
+        factoryNum: [{required: true, message: '璇峰~鍐欏嚭鍘傜紪鍙�',trigger: 'blur'}],
+        manageNum: [{required: true, message: '璇峰~鍐欑鐞嗙紪鍙�',trigger: 'blur'}],
+        uncertainty: [{required: true, message: '璇峰~鍐欎笉纭畾搴�',trigger: 'blur'}],
+        quantity: [{required: true, message: '璇峰~鍐欐暟閲�',trigger: 'blur'}],
+        acquisitionDate: [{required: true, message: '璇烽�夋嫨璐疆鏃ユ湡',trigger: 'change'}],
+        effectiveDate: [{required: true, message: '璇烽�夋嫨鏈夋晥鏈�',trigger: 'change'}],
+        fileNum: [{required: true, message: '璇峰~鍐欐。妗堢紪鍙�',trigger: 'blur'}],
+        position: [{required: true, message: '璇峰~鍐欏瓨鏀句綅缃�',trigger: 'blur'}],
+      },
+      operationType: '',
+    };
+  },
+  mounted() {
+
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia (type, row) {
+      this.formDia = true
+      this.operationType = type
+      if (type !== 'add') {
+        this.form = row
+      }
+    },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit () {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.loading = true
+          addStandardSubstance(this.form).then(res => {
+            this.loading = false
+            if (res.code === 201) return
+            this.$message.success('鎿嶄綔鎴愬姛')
+            this.closeYearDia()
+          }).catch(err => {
+            console.log('err---', err);
+            this.loading = false
+          })
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    closeYearDia () {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeYearDia')
+    },
+  }
+};
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/CNAS/resourceDemand/standardMaterial/component/returnDia.vue b/src/views/CNAS/resourceDemand/standardMaterial/component/returnDia.vue
new file mode 100644
index 0000000..2494bce
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterial/component/returnDia.vue
@@ -0,0 +1,125 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false"
+               :close-on-press-escape="false"
+               :visible.sync="formDia"
+               title="鏍囧噯鐗╄川褰掕繕"
+               width="80%" @close="closeReturnDia">
+      <el-form ref="form" :model="form" :rules="rules" label-position="right" label-width="auto">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鏍囧噯鐗╄川鍚嶇О" prop="name">
+              <el-input v-model="form.name" disabled size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍨嬪彿" prop="model">
+              <el-input v-model="form.model" disabled size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="褰掕繕鏃ユ湡" prop="returnDate">
+              <el-date-picker
+                v-model="form.returnDate"
+                clearable
+                format="yyyy-MM-dd HH:mm:ss" placeholder="閫夋嫨鏃ユ湡"
+                size="small" style="width: 100%"
+                type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="褰掕繕浜�" prop="returnedPerson">
+              <el-input v-model="form.returnedPerson" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="瀹屽ソ鎬�" prop="returnIntegrity">
+              <el-input v-model="form.returnIntegrity" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="妫�鏌ヤ汉" prop="rummager">
+              <el-input v-model="form.rummager" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeReturnDia">鍙� 娑�</el-button>
+        <el-button :loading="loading" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  returnSubstance
+} from "@/api/cnas/resourceDemand/standardMaterial/standardMaterial";
+
+export default {
+  name: 'returnDia',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        name: '',
+        model: '',
+        returnedPerson: '',
+        returnDate: '',
+        returnIntegrity: '',
+        rummager: '',
+      },
+      rules: {
+      },
+    };
+  },
+  mounted() {
+
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia (row) {
+      this.formDia = true
+      this.form.name = row.name
+      this.form.model = row.model
+      this.form.substanceId = row.id
+    },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit () {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.loading = true
+          this.form.status = '1';
+          returnSubstance(this.form).then(res => {
+            this.loading = false
+            if (res.code === 200) {
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeReturnDia()
+            }
+          })
+          let internalReport = this.HaveJson(this.form)
+
+        } else {
+          return false;
+        }
+      });
+    },
+    closeReturnDia () {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeReturnDia')
+    },
+  }
+};
+</script>
+
+<style scoped>
+</style>
diff --git a/src/views/CNAS/resourceDemand/standardMaterial/index.vue b/src/views/CNAS/resourceDemand/standardMaterial/index.vue
new file mode 100644
index 0000000..6483368
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterial/index.vue
@@ -0,0 +1,313 @@
+<template>
+  <div class="capacity-scope">
+    <div class="search">
+      <div>
+        <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
+          <el-form-item label="鏍囧噯鐗╄川鍚嶇О" prop="name">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="searchForm.name"
+                      @keyup.enter.native="searchList"></el-input>
+          </el-form-item>
+          <el-form-item label="鐢熶骇鍘傚" prop="factoryManufacturer">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="searchForm.factoryManufacturer"
+                      @keyup.enter.native="searchList"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="searchList">鏌� 璇�</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetSearchForm">閲� 缃�</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div>
+        <el-button size="medium" @click="exportFun">瀵� 鍑�</el-button>
+        <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+      </div>
+    </div>
+    <div class="table">
+      <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
+    </div>
+    <form-dia v-if="formDia" ref="formDia" @closeYearDia="closeYearDia"></form-dia>
+    <borrow-dia v-if="borrowDia" ref="borrowDia" @closeYearDia="closeBorrowDia"></borrow-dia>
+    <return-dia v-if="returnDia" ref="returnDia" @closeYearDia="closeReturnDia"></return-dia>
+  </div>
+
+</template>
+
+<script>
+
+// import FormDia from '../do/a6-standard-material-list/formDia.vue';
+// import BorrowDia from '../do/a6-standard-material-list/borrowDia.vue';
+// import ReturnDia from '../do/a6-standard-material-list/returnDia.vue';
+import limsTable from '@/components/Table/lims-table.vue'
+import {
+  getPageStandardSubstance,
+  removeStandardSubstance,
+  exportOfStandardSubstanceList
+} from '@/api/cnas/resourceDemand/standardMaterial/standardMaterial'
+import FormDia from '../standardMaterial/component/formDia.vue';
+import BorrowDia from '../standardMaterial/component/borrowDia.vue';
+import ReturnDia from '../standardMaterial/component/returnDia.vue';
+export default {
+  components: {
+    limsTable,
+    FormDia,
+    BorrowDia,
+    ReturnDia
+  },
+  data() {
+    return {
+      searchForm: {
+        name: '',
+        factoryManufacturer: '',
+      },
+      tableColumn: [
+        {
+          label: '鏍囧噯鐗╄川鍚嶇О',
+          prop: 'name',
+          minWidth: '120'
+        },
+        {
+          label: '瑙勬牸鍨嬪彿',
+          prop: 'model',
+          minWidth: '100'
+        },
+        {
+          label: '鐢熶骇鍘傚',
+          prop: 'factoryManufacturer',
+          minWidth: '100'
+        },
+        {
+          label: '鍑哄巶缂栧彿',
+          prop: 'factoryNum',
+          minWidth: '100'
+        },
+        {
+          label: '绠$悊缂栧彿',
+          prop: 'manageNum',
+          minWidth: '100'
+        },
+        {
+          label: '涓嶇‘瀹氬害',
+          prop: 'uncertainty',
+          minWidth: '100'
+        },
+        {
+          label: '鏁伴噺',
+          prop: 'quantity',
+          minWidth: '100'
+        },
+        {
+          label: '璐疆鏃ユ湡',
+          prop: 'acquisitionDate',
+          minWidth: '150'
+        },
+        {
+          label: '鏈夋晥鏈�',
+          prop: 'effectiveDate',
+          minWidth: '150'
+        },
+        {
+          label: '妗f缂栧彿',
+          prop: 'fileNum',
+          minWidth: '100'
+        },
+        {
+          label: '瀛樻斁浣嶇疆',
+          prop: 'position',
+          minWidth: '100'
+        },
+        {
+          label: '澶囨敞',
+          prop: 'remark',
+          minWidth: '100'
+        },
+        // {
+        //   label: '鍒涘缓浜�',
+        //   prop: 'createUser',
+        //   minWidth: '100'
+        // },
+        {
+          label: '鍒涘缓鏃堕棿',
+          prop: 'createTime',
+          minWidth: '150'
+        },
+        {
+          dataType: 'action',
+          fixed: 'right',
+          minWidth: '180',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+            },
+            {
+              name: '鍊熺敤',
+              type: 'text',
+              clickFun: (row) => {
+                this.borrow(row);
+              },
+            },
+            {
+              name: '褰掕繕',
+              type: 'text',
+              clickFun: (row) => {
+                this.return(row);
+              }
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delPlan(row)
+              },
+            }
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+      total: 0,
+      formDia: false,
+      borrowDia: false,
+      returnDia: false,
+    }
+  },
+  mounted() {
+    this.searchList()
+  },
+  methods :{
+    exportFun() {
+      this.outLoading = true
+      exportOfStandardSubstanceList(this.searchForm).then(res =>{
+        this.outLoading = false
+        const blob = new Blob([res], {type: 'application/octet-stream'},false);
+        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('瀵煎嚭鎴愬姛')
+          }
+        }
+      })
+    },
+    // 鏌ヨ鍒楄〃
+    searchList () {
+      this.tableLoading = true
+      getPageStandardSubstance({
+        ...this.page,
+        ...this.searchForm
+      }).then(res => {
+        this.tableLoading = false
+        if (res.code === 200){
+          this.tableData = res.data.records
+          this.page.total = res.data.total
+        }
+      })
+    },
+    // 鍒犻櫎
+    delPlan (row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        removeStandardSubstance({id:row.id}).then(res => {
+          this.tableLoading = false
+          if (res.code === 200) {
+            this.$message.success('鍒犻櫎鎴愬姛')
+            this.searchList()
+          }
+        }).catch(err => {
+          this.tableLoading = false
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+    openFormDia (type, row) {
+      this.formDia = true
+      this.$nextTick(() => {
+        this.$refs.formDia.openDia(type, row)
+      })
+    },
+    closeYearDia () {
+      this.formDia = false
+      this.searchList()
+    },
+    // 鍊熺敤
+    borrow (row) {
+      this.borrowDia = true
+      this.$nextTick(() => {
+        this.$refs.borrowDia.openDia(row)
+      })
+    },
+    closeBorrowDia () {
+      this.borrowDia = false
+      this.searchList()
+    },
+    // 褰掕繕
+    return (row) {
+      this.returnDia = true
+      this.$nextTick(() => {
+        this.$refs.returnDia.openDia(row)
+      })
+    },
+    closeReturnDia () {
+      this.returnDia = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm () {
+      this.searchForm.name = '';
+      this.searchForm.factoryManufacturer = '';
+      this.searchList()
+    },
+    // 鍒嗛〉鍒囨崲
+    pagination(page) {
+      this.page.size = page.limit
+      this.searchList();
+    },
+    // 鍒嗛〉
+  }
+}
+</script>
+<style scoped>
+.search {
+  height: 46px;
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/standardMaterialAccept/component/AddRecord.vue b/src/views/CNAS/resourceDemand/standardMaterialAccept/component/AddRecord.vue
new file mode 100644
index 0000000..1e54f5e
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterialAccept/component/AddRecord.vue
@@ -0,0 +1,103 @@
+<template>
+    <el-dialog :visible.sync="dialogVisible" title="鏍囧噯鐗╄川楠屾敹璁板綍" width="70%">
+        <!-- <el-steps :active="currentStep" finish-status="success">
+            <el-step class="cursor-pointer" v-for="(item, index) in steps" :key="index" :title="item">
+            </el-step>
+        </el-steps> -->
+<!--        <el-form :model="model" label-width="140px" size="small">-->
+<!--            <Step1 :model.sync="model"></Step1>-->
+<!--        </el-form>-->
+        <span slot="footer" class="dialog-footer">
+            <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+            <el-button type="primary" @click="submit">淇� 瀛�</el-button>
+        </span>
+    </el-dialog>
+</template>
+
+<script>
+// import Step1 from './Step/Step1.vue'
+export default {
+    components: {
+        // Step1
+    },
+    data() {
+        return {
+            dialogVisible: false,
+            currentStep: 0, // 姝ラ鏉℃樉绀虹鍑犳
+            // steps: ['鎻愪氦', '寮�绠遍獙鏀跺鏍�', '瀹夎楠屾敹妫�鏌�', '瀹夎楠屾敹澶嶆牳', '楠屾敹鏍告煡', '楠屾敹鏍告煡瀹℃牳'],
+            model: {
+                acceptance: {
+                    id: undefined,
+                    producer: undefined, // 鍘傚浠h〃
+                    file: undefined,   // 鐩稿叧闄勪欢
+                    recipient: undefined,   // 鎺ユ敹浜�
+                    signature: undefined,   // 鎺ュ彈绛惧瓧
+                    situation: undefined,   // 楠屾敹鎯呭喌
+                    installation: undefined,    // 瀹夎璋冭瘯鎯呭喌
+                    substanceId: undefined, // 娓呭崟
+                    arriveDate: undefined,   // 鍒拌揣鏃ユ湡
+                    maintenanceUnit: undefined,   // 缁翠慨鍗曚綅
+                },
+                list: []
+            }
+        }
+    },
+    watch: {
+        model(newVal) {
+            this.model = newVal
+        }
+    },
+    methods: {
+        clearForm() {
+            this.model.acceptance.id = undefined
+            this.model.acceptance.producer = undefined
+            this.model.acceptance.file = undefined
+            this.model.acceptance.recipient = undefined
+            this.model.acceptance.signature = undefined
+            this.model.acceptance.situation = undefined
+            this.model.acceptance.installation = undefined
+            this.model.acceptance.substanceId = undefined
+            this.model.acceptance.arriveDate = undefined
+            this.model.acceptance.maintenanceUnit = undefined
+            this.model.list = []
+        },
+        openDialog(form) {
+            console.log(form)
+            if(form) {
+                this.model.acceptance.id = form.acceptance.id
+                this.model.acceptance.producer = form.acceptance.producer
+                this.model.acceptance.file = form.acceptance.file
+                this.model.acceptance.recipient = form.acceptance.recipient
+                this.model.acceptance.signature = form.acceptance.signature
+                this.model.acceptance.situation = form.acceptance.situation
+                this.model.acceptance.installation = form.acceptance.installation
+                this.model.acceptance.substanceId = form.acceptance.substanceId
+                this.model.acceptance.arriveDate = form.acceptance.arriveDate
+                this.model.acceptance.maintenanceUnit = form.acceptance.maintenanceUnit
+                this.model.list = form.list
+            } else {
+                this.clearForm()
+            }
+            this.dialogVisible = true
+        },
+        closeDialog() {
+            this.dialogVisible = false
+        },
+        submit() {
+          if (!this.model.acceptance.substanceId) {
+            this.$message.warning('璇烽�夋嫨娓呭崟')
+            return
+          }
+            this.$emit('submit', this.model)
+            this.closeDialog()
+        }
+    }
+}
+
+</script>
+
+<style scoped>
+.cursor-pointer {
+    cursor: pointer;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/standardMaterialAccept/component/Step1.vue b/src/views/CNAS/resourceDemand/standardMaterialAccept/component/Step1.vue
new file mode 100644
index 0000000..c1f26ad
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterialAccept/component/Step1.vue
@@ -0,0 +1,201 @@
+<!--<template>-->
+<!--    <el-card class="card">-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="鍘傚浠h〃">-->
+<!--                <el-input v-model="model.acceptance.producer"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="鐩稿叧闄勪欢">-->
+<!--                <div class="table-between">-->
+<!--                    <el-input v-model="model.acceptance.file" style="width: 82%;"></el-input>-->
+<!--                    <el-upload-->
+<!--                        ref="upload"-->
+<!--                        style="float: left; margin: 0 12px 0 20px;"-->
+<!--                        :action="action"-->
+<!--                        :show-file-list="false"-->
+<!--                        :on-success="onSuccess"-->
+<!--                    >-->
+<!--                        <el-button type="primary">-->
+<!--                            闄勪欢涓婁紶-->
+<!--                        </el-button>-->
+<!--                    </el-upload>-->
+<!--                </div>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="鎺ユ敹浜�">-->
+<!--                <el-input v-model="model.acceptance.recipient"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="鎺ュ彈绛惧瓧">-->
+<!--                <el-input v-model="model.acceptance.signature"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="楠屾敹鎯呭喌">-->
+<!--                <el-input v-model="model.acceptance.situation"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="瀹夎璋冭瘯鎯呭喌">-->
+<!--                <el-input v-model="model.acceptance.installation"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="娓呭崟" prop="substanceId" required>-->
+<!--                <el-select v-model="model.acceptance.substanceId" placeholder="璇烽�夋嫨" style="width: 100%">-->
+<!--                    <el-option-->
+<!--                        v-for="item in options"-->
+<!--                        :key="item.value"-->
+<!--                        :label="item.name"-->
+<!--                        :value="item.id">-->
+<!--                    </el-option>-->
+<!--                </el-select>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="鍒拌揣鏃ユ湡">-->
+<!--                <el-date-picker-->
+<!--                    v-model="model.acceptance.arriveDate"-->
+<!--                    align="right"-->
+<!--                    type="date"-->
+<!--                    placeholder="閫夋嫨鏃ユ湡"-->
+<!--                    style="width: 100%"-->
+<!--                    value-format="yyyy-MM-dd"-->
+<!--                >-->
+<!--                </el-date-picker>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="缁翠慨鍗曚綅">-->
+<!--                <el-input v-model="model.acceptance.maintenanceUnit"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="24">-->
+<!--            <el-form-item label="澶囦欢纭">-->
+<!--                <el-button type="primary" style="float: right;" @click="addSpareTable">澧炲姞琛�</el-button>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="24">-->
+<!--            <el-form-item>-->
+<!--                <ZTTable-->
+<!--                    style="margin-bottom: 20px;"-->
+<!--                    :column="spareColumns"-->
+<!--                    :table-data="model.list"-->
+<!--                >-->
+<!--                    <template slot="name" slot-scope="{ row, index }">-->
+<!--                        <el-input v-if="row.isEdit" size="small" v-model="row.name"></el-input>-->
+<!--                        <span v-else>{{ row.name }}</span>-->
+<!--                    </template>-->
+<!--                    <template slot="number" slot-scope="{ row, index }">-->
+<!--                        <el-input v-if="row.isEdit" size="small" v-model="row.number"></el-input>-->
+<!--                        <span v-else>{{ row.number }}</span>-->
+<!--                    </template>-->
+<!--                    <template slot="action" slot-scope="{ row, index }">-->
+<!--                        <div v-if="row.isEdit">-->
+<!--                            <el-button type="text" @click="save(index)">淇濆瓨</el-button>-->
+<!--                            <el-button type="text">鍙栨秷</el-button>-->
+<!--                        </div>-->
+<!--                        <div v-else>-->
+<!--                            <el-button type="text" @click="edit(index)">淇敼</el-button>-->
+<!--                        </div>-->
+<!--                    </template>-->
+<!--                </ZTTable>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--    </el-card>-->
+<!--</template>-->
+
+<!--<script>-->
+<!--import ZTTable from '@/components/caorui/ZTTable/index.vue';-->
+<!--import { getStandardSubstanceAll } from "@/assets/api/api";-->
+<!--import axios from 'axios';-->
+
+<!--export default {-->
+<!--    components: {-->
+<!--        ZTTable-->
+<!--    },-->
+<!--    props: {-->
+<!--        model: {-->
+<!--            type: Object,-->
+<!--            default: () => {}-->
+<!--        }-->
+<!--    },-->
+<!--    data() {-->
+<!--        return {-->
+<!--            spareColumns: [-->
+<!--                {-->
+<!--                    label: "鍚嶇О",-->
+<!--                    prop: "name",-->
+<!--                    align: "center",-->
+<!--                    dataType: "slot",-->
+<!--                    slot: "name",-->
+<!--                }, {-->
+<!--                    label: "鏁伴噺",-->
+<!--                    prop: "number",-->
+<!--                    align: "center",-->
+<!--                    dataType: "slot",-->
+<!--                    slot: "number",-->
+<!--                }, {-->
+<!--                    label: "鎿嶄綔",-->
+<!--                    align: "center",-->
+<!--                    dataType: "slot",-->
+<!--                    slot: "action",-->
+<!--                    width: 150-->
+<!--                }-->
+<!--            ],-->
+<!--            options: []-->
+<!--        }-->
+<!--    },-->
+<!--    computed: {-->
+<!--        action() {-->
+<!--            return `${this.javaApi}/${this.$api.personnel.saveCNASFile}`-->
+<!--        }-->
+<!--    },-->
+<!--    mounted() {-->
+<!--        this.getStand()-->
+<!--    },-->
+<!--    methods: {-->
+<!--        async getStand() {-->
+<!--            const { code, data } = await axios({-->
+<!--                url: getStandardSubstanceAll,-->
+<!--                method: 'get'-->
+<!--            })-->
+<!--            this.options = data-->
+<!--        },-->
+<!--        addSpareTable() {-->
+<!--            this.model.list.push({-->
+<!--                acceptanceId: this.model.acceptance.id,-->
+<!--                name: '',-->
+<!--                number: '',-->
+<!--                isEdit: true-->
+<!--            })-->
+<!--        },-->
+<!--        onSuccess(response) {-->
+<!--            this.model.acceptance.file = response.data-->
+<!--            this.$emit('update:model', this.model)-->
+<!--        },-->
+<!--        save(index) {-->
+<!--            this.model.list[index].isEdit = false-->
+<!--            this.$emit('update:model', this.model)-->
+<!--        },-->
+<!--        edit(index) {-->
+<!--            this.model.list[index].isEdit = true-->
+<!--        }-->
+<!--    }-->
+<!--}-->
+<!--</script>-->
+
+<!--<style scoped>-->
+<!--.card {-->
+<!--    margin-top: 1em;-->
+<!--    height: 56vh;-->
+<!--    overflow-y: scroll;-->
+<!--}-->
+<!--.table-between {-->
+<!--    display: flex;-->
+<!--    justify-content: space-between;-->
+<!--}-->
+<!--</style>-->
diff --git a/src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue b/src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue
new file mode 100644
index 0000000..b6bb91f
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue
@@ -0,0 +1,230 @@
+<template>
+  <div class="capacity-scope">
+    <div class="search">
+      <div>
+        <el-form :model="form" ref="form" size="small" :inline="true">
+          <el-form-item label="鐗╄川鍚嶇О">
+            <el-input v-model="form.search"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button @click="reset">閲� 缃�</el-button>
+            <el-button type="primary" @click="getTableData">鏌� 璇�</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div>
+        <el-button icon="el-icon-plus" size="small" type="primary" @click="openDialog">娣诲姞楠屾敹</el-button>
+        <el-button size="small" type="primary" @click="exportExcel">瀵煎嚭</el-button>
+      </div>
+    </div>
+    <div class="table">
+      <lims-table :tableData="tableData" :column="columns" :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
+    </div>
+    <AddRecord ref="addRecordRef" @submit="submit"></AddRecord>
+  </div>
+
+<!--    <div class="tables">-->
+<!--      <ZTTable-->
+<!--        :column="columns"-->
+<!--        :table-data="tableData"-->
+<!--      >-->
+<!--        <template slot="action" slot-scope="{ row }">-->
+<!--          <el-button type="text" @click="edit(row)">缂栬緫</el-button>-->
+<!--        </template>-->
+<!--      </ZTTable>-->
+<!--      <div class="pagination">-->
+<!--        <div></div>-->
+<!--        <el-pagination-->
+<!--          :page-size="pagination.pageSize"-->
+<!--          :page-sizes="[10, 20, 30, 40]"-->
+<!--          :total="pagination.total"-->
+<!--          layout="total, sizes, prev, pager, next, jumper"-->
+<!--          @current-change="handleCurrent"-->
+<!--          @size-change="handleSize"-->
+<!--        >-->
+<!--        </el-pagination>-->
+<!--      </div>-->
+<!--    </div>-->
+<!--    <AddRecord ref="addRecordRef" @submit="submit"></AddRecord>-->
+</template>
+
+<script>
+// import axios from "axios";
+// import { getPageAcceptance, addAcceptance, updateAcceptance, getAcceptanceDetails, exportAcceptance } from "@/assets/api/api";
+// import ZTTable from '@/components/caorui/ZTTable/index.vue';
+// import AddRecord from './components/AddRecord.vue';
+
+import limsTable from '@/components/Table/lims-table.vue'
+import {
+  getPageAcceptance,
+  updateAcceptanc,
+  addAcceptance
+} from '@/api/cnas/resourceDemand/standardMaterialAccept/standardMaterialAccept'
+export default {
+  components: {
+    limsTable
+
+  },
+  data() {
+    return {
+      form: {
+        search: undefined
+      },
+      columns: [
+        {
+          label: "鍑哄満缂栧彿",
+          prop: "factoryNum"
+        },
+        {
+          label: "鏈夋晥鏈�",
+          prop: "effectiveDate"
+        },
+        {
+          label: "鐢熶骇鍘傚",
+          prop: "factoryManufacturer"
+        },
+        {
+          label: "鏂囨。缂栧彿",
+          prop: "fileNum"
+        },
+        {
+          label: "鏍囧噯鐗╄川鍚嶇О",
+          prop: "name"
+        },
+        {
+          label: "瑙勬牸鍨嬪彿",
+          prop: "model"
+        },
+        {
+          label: "绠$悊缂栧彿",
+          prop: "manageNum"
+        },
+        {
+          label: "瀛樻斁浣嶇疆",
+          prop: "position"
+        },
+        // {
+        //     label: "搴忓垪鍙�",
+        //     prop: "manageNum"
+        // },
+        {
+          label: "鎻愪氦鏃ユ湡",
+          prop: "acquisitionDate"
+        },
+        {
+          label: "鏁伴噺",
+          prop: "quantity"
+        },
+        {
+          fixed: "right",
+          label: "鎿嶄綔",
+          align: "center",
+          dataType: "slot",
+          slot: "action",
+        },
+      ],
+      tableData: [],
+      page: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+      tableLoading: false,
+    }
+  },
+  mounted() {
+    this.getTableData()
+  },
+  methods: {
+    async getTableData() {
+      const res = await  getPageAcceptance(this.form);
+      if(res.code === 200){
+        this.tableData = res.data.records;
+        this.page.total = res.data.total;
+      }
+
+    },
+    openDialog() {
+      this.$refs.addRecordRef.openDialog()
+    },
+    async submit(form) {
+
+      const {code} = await form.acceptance.id ? updateAcceptanc(this.form):addAcceptance((this.form));
+      if(code == 200) {
+        this.$message.success(`${form.acceptance.id ? '缂栬緫':'娣诲姞'}鎴愬姛`)
+        this.getTableData()
+      }
+    },
+    async edit(row) {
+      const res = await this.getDetail(row.id)
+      this.$refs.addRecordRef.openDialog({
+        acceptance: res.acceptance,
+        list: res.list
+      })
+    },
+    async getDetail(id) {
+      const { code, data } = await axios({
+        method: 'get',
+        url: getAcceptanceDetails,
+        params: { id }
+      })
+      if(code == 200) {
+        return data;
+      }
+    },
+    reset() {
+      this.form.search = undefined
+      this.getTableData()
+    },
+    async exportExcel() {
+      const res = await axios({
+        method: "get",
+        url: `${exportAcceptance}`,
+        responseType: "blob"
+      })
+      const blob = new Blob([res], {type: 'application/octet-stream'});
+      //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+      let reader = new FileReader();
+      reader.readAsText(blob, 'utf-8');
+      reader.onload = () => {
+        try {
+          let result = JSON.parse(reader.result);
+          if (result.message) {
+            this.$message.error(result.message);
+          } else {
+            const url = URL.createObjectURL(blob);
+            const link = document.createElement('a');
+            link.href = url;
+            link.download = '鏍囧噯鐗╄川楠屾敹.xlsx';
+            link.click();
+            this.$message.success('瀵煎嚭鎴愬姛')
+          }
+        } catch (err) {
+          console.log(err);
+          const url = URL.createObjectURL(blob);
+          const link = document.createElement('a');
+          link.href = url;
+          link.download = '鏍囧噯鐗╄川楠屾敹.xlsx';
+          link.click();
+          this.$message.success('瀵煎嚭鎴愬姛')
+        }
+      }
+    },
+
+    // 鍒嗛〉鍒囨崲
+    pagination(page) {
+      this.page.size = page.limit
+      this.getTableData()
+    },
+  }
+}
+</script>
+
+<style scoped>
+.search {
+  height: 46px;
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/correctiveAction/components/ViewTestRecord.vue b/src/views/CNAS/systemManagement/correctiveAction/components/ViewTestRecord.vue
new file mode 100644
index 0000000..3c6a5bd
--- /dev/null
+++ b/src/views/CNAS/systemManagement/correctiveAction/components/ViewTestRecord.vue
@@ -0,0 +1,169 @@
+<template>
+  <div>
+    <el-dialog :visible.sync="filesDialogVisible" title="闄勪欢" width="80%" @closed="closeFilesLook">
+      <div style="display: flex;justify-content: space-between;">
+        <el-upload ref='upload' :action="fileAction" :auto-upload="true" :before-upload="fileBeforeUpload"
+          :data="{ superviseDetailsCorrectId: info.superviseDetailsCorrectId }" :headers="uploadHeader"
+          :on-error="onError" :on-success="handleSuccessUp" :show-file-list="false"
+          accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;">
+          <el-button size="small" style="height: 38px" type="primary">闄勪欢涓婁紶</el-button>
+        </el-upload>
+      </div>
+      <div>
+        <limsTable ref="yearTable" :column="columnData" :height="'calc(100vh - 30em)'" :highlightCurrentRow="true"
+          :table-data="tableData" :table-loading="tableLoading" style="margin-top: 0.5em;">
+        </limsTable>
+      </div>
+    </el-dialog>
+    <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" top="5vh" width="800px">
+      <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.fileUrl"
+        style="height: 90vh;overflow-y: auto;" />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import filePreview from '@/components/Preview/filePreview.vue'
+import {
+  getSuperviseDetailCorrectFileList,
+  delSuperviseDetailCorrectFile,
+} from '@/api/cnas/systemManagement/correctiveAction.js'
+export default {
+  name: 'ViewTestRecord',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { filePreview, limsTable },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      filesDialogVisible: false,
+      tableLoading: false,
+      filesLookInfo: {},
+      columnData: [
+        {
+          label: '鏂囦欢鍚嶇О',
+          prop: 'fileName',
+          minWidth: '150px'
+        },
+        {
+          dataType: 'action',
+          minWidth: '100',
+          label: '鎿嶄綔',
+          fixed: 'right',
+          operation: [
+            {
+              name: '棰勮',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleLook(row)
+              }
+            },
+            {
+              name: '涓嬭浇',
+              type: 'text',
+              clickFun: (row) => {
+                this.upload(row)
+              }
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delete(row)
+              }
+            }
+          ]
+        }
+      ],
+      tableData: [],
+      info: {},
+      currentInfo: {},
+      lookDialogVisible: false,
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia(row) {
+      this.filesDialogVisible = true
+      this.info = row
+      this.searchTableList()
+    },
+    // 鏌ヨ闄勪欢鍒楄〃
+    searchTableList() {
+      this.tableLoading = true
+      getSuperviseDetailCorrectFileList({ superviseDetailsCorrectId: this.info.superviseDetailsCorrectId }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data
+      }).catch(err => {
+        this.tableLoading = false
+        console.log('err---', err);
+      })
+    },
+    closeFilesLook() {
+      this.filesDialogVisible = false
+    },
+    // 鏌ョ湅鏂囦欢
+    handleLook(row) {
+      this.currentInfo = row
+      this.lookDialogVisible = true
+    },
+    // 涓嬭浇
+    upload(row) {
+      let url = '';
+      if (row.type == 1) {
+        url = this.javaApi + '/img/' + row.fileUrl
+        this.$download.saveAs(url, row.fileName);
+      } else {
+        url = this.javaApi + '/word/' + row.fileUrl
+        this.$download.saveAs(url, row.fileName);
+      }
+    },
+    // 鍒犻櫎
+    delete(row) {
+      this.tableLoading = true
+      delSuperviseDetailCorrectFile({ superviseDetailsCorrectFileId: row.superviseDetailsCorrectFileId }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.$message.success('鍒犻櫎鎴愬姛')
+        this.searchTableList()
+      }).catch(err => {
+        this.tableLoading = false
+        console.log('err---', err);
+      })
+    },
+    // 涓婁紶楠岃瘉
+    fileBeforeUpload(file) {
+      let flag = true
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload.clearFiles()
+        flag = false
+      }
+      if (!flag) {
+        return Promise.reject(flag); //姝g‘鐨勭粓姝�
+      }
+    },
+    onError(err, file, fileList, type) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload.clearFiles()
+    },
+    handleSuccessUp(response,) {
+      this.upLoading = false;
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+        this.searchTableList()
+      }
+    },
+  },
+  computed: {
+    fileAction() {
+      return this.javaApi + '/qualitySupervise/uploadSuperviseDetailCorrectFile'
+
+    }
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/src/views/CNAS/systemManagement/correctiveAction/components/correctiveInfo.vue b/src/views/CNAS/systemManagement/correctiveAction/components/correctiveInfo.vue
new file mode 100644
index 0000000..16d0d92
--- /dev/null
+++ b/src/views/CNAS/systemManagement/correctiveAction/components/correctiveInfo.vue
@@ -0,0 +1,258 @@
+<template>
+  <div>
+    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="formDia" title="绾犳鎺柦澶勭悊鍗�"
+      width="60%" @close="closeProcessingDia">
+      <div style="height: 660px; overflow-y: auto">
+        <table border="1" cellspacing="10" class="tables">
+          <tr>
+            <td class="td-title">
+              <p>鍩硅璁″垝锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-select v-model="form.personTrainingDetailedId" clearable filterable style="width: 100%" disabled
+                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>涓嶅悎鏍兼垨鍋忕浜嬪疄鐨勬弿杩帮細</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <span class="td-info1"> {{ form.raiseResult }}</span>
+            </td>
+          </tr>
+          <tr>
+            <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" colspan="3">
+              {{ form.raiseTime }}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>鍘熷洜鍒嗘瀽锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <span class="td-info1"> {{ form.causeResult }}</span>
+            </td>
+          </tr>
+          <tr>
+            <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">
+              {{ form.causeTime }}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>绾犳鎺柦锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <span class="td-info1"> {{ form.correctResult }}</span>
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>鎻愬嚭瑕佹眰閮ㄩ棬纭锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <span class="td-info1"> {{ form.raiseDepartmentAffirm }}</span>
+            </td>
+          </tr>
+          <tr>
+            <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" colspan="3">
+              {{ form.correctTime }}
+            </td>
+          </tr>
+          <tr>
+            <td class="td-title">
+              <p>瀹炴柦楠岃瘉缁撴灉锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <span class="td-info1"> {{ form.validationResult }}</span>
+            </td>
+          </tr>
+          <tr>
+            <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" colspan="3">
+              {{ form.validationTime }}
+            </td>
+          </tr>
+        </table>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getSuperviseDetailCorrect,
+  getThisYearTrainingDetailed,
+} from '@/api/cnas/systemManagement/correctiveAction.js'
+export default {
+  name: 'correctiveInfo',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      yearTrainingDetailed: [],
+      form: {
+        superviseDetailsId: '',
+        raiseResult: '',
+        vdeRaiseResult: '',
+        causeUserId: '',
+        raiseUserName: '',
+        raiseDepartment: '',
+        raiseTime: '',
+        causeResult: '',
+        causeUserName: '',
+        causeDepartment: '',
+        causeTime: '',
+        correctUserId: '',
+        correctResult: '',
+        raiseDepartmentAffirm: '',
+        correctUserName: '',
+        correctDepartment: '',
+        correctTime: '',
+        validationUserId: '',
+        validationResult: '',
+        validationUserName: '',
+        validationDepartment: '',
+        validationTime: '',
+      },
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia(row) {
+      this.formDia = true
+      this.searchInfo(row)
+      this.form.superviseDetailsId = row.superviseDetailsId
+      this.getYearTrainingDetailed() // 鑾峰彇鍩硅璁″垝
+    },
+    // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+    searchInfo(row) {
+      this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId
+      getSuperviseDetailCorrect({ superviseDetailsId: row.superviseDetailsId }).then(res => {
+        if (res.code === 201) return
+        this.form = res.data
+      }).catch(err => {
+        console.log('err---', err);
+      })
+    },
+    getYearTrainingDetailed() {
+      getThisYearTrainingDetailed().then(res => {
+        this.yearTrainingDetailed = res.data
+      })
+    },
+    // 鍏抽棴寮规
+    closeProcessingDia() {
+      this.formDia = false
+    },
+  }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+  margin: 5vh 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/systemManagement/correctiveAction/index.vue b/src/views/CNAS/systemManagement/correctiveAction/index.vue
new file mode 100644
index 0000000..6e92fbd
--- /dev/null
+++ b/src/views/CNAS/systemManagement/correctiveAction/index.vue
@@ -0,0 +1,203 @@
+<template>
+  <div>
+    <div class="search-background">
+      <span class="search-group">
+        <span style="width: 150px">涓嶅悎鏍兼弿杩帮細</span>
+        <el-input v-model="searchForm.raiseResult" clearable size="small"></el-input>
+      </span>
+      <span class="search-group">
+        <el-button size="small" @click="resetSearchForm">閲� 缃�</el-button>
+        <el-button size="small" type="primary" @click="searchList">鏌� 璇�</el-button>
+      </span>
+    </div>
+    <div class="table">
+      <div>
+        <TableCard :showForm="false" :showTitle="false">
+          <template v-slot:table>
+            <limsTable :column="tableColumn" :height="'calc(100vh - 17em)'" :table-data="tableData"
+              :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination"
+              :page="page">
+            </limsTable>
+          </template>
+        </TableCard>
+      </div>
+    </div>
+    <corrective-info v-if="correctiveInfo" ref="correctiveInfo"></corrective-info>
+    <ViewTestRecord v-if="viewTestRecordDialog" ref="viewTestRecordDialog"></ViewTestRecord>
+  </div>
+</template>
+
+<script>
+import TableCard from '@/components/TableCard/index.vue';
+import limsTable from "@/components/Table/lims-table.vue";
+import CorrectiveInfo from './components/correctiveInfo.vue';
+// import QualityInfo from '../do/a7-nonconforming-item/qualityInfo.vue';
+import ViewTestRecord from './components/ViewTestRecord.vue';
+import {
+  pageSuperviseDetailCorrect,
+  exportSuperviseDetaillCorrect,
+} from '@/api/cnas/systemManagement/correctiveAction.js'
+
+export default {
+  name: 'a8-corrective-action',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {
+    // QualityInfo, 
+    CorrectiveInfo,
+    limsTable,
+    TableCard,
+    ViewTestRecord
+  },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        raiseResult: '',
+      },
+      tableColumn: [
+        {
+          label: '涓嶅悎鏍兼垨鍋忕浜嬪疄鐨勬弿杩�',
+          prop: 'raiseResult',
+          minWidth: '100'
+        },
+        {
+          label: '鍘熷洜鍒嗘瀽',
+          prop: 'causeResult',
+          minWidth: '100'
+        },
+        {
+          label: '绾犳鎺柦',
+          prop: 'correctResult',
+          minWidth: '100'
+        },
+        {
+          label: '瀹炴柦楠岃瘉缁撴灉',
+          prop: 'validationResult',
+          minWidth: '100'
+        },
+        {
+          dataType: 'action',
+          minWidth: '60',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '鏌ョ湅',
+              type: 'text',
+              clickFun: (row) => {
+                this.viewInfo(row);
+              },
+            },
+            {
+              name: '瀵煎嚭',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              }
+            },
+            {
+              name: '鏌ョ湅闄勪欢',
+              type: 'text',
+              clickFun: (row) => {
+                this.viewFiles(row);
+              },
+            },
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+      },
+      total: 0,
+      correctiveInfo: false,
+      viewTestRecordDialog: false,
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      const entity = {
+        raiseResult: this.searchForm.raiseResult,
+      }
+      const page = this.page
+      this.tableLoading = true
+      pageSuperviseDetailCorrect({ ...entity, ...page }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data.records
+        this.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.tableLoading = false
+      })
+    },
+    // 瀵煎嚭
+    handleDown(row) {
+      exportSuperviseDetaillCorrect({ superviseDetailsCorrectId: row.superviseDetailsCorrectId }).then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '鐩戠潱绾犳鎺柦' + '.docx');
+      })
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.raiseResult = '';
+      this.searchList()
+    },
+    // 鏌ョ湅璇︽儏
+    viewInfo(row) {
+      this.correctiveInfo = true
+      this.$nextTick(() => {
+        this.$refs.correctiveInfo.openDia(row)
+      })
+    },
+    // 鏌ョ湅闄勪欢
+    viewFiles(row) {
+      this.viewTestRecordDialog = true
+      this.$nextTick(() => {
+        this.$refs.viewTestRecordDialog.openDia(row)
+      })
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+  }
+};
+</script>
+
+<style scoped>
+.view-title {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: 60px;
+  padding-left: 20px;
+}
+
+.search-background {
+  width: 100%;
+  height: 80px;
+  line-height: 80px;
+  background-color: #ffffff;
+  display: flex;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+
+.table {
+  background-color: #ffffff;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/customerSatisfaction/components/formDialog.vue b/src/views/CNAS/systemManagement/customerSatisfaction/components/formDialog.vue
new file mode 100644
index 0000000..13e5d6d
--- /dev/null
+++ b/src/views/CNAS/systemManagement/customerSatisfaction/components/formDialog.vue
@@ -0,0 +1,256 @@
+<template>
+  <div>
+    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="formDia" title="瀹㈡埛婊℃剰搴﹁皟鏌ヨ〃"
+      width="70%" @close="closeFormDia">
+      <table border="1" cellspacing="10" class="tables">
+        <tr>
+          <td class="td-title">
+            <p>鍗曚綅鍚嶇О锛�</p>
+          </td>
+          <td class="td-info" colspan="2">
+            <el-input v-model="form.unitName" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+            </el-input>
+          </td>
+          <td class="td-title">
+            <p>鏃ユ湡锛�</p>
+          </td>
+          <td class="td-info" colspan="2">
+            <el-date-picker v-model="form.fillDate" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" type="date"
+              value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </td>
+        </tr>
+        <tr>
+          <td class="td-title">
+            <p>濮撳悕锛�</p>
+          </td>
+          <td class="td-info">
+            <el-input v-model="form.userName" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+            </el-input>
+          </td>
+          <td class="td-title">
+            <p>閮ㄩ棬锛�</p>
+          </td>
+          <td class="td-info">
+            <el-input v-model="form.department" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+            </el-input>
+          </td>
+          <td class="td-title">
+            <p>鑱旂郴鐢佃瘽锛�</p>
+          </td>
+          <td class="td-info">
+            <el-input v-model="form.contactNumber" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+            </el-input>
+          </td>
+        </tr>
+        <tr>
+          <td class="td-title">
+            <p>鏈嶅姟鎬佸害锛�</p>
+          </td>
+          <td class="td-info" colspan="2">
+            <el-radio-group v-model="form.serviceAttitude" v-removeAriaHidden>
+              <el-radio :label="0">婊℃剰</el-radio>
+              <el-radio :label="1">涓�鑸�</el-radio>
+              <el-radio :label="2">涓嶆弧鎰�</el-radio>
+            </el-radio-group>
+          </td>
+          <td class="td-title">
+            <p>寤鸿锛�</p>
+          </td>
+          <td class="td-info" colspan="2">
+            <el-input v-model="form.serviceAttitudeSuggestion" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+            </el-input>
+          </td>
+        </tr>
+        <tr>
+          <td class="td-title">
+            <p>鎶�鏈兘鍔涳細</p>
+          </td>
+          <td class="td-info" colspan="2">
+            <el-radio-group v-model="form.technicalCompetence" v-removeAriaHidden>
+              <el-radio :label="0">婊℃剰</el-radio>
+              <el-radio :label="1">涓�鑸�</el-radio>
+              <el-radio :label="2">涓嶆弧鎰�</el-radio>
+            </el-radio-group>
+          </td>
+          <td class="td-title">
+            <p>寤鸿锛�</p>
+          </td>
+          <td class="td-info" colspan="2">
+            <el-input v-model="form.technicalCompetenceSuggestion" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+            </el-input>
+          </td>
+        </tr>
+        <tr>
+          <td class="td-title">
+            <p>妫�娴嬪伐浣滐細</p>
+          </td>
+          <td class="td-info" colspan="2">
+            <el-radio-group v-model="form.inspectionWork" v-removeAriaHidden>
+              <el-radio :label="0">婊℃剰</el-radio>
+              <el-radio :label="1">涓�鑸�</el-radio>
+              <el-radio :label="2">涓嶆弧鎰�</el-radio>
+            </el-radio-group>
+          </td>
+          <td class="td-title">
+            <p>寤鸿锛�</p>
+          </td>
+          <td class="td-info" colspan="2">
+            <el-input v-model="form.inspectionWorkSuggestion" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+            </el-input>
+          </td>
+        </tr>
+        <tr>
+          <td class="td-title">
+            <p>鏀惰垂鍚堢悊鎬э細</p>
+          </td>
+          <td class="td-info" colspan="2">
+            <el-radio-group v-model="form.reasonableFees" v-removeAriaHidden>
+              <el-radio :label="0">婊℃剰</el-radio>
+              <el-radio :label="1">涓�鑸�</el-radio>
+              <el-radio :label="2">涓嶆弧鎰�</el-radio>
+            </el-radio-group>
+          </td>
+          <td class="td-title">
+            <p>寤鸿锛�</p>
+          </td>
+          <td class="td-info" colspan="2">
+            <el-input v-model="form.reasonableFeesSuggestion" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+            </el-input>
+          </td>
+        </tr>
+        <tr>
+          <td class="td-title">
+            <p>鎮ㄥ鎴戜滑鐨勫笇鏈涳細</p>
+          </td>
+          <td class="td-info" colspan="5">
+            <el-input v-model="form.remark" :rows="4" placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+            </el-input>
+          </td>
+        </tr>
+      </table>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeFormDia">鍙� 娑�</el-button>
+        <el-button :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addClientSatisfaction,
+  updateClientSatisfaction
+} from '@/api/cnas/systemManagement/customerSatisfaction.js'
+export default {
+  name: 'formDialog',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      form: {
+        unitName: '',
+        fillDate: '',
+        userName: '',
+        department: '',
+        contactNumber: '',
+        serviceAttitude: '',
+        technicalCompetence: '',
+        technicalCompetenceSuggestion: '',
+        inspectionWork: '',
+        inspectionWorkSuggestion: '',
+        reasonableFees: '',
+        reasonableFeesSuggestion: '',
+        remark: '',
+        clientSatisfactionId: '',
+      },
+      operationType: '',
+      editLoad: false,
+
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia(type, row) {
+      this.formDia = true;
+      this.operationType = type
+      if (this.operationType === 'edit') {
+        this.form = { ...row }
+      }
+    },
+    handleEdit() {
+      if (!this.form.unitName) {
+        this.$message.warning('璇峰~鍐欏崟浣嶅悕绉�')
+        return
+      }
+      if (!this.form.department) {
+        this.$message.warning('璇峰~鍐欓儴闂�')
+        return
+      }
+      this.editLoad = true
+      if (this.operationType === 'add') {
+        addClientSatisfaction(this.form).then(res => {
+          this.editLoad = false
+          if (res.code === 201) return
+          this.$message.success('鎻愪氦鎴愬姛')
+          this.closeFormDia()
+        }).catch(err => {
+          console.log('err---', err);
+          this.editLoad = false
+        })
+      } else {
+        updateClientSatisfaction(this.form).then(res => {
+          this.editLoad = false
+          if (res.code === 201) return
+          this.$message.success('鎻愪氦鎴愬姛')
+          this.closeFormDia()
+        }).catch(err => {
+          console.log('err---', err);
+          this.editLoad = false
+        })
+      }
+    },
+    closeFormDia() {
+      this.formDia = false;
+      this.$emit('closeFormDia')
+    },
+  }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+  margin: 10vh 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/systemManagement/customerSatisfaction/index.vue b/src/views/CNAS/systemManagement/customerSatisfaction/index.vue
new file mode 100644
index 0000000..414a023
--- /dev/null
+++ b/src/views/CNAS/systemManagement/customerSatisfaction/index.vue
@@ -0,0 +1,405 @@
+<template>
+  <div>
+    <div>
+      <div class="search-background">
+        <span v-if="tabIndex === '0'" class="search-group">
+          <span style="width: 150px">鍗曚綅鍚嶇О锛�</span>
+          <el-input v-model="searchForm.unitName" clearable size="small"></el-input>
+        </span>
+        <span v-if="tabIndex === '1'" class="search-group">
+          <span style="width: 150px">鏂囦欢鍚嶇О锛�</span>
+          <el-input v-model="searchForm1.fileName" clearable size="small"></el-input>
+        </span>
+        <span class="search-group">
+          <el-button size="small" @click="resetSearchForm">閲� 缃�</el-button>
+          <el-button size="small" type="primary" @click="searchList">鏌� 璇�</el-button>
+        </span>
+        <div class="btn">
+          <el-button v-if="tabIndex === '0'" size="small" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+          <el-upload v-if="tabIndex === '1'" ref='upload' :action="action" :before-upload="beforeUpload"
+            :headers="uploadHeader" :on-error="onError" :on-success="handleSuccessUp" :show-file-list="false"
+            accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'>
+            <el-button :loading="upLoading" size="small" type="primary">瀵煎叆</el-button>
+          </el-upload>
+        </div>
+      </div>
+      <div class="table">
+        <div class="table-tab">
+          <el-radio-group v-model="tabIndex" @change="searchList" size="small">
+            <el-radio-button label="0">瀹㈡埛婊℃剰搴�</el-radio-button>
+            <el-radio-button label="1">缁煎悎鍒嗘瀽</el-radio-button>
+          </el-radio-group>
+        </div>
+        <div v-if="tabIndex === '0'">
+          <TableCard :showForm="false" :showTitle="false">
+            <template v-slot:table>
+              <limsTable :column="tableColumn" :height="'calc(100vh - 22em)'" :table-data="tableData"
+                :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination"
+                :page="page">
+              </limsTable>
+            </template>
+          </TableCard>
+        </div>
+        <div v-if="tabIndex === '1'">
+          <TableCard :showForm="false" :showTitle="false">
+            <template v-slot:table>
+              <limsTable :column="tableColumn1" :height="'calc(100vh - 22em)'" :table-data="tableData1"
+                :table-loading="tableLoading1" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination0">
+              </limsTable>
+            </template>
+          </TableCard>
+        </div>
+      </div>
+    </div>
+    <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" top="5vh" width="800px">
+      <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.fileUrl"
+        style="height: 90vh;overflow-y: auto;" />
+    </el-dialog>
+    <FormDialog v-if="formDialog" ref="formDialog" @closeFormDia="closeFormDia"></FormDialog>
+  </div>
+</template>
+
+<script>
+import TableCard from '@/components/TableCard/index.vue';
+import limsTable from "@/components/Table/lims-table.vue";
+import FormDialog from './components/formDialog.vue';
+import filePreview from '@/components/Preview/filePreview.vue'
+import {
+  pageClientSatisfaction,
+  pageAnalyseFile,
+  delClientSatisfaction,
+  delAnalyseFile,
+} from '@/api/cnas/systemManagement/customerSatisfaction.js'
+
+export default {
+  name: 'a8-customer-satisfaction',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { filePreview, FormDialog, limsTable, TableCard },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        unitName: '',
+      },
+      searchForm1: {
+        fileName: '',
+      },
+      tabIndex: '0',
+      tableColumn: [
+        {
+          label: '鍗曚綅鍚嶇О',
+          prop: 'unitName',
+          minWidth: '100'
+        },
+        {
+          label: '鏃ユ湡',
+          prop: 'fillDate',
+          minWidth: '100'
+        },
+        {
+          label: '濮撳悕',
+          prop: 'userName',
+          minWidth: '100'
+        },
+        {
+          label: '閮ㄩ棬',
+          prop: 'department',
+          minWidth: '100'
+        },
+        {
+          label: '鑱旂郴鐢佃瘽',
+          prop: 'contactNumber',
+          minWidth: '100'
+        },
+        {
+          label: '鍒涘缓鏃ユ湡',
+          prop: 'createTime',
+          minWidth: '100',
+        },
+        {
+          dataType: 'action',
+          minWidth: '80',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delPlan(row)
+              }
+            }
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+      },
+      total: 0,
+      tableColumn1: [
+        {
+          label: '闄勪欢鍚嶇О',
+          prop: 'fileName',
+          minWidth: '100'
+        },
+        {
+          label: '鍒涘缓浜�',
+          prop: 'userName',
+          minWidth: '100'
+        },
+        {
+          label: '鍒涘缓鏃堕棿',
+          prop: 'createTime',
+          minWidth: '100'
+        },
+        {
+          dataType: 'action',
+          minWidth: '50',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '棰勮',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleLook(row)
+              }
+            },
+            {
+              name: '涓嬭浇',
+              type: 'text',
+              clickFun: (row) => {
+                this.upload(row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delFile(row)
+              }
+            }
+          ]
+        }
+      ],
+      tableData1: [],
+      tableLoading1: false,
+      page1: {
+        size: 20,
+        current: 1,
+      },
+      total1: 0,
+      formDialog: false,
+      upLoading: false,
+      currentInfo: {},
+      lookDialogVisible: false,
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      const entity = this.tabIndex === '0' ? this.searchForm : this.searchForm1
+      const page = this.tabIndex === '0' ? this.page : this.page1
+      if (this.tabIndex === '0') {
+        this.tableLoading = true
+        pageClientSatisfaction({ ...entity, ...page }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.tableData = res.data.records
+          this.total = res.data.total
+        }).catch(err => {
+          console.log('err---', err);
+          this.tableLoading = false
+        })
+      } else {
+        this.tableLoading1 = true
+        pageAnalyseFile({ ...entity, ...page }).then(res => {
+          this.tableLoading1 = false
+          if (res.code === 201) return
+          this.tableData1 = res.data.records
+          this.total1 = res.data.total
+        }).catch(err => {
+          console.log('err---', err);
+          this.tableLoading1 = false
+        })
+      }
+    },
+    openFormDia(type, row) {
+      this.formDialog = true
+      this.$nextTick(() => {
+        this.$refs.formDialog.openDia(type, row);
+      })
+    },
+    closeFormDia() {
+      this.formDialog = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.unitName = '';
+      this.searchForm1.fileName = '';
+      this.searchList()
+    },
+    // 瀵煎叆娴佺▼
+    beforeUpload(file) {
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload.clearFiles()
+        return false;
+      } else {
+        this.upLoading = true;
+        return true;
+      }
+    },
+    onError(err, file, fileList) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload.clearFiles()
+    },
+    handleSuccessUp(response) {
+      this.upLoading = false;
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+        this.searchList()
+      }
+    },
+    // 鍒犻櫎瀹㈡埛婊℃剰搴�
+    delPlan(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        delClientSatisfaction({ clientSatisfactionId: row.clientSatisfactionId }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 鏌ョ湅鏂囦欢
+    handleLook(row) {
+      this.currentInfo = row
+      this.lookDialogVisible = true
+    },
+    // 涓嬭浇瀹㈡埛绂忓缓
+    upload(row) {
+      let url = '';
+      if (row.type == 1) {
+        url = this.javaApi + '/img/' + row.fileUrl
+        file.downloadIamge(url, row.fileName)
+      } else {
+        url = this.javaApi + '/word/' + row.fileUrl
+        const link = document.createElement('a');
+        link.href = url;
+        link.download = row.fileName;
+        link.click();
+      }
+    },
+    // 鍒犻櫎瀹㈡埛鍒嗘瀽闄勪欢
+    delFile(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        delAnalyseFile({ analyseFileId: row.analyseFileId }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 鍒嗛〉
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+    // 鍒嗛〉
+    pagination0({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+  },
+  // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
+  computed: {
+    action() {
+      return this.javaApi + '/clientSatisfaction/uploadAnalyseFile'
+    }
+  },
+};
+</script>
+
+<style scoped>
+.view-title {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: 60px;
+  padding-left: 20px;
+}
+
+.search-background {
+  width: 100%;
+  height: 80px;
+  line-height: 80px;
+  background-color: #ffffff;
+  display: flex;
+  position: relative;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+
+.table {
+  background-color: #ffffff;
+}
+
+.table-tab {
+  margin: 0 20px 20px 20px;
+}
+
+.btn {
+  position: absolute;
+  top: 16px;
+  right: 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue b/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue
index 08be833..1aba02d 100644
--- a/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue
+++ b/src/views/CNAS/systemManagement/documentControl/components/DistributionCollectionRecord.vue
@@ -27,7 +27,7 @@
         :height="'calc(100vh - 290px)'" @pagination="pagination"></lims-table>
     </div>
     <el-dialog :title="'娣诲姞' + radio + '璁板綍'" :visible.sync="addDialogVisible" top="10vh" width="800px">
-      <el-row>
+      <el-row v-if="addDialogVisible">
         <el-col :span="12" style="margin-bottom: 16px;">
           <div class="search_thing">
             <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>鐢宠缂栧彿锛�</div>
@@ -152,7 +152,7 @@
           <div class="search_thing">
             <div class="search_label">涓婁紶闄勪欢锛�</div>
             <div class="search_input"><el-upload :auto-upload="false" :multiple="false" :on-change="handleChangeUpload"
-                accept='.pdf,.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx' action="#" style="margin: 8px 0 0px 50px;">
+                accept='.pdf,.doc,.docx,.xls,.xlsx' action="#" style="margin: 8px 0 0px 50px;">
                 <el-button size="small" type="primary">涓婁紶闄勪欢</el-button>
               </el-upload></div>
           </div>
diff --git a/src/views/CNAS/systemManagement/documentControl/components/FileList.vue b/src/views/CNAS/systemManagement/documentControl/components/FileList.vue
index b3d2158..7a88db6 100644
--- a/src/views/CNAS/systemManagement/documentControl/components/FileList.vue
+++ b/src/views/CNAS/systemManagement/documentControl/components/FileList.vue
@@ -21,8 +21,9 @@
         <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
       </div>
       <div class="btns" style="padding-left: 30px;">
-        <el-upload :action="action" :multiple="false" accept='.xls,.xlsx' :headers="headers" :on-change="beforeUpload"
-          :on-error="onError" ref='upload' :on-success="handleSuccessUp" :show-file-list="false">
+        <el-upload :action="action" :multiple="false" accept='.xls,.xlsx' :headers="uploadHeader"
+          :on-change="beforeUpload" :on-error="onError" ref='upload' :on-success="handleSuccessUp"
+          :show-file-list="false">
           <el-button size="small" type="primary" :loading="upLoading">瀵煎叆</el-button></el-upload>
       </div>
     </div>
@@ -96,7 +97,6 @@
   delManageDocumentList,
   doManageDocumentList,
 } from '@/api/cnas/systemManagement/documentControl.js'
-import { getToken } from "@/utils/auth";
 export default {
   components: {
     UpPdfStamp,
@@ -201,11 +201,6 @@
   },
   // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
   computed: {
-    headers() {
-      return {
-        'Authorization': "Bearer " + getToken()
-      }
-    },
     action() {
       return this.javaApi + '/manageDocumentList/exportManageDocumentList'
     }
diff --git a/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue b/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue
index c405704..7e956bd 100644
--- a/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue
+++ b/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue
@@ -20,9 +20,9 @@
       </div>
       <div class="btn">
         <el-button size="small" type="primary" @click="openAdd('鏂板')">鏂板</el-button>
-        <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx' :headers="headers"
-          :on-change="beforeUpload" :on-error="onError" ref='upload' :on-success="handleSuccessUp"
-          style="display:inline-block;margin-left: 20px;">
+        <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx'
+          :headers="uploadHeader" :on-change="beforeUpload" :on-error="onError" ref='upload'
+          :on-success="handleSuccessUp" style="display:inline-block;margin-left: 20px;">
           <el-button type="primary" size="small">瀵煎叆</el-button></el-upload>
         <el-button size="small" type="primary" @click="handleDown" :loading="outLoading"
           style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button>
@@ -83,7 +83,6 @@
 
 <script>
 import limsTable from "@/components/Table/lims-table.vue";
-import { getToken } from "@/utils/auth";
 import {
   selectUserCondition,
 } from "@/api/business/inspectionTask.js";
@@ -186,11 +185,6 @@
   },
   // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
   computed: {
-    headers() {
-      return {
-        'Authorization': "Bearer " + getToken()
-      }
-    },
     action() {
       return this.javaApi + '/manageRecordCheck/exportInManageRecordCheck'
     }
diff --git a/src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue b/src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue
index 7eb6040..e766d78 100644
--- a/src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue
+++ b/src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue
@@ -1,28 +1,16 @@
 <template>
   <!-- 浣滃簾鏂囦欢閿�姣佽褰� -->
   <div class="ObsoleteDocumentDestructionRecords">
-    <el-row class="title">
-      <el-col :span="12" style="padding-left: 20px;text-align: left;">浣滃簾鏂囦欢閿�姣佽褰�</el-col>
-      <el-col :span="12" style="text-align: right;">
-        <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
-        <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx' :headers="headers"
-          :on-change="beforeUpload" :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp"
-          style="display:inline-block;margin-left: 20px;">
-          <el-button type="primary" size="medium">瀵煎叆</el-button></el-upload>
-        <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower"
-          style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
     <div class="search">
       <div class="search_thing">
         <div class="search_label">鏂囦欢鍚嶇О锛�</div>
-        <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-            v-model="componentData.entity.documentName" @keyup.enter.native="refreshTable()"></el-input></div>
+        <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.documentName"
+            @keyup.enter.native="refreshTable()"></el-input></div>
       </div>
       <div class="search_thing">
         <div class="search_label">鏂囦欢缂栧彿锛�</div>
         <div class="search_input">
-          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.documentCode"
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.documentCode"
             @keyup.enter.native="refreshTable()"></el-input>
         </div>
       </div>
@@ -30,11 +18,19 @@
         <el-button size="small" @click="refresh()">閲� 缃�</el-button>
         <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
       </div>
+      <div class="btn">
+        <el-button size="small" type="primary" @click="openAdd">鏂板</el-button>
+        <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx'
+          :headers="uploadHeader" :on-change="beforeUpload" :on-error="onError" ref='upload'
+          :on-success="handleSuccessUp" style="display:inline-block;margin-left: 20px;">
+          <el-button type="primary" size="small">瀵煎叆</el-button></el-upload>
+        <el-button size="small" type="primary" @click="handleDown" :loading="outLoading"
+          style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button>
+      </div>
     </div>
     <div class="table">
-      <ValueTable ref="ValueTable" :url="$api.manageRecordCancel.pageManageRecordCancel"
-        :delUrl="$api.manageRecordCancel.delManageRecordCancel" :componentData="componentData"
-        :upUrl="$api.manageRecordIssueRecycle.doManageRecordIssueRecycle" :key="upIndex" />
+      <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
+        :height="'calc(100vh - 260px)'" @pagination="pagination"></lims-table>
     </div>
     <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px" top="6vh">
       <el-row>
@@ -89,11 +85,24 @@
 </template>
 
 <script>
-import ValueTable from '@/components/Table//value-table.vue'
-import { getToken } from "@/utils/auth";
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+  selectUserCondition,
+} from "@/api/business/inspectionTask.js";
+import {
+  exportOutManageRecordCancel,
+  addManageRecordCancel,
+  doManageRecordCancel,
+  ratifyManageRecordCancel,
+  delManageRecordCancel,
+  pageManageRecordCancel
+} from '@/api/cnas/systemManagement/documentRecords.js'
+import {
+  pageManageDocumentList,
+} from '@/api/cnas/systemManagement/documentControl.js'
 export default {
   components: {
-    ValueTable
+    limsTable
   },
   data() {
     return {
@@ -102,94 +111,82 @@
       upPower: true,
       outLoading: false,
       addLoading: false,
-      componentData: {
-        entity: {
-          documentName: null,
-          documentCode: null,
-          orderBy: {
-            field: 'createTime',
-            order: 'desc'
-          }
-        },
-        isIndex: true,
-        showSelect: false,
-        select: false,
-        // selectMethod: 'handleChangeTask',
-        do: [{
-          id: 'handleEdit0',
-          font: '淇敼',
-          type: 'text',
-          method: 'handleEdit0',
-          field: [],
-          disabFun: (row, index) => {
-            return row.ratifyState == '閫氳繃'
-          }
-        }, {
-          id: 'handleRatify',
-          font: '鎵瑰噯',
-          type: 'text',
-          method: 'handleRatify',
-          field: [],
-          disabFun: (row, index) => {
-            return row.ratifyState == '閫氳繃'
-          }
-        }, {
-          id: 'delete',
-          font: '鍒犻櫎',
-          type: 'text',
-          method: 'doDiy',
-          disabFun: (row, index) => {
-            return row.ratifyState == '閫氳繃'
-          }
-        },],
-        tagField: {
-          // documentType:{
-          //   select: []
-          // },
-          // receiveUserName:{
-          //   select: []
-          // },
-        },
-        selectField: {
-          // documentType:{
-          //   select: []
-          // },
-          // receiveUserName:{
-          //   select: []
-          // },
-        },
-        addUpload: ['signatoryUrl'],
-        requiredAdd: [],
-        requiredUp: [],
-        datePicker: ['receiveDate'],
-        noHead: ['signedUserName', 'signedDate', 'departLims'],//涓嶅弬涓庢柊澧炵紪杈戠殑瀛楁
-        needSort: [],
-        inputType: ''
-      },
-      entityCopy: {},
-      upIndex: 0,
       addInfo: {},
       title: '鏂板',
       addInfo: {},
       addDialogVisible: false,
       fileList: [],
       personList: [],
+      queryParams: {},
+      tableData: [],
+      column: [
+        { label: "鏂囦欢缂栧彿", prop: "documentCode" },
+        { label: "鏂囦欢鍚嶇О", prop: "documentName", width: "120px" },
+        {
+          label: "鏁伴噺",
+          prop: "qty",
+        },
+        { label: "閿�姣佸師鍥�", prop: "reason" },
+        { label: "鐢宠浜�", prop: "createUserName" },
+        { label: "鐢宠鏃ユ湡", prop: "createTime" },
+        { label: "鎵瑰噯浜�", prop: "ratifyUserName" },
+        { label: "鎵瑰噯鏃ユ湡", prop: "ratifyTime" },
+        { label: "澶囨敞", prop: "remark" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.handleEdit0(row);
+              },
+              disabled: (row) => {
+                return row.ratifyState == '閫氳繃'
+              },
+            },
+            {
+              name: "鎵瑰噯",
+              type: "text",
+              clickFun: (row) => {
+                this.handleRatify(row);
+              },
+              disabled: (row) => {
+                return row.ratifyState == '閫氳繃'
+              },
+            },
+            {
+              name: "鍒犻櫎",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDelete(row);
+              },
+              disabled: (row) => {
+                return row.ratifyState == '閫氳繃'
+              },
+            },
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
     }
   },
   // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
   computed: {
-    headers() {
-      return {
-        'Authorization': "Bearer " + getToken()
-      }
-    },
     action() {
-      return this.javaApi + this.$api.manageRecordCancel.exportInManageRecordCancel
+      return this.javaApi + '/manageRecordCancel/exportInManageRecordCancel'
     }
   },
   mounted() {
-    this.entityCopy = this.HaveJson(this.componentData.entity);
-    this.getPower()
+    // this.entityCopy = this.HaveJson(this.componentData.entity);
+    this.getList()
     this.getAuthorizedPerson()
     this.getFileList()
   },
@@ -232,7 +229,6 @@
       this.upPower = up
     },
     openAdd() {
-      // this.$refs.ValueTable.openAddDia(this.$api.manageRecordIssueRecycle.addManageRecordIssueRecycle);
       this.addInfo = {}
       this.title = '鏂板'
       this.addDialogVisible = true;
@@ -245,24 +241,43 @@
     // 瀵煎嚭
     handleDown() {
       this.outLoading = true
-      this.$axios.post(this.$api.manageRecordCancel.exportOutManageRecordCancel, { entity: this.componentData.entity }, { headers: { 'Content-Type': 'application/json' } }).then(res => {
+      exportOutManageRecordCancel(this.queryParams).then(res => {
         this.outLoading = false
         if (res.code == 201) return this.$message.error('瀵煎嚭澶辫触')
         this.$message.success('瀵煎嚭鎴愬姛')
-        let url = this.javaApi + 'word/' + res.message
-        const link = document.createElement('a');
-        link.href = url;
-        link.download = '浣滃簾鏂囦欢閿�姣佽褰�';
-        link.click();
+        let url = this.javaApi + '/word/' + res.data
+        this.$download.saveAs(url, "浣滃簾鏂囦欢閿�姣佽褰�");
       })
     },
-    refreshTable() {
-      this.refreshTable()()
+    getList() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams, ...this.page };
+      delete param.total;
+      pageManageRecordCancel({ ...param })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.tableData = res.data.records;
+            this.page.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.getList();
     },
     refresh() {
-      this.componentData.entity = this.HaveJson(this.entityCopy)
-      this.upIndex++
-      this.refreshTable()
+      this.queryParams = {};
+      this.page.current = 1;
+      this.getList();
+    },
+    refreshTable() {
+      this.page.current = 1;
+      this.getList();
     },
     beforeUpload(file) {
       if (file.size > 1024 * 1024 * 10) {
@@ -289,23 +304,11 @@
     },
     // 鑾峰彇鏂囦欢鍒楄〃--鏂囦欢娓呭崟
     getFileList() {
-      this.$axios.post(this.$api.manageDocumentList.pageManageDocumentList, {
-        entity: {
-          orderBy: {
-            field: 'createTime',
-            order: 'desc'
-          }
-        },
-        page: {
-          current: -1,
-          size: -1
-        }
-      }, {
-        headers: {
-          'Content-Type': 'application/json'
-        }
+      pageManageDocumentList({
+        current: -1,
+        size: -1
       }).then(res => {
-        this.fileList = res.data.body.records.map(m => {
+        this.fileList = res.data.records.map(m => {
           m.title = m.documentCode
           return m
         })
@@ -321,18 +324,33 @@
         let { id, documentCode, documentName, qty, reason, remark } = this.addInfo
         obj = { id, documentCode, documentName, qty, reason, remark }
       }
-      this.$axios.post(this.$api.manageRecordCancel[this.title == '鏂板' ? 'addManageRecordCancel' : 'doManageRecordCancel'], obj, { headers: { 'Content-Type': 'application/json' }, noQs: true }).then(res => {
-        this.addLoading = false
-        if (res.code == 201) {
-          return
-        }
-        this.addDialogVisible = false
-        this.$message({
-          type: 'success',
-          message: '鎿嶄綔鎴愬姛!'
-        });
-        this.refreshTable()
-      }).catch(err => { })
+      if (this.title == '鏂板') {
+        addManageRecordCancel(obj).then(res => {
+          this.addLoading = false
+          if (res.code == 201) {
+            return
+          }
+          this.addDialogVisible = false
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+          this.refreshTable()
+        }).catch(err => { })
+      } else {
+        doManageRecordCancel(obj).then(res => {
+          this.addLoading = false
+          if (res.code == 201) {
+            return
+          }
+          this.addDialogVisible = false
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+          this.refreshTable()
+        }).catch(err => { })
+      }
     },
     getCurrentFile(e) {
       let obj = this.fileList.find(m => m.documentCode == e)
@@ -341,7 +359,7 @@
       }
     },
     getAuthorizedPerson() {
-      this.$axios.get(this.$api.user.getUserMenu).then(res => {
+      selectUserCondition().then(res => {
         let data = []
         res.data.forEach(a => {
           data.push({
@@ -349,8 +367,6 @@
             value: a.id
           })
         })
-        // this.componentData.tagField.receiveUserName.select = data
-        // this.componentData.selectField.receiveUserName.select = data
         this.personList = data
       })
     },
@@ -364,7 +380,7 @@
         beforeClose: (action, instance, done) => {
           if (action === 'confirm') {
             // 鐐瑰嚮鈥滅‘瀹氣�濇寜閽紝鍏佽鍏抽棴
-            this.$axios.post(this.$api.manageRecordCancel.ratifyManageRecordCancel, { id: row.id, ratifyState: '閫氳繃' }).then(res => {
+            ratifyManageRecordCancel({ id: row.id, ratifyState: '閫氳繃' }).then(res => {
               if (res.code === 201) return
               this.refreshTable()
               done();
@@ -378,7 +394,7 @@
               })
           } else if (action === 'cancel') {
             // 鐐瑰嚮鈥滃彇娑堚�濇寜閽紝涓嶅厑璁稿叧闂�
-            this.$axios.post(this.$api.manageRecordCancel.ratifyManageRecordCancel, { id: row.id, ratifyState: '涓嶉�氳繃' }).then(res => {
+            ratifyManageRecordCancel({ id: row.id, ratifyState: '涓嶉�氳繃' }).then(res => {
               if (res.code === 201) return
               this.refreshTable()
               done();
@@ -398,7 +414,22 @@
           }
         }
       })
-    }
+    },
+    handleDelete(row) {
+      this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          delManageRecordCancel({ id: row.id }).then((res) => {
+            if (res.code == 201) return;
+            this.$message.success("鍒犻櫎鎴愬姛");
+            this.refresh();
+          });
+        })
+        .catch(() => { });
+    },
   }
 }
 </script>
@@ -435,8 +466,14 @@
 .table {
   margin-top: 10px;
   background-color: #fff;
-  width: calc(100% - 40px);
   height: calc(100% - 60px - 80px - 10px - 40px);
   padding: 20px;
+  padding-top: 0;
+}
+
+.btn {
+  position: absolute;
+  right: 20px;
+  top: 16px;
 }
 </style>
diff --git a/src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue b/src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue
index 9be00a1..f4fcca0 100644
--- a/src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue
+++ b/src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue
@@ -1,28 +1,16 @@
 <template>
   <!-- 鎵�鏈夋枃浠讹紙鍐呫�佸閮ㄦ枃浠讹級鐨勫彂鏀句笌鍥炴敹璁板綍 -->
   <div class="DistributionRetrievalRecordsAllDocuments">
-    <el-row class="title">
-      <el-col :span="12" style="padding-left: 20px;text-align: left;">鎵�鏈夋枃浠讹紙鍐呫�佸閮ㄦ枃浠讹級鐨勫彂鏀句笌鍥炴敹璁板綍</el-col>
-      <el-col :span="12" style="text-align: right;">
-        <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
-        <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx' :headers="headers"
-          :on-change="beforeUpload" :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp"
-          style="display:inline-block;margin-left: 20px;">
-          <el-button type="primary" size="medium">瀵煎叆</el-button></el-upload>
-        <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower"
-          style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
     <div class="search">
       <div class="search_thing">
         <div class="search_label">鏂囦欢鍚嶇О锛�</div>
-        <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-            v-model="componentData.entity.documentName" @keyup.enter.native="refreshTable()"></el-input></div>
+        <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.documentName"
+            @keyup.enter.native="refreshTable()"></el-input></div>
       </div>
       <div class="search_thing">
         <div class="search_label">鏂囦欢缂栧彿锛�</div>
         <div class="search_input">
-          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.documentCode"
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.documentCode"
             @keyup.enter.native="refreshTable()"></el-input>
         </div>
       </div>
@@ -30,11 +18,19 @@
         <el-button size="small" @click="refresh()">閲� 缃�</el-button>
         <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
       </div>
+      <div class="btn">
+        <el-button size="small" type="primary" @click="openAdd">鏂板</el-button>
+        <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx'
+          :headers="uploadHeader" :on-change="beforeUpload" :on-error="onError" ref='upload'
+          :on-success="handleSuccessUp" style="display:inline-block;margin-left: 20px;">
+          <el-button type="primary" size="small">瀵煎叆</el-button></el-upload>
+        <el-button size="small" type="primary" @click="handleDown" :loading="outLoading"
+          style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button>
+      </div>
     </div>
     <div class="table">
-      <ValueTable ref="ValueTable" :url="$api.manageRecordIssueRecycle.pageManageRecordIssueRecycle"
-        :delUrl="$api.manageRecordIssueRecycle.delManageRecordIssueRecycle" :componentData="componentData"
-        :upUrl="$api.manageRecordIssueRecycle.doManageRecordIssueRecycle" :key="upIndex" />
+      <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
+        :height="'calc(100vh - 260px)'" @pagination="pagination"></lims-table>
     </div>
     <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px" top="6vh">
       <el-row>
@@ -133,14 +129,28 @@
 </template>
 
 <script>
-import ValueTable from '@/components/Table/value-table.vue'
+import limsTable from "@/components/Table/lims-table.vue";
 import {
   getYearAndMonthAndDays
 } from '@/utils/date'
-import { getToken } from "@/utils/auth";
+import {
+  selectUserCondition,
+} from "@/api/business/inspectionTask.js";
+import {
+  exportOutManageRecordIssueRecycle,
+  doManageRecordIssueRecycle,
+  addManageRecordIssueRecycle,
+  selectCNSAPersonTree,
+  pageManageRecordIssueRecycle,
+  delManageRecordIssueRecycle,
+} from '@/api/cnas/systemManagement/documentRecords.js'
+import {
+  pageManageDocumentList,
+} from '@/api/cnas/systemManagement/documentControl.js'
+import { mapGetters } from "vuex";
 export default {
   components: {
-    ValueTable
+    limsTable
   },
   data() {
     return {
@@ -149,98 +159,91 @@
       upPower: true,
       outLoading: false,
       addLoading: false,
-      componentData: {
-        entity: {
-          documentName: null,
-          documentCode: null,
-          orderBy: {
-            field: 'id',
-            order: 'desc'
-          }
-        },
-        isIndex: true,
-        showSelect: false,
-        select: false,
-        // selectMethod: 'handleChangeTask',
-        do: [{
-          id: 'delete',
-          font: '鍒犻櫎',
-          type: 'text',
-          method: 'doDiy',
-          disabFun: (row, index) => {
-            return !!row.signedUser
-          }
-        }, {
-          id: 'handleEdit',
-          font: '淇敼',
-          type: 'text',
-          method: 'handleEdit',
-          field: [],
-          disabFun: (row, index) => {
-            return !!row.signedUser
-          }
-        }, {
-          id: 'handleBack',
-          font: '鍥炴敹',
-          type: 'text',
-          method: 'handleBack',
-          disabFun: (row, index) => {
-            return !!row.signedUser
-          }
-        }],
-        tagField: {
-          // documentType:{
-          //   select: []
-          // },
-          // receiveUserName:{
-          //   select: []
-          // },
-        },
-        selectField: {
-          // documentType:{
-          //   select: []
-          // },
-          // receiveUserName:{
-          //   select: []
-          // },
-        },
-        addUpload: ['signatoryUrl'],
-        requiredAdd: [],
-        requiredUp: [],
-        datePicker: ['receiveDate'],
-        noHead: ['signedUserName', 'signedDate', 'departLims'],//涓嶅弬涓庢柊澧炵紪杈戠殑瀛楁
-        needSort: [],
-        inputType: ''
-      },
-      entityCopy: {},
-      upIndex: 0,
       title: '鏂板',
       addDialogVisible: false,
       addInfo: {},
       personList: [],
       fileType: [],
       fileList: [],
-      list: []
+      list: [],
+      queryParams: {},
+      tableData: [],
+      column: [
+        { label: "鏂囦欢缂栧彿", prop: "documentCode" },
+        { label: "鏂囦欢鍚嶇О", prop: "documentName", width: "120px" },
+        {
+          label: "鐗堝彿",
+          prop: "documentVersion",
+        },
+        { label: "浠芥暟", prop: "pages" },
+        { label: "鏂囦欢绫诲埆", prop: "documentType" },
+        { label: "鍒嗗彂鍙�", prop: "number" },
+        { label: "鎺ュ彈浜�", prop: "receiveUserName" },
+        { label: "鎺ユ敹閮ㄩ棬", prop: "departLims" },
+        { label: "鎺ュ彈鏃ユ湡", prop: "receiveDate" },
+        { label: "绛炬敹浜�", prop: "signedUserName" },
+        { label: "绛炬敹鏃ユ湡", prop: "signedDate" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.handleEdit(row);
+              },
+              disabled: (row) => {
+                return !!row.signedUser
+              },
+            },
+            {
+              name: "鍥炴敹",
+              type: "text",
+              clickFun: (row) => {
+                this.handleBack(row);
+              },
+              disabled: (row) => {
+                return !!row.signedUser
+              },
+            },
+            {
+              name: "鍒犻櫎",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDelete(row);
+              },
+              disabled: (row) => {
+                return !!row.signedUser
+              },
+            },
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
     }
   },
   // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
   computed: {
-    headers() {
-      return {
-        'Authorization': "Bearer " + getToken()
-      }
-    },
     action() {
-      return this.javaApi + this.$api.manageRecordIssueRecycle.exportInManageRecordIssueRecycle
-    }
+      return this.javaApi + '/manageRecordIssueRecycle/exportInManageRecordIssueRecycle'
+    },
+    ...mapGetters(["userId"]),
   },
   mounted() {
-    this.entityCopy = this.HaveJson(this.componentData.entity);
-    this.getPower()
+    // this.entityCopy = this.HaveJson(this.componentData.entity);
+    this.getList()
     this.getAuthorizedPerson()
     this.selectEnumByCategory()
     this.getFileList()
-    this.selectTreeList()
+    // TODO 閮ㄩ棬鎺ュ彛闇�瑕侀噸鍐�
+    // this.selectTreeList()
   },
   methods: {
     getPower() {
@@ -295,27 +298,46 @@
     // 瀵煎嚭
     handleDown() {
       this.outLoading = true
-      this.$axios.post(this.$api.manageRecordIssueRecycle.exportOutManageRecordIssueRecycle, { entity: this.componentData.entity }, { headers: { 'Content-Type': 'application/json' } }).then(res => {
+      exportOutManageRecordIssueRecycle(this.queryParams).then(res => {
         this.outLoading = false
         if (res.code == 201) return this.$message.error('瀵煎嚭澶辫触')
         this.$message.success('瀵煎嚭鎴愬姛')
-        let url = this.javaApi + 'word/' + res.message
-        const link = document.createElement('a');
-        link.href = url;
-        link.download = '鏂囦欢鍙戞斁涓庡洖鏀惰褰�';
-        link.click();
+        let url = this.javaApi + '/word/' + res.data
+        this.$download.saveAs(url, '鏂囦欢鍙戞斁涓庡洖鏀惰褰�')
       })
     },
-    refreshTable() {
-      this.refreshTable()()
+    getList() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams, ...this.page };
+      delete param.total;
+      pageManageRecordIssueRecycle({ ...param })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.tableData = res.data.records;
+            this.page.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.getList();
     },
     refresh() {
-      this.componentData.entity = this.HaveJson(this.entityCopy)
-      this.upIndex++
-      this.refreshTable()
+      this.queryParams = {};
+      this.page.current = 1;
+      this.getList();
+    },
+    refreshTable() {
+      this.page.current = 1;
+      this.getList();
     },
     getAuthorizedPerson() {
-      this.$axios.get(this.$api.user.getUserMenu).then(res => {
+      selectUserCondition().then(res => {
         let data = []
         res.data.forEach(a => {
           data.push({
@@ -323,8 +345,6 @@
             value: a.id
           })
         })
-        // this.componentData.tagField.receiveUserName.select = data
-        // this.componentData.selectField.receiveUserName.select = data
         this.personList = data
       })
     },
@@ -352,33 +372,18 @@
       }
     },
     selectEnumByCategory() {
-      this.$axios.post(this.$api.enums.selectEnumByCategory, {
-        category: "鏂囦欢绫诲埆"
-      }).then(res => {
-        // this.componentData.tagField.documentType.select = res.data
-        // this.componentData.selectField.documentType.select = res.data
-        this.fileType = res.data
-      })
+      // 鏂囦欢绫诲埆
+      this.getDicts("document_type").then((response) => {
+        this.fileType = this.dictToValue(response.data);
+      });
     },
     // 鑾峰彇鏂囦欢鍒楄〃--鏂囦欢娓呭崟
     getFileList() {
-      this.$axios.post(this.$api.manageDocumentList.pageManageDocumentList, {
-        entity: {
-          orderBy: {
-            field: 'createTime',
-            order: 'desc'
-          }
-        },
-        page: {
-          current: -1,
-          size: -1
-        }
-      }, {
-        headers: {
-          'Content-Type': 'application/json'
-        }
+      pageManageDocumentList({
+        current: -1,
+        size: -1
       }).then(res => {
-        this.fileList = res.data.body.records.map(m => {
+        this.fileList = res.data.records.map(m => {
           m.title = m.documentCode
           return m
         })
@@ -402,18 +407,33 @@
         let { id, documentCode, documentName, documentVersion, pages, documentType, number, receiveUser, receiveDate, departLims } = this.addInfo
         obj = { id, documentCode, documentName, documentVersion, pages, documentType, number, receiveUser, receiveDate, departLims }
       }
-      this.$axios.post(this.$api.manageRecordIssueRecycle[this.title == '鏂板' ? 'addManageRecordIssueRecycle' : 'doManageRecordIssueRecycle'], obj, { headers: { 'Content-Type': 'application/json' }, noQs: true }).then(res => {
-        this.addLoading = false
-        if (res.code == 201) {
-          return
-        }
-        this.addDialogVisible = false
-        this.$message({
-          type: 'success',
-          message: '鎿嶄綔鎴愬姛!'
-        });
-        this.refreshTable()
-      }).catch(err => { })
+      if (this.title == '鏂板') {
+        addManageRecordIssueRecycle(obj).then(res => {
+          this.addLoading = false
+          if (res.code == 201) {
+            return
+          }
+          this.addDialogVisible = false
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+          this.refreshTable()
+        }).catch(err => { })
+      } else {
+        doManageRecordIssueRecycle(obj).then(res => {
+          this.addLoading = false
+          if (res.code == 201) {
+            return
+          }
+          this.addDialogVisible = false
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+          this.refreshTable()
+        }).catch(err => { })
+      }
     },
     // 鍥炴敹
     handleBack(row) {
@@ -424,8 +444,8 @@
       }).then(() => {
         let obj = {}
         let { id, documentCode, documentName, documentVersion, pages, documentType, number, receiveUser, receiveDate, departLims } = row
-        obj = { id, documentCode, documentName, documentVersion, pages, documentType, number, receiveUser, receiveDate, departLims, signedDate: getYearAndMonthAndDays(), signedUser: JSON.parse(localStorage.getItem("user")).userId }
-        this.$axios.post(this.$api.manageRecordIssueRecycle.doManageRecordIssueRecycle, obj, { headers: { 'Content-Type': 'application/json' }, noQs: true }).then(res => {
+        obj = { id, documentCode, documentName, documentVersion, pages, documentType, number, receiveUser, receiveDate, departLims, signedDate: getYearAndMonthAndDays(), signedUser: this.userId }
+        doManageRecordIssueRecycle(obj).then(res => {
           this.addLoading = false
           if (res.code == 201) {
             return
@@ -441,9 +461,24 @@
     },
     // 鏌ヨ鏍戝舰鍒楄〃
     selectTreeList() {
-      this.$axios.get(this.$api.personnel.selectCNSAPersonTree).then((res) => {
+      selectCNSAPersonTree().then((res) => {
         this.list = res.data[0].children;
       });
+    },
+    handleDelete(row) {
+      this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          delManageRecordIssueRecycle({ id: row.id }).then((res) => {
+            if (res.code == 201) return;
+            this.$message.success("鍒犻櫎鎴愬姛");
+            this.refresh();
+          });
+        })
+        .catch(() => { });
     },
   }
 }
@@ -481,8 +516,8 @@
 .table {
   margin-top: 10px;
   background-color: #fff;
-  width: calc(100% - 40px);
   height: calc(100% - 60px - 80px - 10px - 40px);
   padding: 20px;
+  padding-top: 0;
 }
 </style>
diff --git a/src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue b/src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue
index 0bcdb64..23651f0 100644
--- a/src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue
+++ b/src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue
@@ -1,23 +1,21 @@
 <template>
   <!-- 澶栨潵鏂囦欢纭璁板綍 -->
   <div class="ExternalDocumentConfirmationRecords">
-    <el-row class="title">
-      <el-col :span="20" style="padding-left: 20px;text-align: left;">澶栨潵鏂囦欢纭璁板綍</el-col>
-    </el-row>
     <el-tabs type="border-card" v-model="activeName" style="height: 100%;">
       <el-tab-pane label="濉啓" name="濉啓" style="height: 100%;">
         <div style="display: flex;align-items: center;justify-content: flex-end;margin-right: 20px;">
-          <el-button size="small" type="primary" @click="handleAdd0" style="margin-left: 20px;"
-            v-if="addPower">鏂板</el-button>
-          <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx' :headers="headers"
-            :on-change="beforeUpload" :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp"
-            style="display:inline-block;margin-left: 20px;">
+          <el-button size="small" type="primary" @click="openAdd('鏂板')" style="margin-left: 20px;">鏂板</el-button>
+          <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx'
+            :headers="uploadHeader" :on-change="beforeUpload" :on-error="onError" ref='upload'
+            :on-success="handleSuccessUp" style="display:inline-block;margin-left: 20px;">
             <el-button size="small" type="primary" :loading="upLoading">瀵煎叆</el-button></el-upload>
         </div>
         <div class="table" style="height: calc(100% - 200px)">
-          <ValueTable ref="ValueTable0" :url="$api.manageRecordTotal.pageManageRecordVerify"
+          <!-- <ValueTable ref="ValueTable0" :url="$api.manageRecordTotal.pageManageRecordVerify"
             :componentData="componentData0" :key="upIndex0" :delUrl="$api.manageRecordTotal.delManageRecordVerify"
-            :upUrl="$api.manageRecordTotal.doManageRecordVerify" />
+            :upUrl="$api.manageRecordTotal.doManageRecordVerify" /> -->
+          <lims-table :tableData="tableData0" :column="column0" :page="page0" :tableLoading="tableLoading0"
+            :height="'calc(100vh - 270px)'" @pagination="pagination0"></lims-table>
         </div>
       </el-tab-pane>
       <el-tab-pane label="鍘嗗彶璁板綍" name="鍘嗗彶璁板綍" style="height: 100%;">
@@ -25,8 +23,8 @@
           <div class="search_thing">
             <div class="search_label">骞达細</div>
             <div class="search_input">
-              <el-date-picker v-model="componentData.entity.year" type="year" placeholder="閫夋嫨骞�" format="yyyy"
-                value-format="yyyy" size="small" @change="refreshTable()">
+              <el-date-picker v-model="queryParams.year" type="year" placeholder="閫夋嫨骞�" format="yyyy" value-format="yyyy"
+                size="small" @change="refreshTable()">
               </el-date-picker>
             </div>
           </div>
@@ -36,8 +34,10 @@
           </div>
         </div>
         <div class="table">
-          <ValueTable ref="ValueTable" :url="$api.manageRecordTotal.pageManageRecordTotal"
-            :componentData="componentData" :key="upIndex" />
+          <!-- <ValueTable ref="ValueTable" :url="$api.manageRecordTotal.pageManageRecordTotal"
+            :componentData="componentData" :key="upIndex" /> -->
+          <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
+            :height="'calc(100vh - 280px)'" @pagination="pagination"></lims-table>
         </div>
       </el-tab-pane>
     </el-tabs>
@@ -51,17 +51,65 @@
         <el-button type="primary" @click="submitCheck('閫氳繃')" :loading="checkLoading">閫� 杩�</el-button>
       </span>
     </el-dialog>
+    <!-- 鏂板/缂栬緫 -->
+    <el-dialog :title="title" :visible.sync="addDia" width="500px">
+      <el-form :model="addForm" ref="addForm" :rules="addRules" label-position="right" label-width="120px">
+        <el-form-item label="澶栨潵鏂囦欢鍚嶇О" prop="documentName">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.documentName"></el-input>
+        </el-form-item>
+        <el-form-item label="鏂囦欢缂栧彿" prop="documentCode">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.documentCode">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="鏍囧噯瑙勮寖鍚嶇О" prop="standardName">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.standardName">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="鏍囧噯鍙�" prop="standardCode">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.standardCode">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="鐢熸晥鏃ユ湡" prop="effectiveDate">
+          <el-date-picker v-model="addForm.effectiveDate" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small"
+            style="width: 100%" type="date" value-format="yyyy-MM-dd">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="浣滃簾鏃ユ湡" prop="cancelDate">
+          <el-date-picker v-model="addForm.cancelDate" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small"
+            style="width: 100%" type="date" value-format="yyyy-MM-dd">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="note">
+          <el-input size="small" placeholder="璇疯緭鍏�" type="textarea" :rows="2" clearable v-model="addForm.note">
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="addDia = false">鍙� 娑�</el-button>
+        <el-button :loading="uploading" type="primary" @click="submitProduct('addForm')">纭� 璁�</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
 <script>
+import limsTable from "@/components/Table/lims-table.vue";
 import filePreview from '@/components/Preview/filePreview.vue'
 import ValueTable from '@/components/Table/value-table.vue'
-import { getToken } from "@/utils/auth";
+import {
+  addManageRecordVerify,
+  pageManageRecordVerify,
+  submitManageRecordTotal,
+  ratifyManageRecordTotal,
+  delManageRecordVerify,
+  pageManageRecordTotal,
+  doManageRecordVerify
+} from '@/api/cnas/systemManagement/documentRecords.js'
 export default {
   components: {
     ValueTable,
     filePreview,
+    limsTable,
   },
   data() {
     return {
@@ -70,112 +118,139 @@
       lookDialogVisible: false,
       noCheckLoading: false,
       checkLoading: false,
-      componentData: {
-        entity: {
-          year: null,
-          orderBy: {
-            field: 'id',
-            order: 'desc'
-          }
-        },
-        isIndex: true,
-        showSelect: false,
-        select: false,
-        do: [{
-          id: 'handleLook',
-          font: '鏌ョ湅',
-          type: 'text',
-          method: 'handleLook',
-          disabFun: (row, index) => {
-            return !row.url
-          }
-        }, {
-          id: 'handleDown0',
-          font: '涓嬭浇',
-          type: 'text',
-          method: 'handleDown0',
-          disabFun: (row, index) => {
-            return !row.url
-          }
-        },
-        {
-          id: 'handleSubmit',
-          font: '鎻愪氦',
-          type: 'text',
-          method: 'handleSubmit',
-          disabFun: (row, index) => {
-            return !!row.submitUserName
-          }
-        }, {
-          id: 'handleApproval',
-          font: '鎵瑰噯',
-          type: 'text',
-          method: 'handleApproval',
-          disabFun: (row, index) => {
-            return !row.submitUserName || !!row.ratifyUserName
-          }
-        }],
-        tagField: {},
-        selectField: {},
-        requiredAdd: [],
-        requiredUp: [],
-        needSort: [],
-        inputType: ''
-      },
-      // 鏍峰搧鍒楄〃
-      componentData0: {
-        entity: {
-          manageRecordTotalId: null,
-          orderBy: {
-            field: 'id',
-            order: 'desc'
-          }
-        },
-        isIndex: true,
-        showSelect: false,
-        select: false,
-        do: [{
-          id: 'update',
-          font: '淇敼',
-          type: 'text',
-          method: 'doDiy'
-        }, {
-          id: 'delete',
-          font: '鍒犻櫎',
-          type: 'text',
-          method: 'doDiy'
-        }],
-        tagField: {},
-        selectField: {},
-        requiredAdd: ['documentName', 'documentCode'],
-        requiredUp: ['documentName', 'documentCode'],
-        datePicker: ['effectiveDate', 'cancelDate'],
-        needSort: [],
-        inputType: ''
-      },
-      upIndex0: 100,
-      entityCopy: {},
-      upIndex: 0,
       addPower: true,
       upPower: true,
       currentInfo: {},
       upLoading: false,
+      queryParams: {},
+      tableData: [],
+      column: [
+        { label: "骞翠唤", prop: "year" },
+        { label: "鎬绘暟閲�", prop: "totalNum", width: "120px" },
+        {
+          label: "鎷熷埗浜�",
+          prop: "submitUserName",
+        },
+        { label: "鎷熷埗鏃ユ湡", prop: "submitDate" },
+        { label: "鎵瑰噯浜�", prop: "ratifyUserName" },
+        { label: "鎵瑰噯鏃ユ湡", prop: "ratifyDate" },
+        { label: "鎵瑰噯缁撴灉", prop: "ratifyState" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "鏌ョ湅",
+              type: "text",
+              clickFun: (row) => {
+                this.handleLook(row);
+              },
+              disabled: (row) => {
+                return !row.url
+              },
+            },
+            {
+              name: "涓嬭浇",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDown0(row);
+              },
+              disabled: (row) => {
+                return !row.url
+              },
+            },
+            {
+              name: "鎻愪氦",
+              type: "text",
+              clickFun: (row) => {
+                this.handleSubmit(row);
+              },
+              disabled: (row) => {
+                return !!row.submitUserName
+              },
+            },
+            {
+              name: "鎵瑰噯",
+              type: "text",
+              clickFun: (handleApproval) => {
+                this.handleSubmit(row);
+              },
+              disabled: (row) => {
+                return !row.submitUserName || !!row.ratifyUserName
+              },
+            },
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
+      tableData0: [],
+      column0: [
+        { label: "澶栨潵鏂囦欢鍚嶇О", prop: "documentName" },
+        { label: "鏂囦欢缂栧彿", prop: "documentCode", width: "120px" },
+        {
+          label: "鏍囧噯瑙勮寖鍚嶇О",
+          prop: "standardName",
+        },
+        { label: "鏍囧噯鍙�", prop: "standardCode" },
+        { label: "鐢熸晥鏃ユ湡", prop: "effectiveDate" },
+        { label: "浣滃簾鏃ユ湡", prop: "cancelDate" },
+        { label: "澶囨敞", prop: "note" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.openAdd("缂栬緫", row);
+              },
+            },
+            {
+              name: "鍒犻櫎",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDelete(row);
+              },
+            },
+          ],
+        },
+      ],
+      page0: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading0: false,
+      title: '鏂板',
+      addForm: {},
+      addDia: false,
+      addRules: {
+        documentName: [{ required: true, message: "璇疯緭鍏ュ鏉ユ枃浠跺悕绉�", trigger: "blur" }],
+        documentCode: [
+          { required: true, message: "璇疯緭鍏ユ枃浠剁紪鍙�", trigger: "blur" },
+        ],
+      },
+      uploading: false,
     }
   },
   // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
   computed: {
-    headers() {
-      return {
-        'Authorization': "Bearer " + getToken()
-      }
-    },
     action() {
-      return this.javaApi + this.$api.manageRecordTotal.exportManageRecordVerify
+      return this.javaApi + '/manageRecordVerify/exportManageRecordVerify'
     }
   },
   mounted() {
-    this.entityCopy = this.HaveJson(this.componentData.entity);
-    this.getPower()
+    // this.entityCopy = this.HaveJson(this.componentData.entity);
+    this.getList()
+    this.getList0()
   },
   methods: {
     getPower() {
@@ -217,11 +292,65 @@
       this.addPower = add
       this.upPower = up
     },
-    handleAdd0() {
-      this.$refs.ValueTable0.openAddDia(this.$api.manageRecordTotal.addManageRecordVerify);
+    openAdd(title, row) {
+      this.title = title;
+      if (row) {
+        this.addForm = row;
+      } else {
+        this.addForm = {};
+      }
+      this.addDia = true;
+    },
+    getList() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams, ...this.page };
+      delete param.total;
+      pageManageRecordTotal({ ...param })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.tableData = res.data.records;
+            this.page.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.getList();
+    },
+    getList0() {
+      this.tableLoading0 = true;
+      let param = { ...this.page0 };
+      delete param.total;
+      pageManageRecordVerify({ ...param })
+        .then((res) => {
+          this.tableLoading0 = false;
+          if (res.code === 200) {
+            this.tableData0 = res.data.records;
+            this.page0.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading0 = false;
+        });
+    },
+    pagination0({ page, limit }) {
+      this.pag0.current = page;
+      this.page0.size = limit;
+      this.getList0();
+    },
+    refresh() {
+      this.queryParams = {};
+      this.page.current = 1;
+      this.getList();
     },
     refreshTable() {
-      this.refreshTable()()
+      this.page.current = 1;
+      this.getList();
     },
     beforeUpload(file) {
       if (file.size > 1024 * 1024 * 10) {
@@ -241,15 +370,10 @@
       this.upLoading = false;
       if (response.code == 200) {
         this.$message.success('涓婁紶鎴愬姛');
-        this.$refs['ValueTable0'].selectList()
+        this.getList0();
       } else {
         this.$message.error('涓婁紶澶辫触');
       }
-    },
-    refresh() {
-      this.componentData.entity = this.HaveJson(this.entityCopy)
-      this.upIndex++
-      this.refreshTable()
     },
     submitCheck(type) { },
     // 鏌ョ湅
@@ -260,19 +384,12 @@
     // 鍏敤鏂规硶
     commonFun(row, callbanck) {
       this.currentInfo = row
-      this.componentData0.entity.manageRecordTotalId = row.id
-      this.$axios.post(this.$api.manageRecordTotal.pageManageRecordVerify, {
-        entity: this.componentData0.entity,
-        page: {
-          current: -1,
-          size: -1
-        }
-      }, {
-        headers: {
-          'Content-Type': 'application/json'
-        }, noQs: true
+      pageManageRecordVerify({
+        current: -1,
+        size: -1,
+        manageRecordTotalId: row.id
       }).then(res => {
-        this.currentInfo.arr = res.data.body.records
+        this.currentInfo.arr = res.data.records
         this.lookDialogVisible = true
         if (callbanck) {
           callbanck()
@@ -280,11 +397,8 @@
       }).catch(err => { });
     },
     handleDown0(row) {
-      let url = this.javaApi + 'word/' + row.url
-      const link = document.createElement('a');
-      link.href = url;
-      link.download = row.month + ' 澶栨潵鏂囦欢纭璁板綍';
-      link.click();
+      let url = this.javaApi + '/word/' + row.url
+      this.$download.saveAs(url, '澶栨潵鏂囦欢纭璁板綍')
     },
     // 鎻愪氦
     handleSubmit(row) {
@@ -293,7 +407,7 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        this.$axios.post(this.$api.manageRecordTotal.submitManageRecordTotal, {
+        submitManageRecordTotal({
           id: row.id
         }).then(res => {
           this.$message({
@@ -316,7 +430,7 @@
       } else {
         this.noCheckLoading = true
       }
-      this.$axios.post(this.$api.manageRecordTotal.ratifyManageRecordTotal, {
+      ratifyManageRecordTotal({
         id: this.currentInfo.id,
         ratifyState: state
       }).then(res => {
@@ -330,6 +444,59 @@
         this.refreshTable()()
         this.lookDialogVisible = false
       }).catch(err => { });
+    },
+    handleDelete(row) {
+      this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          delManageRecordVerify({ id: row.id }).then((res) => {
+            if (res.code == 201) return;
+            this.$message.success("鍒犻櫎鎴愬姛");
+            this.getList0()
+          });
+        })
+        .catch(() => { });
+    },
+    submitProduct(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.uploading = true;
+          if (this.title == "鏂板") {
+            addManageRecordVerify(this.addForm)
+              .then((res) => {
+                this.uploading = false;
+                if (res.code != 200) {
+                  return;
+                }
+                this.$message.success("鎻愪氦鎴愬姛");
+                this.getList0()
+                this.addDia = false;
+              })
+              .catch((err) => {
+                this.uploading = false;
+              });
+          } else {
+            doManageRecordVerify(this.addForm)
+              .then((res) => {
+                this.uploading = false;
+                if (res.code != 200) {
+                  return;
+                }
+                this.$message.success("鎻愪氦鎴愬姛");
+                this.getList0()
+                this.addDia = false;
+              })
+              .catch((err) => {
+                this.uploading = false;
+              });
+          }
+        } else {
+          return false;
+        }
+      });
     },
   }
 }
@@ -356,7 +523,7 @@
 }
 
 .search_label {
-  width: 110px;
+  width: 30px;
   font-size: 14px;
   text-align: right;
 }
@@ -367,9 +534,8 @@
 
 .table {
   background-color: #fff;
-  width: calc(100% - 40px);
-  height: calc(100% - 60px - 140px);
-  padding: 20px;
+  height: 100%;
+  margin-top: 10px;
 }
 
 >>>.el-tabs__content {
diff --git a/src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue b/src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue
index 5e9b191..7c738f8 100644
--- a/src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue
+++ b/src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue
@@ -1,29 +1,18 @@
 <template>
   <!-- 鏂囦欢瀹氭湡瀹℃煡璁板綍 -->
   <div class="PeriodicDocumentReviewRecords">
-    <el-row class="title">
-      <el-col :span="12" style="padding-left: 20px;text-align: left;">鏂囦欢瀹氭湡瀹℃煡璁板綍</el-col>
-      <!-- <el-col :span="12" style="text-align: right;">
-        <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
-        <el-upload :action="action" :show-file-list="false"
-          accept='.doc,.docx' :headers="headers" :on-change="beforeUpload"
-          :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp" style="display:inline-block;margin-left: 20px;">
-          <el-button type="primary" size="medium">瀵煎叆</el-button></el-upload>
-        <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower" style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button>
-      </el-col> -->
-    </el-row>
     <el-tabs type="border-card" v-model="activeName" style="height: 100%;">
       <el-tab-pane label="濉啓" name="濉啓" style="height: 100%;">
         <div class="search">
           <div class="search_thing">
             <div class="search_label">鏂囦欢鍚嶇О锛�</div>
             <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-                v-model="componentData.entity.documentName" @keyup.enter.native="refreshTable()"></el-input></div>
+                v-model="queryParams.documentName" @keyup.enter.native="refreshTable()"></el-input></div>
           </div>
           <div class="search_thing">
             <div class="search_label">鏂囦欢缂栧彿锛�</div>
             <div class="search_input">
-              <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.documentCode"
+              <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.documentCode"
                 @keyup.enter.native="refreshTable()"></el-input>
             </div>
           </div>
@@ -32,17 +21,19 @@
             <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
           </div>
           <div class="btns">
-            <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
-            <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx' :headers="headers"
-              :on-change="beforeUpload" :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp"
-              style="display:inline-block;margin-left: 20px;">
-              <el-button type="primary" size="medium">瀵煎叆</el-button></el-upload>
+            <el-button size="small" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
+            <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx'
+              :headers="uploadHeader" :on-change="beforeUpload" :on-error="onError" ref='upload' v-if="upPower"
+              :on-success="handleSuccessUp" style="display:inline-block;margin-left: 20px;">
+              <el-button type="primary" size="small">瀵煎叆</el-button></el-upload>
           </div>
         </div>
         <div class="table">
-          <ValueTable ref="ValueTable" :url="$api.manageRecordIntervals.pageManageRecordIntervals"
+          <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
+            :height="'calc(100vh - 290px)'" @pagination="pagination"></lims-table>
+          <!-- <ValueTable ref="ValueTable" :url="$api.manageRecordIntervals.pageManageRecordIntervals"
             :delUrl="$api.manageRecordIntervals.delManageRecordIntervals" :componentData="componentData"
-            :upUrl="$api.manageRecordIssueRecycle.doManageRecordIssueRecycle" :key="upIndex" />
+            :upUrl="$api.manageRecordIssueRecycle.doManageRecordIssueRecycle" :key="upIndex" /> -->
         </div>
       </el-tab-pane>
       <el-tab-pane label="鍘嗗彶璁板綍" name="鍘嗗彶璁板綍" style="height: 100%;">
@@ -50,8 +41,8 @@
           <div class="search_thing">
             <div class="search_label">骞达細</div>
             <div class="search_input">
-              <el-date-picker v-model="componentData0.entity.year" type="year" placeholder="閫夋嫨骞�" format="yyyy"
-                value-format="yyyy" size="small" @change="refreshTable()">
+              <el-date-picker v-model="queryParams0.year" type="year" placeholder="閫夋嫨骞�" format="yyyy"
+                value-format="yyyy" size="small" @change="refreshTable(1)">
               </el-date-picker>
             </div>
           </div>
@@ -61,8 +52,10 @@
           </div>
         </div>
         <div class="table">
-          <ValueTable ref="ValueTable0" :url="$api.manageRecordIntervals.pageManageRecordIntervalsTotal"
-            :componentData="componentData0" :key="upIndex" />
+          <lims-table :tableData="tableData0" :column="column0" :page="page0" :tableLoading="tableLoading"
+            :height="'calc(100vh - 290px)'" @pagination="pagination0"></lims-table>
+          <!-- <ValueTable ref="ValueTable0" :url="$api.manageRecordIntervals.pageManageRecordIntervalsTotal"
+            :componentData="componentData0" :key="upIndex" /> -->
         </div>
       </el-tab-pane>
     </el-tabs>
@@ -139,12 +132,25 @@
 </template>
 
 <script>
-import ValueTable from '@/components/Table/value-table.vue'
+import limsTable from "@/components/Table/lims-table.vue";
 import filePreview from '@/components/Preview/filePreview.vue'
 import { getToken } from "@/utils/auth";
+import {
+  exportOutManageRecordIntervals,
+  addManageRecordIntervals,
+  doManageRecordIntervals,
+  ratifyManageRecordIntervalsTotal,
+  submitManageRecordIntervalsTotal,
+  pageManageRecordIntervals,
+  pageManageRecordIntervalsTotal,
+  delManageRecordIntervals,
+} from '@/api/cnas/systemManagement/documentRecords.js'
+import {
+  pageManageDocumentList,
+} from '@/api/cnas/systemManagement/documentControl.js'
 export default {
   components: {
-    ValueTable,
+    limsTable,
     filePreview
   },
   data() {
@@ -270,23 +276,125 @@
       fileList: [],
       typeList: [],
       currentInfo: {},
+      queryParams: {},
+      tableData: [],
+      column: [
+        { label: "鏂囦欢鍚嶇О", prop: "documentName" },
+        { label: "鏂囦欢缂栧彿", prop: "documentCode", width: "120px" },
+        {
+          label: "鐗堟湰鍙�",
+          prop: "documentVersion",
+        },
+        { label: "淇鍙�", prop: "revision" },
+        { label: "閫傚疁鎬�", prop: "suitability" },
+        { label: "澶囨敞", prop: "remark" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.handleEdit(row);
+              },
+            },
+            {
+              name: "鍒犻櫎",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDelete(row);
+              },
+            },
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
+      queryParams0: {},
+      tableData0: [],
+      column0: [
+        { label: "骞翠唤", prop: "year" },
+        { label: "鎬绘暟閲�", prop: "totalNum", width: "120px" },
+        {
+          label: "鎷熷埗浜�",
+          prop: "submitUserName",
+        },
+        { label: "鎷熷埗鏃ユ湡", prop: "submitDate" },
+        { label: "鎵瑰噯浜�", prop: "ratifyUserName" },
+        { label: "鎵瑰噯鏃ユ湡", prop: "ratifyDate" },
+        { label: "鎵瑰噯缁撴灉", prop: "ratifyState" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "鏌ョ湅",
+              type: "text",
+              clickFun: (row) => {
+                this.handleLook(row);
+              },
+              disabled: (row) => {
+                return !row.url
+              },
+            },
+            {
+              name: "涓嬭浇",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDown0(row);
+              },
+              disabled: (row) => {
+                return !row.url
+              },
+            },
+            {
+              name: "鎻愪氦",
+              type: "text",
+              clickFun: (row) => {
+                this.handleSubmit(row);
+              },
+              disabled: (row) => {
+                return !!row.submitUserName && row.ratifyState != '涓嶉�氳繃'
+              },
+            },
+            {
+              name: "鎵瑰噯",
+              type: "text",
+              clickFun: (row) => {
+                this.handleApproval(row);
+              },
+              disabled: (row) => {
+                return (!row.submitUserName || !!row.ratifyUserName) && row.ratifyState != '涓嶉�氳繃'
+              },
+            },
+          ],
+        },
+      ],
+      page0: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
     }
   },
   // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
   computed: {
-    headers() {
-      return {
-        'Authorization': "Bearer " + getToken()
-      }
-    },
     action() {
-      return this.javaApi + this.$api.manageRecordIntervals.exportInManageRecordIntervals
+      return this.javaApi + '/manageRecordIntervals/exportInManageRecordIntervals'
     }
   },
   mounted() {
-    this.entityCopy = this.HaveJson(this.componentData.entity);
-    this.entityCopy0 = this.HaveJson(this.componentData0.entity);
-    this.getPower()
+    // this.entityCopy = this.HaveJson(this.componentData.entity);
+    // this.entityCopy0 = this.HaveJson(this.componentData0.entity);
+    this.getList()
+    this.getList0()
     this.getFileList()
     this.selectEnumByCategory()
   },
@@ -345,31 +453,74 @@
     // 瀵煎嚭
     handleDown() {
       this.outLoading = true
-      this.$axios.post(this.$api.manageRecordIntervals.exportOutManageRecordIntervals, { entity: this.componentData.entity }, { headers: { 'Content-Type': 'application/json' } }).then(res => {
+      exportOutManageRecordIntervals(this.queryParams).then(res => {
         this.outLoading = false
         if (res.code == 201) return this.$message.error('瀵煎嚭澶辫触')
         this.$message.success('瀵煎嚭鎴愬姛')
         let url = this.javaApi + 'word/' + res.message
-        const link = document.createElement('a');
-        link.href = url;
-        link.download = '鏂囦欢瀹氭湡瀹℃煡璁板綍';
-        link.click();
+        this.$download.saveAs(url, "鏂囦欢瀹氭湡瀹℃煡璁板綍");
       })
+    },
+    getList() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams, ...this.page };
+      delete param.total;
+      pageManageRecordIntervals({ ...param })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.tableData = res.data.records;
+            this.page.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.getList();
+    },
+    getList0() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams0, ...this.page0 };
+      delete param.total;
+      pageManageRecordIntervalsTotal({ ...param })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.tableData0 = res.data.records;
+            this.page0.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    pagination0({ page, limit }) {
+      this.page0.current = page;
+      this.page0.size = limit;
+      this.getList0();
     },
     refreshTable(num) {
       if (num) {
-        this.$refs['ValueTable0'].selectList()
+        this.page0.current = 1;
+        this.getList0();
       } else {
-        this.refreshTable()()
+        this.page.current = 1;
+        this.getList();
       }
     },
     refresh(num) {
       if (num) {
-        this.componentData0.entity = this.HaveJson(this.entityCopy0)
-        this.upIndex++
+        this.queryParams0 = {};
+        this.page0.current = 1;
+        this.getList0();
       } else {
-        this.componentData.entity = this.HaveJson(this.entityCopy)
-        this.upIndex++
+        this.queryParams = {};
+        this.page.current = 1;
+        this.getList();
       }
     },
     beforeUpload(file) {
@@ -406,34 +557,21 @@
     },
     // 鑾峰彇鏂囦欢鍒楄〃--鏂囦欢娓呭崟
     getFileList() {
-      this.$axios.post(this.$api.manageDocumentList.pageManageDocumentList, {
-        entity: {
-          orderBy: {
-            field: 'id',
-            order: 'asc'
-          }
-        },
-        page: {
-          current: -1,
-          size: -1
-        }
-      }, {
-        headers: {
-          'Content-Type': 'application/json'
-        }
+      pageManageDocumentList({
+        current: -1,
+        size: -1
       }).then(res => {
-        this.fileList = res.data.body.records.map(m => {
+        this.fileList = res.data.records.map(m => {
           m.title = m.documentCode
           return m
         })
       }).catch(err => { })
     },
     selectEnumByCategory() {
-      this.$axios.post(this.$api.enums.selectEnumByCategory, {
-        category: "閫傚疁鎬�"
-      }).then(res => {
-        this.typeList = res.data
-      })
+      // 鏂囦欢绫诲埆
+      this.getDicts("suitability").then((response) => {
+        this.typeList = this.dictToValue(response.data);
+      });
     },
     // 鎻愪氦
     handleAdd() {
@@ -446,18 +584,33 @@
         let { id, documentCode, documentName, documentVersion, revision, suitability, remark } = this.addInfo
         obj = { id, documentCode, documentName, documentVersion, revision, suitability, remark }
       }
-      this.$axios.post(this.$api.manageRecordIntervals[this.title == '鏂板' ? 'addManageRecordIntervals' : 'doManageRecordIntervals'], obj, { headers: { 'Content-Type': 'application/json' }, noQs: true }).then(res => {
-        this.addLoading = false
-        if (res.code == 201) {
-          return
-        }
-        this.addDialogVisible = false
-        this.$message({
-          type: 'success',
-          message: '鎿嶄綔鎴愬姛!'
-        });
-        this.refreshTable()
-      }).catch(err => { })
+      if (this.title == '鏂板') {
+        addManageRecordIntervals(obj).then(res => {
+          this.addLoading = false
+          if (res.code == 201) {
+            return
+          }
+          this.addDialogVisible = false
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+          this.refreshTable()
+        }).catch(err => { })
+      } else {
+        doManageRecordIntervals(obj).then(res => {
+          this.addLoading = false
+          if (res.code == 201) {
+            return
+          }
+          this.addDialogVisible = false
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+          this.refreshTable()
+        }).catch(err => { })
+      }
     },
     // 淇敼
     handleEdit(row) {
@@ -471,7 +624,7 @@
       } else {
         this.noCheckLoading = true
       }
-      this.$axios.post(this.$api.manageRecordIntervals.ratifyManageRecordIntervalsTotal, {
+      ratifyManageRecordIntervalsTotal({
         id: this.currentInfo.id,
         ratifyState: state
       }).then(res => {
@@ -484,7 +637,7 @@
           type: 'success',
           message: '鎿嶄綔鎴愬姛!'
         });
-        this.$refs['ValueTable0'].selectList()
+        this.refreshTable(1);
         this.lookDialogVisible = false
       }).catch(err => { });
     },
@@ -501,11 +654,8 @@
       }
     },
     handleDown0(row) {
-      let url = this.javaApi + 'word/' + row.url
-      const link = document.createElement('a');
-      link.href = url;
-      link.download = row.month + ' 鎵�鏈夋枃浠跺畾鏈熸鏌ヨ褰�';
-      link.click();
+      let url = this.javaApi + '/word/' + row.url
+      this.$download.saveAs(url, "鎵�鏈夋枃浠跺畾鏈熸鏌ヨ褰�");
     },
     // 鎻愪氦
     handleSubmit(row) {
@@ -514,7 +664,7 @@
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        this.$axios.post(this.$api.manageRecordIntervals.submitManageRecordIntervalsTotal, {
+        submitManageRecordIntervalsTotal({
           id: row.id
         }).then(res => {
           if (res.code === 201) return
@@ -522,7 +672,7 @@
             type: 'success',
             message: '鎻愪氦鎴愬姛!'
           });
-          this.$refs['ValueTable0'].selectList()
+          this.refreshTable(1);
         }).catch(err => { });
       })
     },
@@ -530,6 +680,21 @@
     handleApproval(row) {
       this.title0 = '鎵瑰噯'
       this.commonFun(row)
+    },
+    handleDelete(row) {
+      this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          delManageRecordIntervals({ id: row.id }).then((res) => {
+            if (res.code == 201) return;
+            this.$message.success("鍒犻櫎鎴愬姛");
+            this.refreshTable();
+          });
+        })
+        .catch(() => { });
     },
   }
 }
@@ -568,9 +733,9 @@
 .table {
   margin-top: 10px;
   background-color: #fff;
-  width: calc(100% - 40px);
   height: calc(100% - 60px - 140px);
   padding: 20px;
+  padding-top: 0;
 }
 
 >>>.el-tabs__content {
diff --git a/src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue b/src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue
index c7d80ce..c281b47 100644
--- a/src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue
+++ b/src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue
@@ -1,28 +1,11 @@
 <template>
   <!-- 鏂囦欢淇鐢宠瀹℃壒璁板綍 -->
   <div class="DocumentRevisionRequestApprovalRecords">
-    <el-row class="title">
-      <el-col :span="12" style="padding-left: 20px;text-align: left;">鏂囦欢淇鐢宠瀹℃壒璁板綍</el-col>
-      <el-col :span="12" style="text-align: right;">
-        <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
-        <!-- <el-upload :action="action" :show-file-list="false"
-          accept='.doc,.docx' :headers="headers" :on-change="beforeUpload"
-          :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp" style="display:inline-block;margin-left: 20px;">
-          <el-button type="primary" size="medium">瀵煎叆</el-button></el-upload> -->
-        <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower"
-          style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
     <div class="search">
-      <!-- <div class="search_thing">
-        <div class="search_label">鏂囦欢鍚嶇О锛�</div>
-        <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.documentName"
-            @keyup.enter.native="refreshTable()"></el-input></div>
-      </div> -->
       <div class="search_thing">
         <div class="search_label">鏂囦欢缂栧彿锛�</div>
         <div class="search_input">
-          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.documentCode"
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.documentCode"
             @keyup.enter.native="refreshTable()"></el-input>
         </div>
       </div>
@@ -30,11 +13,15 @@
         <el-button size="small" @click="refresh()">閲� 缃�</el-button>
         <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
       </div>
+      <div class="btn">
+        <el-button size="small" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
+        <el-button size="small" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower"
+          style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button>
+      </div>
     </div>
     <div class="table">
-      <ValueTable ref="ValueTable" :url="$api.manageRecordAudit.pageManageRecordAudit"
-        :delUrl="$api.manageRecordAudit.delManageRecordAudit" :componentData="componentData"
-        :upUrl="$api.manageRecordIssueRecycle.doManageRecordIssueRecycle" :key="upIndex" />
+      <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
+        :height="'calc(100vh - 260px)'" @pagination="pagination"></lims-table>
     </div>
     <el-dialog :title="title" :visible.sync="addDialogVisible" width="800px" top="6vh">
       <el-row>
@@ -335,13 +322,28 @@
 </template>
 
 <script>
-import ValueTable from '@/components/Table/value-table.vue'
+import limsTable from "@/components/Table/lims-table.vue";
 import { exportHtmlToPDF } from '@/utils/downHtmlToPDF'
 import filePreview from '@/components/Preview/filePreview.vue'
+import {
+  exportOutManageRecordAudit,
+  addManageRecordAudit,
+  doManageRecordAudit,
+  selectCNSAPersonTree,
+  ratifyManageRecordAudit,
+  pageManageRecordAudit,
+  delManageRecordAudit,
+} from '@/api/cnas/systemManagement/documentRecords.js'
+import {
+  pageManageDocumentList,
+} from '@/api/cnas/systemManagement/documentControl.js'
+import {
+  selectUserCondition,
+} from "@/api/business/inspectionTask.js";
 export default {
   components: {
-    ValueTable,
-    filePreview
+    filePreview,
+    limsTable
   },
   data() {
     return {
@@ -350,114 +352,6 @@
       outLoading: false,
       lookDialogVisible: false,
       addLoading: false,
-      componentData: {
-        entity: {
-          // documentName: null,
-          documentCode: null,
-          orderBy: {
-            field: 'createTime',
-            order: 'desc'
-          }
-        },
-        isIndex: true,
-        showSelect: false,
-        select: false,
-        // selectMethod: 'handleChangeTask',
-        do: [{
-          id: 'handleLook',
-          font: '鏌ョ湅',
-          type: 'text',
-          method: 'handleLook'
-        }, {
-          id: 'handleLook0',
-          font: '鏂囦欢棰勮',
-          type: 'text',
-          method: 'handleLook0'
-        }, {
-          id: 'handleOut',
-          font: '涓嬭浇',
-          type: 'text',
-          method: 'handleOut'
-        }, {
-          id: 'delete',
-          font: '鍒犻櫎',
-          type: 'text',
-          method: 'doDiy',
-          disabFun: (row, index) => {
-            return !!row.ratifyUser
-          }
-        }, {
-          id: 'handleEdit',
-          font: '淇敼',
-          type: 'text',
-          method: 'handleEdit',
-          field: [],
-          disabFun: (row, index) => {
-            return !!row.ratifyUser
-          }
-        }, {
-          id: 'handleRatify',
-          font: '鎵瑰噯',
-          type: 'text',
-          method: 'handleRatify',
-          field: [],
-          disabFun: (row, index) => {
-            return !!row.ratifyUser
-          }
-        }, {
-          id: 'handlework0',
-          font: '鐢宠鎰忚',
-          type: 'text',
-          method: 'handlework0',
-          field: [],
-          disabFun: (row, index) => {
-            return !!row.ratifyUser
-          }
-        }, {
-          id: 'handlework1',
-          font: '鍘熷畾鍒舵剰瑙�',
-          type: 'text',
-          method: 'handlework1',
-          field: [],
-          disabFun: (row, index) => {
-            return !!row.ratifyUser
-          }
-        }, {
-          id: 'handlework2',
-          font: '鍘熷鏍告剰瑙�',
-          type: 'text',
-          method: 'handlework2',
-          field: [],
-          disabFun: (row, index) => {
-            return !!row.ratifyUser
-          }
-        }],
-        tagField: {
-          // documentType:{
-          //   select: []
-          // },
-          // receiveUserName:{
-          //   select: []
-          // },
-        },
-        selectField: {
-          // documentType:{
-          //   select: []
-          // },
-          // receiveUserName:{
-          //   select: []
-          // },
-        },
-        addUpload: ['signatoryUrl'],
-        requiredAdd: [],
-        requiredUp: [],
-        datePicker: ['receiveDate'],
-        noHead: ['signedUserName', 'signedDate', 'departLims'],//涓嶅弬涓庢柊澧炵紪杈戠殑瀛楁
-        needSort: [],
-        inputType: ''
-      },
-      entityCopy: {},
-      upIndex: 0,
       title: '鏂板',
       addInfo: {
         method: '淇',
@@ -470,11 +364,121 @@
       file: null,
       title0: '鏌ョ湅',
       currentInfo: {},
+      queryParams: {},
+      tableData: [],
+      column: [
+        { label: "鏂囦欢缂栧彿", prop: "documentCode" },
+        { label: "绔犺妭鍙�", prop: "capter", width: "120px" },
+        {
+          label: "椤电爜",
+          prop: "pages",
+        },
+        { label: "淇娆℃暟", prop: "number" },
+        { label: "淇敼鍓嶇増鏈彿", prop: "beforeVersion" },
+        { label: "淇敼鍚庣増鏈彿", prop: "afterVersion" },
+        { label: "淇敼鍐呭", prop: "alterThing" },
+        { label: "淇浜�", prop: "alterUserName" },
+        { label: "鎵瑰噯浜�", prop: "ratifyUserName" },
+        { label: "鏃ユ湡", prop: "date" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "鏌ョ湅",
+              type: "text",
+              clickFun: (row) => {
+                this.handleLook(row);
+              },
+            },
+            {
+              name: "鏂囦欢棰勮",
+              type: "text",
+              clickFun: (row) => {
+                this.handleLook0(row);
+              },
+            },
+            {
+              name: "涓嬭浇",
+              type: "text",
+              clickFun: (row) => {
+                this.handleOut(row);
+              },
+            },
+            {
+              name: "鍒犻櫎",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDelete(row);
+              },
+              disabled: (row) => {
+                return !!row.ratifyUser
+              },
+            },
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.handleEdit(row);
+              },
+              disabled: (row) => {
+                return !!row.ratifyUser
+              },
+            },
+            {
+              name: "鎵瑰噯",
+              type: "text",
+              clickFun: (row) => {
+                this.handleRatify(row);
+              },
+              disabled: (row) => {
+                return !!row.ratifyUser
+              },
+            },
+            {
+              name: "鐢宠鎰忚",
+              type: "text",
+              clickFun: (row) => {
+                this.handlework0(row);
+              },
+              disabled: (row) => {
+                return !!row.ratifyUser
+              },
+            },
+            {
+              name: "鍘熷畾鍒舵剰瑙�",
+              type: "text",
+              clickFun: (row) => {
+                this.handlework1(row);
+              },
+              disabled: (row) => {
+                return !!row.ratifyUser
+              },
+            },
+            {
+              name: "鍘熷鏍告剰瑙�",
+              type: "text",
+              clickFun: (row) => {
+                this.handlework2(row);
+              },
+              disabled: (row) => {
+                return !!row.ratifyUser
+              },
+            },
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
     }
   },
   mounted() {
-    this.entityCopy = this.HaveJson(this.componentData.entity);
-    this.getPower()
+    this.getList()
     this.getFileList()
     this.getAuthorizedPerson()
     this.selectTreeList()
@@ -543,44 +547,51 @@
     // 瀵煎嚭
     handleDown() {
       this.outLoading = true
-      this.$axios.post(this.$api.manageRecordAudit.exportOutManageRecordAudit, { entity: this.componentData.entity }, { headers: { 'Content-Type': 'application/json' } }).then(res => {
+      exportOutManageRecordAudit(this.queryParams).then(res => {
         this.outLoading = false
         if (res.code == 201) return this.$message.error('瀵煎嚭澶辫触')
         this.$message.success('瀵煎嚭鎴愬姛')
-        let url = this.javaApi + 'word/' + res.message
-        const link = document.createElement('a');
-        link.href = url;
-        link.download = '鏂囦欢淇琛�';
-        link.click();
+        let url = this.javaApi + '/word/' + res.data
+        this.$download.saveAs(url, "鏂囦欢淇琛�");
       })
     },
-    refreshTable() {
-      this.refreshTable()()
+    getList() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams, ...this.page };
+      delete param.total;
+      pageManageRecordAudit({ ...param })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.tableData = res.data.records;
+            this.page.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.getList();
     },
     refresh() {
-      this.componentData.entity = this.HaveJson(this.entityCopy)
-      this.upIndex++
-      this.refreshTable()
+      this.queryParams = {};
+      this.page.current = 1;
+      this.getList();
+    },
+    refreshTable() {
+      this.page.current = 1;
+      this.getList();
     },
     // 鑾峰彇鏂囦欢鍒楄〃--鏂囦欢娓呭崟
     getFileList() {
-      this.$axios.post(this.$api.manageDocumentList.pageManageDocumentList, {
-        entity: {
-          orderBy: {
-            field: 'createTime',
-            order: 'desc'
-          }
-        },
-        page: {
-          current: -1,
-          size: -1
-        }
-      }, {
-        headers: {
-          'Content-Type': 'application/json'
-        }
+      pageManageDocumentList({
+        current: -1,
+        size: -1
       }).then(res => {
-        this.fileList = res.data.body.records.map(m => {
+        this.fileList = res.data.records.map(m => {
           m.title = m.documentCode
           return m
         })
@@ -600,12 +611,7 @@
           fd.append(m, this.addInfo[m])
         }
         this.addLoading = true
-        this.$axios.post(this.$api.manageRecordAudit.addManageRecordAudit, fd, {
-          headers: {
-            'Content-Type': 'multipart/form-data'
-          },
-          noQs: true
-        }).then(res => {
+        addManageRecordAudit(fd).then(res => {
           this.addLoading = false
           if (res.code == 200) {
             this.$message({
@@ -636,12 +642,7 @@
           }
         }
         this.addLoading = true
-        this.$axios.post(this.$api.manageRecordAudit.doManageRecordAudit, fd, {
-          headers: {
-            'Content-Type': 'multipart/form-data'
-          },
-          noQs: true
-        }).then(res => {
+        doManageRecordAudit(fd).then(res => {
           this.addLoading = false
           if (res.code == 200) {
             this.refreshTable()
@@ -656,7 +657,7 @@
       }
     },
     getAuthorizedPerson() {
-      this.$axios.get(this.$api.user.getUserMenu).then(res => {
+      selectUserCondition().then(res => {
         let data = []
         res.data.forEach(a => {
           data.push({
@@ -664,14 +665,12 @@
             value: a.id
           })
         })
-        // this.componentData.tagField.receiveUserName.select = data
-        // this.componentData.selectField.receiveUserName.select = data
         this.personList = data
       })
     },
     // 鏌ヨ鏍戝舰鍒楄〃
     selectTreeList() {
-      this.$axios.get(this.$api.personnel.selectCNSAPersonTree).then((res) => {
+      selectCNSAPersonTree().then((res) => {
         this.list = res.data[0].children;
       });
     },
@@ -692,15 +691,13 @@
         type: 'warning'
       })
         .then(() => {
-          this.$axios
-            .post(this.$api.manageRecordAudit.ratifyManageRecordAudit, { id: row.id })
-            .then(res => {
-              if (res.code === 201) {
-                return;
-              }
-              this.$message.success('鎿嶄綔鎴愬姛');
-              this.refreshTable();
-            })
+          ratifyManageRecordAudit({ id: row.id }).then(res => {
+            if (res.code === 201) {
+              return;
+            }
+            this.$message.success('鎿嶄綔鎴愬姛');
+            this.refreshTable();
+          })
             .catch(e => {
               this.$message.error('鎿嶄綔澶辫触');
             });
@@ -744,7 +741,22 @@
     handleLook0(row) {
       this.currentInfo = row;
       this.lookDialogVisible = true
-    }
+    },
+    handleDelete(row) {
+      this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          delManageRecordAudit({ id: row.id }).then((res) => {
+            if (res.code == 201) return;
+            this.$message.success("鍒犻櫎鎴愬姛");
+            this.refresh();
+          });
+        })
+        .catch(() => { });
+    },
   }
 }
 </script>
@@ -760,6 +772,7 @@
   height: 80px;
   display: flex;
   align-items: center;
+  position: relative;
 }
 
 .search_thing {
@@ -781,15 +794,16 @@
 .table {
   margin-top: 10px;
   background-color: #fff;
-  width: calc(100% - 40px);
   height: calc(100% - 60px - 80px - 10px - 40px);
   padding: 20px;
+  padding-top: 0;
 }
 
 .tables {
   table-layout: fixed;
   width: 100%;
   margin-top: 10px;
+  border-collapse: collapse;
 }
 
 .tables td {
@@ -845,4 +859,10 @@
 >>>.el-dialog__body {
   height: auto;
 }
+
+.btn {
+  position: absolute;
+  right: 20px;
+  top: 16px;
+}
 </style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/ViewTestRecord.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/ViewTestRecord.vue
new file mode 100644
index 0000000..fac2da1
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/ViewTestRecord.vue
@@ -0,0 +1,176 @@
+<template>
+  <div>
+    <el-dialog :visible.sync="filesDialogVisible" title="闄勪欢" width="80%" @closed="closeFilesLook">
+      <div style="display: flex;justify-content: space-between;">
+        <el-upload ref='upload' :action="fileAction" :auto-upload="true" :before-upload="fileBeforeUpload"
+          :data="{ correctId: info.correctId }" :headers="uploadHeader" :on-error="onError"
+          :on-success="handleSuccessUp" :show-file-list="false"
+          accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;">
+          <el-button size="small" style="height: 38px" type="primary">闄勪欢涓婁紶</el-button>
+        </el-upload>
+      </div>
+      <div>
+        <limsTable ref="yearTable" :column="columnData" :height="'calc(100vh - 30em)'" :highlightCurrentRow="true"
+          :table-data="tableData" :table-loading="tableLoading" style="margin-top: 0.5em;" :page="page">
+        </limsTable>
+      </div>
+    </el-dialog>
+    <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" top="5vh" width="800px">
+      <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.fileUrl"
+        style="height: 90vh;overflow-y: auto;" />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import filePreview from '@/components/Preview/filePreview.vue'
+import {
+  getInternalCorrectFileList,
+  delInternalCorrectFile,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+  name: 'ViewTestRecord',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { filePreview, limsTable },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      filesDialogVisible: false,
+      tableLoading: false,
+      filesLookInfo: {},
+      columnData: [
+        {
+          label: '鏂囦欢鍚嶇О',
+          prop: 'fileName',
+          minWidth: '150px'
+        },
+        {
+          dataType: 'action',
+          minWidth: '100',
+          label: '鎿嶄綔',
+          fixed: 'right',
+          operation: [
+            {
+              name: '棰勮',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleLook(row)
+              }
+            },
+            {
+              name: '涓嬭浇',
+              type: 'text',
+              clickFun: (row) => {
+                this.upload(row)
+              }
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delete(row)
+              }
+            }
+          ]
+        }
+      ],
+      tableData: [],
+      info: {},
+      currentInfo: {},
+      lookDialogVisible: false,
+      page: {
+        total: 0,
+        size: -1,
+        current: -1,
+      },
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia(row) {
+      this.filesDialogVisible = true
+      this.info = row
+      this.searchTableList()
+    },
+    // 鏌ヨ闄勪欢鍒楄〃
+    searchTableList() {
+      this.tableLoading = true
+      getInternalCorrectFileList({ correctId: this.info.correctId }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data
+      }).catch(err => {
+        this.tableLoading = false
+        console.log('err---', err);
+      })
+    },
+    closeFilesLook() {
+      this.filesDialogVisible = false
+    },
+    // 鏌ョ湅鏂囦欢
+    handleLook(row) {
+      this.currentInfo = row
+      this.lookDialogVisible = true
+    },
+    // 涓嬭浇
+    upload(row) {
+      let url = '';
+      if (row.type == 1) {
+        url = this.javaApi + '/img/' + row.fileUrl
+        this.$download.saveAs(url, row.fileName)
+      } else {
+        url = this.javaApi + '/word/' + row.fileUrl
+        this.$download.saveAs(url, row.fileName)
+      }
+    },
+    // 鍒犻櫎
+    delete(row) {
+      this.tableLoading = true
+      delInternalCorrectFile({ correctFileId: row.correctFileId }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.$message.success('鍒犻櫎鎴愬姛')
+        this.searchTableList()
+      }).catch(err => {
+        this.tableLoading = false
+        console.log('err---', err);
+      })
+    },
+    // 涓婁紶楠岃瘉
+    fileBeforeUpload(file) {
+      let flag = true
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload.clearFiles()
+        flag = false
+      }
+      if (!flag) {
+        return Promise.reject(flag); //姝g‘鐨勭粓姝�
+      }
+    },
+    onError(err, file, fileList, type) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload.clearFiles()
+    },
+    handleSuccessUp(response,) {
+      this.upLoading = false;
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+        this.searchTableList()
+      } else {
+        this.$message.error(response.message);
+      }
+    },
+  },
+  computed: {
+    fileAction() {
+      return this.javaApi + '/internalCorrect/uploadInternalCorrectFile'
+
+    }
+  },
+};
+</script>
+
+<style scoped></style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspection.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspection.vue
new file mode 100644
index 0000000..ecbc0cf
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspection.vue
@@ -0,0 +1,254 @@
+<template>
+  <div>
+    <div class="search-background">
+      <span class="search-group">
+        <span style="width: 160px">鍙楀閮ㄩ棬锛�</span>
+        <el-input v-model="searchForm.department" clearable size="small"></el-input>
+        <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+        <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+      </span>
+      <span class="search-group">
+        <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+      </span>
+    </div>
+    <div class="table">
+      <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+        :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+      </limsTable>
+    </div>
+    <audit-inspection-dia v-if="auditInspectionDia" ref="auditInspectionDia"
+      @closeImplementDia="closeImplementDia"></audit-inspection-dia>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import AuditInspectionDia from './auditInspectionDia.vue';
+import {
+  pageInternalCheck,
+  delInternalCheck,
+  exportInternalCheck
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+
+export default {
+  name: 'auditInspection',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { AuditInspectionDia, limsTable },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        department: '',
+      },
+      tableColumn: [
+        {
+          label: '鍙楀閮ㄩ棬',
+          prop: 'department',
+        },
+        {
+          label: '閮ㄩ棬璐熻矗浜�',
+          prop: 'departmentHead',
+        },
+        {
+          label: '瀹℃牳鍛�',
+          prop: 'auditor',
+        },
+        {
+          label: '瀹℃牳鏃ユ湡',
+          prop: 'reviewDate',
+        }, {
+          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: '140'
+        },
+        {
+          dataType: 'action',
+          minWidth: '220',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '瀵煎嚭',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              },
+              disabled: (row) => {
+                if (row.ratifyStatus === 1) {
+                  return false
+                } else {
+                  return true
+                }
+              },
+            },
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+              disabled: (row) => {
+                if (row.ratifyStatus === 1) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '鎵瑰噯',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('ratify', 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
+                }
+              },
+            }
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+        total: 0,
+      },
+      auditInspectionDia: false
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      const entity = this.searchForm
+      const page = this.page
+      this.tableLoading = true
+      pageInternalCheck({ ...entity, ...page }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.tableLoading = false
+      })
+    },
+    // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+    openFormDia(type, row) {
+      this.auditInspectionDia = true
+      this.$nextTick(() => {
+        this.$refs.auditInspectionDia.openDia(type, row)
+      })
+    },
+    closeImplementDia() {
+      this.auditInspectionDia = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.department = '';
+      this.searchList()
+    },
+    // 鍒犻櫎
+    delPlan(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        delInternalCheck({ checkId: row.checkId }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 瀵煎嚭
+    handleDown(row) {
+      exportInternalCheck({ checkId: row.checkId }).then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '鍐呭妫�鏌�' + '.docx');
+      })
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+  }
+};
+</script>
+
+<style scoped>
+.search-background {
+  width: 100%;
+  height: 60px;
+  line-height: 60px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspectionDia.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspectionDia.vue
new file mode 100644
index 0000000..a1f1e58
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspectionDia.vue
@@ -0,0 +1,231 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+      :visible.sync="formDia" title="鍐呴儴瀹℃牳瀹炴柦璁″垝" width="80%" @close="closeImplementDia">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto">
+        <el-col :span="12">
+          <el-form-item label="鍙楀閮ㄩ棬" prop="department">
+            <el-input v-model="form.department" :disabled="operationType === 'ratify'" clearable
+              size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="閮ㄩ棬璐熻矗浜�" prop="departmentHead">
+            <el-input v-model="form.departmentHead" :disabled="operationType === 'ratify'" clearable
+              size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瀹℃牳鍛�" prop="auditor">
+            <el-input v-model="form.auditor" :disabled="operationType === 'ratify'" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瀹℃牳鏃ユ湡" prop="reviewDate">
+            <el-date-picker v-model="form.reviewDate" :disabled="operationType === 'ratify'" clearable
+              format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date"
+              value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+      </el-form>
+      <div v-if="operationType !== 'ratify'" style="text-align: right;margin-bottom: 10px">
+        <el-button size="small" type="primary" @click="addRow">娣诲姞</el-button>
+        <el-button size="small" type="danger" @click="clearTable">娓呯┖</el-button>
+      </div>
+      <el-table :data="checkDetailList" border height="300" style="width: 100%">
+        <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+        <el-table-column header-align="center" label="娑夊強瑕佺礌鍜岃川閲忎綋绯绘枃浠舵潯娆�" prop="element">
+          <template slot-scope="{row}">
+            <el-input v-model="row.element" :disabled="operationType === 'ratify'" size="small" />
+          </template>
+        </el-table-column>
+        <el-table-column header-align="center" label="瀹℃牳鍐呭" prop="content">
+          <template slot-scope="{row}">
+            <el-input v-model="row.content" :disabled="operationType === 'ratify'" size="small" />
+          </template>
+        </el-table-column>
+        <el-table-column header-align="center" label="瀹℃牳鏂瑰紡" prop="method">
+          <template slot-scope="{row}">
+            <el-input v-model="row.method" :disabled="operationType === 'ratify'" size="small" />
+          </template>
+        </el-table-column>
+        <el-table-column header-align="center" label="瀹℃牳缁撴灉璁板綍" prop="resultRecords" width="180">
+          <template slot-scope="{row}">
+            <el-input v-model="row.resultRecords" :disabled="operationType === 'ratify'" size="small" />
+          </template>
+        </el-table-column>
+        <el-table-column header-align="center" label="涓嶇鍚堟�ц川" prop="nonNature" width="180">
+          <template slot-scope="{row}">
+            <el-input v-model="row.nonNature" :disabled="operationType === 'ratify'" size="small" />
+          </template>
+        </el-table-column>
+      </el-table>
+      <span slot="footer" class="dialog-footer">
+        <el-button v-if="operationType === 'ratify'" :loading="loading" @click="ratify(0)">涓嶆壒鍑�</el-button>
+        <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="ratify(1)">鎵�
+          鍑�</el-button>
+        <el-button v-if="operationType !== 'ratify'" @click="closeImplementDia">鍙� 娑�</el-button>
+        <el-button v-if="operationType !== 'ratify'" :loading="loading" type="primary" @click="handleEdit">鎻�
+          浜�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="approvalDialog" title="鎵瑰噯" width="30%" @close="approvalDialog = false">
+      <span>
+        鎵瑰噯澶囨敞锛�
+        <el-input v-model="ratifyRemark" type="textarea"></el-input>
+      </span>
+      <span slot="footer" class="dialog-footer">
+        <el-button :loading="approvalLoading" @click="approvalDialog = false">鍙� 娑�</el-button>
+        <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getInternalCheckOne,
+  addInternalCheck,
+  updateInternalCheck,
+  ratifyInternalCheck,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+  name: 'auditInspectionDia',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        department: '',
+        departmentHead: '',
+        auditor: '',
+        reviewDate: '',
+      },
+      rules: {
+        department: [{ required: true, message: '璇峰~鍐欏彈瀹¢儴闂�', trigger: 'blur' }],
+        departmentHead: [{ required: true, message: '璇峰~鍐欓儴闂ㄨ礋璐d汉', trigger: 'blur' }],
+        auditor: [{ required: true, message: '璇峰~鍐欏鏍稿憳', trigger: 'blur' }],
+        reviewDate: [{ required: true, message: '璇峰~鍐欏鏍告棩鏈�', trigger: 'blur' }],
+      },
+      checkDetailList: [],
+      operationType: '',
+      approvalDialog: false,
+      approvalLoading: false,
+      ratifyRemark: '',
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia(type, row) {
+      this.formDia = true
+      this.operationType = type
+      if (type !== 'add') {
+        this.searchInfo(row)
+      }
+    },
+    // 鏌ヨ璇︽儏
+    searchInfo(row) {
+      this.diaLoading = true
+      getInternalCheckOne({ checkId: row.checkId }).then(res => {
+        this.diaLoading = false
+        if (res.code === 201) return
+        this.form = res.data
+        this.checkDetailList = this.form.checkDetailList
+      }).catch(err => {
+        console.log(err)
+        this.diaLoading = false
+      })
+    },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          if (this.checkDetailList.length === 0) {
+            this.$message.warning('璇锋坊鍔犺〃鏍兼暟鎹�')
+            return
+          }
+          this.loading = true
+          const internalCheckDto = this.HaveJson(this.form)
+          internalCheckDto.checkDetailList = this.HaveJson(this.checkDetailList)
+          if (this.operationType === 'add') {
+            addInternalCheck(internalCheckDto).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeImplementDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          } else if (this.operationType === 'edit') {
+            updateInternalCheck(internalCheckDto).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeImplementDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    ratify(ratifyStatus) {
+      // 涓嶆壒鍑嗛渶瑕佸~鍐欐壒鍑嗗唴瀹�
+      if (ratifyStatus === 0) {
+        this.approvalDialog = true
+      } else {
+        this.handleApproval(ratifyStatus)
+      }
+    },
+    // 鎻愪氦鎵瑰噯淇℃伅
+    handleApproval(ratifyStatus) {
+      this.approvalLoading = true
+      const internalCheckDto = this.HaveJson(this.form)
+      internalCheckDto.ratifyStatus = ratifyStatus
+      internalCheckDto.ratifyRemark = ratifyStatus === 0 ? this.ratifyRemark : ''
+      ratifyInternalCheck(internalCheckDto).then(res => {
+        if (res.code === 200) {
+          this.$message.success('鎻愪氦鎴愬姛锛�');
+          this.approvalDialog = false
+          this.closeImplementDia(this.departId);
+        }
+        this.approvalLoading = false
+      }).catch(() => {
+        this.approvalLoading = false
+      })
+    },
+    // 澧炲姞琛ㄦ牸琛屾暟鎹�
+    addRow() {
+      this.checkDetailList.push({
+        element: '',
+        content: '',
+        method: '',
+        resultRecords: '',
+        nonNature: '',
+      })
+    },
+    // 娓呯┖琛ㄦ牸鏁版嵁
+    clearTable() {
+      this.checkDetailList = []
+    },
+    closeImplementDia() {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeImplementDia')
+    },
+  }
+};
+</script>
+
+<style scoped></style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSign.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSign.vue
new file mode 100644
index 0000000..1ea5e3a
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSign.vue
@@ -0,0 +1,202 @@
+<template>
+  <div>
+    <div class="search-background">
+      <span class="search-group">
+        <span style="width: 160px">鏃堕棿锛�</span>
+        <el-input v-model="searchForm.meetingDate" clearable size="small"></el-input>
+        <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+        <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+      </span>
+      <span class="search-group">
+        <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+      </span>
+    </div>
+    <div class="table">
+      <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+        :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+      </limsTable>
+    </div>
+    <audit-meeting-sign-dia v-if="auditMeetingSignDia" ref="auditMeetingSignDia"
+      @closeYearDia="closeYearDia"></audit-meeting-sign-dia>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import AuditMeetingSignDia from './auditMeetingSignDia.vue';
+import {
+  pageInternalMeeting,
+  delInternalMeeting,
+  exportInternalMeeting,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+
+export default {
+  name: 'auditMeetingSign',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { AuditMeetingSignDia, limsTable },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        meetingDate: '',
+      },
+      tableColumn: [
+        {
+          label: '鏃堕棿',
+          prop: 'meetingDate',
+          minWidth: '100'
+        },
+        {
+          label: '涓绘寔浜�',
+          prop: 'compere',
+          minWidth: '100'
+        },
+        {
+          label: '鍦扮偣',
+          prop: 'place',
+          minWidth: '100'
+        },
+        {
+          label: '浼氳涓婚',
+          prop: 'subject',
+          minWidth: '100'
+        },
+        {
+          label: '鍙備細浜哄憳',
+          prop: 'participantName',
+          minWidth: '120'
+        },
+        {
+          dataType: 'action',
+          fixed: 'right',
+          minWidth: '220',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '瀵煎嚭',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              }
+            },
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delPlan(row)
+              }
+            }
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+        total: 0,
+      },
+      auditMeetingSignDia: false,
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      const entity = this.searchForm
+      const page = this.page
+      this.tableLoading = true
+      pageInternalMeeting({ ...entity, ...page }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.tableLoading = false
+      })
+    },
+    // 鏂板锛岀紪杈戝脊妗�
+    openFormDia(type, row) {
+      this.auditMeetingSignDia = true
+      this.$nextTick(() => {
+        this.$refs.auditMeetingSignDia.openDia(type, row)
+      })
+    },
+    closeYearDia() {
+      this.auditMeetingSignDia = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.meetingDate = '';
+      this.searchList()
+    },
+    // 鍒犻櫎
+    delPlan(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        delInternalMeeting({ meetingId: row.meetingId }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 瀵煎嚭
+    handleDown(row) {
+      exportInternalMeeting({ meetingId: row.meetingId }).then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '鍐呭浼氳绛惧埌' + '.docx');
+      })
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+  }
+};
+</script>
+
+<style scoped>
+.search-background {
+  width: 100%;
+  height: 60px;
+  line-height: 60px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSignDia.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSignDia.vue
new file mode 100644
index 0000000..e648ee2
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSignDia.vue
@@ -0,0 +1,183 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+      :visible.sync="formDia" title="鍐呭浼氳绛惧埌琛�" width="1000px" @close="closeYearDia">
+      <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鏃堕棿" prop="meetingDate">
+              <el-date-picker v-model="form.meetingDate" clearable format="yyyy-MM-dd HH:mm:ss" placeholder="璇烽�夋嫨"
+                size="small" style="width: 100%" type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="涓绘寔浜�" prop="compere">
+              <el-input v-model="form.compere" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍦扮偣" prop="place">
+              <el-input v-model="form.place" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="浼氳涓婚" prop="subject">
+              <el-input v-model="form.subject" clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鍙備細浜哄憳" prop="participant">
+              <el-select v-model="form.participant" clearable filterable multiple placeholder="璇烽�夋嫨" size="small"
+                style="width: 100%;">
+                <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeYearDia">鍙� 娑�</el-button>
+        <el-button :loading="loading" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  selectUserCondition,
+} from "@/api/business/inspectionTask.js";
+import {
+  getInternalMeetingOne,
+  addInternalMeeting,
+  updateInternalMeeting,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+  name: 'auditMeetingSignDia',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        meetingDate: '',
+        compere: '',
+        place: '',
+        subject: '',
+        participant: [],
+      },
+      rules: {
+        meetingDate: [{ required: true, message: '璇峰~鍐欎細璁椂闂�', trigger: 'blur' }],
+        compere: [{ required: true, message: '璇峰~鍐欎富鎸佷汉', trigger: 'blur' }],
+        place: [{ required: true, message: '璇峰~鍐欏湴鐐�', trigger: 'blur' }],
+        subject: [{ required: true, message: '璇峰~鍐欎細璁富棰�', trigger: 'blur' }],
+        participant: [{ required: true, message: '璇烽�夋嫨鍙傚姞浜哄憳', trigger: 'change' }],
+      },
+      operationType: '',
+      personList: []
+    };
+  },
+  mounted() {
+
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia(type, row) {
+      this.formDia = true
+      this.operationType = type
+      this.getAuthorizedPerson()
+      if (type !== 'add') {
+        this.searchInfo(row)
+      }
+    },
+    // 鏌ヨ璇︽儏
+    searchInfo(row) {
+      this.diaLoading = true
+      getInternalMeetingOne({ meetingId: row.meetingId }).then(res => {
+        this.diaLoading = false
+        if (res.code === 201) return
+        this.form = res.data
+        this.form.participant = this.form.participant.split(',').map(Number)
+      }).catch(err => {
+        console.log(err)
+        this.diaLoading = false
+      })
+    },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.loading = true
+          const internalMeeting = this.HaveJson(this.form)
+          internalMeeting.participant = internalMeeting.participant.join(',')
+          if (this.operationType === 'add') {
+            addInternalMeeting(internalMeeting).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeYearDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          } else if (this.operationType === 'edit') {
+            updateInternalMeeting(internalMeeting).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeYearDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    closeYearDia() {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeYearDia')
+    },
+    getAuthorizedPerson() {
+      selectUserCondition().then(res => {
+        let data = []
+        res.data.forEach(a => {
+          data.push({
+            label: a.name,
+            value: a.id
+          })
+        })
+        this.personList = data
+      })
+    },
+  }
+};
+</script>
+
+<style scoped>
+.table {
+  table-layout: fixed;
+  width: 100%;
+  margin-top: 10px;
+}
+
+.table td {
+  height: 34px;
+  width: 100px;
+  text-align: center;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+  padding: 4px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReport.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReport.vue
new file mode 100644
index 0000000..1eb6332
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReport.vue
@@ -0,0 +1,312 @@
+<template>
+  <div>
+    <div class="search-background">
+      <span class="search-group">
+        <span style="width: 160px">瀹℃牳鐩殑锛�</span>
+        <el-input v-model="searchForm.purposes" clearable size="small"></el-input>
+        <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+        <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+      </span>
+      <span class="search-group">
+        <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+      </span>
+    </div>
+    <div class="table">
+      <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+        :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+      </limsTable>
+    </div>
+    <audit-report-dia v-if="auditReportDia" ref="auditReportDia"
+      @closeImplementDia="closeImplementDia"></audit-report-dia>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import AuditReportDia from './auditReportDia.vue';
+import {
+  delInternalReport,
+  pageInternalReport,
+  exportInternalReport,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+  name: 'auditReport',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { AuditReportDia, limsTable },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        purposes: '',
+      },
+      tableColumn: [
+        {
+          label: '瀹℃牳鐩殑',
+          prop: 'purposes',
+        },
+        {
+          label: '瀹℃牳渚濇嵁',
+          prop: 'basis',
+        },
+        {
+          label: '瀹℃牳鏃ユ湡',
+          prop: 'reviewDate',
+        },
+        {
+          label: '瀹℃牳鏂规硶',
+          prop: 'method',
+        },
+        {
+          label: '瀹℃牳鑼冨洿',
+          prop: 'scope',
+        },
+        {
+          label: '瀹℃牳璐d换鑰�',
+          prop: 'responsible',
+        },
+        {
+          label: '瀹℃牳缁勯暱',
+          prop: 'leader',
+        },
+        {
+          label: '瀹℃牳鍛�',
+          prop: 'auditor',
+        },
+        {
+          label: '瀹℃牳缁勫垎宸ユ儏鍐�',
+          prop: 'division',
+        },
+        {
+          dataType: 'tag',
+          label: '瀹℃牳鐘舵��',
+          prop: 'examineStatus',
+          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: 'examineRemark',
+          minWidth: '140'
+        },
+        {
+          dataType: 'tag',
+          label: '璐ㄩ噺璐熻矗浜虹姸鎬�',
+          prop: 'qualityStatus',
+          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: 'qualityRemark',
+          minWidth: '140'
+        },
+        {
+          dataType: 'action',
+          minWidth: '220',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '瀵煎嚭',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              }
+            },
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+              disabled: (row) => {
+                if (row.examineStatus === 1 || row.examineStatus === 1) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '瀹℃牳',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('examine', row);
+              },
+              disabled: (row) => {
+                if (row.examineStatus === 1) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '鎰忚',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('ratify', row);
+              },
+              disabled: (row) => {
+                if (row.qualityStatus === 1 || row.examineStatus === 0 || row.examineStatus === null) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              color: '#f56c6c',
+              clickFun: (row) => {
+                this.delPlan(row)
+              },
+              disabled: (row) => {
+                if (row.qualityStatus === 1) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            }
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+        total: 0,
+      },
+      auditReportDia: false
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      const entity = this.searchForm
+      const page = this.page
+      this.tableLoading = true
+      pageInternalReport({ ...entity, ...page }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.tableLoading = false
+      })
+    },
+    // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+    openFormDia(type, row) {
+      this.auditReportDia = true
+      this.$nextTick(() => {
+        this.$refs.auditReportDia.openDia(type, row)
+      })
+    },
+    closeImplementDia() {
+      this.auditReportDia = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.purposes = '';
+      this.searchList()
+    },
+    // 鍒犻櫎
+    delPlan(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        delInternalReport({ reportId: row.reportId }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 瀵煎嚭
+    handleDown(row) {
+      exportInternalReport({ reportId: row.reportId }).then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '鍐呭鎶ュ憡' + '.docx');
+      })
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+  }
+};
+</script>
+
+<style scoped>
+.search-background {
+  width: 100%;
+  height: 60px;
+  line-height: 60px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReportDia.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReportDia.vue
new file mode 100644
index 0000000..b2dd1fa
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReportDia.vue
@@ -0,0 +1,333 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+      :visible.sync="formDia" title="鍐呴儴瀹℃牳鎶ュ憡" width="80%" @close="closeImplementDia">
+      <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto">
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="瀹℃牳鐩殑" prop="purposes">
+              <el-input v-model="form.purposes" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="瀹℃牳渚濇嵁" prop="basis">
+              <el-input v-model="form.basis" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="瀹℃牳鏃ユ湡" prop="reviewDate">
+              <el-date-picker v-model="form.reviewDate"
+                :disabled="operationType === 'examine' || operationType === 'ratify'" clearable format="yyyy-MM-dd"
+                placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="瀹℃牳鏂规硶" prop="method">
+              <el-input v-model="form.method" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="瀹℃牳鑼冨洿" prop="scope">
+              <el-input v-model="form.scope" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="瀹℃牳璐d换鑰�" prop="responsible">
+              <el-input v-model="form.responsible" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="瀹℃牳缁勯暱" prop="leader">
+              <el-input v-model="form.leader" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="瀹℃牳鍛�" prop="auditor">
+              <el-input v-model="form.auditor" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="瀹℃牳缁勫垎宸ユ儏鍐�" prop="division">
+              <el-input v-model="form.division" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="瀹℃牳姒傚喌" prop="overview">
+              <el-input v-model="form.overview" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                :rows="3" clearable size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鍐呭缁勫涓績绠$悊浣撶郴鐨勭粨璁烘�ц瘎浠�" prop="conclusion">
+              <el-input v-model="form.conclusion" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                :rows="3" clearable size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鏀硅繘鎰忚" prop="suggest">
+              <el-input v-model="form.suggest" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                :rows="3" clearable size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="棰勮鍙楀鏍搁儴闂ㄥ畬鎴愮籂姝f帾鏂芥墍闇�鏃堕棿" prop="actionDate">
+              <el-input v-model="form.actionDate" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                :rows="3" clearable size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="涓嶇鍚堟儏鍐垫暣鏀规�讳綋璺熻繘纭浜�" prop="followUser">
+              <el-input v-model="form.followUser" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                :rows="3" clearable size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="涓嶇鍚堟儏鍐垫暣鏀规�讳綋璺熻繘纭璁板綍" prop="followRecord">
+              <el-input v-model="form.followRecord"
+                :disabled="operationType === 'examine' || operationType === 'ratify'" :rows="3" clearable size="small"
+                type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鏈姤鍛婂彂鏀捐寖鍥�" prop="reportScope">
+              <el-input v-model="form.reportScope" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                :rows="3" clearable size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col v-if="operationType === 'ratify'" :span="24">
+            <el-form-item label="璐ㄩ噺璐熻矗浜烘剰瑙�" prop="qualityRemark">
+              <el-input v-model="form.qualityRemark" :rows="3" clearable size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button v-if="operationType === 'examine'" :loading="loading" @click="examine(0)">涓嶉�氳繃</el-button>
+        <el-button v-if="operationType === 'examine'" :loading="loading" type="primary" @click="examine(1)">閫�
+          杩�</el-button>
+        <el-button v-if="operationType === 'ratify'" :loading="loading" @click="handleApproval(0)">涓嶆壒鍑�</el-button>
+        <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="handleApproval(1)">鎵�
+          鍑�</el-button>
+        <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" @click="closeImplementDia">鍙�
+          娑�</el-button>
+        <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" :loading="loading" type="primary"
+          @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="examineDialog" title="瀹℃牳" width="30%" @close="examineDialog = false">
+      <span>
+        瀹℃牳澶囨敞锛�
+        <el-input v-model="examineRemark" type="textarea"></el-input>
+      </span>
+      <span slot="footer" class="dialog-footer">
+        <el-button :loading="examineLoading" @click="examineDialog = false">鍙� 娑�</el-button>
+        <el-button :loading="examineLoading" type="primary" @click="handleExamine(0)">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="approvalDialog" title="鎵瑰噯" width="30%" @close="approvalDialog = false">
+      <span>
+        鎵瑰噯澶囨敞锛�
+        <el-input v-model="qualityRemark" type="textarea"></el-input>
+      </span>
+      <span slot="footer" class="dialog-footer">
+        <el-button :loading="approvalLoading" @click="approvalDialog = false">鍙� 娑�</el-button>
+        <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getInternalReportOne,
+  addInternalReport,
+  updateInternalReport,
+  examineInternalReport,
+  qualityInternalReport,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+  name: 'auditReportDia',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        purposes: '',
+        basis: '',
+        reviewDate: '',
+        method: '',
+        scope: '',
+        responsible: '',
+        leader: '',
+        auditor: '',
+        division: '',
+        overview: '',
+        conclusion: '',
+        suggest: '',
+        actionDate: '',
+        followUser: '',
+        followRecord: '',
+        reportScope: '',
+        qualityRemark: '',
+      },
+      rules: {
+        purposes: [{ required: true, message: '璇峰~鍐欏鏍哥洰鐨�', trigger: 'blur' }],
+        basis: [{ required: true, message: '璇峰~鍐欏鏍镐緷鎹�', trigger: 'blur' }],
+        reviewDate: [{ required: true, message: '璇峰~鍐欏鏍告棩鏈�', trigger: 'change' }],
+        method: [{ required: true, message: '璇峰~鍐欏鏍告柟娉�', trigger: 'blur' }],
+        scope: [{ required: true, message: '璇峰~鍐欏鏍歌寖鍥�', trigger: 'blur' }],
+        responsible: [{ required: true, message: '璇峰~鍐欏鏍歌矗浠昏��', trigger: 'blur' }],
+        leader: [{ required: true, message: '璇峰~鍐欏鏍哥粍闀�', trigger: 'blur' }],
+        auditor: [{ required: true, message: '璇峰~鍐欏鏍稿憳', trigger: 'blur' }],
+        division: [{ required: true, message: '璇峰~鍐欏鏍哥粍鍒嗗伐鎯呭喌', trigger: 'blur' }],
+        overview: [{ required: true, message: '璇峰~鍐欏鏍告鍐�', trigger: 'blur' }],
+        conclusion: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+        suggest: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+        actionDate: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+        followUser: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+        followRecord: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+        reportScope: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+        qualityRemark: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+      },
+      operationType: '',
+      approvalDialog: false,
+      approvalLoading: false,
+      examineDialog: false,
+      examineLoading: false,
+      qualityRemark: '',
+      examineRemark: '',
+    };
+  },
+  mounted() {
+
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia(type, row) {
+      this.formDia = true
+      this.operationType = type
+      if (type !== 'add') {
+        this.searchInfo(row)
+      }
+    },
+    // 鏌ヨ璇︽儏
+    searchInfo(row) {
+      this.diaLoading = true
+      getInternalReportOne({ reportId: row.reportId }).then(res => {
+        this.diaLoading = false
+        if (res.code === 201) return
+        this.form = res.data
+      }).catch(err => {
+        console.log(err)
+        this.diaLoading = false
+      })
+    },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.loading = true
+          const internalReport = this.HaveJson(this.form)
+          if (this.operationType === 'add') {
+            addInternalReport(internalReport).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeImplementDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          } else if (this.operationType === 'edit') {
+            updateInternalReport(internalReport).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeImplementDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 瀹℃牳娴佺▼
+    examine(examineStatus) {
+      if (examineStatus === 0) {
+        this.examineDialog = true
+      } else {
+        this.handleExamine(examineStatus)
+      }
+    },
+    handleExamine(examineStatus) {
+      this.examineLoading = true
+      const internalReport = this.HaveJson(this.form)
+      internalReport.examineStatus = examineStatus
+      examineInternalReport(internalReport).then(res => {
+        if (res.code === 200) {
+          this.$message.success('鎻愪氦鎴愬姛锛�');
+          this.approvalDialog = false
+          this.closeImplementDia(this.departId);
+        }
+        this.examineLoading = false
+      }).catch(() => {
+        this.examineLoading = false
+      })
+    },
+    // 鎻愪氦瀹℃牳淇℃伅
+    handleApproval(qualityStatus) {
+      this.approvalLoading = true
+      const internalReport = this.HaveJson(this.form)
+      internalReport.qualityStatus = qualityStatus
+      qualityInternalReport(internalReport).then(res => {
+        if (res.code === 200) {
+          this.$message.success('鎻愪氦鎴愬姛锛�');
+          this.approvalDialog = false
+          this.closeImplementDia(this.departId);
+        }
+        this.approvalLoading = false
+      }).catch(() => {
+        this.approvalLoading = false
+      })
+    },
+    closeImplementDia() {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeImplementDia')
+    },
+  }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+  margin: 6vh auto 50px !important;
+}
+
+>>>.el-dialog__body {
+  max-height: 42em;
+  overflow-y: auto;
+}
+
+>>>.is-required {
+  margin-bottom: 6px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveAction.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveAction.vue
new file mode 100644
index 0000000..86acfd3
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveAction.vue
@@ -0,0 +1,182 @@
+<template>
+  <div>
+    <div class="search-background">
+      <span class="search-group">
+        <span style="width: 200px">涓嶅悎鏍兼弿杩帮細</span>
+        <el-input v-model="searchForm.raiseResult" clearable size="small"></el-input>
+        <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+        <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+      </span>
+      <span class="search-group">
+        <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+      </span>
+    </div>
+    <div class="table">
+      <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+        :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+      </limsTable>
+    </div>
+    <corrective-action-d-ia v-if="correctiveActionDIa" ref="correctiveActionDIa"
+      @closeRectifyDia="closeRectifyDia"></corrective-action-d-ia>
+    <view-test-record v-if="viewTestRecordDialog" ref="viewTestRecordDialog"></view-test-record>
+  </div>
+</template>
+
+<script>
+import TableCard from '@/components/TableCard/index.vue';
+import limsTable from "@/components/Table/lims-table.vue";
+import CorrectiveActionDIa from './correctiveActionDIa.vue';
+import ViewTestRecord from './ViewTestRecord.vue';
+import {
+  pageInternalCorrect,
+  exportInternalCorrect,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+
+export default {
+  name: 'correctiveAction',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { CorrectiveActionDIa, limsTable, TableCard, ViewTestRecord },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        raiseResult: '',
+      },
+      tableColumn: [
+        {
+          label: '涓嶅悎鏍兼垨鍋忕浜嬪疄鐨勬弿杩�',
+          prop: 'raiseResult',
+          minWidth: '100'
+        },
+        {
+          label: '鍘熷洜鍒嗘瀽',
+          prop: 'causeResult',
+          minWidth: '100'
+        },
+        {
+          label: '绾犳鎺柦',
+          prop: 'correctResult',
+          minWidth: '100'
+        },
+        {
+          label: '瀹炴柦楠岃瘉缁撴灉',
+          prop: 'validationResult',
+          minWidth: '100'
+        },
+        {
+          dataType: 'action',
+          minWidth: '220',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '瀵煎嚭',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              }
+            },
+            {
+              name: '绾犳',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('rectify', row);
+              },
+            },
+            {
+              name: '鏌ョ湅闄勪欢',
+              type: 'text',
+              clickFun: (row) => {
+                this.viewFiles(row);
+              },
+            },
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+        total: 0,
+      },
+      correctiveActionDIa: false,
+      viewTestRecordDialog: false,
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      const entity = {
+        raiseResult: this.searchForm.raiseResult,
+      }
+      const page = this.page
+      this.tableLoading = true
+      pageInternalCorrect({ ...entity, ...page }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.tableLoading = false
+      })
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.raiseResult = '';
+      this.searchList()
+    },
+    // 鏌ョ湅闄勪欢
+    viewFiles(row) {
+      this.viewTestRecordDialog = true
+      this.$nextTick(() => {
+        this.$refs.viewTestRecordDialog.openDia(row)
+      })
+    },
+    openFormDia(type, row) {
+      this.correctiveActionDIa = true
+      this.$nextTick(() => {
+        this.$refs.correctiveActionDIa.openDia(type, row)
+      })
+    },
+    // 瀵煎嚭
+    handleDown(row) {
+      exportInternalCorrect({ correctId: row.correctId }).then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '鍐呭绾犳鎺柦' + '.docx');
+      })
+    },
+    closeRectifyDia() {
+      this.correctiveActionDIa = false
+      this.searchList()
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+  }
+};
+</script>
+
+<style scoped>
+.search-background {
+  width: 100%;
+  height: 60px;
+  line-height: 60px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveActionDIa.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveActionDIa.vue
new file mode 100644
index 0000000..267fa52
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveActionDIa.vue
@@ -0,0 +1,409 @@
+<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(1)"></el-step>
+        <el-step title="绾犳鎺柦" @click.native="setStep(2)"></el-step>
+        <el-step title="瀹炴柦楠岃瘉缁撴灉" @click.native="setStep(3)"></el-step>
+      </el-steps>
+      <div>
+        <table border="1" cellspacing="10" class="tables">
+          <tr v-if="showStep === 0">
+            <td class="td-title">
+              <p><span class="required-span">* </span>涓嶅悎鏍兼垨鍋忕浜嬪疄鐨勬弿杩帮細</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.raiseResult" :rows="4"
+                placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+              </el-input>
+              <span v-if="showStep === 0 && 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="showStep === 0 && 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 v-if="showStep === 0 && currentStep !== 0">
+            <td class="td-title">
+              <p>鏃ユ湡锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              {{ form.raiseTime }}
+            </td>
+          </tr>
+          <tr v-if="showStep === 1">
+            <td class="td-title">
+              <p><span class="required-span">* </span>鍘熷洜鍒嗘瀽锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="showStep === 1 && currentStep === 1" v-model="form.causeResult" :rows="5"
+                placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+              </el-input>
+              <span v-if="showStep === 1 && currentStep !== 1" class="td-info1"> {{ form.causeResult }}</span>
+            </td>
+          </tr>
+          <tr v-if="showStep === 1 && currentStep !== 1">
+            <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 v-if="showStep === 1 && currentStep !== 1">
+            <td class="td-title">
+              <p>鍘熷洜鍒嗘瀽鏃ユ湡锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              {{ form.causeTime }}
+            </td>
+          </tr>
+          <tr v-if="showStep === 1">
+            <td v-if="currentStep === 1" class="td-title">
+              <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p>
+            </td>
+            <td v-if="currentStep === 1" 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 v-if="showStep === 2">
+            <td class="td-title">
+              <p><span class="required-span">* </span>绾犳鎺柦锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.correctResult" :rows="5"
+                placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+              </el-input>
+              <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.correctResult }}</span>
+            </td>
+          </tr>
+          <tr v-if="showStep === 2">
+            <td class="td-title">
+              <p>鎻愬嚭瑕佹眰閮ㄩ棬纭锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.raiseDepartmentAffirm" :rows="5"
+                placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+              </el-input>
+              <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.raiseDepartmentAffirm }}</span>
+            </td>
+          </tr>
+          <tr v-if="showStep === 2 && currentStep !== 2">
+            <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 v-if="showStep === 2 && currentStep !== 2">
+            <td class="td-title">
+              <p>绾犳鏃ユ湡锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              {{ form.correctTime }}
+            </td>
+          </tr>
+          <tr v-if="showStep === 2">
+            <td v-if="currentStep === 2" class="td-title">
+              <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p>
+            </td>
+            <td v-if="currentStep === 2" class="td-info" colspan="3">
+              <el-select v-model="form.validationUserId" 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="showStep === 3">
+            <td class="td-title">
+              <p><span class="required-span">* </span>瀹炴柦楠岃瘉缁撴灉锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              <el-input v-if="showStep === 3 && currentStep === 3" v-model="form.validationResult" :rows="5"
+                placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+              </el-input>
+              <span v-if="showStep === 3 && currentStep !== 3" class="td-info1"> {{ form.validationResult }}</span>
+            </td>
+          </tr>
+          <tr v-if="showStep === 3 && currentStep !== 3">
+            <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 v-if="showStep === 3 && currentStep !== 3">
+            <td class="td-title">
+              <p>楠岃瘉鏃ユ湡锛�</p>
+            </td>
+            <td class="td-info" colspan="3">
+              {{ form.validationTime }}
+            </td>
+          </tr>
+        </table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeRectifyDia">鍙� 娑�</el-button>
+        <el-button v-if="currentStep !== 4" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getInternalCorrect,
+  addInternalCorrect,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+import {
+  selectUserCondition,
+} from "@/api/business/inspectionTask.js";
+export default {
+  name: 'correctiveActionDIa',
+  // 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: '',
+        validationUserId: '',
+        validationResult: '',
+        validationUserName: '',
+        validationDepartment: '',
+        validationTime: '',
+      },
+      editLoad: false,
+      personList: [],
+      supervisedUserList: [],
+    };
+  },
+  mounted() {
+
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    openDia(type, row) {
+      this.formDia = true
+      if (type !== 'add') {
+        this.searchInfo(row)
+        this.form.superviseDetailsId = row.superviseDetailsId
+      }
+      this.getAuthorizedPerson() // 鑾峰彇浜哄憳鍒楄〃
+      this.getSupervisedUserList() // 鑾峰彇褰撳墠閮ㄩ棬浜哄憳
+    },
+    // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+    searchInfo(row) {
+      this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId
+      getInternalCorrect({ correctId: row.correctId }).then(res => {
+        if (res.code === 201) return
+        if (res.data.superviseDetailsCorrectId === null) {
+          this.showStep = 0
+          this.currentStep = 0
+        } else {
+          this.form = res.data
+          if (res.data.isFinish === 0) {
+            if (res.data.causeUserId) {
+              this.showStep = 1
+              this.currentStep = 1
+            }
+            if (res.data.correctUserId) {
+              this.showStep = 2
+              this.currentStep = 2
+            }
+            if (res.data.validationUserId) {
+              this.showStep = 3
+              this.currentStep = 3
+            }
+          } else {
+            this.currentStep = 4
+            this.showStep = 3
+          }
+        }
+      }).catch(err => {
+        console.log('err---', err);
+      })
+    },
+    // 鎻愪氦
+    handleEdit() {
+      if (this.currentStep === 0) {
+        if (!this.form.raiseResult) {
+          this.$message.warning('璇峰~鍐欎笉鍚堟牸鎻忚堪')
+          return
+        }
+        if (!this.form.causeUserId) {
+          this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉')
+          return
+        }
+      } else if (this.currentStep === 1) {
+        if (!this.form.causeResult) {
+          this.$message.warning('璇峰~鍐欏師鍥犲垎鏋�')
+          return
+        }
+        if (!this.form.correctUserId) {
+          this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉')
+          return
+        }
+      } else if (this.currentStep === 2) {
+        if (!this.form.correctResult) {
+          this.$message.warning('璇峰~鍐欑籂姝f帾鏂�')
+          return
+        }
+        if (!this.form.validationUserId) {
+          this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉')
+          return
+        }
+      } else if (this.currentStep === 3) {
+        if (!this.form.validationResult) {
+          this.$message.warning('璇峰~鍐欏疄鏂介獙璇佺粨鏋�')
+          return
+        }
+      }
+      this.editLoad = true
+      this.form.supervisedTime = ''
+      this.form.flowType = this.currentStep
+      addInternalCorrect(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().then(res => {
+        let data = []
+        res.data.forEach(a => {
+          data.push({
+            label: a.name,
+            value: a.id
+          })
+        })
+        this.personList = data
+      })
+    },
+    getSupervisedUserList() {
+      selectUserCondition({ type: 2 }).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: 10vh 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/systemManagement/internalAuditManagement/components/implementPlanDia.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/implementPlanDia.vue
new file mode 100644
index 0000000..5a94ebe
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/implementPlanDia.vue
@@ -0,0 +1,307 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+      :visible.sync="formDia" title="鍐呴儴瀹℃牳瀹炴柦璁″垝" width="80%" @close="closeImplementDia">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto">
+        <el-col :span="24">
+          <el-form-item label="瀹℃牳鐩殑" prop="purposes">
+            <el-input v-model="form.purposes" :disabled="operationType === 'ratify'" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="瀹℃牳鎬ц川" prop="nature">
+            <el-input v-model="form.nature" :disabled="operationType === 'ratify'" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="瀹℃牳鑼冨洿" prop="scope">
+            <el-input v-model="form.scope" :disabled="operationType === 'ratify'" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="瀹℃牳渚濇嵁" prop="basis">
+            <el-input v-model="form.basis" :disabled="operationType === 'ratify'" clearable size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瀹℃牳缁勯暱" prop="teamLeader">
+            <el-input v-model="form.teamLeader" :disabled="operationType === 'ratify'" clearable
+              size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鍐呭鍛�" prop="internalAuditor">
+            <el-input v-model="form.internalAuditor" :disabled="operationType === 'ratify'" clearable
+              size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瀹℃牳鏃ユ湡" prop="reviewDate">
+            <el-date-picker v-model="form.reviewDate" :disabled="operationType === 'ratify'" clearable
+              format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date"
+              value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瀹℃牳鏂规硶" prop="auditMethod">
+            <el-input v-model="form.auditMethod" :disabled="operationType === 'ratify'" clearable
+              size="small"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="棣栨浼氳鏃堕棿" prop="firstMeetingTime">
+            <el-date-picker v-model="form.firstMeetingTime" :disabled="operationType === 'ratify'" clearable
+              format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date"
+              value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="鏈浼氳鏃堕棿" prop="lastMeetingTime">
+            <el-date-picker v-model="form.lastMeetingTime" :disabled="operationType === 'ratify'" clearable
+              format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date"
+              value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瀹℃牳鎶ュ憡鎻愪氦鏃ユ湡" prop="submitTime">
+            <el-date-picker v-model="form.submitTime" :disabled="operationType === 'ratify'" clearable
+              format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date"
+              value-format="yyyy-MM-dd">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="瀹℃牳鎶ュ憡鍙戞斁鑼冨洿" prop="submitScope">
+            <el-input v-model="form.submitScope" :disabled="operationType === 'ratify'" clearable
+              size="small"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-form>
+      <div v-if="operationType !== 'ratify'" style="text-align: right;margin-bottom: 10px">
+        <el-button size="small" type="primary" @click="addRow">娣诲姞</el-button>
+        <el-button size="small" type="danger" @click="clearTable">娓呯┖</el-button>
+      </div>
+      <el-table :data="implementDetailList" border height="300" style="width: 100%">
+        <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+        <el-table-column header-align="center" label="鏃堕棿" prop="implement">
+          <template slot-scope="{row}">
+            <el-input v-model="row.implement" :disabled="operationType === 'ratify'" size="small" />
+          </template>
+        </el-table-column>
+        <el-table-column header-align="center" label="鍙楀鏍搁儴闂�" prop="department">
+          <template slot-scope="{row}">
+            <el-input v-model="row.department" :disabled="operationType === 'ratify'" size="small" />
+          </template>
+        </el-table-column>
+        <el-table-column header-align="center" label="璐d换浜�" prop="responsible">
+          <template slot-scope="{row}">
+            <el-input v-model="row.responsible" :disabled="operationType === 'ratify'" size="small" />
+          </template>
+        </el-table-column>
+        <el-table-column header-align="center" label="瀹℃牳鍛�" prop="auditor" width="180">
+          <template slot-scope="{row}">
+            <el-input v-model="row.auditor" :disabled="operationType === 'ratify'" size="small" />
+          </template>
+        </el-table-column>
+        <el-table-column header-align="center" label="瀹℃牳鍐呭" prop="reviewContent" width="180">
+          <template slot-scope="{row}">
+            <el-input v-model="row.reviewContent" :disabled="operationType === 'ratify'" size="small" />
+          </template>
+        </el-table-column>
+      </el-table>
+      <span slot="footer" class="dialog-footer">
+        <el-button v-if="operationType === 'ratify'" :loading="loading" @click="ratify(0)">涓嶆壒鍑�</el-button>
+        <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="ratify(1)">鎵�
+          鍑�</el-button>
+        <el-button v-if="operationType !== 'ratify'" @click="closeImplementDia">鍙� 娑�</el-button>
+        <el-button v-if="operationType !== 'ratify'" :loading="loading" type="primary" @click="handleEdit">鎻�
+          浜�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="approvalDialog" title="鎵瑰噯" width="30%" @close="approvalDialog = false">
+      <span>
+        鎵瑰噯澶囨敞锛�
+        <el-input v-model="ratifyRemark" type="textarea"></el-input>
+      </span>
+      <span slot="footer" class="dialog-footer">
+        <el-button :loading="approvalLoading" @click="approvalDialog = false">鍙� 娑�</el-button>
+        <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getInternalImplementOne,
+  addInternalImplement,
+  updateInternalImplement,
+  ratifyInternalImplement,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+  name: 'implementPlanDia',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        purposes: '',
+        nature: '',
+        scope: '',
+        basis: '',
+        teamLeader: '',
+        internalAuditor: '',
+        reviewDate: '',
+        auditMethod: '',
+        firstMeetingTime: '',
+        lastMeetingTime: '',
+        submitTime: '',
+        submitScope: '',
+      },
+      rules: {
+        purposes: [{ required: true, message: '璇峰~鍐欏鏍哥洰鐨�', trigger: 'blur' }],
+        nature: [{ required: true, message: '璇峰~鍐欏鏍告�ц川', trigger: 'blur' }],
+        scope: [{ required: true, message: '璇峰~鍐欏鏍歌寖鍥�', trigger: 'blur' }],
+        basis: [{ required: true, message: '璇峰~鍐欏鏍镐緷鎹�', trigger: 'blur' }],
+        teamLeader: [{ required: true, message: '璇峰~鍐欏鏍哥粍闀�', trigger: 'blur' }],
+        internalAuditor: [{ required: true, message: '璇峰~鍐欏唴瀹″憳', trigger: 'blur' }],
+        reviewDate: [{ required: true, message: '璇峰~鍐欏鏍告椂闂�', trigger: 'blur' }],
+        auditMethod: [{ required: true, message: '璇峰~鍐欏鏍告柟娉�', trigger: 'blur' }],
+        firstMeetingTime: [{ required: true, message: '璇峰~鍐欓娆′細璁椂闂�', trigger: 'blur' }],
+        lastMeetingTime: [{ required: true, message: '璇峰~鍐欐湯娆′細璁椂闂�', trigger: 'blur' }],
+        submitTime: [{ required: true, message: '璇峰~鍐欏鏍告姤鍛婃彁浜ゆ棩鏈�', trigger: 'blur' }],
+        submitScope: [{ required: true, message: '璇峰~鍐欏鏍告姤鍛婂彂鏀捐寖鍥�', trigger: 'blur' }],
+      },
+      implementDetailList: [],
+      operationType: '',
+      approvalDialog: false,
+      approvalLoading: false,
+      ratifyRemark: '',
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia(type, row) {
+      this.formDia = true
+      this.operationType = type
+      if (type !== 'add') {
+        this.searchInfo(row)
+      }
+    },
+    // 鏌ヨ璇︽儏
+    searchInfo(row) {
+      this.diaLoading = true
+      getInternalImplementOne({ implementId: row.implementId }).then(res => {
+        this.diaLoading = false
+        if (res.code === 201) return
+        this.form = res.data
+        this.implementDetailList = this.form.implementDetailList
+      }).catch(err => {
+        console.log(err)
+        this.diaLoading = false
+      })
+    },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          if (this.implementDetailList.length === 0) {
+            this.$message.warning('璇锋坊鍔犺〃鏍兼暟鎹�')
+            return
+          }
+          this.loading = true
+          const internalImplementDto = this.HaveJson(this.form)
+          internalImplementDto.implementDetailList = this.HaveJson(this.implementDetailList)
+          if (this.operationType === 'add') {
+            addInternalImplement(internalImplementDto).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeImplementDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          } else if (this.operationType === 'edit') {
+            updateInternalImplement(internalImplementDto).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeImplementDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    ratify(ratifyStatus) {
+      // 涓嶆壒鍑嗛渶瑕佸~鍐欐壒鍑嗗唴瀹�
+      if (ratifyStatus === 0) {
+        this.approvalDialog = true
+      } else {
+        this.handleApproval(ratifyStatus)
+      }
+    },
+    // 鎻愪氦鎵瑰噯淇℃伅
+    handleApproval(ratifyStatus) {
+      this.approvalLoading = true
+      const internalImplementDto = this.HaveJson(this.form)
+      internalImplementDto.ratifyStatus = ratifyStatus
+      internalImplementDto.ratifyRemark = ratifyStatus === 0 ? this.ratifyRemark : ''
+      ratifyInternalImplement(internalImplementDto).then(res => {
+        if (res.code === 200) {
+          this.$message.success('鎻愪氦鎴愬姛锛�');
+          this.approvalDialog = false
+          this.closeImplementDia(this.departId);
+        }
+        this.approvalLoading = false
+      }).catch(() => {
+        this.approvalLoading = false
+      })
+    },
+    // 澧炲姞琛ㄦ牸琛屾暟鎹�
+    addRow() {
+      this.implementDetailList.push({
+        implement: '',
+        department: '',
+        responsible: '',
+        auditor: '',
+        reviewContent: '',
+      })
+    },
+    // 娓呯┖琛ㄦ牸鏁版嵁
+    clearTable() {
+      this.implementDetailList = []
+    },
+    closeImplementDia() {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeImplementDia')
+    },
+  }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+  margin: 10vh auto 50px !important;
+}
+
+>>>.el-dialog__body {
+  max-height: 38em;
+  overflow-y: auto;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/implementationPlan.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/implementationPlan.vue
new file mode 100644
index 0000000..92f721f
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/implementationPlan.vue
@@ -0,0 +1,292 @@
+<template>
+  <div>
+    <div class="search-background">
+      <span class="search-group">
+        <span style="width: 160px">瀹℃牳鐩殑锛�</span>
+        <el-input v-model="searchForm.purposes" clearable size="small"></el-input>
+        <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+        <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+      </span>
+      <span class="search-group">
+        <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+      </span>
+    </div>
+    <div class="table">
+      <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+        :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" @pagination="pagination" :page="page">
+      </limsTable>
+    </div>
+    <implement-plan-dia v-if="implementPlanDia" ref="implementPlanDia"
+      @closeImplementDia="closeImplementDia"></implement-plan-dia>
+  </div>
+</template>
+
+<script>
+import {
+  pageInternalImplement,
+  delInternalImplement,
+  exportInternalImplement,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+import limsTable from "@/components/Table/lims-table.vue";
+import ImplementPlanDia from './implementPlanDia.vue';
+
+export default {
+  name: 'implementationPlan',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { ImplementPlanDia, limsTable },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        purposes: '',
+      },
+      tableColumn: [
+        {
+          label: '瀹℃牳鐩殑',
+          prop: 'purposes',
+          minWidth: '100'
+        },
+        {
+          label: '瀹℃牳鎬ц川',
+          prop: 'nature',
+          minWidth: '100'
+        },
+        {
+          label: '瀹℃牳鑼冨洿',
+          prop: 'scope',
+          minWidth: '100'
+        },
+        {
+          label: '瀹℃牳渚濇嵁',
+          prop: 'basis',
+          minWidth: '100'
+        },
+        {
+          label: '瀹℃牳缁勯暱',
+          prop: 'teamLeader',
+          minWidth: '100'
+        },
+        {
+          label: '鍐呭鍛�',
+          prop: 'internalAuditor',
+          minWidth: '100',
+        },
+        {
+          label: '瀹℃牳鏃ユ湡',
+          prop: 'reviewDate',
+          minWidth: '100',
+        },
+        {
+          label: '瀹℃牳鏂规硶',
+          prop: 'auditMethod',
+          minWidth: '100',
+        },
+        {
+          label: '棣栨浼氳鏃堕棿',
+          prop: 'firstMeetingTime',
+          minWidth: '100',
+        },
+        {
+          label: '鏈浼氳鏃堕棿',
+          prop: 'lastMeetingTime',
+          minWidth: '100',
+        },
+        {
+          label: '瀹℃牳鎶ュ憡鎻愪氦鏃ユ湡',
+          prop: 'submitTime',
+          minWidth: '100',
+        },
+        {
+          label: '瀹℃牳鎶ュ憡鍙戞斁鑼冨洿',
+          prop: 'submitScope',
+          minWidth: '100',
+        }, {
+          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'
+        },
+        {
+          dataType: 'action',
+          minWidth: '220',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '瀵煎嚭',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              }
+            },
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+              disabled: (row) => {
+                if (row.ratifyStatus === 1) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '鎵瑰噯',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('ratify', 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
+                }
+              },
+            }
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+        total: 0,
+      },
+      implementPlanDia: false,
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      const entity = this.searchForm
+      const page = this.page
+      this.tableLoading = true
+      pageInternalImplement({ ...entity, ...page }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.tableLoading = false
+      })
+    },
+    // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+    openFormDia(type, row) {
+      this.implementPlanDia = true
+      this.$nextTick(() => {
+        this.$refs.implementPlanDia.openDia(type, row)
+      })
+    },
+    closeImplementDia() {
+      this.implementPlanDia = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.purposes = '';
+      this.searchList()
+    },
+    // 鍒犻櫎
+    delPlan(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        delInternalImplement({ implementId: row.implementId }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 瀵煎嚭
+    handleDown(row) {
+      exportInternalImplement({ implementId: row.implementId }).then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '鍐呭瀹炴柦璁″垝' + '.docx');
+      })
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+  }
+};
+</script>
+
+<style scoped>
+.search-background {
+  width: 100%;
+  height: 60px;
+  line-height: 60px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlan.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlan.vue
new file mode 100644
index 0000000..77b898f
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlan.vue
@@ -0,0 +1,314 @@
+<template>
+  <div>
+    <div class="search-background">
+      <span class="search-group">
+        <span style="width: 160px">鍐呭鐩殑锛�</span>
+        <el-input v-model="searchForm.purpose" clearable size="small"></el-input>
+        <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+        <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+      </span>
+      <span class="search-group">
+        <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+      </span>
+    </div>
+    <div class="table">
+      <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+        :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" @pagination="pagination" :page="page">
+      </limsTable>
+    </div>
+    <year-plan-dia v-if="yearPlanDia" ref="yearPlanDia" @closeYearDia="closeYearDia"></year-plan-dia>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import YearPlanDia from './yearPlanDia.vue';
+import {
+  pageInternalPlan,
+  delInternalPlan,
+  exportInternalPlan,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+
+export default {
+  name: 'yearPlan',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { YearPlanDia, limsTable },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      searchForm: {
+        purpose: '',
+      },
+      tableColumn: [
+        {
+          label: '鍐呭鐩殑',
+          prop: 'purpose',
+          minWidth: '100'
+        },
+        {
+          label: '鍐呭鑼冨洿',
+          prop: 'scope',
+          minWidth: '100'
+        },
+        {
+          label: '鍐呭渚濇嵁',
+          prop: 'basis',
+          minWidth: '100'
+        },
+        {
+          label: '缁勯暱',
+          prop: 'leader',
+          minWidth: '100'
+        },
+        {
+          label: '缁勫憳',
+          prop: 'crew',
+          minWidth: '100'
+        },
+        {
+          dataType: 'tag',
+          label: '瀹℃牳鐘舵��',
+          prop: 'examineStatus',
+          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: 'examineRemark',
+          minWidth: '100'
+        }, {
+          label: '瀹℃牳浜�',
+          prop: 'examineUserName',
+          minWidth: '100'
+        }, {
+          label: '瀹℃牳鏃ユ湡',
+          prop: 'examineTime',
+          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',
+          fixed: 'right',
+          minWidth: '220',
+          label: '鎿嶄綔',
+          operation: [
+            {
+              name: '瀵煎嚭',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row)
+              }
+            },
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('edit', row);
+              },
+              disabled: (row) => {
+                if (row.ratifyStatus === 1) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '瀹℃牳',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('examine', row);
+              },
+              disabled: (row) => {
+                if (row.examineStatus === 1) {
+                  return true
+                } else {
+                  return false
+                }
+              },
+            },
+            {
+              name: '鎵瑰噯',
+              type: 'text',
+              clickFun: (row) => {
+                this.openFormDia('ratify', row);
+              },
+              disabled: (row) => {
+                if (row.ratifyStatus === 1 || row.examineStatus === 0 || row.examineStatus === null) {
+                  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
+                }
+              },
+            }
+          ]
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+        total: 0,
+      },
+      yearPlanDia: false,
+    };
+  },
+  mounted() {
+    this.searchList()
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鏌ヨ鍒楄〃
+    searchList() {
+      const entity = this.searchForm
+      const page = this.page
+      this.tableLoading = true
+      pageInternalPlan({ ...entity, ...page }).then(res => {
+        this.tableLoading = false
+        if (res.code === 201) return
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        console.log('err---', err);
+        this.tableLoading = false
+      })
+    },
+    // 鍒犻櫎
+    delPlan(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.tableLoading = true
+        delInternalPlan({ planId: row.planId }).then(res => {
+          this.tableLoading = false
+          if (res.code === 201) return
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.searchList()
+        }).catch(err => {
+          this.tableLoading = false
+          console.log('err---', err);
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+    openFormDia(type, row) {
+      this.yearPlanDia = true
+      this.$nextTick(() => {
+        this.$refs.yearPlanDia.openDia(type, row)
+      })
+    },
+    // 瀵煎嚭
+    handleDown(row) {
+      exportInternalPlan({ planId: row.planId }).then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '鍐呭骞村害璁″垝' + '.docx');
+      })
+    },
+    closeYearDia() {
+      this.yearPlanDia = false
+      this.searchList()
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm() {
+      this.searchForm.purpose = '';
+      this.searchList()
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.searchList();
+    },
+  }
+};
+</script>
+
+<style scoped>
+.search-background {
+  width: 100%;
+  height: 60px;
+  line-height: 60px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search-group {
+  display: flex;
+  align-items: center;
+  margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlanDia.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlanDia.vue
new file mode 100644
index 0000000..0c1eba1
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlanDia.vue
@@ -0,0 +1,342 @@
+<template>
+  <div>
+    <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+      :visible.sync="formDia" title="鍐呴儴瀹℃牳骞村害璁″垝" width="1000px" @close="closeYearDia">
+      <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto">
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="鍐呭鐩殑" prop="purpose">
+              <el-input v-model="form.purpose" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                :rows="3" clearable size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鍐呭鑼冨洿" prop="scope">
+              <el-input v-model="form.scope" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                :rows="3" clearable size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鍐呭渚濇嵁" prop="basis">
+              <el-input v-model="form.basis" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="缁勯暱" prop="leader">
+              <el-input v-model="form.leader" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="缁勫憳" prop="crew">
+              <el-input v-model="form.crew" :disabled="operationType === 'examine' || operationType === 'ratify'"
+                clearable size="small"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <table border="1" cellspacing="10" class="table">
+        <tr>
+          <td class="div-with-line">
+            <span style="float: left;">閮ㄩ棬</span>
+            <span style="float: right;">鏈堜唤</span>
+          </td>
+          <th v-for="(item, index) in dic1" :key="index">{{ item }}</th>
+        </tr>
+        <tr v-for="(item, index) in planDetailList" :key="index">
+          <td>{{ item.department }}</td>
+          <th>
+            <el-input v-model="item.january" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.february" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.march" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.april" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.may" :disabled="operationType === 'examine' || operationType === 'ratify'" clearable
+              size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.june" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.july" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.august" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.september" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.october" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.november" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+          <th>
+            <el-input v-model="item.december" :disabled="operationType === 'examine' || operationType === 'ratify'"
+              clearable size="small"></el-input>
+          </th>
+        </tr>
+      </table>
+      <span slot="footer" class="dialog-footer">
+        <el-button v-if="operationType === 'examine'" :loading="loading" @click="examine(0)">涓嶉�氳繃</el-button>
+        <el-button v-if="operationType === 'examine'" :loading="loading" type="primary" @click="examine(1)">閫�
+          杩�</el-button>
+        <el-button v-if="operationType === 'ratify'" :loading="loading" @click="approval(0)">涓嶆壒鍑�</el-button>
+        <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="handleApproval(1)">鎵�
+          鍑�</el-button>
+        <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" @click="closeYearDia">鍙�
+          娑�</el-button>
+        <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" :loading="loading" type="primary"
+          @click="handleEdit">鎻� 浜�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="examineDialog" title="瀹℃牳" width="30%" @close="examineDialog = false">
+      <span>
+        瀹℃牳澶囨敞锛�
+        <el-input v-model="examineRemark" type="textarea"></el-input>
+      </span>
+      <span slot="footer" class="dialog-footer">
+        <el-button :loading="examineLoading" @click="examineDialog = false">鍙� 娑�</el-button>
+        <el-button :loading="examineLoading" type="primary" @click="handleExamine(0)">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="approvalDialog" title="鎵瑰噯" width="30%" @close="approvalDialog = false">
+      <span>
+        鎵瑰噯澶囨敞锛�
+        <el-input v-model="ratifyRemark" type="textarea"></el-input>
+      </span>
+      <span slot="footer" class="dialog-footer">
+        <el-button :loading="approvalLoading" @click="approvalDialog = false">鍙� 娑�</el-button>
+        <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getInternalPlanOne,
+  addInternalPlan,
+  updateInternalPlan,
+  examineInternalPlan,
+  ratifyInternalPlan,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+  name: 'yearPlanDia',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      formDia: false,
+      diaLoading: false,
+      loading: false,
+      form: {
+        purpose: '',
+        scope: '',
+        basis: '',
+        leader: '',
+        crew: '',
+      },
+      rules: {
+        purpose: [{ required: true, message: '璇峰~鍐欏唴瀹$洰鐨�', trigger: 'blur' }],
+        scope: [{ required: true, message: '璇峰~鍐欏唴瀹¤寖鍥�', trigger: 'blur' }],
+        basis: [{ required: true, message: '璇峰~鍐欏唴瀹′緷鎹�', trigger: 'blur' }],
+        leader: [{ required: true, message: '璇峰~鍐欑粍闀�', trigger: 'blur' }],
+        crew: [{ required: true, message: '璇峰~鍐欑粍鍛�', trigger: 'blur' }],
+      },
+      operationType: '',
+      approvalDialog: false,
+      approvalLoading: false,
+      examineDialog: false,
+      examineLoading: false,
+      ratifyRemark: '',
+      examineRemark: '',
+      dic1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
+      planDetailList: [{ department: '瑁呭鐢电紗瀹為獙瀹�' }, { department: '閫氫俊浜у搧瀹為獙瀹�' }, { department: '鐢靛姏浜у搧瀹為獙瀹�' }, { department: '鍌ㄨ兘浜у搧瀹為獙瀹�' }, { department: '灏勯绾跨紗瀹為獙瀹�' }],
+    };
+  },
+  mounted() {
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    // 鎵撳紑寮规
+    openDia(type, row) {
+      this.formDia = true
+      this.operationType = type
+      if (type !== 'add') {
+        this.searchInfo(row)
+      }
+    },
+    // 鏌ヨ璇︽儏
+    searchInfo(row) {
+      this.diaLoading = true
+      getInternalPlanOne({ planId: row.planId }).then(res => {
+        this.diaLoading = false
+        if (res.code === 201) return
+        this.form = res.data
+        this.planDetailList = this.form.planDetailList
+      }).catch(err => {
+        console.log(err)
+        this.diaLoading = false
+      })
+    },
+    // 鎻愪氦寮规鏁版嵁
+    handleEdit() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.loading = true
+          const internalPlan = this.HaveJson(this.form)
+          internalPlan.planDetailList = this.HaveJson(this.planDetailList)
+          if (this.operationType === 'add') {
+            addInternalPlan(internalPlan).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeYearDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          } else if (this.operationType === 'edit') {
+            updateInternalPlan(internalPlan).then(res => {
+              this.loading = false
+              if (res.code === 201) return
+              this.$message.success('鎿嶄綔鎴愬姛')
+              this.closeYearDia()
+            }).catch(err => {
+              console.log('err---', err);
+              this.loading = false
+            })
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 瀹℃牳娴佺▼
+    examine(examineStatus) {
+      if (examineStatus === 0) {
+        this.examineDialog = true
+      } else {
+        this.handleExamine(examineStatus)
+      }
+    },
+    handleExamine(examineStatus) {
+      this.examineLoading = true
+      const internalReport = this.HaveJson(this.form)
+      internalReport.examineStatus = examineStatus
+      internalReport.examineRemark = this.examineRemark
+      examineInternalPlan(internalReport).then(res => {
+        if (res.code === 200) {
+          this.$message.success('鎻愪氦鎴愬姛锛�');
+          this.approvalDialog = false
+          this.closeYearDia(this.departId);
+        }
+        this.examineLoading = false
+      }).catch(() => {
+        this.examineLoading = false
+      })
+    },
+    // 鎻愪氦鎵瑰噯淇℃伅
+    approval(ratifyStatus) {
+      if (ratifyStatus === 0) {
+        this.approvalDialog = true
+      } else {
+        this.handleApproval(ratifyStatus)
+      }
+    },
+    handleApproval(ratifyStatus) {
+      this.approvalLoading = true
+      const internalReport = this.HaveJson(this.form)
+      internalReport.ratifyStatus = ratifyStatus
+      internalReport.ratifyRemark = this.ratifyRemark
+      ratifyInternalPlan(internalReport).then(res => {
+        if (res.code === 200) {
+          this.$message.success('鎻愪氦鎴愬姛锛�');
+          this.approvalDialog = false
+          this.closeYearDia(this.departId);
+        }
+        this.approvalLoading = false
+      }).catch(() => {
+        this.approvalLoading = false
+      })
+    },
+    closeYearDia() {
+      this.$refs.form.resetFields();
+      this.formDia = false
+      this.$emit('closeYearDia')
+    },
+  }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+  margin: 6vh auto 50px !important;
+}
+
+>>>.el-dialog__body {
+  max-height: 42em;
+  overflow-y: auto;
+}
+
+>>>.is-required {
+  margin-bottom: 6px;
+}
+
+.table {
+  width: 100%;
+  margin-top: 20px;
+}
+
+.table th {
+  width: 70px;
+}
+
+.table td {
+  width: 70px;
+  height: 70px;
+  text-align: center;
+}
+
+.div-with-line {
+  width: 70px;
+  height: 70px;
+  position: relative;
+  /*overflow: hidden; /* 闅愯棌婧㈠嚭鍐呭 */
+}
+
+.div-with-line::after {
+  content: '';
+  position: absolute;
+  bottom: 0;
+  height: 1px;
+  background-color: #000000;
+  left: 50%;
+  transform: translateX(-50%) rotate(45deg);
+  transform-origin: center 50%;
+  top: 50%;
+  width: 100px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/index.vue b/src/views/CNAS/systemManagement/internalAuditManagement/index.vue
new file mode 100644
index 0000000..4b61b39
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/index.vue
@@ -0,0 +1,57 @@
+<template>
+  <div class="main">
+    <el-tabs v-model="activeName" class="tab-panel" type="border-card">
+      <el-tab-pane label="骞村害璁″垝" name="yearPlan">
+        <year-plan></year-plan>
+      </el-tab-pane>
+      <el-tab-pane label="鍐呴儴瀹炴柦璁″垝" name="implementationPlan">
+        <implementation-plan></implementation-plan>
+      </el-tab-pane>
+      <el-tab-pane label="鍐呭浼氳绛惧埌" name="meetingSignIn">
+        <audit-meeting-sign></audit-meeting-sign>
+      </el-tab-pane>
+      <el-tab-pane label="鍐呭妫�鏌�" name="auditInspection">
+        <audit-inspection></audit-inspection>
+      </el-tab-pane>
+      <el-tab-pane label="绾犳鎺柦" name="correctiveAction">
+        <corrective-action></corrective-action>
+      </el-tab-pane>
+      <el-tab-pane label="鍐呭鎶ュ憡" name="auditReport">
+        <audit-report></audit-report>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import YearPlan from './components/yearPlan.vue';
+import implementationPlan from './components/implementationPlan.vue';
+import AuditInspection from './components/auditInspection.vue';
+import AuditReport from './components/auditReport.vue';
+import AuditMeetingSign from './components/auditMeetingSign.vue';
+import CorrectiveAction from './components/correctiveAction.vue';
+
+export default {
+  name: 'InternalAuditManagement',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { CorrectiveAction, AuditMeetingSign, AuditReport, AuditInspection, YearPlan, implementationPlan },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      activeName: 'yearPlan',
+    };
+  },
+  // 鏂规硶闆嗗悎
+  methods: {}
+};
+</script>
+
+<style scoped>
+.main {
+  padding: 15px 0;
+}
+
+.tab-panel {
+  background: #fff;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/measuresDealRisks/components/hazardIdentificationRiskAssessment.vue b/src/views/CNAS/systemManagement/measuresDealRisks/components/hazardIdentificationRiskAssessment.vue
new file mode 100644
index 0000000..07629ec
--- /dev/null
+++ b/src/views/CNAS/systemManagement/measuresDealRisks/components/hazardIdentificationRiskAssessment.vue
@@ -0,0 +1,332 @@
+<template>
+  <div style="padding: 10px">
+    <div class="header">
+      <span></span>
+      <div style="min-width: 200px">
+        <el-button type="primary" size="small" @click="addFun">鏂� 澧�</el-button>
+        <el-button type="primary" size="small" @click="approvalFun">瀹� 鎵�</el-button>
+        <el-button type="primary" size="small" @click="approveFun">鎵� 鍑�</el-button>
+        <el-upload style="display: inline-block; padding: 0 6px" :headers="uploadHeader" :action="action"
+          :on-error="onError" :show-file-list="false" :on-success="onSuccess">
+          <el-button size="small" type="primary">瀵� 鍏�</el-button>
+        </el-upload>
+        <el-button size="small" @click="openDownloadDia">瀵煎嚭</el-button>
+      </div>
+    </div>
+    <el-table :data="tableData" style="width: 100%" height="calc(100vh - 18em)">
+      <el-table-column type="index" label="搴忓彿" width="120">
+        <template v-slot="scope">
+          <span>{{ (page.current - 1) * page.size + scope.$index + 1 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="venue" label="鍦扮偣/娲诲姩" min-width="180"></el-table-column>
+      <el-table-column prop="hazard" label="鍗遍櫓鍥犵礌" width="testDate" min-width="180"></el-table-column>
+      <el-table-column prop="accidents" label="鍙兘瀵艰嚧鐨勪簨鏁�" min-width="180"></el-table-column>
+      <el-table-column prop="injury" label="瀵逛汉鍙兘閫犳垚鐨勫嵄瀹�" min-width="180"></el-table-column>
+      <el-table-column label="椋庨櫓璇勪环" align="center" min-width="180">
+        <template>
+          <el-table-column prop="riskL" label="L" min-width="80"></el-table-column>
+          <el-table-column prop="riskE" label="E" min-width="80"></el-table-column>
+          <el-table-column prop="riskC" label="C" min-width="80"></el-table-column>
+          <el-table-column prop="riskD" label="D" min-width="80"></el-table-column>
+        </template>
+      </el-table-column>
+      <el-table-column prop="level" label="椋庨櫓绛夌骇" min-width="180"></el-table-column>
+      <el-table-column prop="measures" label="鎺у埗鎺柦" min-width="180"></el-table-column>
+      <el-table-column prop="editorName" label="缂栧埗浜哄鍚�" min-width="180"></el-table-column>
+      <el-table-column prop="editorDate" label="缂栧埗鏃ユ湡" min-width="180"></el-table-column>
+      <el-table-column prop="approvalName" label="瀹℃壒浜哄鍚�" min-width="180"></el-table-column>
+      <el-table-column prop="approvalDate" label="瀹℃壒鏃ユ湡" min-width="180"></el-table-column>
+      <el-table-column prop="approvalStatus" label="瀹℃壒鐘舵��" min-width="180">
+        <template #default="{ row }">
+          {{ row.approvalStatus === 1 ? '閫氳繃' : row.approvalStatus === 2 ? '涓嶉�氳繃' : '' }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="approveName" label="鎵瑰噯浜哄鍚�" min-width="180"></el-table-column>
+      <el-table-column prop="approveStatus" label="鎵瑰噯鐘舵��" min-width="180">
+        <template #default="{ row }">
+          {{ row.approveStatus === 1 ? '閫氳繃' : row.approveStatus === 2 ? '涓嶉�氳繃' : '' }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="approveDate" label="鎵瑰噯鏃ユ湡" min-width="180"></el-table-column>
+      <el-table-column fixed="right" label="鎿嶄綔" width="100">
+        <template v-slot="scope">
+          <el-button type="text" size="small" @click="editClick(scope.row)">缂栬緫</el-button>
+          <el-button @click="deleteClick(scope.row)" type="text" size="small">鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination :current-page="1" :page-size="page.size" :page-sizes="[10, 20, 30, 50, 100]" :total="page.total"
+      layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
+      @current-change="handleCurrentChange">
+    </el-pagination>
+    <el-dialog title="鎻愮ず" :visible.sync="dialogVisible" width="50%">
+      <el-form ref="form" :model="form" label-width="120px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鍦扮偣/娲诲姩">
+              <el-input v-model="form.venue" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍗遍櫓鍥犵礌">
+              <el-input v-model="form.hazard" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍙兘瀵艰嚧鐨勪簨鏁�">
+              <el-input v-model="form.accidents" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="瀵逛汉鍙兘閫犳垚鐨勫嵄瀹�" label-width="140px">
+              <el-input v-model="form.injury" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="椋庨櫓璇勪环/L">
+              <el-input v-model="form.riskL" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="椋庨櫓璇勪环/E">
+              <el-input v-model="form.riskE" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="椋庨櫓璇勪环/C">
+              <el-input v-model="form.riskC" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="椋庨櫓璇勪环/D">
+              <el-input v-model="form.riskD" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="椋庨櫓绛夌骇">
+              <el-input v-model="form.level" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鎺у埗鎺柦">
+              <el-input v-model="form.measures" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="addApi" :loading="loading">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/utils/auth";
+import {
+  getPageResults,
+  dangerousRiskApproval,
+  hazardIdentificationAndRiskApproval,
+  removeRiskFactors,
+  addNewRiskFactors,
+  exportHazardFactorIdentification,
+} from '@/api/cnas/systemManagement/measuresDealRisks.js'
+import { mapGetters } from "vuex";
+export default {
+  data() {
+    return {
+      dialogVisible: false,
+      form: {},
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableData: [],
+      loading: false
+    }
+  },
+  computed: {
+    action() {
+      return this.javaApi + '/manageRiskAssessmentResults/riskAssessmentImport'
+    },
+    ...mapGetters(["userId"]),
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.page.size = val;
+      this.initData();
+    },
+    handleCurrentChange(val) {
+      this.page.current = val;
+      this.initData();
+    },
+    // 鍒嗛〉琛ㄦ牸鍒濆鍖�
+    initData() {
+      this.tableData = []
+      getPageResults(this.page).then(res => {
+        if (res.code === 201) return;
+        this.tableData = res.data.records;
+        this.page.total = res.data.total;
+      });
+    },
+    // 瀹℃壒
+    approvalFun() {
+      this.$confirm('鏄惁瀹℃壒閫氳繃?', '鎻愮ず', {
+        confirmButtonText: '閫氳繃',
+        cancelButtonText: '涓嶉�氳繃',
+        type: 'warning',
+        closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂�
+        distinguishCancelAndClose: true,
+        beforeClose: (action, instance, done) => {
+          if (action === 'confirm') {
+            this.approvalApi(this.userId, 1)
+            done();
+          } else if (action === 'cancel') {
+            this.approvalApi(this.userId, 2)
+            done();
+          } else if (action === 'close') {
+            // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂�
+            done();
+          }
+        }
+      })
+    },
+    // 瀹℃壒鎺ュ彛
+    approvalApi(userId, status) {
+      dangerousRiskApproval({ approval: userId, status: status }).then(res => {
+        if (res.code === 201) return;
+        this.initData()
+        this.$message({
+          type: 'success',
+          message: '鎿嶄綔鎴愬姛!'
+        });
+      });
+    },
+    // 鎵瑰噯
+    approveFun() {
+      this.$confirm('鏄惁鎵瑰噯閫氳繃?', '鎻愮ず', {
+        confirmButtonText: '閫氳繃',
+        cancelButtonText: '涓嶉�氳繃',
+        type: 'warning',
+        closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂�
+        distinguishCancelAndClose: true,
+        beforeClose: (action, instance, done) => {
+          if (action === 'confirm') {
+            this.approveApi(this.userId, 1)
+            done();
+          } else if (action === 'cancel') {
+            this.approveApi(this.userId, 2)
+            done();
+          } else if (action === 'close') {
+            // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂�
+            done();
+          }
+        }
+      })
+    },
+    // 鎵瑰噯鎺ュ彛
+    approveApi(userId, status) {
+      hazardIdentificationAndRiskApproval({ approve: userId, status: status }).then(res => {
+        if (res.code === 201) return;
+        this.initData()
+        this.$message({
+          type: 'success',
+          message: '鎿嶄綔鎴愬姛!'
+        });
+      });
+    },
+    // 鏂囦欢涓婁紶澶辫触
+    onError() {
+      this.$message({
+        type: 'error',
+        message: '鎿嶄綔澶辫触!'
+      });
+    },
+    // 鏂囦欢涓婁紶鎴愬姛
+    onSuccess(response) {
+      if (response.code == 201) {
+        this.$message({
+          type: 'error',
+          message: response.message,
+        });
+        return
+      }
+      this.initData()
+      this.$message({
+        type: 'success',
+        message: '鎿嶄綔鎴愬姛!'
+      });
+    },
+    addFun() {
+      this.form = {}
+      this.dialogVisible = true
+    },
+    // 鍒犻櫎
+    deleteClick(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        removeRiskFactors({ id: row.id }).then(res => {
+          if (res.code === 201) return;
+          this.initData()
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+        });
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    addApi() {
+      this.loading = true
+      addNewRiskFactors(this.form).then(res => {
+        if (res.code === 201) return;
+        this.dialogVisible = false
+        this.loading = false
+        this.initData()
+        this.$message({
+          type: 'success',
+          message: '鎿嶄綔鎴愬姛!'
+        });
+      }).catch(err => {
+        this.loading = false
+      });
+    },
+    // 缂栬緫
+    editClick(row) {
+      this.form = { ...row }
+      this.dialogVisible = true
+    },
+    // 瀵煎嚭
+    openDownloadDia() {
+      exportHazardFactorIdentification().then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�' + '.docx');
+      })
+    },
+  },
+  mounted() {
+    this.initData()
+  },
+}
+</script>
+
+<style scoped>
+.header {
+  height: 3em;
+  width: 100%;
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/measuresDealRisks/components/listRiskAnalysisControlPlans.vue b/src/views/CNAS/systemManagement/measuresDealRisks/components/listRiskAnalysisControlPlans.vue
new file mode 100644
index 0000000..33adb1f
--- /dev/null
+++ b/src/views/CNAS/systemManagement/measuresDealRisks/components/listRiskAnalysisControlPlans.vue
@@ -0,0 +1,299 @@
+<template>
+  <div style="padding: 10px">
+    <div class="header">
+      <div></div>
+      <div style="min-width: 200px">
+        <el-button type="primary" size="small" @click="addFun">鏂� 澧�</el-button>
+        <el-button type="primary" size="small" @click="approvalFun">瀹� 鎵�</el-button>
+        <el-button type="primary" size="small" @click="approveFun">鎵� 鍑�</el-button>
+        <el-upload style="display: inline-block; padding: 0 6px" :action="action" :headers="uploadHeader"
+          :on-error="onError" :show-file-list="false" :on-success="onSuccess">
+          <el-button size="small" type="primary">瀵� 鍏�</el-button>
+        </el-upload>
+        <el-button size="small" @click="openDownloadDia">瀵煎嚭</el-button>
+      </div>
+    </div>
+    <el-table :data="tableData" style="width: 100%" height="calc(100vh - 18em)">
+      <el-table-column type="index" label="搴忓彿" width="120">
+        <template v-slot="scope">
+          <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="jobActivity" label="浣滀笟娲诲姩" min-width="180"></el-table-column>
+      <el-table-column prop="category" label="椋庨櫓鍥犵礌绫诲埆" width="testDate" min-width="180"></el-table-column>
+      <el-table-column prop="description" label="椋庨櫓鍥犵礌鎻忚堪" min-width="180"></el-table-column>
+      <el-table-column prop="result" label="鍙鑷寸殑浜嬫晠" min-width="180"></el-table-column>
+      <el-table-column prop="intolerable" label="鏄惁涓嶅彲鎵垮彈椋庨櫓" min-width="180"></el-table-column>
+      <el-table-column prop="plan" label="鎺у埗璁″垝" min-width="180"></el-table-column>
+      <el-table-column prop="editorName" label="缂栧埗浜哄鍚�" min-width="180"></el-table-column>
+      <el-table-column prop="editorDate" label="缂栧埗鏃ユ湡" min-width="180"></el-table-column>
+      <el-table-column prop="approvalName" label="瀹℃壒濮撳悕" min-width="180"></el-table-column>
+      <el-table-column prop="approvalDate" label="瀹℃壒鏃ユ湡" min-width="180"></el-table-column>
+      <el-table-column prop="approvalStatus" label="瀹℃壒鐘舵��" min-width="180">
+        <template #default="{ row }">
+          {{ row.approvalStatus === 1 ? '閫氳繃' : row.approvalStatus === 2 ? '涓嶉�氳繃' : '' }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="approveName" label="鎵瑰噯濮撳悕" min-width="180"></el-table-column>
+      <el-table-column prop="approveStatus" label="鎵瑰噯鐘舵��" min-width="180">
+        <template #default="{ row }">
+          {{ row.approveStatus === 1 ? '閫氳繃' : row.approveStatus === 2 ? '涓嶉�氳繃' : '' }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="approveDate" label="鎵瑰噯浜烘棩鏈�" min-width="180"></el-table-column>
+      <el-table-column fixed="right" label="鎿嶄綔" width="100">
+        <template v-slot="scope">
+          <el-button type="text" size="small" @click="editClick(scope.row)">缂栬緫</el-button>
+          <el-button @click="deleteClick(scope.row)" type="text" size="small">鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" :total="search.total"
+      layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
+      @current-change="handleCurrentChange">
+    </el-pagination>
+    <el-dialog title="鎻愮ず" :visible.sync="dialogVisible" width="50%">
+      <el-form ref="form" :model="form" label-width="120px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="浣滀笟娲诲姩">
+              <el-input v-model="form.jobActivity" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="椋庨櫓鍥犵礌绫诲埆">
+              <el-input v-model="form.category" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="椋庨櫓鍥犵礌鎻忚堪">
+              <el-input v-model="form.description" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍙鑷寸殑浜嬫晠">
+              <el-input v-model="form.result" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏄惁涓嶅彲鎵垮彈椋庨櫓" label-width="130px">
+              <el-input v-model="form.intolerable" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鎺у埗璁″垝">
+              <el-input v-model="form.plan" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="addApi" :loading="loading">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getPageList,
+  riskAnalysisApprovalOfControlPlanChecklist,
+  approvalOfControlPlanChecklist,
+  deleteSignificantRiskFactorAnalysis,
+  analysisOfMajorRiskFactorsAdded,
+  exportSignificantRiskFactors,
+} from '@/api/cnas/systemManagement/measuresDealRisks.js'
+import { mapGetters } from "vuex";
+export default {
+  data() {
+    return {
+      dialogVisible: false,
+      form: {},
+      loading: false,
+      search: {
+        size: 20,
+        current: 1,
+        total: 0
+      },
+      tableData: [],
+    }
+  },
+  computed: {
+    action() {
+      return this.javaApi + '/manageControlPlanList/importControlPlanList'
+    },
+    ...mapGetters(["userId"]),
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.search.size = val;
+      this.initData();
+    },
+    handleCurrentChange(val) {
+      this.search.current = val;
+      this.initData();
+    },
+    initData() {
+      getPageList(this.search).then(res => {
+        if (res.code === 201) return;
+        this.tableData = res.data.records;
+        this.search.total = res.data.total;
+      });
+    },
+    // 瀹℃壒
+    approvalFun() {
+      this.$confirm('鏄惁瀹℃壒閫氳繃?', '鎻愮ず', {
+        confirmButtonText: '閫氳繃',
+        cancelButtonText: '涓嶉�氳繃',
+        type: 'warning',
+        closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂�
+        distinguishCancelAndClose: true,
+        beforeClose: (action, instance, done) => {
+          if (action === 'confirm') {
+            this.approvalApi(this.userId, 1)
+            done();
+          } else if (action === 'cancel') {
+            this.approvalApi(this.userId, 2)
+            done();
+          } else if (action === 'close') {
+            // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂�
+            done();
+          }
+        }
+      })
+    },
+    // 瀹℃壒鎺ュ彛
+    approvalApi(userId, status) {
+      riskAnalysisApprovalOfControlPlanChecklist({ approval: userId, status }).then(res => {
+        if (res.code === 201) return;
+        this.initData()
+        this.$message({
+          type: 'success',
+          message: '鎿嶄綔鎴愬姛!'
+        });
+      });
+    },
+    // 鎵瑰噯
+    approveFun() {
+      this.$confirm('鏄惁鎵瑰噯閫氳繃?', '鎻愮ず', {
+        confirmButtonText: '閫氳繃',
+        cancelButtonText: '涓嶉�氳繃',
+        type: 'warning',
+        closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂�
+        distinguishCancelAndClose: true,
+        beforeClose: (action, instance, done) => {
+          if (action === 'confirm') {
+            this.approveApi(this.userId, 1)
+            done();
+          } else if (action === 'cancel') {
+            this.approveApi(this.userId, 2)
+            done();
+          } else if (action === 'close') {
+            // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂�
+            done();
+          }
+        }
+      })
+    },
+    // 鎵瑰噯鎺ュ彛
+    approveApi(userId, status) {
+      approvalOfControlPlanChecklist({ approve: userId, status }).then(res => {
+        if (res.code === 201) return;
+        this.initData()
+        this.$message({
+          type: 'success',
+          message: '鎿嶄綔鎴愬姛!'
+        });
+      });
+    },
+    onError() {
+      this.$message({
+        type: 'error',
+        message: '鎿嶄綔澶辫触!'
+      });
+    },
+    onSuccess(response) {
+      if (response.code == 201) {
+        this.$message({
+          type: 'error',
+          message: response.message,
+        });
+        return
+      }
+      this.initData()
+      this.$message({
+        type: 'success',
+        message: '鎿嶄綔鎴愬姛!'
+      });
+    },
+    addFun() {
+      this.form = {}
+      this.dialogVisible = true
+    },
+    // 鍒犻櫎
+    deleteClick(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        deleteSignificantRiskFactorAnalysis({ id: row.id }).then(res => {
+          if (res.code === 201) return;
+          this.initData()
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+        });
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    addApi() {
+      this.loading = true
+      analysisOfMajorRiskFactorsAdded(this.form).then(res => {
+        if (res.code === 201) return;
+        this.dialogVisible = false
+        this.loading = false
+        this.initData()
+        this.$message({
+          type: 'success',
+          message: '鎿嶄綔鎴愬姛!'
+        });
+      }).catch(err => {
+        this.loading = false
+      });
+    },
+    // 缂栬緫
+    editClick(row) {
+      this.form = { ...row }
+      this.dialogVisible = true
+    },
+    // 瀵煎嚭
+    openDownloadDia() {
+      exportSignificantRiskFactors().then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, '閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�' + '.docx');
+      })
+    },
+  },
+  mounted() {
+    this.initData()
+  },
+}
+</script>
+
+<style scoped>
+.header {
+  height: 3em;
+  width: 100%;
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/measuresDealRisks/index.vue b/src/views/CNAS/systemManagement/measuresDealRisks/index.vue
new file mode 100644
index 0000000..4088909
--- /dev/null
+++ b/src/views/CNAS/systemManagement/measuresDealRisks/index.vue
@@ -0,0 +1,39 @@
+<template>
+  <div class="main">
+    <el-tabs v-model="activeName" type="border-card" :lazy="true">
+      <el-tab-pane label="鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�" name="鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�">
+        <HazardIdentificationRiskAssessment v-if="activeName === '鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�'" />
+      </el-tab-pane>
+      <el-tab-pane label="閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�" name="閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�">
+        <listRiskAnalysisControlPlans v-if="activeName === '閲嶅ぇ椋庨櫓鍥犵礌鍒嗘瀽鍙婃帶鍒惰鍒掓竻鍗�'" />
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+
+import HazardIdentificationRiskAssessment
+  from "./components/hazardIdentificationRiskAssessment.vue";
+import listRiskAnalysisControlPlans
+  from "./components//listRiskAnalysisControlPlans.vue";
+export default {
+  components: { HazardIdentificationRiskAssessment, listRiskAnalysisControlPlans },
+  data() {
+    return {
+      activeName: '鍗遍櫓鍥犵礌杈ㄨ瘑涓庨闄╄瘎浠风粨鏋滀竴瑙�',
+    }
+  }
+}
+</script>
+
+<style scoped>
+.main {
+  width: 100%;
+}
+
+/deep/ .el-tabs--border-card>.el-tabs__content {
+  height: calc(100vh - 9em);
+  padding: 0;
+}
+</style>
diff --git a/src/views/business/inspectionReview/index.vue b/src/views/business/inspectionReview/index.vue
new file mode 100644
index 0000000..7586d81
--- /dev/null
+++ b/src/views/business/inspectionReview/index.vue
@@ -0,0 +1,434 @@
+<template>
+  <div class="app-container">
+    <div>
+      <el-form :model="entity" ref="entity" size="small" :inline="true">
+        <el-form-item label="濮旀墭缂栧彿" prop="entrustCode">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable
+                    v-model="entity.entrustCode"
+                    @keyup.enter.native="refreshTable()"></el-input>
+        </el-form-item>
+        <el-form-item label="涓嬪崟绫诲埆" prop="entrustCode">
+          <el-select size="small" v-model="entity.typeSource" clearable style="width: 100%;" @change="refreshTable()">
+            <el-option v-for="(a, i) in typeSourceList" :key="i" :label="a.label" :value="a.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button icon="el-icon-refresh" size="mini" @click="refresh">閲� 缃�</el-button>
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">鏌� 璇�</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="page_total">
+        <span>鎬昏浠诲姟鏁伴噺:</span>
+        <span>{{page.total}}</span>
+      </div>
+    </div>
+    <div>
+      <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
+                  :rowClassName="rowClassName" :height="'calc(100vh - 270px)'" @pagination="pagination"
+                  key="tableData0"></lims-table>
+    </div>
+<!--    <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == null">-->
+<!--      <Add :active="activeFace" :currentId="currentId"/>-->
+<!--    </div>-->
+<!--    <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == 0">-->
+<!--      <CustomsInspection :active="activeFace" :customsInspection="customsInspection" :currentId="currentId"/>-->
+<!--    </div>-->
+<!--    <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == 1">-->
+<!--      <CopperOrder :active="activeFace" :currentId="currentId"></CopperOrder>-->
+<!--    </div>-->
+<!--    <Inspection v-if="state>0" @goback="goback" :orderId="orderId" :sonLaboratory="componentData.entity.sonLaboratory" :typeSource="typeSource" :state="state"/>-->
+<!--    &lt;!&ndash;浜т笟閾句俊鎭煡鐪�&ndash;&gt;-->
+<!--    <ShowInfo v-if="showInfoDialog" :showInfoDialog="showInfoDialog" ref="showInfoDialog"></ShowInfo>-->
+    <!--鎶ュ憡鏌ョ湅-->
+    <el-dialog title="鎶ュ憡鏌ョ湅" :visible.sync="issuedVisible" width="80vw" :modal-append-to-body="false"
+               :fullscreen="fullscreen">
+      <div class="full-screen">
+        <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i>
+        <img src="@/assets/images/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" >
+      </div>
+      <div style="height: 80vh;" v-if="issuedVisible">
+        <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+      </div>
+    </el-dialog>
+    <el-dialog title="鏌ョ湅闄勪欢" :visible.sync="lookDialogVisible" width="800px" top="5vh" fullscreen>
+      <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.tempUrlPdf" :currentFile="{}"
+                   style="max-height: 90vh;overflow-y: auto;" />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getYearAndMonthAndDays } from "@/utils/date";
+// import ShowInfo from "../do/b1-material-ins-order/showInfo.vue";
+import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue";
+import limsTable from "@/components/Table/lims-table.vue";
+import {selectInsOrderPlanList, selectUserCondition} from "@/api/business/inspectionTask";
+import {mapGetters} from "vuex";
+import {upReportUrl} from "@/api/business/insReport";
+import {delfile} from "@/api/business/rawMaterialOrder";
+import filePreview from "@/components/Preview/filePreview.vue";
+
+export default {
+  components: {
+    filePreview,
+    onlyoffice,
+    limsTable,
+    // ShowInfo,
+  },
+  dicts: ["urgency_level", "inspection_task_state"],
+  computed: {
+    ...mapGetters(["nickName", "userId"]),
+  },
+  data() {
+    return {
+      lookDialogVisible: false,
+      alone: false,
+      tabList: [],
+      active: 1,
+      tabIndex: 0,
+      entity: {
+        sonLaboratory: null,
+        insState: '3',
+        userId: 0,
+        typeSource: null,
+        isCheck: 1
+      },
+      tableData: [],
+      column: [
+        {
+          label: "濮旀墭缂栧彿",
+          prop: "entrustCode",
+          width: "160px",
+          dataType: "link",
+          linkMethod: "selectAllByOne",
+        },
+        { label: "鏍峰搧鍚嶇О", prop: "sample", width: "160px" },
+        {
+          label: "涓嬪崟绫诲埆",
+          prop: "typeSource",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "鎴愬搧涓嬪崟";
+            } else {
+              return "鍘熸潗鏂欎笅鍗�";
+            }
+          },
+        },
+        { label: "鏍峰搧鍨嬪彿", prop: "sampleModel", width: "120px" },
+        {
+          label: "绱ф�ョ▼搴�",
+          prop: "type",
+          dataType: "tag",
+          formatData: (params) => {
+            return this.urgencyLevel.find((m) => m.value == params).label;
+          },
+        },
+        {
+          label: "妫�楠岀被鍨�",
+          prop: "orderType",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            return this.orderTypeList.find((m) => m.value == params).label;
+          },
+          formatType: (params) => {
+            return this.orderTypeList.find((m) => m.value == params).type;
+          },
+        },
+        {
+          label: "鐘舵��",
+          prop: "insState",
+          dataType: "tag",
+          formatData: (params) => {
+            return this.inspectionTaskState.find((m) => m.value == params)
+              .label;
+          },
+          formatType: (params) => {
+            return this.inspectionTaskState.find((m) => m.value == params).type;
+          },
+        },
+        { label: "妫�楠屼汉", prop: "userName" },
+        { label: "澶嶆牳浜�", prop: "checkName" },
+        { label: "绾﹀畾鏃堕棿", prop: "appointed" },
+        { label: "涓嬪彂鏃堕棿", prop: "sendTime", width: "140px" },
+        { label: "妫�楠屽紑濮嬫椂闂�", prop: "insTime", width: "140px" },
+        { label: "鐞嗙敱", prop: "verifyTell", width: "140px" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "澶嶆牳",
+              type: "text",
+              clickFun: (row) => {
+                this.handleReview(row);
+              },
+              disabled: (row) => {
+                return row.userName == null || row.userName && !row.userName.includes(this.nickName)
+              }
+            },
+            {
+              name: "涓嬭浇鎶ュ憡",
+              type: "text",
+              clickFun: (row) => {
+                this.download(row);
+              },
+            },
+            {
+              name: "涓婁紶",
+              type: "upload",
+              accept: '.doc,.docx',
+              url: '/insReport/inReport',
+              uploadIdFun: (row) => {
+                return row.insReportId
+              }
+            },
+            {
+              name: "杩樺師",
+              type: "text",
+              clickFun: (row) => {
+                this.handleRestore(row);
+              },
+            },
+            {
+              name: "鏌ョ湅鎶ュ憡",
+              type: "text",
+              clickFun: (row) => {
+                this.handleIssued(row);
+              }
+            },
+            // {
+            //   name: "浜т笟閾�",
+            //   type: "text",
+            //   clickFun: (row) => {
+            //     this.openInfoDialog(row);
+            //   },
+            //   disabled: (row) => {
+            //     return row.typeSource !== 1
+            //   },
+            // }
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
+      upIndex: 0,
+      planTotal: 0,
+      insStateList: [],
+      state:0,//0:鍙拌处椤碉紝1锛氭楠岄〉闈�,2妫�楠岄〉闈�(澶嶆牳)锛岄粯璁や负0
+      activeFace: 0, //1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍革紝榛樿涓�0
+      examine: null,
+      isReport: 0,
+      currentId: null,
+      orderId: 0,
+      personList:[],
+      currentTime: null,
+      sonLaboratoryList:[],
+      typeSourceList: [
+        {label: '鎴愬搧涓嬪崟', value: 0},
+        {label: '鍘熸潗鏂欎笅鍗�', value: 1},
+      ],
+      isCopper: null,
+      customsInspection: {},
+      typeSource: null,// 0:鎴愬搧涓嬪崟锛�1锛氬師鏉愭枡涓嬪崟
+      showInfoDialog: false, // 浜т笟閾句俊鎭煡鐪�
+      issuedVisible: false,
+      fullscreen: false,
+      option:null,
+      orderTypeList: [
+        {label: '濮旀墭璇曢獙', value: 'Customer-ordered test'},
+        {label: '鎶芥', value: '鎶芥'},
+        {label: '杩涘巶妫�楠�', value: '杩涘巶妫�楠�'},
+        {label: '瀛e害妫�楠�', value: 'Quarterly inspection'},
+      ],
+      urgencyLevel: [],
+      inspectionTaskState: [],
+    }
+  },
+  created() {
+    this.getDicts("urgency_level").then((response) => {
+      this.urgencyLevel = this.dictToValue(response.data);
+    });
+    this.getDicts("inspection_task_state").then((response) => {
+      this.inspectionTaskState = this.dictToValue(response.data);
+    });
+    this.getAuthorizedPerson()
+    this.currentTime = getYearAndMonthAndDays()
+  },
+  mounted() {
+    this.refreshTable()
+  },
+  methods: {
+    refreshTable() {
+      this.tableLoading = true;
+      let param = { ...this.entity, ...this.page };
+      delete param.total;
+      selectInsOrderPlanList({ ...param }).then((res) => {
+        this.tableLoading = false;
+        if (res.code === 200) {
+          this.tableData = res.data.records;
+          this.page.total = res.data.total;
+        }
+      }).catch((err) => {
+        this.tableLoading = false;
+      });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.refreshTable();
+    },
+    refresh() {
+      this.resetForm('entity')
+      this.refreshTable()
+    },
+    rowClassName({ row, rowIndex }) {
+      if (this.currentTime == row.appointed) {
+        return "highlight-warning-row-border";
+      } else if (this.currentTime > row.appointed) {
+        return "highlight-danger-row-border";
+      }
+      return "";
+    },
+    // 鏌ョ湅浜т笟閾句俊鎭�
+    // openInfoDialog (row) {
+    //   this.showInfoDialog = true
+    //   this.$nextTick(() => {
+    //     this.$refs.showInfoDialog.getInfo(row.ifsInventoryId)
+    //   })
+    // },
+    selectAllByOne(row) {
+      this.isCopper = row.isCopper
+      this.customsInspection = row
+      this.activeFace = 2;
+      this.examine = 1;
+      this.isReport = 0;
+      this.currentId = parseInt(row.id)
+      switch (row.isCopper) {
+        case 0:
+          // 鍘熸潗鏂�
+          this.$router.push({
+            path: "/materialOrder/customsInspection", query: {
+              customsInspection: row,
+              active: this.activeFace,
+              currentId: this.currentId,
+              isReport: this.isReport
+            }
+          });
+          break;
+        case null:
+          // 鎴愬搧
+          this.$router.push({
+            path: "/productOrder/add", query: {
+              examine: this.examine,
+              active: this.activeFace,
+              currentId: this.currentId
+            }
+          });
+          break;
+        case 1:
+          // 閾滄潗
+          this.$router.push({
+            path: "/materialOrder/copperOrder", query: {
+              active: this.activeFace,
+              currentId: this.currentId
+            }
+          });
+          break;
+      }
+    },
+    // 澶嶆牳鍥炶皟
+    handleReview(row){
+      this.$router.push({
+        path: "/inspectionTask/inspection",
+        query: {
+          sonLaboratory: row.sonLaboratory,
+          state: 2,
+          typeSource: row.typeSource,
+          orderId: row.id,
+        },
+      })
+    },
+    // 涓婁紶鎶ュ憡
+    handleUpload (row) {
+
+    },
+    // 涓嬭浇鎶ュ憡
+    download(row) {
+      let url = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+      const link = document.createElement('a');
+      link.href = this.javaApi + url;
+      link.target = '_blank';
+      document.body.appendChild(link);
+      link.click();
+    },
+    // 杩樺師鎿嶄綔
+    handleRestore(row) {
+      this.$confirm('鏄惁杩樺師褰撳墠鎶ュ憡?', "璀﹀憡", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      }).then(() => {
+        upReportUrl({id: row.insReportId}).then(res => {
+          if (res.code === 200) {
+            this.$message.success('杩樺師鎴愬姛')
+            this.refreshTable()
+          }
+        })
+      }).catch(() => { })
+
+    },
+    // 鏌ョ湅鎶ュ憡
+    handleIssued(row) {
+      if (!row.tempUrlPdf) return this.$message.warning('鏂囦欢鏈笂浼�')
+      this.currentInfo = row
+      this.lookDialogVisible = true
+      // this.currentInfo = row;
+      // let fileName = row.url
+      // let fileType = "docx"
+      // if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+      //   fileName = row.tempUrlPdf
+      //   fileType = "pdf"
+      // }
+      // fileName = fileName.replace('/word/','')
+      // const userName = this.nickName
+      // this.option = {
+      //   url: this.javaApi + "/word/" + fileName,
+      //   isEdit: false,
+      //   fileType: fileType,
+      //   title: fileName,
+      //   lang: 'zh-CN',
+      //   isPrint: false,
+      //   user_id: 1,
+      //   user_name: userName,
+      //   editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+      // }
+      // this.issuedVisible = true;
+    },
+    getAuthorizedPerson() {
+      selectUserCondition({ type: 1 }).then((res) => {
+        let data = [];
+        res.data.forEach((a) => {
+          data.push({
+            label: a.name,
+            value: a.id,
+          });
+        });
+        this.personList = data;
+      });
+    },
+  }
+}
+</script>
+<style scoped>
+.page_total {
+  margin-bottom: 10px;
+}
+</style>
diff --git a/src/views/business/inspectionTask/components/InspectionWord.vue b/src/views/business/inspectionTask/components/InspectionWord.vue
new file mode 100644
index 0000000..4b88e82
--- /dev/null
+++ b/src/views/business/inspectionTask/components/InspectionWord.vue
@@ -0,0 +1,2330 @@
+<template>
+  <el-dialog :close-on-press-escape="false"
+             :visible.sync="isShow"
+             custom-class="unPassCheck"
+             title="涓嶅悎鏍煎娴�"
+             width="90%"
+             @close="$emit('closeUnPassCheckDialog')">
+    <div v-loading="loading" class="inspection">
+<!--      <el-row class="title">-->
+<!--        <el-col :span="24" style="text-align: right;">-->
+<!--          <el-button size="small" type="primary" @click="addVerifyDia = true" v-if="state==1">鎻愪氦</el-button>-->
+<!--        </el-col>-->
+<!--      </el-row>-->
+      <div class="center">
+        <div class="search" style="text-align: left;display: flex;align-items: center;justify-content: space-between;">
+          <div style="display: flex;align-items: center;">
+            <span v-if="tableList.length>0">妫�楠屾ā鏉匡細</span>
+            <el-radio-group v-model="currentTable" size="small">
+              <el-radio-button v-for="(item,index) in tableLists" :key="index" :label="item.templateId"
+                               size="small">{{ item.templateName }}</el-radio-button>
+            </el-radio-group>
+          </div>
+          <div style="display: flex;align-items: center;">
+            <span v-if="typeSource == '1'">&nbsp;&nbsp;澶嶆祴娆℃暟锛�</span>
+            <el-select v-if="typeSource == '1'" v-model="retestTag"
+                       placeholder="璇烽�夋嫨"
+                       size="small" @change="m=>handleChangeCableTag(currentSample.id,4, 'cableTag', m)">
+              <el-option
+                v-for="item in unPassNumList"
+                :key="item.retestTag"
+                :label="item.retestTag"
+                :value="item.retestTag">
+              </el-option>
+            </el-select>
+          </div>
+        </div>
+        <!-- 甯歌妫�楠屽師濮嬭褰� -->
+        <div id="tableBox" v-loading="tableLoading" class="center-box">
+          <table v-for="(item,index) in tableList" :key="index+currentTable+currentSample.id" border="1" cellpadding="10" class="tables">
+            <tbody>
+            <tr v-for="(m,i) in item.arr" :key="i">
+              <td v-for="(n,j) in m" v-if="n.v.mc==undefined || Object.keys(n.v.mc).length === 4" :id='item.templateId+"-"+n.i+"-"+n.r+"-"+n.c'
+                  :key="j" :colspan="n.v.mc&&n.v.mc.cs?n.v.mc.cs:1"
+                  :rowspan="n.v.mc&&n.v.mc.rs?n.v.mc.rs:1"
+                  :style="`background:${n.v.bg?n.v.bg:''};color:${n.v.fc};font-size:${n.v.fs}px;width:${handleWidth(n)}px !important;height:${item.style.rowlen[n.r]}px;font-wight:${n.v.bl?'bold':''};`">
+                <div :class="`content-h-${n.v.ht} content-v-${n.v.vt}`" :style="`width:${handleWidth(n)}px !important;min-height:${item.style.rowlen[n.r]}px;`"
+                     class="content">
+                  <template v-if="n.v.ps!=undefined && typeof n.v.ps.value ==='string'&& n.v.ps.value.includes('妫�楠屽��') && state==1">
+                    <el-input v-if="getInspectionValueType(n.i) == 1" :key="'abc-'+'000'+index+'000'+i+'000'+j" v-model="n.v.v"
+                              :disabled="(getInspectionItemType(n.i) == 1 && !dataAcquisitionEidtAble )|| (n.u != userId && n.u != undefined && n.u != '')"
+                              class="table_input"
+                              @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`, n,'getDataType')" @input="handleInput(n)" @mousewheel.native.prevent
+                              @keydown.enter="changeInput('',`${item.templateId}-${n.r}-${n.c}-${n.i}`, n, 'getDataType')">
+                    </el-input>
+                    <el-input v-else-if="getInspectionValueType(n.i) == 2" v-model="n.v.v" :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')"
+                              class="table_input"
+                              type="textarea"
+                              @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`,n,'getDataType')" />
+<!--                    <el-select v-else-if="getInspectionValueType(n.i) == 5" v-model="n.v.v" :disabled="state>1||getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')"-->
+<!--                               class="table_input" @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`,n,'getDataType')"-->
+<!--                               @visible-change="e=>getDic(e,n.i)">-->
+<!--                      <el-option v-for="(e, i) in enumList" :key="i" :label="e.label" :value="e.value"></el-option>-->
+<!--                    </el-select>-->
+                    <span v-else-if="getInspectionValueType(n.i) == 4"
+                          :style="`font-family:${n.v.ff} !important;`">/</span>
+                  </template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='缁撹'">
+                    <el-select v-if="(getInspectionValueType(n.i) == 2 || getInspectionValueType(n.i) == 5) && state==1&&PROJECT=='瑁呭鐢电紗'"
+                               v-model="n.v.v" class="table_input" @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`, n,'getDataType')">
+                      <el-option :value="1" label="鍚堟牸"></el-option>
+                      <el-option :value="0" label="涓嶅悎鏍�"></el-option>
+                      <el-option :value="3" label="涓嶅垽瀹�"></el-option>
+                      <el-option :value="2" label="寰呭畾"></el-option>
+                    </el-select>
+                    <template v-if="state > 1">
+                      <span v-if="n.v.v===1" :style="`font-family:${n.v.ff} !important;color: green;`">鍚堟牸</span>
+                      <span v-else-if="n.v.v===0" :style="`font-family:${n.v.ff} !important;color: red;`">涓嶅悎鏍�</span>
+                      <span v-else-if="n.v.v===3" :style="`font-family:${n.v.ff} !important;color: #3A7BFA;`">涓嶅垽瀹�</span>
+                      <span v-else :style="`font-family:${n.v.ff} !important;`">寰呭畾</span>
+                    </template>
+                    <template v-if="getInspectionValueType(n.i) != 2 && state==1">
+                      <span v-if="n.v.v===1" :style="`font-family:${n.v.ff} !important;color: green;`">鍚堟牸</span>
+                      <span v-else-if="n.v.v===0" :style="`font-family:${n.v.ff} !important;color: red;`">涓嶅悎鏍�</span>
+                      <span v-else-if="n.v.v===3" :style="`font-family:${n.v.ff} !important;color: #3A7BFA;`">涓嶅垽瀹�</span>
+                      <span v-else :style="`font-family:${n.v.ff} !important;`">寰呭畾</span>
+                    </template>
+                  </template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='璁惧缂栫爜' && state==1">
+                    <span>{{ n.v.v }}</span>
+                  </template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='璁惧鍚嶇О'">
+                    <el-select v-model="n.v.v" :disabled="state>1"
+                               class="table_input" filterable
+                               multiple
+                               placeholder="璁惧" remote @change="(val)=>changeEquip(val, n)"
+                               @visible-change="e=>getEquipOptions(e,n.i)">
+                      <el-option v-for="item in equipOptions" :key="item.value"  :label="item.label" :value="item.value">
+                        {{item.label + '--' +item.value}}
+                      </el-option>
+                    </el-select>
+                  </template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='瑕佹眰鍊�' && state==1">
+                    <span :style="`font-family:${n.v.ff} !important;`">{{getTell(n.i)}}</span>
+                  </template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='璁$畻鍊�' && state==1"><span :style="`font-family:${n.v.ff} !important;`">{{ toFixed(n.v.v,n.v.ct) }}</span></template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='鏈�缁堝��' && state==1">
+                    <span :style="`font-family:${n.v.ff} !important;`">{{ toFixed(n.v.v,n.v.ct) }}</span>
+                  </template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='鏍峰搧缂栧彿'">
+                    <div :title="currentSample.sampleCode" style="display: flex;flex-wrap: nowrap;align-items: center;width: 100%">
+                      <i v-if="!currentFiberOpticTape&&!currentFiberOptic" class="el-icon-caret-left table_caret" style="width: 16px;" @click="caretSample(-1)"></i>
+                      <div :style="`font-family:${n.v.ff} !important;overflow: hidden;white-space: nowrap;width: calc(100% - 32px);`">{{currentSample.sampleCode}}</div>
+                      <i v-if="!currentFiberOpticTape&&!currentFiberOptic" class="el-icon-caret-right table_caret"
+                         style="width: 16px;" @click="caretSample(1)"></i>
+                    </div>
+                  </template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='鏍峰搧鍨嬪彿'">
+                    <div v-if="currentSample.model!==undefined&&currentSample.model!==null" :style="`font-family:${n.v.ff} !important;`">{{currentSample.model}}</div>
+                  </template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='濂楃'">
+                    <div style="display: flex;flex-wrap: nowrap;align-items: center;">
+                      <div :style="`font-family:${n.v.ff} !important;`">{{currentBushing?currentBushing.color:''}}</div>
+                    </div>
+                  </template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='鍏夌氦甯�'">
+                    <div style="display: flex;flex-wrap: nowrap;align-items: center;">
+                      <i v-if="currentFiberOpticTape" class="el-icon-caret-left table_caret" @click="caretTape(-1)
+                      "></i>
+                      <div :style="`font-family:${n.v.ff} !important;`">{{currentFiberOpticTape?currentFiberOpticTape.code:''}}</div>
+                      <i v-if="currentFiberOpticTape"
+                         class="el-icon-caret-right table_caret"
+                         @click="caretTape(1)"></i>
+                    </div>
+                  </template>
+                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='鍏夌氦'">
+                    <div style="display: flex;flex-wrap: nowrap;align-items: center;">
+                      <i v-if="currentFiberOptic" class="el-icon-caret-left table_caret"
+                         @click="caretOptic(-1)"></i>
+                      <div :style="`font-family:${n.v.ff} !important;`">{{currentFiberOptic?currentFiberOptic.color:''}}
+                      </div>
+                      <i
+                        v-if="currentFiberOptic" class="el-icon-caret-right table_caret" @click="caretOptic(1)"></i>
+                    </div>
+                  </template>
+                  <span v-else :style="`font-family:${n.v.ff} !important;`" v-html="getValue(n.v)" ></span>
+                </div>
+              </td>
+            </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <el-dialog :visible.sync="reviewDia" title="妫�楠屽鏍�" width="500px">
+        <div v-if="reviewDia" class="body" style="display: flex;padding: 10px;">
+          <div class="search_label" style="width: 150px;"><span class="required-span">* </span>涓嶉�氳繃鐨勭悊鐢憋細</div>
+          <div class="search_input" style="width: 100%;">
+            <el-input v-model="noReason" :autosize="{ minRows: 4}" clearable size="small" type="textarea"></el-input>
+          </div>
+        </div>
+        <span slot="footer" class="dialog-footer">
+        <el-button @click="reviewDia = false">鍙� 娑�</el-button>
+        <el-button :loading="reviewLoading" type="primary" @click="handleReviewDia">纭� 瀹�</el-button>
+      </span>
+      </el-dialog>
+      <el-dialog :visible.sync="addVerifyDia" title="鎸囧畾澶嶆牳浜哄憳" width="400px">
+        <div class="body" style="display: flex;padding: 10px;align-items: center;">
+          <div class="search_label" style="width: 150px;"><span class="required-span">*</span>澶嶆牳浜�</div>
+          <div class="search_input" style="width: 100%;">
+            <el-select v-model="verifyUser" clearable filterable placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+              <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+        </div>
+        <span slot="footer" class="dialog-footer">
+        <el-button @click="addVerifyDia = false">鍙� 娑�</el-button>
+        <el-button :loading="submitLoading" type="primary" @click="submit()">纭� 瀹�</el-button>
+      </span>
+      </el-dialog>
+      <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false" :visible.sync="dataGetDia" custom-class="custom-dialog" title="鏁版嵁閲囬泦">
+        <div>
+          <table border="1" cellpadding="10" class="thermal-table">
+            <tr>
+              <td style="width: 120px;">妫�楠岄」</td>
+              <td style="width: 120px;">妫�楠屽瓙椤�</td>
+              <td>鏁伴噰鏁版嵁</td>
+            </tr>
+            <template v-for="(item,index) in getData">
+              <tr>
+                <td :rowspan="item.child.length">{{item.faName}}</td>
+                <td>{{ item.child[0].name }}</td>
+                <td style="text-align: left;">
+                  <el-checkbox-group
+                    v-model="getDataIndex" :max="item.child[0].maxNum">
+                    <el-checkbox v-for="(n,j) in item.child[0].arr" :key="j" :label="j">{{n}}</el-checkbox>
+                  </el-checkbox-group>
+                </td>
+              </tr>
+              <tr v-for="(m,i) in item.child" v-show="i>0" :key="i+'bbbbbbbbbbbbbb'">
+                <td>{{ m.name }}</td>
+                <td style="text-align: left;">
+                  <el-checkbox-group
+                    v-model="getDataIndex" :max="m.maxNum">
+                    <el-checkbox v-for="(n,j) in m.arr" :key="j" :label="j">{{n}}</el-checkbox>
+                  </el-checkbox-group>
+                </td>
+              </tr>
+            </template>
+          </table>
+        </div>
+        <span slot="footer" class="dialog-footer">
+        <el-button :loading="getDataIndexLoading" type="primary" @click="submitDataGet()">纭� 瀹�</el-button>
+      </span>
+      </el-dialog>
+      <UnPassDialog v-if="unPassDialog" ref="unPassDialog"
+                    :orderId="orderId"
+                    :unPassDialog="unPassDialog"
+                    @resetForm="resetForm"></UnPassDialog>
+      <el-dialog :close-on-click-modal="false" :visible.sync="addCheck"
+                 title="鎸囧畾鎶ュ憡瀹℃牳浜哄憳"
+                 width="400px"
+                 @close="closeAddVerifyDia">
+        <div class="body" style="display: flex;padding: 10px;align-items: center;">
+          <div class="search_label" style="width: 150px;"><span class="required-span">*</span>瀹℃牳浜猴細</div>
+          <div class="search_input" style="width: 100%;">
+            <el-select v-model="checkUser" clearable filterable placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+              <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
+              </el-option>
+            </el-select>
+          </div>
+        </div>
+        <span slot="footer" class="dialog-footer">
+        <el-button @click="closeAddVerifyDia">鍙� 娑�</el-button>
+        <el-button :loading="reviewLoading" type="primary" @click="upInsReview(1)">纭� 瀹�</el-button>
+      </span>
+      </el-dialog>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+// import ValueTable from '../../tool/value-table.vue'
+import file from '@/utils/file'
+import excelFunction from '@/utils/excelFountion'
+import UnPassDialog from "@/views/business/unpass/components/unPassDialog.vue";
+import AddUnPass from "@/views/business/unpass/components/addUnPass.vue";
+import {
+  checkSubmitPlan,
+  doInsOrder,
+  getInsProductUnqualifiedRetest,
+  search, selectUserCondition,
+  submitPlan,
+  verifyPlan
+} from "@/api/business/inspectionTask";
+import {getUserNow, saveUnqualifiedContext} from "@/api/business/rawMaterialOrder";
+export default {
+  props: ['sonLaboratory', 'orderId', 'state','inspectorList','typeSource', 'unPassCheck', 'rawMaterialTag'],
+  components: {
+    AddUnPass,
+    UnPassDialog
+  },
+  data() {
+    return {
+      isShow: this.unPassCheck,
+      sagData: [],
+      sagForm: {
+        sampleCode: null,
+        model: null,
+        inspection: null,
+        methodName: null,
+        tensileForce: null,
+        spanLength: null,
+        load: null
+      },
+      dataGetDia:false,
+      wareTableDataLoading:false,
+      fileAdd:false,
+      submitLoading: false,
+      searchForm: {
+        sampleName: null,
+        state: null
+      },
+      id: 0,
+      componentData0: {
+        entity: {
+          insOrderId:''
+        },
+        isIndex: true,
+        showSelect: false,
+        select: false,
+        sort: false,
+        init:false,
+        do: [
+          {
+            id: 'handleDown',
+            font: '涓嬭浇',
+            type: 'text',
+            method: 'handleDown'
+          },{
+            id: 'delete',
+            font: '鍒犻櫎',
+            type: 'text',
+            method: 'doDiy',
+            disabFun: (row, index) => {
+              return this.state!=1
+            }
+          }
+        ],
+        isPage: false,
+        linkEvent: {},
+        tagField: {
+          type:{
+            select:[
+              {
+                value: 1,
+                label: '鍥剧墖'
+              },
+              {
+                value: 2,
+                label: '鏂囦欢'
+              }
+            ]
+          }
+        },
+        currentId: '',
+        selectField: {},
+        requiredAdd: [],
+        requiredUp: []
+      },
+      changeType:null,
+      getReportModelLoading:false,
+      insOrder: {},
+      sampleProduct: [],
+      typeList: [],
+      urgentList: [],
+      currentSample: {}, //褰撳墠鏍峰搧淇℃伅
+      tableList: [],
+      loading: false,
+      ps: {},
+      param: {},
+      currentKey0: 1,
+      currentKey1: 1,
+      currentKey2: 1,
+      comparisonList: [],
+      excelMethodList: [],
+      equipOptions: [],
+      userId: 0,
+      reviewLoading: false,
+      reviewDia: false,
+      noReason: '',
+      tableWidth: 1000,
+      currentTable: null,
+      tableLists: [],
+      widthList: [],
+      addVerifyDia: false,
+      verifyUser: null,
+      personList: [],
+      enumList: [],
+      tableLoading:false,
+      upLoading:false,
+      temptList:null,
+      currentTab:null,
+      wareForm:{
+        inspectionItem:1,
+        inspectionItemSubclass:'20(甯告俯)',
+      },
+      wareForm0:{},
+      numOptions:[],
+      temperatureOptions:[],
+      wareTableData:[],
+      otherForm:{
+        humidity:null,
+        temperature:null,
+      },
+      equipForm:{
+        value0:null,
+        code0:null,
+        value1:null,
+        code1:null,
+      },
+      result: null,
+      worker: null,
+      worker0: null,
+      wareLength:[],
+      dataAcquisitionInfo:{},
+      dataAcquisitionInfoNew:{},
+      dataAcquisitionEidtAble:false,
+      isGet:false,
+      dataAcquisitionLoading:false,
+      collected:false,
+      // 鐑惊鐜�---寮�濮�
+      thermalCyclingInfo:{
+        max:0,
+        inspectionItem:1,
+        arr:[],
+        length:1,
+        inspectionItemClass:null,
+      },
+      thermalCyclingLoading:false,
+      temDataAcquisition:false,
+      getData:[
+        {
+          faName:'娉㈤暱闄勫姞琛板噺',
+          child:[
+            {
+              name:'1285nm~1330nm',
+              arr:[12,13,14,15],
+            },
+            {
+              name:'1525nm~1575nm',
+              arr:[12,13,14,15],
+            },
+          ]
+        },
+        {
+          faName:'鎴嚦娉㈤暱',
+          child:[
+            {
+              name:'鎴嚦娉㈤暱',
+              arr:[12,13,14,15],
+            }
+          ]
+        }
+      ],
+      getDataIndex:[],
+      getDataIndexLoading:false,
+      getDataTypeId:'',
+      getDataType:null,
+      unPassDialog: false, // 涓嶅悎鏍煎鐞嗗脊妗�
+      retestTag: '', // 澶嶆祴娆℃暟
+      addCheck: false, // 鎸囧畾瀹℃牳浜哄憳寮规
+      checkUser: '',
+      type: '',
+      unPassNumList: [
+        {retestTag: '1'},
+        {retestTag: '2'},
+      ],
+    }
+  },
+  // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
+  computed: {
+    headers() {
+      return {
+        'token': sessionStorage.getItem('token')
+      }
+    },
+    action() {
+      return this.javaApi + "/insOrderPlan/uploadFile";
+    }
+  },
+  created() {
+    this.id = this.orderId;
+    this.getUserInfo()
+  },
+  mounted() {
+    this.getTypeDicts() // 鑾峰彇绱ф�ョ▼搴︿笅鎷夋閫夐」
+    this.getInsStateDicts()
+    this.getComparisonList()
+    this.getAuthorizedPerson()
+    this.startWorker()
+  },
+  watch: {
+    // 鐩戝惉浠诲姟id锛岃幏鍙栦换鍔′俊鎭�
+    id(val) {
+      this.loading = true
+      doInsOrder({
+        id: val,
+        laboratory: this.sonLaboratory
+      }).then(async res => {
+        this.insOrder = res.data.insOrder;
+        this.componentData0.entity.insOrderId = val;
+        this.urgentList.forEach(m => {
+          if (m.value == this.insOrder.type) {
+            this.insOrder.typeName = m.label
+          }
+        })
+        if(!res.data.sampleProduct||res.data.sampleProduct.length==0){
+          return this.$message.error('璇ヤ换鍔℃病鏈夋牱鍝佷俊鎭�')
+        }
+        // 璧嬪�煎綋鍓嶆牱鍝佸垪琛�
+        this.sampleProduct = res.data.sampleProduct
+        this.currentSample = this.HaveJson(this.sampleProduct[0])
+        let insProduct = this.HaveJson(this.currentSample.insProduct)
+        // 娓╁害銆佹箍搴﹁祴鍊�
+        this.otherForm = {
+          temperature:this.insOrder.temperature?this.insOrder.temperature:null,
+          humidity:this.insOrder.humidity?this.insOrder.humidity:null,
+        }
+        if (this.typeSource == '1') {
+          this.retestTag = '1'
+        }
+        this.getEquipOptions(1)
+        // 鑾峰彇褰撳墠鏍峰搧鐨勬楠岄」
+        let list = await this.getCurrentProduct(this.currentSample.id,0)
+        if (list === undefined) {
+          this.$message.warning('鏆傛棤涓嶅悎鏍煎娴嬫暟鎹�')
+          this.$emit('closeUnPassCheckDialog')
+          return
+        }
+        this.currentSample.insProduct = this.HaveJson(list)
+        // 鍒濆鍖栦紶閫掑埌鍚庣鐨勫弬鏁�
+        this.param = {}
+        this.changeType = 0;
+        this.currentSample.insProduct.forEach(a => {
+          // 鏄惁涓烘垚鍝佺數缂嗕笅鐨勬澗濂楃椤圭洰锛屼笉鏄垯鎵ц鍒濆鍖�
+          if(this.handleCasing(a.inspectionItem)){
+            this.param[a.id] = {
+              insValue: [],
+              comValue: [],
+              resValue: null,
+              equipValue: [],
+              equipName: [],
+              insResult: null
+            }
+          }
+        })
+        await this.determineWhetherToCollectData()//鏄惁闇�瑕佹暟閲�
+        if (this.currentSample.index == undefined) this.currentSample['index'] = 1
+        let bushing = this.currentSample.bushing
+        this.getTableLists();//澶勭悊妯℃澘鍒楄〃淇℃伅
+        this.loading = false
+
+      })
+    },
+    // 鐩戝惉褰撳墠妯℃澘鍙樺寲
+    currentTable(val1, val0) {
+      if (val0 != null && val1 != val0) {
+        if(this.changeType&&this.changeType>0){
+          // 濡傛灉鏄厜绾ゃ�佸厜绾ゅ甫锛屽垯涓嶆墽琛屼笅闈㈡搷浣�
+          return
+        }
+        this.tableLists.forEach(async (m, i) => {
+          if (m.templateId == val1) {
+            let list = await this.getCurrentProduct(this.currentSample.id,0)
+            this.currentSample.insProduct = this.HaveJson(list)//璧嬪�煎綋鍓嶆牱鍝佺殑妫�楠岄」
+            this.param = {}//鍒濆鍖栦紶鍒板悗绔殑鍙傛暟
+            this.currentSample.insProduct.forEach((a, j) => {
+              if(this.handleCasing(a.inspectionItem)){
+                this.param[a.id] = {
+                  insValue: [],
+                  comValue: [],
+                  resValue: null,
+                  equipValue: [],
+                  equipName: [],
+                  insResult: null
+                }
+              }
+            })
+            // 鍘婚噸妯℃澘锛岃繑鍥炴湁鍑犱釜妯℃澘
+            const mySet1 = new Set();
+            this.tableLists = this.currentSample.insProduct.filter(m => {
+              let num0 = mySet1.size;
+              if (m.templateId != null&&m.template != null) {
+                try {
+                  mySet1.add(JSON.stringify({
+                    template: m.template,
+                    templateId: m.templateId
+                  }))
+                } catch (error) {
+                  console.log(222,error);
+                }
+              }
+              let num1 = mySet1.size;
+              if (num1 > num0) {
+                return m
+              }
+            });
+            if (this.tableLists && this.tableLists.length > 0) {
+              this.tableList = null;
+              this.tableList = this.tableLists.filter(m => m.templateId == val1)
+              // 瀵规ā鏉胯繘琛屽鐞�
+              this.handleTableData()
+            }
+          }
+        })
+      }
+    },
+    // 鐗规畩妫�楠岄」--鐩戝惉璁惧淇℃伅鏀瑰彉
+    equipForm:{
+      deep:true,
+      handler(val){
+        if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='娓╁害寰幆妫�楠屽師濮嬭褰�'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('鐑惊鐜�')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('娓╁崌璇曢獙'))&&this.equipOptions&&this.equipOptions.length>0){
+          // 鍒濆鍖栬澶囦俊鎭�
+          this.param[this.currentSample.insProduct[0].id].equipValue = []
+          this.param[this.currentSample.insProduct[0].id].equipName = []
+          if(this.equipForm.code0){
+            // 璧嬪�肩涓�涓澶囩殑淇℃伅
+            this.equipForm.value0 = this.equipOptions.find(m=>m.value==this.equipForm.code0).label
+            this.param[this.currentSample.insProduct[0].id].equipValue.push({
+              i:this.currentSample.insProduct[0].id,
+              v:{
+                v:this.equipForm.code0
+              }
+            })
+            this.param[this.currentSample.insProduct[0].id].equipName.push({
+              i:this.currentSample.insProduct[0].id,
+              v:{
+                v:this.equipForm.value0
+              }
+            })
+          }
+          if(this.equipForm.code1){
+            // 璧嬪�肩浜屼釜璁惧鐨勪俊鎭�
+            this.equipForm.value1 = this.equipOptions.find(m=>m.value==this.equipForm.code1).label
+            this.param[this.currentSample.insProduct[0].id].equipValue.push({
+              i:this.currentSample.insProduct[0].id,
+              v:{
+                v:this.equipForm.code1
+              }
+            })
+            this.param[this.currentSample.insProduct[0].id].equipName.push({
+              i:this.currentSample.insProduct[0].id,
+              v:{
+                v:this.equipForm.value1
+              }
+            })
+          }
+          // 淇濆瓨鏁版嵁
+          this.saveInsContext()
+        }
+      }
+    },
+  },
+  beforeDestroy() {
+    // 鍦ㄧ粍浠堕攢姣佸墠纭繚鍋滄 Worker锛岄伩鍏嶅唴瀛樻硠婕�
+    this.stopWorker();
+  },
+  methods: {
+    closeAddVerifyDia () {
+      this.addCheck = false
+      this.checkUser = ''
+    },
+    // 鍏抽棴涓嶅悎鏍煎鐞嗗脊妗�
+    resetForm () {
+      this.$refs.unPassDialog.$refs['unPassForm'].resetFields();
+      this.unPassDialog = false
+    },
+    handleDataAcquisition(data){
+      // 鏄惁鍙互缂栬緫鏁伴噰鏁版嵁
+      if(this.dataAcquisitionEidtAble){
+        this.getDataType = 1;
+      }else{
+        this.getDataType = 2;
+      }
+      this.dataAcquisitionInfo = {}
+      this.getData = []
+      for (let i in data){
+        let obj = {
+          faName:i,
+          child:[]
+        }
+        // 寰幆鏁伴噰鏁版嵁
+        for(let j in data[i]){
+          // 鎷兼帴瀛楃涓�  妫�楠岄」+妫�楠屽瓙椤�
+          let str0 = ''
+          if(i==j){
+            str0 = i+','
+          }else{
+            str0 = i+','+j
+          }
+          if(j!='frequency'&&data[i][j]&&(!data[i][j].result||typeof data[i][j].result == 'string')){
+            // 澶勭悊鏁伴噰淇℃伅鏍煎紡
+            this.dataAcquisitionInfo[str0] = {
+              value:data[i][j].result,
+              frequency:data[i].frequency
+            }
+            let list = this.tableList[0].arr
+            // 寰幆椤甸潰鍒楄〃淇℃伅锛屽垽鏂暟閲囨暟鎹搴旈〉闈㈠垪琛ㄤ俊鎭殑妫�楠岄」鏄摢涓紝骞剁粰褰撳墠妫�楠岄」缁戝畾璁惧淇℃伅
+            list.forEach((item,index)=>{
+              let num0 = 0;
+              let str = ''
+              item.forEach(m=>{
+                if(m.v.ps&&(m.v.ps.value=='妫�楠屽瓙椤�'||m.v.ps.value=='妫�楠岄」')){
+                  if(m.v.ps&&m.v.ps.value=='妫�楠岄」'){
+                    if(num0==0){
+                      str = m.v.v+','
+                      num0++
+                    }
+                  }
+                  if(m.v.ps&&m.v.ps.value=='妫�楠屽瓙椤�'){
+                    if(num0==1){
+                      str = str+m.v.v
+                    }
+                  }
+                }
+                // 缁戝畾璁惧淇℃伅
+                if(data[i][j].equipName&&data[i][j].equipValue&&m.v&&m.v.ps&&m.v.ps.value=='璁惧鍚嶇О'&&str0==str){
+                  if(!m.v.v){
+                    this.changeEquip(data[i][j].equipValue,m,data[i][j].equipName)
+                  }
+                }
+              })
+            })
+          }else if(j!='frequency'&&data[i][j]&&Array.isArray(data[i][j].result)){
+            // 濡傛灉杩斿洖鐨勬暟閲囨暟鎹槸鏁扮粍锛屽垯澶勭悊鏁扮粍
+            // 浠ヤ笅閫昏緫涓鸿幏鍙栨瘡涓楠岄」鍙緭鍏ョ殑妫�楠屽�肩殑鏈�澶т釜鏁�
+            let str0 = ''
+            if(i==j){
+              str0 = i+','
+            }else{
+              str0 = i+','+j
+            }
+            let list = this.tableList[0].arr
+            let maxNum = 0
+            list.forEach((item,index)=>{
+              let num0 = 0;
+              let str = ''
+              item.forEach(m=>{
+                if(m.v.ps&&(m.v.ps.value=='妫�楠屽瓙椤�'||m.v.ps.value=='妫�楠岄」')){
+                  if(m.v.ps&&m.v.ps.value=='妫�楠岄」'){
+                    if(num0==0){
+                      str = m.v.v+','
+                      num0++
+                    }
+                  }
+                  if(m.v.ps&&m.v.ps.value=='妫�楠屽瓙椤�'){
+                    if(num0==1){
+                      str = str+m.v.v
+                    }
+                  }
+                  let num = 0;
+                  list[index].forEach(n=>{
+                    if(n.v.ps&&n.v.ps.value&&typeof n.v.ps.value == 'string'&&n.v.ps.value.includes('妫�楠屽��')){
+                      num++
+                    }
+                  })
+                  if(str0==str){
+                    maxNum = num
+                  }
+                }
+                // 缁戝畾璁惧
+                if(data[i][j].equipName&&data[i][j].equipValue&&m.v&&m.v.ps&&m.v.ps.value=='璁惧鍚嶇О'&&str0==str){
+                  if(!m.v.v){
+                    this.changeEquip(data[i][j].equipValue,m,data[i][j].equipName)
+                  }
+                }
+              })
+            })
+            // 鑾峰彇鍒版渶澶ф楠屽�艰緭鍏ヤ釜鏁板悗閲嶇粍鏁版嵁
+            let obj0 = {
+              name:j,
+              arr:data[i][j].result,
+              maxNum:maxNum,
+              value:[]
+            }
+            // 濡傛灉鏁伴噰杩斿洖鐨勬暟缁勯暱搴﹀ぇ浜庢渶澶ц緭鍏ヤ釜鏁帮紝鍒欏皢鏁伴噰鏁版嵁鍦ㄥ脊妗嗕腑灞曠ず锛岀敤鎴烽�夋嫨闇�瑕佹墜鍔ㄩ�夋嫨鏁伴噰鐨勪俊鎭�
+            if(data[i][j].result&&Array.isArray(data[i][j].result)&&data[i][j].result.length>maxNum){
+              obj.child.push(obj0)
+            }else{
+              this.dataAcquisitionInfo[str0] = {
+                value:data[i][j].result
+              }
+            }
+          }
+        }
+        if(obj.child.length>0){
+          this.getData.push(obj)
+        }
+      }
+      // 濡傛灉瀛樺湪鏁伴噰杩斿洖鐨勬暟缁勯暱搴﹀ぇ浜庢渶澶ц緭鍏ヤ釜鏁帮紝鍒欏脊鍑哄脊妗嗛�夋嫨
+      if(this.getData.length>0){
+        this.dataGetDia = true
+        this.getDataIndex = []
+      }else{
+        // 濡傛灉閮戒笉瀛樺湪锛屽垯锛岃繘鍏ュ鐞嗘暟閲囩嚎绋嬮噷鍘诲鐞嗘暟鎹�
+        try {
+          // 鍚� Worker 鍙戦�佹秷鎭紝寮�濮嬪鐞嗛�昏緫
+          this.getDataIndexLoading = false
+          this.dataGetDia = false
+          this.getDataTypeId = ''
+          this.worker0.postMessage(JSON.stringify({
+            dataAcquisitionInfo: this.dataAcquisitionInfo,
+            list:this.tableList[0].arr
+          }));
+        } catch (error) {
+          console.log(1111,error);
+        }
+      }
+      // 鐩戝惉 Worker 杩斿洖鐨勭粨鏋�
+      this.worker0.onmessage = (event) => {
+        let result = JSON.parse(event.data);
+        if(result.method=='changeInput'){
+          // 閲囬泦鍚庣殑鏁版嵁锛岄渶瑕佽繘琛岃绠楃殑绾跨▼杩涜璁$畻
+          let {list,n} = result.value
+          this.$set(this.tableList[0],'arr',list)
+          this.changeInput('',`${this.currentSample.insProduct[0].templateId}-${n.r}-${n.c}-${n.i}`,n)
+        }else if(result.getDataTypeId){
+          // 鑾峰彇鍒版暟閲囨渶鍚庝竴椤癸紝妫�楠岄」鐨処D
+          this.getDataTypeId = result.getDataTypeId
+        }
+      };
+    },
+    // 濡傛灉瀛樺湪鏁伴噰杩斿洖鐨勬暟缁勯暱搴﹀ぇ浜庢渶澶ц緭鍏ヤ釜鏁帮紝鍒欏脊鍑哄脊妗嗛�夋嫨锛岃繖閲屾槸寮规鐨勬彁浜�
+    submitDataGet(){
+      if(this.getDataIndex.length==0){
+        this.$message.error('璇烽�夋嫨闇�瑕侀噰闆嗙殑鏁版嵁')
+        return
+      }
+      this.getDataIndex.sort((a, b) => a - b);
+      for (let i=0;i<this.getData.length;i++){
+        for(let j=0;j<this.getData[i].child.length;j++){
+          // 瀵圭敤鎴烽�夋嫨鐨勬暟閲囦俊鎭繘琛屽鐞嗭紝璧嬪��
+          let arr = []
+          for(let k=0;k<this.getDataIndex.length;k++){
+            arr.push( this.dataAcquisitionInfoNew[this.getData[i].faName][this.getData[i].child[j].name].result[this.getDataIndex[k]])
+          }
+          this.dataAcquisitionInfoNew[this.getData[i].faName][this.getData[i].child[j].name].result = arr
+        }
+      }
+      this.getDataIndexLoading = true
+      // 璧嬪�煎畬鎴愬悗闇�瑕佸啀娆¤繘鍏ュ鐞嗘暟閲囩嚎绋嬮噷鍘诲鐞嗘暟鎹�
+      this.handleDataAcquisition(this.dataAcquisitionInfoNew)
+    },
+    // 澶氱嚎绋�
+    startWorker() {
+      if (this.worker) {
+        this.stopWorker(); // 纭繚涔嬪墠鐨� Worker 宸插仠姝�
+      }
+      // 鍒涘缓 Worker 瀹炰緥
+      this.worker = new Worker('/static/js/worker.js');
+      if (this.worker0) {
+        this.stopWorker(); // 纭繚涔嬪墠鐨� Worker 宸插仠姝�
+      }
+      // 鍒涘缓 Worker 瀹炰緥
+      this.worker0 = new Worker('/static/js/worker0.js');
+    },
+    // 鍋滄澶氱嚎绋�
+    stopWorker() {
+      if (this.worker) {
+        this.worker.terminate();
+        this.worker = null;
+      }
+      if (this.worker0) {
+        this.worker0.terminate();
+        this.worker0 = null;
+      }
+    },
+    // 鏍规嵁绫诲瀷銆佷换鍔d銆佸疄楠屽鏉ヨ幏鍙栨牱鍝佺殑妫�楠岄」淇℃伅
+    async getCurrentProduct(id,type,cableTag){
+      this.tableLoading = true;
+      type = this.typeSource == '1' ? 5 : type
+      this.type = type
+      const params = {
+        id: id,
+        type: type,
+        laboratory: this.sonLaboratory,
+        retestTag: this.retestTag,
+        rawMaterialTag: this.rawMaterialTag,
+      }
+      let res = getInsProductUnqualifiedRetest(params)
+      if (res.code === 200 && res.data.length > 0) {
+        this.tableLoading = false;
+        this.scrollInit()
+        return res.data
+      }
+    },
+    // 鏉惧绠$殑鍒ゆ柇\濡傛灉changeType涓嶇瓑浜�3閭d箞椤甸潰涓嶅睍绀烘澗濂楃妫�楠岄」
+    handleCasing(inspectionItem){
+      if(this.changeType!=3){
+        if(inspectionItem.includes('鏉惧绠�')){
+          return false
+        }else{
+          return true
+        }
+      }else{
+        return true
+      }
+    },
+    async handleChangeCableTag(m,type, num, m2){
+      let cableTag = ''
+      if (num === 'cableTag') {
+        cableTag = m2
+      }
+      if (!m2) {
+        type = 0
+      }
+      this.changeType = type
+      if(m){
+        let list = await this.getCurrentProduct(m,type, cableTag)
+        if(list.length>0){
+          this.param = {}
+          list.forEach(a => {
+            this.param[a.id] = {
+              insValue: [],
+              comValue: [],
+              resValue: null,
+              equipValue: [],
+              equipName: [],
+              insResult: null
+            }
+          })
+          this.getTableLists0(list)
+          this.worker.postMessage(JSON.stringify({
+            type: 'saveData',
+            tableList:this.tableList,
+            param:this.param,
+            currentTable:this.currentTable,
+            bushing:m
+          }));
+        }else{
+          this.tableLists = []
+          this.tableList = []
+          this.$message.error('妫�楠岄」涓虹┖')
+        }
+      }
+    },
+    // 瀛楀吀鑾峰彇淇℃伅
+    getTypeDicts() {
+      this.getDicts("urgency_level").then((response) => {
+        this.urgentList = this.dictToValue(response.data);
+      });
+    },
+    // 瀛楀吀鑾峰彇淇℃伅
+    getInsStateDicts() {
+      this.getDicts("inspection_task_state").then((response) => {
+        this.typeList = this.dictToValue(response.data);
+      })
+    },
+    // 瀛楀吀鑾峰彇淇℃伅
+    getComparisonList() {
+      this.getDicts("coordinate_transformation").then((response) => {
+        this.comparisonList = this.dictToValue(response.data);
+      });
+    },
+    // 澶勭悊椤甸潰鍒楄〃鏁版嵁--鍘婚噸,鐢熸垚妫�楠屾ā鏉垮垏鎹㈠垪琛�
+    getTableLists() {
+      const mySet1 = new Set();
+      this.tableLists = this.currentSample.insProduct.filter(m => {
+        let num0 = mySet1.size;
+        if (m.templateId != null&&m.template != null) {
+          try {
+            mySet1.add(JSON.stringify({
+              template: m.template,
+              templateId: m.templateId
+            }))
+          } catch (error) {
+            console.log(222,error);
+          }
+        }
+        let num1 = mySet1.size;
+        if (num1 > num0) {
+          return m
+        }
+      });
+      if (this.tableLists && this.tableLists.length > 0) {
+        this.tableList = null;
+        this.tableList = [this.tableLists[0]]
+        this.currentTable = this.tableLists[0].templateId;
+        // 澶勭悊椤甸潰鍒楄〃鏁版嵁
+        this.handleTableData()
+      }
+    },
+    // 鍏夌氦閰嶇疆鐩稿叧妯℃澘table鍒楄〃
+    getTableLists0(list){
+      const mySet1 = new Set();
+      this.tableLists = list.filter(m => {
+        let num0 = mySet1.size;
+        if (m.templateId != null&&m.template != null) {
+          try {
+            mySet1.add(JSON.stringify({
+              template: m.template,
+              templateId: m.templateId
+            }))
+          } catch (error) {
+            console.log(333,error);
+          }
+        }
+        let num1 = mySet1.size;
+        if (num1 > num0) {
+          return m
+        }
+      });
+      if (this.tableLists && this.tableLists.length > 0) {
+        this.tableList = null;
+        this.tableList = [this.tableLists[0]]
+        this.currentTable = this.tableLists[0].templateId;
+        this.currentSample.insProduct = this.HaveJson(list)
+        // 澶勭悊椤甸潰鍒楄〃鏁版嵁
+        this.handleTableData()
+      }
+    },
+    // 澶勭悊椤甸潰鍒楄〃鏁版嵁
+    handleTableData() {
+      console.log("ttt-------->>>>",this.tableList);
+      this.excelMethodList = []//excel鍑芥暟鍒楄〃
+      this.widthList = this.tableList[0].style.columnlen;//椤甸潰瀹藉害--鏍规嵁妯℃澘鏉ョ殑
+      // 娓╁害寰幆妫�楠屽師濮嬭褰�--寮�濮�
+      if(this.tableLists.find(m=>m.templateId==this.currentTable)&&this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='娓╁害寰幆妫�楠屽師濮嬭褰�'){
+        // 瀵硅姹傚�艰繘琛屾媶鍒嗗鐞�,杩涜�屽緱鍑洪〉闈㈠唴瀹�
+        let ask = this.currentSample.insProduct[0].ask
+        let askList = ask.split(';')
+        // 鑾峰彇寰幆娆℃暟
+        this.numOptions = []
+        for (let i = 1; i <= askList[askList.length-1]; i++) {
+          this.numOptions.push({
+            value:i,
+            label:i
+          })
+        }
+        let mySet1 = new Set();
+        askList.forEach((m,i) => {
+          if(i<askList.length-1){
+            mySet1.add(m.split(',')[0].replace('鈩�',''))
+          }
+        })
+        // 鑾峰彇娓╁害鐐瑰垪琛�
+        this.temperatureOptions = []
+        mySet1.forEach(m => {
+          this.temperatureOptions.push({
+            value:String(m),
+            label:m
+          })
+        })
+      }
+      // 娓╁害寰幆妫�楠屽師濮嬭褰�---缁撴潫
+      // 鐑惊鐜楠屽師濮嬭褰�---寮�濮�
+      if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('鐑惊鐜�')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('娓╁崌璇曢獙'))){
+        // 鏍规嵁瑕佹眰鍊兼媶鍒嗘暟鎹�,寰楀埌椤甸潰娓叉煋鐨勪俊鎭�
+        let ask = this.currentSample.insProduct[0].ask
+        let askList = ask.split(';')
+        this.thermalCyclingInfo.max = Number(askList[askList.length-1])
+        let arr = []
+        for (let i = 0; i < askList.length-1; i++) {
+          arr.push(askList[i].split(',')[0])
+        }
+        arr = arr.map(item=>{
+          let obj = {}
+          obj.name = item;
+          if(obj.insResult==null||obj.insResult==undefined){
+            obj.arr = [
+              {
+                value0:'',
+                value1:'',
+              }
+            ]
+            obj.insResult = null;
+          }
+          return obj
+        })
+        this.thermalCyclingInfo.arr = arr;
+      }
+      // 鐑惊鐜楠屽師濮嬭褰�---缁撴潫
+      // 鏈寰幆涓昏鍋氶〉闈㈡覆鏌撳眰闈㈢殑澶勭悊--鍗曞厓鏍煎悎骞堕澶勭悊
+      this.tableList.forEach(a => {
+        let mcList = []
+        a.template.forEach(b => {
+          if (b.v.mc != undefined && b.v.mc.cs != undefined && b.v.mc.rs != undefined) {
+            mcList.push(b)
+          }
+        })
+        let count = 0
+        mcList.forEach(b => {
+          for (var c in a.template) {
+            for (var i = 0; i < b.v.mc.cs; i++) {
+              for (var i2 = 0; i2 < b.v.mc.rs; i2++) {
+                if (a.template[c].c === b.c + i && a.template[c].r === b.r + i2) {
+                  let bb = this.HaveJson(b)
+                  a.template[c].v.v = bb.v.v
+                  a.template[c].v.ps = bb.v.ps
+                  a.template[c].v.fc = bb.v.fc
+                  a.template[c].v.fs = bb.v.fs
+                  a.template[c].v.ht = bb.v.ht
+                  a.template[c].mc = count
+                  break
+                }
+              }
+            }
+          }
+          count++
+        })
+      })
+      // 鏈寰幆涓昏鏄帶鍒跺悎骞�,浠ュ強鎺у埗妫�楠岄」淇℃伅鏄惁灞曠ず鍑烘潵,浠ヤ究鍚庣画妫�楠�
+      this.tableList.forEach(a => {
+        let dels = new Set()//闇�瑕佸垹闄ょ殑琛�
+        let ids = []//鎵�鏈夋楠岄」鐨刬d
+        let set3 = new Set()
+        a.template.forEach(b => {
+          let size1 = set3.size
+          let size2 = set3.add(b.r).size
+          if (size1 < size2) {
+            let str = ''
+            let str2 = ''
+            let unit2 = ''
+            let count4 = 0
+            let isThree = 0
+            a.template.forEach(c => {
+              // 鑾峰彇鍒� 妫�楠岄」鍒嗙被+妫�楠岄」+妫�楠屽瓙椤圭殑鎷兼帴,濡傛灉妯℃澘閲岀殑淇℃伅璺熸帴鍙h繑鍥炵殑妫�楠岄」淇℃伅鑳藉鍖归厤鍒欏睍绀哄嚭鏉�
+              if (b.r === c.r) {
+                if(c.v.ps != undefined && c.v.ps.value === '妫�楠岄」鍒嗙被'&&count4 === 0){
+                  // 涓夌骇鍒嗙被
+                  isThree = 1
+                }else if(c.v.ps != undefined && c.v.ps.value === '妫�楠岄」'&&count4 === 0){
+                  // 浜岀骇鍒嗙被
+                  isThree = 0
+                }
+                if(isThree==0){
+                  if (c.v.ps != undefined && c.v.ps.value === '妫�楠岄」') {
+                    if (count4 === 0) {
+                      str += c.v.v
+                      count4 += 1
+                    }
+                  } else if (c.v.ps != undefined && c.v.ps.value === '妫�楠屽瓙椤�') {
+                    if (count4 === 1) {
+                      str += c.v.v
+                      count4 += 1
+                    }
+                  }
+                }else if(isThree==1){
+                  if (c.v.ps != undefined && c.v.ps.value === '妫�楠岄」鍒嗙被') {
+                    if (count4 === 0) {
+                      str += c.v.v
+                      count4 += 1
+                    }
+                  }else if (c.v.ps != undefined && c.v.ps.value === '妫�楠岄」') {
+                    if (count4 === 1) {
+                      str += c.v.v
+                      count4 += 1
+                    }
+                  } else if (c.v.ps != undefined && c.v.ps.value === '妫�楠屽瓙椤�') {
+                    if (count4 === 2) {
+                      str += c.v.v
+                      count4 += 1
+                    }
+                  }
+                }
+                if (str === '鏈烘鎬ц兘骞叉�佹媺浼稿己搴�(绾靛悜)') {
+                  if (c.v.ps != undefined && c.v.ps.value === '鍗曚綅') {
+                    str2 = str + c.v.v
+                    unit2 = c.v.v
+
+                  }
+                }
+              }
+            })
+            if (str != '') {
+              let count2 = 0
+              for (let i in this.currentSample.insProduct) {
+                let inspectionItemClass = this.currentSample.insProduct[i].inspectionItemClass==null||this.currentSample.insProduct[i].inspectionItemClass==undefined?'':this.currentSample.insProduct[i].inspectionItemClass
+                let inspectionItem = this.currentSample.insProduct[i].inspectionItem==null||this.currentSample.insProduct[i].inspectionItem==undefined?'':this.currentSample.insProduct[i].inspectionItem
+                let inspectionItemSubclass = this.currentSample.insProduct[i].inspectionItemSubclass==null||this.currentSample.insProduct[i].inspectionItemSubclass==undefined?'':this.currentSample.insProduct[i].inspectionItemSubclass
+                if(inspectionItemSubclass === '骞叉�佹媺浼稿己搴�(绾靛悜)') {
+                  // 妫�楠屽瓙椤逛负'骞叉�佹媺浼稿己搴�(绾靛悜)'鏃讹紝妯$増閲屾槸涓や釜璁$畻鍊煎搴旂浉鍚岀殑妫�楠屽�煎苟涓旇绠楁柟寮忎笉鍚岋紝瑕佹牴鎹浉鍚岀殑'鍗曚綅'鍋氱壒娈婄殑娓叉煋
+                  const unit = this.currentSample.insProduct[i].unit
+                  if ((this.currentSample.insProduct[i].templateId === a.templateId && inspectionItemClass +inspectionItem+inspectionItemSubclass+unit === str2) || (this.currentSample.insProduct[i].templateId === a.templateId && !unit2.includes('/')&& inspectionItemClass +inspectionItem+inspectionItemSubclass === str)) {
+                    ids.push({
+                      r: b.r,
+                      id: this.currentSample.insProduct[i].id,
+                      product: this.currentSample.insProduct[i]
+                    })
+                    break
+                  }
+                } else {
+                  // 濡傛灉鐩哥瓑,閭d箞璇存槑鎵惧埌浜�,骞朵笖鎶奿d瀛樿捣鏉�,鍚庣画妫�楠岄」涔熶細鍦ㄩ〉闈腑鏄剧ず鍑烘潵
+                  if (this.currentSample.insProduct[i].templateId === a.templateId && inspectionItemClass +inspectionItem+inspectionItemSubclass === str) {
+                    ids.push({
+                      r: b.r,
+                      id: this.currentSample.insProduct[i].id,
+                      product: this.currentSample.insProduct[i]
+                    })
+                    break
+                  }
+                }
+                count2++
+              }
+              if (count2 == this.currentSample.insProduct.length) {
+                dels.add(b.r)
+              }
+            }
+          }
+        })
+        // 鎿嶄綔鍒犻櫎
+        dels.forEach(del => {
+          for (let b = 0; b < a.template.length; b++) {
+            if (a.template[b].r === del) {
+              a.template.splice(b, 1)
+              b -= 1
+            }
+          }
+        })
+        // 鎿嶄綔璧嬪��--涓昏璧嬪�煎崟浣�,璇曢獙鏂规硶绛変俊鎭�
+        ids.forEach(id => {
+          for (let b = 0; b < a.template.length; b++) {
+            if (a.template[b].r === id.r) {
+              a.template[b].i = id.id
+              if (a.template[b].v.ps != undefined && a.template[b].v.ps.value === '鍗曚綅') {
+                a.template[b].v.v = id.product.unit
+              }
+              if (a.template[b].v.ps != undefined && (a.template[b].v.ps.value === '璇曢獙鏂规硶' || a.template[b].v
+                .ps.value === '妫�娴嬫柟娉�')) {
+                a.template[b].v.v = id.product.methodS
+              }
+            }
+          }
+        })
+        let set2 = new Set()
+        // 鍚堝苟鐨勬暟鎹鐞�,cs  rs  浠h〃鍚堝苟鐨勬暟閲�
+        a.template.forEach(b => {
+          let size1 = set2.size
+          let size2 = set2.add(b.mc).size
+          if (b.mc != undefined && size1 < size2) {
+            b.v.mc.rs = 0
+            b.v.mc.cs = 0
+            a.template.forEach(c => {
+              if (b.mc === c.mc) {
+                if (b.r === c.r) {
+                  b.v.mc.cs += 1
+                }
+                if (b.c === c.c) {
+                  b.v.mc.rs += 1
+                }
+              }
+            })
+          }
+        })
+      })
+      // 鏈寰幆涓昏鏄鍚庣浼犲弬杩涜鍒濆鍖�,鏍峰紡閫昏緫淇敼
+      this.tableList.forEach(a => {
+        let arrs = []
+        let set = new Set()
+        let count1 = 0
+        let conclusionList = []; //缁撹鍒楄〃
+        let finalList = []; //鏈�缁堝�煎垪琛�
+        // 缁撹涓庢渶缁堝�煎湪杩欓噷涓�涓�瀵瑰簲,浠ヤ笅涓や釜鍒楄〃闀垮害鑲畾鏄竴鏍风殑,濡傛灉鏈変笉涓�鏍�,閭d箞澶氬崐鏄ā鏉块厤缃緱闂
+        conclusionList = a.template.filter(n => n.v.ps != undefined && n.v.ps.value === '缁撹')//缁撹鍒楄〃
+        finalList = a.template.filter(n => n.v.ps != undefined && n.v.ps.value === '鏈�缁堝��')//鏈�缁堝�煎垪琛�
+        a.template.forEach( b => {
+          if (b.v.ps != undefined && b.v.ps.value === '搴忓彿' && (b.v.mc == undefined || Object.keys(b.v.mc).length === 4)) {
+            // 瀵瑰簭鍙疯繘琛岃祴鍊�
+            count1++
+            b.v.v = count1
+          }
+          if (b.v.ps != undefined && b.v.ps.value === '瑕佹眰鍊�') {
+            // 瀵硅姹傚�艰繘琛岃祴鍊�
+            b.v.v = this.getAsk(b.i)
+          }
+          // 瀵归〉闈㈢殑鍜岀粰鍚庣浼犲弬鐨勬楠屽��,璁$畻鍊�,璁惧缂栫爜,璁惧鍚嶇О,鏈�缁堝��,缁撹杩涜鍒濆鍖�
+          if (b.v.ps != undefined && typeof b.v.ps.value ==='string'&&b.v.ps.value.includes('妫�楠屽��')) {
+            this.$set(b.v, 'v','' )
+            // b.v.v = ''
+            b.u = ''
+            b.i && this.param[b.i]&&this.param[b.i].insValue.push(b)
+          }
+          if (b.v.ps != undefined && b.v.ps.value === '璁$畻鍊�') {
+            this.$set(b.v, 'v','' )
+            // b.v.v = ''
+            b.i && this.param[b.i]&&this.param[b.i].comValue.push(b)
+          }
+          if (b.v.ps != undefined && b.v.ps.value === '璁惧缂栫爜') {
+            // b.v.v = ''
+            this.$set(b.v, 'v', '' )
+            b.i && this.param[b.i]&&this.param[b.i].equipValue.push(b)
+          }
+          if (b.v.ps != undefined && b.v.ps.value === '璁惧鍚嶇О') {
+            this.$set(b.v, 'v', '' )
+            // b.v.v = ''
+            b.i && this.param[b.i]&&this.param[b.i].equipName.push(b)
+          }
+          if (b.v.ps != undefined && b.v.ps.value === '鏈�缁堝��') {
+            // b.v.v = ''
+            this.$set(b.v, 'v', '' )
+            if (b.i !== undefined&&this.param[b.i]&&!this.param[b.i].resValue) {
+              this.param[b.i].resValue = b
+            }
+          }
+          if (b.v.ps != undefined && b.v.ps.value === '缁撹') {
+            if (b.i !== undefined&&this.param[b.i]&&!this.param[b.i].insResult) {
+              this.param[b.i].insResult = b
+              conclusionList.forEach((n, i) => {
+                if (n.r == b.r && n.c == b.c) {
+                  b.v.f =
+                    `(${this.comparisonList.find(j=>j.value==(finalList[i].c)).label}${finalList[i].r+1})`
+
+                }
+              })
+            }
+          }
+          set.add(b.r)
+          // 濡傛灉妯℃澘鍒楄〃鐨勫嚱鏁板瓨鍦�,閭d箞鍔犲叆鍒癳xcel鍑芥暟鍒楄〃閲岄潰
+          if (b.v.f) {
+            this.excelMethodList.push(b)
+          }
+        })
+        // 浠ヤ笅鏄牱寮忓鐞嗛�昏緫
+        set = Array.sort(set)
+        set.forEach(b => {
+          let arr = []
+          a.template.forEach(c => {
+            if (c.r === b) {
+              arr.push(c)
+            }
+          })
+          arrs.push(arr)
+        })
+        a.arr = arrs
+        this.tableWidth = 0
+        for (let i = 0; i < arrs[0].length; i++) {
+          this.tableWidth += (a.style.columnlen[i] === undefined ? 100 : a.style.columnlen[i])
+        }
+      })
+      // 鏈寰幆涓昏鏄椤甸潰鍙婂悗绔紶鍙傝繘琛屽垵濮嬪寲璧嬪��
+      this.currentSample.insProduct.forEach(async a => {
+        try {
+          // 璁$畻鍊艰祴鍊�
+          let comValue = JSON.parse(a.insProductResult.comValue)
+          for (var i = 0; i < comValue.length; i++) {
+            this.param[a.id].comValue[i].v.v = this.toFixed(comValue[i].v,this.param[a.id].comValue[i].v.ct)
+          }
+        } catch (e) {}
+        try {
+          // 妫�楠屽�艰祴鍊�
+          let insValue = JSON.parse(a.insProductResult.insValue)
+          for (let i = 0; i < insValue.length; i++) {
+            if(this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r)){
+              this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r).v.v = this.toFixed(insValue[i].v,this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r).v.ct)
+              this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r).u = insValue[i].u
+              // this.param[a.id].insValue[i].v.v = insValue[i].v
+              // this.param[a.id].insValue[i].u = insValue[i].u
+            }
+          }
+        } catch (e) {}
+        try {
+          // 璁惧缂栧彿璧嬪��
+          let equipValue = JSON.parse(a.insProductResult.equipValue)
+          if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='娓╁害寰幆妫�楠屽師濮嬭褰�'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('鐑惊鐜�')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('娓╁崌璇曢獙'))){
+            // 鐗规畩椤圭洰鍒濆鍖�
+            this.param[a.id].equipValue = []
+            for (let i = 0; i < equipValue.length; i++) {
+              this.param[a.id].equipValue.push({
+                v:{
+                  v:''
+                }
+              })
+            }
+          }
+          for (let i = 0; i < equipValue.length; i++) {
+            if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='娓╁害寰幆妫�楠屽師濮嬭褰�'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('鐑惊鐜�')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('娓╁崌璇曢獙'))){
+              // 娓╁害寰幆璁惧璧嬪��
+              this.$set(this.equipForm,`code`+i,equipValue[i].v)
+              this.param[a.id].equipValue[i].v.v = equipValue[i].v
+            }else{
+              // 鏅�氳澶囪祴鍊�
+              this.param[a.id].equipValue[i].v.v = equipValue[i].v
+            }
+          }
+        } catch (e) {}
+        try {
+          // 璁惧鍚嶇О璧嬪��
+          let equipName = JSON.parse(a.insProductResult.equipName)
+          for (let i = 0; i < equipName.length; i++) {
+            equipName[i].v !== '' && equipName[i].v.map(val => {
+              const index = this.equipOptions.findIndex(item => item.value === val)
+              if (index > -1) {
+                // 鏍规嵁璁惧缂栫爜杞崲涓虹浉搴旂殑璁惧鍚嶇О
+                val = this.equipOptions[index].deviceName
+              }
+            })
+          }
+          if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='娓╁害寰幆妫�楠屽師濮嬭褰�'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('鐑惊鐜�')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('娓╁崌璇曢獙'))){
+            // 璁惧鍚嶇О鍒濆鍖�
+            this.param[a.id].equipName = []
+            for (let i = 0; i < equipName.length; i++) {
+              this.param[a.id].equipName.push({
+                v:{
+                  v:''
+                }
+              })
+            }
+          }
+          for (let i = 0; i < equipName.length; i++) {
+            if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='娓╁害寰幆妫�楠屽師濮嬭褰�'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('鐑惊鐜�')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('娓╁崌璇曢獙'))){
+              // 娓╁害寰幆璧嬪��
+              this.$set(this.equipForm,`value`+i,equipName[i].v)
+              this.param[a.id].equipName[i].v.v = equipName[i].v
+            }else{
+              // 鏅�氳澶囧悕绉拌祴鍊�
+              this.param[a.id].equipName[i].v.v = equipName[i].v
+            }
+          }
+        } catch (e) {
+          console.log('璁惧鍚嶇О璧嬪��----', e)
+        }
+        try {
+          // 鏈�缁堝�艰祴鍊�
+          this.param[a.id].resValue.v.v = this.toFixed(a.lastValue,this.param[a.id].resValue.v.ct)
+          // 缁撹璧嬪��
+          this.param[a.id].insResult.v.v = a.insResult
+        } catch (e) {}
+      })
+      // 瀵筫xcel鍑芥暟杩涜澶勭悊
+      this.handleExcelMethod()
+    },
+    // 妫�楠屽�艰緭鍏ュ悗瑙﹀彂鐨勫嚱鏁�
+    changeInput(m, code, n,getDataType) {
+      // 涓烘暟閲囧畾涔変竴涓�昏緫鍙傛暟
+      if(getDataType=='getDataType'){
+        this.getDataType = 2;
+      }
+      let currentInsItemId = null//褰撳墠妫�楠岄」id
+      if (n) {
+        currentInsItemId = JSON.parse(JSON.stringify(n.i))
+        // 瀹氫箟涓�涓嚱鏁版潵楠岃瘉鍒嗘暟鏄惁鏈夋晥
+        if (typeof n.v.v == 'string') {
+          function isValidFraction(fraction) {
+            const [numerator, denominator] = fraction.split('/'); // 鍒嗗瓙鍜屽垎姣�
+            return !(!denominator || !numerator);
+          }
+          const isTrue = isValidFraction(n.v.v)
+          if (!isTrue) {
+            n.v.v = n.v.v.replace('/', '')
+          }
+        }
+      }
+      try {
+        // 鍚� Worker 鍙戦�佹秷鎭紝寮�濮嬪鐞嗛�昏緫
+        this.worker.postMessage(JSON.stringify({
+          code: code,
+          tableList:this.tableList,
+          excelMethodList:this.excelMethodList,
+          comparisonList:this.comparisonList,
+          currentSample:this.currentSample,
+          PROJECT:this.PROJECT,
+          param:this.param,
+          currentTable:this.currentTable,
+          getDataTypeId:this.getDataTypeId,
+          modelType: this.sampleProduct[0].model,
+          currentInsItem: n
+        }));
+      } catch (error) {
+        console.log(444,error);
+      }
+
+      // 鐩戝惉 Worker 杩斿洖鐨勭粨鏋�
+      this.worker.onmessage = (event) => {
+        this.result = JSON.parse(event.data);
+        switch (this.result.method){
+          case 'saveInsContext':
+            console.log(`output->`,11111111111111)
+            this.$nextTick(()=>{
+              // this.$delete(this.tableList[0],'arr')
+              this.$set(this.tableList[0],'arr',this.result.value.tableList[0].arr)
+              this.param = this.result.value.param
+              if(this.result.value.currentInsItem){
+                currentInsItemId = this.result.value.currentInsItem.i
+              }
+              // 鐗规畩澶勭悊涓�涓嬬粨璁�,浼氭湁杩欑鐗规畩鎯呭喌
+              for (var i in this.param){
+                if(this.param[i].insResult&&this.param[i].insResult.v&&this.param[i].insResult.v.v){
+                  if(this.param[i].insResult.v.v=='鍚堟牸'){
+                    this.$set(this.param[i].insResult.v,'v',1)
+                  }else if(this.param[i].insResult.v.v=='涓嶅悎鏍�'){
+                    this.$set(this.param[i].insResult.v,'v',0)
+                  }
+                }
+              }
+            })
+            break;
+          case 'tableList':
+            this.$nextTick(()=>{
+              // 鏇存柊鏁版嵁
+              this.$delete(this.tableList[0],'arr')
+              this.$set(this.tableList[0],'arr',this.result.value[0].arr)
+              // this.param = this.result.value.param
+              if(this.result.value.currentInsItem){
+                currentInsItemId = this.result.value.currentInsItem.i
+              }
+            })
+            break;
+          case 'getCurrentInsProduct':
+            // 鏇存柊椤甸潰鏁版嵁
+            this.getCurrentInsProduct(this.result.value)
+            break;
+        }
+      };
+      // 淇濆瓨鏁版嵁
+      setTimeout(()=>{
+        this.saveInsContext(currentInsItemId)
+      },200)
+    },
+    // 鏄惁闇�瑕佹暟閲�
+    async determineWhetherToCollectData(){
+      let res = determineWhetherToCollectData({managementNumber: ''})
+      this.isGet =  res.data
+    },
+    // 鏍规嵁鍚庣浼犲弬鏇存柊椤甸潰鏁版嵁   param => this.tableList[0].insProductResult
+    getCurrentInsProduct(pId) {
+      if (!this.tableList[0].insProductResult) {
+        this.tableList[0].insProductResult = {}
+      }
+      for (let m in this.param[pId]) {
+        let value = this.param[pId][m]
+        switch (m) {
+          case 'comValue':
+            // 璧嬪�艰绠楀��
+            if (value && value.length > 0) {
+              this.tableList[0].insProductResult[m] = [];
+              value.forEach((a, i) => {
+                let obj = {
+                  v: a.v.v,
+                }
+                this.tableList[0].insProductResult[m].push(obj);
+              })
+              try {
+                this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
+              } catch (error) {
+                console.log(555,error);
+              }
+            }
+            break;
+          // 璧嬪�兼楠屽��
+          case 'insValue':
+            if (value && value.length > 0) {
+              this.tableList[0].insProductResult[m] = [];
+              value.forEach((a, i) => {
+                let obj = {
+                  v: a.v.v,
+                  u: a.u,
+                }
+                this.tableList[0].insProductResult[m].push(obj);
+              })
+              try {
+                this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
+              } catch (error) {
+                console.log(666,error);
+              }
+            }
+            break;
+          // 璧嬪�艰澶囩紪鍙�
+          case 'equipValue':
+            if (value && value.length > 0) {
+              this.tableList[0].insProductResult[m] = [];
+              value.forEach((a, i) => {
+                let obj = {
+                  v: a.v.v,
+                }
+                this.tableList[0].insProductResult[m].push(obj);
+              })
+              try {
+                this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
+              } catch (error) {
+                console.log(777,error);
+              }
+            }
+            break;
+          // 璧嬪�艰澶囧悕绉�
+          case 'equipName':
+            if (value && value.length > 0) {
+              this.tableList[0].insProductResult[m] = [];
+              value.forEach((a, i) => {
+                let obj = {
+                  v: a.v.v,
+                }
+                this.tableList[0].insProductResult[m].push(obj);
+              })
+              try {
+                this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
+              } catch (error) {
+                console.log(888,error);
+              }
+            }
+            break;
+          // 璧嬪�兼渶缁堝��
+          case 'resValue':
+            this.tableList[0].lastValue = value?value.v.v:''
+            break;
+          // 璧嬪�肩粨璁�
+          case 'insResult':
+            this.tableList[0].insResult = value?value.v.v:''
+            break;
+        }
+      }
+    },
+    // 瀵笶XCEL鍑芥暟杩涜澶勭悊
+    handleExcelMethod() {
+      if (this.excelMethodList.length > 0) {
+        this.excelMethodList.map(item => {
+          // 寰楀埌姣忎釜鍑芥暟鐨勫弬鏁板垪琛�
+          item.valueList = excelFunction.changeParameter(item.v.f);
+          return item;
+        })
+      }
+    },
+    getValue(v){
+      // 瀵归〉闈㈠睍绀烘暟鎹繘琛屽鐞�,@,浠h〃鎹㈣
+      let str = v.v?v.v:(v.v===0?v.v:(v.ct&&v.ct.s?v.ct.s.length>0&&v.ct.s[0].v.replace(new RegExp('\n', 'g'), '<br/>').replace(new RegExp('@', 'g'), '<br/>'):''))
+      // 瀵规暟鎹繚鐣欏皬鏁扮偣杩涜澶勭悊
+      if(v.ct&&v.ct.fa&&v.ct.fa.includes('.')&&str){
+        let num = 0
+        let str0 = v.ct.fa.split('.')[1]
+        num = str0.length
+        str = Number(str).toFixed(num)
+      }
+      if(v.v&&typeof v.v == 'string'&&v.v.includes('@')){
+        str = v.v.replace(new RegExp('@', 'g'), '<br/>')
+      }
+      return str
+    },
+    // 鑾峰彇褰撳墠杈撳叆妗嗙被鍨�
+    getInspectionValueType(id) {
+      for (var a in this.currentSample.insProduct) {
+        if (this.currentSample.insProduct[a].id == id) {
+          return this.currentSample.insProduct[a].inspectionValueType
+        }
+      }
+    },
+    // 鑾峰彇瑕佹眰鎻忚堪
+    getTell(id) {
+      for (var a in this.currentSample.insProduct) {
+        if (this.currentSample.insProduct[a].id == id) {
+          return this.currentSample.insProduct[a].tell
+        }
+      }
+    },
+    // 鍔ㄦ�佽幏鍙栧崟鍏冩牸瀹藉害
+    handleWidth(n) {
+      let sum = 0;
+      if (n.v.mc && n.v.mc.cs && n.v.mc.c != undefined) {
+        for (let i = 0; i < n.v.mc.cs; i++) {
+          let num = this.widthList[i + n.v.mc.c] ? this.widthList[i + n.v.mc.c] : 100
+          sum += num;
+        }
+      } else {
+        sum = this.widthList[n.c] ? this.widthList[n.c] : 100
+      }
+      return sum
+    },
+    // 瀵硅緭鍏ュ�艰繘琛屾牸寮忔牎楠�
+    handleInput (n) {
+      try {
+        n.v.v = n.v.v.replace(/[^\d.^e>\-/+]/g, '');
+        n.v.v = n.v.v.replace(/\.{2,}/g,"."); //鍙繚鐣欑涓�涓�. 娓呴櫎澶氫綑鐨�
+        n.v.v = n.v.v.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
+        n.v.v = n.v.v.replace(/\/{2,}/g,"/"); //鍙繚鐣欑涓�涓�/娓呴櫎澶氫綑鐨�
+        n.v.v = n.v.v.replace("/","$#$").replace(/\//g,"").replace("$#$","/");
+      } catch (error) {
+        console.log(error);
+      }
+
+    },
+    getInspectionItemType(id) {
+      for (var a in this.currentSample.insProduct) {
+        if (this.currentSample.insProduct[a].id == id) {
+          return this.currentSample.insProduct[a].inspectionItemType
+        }
+      }
+    },
+    // 鑾峰彇瑕佹眰鍊�
+    getAsk(id) {
+      for (var a in this.currentSample.insProduct) {
+        if (this.currentSample.insProduct[a].id == id) {
+          return this.currentSample.insProduct[a].ask
+        }
+      }
+    },
+    getSystemValue(n) {
+      let code = null
+      try {
+        this.param[n.i].equipValue.forEach(a=>{
+          if(a.r === n.r){
+            if (a.v.v == null || a.v.v == '') {
+              this.$message.error('璇峰厛閫夋嫨閲囬泦鐨勮澶�')
+              return
+            }else{
+              code = a.v.v
+            }
+          }
+        })
+      } catch (e) {
+        // console.log(e);
+        this.$message.error('鎵句笉鍒拌澶囧唴瀹�')
+      }
+      // console.log(n, code);
+      fetch('http://localhost:82/寰俊鍥剧墖_20240518100811.png').then(res=>res.blob()).then(blob=>{
+        // console.log(blob);
+        const url = URL.createObjectURL(blob)
+        // console.log(url);
+      })
+      /* this.$message.error('閲囬泦澶辫触銆愬凡寮�鏀炬墜鍔ㄦ柟寮忋��')
+        for (var a in this.currentSample.insProduct) {
+          if (this.currentSample.insProduct[a].id == n.i) {
+            this.currentSample.insProduct[a].inspectionItemType = 0
+          }
+        } */
+    },
+    // 鑾峰彇鎵�鏈夎澶�
+    getEquipOptions(e, id) {
+      if (e) {
+        this.equipOptions = []
+        search({ status: 0 }).then(res => {
+          if (res.code === 200 && res.data) {
+            this.equipOptions = res.data.map(m => {
+              m.value = m.managementNumber
+              m.label = m.deviceName
+              return m
+            })
+          }
+        }).catch(error => {
+          console.error(error)
+        })
+      }
+    },
+    getUserInfo() {
+      getUserNow().then(res => {
+        this.userId = res.data.id
+      })
+    },
+    // 澶嶆牳
+    upInsReview(e) {
+      if (e == 1) {
+        // 閫氳繃
+        this.reviewLoading = true;
+        verifyPlan({
+          orderId: this.orderId,
+          type: 1,
+          laboratory: this.sonLaboratory,
+          tell: null,
+          userId: this.checkUser
+        }).then(res => {
+          if (res.code === 200) {
+            this.$message.success("鎿嶄綔鎴愬姛")
+            this.$emit('goback')
+            this.addCheck = false
+          }
+          this.reviewLoading = false;
+        }).catch(error => {
+          console.error(error)
+          this.reviewLoading = false;
+        })
+      } else {
+        // 涓嶉�氳繃
+        this.reviewDia = true;
+      }
+    },
+    handleReviewDia() {
+      if (this.noReason) {
+        this.reviewLoading = true;
+        verifyPlan({
+          orderId: this.orderId,
+          type: 0,
+          laboratory: this.sonLaboratory,
+          tell: this.noReason
+        }).then(res => {
+          if (res.code === 200) {
+            this.$message.success("鎿嶄綔鎴愬姛")
+            this.$emit('goback')
+          }
+          this.reviewLoading = false;
+        }).catch(error => {
+          console.error(error)
+          this.reviewLoading = false;
+        })
+      } else {
+        this.$message.error('鏈緭鍏ヤ笉閫氳繃鍘熷洜')
+      }
+    },
+    submit() {
+      if (this.verifyUser === null || this.verifyUser === '') {
+        this.$message.error("璇锋寚瀹氬鏍镐汉鍛�")
+        return
+      }
+      if(!this.otherForm.humidity){
+        this.$message.error("璇疯緭鍏ユ箍搴�")
+        return
+      }
+      if(!this.otherForm.temperature){
+        this.$message.error("璇疯緭鍏ユ俯搴�")
+        return
+      }
+      this.submitLoading = true;
+      checkSubmitPlan({
+        orderId: this.orderId,
+        laboratory: this.sonLaboratory,
+      }).then(res => {
+        if (res.code === 200) {
+          if(!res.data||res.data.length==0){
+            this.submitLoading = true;
+            submitPlan({
+              orderId: this.orderId,
+              laboratory: this.sonLaboratory,
+              verifyUser: this.verifyUser,
+              entrustCode: this.insOrder.entrustCode
+            }).then(res => {
+              if (res.code === 200) {
+                this.$message.success("鎿嶄綔鎴愬姛")
+                this.$emit('goback')
+                this.submitLoading = false;
+                this.addVerifyDia = false
+              }
+            }).catch(error => {
+              console.error(error)
+              this.submitLoading = false;
+            })
+          }else{
+            let newData = []
+            const h = this.$createElement
+            for (let i in res.data) {
+              const lastChar = res.data[i].slice(-1);
+              if(lastChar=='-'){
+                res.data[i] = res.data[i].slice(0, -1);
+              }
+              newData.push(h('p', {style: 'font-size: 14px;color: red;'}, (Number(i)+1)+'銆�'+res.data[i]))
+            }
+            newData.push(h('p',  { style: 'font-size: 16px;color:#000;margin-top:12px;overflow-y: auto;max-height:80vh' },'浠ヤ笂椤圭洰涓嶅悎鏍硷紝纭畾鎻愪氦锛�'))
+            this.$confirm('鎻愮ず',{
+              title:'鎻愮ず',
+              message: h('div', null, newData),
+              confirmButtonText: "纭畾",
+              cancelButtonText: "鍙栨秷",
+              type: ""
+            }).then(() => {
+              this.submitLoading = true;
+              submitPlan({
+                orderId: this.orderId,
+                laboratory: this.sonLaboratory,
+                verifyUser: this.verifyUser
+              }).then(res => {
+                if (res.code === 200) {
+                  this.$message.success("鎿嶄綔鎴愬姛")
+                  this.addVerifyDia = false
+                  this.$emit('goback')
+                }
+                this.submitLoading = false;
+              }).catch(error => {
+                console.error(error)
+                this.submitLoading = false;
+              })
+            }).catch(() => {})
+          }
+        }
+      }).catch(error => {
+        console.error(error)
+        this.submitLoading = false;
+      })
+      return
+    },
+    // 缁熶竴鍦ㄨ繖閲屼繚瀛樻暟鎹�
+    saveInsContext(currentInsItemId) {
+      try {
+        if(this.param){
+          let param = null
+          if(currentInsItemId){
+            param = {[currentInsItemId] : this.param[currentInsItemId]}
+          }else{
+            param = this.param
+          }
+          saveUnqualifiedContext({
+            param: JSON.stringify(param),
+            currentTable:this.currentTable,
+            sampleId:this.currentSample.id
+          }).then(res => {
+            if (res.code == 201) {
+              this.$message.error('淇濆瓨澶辫触')
+              return
+            }
+            this.$message.success('宸蹭繚瀛�')
+          })
+          // 鍚� Worker 鍙戦�佹秷鎭紝寮�濮嬪鐞嗛�昏緫
+          this.worker.postMessage(JSON.stringify({
+            modelType: this.sampleProduct[0].model,
+            type: 'saveData',
+            tableList:this.tableList,
+            param:this.param,
+            currentTable:this.currentTable
+          }));
+        }
+      }catch (error) {
+        console.log(999,error);
+      }
+    },
+    // 璁惧鏀瑰彉
+    changeEquip(val, n, v) {
+      try {
+        // this.$set(n.v,'v',val)
+        this.tableList[0].arr.forEach((item,index)=>{
+          item.forEach((m,i)=>{
+            if(this.param[m.i]){
+              this.param[m.i].state = 1
+            }
+            // if(m.i==n.i&&m.v.ps&&m.v.ps.value=='璁惧鍚嶇О'&&v){
+            //   this.$set(m.v,'v',v)
+            // }
+          })
+        })
+        for (let i in this.param) {
+          if(this.param[i].state!=1){
+            delete this.param[i]
+          }
+        }
+        // if(val&&v){
+        //   for (let i1 in this.param[n.i].equipName) {
+        //     if (this.param[n.i].equipName[i1].i === n.i && this.param[n.i].equipName[i1].r === n.r) {
+        //       this.$delete(this.param[n.i].equipValue[i1].v,'v')
+        //       this.$set(this.param[n.i].equipValue[i1].v,'v',val)
+        //       this.$delete(this.param[n.i].equipName[i1].v,'v')
+        //       this.$set(this.param[n.i].equipName[i1].v,'v',v)
+        //     }
+        //   }
+        // }
+        // this.equipOptions涓鸿澶囧悕绉颁笅鎷夋閫夐」鏁版嵁
+        for (let i1 in this.param[n.i].equipName) {
+          if (this.param[n.i].equipName[i1].i === n.i && this.param[n.i].equipName[i1].r === n.r) {
+            this.$delete(this.param[n.i].equipValue[i1].v,'v')
+            // 灏嗘暟缁勮祴鍊肩粰璁惧缂栫爜
+            this.$set(this.param[n.i].equipValue[i1].v,'v',val.join('锛�'))
+            this.$delete(this.param[n.i].equipName[i1].v,'v')
+            // 灏嗘暟缁勮祴鍊肩粰璁惧缂栫爜
+            this.$set(this.param[n.i].equipName[i1].v,'v',val)
+            this.tableList[0].arr.forEach((item,index)=>{
+              item.forEach((m)=>{
+                if(m.i==n.i&&m.v.ps&&m.v.ps.value=='璁惧缂栫爜'){
+                  this.$set(m.v,'v',val.join('锛�'))
+                }
+                if(m.i==n.i&&m.v.ps&&m.v.ps.value=='璁惧鍚嶇О'){
+                  this.$set(m.v,'v',val)
+                }
+              })
+            })
+          }
+        }
+        // 淇濆瓨鏁版嵁
+        this.saveInsContext(n.i)
+      } catch (e) {
+        console.log('changeEquip----', e)
+      }
+    },
+    getAuthorizedPerson() {
+      selectUserCondition({ type: 0 }).then((res) => {
+        let data = [];
+        res.data.forEach((a) => {
+          data.push({
+            label: a.name,
+            value: a.id,
+          });
+        });
+        this.personList = data;
+      });
+    },
+    scrollInit() {
+      // 鑾峰彇瑕佺粦瀹氫簨浠剁殑鍏冪礌
+      const nav = document.getElementById("tableBox")
+      let flag; // 榧犳爣鎸変笅
+      let downX; // 榧犳爣鐐瑰嚮鐨剎涓嬫爣
+      let scrollLeft; // 褰撳墠鍏冪礌婊氬姩鏉$殑鍋忕Щ閲�
+      nav.addEventListener("mousedown", function(event) {
+        flag = true;
+        downX = event.clientX; // 鑾峰彇鍒扮偣鍑荤殑x涓嬫爣
+        scrollLeft = this.scrollLeft; // 鑾峰彇褰撳墠鍏冪礌婊氬姩鏉$殑鍋忕Щ閲�
+      });
+      nav.addEventListener("mousemove", function(event) {
+        if (flag) { // 鍒ゆ柇鏄惁鏄紶鏍囨寜涓嬫粴鍔ㄥ厓绱犲尯鍩�
+          let moveX = event.clientX; // 鑾峰彇绉诲姩鐨剎杞�
+          let scrollX = moveX - downX; // 褰撳墠绉诲姩鐨剎杞翠笅鏍囧噺鍘诲垰鐐瑰嚮涓嬪幓鐨剎杞翠笅鏍囧緱鍒伴紶鏍囨粦鍔ㄨ窛绂�
+          this.scrollLeft = scrollLeft - scrollX // 榧犳爣鎸変笅鐨勬粴鍔ㄦ潯鍋忕Щ閲忓噺鍘诲綋鍓嶉紶鏍囩殑婊戝姩璺濈
+        }
+      });
+      // 榧犳爣鎶捣鍋滄鎷栧姩
+      nav.addEventListener("mouseup", function() {
+        flag = false;
+      });
+      // 榧犳爣绂诲紑鍏冪礌鍋滄鎷栧姩
+      nav.addEventListener("mouseleave", function(event) {
+        flag = false;
+      });
+    },
+    async caretTape(num){
+      let index = this.currentKey1 + num
+      if(index < 1){
+        this.$message.error('褰撳墠鏄涓�涓厜绾ゅ甫')
+        return
+      } else if(index > this.fiberOpticTape.length){
+        this.$message.error('褰撳墠鏄渶鍚庝竴涓厜绾ゅ甫')
+        return
+      }
+      this.currentKey1 = index
+      this.currentFiberOpticTape = this.HaveJson(this.fiberOpticTape[index - 1])
+      this.param = {}
+      this.fiberOptic = []
+      this.currentFiberOptic = null;
+      this.currentFiberOpticTape.productList.forEach(a => {
+        this.param[a.id] = {
+          insValue: [],
+          comValue: [],
+          resValue: null,
+          equipValue: [],
+          equipName: [],
+          insResult: null
+        }
+      })
+      this.fiberOpticTapeVisible = false;
+      let list = await this.getCurrentProduct(this.currentFiberOpticTape.id,1)
+      this.getTableLists0(list)
+      if(this.currentFiberOpticTape.fiber&&this.currentFiberOpticTape.fiber.length>0){
+        // 閰嶇疆鍏夌氦
+        this.fiberOptic = this.currentFiberOpticTape.fiber;
+      }
+    },
+    async caretOptic(num){
+      let index = this.currentKey2 + num
+      if(index < 1){
+        this.$message.error('褰撳墠鏄涓�涓厜绾�')
+        return
+      } else if(index > this.fiberOptic.length){
+        this.$message.error('褰撳墠鏄渶鍚庝竴涓厜绾�')
+        return
+      }
+      this.currentKey2 = index
+      this.currentFiberOptic = this.HaveJson(this.fiberOptic[index - 1])
+      this.currentFiberOptic.productList.forEach(a => {
+        this.param[a.id] = {
+          insValue: [],
+          comValue: [],
+          resValue: null,
+          equipValue: [],
+          equipName: [],
+          insResult: null
+        }
+      })
+      let list = await this.getCurrentProduct(this.currentFiberOptic.id,2)
+      this.getTableLists0(list)
+    },
+    beforeUpload(file) {
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload.clearFiles()
+        return false;
+      } else {
+        this.upLoading = true;
+        return true;
+      }
+    },
+    onError(err, file, fileList) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload.clearFiles()
+    },
+    handleDown(row){
+      downFile({
+        id: row.id,
+      }).then(res => {
+        if (res.code === 200) {
+          let url = '';
+          if(res.data.type==1){
+            url = this.javaApi+'/img/'+res.data.fileUrl
+            file.downloadIamge(url,row.fileName)
+          }else{
+            url = this.javaApi+'/word/'+res.data.fileUrl
+            const link = document.createElement('a');
+            link.href = url;
+            link.download = row.fileName;
+            link.click();
+          }
+        }
+      }).catch(error => {
+
+      })
+    },
+    /**
+     * 灏嗘暟鍊紇淇濈暀ct.fa涓�'##'鍚庣殑鎸囧畾灏忔暟浣嶆暟锛屽苟杩斿洖鏍煎紡鍖栧悗鐨勫瓧绗︿覆銆�
+     *
+     * @param v 瑕佹牸寮忓寲鐨勬暟鍊�
+     * @param ct 鍖呭惈鏍煎紡鍖栭厤缃殑瀵硅薄
+     * @param ct.fa 鏍煎紡鍖栭厤缃瓧绗︿覆锛岃嫢鍖呭惈'##'鍒欐寜鐓у叾鍚庣殑鍐呭纭畾灏忔暟浣嶆暟
+     * @returns 鏍煎紡鍖栧悗鐨勫瓧绗︿覆鎴栧師濮嬫暟鍊硷紙鑻ラ厤缃笉绗﹀悎瑕佹眰锛�
+     */
+    toFixed(v,ct){
+      if(v&&ct&&ct.fa){
+        if(ct.fa.includes('.')){
+          let num = ct.fa.slice(4).length
+          return Number(v).toFixed(num)
+        }else{
+          return v
+        }
+      }else{
+        return v
+      }
+    }
+  }
+}
+</script>
+<style scoped>
+.custom-table .el-table__header-wrapper th {
+  background-color: #87CEEB; /* 鍙甯︽湁my-custom-table绫荤殑琛ㄦ牸鐢熸晥 */
+  color: #fff;
+}
+.container {
+  overflow: auto; /* 纭繚瀹瑰櫒鑳藉寘瑁规诞鍔ㄥ厓绱� */
+  margin-bottom: 10px;
+}
+
+.right-button {
+  float: right;
+}
+.inspection {
+  height: 100%;
+  overflow-y: auto;
+}
+
+.inspection::-webkit-scrollbar {
+  width: 0;
+}
+
+.title {
+  height: 60px;
+  line-height: 60px;
+}
+
+.search {
+  width: 100%;
+  margin-bottom: 10px;
+  background-color: #fff;
+  border-radius: 3px;
+}
+
+.search .form-inline {
+  padding-top: 20px;
+  padding-left: 0px;
+  text-align: left;
+}
+
+.center {
+  width: calc(100% - 40px);
+  /* max-height: 580px; */
+  background-color: #fff;
+  border-radius: 3px;
+  padding: 20px;
+  overflow: auto;
+}
+
+.center-box {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-direction: column;
+  flex-wrap: wrap;
+  width: 100%;
+  overflow-x: auto;
+  /* overflow-x: scroll; */
+  cursor: grab;
+}
+
+.center-box:active{
+  cursor: grabbing;
+}
+
+.tables {
+  table-layout: fixed;
+  margin: 5px 5px 16px;
+}
+
+.tables td {
+  height: 40px;
+  width: 100px;
+  text-align: center;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+}
+.thermal-table{
+  min-width: calc(100% - 10px);
+  margin: 5px 5px 0;
+  table-layout: fixed;
+}
+.thermal-table td {
+  min-width: 70px;
+  text-align: center;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+  padding: 5px;
+}
+.table-container {
+  overflow-x: auto; /* 浣垮鍣ㄦ敮鎸佹í鍚戞粴鍔� */
+  max-width: 100%;  /* 闄愬埗瀹瑰櫒鐨勬渶澶у搴� */
+  margin-bottom: 16px;
+}
+
+.content {
+  display: flex;
+  height: 100%;
+  align-items: center;
+  justify-content: left;
+  padding: 5px;
+  box-sizing: border-box;
+  overflow: hidden;
+  user-select: none;
+}
+
+.content *{
+  user-select: none;
+}
+
+.content-h-0 {
+  justify-content: center;
+}
+
+.content-h-1 {
+  justify-content: start;
+}
+
+.content-h-2 {
+  justify-content: end;
+}
+
+.content-v-0 {
+  align-items: center;
+}
+
+.content-v-1 {
+  align-items: start;
+}
+
+.content-v-2 {
+  align-items: end;
+}
+
+.table_input {
+  width: 100%;
+  height: 100%;
+}
+.table_input >>>.el-input__inner{
+  border-color: rgba(0, 0, 0, 0.5) !important;
+}
+
+.collection {
+  width: 50px;
+  height: 100%;
+  margin-left: 5px;
+  border-color: transparent;
+  background-color: #409eff;
+  color: #fff;
+  border-radius: 4px;
+  font-size: 12px;
+}
+
+.collection:active {
+  opacity: .7;
+}
+.table_caret{
+  font-size: 16px;
+  margin: 0 5px;
+  color: rgba(0, 0, 0, 0.5);
+}
+.table_caret:hover{
+  color: #409eff;
+  cursor: pointer;
+}
+
+.table_caret:active{
+  opacity: .8;
+}
+>>>input::-webkit-inner-spin-button {
+  -webkit-appearance: none !important;  /* 闅愯棌寰皟鎸夐挳 */
+  margin: 0 !important;  /* 绉婚櫎寰皟鎸夐挳鐨勮竟璺� */
+}
+
+>>>input[type=number] {
+  -moz-appearance: textfield !important;  /* 閽堝 Firefox */
+}
+>>>.el-form-item__content{
+  display: inline-flex;
+  align-items: center;
+}
+</style>
+<style>
+.inspection .el-form-item__label {
+  color: #000;
+}
+
+.inspection .el-drawer__header::before {
+  content: "";
+  display: inline-block;
+  width: 4px;
+  height: 30.24px;
+  background: #3A7BFA;
+  border-radius: 10px;
+  margin-left: 32px;
+  margin-right: 8.5px;
+}
+
+.inspection .el-drawer__header {
+  color: #303133;
+  text-align: left;
+}
+
+.inspection .el-input-group__append {
+  padding: 0 14px;
+  color: #3A7BFA;
+  background-color: #fff;
+  height: 100%;
+  display: flex;
+  align-items: center;
+}
+
+.inspection .center-box .el-input__inner {
+  font-size: 12px;
+  padding: 0 6px;
+  text-align: center;
+}
+
+.inspection .el-textarea__inner {
+  padding: 2px;
+}
+
+.inspection .el-textarea__inner::-webkit-scrollbar {
+  width: 0;
+}
+
+.inspection .el-select {
+  display: flex;
+  align-items: center;
+}
+
+.inspection .el-textarea__inner {
+  min-height: 100% !important;
+}
+
+.inspection .tables .el-input{
+  display: flex;
+  align-items: center;
+}
+.thermal-table .el-input{
+  display: flex;
+  align-items: center;
+}
+.custom-dialog .el-dialog__body {
+  max-width: 1000px; /* 璁剧疆鏈�澶у搴� */
+}
+.unPassCheck .el-dialog__body {
+  overflow: auto;
+  max-height: 800px; /* 璁剧疆鏈�澶у搴� */
+}
+</style>
diff --git a/src/views/business/inspectionTask/index.vue b/src/views/business/inspectionTask/index.vue
index f71274e..600e362 100644
--- a/src/views/business/inspectionTask/index.vue
+++ b/src/views/business/inspectionTask/index.vue
@@ -567,7 +567,6 @@
   },
   mounted() {
     this.queryParams.userId = this.userId;
-    // this.getPower();
     this.refreshTable();
   },
   methods: {
@@ -626,40 +625,6 @@
     handleDataLook(row) {
       this.lookInfo = row;
       this.getLookList();
-    },
-    // 鏉冮檺鍒嗛厤
-    getPower(radio) {
-      let power = JSON.parse(sessionStorage.getItem("power"));
-      let inspection = false;
-      let connect = false;
-      let review = false;
-      let claim = false;
-      for (var i = 0; i < power.length; i++) {
-        if (power[i].menuMethod == "doInsOrder") {
-          inspection = true;
-        }
-        if (power[i].menuMethod == "upPlanUser") {
-          connect = true;
-        }
-        if (power[i].menuMethod == "verifyPlan") {
-          review = true;
-        }
-        if (power[i].menuMethod == "claimInsOrderPlan") {
-          claim = true;
-        }
-      }
-      if (!claim) {
-        this.componentData.do.splice(3, 1);
-      }
-      if (!review) {
-        this.componentData.do.splice(2, 1);
-      }
-      if (!connect) {
-        this.componentData.do.splice(1, 1);
-      }
-      if (!inspection) {
-        this.componentData.do.splice(0, 1);
-      }
     },
     changeCheckBox(val) {
       this.queryParams.userId = val ? 0 : null;
diff --git a/src/views/business/inspectionTask/inspection.vue b/src/views/business/inspectionTask/inspection.vue
index 3a77d1f..58accdd 100644
--- a/src/views/business/inspectionTask/inspection.vue
+++ b/src/views/business/inspectionTask/inspection.vue
@@ -18,13 +18,9 @@
       </el-col>
       <el-col :span="16" style="text-align: right">
         <el-button size="small" type="primary" @click="refreshView">鍒锋柊</el-button>
-        <el-button v-if="typeSource === 1" size="small" type="primary" @click="openPurchase">杩涜揣楠岃瘉</el-button>
-        <el-button v-if="state === 1 && typeSource === 1" size="small" type="primary"
-          @click="openUnPassDialog('add')">涓嶅悎鏍煎鐞�</el-button>
-        <el-button size="small" type="primary" @click="
-          sampleVisible = true;
-        uploadSample();
-        ">鏍峰搧鍒囨崲</el-button>
+        <el-button v-if="typeSource == 1" size="small" type="primary" @click="openPurchase">杩涜揣楠岃瘉</el-button>
+        <el-button v-if="state == 1 && typeSource == 1" size="small" type="primary" @click="openUnPassDialog('add')">涓嶅悎鏍煎鐞�</el-button>
+        <el-button size="small" type="primary" @click="sampleVisible = true;uploadSample();">鏍峰搧鍒囨崲</el-button>
         <el-button v-if="state == 1" size="small" type="primary" @click="taskVisible = true">浠诲姟鍒囨崲</el-button>
         <el-button v-if="state == 1" size="small" type="primary" @click="addVerifyDia = true">鎻愪氦</el-button>
         <!-- 澶嶆牳 -->
@@ -73,7 +69,7 @@
         </el-form-item>
         <el-form-item label="澶囨敞:">
           <!--          <span style="color:red">{{ insOrder.remark?insOrder.remark:'-' }}</span>-->
-          <el-input v-model="insOrder.remark" :disabled="state !== 1" clearable placeholder="璇疯緭鍏�" size="small"
+          <el-input v-model="insOrder.remark" :disabled="state != 1" clearable placeholder="璇疯緭鍏�" size="small"
             @blur="subOtherForm(insOrder.remark, 'remark')"></el-input>
           <!-- <el-tag v-if="currentKey">{{ insOrder.remark }}</el-tag> -->
         </el-form-item>
@@ -94,8 +90,8 @@
           </el-radio-group>
         </div>
         <div style="display: flex; align-items: center">
-          <el-button v-if="state === 1" size="small" type="primary" @click="openAddUnpass">鏂板涓嶅悎鏍煎娴�</el-button>
-          <el-button v-if="state === 1" size="small" type="primary" @click="unpassCheck">涓嶅悎鏍煎娴�</el-button>
+          <el-button v-if="state == 1" size="small" type="primary" @click="openAddUnpass">鏂板涓嶅悎鏍煎娴�</el-button>
+          <el-button v-if="state == 1" size="small" type="primary" @click="unpassCheck">涓嶅悎鏍煎娴�</el-button>
           <el-button v-if="state > 1" size="small" type="primary" @click="viewUnpassCheck">鏌ョ湅涓嶅悎鏍煎娴�</el-button>
           <span v-if="cableTagList.length > 0">&nbsp;&nbsp;鐢电紗閰嶇疆锛�</span>
           <el-select v-if="cableTagList.length > 0" v-model="currentTab" clearable placeholder="璇烽�夋嫨" size="small"
@@ -291,7 +287,7 @@
                       state == 1
                     "><span :style="`font-family:${n.v.ff} !important;`">{{
                       toFixed(n.v.v, n.v.ct)
-                    }}</span></template>
+                        }}</span></template>
                     <template v-else-if="
                       n.v.ps != undefined &&
                       n.v.ps.value === '鏈�缁堝��' &&
@@ -338,7 +334,7 @@
       </div>
       <el-upload v-if="state == 1" ref="upload" :action="action" :before-upload="beforeUpload" :data="{
         orderId: id,
-      }" :headers="headers" :on-error="onError" :on-success="handleSuccessUp" :show-file-list="false"
+      }" :headers="uploadHeader" :on-error="onError" :on-success="handleSuccessUp" :show-file-list="false"
         accept=".jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar"
         style="width: 80px !important;margin-top: 10px;">
         <el-button v-if="state == 1" size="small" type="primary">闄勪欢涓婁紶</el-button></el-upload>
@@ -508,9 +504,9 @@
       @resetAddUnPass="resetAddUnPass"></add-un-pass>
     <UnPassDialog v-if="unPassDialog" ref="unPassDialog" :orderId="orderId" :unPassDialog="unPassDialog"
       @resetForm="resetForm"></UnPassDialog>
-    <!-- <InspectionWord v-if="unPassCheck" :inspectorList="inspectorList" :orderId="orderId"
+    <InspectionWord v-if="unPassCheck" :inspectorList="inspectorList" :orderId="orderId"
       :rawMaterialTag="rawMaterialTag" :sonLaboratory="sonLaboratory" :state="state" :typeSource="typeSource"
-      :unPassCheck="unPassCheck" @closeUnPassCheckDialog="closeUnPassCheckDialog" @refreshView="refreshView" /> -->
+      :unPassCheck="unPassCheck" @closeUnPassCheckDialog="closeUnPassCheckDialog" @refreshView="refreshView" />
     <purchase-verification v-if="purchaseDialog" ref="purchaseDialog" :orderId="orderId"
       :purchaseDialog="purchaseDialog" @resetPurchaseDialog="resetPurchaseDialog"></purchase-verification>
   </div>
@@ -521,7 +517,7 @@
 import limsTable from "@/components/Table/lims-table.vue";
 import UnPassDialog from "../unpass/components/addUnPass.vue";
 import AddUnPass from "../unpass/components/addUnPass.vue";
-// import InspectionWord from "./components/InspectionWord.vue";
+import InspectionWord from "./components/InspectionWord.vue";
 import PurchaseVerification from "../unpass/components/PurchaseVerification.vue";
 import {
   doInsOrder,
@@ -546,7 +542,6 @@
 import DataWorker from '../../../DataWorker.worker';
 import html2canvas from "html2canvas";
 import { mapGetters } from "vuex";
-import { getToken } from "@/utils/auth";
 export default {
   name: 'inspection',
   components: {
@@ -554,7 +549,7 @@
     AddUnPass,
     limsTable,
     UnPassDialog,
-    // InspectionWord,
+    InspectionWord,
   },
   data() {
     return {
@@ -770,11 +765,6 @@
   // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
   computed: {
     ...mapGetters(["userId"]),
-    headers() {
-      return {
-        'Authorization': "Bearer " + getToken()
-      };
-    },
     action() {
       return this.javaApi + "/insOrderPlan/uploadFile";
     },
@@ -1071,7 +1061,7 @@
     },
     // 鎵撳紑杩涜揣楠岃瘉寮规
     openPurchase() {
-      const operationType = this.state === 1 ? "add" : "view";
+      const operationType = this.state == 1 ? "add" : "view";
       this.purchaseDialog = true;
       const item = {
         id: this.currentSample.id,
@@ -3118,7 +3108,7 @@
   align-items: center;
 }
 </style>
-<style>
+<style scoped>
 /* .inspection .el-form-item__label {
   color: #000;
 } */
diff --git a/src/views/business/materialOrder/customsInspection.vue b/src/views/business/materialOrder/customsInspection.vue
index 0135441..d303dc9 100644
--- a/src/views/business/materialOrder/customsInspection.vue
+++ b/src/views/business/materialOrder/customsInspection.vue
@@ -451,10 +451,6 @@
   dicts: ['check_type', 'urgency_level'],
   components: {},
   props: {
-    isReport: {
-      type: Number,
-      default: () => null
-    }
   },
   data() {
     return {
@@ -462,6 +458,7 @@
       orderType: '',
       active: 0,
       currentId: 0,
+      isReport: '',
       editTable:[], // 鍖洪棿鐗规畩鍊煎~鍐�
       template: null,
       saveLoad: false, // 淇濆瓨鎸夐挳loading
@@ -640,6 +637,7 @@
     this.active = this.$route.query.active
     this.orderType = this.$route.query.orderType
     this.currentId = this.$route.query.currentId
+    this.isReport = this.$route.query.isReport
     this.customsInspection = this.$route.query.customsInspection
     this.getUserNowList() // 鑾峰彇褰撳墠鐢ㄦ埛淇℃伅
     this.selectStandardMethods() // 鑾峰彇妫�楠屾爣鍑嗕笅鎷夋鏁版嵁
@@ -698,7 +696,7 @@
           orderId = this.dataIndex === 0 ? this.customsInspection.enterOrderId : this.customsInspection.quarterOrderId
         } else if (!this.customsInspection.enterOrderId && !this.customsInspection.quarterOrderId) {
           this.isShowTab = false
-          orderId = this.isReport === 1 ? this.customsInspection.insOrderId : this.customsInspection.id
+          orderId = this.isReport == 1 ? this.customsInspection.insOrderId : this.customsInspection.id
         }
         // 鏌ョ湅
         // 璇锋眰鎺ュ彛锛屽洖鏄炬暟鎹�
@@ -756,7 +754,6 @@
           this.$set(this.addObj, 'buyUnitMeas', this.customsInspection.buyUnitMeas)
           this.$set(this.addObj, 'updateBatchNo', this.customsInspection.updateBatchNo)
           this.$set(this.addObj, 'partDetail', this.customsInspection.partDesc)
-          console.log('this.orderType----', this.orderType)
           if (this.orderType == 1) {
             this.$set(this.addObj, 'orderType', 'Quarterly inspection')
           }
diff --git a/src/views/business/materialOrder/index.vue b/src/views/business/materialOrder/index.vue
index 45fa7dc..4a20344 100644
--- a/src/views/business/materialOrder/index.vue
+++ b/src/views/business/materialOrder/index.vue
@@ -2,19 +2,23 @@
   <div class="app-container">
     <div>
       <div class="search">
-        <el-form :model="entity" ref="entity" size="small" :inline="true"><el-form-item label="鎵瑰彿" prop="updateBatchNo">
+        <el-form :model="entity" ref="entity" size="small" :inline="true">
+          <el-form-item label="鎵瑰彿" prop="updateBatchNo">
             <el-input v-model="entity.updateBatchNo" clearable placeholder="璇疯緭鍏�" size="small"
               @keyup.enter.native="refreshTable">
             </el-input>
-          </el-form-item><el-form-item label="濮旀墭缂栧彿" prop="entrustCode">
+          </el-form-item>
+          <el-form-item label="濮旀墭缂栧彿" prop="entrustCode">
             <el-input v-model="entity.entrustCode" clearable placeholder="璇疯緭鍏�" size="small"
               @keyup.enter.native="refreshTable">
             </el-input>
-          </el-form-item><el-form-item label="闆朵欢鍙�" prop="partNo">
+          </el-form-item>
+          <el-form-item label="闆朵欢鍙�" prop="partNo">
             <el-input v-model="entity.partNo" clearable placeholder="璇疯緭鍏�" size="small"
               @keyup.enter.native="refreshTable">
             </el-input>
-          </el-form-item><el-form-item label="闆朵欢鎻忚堪" prop="partDesc">
+          </el-form-item>
+          <el-form-item label="闆朵欢鎻忚堪" prop="partDesc">
             <el-input v-model="entity.partDesc" clearable placeholder="璇疯緭鍏�" size="small"
               @keyup.enter.native="refreshTable">
             </el-input>
diff --git a/src/views/business/materialOrderComponents/materialOrder/filesLookVisible.vue b/src/views/business/materialOrderComponents/materialOrder/filesLookVisible.vue
index 5b90f8e..db188d7 100644
--- a/src/views/business/materialOrderComponents/materialOrder/filesLookVisible.vue
+++ b/src/views/business/materialOrderComponents/materialOrder/filesLookVisible.vue
@@ -9,7 +9,7 @@
         <el-upload :action="action" :auto-upload="true"
           :data="{ orderId: dataVisibleIndex === 0 ? filesLookInfo.enterOrderId : filesLookInfo.quarterOrderId }"
           :on-success="handleSuccessUp" :show-file-list="false"
-          accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' :headers="headers"
+          accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' :headers="uploadHeader"
           :before-upload="beforeUpload" style="width: 80px !important;" :on-error="onError" ref='upload'>
           <el-button size="small" type="primary" style="height: 38px">闄勪欢涓婁紶</el-button>
         </el-upload>
@@ -27,7 +27,6 @@
 import file from "@/utils/file";
 import limsTable from "@/components/Table/lims-table.vue";
 import { delfile, downFile, getFileList } from "@/api/business/rawMaterialOrder";
-import { getToken } from "@/utils/auth";
 export default {
   name: "filesLookVisible",
   // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
@@ -176,7 +175,7 @@
       this.upLoading = false;
       if (response.code == 200) {
         this.$message.success('涓婁紶鎴愬姛');
-        this.$refs.fileList.selectList()
+        this.getFileList()
       }
     },
     beforeUpload(file) {
@@ -221,11 +220,6 @@
     }
   },
   computed: {
-    headers() {
-      return {
-        'Authorization': "Bearer " + getToken()
-      }
-    },
     action() {
       return this.javaApi + '/insOrderPlan/uploadFile'
     }
diff --git a/src/views/business/productOrder/components/add.vue b/src/views/business/productOrder/components/add.vue
index 62c5d87..1b32e91 100644
--- a/src/views/business/productOrder/components/add.vue
+++ b/src/views/business/productOrder/components/add.vue
@@ -2151,43 +2151,7 @@
 </script>
 
 <style scoped>
-.ins_order_add .el-input-group__append,
-.el-input-group__prepend {
-  padding: 0 10px;
-}
-
-.ins_order_add .el-tree-node__content {
-  height: 32px;
-  font-size: 14px;
-  border-radius: 2px;
-}
-
-.ins_order_add .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
+.el-table .warning-row .cell {
   color: #3A7BFA;
-}
-
-.ins_order_add .has-gutter .el-table__cell .cell {
-  line-height: 30px;
-  background-color: #fafafa;
-}
-
-.ins_order_add .has-gutter .el-table__cell {
-  background-color: #fafafa !important;
-}
-
-.ins_order_add .el-table__row .cell {
-  font-size: 12px;
-}
-
-.ins_order_add .el-table .warning-row .cell {
-  color: #3A7BFA;
-}
-
-.ins_order_add .el-select .is-disabled {
-  background: transparent !important;
-}
-
-.ins_order_add .el-select .is-disabled .el-input__inner {
-  background: transparent !important;
 }
 </style>
diff --git a/src/views/business/productOrder/components/auxiliaryWireCore.vue b/src/views/business/productOrder/components/auxiliaryWireCore.vue
index f49c70c..926ee8c 100644
--- a/src/views/business/productOrder/components/auxiliaryWireCore.vue
+++ b/src/views/business/productOrder/components/auxiliaryWireCore.vue
@@ -1,60 +1,42 @@
 <template>
   <div class="ins_order_config">
-    <div>
-      <el-row class="title">
-        <el-col :span="6" style="padding-left: 20px;text-align: left;">杈呭姪绾胯姱閰嶇疆</el-col>
-        <el-col :span="18" style="text-align: right;">
-          <el-button size="medium" @click="outConfig">
-            <span style="color: #3A7BFA;">杩� 鍥�</span>
-          </el-button>
-          <el-button size="medium" type="primary" @click="save">淇� 瀛�</el-button>
-        </el-col>
-      </el-row>
-    </div>
-    <div class="search">
-      <el-radio-group v-model="currentTab" size="small" style="margin-left: 20px;" @input="changeTab">
-        <el-radio-button label="缁濈紭">缁� 缂�</el-radio-button>
-        <!--        <el-radio-button label="鎶ゅ">鎶� 濂�</el-radio-button>-->
-      </el-radio-group>
-      <div v-if="currentTab=='缁濈紭'" class="search_thing">
-        <div class="search_label">鑺暟锛�</div>
-        <el-select v-model="auxiliaryWireCore.num" allow-create
-                   clearable
-                   default-first-option
-                   filterable
-                   multiple
-                   size="small">
-          <el-option v-for="item in quantityList" :key="item.value" :label="item.label" :value="item.value"></el-option>
-        </el-select>
+    <div class="search_form">
+      <div class="search_input">
+        <el-radio-group v-model="currentTab" size="small" style="margin-right: 20px;" @input="changeTab">
+          <el-radio-button label="缁濈紭">缁� 缂�</el-radio-button>
+        </el-radio-group>
+        <el-form :model="auxiliaryWireCore" ref="entity" size="small" :inline="true">
+          <el-form-item label="鑺暟" prop="num">
+            <el-select v-model="auxiliaryWireCore.num" allow-create
+                       clearable
+                       default-first-option
+                       filterable
+                       multiple
+                       size="small">
+              <el-option v-for="item in quantityList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="妫�楠屾爣鍑�" prop="standardMethodListId">
+            <el-select v-model="auxiliaryWireCore.standardMethodListId" allow-create
+                       clearable
+                       default-first-option
+                       filterable
+                       multiple
+                       size="small">
+              <el-option v-for="item in quantityList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-form>
       </div>
-<!--      <div v-if="currentTab=='缁濈紭'" class="search_thing">-->
-<!--        <div class="search_label">鍨嬪彿鍙傛暟锛�</div>-->
-<!--        <el-input v-model="auxiliaryWireCore.modelNum" clearable size="small"-->
-<!--                  @input="methodChange(auxiliaryWireCore.standardMethodListId)"></el-input>-->
-<!--      </div>-->
-      <div v-if="currentTab=='缁濈紭'" class="search_thing">
-        <div class="search_label">妫�楠屾爣鍑嗭細</div>
-        <el-select v-model="auxiliaryWireCore.standardMethodListId" disabled placeholder="璇烽�夋嫨妫�楠屾爣鍑�"
-                   size="small"
-                   @change="(value)=>methodChange(value)">
-          <el-option v-for="item in standards" :key="item.id" :label="item.code" :value="item.id">
-          </el-option>
-        </el-select>
+      <div>
+        <el-button size="small" @click="outConfig">杩� 鍥�</el-button>
+        <el-button size="small" type="primary" @click="save">淇� 瀛�</el-button>
       </div>
-      <!--      <div class="search_thing" v-if="currentTab=='鎶ゅ'">-->
-      <!--        <div class="search_label">妫�楠屾爣鍑嗭細</div>-->
-      <!--        <el-select v-model="sheath.standardMethodListId" placeholder="璇烽�夋嫨妫�楠屾爣鍑�" size="small"-->
-      <!--                   disabled-->
-      <!--        @change="(value)=>methodChange(value)">-->
-      <!--          <el-option v-for="item in standards" :key="item.id" :label="item.code" :value="item.id">-->
-      <!--          </el-option>-->
-      <!--        </el-select>-->
-      <!--      </div>-->
     </div>
     <div class="table">
       <el-table ref="productTable" v-loading="getProductLoad" :data="productList"
-                :row-class-name="tableRowClassName" border class="el-table" height="100%"
-                style="margin-bottom: 10px;" tooltip-effect="dark" @select="upProductSelect"
+                :row-class-name="tableRowClassName" border class="el-table" :height="'calc(100vh - 200px)'"
+                tooltip-effect="dark" @select="upProductSelect"
                 @selection-change="selectProduct" @select-all="handleAll">
         <el-table-column :selectable="selectable" type="selection" width="65"></el-table-column>
         <el-table-column label="妫�楠岄」鍒嗙被" min-width="140" prop="inspectionItemClass" show-overflow-tooltip></el-table-column>
@@ -132,11 +114,12 @@
 
 <script>
 import { Tree } from 'element-ui'
+import {selectsStandardMethodByFLSSM, selectStandardProductList} from "@/api/business/rawMaterialOrder";
 export default {
   props: {
     active: {
-      type: Number,
-      default: () => 0
+      type: String,
+      default: () => '0'
     },
     sampleSelectionList: {
       type: Array,
@@ -286,7 +269,7 @@
     },
     selectsStandardMethodByFLSSM2() {
       this.standards = []
-      this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
+      selectsStandardMethodByFLSSM({
         tree: this.$parent.selectTree
       }).then(res => {
         try {
@@ -294,7 +277,7 @@
             let arr = this.selectTree.split('-')
             let arr0 = arr.slice(0, arr.length - 1)
             let selectTree = arr0.join('-').substring(0, arr0.join('-').length - 1)
-            this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
+            selectsStandardMethodByFLSSM({
               tree: selectTree
             }).then(ress => {
               this.standards = ress.data.standardMethodList
@@ -330,7 +313,7 @@
       const conductorMaterial = this.sampleSelectionList[0].conductorMaterial
       const conductorType = this.sampleSelectionList[0].conductorType
       const modelNum = this.sampleSelectionList[0].modelNum
-      this.$axios.post(this.$api.standardTree.selectStandardProductList, {
+      selectStandardProductList({
         model: this.$parent.addObj.model ? this.$parent.addObj.model : model,
         modelNum: modelNum,
         standardMethodListId: val,
@@ -357,21 +340,16 @@
       this.$refs.productTable.toggleRowSelection(row, true);
     },
     save() {
-      // if(this.auxiliaryWireCore.insProduct.length === 0 && this.sheath.insProduct.length === 0){
-      //   this.$message.error('缂哄皯閰嶇疆鏃犳硶淇濆瓨')
-      //   return
-      // }
       if (this.auxiliaryWireCore.insProduct.length !== 0) {
         if (this.auxiliaryWireCore.num.length === 0) {
           this.$message.error('缂哄皯鑺暟鏃犳硶淇濆瓨')
           return
         }
       }
-      // this.sample.forEach(a=>{
-      //   a.auxiliaryWireCore = this.auxiliaryWireCore
-      //   a.sheath = this.sheath
-      // })
-      this.auxiliaryWireCore.insProduct = this.productList
+      this.auxiliaryWireCore.insProduct = this.HaveJson(this.productList)
+      this.auxiliaryWireCore.insProduct.forEach(a => {
+        delete a.id
+      })
       if (this.currentTab === '缁濈紭') {
         this.sample.forEach(a => {
           a.auxiliaryWireCore = this.auxiliaryWireCore
@@ -399,54 +377,14 @@
 </script>
 
 <style scoped>
-.ins_order_config {
-  width: 100%;
-  height: 100%;
-  overflow-y: auto;
-  overflow-x: hidden;
-}
-
-.ins_order_config::-webkit-scrollbar {
-  width: 0;
-}
-
-.title {
-  height: 60px;
-  line-height: 60px;
-}
-
-.search {
-  background-color: #fff;
-  height: 80px;
+.search_form {
   display: flex;
-  align-items: center;
+  justify-content: space-between;
 }
-
-.search_thing {
-  width: 300px;
-  display: flex;
-  align-items: center;
-}
-
-.search_label {
-  width: 100px;
-  font-size: 14px;
-  text-align: right;
-}
-
 .search_input {
-  width: calc(100% - 70px);
+  display: flex;
+  justify-content: space-between;
 }
-
-.table {
-  margin-top: 10px;
-  background-color: #fff;
-  width: calc(100% - 40px);
-  height: calc(100% - 60px - 80px - 26px - 24px);
-  padding: 20px;
-}
-</style>
-<style>
 .ins_order_config .has-gutter .el-table__cell .cell {
   line-height: 30px;
   background-color: #fafafa;
diff --git a/src/views/business/productOrder/components/cable-config.vue b/src/views/business/productOrder/components/cable-config.vue
index 093c8d7..ce68a52 100644
--- a/src/views/business/productOrder/components/cable-config.vue
+++ b/src/views/business/productOrder/components/cable-config.vue
@@ -1,56 +1,40 @@
 <template>
-  <div class="ins_order_config">
-    <div>
-      <el-row class="title">
-        <el-col :span="6" style="padding-left: 20px;text-align: left;">鐢电紗閰嶇疆</el-col>
-        <el-col :span="18" style="text-align: right;">
-          <el-button size="medium" @click="outConfig">
-            <span style="color: #3A7BFA;">杩� 鍥�</span>
-          </el-button>
-          <el-button size="medium" type="primary" @click="save">淇� 瀛�</el-button>
-        </el-col>
-      </el-row>
-    </div>
-    <div class="search">
-      <el-radio-group v-model="currentTab" size="small" style="margin-left: 20px;" @input="changeTab">
-        <el-radio-button label="缁濈紭">缁� 缂�</el-radio-button>
-<!--        <el-radio-button label="鎶ゅ">鎶� 濂�</el-radio-button>-->
-      </el-radio-group>
-      <div v-if="currentTab=='缁濈紭'" class="search_thing">
-        <div class="search_label">鑺暟锛�</div>
-        <el-select v-model="insulating.num" allow-create
-                   clearable
-                   default-first-option
-                   filterable
-                   multiple
-                   size="small">
-          <el-option v-for="item in quantityList" :key="item.value" :label="item.label" :value="item.value"></el-option>
-        </el-select>
+  <div>
+    <div class="search_form">
+      <div v-if="currentTab=='缁濈紭'">
+        <el-radio-group v-model="currentTab" size="small" style="margin-right: 20px;" @input="changeTab">
+          <el-radio-button label="缁濈紭">缁� 缂�</el-radio-button>
+        </el-radio-group>
+        <el-form :model="insulating" ref="entity" size="small" :inline="true">
+          <el-form-item label="鑺暟" prop="num">
+            <el-select v-model="insulating.num" allow-create
+                       clearable
+                       default-first-option
+                       filterable
+                       multiple
+                       size="small">
+              <el-option v-for="item in quantityList" :key="item.value" :label="item.label" :value="item.value"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="妫�楠屾爣鍑�" prop="standardMethodListId">
+            <el-select v-model="insulating.standardMethodListId" disabled placeholder="璇烽�夋嫨妫�楠屾爣鍑�"
+                       size="small"
+                       @change="(value)=>methodChange(value)">
+              <el-option v-for="item in standards" :key="item.id" :label="item.code" :value="item.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-form>
       </div>
-      <div v-if="currentTab=='缁濈紭'" class="search_thing">
-        <div class="search_label">妫�楠屾爣鍑嗭細</div>
-        <el-select v-model="insulating.standardMethodListId" disabled placeholder="璇烽�夋嫨妫�楠屾爣鍑�"
-                   size="small"
-        @change="(value)=>methodChange(value)">
-          <el-option v-for="item in standards" :key="item.id" :label="item.code" :value="item.id">
-          </el-option>
-        </el-select>
+      <div>
+        <el-button size="small" @click="outConfig">杩� 鍥�</el-button>
+        <el-button size="small" type="primary" @click="save">淇� 瀛�</el-button>
       </div>
-<!--      <div class="search_thing" v-if="currentTab=='鎶ゅ'">-->
-<!--        <div class="search_label">妫�楠屾爣鍑嗭細</div>-->
-<!--        <el-select v-model="sheath.standardMethodListId" placeholder="璇烽�夋嫨妫�楠屾爣鍑�" size="small"-->
-<!--                   disabled-->
-<!--        @change="(value)=>methodChange(value)">-->
-<!--          <el-option v-for="item in standards" :key="item.id" :label="item.code" :value="item.id">-->
-<!--          </el-option>-->
-<!--        </el-select>-->
-<!--      </div>-->
     </div>
     <div class="table">
-      <el-table ref="productTable" :data="productList" :row-class-name="tableRowClassName"
-                border class="el-table" height="100%"
-        style="margin-bottom: 10px;" tooltip-effect="dark" @select="upProductSelect"
-        @selection-change="selectProduct" @select-all="handleAll">
+      <el-table ref="productTable" :data="productList" :row-class-name="tableRowClassName" border
+                class="el-table" :height="'calc(100vh - 200px)'" tooltip-effect="dark" @select="upProductSelect"
+                @selection-change="selectProduct" @select-all="handleAll">
         <el-table-column :selectable="selectable" type="selection" width="65"></el-table-column>
         <el-table-column label="妫�楠岄」鍒嗙被" min-width="140" prop="inspectionItemClass" show-overflow-tooltip></el-table-column>
         <el-table-column label="妫�楠岄」" min-width="140" prop="inspectionItem" show-overflow-tooltip>
@@ -142,12 +126,13 @@
 </template>
 
 <script>
-import { Tree } from 'element-ui'
+import {selectsStandardMethodByFLSSM, selectStandardProductList} from "@/api/business/rawMaterialOrder";
+
 export default {
   props: {
     active: {
-      type: Number,
-      default: () => 0
+      type: String,
+      default: () => '0'
     },
     sampleSelectionList: {
       type: Array,
@@ -174,10 +159,6 @@
           insProduct: [],
           num: []
         },
-        // sheath: {
-        //   standardMethodListId: null,
-        //   insProduct: []
-        // },
         isAskOnlyRead: false,
         inspectionItem:null,
         inspectionItemSubclass:null,
@@ -194,9 +175,6 @@
           if(this.$parent.sampleList[i].insulating !== undefined && this.$parent.sampleList[i].insulating !== null){
             this.insulating = this.$parent.sampleList[i].insulating
           }
-          // if(this.$parent.sampleList[i].sheath !== undefined && this.$parent.sampleList[i].sheath !== null){
-          //   this.sheath = this.$parent.sampleList[i].sheath
-          // }
           break
         }
       }
@@ -227,28 +205,6 @@
         this.productList = this.productList0
       }
     },
-    // 瑕佹眰鍊煎彉鍖栨椂
-    requestChange(e, row,type) {
-      this.sampleList.map(item => {
-        if (this.sampleIds.indexOf(item.id) > -1) {
-          item.insProduct.map(i => {
-            if(i.id == row.id){
-              if(row.repetitionTag){
-                if(row.repetitionTag==i.repetitionTag){
-                  i[type] = e
-                }
-              }else{
-                if(!i.repetitionTag){
-                  i[type] = e
-                }
-              }
-            }
-            return i
-          })
-        }
-        return item
-      })
-    },
     outConfig() {
       this.$parent.cableConfigShow = false
     },
@@ -277,10 +233,7 @@
         this.$refs.productTable.doLayout()
       })
     },
-    tableRowClassName({
-      row,
-      rowIndex
-    }) {
+    tableRowClassName({row, rowIndex}) {
       if (row.state === 0) {
         return '';
       }
@@ -295,7 +248,7 @@
     },
     selectsStandardMethodByFLSSM2() {
       this.standards = []
-      this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
+      selectsStandardMethodByFLSSM({
         tree: this.$parent.selectTree
       }).then(res => {
         try {
@@ -303,7 +256,7 @@
             let arr = this.selectTree.split('-')
             let arr0 = arr.slice(0, arr.length - 1)
             let selectTree = arr0.join('-').substring(0, arr0.join('-').length - 1)
-            this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
+            selectsStandardMethodByFLSSM({
               tree: selectTree
             }).then(ress => {
               this.standards = ress.data.standardMethodList
@@ -341,7 +294,7 @@
       const cores = this.sampleSelectionList[0].cores
       const conductorMaterial = this.sampleSelectionList[0].conductorMaterial
       const conductorType = this.sampleSelectionList[0].conductorType
-      this.$axios.post(this.$api.standardTree.selectStandardProductList, {
+      selectStandardProductList({
         model: this.$parent.addObj.model?this.$parent.addObj.model:model,
         modelNum: modelNum,
         cores: cores,
@@ -358,8 +311,6 @@
         res.data.forEach(a => {
           a.state = 0
         })
-        // this.insulating.insProduct = res.data
-        // this.sheath.insProduct = res.data
         this.productList = res.data
       })
     },
@@ -367,21 +318,16 @@
       this.$refs.productTable.toggleRowSelection(row, true);
     },
     save(){
-      // if(this.insulating.insProduct.length === 0 && this.sheath.insProduct.length === 0){
-      //   this.$message.error('缂哄皯閰嶇疆鏃犳硶淇濆瓨')
-      //   return
-      // }
-      this.insulating.insProduct = this.productList
+      this.insulating.insProduct = this.HaveJson(this.productList)
       if(this.insulating.insProduct.length !== 0){
         if(this.insulating.num.length === 0){
           this.$message.error('缂哄皯鑺暟鏃犳硶淇濆瓨')
           return
         }
       }
-      // this.sample.forEach(a=>{
-      //   a.insulating = this.insulating
-      //   a.sheath = this.sheath
-      // })
+      this.insulating.insProduct.forEach(a => {
+        delete a.id
+      })
       if (this.currentTab === '缁濈紭') {
         this.sample.forEach(a => {
           a.insulating = this.insulating
@@ -429,67 +375,15 @@
 </script>
 
 <style scoped>
-.ins_order_config {
-    width: 100%;
-    height: 100%;
-    overflow-y: auto;
-    overflow-x: hidden;
-  }
-
-  .ins_order_config::-webkit-scrollbar {
-    width: 0;
-  }
-
-  .title {
-    height: 60px;
-    line-height: 60px;
-  }
-
-  .search {
-		background-color: #fff;
-		height: 80px;
-		display: flex;
-		align-items: center;
-	}
-
-	.search_thing {
-		width: 300px;
-		display: flex;
-		align-items: center;
-	}
-
-	.search_label {
-		width: 100px;
-		font-size: 14px;
-		text-align: right;
-	}
-
-	.search_input {
-		width: calc(100% - 70px);
-	}
-  .table {
-		margin-top: 10px;
-		background-color: #fff;
-		width: calc(100% - 40px);
-		height: calc(100% - 60px - 80px - 26px - 24px);
-		padding: 20px;
-	}
-</style>
-<style>
-  .ins_order_config .has-gutter .el-table__cell .cell {
-    line-height: 30px;
-    background-color: #fafafa;
-  }
-
-  .ins_order_config .has-gutter .el-table__cell {
-    background-color: #fafafa !important;
-  }
-
-  .ins_order_config .el-table__row .cell {
-    font-size: 12px;
-  }
-
-  .ins_order_config .el-table .warning-row .cell {
-    color: #3A7BFA;
-  }
+.search_form {
+  display: flex;
+  justify-content: space-between;
+}
+.search_input {
+  display: flex;
+  justify-content: space-between;
+}
+.el-table .warning-row .cell {
+  color: #3A7BFA;
+}
 </style>
diff --git a/src/views/business/reportPreparation/index.vue b/src/views/business/reportPreparation/index.vue
new file mode 100644
index 0000000..60a78b9
--- /dev/null
+++ b/src/views/business/reportPreparation/index.vue
@@ -0,0 +1,1016 @@
+<template>
+  <div class="app-container">
+    <div>
+      <el-form :model="entity" ref="entity" size="small" :inline="true">
+        <el-form-item label="鎶ュ憡缂栧彿" prop="code">
+          <el-input v-model="entity.code" clearable placeholder="璇疯緭鍏�"
+                    size="small" @keyup.enter.native="refreshTable()"></el-input>
+        </el-form-item>
+        <el-form-item label="鐘舵��" prop="queryStatus">
+          <el-select v-model="entity.queryStatus" clearable size="small" @change="refreshTable()">
+            <el-option v-for="(a, i) in queryStatusList" :key="i" :label="a.label" :value="a.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="涓嬪崟绫诲埆" prop="typeSource">
+          <el-select v-model="entity.typeSource" clearable size="small" @change="refreshTable()">
+            <el-option v-for="(a, i) in typeSourceList" :key="i" :label="a.label" :value="a.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="妫�楠岀被鍒�" prop="orderType">
+          <el-select v-model="entity.orderType" clearable size="small" @change="refreshTable()">
+            <el-option v-for="(a, i) in orderTypeList" :key="i" :label="a.label" :value="a.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button size="mini" @click="refresh()">閲嶇疆</el-button>
+          <el-button size="mini" type="primary" @click="refreshTable()">鏌ヨ</el-button>
+          <el-button :loading="outLoading" size="mini" type="primary" @click="handleDowns">鎵归噺涓嬭浇</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div>
+      <lims-table :tableData="valueTableData" :column="column" :page="page" :tableLoading="tableLoading"
+                  :isSelection="true" :handleSelectionChange="handleChange"
+                  :height="'calc(100vh - 290px)'" @pagination="pagination" key="valueTableData">
+        <div slot="action" slot-scope="scope">
+          <el-button size="small" type="text" @click="viewIssued(scope.row)">鏌ョ湅鎶ュ憡</el-button>
+          <el-upload ref='upload1'
+                     style="display: inline;margin: 0 6px"
+                     :action="fileAction1 +'?id='+ scope.row.id"
+                     :auto-upload="true"
+                     :before-upload="fileBeforeUpload1"
+                     :headers="uploadHeader" :on-error="onError1"
+                     :on-success="handleSuccessUp1"
+                     :show-file-list="false"
+                     accept='.doc,.docx'>
+            <el-button size="small" type="text" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName">涓婁紶</el-button>
+          </el-upload>
+          <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handleRestore(scope.row)">杩樺師</el-button>
+          <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="sendBackTask(scope.row)">閫�鍥炰换鍔�</el-button>
+          <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handle(scope.row)">鎻愪氦</el-button>
+          <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 ||scope.row.isExamine == 1 || userName !== scope.row.examineUser" @click="handleIssued(scope.row)">瀹℃牳</el-button>
+          <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || userName !== scope.row.ratifyUser" @click="handleApprove(scope.row)">鎵瑰噯</el-button>
+          <el-popover placement="bottom" trigger="hover" style="margin-left: 6px">
+            <template #reference>
+              <el-button link type="text" size="small">鏇村</el-button>
+            </template>
+            <div>
+              <el-button style="margin-left: 10px" type="text" size="small" @click="download(scope.row)">涓嬭浇</el-button>
+              <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">鍘熷璁板綍</el-button>
+              <el-button type="text" size="small" @click="handleFileLook(scope.row)">闄勪欢涓婁紶</el-button>
+            </div>
+          </el-popover>
+        </div>
+      </lims-table>
+    </div>
+    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="claimVisible" title="鍦ㄧ嚎缂栧埗"
+               width="22cm">
+      <div class="full-screen">
+        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px"
+           @click="fullscreen=true;"></i>
+        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;">
+      </div>
+      <Word v-if="claimVisible" ref="Word" :class="{fullscreen:fullscreen}" :value="value" style="height:70vh" />
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="claimVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="confirmClaim">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="issuedVisible" title="鎶ュ憡瀹℃牳"
+               width="80vw">
+      <div class="full-screen">
+        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
+        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
+      </div>
+      <div v-if="issuedVisible" style="height: 80vh;">
+        <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+      </div>
+      <span slot="footer" class="dialog-footer">
+				<el-button :disabled="loadingIssued" @click="issuedReasonVisible=true">涓嶉�氳繃</el-button>
+				<el-button type="primary" @click="subIssued">閫� 杩�</el-button>
+			</span>
+    </el-dialog>
+    <el-dialog :modal-append-to-body="false" :visible.sync="issuedReasonVisible" title="涓嶉�氳繃鍘熷洜" width="400px">
+      <div class="search_thing">
+        <div class="search_label">涓嶉�氳繃鍘熷洜锛�</div>
+        <div class="search_input"><el-input v-model="reason" clearable placeholder="璇疯緭鍏�" size="small"></el-input></div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button :disabled="loadingIssuedReason" @click="issuedReasonVisible=false">鍙栨秷</el-button>
+				<el-button :loading="loadingIssuedReason" type="primary" @click="handleIssuedReason">纭畾</el-button>
+			</span>
+    </el-dialog>
+    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="approveVisible" title="鎶ュ憡鎵瑰噯" width="80vw">
+      <div class="full-screen">
+        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
+        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
+      </div>
+      <div v-if="approveVisible" style="height: 80vh;">
+        <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+      </div>
+      <span slot="footer" class="dialog-footer">
+				<el-button :disabled="loadingApprove" @click="approveReasonVisible=true">涓嶆壒鍑�</el-button>
+				<el-button :loading="loadingApprove" type="primary" @click="subApprove">鎵� 鍑�</el-button>
+			</span>
+    </el-dialog>
+    <el-dialog :modal-append-to-body="false" :visible.sync="approveReasonVisible" title="涓嶆壒鍑嗗師鍥�" width="400px">
+      <div class="search_thing">
+        <div class="search_label">涓嶆壒鍑嗗師鍥狅細</div>
+        <div class="search_input"><el-input v-model="reason" clearable placeholder="璇疯緭鍏�" size="small"></el-input></div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button :disabled="loadingApproveReason" @click="approveReasonVisible=false">鍙栨秷</el-button>
+				<el-button :loading="loadingApproveReason" type="primary" @click="handleApproveReason">纭畾</el-button>
+			</span>
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" :visible.sync="addApproverDia" title="鎸囧畾鎵瑰噯浜哄憳"
+               width="400px"
+               @close="closeAddApproverDia">
+      <div class="body" style="display: flex;padding: 10px;align-items: center;">
+        <div class="search_label" style="width: 150px;"><span class="required-span">*</span>鎵瑰噯浜猴細</div>
+        <div class="search_input" style="width: 100%;">
+          <el-select v-model="approver" clearable filterable placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+            <el-option v-for="(item,i) in approverList" :key="i" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeAddApproverDia">鍙� 娑�</el-button>
+        <el-button :loading="loadingIssued" type="primary" @click="submitAddApprover">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" :visible.sync="addVerifyDia"
+               title="鎸囧畾瀹℃牳浜哄憳"
+               width="400px"
+               @close="closeAddVerifyDia">
+      <div class="body" style="display: flex;padding: 10px;align-items: center;">
+        <div class="search_label" style="width: 150px;"><span class="required-span">*</span>瀹℃牳浜猴細</div>
+        <div class="search_input" style="width: 100%;">
+          <el-select v-model="verifyUser" clearable filterable placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+            <el-option v-for="(item,i) in approverList" :key="i" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeAddVerifyDia">鍙� 娑�</el-button>
+        <el-button :loading="loadingVerify" type="primary" @click="handleSubmit">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <!--浜т笟閾句俊鎭煡鐪�-->
+<!--    <ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo>-->
+    <!--鎶ュ憡鏌ョ湅-->
+    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="viewIssuedVisible" title="鎶ュ憡鏌ョ湅"
+               width="80vw">
+      <div class="full-screen">
+        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
+        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
+      </div>
+      <div v-if="viewIssuedVisible" style="height: 80vh;">
+        <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+      </div>
+    </el-dialog>
+    <!--闄勪欢鏌ョ湅-->
+    <el-dialog :visible.sync="filesDialogVisible" title="闄勪欢鏌ョ湅" width="80%" @closed="closeFilesLook">
+      <div style="margin-bottom: 10px">
+        <el-upload ref='upload'
+                   :action="fileAction"
+                   :auto-upload="true"
+                   :before-upload="fileBeforeUpload" :data="{orderId: filesLookInfo.insOrderId}"
+                   :headers="uploadHeader" :on-error="onError"
+                   :on-success="handleSuccessUp"
+                   :show-file-list="false"
+                   accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;">
+          <el-button size="small" style="height: 38px" type="primary">闄勪欢涓婁紶</el-button>
+        </el-upload>
+      </div>
+      <lims-table :tableData="tableDataFile" :column="columnFile" @pagination="paginationFile" height="500px"
+                  key="tableDataFile" :page="pageFile" :tableLoading="tableLoadingFile"></lims-table>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue";
+// import ShowInfo from "../do/b1-material-ins-order/showInfo.vue";
+import file from "@/utils/file";
+import {
+  downAll,
+  examineReport,
+  pageInsReport,
+  ratifyReport,
+  sendBackTask,
+  upReportUrl,
+  writeReport
+} from "@/api/business/insReport";
+import {mapGetters} from "vuex";
+import {selectUserCondition} from "@/api/business/inspectionTask";
+import limsTable from "@/components/Table/lims-table.vue";
+import {delfile, downFile, getFileList} from "@/api/business/rawMaterialOrder";
+export default {
+  components: {limsTable, onlyoffice},
+  data() {
+    return {
+      entity: {
+        queryStatus: null,
+        code: null,
+        typeSource: null,
+      },
+      page: {
+        current: 1,
+        size: 20,
+        total: 0
+      },
+      upIndex: 0,
+      statusList: [],
+      claimVisible: false,
+      issuedVisible: false,
+      issuedReasonVisible: false,
+      approveVisible: false,
+      approveReasonVisible: false,
+      fullscreen: false,
+      loadingApproveReason: false,
+      loadingApprove: false,
+      loadingIssuedReason: false,
+      loadingIssued: false,
+      value: ``,
+      reason: '',
+      currentInfo: null,
+      option:null,
+      mutiList:[],
+      outLoading:false,
+      inLoading:false,
+      addApproverDia: false, // 鎸囧畾瀹℃壒浜哄憳寮规
+      approver: '', // 瀹℃壒浜哄憳
+      approverId: '', // 瀹℃壒浜哄憳
+      approverList: [],
+      addVerifyDia: false, // 鎸囧畾瀹℃牳浜哄憳寮规
+      verifyUser: null, // 瀹℃牳浜哄憳
+      loadingVerify: false, // 瀹℃牳浜哄憳
+      typeSourceList: [
+        {label: '鎴愬搧涓嬪崟', value: 0},
+        {label: '鍘熸潗鏂欎笅鍗�', value: 1},
+      ],
+      orderTypeList: [
+        {label: '濮旀墭璇曢獙', value: 'Customer-ordered test'},
+        {label: '鎶芥', value: '鎶芥'},
+        {label: '杩涘巶妫�楠�', value: '杩涘巶妫�楠�'},
+        {label: '瀛e害妫�楠�', value: 'Quarterly inspection'},
+      ],
+      showInfoDialog: false, // 浜т笟閾句俊鎭煡鐪�
+      isReport: 1,
+      activeFace: 0, // 1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍革紝榛樿涓�0
+      customsInspection: {},
+      currentId: null,
+      examine: null,
+      viewIssuedVisible: false,
+      queryStatusList: [
+        {label: '寰呮彁浜�', value: 0},
+        {label: '寰呭鏍�', value: 1},
+        {label: '寰呮壒鍑�', value: 2},
+      ],
+      state: 0,
+      orderId: 0,
+      inspectorList: [],//妫�楠屼汉鍛樺垪琛�
+      InspectionKey: 1,
+      typeSource: null,// 0:鎴愬搧涓嬪崟锛�1锛氬師鏉愭枡涓嬪崟
+      sonLaboratory: '', // 璇曢獙瀹�
+      filesDialogVisible: false,
+      filesLookInfo: {},
+      tableDataFile: [],
+      tableLoadingFile: false,
+      columnFile: [
+        {
+          dataType: 'tag',
+          label: '绫诲瀷',
+          prop: 'type',
+          formatData: (params) => {
+            if (params == 1) {
+              return '鍥剧墖'
+            } else if (params == 2) {
+              return '鏂囦欢'
+            } else {
+              return ''
+            }
+          },
+          formatType: (params) => {
+            if (params == 1) {
+              return 'success'
+            } else if (params == 2) {
+              return 'warning'
+            } else {
+              return ''
+            }
+          }
+        },
+        { label: '闄勪欢鍚嶇О', prop: 'fileName' },
+        { label: '涓婁紶浜�', prop: 'name' },
+        { label: '涓婁紶鏃堕棿', prop: 'createTime' },
+        {
+          dataType: 'action',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          width: '170px',
+          operation: [
+            {
+              name: '涓嬭浇',
+              type: 'text',
+              clickFun: (row) => {
+                this.handleDown(row);
+              }
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              clickFun: (row) => {
+                this.delete(row);
+              }
+            },
+          ]
+        }
+      ],
+      pageFile: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+      isCopper: null,
+      tableLoading: false,
+      valueTableData: [],
+      column: [
+        {
+          label: "鎶ュ憡缂栧彿",
+          prop: "code",
+          width: "160px",
+          dataType: "link",
+          linkMethod: "selectAllByOne",
+        },
+        {
+          label: "涓嬪崟绫诲埆",
+          prop: "typeSource",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "鎴愬搧涓嬪崟";
+            } else {
+              return "鍘熸潗鏂欎笅鍗�";
+            }
+          },
+        },
+        {
+          label: "妫�楠岀被鍨�",
+          prop: "orderType",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            return this.orderTypeList.find((m) => m.value == params).label;
+          },
+          formatType: (params) => {
+            return this.orderTypeList.find((m) => m.value == params).type;
+          },
+        },
+        { label: "鍒涘缓鏃堕棿", prop: "createTime" },
+        { label: "鎻愪氦浜�", prop: "writeUserName" },
+        { label: "鎻愪氦鏃堕棿", prop: "writeTime" },
+        {
+          label: "鎻愪氦鐘舵��",
+          prop: "state",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "寰呮彁浜�";
+            } else {
+              return "宸叉彁浜�";
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "danger";
+            } else {
+              return "success";
+            }
+          },
+        },
+        { label: "瀹℃牳浜�", prop: "examineUser" },
+        { label: "瀹℃牳鏃堕棿", prop: "examineTime" },
+        {
+          label: "瀹℃牳鐘舵��",
+          prop: "isExamine",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "涓嶉�氳繃";
+            } else {
+              return "閫氳繃";
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "danger";
+            } else {
+              return "success";
+            }
+          },
+        },
+        { label: "瀹℃牳澶囨敞", prop: "examineTell" },
+        { label: "鎵瑰噯浜�", prop: "ratifyUser" },
+        { label: "鎵瑰噯鏃堕棿", prop: "ratifyTime" },
+        {
+          label: "鎵瑰噯鐘舵��",
+          prop: "isRatify",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "涓嶆壒鍑�";
+            } else {
+              return "鎵瑰噯";
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "danger";
+            } else {
+              return "success";
+            }
+          },
+        },
+        { label: "鎵瑰噯澶囨敞", prop: "ratifyTell" },
+        {
+          fixed: "right",
+          dataType: "slot",
+          slot: "action",
+          width: '360px',
+          label: "鎿嶄綔"
+        }
+      ],
+      userName: '',
+    }
+  },
+  computed: {
+    ...mapGetters(["nickName", "userId"]),
+    action() {
+      return this.javaApi + '/insReport/upAll'
+    },
+    fileAction() {
+      return this.javaApi + '/unqualifiedHandler/uploadFileByUnqualified'
+    },
+    fileAction1() {
+      return this.javaApi + '/insReport/inReport'
+    }
+  },
+  mounted() {
+    this.refreshTable()
+  },
+  methods: {
+    refreshTable() {
+      this.tableLoading = true
+      pageInsReport({
+        ...this.page,...this.entity
+      }).then(res => {
+        this.tableLoading = false
+        this.page.total = res.data.body.total
+        this.valueTableData = res.data.body.records
+      })
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.refreshTable();
+    },
+    refresh() {
+      this.resetForm('entity')
+      this.refreshTable();
+    },
+    handleChange(arr){
+      this.mutiList = arr
+    },
+    // 鏌ョ湅妫�楠屾暟鎹�
+    viewInspectInfo (row) {
+      //褰撳墠妫�楠屼换鍔$殑妫�楠屼汉鍒楄〃
+      let inspectorList = []
+      if(row.userName){
+        inspectorList = row.userName.split(',')
+      }
+      inspectorList.push(this.nickName)
+      this.$router.push({
+        path: "/inspectionTask/inspection",
+        query: {
+          sonLaboratory: row.sonLaboratory,
+          state: 3,
+          typeSource: row.typeSource,
+          orderId: row.insOrderId,
+          inspectorList: inspectorList,
+        },
+      })
+    },
+    // 鎵撳紑鏌ョ湅闄勪欢寮规
+    handleFileLook (row) {
+      this.filesLookInfo = row
+      this.filesDialogVisible = true
+      this.getFileList()
+    },
+    // 鏌ヨ闄勪欢鏌ョ湅鍒楄〃鍥炶皟
+    getFileList() {
+      this.tableLoadingFile = true
+      getFileList({insOrderId: this.filesLookInfo.insOrderId}).then(res => {
+        this.tableLoadingFile = false
+        if (res.code === 200) {
+          this.tableDataFile = res.data.records
+          this.pageFile.total = res.data.total
+        }
+      }).catch(err => {
+        this.tableLoadingFile = false
+      })
+    },
+    paginationFile(page) {
+      this.pageFile.size = page.limit
+      this.getFileList()
+    },
+    closeFilesLook () {
+      this.filesDialogVisible = false
+    },
+    handleSuccessUp(response, ) {
+      this.upLoading = false;
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+        this.getFileList()
+      }
+    },
+    handleSuccessUp1(response, ) {
+      if (response.code == 200) {
+        this.$message.success('涓婁紶鎴愬姛');
+      }
+    },
+    // 涓嬭浇闄勪欢鐨勬枃浠�
+    handleDown(row){
+      downFile({
+        id: row.id,
+      }).then(res => {
+        if (res.code === 200) {
+          let url = '';
+          if(res.data.type==1){
+            url = this.javaApi+'/img/'+res.data.fileUrl
+            file.downloadIamge(url,row.fileName)
+          }else{
+            url = this.javaApi+'/word/'+res.data.fileUrl
+            const link = document.createElement('a');
+            link.href = url;
+            link.download = row.fileName;
+            link.click();
+          }
+        }
+      }).catch(error => {
+
+      })
+    },
+    // 鍒犻櫎闄勪欢鏂囦欢
+    delete(row) {
+      this.$confirm('鏄惁鍒犻櫎褰撳墠鏁版嵁?', "璀﹀憡", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      }).then(() => {
+        delfile({ id: row.id }).then(res => {
+          if (res.code === 500) {
+            return
+          }
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.getList()
+        }).catch(e => {
+          this.$message.error('鍒犻櫎澶辫触')
+        })
+      }).catch(() => { })
+    },
+    // 鏌ョ湅浜т笟閾句俊鎭�
+    openInfoDialog (row) {
+      this.showInfoDialog = true
+      this.$nextTick(() => {
+        this.$refs.showInfoDialog.getInfo(row.ifsInventoryId)
+      })
+    },
+    handleDowns(){
+      if(this.mutiList.length==0){
+        this.$message.error('璇烽�夋嫨鎶ュ憡')
+        return
+      }
+      let str = this.mutiList.map(m=>m.id).join(',')
+      this.outLoading = true
+      downAll({ids: str}).then(res => {
+        this.outLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛')
+        // const blob = new Blob([res],{ type: 'application/octet-stream' });
+        // const url = URL.createObjectURL(blob);
+        // const link = document.createElement('a');
+        // link.href = url;
+        // link.download = '鎶ュ憡.zip';
+        // link.click();
+        const link = document.createElement('a');
+        link.href = this.javaApi + res.message;
+        link.target = '_blank';
+        document.body.appendChild(link);
+        link.click();
+      })
+    },
+    beforeUpload(file){
+      const isZip = file.type === 'application/zip' || file.name.endsWith('.zip');
+      if (!isZip) {
+        this.$message.error('涓婁紶鏂囦欢鍙兘鏄� ZIP 鏍煎紡!');
+      }
+      if(isZip){
+        this.inLoading = true;
+      }
+      return isZip;
+    },
+    fileBeforeUpload(file) {
+      let flag = true
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload.clearFiles()
+        flag = false
+      }
+      if (!flag) {
+        return Promise.reject(flag); //姝g‘鐨勭粓姝�
+      }
+    },
+    fileBeforeUpload1(file) {
+      let flag = true
+      if (file.size > 1024 * 1024 * 10) {
+        this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+        this.$refs.upload1.clearFiles()
+        flag = false
+      }
+      if (!flag) {
+        return Promise.reject(flag); //姝g‘鐨勭粓姝�
+      }
+    },
+    handleSuccess(response,){
+      this.inLoading = false;
+      if (response.code == 200) {
+        this.$message.success('瀵煎叆鎴愬姛')
+        this.refreshTable()
+      }else{
+        this.$message.error(response.message)
+      }
+    },
+    onError(err, file, fileList,type) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload.clearFiles()
+    },
+    onError1(err, file, fileList,type) {
+      this.$message.error('涓婁紶澶辫触')
+      this.$refs.upload1.clearFiles()
+    },
+    confirmClaim() {
+      // console.log(this.$refs.Word.getValue())
+    },
+    selectAllByOne(row) {
+      this.isCopper = row.isCopper
+      this.customsInspection = row
+      this.activeFace = 2;
+      this.examine = 1;
+      this.isReport = 1
+      this.currentId = parseInt(row.insOrderId)
+      switch (row.isCopper) {
+        case 0:
+          // 鍘熸潗鏂�
+          this.$router.push({
+            path: "/materialOrder/customsInspection", query: {
+              customsInspection: row,
+              active: this.activeFace,
+              currentId: row.insOrderId,
+              isReport: this.isReport
+            }
+          });
+          break;
+        case null:
+          // 鎴愬搧
+          this.$router.push({
+            path: "/productOrder/add", query: {
+              examine: this.examine,
+              active: this.activeFace,
+              currentId: row.insOrderId
+            }
+          });
+          break;
+        case 1:
+          // 閾滄潗
+          this.$router.push({
+            path: "/materialOrder/copperOrder", query: {
+              active: this.activeFace,
+              currentId: row.insOrderId
+            }
+          });
+          break;
+      }
+    },
+    download(row) {
+      let url = row.urlS ? row.urlS : row.url;
+      const link = document.createElement('a');
+      link.href = this.javaApi + url;
+      link.target = '_blank';
+      document.body.appendChild(link);
+      link.click();
+    },
+    // 杩樺師鎿嶄綔
+    handleRestore(row) {
+      upReportUrl({
+        id: row.id
+      }).then(res => {
+        if (res.code === 200) {
+          this.$message.success('鎿嶄綔鎴愬姛')
+          this.refreshTable('page')
+        }
+      })
+    },
+    // 瀹℃牳鎸夐挳
+    handleIssued(row) {
+      this.currentInfo = row;
+      let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+      let fileType = "docx"
+      if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+        fileName = row.tempUrlPdf
+        fileType = "pdf"
+      }
+      fileName = fileName.replace('/word/','')
+      const userName = this.nickName
+      this.option = {
+        url: this.javaApi + "/word/" + fileName,
+        isEdit: false,
+        fileType: fileType,
+        title: fileName,
+        lang: 'zh-CN',
+        isPrint: false,
+        user_id: 1,
+        user_name: userName,
+        editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+      }
+      this.issuedVisible = true;
+    },
+    // 鏌ョ湅鎶ュ憡
+    viewIssued(row) {
+      this.currentInfo = row;
+      let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+      let fileType = "docx"
+      if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+        fileName = row.tempUrlPdf
+        fileType = "pdf"
+      }
+      fileName = fileName.replace('/word/','')
+      const userName = this.nickName
+      this.option = {
+        url: this.javaApi + "/word/" + fileName,
+        isEdit: false,
+        fileType: fileType,
+        title: fileName,
+        lang: 'zh-CN',
+        isPrint: false,
+        user_id: 1,
+        user_name: userName,
+        editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+      }
+      this.viewIssuedVisible = true;
+    },
+    // 閫�鍥炲埌浠诲姟
+    sendBackTask(row) {
+      this.$confirm('纭閫�鍥炲埌妫�楠屼换鍔�?閫�鍥炲悗闇�閲嶆柊鎻愪氦澶嶆牳', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.upLoad = true
+        sendBackTask({id: row.id}).then(res => {
+          this.upLoad = false
+          this.$message.success('閫�鍥炴垚鍔燂紒')
+          this.refreshTable('page')
+        }).catch(err => {
+          this.upLoad = false
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    // 瀹℃牳閫氳繃
+    submitAddApprover () {
+      if (!this.approver) {
+        this.$message.error('璇烽�夋嫨瀹℃壒浜�')
+        return
+      }
+      this.loadingIssued = true;
+      examineReport({
+        id: this.currentInfo.id,
+        userId: this.approver,
+        isExamine: 1
+      }).then(res => {
+        this.loadingIssued = false;
+        this.$message.success('鎻愪氦鎴愬姛')
+        this.refreshTable('page')
+        this.currentInfo = null;
+        this.addApproverDia = false
+        this.issuedVisible = false;
+      }).catch(e => {
+        this.$message.error('鎻愪氦澶辫触')
+        this.loadingIssued = false;
+      })
+    },
+    closeAddApproverDia () {
+      this.addApproverDia = false
+      this.approver = ''
+    },
+    // 鐐瑰嚮閫氳繃锛岄渶瑕侀�夋嫨鎵瑰噯浜哄憳
+    subIssued() {
+      this.getAuthorizedPerson()
+      this.addApproverDia = true
+    },
+    // 鑾峰彇浜哄憳鍒楄〃
+    getAuthorizedPerson() {
+      selectUserCondition({ type: 0 }).then((res) => {
+        let data = [];
+        res.data.forEach((a) => {
+          data.push({
+            label: a.name,
+            value: a.id,
+          });
+        });
+        this.approverList = data;
+      })
+    },
+    // 鎵瑰噯鎸夐挳
+    handleApprove(row) {
+      this.currentInfo = row;
+      let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+      let fileType = "docx"
+      if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+        fileName = row.tempUrlPdf
+        fileType = "pdf"
+      }
+      fileName = fileName.replace('/word/','')
+      const userName = this.nickName
+      this.option = {
+        url: this.javaApi + "/word/" + fileName,
+        isEdit: false,
+        fileType: fileType,
+        title: fileName,
+        lang: 'zh-CN',
+        isPrint: false,
+        user_id: 1,
+        user_name: userName,
+        editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+      }
+      this.approveVisible = true;
+    },
+    // 鎵瑰噯閫氳繃
+    subApprove() {
+      this.loadingApprove = true;
+      ratifyReport({
+        id: this.currentInfo.id,
+        isRatify: 1
+      }).then(res => {
+        this.loadingApprove = false;
+        this.$message.success('宸叉壒鍑�')
+        this.refreshTable('page')
+        this.currentInfo = null;
+        this.approveVisible = false;
+      })
+    },
+    handle (row) {
+      this.getAuthorizedPerson()
+      this.currentInfo = row;
+      this.addVerifyDia = true
+    },
+    // 鎻愪氦瀹℃牳浜烘搷浣�
+    handleSubmit(row) {
+      this.loadingVerify = true
+      writeReport({
+        id: this.currentInfo.id,
+        userId: this.verifyUser,
+      }).then(res => {
+        this.loadingVerify = false
+        this.addVerifyDia = false
+        this.$message.success('鎻愪氦鎴愬姛')
+        this.refreshTable('page')
+      }).catch(e => {
+        this.loadingVerify = false
+        this.$message.error('鎻愪氦澶辫触')
+      })
+    },
+    closeAddVerifyDia () {
+      this.addVerifyDia = false
+      this.verifyUser = ''
+    },
+    // 瀹℃牳涓嶉�氳繃鍘熷洜鎻愪氦
+    handleIssuedReason() {
+      if (!this.reason) {
+        return this.$message.error('璇疯緭鍏ュ師鍥�')
+      }
+      this.loadingIssuedReason = true;
+      examineReport({
+        id: this.currentInfo.id,
+        isExamine: 0,
+        examineTell: this.reason
+      }).then(res => {
+        this.loadingIssuedReason = false;
+        this.$message.success('鎿嶄綔鎴愬姛')
+        this.refreshTable('page')
+        this.currentInfo = null;
+        this.reason = '';
+        this.issuedVisible = false;
+        this.issuedReasonVisible = false;
+      }).catch(e => {
+        this.$message.error('鎿嶄綔澶辫触')
+        this.loadingIssuedReason = false;
+      })
+    },
+    // 涓嶆壒鍑嗗師鍥犳彁浜�
+    handleApproveReason() {
+      if (!this.reason) {
+        return this.$message.error('璇疯緭鍏ュ師鍥�')
+      }
+      this.loadingApproveReason = true
+      ratifyReport({
+        id: this.currentInfo.id,
+        isRatify: 0,
+        examineTell: this.reason
+      }).then(res => {
+        this.loadingApproveReason = false
+        this.$message.success('鎿嶄綔鎴愬姛')
+        this.refreshTable('page')
+        this.currentInfo = null;
+        this.reason = '';
+        this.approveVisible = false;
+        this.approveReasonVisible = false;
+      }).catch(e => {
+        this.$message.error('鎿嶄綔澶辫触')
+        this.loadingIssuedReason = false;
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+.title {
+  height: 60px;
+  line-height: 60px;
+}
+
+.search {
+  background-color: #fff;
+  height: 80px;
+  display: flex;
+  align-items: center;
+}
+
+.search_thing {
+  display: flex;
+  align-items: center;
+  height: 50px;
+}
+
+.search_label {
+  width: 120px;
+  font-size: 14px;
+  text-align: right;
+}
+
+.search_input {
+  width: calc(100% - 120px);
+}
+
+.table {
+  margin-top: 10px;
+  background-color: #fff;
+  width: calc(100% - 40px);
+  height: calc(100% - 60px - 80px - 10px - 40px);
+  padding: 20px;
+}
+
+.el-form-item {
+  margin-bottom: 16px;
+}
+
+.full-screen {
+  position: absolute;
+  right: 52px;
+  top: 22px;
+}
+
+.btns {
+  position: absolute;
+  right: 40px;
+  top: 50%;
+  transform: translate(0, -50%);
+  display: flex;
+  align-items: center;
+}
+
+.fullscreen {
+  height: 82vh
+}
+</style>
diff --git a/src/views/business/sample/components/detail.vue b/src/views/business/sample/components/detail.vue
new file mode 100644
index 0000000..f76f413
--- /dev/null
+++ b/src/views/business/sample/components/detail.vue
@@ -0,0 +1,197 @@
+<template>
+  <div style="width: 100%;height: 100%;overflow-y: auto;" class="detail">
+    <div>
+      <el-row class="title">
+        <el-col :span="12" style="padding-left: 20px;text-align: left;">鏍峰搧璇︽儏</el-col>
+        <el-col :span="12" style="text-align: right;">
+          <el-button size="small" @click="hanldeBack">杩斿洖</el-button>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="search">
+      <div class="search_thing">
+        <div class="search_label">鏍峰搧缂栧彿锛�</div>
+        <div class="search_input">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable
+							v-model="entity.sampleCode" disabled></el-input>
+        </div>
+      </div>
+      <div class="search_thing">
+        <div class="search_label">鏍峰搧鍚嶇О锛�</div>
+        <div class="search_input">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable
+							v-model="entity.sample" disabled></el-input>
+        </div>
+      </div>
+      <div class="search_thing">
+        <div class="search_label">鏍峰搧鏁伴噺锛�</div>
+        <div class="search_input">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable
+							v-model="entity.num" disabled></el-input>
+        </div>
+      </div>
+      <div class="search_thing">
+        <div class="search_label">鍗曚綅锛�</div>
+        <div class="search_input">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable
+							v-model="entity.unit" disabled></el-input>
+        </div>
+      </div>
+      <div class="search_thing">
+        <div class="search_label">鍏ュ簱鏃堕棿锛�</div>
+        <div class="search_input">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable
+							v-model="entity.date" disabled></el-input>
+        </div>
+      </div>
+      <div class="search_thing">
+        <div class="search_label">鍏ュ簱浜猴細</div>
+        <div class="search_input">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable
+							v-model="entity.user" disabled></el-input>
+        </div>
+      </div>
+      <div class="search_thing" >
+        <div class="search_label">搴撲綅鍙凤細</div>
+        <div class="search_input">
+          <el-input size="small" placeholder="璇疯緭鍏�" clearable
+							v-model="entity.code" disabled style="min-width: 230px;"></el-input>
+        </div>
+      </div>
+    </div>
+    <h4>妫�楠岄」鐩�</h4>
+    <div class="table">
+      <el-table class="el-table" ref="productTable" :data="products" height="380px" tooltip-effect="dark" border>
+				<el-table-column type="index" align="center" label="搴忓彿" width="70" :key="Math.random()">
+				</el-table-column>
+				<el-table-column prop="inspectionItem" label="妫�楠岄」" min-width="100"
+					show-overflow-tooltip></el-table-column>
+				<el-table-column prop="inspectionItemSubclass" label="妫�楠岄」鍒嗙被" min-width="100" show-overflow-tooltip v-if="PROJECT=='瑁呭鐢电紗'"></el-table-column>
+				<el-table-column prop="laboratory" label="瀹為獙瀹�" min-min-width="100" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="unit" label="鍗曚綅" min-width="100" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="equipValue" label="璁惧" min-width="100" show-overflow-tooltip>
+          <template slot-scope="scope">
+            {{handleData(scope.row.equipValue)}}
+          </template>
+        </el-table-column>
+				<el-table-column prop="entrustCode" label="濮旀墭缂栧彿" min-width="100" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="updateUserName" label="妫�楠屼汉" min-width="100" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="updateTime" label="妫�楠屾椂闂�" min-width="100" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="insResult" label="缁撹" min-width="100">
+					<template slot-scope="scope">
+            <el-tag
+              :type="scope.row.insResult==1?'success':'danger'" size="medium">{{scope.row.insResult==1?'鍚堟牸':'涓嶅悎鏍�'}}</el-tag>
+					</template>
+				</el-table-column>
+			</el-table>
+    </div>
+    <h4>鍑哄叆搴撳巻鍙�</h4>
+    <div class="table" style="margin-bottom: 20px;">
+      <el-table class="el-table" ref="productTable" :data="histories" height="380px" tooltip-effect="dark" border>
+				<el-table-column type="index" align="center" label="搴忓彿" width="70" :key="Math.random()">
+				</el-table-column>
+				<el-table-column prop="state" label="绫诲瀷"
+					show-overflow-tooltip>
+          <template slot-scope="scope">
+            <el-tag :type="scope.row.state==1?'success':'danger'">{{ scope.row.state==1?'鍏ュ簱':'鍑哄簱' }}</el-tag>
+          </template>
+        </el-table-column>
+				<el-table-column prop="createUserName" label="鎿嶄綔浜�"  show-overflow-tooltip></el-table-column>
+				<el-table-column prop="createTime" label="鎿嶄綔鏃堕棿"  show-overflow-tooltip></el-table-column>
+				<el-table-column prop="warehouseCode" label="搴撲綅鍙�" show-overflow-tooltip></el-table-column>
+				<!-- <el-table-column prop="price" label="瀛樻斁鍛ㄦ湡锛坔锛�" show-overflow-tooltip></el-table-column> -->
+			</el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props:['id'],
+  data(vm) {
+      return{
+        entity:{
+          num:1,
+        },
+        products:[],
+        histories:[]
+      }
+  },
+  mounted(){
+    this.getInfo()
+  },
+  methods:{
+    hanldeBack(){
+      this.$emit('hanldeBack')
+    },
+    getInfo(){
+      this.$axios.post(this.$api.warehouse.getSampleRecord, {
+        id: this.id
+      }).then(res => {
+        let {histories,insSample,sampleHistory,products} = res.data;
+        this.entity = {num:1,...insSample,...sampleHistory};
+        this.histories = histories;
+        this.products = products;
+      })
+    },
+    handleData(e){
+      let info = ''
+      if(e){
+        info = JSON.parse(e).map(item => {
+        return item.v;
+      }).join(',')
+      }
+      return info
+    }
+  }
+}
+</script>
+
+<style scoped>
+	.detail::-webkit-scrollbar{
+		width: 0;
+	}
+
+	.title {
+		height: 60px;
+		line-height: 60px;
+	}
+
+	.search {
+		background-color: #fff;
+		height: 120px;
+		display: flex;
+		align-items: center;
+    flex-wrap: wrap;
+	}
+
+	.search_thing {
+		display: flex;
+		align-items: center;
+		height: 40px;
+	}
+
+	.search_label {
+		width: 120px;
+		font-size: 14px;
+		text-align: right;
+	}
+
+	.search_input {
+		width: calc(100% - 120px);
+	}
+
+	.table {
+		margin-top: 10px;
+		background-color: #fff;
+		width: calc(100% - 40px);
+		padding: 20px;
+	}
+  h4{
+    font-size: 16px;
+    font-weight: normal;
+    margin-top: 10px;
+    margin-left: 20px;
+  }
+
+</style>
diff --git a/src/views/business/sample/index.vue b/src/views/business/sample/index.vue
new file mode 100644
index 0000000..886ecb4
--- /dev/null
+++ b/src/views/business/sample/index.vue
@@ -0,0 +1,704 @@
+<template>
+  <div class="capacity-scope">
+    <div v-if="!isDetail">
+      <div style="display: flex;justify-content: space-between">
+        <el-form :model="entity" ref="entity" size="small" :inline="true">
+          <el-form-item label="浠撳簱鍚嶇О" prop="warehouseId">
+            <el-select v-model="entity.warehouseId" placeholder="閫夋嫨浠撳簱" size="small" @change="warehouseChange">
+              <el-option v-for="item in warehouse" :key="item.id" :label="item.name" :value="item.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="璐ф灦" prop="shelfId">
+            <el-select v-model="entity.shelfId" placeholder="閫夋嫨璐ф灦" size="small" @change="handleShelf">
+              <el-option v-for="item in shelf" :key="item.id" :label="item.name" :value="item.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="鏍峰搧缂栧彿" prop="searchSampleCode">
+            <el-input placeholder="璇疯緭鍏ユ牱鍝佺紪鍙�" v-model="searchSampleCode" size="small">
+              <el-button slot="append" icon="el-icon-search" @click="handleSearch"></el-button>
+            </el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button size="small" style="color:#3A7BFA" @click="keepVisible=true">缁存姢</el-button>
+            <el-button size="small" style="color:#3A7BFA" @click="warehouseVisible=true,isEdit=false">娣诲姞浠撳簱</el-button>
+            <el-button size="small" style="color:#3A7BFA" @click="shelvesVisible=true,isEdit=false"
+                       :disabled="entity.warehouseId==null">娣诲姞璐ф灦</el-button>
+          </el-form-item>
+        </el-form>
+        <div>
+          <el-button size="small" type="primary" @click="storageVisible=true">鍏ュ簱</el-button>
+          <el-button size="small" type="primary" @click="exportVisible=true">鍑哄簱</el-button>
+        </div>
+      </div>
+      <div class="table" v-loading="tableLoading">
+        <table border="1" class="tables" cellpadding="10" style="table-layout:fixed;" v-if="tableList.length>0">
+          <tbody>
+          <tr v-for="(item,index) in tableList" :key="index">
+            <td v-for="(m,i) in item" :key="i" class="content">
+              <h4 v-if="m.row!=undefined">{{ m.row }} - {{ m.col }}</h4>
+              <ul>
+                <el-tooltip
+                  effect="dark"
+                  placement="top"
+                  v-for="(n,j) in m.samples"
+                  :key="j" :disabled="`${n.sample}${n.model}`.length<10">
+                  <div slot="content"><span>{{ n.sample }}</span>
+                    <span>&nbsp;({{ n.model }})&nbsp;[{{ n.sampleCode }}]</span></div>
+                  <li class="green"
+                      @click="handelDetail(n)">
+                    <i></i>
+                    <span>{{ n.sample }}</span>
+                    <span>&nbsp;({{ n.model }})&nbsp;[{{ n.sampleCode }}]</span>
+                    <!-- <span class="num">&nbsp;x{{ n.num }}</span> -->
+                  </li>
+                </el-tooltip>
+              </ul>
+            </td>
+          </tr>
+          <tr>
+            <td v-for="(item,index) in rowList" :key="index" style="background: ghostwhite;height: 20px;">{{ item }}
+            </td>
+          </tr>
+          </tbody>
+        </table>
+        <span v-else style="color: rgb(144, 147, 153);display: inline-block;position: absolute;top: 60%;left: 50%;transform: translate(-50%,-50%);">鏆傛棤鏁版嵁</span>
+      </div>
+    </div>
+    <Detail v-else @hanldeBack="isDetail=false" :id="currentId" />
+    <el-dialog title="鏍峰搧鍏ュ簱" :visible.sync="storageVisible" width="350px">
+      <el-row>
+        <el-col class="search_thing" :span="24">
+          <div class="search_label"><span class="required-span">* </span>鏍峰搧缂栧彿锛�</div>
+          <div class="search_input">
+            <el-input v-model="sampleCode" size="small"></el-input>
+          </div>
+        </el-col>
+      </el-row>
+      <el-tree :data="storageList" ref="tree" :props="{ children: 'warehouseShelfList', label: 'name' }" node-key="id"
+               :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen"
+               @node-collapse="nodeClose" :default-expanded-keys="expandedKeys" v-if="storageVisible"
+               empty-text="鏆傛棤鏁版嵁">
+        <div class="custom-tree-node" slot-scope="{ node, data }">
+          <el-row>
+            <el-col :span="24">
+              <span><i
+                :class="`node_i ${data.warehouseShelfList != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i>
+                {{ data.name }}</span>
+            </el-col>
+          </el-row>
+        </div>
+      </el-tree>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="storageVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="confirmStorage" :loading="upLoadStorage">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog title="鏍峰搧鍑哄簱" :visible.sync="exportVisible" width="350px">
+      <!-- <div class="shaoma">
+        <img src="../../../static/img/鎵爜.svg" alt="" style="margin-right: 5px;">
+        <span>鎵爜鍑哄簱</span>
+      </div> -->
+      <el-row>
+        <el-col class="search_thing" :span="24">
+          <div class="search_label"><span class="required-span">* </span>鏍峰搧缂栧彿锛�</div>
+          <div class="search_input">
+            <el-input v-model="sampleCode" size="small"></el-input>
+          </div>
+        </el-col>
+      </el-row>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="exportVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="confirmExport" :loading="upLoadExport">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog title="搴撲綅缁存姢" :visible.sync="keepVisible" width="350px" :append-to-body="true">
+      <el-tree :data="warehouse" ref="tree" :props="{ children: 'warehouseShelfList', label: 'name' }" node-key="id"
+               :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen"
+               @node-collapse="nodeClose" :default-expanded-keys="expandedKeys" v-if="keepVisible"
+               empty-text="鏆傛棤鏁版嵁">
+        <div class="custom-tree-node" style="width: 100%;" slot-scope="{ node, data }">
+          <el-row style="width: 100%;display: flex;align-items: center;">
+            <el-col :span="20">
+              <span><i
+                :class="`node_i ${node.level<2 ? 'el-icon-folder-opened': 'el-icon-tickets'}`"></i>
+                {{ data.name }}</span>
+            </el-col>
+            <el-col :span="4" v-if="node.level<3">
+              <el-button type="text" size="mini" icon="el-icon-edit" @click.stop="handleEdit(data,node.level)">
+              </el-button>
+              <el-button type="text" size="mini" icon="el-icon-delete" @click.stop="handleDelete(data,node.level)">
+              </el-button>
+            </el-col>
+          </el-row>
+        </div>
+      </el-tree>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="keepVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="keepVisible = false" >纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :title="isEdit?'浠撳簱淇敼':'浠撳簱鏂板'" :visible.sync="warehouseVisible" width="350px">
+      <el-row>
+        <el-col class="search_thing" :span="24">
+          <div class="search_label"><span class="required-span">* </span>浠撳簱鍚嶇О锛�</div>
+          <div class="search_input">
+            <el-input v-model="name" size="small" @keyup.enter.native="confirmWarehouse"></el-input>
+          </div>
+        </el-col>
+      </el-row>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="warehouseVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="confirmWarehouse" :loading="upLoadWarehouse">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :title="isEdit?'璐ф灦淇敼':'璐ф灦鏂板'" :visible.sync="shelvesVisible" width="350px">
+      <el-row>
+        <el-col class="search_thing" :span="24">
+          <div class="search_label"><span class="required-span">* </span>璐ф灦鍚嶇О锛�</div>
+          <div class="search_input">
+            <el-input v-model="shelves.name" size="small"></el-input>
+          </div>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col class="search_thing" :span="24">
+          <div class="search_label"><span class="required-span">* </span>璐ф灦灞傛暟锛�</div>
+          <div class="search_input">
+            <el-input v-model="shelves.row" size="small"></el-input>
+          </div>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col class="search_thing" :span="24">
+          <div class="search_label"><span class="required-span">* </span>璐ф灦鍒楁暟锛�</div>
+          <div class="search_input">
+            <el-input v-model="shelves.col" size="small"></el-input>
+          </div>
+        </el-col>
+      </el-row>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="shelvesVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="confirmShelves" :loading="upLoadShelves">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Detail from './components/detail.vue'
+import {
+  addShelf,
+  addWarehouse, delShelf, delWarehouse, getWarehouse,
+  inWarehouse,
+  outWarehouse, searchSampleId,
+  selectWarehouse,
+  upShelf,
+  upWarehouse
+} from "@/api/business/sample";
+export default {
+  components: {
+    Detail
+  },
+  data() {
+    return {
+      entity: {
+        warehouseId: null,
+        shelfId: null
+      },
+      warehouse: [],
+      shelf: [],
+      storageList:[],
+      storageVisible: false,
+      exportVisible: false,
+      keepVisible: false,
+      warehouseVisible: false,
+      shelvesVisible: false,
+      upLoadStorage: false,
+      upLoadExport: false,
+      upLoadWarehouse: false,
+      upLoadShelves: false,
+      tableList: [],
+      rowList: [],
+      value: '',
+      name:'',
+      shelves:{},
+      selectTree: [],
+      expandedKeys: [],
+      isEdit: false, //寮规--鏄惁鏄慨鏀�,榛樿涓篺alse
+      isDetail: false, //璇︽儏--鏄惁灞曠ず涓鸿鎯呴〉闈紝榛樿涓篺alse
+      currentEdit:null,//褰撳墠瑕佺淮鎶ょ殑淇℃伅
+      tableLoading:false,
+      sampleCode:'',
+      currentId:null,
+      searchSampleCode:''
+    }
+  },
+  mounted() {
+    this.selectList()
+  },
+  methods: {
+    selectList() {
+      selectWarehouse().then(res => {
+        this.warehouse = res.data
+        if(res.data.length==0){
+          this.entity.warehouseId = '';
+          this.entity.shelfId = '';
+          this.tableList = []
+        }
+        this.storageList = this.HaveJson(res.data).map(item=>{
+          item.warehouseShelfList&&item.warehouseShelfList.length>0&&item.warehouseShelfList.map(m=>{
+            let warehouseShelfList = [];
+            for (let i=1;i<m.row+1;i++){
+              let warehouseShelfList0 = []
+              for (let j=1;j<m.col+1;j++){
+                warehouseShelfList0.push({
+                  name:j+' 鍒�',
+                  id:j,
+                })
+              }
+              warehouseShelfList.push({
+                name:i+' 灞�',
+                id:i,
+                warehouseShelfList:warehouseShelfList0
+              })
+            }
+            m.warehouseShelfList = warehouseShelfList;
+            return m;
+          })
+          return item;
+        })
+        if(!this.entity.warehouseId&&this.warehouse.length>0){
+          this.entity.warehouseId = this.warehouse[0].id
+          this.warehouseChange(this.entity.warehouseId)
+          if(this.shelf.length>0){
+            this.entity.shelfId = this.shelf[0].id
+            this.handleShelf(this.entity.shelfId)
+          }else{
+            this.tableList = []
+          }
+        }else if(this.warehouse.length>0){
+          this.warehouseChange(this.entity.warehouseId)
+          if(this.shelf.length>0){
+            this.entity.shelfId = this.shelf[0].id
+            this.handleShelf(this.entity.shelfId)
+          }else{
+            this.tableList = []
+          }
+        }
+      })
+    },
+    // 鍏ュ簱
+    confirmStorage() {
+      if (!this.sampleCode) {
+        this.$message.error('璇峰~鍐欐牱鍝佺紪鍙�')
+        return
+      }
+      if (this.selectTree.length < 4) {
+        this.$message.error('璇烽�夋嫨鏍峰搧鍏ュ簱浣嶇疆')
+        return
+      }
+      this.upLoadStorage = true;
+      inWarehouse({
+        trees: this.selectTree.join('-'),
+        sampleCode:this.sampleCode
+      }).then(res => {
+        this.upLoadStorage = false;
+        this.storageVisible = false
+        this.sampleCode = '';
+        this.selectTree = []
+        this.$message.success('鍏ュ簱鎴愬姛')
+        this.handleShelf(this.entity.shelfId)
+      }).catch(err => {
+        this.upLoadStorage = false;
+      })
+    },
+    // 鍑哄簱
+    confirmExport() {
+      if (!this.sampleCode) {
+        this.$message.error('璇峰~鍐欐牱鍝佺紪鍙�')
+        return
+      }
+      this.upLoadExport = true;
+      outWarehouse({
+        sampleCode:this.sampleCode
+      }).then(res => {
+        this.upLoadExport = false;
+        this.exportVisible = false
+        this.sampleCode = '';
+        this.$message.success('鍑哄簱鎴愬姛')
+        this.handleShelf(this.entity.shelfId)
+      }).catch(err => {
+        this.upLoadExport = false;
+      })
+    },
+    // 娣诲姞/淇敼浠撳簱
+    confirmWarehouse() {
+      if (!this.name) {
+        this.$message.error('璇峰~鍐欎粨搴撳悕绉�')
+        return
+      }
+      this.upLoadWarehouse = true;
+      if(this.currentEdit&&this.currentEdit.id){
+        // 淇敼浠撳簱
+        upWarehouse({
+          name: this.name,
+          id:this.currentEdit.id
+        }).then(res => {
+          this.upLoadWarehouse = false;
+          this.warehouseVisible = false
+          // this.keepVisible = false
+          this.currentEdit = null;
+          this.$message.success('淇敼鎴愬姛')
+          this.selectList()
+          this.name = ''
+          this.warehouseChange(this.entity.warehouseId)
+        }).catch(err => {
+          this.upLoadWarehouse = false;
+        })
+      }else{
+        // 鏂板浠撳簱
+        addWarehouse({
+          name: this.name
+        }).then(res => {
+          this.upLoadWarehouse = false;
+          this.warehouseVisible = false
+          this.$message.success('娣诲姞鎴愬姛')
+          this.selectList()
+          this.name = ''
+          this.warehouseChange(this.entity.warehouseId)
+        }).catch(err => {
+          this.upLoadWarehouse = false;
+        })
+      }
+    },
+    // 娣诲姞/淇敼璐ф灦
+    confirmShelves() {
+      if (!this.shelves.name) {
+        this.$message.error('璇峰~鍐欒揣鏋跺悕绉�')
+        return
+      }
+      if (!this.shelves.row) {
+        this.$message.error('璇峰~鍐欒揣鏋跺眰鏁�')
+        return
+      }
+      if (!this.shelves.col) {
+        this.$message.error('璇峰~鍐欒揣鏋跺垪鏁�')
+        return
+      }
+      this.upLoadShelves = true;
+      if(this.currentEdit&&this.currentEdit.id){
+        // 淇敼
+        upShelf({
+          id:this.currentEdit.id,...this.shelves
+        }).then(res => {
+          this.upLoadShelves = false;
+          this.shelvesVisible = false
+          this.$message.success('淇敼鎴愬姛')
+          this.selectList()
+          this.currentEdit ={};
+        }).catch(err => {
+          this.upLoadShelves = false;
+        })
+      }else{
+        // 鏂板
+        addShelf({
+          warehouseId: this.entity.warehouseId,...this.shelves
+        }).then(res => {
+          this.upLoadShelves = false;
+          this.shelvesVisible = false
+          this.$message.success('娣诲姞鎴愬姛')
+          this.selectList()
+          this.shelves = {}
+        }).catch(err => {
+          this.upLoadShelves = false;
+        })
+      }
+      this.warehouseChange(this.entity.warehouseId)
+    },
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    handleNodeClick(val, node, el) { //鏍戠殑鍊�
+      this.selectTree[node.level-1] = val.id;
+    },
+    nodeOpen(data, node, el) {
+      $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened')
+      this.selectTree[node.level-1] = data.id;
+    },
+    nodeClose(data, node, el) {
+      $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder')
+    },
+    handleDelete(row, level) {
+      this.$confirm('鏄惁褰撳墠鏁版嵁?', "璀﹀憡", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      }).then(() => {
+        if (level == 1) {
+          // 鍒犻櫎浠撳簱
+          delWarehouse({
+            id: row.id
+          }).then(res => {
+            this.$message.success('鎴愬姛')
+            this.selectList()
+          }).catch(e => {
+            this.$message.error('澶辫触')
+          })
+        }else{
+          // 鍒犻櫎璐ф灦
+          delShelf({
+            id: row.id
+          }).then(res => {
+            this.$message.success('鎴愬姛')
+            this.selectList()
+          }).catch(e => {
+            this.$message.error('澶辫触')
+          })
+        }
+        this.warehouseChange(this.entity.warehouseId)
+      }).catch(() => {})
+    },
+    handleEdit(data, level) {
+      this.isEdit = true;
+      // 鍒ゆ柇鏄鍑犲眰绾э紝绗竴灞傜骇锛屼慨鏀逛粨搴擄紝绗簩灞傜骇淇敼璐ф灦
+      if (level == 1) {
+        this.warehouseVisible = true;
+        this.currentEdit = data;
+        this.name = data.name
+      } else {
+        this.shelvesVisible = true;
+        this.currentEdit = data;
+        this.shelves = {
+          name:data.name,
+          row:data.row,
+          col:data.col,
+          warehouseId:data.warehouseId
+        }
+      }
+    },
+    // 鏌ョ湅璇︽儏
+    handelDetail(row) {
+      this.currentId = row.id;
+      this.isDetail = true;
+    },
+    warehouseChange(val) {
+      this.tableList = []
+      let map = this.warehouse.find(a => {
+        return a.id === val ? a : null
+      })
+      this.shelf = map.warehouseShelfList;
+      this.entity.shelfId = '';
+    },
+    handleShelf(e){
+      if(e){
+        this.tableLoading = true;
+        getWarehouse({shelfId: e}).then(res => {
+          this.tableLoading = false;
+          let data = res.data;
+          let set =new Set()
+          this.tableList = [];
+          let arr = []
+          data.forEach(m=>{
+            set.add(m.col)
+            if(arr.length>0){
+              if(arr.find(n=>n.row==m.row)){
+                arr.push(m)
+              }else{
+                this.tableList.push(arr)
+                arr = []
+                arr.push(m)
+              }
+            }else{
+              arr.push(m)
+            }
+          })
+          this.tableList.push(arr)
+          this.rowList = [];
+          for(let i=0;i<set.size;i++){
+            this.rowList.push(`${i+1} 鍒梎)
+          }
+        }).catch(e=>{
+          this.tableLoading = false;
+        })
+      }
+    },
+    handleSearch(){
+      if(!this.searchSampleCode){
+        this.$message.error('璇疯緭鍏ユ牱鍝佺紪鍙�')
+        return;
+      }
+      searchSampleId({sampleCode: this.searchSampleCode}).then(res => {
+        if(res.code==200){
+          this.currentId = res.data;
+          this.isDetail = true;
+        }
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+.title {
+  height: 60px;
+  line-height: 60px;
+}
+
+.search {
+  background-color: #fff;
+  height: 80px;
+  display: flex;
+  align-items: center;
+  position: relative;
+}
+
+.search_thing {
+  display: flex;
+  align-items: center;
+  height: 50px;
+}
+
+.search_label {
+  width: 90px;
+  font-size: 14px;
+  text-align: right;
+}
+
+.search_input {
+  width: calc(100% - 120px);
+}
+
+.table {
+  margin-top: 10px;
+  background-color: #fff;
+  width: calc(100% - 40px);
+  height: calc(100% - 60px - 80px - 10px - 40px);
+  padding: 20px;
+  overflow-y: auto;
+}
+
+.el-form-item {
+  margin-bottom: 16px;
+}
+
+.btns {
+  position: absolute;
+  right: 10px;
+  top: 25px;
+  display: flex;
+  align-items: center;
+  z-index: 9;
+}
+
+.tables {
+  width: 100%;
+  height: 100%;
+  border-bottom: none;
+}
+
+.tables th {
+  font-size: 14px;
+}
+
+.tables td {
+  font-size: 12px;
+  text-align: center;
+  vertical-align: top;
+  border-color: rgb(192, 191, 191) !important;
+  padding: 5px;
+  box-sizing: border-box;
+  height: 120px;
+}
+
+.tables ul {
+  list-style-type: none;
+}
+
+.tables ul li {
+  border-radius: 3px;
+  padding: 4px 10px;
+  box-sizing: border-box;
+  margin-bottom: 5px;
+  font-size: 12px;
+  display: flex;
+  align-items: center;
+  justify-content: start;
+  color: #333333;
+  cursor: pointer;
+  overflow: hidden; /*瓒呭嚭閮ㄥ垎闅愯棌*/
+  white-space: nowrap; /*绂佹鎹㈣*/
+  text-overflow: ellipsis; /*鐪佺暐鍙�*/
+}
+
+.tables h4 {
+  color: #999999;
+  font-size: 14px;
+  font-weight: 400;
+  padding: 6px 0;
+}
+
+.tables i {
+  display: inline-block;
+  width: 6px;
+  height: 6px;
+  border-radius: 50%;
+  margin-right: 6px;
+}
+
+li:hover {
+  background: rgba(58, 123, 250, 0.18);
+}
+
+li:hover i {
+  background: #3A7BFA;
+}
+
+li:hover .num {
+  color: #3A7BFA;
+}
+
+.green {
+  background: #E0F6EA;
+}
+
+.green i {
+  background: #34BD66;
+}
+
+.green .num {
+  color: #34BD66;
+}
+
+.el-dialog {
+  position: relative;
+}
+
+.shaoma {
+  display: flex;
+  align-items: center;
+  font-size: 14px;
+  color: #3A7BFA;
+  position: absolute;
+  top: 23px;
+  right: 54px;
+  cursor: pointer;
+}
+
+.node_i {
+  color: orange;
+  font-size: 18px;
+}
+
+.custom-tree-node .el-button {
+  opacity: 0;
+}
+
+.custom-tree-node:hover .el-button {
+  opacity: 1;
+}
+>>>.el-loading-mask {
+  z-index: 10;
+}
+</style>
diff --git a/src/views/business/unpass/components/OAProcess.vue b/src/views/business/unpass/components/OAProcess.vue
new file mode 100644
index 0000000..b26260c
--- /dev/null
+++ b/src/views/business/unpass/components/OAProcess.vue
@@ -0,0 +1,250 @@
+<template>
+  <div>
+    <el-dialog :close-on-press-escape="false" :visible.sync="isShow" title="涓嶅悎鏍煎鐞�"
+               width="1040px"
+               @close="$emit('closeOAProcess')">
+
+      <table :border='true' class="table">
+        <tr>
+          <th class="th-title">1妫�楠屽憳</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{oneOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{oneInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{oneName}}<span v-if="oneName">锛�</span>{{oneTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">2妫�娴嬩富绠$‘璁�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{twoOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{twoInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{twoName}}<span v-if="twoName">锛�</span>{{twoTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">3鐗╂祦閮ㄧ‘璁�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{threeOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{threeInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{threeName}}<span v-if="threeName">锛�</span>{{threeTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">4浜у搧宸ョ▼甯堝鐞嗘剰瑙�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{fourOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{fourInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{fourName}}<span v-if="fourName">锛�</span>{{fourTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">5.鎬诲伐鎴栬�呭壇缁忕悊鐨勫鐞嗘剰瑙�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{fiveOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{fiveInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{fiveName}}<span v-if="fiveName">锛�</span>{{fiveTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">6璐ㄩ噺閮�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{sixOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{sixInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{sixName}}<span v-if="sixName">锛�</span>{{sixTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">7璐ㄩ噺閮ㄧ粡鐞�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{sevenOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{sevenInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{sevenName}}<span v-if="sevenName">锛�</span>{{sevenTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">8鏍哥畻鍛�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{eightOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{eightInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{eightName}}<span v-if="eightName">锛�</span>{{eightTime}}</th>
+        </tr>
+        <tr>
+          <th class="th-title">9鐗╂祦閮ㄧ储璧旂粨鏋�</th>
+          <th class="th-titleSec">澶勭悊缁撴灉</th>
+          <th class="th-info1">{{nineOperation}}</th>
+          <th class="th-titleSec">澶勭悊鎰忚</th>
+          <th class="th-info" colspan="3">{{nineInfo}}</th>
+          <th style="display:none;"></th>
+          <th style="display:none;"></th>
+          <th >{{nineName}}<span v-if="nineName">锛�</span>{{nineTime}}</th>
+        </tr>
+      </table>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "OAProcess",
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: {},
+  props: {
+    OAProcess: {
+      type: Boolean,
+      default: () => false
+    },
+  },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      isShow: this.OAProcess,
+      oneInfo: '',
+      twoInfo: '',
+      threeInfo: '',
+      fourInfo: '',
+      fiveInfo: '',
+      sixInfo: '',
+      sevenInfo: '',
+      eightInfo: '',
+      nineInfo: '',
+      oneTime: '',
+      twoTime: '',
+      threeTime: '',
+      fourTime: '',
+      fiveTime: '',
+      sixTime: '',
+      sevenTime: '',
+      eightTime: '',
+      nineTime: '',
+      oneName: '',
+      twoName: '',
+      threeName: '',
+      fourName: '',
+      fiveName: '',
+      sixName: '',
+      sevenName: '',
+      eightName: '',
+      nineName: '',
+      oneOperation: '',
+      twoOperation: '',
+      threeOperation: '',
+      fourOperation: '',
+      fiveOperation: '',
+      sixOperation: '',
+      sevenOperation: '',
+      eightOperation: '',
+      nineOperation: '',
+    }
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    getInfo (id) {
+      this.$axios.post(this.$api.unqualifiedHandler.getOaFlow, {
+        id: id
+      }).then(res => {
+        if (res.code === 200) {
+          const data = res.data
+          if (data.length > 0) {
+            data.forEach(item => {
+              if (item.nodeName === '1妫�楠屽憳') {
+                this.oneInfo = item.approvalOpinion
+                this.oneTime = item.approvalDate
+                this.oneName = item.approver
+                this.oneOperation = item.operation
+              } else if (item.nodeName === '2妫�娴嬩富绠$‘璁�') {
+                this.twoInfo = item.approvalOpinion
+                this.twoTime = item.approvalDate
+                this.twoName = item.approver
+                this.twoOperation = item.operation
+              } else if (item.nodeName === '3鐗╂祦閮ㄧ‘璁�') {
+                this.threeInfo = item.approvalOpinion
+                this.threeTime = item.approvalDate
+                this.threeName = item.approver
+                this.threeOperation = item.operation
+              } else if (item.nodeName === '4浜у搧宸ョ▼甯堝鐞嗘剰瑙�') {
+                this.fourInfo = item.approvalOpinion
+                this.fourTime = item.approvalDate
+                this.fourName = item.approver
+                this.fourOperation = item.operation
+              } else if (item.nodeName === '5.鎬诲伐鎴栬�呭壇缁忕悊鐨勫鐞嗘剰瑙�') {
+                this.fiveInfo = item.approvalOpinion
+                this.fiveTime = item.approvalDate
+                this.fiveName = item.approver
+                this.fiveOperation = item.operation
+              } else if (item.nodeName === '6璐ㄩ噺閮�') {
+                this.sixInfo = item.approvalOpinion
+                this.sixTime = item.approvalDate
+                this.sixName = item.approver
+                this.sixOperation = item.operation
+              } else if (item.nodeName === '7璐ㄩ噺閮ㄧ粡鐞�') {
+                this.sevenInfo = item.approvalOpinion
+                this.sevenTime = item.approvalDate
+                this.sevenName = item.approver
+                this.sevenOperation = item.operation
+              } else if (item.nodeName === '8鏍哥畻鍛�') {
+                this.eightInfo = item.approvalOpinion
+                this.eightTime = item.approvalDate
+                this.eightName = item.approver
+                this.eightOperation = item.operation
+              } else if (item.nodeName === '9鐗╂祦閮ㄧ储璧旂粨鏋�') {
+                this.nineInfo = item.approvalOpinion
+                this.nineTime = item.approvalDate
+                this.nineName = item.approver
+                this.nineOperation = item.operation
+              }
+            })
+          }
+        }
+      }).catch(err => {
+        this.submitDeclareLoading = false
+        console.log(err)
+      })
+    }
+  },
+}
+</script>
+
+<style scoped>
+.table {
+  width: 100%;
+  height: 500px;
+}
+.th-title {
+  width: 160px;
+  text-align: left;
+  background-color: #e0eaf5;
+  font-size: 16px;
+}
+.th-titleSec {
+  width: 70px;
+  background-color: #e0eaf5;
+  font-size: 16px;
+}
+.th-info {
+  width: 210px;
+  text-align: left;
+  font-size: 16px;
+}
+.th-info1 {
+  width: 100px;
+  text-align: center;
+  font-size: 16px;
+}
+</style>
diff --git a/src/views/business/unpass/components/PurchaseVerification.vue b/src/views/business/unpass/components/PurchaseVerification.vue
index 2e66c74..1071830 100644
--- a/src/views/business/unpass/components/PurchaseVerification.vue
+++ b/src/views/business/unpass/components/PurchaseVerification.vue
@@ -1,10 +1,10 @@
 <template>
   <div>
-    <el-dialog title="杩涜揣楠岃瘉鍘熷璁板綍" :visible.sync="isShow" width="1000px" :show-close="false" :close-on-click-modal="false"
-      style="max-height: 96vh; margin-top: 2vh" :modal-append-to-body="false" :close-on-press-escape="false">
+    <el-dialog title="杩涜揣楠岃瘉鍘熷璁板綍" :visible.sync="isShow" width="70%" :show-close="false" :close-on-click-modal="false"
+               :modal-append-to-body="false" :close-on-press-escape="false">
       <div class="search">
         <el-form :inline="true" :model="purchaseForm" label-position="right" :rules="purchaseFormRules"
-          ref="purchaseForm" class="form-inline" label-width="130px">
+          ref="purchaseForm" class="form-inline" label-width="120px">
           <el-row>
             <el-col :span="8">
               <el-form-item label="妫�楠岀紪鍙�:">
@@ -55,50 +55,49 @@
           </h4>
           <div class="title">涓�銆佷緵鏂逛骇鍝佹娴嬫姤鍛婄殑鍩烘湰淇℃伅纭</div>
           <el-form-item label="鏉愭枡鍚嶇О:" prop="basicName">
-            <el-radio-group v-model="purchaseForm.basicName" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicName" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="瑙勬牸鍨嬪彿:" prop="basicModel">
-            <el-radio-group v-model="purchaseForm.basicModel" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicModel" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="鏉愭枡鎵瑰彿:" prop="basicBatchNo">
-            <el-radio-group v-model="purchaseForm.basicBatchNo" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicBatchNo" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="鎵ц鏍囧噯:" prop="basicStandard">
-            <el-radio-group v-model="purchaseForm.basicStandard" :disabled="operationType === 'view'"
-              v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicStandard" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="鐢熶骇鏃ユ湡:" prop="basicDate">
-            <el-radio-group v-model="purchaseForm.basicDate" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicDate" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="渚涜揣鏁伴噺:" prop="basicNumber">
-            <el-radio-group v-model="purchaseForm.basicNumber" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicNumber" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="鏉愭枡棰滆壊:" prop="basicColor">
-            <el-radio-group v-model="purchaseForm.basicColor" :disabled="operationType === 'view'" v-removeAriaHidden>
+            <el-radio-group v-model="purchaseForm.basicColor" :disabled="operationType === 'view'">
               <el-radio label="1">绗﹀悎</el-radio>
               <el-radio label="2">涓嶇鍚�</el-radio>
               <el-radio label="3">涓嶉�傜敤</el-radio>
@@ -130,7 +129,7 @@
                 <el-table-column prop="inspectionItem" label="楠岃瘉椤圭洰" width="300"></el-table-column>
                 <el-table-column prop="result" label="楠岃瘉缁撴灉">
                   <template slot-scope="scope">
-                    <el-radio-group v-model="scope.row.result" v-removeAriaHidden :disabled="operationType === 'view'">
+                    <el-radio-group v-model="scope.row.result" :disabled="operationType === 'view'">
                       <el-radio label="1">绗﹀悎</el-radio>
                       <el-radio label="2">涓嶇鍚�</el-radio>
                       <el-radio label="3">涓嶉�傜敤</el-radio>
@@ -149,9 +148,7 @@
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="$emit('resetPurchaseDialog')">鍙� 娑�</el-button>
-        <el-button type="primary" @click="handlePurchase" :loading="handlePurchaseLoading"
-          v-if="operationType === 'add'">纭�
-          瀹�</el-button>
+        <el-button type="primary" @click="handlePurchase" :loading="handlePurchaseLoading" v-if="operationType === 'add'">纭畾</el-button>
       </span>
     </el-dialog>
     <el-dialog title="寰呴獙璇侀」鐩�" :visible.sync="factoryVerifyItemDia" width="1000px"
@@ -247,6 +244,7 @@
   // 鏂规硶闆嗗悎
   methods: {
     async getInsOrder(operationType, item) {
+      console.log('operationType----', operationType)
       this.operationType = operationType
       this.info = item
       // 鏌ヨ宸叉彁浜ょ殑鏁版嵁
@@ -346,7 +344,6 @@
 .headLine>>>.el-form-item__content {
   width: 68%;
 }
-
 >>>.el-form-item__content {
   display: inline-block;
 }
@@ -370,7 +367,7 @@
 }
 
 >>>.el-dialog__body {
-  max-height: 700px;
+  max-height: 600px;
   overflow-y: auto;
 }
 </style>
diff --git a/src/views/business/unpass/components/addUnPass.vue b/src/views/business/unpass/components/addUnPass.vue
index c1777e9..ed3c3cd 100644
--- a/src/views/business/unpass/components/addUnPass.vue
+++ b/src/views/business/unpass/components/addUnPass.vue
@@ -31,7 +31,7 @@
 </template>
 
 <script>
-import { getInsProductUnqualified } from '@/api/business/unpass.js'
+import {addUnqualifiedRetest, getInsProductUnqualified} from '@/api/business/unpass.js'
 export default {
   name: "addUnPass",
   // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
diff --git a/src/views/business/unpass/index-manage.vue b/src/views/business/unpass/index-manage.vue
new file mode 100644
index 0000000..a7de5dd
--- /dev/null
+++ b/src/views/business/unpass/index-manage.vue
@@ -0,0 +1,324 @@
+<template>
+  <div class="capacity-scope">
+    <div class="search">
+      <div>
+        <el-form :model="entity" ref="entity" size="small" :inline="true">
+          <el-form-item label="瑙勬牸鍨嬪彿" prop="model">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.model"
+                      @keyup.enter.native="refreshTable()"></el-input>
+          </el-form-item>
+          <el-form-item label="鏍峰搧鍚嶇О" prop="sample">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.sample"
+                      @keyup.enter.native="refreshTable()"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">鏌� 璇�</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="refresh">閲� 缃�</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+    <div>
+      <lims-table :tableData="tableData" :column="column"
+                  :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
+    </div>
+    <el-dialog
+      title="鎻愪氦"
+      :show-close="false"
+      :close-on-press-escape="false"
+      :close-on-click-modal="false"
+      :visible.sync="dialogVisible"
+      width="30%">
+      <span>鏄惁纭鎻愪氦OA锛�</span>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="submitOA" :loading="submitOALoading">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="鍒犻櫎"
+      :show-close="false"
+      :close-on-press-escape="false"
+      :close-on-click-modal="false"
+      :visible.sync="deleteVisible"
+      width="30%">
+      <span>鏄惁纭<span style="color: #FF4902">鍒犻櫎</span>OA锛�</span>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="deleteVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="cancelOA" :loading="cancelOALoading">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+    <UnPassDialog ref="unPassDialog" v-if="unPassDialog"
+                  :orderId="orderId"
+                  @resetForm="resetForm1"
+                  :unPassDialog="unPassDialog"></UnPassDialog>
+    <OAProcess ref="OAProcess"
+               :OAProcess="OAProcess"
+               @closeOAProcess="closeOAProcess"
+               v-if="OAProcess"></OAProcess>
+  </div>
+</template>
+
+<script>
+import UnPassDialog from "./components/unPassDialog.vue";
+import OAProcess from "./components/OAProcess.vue";
+import limsTable from "@/components/Table/lims-table.vue";
+import {deleteUnqualifiedHandler, page, pushOA} from "@/api/business/unqualifiedHandler";
+import ValueTable from "@/components/Table/value-table.vue";
+export default {
+  components: {
+    limsTable,
+    OAProcess,
+    UnPassDialog,
+    ValueTable
+  },
+  data() {
+    return {
+      handlerId: null,
+      entity: {
+        sample: null,
+        model: null,
+      },
+      tableData: [],
+      tableLoading: false,
+      column: [
+        { label: '缂栧彿', prop: 'no' },
+        {
+          label: "OA瀹℃牳鐘舵��",
+          prop: "oaState",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 1) {
+              return "寰呭鏍�";
+            } else if(params == 2) {
+              return "瀹℃牳涓�";
+            }  else if(params == 3) {
+              return "閫氳繃";
+            } else {
+              return "椹冲洖";
+            }
+          },
+          formatType: (params) => {
+            if (params == 1) {
+              return "warning";
+            } else if(params == 2) {
+              return "info";
+            }  else if(params == 3) {
+              return "success";
+            } else {
+              return "danger";
+            }
+          },
+        },
+        { label: '璁㈠崟鍙�', prop: 'orderNo' },
+        {
+          label: "闆朵欢鍙�",
+          prop: "partNo",
+          width: "160px",
+          dataType: "link",
+          linkMethod: "openUnPassDialog",
+        },
+        { label: '闆朵欢鎻忚堪', prop: 'partDesc' },
+        { label: '鐗╂枡鍚嶇О', prop: 'materialName' },
+        { label: '鐢熶骇鎵规', prop: 'productionBatch' },
+        { label: '鍒拌揣鏁伴噺', prop: 'cargoQuantity' },
+        { label: '瑙勬牸鍨嬪彿', prop: 'specsModels' },
+        { label: '鎶ユ鏃ユ湡', prop: 'inspectTime' },
+        { label: '鐘舵��', prop: 'statusDB' },
+        { label: '鍙嶉浜�', prop: 'feedbackUser' },
+        { label: '瑕佹楠岀殑閲囪喘鏁伴噺', prop: 'qtyToInspect' },
+        { label: '鍙嶉鏃ユ湡', prop: 'feedbackTime' },
+        {
+          label: "鍒嗙被",
+          prop: "classification",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "涓�绫讳笉鍚堟牸";
+            } else if(params == 1) {
+              return "浜岀被涓嶅悎鏍�";
+            } else {
+              return null
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "warning";
+            } else if(params == 1) {
+              return "info";
+            } else {
+              return "null";
+            }
+          },
+        },
+        { label: '渚涘簲鍟嗗悕绉�', prop: 'supplierName' },
+        {
+          label: "涓嶅悎鏍煎綊灞�",
+          prop: "offGradeAscription",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "鐢熶骇鍙嶉涓嶅悎鏍�";
+            } else if(params == 1) {
+              return "妫�娴嬩笉鍚堟牸";
+            } else {
+              return null
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "warning";
+            } else if(params == 1) {
+              return "info";
+            } else {
+              return "null";
+            }
+          },
+        },
+        { label: '涓嶅悎鏍兼弿杩�', prop: 'unqualifiedDesc' },
+        {
+          dataType: 'action',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          width: '180px',
+          operation: [
+            {
+              name: '鎻愪氦OA',
+              type: 'text',
+              clickFun: (row) => {
+                this.openOA(row);
+              },
+              disabled: (row, index) => {
+                return row.requestId !== null  // 鏈塺equestId璇存槑宸茬粡鎻愪氦杩嘜A锛屼笉鍙啀娆℃彁浜�
+              }
+            },
+            {
+              name: '鏌ョ湅OA娴佺▼',
+              type: 'text',
+              clickFun: (row) => {
+                this.OAView(row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              clickFun: (row) => {
+                this.deleteOA(row);
+              },
+              disabled: (row, index) => {
+                return row.requestId !== null  // 鏈塺equestId璇存槑宸茬粡鎻愪氦杩嘜A锛屼笉鍙啀娆℃彁浜�
+              }
+            },
+          ]
+        }
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+      statusList: [],
+      dialogVisible: false, // 纭鎻愪氦OA寮规
+      unPassDialog: false, // 涓嶅悎鏍煎鐞嗗脊妗�
+      orderId: '',
+      OAProcess: false, // OA娴佺▼寮规
+      submitOALoading: false, // OA娴佺▼寮规鎻愪氦鎸夐挳loading
+      deleteVisible: false, // OA娴佺▼鍒犻櫎寮规
+      cancelOALoading: false, // OA娴佺▼鍒犻櫎寮规鎻愪氦鎸夐挳loading
+    };
+  },
+  mounted() {
+    this.refreshTable()
+  },
+  methods: {
+    refreshTable() {
+      this.tableLoading = true
+      page({ ...this.page, ...this.entity }).then(res => {
+        this.tableLoading = false
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        this.tableLoading = false
+      })
+    },
+    // 閲嶇疆
+    refresh() {
+      this.resetForm('entity')
+      this.refreshTable()
+    },
+    // 鍒嗛〉鍒囨崲
+    pagination(page) {
+      this.page.size = page.limit
+      this.refreshTable()
+    },
+    // 鎵撳紑涓嶅悎鏍煎鐞嗗脊妗�
+    openUnPassDialog (row) {
+      this.unPassDialog = true
+      this.$nextTick(() => {
+        this.$refs.unPassDialog.getInsOrder('view', row)
+      })
+    },
+    // 鍏抽棴涓嶅悎鏍煎鐞嗗脊妗�
+    resetForm1 () {
+      this.$refs.unPassDialog.$refs['unPassForm'].resetFields();
+      this.unPassDialog = false
+    },
+    // 鎵撳紑鍒犻櫎OA纭寮规
+    deleteOA (row) {
+      this.handlerId = row.handlerId
+      this.deleteVisible = true
+    },
+    // 鎻愪氦鍒犻櫎鐢宠
+    cancelOA () {
+      this.de = true
+      deleteUnqualifiedHandler({id: this.handlerId,}).then(res => {
+        this.cancelOALoading = false
+        if (res.code === 200) {
+          this.deleteVisible = false
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.refreshTable('page')
+        }
+      }).catch(error => {
+        this.cancelOALoading = false
+        console.error(error);
+      });
+    },
+    // 鏌ョ湅鎻愪氦OA鐨勬暟鎹�
+    openOA (row) {
+      this.handlerId = row.handlerId
+      this.dialogVisible = true
+    },
+    // 鏌ョ湅OA娴佺▼
+    OAView (row) {
+      this.OAProcess = true
+      this.$nextTick(() => {
+        this.$refs.OAProcess.getInfo(row.handlerId)
+      })
+    },
+    // 鍏抽棴鏌ョ湅OA娴佺▼鐨勫脊妗�
+    closeOAProcess () {
+      this.OAProcess = false
+    },
+    //鎻愪氦OA
+    submitOA(row) {
+      // 鎻愪氦OA
+      this.submitOALoading = true
+      pushOA({handlerId: this.handlerId,}).then(res => {
+        this.submitOALoading = false
+        if (res.code === 200) {
+          this.dialogVisible = false
+          this.$message.success('鎻愪氦鎴愬姛')
+          this.refreshTable('page')
+        }
+      }).catch(error => {
+        this.submitOALoading = false
+        console.error(error);
+      });
+    }
+  }
+};
+</script>
diff --git a/src/views/business/unpass/index.vue b/src/views/business/unpass/index.vue
new file mode 100644
index 0000000..fb9b01e
--- /dev/null
+++ b/src/views/business/unpass/index.vue
@@ -0,0 +1,135 @@
+<template>
+  <div class="capacity-scope">
+    <div class="search">
+      <div>
+        <el-form :model="entity" ref="entity" size="small" :inline="true">
+          <el-form-item label="瑙勬牸鍨嬪彿" prop="model">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.model"
+                      @keyup.enter.native="refreshTable()"></el-input>
+          </el-form-item>
+          <el-form-item label="鏍峰搧鍚嶇О" prop="sample">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.sample"
+                      @keyup.enter.native="refreshTable()"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">鏌� 璇�</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="refresh">閲� 缃�</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+    <div>
+      <lims-table :tableData="tableData" :column="column"
+                  :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
+    </div>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import {pageInsUnPass} from "@/api/business/unpass";
+
+export default {
+  components: {limsTable},
+  data() {
+    return {
+      entity: {
+        sample: null,
+        model: null,
+      },
+      tableData: [],
+      tableLoading: false,
+      column: [
+        { label: '缂栧彿', prop: 'no' },
+        {
+          label: "OA瀹℃牳鐘舵��",
+          prop: "oaState",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "鍚�";
+            } else {
+              return "鏄�";
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "danger";
+            } else {
+              return "primary";
+            }
+          },
+        },
+        {
+          dataType: 'action',
+          fixed: 'right',
+          label: '鎿嶄綔',
+          width: '180px',
+          operation: [
+            {
+              name: '缂栬緫',
+              type: 'text',
+              clickFun: (row) => {
+                this.openAdd('edit', row);
+              },
+            },
+            {
+              name: '鍒犻櫎',
+              type: 'text',
+              clickFun: (row) => {
+                this.delete(row);
+              },
+            },
+            {
+              name: '鍗扮珷绠$悊',
+              type: 'text',
+              clickFun: (row) => {
+                this.fileManagement(row);
+              },
+            },
+          ]
+        }
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+    }
+  },
+  mounted() {
+    this.refreshTable()
+  },
+  methods :{
+    refreshTable() {
+      this.tableLoading = true
+      pageInsUnPass({ ...this.page, ...this.entity }).then(res => {
+        this.tableLoading = false
+        this.tableData = res.data.records
+        this.page.total = res.data.total
+      }).catch(err => {
+        this.tableLoading = false
+      })
+    },
+    // 閲嶇疆
+    refresh() {
+      this.resetForm('entity')
+      this.refreshTable()
+    },
+    // 鍒嗛〉鍒囨崲
+    pagination(page) {
+      this.page.size = page.limit
+      this.refreshTable()
+    },
+  }
+}
+</script>
+<style scoped>
+.search {
+  height: 46px;
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/views/login.vue b/src/views/login.vue
index 107f37f..c934170 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -8,49 +8,29 @@
       <div class="title_small">LIMS瀹為獙瀹ょ鐞嗙郴缁�</div>
       <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
         <el-form-item prop="username">
-          <el-input
-            v-model="loginForm.username"
-            type="text"
-            auto-complete="off"
-            placeholder="璐﹀彿"
-          >
+          <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="璐﹀彿">
             <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
           </el-input>
         </el-form-item>
         <el-form-item prop="password">
-          <el-input
-            v-model="loginForm.password"
-            type="password"
-            auto-complete="off"
-            placeholder="瀵嗙爜"
-            @keyup.enter.native="handleLogin"
-          >
+          <el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="瀵嗙爜"
+            @keyup.enter.native="handleLogin" show-password>
             <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
           </el-input>
         </el-form-item>
         <el-form-item prop="code" v-if="captchaEnabled">
-          <el-input
-            v-model="loginForm.code"
-            auto-complete="off"
-            placeholder="楠岃瘉鐮�"
-            style="width: 63%"
-            @keyup.enter.native="handleLogin"
-          >
+          <el-input v-model="loginForm.code" auto-complete="off" placeholder="楠岃瘉鐮�" style="width: 63%"
+            @keyup.enter.native="handleLogin">
             <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
           </el-input>
           <div class="login-code">
-            <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+            <img :src="codeUrl" @click="getCode" class="login-code-img" />
           </div>
         </el-form-item>
         <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">璁颁綇瀵嗙爜</el-checkbox>
         <el-form-item style="width:100%;">
-          <el-button
-            :loading="loading"
-            size="medium"
-            type="primary"
-            style="width:100%;"
-            @click.native.prevent="handleLogin"
-          >
+          <el-button :loading="loading" size="medium" type="primary" style="width:100%;"
+            @click.native.prevent="handleLogin">
             <span v-if="!loading">鐧� 褰�</span>
             <span v-else>鐧� 褰� 涓�...</span>
           </el-button>
@@ -61,9 +41,9 @@
       </el-form>
     </div>
     <!--  搴曢儴  -->
-<!--    <div class="el-login-footer">-->
-<!--      <span>Copyright 漏 2018-2025 ruoyi.vip All Rights Reserved.</span>-->
-<!--    </div>-->
+    <!--    <div class="el-login-footer">-->
+    <!--      <span>Copyright 漏 2018-2025 ruoyi.vip All Rights Reserved.</span>-->
+    <!--    </div>-->
   </div>
 </template>
 
@@ -103,7 +83,7 @@
   },
   watch: {
     $route: {
-      handler: function(route) {
+      handler: function (route) {
         this.redirect = route.query && route.query.redirect;
       },
       immediate: true
@@ -147,7 +127,7 @@
             Cookies.remove('rememberMe');
           }
           this.$store.dispatch("Login", this.loginForm).then(() => {
-            this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
+            this.$router.push({ path: this.redirect || "/" }).catch(() => { });
           }).catch(() => {
             this.loading = false;
             if (this.captchaEnabled) {
@@ -176,10 +156,12 @@
   display: flex;
   background-image: url("~@/assets/images/login.png");
   background-size: 100% 100%;
+
   .leftImg {
     width: calc(100% - 500px);
     height: 100%;
     overflow: hidden;
+
     img {
       width: 100%;
       min-height: 100%;
@@ -193,6 +175,7 @@
     align-items: center;
     flex-direction: column;
     justify-content: center;
+
     .title_big {
       color: #004EA2;
       font-size: 40px;
@@ -203,30 +186,37 @@
       color: #004EA2;
       font-size: 24px;
     }
+
     .login-form {
       border-radius: 6px;
       background: #ffffff;
       width: 400px;
       padding: 25px 25px 5px 25px;
+
       .el-input {
         height: 38px;
+
         input {
           height: 38px;
         }
       }
+
       .input-icon {
         height: 39px;
         width: 14px;
         margin-left: 2px;
       }
+
       .login-code {
         width: 33%;
         height: 38px;
         float: right;
+
         img {
           cursor: pointer;
           vertical-align: middle;
         }
+
         .login-code-img {
           height: 38px;
         }
@@ -234,6 +224,7 @@
     }
   }
 }
+
 .el-login-footer {
   height: 40px;
   line-height: 40px;
diff --git a/src/views/standard/standardLibrary/index.vue b/src/views/standard/standardLibrary/index.vue
index 21eeeb8..4ead05c 100644
--- a/src/views/standard/standardLibrary/index.vue
+++ b/src/views/standard/standardLibrary/index.vue
@@ -488,14 +488,10 @@
   obtainItemParameterList,
   selectTestObjectByName,
   selectStandardMethods,
-  addStandardMethodList,
   addStandardTree,
   updateStandardTree,
   selectsStandardMethodByFLSSM,
   upStandardProductList,
-  delStandardMethodByFLSSM,
-  delStandardProductByIds,
-  addStandardProduct,
   selectStandardProductListByMethodId,
   updateSection,
   upStandardProducts,
@@ -592,6 +588,7 @@
     this.selectTestObjectByName();
     this.selectStandardMethods();
     this.selectEnumByCategoryForSonLaboratory();
+    this.selectEnumByCategoryForsampleType();
     this.getStandardTemplate();
     this.selectStandardMethodsSec();
     this.token = {
@@ -845,22 +842,6 @@
         this.standardEnum = data;
       });
     },
-    addStandardMethodList() {
-      if (this.standardId == null || this.standardId == "") {
-        this.$message.error("鏍囧噯鏂规硶鏈�夋嫨");
-        return;
-      }
-      this.addLoad2 = true;
-      addStandardMethodList({
-        standardId: this.standardId,
-        tree: this.selectTree,
-      }).then((res) => {
-        this.addLoad2 = false;
-        this.addStandardDia = false;
-        this.$message.success("娣诲姞鎴愬姛");
-        this.selectsStandardMethodByFLSSM();
-      });
-    },
     // 鎻愪氦鍒嗙被娣诲姞
     addStandardTree() {
       if (this.addOb.sampleType == null || this.addOb.sampleType == "") {
@@ -1040,81 +1021,13 @@
         this.$message.success("宸蹭繚瀛�");
       });
     },
-    delStandardMethodByFLSSM(id) {
-      this.$confirm("鏄惁鍒犻櫎褰撳墠鏁版嵁?", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning",
-      })
-        .then(() => {
-          this.tableLoad = true;
-          delStandardMethodByFLSSM({ id: id }).then((res) => {
-            if (res.code == 201) {
-              return;
-            }
-            this.$message.success("宸插垹闄�");
-            this.selectsStandardMethodByFLSSM();
-          });
-        })
-        .catch(() => { });
-    },
     handleSelectionChange(val) {
       this.selects = [];
       val.forEach((a) => {
         this.selects.push(a.id);
       });
     },
-    delStandardProductByIds() {
-      if (this.selects.length == 0) {
-        this.$message.error("鏈�変腑鏁版嵁");
-        return;
-      }
-      this.$confirm(
-        "鏄惁鍒犻櫎褰撳墠閫変腑 " + this.selects.length + " 鏉℃暟鎹�?",
-        "璀﹀憡",
-        {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning",
-        }
-      )
-        .then(() => {
-          this.tableLoad = true;
-          delStandardProductByIds({
-            ids: JSON.stringify(this.selects),
-          }).then((res) => {
-            if (res.code == 201) {
-              return;
-            }
-            this.$message.success("宸插垹闄�");
-            this.selectsStandardMethodByFLSSM();
-          });
-        })
-        .catch(() => { });
-    },
-    addStandardProductDo() {
-      let selects = this.$refs.ValueTable.multipleSelection;
-      if (selects.length == 0) {
-        this.$message.error("鏈�夋嫨鏁版嵁");
-        return;
-      }
-      let select = [];
-      selects.forEach((a) => {
-        select.push(a.id);
-      });
-      this.tableLoad = true;
-      addStandardProduct({
-        ids: JSON.stringify(select),
-        tree: this.selectTree,
-      }).then((res) => {
-        if (res.code == 201) {
-          return;
-        }
-        this.$message.success("娣诲姞鎴愬姛");
-        this.selectsStandardMethodByFLSSM();
-      });
-      this.addProductDia = false;
-    },
+
     refreshList() {
       this.batchCopyDia = false;
       const index = this.standardList.findIndex(
diff --git a/src/views/structural/premises/index.vue b/src/views/structural/premises/index.vue
index 8ff0e53..0cb76e1 100644
--- a/src/views/structural/premises/index.vue
+++ b/src/views/structural/premises/index.vue
@@ -22,8 +22,9 @@
       </div>
     </div>
     <div class="table">
-      <lims-table :tableData="tableData" :column="column" :height="'calc(100vh - 250px)'" @pagination="pagination"
-        :page="page" :tableLoading="tableLoading"></lims-table>
+      <lims-table :tableData="tableData" :column="column"
+                  :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
     </div>
     <!--    鏂板瀹為獙瀹�-->
     <el-dialog :title="formTitle" :visible.sync="addDia" width="450px">
@@ -67,9 +68,9 @@
             placeholder="璇烽�夋嫨" size="small" style="width:100%" collapse-tags clearable></el-cascader>
         </el-form-item>
         <el-form-item label="鍗扮珷鍥剧墖" prop="address">
-          <el-upload class="avatar-uploader" :action="action" :headers="headers" accept='image/jpg,image/jpeg,image/png'
-            :show-file-list="false" :on-success="handleSuccess" :on-change="beforeUpload" ref="upload"
-            :on-error="onError">
+          <el-upload class="avatar-uploader" :action="action" :headers="uploadHeader"
+            accept='image/jpg,image/jpeg,image/png' :show-file-list="false" :on-success="handleSuccess"
+            :on-change="beforeUpload" ref="upload" :on-error="onError">
             <img v-if="dataForm.address" :src="javaApi + '/img/' + dataForm.address" class="avatar">
             <i v-else class="el-icon-plus avatar-uploader-icon"></i>
           </el-upload>
@@ -94,18 +95,12 @@
   upParameter
 } from "@/api/structural/laboratoryScope";
 import { getCertificationDetail } from "@/api/structural/laboratory";
-import { getToken } from "@/utils/auth";
 export default {
   components: {
     limsTable
 
   },
   computed: {
-    headers() {
-      return {
-        'Authorization': "Bearer " + getToken()
-      }
-    },
     action() {
       return this.javaApi
     }
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index dcfc2e9..2b823cb 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -6,11 +6,15 @@
         <pane size="12">
           <el-col>
             <div class="head-container addButton">
-              <el-input v-model="deptName" placeholder="閮ㄩ棬鍚嶇О" clearable size="small" prefix-icon="el-icon-search" style="margin-bottom: 20px" />
-              <el-button style="margin-left: 4px" type="primary" plain icon="el-icon-plus" size="mini" circle @click="addSchema"></el-button>
+              <el-input v-model="deptName" placeholder="閮ㄩ棬鍚嶇О" clearable size="small" prefix-icon="el-icon-search"
+                style="margin-bottom: 20px" />
+              <el-button style="margin-left: 4px" type="primary" plain icon="el-icon-plus" size="mini" circle
+                @click="addSchema"></el-button>
             </div>
             <div class="head-container">
-              <el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false" :filter-node-method="filterNode" ref="tree" node-key="id" default-expand-all highlight-current @node-click="handleNodeClick" />
+              <el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false"
+                :filter-node-method="filterNode" ref="tree" node-key="id" default-expand-all highlight-current
+                @node-click="handleNodeClick" />
             </div>
           </el-col>
         </pane>
@@ -20,11 +24,13 @@
             <div>
               <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
                 <el-form-item label="鐢ㄦ埛鍚嶇О" prop="nickName">
-                  <el-input v-model="queryParams.nickName" placeholder="璇疯緭鍏ョ敤鎴峰悕绉�" clearable @keyup.enter.native="handleQuery" />
+                  <el-input v-model="queryParams.nickName" placeholder="璇疯緭鍏ョ敤鎴峰悕绉�" clearable
+                    @keyup.enter.native="handleQuery" />
                 </el-form-item>
                 <el-form-item label="鐘舵��" prop="status">
                   <el-select v-model="queryParams.status" placeholder="鐢ㄦ埛鐘舵��" clearable>
-                    <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
+                    <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
+                      :value="dict.value" />
                   </el-select>
                 </el-form-item>
                 <el-form-item>
@@ -34,8 +40,10 @@
               </el-form>
             </div>
             <div class="options_button">
-              <el-button type="primary" size="mini" @click="openthirdParty" v-hasPermi="['system:user:add']">鑾峰彇涓夋柟浜哄憳</el-button>
-              <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:user:add']">鏂板鐢ㄦ埛</el-button>
+              <el-button type="primary" size="mini" @click="openthirdParty"
+                v-hasPermi="['system:user:add']">鑾峰彇涓夋柟浜哄憳</el-button>
+              <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd"
+                v-hasPermi="['system:user:add']">鏂板鐢ㄦ埛</el-button>
             </div>
           </div>
           <el-col>
@@ -45,25 +53,28 @@
               <el-table-column label="璐﹀彿" align="center" key="userName" prop="userName" :show-overflow-tooltip="true" />
               <el-table-column label="鐘舵��" align="center" key="status">
                 <template slot-scope="scope">
-                  <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
+                  <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
+                    @change="handleStatusChange(scope.row)"></el-switch>
                 </template>
               </el-table-column>
               <el-table-column label="鎵嬫満鍙风爜" align="center" key="phonenumber" prop="phonenumber" width="120" />
               <el-table-column label="鎿嶄綔" align="center" width="160" class-nickName="small-padding fixed-width">
                 <template slot-scope="scope">
-                  <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:user:edit']">淇敼</el-button>
-<!--                  <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">鍒犻櫎</el-button>-->
-<!--                  <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">-->
-<!--                    <el-button size="mini" type="text" icon="el-icon-d-arrow-right">鏇村</el-button>-->
-<!--                    <el-dropdown-menu slot="dropdown">-->
-<!--                      <el-dropdown-item command="handleResetPwd" icon="el-icon-key" v-hasPermi="['system:user:resetPwd']">閲嶇疆瀵嗙爜</el-dropdown-item>-->
-<!--                      <el-dropdown-item command="handleAuthRole" icon="el-icon-circle-check" v-hasPermi="['system:user:edit']">鍒嗛厤瑙掕壊</el-dropdown-item>-->
-<!--                    </el-dropdown-menu>-->
-<!--                  </el-dropdown>-->
+                  <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+                    v-hasPermi="['system:user:edit']">淇敼</el-button>
+                  <!--                  <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">鍒犻櫎</el-button>-->
+                  <!--                  <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">-->
+                  <!--                    <el-button size="mini" type="text" icon="el-icon-d-arrow-right">鏇村</el-button>-->
+                  <!--                    <el-dropdown-menu slot="dropdown">-->
+                  <!--                      <el-dropdown-item command="handleResetPwd" icon="el-icon-key" v-hasPermi="['system:user:resetPwd']">閲嶇疆瀵嗙爜</el-dropdown-item>-->
+                  <!--                      <el-dropdown-item command="handleAuthRole" icon="el-icon-circle-check" v-hasPermi="['system:user:edit']">鍒嗛厤瑙掕壊</el-dropdown-item>-->
+                  <!--                    </el-dropdown-menu>-->
+                  <!--                  </el-dropdown>-->
                 </template>
               </el-table-column>
             </el-table>
-            <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+            <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
+              :limit.sync="queryParams.pageSize" @pagination="getList" />
           </el-col>
         </pane>
       </splitpanes>
@@ -88,7 +99,9 @@
           <el-col :span="12">
             <el-form-item label="鐘舵��" prop="status">
               <el-radio-group v-model="form.status">
-                <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
+                <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{
+                  dict.label
+                }}</el-radio>
               </el-radio-group>
             </el-form-item>
           </el-col>
@@ -102,7 +115,8 @@
           <el-col :span="12">
             <el-form-item label="瑙掕壊" prop="roleIds">
               <el-select v-model="form.roleIds" multiple placeholder="璇烽�夋嫨瑙掕壊" clearable>
-                <el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId" :disabled="item.status == 1"></el-option>
+                <el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId"
+                  :disabled="item.status == 1"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -128,7 +142,8 @@
           <el-col :span="12">
             <el-form-item label="鍗曚綅" prop="company">
               <el-select v-model="form.company" placeholder="璇烽�夋嫨鍗曚綅" style="width: 100%" clearable>
-                <el-option v-for="item in postOptions" :key="item.id" :label="item.company" :value="item.id"></el-option>
+                <el-option v-for="item in postOptions" :key="item.id" :label="item.company"
+                  :value="item.id"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -136,30 +151,20 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="绛惧悕">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadAction"
-                :show-file-list="false"
-                accept=".png, .jpg, .jpeg, .gif"
-                :on-error="handleUploadError"
-                :on-success="handleUploadSuccess"
-                :before-upload="handleBeforeUpload">
-                <img v-if="signatureUrl" :src="signatureUrl" class="avatar" alt="">
+              <el-upload class="avatar-uploader" :action="uploadAction" :show-file-list="false"
+                :headers="upload.headers" accept=".png, .jpg, .jpeg, .gif" :on-error="handleUploadError"
+                :on-success="handleUploadSuccess" :before-upload="handleBeforeUpload">
+                <img v-if="form.signatureUrl" :src="javaApi + '/img/' + form.signatureUrl" class="avatar" alt="">
                 <i v-else class="el-icon-plus avatar-uploader-icon"></i>
               </el-upload>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="涓汉鐓х墖">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadAction"
-                :show-file-list="false"
-                accept=".png, .jpg, .jpeg, .gif"
-                :on-error="handleUploadError1"
-                :on-success="handleUploadSuccess1"
-                :before-upload="handleBeforeUpload1">
-                <img v-if="pictureUrl" :src="pictureUrl" class="avatar" alt="">
+              <el-upload class="avatar-uploader" :action="uploadAction" :show-file-list="false"
+                :headers="upload.headers" accept=".png, .jpg, .jpeg, .gif" :on-error="handleUploadError1"
+                :on-success="handleUploadSuccess1" :before-upload="handleBeforeUpload1">
+                <img v-if="form.pictureUrl" :src="javaApi + '/img/' + form.pictureUrl" class="avatar" alt="">
                 <i v-else class="el-icon-plus avatar-uploader-icon"></i>
               </el-upload>
             </el-form-item>
@@ -174,7 +179,9 @@
 
     <!-- 鐢ㄦ埛瀵煎叆瀵硅瘽妗� -->
     <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
-      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
         <i class="el-icon-upload"></i>
         <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
         <div class="el-upload__tip text-center" slot="tip">
@@ -182,7 +189,8 @@
             <el-checkbox v-model="upload.updateSupport" />鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
           </div>
           <span>浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢銆�</span>
-          <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">涓嬭浇妯℃澘</el-link>
+          <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
+            @click="importTemplate">涓嬭浇妯℃澘</el-link>
         </div>
       </el-upload>
       <div slot="footer" class="dialog-footer">
@@ -195,24 +203,22 @@
     <el-dialog title="鑾峰彇浜轰簨绯荤粺浜哄憳淇℃伅" :visible.sync="addthirdParty" width="70%">
       <div class="body" v-loading="thirdPartyLoading">
         <el-row>
-          <el-col :span="8" style="height: 70vh;overflow: hidden;" v-if="companiesList.length!=1">
-            <el-input v-model="search2" placeholder="杈撳叆鍏抽敭瀛楁悳绱�" clearable size="small"
-                      @clear="searchFilter2" @keyup.enter.native="searchFilter2"
-                      prefix-icon="el-icon-search" style="margin-bottom: 20px;width: 90%"/>
+          <el-col :span="8" style="height: 70vh;overflow: hidden;" v-if="companiesList.length != 1">
+            <el-input v-model="search2" placeholder="杈撳叆鍏抽敭瀛楁悳绱�" clearable size="small" @clear="searchFilter2"
+              @keyup.enter.native="searchFilter2" prefix-icon="el-icon-search" style="margin-bottom: 20px;width: 90%" />
             <el-tree :data="datathirdParty" node-key="companyId" :props="defaultProps" @node-click="nodeClick2"
-                     style="height: calc(100% - 42px);" @node-expand="nodeOpen0" :filter-node-method="filterNode2" ref="tree2"
-                     highlight-current>
+              style="height: calc(100% - 42px);" @node-expand="nodeOpen0" :filter-node-method="filterNode2" ref="tree2"
+              highlight-current>
             </el-tree>
           </el-col>
-          <el-col :span="companiesList.length==1?24:16" style="height: 70vh;padding-left: 8px;">
+          <el-col :span="companiesList.length == 1 ? 24 : 16" style="height: 70vh;padding-left: 8px;">
             <div style="display: flex;align-items: center;margin-bottom: 10px">
               <span style="width: 140px">鍛樺伐鍙�/鍛樺伐濮撳悕:</span>
               <el-input size="small" placeholder="璇疯緭鍏ュ憳宸ュ彿/鍛樺伐濮撳悕" @clear="searchPerson" clearable v-model="userSearch2"
-                        style="width: 50%"
-                        @keyup.enter.native="searchPerson()"></el-input>
+                style="width: 50%" @keyup.enter.native="searchPerson()"></el-input>
             </div>
             <el-table height="67vh" stripe :data="personList" v-loading="personLoad" ref="personTable"
-                      @selection-change="handleSelectionChange">
+              @selection-change="handleSelectionChange">
               <el-table-column type="selection" width="50">
               </el-table-column>
               <el-table-column prop="employeeID" label="鍛樺伐鍙�">
@@ -332,8 +338,6 @@
         url: process.env.VUE_APP_BASE_API + "/system/user/importData"
       },
       uploadAction: process.env.VUE_APP_BASE_API + '/deviceScope/uploadFile',
-      signatureUrl: '',
-      pictureUrl: '',
       // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
@@ -361,18 +365,18 @@
         userName: [
           { required: true, message: "璇峰~鍐欒处鍙�", trigger: "blur" }
         ],
-        nameEn: [
-          { required: true, message: "璇疯緭鍏ュ鍚岴N", trigger: "blur" }
-        ],
+        // nameEn: [
+        //   { required: true, message: "璇疯緭鍏ュ鍚岴N", trigger: "blur" }
+        // ],
         status: [
           { required: true, message: "璇烽�夋嫨鐘舵��", trigger: "change" }
         ],
         roleIds: [
           { required: true, message: "璇烽�夋嫨瑙掕壊", trigger: "change" }
         ],
-        password: [
-          { required: true, message: "瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
-        ],
+        // password: [
+        //   { required: true, message: "瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
+        // ],
         phonenumber: [
           {
             required: true,
@@ -384,7 +388,7 @@
       },
       // 鑾峰彇涓夋柟浜哄憳寮规
       addthirdParty: false,
-      thirdPartyLoading:false,
+      thirdPartyLoading: false,
       companiesList: [],
       search2: '',
       datathirdParty: [],
@@ -420,18 +424,18 @@
     getList() {
       this.loading = true;
       listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-          this.userList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        }
+        this.userList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      }
       );
     },
     // 鎵撳紑娣诲姞鏋舵瀯寮规
-    addSchema () {
+    addSchema() {
       this.addDia = true
     },
     // 鎻愪氦鏋舵瀯
-    addStandardTree () {
+    addStandardTree() {
       if (this.addOb.nickName == null || this.addOb.factory == '') {
         this.$message.error('鏋勬灦鍚嶇О鏄繀濉」')
         return
@@ -484,11 +488,11 @@
     // 鐢ㄦ埛鐘舵�佷慨鏀�
     handleStatusChange(row) {
       let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
-      this.$modal.confirm('纭瑕�"' + text + '""' + row.nickName + '"鐢ㄦ埛鍚楋紵').then(function() {
+      this.$modal.confirm('纭瑕�"' + text + '""' + row.nickName + '"鐢ㄦ埛鍚楋紵').then(function () {
         return changeUserStatus(row.userId, row.status);
       }).then(() => {
         this.$modal.msgSuccess(text + "鎴愬姛");
-      }).catch(function() {
+      }).catch(function () {
         row.status = row.status === "0" ? "1" : "0";
       });
     },
@@ -511,8 +515,12 @@
         sex: undefined,
         status: "0",
         company: '',
-        roleIds: []
+        roleIds: [],
+        signatureUrl: '',
+        pictureUrl: ''
       };
+      // this.signatureUrl = '';
+      // this.pictureUrl = ''
       this.resetForm("form");
     },
     /** 鎼滅储鎸夐挳鎿嶄綔 */
@@ -553,21 +561,21 @@
       this.thirdPartyLoading = true;
       selectCompaniesList().then(res => {
         this.companiesList = this.HaveJson(res.data);
-        if(this.companiesList.length ==1){
-          selectSimpleList({companyId: this.companiesList[0].companyId}).then(res => {
+        if (this.companiesList.length == 1) {
+          selectSimpleList({ companyId: this.companiesList[0].companyId }).then(res => {
             this.thirdPartyLoading = false;
             this.personListCopy = JSON.parse(JSON.stringify(res.data))
             this.personList = res.data
             this.$refs.personTable.doLayout()
           })
-        }else{
+        } else {
           this.thirdPartyLoading = false;
         }
         this.datathirdParty = this.tranListToTreeData(res.data, "ROOT");
       }).catch(() => {
         this.thirdPartyLoading = false;
       })
-      if(this.componentData.entity.roleId > 10000)this.$message.warning('鐢变簬鏈�変腑鍏蜂綋瑙掕壊锛屾柊澧炵敤鎴峰皢鎴愪负榛樿瑙掕壊')
+      if (this.componentData.entity.roleId > 10000) this.$message.warning('鐢变簬鏈�変腑鍏蜂綋瑙掕壊锛屾柊澧炵敤鎴峰皢鎴愪负榛樿瑙掕壊')
     },
     tranListToTreeData(list, rootValue) {
       const arr = [];
@@ -597,7 +605,7 @@
       this.getNodeParent(node)
       if (ob.companyId !== 'SC21') {
         this.personLoad = true
-        selectSimpleList({companyId: ob.companyId}).then(res => {
+        selectSimpleList({ companyId: ob.companyId }).then(res => {
           this.personListCopy = JSON.parse(JSON.stringify(res.data))
           this.personList = res.data
           this.personLoad = false
@@ -677,6 +685,7 @@
       const userId = row.userId || this.ids;
       getUser(userId).then(response => {
         this.form = response.data;
+        this.form.password = ''
         this.roleOptions = response.roles;
         this.$set(this.form, "roleIds", response.roleIds);
         this.open = true;
@@ -697,18 +706,18 @@
           }
         },
       }).then(({ value }) => {
-          resetUserPwd(row.userId, value).then(response => {
-            this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value);
-          });
-        }).catch(() => {});
+        resetUserPwd(row.userId, value).then(response => {
+          this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value);
+        });
+      }).catch(() => { });
     },
     /** 鍒嗛厤瑙掕壊鎿嶄綔 */
-    handleAuthRole: function(row) {
+    handleAuthRole: function (row) {
       const userId = row.userId;
       this.$router.push("/system/user-auth/role/" + userId);
     },
     /** 鎻愪氦鎸夐挳 */
-    submitForm: function() {
+    submitForm: function () {
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.userId != undefined) {
@@ -730,12 +739,12 @@
     /** 鍒犻櫎鎸夐挳鎿嶄綔 */
     handleDelete(row) {
       const userIds = row.userId || this.ids;
-      this.$modal.confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�').then(function() {
+      this.$modal.confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�').then(function () {
         return delUser(userIds);
       }).then(() => {
         this.getList();
         this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(() => {});
+      }).catch(() => { });
     },
     /** 涓嬭浇妯℃澘鎿嶄綔 */
     importTemplate() {
@@ -781,14 +790,14 @@
       // 濡傛灉涓婁紶鎴愬姛
       if (res.code == 200) {
         // 鑾峰彇瀵屾枃鏈粍浠跺疄渚�
-        let quill = this.Quill;
-        // 鑾峰彇鍏夋爣鎵�鍦ㄤ綅缃�
-        let length = quill.getSelection().index;
-        // 鎻掑叆鍥剧墖  res.url涓烘湇鍔″櫒杩斿洖鐨勫浘鐗囧湴鍧�
-        quill.insertEmbed(length, "image", process.env.VUE_APP_BASE_API + res.fileName);
-        // 璋冩暣鍏夋爣鍒版渶鍚�
-        quill.setSelection(length + 1);
-        this.signatureUrl = res.data.url
+        // let quill = this.Quill;
+        // // 鑾峰彇鍏夋爣鎵�鍦ㄤ綅缃�
+        // let length = quill.getSelection().index;
+        // // 鎻掑叆鍥剧墖  res.url涓烘湇鍔″櫒杩斿洖鐨勫浘鐗囧湴鍧�
+        // quill.insertEmbed(length, "image", process.env.VUE_APP_BASE_API + res.fileName);
+        // // 璋冩暣鍏夋爣鍒版渶鍚�
+        // quill.setSelection(length + 1);
+        this.form.signatureUrl = res.data.url
       } else {
         this.$message.error("鍥剧墖鎻掑叆澶辫触");
       }
@@ -819,14 +828,14 @@
       // 濡傛灉涓婁紶鎴愬姛
       if (res.code == 200) {
         // 鑾峰彇瀵屾枃鏈粍浠跺疄渚�
-        let quill = this.Quill;
-        // 鑾峰彇鍏夋爣鎵�鍦ㄤ綅缃�
-        let length = quill.getSelection().index;
-        // 鎻掑叆鍥剧墖  res.url涓烘湇鍔″櫒杩斿洖鐨勫浘鐗囧湴鍧�
-        quill.insertEmbed(length, "image", process.env.VUE_APP_BASE_API + res.fileName);
-        // 璋冩暣鍏夋爣鍒版渶鍚�
-        quill.setSelection(length + 1);
-        this.pictureUrl = res.data.url
+        // let quill = this.Quill;
+        // // 鑾峰彇鍏夋爣鎵�鍦ㄤ綅缃�
+        // let length = quill.getSelection().index;
+        // // 鎻掑叆鍥剧墖  res.url涓烘湇鍔″櫒杩斿洖鐨勫浘鐗囧湴鍧�
+        // quill.insertEmbed(length, "image", process.env.VUE_APP_BASE_API + res.fileName);
+        // // 璋冩暣鍏夋爣鍒版渶鍚�
+        // quill.setSelection(length + 1);
+        this.form.pictureUrl = res.data.url
       } else {
         this.$message.error("鍥剧墖鎻掑叆澶辫触");
       }
@@ -842,10 +851,12 @@
 .search_form {
   display: flex;
   justify-content: space-between;
+
   .options_button {
     margin-top: 3px;
   }
 }
+
 .avatar-uploader ::v-deep .el-upload {
   border: 1px dashed #666666;
   border-radius: 6px;
@@ -853,9 +864,11 @@
   position: relative;
   overflow: hidden;
 }
+
 .avatar-uploader ::v-deep .el-upload:hover {
   border-color: #409EFF;
 }
+
 .avatar-uploader-icon {
   font-size: 20px;
   color: #8c939d;
@@ -864,11 +877,13 @@
   line-height: 90px;
   text-align: center;
 }
+
 .avatar {
   width: 90px;
   height: 90px;
   display: block;
 }
+
 .addButton {
   display: flex;
   align-items: flex-start;

--
Gitblit v1.9.3