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"/>--> +<!-- <!–浜т笟閾句俊鎭煡鐪�–>--> +<!-- <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'"> 澶嶆祴娆℃暟锛�</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&¤tSample.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"> 鐢电紗閰嶇疆锛�</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> ({{ n.model }}) [{{ n.sampleCode }}]</span></div> + <li class="green" + @click="handelDetail(n)"> + <i></i> + <span>{{ n.sample }}</span> + <span> ({{ n.model }}) [{{ n.sampleCode }}]</span> + <!-- <span class="num"> 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