From bafc766371015823626440cb3f89cfac4a5ae321 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 10 三月 2025 15:39:29 +0800
Subject: [PATCH] 设备搬迁
---
src/api/cnas/resourceDemand/device.js | 1277 ++++++
src/views/CNAS/resourceDemand/device/index.vue | 263 +
src/views/CNAS/resourceDemand/device/component/files.vue | 1127 ++++++
src/views/CNAS/resourceDemand/device/component/management.vue | 1034 +++++
src/views/CNAS/resourceDemand/device/component/state.vue | 605 +++
src/views/CNAS/resourceDemand/device/component/check.vue | 675 +++
src/views/CNAS/resourceDemand/device/component/equipmentAcceptance.vue | 317 +
src/views/CNAS/resourceDemand/device/component/calibration.vue | 692 +++
src/components/Echart/echart.vue | 116
src/views/CNAS/resourceDemand/device/component/borrow.vue | 651 +++
src/views/CNAS/resourceDemand/device/component/operationInstruction.vue | 536 ++
src/utils/echarts.js | 353 +
src/views/CNAS/resourceDemand/device/component/device-overview.vue | 405 ++
src/views/CNAS/resourceDemand/device/component/record.vue | 457 ++
src/views/CNAS/resourceDemand/device/component/acquisitionConfig.vue | 754 ++++
src/views/CNAS/resourceDemand/device/component/fault.vue | 703 +++
src/views/CNAS/resourceDemand/device/component/acceptanceForm.vue | 192 +
src/views/CNAS/resourceDemand/device/component/resource-reservation.vue | 470 ++
src/views/CNAS/resourceDemand/device/component/operationOverview.vue | 219 +
src/views/CNAS/resourceDemand/device/component/maintenance.vue | 340 +
20 files changed, 11,186 insertions(+), 0 deletions(-)
diff --git a/src/api/cnas/resourceDemand/device.js b/src/api/cnas/resourceDemand/device.js
new file mode 100644
index 0000000..0071864
--- /dev/null
+++ b/src/api/cnas/resourceDemand/device.js
@@ -0,0 +1,1277 @@
+// 涓嶇‘瀹氬害璇勫畾鐩稿叧鎺ュ彛
+import request from "@/utils/request";
+
+//璁惧鏍戝舰
+export function treeDevice(query) {
+ return request({
+ url: "/deviceScope/treeDevice",
+ method: "get",
+ params: query,
+ });
+}
+
+//鏌ヨ璁惧璇︽儏鍒楄〃
+export function selectDeviceParameter(query) {
+ return request({
+ url: "/deviceScope/selectDeviceParameter",
+ method: "get",
+ params: query,
+ });
+}
+
+//鑾峰彇瀹為獙瀹ゅ悕绉�
+export function obtainItemParameterList(query) {
+ return request({
+ url: "/laboratoryScope/obtainItemParameterList",
+ method: "get",
+ params: query,
+ });
+}
+
+//璁惧宸ュ叿鏄庣粏瀵煎嚭
+export function exportEquipmentDetails(query) {
+ return request({
+ url: "/deviceScope/exportEquipmentDetails",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//璁惧閲岄潰閫夋嫨妫�楠岄」鐩�(鏍戝舰缁撴瀯)
+export function getInsProduction(query) {
+ return request({
+ url: "/capacityScope/getInsProduction",
+ method: "get",
+ params: query,
+ });
+}
+
+// 淇敼璁惧璇︽儏鍙傛暟
+export function upDeviceParameter(data) {
+ return request({
+ url: "/deviceScope/upDeviceParameter",
+ method: "post",
+ data: data,
+ });
+}
+
+// 娣诲姞璁惧璇︽儏鍙傛暟
+export function addDeviceParameter(data) {
+ return request({
+ url: "/deviceScope/addDeviceParameter",
+ method: "post",
+ data: data,
+ });
+}
+
+// 缁存姢鏁伴噰閰嶇疆
+export function numberCollect(data) {
+ return request({
+ url: "/deviceScope/numberCollect",
+ method: "post",
+ data: data,
+ });
+}
+
+//璁惧棰勭害鎺ュ彛-鍒楄〃
+export function getDeviceParameter(query) {
+ return request({
+ url: "/deviceScope/selectDeviceParameter",
+ method: "get",
+ params: query,
+ });
+}
+
+//鍒犻櫎璁惧璇︽儏鍙傛暟
+export function delDeviceParameter(query) {
+ return request({
+ url: "/deviceScope/delDeviceParameter",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鏌ヨ鏁伴噰閰嶇疆
+export function queryDataAcquisitionConfiguration(query) {
+ return request({
+ url: "/deviceScope/queryDataAcquisitionConfiguration",
+ method: "get",
+ params: query,
+ });
+}
+
+// 缁存姢鏁伴噰閰嶇疆
+export function saveDataAcquisitionConfiguration(data) {
+ return request({
+ url: "/deviceScope/saveDataAcquisitionConfiguration",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍒犻櫎鏁伴噰閰嶇疆
+export function deleteDataAcquisitionConfiguration(data) {
+ return request({
+ url: "/deviceScope/deleteDataAcquisitionConfiguration",
+ method: "post",
+ data: data,
+ });
+}
+
+//璁惧鏍″噯璁″垝鍒楄〃鏌ヨ
+export function pageDeviceCalibrationPlan(query) {
+ return request({
+ url: "/deviceCalibrationPlan/pageDeviceCalibrationPlan",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鎻愪氦鎵瑰噯閫氱煡
+export function submiatRatifyDeviceCalibrationPlan(data) {
+ return request({
+ url: "/deviceCalibrationPlan/submiatRatifyDeviceCalibrationPlan",
+ method: "post",
+ data: data,
+ });
+}
+
+//璁惧鏍″噯璁″垝瀵煎嚭
+export function exportDeviceCalibrationPlanDetail(query) {
+ return request({
+ url: "/deviceCalibrationPlan/exportDeviceCalibrationPlanDetail",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+// 璁惧鏍″噯 鏂板 鏇存柊
+export function addOrUpdateDeviceMetricRecord(data) {
+ return request({
+ url: "/deviceMetricRecord/addOrUpdateDeviceMetricRecord",
+ method: "post",
+ data: data,
+ });
+}
+
+//璁惧鏍″噯璁″垝鍒犻櫎
+export function delDeviceCalibrationPlan(query) {
+ return request({
+ url: "/deviceCalibrationPlan/delDeviceCalibrationPlan",
+ method: "delete",
+ params: query,
+ });
+}
+
+//璁惧鏍″噯璁″垝璇︽儏鍒犻櫎
+export function delDeviceCalibrationPlanDetail(query) {
+ return request({
+ url: "/deviceCalibrationPlan/delDeviceCalibrationPlanDetail",
+ method: "delete",
+ params: query,
+ });
+}
+
+//璁惧鏍″噯璁″垝璇︽儏鍒楄〃
+export function pageDeviceCalibrationPlanDetail(query) {
+ return request({
+ url: "/deviceCalibrationPlan/pageDeviceCalibrationPlanDetail",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板璁惧鏍″噯璁″垝璇︽儏
+export function addDeviceCalibrationPlanDetail(data) {
+ return request({
+ url: "/deviceCalibrationPlan/addDeviceCalibrationPlanDetail",
+ method: "post",
+ data: data,
+ });
+}
+
+// 淇敼璁惧鏍″噯璁″垝璇︽儏
+export function updateDeviceCalibrationPlanDetail(data) {
+ return request({
+ url: "/deviceCalibrationPlan/updateDeviceCalibrationPlanDetail",
+ method: "post",
+ data: data,
+ });
+}
+
+// 璁惧鏍″噯璁″垝鎵瑰噯
+export function ratifyDeviceCalibrationPlan(data) {
+ return request({
+ url: "/deviceCalibrationPlan/ratifyDeviceCalibrationPlan",
+ method: "post",
+ data: data,
+ });
+}
+
+//鏌ヨ璁惧鏍″噯璁″垝璇︽儏
+export function getDeviceCalibrationPlan(query) {
+ return request({
+ url: "/deviceCalibrationPlan/getDeviceCalibrationPlan",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板璁惧鏍″噯璁″垝
+export function addDeviceCalibrationPlan(data) {
+ return request({
+ url: "/deviceCalibrationPlan/addDeviceCalibrationPlan",
+ method: "post",
+ data: data,
+ });
+}
+
+// 淇敼璁惧鏍″噯璁″垝
+export function updateDeviceCalibrationPlan(data) {
+ return request({
+ url: "/deviceCalibrationPlan/updateDeviceCalibrationPlan",
+ method: "post",
+ data: data,
+ });
+}
+
+//閫氳繃璁惧鍒嗙被鑾峰彇璁惧鍒楄〃
+export function deviceScopeSearch(query) {
+ return request({
+ url: "/deviceScope/search",
+ method: "get",
+ params: query,
+ });
+}
+
+//鏌ヨ璁惧鏍告煡璁″垝璇︽儏
+export function getDeviceExaminePlan(query) {
+ return request({
+ url: "/deviceExaminePlan/getDeviceExaminePlan",
+ method: "get",
+ params: query,
+ });
+}
+
+// 娣诲姞璁惧鏍告煡璁″垝
+export function addDeviceExaminePlan(data) {
+ return request({
+ url: "/deviceExaminePlan/addDeviceExaminePlan",
+ method: "post",
+ data: data,
+ });
+}
+
+// 璁惧鏍告煡璁″垝鎵归噺缂栬緫
+export function updateDeviceExaminePlan(data) {
+ return request({
+ url: "/deviceExaminePlan/updateDeviceExaminePlan",
+ method: "post",
+ data: data,
+ });
+}
+
+//璁惧鏍告煡璁″垝鍒犻櫎
+export function delDeviceExaminePlan(query) {
+ return request({
+ url: "/deviceExaminePlan/delDeviceExaminePlan",
+ method: "delete",
+ params: query,
+ });
+}
+
+//璁惧鏍告煡璁″垝鍒楄〃
+export function pageDeviceExaminePlan(query) {
+ return request({
+ url: "/deviceExaminePlan/pageDeviceExaminePlan",
+ method: "get",
+ params: query,
+ });
+}
+
+// 璁惧鏍告煡璁″垝鎻愪氦鎵瑰噯閫氱煡
+export function submitRatifyDeviceExaminePlan(data) {
+ return request({
+ url: "/deviceExaminePlan/submitRatifyDeviceExaminePlan",
+ method: "post",
+ data: data,
+ });
+}
+
+//瀵煎嚭璁惧鏍告煡璁″垝
+export function exportDeviceExaminePlanDetail(query) {
+ return request({
+ url: "/deviceExaminePlan/exportDeviceExaminePlanDetail",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎璁惧鏍告煡璁″垝璇︽儏
+export function delDeviceExaminePlanDetail(query) {
+ return request({
+ url: "/deviceExaminePlan/delDeviceExaminePlanDetail",
+ method: "delete",
+ params: query,
+ });
+}
+
+//璁惧鏍告煡璁″垝璇︽儏鍒楄〃
+export function pageDeviceExaminePlanDetail(query) {
+ return request({
+ url: "/deviceExaminePlan/pageDeviceExaminePlanDetail",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板璁惧鏍告煡璁″垝璇︽儏
+export function addDeviceExaminePlanDetail(data) {
+ return request({
+ url: "/deviceExaminePlan/addDeviceExaminePlanDetail",
+ method: "post",
+ data: data,
+ });
+}
+
+// 淇敼璁惧鏍告煡璁″垝璇︽儏
+export function updateDeviceExaminePlanDetail(data) {
+ return request({
+ url: "/deviceExaminePlan/updateDeviceExaminePlanDetail",
+ method: "post",
+ data: data,
+ });
+}
+
+// 璁惧鏍告煡璁″垝鎵瑰噯
+export function ratifyDeviceExaminePlan(data) {
+ return request({
+ url: "/deviceExaminePlan/ratifyDeviceExaminePlan",
+ method: "post",
+ data: data,
+ });
+}
+
+//鏍告煡璁板綍瀵煎嚭
+export function exportReviewExamineRecordDetail(query) {
+ return request({
+ url: "/deviceExaminePlan/exportReviewExamineRecordDetail",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鏍告煡瀵规瘮瀵煎嚭
+export function exportReviewExamineRecordContrast(query) {
+ return request({
+ url: "/deviceExaminePlan/exportReviewExamineRecordContrast",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鏌ヨ鏍告煡瀵规瘮璁板綍
+export function getExamineRecordContrast(query) {
+ return request({
+ url: "/deviceExaminePlan/getExamineRecordContrast",
+ method: "get",
+ params: query,
+ });
+}
+
+// 瀹℃牳鏍告煡瀵规瘮璁板綍
+export function reviewExamineRecordContrast(data) {
+ return request({
+ url: "/deviceExaminePlan/reviewExamineRecordContrast",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鏂板鏍告煡瀵规瘮璁板綍
+export function addExamineRecordContrast(data) {
+ return request({
+ url: "/deviceExaminePlan/addExamineRecordContrast",
+ method: "post",
+ data: data,
+ });
+}
+
+//鏌ヨ鏍告煡璁板綍
+export function getExamineRecord(query) {
+ return request({
+ url: "/deviceExaminePlan/getExamineRecord",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板鏍告煡璁板綍
+export function addExamineRecord(data) {
+ return request({
+ url: "/deviceExaminePlan/addExamineRecord",
+ method: "post",
+ data: data,
+ });
+}
+
+// 澶嶆牳鏍告煡璁板綍
+export function reviewExamineRecord(data) {
+ return request({
+ url: "/deviceExaminePlan/reviewExamineRecord",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍒嗛〉鏌ヨ璁惧淇濆吇璁″垝
+export function selectDeviceMaintenancePlanByPage(query) {
+ return request({
+ url: "/deviceMaintenancePlan/selectDeviceMaintenancePlanByPage",
+ method: "get",
+ params: query,
+ });
+}
+
+// 璁惧淇濆吇璁″垝鎻愪氦瀹℃牳
+export function submitReviewMaintenancePlanStatus(data) {
+ return request({
+ url: "/deviceMaintenancePlan/submitReviewMaintenancePlanStatus",
+ method: "post",
+ data: data,
+ });
+}
+
+//鏌ヨ璁惧淇濆吇璁″垝璇︽儏
+export function getMaintenancePlanDetail(query) {
+ return request({
+ url: "/deviceMaintenancePlan/getMaintenancePlanDetail",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板璁惧淇濆吇璁″垝
+export function addMaintenancePlan(data) {
+ return request({
+ url: "/deviceMaintenancePlan/addMaintenancePlan",
+ method: "post",
+ data: data,
+ });
+}
+
+// 淇敼璁惧淇濆吇璁″垝
+export function updateMaintenancePlan(data) {
+ return request({
+ url: "/deviceMaintenancePlan/updateMaintenancePlan",
+ method: "post",
+ data: data,
+ });
+}
+
+//瀵煎嚭璁惧淇濆吇璁″垝
+export function exportDeviceMaintenancePlan(query) {
+ return request({
+ url: "/deviceMaintenancePlan/exportDeviceMaintenancePlan",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎璁惧淇濆吇璁″垝
+export function deleteMaintenancePlan(query) {
+ return request({
+ url: "/deviceMaintenancePlan/deleteMaintenancePlan",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鍒嗛〉鏌ヨ閲忓�兼函婧愯鍒�
+export function selectDeviceTraceabilityManagementByPage(query) {
+ return request({
+ url: "/deviceTraceabilityManagement/selectDeviceTraceabilityManagementByPage",
+ method: "get",
+ params: query,
+ });
+}
+
+// 閲忓�兼函婧愯鍒掓彁浜ゆ壒鍑�
+export function submitReviewTraceabilityManagementStatus(data) {
+ return request({
+ url: "/deviceTraceabilityManagement/submitReviewTraceabilityManagementStatus",
+ method: "post",
+ data: data,
+ });
+}
+
+//鏌ヨ閲忓�兼函婧愯鍒掕鎯�
+export function getTraceabilityManagementDetail(query) {
+ return request({
+ url: "/deviceTraceabilityManagement/getTraceabilityManagementDetail",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板閲忓�兼函婧愯鍒�
+export function addTraceabilityManagement(data) {
+ return request({
+ url: "/deviceTraceabilityManagement/addTraceabilityManagement",
+ method: "post",
+ data: data,
+ });
+}
+
+// 淇敼閲忓�兼函婧愯鍒�
+export function updateTraceabilityManagement(data) {
+ return request({
+ url: "/deviceTraceabilityManagement/updateTraceabilityManagement",
+ method: "post",
+ data: data,
+ });
+}
+
+// 閲忓�兼函婧愯鍒掑鏍哥姸鎬佷慨鏀�
+export function reviewTraceabilityManagementStatus(data) {
+ return request({
+ url: "/deviceTraceabilityManagement/reviewTraceabilityManagementStatus",
+ method: "post",
+ data: data,
+ });
+}
+
+//瀵煎嚭閲忓�兼函婧愯鍒�
+export function exportDeviceTraceabilityManagement(query) {
+ return request({
+ url: "/deviceTraceabilityManagement/exportDeviceTraceabilityManagement",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎閲忓�兼函婧愯鍒�
+export function deleteTraceabilityManagement(query) {
+ return request({
+ url: "/deviceTraceabilityManagement/deleteTraceabilityManagement",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鍒╃敤澶栭儴璁惧鐢宠鍒楄〃
+export function pageDeviceExternalApply(query) {
+ return request({
+ url: "/deviceExternalApply/pageDeviceExternalApply",
+ method: "get",
+ params: query,
+ });
+}
+
+//鍊熺敤澶栭儴浠櫒-瀵煎嚭
+export function exportDeviceExternalApply(query) {
+ return request({
+ url: "/deviceExternalApply/exportDeviceExternalApply",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎鍒╃敤澶栭儴璁惧鐢宠
+export function delDeviceExternalApply(query) {
+ return request({
+ url: "/deviceExternalApply/delDeviceExternalApply",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鏌ヨ鍒╃敤澶栭儴璁惧鐢宠
+export function getDeviceExternalApply(query) {
+ return request({
+ url: "/deviceExternalApply/getDeviceExternalApply",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板鍒╃敤澶栭儴璁惧鐢宠
+export function addDeviceExternalApply(data) {
+ return request({
+ url: "/deviceExternalApply/addDeviceExternalApply",
+ method: "post",
+ data: data,
+ });
+}
+
+//cnas璁惧浣跨敤璁板綍鍒嗛〉鏌ヨ
+export function deviceRecordPage(query) {
+ return request({
+ url: "/deviceRecord/deviceRecordPage",
+ method: "get",
+ params: query,
+ });
+}
+
+// 璁惧浣跨敤璁板綍淇濆瓨
+export function saveDeviceRecord(data) {
+ return request({
+ url: "/deviceRecord/saveDeviceRecord",
+ method: "post",
+ data: data,
+ });
+}
+
+// 璁惧浣跨敤璁板綍缂栬緫
+export function updateDeviceRecord(data) {
+ return request({
+ url: "/deviceRecord/updateDeviceRecord",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍒犻櫎璁惧浣跨敤璁板綍
+export function deleteDeviceRecord(query) {
+ return request({
+ url: "/deviceRecord/deleteDeviceRecord",
+ method: "delete",
+ params: query,
+ });
+}
+//浣跨敤璁板綍 瀵煎嚭
+export function exportUseRecord(query) {
+ return request({
+ url: "/deviceRecord/exportUseRecord",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鏂板璁惧妗f
+export function addDocument(data) {
+ return request({
+ url: "/deviceDocuments/addDocument",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鑾峰彇鐩稿叧鏂囨。鏁版嵁鐨刟pi-鏇存柊
+export function updateDocument(data) {
+ return request({
+ url: "/deviceDocuments/updateDocument",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍒犻櫎璁惧妗f
+export function deleteDocumentById(query) {
+ return request({
+ url: "/deviceDocuments/deleteDocumentById",
+ method: "delete",
+ params: query,
+ });
+}
+//
+
+//璁惧楠屾敹鍒楄〃
+export function pageDeviceAcceptance(query) {
+ return request({
+ url: "/deviceAcceptance/pageDeviceAcceptance",
+ method: "get",
+ params: query,
+ });
+}
+
+//璁惧楠屾敹闄勪欢鍒楄〃
+export function getDeviceAcceptanceFileList(query) {
+ return request({
+ url: "/deviceAcceptance/getDeviceAcceptanceFileList",
+ method: "get",
+ params: query,
+ });
+}
+
+//璁惧楠屾敹闄勪欢鍒犻櫎
+export function delDeviceAcceptanceFileList(query) {
+ return request({
+ url: "/deviceAcceptance/delDeviceAcceptanceFileList",
+ method: "delete",
+ params: query,
+ });
+}
+
+//璁惧楠屾敹锛堣澶囷級瀵煎嚭
+export function exportDeviceAcceptance(query) {
+ return request({
+ url: "/deviceAcceptance/exportDeviceAcceptance",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎璁惧楠屾敹
+export function delDeviceAcceptance(query) {
+ return request({
+ url: "/deviceAcceptance/delDeviceAcceptance",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鏌ヨ璁惧楠屾敹
+export function getDeviceAcceptance(query) {
+ return request({
+ url: "/deviceAcceptance/getDeviceAcceptance",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板璁惧楠屾敹
+export function addDeviceAcceptance(data) {
+ return request({
+ url: "/deviceAcceptance/addDeviceAcceptance",
+ method: "post",
+ data: data,
+ });
+}
+
+// 缂栬緫璁惧楠屾敹
+export function updateDeviceAcceptance(data) {
+ return request({
+ url: "/deviceAcceptance/updateDeviceAcceptance",
+ method: "post",
+ data: data,
+ });
+}
+
+//璁惧鏍″噯 鍒嗛〉鏌ヨ
+export function deviceMetricRecordPage(query) {
+ return request({
+ url: "/deviceMetricRecord/deviceMetricRecordPage",
+ method: "get",
+ params: query,
+ });
+}
+
+//璁惧鏍″噯 鏂板 鏇存柊
+export function saveOrUpdateDeviceMetric(data) {
+ return request({
+ url: "/deviceMetrics/saveOrUpdateDeviceMetric",
+ method: "post",
+ data: data,
+ });
+}
+
+//璁惧鏍″噯 鏌ヨ鏍″噯鏉$洰
+export function showDeviceMetricsCopy(query) {
+ return request({
+ url: "/deviceMetricRecord/showDeviceMetricsCopy",
+ method: "get",
+ params: query,
+ });
+}
+
+//璁惧鏍″噯 鍒犻櫎
+export function deleteDeviceMetricRecord(query) {
+ return request({
+ url: "/deviceMetricRecord/deleteDeviceMetricRecord",
+ method: "delete",
+ params: query,
+ });
+}
+
+//璁惧鏍″噯 瀵煎嚭
+export function deviceMetricRecordExport(query) {
+ return request({
+ url: "/deviceMetricRecord/deviceMetricRecordExport",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎鏂囦欢
+export function deleteCNASFile(query) {
+ return request({
+ url: "/personBasicInfo/deleteCNASFile",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鏌ヨ璁惧妗f鍒楄〃
+export function getAllDocuments(query) {
+ return request({
+ url: `/deviceDocuments/getAllDocuments`,
+ method: "get",
+ params: query,
+ });
+}
+
+//璁惧妗f瀵煎嚭
+export function exportDeviceFile(query) {
+ return request({
+ url: "/deviceScope/exportDeviceFile",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//璁惧鏍″噯 璁惧缁存姢琛� 鏌ヨ
+export function selectDeviceMetric(query) {
+ return request({
+ url: "/deviceMetrics/selectDeviceMetric",
+ method: "get",
+ params: query,
+ });
+}
+
+//璁惧鏍″噯 鍒犻櫎
+export function deleteDeviceMetrics(query) {
+ return request({
+ url: "/deviceMetrics/deleteDeviceMetrics",
+ method: "delete",
+ params: query,
+ });
+}
+
+//璁惧淇濆吇鍗曟潯瀵煎嚭
+export function exportMaintenanceRecord(query) {
+ return request({
+ url: "/deviceMaintain/exportMaintenanceRecord",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//璁惧缁存姢鍒犻櫎
+export function deleteDeviceMaintenance(query) {
+ return request({
+ url: "/deviceMaintain/deleteDeviceMaintenance",
+ method: "delete",
+ params: query,
+ });
+}
+
+// 鏂板璁惧缁存姢淇濆吇
+export function addDeviceMaintenance(data) {
+ return request({
+ url: "/deviceMaintain/addDeviceMaintenance",
+ method: "post",
+ data: data,
+ });
+}
+//璁惧缁存姢琛� 鏌ヨ
+export function getDeviceMaintenancePage(query) {
+ return request({
+ url: "/deviceMaintain/getDeviceMaintenancePage",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鍊熺敤-淇濆瓨
+export function saveDeviceBorrow(data) {
+ return request({
+ url: "/deviceBorrow/saveDeviceBorrow",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍊熺敤-鏌ョ湅
+export function getDeviceBorrow(query) {
+ return request({
+ url: "/deviceBorrow/getDeviceBorrow",
+ method: "get",
+ params: query,
+ });
+}
+
+//鍊熺敤-瀵煎嚭
+export function deviceBorrowExport(query) {
+ return request({
+ url: "/deviceBorrow/deviceBorrowExport",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍊熺敤-鍒犻櫎
+export function deleteDeviceBorrow(query) {
+ return request({
+ url: "/deviceBorrow/deleteDeviceBorrow",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鍊熺敤-鍒楄〃
+export function deviceBorrowPage(query) {
+ return request({
+ url: "/deviceBorrow/deviceBorrowPage",
+ method: "get",
+ params: query,
+ });
+}
+
+// 璁惧鍚敤/鍋滅敤 淇濆瓨锛屾彁浜わ紝椹冲洖锛岄�氳繃鎺ュ彛
+export function saveDeviceState(data) {
+ return request({
+ url: "/deviceState/saveDeviceState",
+ method: "post",
+ data: data,
+ });
+}
+
+//閫氳繃璁惧缂栧彿鑾峰彇璁惧鍒楄〃
+export function selectDeviceByCode(query) {
+ return request({
+ url: "/deviceScope/selectDeviceByCode",
+ method: "get",
+ params: query,
+ });
+}
+
+//璁惧鍋滃惎鐢ㄥ崟鏉″鍑�
+export function exportDeviceStatus(query) {
+ return request({
+ url: "/deviceState/exportDeviceStatus",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//璁惧鍚敤/鍋滅敤 鍒犻櫎
+export function deleteDeviceState(query) {
+ return request({
+ url: "/deviceState/deleteDeviceState",
+ method: "delete",
+ params: query,
+ });
+}
+
+//璁惧鐘舵�佸鍑�
+export function deviceStateExport(query) {
+ return request({
+ url: "/deviceState/deviceStateExport",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//璁惧鍚敤/鍋滅敤 鍒嗛〉
+export function getDeviceStatePage(query) {
+ return request({
+ url: "/deviceState/getDeviceStatePage",
+ method: "get",
+ params: query,
+ });
+}
+
+//璁惧鎶ュ簾鐢宠鍒楄〃
+export function pageDeviceScrapped(query) {
+ return request({
+ url: "/deviceScrapped/pageDeviceScrapped",
+ method: "get",
+ params: query,
+ });
+}
+
+// 瀵煎嚭
+export function exportDeviceScrapped(query) {
+ return request({
+ url: "/deviceScrapped/exportDeviceScrapped",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎璁惧鎶ュ簾鐢宠
+export function delDeviceScrapped(query) {
+ return request({
+ url: "/deviceScrapped/delDeviceScrapped",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鏌ヨ璁惧鎶ュ簾鐢宠
+export function getDeviceScrapped(query) {
+ return request({
+ url: "/deviceScrapped/getDeviceScrapped",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板璁惧鎶ュ簾鐢宠
+export function addDeviceScrapped(data) {
+ return request({
+ url: "/deviceScrapped/addDeviceScrapped",
+ method: "post",
+ data: data,
+ });
+}
+
+//璁惧鏁呴殰缁翠慨鍒楄〃
+export function pageDeviceBreakdownMaintenance(query) {
+ return request({
+ url: "/deviceBreakdownMaintenance/pageDeviceBreakdownMaintenance",
+ method: "get",
+ params: query,
+ });
+}
+
+// 璁惧鏁呴殰涓庣淮淇�-瀵煎嚭
+export function exportDeviceBreakdownMaintenance(query) {
+ return request({
+ url: "/deviceBreakdownMaintenance/exportDeviceBreakdownMaintenance",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎璁惧鏁呴殰缁翠慨
+export function delDeviceBreakdownMaintenance(query) {
+ return request({
+ url: "/deviceBreakdownMaintenance/delDeviceBreakdownMaintenance",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鏌ヨ璁惧鏁呴殰缁翠慨
+export function getDeviceBreakdownMaintenance(query) {
+ return request({
+ url: "/deviceBreakdownMaintenance/getDeviceBreakdownMaintenance",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板璁惧鏁呴殰缁翠慨
+export function addDeviceBreakdownMaintenance(data) {
+ return request({
+ url: "/deviceBreakdownMaintenance/addDeviceBreakdownMaintenance",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍒嗛〉鏌ヨ璁惧鐐规璁板綍
+export function getDeviceInspectionRecordByPage(query) {
+ return request({
+ url: "/deviceInspectionRecord/getDeviceInspectionRecordByPage",
+ method: "get",
+ params: query,
+ });
+}
+
+// 瀵煎嚭璁惧鐐规璁板綍
+export function exportDeviceInspectionRecord(query) {
+ return request({
+ url: "/deviceInspectionRecord/exportDeviceInspectionRecord",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎璁惧鐐规璁板綍
+export function deleteDeviceInspectionRecord(query) {
+ return request({
+ url: "/deviceInspectionRecord/deleteDeviceInspectionRecord",
+ method: "delete",
+ params: query,
+ });
+}
+
+//璁惧鐐规璁板綍璇︽儏
+export function getDeviceInspectionRecord(query) {
+ return request({
+ url: "/deviceInspectionRecord/getDeviceInspectionRecord",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板璁惧鐐规璁板綍
+export function addDeviceInspectionRecord(data) {
+ return request({
+ url: "/deviceInspectionRecord/addDeviceInspectionRecord",
+ method: "post",
+ data: data,
+ });
+}
+
+// 淇敼璁惧鐐规璁板綍
+export function updateDeviceInspectionRecord(data) {
+ return request({
+ url: "/deviceInspectionRecord/updateDeviceInspectionRecord",
+ method: "post",
+ data: data,
+ });
+}
+
+// 澶嶆牳璁惧鐐规璁板綍
+export function reviewDeviceInspectionRecord(data) {
+ return request({
+ url: "/deviceInspectionRecord/reviewDeviceInspectionRecord",
+ method: "post",
+ data: data,
+ });
+}
+
+//璁惧浜嬫晠鎶ュ憡鍒楄〃
+export function pageDeviceAccidentReport(query) {
+ return request({
+ url: "/deviceAccidentReport/pageDeviceAccidentReport",
+ method: "get",
+ params: query,
+ });
+}
+
+// 瀵煎嚭璁惧浜嬫晠
+export function exportDeviceAccidentReport(query) {
+ return request({
+ url: "/deviceAccidentReport/exportDeviceAccidentReport",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎璁惧浜嬫晠鎶ュ憡
+export function delDeviceAccidentReport(query) {
+ return request({
+ url: "/deviceAccidentReport/delDeviceAccidentReport",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鏌ヨ璁惧浜嬫晠鎶ュ憡
+export function getDeviceAccidentReport(query) {
+ return request({
+ url: "/deviceAccidentReport/getDeviceAccidentReport",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板璁惧浜嬫晠鎶ュ憡
+export function addDeviceAccidentReport(data) {
+ return request({
+ url: "/deviceAccidentReport/addDeviceAccidentReport",
+ method: "post",
+ data: data,
+ });
+}
+
+//浣滀笟鎸囧涔� 瀹℃壒
+export function approvalOfHomeworkInstructionManual(data) {
+ return request({
+ url: "/deviceInstruction/approvalOfHomeworkInstructionManual",
+ method: "post",
+ data: data,
+ });
+}
+
+//浣滀笟鎸囧涔� 鍒犻櫎
+export function homeworkGuidebook(query) {
+ return request({
+ url: "/deviceInstruction/homeworkGuidebook",
+ method: "delete",
+ params: query,
+ });
+}
+
+//浣滀笟鎸囧涔� 缂栬緫鏌ヨ
+export function homeworkGuidebookEditor(query) {
+ return request({
+ url: "/deviceInstruction/homeworkGuidebookEditor",
+ method: "get",
+ params: query,
+ });
+}
+
+//浣滀笟鎸囧涔︽柊澧�
+export function newHomeworkGuidebookAdded(data) {
+ return request({
+ url: "/deviceInstruction/newHomeworkGuidebookAdded",
+ method: "post",
+ data: data,
+ });
+}
+
+//浣滀笟鎸囧涔﹀彈鎺ф枃浠跺垹闄�
+export function deleteHomeworkGuidebook(query) {
+ return request({
+ url: "/deviceInstruction/deleteHomeworkGuidebook",
+ method: "delete",
+ params: query,
+ });
+}
+
+//浣滀笟鎸囧涔� 鏌ヨ
+export function pageByPageQueryOfHomeworkInstructions(query) {
+ return request({
+ url: "/deviceInstruction/pageByPageQueryOfHomeworkInstructions",
+ method: "get",
+ params: query,
+ });
+}
+//璁惧棰勭害鎺ュ彛
+export function reservationSelectDevice(query) {
+ return request({
+ url: "/reservation/selectDeviceParameter",
+ method: "get",
+ params: query,
+ });
+}
+//璁惧棰勭害鎺ュ彛
+export function reservationDelete(query) {
+ return request({
+ url: "/reservation/delete",
+ method: "delete",
+ params: query,
+ });
+}
+//璁惧棰勭害鎺ュ彛
+export function reservationSave(query) {
+ return request({
+ url: "/reservation/save",
+ method: "post",
+ data: query,
+ });
+}
+//璁惧棰勭害鎺ュ彛
+export function selectReservationParameterPage(query) {
+ return request({
+ url: "/reservation/selectReservationParameterPage",
+ method: "get",
+ params: query,
+ });
+}
diff --git a/src/components/Echart/echart.vue b/src/components/Echart/echart.vue
new file mode 100644
index 0000000..a7ccff3
--- /dev/null
+++ b/src/components/Echart/echart.vue
@@ -0,0 +1,116 @@
+<template>
+ <div>
+ <div class="echart_size" :id="id" :style="`height:${config.height};width:${config.width}`"></div>
+ </div>
+</template>
+<script>
+import * as echarts from 'echarts'
+import ResizeListener from 'element-resize-detector';
+import { iuCharts } from '@/utils/echarts'
+export default {
+ props: {
+ id: {
+ type: String,
+ default: ''
+ },
+ config: {
+ type: Object,
+ default: () => { }
+ },
+ datas: {
+ type: Object,
+ default: () => { }
+ }
+ },
+ data() {
+ return {
+ chart: null,
+ }
+ },
+ watch: {
+ /* 濡傛灉鍥捐〃鏁版嵁鏄悗鍙拌幏鍙栫殑锛岀洃鍚埗缁勪欢涓殑鏁版嵁鍙樺寲锛岄噸鏂拌Е鍙慐charts */
+ datas: {
+ deep: true,
+ // immediate: true,
+ handler(val) {
+ this.$nextTick(() => {
+ this.init();
+ })
+ },
+ },
+ },
+ created() {
+ this.$nextTick(() => {
+ this.init()
+ })
+ },
+ mounted() {
+ window.addEventListener('resize', this.windowResizeListener);
+ this.chartEleResizeListener();
+ },
+ beforeDestroy() {
+ if (!this.chart) {
+ return;
+ }
+ this.chart.dispose();
+ this.chart = null;
+ },
+ methods: {
+ init() {
+ // 瀹炰緥鍖栧璞�
+ this.chart = echarts.init(document.getElementById(this.id))
+ this.chart.showLoading({
+ text: 'loading',
+ color: '#3A7BFA',
+ textColor: '#000',
+ maskColor: 'rgba(255, 255, 255, 0.2)',
+ zlevel: 0,
+ });
+ if (this.config.isLoading) {
+ this.chart.hideLoading();
+ switch (this.config.type) {
+ case 'bar':
+ iuCharts.drawBar(this.chart, this.datas)
+ break;
+ case 'line':
+ iuCharts.drawLine(this.chart, this.datas)
+ break;
+ case 'pie':
+ iuCharts.drawPie(this.chart, this.datas)
+ break;
+ case 'gauge':
+ iuCharts.drawGauge(this.chart, this.datas)
+ break;
+ default:
+ break;
+ }
+ setTimeout(() => {
+ this.chart.resize()
+ }, 200)
+ }
+ },
+ /* 瀵筩hart鍏冪礌灏哄杩涜鐩戝惉锛屽綋鍙戠敓鍙樺寲鏃跺悓姝ユ洿鏂癳chart瑙嗗浘 */
+ chartEleResizeListener() {
+ const chartInstance = ResizeListener({
+ strategy: 'scroll',
+ callOnAdd: true
+ });
+ chartInstance.listenTo(this.$el, () => {
+ if (!this.chart) return;
+ this.chart.resize();
+ });
+ },
+ /* 褰撶獥鍙g缉鏀炬椂锛宔chart鍔ㄦ�佽皟鏁磋嚜韬ぇ灏� */
+ windowResizeListener() {
+ if (!this.chart) return;
+ this.chart.resize();
+ }
+ }
+}
+</script>
+<style scoped>
+.echart_size {
+ width: 100%;
+ height: 100%;
+}
+</style>
diff --git a/src/utils/echarts.js b/src/utils/echarts.js
new file mode 100644
index 0000000..67aa260
--- /dev/null
+++ b/src/utils/echarts.js
@@ -0,0 +1,353 @@
+import * as echarts from "echarts";
+
+const iuCharts = {
+ drawBar: function (chart, params) {
+ var color = ["#4379EE", "#FEC53D", "#65789B", "#F6BD16"];
+ let series = params.yData.map((m, i) => {
+ let obj = {
+ name: m.title,
+ type: "bar",
+ barWidth: "16%",
+ barGap: "30%",
+ itemStyle: {
+ normal: {
+ color: color[i],
+ barBorderRadius: [50, 50, 0, 0],
+ },
+ },
+ data: m.data,
+ };
+ return obj;
+ });
+ var option = {
+ backgroundColor: "#fff",
+ tooltip: {
+ trigger: "axis",
+ axisPointer: {
+ lineStyle: {
+ color: "#4379EE",
+ },
+ },
+ },
+ grid: {
+ top: "25px",
+ left: "40px",
+ right: "3%",
+ bottom: "40px",
+ // containLabel: true
+ },
+ legend: {
+ show: true,
+ orient: "horizontal",
+ y: -2,
+ right: 15,
+ itemWidth: 12,
+ itemHeight: 12,
+ itemGap: 24,
+ textStyle: {
+ color: "rgba(43,48,52)",
+ fontSize: "14px",
+ },
+ },
+ xAxis: [
+ {
+ type: "category",
+ axisLine: {
+ show: false,
+ },
+ axisLabel: {
+ color: "rgba(43,48,52, 0.4)",
+ margin: 20,
+ },
+ axisTick: {
+ show: false,
+ },
+ splitLine: {
+ show: false,
+ },
+ boundaryGap: false,
+ data: params.xData,
+ },
+ ],
+ yAxis: [
+ {
+ minInterval: 1,
+ type: "value",
+ min: 0,
+ splitNumber: 4,
+ splitLine: {
+ show: true,
+ lineStyle: {
+ color: "rgba(43,48,52, 0.1)",
+ },
+ },
+ axisLine: {
+ show: false,
+ },
+ axisLabel: {
+ color: "rgba(43,48,52, 0.4)",
+ margin: 20,
+ },
+ axisTick: {
+ show: false,
+ },
+ },
+ ],
+ series: series,
+ };
+ chart.setOption(option);
+ },
+ drawLine: function (chart, params) {
+ let series = [];
+ params.yData.forEach((m) => {
+ series.push({
+ name: m.title,
+ type: "line",
+ showAllSymbol: true,
+ symbol: "circle",
+ symbolSize: 10,
+ lineStyle: {
+ normal: {
+ color: "#4379EE",
+ width: 3,
+ },
+ },
+ areaStyle: {
+ normal: {
+ color: new echarts.graphic.LinearGradient(
+ 0,
+ 0,
+ 0,
+ 1,
+ [
+ {
+ offset: 0,
+ color: "rgba(67,121,238,0.3)",
+ },
+ {
+ offset: 1,
+ color: "rgba(67,121,238,0)",
+ },
+ ],
+ false
+ ),
+ },
+ },
+ data: m.data,
+ });
+ });
+ let option = {
+ backgroundColor: "#fff",
+ tooltip: {
+ trigger: "axis",
+ axisPointer: {
+ lineStyle: {
+ color: "#4379EE",
+ },
+ },
+ },
+ grid: {
+ top: "25px",
+ left: "40px",
+ right: "3%",
+ bottom: "40px",
+ // containLabel: true
+ },
+ xAxis: [
+ {
+ type: "category",
+ axisLine: {
+ show: false,
+ },
+ axisLabel: {
+ color: "rgba(43,48,52, 0.4)",
+ margin: 20,
+ },
+ axisTick: {
+ show: false,
+ },
+ splitLine: {
+ show: false,
+ },
+ boundaryGap: false,
+ data: params.xData,
+ },
+ ],
+ yAxis: [
+ {
+ minInterval: 1,
+ type: "value",
+ min: 0,
+ splitNumber: 4,
+ splitLine: {
+ show: true,
+ lineStyle: {
+ color: "rgba(43,48,52, 0.1)",
+ },
+ },
+ axisLine: {
+ show: false,
+ },
+ axisLabel: {
+ color: "rgba(43,48,52, 0.4)",
+ margin: 20,
+ },
+ axisTick: {
+ show: false,
+ },
+ },
+ ],
+ series: series,
+ };
+ chart.setOption(option);
+ },
+ drawPie: function (chart, params) {
+ let option = {
+ color: params.color,
+ backgroundColor: "#fff",
+ tooltip: {
+ trigger: "item",
+ formatter: "{a} <br/>{b} : {c}",
+ },
+ title: {
+ text: params.percentage,
+ textStyle: {
+ color: "#4379EE",
+ fontSize: 14,
+ align: "center",
+ fontWeight: "normal",
+ },
+ x: "center",
+ y: "center",
+ },
+ grid: {
+ top: 20,
+ bottom: 20,
+ left: 0,
+ right: 0,
+ },
+ legend: {
+ show: false,
+ },
+ series: [
+ // 涓昏灞曠ず灞傜殑
+ {
+ radius: ["55%", "90%"],
+ center: ["50%", "50%"],
+ type: "pie",
+ label: {
+ show: false,
+ },
+ name: params.title,
+ data: params.data,
+ },
+ // 杈规鐨勮缃�
+ {
+ radius: ["55%", "65%"],
+ center: ["50%", "50%"],
+ type: "pie",
+ label: {
+ normal: {
+ show: false,
+ },
+ emphasis: {
+ show: false,
+ },
+ },
+ labelLine: {
+ normal: {
+ show: false,
+ },
+ emphasis: {
+ show: false,
+ },
+ },
+ animation: false,
+ tooltip: {
+ show: false,
+ },
+ data: [
+ {
+ value: 1,
+ itemStyle: {
+ color: "rgba(250,250,250,0.3)",
+ },
+ },
+ ],
+ },
+ ],
+ };
+ chart.setOption(option);
+ },
+ drawGauge: function (chart, params) {
+ let option = {
+ tooltip: {
+ formatter: "{a} <br/>{b} : {c}%",
+ },
+ toolbox: {
+ feature: {
+ restore: {},
+ saveAsImage: {},
+ },
+ },
+ series: [
+ {
+ type: "gauge",
+ axisLine: {
+ lineStyle: {
+ width: 28,
+ color: [
+ [0.3, "#67e0e3"],
+ [0.7, "#37a2da"],
+ [1, "#fd666d"],
+ ],
+ },
+ },
+ pointer: {
+ itemStyle: {
+ color: "auto",
+ },
+ },
+ axisTick: {
+ distance: -28,
+ length: 8,
+ lineStyle: {
+ color: "#fff",
+ width: 2,
+ },
+ },
+ splitLine: {
+ distance: -28,
+ length: 28,
+ lineStyle: {
+ color: "#fff",
+ width: 4,
+ },
+ },
+ axisLabel: {
+ color: "inherit",
+ distance: 40,
+ fontSize: 14,
+ },
+ detail: {
+ valueAnimation: true,
+ formatter: "{value} %",
+ color: "inherit",
+ textStyle: {
+ fontSize: 30,
+ align: "center",
+ },
+ },
+ data: [
+ {
+ value: 70,
+ },
+ ],
+ },
+ ],
+ };
+ chart.setOption(option, true);
+ },
+};
+
+export { iuCharts };
diff --git a/src/views/CNAS/resourceDemand/device/component/acceptanceForm.vue b/src/views/CNAS/resourceDemand/device/component/acceptanceForm.vue
new file mode 100644
index 0000000..b9e7181
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/acceptanceForm.vue
@@ -0,0 +1,192 @@
+<template>
+ <div>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible"
+ title="浠櫒璁惧楠屾敹鍗�" width="80%" @close="resetForm">
+ <el-form ref="modelForm" :model="form" :rules="rules" label-width="180px">
+ <el-col :span="12">
+ <el-form-item label="鍒拌揣鏃ユ湡锛�" prop="arrivalDate">
+ <el-date-picker v-model="form.arrivalDate" type="date" placeholder="閫夋嫨鏃ユ湡" size="small" format="yyyy-MM-dd"
+ style="width: 100%" value-format="yyyy-MM-dd" :disabled="operationType === 'view'">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閲戦锛�" prop="goldAmount">
+ <el-input v-model="form.goldAmount" :disabled="operationType === 'view'" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="缁翠慨鍗曚綅锛�" prop="maintenanceunit">
+ <el-input v-model="form.maintenanceunit" :disabled="operationType === 'view'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏀惰澶囦富鏈哄拰澶囦欢鎯呭喌锛�" prop="spareParts">
+ <el-input v-model="form.spareParts" :disabled="operationType === 'view'" clearable size="small"
+ type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹夎銆佽皟璇曟儏鍐碉細" prop="installationDebugging">
+ <el-input v-model="form.installationDebugging" :disabled="operationType === 'view'" clearable size="small"
+ type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="楠屾敹鎯呭喌锛�" prop="checkSituation">
+ <el-input v-model="form.checkSituation" :disabled="operationType === 'view'" clearable size="small"
+ type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎺ユ敹绛惧瓧锛�" prop="receivingSignature">
+ <el-input v-model="form.receivingSignature" :disabled="operationType === 'view'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍘傚浠h〃锛�" prop="producer">
+ <el-input v-model="form.producer" :disabled="operationType === 'view'" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎺ユ敹浜猴細" prop="recipient">
+ <el-input v-model="form.recipient" :disabled="operationType === 'view'" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎺ユ敹鏃ユ湡锛�" prop="recipientDate">
+ <el-date-picker v-model="form.recipientDate" type="date" placeholder="閫夋嫨鏃ユ湡" size="small" format="yyyy-MM-dd"
+ style="width: 100%" value-format="yyyy-MM-dd" :disabled="operationType === 'view'">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="resetForm">鍙� 娑�</el-button>
+ <el-button v-if="operationType !== 'view'" :loading="submitFormLoading" type="primary" @click="submitForm">纭�
+ 璁�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ getDeviceAcceptance,
+ addDeviceAcceptance,
+ updateDeviceAcceptance,
+} from '@/api/cnas/resourceDemand/device.js'
+import { selectUserCondition } from "@/api/system/user";
+export default {
+ name: "acceptance-form",
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ dialogVisible: false,
+ submitFormLoading: false,
+ form: {
+ arrivalDate: '',
+ goldAmount: '',
+ maintenanceunit: '',
+ spareParts: '',
+ installationDebugging: '',
+ checkSituation: '',
+ receivingSignature: '',
+ producer: '',
+ recipient: '',
+ recipientDate: '',
+ deviceId: '',
+ },
+ operationType: '',
+ rules: {
+ arrivalDate: [{ required: true, message: '璇烽�夋嫨鍒拌揣鏃ユ湡', trigger: 'change' }],
+ },
+ userList: [],
+ }
+ },
+ mounted() {
+
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鎵撳紑寮规
+ openDialog(type, id, deviceId) {
+ this.dialogVisible = true
+ this.operationType = type
+ this.form.acceptanceId = id
+ this.form.deviceId = deviceId
+ this.getUserList()
+ if (this.form.acceptanceId) {
+ this.searchInfo()
+ }
+ },
+ // 鏌ヨ璇︽儏
+ searchInfo() {
+ getDeviceAcceptance({ acceptanceId: this.form.acceptanceId }).then(res => {
+ if (res.code === 200) {
+ this.form = { ...res.data }
+ }
+ }).catch(error => {
+ console.error(error)
+ })
+ },
+ // 鎻愪氦琛ㄥ崟
+ submitForm() {
+ this.$refs.modelForm.validate((valid) => {
+ if (valid) {
+ if (this.operationType === 'add') {
+ addDeviceAcceptance(this.form).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鏂板鎴愬姛')
+ this.resetForm()
+ }
+ this.submitFormLoading = false
+ }).catch(err => {
+ this.submitFormLoading = false
+ })
+ } else {
+ updateDeviceAcceptance(this.form).then(res => {
+ if (res.code == 200) {
+ this.$message.success('淇敼鎴愬姛')
+ this.resetForm()
+ }
+ this.submitFormLoading = false
+ }).catch(err => {
+ this.submitFormLoading = false
+ })
+ }
+ }
+ })
+ },
+ // 鍏抽棴寮规
+ resetForm() {
+ this.dialogVisible = false
+ this.$emit('closeDialog')
+ },
+ getUserList() {
+ selectUserCondition().then(res => {
+ let data = [];
+ res.data.forEach((a) => {
+ data.push({
+ label: a.name,
+ value: a.id,
+ });
+ });
+ this.userList = data
+ })
+ },
+ },
+}
+</script>
+
+<style scoped>
+.form-item {
+ display: flex;
+ align-items: center;
+ margin-right: 20px;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/acquisitionConfig.vue b/src/views/CNAS/resourceDemand/device/component/acquisitionConfig.vue
new file mode 100644
index 0000000..99d88ac
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/acquisitionConfig.vue
@@ -0,0 +1,754 @@
+<template>
+ <div class="data-acquisition-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="small" type="primary" @click="fileConfiguration">鏂囦欢閰嶇疆</el-button>
+ <el-button size="small" @click="$parent.closeDataVue()">
+ <span style="color: #3A7BFA;">杩斿洖</span>
+ </el-button>
+ </el-col>
+ </el-row>
+ </div>
+ <div class="table">
+ <el-table :data="tableList.slice(
+ (page.current - 1) * page.size,
+ page.current * page.size
+ )
+ " border tooltip-effect="dark" style="width: 74%;" height="100%" :span-method="spanMethod">
+ <el-table-column type="index" label="搴忓彿" align="center" width="65"></el-table-column>
+ <el-table-column prop="deviceName" align="center" min-width="100" label="璁惧鍚嶇О"></el-table-column>
+ <el-table-column prop="fileType" align="center" label="鏂囦欢鍚庣紑"></el-table-column>
+ <el-table-column prop="collectUrl" align="center" min-width="100" show-overflow-tooltip
+ label="閲囬泦鍦板潃"></el-table-column>
+ <el-table-column prop="storageUrl" align="center" min-width="100" show-overflow-tooltip
+ label="瀛樺偍鍦板潃"></el-table-column>
+ <el-table-column prop="ip" align="center" label="IP鍦板潃" min-width="100"></el-table-column>
+ <el-table-column prop="sample" align="center" label="妫�楠屽璞�" show-overflow-tooltip
+ min-width="150"></el-table-column>
+ <el-table-column prop="inspectionItemClass" align="center" label="妫�楠岄」鍒嗙被" min-width="120"></el-table-column>
+ <el-table-column prop="inspectionItem" align="center" label="妫�楠岄」" min-width="100"></el-table-column>
+ <el-table-column prop="inspectionItemSubclass" align="center" label="妫�楠屽瓙椤�" min-width="100"></el-table-column>
+ <el-table-column prop="referx" align="center" label="鍙傜収X" min-width="100"></el-table-column>
+ <el-table-column prop="x" align="center" label="X"></el-table-column>
+ <el-table-column prop="refery" align="center" label="鍙傜収Y" min-width="100"></el-table-column>
+ <el-table-column prop="y" align="center" label="Y"></el-table-column>
+ <el-table-column prop="anotherName" align="center" label="鍒悕" min-width="100"></el-table-column>
+ <el-table-column prop="matchingName" align="center" label="鍖归厤鍚嶇О" min-width="100"></el-table-column>
+ <el-table-column prop="formula" align="center" label="鍏紡"></el-table-column>
+ <el-table-column prop="section" fixed="right" label="鎿嶄綔" width="120">
+ <template slot-scope="scope">
+ <el-button type="text" @click="dataConfig(scope.row)">鏁伴噰閰嶇疆</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <div class="page" v-if="tableList.length > 0">
+ <el-pagination @size-change="sizeChange" @current-change="currentChange" :current-page="page.current"
+ :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper"
+ :total="tableList.length">
+ </el-pagination>
+ </div>
+ <el-dialog title="鏁伴噰閰嶇疆" :visible.sync="dialogVisible3" width="920px" :before-close="closeForm">
+ <el-form :model="configForm" label-position="top" size="small" ref="configForm" label-width="100px"
+ class="demo-ruleForm">
+ <el-table :data="domains" style="width: 100%" height="300">
+ <el-table-column label="搴忓彿" type="index" width="80">
+ <template v-slot="scope">
+ {{ getIndexWithAlphabet(scope.$index) }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="referx" label="鍙傜収X" min-width="140">
+ <template v-slot="scope">
+ <el-input style="width: 100%" v-model="scope.row.referx"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column prop="x" label="X" min-width="100">
+ <template v-slot="scope">
+ <el-input style="width: 100%" v-model="scope.row.x"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column prop="refery" label="鍙傜収Y" min-width="140">
+ <template v-slot="scope">
+ <el-input style="width: 100%" v-model="scope.row.refery"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column prop="y" label="Y" min-width="100">
+ <template v-slot="scope">
+ <el-input style="width: 100%" v-model="scope.row.y"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column prop="anotherName" label="鍒悕" min-width="140">
+ <template v-slot="scope">
+ <el-input style="width: 100%" v-model="scope.row.anotherName"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column prop="matchingName" label="鍖归厤鍚嶇О" min-width="140">
+ <template v-slot="scope">
+ <el-input style="width: 100%" v-model="scope.row.matchingName"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="150">
+ <template v-slot="scope">
+ <el-button @click.prevent="removeDomain(scope.row)" size="small" type="text">鍒犻櫎</el-button>
+ <el-button @click="addDomain" size="small" type="text">鏂板</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="fomItem2">
+ <el-form-item class="fomItemInput1">
+ <template v-slot="label">
+ 鍏紡锛�
+ <el-tooltip v-for="(formula, key) in formulas" class="itemFomItem" effect="dark"
+ :content="formula.content" :key="key" placement="top">
+ <label>{{ formula.label }}()</label>
+ </el-tooltip>
+ <el-input type="textarea" autosi:autosize="{ minRows: 2, maxRows: 4}" ze placeholder="璇疯緭鍏ュ唴瀹�"
+ v-model="configForm.formula" @change="evalResult">
+ </el-input>
+ </template>
+ </el-form-item>
+ </div>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-row>
+ <el-button @click="closeForm">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitForm3" :loading="upLoad3">纭� 瀹�</el-button>
+ </el-row>
+ </span>
+ </el-dialog>
+ <el-dialog title="鏁伴噰閰嶇疆" :visible.sync="dialogVisible4" width="400px">
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label">
+ <span style="color:red;margin-right: 4px;">*</span>IP锛�
+ </div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.ip"></el-input>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label">
+ <span style="color:red;margin-right: 4px;">*</span>閲囬泦鍦板潃锛�
+ </div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.collectUrl"></el-input>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label">鍌ㄥ瓨鍦板潃锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.storageUrl"></el-input>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label">
+ <span style="color:red;margin-right: 4px;">*</span>鏂囦欢鍚庣紑锛�
+ </div>
+ <el-select v-model="configForm.fileType" size="small" placeholder="璇烽�夋嫨" style="width: 100%;">
+ <el-option v-for="item in fileTypeOptions" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label">濮旀墭瀛楁锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.entrustCode"></el-input>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label">鏍峰搧瀛楁锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.sampleCode"></el-input>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label">鏂囦欢鍚嶇О锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.dbFileName"></el-input>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-row>
+ <el-button @click="dialogVisible4 = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitForm4" :loading="upLoad4">纭� 瀹�</el-button>
+ </el-row>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ queryDataAcquisitionConfiguration,
+ saveDataAcquisitionConfiguration,
+ deleteDataAcquisitionConfiguration,
+} from '@/api/cnas/resourceDemand/device.js'
+export default {
+ name: "dataAcquisitionConfig",
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ props: {
+ deviceId: {
+ type: Number,
+ default: () => []
+ }
+ },
+ mounted() {
+ this.init();
+ },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formulas: [
+ {
+ label: "MAX",
+ content: "姹傚弬鏁版渶澶у�硷紝鍙傛暟涓暟鏈�灏戜袱涓紝濡傦細MAX(A1,B2)"
+ },
+ {
+ label: "MIN",
+ content: "姹傚弬鏁版渶灏忓�硷紝鍙傛暟涓暟鏈�灏戜袱涓紝濡傦細MIN(A1,B2)"
+ },
+ {
+ label: "SUM",
+ content: "姹傚拰锛屽弬鏁颁釜鏁版渶灏戜袱涓紝濡傦細SUM(A1,B2)"
+ },
+ {
+ label: "ABS",
+ content: "姹傜粷瀵瑰�硷紝鍙傛暟涓暟鏈�灏戜竴涓紝濡傦細ABS(A1)"
+ },
+ {
+ label: "AVERAGE",
+ content: "姹傚钩鍧囧�硷紝鍙傛暟涓暟鏈�灏戜袱涓釜锛屽锛欰VERAGE(A1,B2)"
+ },
+ {
+ label: "MEDIAN",
+ content: "姹備腑鍊硷紝鍙傛暟涓暟鏈�灏戜袱涓釜锛屽锛歁EDIAN(A1,B2)"
+ },
+ ],
+ dialogVisible4: false,
+ tableList: [],
+ page: {
+ current: 1,
+ size: 20
+ },
+ dialogVisible3: false,
+ configForm: {
+ formula: "",
+ collectUrl: "",
+ storageUrl: "",
+ entrustCode: "",
+ sampleCode: "",
+ dbFileName: "",
+ fiberOpticRibbon: ""
+ },
+ domains: [
+ {
+ referx: "",
+ refery: "",
+ x: "",
+ y: "",
+ anotherName: "",
+ matchingName: ""
+ }
+ ],
+ upLoad3: false,
+ upLoad4: false,
+ fileTypeOptions: [
+ { label: "csv", value: ".csv" },
+ { label: "db", value: ".db" },
+ { label: "mdb", value: ".mdb" },
+ { label: "word", value: ".docx" },
+ { label: "excel", value: ".xlsx" },
+ { label: "txt", value: ".txt" },
+ { label: "png", value: ".png" }
+ ],
+ spanList: [],
+ specialSpanList: [],
+ spanConfig: {
+ special: {
+ main: "inspectionItemSubclass",
+ rows: [
+ {
+ name: "deviceName",
+ index: 1
+ },
+ {
+ name: "fileType",
+ index: 2
+ },
+ {
+ name: "collectUrl",
+ index: 3
+ },
+ {
+ name: "storageUrl",
+ index: 4
+ },
+ {
+ name: "ip",
+ index: 5
+ },
+ {
+ name: "inspectionItem",
+ index: 6
+ },
+ {
+ name: "inspectionItemSubclass",
+ index: 7
+ },
+ {
+ name: "formula",
+ index: 13
+ },
+ {
+ name: "section",
+ index: 14
+ }
+ ]
+ }
+ },
+ deleteList: []
+ };
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ getIndexWithAlphabet(index) {
+ const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+ const letterIndex = index % 26;
+ return alphabet.charAt(letterIndex) + (index + 1);
+ },
+ rowspan(spanArr, position, spanName) {
+ this.tableList.forEach((item, index) => {
+ if (index === 0) {
+ spanArr.push(1);
+ position = 0;
+ } else {
+ if (
+ this.tableList[index][spanName] ===
+ this.tableList[index - 1][spanName]
+ ) {
+ spanArr[position] += 1;
+ spanArr.push(0);
+ } else {
+ spanArr.push(1);
+ position = index;
+ }
+ }
+ });
+ },
+ spanMethod({ row, column, rowIndex, columnIndex }) {
+ // 涓�鑸殑鍚堝苟琛�
+ if (
+ this.spanConfig != undefined &&
+ this.spanConfig.rows &&
+ this.spanConfig.rows.length > 0
+ ) {
+ let i = null;
+ let obj = this.spanConfig.rows.find((item, index) => {
+ i = index;
+ return item.index == columnIndex;
+ });
+ if (obj) {
+ const _row = this.spanList[i].arr[rowIndex];
+ const _col = _row > 0 ? 1 : 0;
+ return {
+ rowspan: _row,
+ colspan: _col
+ };
+ }
+ }
+ // 鐗规畩鐨勫悎骞惰
+ if (
+ this.spanConfig != undefined &&
+ this.spanConfig.special &&
+ this.spanConfig.special.main &&
+ this.spanConfig.special.rows &&
+ this.spanConfig.special.rows.length > 0
+ ) {
+ let i = null;
+ let obj = this.spanConfig.special.rows.find((item, index) => {
+ i = index;
+ return item.index == columnIndex;
+ });
+ if (obj) {
+ const _row = this.specialSpanList[i].arr[rowIndex];
+ const _col = _row > 0 ? 1 : 0;
+ return {
+ rowspan: _row,
+ colspan: _col
+ };
+ }
+ }
+ },
+ fileConfiguration() {
+ this.dialogVisible4 = true;
+ if (this.tableList[0]) {
+ this.$set(this.configForm, "fileType", this.tableList[0].fileType);
+ this.$set(this.configForm, "collectUrl", this.tableList[0].collectUrl);
+ this.$set(this.configForm, "storageUrl", this.tableList[0].storageUrl);
+ this.$set(this.configForm, "ip", this.tableList[0].ip);
+ this.$set(
+ this.configForm,
+ "entrustCode",
+ this.tableList[0].entrustCode
+ );
+ this.$set(
+ this.configForm,
+ "sampleCode",
+ this.tableList[0].sampleCode
+ );
+ this.$set(
+ this.configForm,
+ "dbFileName",
+ this.tableList[0].dbFileName
+ );
+ this.$set(
+ this.configForm,
+ "fiberOpticRibbon",
+ this.tableList[0].fiberOpticRibbon
+ )
+ }
+ },
+ init() {
+ queryDataAcquisitionConfiguration({ deviceId: this.deviceId, isDevice: false }).then(res => {
+ this.tableList = res.data;
+ this.tableList.forEach(i => {
+ let isIncludes = false
+ if (i.formula && i.formula != "") {
+ this.formulas.forEach(j => {
+ if (i.formula.includes(j.label)) {
+ isIncludes = true
+ }
+ })
+ }
+ if (!isIncludes && i.formula) {
+ i.formula = i.formula.slice(1, -1)
+ }
+ i.sample = i.sample
+ .replace(/"/g, "")
+ .replace(/],/g, "锛�")
+ .replace(/\[/g, "")
+ .replace(/]/g, "");
+ });
+ if (this.tableList[0]) {
+ this.$set(this.configForm, "fileType", this.tableList[0].fileType);
+ this.$set(
+ this.configForm,
+ "collectUrl",
+ this.tableList[0].collectUrl
+ );
+ this.$set(
+ this.configForm,
+ "storageUrl",
+ this.tableList[0].storageUrl
+ );
+ this.$set(this.configForm, "ip", this.tableList[0].ip);
+ this.$set(
+ this.configForm,
+ "entrustCode",
+ this.tableList[0].entrustCode
+ );
+ this.$set(
+ this.configForm,
+ "sampleCode",
+ this.tableList[0].sampleCode
+ );
+ this.$set(
+ this.configForm,
+ "dbFileName",
+ this.tableList[0].dbFileName
+ );
+ this.$set(
+ this.configForm,
+ "fiberOpticRibbon",
+ this.tableList[0].fiberOpticRibbon
+ )
+ }
+ // 涓�鑸殑鍚堝苟琛�
+ if (
+ this.spanConfig != undefined &&
+ this.spanConfig.rows &&
+ this.spanConfig.rows.length > 0
+ ) {
+ this.spanList = [];
+ this.spanConfig.rows.forEach((item, index) => {
+ this.spanList.push({
+ arr: [],
+ position: 0
+ });
+ this.rowspan(
+ this.spanList[index].arr,
+ this.spanList[index].position,
+ item.name
+ );
+ });
+ }
+ // 鐗规畩鐨勫悎骞惰
+ if (
+ this.spanConfig != undefined &&
+ this.spanConfig.special &&
+ this.spanConfig.special.main &&
+ this.spanConfig.special.rows &&
+ this.spanConfig.special.rows.length > 0
+ ) {
+ this.specialSpanList = [];
+ this.spanConfig.special.rows.forEach((item, index) => {
+ this.specialSpanList.push({
+ arr: [],
+ position: 0
+ });
+ this.rowspan(
+ this.specialSpanList[index].arr,
+ this.specialSpanList[index].position,
+ this.spanConfig.special.main
+ );
+ });
+ }
+ });
+ },
+ submitForm4() {
+ const obj = Object.assign({
+ deviceId: this.deviceId,
+ fileType: this.configForm.fileType,
+ collectUrl: this.configForm.collectUrl,
+ storageUrl: this.configForm.storageUrl,
+ ip: this.configForm.ip,
+ isDevice: true,
+ entrustCode: this.configForm.entrustCode,
+ sampleCode: this.configForm.sampleCode,
+ dbFileName: this.configForm.dbFileName,
+ fiberOpticRibbon: this.configForm.fiberOpticRibbon
+ });
+ this.upLoad4 = true;
+ saveDataAcquisitionConfiguration({ deviceId: this.deviceId, ...obj }).then(res => {
+ if (res.code == 200) {
+ // this.tableList = res.data;
+ this.dialogVisible4 = false;
+ this.init();
+ this.$message.success("鎿嶄綔鎴愬姛");
+ }
+ this.upLoad4 = false;
+ })
+ .catch(err => {
+ this.upLoad4 = false;
+ });
+ },
+ dataConfig(row) {
+ this.configForm = {
+ deviceId: row.deviceId,
+ inspectionItem: row.inspectionItem.trim(),
+ inspectionItemSubclass: row.inspectionItemSubclass,
+ structureItemParameterId: row.structureItemParameterId,
+ inspectionItemClass: row.inspectionItemClass,
+ };
+ this.dialogVisible3 = true;
+ queryDataAcquisitionConfiguration({
+ deviceId: this.deviceId,
+ inspectionItem: row.inspectionItem.trim(),
+ isDevice: true,
+ inspectionItemSubclass: row.inspectionItemSubclass.trim(),
+ inspectionItemClass: row.inspectionItemClass.trim(),
+ structureItemParameterId: row.structureItemParameterId
+ }).then(res => {
+ const data = res.data;
+ if (data[0]) {
+ this.domains.splice(0, 1);
+ let formula = data[0].formula
+ let isIncludes = false
+ if (formula && formula != "") {
+ for (let key in this.formulas) {
+ if (formula.includes(this.formulas[key].label)) {
+ isIncludes = true
+ }
+ }
+ }
+ if (!isIncludes && formula) {
+ let formulaValue = formula.slice(1, -1)
+ this.$set(this.configForm, "formula", formulaValue);
+ } else {
+ this.$set(this.configForm, "formula", data[0].formula);
+ }
+ data.forEach(i => {
+ this.domains.push({
+ referx: i.referx,
+ refery: i.refery,
+ x: i.x,
+ y: i.y,
+ anotherName: i.anotherName,
+ matchingName: i.matchingName,
+ id: i.id
+ });
+ });
+ }
+ });
+ },
+ submitForm3() {
+ this.$refs.configForm.validate(valid => {
+ // 琛ㄥ崟鏍¢獙
+ if (valid) {
+ this.domains.forEach(item => {
+ const isEmpty = Object.values(item).every(val => val === "");
+ if (isEmpty) {
+ this.$message.error("璇峰~鍐欏弬鐓ф暟鎹�");
+ }
+ });
+ this.domains.forEach((i, index) => {
+ let isIncludes = false
+ if (this.configForm.formula && this.configForm.formula !== "") {
+ for (let formula in this.formulas) {
+ if (this.configForm.formula.includes(this.formulas[formula].label)) {
+ isIncludes = true
+ }
+ }
+ }
+ if (isIncludes === false && this.configForm.formula !== "" && this.configForm.formula !== undefined) {
+ i.formula = "(" + this.configForm.formula + ")";
+ } else {
+ i.formula = this.configForm.formula;
+ }
+ i.deviceId = this.deviceId;
+ i.inspectionItem = this.configForm.inspectionItem;
+ i.inspectionItemSubclass = this.configForm.inspectionItemSubclass;
+ i.structureItemParameterId = this.configForm.structureItemParameterId;
+ i.inspectionItemClass = this.configForm.inspectionItemClass;
+ i.serialNumber = this.getIndexWithAlphabet(index)
+ });
+ saveDataAcquisitionConfiguration({
+ deviceId: this.deviceId,
+ dataConfigList: this.domains,
+ isDevice: false
+ }).then(res => {
+ this.dialogVisible3 = false;
+ this.domains = [
+ {
+ referx: "",
+ refery: "",
+ x: "",
+ y: "",
+ id: ""
+ }
+ ];
+ if (this.deleteList.length > 0) {
+ deleteDataAcquisitionConfiguration({ ids: this.deleteList.join() }).then(res => {
+ if (res.code == 200) {
+ this.init();
+ }
+ });
+ }
+ this.init();
+ this.$message.success("娣诲姞鎴愬姛");
+ });
+ } else {
+ return false;
+ }
+ });
+ },
+ removeDomain(item) {
+ // 鍒犻櫎鍏紡formItem
+ const index = this.domains.indexOf(item);
+ if (index !== -1 && this.domains.length > 1) {
+ if (item.id) {
+ this.deleteList.push(item.id);
+ this.domains.splice(index, 1);
+ } else {
+ this.domains.splice(index, 1);
+ }
+ } else {
+ this.$message.error("涓嶅厑璁稿垹闄ゆ渶鍚庝竴鏉℃暟鎹紒");
+ }
+ },
+ addDomain() {
+ // 娣诲姞鍏紡formItem
+ this.domains.push({
+ referx: "",
+ refery: "",
+ x: "",
+ y: "",
+ id: ""
+ });
+ },
+ evalResult(val) {
+ this.configForm.formula = val;
+ // 鏍规嵁鍏紡璁$畻鍑虹粨鏋�
+ },
+ sizeChange(val) {
+ this.page.size = val;
+ },
+ currentChange(val) {
+ this.page.current = val;
+ },
+ closeForm() {
+ this.deleteList = [];
+ this.domains = [
+ {
+ referx: "",
+ refery: "",
+ x: "",
+ y: "",
+ id: ""
+ }
+ ];
+ this.dialogVisible3 = false;
+ this.$refs.configForm.resetFields();
+ }
+ }
+};
+</script>
+
+<style scoped>
+.itemFomItem {
+ margin-left: 20px;
+}
+
+.search_thing {
+ width: 350px;
+ display: flex;
+ align-items: center;
+}
+
+.search_label {
+ width: 110px;
+
+ font-size: 14px;
+ text-align: right;
+}
+
+.data-acquisition-config {
+ width: 100%;
+ height: 100%;
+ overflow-y: hidden;
+ overflow-x: hidden;
+
+ .title {
+ height: 60px;
+ line-height: 60px;
+ }
+}
+
+.page {
+ width: 100%;
+ height: 30px;
+ text-align: right;
+ margin-top: 10px;
+}
+
+.table {
+ margin-top: 10px;
+ background-color: #fff;
+ width: calc(100vw - 1em);
+ height: calc(100vh - 18em);
+}
+
+.fomItem1 {
+ display: flex;
+ height: 74px;
+}
+
+.fomItem2 {
+ display: flex;
+ width: 100%;
+}
+
+.fomItemInput {
+ width: 180px;
+ margin-right: 6px;
+}
+
+.fomItemInput1 {
+ width: 100%;
+ margin-right: 6px;
+}
+
+>>>.el-form-item__label {
+ padding-bottom: 0 !important;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/borrow.vue b/src/views/CNAS/resourceDemand/device/component/borrow.vue
new file mode 100644
index 0000000..fafa7b9
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/borrow.vue
@@ -0,0 +1,651 @@
+<!-- 璁惧鍊熺敤 -->
+<template>
+ <div>
+ <div class="search">
+ <div class="search_thing">
+ <div class="search_label">娴佺▼缂栧彿锛�</div>
+ <div><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.processNumber"
+ @keyup.enter.native="refreshTable()"></el-input></div>
+ </div>
+ <div class="search_thing" style="padding-left: 30px;">
+ <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+ <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+ </div>
+ <div class="btns">
+ <el-button size="small" type="primary" @click="add">鏂板</el-button>
+ <!-- <el-button size="small" type="primary" @click="handleDown" :loading="outLoading">瀵煎嚭</el-button>-->
+ </div>
+ </div>
+ <div class="tables" style="margin-top: 10px;">
+ <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 290px)'"
+ :page="page" @pagination="pagination"></lims-table>
+ <!-- <ValueTable ref="ValueTable" :url="$api.deviceBorrow.deviceBorrowPage"
+ :delUrl="$api.deviceBorrow.deleteDeviceBorrow" :componentData="componentData" :key="upIndex" /> -->
+ </div>
+ <el-dialog title="浠櫒璁惧棰�(鍊�)鐢ㄧ櫥璁�" top="5vh" :visible.sync="dialogVisible" width="60%">
+ <el-steps :active="currentStep" finish-status="success" align-center>
+ <el-step style="cursor:pointer" v-for="(v, i) in steps" :title="v" :key="i"
+ @click.native="choiceStep(i)"></el-step>
+ </el-steps>
+ <el-form ref="form" :model="form" :rules="rules" label-width="130px">
+ <div v-show="currentStepClick === 0">
+ <el-card style="margin-top: 1em; height: 51vh; overflow-y: scroll;">
+ <!-- 鏂板璁惧浜嬭褰曞崱鐗� -->
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="缂栧彿锛�" prop="processNumber">
+ <el-input v-model="form.processNumber" size="small" :disabled="currentStep > 0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁惧鍚嶇О锛�">
+ <el-input v-model="form.deviceName" size="small" disabled></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="绠$悊缂栧彿锛�" prop="unifyNumber">
+ <el-input v-model="form.unifyNumber" size="small" :disabled="currentStep > 0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍊熺敤浜猴細" prop="recipientUser">
+ <el-select v-model="form.recipientUser" filterable placeholder="璇烽�夋嫨" clearable size="small"
+ style="width: 100%;" :disabled="currentStep > 0">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍊熺敤浜鸿仈绯绘柟寮忥細" prop="borrowerContactInformation" label-width="150px">
+ <el-input v-model="form.borrowerContactInformation" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍊熺敤鏃ユ湡锛�" prop="recipientTime">
+ <el-date-picker v-model="form.recipientTime" type="date" placeholder="閫夋嫨鏃ユ湡" size="small"
+ format="yyyy-MM-dd" style="width: 100%" value-format="yyyy-MM-dd" :disabled="currentStep > 0">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍊熺敤鏃剁姸鎬侊細">
+ <el-radio-group v-model="form.recipientState" :disabled="currentStep !== 0">
+ <el-radio :label="0">鍚堟牸</el-radio>
+ <el-radio :label="1">缁翠慨</el-radio>
+ <el-radio :label="2">鍋滅敤</el-radio>
+ <el-radio :label="3">鎶ュ簾</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鐩稿叧闄勪欢锛�" prop="fileName">
+ <el-input v-model="form.fileName" disabled size="small"
+ :style="`width: ${currentStep == 0 ? '88%' : '100%'};`">
+ <el-button slot="append" v-if="currentStep === 0" icon="el-icon-delete-solid"
+ @click="deleteFile"></el-button>
+ </el-input>
+ <el-upload ref="upload" style="float: right;" :action="action" :show-file-list="false"
+ :on-success="onSuccess" :disabled="currentStep !== 0" :headers="uploadHeader">
+ <el-button style="position: relative;top: -4px" class="uploadFile" slot="trigger" size="small"
+ type="primary" v-if="currentStep === 0">闄勪欢涓婁紶</el-button>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬬幆鑺傝矗浠讳汉锛�" prop="nextUser">
+ <el-select v-model="form.nextUser" filterable placeholder="璇烽�夋嫨" clearable size="small"
+ style="width: 100%;" :disabled="currentStep !== 0">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.submitOperationUser }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.submitOperationTime }}
+ </el-col>
+ </el-row>
+ </div>
+ <div v-show="currentStepClick === 1">
+ <el-card style="margin-top: 1em; height: 51vh; overflow-y: scroll;">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="褰掕繕浜猴細" prop="rebackUser"
+ :rules="[{ required: currentStep === 1, message: '璇疯緭鍏ュ綊杩樹汉', trigger: 'change' }]">
+ <!-- <el-input v-model="form.rebackUser" size="small" :disabled="currentStep !== 1"></el-input> -->
+ <el-select v-model="form.rebackUser" filterable placeholder="璇烽�夋嫨" clearable size="small"
+ style="width: 50%;" :disabled="currentStep !== 1">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="褰掕繕鏃ユ湡锛�" prop="rebackTime"
+ :rules="[{ required: currentStep === 1, message: '璇烽�夋嫨褰掕繕鏃ユ湡', trigger: 'change' }]">
+ <el-date-picker v-model="form.rebackTime" :disabled="currentStep !== 1" type="date" placeholder="閫夋嫨鏃ユ湡"
+ size="small" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎺ユ敹鐘跺喌锛�">
+ <el-radio-group v-model="form.receiveState" :disabled="currentStep !== 1">
+ <el-radio :label="0">鍚堟牸</el-radio>
+ <el-radio :label="1">缁翠慨</el-radio>
+ <el-radio :label="2">鍋滅敤</el-radio>
+ <el-radio :label="3">鎶ュ簾</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁惧璐熻矗浜猴細" prop="deviceUser"
+ :rules="[{ required: currentStep === 1, message: '璇烽�夋嫨璁惧璐熻矗浜�', trigger: 'change' }]">
+ <!-- <el-input v-model="form.deviceUser" size="small" :disabled="currentStep !== 1"></el-input> -->
+ <el-select v-model="form.deviceUser" filterable placeholder="璇烽�夋嫨" clearable size="small"
+ style="width: 50%;" :disabled="currentStep !== 1">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞锛�">
+ <el-input type="textarea" v-model="form.note" :disabled="currentStep !== 1" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.receiveOperationUser }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.receiveOperationTime }}
+ </el-col>
+ </el-row>
+ </div>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="submitForm('3reject')" v-if="currentStep !== 0 && currentStep !== 2">椹冲洖</el-button>
+ <el-button @click="submitForm('2save')" v-if="currentStep === 0">淇濆瓨</el-button>
+ <el-button type="primary" v-if="currentStep !== 2" @click="submitForm('1submit')">{{ currentStep === 0 ? '鎻愪氦' :
+ '閫氳繃'
+ }}</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog title="娴佺▼璺熻釜" top="5vh" :visible.sync="dialogVisible0" width="60%">
+ <el-table :data="deviceLogs" style="width: 100%">
+ <el-table-column type="index" width="50">
+ </el-table-column>
+ <el-table-column prop="operator" label="鎿嶄綔浜�" width="180">
+ </el-table-column>
+ <el-table-column prop="operationTime" label="鎿嶄綔鏃ユ湡" width="180">
+ </el-table-column>
+ <el-table-column prop="operationType" label="鎻愪氦绫诲瀷">
+ </el-table-column>
+ <el-table-column prop="operationContent" label="鎿嶄綔鍐呭">
+ </el-table-column>
+ </el-table>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import { dateFormat } from '@/utils/date'
+import {
+ saveDeviceBorrow,
+ deleteCNASFile,
+ getDeviceBorrow,
+ deviceBorrowExport,
+ deleteDeviceBorrow,
+ deviceBorrowPage,
+} from '@/api/cnas/resourceDemand/device.js'
+import { selectUserCondition } from "@/api/system/user";
+import { mapGetters } from "vuex";
+export default {
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ components: {
+ limsTable
+ },
+ data() {
+ return {
+ dialogVisible: false,
+ dialogVisible0: false,
+ currentStep: 0, // 姝ラ鏉℃樉绀虹鍑犳
+ currentStepClick: 0, // 鐐瑰嚮姝ラ鏉″彉鍖�
+ steps: ['鍊熷嚭', '鍊熺敤'],
+ responsibleOptions: [], // 涓嬬幆鑺傝礋璐d汉list
+ form: {
+ processNumber: null,
+ deviceName: null,
+ unifyNumber: null,
+ recipientUser: null,
+ recipientTime: null,
+ nextUser: null,
+ rebackUser: null,
+ rebackTime: null,
+ receiveState: null,
+ deviceUser: null,
+ fileName: null,
+ },
+ rules: {
+ processNumber: [{ required: true, message: '璇疯緭鍏ョ紪鍙�', trigger: 'blur' }],
+ deviceName: [{ required: true, message: '璇疯緭鍏ヨ澶囧悕绉�', trigger: 'blur' }],
+ unifyNumber: [{ required: true, message: '璇疯緭鍏ョ鐞嗙紪鍙�', trigger: 'blur' }],
+ recipientUser: [{ required: true, message: '璇疯緭鍏ュ�熺敤浜�', trigger: 'blur' }],
+ borrowerContactInformation: [{ required: true, message: '璇疯緭鍏ュ�熺敤浜鸿仈绯绘柟寮�', trigger: 'blur' }],
+ recipientTime: [{ required: true, message: '璇烽�夋嫨鍊熺敤鏃ユ湡', trigger: 'change' }],
+ nextUser: [{ required: true, message: '璇烽�夋嫨涓嬬幆鑺傝礋璐d汉', trigger: 'change' }],
+ },
+ deviceLogs: [],
+ outLoading: false,
+ recipientStateList: [{
+ value: 0,
+ type: 'success',
+ label: '鍚堟牸'
+ }, {
+ value: 1,
+ type: 'warning',
+ label: '缁翠慨'
+ }, {
+ value: 2,
+ type: 'info',
+ label: '鍋滅敤'
+ }, {
+ value: 3,
+ type: 'danger',
+ label: '鎶ュ簾'
+ }],
+ queryParams: {},
+ tableData: [],
+ column: [
+ { label: "娴佺▼缂栧彿", prop: "processNumber" },
+ { label: "璁惧鍚嶇О", prop: "deviceName" },
+ {
+ label: "绠$悊缂栧彿",
+ prop: "unifyNumber"
+ },
+ { label: "鍊熺敤浜�", prop: "recipientUser" },
+ { label: "鍊熺敤浜鸿仈绯绘柟寮�", prop: "borrowerContactInformation", width: '140px' },
+ { label: "鍊熺敤鏃ユ湡", prop: "recipientTime" },
+ {
+ label: "鍊熺敤鏃剁姸鎬�", prop: "recipientState", dataType: "tag",
+ formatData: (params) => {
+ return this.recipientStateList.find((m) => m.value == params).label;
+ },
+ formatType: (params) => {
+ return this.recipientStateList.find((m) => m.value == params).type;
+ },
+ },
+ { label: "鍊熷嚭浜�", prop: "submitUser" },
+ { label: "鍊熷嚭鏃ユ湡", prop: "createTime" },
+ {
+ label: "褰撳墠鐘舵��", prop: "nowState"
+ },
+ { label: "褰撳墠璐d换浜�", prop: "nowUser" },
+ { label: "闄勪欢", prop: "fileName" },
+ {
+ dataType: "action",
+ fixed: "right",
+ label: "鎿嶄綔",
+ operation: [
+ {
+ name: "鏌ョ湅",
+ type: "text",
+ clickFun: (row) => {
+ this.lookDetail(row);
+ },
+ },
+ {
+ name: "鍒犻櫎",
+ type: "text",
+ clickFun: (row) => {
+ this.handleDelete(row);
+ },
+ },
+ {
+ name: "娴佺▼璺熻釜",
+ type: "text",
+ clickFun: (row) => {
+ this.handleLookList(row);
+ },
+ },
+ ],
+ },
+ ],
+ page: {
+ total: 0,
+ size: 10,
+ current: 0,
+ },
+ tableLoading: false,
+ }
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ thisqueryParams.deviceId = this.clickNodeVal.value
+ this.refreshTable()
+ }
+ },
+ dialogVisible(newVal) {
+ if (!newVal) {
+ this.form = {}
+ this.currentStep = 0 // 姝ラ鏉℃樉绀虹鍑犳
+ this.currentStepClick = 0 // 鐐瑰嚮姝ラ鏉″彉鍖�
+ this.$refs['form'].clearValidate()
+ }
+ }
+ },
+ computed: {
+ ...mapGetters(["nickName"]),
+ action() {
+ return this.javaApi + '/personBasicInfo/saveCNASFile'
+ }
+ },
+ mounted() {
+ this.queryParams.deviceId = this.clickNodeVal.value
+ this.getUserList()
+ this.refreshTable()
+ },
+ methods: {
+ getList() {
+ this.tableLoading = true;
+ let param = { ...this.queryParams, ...this.page };
+ delete param.total;
+ deviceBorrowPage({ ...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.queryParams = {};
+ this.page.current = 1;
+ this.getList();
+ },
+ refreshTable() {
+ this.page.current = 1;
+ this.getList();
+ },
+ choiceStep(index) {
+ this.currentStepClick = index
+ },
+ //鎻愪氦琛ㄥ崟
+ async submitForm(saveState) {
+ this.$refs.form.validate((valid) => {
+ if (valid === true || saveState !== '1submit') {
+ // 缁欏綋鍓嶇幆鑺傝缃垱寤轰汉涓庢椂闂�
+ let user = JSON.parse(localStorage.getItem('user'))
+ const dateTime = dateFormat(new Date())
+ // 鑾峰彇褰撳墠鐜妭鎿嶄綔浜轰笌鏃ユ湡
+ switch (this.currentStep) {
+ case 0:
+ this.form.submitOperationUser = this.nickName
+ this.form.submitOperationTime = dateTime
+ break
+ case 1:
+ this.form.receiveOperationUser = this.nickName
+ this.form.receiveOperationTime = dateTime
+ break
+ default:
+ break
+ }
+ // 鑾峰彇褰撳墠鐜妭璐熻矗浜�
+ switch (saveState === '3reject' ? this.currentStep - 1 : this.currentStep) {
+ case 0:
+ this.form.nowUser = this.form.nextUser
+ break
+ default:
+ break
+ }
+ let currentStepAction;
+ // 璁剧疆璇ユ搷浣滃垽鏂槸鍚︿负鎻愪氦锛屼繚瀛橈紝椹冲洖锛岄�氳繃
+ switch (saveState) {
+ // 鎻愪氦锛岄�氳繃
+ case '1submit':
+ currentStepAction = this.currentStep + 1
+ break
+ // 淇濆瓨
+ case '2save':
+ currentStepAction = this.currentStep
+ break
+ // 椹冲洖
+ case '3reject':
+ currentStepAction = this.currentStep - 1
+ break
+ default:
+ break
+ }
+ // 鑾峰彇褰撳墠鐘舵��
+ this.form.nowState = currentStepAction === 2 ? '鍏抽棴' : this.steps[currentStepAction]
+ this.form.deviceId = this.clickNodeVal.value
+ delete this.form.deviceLogs
+ saveDeviceBorrow(this.form).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鎻愪氦鎴愬姛')
+ this.dialogVisible = false
+ this.refreshTable()
+ }
+ })
+ } else {
+ let step = this.steps[this.currentStep]
+ this.$message.warning(step + ' 娴佺▼涓湁蹇呭~椤规湭濉紒');
+ }
+ });
+ },
+ deleteFile() {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteCNASFile({ fileName: this.form.fileName }).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ }
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ onSuccess(response, file, fileList) {
+ if (response.code == 200) {
+ // 鍦ㄤ繚瀛樿祴鍊兼柊鏂囦欢
+ this.form.fileName = file.name
+ this.form.url = response.data
+ } else {
+ this.$message.error(response.message)
+ }
+ },
+ // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
+ getUserList() {
+ selectUserCondition().then(res => {
+ if (res.code == 200) {
+ this.responsibleOptions = res.data
+ }
+ })
+ },
+ // 鏌ョ湅璇︽儏
+ lookDetail(row) {
+ getDeviceBorrow({ id: row.id }).then(res => {
+ if (res.code == 200) {
+ this.form = res.data
+ this.form.deviceName = this.clickNodeVal.label
+ this.form.deviceId = this.clickNodeVal.value
+ this.deviceLogs = res.data.deviceLogs
+ let i = this.steps.findIndex(item => item == row.nowState)
+ if (i == -1) {
+ this.currentStep = 2
+ this.currentStepClick = 0
+ } else {
+ this.currentStep = i
+ this.currentStepClick = i
+ }
+ console.log(this.currentStepClick)
+ this.dialogVisible = true
+ }
+ })
+ },
+ // 鏂板
+ add() {
+ this.dialogVisible = true
+ this.form = {
+ processNumber: null,
+ deviceName: null,
+ unifyNumber: null,
+ recipientUser: null,
+ recipientTime: null,
+ nextUser: null,
+ rebackUser: null,
+ rebackTime: null,
+ receiveState: null,
+ deviceUser: null,
+ fileName: null,
+ }
+ this.form.deviceName = this.clickNodeVal.label
+ this.form.deviceId = this.clickNodeVal.value
+ },
+ //瀵煎嚭
+ handleDown() {
+ this.outLoading = true
+ deviceBorrowExport({ deviceId: this.clickNodeVal.value }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], {
+ type: 'application/force-download'
+ })
+ const filename = decodeURI(this.clickNodeVal.label + '璁惧鍊熷嚭缁熻' + '.xlsx')
+ this.$download.saveAs(blob, filename)
+ })
+ },
+ handleLookList(row) {
+ getDeviceBorrow({ id: row.id }).then(res => {
+ if (res.code == 200) {
+ this.deviceLogs = res.data.deviceLogs
+ this.dialogVisible0 = true
+ }
+ })
+ },
+ handleDelete(row) {
+ this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ deleteDeviceBorrow({ id: row.id }).then((res) => {
+ this.$message.success("鍒犻櫎鎴愬姛");
+ this.refresh();
+ });
+ })
+ .catch(() => { });
+ },
+ },
+}
+</script>
+
+<style scoped>
+h4 {
+ font-weight: 400;
+ font-size: 16px;
+ display: flex;
+ justify-content: space-between;
+ margin: 10px 0;
+}
+
+h4 .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ background: #3A7BFA;
+ margin-right: 4px;
+}
+
+.tables {
+ width: 100%;
+ height: calc(100vh - 15em);
+}
+
+.search {
+ background-color: #fff;
+ display: flex;
+ align-items: center;
+ position: relative;
+ margin-top: 10px;
+}
+
+.search_thing {
+ display: flex;
+ align-items: center;
+ height: 40px;
+}
+
+.search_label {
+ width: 70px;
+ font-size: 14px;
+ text-align: right;
+}
+
+.search_input {
+ width: calc(100% - 120px);
+}
+
+.btns {
+ position: absolute;
+ right: 0px;
+ top: 50%;
+ transform: translate(0, -50%);
+}
+
+.btns_thing {
+ position: absolute;
+ right: 230px;
+ top: 50%;
+ transform: translate(0, -50%);
+}
+
+.form .search_label {
+ width: 120px;
+}
+
+.el-radio {
+ margin-right: 10px;
+}
+
+.el-radio-group {
+ width: 100%;
+ display: flex;
+ margin-top: 12px;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/calibration.vue b/src/views/CNAS/resourceDemand/device/component/calibration.vue
new file mode 100644
index 0000000..f11b502
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/calibration.vue
@@ -0,0 +1,692 @@
+<!-- 璁惧鏍″噯 -->
+<template>
+ <div>
+ <div class="btnS">
+ <el-button size="small" type="primary" @click="calibrationMaintenance()">鏍″噯椤圭洰缁存姢</el-button>
+ <el-button size="small" type="primary" @click="add('add')">娣诲姞鏍″噯璁板綍</el-button>
+ <!-- <el-button size="small" type="primary" @click="handleDown">瀵煎嚭Excel</el-button> -->
+ </div>
+ <div class="tables" style="margin-top: 10px;">
+ <el-table :data="tableData" height="calc(100vh - 20em)">
+ <el-table-column label="搴忓彿" type="index" width="120">
+ <template v-slot="scope">
+ <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="璁板綍缂栧彿" min-width="150" prop="processNumber"></el-table-column>
+ <el-table-column label="鏍″噯鏈烘瀯" min-width="150" prop="unitOfMeasure" show-overflow-tooltip></el-table-column>
+ <el-table-column label="鏍″噯缁撹" min-width="150" prop="status">
+ <template v-slot="scope">
+ {{ scope.row.status === '0yes' ? '鍚堟牸' : scope.row.status === '1no' ? '涓嶅悎鏍�' : '鍏朵粬' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="鏍″噯璇佷功缂栧彿" min-width="150" prop="certificateSerialNumber"></el-table-column>
+ <el-table-column label="璇存槑" min-width="150" prop="remark" show-overflow-tooltip></el-table-column>
+ <el-table-column label="鏍″噯鏃ユ湡" min-width="150" prop="calibrationDate"></el-table-column>
+ <el-table-column label="涓嬫鏍″噯鏃ユ湡" min-width="150" prop="nextCalibrationDate"></el-table-column>
+ <el-table-column label="纭鏃ユ湡" min-width="150" prop="confirmDate"></el-table-column>
+ <el-table-column label="鐧昏浜�" min-width="150" prop="createUser"></el-table-column>
+ <el-table-column label="鐧昏鏃ユ湡" min-width="150" prop="createTime"></el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔" min-width="180" align="center">
+ <template #default="{ row }">
+ <el-button size="small" type="text" @click="handleAttachmentClick(row)">涓嬭浇闄勪欢</el-button>
+ <el-button size="small" type="text" @click="handleViewClick('view', row)">鏌ョ湅</el-button>
+ <el-button size="small" type="text" @click="handleDeleteClick(row)">鍒犻櫎</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" style="margin-right: 5%;"
+ @size-change="handleSizeChange" @current-change="handleCurrentChange">
+ </el-pagination>
+ </div>
+ <!-- 鏍″噯椤圭洰缁存姢 -->
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible0"
+ title="鏍″噯椤圭洰缁存姢" top="5vh" width="70%">
+ <h4>
+ <span style="display: flex;align-items: center;"><span class="line"></span><span>璁惧鏍″噯鍙傛暟缁存姢</span></span>
+ <el-button :loading="addCalibrateLoading" size="small" type="primary" @click="addCalibrate">娣� 鍔�</el-button>
+ </h4>
+ <div>
+ <el-form ref="form0" :model="form0" :rules="form0Rules" label-position="right" label-width="120px">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="璁¢噺鍙傛暟:" prop="measurementParameter">
+ <el-input v-model="form0.measurementParameter" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閲忕▼鑼冨洿:" prop="rangeOfMeasurement">
+ <el-input v-model="form0.rangeOfMeasurement" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈�澶у厑璁歌宸�:" prop="maxPermissibleError">
+ <el-input v-model="form0.maxPermissibleError" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍒ゅ畾鏍囧噯:" prop="judgmentCriteria">
+ <el-input v-model="form0.judgmentCriteria" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </div>
+ <h4>
+ <span style="display: flex;align-items: center;"><span class="line"></span><span>璁惧鏍″噯鍙傛暟</span></span>
+ </h4>
+ <!-- 璁惧鏍″噯鍙傛暟琛ㄦ牸 -->
+ <el-table ref="calibrateTable" v-loading="calibrateParamsLoading" :data="calibrateParams" max-height="450" stripe
+ style="width: 100%">
+ <el-table-column label="缂栧彿" type="index" width="80"></el-table-column>
+ <el-table-column label="璁¢噺鍙傛暟" prop="measurementParameter"></el-table-column>
+ <el-table-column label="閲忕▼鑼冨洿" prop="rangeOfMeasurement"></el-table-column>
+ <el-table-column label="鏈�澶у厑璁歌宸�" prop="maxPermissibleError"></el-table-column>
+ <el-table-column label="鍒ゅ畾鏍囧噯" prop="judgmentCriteria"></el-table-column>
+ <el-table-column label="鍒涘缓浜�" prop="createdBy"></el-table-column>
+ <el-table-column label="鍒涘缓鏃堕棿" prop="creationTime"></el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔">
+ <template slot-scope="scope">
+ <el-button size="small" type="text" @click="handleDelete(scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-dialog>
+
+ <!-- 娣诲姞鏍″噯璁板綍 -->
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible1"
+ title="娣诲姞鏍″噯璁板綍" top="5vh" width="80%" @close="resetCalibrationRecord">
+ <div style="height: 70vh;overflow-y: auto;overflow-x: hidden;">
+ <h4>
+ <div style="display: flex;align-items: center;">
+ <span class="line"></span>
+ <span>娣诲姞璁惧鏍″噯璁板綍</span>
+ </div>
+ </h4>
+ <el-form ref="calibrationRecord" :model="calibrationRecord" :rules="formRules" label-position="right"
+ label-width="120px">
+ <el-row>
+ <el-col :span="6">
+ <el-form-item label="鏍″噯鏈嶅姟鏈烘瀯:" prop="unitOfMeasure">
+ <el-input v-model="calibrationRecord.unitOfMeasure" :disabled="operationType === 'view'"
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏍″噯鏃ユ湡:" prop="calibrationDate">
+ <el-date-picker v-model="calibrationRecord.calibrationDate" :disabled="operationType === 'view'"
+ format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 90%" type="date"
+ value-format="yyyy-MM-dd" @change="getNextCalibrationDate">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="10">
+ <el-form-item label="涓嬫鏍″噯鏃ユ湡:" label-width="140px">
+ <el-date-picker v-model="calibrationRecord.nextCalibrationDate" disabled format="yyyy-MM-dd"
+ placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 90%" type="date" value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="璁$畻鍣ㄥ叿:" prop="calculatingApparatus">
+ <el-input v-model="calibrationRecord.calculatingApparatus" :disabled="operationType === 'view'"
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璁$畻鏍囧噯閲忕▼:" prop="standardRange">
+ <el-input v-model="calibrationRecord.standardRange" :disabled="operationType === 'view'" size="small"
+ style="width: 90%"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="10">
+ <el-form-item label="璁¢噺鏍囧噯涓嶇‘瀹氬害:" label-width="140px" prop="calibrationStandardUncertainty">
+ <el-input v-model="calibrationRecord.calibrationStandardUncertainty"
+ :disabled="operationType === 'view'" size="small" style="width: 90%"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="鎵�渚濇嵁鏂囦欢:" prop="byDocument">
+ <el-input v-model="calibrationRecord.byDocument" :disabled="operationType === 'view'"
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璇佷功缂栧彿:" prop="certificateSerialNumber">
+ <el-input v-model="calibrationRecord.certificateSerialNumber" :disabled="operationType === 'view'"
+ size="small" style="width: 90%"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="10">
+ <el-form-item label="鐘舵��:" label-width="140px" prop="status" required>
+ <el-radio-group v-model="calibrationRecord.status" :disabled="operationType === 'view'">
+ <el-radio label="0yes">鍚堟牸</el-radio>
+ <el-radio label="1no">涓嶅悎鏍�</el-radio>
+ <el-radio label="2other">鍏朵粬</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="纭鏃ユ湡:">
+ <el-date-picker v-model="calibrationRecord.confirmDate" :disabled="operationType === 'view'"
+ 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="17">
+ <el-form-item label="闄勪欢锛�" prop="fileName">
+ <el-input v-model="calibrationRecord.fileName"
+ :style="`width: ${operationType === 'add' ? '85%' : '100%'};}`" disabled size="small">
+ <el-button v-if="operationType === 'add'" slot="append" icon="el-icon-delete-solid"
+ @click="deleteFile"></el-button>
+ </el-input>
+ <el-upload v-if="operationType === 'add'" ref="upload" :action="action" :before-upload="beforeUpload"
+ :headers="uploadHeader" :limit="1" :on-error="onError" :on-success="handleSuccessUp"
+ :show-file-list="false" style="float: right;">
+ <el-button :loading="upLoading" size="small" style="position: relative; top: -4px;"
+ type="primary">闄勪欢涓婁紶
+ </el-button>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞:">
+ <el-input v-model="calibrationRecord.remark" :disabled="operationType === 'view'" :rows="3" size="small"
+ style="width: 96%" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <h4>
+ <span style="display: flex;align-items: center;">
+ <span class="line"></span><span>鏍″噯鏉$洰纭缁撴灉</span>
+ </span>
+ </h4>
+ <el-table ref="calibrateTable" :data="calibrateParams" border>
+ <el-table-column label="缂栧彿" type="index" width="60"></el-table-column>
+ <el-table-column label="璁¢噺鍙傛暟" prop="measurementParameter"></el-table-column>
+ <el-table-column label="閲忕▼鑼冨洿" prop="rangeOfMeasurement"></el-table-column>
+ <el-table-column label="鏈�澶у厑璁歌宸�" prop="maxPermissibleError"></el-table-column>
+ <el-table-column label="鍒ゅ畾鏍囧噯" prop="judgmentCriteria"></el-table-column>
+ <el-table-column label="鏄惁鏍″噯" prop="isCalibration">
+ <template slot="header" slot-scope="scope">
+ <span class="required-span">* </span>鏄惁鏍″噯
+ </template>
+ <template slot-scope="scope">
+ <el-radio-group v-model="scope.row.isCalibration" :disabled="operationType === 'view'">
+ <el-radio label="0yes">鏄�</el-radio>
+ <el-radio label="1no">鍚�</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍒ゅ畾缁撴灉" min-width="140" prop="result">
+ <template slot="header" slot-scope="scope">
+ <span class="required-span">* </span>鍒ゅ畾缁撴灉
+ </template>
+ <template slot-scope="scope">
+ <el-radio-group v-model="scope.row.result" :disabled="operationType === 'view'" @input="checkRadio()">
+ <el-radio label="0yes">鍚堟牸</el-radio>
+ <el-radio label="1no">涓嶅悎鏍�</el-radio>
+ <el-radio label="2other">鍏朵粬</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍗曢」缁撴灉璇存槑" prop="singleResultStatement">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.singleResultStatement" :disabled="operationType === 'view'"
+ size="small"></el-input>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button v-if="operationType === 'add'" @click="dialogVisible1 = false">鍙� 娑�</el-button>
+ <el-button v-if="operationType === 'add'" :loading="addRecordLoading" type="primary" @click="addRecord">纭�
+ 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ deviceMetricRecordPage,
+ showDeviceMetricsCopy,
+ deleteDeviceMetricRecord,
+ deviceMetricRecordExport,
+ deleteCNASFile,
+ selectDeviceMetric,
+ deleteDeviceMetrics,
+ addOrUpdateDeviceMetricRecord,
+ saveOrUpdateDeviceMetric
+} from '@/api/cnas/resourceDemand/device.js'
+import { mapGetters } from "vuex";
+export default {
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ data() {
+ return {
+ value: "",
+ calibrateParams: [],
+ calibrateParamsLoading: false,
+ addCalibrateLoading: false,
+ calibrationRecord: {
+ unitOfMeasure: '', // 璁¢噺鍗曚綅
+ calibrationDate: null, // 鏍″噯鏃ユ湡
+ nextCalibrationDate: null, // 涓嬫鏍″噯鏃ユ湡
+ calculatingApparatus: '', // 璁$畻鍣ㄥ叿
+ confirmDate: null, // 纭鏃ユ湡
+ standardRange: '', // 璁$畻鏍囧噯閲忕▼
+ calibrationStandardUncertainty: '', // 璁¢噺鏍囧噯涓嶇‘瀹氬害
+ byDocument: '', // 渚濇嵁鏂囦欢
+ certificateSerialNumber: '', // 璇佷功缂栧彿
+ status: '', // 鐘舵��
+ remark: '', // 澶囨敞
+ systemFileName: '', //
+ fileName: '', //
+ },
+ formRules: {
+ unitOfMeasure: [{ required: true, message: '璇疯緭鍏ユ牎鍑嗘湇鍔℃満鏋�', trigger: 'blur' }],
+ calibrationDate: [{ required: true, message: '璇烽�夋嫨鏍″噯鏃ユ湡', trigger: 'change' }],
+ calculatingApparatus: [{ required: true, message: '璇疯緭鍏ヨ绠楀櫒鍏�', trigger: 'blur' }],
+ standardRange: [{ required: true, message: '璇疯緭鍏ヨ绠楁爣鍑嗛噺绋�', trigger: 'blur' }],
+ calibrationStandardUncertainty: [{ required: true, message: '璇疯緭鍏ヨ閲忔爣鍑嗕笉纭畾搴�', trigger: 'blur' }],
+ byDocument: [{ required: true, message: '璇疯緭鍏ユ墍渚濇嵁鏂囦欢', trigger: 'blur' }],
+ status: [{ required: true, message: '璇烽�夋嫨鐘舵��', trigger: 'change' }],
+ },
+ tableData: [],
+ dialogVisible0: false,
+ dialogVisible1: false,
+ form0: {
+ measurementParameter: '', // 璁¢噺鍙傛暟
+ rangeOfMeasurement: '',
+ maxPermissibleError: '',
+ judgmentCriteria: '',
+ createdBy: '',
+ action: '',
+ deviceId: null
+ },
+ form0Rules: {
+ measurementParameter: [
+ { required: true, message: '璇疯緭鍏ヨ閲忓弬鏁�', trigger: 'blur' }
+ ],
+ rangeOfMeasurement: [
+ { required: true, message: '璇疯緭鍏ラ噺绋嬭寖鍥�', trigger: 'blur' }
+ ],
+ maxPermissibleError: [
+ { required: true, message: '璇疯緭鍏ユ渶澶у厑璁歌宸�', trigger: 'blur' }
+ ],
+ judgmentCriteria: [
+ { required: true, message: '璇疯緭鍏ュ垽瀹氭爣鍑�', trigger: 'blur' }
+ ],
+ },
+ addRecordLoading: false,
+ upLoading: false,
+ operationType: '',
+ search: {
+ size: 20,
+ current: 1,
+ total: 0
+ },
+ }
+ },
+ // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
+ computed: {
+ ...mapGetters(["nickName"]),
+ action() {
+ return this.javaApi + '/personBasicInfo/saveCNASFile'
+ }
+ },
+ mounted() {
+ //鑾峰彇鎿嶄綔璁板綍淇℃伅
+ this.getTableList(this.clickNodeVal.value) // 鑾峰彇璁惧鏍″噯鍒楄〃鏁版嵁
+ },
+ methods: {
+ //鐘舵�佸垽瀹�
+ checkRadio() {
+ let resultList = this.calibrateParams.map(ele => ele.result)
+ if (resultList && resultList.filter(ele => ele == '1no').length > 0) {
+ this.calibrationRecord.status = '1no'
+ } else if (resultList && resultList.filter(ele => ele == '2other').length == resultList.length) {
+ this.calibrationRecord.status = '2other'
+ } else if (resultList && resultList.filter(ele => ele == '0yes').length == resultList.length) {
+ this.calibrationRecord.status = '0yes'
+ }
+ },
+ getNextCalibrationDate(val) {
+ let oneYearLaterDate = new Date(val)
+ oneYearLaterDate.setFullYear(oneYearLaterDate.getFullYear() + 1);
+ oneYearLaterDate.setDate(oneYearLaterDate.getDate() - 1);
+ // let obj = oneYearLaterDate.toISOString().split('T')[0];
+ this.calibrationRecord.nextCalibrationDate = oneYearLaterDate
+ },
+ handleSizeChange(val) {
+ this.search.size = val
+ this.getTableList(this.clickNodeVal.value);
+ },
+ handleCurrentChange(val) {
+ this.search.current = val
+ this.getTableList(this.clickNodeVal.value);
+ },
+ getTableList(deviceId) {
+ deviceMetricRecordPage({ deviceId, type: 'calibrate', ...this.search }).then(res => {
+ this.tableData = res.data.records
+ this.search.total = res.data.total
+ })
+ },
+ // 娣诲姞鏍告煡璁板綍
+ add(type) {
+ this.operationType = type
+ this.dialogVisible1 = true
+ this.getXmsg()
+ },
+ // 鏌ョ湅璇︽儏
+ handleViewClick(type, row) {
+ showDeviceMetricsCopy({ id: row.id, type: 'calibrate' }).then(res => {
+ this.calibrateParams = res.data
+ })
+ this.calibrationRecord = { ...row }
+ this.operationType = type
+ this.dialogVisible1 = true
+ },
+ // 琛ㄦ牸鍒犻櫎鎿嶄綔
+ handleDeleteClick(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteDeviceMetricRecord({ id: row.id }).then(res => {
+ this.getTableList(this.clickNodeVal.value) // 鑾峰彇璁惧鏍″噯鍒楄〃鏁版嵁
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ })
+ },
+ handleAttachmentClick(row) {
+ this.$download.saveAs(row.systemFileName, row.systemFileName)
+ },
+ //瀵煎嚭
+ handleDown() {
+ this.outLoading = true
+ deviceMetricRecordExport({
+ deviceId: this.clickNodeVal.value,
+ type: 'calibrate'
+ }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '璁惧鏍″噯.xlsx')
+ })
+ },
+ deleteFile() {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎鏂囦欢, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteCNASFile({ fileName: this.calibrationRecord.systemFileName }).then(res => {
+ this.calibrationRecord.fileName = ''
+ this.$refs.upload.clearFiles()
+ if (res.code == 200) {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ }
+ })
+ }).catch((err) => {
+ console.log('err----', err)
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 鏍″噯椤圭洰缁存姢
+ calibrationMaintenance() {
+ this.dialogVisible0 = true
+ this.getXmsg();
+ },
+ // 鑾峰彇璁惧鏍″噯鍙傛暟table淇℃伅
+ async getXmsg() {
+ this.calibrateParamsLoading = true
+ try {
+ await selectDeviceMetric({ deviceId: this.clickNodeVal.value, type: 'calibrate' }).then(res => {
+ if (res.code == 200) {
+ this.calibrateParams = res.data
+ }
+ this.calibrateParamsLoading = false
+ })
+ } catch (e) {
+ console.log('getXmsg---', e)
+ this.calibrateParamsLoading = false
+ }
+ },
+ // 鏍″噯椤圭洰缁存姢-鍒犻櫎璁惧鏍″噯鍙傛暟
+ handleDelete(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteDeviceMetrics({ id: row.id }).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鍒犻櫎鎴愬姛!');
+ this.getXmsg();
+ }
+ })
+ }).catch(() => {
+ this.$message.info('宸插彇娑堝垹闄�');
+ })
+ },
+ addCalibrate() {
+ this.$refs['form0'].validate((valid) => {
+ if (valid) {
+ // 淇濆瓨
+ this.calibrateParamsLoading = true
+ this.addCalibrateLoading = true
+ this.form0.deviceId = this.clickNodeVal.value;
+ this.form0.createdBy = this.nickName;
+ this.form0.type = 'calibrate'
+ saveOrUpdateDeviceMetric(this.form0).then(res => {
+ if (res.code == 200) {
+ this.$message.success('淇濆瓨鎴愬姛')
+ this.$refs['form0'].resetFields()
+ this.getXmsg() // 鍒锋柊璁惧鏍″噯鍙傛暟琛ㄦ牸
+ }
+ this.calibrateParamsLoading = false
+ this.addCalibrateLoading = false
+ })
+ } else {
+ this.addCalibrateLoading = false
+ this.$message.warning('鏈夊繀濉」鏈~');
+ }
+ })
+ },
+ addRecord() {
+ this.$refs['calibrationRecord'].validate((valid) => {
+ if (valid) {
+ try {
+ if (this.calibrateParams.some(m => m.isCalibration === undefined)) {
+ this.$message.error('璇烽�夋嫨鏄惁鏍″噯')
+ return
+ }
+ if (!this.calibrateParams.every(m => m.result !== undefined)) {
+ this.$message.error('璇烽�夋嫨鍒ゅ畾缁撴灉')
+ return
+ }
+ this.addRecordLoading = true
+ this.calibrationRecord.deviceId = this.clickNodeVal.value;
+ this.calibrationRecord.createUser = this.nickName
+ this.calibrationRecord.type = 'calibrate'
+ this.calibrationRecord.deviceMetricsCopyList = this.calibrateParams
+ addOrUpdateDeviceMetricRecord(this.calibrationRecord).then(res => {
+ if (res.code == 200) {
+ this.$message.success('娣诲姞鎴愬姛')
+ this.dialogVisible1 = false
+ this.getTableList(this.clickNodeVal.value)
+ }
+ this.addRecordLoading = false
+ })
+ } catch (e) {
+ console.log('addRecord---', e)
+ this.addRecordLoading = false
+ }
+ } else {
+ this.$message.warning('鏈夊繀濉」鏈~');
+ }
+ })
+ },
+ resetCalibrationRecord() {
+ this.$refs.calibrationRecord.resetFields()
+ },
+ // 涓婁紶闄勪欢
+ handleSuccessUp(response, file) {
+ if (response.code == 200) {
+ // 鍦ㄤ繚瀛樿祴鍊兼柊鏂囦欢
+ this.calibrationRecord.fileName = file.name
+ this.calibrationRecord.systemFileName = response.data
+ this.upLoading = false;
+ } else {
+ this.upLoading = false;
+ this.$message.error(response.message)
+ }
+ },
+ 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()
+ },
+ // end
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ this.getTableList(newVal.value);
+ }
+ },
+ dialogVisible1(newVal) {
+ if (newVal === false) {
+ this.calibrateParams = []
+ this.calibrationRecord = {
+ unitOfMeasure: '', // 璁¢噺鍗曚綅
+ calibrationDate: null, // 鏍″噯鏃ユ湡
+ nextCalibrationDate: null, // 涓嬫鏍″噯鏃ユ湡
+ calculatingApparatus: '', // 璁$畻鍣ㄥ叿
+ standardRange: '', // 璁$畻鏍囧噯閲忕▼
+ calibrationStandardUncertainty: '', // 璁¢噺鏍囧噯涓嶇‘瀹氬害
+ byDocument: '', // 渚濇嵁鏂囦欢
+ certificateSerialNumber: '', // 璇佷功缂栧彿
+ status: '', // 鐘舵��
+ remark: '', // 澶囨敞
+ }
+ }
+ }
+ }
+}
+
+</script>
+<style scoped>
+.tables {
+ width: 100%;
+ height: calc(100vh - 230px);
+}
+
+.search {
+ background-color: #fff;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ position: relative;
+}
+
+.search_thing {
+ display: flex;
+ align-items: center;
+ height: 40px;
+}
+
+.search_label {
+ width: 70px;
+ font-size: 14px;
+ text-align: right;
+ margin-right: 10px;
+}
+
+.search_input {
+ width: calc(100% - 110px);
+}
+
+.btnS {
+ text-align: right;
+ margin-top: 10px;
+}
+
+h4 {
+ font-weight: 400;
+ font-size: 16px;
+ display: flex;
+ justify-content: space-between;
+ margin: 10px 0;
+}
+
+h4 .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ background: #3A7BFA;
+ margin-right: 4px;
+}
+
+.check {
+ background-color: #fff;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+}
+
+.check_thing {
+ flex: 0 0 calc(20% - 10px);
+ margin-bottom: 20px;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+}
+
+.check_label {
+ font-size: 14px;
+ margin-bottom: 5px;
+}
+
+.check_data .check_input {
+ width: 100%;
+}
+
+.el-table {
+ font-size: 14px;
+ color: #333;
+}
+
+.el-table thead {
+ background-color: #f5f5f5;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/check.vue b/src/views/CNAS/resourceDemand/device/component/check.vue
new file mode 100644
index 0000000..5dfe6b9
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/check.vue
@@ -0,0 +1,675 @@
+<!-- 璁惧鏍告煡 -->
+<template>
+ <div>
+ <div class="btns">
+ <el-button size="small" type="primary" @click="calibrationMaintenance()">鏍告煡椤圭洰缁存姢</el-button>
+ <el-button size="small" type="primary" @click="add('add')">娣诲姞鏍告煡璁板綍</el-button>
+ <el-button size="small" type="primary">瀵煎嚭Excel</el-button>
+ </div>
+ <div class="tables" style="margin-top: 16px;">
+ <el-table :data="tableData" height="calc(100vh - 20em)">
+ <el-table-column label="搴忓彿" type="index" width="120">
+ <template v-slot="scope">
+ <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="璁板綍缂栧彿" min-width="150" prop="processNumber"></el-table-column>
+ <el-table-column label="鏍告煡鏈烘瀯" min-width="150" prop="calibrationInstitution"
+ show-overflow-tooltip></el-table-column>
+ <el-table-column label="鏍告煡缁撹" min-width="150" prop="status">
+ <template v-slot="scope">
+ {{ scope.row.status === '0yes' ? '鍚堟牸' : scope.row.status === '1no' ? '涓嶅悎鏍�' : '鍏朵粬' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="鏍告煡璇佷功缂栧彿" min-width="150" prop="certificateSerialNumber"></el-table-column>
+ <el-table-column label="璇存槑" min-width="150" prop="remark" show-overflow-tooltip></el-table-column>
+ <el-table-column label="鏍告煡鏃ユ湡" min-width="150" prop="calibrationDate"></el-table-column>
+ <el-table-column label="涓嬫鏍告煡鏃ユ湡" min-width="150" prop="nextCalibrationDate"></el-table-column>
+ <el-table-column label="鐧昏浜�" min-width="150" prop="createUser"></el-table-column>
+ <el-table-column label="鐧昏鏃ユ湡" min-width="150" prop="createTime"></el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔" min-width="150">
+ <template #default="{ row }">
+ <el-button size="small" type="text" @click="handleAttachmentClick(row)">闄勪欢</el-button>
+ <el-button size="small" type="text" @click="handleViewClick('view', row)">鏌ョ湅</el-button>
+ <el-button size="small" type="text" @click="handleDeleteClick(row)">鍒犻櫎</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" style="margin-right: 5%;"
+ @size-change="handleSizeChange" @current-change="handleCurrentChange">
+ </el-pagination>
+ </div>
+
+ <!-- 鏍″噯椤圭洰缁存姢 -->
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible0"
+ title="鏍告煡椤圭洰缁存姢" top="5vh" width="70%">
+ <h4>
+ <span style="display: flex;align-items: center;"><span class="line"></span><span>璁惧鏍告煡鍙傛暟缁存姢</span></span>
+ <el-button :loading="addCalibrateLoading" size="small" type="primary" @click="addCalibrate">娣� 鍔�</el-button>
+ </h4>
+ <div>
+ <el-form ref="form0" :model="form0" :rules="form0Rules" label-position="right" label-width="120px">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="鏍告煡鍙傛暟:" prop="measurementParameter">
+ <el-input v-model="form0.measurementParameter" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏍告煡鑼冨洿:" prop="rangeOfMeasurement">
+ <el-input v-model="form0.rangeOfMeasurement" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈�澶у厑璁歌宸�:" prop="maxPermissibleError">
+ <el-input v-model="form0.maxPermissibleError" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍒ゅ畾鏍囧噯:" prop="judgmentCriteria">
+ <el-input v-model="form0.judgmentCriteria" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </div>
+ <h4>
+ <span style="display: flex;align-items: center;"><span class="line"></span><span>璁惧鏍告煡鍙傛暟</span></span>
+ </h4>
+ <!-- 璁惧鏍″噯鍙傛暟琛ㄦ牸 -->
+ <el-table ref="calibrateTable" v-loading="calibrateParamsLoading" :data="calibrateParams" max-height="450" stripe
+ style="width: 100%">
+ <el-table-column label="缂栧彿" type="index" width="80"></el-table-column>
+ <el-table-column label="鏍告煡鍙傛暟" prop="measurementParameter"></el-table-column>
+ <el-table-column label="鏍告煡鑼冨洿" prop="rangeOfMeasurement"></el-table-column>
+ <el-table-column label="鏈�澶у厑璁歌宸�" prop="maxPermissibleError"></el-table-column>
+ <el-table-column label="鍒ゅ畾鏍囧噯" prop="judgmentCriteria"></el-table-column>
+ <el-table-column label="鍒涘缓浜�" prop="createdBy"></el-table-column>
+ <el-table-column label="鍒涘缓鏃堕棿" prop="creationTime"></el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔">
+ <template slot-scope="scope">
+ <el-button size="small" type="text" @click="handleDelete(scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-dialog>
+
+ <!-- 娣诲姞鏍告煡璁板綍 -->
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible1"
+ title="娣诲姞鏍告煡璁板綍" top="5vh" width="80%" @close="resetcalibrationRecord">
+ <div class="dialog-content">
+ <h4>
+ <span style="display: flex;align-items: center;">
+ <span class="line"></span>
+ <span>娣诲姞璁惧鏍告煡璁板綍</span>
+ </span>
+ </h4>
+ <el-form ref="calibrationRecord" :model="calibrationRecord" :rules="formRules" label-position="right"
+ label-width="120px">
+ <el-row>
+ <el-col :span="6">
+ <el-form-item label="鏍告煡浜�:" prop="unitOfMeasure">
+ <el-input v-model="calibrationRecord.unitOfMeasure" :disabled="operationType === 'view'"
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏍告煡鏃ユ湡:" prop="calibrationDate">
+ <el-date-picker v-model="calibrationRecord.calibrationDate" :disabled="operationType === 'view'"
+ format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 90%" type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="10">
+ <el-form-item label="涓嬫鏍告煡鏃ユ湡:" label-width="140px" prop="nextCalibrationDate">
+ <el-date-picker v-model="calibrationRecord.nextCalibrationDate" :disabled="operationType === 'view'"
+ :picker-options="{ disabledDate: this.disabledDate }" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡"
+ size="small" style="width: 90%" type="date" value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="鏍告煡鍣ㄥ叿:" prop="calculatingApparatus">
+ <el-input v-model="calibrationRecord.calculatingApparatus" :disabled="operationType === 'view'"
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏍告煡鏍囧噯閲忕▼:" prop="standardRange">
+ <el-input v-model="calibrationRecord.standardRange" :disabled="operationType === 'view'" size="small"
+ style="width: 90%"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="10">
+ <el-form-item label="鏍告煡鏍囧噯涓嶇‘瀹氬害:" label-width="140px" prop="calibrationStandardUncertainty">
+ <el-input v-model="calibrationRecord.calibrationStandardUncertainty"
+ :disabled="operationType === 'view'" size="small" style="width: 90%"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="鏍告煡鎸囧涔�:" prop="byDocument">
+ <el-input v-model="calibrationRecord.byDocument" :disabled="operationType === 'view'"
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="妫�鏌ユ姤鍛婄紪鍙�:" prop="certificateSerialNumber">
+ <el-input v-model="calibrationRecord.certificateSerialNumber" :disabled="operationType === 'view'"
+ size="small" style="width: 90%"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏍告煡鎬荤粨璁�:" label-width="140px" prop="status">
+ <el-radio-group v-model="calibrationRecord.status" :disabled="operationType === 'view'">
+ <el-radio label="0yes">鍚堟牸</el-radio>
+ <el-radio label="1no">涓嶅悎鏍�</el-radio>
+ <el-radio label="2other">鍏朵粬</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="23">
+ <el-form-item label="闄勪欢锛�" prop="fileName">
+ <el-input v-model="calibrationRecord.fileName"
+ :style="`width: ${operationType === 'add' ? '90%' : '100%'};}`" disabled size="small">
+ <el-button v-if="operationType === 'add'" slot="append" icon="el-icon-delete-solid"
+ @click="deleteFile"></el-button>
+ </el-input>
+ <el-upload v-if="operationType === 'add'" ref="upload" :action="action" :before-upload="beforeUpload"
+ :headers="uploadHeader" :limit="1" :on-error="onError" :on-success="handleSuccessUp"
+ :show-file-list="false" style="float: right;">
+ <el-button :loading="upLoading" size="small" style="position: relative; top: -4px;"
+ type="primary">闄勪欢涓婁紶
+ </el-button>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞:">
+ <el-input v-model="calibrationRecord.remark" :disabled="operationType === 'view'" :rows="3" size="small"
+ style="width: 96%" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <h4>
+ <span style="display: flex;align-items: center;">
+ <span class="line"></span><span>鏍告煡鏉$洰纭缁撴灉</span>
+ </span>
+ </h4>
+ <el-table ref="calibrateTable" :data="calibrateParams" stripe style="width: 100%;">
+ <el-table-column label="缂栧彿" type="index" width="80"></el-table-column>
+ <el-table-column label="鏍告煡鍙傛暟" prop="measurementParameter" width="150"></el-table-column>
+ <el-table-column label="鏍告煡鑼冨洿" prop="rangeOfMeasurement" width="150"></el-table-column>
+ <el-table-column label="鏈�澶у厑璁歌宸�" prop="maxPermissibleError" width="150"></el-table-column>
+ <el-table-column label="鍒ゅ畾鏍囧噯" prop="judgmentCriteria" width="150"></el-table-column>
+ <el-table-column label="鏄惁鏍告煡" prop="isCalibration">
+ <template slot="header" slot-scope="scope">
+ <span class="required-span">* </span>鏄惁鏍告煡
+ </template>
+ <template slot-scope="scope">
+ <el-radio-group v-model="scope.row.isCalibration" :disabled="operationType === 'view'">
+ <el-radio label="0yes">鏄�</el-radio>
+ <el-radio label="1no">鍚�</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍒ゅ畾缁撴灉" prop="result">
+ <template slot="header" slot-scope="scope">
+ <span class="required-span">* </span>鍒ゅ畾缁撴灉
+ </template>
+ <template slot-scope="scope">
+ <el-radio-group v-model="scope.row.result" :disabled="operationType === 'view'" @input="checkRadio()">
+ <el-radio label="0yes">鍚堟牸</el-radio>
+ <el-radio label="1no">涓嶅悎鏍�</el-radio>
+ <el-radio label="2other">鍏朵粬</el-radio>
+ </el-radio-group>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍗曢」缁撴灉璇存槑" prop="singleResultStatement">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.singleResultStatement" :disabled="operationType === 'view'"
+ size="small"></el-input>
+ </template>
+ </el-table-column>
+ </el-table>
+ <span slot="footer" class="dialog-footer" style="float: right;margin-top: 10px">
+ <el-button v-if="operationType === 'add'" @click="dialogVisible1 = false">鍙� 娑�</el-button>
+ <el-button v-if="operationType === 'add'" type="primary" @click="addRecord">纭� 瀹�</el-button>
+ </span>
+ </div>
+ </el-dialog>
+ </div>
+
+</template>
+
+<script>
+import file from '@/utils/file';
+import { mapGetters } from "vuex";
+export default {
+ components: {},
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ data() {
+ return {
+ search: {
+ size: 20,
+ current: 1,
+ total: 0
+ },
+ calibrateParamsLoading: false,
+ addCalibrateLoading: false,
+ form0: {
+ measurementParameter: '', // 璁¢噺鍙傛暟
+ rangeOfMeasurement: '',
+ maxPermissibleError: '',
+ judgmentCriteria: '',
+ createdBy: '',
+ action: '',
+ deviceId: null
+ },
+ form0Rules: {
+ measurementParameter: [
+ { required: true, message: '璇疯緭鍏ヨ閲忓弬鏁�', trigger: 'blur' }
+ ],
+ rangeOfMeasurement: [
+ { required: true, message: '璇疯緭鍏ラ噺绋嬭寖鍥�', trigger: 'blur' }
+ ],
+ maxPermissibleError: [
+ { required: true, message: '璇疯緭鍏ユ渶澶у厑璁歌宸�', trigger: 'blur' }
+ ],
+ judgmentCriteria: [
+ { required: true, message: '璇疯緭鍏ュ垽瀹氭爣鍑�', trigger: 'blur' }
+ ],
+ },
+ dialogVisible0: false,
+ calibrationRecord: {
+ unitOfMeasure: '', // 鏍告煡浜�
+ calibrationDate: '', // 鏍告煡鏃ユ湡
+ nextCalibrationDate: '', // 涓嬫鏍告煡鏃ユ湡
+ calculatingApparatus: '', // 鏍告煡鍣ㄥ叿
+ standardRange: '', // 鏍告煡鏍囧噯閲忕▼
+ calibrationStandardUncertainty: '', // 鏍告煡鏍囧噯涓嶇‘瀹氬害
+ byDocument: '', // 鏍告煡鎸囧涔�
+ certificateSerialNumber: '', // 妫�鏌ユ姤鍛婃寚瀵间功
+ fileName: '', // 闄勪欢
+ status: '', // 鏍告煡鎬荤粨璁�
+ remark: '', // 澶囨敞
+ },
+ formRules: {
+ unitOfMeasure: [{ required: true, message: '璇疯緭鍏ユ牳鏌ヤ汉', trigger: 'blur' }],
+ calibrationDate: [{ required: true, message: '璇烽�夋嫨鏍告煡鏃ユ湡', trigger: 'change' }],
+ nextCalibrationDate: [{ required: true, message: '璇烽�夋嫨涓嬫鏍告煡鏃ユ湡', trigger: 'change' }],
+ calculatingApparatus: [{ required: true, message: '璇疯緭鍏ユ牳鏌ュ櫒鍏�', trigger: 'blur' }],
+ standardRange: [{ required: true, message: '璇疯緭鍏ユ牳鏌ユ爣鍑嗛噺绋�', trigger: 'blur' }],
+ calibrationStandardUncertainty: [{ required: true, message: '璇疯緭鍏ユ牳鏌ユ爣鍑嗕笉纭畾搴�', trigger: 'blur' }],
+ byDocument: [{ required: true, message: '璇疯緭鍏ユ牳鏌ユ寚瀵间功', trigger: 'blur' }],
+ certificateSerialNumber: [{ required: true, message: '璇疯緭鍏ユ鏌ユ姤鍛婃寚瀵间功', trigger: 'blur' }],
+ status: [{ required: true, message: '璇烽�夋嫨鏍告煡鎬荤粨璁�', trigger: 'change' }]
+ },
+ calibrateParams: [],
+ tableData: [],
+ operationType: '',
+ dialogVisible1: false,
+ formData: {
+ person: '',
+ data1: '',
+ name: '',
+ },
+ upLoading: false
+ }
+ },
+ // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
+ computed: {
+ ...mapGetters(["nickName"]),
+ action() {
+ return this.javaApi + this.$api.personnel.saveCNASFile
+ }
+ },
+ mounted() {
+ this.getTableList(this.clickNodeVal.value) // 鑾峰彇璁惧鏍告煡鍒楄〃鏁版嵁
+ },
+ methods: {
+ //鐘舵�佸垽瀹�
+ checkRadio() {
+ let resultList = this.calibrateParams.map(ele => ele.result)
+ if (resultList && resultList.filter(ele => ele == '1no').length > 0) {
+ this.calibrationRecord.status = '1no'
+ } else if (resultList && resultList.filter(ele => ele == '2other').length == resultList.length) {
+ this.calibrationRecord.status = '2other'
+ } else if (resultList && resultList.filter(ele => ele == '0yes').length == resultList.length) {
+ this.calibrationRecord.status = '0yes'
+ }
+ },
+ //涓嬫鏍告煡鏃ユ湡:绂佺敤鍦ㄦ牳鏌ユ棩鏈熷墠鐨勬棩鏈�
+ disabledDate(time) {
+ let selectDate = this.calibrationRecord.calibrationDate
+ if (selectDate) {
+ let oldDate = new Date(selectDate)
+ return time <= oldDate.getTime()
+ }
+ return false
+ },
+ handleSizeChange(val) {
+ this.search.size = val
+ this.getTableList(this.clickNodeVal.value);
+ },
+ handleCurrentChange(val) {
+ this.search.current = val
+ this.getTableList(this.clickNodeVal.value);
+ },
+ // 鑾峰彇璁惧鏍″噯鍙傛暟table淇℃伅
+ async getXmsg() {
+ this.calibrateParamsLoading = true
+ try {
+ await this.$axios.get(this.$api.deviceCheck.selectDeviceMetric + "?deviceId=" + this.clickNodeVal.value + "&type=examine").then(res => {
+ if (res.code == 200) {
+ this.calibrateParams = res.data
+ }
+ this.calibrateParamsLoading = false
+ })
+ } catch (e) {
+ this.calibrateParamsLoading = false
+ }
+ },
+ // 鏍″噯椤圭洰缁存姢
+ calibrationMaintenance() {
+ this.dialogVisible0 = true
+ this.getXmsg();
+ },
+ addCalibrate() {
+ this.$refs['form0'].validate((valid) => {
+ if (valid) {
+ // 淇濆瓨
+ this.calibrateParamsLoading = true
+ this.addCalibrateLoading = true
+ this.form0.deviceId = this.clickNodeVal.value;
+ this.form0.createdBy = this.nickName;
+ this.form0.type = 'examine'
+ this.$axios.post(this.$api.deviceCheck.saveOrUpdateDeviceMetric, this.form0, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code == 200) {
+ this.$message.success('淇濆瓨鎴愬姛')
+ this.$refs['form0'].resetFields()
+ this.getXmsg() // 鍒锋柊璁惧鏍″噯鍙傛暟琛ㄦ牸
+ }
+ this.calibrateParamsLoading = false
+ this.addCalibrateLoading = false
+ })
+ } else {
+ this.addCalibrateLoading = false
+ this.$message.warning('鏈夊繀濉」鏈~');
+ }
+ })
+ },
+ // 鏌ヨ璁惧鏍告煡鍒楄〃
+ getTableList(deviceId) {
+ this.$axios.get(this.$api.deviceCheck.deviceMetricRecordPage + '?deviceId=' + deviceId + "&size=" + this.search.size + "¤t=" + this.search.current + "&type=examine").then(res => {
+ this.tableData = res.data.records
+ this.search.total = res.data.total
+ })
+ },
+ // 鎻愪氦瑕佹坊鍔犵殑璁板綍
+ addRecord() {
+ this.$refs['calibrationRecord'].validate((valid) => {
+ if (valid) {
+ try {
+ if (this.calibrateParams.some(m => m.isCalibration === undefined)) {
+ this.$message.error('璇烽�夋嫨鏄惁鏍告煡')
+ return
+ }
+ if (!this.calibrateParams.every(m => m.result !== undefined)) {
+ this.$message.error('璇烽�夋嫨鍒ゅ畾缁撴灉')
+ return
+ }
+ this.addRecordLoading = true
+ this.calibrationRecord.deviceId = this.clickNodeVal.value;
+ this.calibrationRecord.createUser = this.nickName
+ this.calibrationRecord.deviceMetricsCopyList = this.calibrateParams
+ this.calibrationRecord.type = 'examine'
+ this.$axios.post(this.$api.deviceCheck.addOrUpdateDeviceMetricRecord, this.calibrationRecord, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code == 200) {
+ this.$message.success('娣诲姞鎴愬姛')
+ this.dialogVisible1 = false
+ this.getTableList(this.clickNodeVal.value)
+ }
+ this.addRecordLoading = false
+ })
+ } catch (e) {
+ console.log('addRecord---', e)
+ this.addRecordLoading = false
+ }
+ } else {
+ this.$message.warning('鏈夊繀濉」鏈~');
+ }
+ })
+ },
+ resetcalibrationRecord() {
+ this.$refs.calibrationRecord.resetFields()
+ },
+ // 闄勪欢涓婁紶
+ handleSuccessUp(response, file) {
+ if (response.code == 200) {
+ // 鍦ㄤ繚瀛樿祴鍊兼柊鏂囦欢
+ this.calibrationRecord.fileName = file.name
+ this.calibrationRecord.systemFileName = response.data
+ this.upLoading = false;
+ } else {
+ this.$message.error(response.message)
+ }
+ },
+ 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()
+ },
+ deleteFile() {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + this.form.systemFileName).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ }
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // end
+ handleAttachmentClick(row) {
+ // 妯℃嫙涓嬭浇闄勪欢
+ const imageUrl = this.javaApi + '/img/' + row.systemFileName; // 鍥剧墖 URL
+ file.downloadIamge(imageUrl, row.fileName)
+ // downloadImage(imageUrl, row.fileName);
+ },
+ // 娣诲姞鏍告煡璁板綍
+ add(type) {
+ this.operationType = type
+ this.dialogVisible1 = true
+ this.getXmsg()
+ },
+ // 鏌ョ湅璇︽儏
+ handleViewClick(type, row) {
+ this.$axios.get(this.$api.deviceCheck.showDeviceMetricsCopy + "?id=" + row.id + "&type=examine").then(res => {
+ this.calibrateParams = res.data
+ })
+ this.calibrationRecord = { ...row }
+ this.operationType = type
+ this.dialogVisible1 = true
+ },
+
+ // 琛ㄦ牸鍒犻櫎鎿嶄綔
+ handleDeleteClick(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.$axios.delete(this.$api.deviceCheck.deleteDeviceMetricRecord + "?id=" + row.id).then(res => {
+ this.getTableList(this.clickNodeVal.value) // 鑾峰彇璁惧鏍″噯鍒楄〃鏁版嵁
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ })
+ },
+ handleDelete(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.$axios.delete(this.$api.deviceCheck.deleteDeviceMetrics + "?id=" + row.id).then(res => {
+ this.getXmsg();
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ })
+ }
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ this.getTableList(newVal.value);
+ }
+ },
+ }
+}
+
+function downloadImage(url, name) {
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = name; // 鏂囦欢鍚�
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+}
+</script>
+<style scoped>
+.dialog-content {
+ max-height: 70vh;
+ /* 璁剧疆鏈�澶ч珮搴� */
+ overflow-y: auto;
+ /* 鍚敤鍨傜洿婊氬姩 */
+}
+
+.tables {
+ width: 100%;
+ height: calc(100vh - 230px);
+}
+
+.search {
+ background-color: #fff;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ position: relative;
+}
+
+.search_thing {
+ display: flex;
+ align-items: center;
+ height: 40px;
+}
+
+.search_label {
+ width: 70px;
+ font-size: 14px;
+ text-align: right;
+ margin-right: 10px;
+}
+
+.search_input {
+ width: calc(100% - 110px);
+}
+
+.btns {
+ text-align: right;
+}
+
+h4 {
+ font-weight: 400;
+ font-size: 16px;
+ display: flex;
+ justify-content: space-between;
+ margin: 10px 0;
+}
+
+h4 .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ background: #3A7BFA;
+ margin-right: 4px;
+}
+
+.check {
+ background-color: #fff;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+}
+
+.check_thing {
+ flex: 0 0 calc(20% - 10px);
+ margin-bottom: 20px;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+}
+
+.check_label {
+ font-size: 14px;
+ margin-bottom: 5px;
+}
+
+.check_data .check_input {
+ width: 100%;
+}
+
+.el-table {
+ font-size: 14px;
+ color: #333;
+}
+
+.el-table thead {
+ background-color: #f5f5f5;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/device-overview.vue b/src/views/CNAS/resourceDemand/device/component/device-overview.vue
new file mode 100644
index 0000000..ae3e069
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/device-overview.vue
@@ -0,0 +1,405 @@
+<!-- 璁惧鎬昏 -->
+<style scoped>
+.title {
+ height: 60px;
+ line-height: 60px;
+}
+
+.search {
+ background-color: #fff;
+ height: 50px;
+ display: flex;
+ align-items: center;
+}
+
+.search_thing {
+ width: 350px;
+ display: flex;
+ align-items: center;
+}
+
+.search_label {
+ width: 110px;
+ font-size: 14px;
+ text-align: left;
+}
+
+.search_input {
+ width: calc(100% - 110px);
+}
+
+.table {
+ background-color: #fff;
+ width: calc(100% - 40px);
+ height: calc(100vh - 17em);
+ /* padding: 10px; */
+ overflow-y: auto;
+}
+
+.card {
+ list-style-type: none;
+ display: grid;
+ grid-template-columns: repeat(auto-fit, 380px);
+ justify-content: start;
+ grid-gap: 16px;
+ min-height: 300px;
+}
+
+.card li {
+ width: 380px;
+ height: 165px;
+ border-radius: 8px 8px 8px 8px;
+ border: 1px solid #EEEEEE;
+ margin: 0 !important;
+ display: flex;
+ align-items: center;
+ box-sizing: border-box;
+ padding: 16px;
+ font-size: 14px;
+ color: #666666;
+ position: relative;
+ overflow: hidden;
+}
+
+.card li .img {
+ width: 114px;
+ height: 114px;
+ border-radius: 16px;
+ margin-right: 24px;
+}
+
+.list-left .list-left-info {
+ line-height: 36px;
+ display: flex;
+}
+
+.text-truncate {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap
+}
+
+.circles {
+ position: absolute;
+ width: 70px;
+ height: 70px;
+ right: 0;
+ top: 0;
+ z-index: 0;
+}
+
+.circles .circle {
+ border-radius: 50%;
+ opacity: 0.2;
+}
+
+.circle0,
+.circle1,
+.circle2 {
+ width: 60px;
+ height: 60px;
+ position: absolute;
+}
+
+.circle3 {
+ width: 16px;
+ height: 16px;
+ position: absolute;
+}
+
+.circle0 {
+ bottom: 6px;
+ left: 0;
+}
+
+.circle1 {
+ bottom: 0;
+ right: -30px;
+}
+
+.circle2 {
+ left: 0;
+ top: -30px;
+}
+
+.circle3 {
+ top: 0;
+ right: 0;
+}
+
+.success .circle {
+ background: #34BD66;
+}
+
+.danger .circle {
+ background: #FF3838;
+}
+
+.warning .circle {
+ background: #FBB247;
+}
+.info .circle {
+ background: #909399;
+}
+</style>
+
+<template>
+ <div class="role_manage">
+ <div>
+ <el-form :model="entity" inline label-position="right" label-width="80px">
+ <el-form-item label="鐘舵��:">
+ <el-select v-model="entity.deviceStatus" placeholder="鍏ㄩ儴" size="small" clearable>
+ <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="璁惧鍚嶇О:">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="entity.deviceName"></el-input>
+ </el-form-item>
+ <el-form-item>
+ <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+ </el-form-item>
+ <el-form-item>
+ <el-button size="small" type="primary"
+ @click="currentPage = 1, keyMap = {}, list = [], finishLoding = false, refreshTable()">鏌� 璇�</el-button>
+ </el-form-item>
+ </el-form>
+ <!-- <div class="search_thing">
+ <div class="search_label">鐘舵�侊細</div>
+ <el-select v-model="entity.deviceStatus" placeholder="鍏ㄩ儴" size="small" clearable>
+ <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </div>
+ <div class="search_thing">
+ <div class="search_label">璁惧鍚嶇О锛�</div>
+ <div class="search_input">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable
+ v-model="entity.deviceName"></el-input>
+ </div>
+ </div> -->
+
+
+ <!-- <div class="search_thing" style="padding-left: 30px;">
+ </div> -->
+ </div>
+ <div class="table" v-loading="loading">
+ <scroll-pagination @load="refreshTable()" :finishLoding="finishLoding" :list="list"
+ v-if="list.length > 0 || loading">
+ <ul class="card">
+ <li v-for="(m, i) in list" :key="i">
+ <el-image class="img" :src="javaApi + '/img/' + m.imageUpload">
+ <div slot="error" class="image-error" style="width: 112px;
+ height: 112px;
+ border-radius: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid #EEEEEE;">
+ <i class="el-icon-picture-outline" style="font-size:30px;color:#666666;"></i>
+ </div>
+ </el-image>
+ <div class="list-left">
+ <div class="list-left-info">
+ <span class="label">璁惧鍚嶇О锛�</span>
+ <span style="color:#3A7BFA;
+ font-size: 16px;
+ display: inline-block;
+ width: 129px;
+ word-break: break-all;" class="text-truncate" :title="m.deviceName">{{ m.deviceName ? m.deviceName : '鏃�' }}</span>
+ </div>
+ <div class="list-left-info">
+ <span class="label">瑙勬牸鍨嬪彿锛�</span>
+ <span style="color:#333333;font-size: 16px;">{{ m.specificationModel ? m.specificationModel : '鏃�'
+ }}</span>
+ </div>
+ <div class="list-left-info">
+ <span class="label">鐘舵�侊細</span>
+ <el-tag :type="m.type" v-if="m.deviceStatusName">{{ m.deviceStatusName }}</el-tag>
+ <span v-else style="color:#333333;font-size: 16px;">鏃�</span>
+ </div>
+ </div>
+ <div class="circles" :class="m.type">
+ <div class="circle0 circle"></div>
+ <div class="circle1 circle"></div>
+ <div class="circle2 circle"></div>
+ <div class="circle3 circle"></div>
+ </div>
+ </li>
+ </ul>
+ </scroll-pagination>
+ <div v-if="list.length < 1 && !loading" style="color:#909399;font-size:14px;text-align: center;margin-top:200px">
+ 鏆傛棤鏁版嵁
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import ScrollPagination from '@/components/index/scroll-paging.vue'
+import {selectDeviceParameter} from "@/api/cnas/resourceDemand/device";
+export default {
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ components: {
+ ScrollPagination
+ },
+ data() {
+ return {
+ entity: {
+ deviceStatus: null,
+ deviceName: null,
+ orderBy: { field: "id", order: "asc" }
+ },
+ options: [],
+ list: [],
+ currentPage: 1, // 褰撳墠椤�
+ pageSize: 16, // 涓�椤�16鏉�
+ total: '',
+ loading: true, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue
+ finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡
+ keyMap: {},
+ laboratoryNameIsNull: false,
+ }
+ },
+ created() {
+ this.selectEnumByCategory()
+ this.keyMap = {};
+ this.currentPage = 1;
+ this.list = [];
+ this.clickSidebar(this.clickNodeVal)
+ },
+ methods: {
+ refreshTable() {
+ const key = `_${this.currentPage}`
+ const value = this.keyMap[key]
+ // 濡傛灉value瀛樺湪锛岃〃绀虹紦瀛樻湁鍊硷紝閭d箞闃绘璇锋眰
+ if (value) {
+ return
+ }
+ // value涓嶅瓨鍦紝琛ㄧず绗竴娆¤姹�,璁剧疆鍗犱綅
+ this.keyMap[key] = 'temp'
+ if (this.currentPage == 1) {
+ this.loading = true
+ }
+ if(this.list.length==0){
+ this.finishLoding = false;
+ }
+ selectDeviceParameter({
+ laboratoryNameIsNull: this.laboratoryNameIsNull,
+ current: this.currentPage,
+ size: this.pageSize,
+ ...this.entity
+ }).then(res => {
+ if (res.code == 200) {
+ this.total = res.data.body.total
+ let list = res.data.body.records.map(m => {
+ switch (m.deviceStatus) {
+ case 0:
+ // 姝e父
+ m.type = 'success'
+ break;
+ case 1:
+ // 缁翠慨
+ m.type = 'warning'
+ break;
+ case 2:
+ // 鍋滅敤
+ m.type = 'danger'
+ break;
+ case 3:
+ // 鎶ュ簾
+ m.type = 'info'
+ break;
+ }
+ this.options.forEach(j => {
+ if (m.deviceStatus == j.value) {
+ m.deviceStatusName = j.label
+ }
+ })
+ return m;
+ })
+ if (list.length == 0) {
+ this.finishLoding = true;
+ } else {
+ if (list.length < this.pageSize) {
+ this.finishLoding = true;
+ }
+ this.list = this.list.concat(list)
+ if (this.total == this.list.length) {
+ this.finishLoding = true;
+ }
+ this.currentPage++;
+ }
+ }
+ this.loading = false
+ }).catch(err => {
+ this.loading = false
+ })
+ },
+ refresh() {
+ this.keyMap = {};
+ this.currentPage = 1;
+ this.list = [];
+ this.finishLoding = false;
+ this.entity = {
+ deviceStatus: null,
+ deviceName: null,
+ orderBy: { field: "id", order: "asc" }
+ };
+ this.refreshTable()
+ },
+ // 鑾峰彇瀛楀吀
+ selectEnumByCategory() {
+ // 璁惧鐘舵��
+ this.getDicts("device_status").then((response) => {
+ this.options = this.dictToValue(response.data);
+ });
+ },
+ // 鐐瑰嚮渚ц竟鏍忓埛鏂�
+ clickSidebar(clickNodeVal) {
+ this.laboratoryNameIsNull = false
+ // 鏄惁瀛樺湪value锛屽瓨鍦╲alue浠h〃涓轰笁绾�
+ if (!clickNodeVal.value) {
+ this.finishLoding = false;
+ this.keyMap = {};
+ this.currentPage = 1;
+ this.list = [];
+ this.entity.laboratoryName = null
+ this.entity.storagePoint = null
+ // 绛変簬1浠h〃涓烘爲鐨勪竴绾э紝label涓洪儴闂�
+ if (clickNodeVal.label == '鍏朵粬') {
+ this.laboratoryNameIsNull = true
+ this.refreshTable();
+ return
+ }
+ if (clickNodeVal.level == 1) {
+ this.entity.laboratoryName = clickNodeVal.label
+ // 绛変簬浜岀骇銆俵abel涓哄瓨鍌ㄥ湴鐐�
+ } else if (clickNodeVal.level == 2) {
+ // 鍏朵粬琛ㄧず娌℃湁閰嶇疆瀹為獙瀹わ紝鍙厤缃簡鍦扮偣
+ if (clickNodeVal.parent.label == '鍏朵粬') {
+ this.laboratoryNameIsNull = true
+ } else {
+ this.entity.laboratoryName = clickNodeVal.parent.label
+ }
+ this.entity.storagePoint = clickNodeVal.label
+ }
+ this.refreshTable();
+ }
+ }
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ this.clickSidebar(newVal)
+ }
+ }
+}
+</script>
diff --git a/src/views/CNAS/resourceDemand/device/component/equipmentAcceptance.vue b/src/views/CNAS/resourceDemand/device/component/equipmentAcceptance.vue
new file mode 100644
index 0000000..1bea84b
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/equipmentAcceptance.vue
@@ -0,0 +1,317 @@
+<template>
+ <div>
+ <div>
+ <div style="margin: 10px 0;text-align: right">
+ <el-button size="small" type="primary" @click="handleForm('add')">鏂板</el-button>
+ </div>
+ <div>
+ <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData"
+ height="calc(100vh - 18em)" style="width: 100% ;">
+ <!-- 琛ㄦ牸鍒� -->
+ <el-table-column align="center" header-align="center" label="搴忓彿" prop="prop" type="index"
+ width="70"></el-table-column>
+ <el-table-column label="鍒拌揣鏃ユ湡" min-width="150" prop="arrivalDate"></el-table-column>
+ <el-table-column label="閲戦" min-width="100" prop="goldAmount"></el-table-column>
+ <el-table-column label="缁翠慨鍗曚綅" min-width="150" prop="maintenanceunit"></el-table-column>
+ <!-- 鎿嶄綔鎸夐挳 -->
+ <el-table-column align="center" label="鎿嶄綔" min-width="180">
+ <template slot-scope="scope">
+ <el-button size="small" type="text" @click="handleForm('edit', scope.row.acceptanceId)">缂栬緫</el-button>
+ <el-button size="small" type="text" @click="handleForm('view', scope.row.acceptanceId)">鏌ョ湅</el-button>
+ <el-button size="small" type="text" @click="record(scope.row)">闄勪欢</el-button>
+ <el-button size="small" type="text" @click="handleDownOne(scope.row.acceptanceId)">瀵煎嚭</el-button>
+ <el-button size="small" style="color: #f56c6c" type="text"
+ @click="deleteFun(scope.row.acceptanceId)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]"
+ :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper"
+ @size-change="handleSizeChange1" @current-change="handleCurrentChange1">
+ </el-pagination>
+ </div>
+ </div>
+ <acceptance-form v-if="applicationForm" ref="applicationForm" @closeDialog="closeDialog"></acceptance-form>
+ <!--涓婁紶鎶ュ憡-->
+ <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="{ acceptanceId: acceptanceId }" :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="pagination1">
+ </limsTable>
+ </div>
+ </el-dialog>
+ <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" top="5vh" width="800px">
+ <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="fileUrl"
+ style="height: 90vh;overflow-y: auto;" />
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import AcceptanceForm from "./acceptanceForm.vue";
+import limsTable from "@/components/Table/lims-table.vue";
+import filePreview from "@/components/Preview/filePreview.vue";
+import {
+ pageDeviceAcceptance,
+ getDeviceAcceptanceFileList,
+ delDeviceAcceptanceFileList,
+ exportDeviceAcceptance,
+ delDeviceAcceptance,
+} from '@/api/cnas/resourceDemand/device.js'
+export default {
+ name: "equipment-acceptance",
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { filePreview, limsTable, AcceptanceForm },
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ }
+ }
+ },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ pagination1: {
+ size: 10,
+ current: 1,
+ total: 0,
+ },
+ yearTableDetailDataLoading: false,
+ yearTableDetailData: [],
+ applicationForm: false,
+ filesDialogVisible: false,
+ 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: [],
+ tableLoading: false,
+ acceptanceId: '', // 涓婁紶闄勪欢褰撳墠琛岀殑id
+ currentInfo: {},
+ lookDialogVisible: false,
+ fileUrl: ''
+ }
+ },
+ mounted() {
+ this.getYearTableDetailData(this.clickNodeVal.value)
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ
+ getYearTableDetailData(deviceId) {
+ this.yearTableDetailDataLoading = true
+ pageDeviceAcceptance({
+ current: this.pagination1.current,
+ size: this.pagination1.size,
+ deviceId: deviceId,
+ }).then(res => {
+ if (res.code == 200) {
+ this.yearTableDetailData = res.data.records
+ this.pagination1.total = res.data.total
+ }
+ this.yearTableDetailDataLoading = false
+ }).catch(err => {
+ this.yearTableDetailDataLoading = false
+ })
+ },
+ handleForm(type, id) {
+ this.applicationForm = true
+ this.$nextTick(() => {
+ this.$refs.applicationForm.openDialog(type, id, this.clickNodeVal.value)
+ })
+ },
+ closeDialog() {
+ this.applicationForm = false
+ this.getYearTableDetailData(this.clickNodeVal.value)
+ },
+ // 鎵撳紑鎶ュ憡寮规
+ record(row) {
+ this.filesDialogVisible = true
+ this.acceptanceId = row.acceptanceId
+ this.searchTableList()
+ },
+ // 鏌ヨ闄勪欢鍒楄〃
+ searchTableList() {
+ this.tableLoading = true
+ getDeviceAcceptanceFileList({ acceptanceId: this.acceptanceId }).then(res => {
+ this.tableLoading = false
+ this.tableData = res.data
+ }).catch(err => {
+ this.tableLoading = false
+ console.log('err---', err);
+ })
+ },
+ // 鏌ョ湅鏂囦欢
+ handleLook(row) {
+ this.currentInfo = row
+ this.lookDialogVisible = true
+ const state = /\.(jpg|jpeg|png|gif)$/i.test(this.currentInfo.fileUrl)
+ if (state) {
+ this.fileUrl = this.javaApi + '/img/' + this.currentInfo.fileUrl
+ } else {
+ this.fileUrl = this.javaApi + '/word/' + this.currentInfo.fileUrl
+ }
+ },
+ // 涓嬭浇
+ upload(row) {
+ this.$download.saveAs(row.fileUrl, row.fileName)
+ },
+ // 鍒犻櫎
+ delete(row) {
+ this.$confirm('姝ゆ搷浣滃皢鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.tableLoading = true
+ delDeviceAcceptanceFileList({ acceptanceFileId: row.acceptanceFileId }).then(res => {
+ this.tableLoading = false
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.searchTableList()
+ }).catch(err => {
+ this.tableLoading = false
+ console.log('err---', err);
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 涓婁紶闄勪欢
+ 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()
+ }
+ },
+ closeFilesLook() {
+ this.filesDialogVisible = false
+ },
+ // 鍒嗛〉
+ handleSizeChange1(val) {
+ this.pagination1.size = val
+ this.getYearTableDetailData(this.clickNodeVal.value)
+ },
+ // 鍒嗛〉
+ handleCurrentChange1(val) {
+ this.pagination1.current = val
+ this.getYearTableDetailData(this.clickNodeVal.value)
+ },
+ // 瀵煎嚭
+ handleDownOne(id) {
+ this.outLoading = true
+ exportDeviceAcceptance({ acceptanceId: id }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '璁惧楠屾敹.doc')
+ })
+ },
+ // 鍒犻櫎
+ deleteFun(id) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ delDeviceAcceptance({ acceptanceId: id }).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛锛�');
+ this.getYearTableDetailData(this.clickNodeVal.value);
+ });
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ this.getYearTableDetailData(newVal.value);
+ }
+ },
+ },
+ computed: {
+ fileAction() {
+ return this.javaApi + '/deviceAcceptance/uploadDeviceAcceptanceFile'
+
+ }
+ },
+}
+</script>
+
+<style scoped>
+.title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.title-search {
+ display: flex;
+ align-items: center;
+ margin: 10px 0;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/fault.vue b/src/views/CNAS/resourceDemand/device/component/fault.vue
new file mode 100644
index 0000000..a229fa7
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/fault.vue
@@ -0,0 +1,703 @@
+<!-- 璁惧鏁呴殰 -->
+<template>
+ <div>
+ <div class="search">
+ <div class="search_thing">
+ <div class="search_label">娴佺▼缂栧彿锛�</div>
+ <div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="search.processNumber" style="width: 100%;"
+ @keyup.enter.native="getTableList(clickNodeVal.value)">
+ </el-input>
+ </div>
+ </div>
+ <div class="search_thing" style="padding-left: 30px;">
+ <el-button size="small" @click="resetSearch">閲� 缃�</el-button>
+ <el-button size="small" type="primary" @click="getTableList(clickNodeVal.value)">鏌� 璇�</el-button>
+ </div>
+ <div class="btns">
+ <el-button size="small" type="primary" @click="dialogVisible = true, addRecode()">鏂板缓</el-button>
+ <el-button size="small" type="primary" @click="handleDown" :loading="outLoading">瀵煎嚭</el-button>
+ </div>
+ </div>
+ <div>
+ <div class="tables" style="margin-top: 16px;">
+ <el-table :data="faultParam" style="width: 100%" height="calc(100vh - 20em)">
+ <!-- 琛ㄦ牸鍒� -->
+ <el-table-column header-align="center" align="center" width="70" prop="prop" label="搴忓彿"
+ type="index"></el-table-column>
+ <el-table-column prop="processNumber" label="娴佺▼缂栧彿" min-width="180"></el-table-column>
+ <el-table-column prop="deviceName" label="璁惧鍚嶇О" min-width="150"></el-table-column>
+ <el-table-column prop="managementNumber" label="缁熶竴缂栧彿" min-width="150"></el-table-column>
+ <el-table-column prop="faultSituation" label="鏁呴殰鎯呭喌" min-width="130"></el-table-column>
+ <el-table-column prop="submitPerson" label="鎻愪氦浜�" min-width="130"></el-table-column>
+ <el-table-column prop="createTime" label="鎻愪氦鏃ユ湡" min-width="150"></el-table-column>
+ <el-table-column prop="currentState" label="褰撳墠鐘舵��" min-width="130"></el-table-column>
+ <el-table-column prop="currentResponsible" label="褰撳墠璐d换浜�" width="180"></el-table-column>
+ <!-- 鎿嶄綔鎸夐挳 -->
+ <el-table-column label="鎿嶄綔" fixed="right" min-width="150">
+ <template slot-scope="scope">
+ <el-button size="small" type="text" @click="showDetailsDialog(scope.row)">鏌ョ湅璇︽儏</el-button>
+ <el-button type="text" size="small" @click="handleDeleteClick(scope.$index, scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="1"
+ style="margin-right: 5%;" :page-sizes="[10, 20, 30, 50, 100]" :page-size="search.size"
+ layout="->,total, sizes, prev, pager, next, jumper" :total="search.total">
+ </el-pagination>
+ </div>
+ </div>
+ <el-dialog title="鏂板缁翠慨璁板綍" top="5vh" :visible.sync="dialogVisible" width="60%" @open="openRecordAcceptance"
+ :close-on-click-modal="false" :close-on-press-escape="false">
+ <el-steps :active="currentStep" finish-status="success" align-center>
+ <el-step v-for="(v, i) in steps" style="cursor:pointer" :title="v" :key="i"
+ @click.native="choiceStep(i)"></el-step>
+ </el-steps>
+ <el-form ref="form" :model="form" label-position="right" label-width="120px">
+ <!-- 鎻愪氦 -->
+ <div v-show="currentStepClick == 0">
+ <el-card style="margin-top: 1em;">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="娴佺▼缂栧彿:">
+ <el-input v-model="form.processNumber" size="small" disabled></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁惧鍚嶇О:">
+ <el-input v-model="form.deviceName" size="small" disabled></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瑙勬牸鍨嬪彿:">
+ <el-input v-model="form.specificationModel" size="small" disabled></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁惧缂栧彿:">
+ <el-input v-model="form.managementNumber" size="small" disabled></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍑嗙‘搴﹂噺鍊�:" prop="measureOfAccuracy"
+ :rules="[{ required: currentStep === 0, message: '璇疯緭鍏ュ噯纭害閲忓��', trigger: 'blur' }]">
+ <el-input v-model="form.measureOfAccuracy" size="small" :disabled="currentStep !== 0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏁呴殰鏃ユ湡:" prop="faultDate">
+ <el-date-picker v-model="form.faultDate" type="date" placeholder="閫夋嫨鏃ユ湡" size="small"
+ format="yyyy-MM-dd" style="width: 100%" value-format="yyyy-MM-dd" :disabled="currentStep !== 0">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瑕佹眰淇鏃ユ湡:" prop="requestRepairDate">
+ <el-date-picker v-model="form.requestRepairDate" :picker-options="{ disabledDate: this.disabledDate }"
+ type="date" placeholder="閫夋嫨鏃ユ湡" size="small" format="yyyy-MM-dd" style="width: 100%"
+ value-format="yyyy-MM-dd" :disabled="currentStep !== 0">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鏁呴殰鎯呭喌:" prop="faultSituation"
+ :rules="[{ required: currentStep === 0, message: '璇疯緭鍏ユ晠闅滄儏鍐�', trigger: 'blur' }]">
+ <el-input v-model="form.faultSituation" type="textarea" size="small"
+ :disabled="currentStep !== 0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鐩稿叧闄勪欢:">
+ <el-input v-model="form.fileName" :disabled="true" size="small" style="width: 80%;">
+ <el-button slot="append" icon="el-icon-delete-solid" @click="deleteFile"
+ :disabled="currentStep !== 0"></el-button>
+ </el-input>
+ <el-upload ref="upload" style="float: right;" :action="action" :show-file-list="false"
+ :on-success="handleSuccess">
+ <el-button style="position: relative;top: -4px;" class="uploadFile" slot="trigger" size="small"
+ type="primary" :disabled="currentStep !== 0">闄勪欢涓婁紶
+ </el-button>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬬幆鑺傝礋璐d汉:" prop="submitNextPesponsible"
+ :rules="[{ required: currentStep === 0, message: '璇疯緭鍏ヤ笅鐜妭璐熻矗浜�', trigger: 'change' }]">
+ <el-select v-model="form.submitNextPesponsible" placeholder="璇烽�夋嫨涓嬬幆鑺傝礋璐d汉" size="small"
+ style="width: 100%" :disabled="currentStep !== 0">
+ <el-option v-for="(v, i) in users" :label="v.name" :value="v.name" :key="i"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.submitOperatingPersonnel }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.submitDate }}
+ </el-col>
+ </el-row>
+ </div>
+ <!-- 璁惧绠$悊鍛樻剰瑙� -->
+ <div v-show="currentStepClick == 1">
+ <el-card style="margin-top: 1em; height: 45vh; overflow-y: scroll;">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="缁翠慨鏂瑰紡鍙婅垂鐢�:" prop="methodCost"
+ :rules="[{ required: currentStep === 1, message: '璇疯緭鍏ョ淮淇柟寮忓強璐圭敤', trigger: 'blur' }]">
+ <el-input v-model="form.methodCost" type="textarea" size="small"
+ :disabled="currentStep !== 1"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳鎰忚:" prop="adminAuditOption"
+ :rules="[{ required: currentStep === 1, message: '璇疯緭鍏ュ鏍告剰瑙�', trigger: 'blur' }]">
+ <el-input v-model="form.adminAuditOption" type="textarea" size="small"
+ :disabled="currentStep !== 1"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬬幆鑺傝礋璐d汉:" prop="adminNextPesponsible"
+ :rules="[{ required: currentStep === 1, message: '璇疯緭鍏ヤ笅鐜妭璐熻矗浜�', trigger: 'change' }]">
+ <el-select v-model="form.adminNextPesponsible" placeholder="璇烽�夋嫨涓嬬幆鑺傝礋璐d汉" size="small"
+ style="width: 100%" :disabled="currentStep !== 1">
+ <el-option v-for="(v, i) in users" :label="v.name" :value="v.name" :key="i"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.adminOperatingPersonnel }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.adminDate }}
+ </el-col>
+ </el-row>
+ </div>
+ <!-- 鎶�鏈礋璐d汉鎰忚 -->
+ <div v-show="currentStepClick == 2">
+ <el-card style="margin-top: 1em; height: 45vh; overflow-y: scroll;">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳鎰忚:" prop="technicalAuditOption"
+ :rules="[{ required: currentStep === 2, message: '璇疯緭鍏ュ鏍告剰瑙�', trigger: 'blur' }]">
+ <el-input v-model="form.technicalAuditOption" type="textarea" size="small"
+ :disabled="currentStep !== 2"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬬幆鑺傝礋璐d汉:" prop="technicalNextPesponsible"
+ :rules="[{ required: currentStep === 2, message: '璇疯緭鍏ヤ笅鐜妭璐熻矗浜�', trigger: 'change' }]">
+ <el-select v-model="form.technicalNextPesponsible" placeholder="璇烽�夋嫨涓嬬幆鑺傝礋璐d汉" size="small"
+ style="width: 100%" :disabled="currentStep !== 2">
+ <el-option v-for="(v, i) in users" :label="v.name" :value="v.name" :key="i"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.technicalOperatingPersonnel }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.technicalDate }}
+ </el-col>
+ </el-row>
+ </div>
+ <!-- 缁翠慨鎯呭喌璁板綍 -->
+ <div v-show="currentStepClick == 3">
+ <el-card style="margin-top: 1em; height: 45vh; overflow-y: scroll;">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="缁翠慨鎯呭喌:" prop="maintainSituation"
+ :rules="[{ required: currentStep === 3, message: '璇疯緭鍏ョ淮淇儏鍐�', trigger: 'blur' }]">
+ <el-input v-model="form.maintainSituation" type="textarea" size="small"
+ :disabled="currentStep !== 3"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓嬬幆鑺傝礋璐d汉:" prop="maintainNextPesponsible"
+ :rules="[{ required: currentStep === 3, message: '璇疯緭鍏ヤ笅鐜妭璐熻矗浜�', trigger: 'change' }]">
+ <el-select v-model="form.maintainNextPesponsible" placeholder="璇烽�夋嫨涓嬬幆鑺傝礋璐d汉" size="small"
+ style="width: 100%" :disabled="currentStep !== 3">
+ <el-option v-for="(v, i) in users" :label="v.name" :value="v.name" :key="i"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.maintainOperatingPersonnel }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.maintainDate }}
+ </el-col>
+ </el-row>
+ </div>
+ <!-- 缁翠慨鍚庣殑纭 -->
+ <div v-show="currentStepClick == 4">
+ <el-card style="margin-top: 1em; height: 45vh; overflow-y: scroll;">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="楠屾敹銆佺‘璁ゃ�佹牎鍑嗘儏鍐�:" prop="checkCalSituation" label-width="200"
+ :rules="[{ required: currentStep === 4, message: '璇疯緭鍏ラ獙鏀躲�佺‘璁ゃ�佹牎鍑嗘儏鍐�', trigger: 'blur' }]">
+ <el-input v-model="form.checkCalSituation" type="textarea" size="small" style="width: 100%"
+ :disabled="currentStep !== 4"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.afterMaintenanceOperatingPersonnel }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.afterMaintenanceDate }}
+ </el-col>
+ </el-row>
+ </div>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="submitForm('3reject')" v-if="currentStep !== 0 && currentStep !== 5"
+ :loading="sumbitLoading1">椹冲洖</el-button>
+ <el-button @click="submitForm('2save')" v-if="currentStep === 0" :loading="sumbitLoading2">淇濆瓨</el-button>
+ <el-button type="primary" v-if="currentStep !== 5" @click="submitForm('1submit')" :loading="sumbitLoading3">
+ {{ currentStep === 0 ? '鎻愪氦' : '閫氳繃' }}
+ </el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import { dateFormat } from '@/utils/date'
+import { mapGetters } from "vuex";
+export default {
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ }
+ }
+ },
+ data() {
+ return {
+ search: {
+ size: 20,
+ current: 1,
+ total: 0,
+ processNumber: ''
+ },
+ users: [],
+ currentStep: 0,
+ currentStepClick: 0,
+ steps: ['鎻愪氦', '璁惧绠$悊鍛樻剰瑙�', '鎶�鏈礋璐d汉鎰忚', '缁翠慨鎯呭喌璁板綍', '缁翠慨鍚庣殑纭'],
+ outLoading: false,
+ form: {},
+ faultParam: [],
+ dialogVisible: false,
+ sumbitLoading1: false,
+ sumbitLoading2: false,
+ sumbitLoading3: false,
+ }
+ },
+ computed: {
+ ...mapGetters(["nickName"]),
+ action() {
+ return this.javaApi + this.$api.personnel.saveCNASFile
+ }
+ },
+ mounted() {
+ this.getTableList(this.clickNodeVal.value)
+ },
+ methods: {
+ //瑕佹眰淇鏃ユ湡:绂佺敤鍦ㄦ晠闅滄棩鏈熷墠鐨勬棩鏈�
+ disabledDate(time) {
+ let selectDate = this.form.faultDate
+ if (selectDate) {
+ let selectTime = new Date(selectDate).getTime() - 28800000
+ return time < selectTime
+ }
+ return false
+ },
+ //鎻愪氦琛ㄥ崟
+ async submitForm(saveState) {
+ let currentStepAction;
+ // 璁剧疆璇ユ搷浣滃垽鏂槸鍚︿负鎻愪氦锛屼繚瀛橈紝椹冲洖锛岄�氳繃 寮�鍚痩oding
+ switch (saveState) {
+ // 鎻愪氦锛岄�氳繃
+ case '1submit':
+ currentStepAction = this.currentStep + 1
+ this.sumbitLoading1 = true
+ break
+ // 淇濆瓨
+ case '2save':
+ currentStepAction = this.currentStep
+ this.sumbitLoading2 = true
+ break
+ // 椹冲洖
+ case '3reject':
+ currentStepAction = this.currentStep - 1
+ this.sumbitLoading3 = true
+ break
+ default:
+ break
+ }
+ this.$refs.form.validate((valid) => {
+ if (valid === true || saveState !== '1submit') {
+ // 缁欏綋鍓嶇幆鑺傝缃垱寤轰汉涓庢椂闂�
+ const dateTime = dateFormat(new Date())
+ // 鑾峰彇褰撳墠鐜妭鎿嶄綔浜轰笌鏃ユ湡
+ switch (this.currentStep) {
+ case 0:
+ this.form.submitUser = this.nickName
+ this.form.submitOperatingPersonnel = this.nickName
+ this.form.submitDate = dateTime
+ break
+ case 1:
+ this.form.adminOperatingPersonnel = this.nickName
+ this.form.adminDate = dateTime
+ break
+ case 2:
+ this.form.technicalOperatingPersonnel = this.nickName
+ this.form.technicalDate = dateTime
+ break
+ case 3:
+ this.form.maintainOperatingPersonnel = this.nickName
+ this.form.maintainDate = dateTime
+ break
+ case 4:
+ this.form.afterMaintenanceOperatingPersonnel = this.nickName
+ this.form.afterMaintenanceDate = dateTime
+ break
+ default:
+ break
+ }
+ // 鑾峰彇褰撳墠鐜妭璐熻矗浜�
+ switch (saveState === '3reject' ? this.currentStep - 1 : this.currentStep) {
+ case 0:
+ this.form.currentResponsible = this.form.submitOperatingPersonnel
+ break
+ case 1:
+ this.form.currentResponsible = this.form.departmentOperatingPersonnel
+ break
+ case 2:
+ this.form.currentResponsible = this.form.measuringRoomOperatingPersonnel
+ break
+ case 3:
+ this.form.currentResponsible = this.form.approvalOperatingPersonnel
+ break
+ default:
+ break
+ }
+ // 鑾峰彇褰撳墠鐘舵��
+ this.form.currentState = currentStepAction === 5 ? '鍏抽棴' : this.steps[currentStepAction]
+ this.form.deviceId = this.clickNodeVal.value
+ this.$axios.post(this.$api.deviceCheck.addOrUpdateDeviceFaultOne, this.form, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鎻愪氦鎴愬姛')
+ this.getTableList(this.clickNodeVal.value)
+ this.dialogVisible = false
+ }
+ this.closeLoading()
+ })
+ } else {
+ let step = this.steps[this.currentStep]
+ this.$message.warning(step + ' 娴佺▼涓湁蹇呭~椤规湭濉紒');
+ this.closeLoading()
+ }
+ });
+ },
+ closeLoading() {
+ this.sumbitLoading1 = false
+ this.sumbitLoading2 = false
+ this.sumbitLoading3 = false
+ },
+ openRecordAcceptance() {
+ // 鑾峰彇璁惧鍩虹淇℃伅
+ this.$axios.get(this.$api.deviceScope.selectDeviceByCode + '?id=' + this.clickNodeVal.value).then(res => {
+ this.form.deviceName = res.data.deviceName
+ this.form.manufacturer = res.data.manufacturer
+ this.form.specificationModel = res.data.specificationModel
+ this.form.managementNumber = res.data.managementNumber
+ });
+ // 鑾峰彇璐熻矗浜轰俊鎭�
+ this.getUserList()
+ },
+ // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
+ getUserList() {
+ this.$axios.get(this.$api.deviceScope.selectUserList).then(res => {
+ if (res.code == 200) {
+ this.users = res.data
+ }
+ })
+ },
+ handleSizeChange(val) {
+ this.search.size = val
+ this.getTableList(this.clickNodeVal.value);
+ },
+ handleCurrentChange(val) {
+ this.search.current = val
+ this.getTableList(this.clickNodeVal.value);
+ },
+ deleteFile() {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + this.form.systemFileName).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ }
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ choiceStep(index) {
+ this.currentStepClick = index
+ },
+ //鏂囨。
+ handleSuccess(response, file, fileList) {
+ if (response.code == 200) {
+ this.form.fileName = response.data
+ this.$message.success('涓婁紶鎴愬姛')
+ } else {
+ this.$message.error(response.message)
+ }
+ },
+ onError(error, file, fileList) {
+ // 鏂囦欢涓婁紶澶辫触鏃剁殑澶勭悊閫昏緫
+ this.$message.error('涓婁紶澶辫触')
+ this.$refs.upload.clearFiles()
+ },
+ beforeUpload(file) {
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+ this.$refs.upload.clearFiles()
+ return false;
+ } else {
+ return true;
+ }
+ },
+ resetSearch() {
+ this.search = {
+ size: 20,
+ current: 1,
+ total: 0,
+ processNumber: '',
+ }
+ this.getTableList(this.clickNodeVal.value);
+ },
+ //鑾峰彇鎵�鏈変俊鎭�
+ getTableList(deviceId) {
+ this.$axios.get(this.$api.deviceCheck.deviceFaultOnePage + '?deviceId=' + deviceId + "&size=" + this.search.size + "¤t=" + this.search.current + "&processNumber=" + this.search.processNumber).then(res => {
+ if (res.code == 200) {
+ this.faultParam = res.data.records
+ this.search.total = res.data.total
+ }
+ })
+ },
+ //瀵煎嚭
+ handleDown() {
+ this.outLoading = true
+ this.$axios.post(this.$api.deviceCheck.exportRewardAndPunishmentRecords, {
+ deviceId: this.clickNodeVal.value
+ }, { responseType: "blob" }).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 = '璁惧鏁呴殰琛�.xlsx';
+ link.click();
+ }).finally(() => {
+ this.outLoading = false
+ })
+ },
+ selectAllByOne(row) {
+ this.dialogVisible = true;
+ this.formData = this.HaveJson(row);
+ },
+ //娣诲姞璁板綍鎸夐挳
+ addRecode() {
+ this.currentStep = 0;
+ this.currentStepClick = 0;
+ },
+ //鏌ョ湅璇︽儏
+ showDetailsDialog(row) {
+ this.form = { ...row }
+ this.currentStep = this.steps.indexOf(this.form.currentState) === -1 ? 5 : this.steps.indexOf(this.form.currentState)
+ this.currentStepClick = this.currentStep === 5 ? 0 : this.currentStep
+ this.$nextTick(() => {
+ this.$refs['form'].clearValidate()
+ })
+ this.dialogVisible = true
+ },
+ //鍒犻櫎鎿嶄綔
+ handleDeleteClick(index, row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.$axios.delete(this.$api.deviceCheck.deleteDeviceFaultOne + '?id=' + row.id).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.getTableList(this.clickNodeVal.value)
+ }
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ this.getTableList(newVal.value);
+ }
+ },
+ dialogVisible(newVal) {
+ if (!newVal) {
+ this.form = {}
+ this.closeLoading()
+ this.currentStep = 0 // 姝ラ鏉℃樉绀虹鍑犳
+ this.currentStepClick = 0 // 鐐瑰嚮姝ラ鏉″彉鍖�
+ this.$refs['form'].clearValidate()
+ }
+ }
+ }
+}
+</script>
+
+<style scoped>
+h4 {
+ font-weight: 400;
+ font-size: 16px;
+ /* display: flex;
+ justify-content: space-between; */
+ margin: 10px 0;
+}
+
+/*
+淇濆瓨鎻愪氦鎸夐挳鏍峰紡
+*/
+h4 .title {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+h4 .title .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ background: #3A7BFA;
+ margin-right: 4px;
+}
+
+.tables {
+ width: 100%;
+ height: calc(100vh - 230px);
+}
+
+.el-from {
+ max-width: 400px;
+ margin: 0 auto;
+}
+
+.form-row {
+ display: flex;
+ justify-content: space-between;
+}
+
+.dialogBottom {
+ margin-top: 14px;
+ display: flex;
+ justify-content: space-between;
+}
+
+.form-operation {
+ display: flex;
+ justify-content: center;
+}
+
+.form-item {
+ display: flex;
+ margin-right: 100px;
+}
+
+.label {
+ margin-right: 20px;
+ line-height: 40px;
+}
+
+.value {
+ font-weight: normal;
+ line-height: 40px;
+}
+
+.form-row .el-form-item {
+ flex: 1;
+ /* 姣忎釜琛ㄥ崟椤瑰崰鎹浉鍚屾瘮渚嬬殑绌洪棿 */
+ margin-right: 100px;
+ /* 鍙�夛細涓哄彸渚у厓绱犳坊鍔犻棿璺� */
+}
+
+.search {
+ background-color: #fff;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ position: relative;
+}
+
+.search_thing {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 40px;
+}
+
+.search_label {
+ width: 70px;
+ font-size: 14px;
+ text-align: right;
+}
+
+.search_input {
+ width: calc(100% - 120px);
+}
+
+.btns {
+ position: absolute;
+ right: 0px;
+ top: 50%;
+ transform: translate(0, -50%);
+}
+
+.form .search_label {
+ width: 120px;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/files.vue b/src/views/CNAS/resourceDemand/device/component/files.vue
new file mode 100644
index 0000000..40ac949
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/files.vue
@@ -0,0 +1,1127 @@
+<!-- 璁惧妗f -->
+<template>
+ <div class="page">
+ <div class="page-header">
+ <h4><span class="line"></span><span>璁惧妗f</span></h4>
+ <div class="btns">
+ <el-button type="primary" size="small" @click="openEditForm" style="">淇妗f</el-button>
+ <el-button type="primary" size="small" @click="dialogVisible1 = true" style="">娣诲姞闄勪欢</el-button>
+ <el-button type="primary" size="small" @click="deviceDialog = true" style="">鏌ョ湅璁惧浜岀淮鐮�</el-button>
+ <el-button type="primary" size="small" @click="handleDownOne" style="">瀵煎嚭</el-button>
+ </div>
+ </div>
+ <el-divider></el-divider>
+ <div class="main_div">
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <!-- 鍔犳椂闂存埑閬垮厤娴忚鍣ㄧ紦瀛橀棶棰� -->
+ <el-image :src="`${javaApi}/img/${Mdata.imageUpload}`" fit="fill" :key="'personalPicture' + timeStamp"
+ style="width: 200px;height: 300px;border: 1px solid #000;border-radius: 10px;margin-left: 30px;margin-top: 20px;">
+ <div slot="error" class="image-slot">
+ <i class="el-icon-picture-outline" style="font-size: 40px;"></i>
+ </div>
+ </el-image>
+ </el-col>
+ <el-col :span="8">
+ <div class="form-item">
+ <label>璁惧鍚嶇О</label>
+ <!-- <p>{{ Mdata.deviceName }}</p> -->
+ <el-tooltip class="item" :content="Mdata.deviceName">
+ <span class="text-ellipsis">{{ Mdata.deviceName }}</span>
+ </el-tooltip>
+ </div>
+ <div class="form-item">
+ <label>璁惧绫诲瀷</label>
+ <p>{{ Mdata.largeCategory }}</p>
+ </div>
+
+ <div class="form-item">
+ <label>绠$悊缂栧彿</label>
+ <p>{{ Mdata.managementNumber }}</p>
+ </div>
+ <div class="form-item">
+ <label>鎵�灞為儴闂�</label>
+ <p>{{ Mdata.laboratoryName }}</p>
+ </div>
+ <div class="form-item">
+ <label>鐢熶骇鍘傚</label>
+ <!-- <p>{{ Mdata.manufacturer }}</p> -->
+ <el-tooltip class="item" :content="Mdata.manufacturer">
+ <span class="text-ellipsis">{{ Mdata.manufacturer }}</span>
+ </el-tooltip>
+ </div>
+ <div class="form-item">
+ <label>璧勪骇缂栫爜</label>
+ <p class="text-ellipsis">{{ Mdata.assetCode }}</p>
+ </div>
+
+ <div class="form-item">
+ <label>鍑哄巶鏃ユ湡</label>
+ <p>{{ Mdata.acquisitionDate | formaterDateTime }}</p>
+ </div>
+ <div class="form-item">
+ <label>鏍″噯鏈夋晥鏈�</label>
+ <p>{{ Mdata.activationDate | formaterDateTime }}</p>
+ </div>
+ <div class="form-item">
+ <label>鏍稿噯鍛ㄦ湡(鏈�)</label>
+ <p>{{ Mdata.calibrationDate }}</p>
+ </div>
+
+ <div class="form-item">
+ <label>鎶ュ簾鏃堕棿</label>
+ <p>{{ handleData() }}</p>
+ </div>
+ <div class="form-item">
+ <label>鍑嗙‘搴﹂噺鍊�</label>
+ <el-tooltip class="item" :content="Mdata.technicalIndicators">
+ <span class="text-ellipsis">{{ Mdata.technicalIndicators }}</span>
+ </el-tooltip>
+ <!-- <p>{{ Mdata.technicalIndicators }}</p> -->
+ </div>
+ <div class="form-item">
+ <label>缁翠慨璁板綍</label>
+ <p>{{ handleData() }}</p>
+ </div>
+ <div class="form-item">
+ <label>琚巿鏉冧汉</label>
+ <p>{{ Mdata.authorizedPersonName }}</p>
+ </div>
+
+ </el-col>
+ <el-col :span="10">
+ <div class="form-item">
+ <label>瑙勬牸鍨嬪彿</label>
+ <p>{{ Mdata.specificationModel }}</p>
+ </div>
+ <!-- <div class="form-item">
+ <label>缁嗙被</label>
+ <p>{{ handleData() }}</p>
+ </div> -->
+ <div class="form-item">
+ <label>鍑哄巶缂栧彿</label>
+ <p>{{ Mdata.factoryNo }}</p>
+ </div>
+ <div class="form-items">
+ <label>璁惧鐘舵��</label>
+ <el-radio-group v-model="Mdata.deviceStatus" style="margin-left: 10px;">
+ <el-radio :label="0" :disabled="Mdata.deviceStatus != 0">姝e父</el-radio>
+ <el-radio :label="1" :disabled="Mdata.deviceStatus != 1">缁翠慨</el-radio>
+ <el-radio :label="2" :disabled="Mdata.deviceStatus != 2">鍋滅敤</el-radio>
+ <el-radio :label="3" :disabled="Mdata.deviceStatus != 3">鎶ュ簾</el-radio>
+ </el-radio-group>
+ </div>
+ <div class="form-item">
+ <label>瀛樻斁鐐�</label>
+ <p>{{ Mdata.storagePoint }}</p>
+ </div>
+ <div class="form-item">
+ <label>浜у湴</label>
+ <p>{{ Mdata.origin }}</p>
+ </div>
+ <div class="form-item">
+ <label>妫�楠岄」</label>
+ <el-tooltip class="item" effect="dark" :content="Mdata.insProductItem" placement="top">
+ <span class="text-ellipsis">{{ Mdata.insProductItem }}</span>
+ </el-tooltip>
+ </div>
+ <div class="form-item">
+ <label>璐疆鏃ユ湡</label>
+ <p>{{ Mdata.acquisitionDate | formaterDateTime }}</p>
+ </div>
+
+ <div class="form-item">
+ <label>鏈�杩戞牎鍑嗘棩鏈�</label>
+ <p>{{ Mdata.lastCalibrationDate | formaterDateTime }}</p>
+ </div>
+ <div class="form-item">
+ <label>涓嬫鏍″噯鏃ユ湡</label>
+ <p>{{ Mdata.nextCalibrationDate | formaterDateTime }}</p>
+ </div>
+ <div class="form-item">
+ <label>閲囪喘璐圭敤(鍏�)</label>
+ <p>{{ Mdata.unitPrice }}</p>
+ </div>
+ <div class="form-item">
+ <label>璁惧璐熻矗浜�</label>
+ <p>{{ Mdata.equipmentManagerName }}</p>
+ </div>
+ <div class="form-item">
+ <label>楠屾敹璁板綍</label>
+ <p>{{ handleData() }}</p>
+ </div>
+ <div class="form-item">
+ <label>鏍稿噯璇佷功</label>
+ <p>{{ Mdata.calibrateNo }}</p>
+ </div>
+ </el-col>
+ </el-row>
+ <h4 style="margin-bottom: 10px;margin-top: 10px;"><span class="line"></span><span>闄勪欢鍜岀浉鍏虫枃妗�</span></h4>
+ <el-table height="200px" :data="tableDataA">
+ <el-table-column header-align="center" align="center" prop="prop" label="搴忓彿" type="index" width="60" />
+ <el-table-column prop="documentType" label="绫诲瀷" min-width="100">
+ <template v-slot="scope">
+ {{ scope.row.documentType === '0' ? '闄勪欢' : scope.row.documentType === '1' ? '鏂囨。' : '' }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="name" label="鍚嶇О" min-width="150" />
+ <el-table-column prop="number" label="缂栧彿" min-width="150" />
+ <el-table-column prop="version" label="鐗堟湰" min-width="80" />
+ <el-table-column prop="quantity" label="浠芥暟" min-width="80" />
+ <el-table-column prop="pageCount" label="椤电爜" min-width="80" />
+ <el-table-column prop="provider" label="鎻愪緵鑰�" min-width="150" />
+ <el-table-column prop="provideDate" label="褰掓。鏃ユ湡" min-width="150" />
+ <el-table-column prop="comments" label="澶囨敞" min-width="150" />
+ <el-table-column fixed="right" label="鎿嶄綔" min-width="180">
+ <template slot-scope="scope">
+ <el-button type="text" size="small" @click="handleAttachmentClick(scope.row)">涓嬭浇闄勪欢</el-button>
+ <el-button type="text" size="small" @click="handleViewClick(scope.row)">缂栬緫</el-button>
+ <el-button type="text" size="small" @click="handleDeleteClick(scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <!-- 淇 -->
+ <el-dialog title="妗f淇" top="5vh" :visible.sync="dialogVisible" width="70%" @open="openFileRevisionDialog"
+ :before-close="handleClose">
+ <el-row style="display:flex;justify-content: space-around;max-height: 75vh;overflow-y: auto;">
+ <!-- 宸﹁竟甯冨眬 -->
+ <el-col :span="7">
+ <el-col>
+ <!-- 鍥剧墖 -->
+ <el-image class="img" style="width:100%;height: 320px;margin-bottom:16px"
+ :src="javaApi + '/img/' + editData.imageUpload">
+ <div slot="error" class="image-error" style="width: calc(100% - 2px);
+ height: 318px;
+ border-radius: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid #EEEEEE;">
+ <i class="el-icon-picture-outline" style="font-size:60px;color:#666666;"></i>
+ </div>
+ </el-image>
+ <!-- 琛ㄥ崟 -->
+ <el-form :model="editData" label-width="120px" ref="rules1" :rules="rules1">
+ <el-form-item label="浠櫒鍚嶇О:" prop="deviceName">
+ <el-input v-model="editData.deviceName" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="浠櫒鍚嶇ОEN:" prop="enDeviceName">
+ <el-input v-model="editData.enDeviceName" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="瑙勬牸鍨嬪彿:" prop="specificationModel">
+ <el-input v-model="editData.specificationModel" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鐢熶骇鍘傚:">
+ <el-input v-model="editData.manufacturer" size="small"></el-input>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ </el-col>
+ <!-- 涓棿甯冨眬 -->
+ <el-col :span="7">
+ <el-form :model="editData" label-width="116px" ref="rules2" :rules="rules1">
+ <el-form-item label="鏍″噯鏈嶅姟鏈烘瀯:">
+ <el-input v-model="editData.calibrationServices" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璧勪骇缂栫爜:">
+ <el-input v-model="editData.assetCode" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="浜у湴:">
+ <el-input v-model="editData.origin" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鍑哄巶缂栧彿:">
+ <el-input v-model="editData.factoryNo" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="绠$悊缂栧彿:" prop="managementNumber">
+ <el-input v-model="editData.managementNumber" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璐疆鏃ユ湡:">
+ <el-date-picker style="width:100%" v-model="editData.acquisitionDate" type="date" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="鏍″噯鏈夋晥鏈�:" prop="activationDate">
+ <el-date-picker style="width:100%" v-model="editData.activationDate" type="date" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璐熻矗浜�:">
+ <el-select v-model="editData.equipmentManager" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in responsiblePersonList" :key="item.name" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="瀛樻斁鐐�:">
+ <el-input v-model="editData.storagePoint" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鎶�鏈寚鏍�:">
+ <el-input v-model="editData.technicalIndicators" :rows="7" type="textarea" size="small"></el-input>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ <!-- 鍙宠竟甯冨眬 -->
+ <el-col :span="7">
+ <el-form :model="editData" label-width="140px" ref="ruleForm" :rules="rules1">
+ <!-- 瀹為獙瀹ゅ垪琛� -->
+ <el-form-item label="鎵�灞為儴闂�:" prop="subordinateDepartmentsId">
+ <el-select v-model="editData.subordinateDepartmentsId" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in subordinateDepartmentsList" :key="item.value" :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="妫�娴嬮」鐩�:">
+ <el-cascader v-model="editData.insProductIds" :options="options" :show-all-levels="false" :props="props"
+ placeholder="璇烽�夋嫨" size="small" style="width:100%;" :collapse-tags="true" separator="," filterable
+ clearable></el-cascader>
+ </el-form-item>
+ <el-form-item label="鏈�杩戞牎鍑嗘棩鏈�:">
+ <el-date-picker style="width:100%" v-model="editData.lastCalibrationDate" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="涓嬫鏍″噯鏃ユ湡:">
+ <el-date-picker style="width:100%" v-model="editData.nextCalibrationDate" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璁惧绫诲瀷:">
+ <el-select v-model="editData.largeCategory" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in equipmentList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍗曚环(涓囧厓):">
+ <el-input v-model="editData.unitPrice" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="褰撳墠鐘舵��:" prop="deviceStatus">
+ <el-select v-model="editData.deviceStatus" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鏍″噯鍛ㄦ湡锛堟湀锛�:" prop="calibrationDate">
+ <el-input v-model="editData.calibrationDate" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="琚巿鏉冧汉:">
+ <el-select v-model="editData.authorizedPerson" multiple placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in responsiblePersonList" :key="item.name" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍥剧墖:">
+ <!-- <div
+ style="border: 1px solid #DCDFE6;border-radius:4px;height:32px;lineHeight:32px;display:flex;justify-content: space-around;font-size: 13px;">
+ <div v-show="Mdata.imageName" class="picName">{{ Mdata.imageName }}</div>
+ <el-upload :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false"
+ accept='image/jpg,image/jpeg,image/png' :headers="headers" :on-change="beforeUpload"
+ :on-error="onError" ref='upload'>
+ <el-button type="text" style="height:30px;padding-top:8px"><span v-if="Mdata.imageName"></span></el-button>
+ </el-upload>
+ </div> -->
+
+ <div>
+ <div v-show="editData.imageName" class="picName">{{ editData.imageName }}</div>
+ <el-upload :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false"
+ accept='image/jpg,image/jpeg,image/png' :headers="uploadHeader" :on-change="beforeUpload"
+ :on-error="onError" ref='upload' class="avatar-uploader">
+ <img v-if="editData.imageUpload" :src="javaApi + '/img/' + editData.imageUpload" class="avatar">
+ <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+ </el-upload>
+ </div>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ </el-row>
+ <span slot="footer" class="dialog-footer">
+ <el-row>
+ <el-button @click="handleClose">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitForm" :loading="upLoad">纭� 瀹�</el-button>
+ </el-row>
+ </span>
+ </el-dialog>
+ <el-dialog title="璁惧闄勪欢" top="5vh" v-if="dialogVisible1" :visible.sync="dialogVisible1" width="40%">
+ <el-form ref="form" :model="addFile" label-width="120px">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="缁存姢绫诲瀷锛�">
+ <el-radio-group v-model="addFile.documentType">
+ <el-radio :label="0">闄勪欢</el-radio>
+ <el-radio :label="1">鏂囨。</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="妗f鍚嶇О锛�">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addFile.name"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="搴撳彿/璧勪骇缂栧彿:">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addFile.number"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐗堟湰锛�">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addFile.version"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浠芥暟锛�">
+ <el-input-number v-model="addFile.quantity" controls-position="right" style="width: 100%;" size="small"
+ :min="0" :max="10"></el-input-number>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椤电爜锛�">
+ <el-input-number v-model="addFile.pageCount" controls-position="right" style="width: 100%;" size="small"
+ :min="0" :max="10"></el-input-number>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎻愪緵鑰咃細">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addFile.provider"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="褰掓。鏃ユ湡锛�">
+ <el-date-picker type="date" style="width:100%" placeholder="璇烽�夋嫨鏃ユ湡" size="small"
+ v-model="addFile.provideDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞锛�">
+ <el-input type="textarea" :rows="2" size="small" v-model="addFile.comments"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="闄勪欢锛�" style="float: left;">
+ <el-upload class="upload-demo" :action="action" :headers="uploadHeader" ref="uploadFile"
+ :on-error="onError" :on-remove="handleRemove" :on-success="onSuccess" :before-remove="beforeRemove"
+ multiple :limit="1" :on-exceed="handleExceed" :file-list="fileList">
+ <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-row>
+ <el-button @click="dialogVisible1 = false" size="small">鍙� 娑�</el-button>
+ <el-button type="primary" @click="saveRecord" size="small" :loading="isLoading">{{ isAddFileUpdate == true ?
+ '鏇存柊' :
+ '纭� 瀹�' }}</el-button>
+ </el-row>
+ </span>
+ </el-dialog>
+ <el-dialog title="璁惧浜岀淮鐮�" :visible.sync="deviceDialog" top="5vh" width="30%">
+ <div style="width:90%;text-align: right;">
+ <el-button type="primary" size="mini" @click="clickGeneratePicture">涓嬭浇鍥剧墖</el-button>
+ <el-button type="primary" size="mini" @click="labelPrint">鏍囩鎵撳嵃</el-button>
+ </div>
+ <div class="device-main" ref="deviceQrCode" id="deviceCode">
+ <div class="device-center">
+ <p class="device-title">{{ Mdata.deviceName }}</p>
+ <div class="device-footer">
+ <div>
+ <vueQr class="qr-code"
+ :text="'https://zttx-lims.ztt.cn:8021/lims/qr/qrScan?code=' + Mdata.managementNumber + '&type=device'"
+ :size="200" :margin="10"></vueQr>
+ </div>
+ <div class="device-number">
+ <span class="device-text">璁惧缂栫爜:</span>
+ <span class="device-text">{{ Mdata.managementNumber }}</span>
+ </div>
+ <div class="device-name">
+ <span class="device-text">璁惧鍨嬪彿:</span>
+ <span class="device-text">{{ Mdata.specificationModel }}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import { MessageBox } from 'element-ui'
+import fileDownload from '@/utils/file'
+import vueQr from 'vue-qr'
+import PrintJS from 'print-js'
+import domtoimage from 'dom-to-image';
+import {
+ deleteCNASFile,
+ updateDocument,
+ addDocument,
+ deleteDocumentById,
+ getAllDocuments,
+ selectDeviceByCode,
+ upDeviceParameter,
+ exportDeviceFile,
+ getInsProduction,
+} from '@/api/cnas/resourceDemand/device.js'
+import { selectUserCondition } from "@/api/system/user";
+import {
+ obtainItemParameterList,
+} from '@/api/cnas/resourceDemand/device.js'
+export default {
+ filters: {
+ formaterDateTime(dateTime) {
+ if (dateTime === undefined || dateTime === null || dateTime === '') {
+ return dateTime
+ }
+ return dateTime.split(" ")[0]
+ }
+ },
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ components: {
+ vueQr
+ },
+ data() {
+ return {
+ deviceDialog: false,//鏌ョ湅璁惧浜岀淮鐮佸脊妗�
+ rules1: {
+ deviceName: [
+ { required: true, message: '璇疯緭鍏ヤ华鍣ㄥ悕绉�', trigger: 'blur' },
+ ],
+ enDeviceName: [
+ { required: true, message: '璇疯緭鍏ヤ华鍣ㄥ悕绉癊N', trigger: 'blur' },
+ ],
+ specificationModel: [
+ { required: true, message: '璇疯緭鍏ヨ鏍煎瀷鍙�', trigger: 'blur' },
+ ],
+ managementNumber: [
+ { required: true, message: '璇疯緭鍏ョ鐞嗙紪鍙�', trigger: 'blur' },
+ ],
+ activationDate: [
+ { required: true, message: '璇疯緭鍏ユ牎鍑嗘湁鏁堟湡', trigger: 'blur' },
+ ],
+ deviceStatus: [
+ { required: true, message: '璇疯緭鍏ュ綋鍓嶇姸鎬�', trigger: 'blur' },
+ ],
+ calibrationDate: [
+ { required: true, message: '璇疯緭鍏ユ牎鍑嗗懆鏈�(鏈�)', trigger: 'blur' },
+ ],
+ subordinateDepartmentsId: [
+ { required: true, message: '璇烽�夋嫨鎵�灞為儴闂�', trigger: 'change' },
+ ]
+ },
+ // dateForm: {
+
+ // },
+ fileList: [], // 娣诲姞闄勪欢涓婁紶鏂囦欢鍒楄〃
+ timeStamp: '', // 缁欏浘鐗囨坊鍔爇ey锛屽湪姣忔鍔犺浇椤甸潰鐨勬椂鍊欐柊寤烘椂闂存埑
+ equipmentManager: [],
+ formLabelWidth: '100px',
+ dialogVisible1: false,
+ recordNumber: '',
+ inLoading: false, // 鎺у埗涓婁紶鎸夐挳鍔犺浇鐘舵��
+ isLoading: false, // 鎺у埗纭畾鎸夐挳鍔犺浇鐘舵��
+ formData: {},
+ tableDataA: [],
+ num: 1,
+ //娣诲姞闄勪欢鏁版嵁鏀堕泦
+ addFile: {
+ documentType: '', // 缁存姢绫诲瀷
+ provideDate: null, // 褰掓。鏃ユ湡
+ name: '', // 妗f鍚嶇О
+ number: '', // 搴撳彿/璧勪骇缂栧彿
+ version: '', // 鐗堟湰
+ quantity: 1, // 浠芥暟
+ pageCount: 1, // 椤电爜
+ provider: '', // 鎻愪緵鑰�
+ comments: "", // 澶囨敞
+ fileName: "", // 鏂囦欢鍘熷悕绉�
+ systemFileName: "", // 绯荤粺鐢熸垚鍚嶇О
+ },
+ componentData: {
+ entity: { name: "", orderBy: { field: "id", order: "asc" } },
+ page: { current: "1", size: "80" }
+ },
+ upIndex: 0,
+ dialogVisible: false,
+ upLoad: false,
+ responsiblePersonList: [],
+ subordinateDepartmentsList: [],
+ options: [],
+ equipmentList: [],
+ deviceStatusList: [],
+ props: { multiple: true, emitPath: false, value: 'id', label: 'name' },
+ // 鏀堕泦璁惧妗f鏁版嵁
+ Mdata: {
+ deviceName: null
+ },
+ isAddFileUpdate: false,
+ editData: {
+ authorizedPerson: [],
+ },
+ }
+ },
+ computed: {
+ action() {
+ return this.javaApi + '/deviceScope/uploadFile'
+ }
+ },
+ mounted() {
+ // 鏀堕泦鏁版嵁
+ this.getList(this.clickNodeVal.value)
+ // 鑾峰彇鐩稿叧鏂囨。鐨勬暟鎹�
+ this.getPage()
+ this.timeStamp = Date.now()
+ },
+ methods: {
+ /**
+ * 灏嗛〉闈㈡寚瀹氳妭鐐瑰唴瀹硅浆涓哄浘鐗�
+ * 1.鎷垮埌鎯宠杞崲涓哄浘鐗囩殑鍐呭鑺傜偣DOM锛�
+ * 2.杞崲锛屾嬁鍒拌浆鎹㈠悗鐨刢anvas
+ * 3.杞崲涓哄浘鐗�
+ */
+ clickGeneratePicture() {
+ const _than = this
+ domtoimage.toPng(_than.$refs.deviceQrCode, { quality: 1, width: 440, }).then(function (dataUrl) {
+ // 灏嗚浆鎹㈠悗鐨勫浘鍍忔暟鎹瓨鍌ㄤ负 data URL
+ fileDownload.downloadIamge(dataUrl, _than.Mdata.deviceName)
+ });
+ },
+ //鎵撳嵃璁惧浜岀淮鐮�
+ labelPrint() {
+ PrintJS({
+ printable: 'deviceCode',//椤甸潰
+ type: "html",//鏂囨。绫诲瀷
+ maxWidth: 360,
+ css: ['/static/css/device-print.css'],
+ style: '@page { size: auto; margin: 0mm;}',
+ targetStyles: ["*"], // 浣跨敤dom鐨勬墍鏈夋牱寮忥紝寰堥噸瑕�
+ });
+ },
+ openFileRevisionDialog() {
+ // 鑾峰彇妗f淇璐熻矗浜轰笅鎷夋鏁版嵁
+ this.selectDevicePrincipal()
+ // 鑾峰彇妗f淇鎵�灞為儴闂ㄤ笅鎷夋鏁版嵁
+ this.obtainItemParameterList()
+ // 鑾峰彇妗f淇璁惧鐘舵�佷笅鎷夋鏁版嵁
+ this.selectEnumByCategory()
+ // 鑾峰彇妗f淇妫�楠岄」鐩骇鑱斿脊妗嗘暟鎹�
+ this.getInsProductIds()
+ },
+ //闄勪欢鍜岀浉鍏虫枃妗d簨浠�
+ handleAttachmentClick(row) {
+ console.log(row)
+ if (row.fileName) {
+ this.$download.saveAs(row.fileName)
+ } else {
+ this.$message.warning('鏈笂浼犳枃浠讹紒')
+ }
+ },
+ handleViewClick(row) {
+ this.isAddFileUpdate = true
+ this.addFile = { ...row }
+ this.dialogVisible1 = true
+ if (row.fileName) {
+ const obj = Object.assign({
+ name: row.fileName,
+ url: row.fileName,
+ status: 'success',
+ uid: Date.now(),
+ })
+ this.fileList.push(obj)
+ }
+ },
+ handleDeleteClick(row) {
+ // 鍒犻櫎閫昏緫
+ MessageBox.confirm('纭畾瑕佸垹闄よ璁板綍鍚楋紵', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning',
+ }).then(() => {
+ deleteDocumentById({ id: row.id }).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.getPage()
+ }
+ })
+ }).catch(() => {
+ this.$message.info('宸插彇娑堝垹闄�')
+ })
+ },
+ saveRecord() {
+ //杞崲鏁版嵁
+ this.addFile.deviceId = this.clickNodeVal.value
+ let obj = this.addFile.systemFileName
+ this.addFile.systemFileName = obj.name
+ this.addFile.fileName = obj.url
+
+ // 鏇存柊
+ if (this.isAddFileUpdate) {
+ updateDocument(this.addFile).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鏇存柊鎴愬姛')
+ this.dialogVisible1 = false;
+ this.getPage()
+ }
+ })
+ } else {
+ // 鏂板
+ addDocument(this.addFile).then(res => {
+ if (res.code == 200) {
+ this.$message.success('淇濆瓨鎴愬姛')
+ this.dialogVisible1 = false;
+ this.getPage()
+ }
+ })
+ }
+ },
+ onSuccess(response, file, fileList) {
+ if (response.code == 200) {
+ this.addFile.systemFileName = response.data
+ this.addFile.fileName = file.name
+ } else {
+ this.$refs.uploadFile.clearFiles()
+ this.$message.error('涓婁紶澶辫触锛�' + response.message)
+ }
+ },
+ handleRemove(file, fileList) {
+ this.deleteFile(this.addFile.systemFileName)
+ },
+ deleteFile(fileName) {
+ deleteCNASFile({ fileName }).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ })
+ },
+ handleExceed(files, fileList) {
+ this.$message.warning(`褰撳墠闄愬埗閫夋嫨 1 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠讹紝鍏遍�夋嫨浜� ${files.length + fileList.length} 涓枃浠禶);
+ },
+ beforeRemove(file, fileList) {
+ return this.$confirm(`纭畾绉婚櫎 ${file.name}锛焋);
+ },
+ // 鑾峰彇鐩稿叧鏂囨。鏁版嵁鐨刟pi
+ getPage() {
+ getAllDocuments({ deviceId: this.clickNodeVal.value }).then(res => {
+ if (res.code == 200)
+ this.tableDataA = res.data
+ })
+ },
+ // 鏀堕泦鏁版嵁
+ getList(id) {
+ selectDeviceByCode({ id }).then(res => {
+ // 灏嗗垎绫诲垪琛ㄧ殑淇℃伅瀛樿捣鏉�
+ if (res.code == 200) {
+ this.Mdata = res.data;
+ this.Mdata.insProductIds = this.Mdata.insProductIds.split(',')
+ if (this.Mdata.authorizedPerson) {
+ this.Mdata.authorizedPerson = JSON.parse(this.Mdata.authorizedPerson)
+ }
+ }
+ });
+ },
+ handleData(m) {
+ if (m) {
+ return m
+ } else {
+ return '-'
+ }
+ },
+ handleClose() {
+ this.dialogVisible = false
+ },
+ //鎵撳紑淇妗f寮规
+ openEditForm() {
+ this.editData = JSON.parse(JSON.stringify(this.Mdata))
+ this.$nextTick(() => {
+ this.dialogVisible = true
+ })
+ },
+ //淇妗f
+ submitForm() {
+ let flag = true
+ this.$refs['rules1'].validate((valid) => {
+ if (!valid) {
+ flag = false;
+ return false;
+ }
+ });
+ this.$refs['rules2'].validate((valid) => {
+ if (!valid) {
+ flag = false;
+ return false;
+ }
+ });
+ this.$refs['ruleForm'].validate((valid) => {
+ if (!valid) {
+ flag = false;
+ return false;
+ }
+ });
+ if (!flag) {
+ return;
+ }
+ delete this.editData.createTime
+ delete this.editData.updateTime
+ delete this.editData.createUser
+ delete this.editData.updateUser
+ delete this.editData.orderBy
+ const formData = this.HaveJson(this.editData)
+ formData.userAllow = this.equipmentManager.toString();
+ formData.insProductIds = Array.isArray(formData.insProductIds) ? formData.insProductIds.join(',') : '';
+ if (formData.authorizedPerson.length === 0) {
+ formData.authorizedPerson = ''
+ } else {
+ formData.authorizedPerson = JSON.stringify(formData.authorizedPerson)
+ }
+ this.upLoad = true;
+ upDeviceParameter(formData).then(res => {
+ this.$message.success('淇敼鎴愬姛')
+ this.upLoad = false
+ this.getList(this.clickNodeVal.value)
+ this.dialogVisible = false
+ }).catch(e => {
+ this.$message.error('淇敼澶辫触')
+ this.dialogVisible = false
+ this.upLoad = false
+ })
+ },
+ // 瀵煎嚭
+ handleDownOne(row) {
+ this.outLoading = true
+ exportDeviceFile({ deviceId: this.clickNodeVal.value }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '璁惧妗f鍗�.doc')
+ })
+ },
+ handleSuccessUpImg2(response) {
+ if (response.code == 200) {
+ this.$nextTick(() => {
+ this.editData.imageUpload = response.data.url;
+ this.editData.imageName = response.data.name;
+ console.log(this.javaApi + 'img/' + this.editData.imageUpload);
+
+ })
+ }
+ },
+ beforeUpload(file) {
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+ this.$refs.upload.clearFiles()
+ return false;
+ } else {
+ return true;
+ }
+ },
+ onError(err, file, fileList) {
+ this.$message.error('涓婁紶澶辫触')
+ this.$refs.upload.clearFiles()
+ },
+ // 鑾峰彇璐熻矗浜哄垪琛�
+ selectDevicePrincipal() {
+ selectUserCondition().then(res => {
+ this.responsiblePersonList = res.data;
+ })
+ },
+ obtainItemParameterList() {
+ obtainItemParameterList().then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.laboratoryName,
+ value: a.id
+ })
+ })
+ this.subordinateDepartmentsList = data
+ })
+ },
+ getInsProductIds() {
+ getInsProduction().then(res => {
+ this.options = res.data.map((m, i) => {
+ m.id = m.name;
+ return m
+ })
+ this.options.forEach(item => {
+ if (item.children.length == 0) {
+ item.children = null;
+ } else {
+ item.children.forEach(m => {
+ if (m.children.length == 0) {
+ m.children = null;
+ } else {
+ m.children.forEach(n => {
+ if (n.children && n.children.length == 0) {
+ n.children = null;
+ }
+ })
+ }
+ })
+ }
+ })
+ })
+ },
+ // 鑾峰彇瀛楀吀
+ selectEnumByCategory() {
+ // 璁惧鐘舵��
+ this.getDicts("device_status").then((response) => {
+ this.deviceStatusList = this.dictToValue(response.data)
+ this.deviceStatusList.forEach(a => {
+ if (!isNaN(a.value)) {
+ a.value = parseInt(a.value)
+ }
+ })
+ });
+ // 璁惧鍒嗙被
+ this.getDicts("device_type").then((response) => {
+ this.equipmentList = this.dictToValue(response.data);
+ });
+ },
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ this.getList(newVal.value)
+ this.getPage()
+ }
+ },
+ dialogVisible1(newVal) {
+ if (newVal == false) {
+ this.isAddFileUpdate = false
+ this.addFile = {}
+ this.fileList = []
+ }
+ }
+ }
+}
+</script>
+
+<style scoped>
+.main_div {
+ height: calc(100vh - 15em);
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.page {
+ width: 100%;
+ height: 100%;
+}
+
+.page-header {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 10px;
+}
+
+h4 {
+ display: flex;
+ align-items: center;
+}
+
+h4 .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ background: #3A7BFA;
+ margin-right: 4px;
+}
+
+.tables {
+ width: 100%;
+}
+
+.el-image {
+ position: relative;
+}
+
+.el-icon-picture-outline {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+}
+
+.form-item {
+ line-height: 34px;
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+}
+
+.text-ellipsis {
+ display: inline-block;
+ width: 200px;
+ /* 鎴栬�呮偍鍙互璁剧疆涓�涓叿浣撶殑瀹藉害鍊� */
+ box-sizing: border-box;
+ /* 纭繚padding鍜宐order涓嶅奖鍝嶅厓绱犵殑鎬诲搴� */
+ white-space: nowrap;
+ /* 绂佹鏂囨湰鎹㈣ */
+ text-overflow: ellipsis;
+ /* 浣跨敤鐪佺暐鍙疯〃绀鸿鎴柇鐨勬枃鏈� */
+ overflow: hidden;
+ /* 闅愯棌瓒呭嚭瀹瑰櫒鐨勫唴瀹� */
+}
+
+.form-items {
+ line-height: 34px;
+ /* display: flex; */
+ /* align-items: center; */
+ margin-left: 15%;
+ font-size: 14px;
+}
+
+
+.form-item label {
+ min-width: 130px;
+ display: inline-block;
+ text-align: right;
+ margin-right: 20px;
+ color: #999;
+}
+
+.form-item p {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-line-clamp: 3;
+ /* 杩欓噷璁剧疆浣犳兂瑕佺殑琛屾暟 */
+ -webkit-box-orient: vertical;
+}
+
+.btns {
+ display: flex;
+ align-items: center;
+}
+
+.search_thing,
+.check_thing {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 1rem;
+}
+
+.search_label,
+.check_label {
+ width: 120px;
+}
+
+.search_input,
+.check_data,
+.check_input {
+ flex-grow: 1;
+}
+
+.avatar-uploader .el-upload {
+ border: 1px dashed #190505;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+}
+
+.avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+}
+
+.avatar-uploader-icon {
+ font-size: 28px;
+ color: #8c939d;
+ width: 178px;
+ height: 178px;
+ line-height: 178px;
+ text-align: center;
+}
+
+.avatar {
+ width: 178px;
+ height: 178px;
+ display: block;
+}
+
+.device-main {
+ width: 90%;
+ margin: 0px 5%;
+ height: 500px;
+ padding: 25px 0px;
+ background-color: #fff;
+}
+
+.device-center {
+ width: 90%;
+ height: 490px;
+ margin: 0px 5%;
+ border-radius: 15px;
+ background-color: #fff;
+ overflow: hidden;
+ /* box-shadow: 3px 3px 8px 0 rgba(0, 0, 0, 0.3); */
+ filter: drop-shadow(0px 5px 5px rgba(0, 0, 0, 0.3))
+}
+
+.device-title {
+ position: relative;
+ top: 20px;
+ z-index: 2;
+ font-size: clamp(1rem, 0.582rem + 1.59vw, 1.475rem);
+ font-weight: bold;
+ color: #4f6ab2;
+ width: 100%;
+ height: 90px;
+ line-height: 100px;
+ text-align: center;
+}
+
+.device-footer {
+ width: 100%;
+ height: 420px;
+ background-color: #3361d0;
+ position: relative
+}
+
+.device-footer::after {
+ content: "";
+ width: 100%;
+ height: 70px;
+ position: absolute;
+ top: -30px;
+ border-radius: 0 0 50% 50%;
+ background-color: #fff;
+}
+
+.device-footer .qr-code {
+ width: 55%;
+ height: 200px;
+ position: relative;
+ top: 60px;
+ left: 22.5%;
+ background-color: #fff;
+ border-radius: 15px;
+ overflow: hidden;
+}
+
+.device-number {
+ width: 80%;
+ height: 20px;
+ margin-left: 20%;
+ position: relative;
+ top: 80px;
+}
+
+.device-text {
+ color: #fff;
+ font-weight: bold;
+ font-size: 100%;
+}
+
+.device-name {
+ width: 80%;
+ margin-left: 20%;
+ height: 20px;
+ position: relative;
+ top: 90px;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/maintenance.vue b/src/views/CNAS/resourceDemand/device/component/maintenance.vue
new file mode 100644
index 0000000..9ea4f5a
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/maintenance.vue
@@ -0,0 +1,340 @@
+<!-- 璁惧缁存姢 -->
+<template>
+ <div>
+ <div class="search">
+ <div class="search_thing">
+ <div class="search_label">娴佺▼缂栧彿锛�</div>
+ <div class="search_input"><el-input v-model="search.deviceNumber" clearable placeholder="璇疯緭鍏�" size="small"
+ @keyup.enter.native="getAllMessage(clickNodeVal.value)"></el-input></div>
+ </div>
+ <div class="search_thing" style="padding-left: 30px;">
+ <el-button size="small" @click="resetSearch">閲� 缃�</el-button>
+ <el-button size="small" type="primary" @click="getAllMessage(clickNodeVal.value)">鏌� 璇�</el-button>
+ </div>
+ <div class="btns">
+ <el-button size="small" type="primary" @click="dialogVisible = true; add()">娣诲姞缁存姢璁板綍</el-button>
+ <el-button :loading="outLoading" size="small" type="primary" @click="handleDownOne">瀵煎嚭</el-button>
+ </div>
+ </div>
+ <div class="tables" style="margin-top: 10px;">
+ <el-table ref="table" :data="MaintainParam" height="calc(100vh - 20em)">
+ <el-table-column label="搴忓彿" type="index" width="120">
+ <template v-slot="scope">
+ <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="娴佺▼缂栧彿" min-width="180" prop="deviceNumber" />
+ <el-table-column label="璁惧鍚嶇О" min-width="150" prop="deviceName" />
+ <el-table-column label="绠$悊缂栧彿" min-width="150" prop="managementNumber" />
+ <el-table-column label="缁存姢鍐呭" min-width="150" prop="content" />
+ <el-table-column label="缁存姢鏃堕棿" min-width="150" prop="date" />
+ <el-table-column label="鎻愪氦浜�" min-width="150" prop="name" />
+ <el-table-column label="鎻愪氦鏃ユ湡" min-width="150" prop="date">
+ </el-table-column>
+ <el-table-column fixed="right" label="鎿嶄綔" width="110">
+ <template slot-scope="scope">
+ <el-button size="small" type="text" @click="handleViewClick(scope.row)">鏌ョ湅</el-button>
+ <el-button size="small" type="text" @click="handleDeleteClick(scope.$index, scope.row)">鍒犻櫎</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>
+ </div>
+ <!-- 鏂板缓缁存姢 -->
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="娣诲姞缁存姢璁板綍"
+ top="5vh" width="60%">
+ <el-form ref="form" :model="formData" label-width="130px">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="娴佺▼缂栧彿:" prop="deviceNumber">
+ <el-input v-model="formData.deviceNumber" clearable disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁惧鍚嶇О:" prop="deviceName">
+ <el-input v-model="formData.deviceName" clearable disabled placeholder="璇疯緭鍏�" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="绠$悊缂栧彿:" prop="managementNumber">
+ <el-input v-model="formData.managementNumber" clearable disabled placeholder="璇疯緭鍏�"
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ョ淮鎶ゅ唴瀹�', trigger: 'blur' }]" label="缁存姢鍐呭:"
+ prop="content">
+ <el-input v-model="formData.content" placeholder="璇疯緭鍏�" size="small" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ョ淮鎶ゆ椂闂�', trigger: 'blur' }]" label="缁存姢鏃堕棿:" prop="date">
+ <el-date-picker v-model="formData.date" 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 :rules="[{ required: true, message: '璇疯緭鍏ョ淮鎶ゆ椂闂�', trigger: 'blur' }]" label="缁存姢绫诲瀷:"
+ prop="maintenanceType">
+ <el-radio-group v-model="formData.maintenanceType" :disabled="!this.editMode">
+ <el-radio :label="0">浣跨敤鍓嶅悗缁存姢</el-radio>
+ <el-radio :label="1">璁″垝涓淮鎶�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇烽�夋嫨涓嬫缁存姢鏃堕棿', trigger: 'blur' }]" label="涓嬫缁存姢鏃堕棿:"
+ prop="nextDate">
+ <el-date-picker v-model="formData.nextDate" :picker-options="{ disabledDate: this.disabledDate }"
+ 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 :rules="[{ required: true, message: '璇疯緭鍏ョ淮鎶や汉', trigger: 'blur' }]" label="缁存姢浜�:" prop="name">
+ <el-input v-model="formData.name" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞:">
+ <el-input v-model="formData.comments" placeholder="璇疯緭鍏�" 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="editMode" @click="dialogVisible = false">鍙� 娑�</el-button>
+ <el-button v-if="editMode" type="primary" @click="addRecord">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ exportMaintenanceRecord,
+ deleteDeviceMaintenance,
+ selectDeviceByCode,
+ addDeviceMaintenance,
+ getDeviceMaintenancePage,
+} from '@/api/cnas/resourceDemand/device.js'
+export default {
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ data() {
+ return {
+ search: {
+ size: 20,
+ current: 1,
+ total: 0,
+ deviceNumber: ''
+ },
+ editMode: false,
+ dialogVisible: false,
+ //琛ㄥ崟缁存姢鍐呭
+ formData: {},
+ //琛ㄥご鏄剧ず
+ MaintainParam: [],
+ outLoading: false
+ }
+ },
+ mounted() {
+ this.getAllMessage(this.clickNodeVal.value)
+ },
+ methods: {
+ //涓嬫缁存姢鏃ユ湡:绂佺敤鍦ㄧ淮鎶ゆ棩鏈熷墠鐨勬棩鏈�
+ disabledDate(time) {
+ let selectDate = this.formData.date
+ if (selectDate) {
+ let oldDate = new Date(selectDate)
+ return time <= oldDate.getTime()
+ }
+ return false
+ },
+ handleSizeChange(val) {
+ this.search.size = val
+ this.getAllMessage(this.clickNodeVal.value)
+ },
+ handleCurrentChange(val) {
+ this.search.current = val
+ this.getAllMessage(this.clickNodeVal.value)
+ },
+ //鎿嶄綔璇︽儏鏌ョ湅
+ handleViewClick(row) {
+ this.editMode = false;
+ this.dialogVisible = true;
+ this.formData = row;
+ },
+ // 瀵煎嚭
+ handleDownOne() {
+ this.outLoading = true
+ exportMaintenanceRecord({ deviceId: this.clickNodeVal.value }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '璁惧缁存姢淇濆吇璁板綍.doc')
+ })
+ },
+ //鎿嶄綔璇︽儏鍒犻櫎
+ handleDeleteClick(index, row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteDeviceMaintenance({ id: row.id }).then(res => {
+ })
+ // this.MaintainParam.splice(index, 1);
+ this.getAllMessage(this.clickNodeVal.value)
+ this.$message({
+ type: 'success',
+ message: '鍒犻櫎鎴愬姛!'
+ });
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ //鐐瑰嚮鍚庡彲缂栬緫
+ add() {
+ selectDeviceByCode({ id: this.clickNodeVal.value }).then(res => {
+ this.formData.deviceName = res.data.deviceName
+ this.formData.managementNumber = res.data.managementNumber
+ this.$nextTick(() => {
+ this.$refs['form'].clearValidate()
+ })
+ });
+ this.editMode = true;
+ },
+ //娣诲姞缁存姢璁板綍
+ addRecord() {
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ this.formData.deviceId = this.clickNodeVal.value;
+ addDeviceMaintenance(this.formData).then(res => {
+ if (res.code == 200) {
+ this.$message.success('娣诲姞鎴愬姛');
+ this.getAllMessage(this.clickNodeVal.value)
+ this.dialogVisible = false;
+ this.formData = {}; //娓呯┖琛ㄥ崟
+ }
+ })
+ // this.MaintainParam.push(this.formData)
+ }
+ })
+ },
+ resetSearch() {
+ this.search = {
+ size: 20,
+ current: 1,
+ total: 0,
+ deviceNumber: '',
+ }
+ this.getAllMessage(this.clickNodeVal.value);
+ },
+ //鑾峰彇琛ㄥ崟璁惧缁存姢淇℃伅
+ getAllMessage(deviceId) {
+ getDeviceMaintenancePage({
+ deviceId,
+ ...this.search
+ }).then(res => {
+ if (res.code == 200) {
+ this.MaintainParam = res.data.records
+ this.search.total = res.data.total
+ }
+ })
+ },
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ this.getAllMessage(newVal.value)
+ }
+ },
+ dialogVisible(newVal) {
+ if (newVal === false) {
+ this.formData = {}
+ this.$refs['form'].clearValidate()
+ }
+ }
+ }
+}
+</script>
+
+<style scoped>
+h4 {
+ font-weight: 400;
+ font-size: 16px;
+ display: flex;
+ justify-content: space-between;
+ margin: 10px 0;
+}
+
+h4 .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ background: #3A7BFA;
+ margin-right: 4px;
+}
+
+.tables {
+ width: 100%;
+ height: calc(100vh - 17em);
+}
+
+.search {
+ background-color: #fff;
+ display: flex;
+ align-items: center;
+ position: relative;
+ margin-top: 10px;
+}
+
+.search_thing {
+ display: flex;
+ align-items: center;
+ height: 40px;
+}
+
+.search_label {
+ width: 80px;
+ font-size: 14px;
+ text-align: right;
+}
+
+.search_input {
+ width: 73%;
+}
+
+.btns {
+ position: absolute;
+ right: 0px;
+ top: 50%;
+ transform: translate(0, -50%);
+}
+
+.btns_thing {
+ position: absolute;
+ right: 230px;
+ top: 50%;
+ transform: translate(0, -50%);
+}
+
+.form .search_label {
+ width: 120px;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/management.vue b/src/views/CNAS/resourceDemand/device/component/management.vue
new file mode 100644
index 0000000..fa8ecd6
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/management.vue
@@ -0,0 +1,1034 @@
+<!-- 璁惧宸ュ叿鏄庣粏 -->
+<template>
+ <div class="role_manage">
+ <div class="search" v-show="!showData">
+ <div class="search_thing">
+ <div class="search_label">鐘舵�侊細</div>
+ <el-select v-model="queryParams.deviceStatus" placeholder="鍏ㄩ儴" size="small">
+ <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </div>
+ <div class="search_thing">
+ <div class="search_label">璁惧鍚嶇О锛�</div>
+ <div class="search_input">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.deviceName"
+ @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="queryParams.specificationModel" @keyup.enter.native="refreshTable()"></el-input>
+ </div>
+ </div>
+ <div style="padding-left: 30px;">
+ <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+ <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+ <el-button size="small" type="primary" @click="dialogVisible2 = true">鏂� 澧�</el-button>
+ <el-button size="small" type="primary" @click="handleDownOne">瀵� 鍑�</el-button>
+ </div>
+ </div>
+ <div class="table" v-show="!showData">
+ <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 320px)'"
+ :page="page" @pagination="pagination"></lims-table>
+ </div>
+ <el-dialog :title="isUp ? '璁惧璇︽儏' : '妗f淇'" :visible.sync="dialogVisible" width="70%" top="5vh"
+ :before-close="handleClose">
+ <el-row style="display:flex;justify-content: space-around;max-height: 75vh;overflow-y: auto;">
+ <!-- 宸﹁竟甯冨眬 -->
+ <el-col :span="7">
+ <el-col>
+ <!-- 鍥剧墖 -->
+ <el-image class="img" style="width:100%;height: 320px;marginBottom:16px"
+ :src="javaApi + '/img/' + formData.imageUpload">
+ <div slot="error" class="image-error" style="width: calc(100% -2px);
+ height: 318px;
+ border-radius: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid #EEEEEE;">
+ <i class="el-icon-picture-outline" style="font-size:60px;color:#666666;"></i>
+ </div>
+ </el-image>
+ <!-- 琛ㄥ崟 -->
+ <el-form :label-position="labelPosition" :model="formData" label-width="120px">
+ <el-form-item label="浠櫒鍚嶇О:" required prop="deviceName">
+ <el-input :disabled="isUp" v-model="formData.deviceName" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="浠櫒鍚嶇ОEN:" required>
+ <el-input :disabled="isUp" v-model="formData.enDeviceName" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="瑙勬牸鍨嬪彿:" required>
+ <el-input :disabled="isUp" v-model="formData.specificationModel" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鐢熶骇鍘傚:">
+ <el-input :disabled="isUp" v-model="formData.manufacturer" size="small"></el-input>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ </el-col>
+ <!-- 涓棿甯冨眬 -->
+ <el-col :span="7">
+ <el-form :label-position="labelPosition" :model="formData" label-width="116px">
+ <el-form-item label="鏍″噯鏈嶅姟鏈烘瀯:">
+ <el-input :disabled="isUp" v-model="formData.calibrationServices" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璧勪骇缂栫爜:">
+ <el-input v-model="formData.assetCode" :disabled="isUp" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="浜у湴:">
+ <el-input v-model="formData.origin" :disabled="isUp" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鍑哄巶缂栧彿:">
+ <el-input :disabled="isUp" v-model="formData.factoryNo" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="绠$悊缂栧彿:" required>
+ <el-input :disabled="isUp" v-model="formData.managementNumber" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璐疆鏃ユ湡:">
+ <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.acquisitionDate" type="date"
+ format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="鏍″噯鏈夋晥鏈�:" required>
+ <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.activationDate" type="date"
+ format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璐熻矗浜�:">
+ <el-select v-model="formData.equipmentManager" placeholder="璇烽�夋嫨" size="small" :disabled="isUp"
+ style="width:100%">
+ <el-option v-for="item in responsiblePersonList" :key="item.value" :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="瀛樻斁鐐�:">
+ <el-input :disabled="isUp" v-model="formData.storagePoint" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鎶�鏈寚鏍�:">
+ <el-input :disabled="isUp" v-model="formData.technicalIndicators" :rows="7" type="textarea"
+ size="small"></el-input>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ <!-- 鍙宠竟甯冨眬 -->
+ <el-col :span="7">
+ <el-form :label-position="labelPosition" :model="formData" label-width="140px" ref="ruleForm">
+ <!-- 瀹為獙瀹ゅ垪琛� -->
+ <el-form-item label="鎵�灞為儴闂�:" required>
+ <el-select :disabled="isUp" v-model="formData.subordinateDepartmentsId" placeholder="璇烽�夋嫨" size="small"
+ style="width:100%">
+ <el-option v-for="item in subordinateDepartmentsList" :key="item.value" :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="妫�娴嬮」鐩�:">
+ <el-cascader :disabled="isUp" v-model="formData.insProductIds" :options="options" :show-all-levels="false"
+ :props="props" placeholder="璇烽�夋嫨" size="small" style="width:100%;" :collapse-tags="!isUp" separator=","
+ filterable clearable></el-cascader>
+ </el-form-item>
+ <el-form-item label="鏈�杩戞牎鍑嗘棩鏈�:">
+ <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.lastCalibrationDate"
+ format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="涓嬫鏍″噯鏃ユ湡:">
+ <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.nextCalibrationDate"
+ format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璁惧绫诲瀷:">
+ <el-select :disabled="isUp" v-model="formData.largeCategory" placeholder="璇烽�夋嫨" size="small"
+ style="width:100%">
+ <el-option v-for="item in equipmentList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍗曚环(涓囧厓):">
+ <el-input :disabled="isUp" v-model="formData.unitPrice" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="褰撳墠鐘舵��:" required>
+ <el-select :disabled="isUp" v-model="formData.deviceStatus" placeholder="璇烽�夋嫨" size="small"
+ style="width:100%">
+ <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鏍″噯鍛ㄦ湡锛堟湀锛�:" required>
+ <el-input :disabled="isUp" v-model="formData.calibrationDate" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="琚巿鏉冧汉:">
+ <el-select v-model="formData.authorizedPerson" multiple :disabled="isUp" placeholder="璇烽�夋嫨" size="small"
+ style="width:100%">
+ <el-option v-for="item in responsiblePersonList" :key="item.value" :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍥剧墖:">
+ <div
+ style="border: 1px solid #DCDFE6;border-radius:4px;height:32px;lineHeight:32px;display:flex;justify-content: space-around;font-size: 13px;">
+ <div v-show="formData.imageName" class="picName">{{ formData.imageName }}</div>
+ <el-upload :disabled="isUp" :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false"
+ accept='image/jpg,image/jpeg,image/png' :headers="uploadHeader" :on-change="beforeUpload"
+ :on-error="onError" ref='upload'>
+ <el-button type="text" style="height:30px;padding-top:8px">涓婁紶</el-button>
+ </el-upload>
+ </div>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ </el-row>
+ <span slot="footer" class="dialog-footer">
+ <el-row v-if="!isUp">
+ <el-button @click="handleClose">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitForm" :loading="upLoad">纭� 瀹�</el-button>
+ </el-row>
+ </span>
+ </el-dialog>
+ <!-- 鏂板-->
+ <el-dialog title="鏂板璁惧" top="5vh" :visible.sync="dialogVisible2" width="70%" :before-close="handleClose2">
+ <el-row style="display:flex;justify-content: space-around;">
+ <!-- 宸﹁竟甯冨眬 -->
+ <el-col :span="7">
+ <el-col>
+ <!-- 鍥剧墖 -->
+ <el-image class="img" style="width:100%;height: 320px;margin-bottom:16px"
+ :src="javaApi + '/img/' + formData2.imageUpload">
+ <div slot="error" class="image-error" style="width: calc(100% -2px);
+ height: 318px;
+ border-radius: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid #EEEEEE;">
+ <i class="el-icon-picture-outline" style="font-size:60px;color:#666666;"></i>
+ </div>
+ </el-image>
+ <!-- 琛ㄥ崟 -->
+ <el-form :label-position="labelPosition" :model="formData2" label-width="120px">
+ <el-form-item label="浠櫒鍚嶇О:" required>
+ <el-input v-model="formData2.deviceName" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="浠櫒鍚嶇ОEN:" required>
+ <el-input v-model="formData2.enDeviceName" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="瑙勬牸鍨嬪彿:" required>
+ <el-input v-model="formData2.specificationModel" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鐢熶骇鍘傚:">
+ <el-input v-model="formData2.manufacturer" size="small"></el-input>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ </el-col>
+ <!-- 涓棿甯冨眬 -->
+ <el-col :span="7">
+ <el-form :label-position="labelPosition" :model="formData2" label-width="110px">
+ <!-- <el-form-item label="鐢熶骇鍘傚EN:">
+ <el-input v-model="formData2.factoryNo" size="small"></el-input>
+ </el-form-item> -->
+ <el-form-item label="鏍″噯鏈嶅姟鏈烘瀯:">
+ <el-input v-model="formData2.calibrationServices" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璧勪骇缂栫爜:">
+ <el-input v-model="formData2.assetCode" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="浜у湴:">
+ <el-input v-model="formData2.origin" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鍑哄巶缂栧彿:">
+ <el-input v-model="formData2.factoryNo" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="绠$悊缂栧彿:" required>
+ <el-input v-model="formData2.managementNumber" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璐疆鏃ユ湡:">
+ <el-date-picker style="width:100%" v-model="formData2.acquisitionDate" type="date" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="鏍″噯鏈夋晥鏈�:" required>
+ <el-date-picker style="width:100%" v-model="formData2.activationDate" type="date" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璐熻矗浜�:">
+ <el-select v-model="formData2.equipmentManager" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in responsiblePersonList" :key="item.value" :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="瀛樻斁鐐�:">
+ <el-input v-model="formData2.storagePoint" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鎶�鏈寚鏍�:">
+ <el-input v-model="formData2.technicalIndicators" :rows="7" type="textarea" size="small"></el-input>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ <!-- 鍙宠竟甯冨眬 -->
+ <el-col :span="7">
+ <el-form :label-position="labelPosition" :model="formData2" label-width="120px" ref="ruleForm">
+ <!-- 瀹為獙瀹ゅ垪琛� -->
+ <el-form-item label="鎵�灞為儴闂�:" required>
+ <el-select v-model="formData2.subordinateDepartmentsId" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in subordinateDepartmentsList" :key="item.value" :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="妫�娴嬮」鐩�:">
+ <el-cascader v-model="formData2.insProductIds" :options="options" :show-all-levels="false" :props="props"
+ placeholder="璇烽�夋嫨" size="small" style="width:100%" collapse-tags separator="," filterable
+ clearable></el-cascader>
+ </el-form-item>
+ <el-form-item label="鏈�杩戞牎鍑嗘棩鏈�:">
+ <el-date-picker style="width:100%" v-model="formData2.lastCalibrationDate" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="涓嬫鏍″噯鏃ユ湡:">
+ <el-date-picker style="width:100%" v-model="formData2.nextCalibrationDate" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璁惧绫诲瀷:">
+ <el-select v-model="formData2.largeCategory" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in equipmentList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍗曚环(涓囧厓):">
+ <el-input v-model="formData2.unitPrice" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="褰撳墠鐘舵��:" required>
+ <el-select v-model="formData2.deviceStatus" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鏍″噯鍛ㄦ湡锛堟湀锛�:" required>
+ <el-input v-model="formData2.calibrationDate" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="琚巿鏉冧汉:">
+ <el-select v-model="formData2.authorizedPerson" multiple placeholder="璇烽�夋嫨" size="small"
+ style="width:100%">
+ <el-option v-for="item in responsiblePersonList" :key="item.value" :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍥剧墖:">
+ <div
+ style="border: 1px solid #DCDFE6;border-radius:4px;height:32px;line-height:32px;display:flex;justify-content: space-around;font-size: 13px;">
+ <div v-show="formData2.imageName" class="picName">{{ formData2.imageName }}</div>
+ <el-upload :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false"
+ accept='image/jpg,image/jpeg,image/png' :headers="uploadHeader" :on-change="beforeUpload"
+ :on-error="onError" ref='upload'>
+ <el-button type="text" style="height:30px;padding-top:8px">涓婁紶</el-button>
+ </el-upload>
+ </div>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ </el-row>
+ <span slot="footer" class="dialog-footer">
+ <el-row>
+ <el-button @click="handleClose2">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitForm2" :loading="upLoad2">纭� 瀹�</el-button>
+ </el-row>
+ </span>
+ </el-dialog>
+ <el-dialog title="鏁伴噰閰嶇疆" :visible.sync="dialogVisible3" width="400px">
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>IP锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.ip"></el-input>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>閲囬泦鍦板潃锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.collectUrl"></el-input>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>鍌ㄥ瓨鍦板潃锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.storageUrl"></el-input>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>鍙傜収锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.refer"></el-input>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>X锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.x"></el-input>
+ </div>
+ <div class="search_thing" style="margin-bottom: 14px;">
+ <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>Y锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.y"></el-input>
+ </div>
+ <div class="search_thing">
+ <div class="search_label">鍏紡锛�</div>
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="configForm.formula"></el-input>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-row>
+ <el-button @click="dialogVisible3 = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitForm3" :loading="upLoad3">纭� 瀹�</el-button>
+ </el-row>
+ </span>
+ </el-dialog>
+ <dataAcquisitionConfig v-if="showData" :deviceId="deviceId" />
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import dataAcquisitionConfig from './acquisitionConfig.vue'
+import {
+ obtainItemParameterList,
+ exportEquipmentDetails,
+ getInsProduction,
+ upDeviceParameter,
+ addDeviceParameter,
+ numberCollect,
+ getDeviceParameter,
+ delDeviceParameter,
+} from '@/api/cnas/resourceDemand/device.js'
+import { selectUserCondition } from "@/api/system/user";
+export default {
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ components: {
+ limsTable,
+ dataAcquisitionConfig,
+ },
+ data() {
+ return {
+ dateFormat: 'yyyy-MM-dd',
+ deviceId: '',
+ fileTypeOptions: [
+ { label: 'csv', value: '.csv' },
+ { label: 'db', value: '.db' },
+ { label: 'mdb', value: '.mdb' },
+ { label: 'word', value: '.docx' },
+ { label: 'excel', value: '.xlsx' },
+ { label: 'txt', value: '.txt' },
+ { label: 'png', value: '.png' },
+ ],
+ //鏄惁鏄。妗堜慨璁� true涓嶆槸 false鏄�
+ isUp: true,
+ formData: {
+ authorizedPerson: []
+ },
+ formData2: {
+ imageUpload: '',
+ imageName: '',
+ deviceStatus: '',
+ authorizedPerson: []
+ },
+ value: '',
+ props: { multiple: true, emitPath: false, value: 'id', label: 'name' },
+ options: [],
+ labelPosition: 'right',
+ dialogVisible: false,
+ dialogVisible2: false,
+ addPower: false,
+ showData: false, // 鏁伴噰閰嶇疆椤甸潰
+ tableList: [],
+ addDia: true,
+ addPower: true,
+ //璁惧绫诲瀷鍒楄〃
+ equipmentList: [],
+ // 璐熻矗浜哄垪琛�
+ responsiblePersonList: [],
+ // 鎺堟潈浜哄垪琛�
+ authorizerList: [],
+ // 褰撳墠鐘舵�佸垪琛�
+ deviceStatusList: [],
+ // 鎵�灞為儴闂�
+ subordinateDepartmentsList: [],
+ upLoad: false,
+ upLoad2: false,
+ dialogVisible3: false,
+ upLoad3: false,
+ configForm: {},
+ laboratoryNameIsNull: false,
+ queryParams: {},
+ tableData: [],
+ column: [
+ { label: "璁惧鍚嶇О", prop: "deviceName", dataType: 'link', linkMethod: 'selectAllByOne' },
+ { label: "璁惧鍚嶇ОEN", prop: "enDeviceName" },
+ {
+ label: "瑙勬牸鍨嬪彿",
+ prop: "specificationModel",
+ },
+ { label: "鐢熶骇鍘傚", prop: "manufacturer" },
+ { label: "鍑哄巶缂栧彿", prop: "factoryNo" },
+ { label: "绠$悊缂栧彿", prop: "managementNumber" },
+ { label: "鎶�鏈寚鏍�", prop: "technicalIndicators" },
+ { label: "璐疆鏃ユ湡", prop: "acquisitionDate" },
+ { label: "鍚敤鏃ユ湡", prop: "activationDate" },
+ { label: "绠$悊浜�", prop: "equipmentManagerUser" },
+ { label: "瀛樻斁鐐�", prop: "storagePoint" },
+ { label: "鎵�灞為儴闂�", prop: "laboratoryName" },
+ { label: "妫�楠岄」鐩�", prop: "insProductItem" },
+ { label: "鏍″噯鏈嶅姟鏈烘瀯", prop: "calibrationServices" },
+ { label: "鏈�杩戞牎鍑嗘棩鏈�", prop: "lastCalibrationDateTwo" },
+ { label: "鏈�杩戞牳鏌ユ棩鏈�", prop: "lastCalibrationDate" },
+ { label: "涓嬫鏍″噯鏃ユ湡", prop: "nextCalibrationDateTwo" },
+ { label: "涓嬫鏍告煡鏃ユ湡", prop: "nextCalibrationDate" },
+ {
+ label: "璁惧鍒嗙被", prop: "largeCategory", dataType: "tag",
+ formatData: (params) => {
+ return this.equipmentList.find(m => m.value == params).label
+ },
+ formatType: (params) => {
+ return this.equipmentList.find(m => m.value == params).type
+ }
+ },
+ { label: "鍗曚环", prop: "unitPrice" },
+ {
+ label: "璁惧鐘舵��", prop: "deviceStatus", dataType: "tag",
+ formatData: (params) => {
+ return this.deviceStatusList.find(m => m.value == params).label
+ },
+ formatType: (params) => {
+ return this.deviceStatusList.find(m => m.value == params).type
+ }
+ },
+ { label: "鏍″噯鍛ㄦ湡(鏈�)", prop: "calibrationDate" },
+ {
+ dataType: "action",
+ fixed: "right",
+ label: "鎿嶄綔",
+ operation: [
+ {
+ name: "妗f淇",
+ type: "text",
+ clickFun: (row) => {
+ this.isUpdate(row);
+ },
+ },
+ {
+ name: "鏁伴噰閰嶇疆",
+ type: "text",
+ clickFun: (row) => {
+ this.handleConfig(row);
+ },
+ disabled: (row) => {
+ return row.insProductItem == null || row.insProductItem === ''
+ }
+ },
+ {
+ name: "鍒犻櫎",
+ type: "text",
+ clickFun: (row) => {
+ this.handleDelete(row);
+ },
+ },
+ ],
+ },
+ ],
+ page: {
+ total: 0,
+ size: 10,
+ current: 0,
+ },
+ tableLoading: false,
+ }
+ },
+ computed: {
+ action() {
+ return this.javaApi + '/deviceScope/uploadFile'
+ }
+ },
+ mounted() {
+ this.selectEnumByCategory()
+ this.selectDevicePrincipal()
+ this.obtainItemParameterList()
+ this.getInsProductIds()
+ // 鍒濆鍖�
+ this.clickSidebar(this.clickNodeVal)
+ },
+ methods: {
+ //鍒嗙被
+ handleNotification(cate) {
+ this.queryParams.largeCategory = cate
+ },
+ obtainItemParameterList() {
+ obtainItemParameterList().then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.laboratoryName,
+ value: a.id
+ })
+ })
+ this.subordinateDepartmentsList = data
+ })
+ },
+ getList() {
+ this.tableLoading = true;
+ let param = { laboratoryNameIsNull: this.laboratoryNameIsNull, ...this.queryParams, ...this.page };
+ delete param.total;
+ getDeviceParameter({ ...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.queryParams = {};
+ this.page.current = 1;
+ this.getList();
+ },
+ refreshTable() {
+ this.page.current = 1;
+ this.getList();
+ },
+ // 瀵煎嚭
+ handleDownOne() {
+ this.outLoading = true
+ exportEquipmentDetails().then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '璁惧浠櫒涓�瑙堣〃.doc')
+ })
+ },
+ // 鑾峰彇瀛楀吀
+ selectEnumByCategory() {
+ // 璁惧鐘舵��
+ this.getDicts("device_status").then((response) => {
+ this.deviceStatusList = this.dictToValue(response.data);
+ });
+ // 璁惧鍒嗙被
+ this.getDicts("device_type").then((response) => {
+ this.equipmentList = this.dictToValue(response.data);
+ });
+ },
+ // 鑾峰彇璐熻矗浜哄垪琛�
+ selectDevicePrincipal() {
+ selectUserCondition().then(res => {
+ let data = [];
+ res.data.forEach((a) => {
+ data.push({
+ label: a.name,
+ value: a.id,
+ });
+ });
+ this.responsiblePersonList = data
+ this.authorizerList = data
+ })
+ },
+ getInsProductIds() {
+ getInsProduction().then(res => {
+ this.options = res.data.map((m, i) => {
+ m.id = m.name;
+ let children = m.children.map(n => {
+ n.label = n.name;
+ n.value = n.id;
+ return n
+ })
+ return m
+ })
+ this.options.forEach(item => {
+ if (item.children.length == 0) {
+ item.children = null;
+ } else {
+ item.children.forEach(m => {
+ if (m.children.length == 0) {
+ m.children = null;
+ } else {
+ m.children.forEach(n => {
+ if (n.children && n.children.length == 0) {
+ n.children = null;
+ }
+ })
+ }
+ })
+ }
+ })
+ })
+ },
+ handleClose() {
+ this.formData = {
+ authorizedPerson: []
+ }
+ this.formData2 = {
+ imageUpload: '',
+ imageName: '',
+ authorizedPerson: []
+ }
+ this.dialogVisible = false;
+ this.upLoad = false;
+ },
+ handleClose2() {
+ this.formData = {
+ authorizedPerson: []
+ }
+ this.formData2 = {
+ imageUpload: '',
+ imageName: '',
+ authorizedPerson: []
+ }
+ this.dialogVisible2 = false;
+ this.upLoad = false;
+ },
+ selectAllByOne(row) {
+ this.isUp = true
+ //鎵撳紑寮规
+ this.dialogVisible = true;
+ //row = 鐐瑰嚮瀵瑰簲琛屽��
+ //澶嶅埗缁檉ormData
+ this.formData = this.HaveJson(row);
+ console.log(row.insProductIds + 'valll');
+ this.formData.insProductIds = row.insProductIds ? row.insProductIds.split(',') : [];
+ },
+ isUpdate(row) {
+ //淇敼 isUp 涓烘。妗堜慨鏀�
+ this.isUp = false
+ //鎵撳紑寮规
+ this.dialogVisible = true;
+ //row = 鐐瑰嚮瀵瑰簲琛屽�间竴琛屽��
+ //澶嶅埗缁檉ormData
+ this.formData = this.HaveJson(row);
+ if (typeof (row.insProductIds) === 'number') {
+ row.insProductIds = row.insProductIds + ''
+ }
+ this.formData.deviceStatus = this.formData.deviceStatus + ''
+ this.formData.insProductIds = row.insProductIds ? row.insProductIds.split(',') : [];
+ // 灏嗘椂闂存牸寮忎负yyyy-MM-dd 杩涜杞崲
+ const dateRegex = /^\d{4}-\d{2}-\d{2}$/
+ Object.keys(this.formData).forEach(key => {
+ if (dateRegex.test(this.formData[key])) {
+ this.formData[key] = `${this.formData[key]} 00:00:00`
+ }
+ })
+ },
+ beforeUpload(file) {
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+ this.$refs.upload.clearFiles()
+ return false;
+ } else {
+ return true;
+ }
+ },
+ onError(err, file, fileList) {
+ this.$message.error('涓婁紶澶辫触')
+ this.$refs.upload.clearFiles()
+ },
+ // 涓婁紶鍥剧墖鎴愬姛
+ handleSuccessUpImg(response,) {
+ if (response.code == 200) {
+ this.formData.imageUpload = response.data.url;
+ this.formData.imageName = response.data.name;
+ }
+ },
+ handleSuccessUpImg2(response) {
+ if (response.code == 200) {
+ this.$nextTick(() => {
+ this.formData.imageUpload = response.data.url;
+ this.formData.imageName = response.data.name;
+ this.formData2.imageUpload = response.data.url;
+ this.formData2.imageName = response.data.name;
+ })
+ }
+ },
+ submitForm() {
+ if (!this.formData.deviceName) {
+ this.$message.error('鏈緭鍏ヤ华鍣ㄥ悕绉�')
+ return
+ }
+ if (!this.formData.enDeviceName) {
+ this.$message.error('鏈緭鍏ヤ华鍣ㄥ悕绉癊N')
+ return
+ }
+ if (!this.formData.specificationModel) {
+ this.$message.error('鏈緭鍏ヨ鏍煎瀷鍙�')
+ return
+ }
+ if (!this.formData.managementNumber) {
+ this.$message.error('鏈緭鍏ョ鐞嗙紪鍙�')
+ return
+ }
+ if (!this.formData.activationDate) {
+ this.$message.error('鏈緭鍏ユ牎鍑嗘湁鏁堟湡')
+ return
+ }
+ if (!this.formData.subordinateDepartmentsId) {
+ this.$message.error('鏈�夋嫨鎵�灞為儴闂�')
+ return
+ }
+ if (this.formData.deviceStatus === '' || this.formData.deviceStatus === null) {
+ this.$message.error('鏈�夋嫨褰撳墠鐘舵��')
+ return
+ }
+ if (!this.formData.calibrationDate) {
+ this.$message.error('鏈緭鍏ユ牎鍑嗗懆鏈燂紙鏈堬級')
+ return
+ }
+ delete this.formData.createTime
+ delete this.formData.updateTime
+ delete this.formData.createUser
+ delete this.formData.updateUser
+ const formData = this.HaveJson(this.formData)
+ formData.insProductIds = formData.insProductIds ? formData.insProductIds.join() : ''
+ if (formData.authorizedPerson.length === 0) {
+ formData.authorizedPerson = ''
+ } else {
+ formData.authorizedPerson = JSON.stringify(formData.authorizedPerson)
+ }
+ this.upLoad = true;
+ upDeviceParameter(formData).then(res => {
+ this.$message.success('淇敼鎴愬姛')
+ this.upLoad = false
+ this.refreshTable('page')
+ this.dialogVisible = false
+ }).catch(e => {
+ this.$message.error('淇敼澶辫触')
+ this.dialogVisible = false
+ this.upLoad = false
+ })
+ },
+ // 鎻愪氦妗f淇--鏂板
+ submitForm2() {
+ if (!this.formData2.deviceName) {
+ this.$message.error('鏈緭鍏ヤ华鍣ㄥ悕绉�')
+ return
+ }
+ if (!this.formData2.enDeviceName) {
+ this.$message.error('鏈緭鍏ヤ华鍣ㄥ悕绉癊N')
+ return
+ }
+ if (!this.formData2.specificationModel) {
+ this.$message.error('鏈緭鍏ヨ鏍煎瀷鍙�')
+ return
+ }
+ if (!this.formData2.managementNumber) {
+ this.$message.error('鏈緭鍏ョ鐞嗙紪鍙�')
+ return
+ }
+ if (!this.formData2.activationDate) {
+ this.$message.error('鏈緭鍏ユ牎鍑嗘湁鏁堟湡')
+ return
+ }
+ if (!this.formData2.deviceStatus) {
+ this.$message.error('鏈�夋嫨褰撳墠鐘舵��')
+ return
+ }
+ if (!this.formData2.calibrationDate) {
+ this.$message.error('杈撳叆鏍″噯鍛ㄦ湡锛堟湀锛�')
+ return
+ }
+ const formData = this.HaveJson(this.formData2)
+ formData.insProductIds = formData.insProductIds ? formData.insProductIds.join() : ''
+ if (formData.authorizedPerson.length === 0) {
+ formData.authorizedPerson = ''
+ } else {
+ formData.authorizedPerson = JSON.stringify(formData.authorizedPerson)
+ }
+ this.upLoad2 = true;
+ addDeviceParameter(formData).then(res => {
+ this.$message.success('鎻愪氦鎴愬姛')
+ this.upLoad2 = false
+ this.refreshTable('page')
+ this.dialogVisible2 = false
+ this.formData2 = {
+ imageUpload: '',
+ imageName: '',
+ authorizedPerson: []
+ }
+ }).catch(e => {
+ this.$message.error('鎻愪氦澶辫触')
+ this.dialogVisible2 = false
+ this.upLoad2 = false
+ })
+ },
+ handleConfig(row) {
+ let list = []
+ if (row.insProductItem) {
+ list = row.insProductItem.split(';')
+ }
+ let list2 = []
+ list.map((item) => {
+ const obj = Object.assign({
+ deviceId: row.id,
+ insProductItem: item,
+ })
+ list2.push(obj)
+ })
+ this.tableList = list2
+ this.deviceId = row.id
+ this.$nextTick(() => {
+ this.showData = true
+ })
+ },
+ closeDataVue() {
+ this.clickSidebar(this.clickNodeVal)
+ this.showData = false
+ },
+ submitForm3() {
+ if (!this.configForm.ip) {
+ this.$message.error('璇峰~鍐橧P');
+ return
+ }
+ if (!this.configForm.collectUrl) {
+ this.$message.error('璇峰~鍐欓噰闆嗗湴鍧�');
+ return
+ }
+ if (!this.configForm.storageUrl) {
+ this.$message.error('璇峰~鍐欏偍瀛樺湴鍧�');
+ return
+ }
+ if (!this.configForm.refer) {
+ this.$message.error('璇峰~鍐欏弬鐓�');
+ return
+ }
+ if (!this.configForm.x) {
+ this.$message.error('璇峰~鍐橷');
+ return
+ }
+ if (!this.configForm.y) {
+ this.$message.error('璇峰~鍐橸');
+ return
+ }
+
+ this.upLoad3 = true
+ numberCollect(this.configForm).then(res => {
+ this.upLoad3 = false
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.refreshTable('page')
+ this.dialogVisible3 = false
+ }).catch(e => {
+ this.$message.error('鎿嶄綔澶辫触')
+ this.dialogVisible3 = false
+ this.upLoad3 = false
+ })
+ },
+ // 鐐瑰嚮渚ц竟鏍忓埛鏂�
+ clickSidebar(clickNodeVal) {
+ this.laboratoryNameIsNull = false
+ // 鏄惁瀛樺湪value锛屽瓨鍦╲alue浠h〃涓轰笁绾�
+ if (!clickNodeVal.value) {
+ this.list = [];
+ this.queryParams.laboratoryName = null
+ this.queryParams.storagePoint = null
+ // 绛変簬1浠h〃涓烘爲鐨勪竴绾э紝label涓洪儴闂�
+ if (clickNodeVal.label == '鍏朵粬') {
+ this.laboratoryNameIsNull = true
+ this.refreshTable('page')
+ return
+ }
+ if (clickNodeVal.level == 1) {
+ this.queryParams.laboratoryName = clickNodeVal.label
+ // 绛変簬浜岀骇銆俵abel涓哄瓨鍌ㄥ湴鐐�
+ } else if (clickNodeVal.level == 2) {
+ // 鍏朵粬琛ㄧず娌℃湁閰嶇疆瀹為獙瀹わ紝鍙厤缃簡鍦扮偣
+ if (clickNodeVal.parent.label == '鍏朵粬') {
+ this.laboratoryNameIsNull = true
+ } else {
+ this.queryParams.laboratoryName = clickNodeVal.parent.label
+ }
+ this.queryParams.storagePoint = clickNodeVal.label
+ }
+ this.refreshTable('page')
+ }
+ },
+ handleDelete(row) {
+ this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ delDeviceParameter({ id: row.id }).then((res) => {
+ this.$message.success("鍒犻櫎鎴愬姛");
+ this.refresh();
+ });
+ })
+ .catch(() => { });
+ },
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ this.clickSidebar(newVal)
+ }
+ }
+}
+</script>
+
+<style scoped>
+.role_manage {
+ width: 100%;
+ height: 100%;
+}
+
+.title {
+ line-height: 15px;
+}
+
+.search {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-top: 10px;
+}
+
+.search_thing {
+ width: 14em;
+ display: flex;
+ align-items: center;
+}
+
+.search_label {
+ width: 80px;
+ font-size: 14px;
+ text-align: right;
+}
+
+.search_input {
+ width: calc(100% - 80px);
+}
+
+.table {
+ margin-top: 12px;
+ background-color: #fff;
+ height: calc(100vh - 17em);
+}
+
+.el-form-item {
+ margin-bottom: 16px;
+}
+
+.picName {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ word-break: break-all;
+ width: 120px;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/operationInstruction.vue b/src/views/CNAS/resourceDemand/device/component/operationInstruction.vue
new file mode 100644
index 0000000..8ab8536
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/operationInstruction.vue
@@ -0,0 +1,536 @@
+<!-- 浣滀笟鎸囧涔� -->
+<template>
+ <div>
+ <div style="margin: 10px 0;text-align: right">
+ <el-button size="small" type="primary" @click="getList">鍒锋柊</el-button>
+ <el-button size="small" type="primary" @click="dialogVisible = true">鍙楁帶鐢宠</el-button>
+ </div>
+ <el-table :data="tableData" border 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 label="鐢宠缂栧彿" min-width="150" prop="applicationNumber"></el-table-column>
+ <el-table-column label="璁惧鍚嶇О" min-width="150" prop="deviceName"></el-table-column>
+ <el-table-column label="璁惧缂栧彿" min-width="150" prop="deviceNumber"></el-table-column>
+ <el-table-column label="璁惧鍨嬪彿" min-width="150" prop="deviceModel"></el-table-column>
+ <el-table-column label="鏂囦欢缂栧彿" min-width="150" prop="documentNumber"></el-table-column>
+ <el-table-column label="鏂囦欢鍚嶅瓧" min-width="150" prop="fileName"></el-table-column>
+ <el-table-column label="鏂囨。璇存槑" min-width="150" prop="documentNote"></el-table-column>
+ <el-table-column label="涓婁紶浜�" min-width="150" prop="uploaderName"></el-table-column>
+ <el-table-column label="涓婁紶鏃堕棿" min-width="150" prop="updateTime"></el-table-column>
+ <el-table-column label="鐢熸晥鏃堕棿" min-width="150" prop="entryIntoForceTime"></el-table-column>
+ <el-table-column label="瀹℃壒浜�" min-width="150" prop="approverName"></el-table-column>
+ <el-table-column label="瀹℃壒鐘舵��" min-width="150" prop="status">
+ <template v-slot="scope">
+ {{ scope.row.status === true ? '閫氳繃' : scope.row.status === false ? '涓嶉�氳繃' : '鏈鏍�' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="180" fixed="right" prop="name">
+ <template v-slot="scope">
+ <el-button type="text" size="small" @click="downloadFile(scope.row.fileSystemName)">涓嬭浇</el-button>
+ <el-button type="text" size="small" style="color: red;"
+ @click="deleteHomeworkGuidebook(scope.row)">鍒犻櫎</el-button>
+ <el-button type="text" size="small" @click="instructionEditFun(scope.row)">缂栬緫</el-button>
+ <el-button type="text" size="small" @click="approval(scope.row)">瀹℃壒</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="1"
+ :page-sizes="[10, 20, 30, 50, 100]" :page-size="search.size" layout="->,total, sizes, prev, pager, next, jumper"
+ :total="search.total">
+ </el-pagination>
+ <el-dialog :visible.sync="dialogVisible" title="鍙楁帶鐢宠" width="60%">
+ <div style="height: 60vh; overflow-y: auto; overflow-x: hidden;">
+ <el-form ref="form1" label-width="110px" :model="instructionForm">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鐢宠缂栧彿:">
+ <el-input v-model="instructionForm.applicationNumber" disabled size="small" clearable></el-input>
+ </el-form-item>
+ <el-form-item label="闄勪欢锛�" style="float: left;">
+ <el-upload ref="uploadFile" :action="action" :before-remove="beforeRemove" :file-list="fileList1"
+ :headers="uploadHeader" :limit="1" :on-error="onError" :on-exceed="handleExceed"
+ :on-remove="handleRemove1" :on-success="onSuccess1" class="upload-demo" multiple>
+ <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐢宠閮ㄩ棬:">
+ <el-input v-model="instructionForm.applicationDepartment" clearable size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璐d换浜�:">
+ <el-input v-model="instructionForm.personLiable" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鍙楁帶鐢宠璇存槑:" prop="controlledApplicationDescription"
+ :rules="[{ required: true, message: '璇疯緭鍏ュ彈鎺х敵璇疯鏄�', trigger: 'blur' }]">
+ <el-input v-model="instructionForm.controlledApplicationDescription" type="textarea"
+ clearable></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div style="text-align: right; margin-bottom: 10px">
+ <el-button size="small" type="primary" @click="openAddDia">娣诲姞鍙楁帶鏂囦欢</el-button>
+ <el-button size="small" @click="delFile">鍒犻櫎</el-button>
+ </div>
+ <el-table :data="documentTableData" border style="width: 100%;" tooltip-effect="dark" :row-key="getRowKey"
+ @selection-change="handleSelectionChange" height="29em">
+ <el-table-column type="selection" width="55%">
+ </el-table-column>
+ <el-table-column label="搴忓彿" prop="id" type="index" width="60"></el-table-column>
+ <el-table-column label="璁惧鍚嶇О" prop="deviceName" show-overflow-tooltip min-width="125"></el-table-column>
+ <el-table-column label="璁惧缂栧彿" prop="deviceNumber" show-overflow-tooltip min-width="125"></el-table-column>
+ <el-table-column label="璁惧鍨嬪彿" prop="deviceModel" show-overflow-tooltip min-width="125"></el-table-column>
+ <el-table-column label="鏂囨。缂栧彿" prop="documentNumber" show-overflow-tooltip min-width="125"></el-table-column>
+ <el-table-column label="鏂囦欢鍚嶇О" prop="fileName" show-overflow-tooltip min-width="125"></el-table-column>
+ <el-table-column label="涓婁紶浜�" prop="author" show-overflow-tooltip min-width="125"></el-table-column>
+ <el-table-column label="涓婁紶鏃堕棿" prop="updateTime" show-overflow-tooltip min-width="125"></el-table-column>
+ <el-table-column min-width="100" label="鎿嶄綔" fixed="right">
+ <template v-slot="scope">
+ <el-button type="text" size="small" @click="downloadFile(scope.row.fileSystemName)">涓嬭浇</el-button>
+ <el-button type="text" @click="editFun(scope.row, scope.$index)">缂栬緫</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <span slot="footer">
+ <el-button @click="dialogVisible = false" size="small">鍙� 娑�</el-button>
+ <el-button size="small" type="primary" @click="submitFun">鎻愪氦</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="dialogVisible1" title="娣诲姞璁惧浣滀笟鎸囧涔�" width="40%">
+ <div style="height: 50vh;">
+ <el-form ref="form" :model="form" label-width="90px">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鏂囦欢绫诲瀷:" prop="documentType"
+ :rules="[{ required: true, message: '璇疯緭鍏ユ枃浠剁被鍨�', trigger: 'blur' }]">
+ <el-input v-model="form.documentType" clearable size="small" placeholder="璇疯緭鍏ユ枃浠剁被鍨�"></el-input>
+ </el-form-item>
+ <el-form-item label="璁惧鍚嶇О:" prop="deviceName"
+ :rules="[{ required: true, message: '璇烽�夋嫨璁惧', trigger: 'change' }]">
+ <el-select v-model="form.deviceName" size="small" clearable style="width: 100%" placeholder="璇烽�夋嫨璁惧鍚嶇О"
+ @change="onDeviceNameChange" filterable>
+ <el-option v-for="item in deviceNameOption" :key="item.id" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏂囨。缂栧彿:" prop="documentNumber"
+ :rules="[{ required: true, message: '璇疯緭鍏ユ枃妗g紪鍙�', trigger: 'blur' }]">
+ <el-input v-model="form.documentNumber" size="small" clearable placeholder="璇疯緭鍏ユ枃妗g紪鍙�"></el-input>
+ </el-form-item>
+ <el-form-item label="绠$悊缂栧彿:">
+ <el-input v-model="form.deviceNumber" size="small" clearable disabled placeholder="璇疯緭鍏ョ鐞嗙紪鍙�"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏂囦欢鐗堟湰:" prop="documentVersion"
+ :rules="[{ required: true, message: '璇疯緭鍏ユ枃浠剁増鏈�', trigger: 'blur' }]">
+ <el-input v-model="form.documentVersion" size="small" placeholder="璇疯緭鍏ユ枃浠剁増鏈�" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浣滆��:" prop="author" :rules="[{ required: true, message: '璇疯緭鍏ヤ綔鑰�', trigger: 'blur' }]">
+ <el-input v-model="form.author" size="small" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎻愪氦鏃ユ湡:" prop="submitDate"
+ :rules="[{ required: true, message: '璇烽�夋嫨鎻愪氦鏃ユ湡', trigger: 'change' }]">
+ <el-date-picker v-model="form.submitDate" format="yyyy-MM-dd" style="width: 100%" size="small" clearable
+ placeholder="閫夋嫨鏃ユ湡" type="date" value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鏂囨。璇存槑:" prop="documentNote"
+ :rules="[{ required: true, message: '璇疯緭鍏ユ枃妗h鏄�', trigger: 'blur' }]">
+ <el-input v-model="form.documentNote" placeholder="璇疯緭鍏ユ枃妗h鏄�" type="textarea" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="闄勪欢锛�" style="float: left;">
+ <el-upload ref="uploadFile" :action="action" :before-remove="beforeRemove" :file-list="fileList"
+ :headers="uploadHeader" :limit="1" :on-error="onError" :on-exceed="handleExceed"
+ :on-remove="handleRemove" :on-success="onSuccess" class="upload-demo" multiple>
+ <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </div>
+ <span slot="footer">
+ <el-button @click="closeDia" size="small">鍙� 娑�</el-button>
+ <el-button type="primary" @click="addFile" size="small">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import fileDownload from "@/utils/file";
+import {
+ approvalOfHomeworkInstructionManual,
+ homeworkGuidebook,
+ homeworkGuidebookEditor,
+ newHomeworkGuidebookAdded,
+ deleteHomeworkGuidebook,
+ pageByPageQueryOfHomeworkInstructions,
+ selectDeviceParameter,
+} from '@/api/cnas/resourceDemand/device.js'
+export default {
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ name: '',
+ components: {},
+ data() {
+ return {
+ search: {
+ size: 20,
+ current: 1,
+ total: 0
+ },
+ dialogVisible: false,
+ dialogVisible1: false,
+ value: '',
+ selectRow: null,
+ device: null,
+ tableDataIndex: '',
+ form: {
+ documentType: '',
+ documentNumber: '',
+ deviceName: '',
+ deviceModel: '',
+ deviceNumber: '',
+ fileName: '',
+ fileSystemName: '',
+ submitDate: '',
+ documentNote: '',
+ },
+ tableData: [],
+ documentTableData: [],
+ formData: {},
+ fileList: [],
+ fileList1: [],
+ laboratoryNameIsNull: false,
+ devices: [], //璁惧鍒楄〃鏁版嵁
+ deviceNameOption: [], //璁惧鍚嶇О涓嬫媺妗嗘暟鎹�
+ entity: {
+ deviceName: null,
+ laboratoryName: '',
+ storagePoint: ''
+ },
+ selectedRow: [],
+ instructionForm: {
+ applicationNumber: '', // 鐢宠缂栧彿
+ applicationDepartment: '', // 鐢宠閮ㄩ棬
+ personLiable: '', // 璐d换浜�
+ controlledApplicationDescription: '', // 鍙楁帶鐢宠璇存槑
+ }
+ }
+ },
+ mounted() {
+ this.getAllDevice();
+ this.getList()
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal) {
+ this.getList()
+ this.clickSidebar(newVal)
+ }
+ },
+ dialogVisible(newVal) {
+ if (newVal === false) {
+ this.instructionForm = {}
+ this.documentTableData = []
+ this.fileList1 = []
+ }
+ }
+ },
+ methods: {
+ approval(row) {
+ this.$confirm('鏄惁瀹℃壒閫氳繃锛�', '鎻愮ず', {
+ confirmButtonText: '閫氳繃',
+ cancelButtonText: '涓嶉�氳繃',
+ type: 'warning'
+ }).then(() => {
+ this.approvalFun(row.id, true)
+ }).catch(() => {
+ this.approvalFun(row.id, false)
+ });
+ },
+ approvalFun(id, status) {
+ approvalOfHomeworkInstructionManual({ id, status }).then(res => {
+ this.getList()
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ })
+
+ },
+ getRowKey(row) {
+ return row.index
+ },
+ deleteHomeworkGuidebook(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ homeworkGuidebook({
+ id: row.id,
+ instructionId: row.instructionId
+ }).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ this.getList()
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ downloadFile(fileName) {
+ let state = /\.(jpg|jpeg|png|gif)$/i.test(fileName)
+ if (state) {
+ let url = this.javaApi + '/img/' + fileName;
+ fileDownload.downloadIamge(url, fileName)
+ } else {
+ const url = this.javaApi + '/word/' + fileName
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = fileName;
+ link.click();
+ this.$message.success('涓嬭浇鎴愬姛')
+ }
+ },
+ instructionEditFun(row) {
+ this.dialogVisible = true
+ homeworkGuidebookEditor({ instructionId: row.instructionId }).then(res => {
+ if (res.code == 200) {
+ this.instructionForm = res.data.instruction;
+ if (this.instructionForm.fileSystemName) {
+ this.fileList1.push({ name: this.instructionForm.fileName })
+ }
+ this.documentTableData = res.data.list;
+ // 鍒犻櫎鐢�
+ this.documentTableData.forEach((v, k) => {
+ v.index = k
+ })
+ }
+ })
+ },
+ handleSizeChange(val) {
+ this.search.size = val
+ this.getList()
+ },
+ handleCurrentChange(val) {
+ this.search.current = val
+ this.getList()
+ },
+ submitFun() {
+ this.$refs.form1.validate((valid) => {
+ if (valid) {
+ this.instructionForm.feTempHumRecordList = this.documentTableData
+ newHomeworkGuidebookAdded(this.instructionForm).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鎿嶄綔鎴愬姛锛�')
+ this.dialogVisible = false
+ this.getList()
+ }
+ })
+ } else {
+ return false;
+ }
+ });
+ },
+ clickSidebar(clickNodeVal) {
+ this.laboratoryNameIsNull = false
+ // 鏄惁瀛樺湪value锛屽瓨鍦╲alue浠h〃涓轰笁绾�
+ if (!clickNodeVal.value) {
+ this.list = [];
+ this.entity.laboratoryName = null
+ this.entity.storagePoint = null
+ // 绛変簬1浠h〃涓烘爲鐨勪竴绾э紝label涓洪儴闂�
+ if (clickNodeVal.label === '鍏朵粬') {
+ this.laboratoryNameIsNull = true
+ this.getAllDevice()
+ return
+ }
+ if (clickNodeVal.level === 1) {
+ this.entity.laboratoryName = clickNodeVal.label
+ // 绛変簬浜岀骇銆俵abel涓哄瓨鍌ㄥ湴鐐�
+ } else if (clickNodeVal.level === 2) {
+ // 鍏朵粬琛ㄧず娌℃湁閰嶇疆瀹為獙瀹わ紝鍙厤缃簡鍦扮偣
+ if (clickNodeVal.parent.label === '鍏朵粬') {
+ this.laboratoryNameIsNull = true
+ } else {
+ this.entity.laboratoryName = clickNodeVal.parent.label
+ }
+ this.entity.storagePoint = clickNodeVal.label
+ }
+ this.getAllDevice()
+ }
+ },
+ // 鏂板
+ addFile() {
+ this.$refs.form.validate((valid) => {
+ if (valid) {
+ if (this.tableDataIndex !== undefined) {
+ this.$set(this.documentTableData, this.tableDataIndex, this.form)
+ this.dialogVisible1 = false;
+ this.$message.success('淇敼鎴愬姛');
+ console.log('this.documentTableData---edit', this.documentTableData[this.tableDataIndex])
+ } else {
+ this.documentTableData.push(this.form);
+ this.dialogVisible1 = false;
+ this.$message.success('娣诲姞鎴愬姛');
+ }
+ } else {
+ return false;
+ }
+ });
+ },
+ openAddDia() {
+ this.dialogVisible1 = true
+ this.tableDataIndex = undefined;
+ this.form = {}
+ this.form.deviceName = this.clickNodeVal.label
+ this.onDeviceNameChange()
+ this.fileList = []
+
+ },
+ editFun(row, index) {
+ this.form = { ...row }
+ this.tableDataIndex = index;
+ console.log('this.tableDataIndex', this.tableDataIndex)
+ // 鍥炴樉鍒楄〃
+ if (this.form.fileSystemName) {
+ this.fileList.push({ name: this.form.fileName })
+ }
+ this.dialogVisible1 = true
+ },
+ closeDia() {
+ this.dialogVisible1 = false
+ this.$refs['form'].resetFields()
+ this.fileList = []
+ },
+ handleSelectionChange(selected) {
+ this.selectedRow = selected
+ },
+ async delFile() {
+ if (this.selectedRow.length === 0) {
+ this.$message.error('璇烽�夋嫨瑕佸垹闄ょ殑閫夐」');
+ return;
+ }
+ // 鍒犻櫎淇濆瓨濂界殑鏁版嵁
+ let ids = this.selectedRow
+ .filter(item => item.id !== undefined)
+ .map(item => item.id).join(',');
+ //鏈夐敊璇�
+ const res = await deleteHomeworkGuidebook({ ids });
+ if (res.code === 200) {
+ // 鍒犻櫎瑙嗗浘鐨勬暟鎹�
+ for (const resKey in this.selectedRow) {
+ this.documentTableData = this.documentTableData.filter(item => item.index === this.selectedRow[resKey].index)
+ }
+ this.$message.success({
+ message: '鍒犻櫎鎴愬姛',
+ type: 'success'
+ });
+ }
+ },
+ onSuccess(response, file, fileList) {
+ this.form.fileName = file.name;
+ this.form.fileSystemName = response.data;
+ },
+ onSuccess1(response, file, fileList) {
+ this.instructionForm.fileName = file.name;
+ this.instructionForm.fileSystemName = response.data;
+ },
+ onError(error, file, fileList) {
+ this.$message.error('涓婁紶澶辫触:', error, file, fileList);
+ },
+ handleRemove(file, fileList) {
+ this.form.fileName = ''
+ this.form.fileSystemName = ''
+ },
+ handleRemove1(file, fileList) {
+ this.form.fileName = ''
+ this.form.fileSystemName = ''
+ },
+ beforeRemove(file) {
+ return this.$confirm(`纭畾绉婚櫎 ${file.name}锛焋)
+ },
+ handleExceed(files, fileList) {
+ this.$message.warning(`褰撳墠闄愬埗閫夋嫨 1 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠躲�俙);
+ },
+ getList() {
+ pageByPageQueryOfHomeworkInstructions({ ...this.search }).then(res => {
+ if (res.code == 200) {
+ this.tableData = res.data.records;
+ this.search.total = res.data.total
+ }
+ })
+ },
+ getAllDevice() {
+ selectDeviceParameter({ laboratoryNameIsNull: this.laboratoryNameIsNull }).then(res => {
+ if (res.code == 200) {
+ this.devices = res.data.records;
+ this.updateDeviceNameOptions();
+ }
+ })
+ },
+ // 鏇存柊璁惧鍚嶇О涓嬫媺妗嗙殑閫夐」
+ updateDeviceNameOptions() {
+ this.deviceNameOption = this.devices.map(device => ({
+ value: device.deviceName,
+ label: device.deviceName
+ }));
+ },
+ // 璁惧鍚嶇О鏀瑰彉鏃惰Е鍙�
+ onDeviceNameChange() {
+ // 鏍规嵁閫変腑鐨勮澶囧悕绉帮紝鏇存柊绠$悊缂栧彿涓嬫媺妗嗙殑閫夐」
+ const selectedDevice = this.devices.find(device => device.deviceName === this.form.deviceName);
+ if (selectedDevice) {
+ this.form.deviceNumber = selectedDevice.managementNumber;
+ this.form.deviceModel = selectedDevice.specificationModel;
+ this.form.deviceId = selectedDevice.id
+ }
+ },
+ },
+ computed: {
+ action() {
+ return this.javaApi + '/personBasicInfo/saveCNASFile'
+ }
+ },
+}
+</script>
+
+<style scoped>
+h4 {
+ font-weight: 400;
+ font-size: 16px;
+ display: flex;
+ justify-content: flex-end;
+ margin: 10px 0;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/operationOverview.vue b/src/views/CNAS/resourceDemand/device/component/operationOverview.vue
new file mode 100644
index 0000000..b420b3e
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/operationOverview.vue
@@ -0,0 +1,219 @@
+<!-- 璁惧杩愯鎬昏 -->
+<template>
+ <div>
+ <div class="page">
+ <echart-module id="'page-left'" :config="chartConfig" :datas="chartData" class="page-left"></echart-module>
+ <div class="page-right">
+ <div class="form-item">
+ <label>鍚敤鏃堕暱(骞�)</label>
+ <span>{{ deviceData.usedYears }}</span>
+ </div>
+ <div class="form-item">
+ <label>鏁呴殰娆℃暟</label>
+ <span>{{ deviceData.faultCount }}</span>
+ </div>
+ <div class="form-item">
+ <label>鏈�杩戞晠闅滄棩鏈�</label>
+ <span>{{ deviceData.faultDate }}</span>
+ </div>
+ <div class="form-item">
+ <label>鏈�杩戞牎鍑嗘棩鏈�</label>
+ <span>{{ deviceData.lastCalibrationDate }}</span>
+ </div>
+ <div class="form-item">
+ <label>涓嬫鏍″噯鏃ユ湡</label>
+ <span>{{ deviceData.nextCalibrationDate }}</span>
+ </div>
+ <div class="form-item">
+ <label>鏍″噯鎬荤粨璁�</label>
+ <span :class="formatColorStyle(deviceData.calibrateStatus)">{{ deviceData.calibrateStatus }}</span>
+ </div>
+ <div class="form-item">
+ <label>鏈�杩戞牳鏌ユ棩鏈�</label>
+ <span>{{ deviceData.lastExamineDate }}</span>
+ </div>
+ <div class="form-item">
+ <label>涓嬫鏍告煡鏃ユ湡</label>
+ <span>{{ deviceData.nextExamineDate }}</span>
+ </div>
+ <div class="form-item">
+ <label>鏍告煡鎬荤粨璁�</label>
+ <span :class="formatColorStyle(deviceData.examineStatus)">{{ deviceData.examineStatus }}</span>
+ </div>
+ <div class="form-item">
+ <label>璁惧杩愯鐘舵��</label>
+ <span :class="formatColorStyle(deviceData.deviceStatus)">{{ deviceData.deviceStatus }}</span>
+ </div>
+ <div class="form-item">
+ <label>鏈�杩戠淮鎶ゆ棩鏈�</label>
+ <span>{{ deviceData.maintenanceDate }}</span>
+ </div>
+ <div class="form-item">
+ <label>涓嬫缁存姢鏃ユ湡</label>
+ <span>{{ deviceData.nextMaintenanceDate }}</span>
+ </div>
+ <div class="form-item">
+ <label>缁存姢绫诲瀷</label>
+ <span>{{ deviceData.maintenanceType }}</span>
+ </div>
+ <div class="form-item">
+ <label>娴嬮噺椤圭洰</label>
+ <span>{{ deviceData.insProduct }}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import EchartModule from '@/components/Echart/echart.vue'
+
+export default {
+ components: { EchartModule },
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ data() {
+ return {
+ chartConfig: {
+ height: '',
+ isLoading: true,
+ type: 'gauge'
+ },
+ chartData: {
+ formatter: "宸茶繃鏍″噯鏃ユ湡鐧惧垎姣�: {c}%",
+ color: [
+ [0.3, '#21a700'],
+ [0.7, '#0066ff'],
+ [1, '#d80000']
+ ],
+ value: 0,
+ },
+ form: {
+ value1: ''
+ },
+ formData: {
+ usedAge: 12
+ },
+ //璁惧鏁版嵁鏀堕泦
+ deviceData: {
+
+ }
+ }
+ },
+ mounted() {
+ //鑾峰彇璁惧鏁呴殰鐨勪俊鎭�
+ this.getDeviceInfo(this.clickNodeVal.value);
+ },
+ methods: {
+ formatColorStyle(status) {
+ if (status == null || status == "" || status == undefined) {
+ return ""
+ }
+ let styleStr = ''
+ switch (status) {
+ case "鍚堟牸":
+ styleStr = 'success'
+ break;
+ case "涓嶅悎鏍�":
+ styleStr = 'failed'
+ break;
+ case "鍏朵粬":
+ styleStr = 'other'
+ break;
+ case "姝e父":
+ styleStr = 'success'
+ break;
+ case "缁翠慨":
+ styleStr = 'other'
+ break;
+ case "鍋滅敤":
+ styleStr = 'stop'
+ break;
+ case "鎶ュ簾":
+ styleStr = 'failed'
+ break;
+ }
+ return styleStr;
+ },
+ //鑾峰彇璁惧杩愯鎬昏淇℃伅
+ getDeviceInfo(deviceId) {
+ this.$axios.get(this.$api.deviceFault.getDevice + "/" + deviceId).then(res => {
+ if (res.code == 200) {
+ this.deviceData = res.data
+ this.chartData.value = res.data.progress
+ }
+ })
+ },
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ // 鏄惁瀛樺湪value锛屽瓨鍦╲alue浠h〃涓轰笁绾�
+ if (this.clickNodeVal.value) {
+ this.getDeviceInfo(newVal.value)
+ }
+ }
+ }
+}
+</script>
+
+<style scoped>
+.page {
+ width: 100%;
+ height: 100vh;
+ display: flex;
+}
+
+.page-left {
+ width: 420px;
+ height: 420px;
+ margin-top: 40px;
+ margin-right: 40px;
+}
+
+.page-right {
+ flex: 1;
+ height: calc(100% - 200px);
+ overflow: scroll;
+ /* background: red; */
+}
+
+.form-item {
+ line-height: 42px;
+ font-size: 14px;
+}
+
+.page-right label {
+ color: #999;
+ width: 110px;
+ display: inline-block;
+ text-align: right;
+ margin-right: 20px;
+}
+
+.el-radio__input.is-disabled+span.el-radio__label {
+ color: #606266 !important;
+}
+
+.success {
+ color: #21a700
+}
+
+.failed {
+ color: #d80000
+}
+
+.other {
+ color: #e8a849;
+}
+
+.stop {
+ color: #909399;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/record.vue b/src/views/CNAS/resourceDemand/device/component/record.vue
new file mode 100644
index 0000000..27c094f
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/record.vue
@@ -0,0 +1,457 @@
+<!-- 浣跨敤璁板綍 -->
+<template>
+ <div>
+ <div class="search">
+ <div class="search_thing">
+ <div class="search_label">鏍峰搧缂栧彿锛�</div>
+ <el-input v-model="search.sampleCode" clearable placeholder="璇疯緭鍏�" size="small" style="width: 60%;"
+ @keyup.enter.native="getTableList(clickNodeVal.value)"></el-input>
+ <div class="search_label">绠$悊缂栧彿锛�</div>
+ <el-input v-model="search.managementNumber" clearable placeholder="璇疯緭鍏�" size="small" style="width: 60%;"
+ @keyup.enter.native="getTableList(clickNodeVal.value)"></el-input>
+ </div>
+ <div class="search_thing" style="padding-left: 30px;">
+ <el-button size="small" @click="resetSearch">閲� 缃�</el-button>
+ <el-button size="small" type="primary" @click="getTableList(clickNodeVal.value)">鏌� 璇�</el-button>
+ </div>
+ <div class="btns" v-if="isMenuList != 1">
+ <el-button size="small" type="primary" @click="dialogVisible = true, openAdd()">鏂� 寤�</el-button>
+ <el-button :loading="outLoading" size="small" type="primary" @click="openHandleOut">瀵� 鍑�</el-button>
+ </div>
+ </div>
+ <div class="tables" style="margin-top: 10px;">
+ <el-table ref="Recordtable" :data="formParamList" height="calc(100vh - 20em)">
+ <!-- 琛ㄦ牸鍒� -->
+ <el-table-column label="搴忓彿" type="index" width="120">
+ <template v-slot="scope">
+ <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鏍峰搧缂栧彿" min-width="180" prop="sampleCode" />
+ <el-table-column label="璁惧鍚嶇О" min-width="150" prop="deviceName" />
+ <el-table-column label="绠$悊缂栧彿" min-width="150" prop="managementNumber" />
+ <el-table-column label="浣跨敤鍓�" min-width="120" prop="useBefore">
+ <template v-slot="scope">
+ {{ scope.row.useBefore === 1 ? '鑹ソ' : '寮傚父' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="浣跨敤鍚�" min-width="120" prop="useAfter">
+ <template v-slot="scope">
+ {{ scope.row.useAfter === 1 ? '鑹ソ' : '寮傚父' }}
+ </template>
+ </el-table-column>
+ <!-- <el-table-column label="寮傚父鎯呭喌" min-width="120" prop="abnormal" />-->
+ <el-table-column label="浣跨敤寮�濮嬫棩鏈�" min-width="150" prop="useStartDate" />
+ <el-table-column label="浣跨敤缁撴潫鏃ユ湡" min-width="150" prop="useEndDate" />
+ <el-table-column label="浣跨敤浜�" min-width="120" prop="usePerson" />
+ <el-table-column label="澶囨敞" min-width="120" prop="remark" />
+ <!-- 鎿嶄綔鎸夐挳 -->
+ <el-table-column fixed="right" label="鎿嶄綔" width="150" align="center">
+ <template slot-scope="scope">
+ <el-button size="small" type="text" @click="showDetailsDialog('edit', scope.row)">缂栬緫</el-button>
+ <el-button size="small" type="text" @click="showDetailsDialog('view', scope.row)">鏌ョ湅</el-button>
+ <el-button size="small" type="text" @click="handleDeleteClick(scope.$index, scope.row)">鍒犻櫎</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>
+ </div>
+ <el-dialog :visible.sync="dialogVisible" title="浠櫒璁惧浣跨敤璁板綍琛�" top="5vh" width="55%">
+ <el-form ref="form" :model="form" label-width="130px">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item :rules="[{ required: true, message: '鏍峰搧缂栧彿', trigger: 'blur' }]" label="鏍峰搧缂栧彿:"
+ prop="sampleCode">
+ <el-input v-model="form.sampleCode" :disabled="operationType === 'view'" size="small"
+ style="width: 100%;"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁惧鍚嶇О:" required>
+ <el-input v-model="form.deviceName" :disabled="operationType === 'view'" size="small"
+ style="width: 100%;"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="绠$悊缂栧彿:" required>
+ <el-input v-model="form.managementNumber" :disabled="operationType === 'view'" size="small"
+ style="width: 100%;"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇烽�夋嫨浣跨敤鍓�', trigger: 'change' }]" label="浣跨敤鍓�:"
+ prop="useBefore">
+ <el-radio-group v-model="form.useBefore" :disabled="operationType === 'view'">
+ <el-radio :label="1">鑹ソ</el-radio>
+ <el-radio :label="0">寮傚父</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇烽�夋嫨浣跨敤鍚�', trigger: 'change' }]" label="浣跨敤鍚�:"
+ prop="useAfter">
+ <el-radio-group v-model="form.useAfter" :disabled="operationType === 'view'">
+ <el-radio :label="1">鑹ソ</el-radio>
+ <el-radio :label="0">寮傚父</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ヤ娇鐢ㄦ棩鏈�', trigger: 'blur' }]" label="浣跨敤鏃ユ湡:"
+ prop="useDateList">
+ <el-date-picker v-model="form.useDateList" :disabled="operationType === 'view'" end-placeholder="缁撴潫鏃ユ湡"
+ format="yyyy-MM-dd HH:mm:ss" size="small" start-placeholder="寮�濮嬫棩鏈�" style="width:100%"
+ type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ヤ娇鐢ㄤ汉', trigger: 'change' }]" label="浣跨敤浜�:"
+ prop="usePersonId">
+ <el-select @change="usePersonName" v-model="form.usePersonId" :disabled="operationType === 'view'"
+ placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞:">
+ <el-input v-model="form.remark" :disabled="operationType === 'view'" type="textarea"></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 v-if="operationType !== 'view'" type="primary" @click="saveRecord">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="ratifyDialog" title="瀵煎嚭" width="30%" @close="ratifyDialog = false, exportDate = ''">
+ <span>鏃堕棿锛�
+ <el-date-picker v-model="exportDate" format="yyyy-MM" placeholder="閫夋嫨鏈堜唤" size="small" style="width:100%"
+ type="month" value-format="yyyy-MM">
+ </el-date-picker>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="ratifyDialog = false, exportDate = ''">鍙� 娑�</el-button>
+ <el-button :loading="outLoading" type="primary" @click="handleDown">瀵� 鍑�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+<script>
+import {
+ deviceRecordPage,
+ exportUseRecord,
+ selectDeviceByCode,
+ saveDeviceRecord,
+ updateDeviceRecord,
+ deleteDeviceRecord,
+} from '@/api/cnas/resourceDemand/device.js'
+import { selectUserCondition } from "@/api/system/user";
+export default {
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ },
+ // 鍒ゆ柇鏄惁鏄閮ㄥ垎绂�
+ isMenuList: {
+ type: Number,
+ default: 0
+ }
+ },
+ data() {
+ return {
+ search: {
+ size: 20,
+ current: 1,
+ total: 0,
+ sampleCode: '',
+ managementNumber: ''
+ },
+ responsiblePersonList: {},
+ isShow: false,
+ outLoading: false,
+ ratifyDialog: false,
+ exportDate: '',
+ userList: [],
+ form: {
+ // deviceId:'',
+ processNumber: '',
+ deviceName: '',
+ managementNumber: '',
+ //娓╁害
+ temperature: '',
+ //婀垮害
+ humidity: '',
+ //浣跨敤鍓�
+ useBefore: 1,
+ //浣跨敤鍚�
+ useAfter: 1,
+ //寮傚父鎯呭喌
+ abnormal: '',
+ useDateList: [],
+ //浣跨敤鏃ユ湡
+ useStartDate: null,
+ useEndDate: null,
+ //浣跨敤浜�
+ usePerson: '',
+ usePersonId: '',
+ //澶囨敞
+ remark: '',
+ },
+ dialogVisible: false,
+ operationType: '',
+ formParamList: [],
+ }
+ },
+ mounted() {
+ this.getTableList(this.clickNodeVal.value);
+ },
+ methods: {
+ handleSizeChange(val) {
+ this.search.size = val
+ this.getTableList(this.clickNodeVal.value);
+ },
+ handleCurrentChange(val) {
+ this.search.current = val
+ this.getTableList(this.clickNodeVal.value);
+ },
+ resetSearch() {
+ this.search = {
+ size: 20,
+ current: 1,
+ total: 0,
+ sampleCode: '',
+ managementNumber: ''
+ }
+ this.getTableList(this.clickNodeVal.value);
+ },
+ async getTableList(deviceId) {
+ if (deviceId === undefined) {
+ deviceId = ''
+ }
+ await deviceRecordPage({
+ deviceId: deviceId,
+ ...this.search
+ }).then(res => {
+ if (res.code == 200) {
+ this.formParamList = res.data.records
+ this.search.total = res.data.total
+ }
+ })
+ },
+ // 鎵撳紑瀵煎嚭寮规閫夋嫨缂栧埗浜恒�佹壒鍑嗕汉
+ openHandleOut() {
+ this.ratifyDialog = true
+ },
+ //瀵煎嚭
+ handleDown() {
+ this.outLoading = true
+ exportUseRecord({
+ deviceId: this.clickNodeVal.value,
+ exportDate: this.exportDate
+ }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '璁惧浣跨敤璁板綍.doc')
+ })
+ },
+ //鏂板缓
+ openAdd() {
+ this.operationType = 'add'
+ this.getUserList()
+ selectDeviceByCode({ id: this.clickNodeVal.value }).then(res => {
+ this.form.deviceName = res.data.deviceName
+ this.form.managementNumber = res.data.managementNumber
+ this.$nextTick(() => {
+ this.$refs['form'].clearValidate()
+ })
+ });
+ },
+ usePersonName(value) {
+ const index = this.userList.findIndex(item => item.id === value)
+ if (index > -1) {
+ this.form.usePerson = this.userList[index].name
+ }
+ },
+ //纭娣诲姞璁板綍
+ saveRecord() {
+ this.$refs.form.validate((valid) => {
+ if (valid) {
+ this.form.useStartDate = this.form.useDateList[0]
+ this.form.useEndDate = this.form.useDateList[1]
+ this.form.deviceId = this.clickNodeVal.value
+ if (this.operationType === 'add') {
+ saveDeviceRecord(this.form).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鏂板鎴愬姛')
+ this.getTableList(this.clickNodeVal.value)
+ this.dialogVisible = false
+ }
+ })
+ this.dialogVisible = false;
+ } else {
+ updateDeviceRecord(this.form).then(res => {
+ if (res.code == 200) {
+ this.$message.success('淇敼鎴愬姛')
+ this.getTableList(this.clickNodeVal.value)
+ this.dialogVisible = false
+ }
+ })
+ this.dialogVisible = false;
+ }
+ }
+ });
+ },
+ //鏌ョ湅璇︽儏
+ showDetailsDialog(type, row) {
+ this.operationType = type;
+ console.log(row)
+ this.dialogVisible = true;
+ this.getUserList()
+ this.form = row;
+ let list = []
+ if (row.useStartDate === null) {
+ row.useStartDate = ''
+ }
+ if (row.useEndDate === null) {
+ row.useEndDate = ''
+ }
+ list.push(row.useStartDate)
+ list.push(row.useEndDate)
+ this.$set(this.form, 'useDateList', list)
+ },
+ handleDeleteClick(index, row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteDeviceRecord({ id: row.id }).then(res => {
+ this.formParamList.splice(index, 1);
+ this.$message({
+ type: 'success',
+ message: '鍒犻櫎鎴愬姛!'
+ });
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ getUserList() {
+ selectUserCondition().then(res => {
+ this.userList = res.data
+ })
+ },
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ this.getTableList(newVal.value);
+ }
+ },
+ dialogVisible(newVal) {
+ if (newVal === false) {
+ this.form = {
+ // deviceId:'',
+ sampleCode: '',
+ deviceName: '',
+ managementNumber: '',
+ //娓╁害
+ temperature: '',
+ //婀垮害
+ humidity: '',
+ //浣跨敤鍓�
+ useBefore: 1,
+ //浣跨敤鍚�
+ useAfter: 1,
+ //寮傚父鎯呭喌
+ abnormal: '',
+ //浣跨敤鏃ユ湡
+ useDateList: [],
+ //浣跨敤浜�
+ usePersonId: '',
+ //澶囨敞
+ remark: '',
+ }
+ this.$refs.form.clearValidate()
+ }
+ }
+ }
+}
+</script>
+
+<style scoped>
+.tables {
+ width: 100%;
+ height: calc(100vh - 15em);
+}
+
+.el-from {
+ max-width: 400px;
+ margin: 0 auto;
+}
+
+.form-row {
+ display: flex;
+ justify-content: space-between;
+}
+
+.el-input {
+ width: calc(100% - 120px);
+ /* 纭繚杈撳叆妗嗗搴︿竴鑷� */
+}
+
+.form-row .el-form-item {
+ flex: 1;
+ /* 姣忎釜琛ㄥ崟椤瑰崰鎹浉鍚屾瘮渚嬬殑绌洪棿 */
+ margin-right: 100px;
+ /* 鍙�夛細涓哄彸渚у厓绱犳坊鍔犻棿璺� */
+}
+
+/* 绉婚櫎鏈�鍚庝竴涓厓绱犵殑鍙宠竟璺� */
+.form-row .el-form-item:last-child {
+ margin-right: 0;
+
+}
+
+.search {
+ background-color: #fff;
+ margin-top: 10px;
+ display: flex;
+ align-items: center;
+ position: relative;
+}
+
+.search_thing {
+ display: flex;
+ align-items: center;
+ height: 40px;
+
+}
+
+.search_label {
+ width: 140px;
+ font-size: 14px;
+ text-align: right;
+ margin-right: 10px;
+}
+
+.btns {
+ position: absolute;
+ right: 0px;
+ top: 50%;
+ transform: translate(0, -50%);
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/resource-reservation.vue b/src/views/CNAS/resourceDemand/device/component/resource-reservation.vue
new file mode 100644
index 0000000..b23611b
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/resource-reservation.vue
@@ -0,0 +1,470 @@
+<!-- 璧勬簮棰勫畾 -->
+<template>
+ <div class="role_manage">
+ <el-row class="title">
+ <el-col :span="8" style="text-align: left;">棰勫畾鎬昏</el-col>
+ <el-col :span="16" style="text-align: right;padding-bottom:10px">
+ <el-date-picker
+ v-model="startTime"
+ format="yyyy-MM-dd"
+ placeholder="閫夋嫨璧峰鏃ユ湡"
+ size="mini"
+ type="date"
+ value-format="yyyy-MM-dd"/>
+ 鑷�
+ <el-date-picker
+ v-model="endTime"
+ format="yyyy-MM-dd"
+ placeholder="閫夋嫨缁撴潫鏃ユ湡"
+ size="mini"
+ type="date"
+ value-format="yyyy-MM-dd"/>
+ <el-button size="mini" type="primary" @click="ValidateAndQuery">鏌� 璇�</el-button>
+ </el-col>
+ </el-row>
+ <div class="table-container">
+ <el-table v-loading="tableLoading" :data="tableData" border class="scrollable-table" style="width: 100%">
+ <el-table-column label="搴忓彿"
+ type="index"
+ width="60">
+ </el-table-column>
+ <el-table-column label="璁惧" min-width="60" prop="deviceName"/>
+ <el-table-column label="鏃堕棿" min-width="60" prop="time"/>
+ <el-table-column v-for="date in dates" :key="date" :label="date">
+ <template #default="{ row }">
+ <el-button v-if="!row[date]" size="mini" type="primary" @click="openModal(date, row)">
+ {{ getDisplayText(row, date) }}
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="showModal" title="棰勫畾淇℃伅"
+ top="5vh" width="70%">
+ <h4>
+ <el-button v-if="isBeforeDate()" size="small" @click="cancelReservation(selectedRow)">鍙栨秷棰勫畾</el-button>
+ <el-button v-if="isBeforeDate()" size="small" type="primary" @click="openAdd()">鏂板缓棰勫畾</el-button>
+ </h4>
+ <el-table ref="table" :data="tableData2" style="width: 100%" tooltip-effect="dark"
+ @close="ValidateAndQuery"
+ @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="55%">
+ </el-table-column>
+ <el-table-column label="搴忓彿" width="120">
+ <template #default="{ row, $index }">
+ <!-- 浣跨敤 $index 鏉ヨ幏鍙栬绱㈠紩锛岄�氬父浠�0寮�濮嬶紝鎵�浠�+1浠ョ鍚堝父瑙勫簭鍙蜂範鎯� -->
+ {{ $index + 1 }}
+ </template>
+ </el-table-column>
+ <el-table-column label="棰勫畾缂栧彿" prop="deviceNumber" width="120">
+ </el-table-column>
+ <el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" show-overflow-tooltip>
+ </el-table-column>
+ <el-table-column label="鑱旂郴浜�" prop="linkPerson" show-overflow-tooltip>
+ </el-table-column>
+ <el-table-column label="鑱旂郴鐢佃瘽" prop="phone" show-overflow-tooltip>
+ </el-table-column>
+ <el-table-column label="棰勫畾璇存槑" prop="reservationSpecification" show-overflow-tooltip>
+ </el-table-column>
+ <el-table-column label="鍒涘缓浜�" prop="name" show-overflow-tooltip>
+ </el-table-column>
+ <el-table-column label="鍒涘缓鏃堕棿" prop="createDate" show-overflow-tooltip>
+ </el-table-column>
+ </el-table>
+ </el-dialog>
+ <el-dialog :visible.sync="addVisiable" title="鏂板缓棰勫畾" top="5vh" width="40%">
+ <el-form ref="addReservationForm" :model="addReservation" :rules="rules" label-width="90px">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="棰勫畾璁惧:">
+ <el-input v-model="addReservation.deviceName"></el-input>
+ </el-form-item>
+ <el-form-item label="瀹㈡埛鍚嶇О:">
+ <el-input v-model="addReservation.customerName"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="棰勫畾鏃堕棿:">
+ <el-input v-model="addReservation.reservationTime"></el-input>
+ </el-form-item>
+ <el-form-item label="娴佺▼缂栧彿:">
+ <el-input v-model="addReservation.deviceNumber"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑱旂郴浜�:">
+ <el-input v-model="addReservation.linkPerson"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑱旂郴鐢佃瘽:" prop="phone">
+ <el-input v-model="addReservation.phone"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="棰勫畾璇存槑:" required>
+ <el-input v-model="addReservation.reservationSpecification" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="addVisiable = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="addRecord">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ reservationDelete,
+ reservationSave,
+ reservationSelectDevice,
+ selectReservationParameterPage
+} from "@/api/cnas/resourceDemand/device";
+
+export default {
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ data() {
+
+ return {
+ timeSlots: ['09:00-12:00', '13:00-18:00', '18:00-22:00'],
+ dates: [],
+ showModal: false,
+ selectedDate: '',
+ selectedTime: '',
+ selectedDevice: '',
+ tableData: [],
+ tableLoading: false,
+ tableData2: [],
+ selectedReservationId: null, // 鐢ㄤ簬瀛樺偍閫変腑鐨処D
+ selectedRow: null,
+ addVisiable: false,
+ laboratoryNameIsNull: false,
+ currentPage: 1, // 褰撳墠椤�
+ pageSize: -1, // 涓�椤�16鏉�
+ startTime: '',
+ endTime: '',
+ entity: {
+ deviceName: null,
+ laboratoryName: '',
+ storagePoint: '',
+ },
+ addReservation: {
+ deviceName: '',
+ reservationTime: '',
+ specificTime: '',
+ customerName: '',
+ deviceNumber: '',
+ linkPerson: '',
+ phone: '',
+ reservationSpecification: ''
+ },
+ total: '',
+ componentData: {
+ entity: {
+ largeCategory: null,
+ orderBy: {
+ field: 'id',
+ order: 'asc'
+ }
+ },
+ },
+ yuyue: null,
+ yuyuetime: '',
+ rules: {
+ phone: [
+ {
+ required: true, message: '璇疯緭鍏ヨ仈绯荤數璇�',
+ trigger: 'blur'
+ },
+ {
+ pattern: /^1[3456789]\d{9}$/,
+ message: '璇疯緭鍏ユ纭殑鎵嬫満鍙风爜',
+ trigger: ['blur', 'change']
+ }
+ ]
+ },
+ appointment: ''
+ }
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ this.clickSidebar(newVal)
+ }
+ },
+
+ created() {
+ this.clickSidebar(this.clickNodeVal)
+ this.initDate();
+ },
+ mounted() {
+ this.getStartTimeAndEndTime();
+
+ },
+ methods: {
+ isBeforeDate() {
+ let currentDate = this.$moment().format('YYYY-MM-DD')
+ let currentTime = this.$moment().format('HH')
+ const appointment = this.appointment && this.appointment.split('-')
+ let appointment0 = ''
+ let appointment1 = ''
+ if (appointment !== '') {
+ appointment0 = appointment[0].slice(0, 2)
+ appointment1 = appointment[1].slice(0, 2)
+ }
+ if (currentDate < this.yuyuetime) {
+ // 鏈潵鐨勬棩鏈燂紝涓�瀹氳兘鏂板棰勭害
+ return true
+ } else if (currentDate === this.yuyuetime) {
+ // 褰撳ぉ鐨勬棩鏈燂紝宸茬粡杩囦簡鐨勬椂闂翠笉鍙彇娑堝拰鏂板
+ if (currentTime < appointment1) {
+ return true
+ } else if (currentTime > appointment1) {
+ return false
+ }
+ }
+ },
+ getDisplayText(row, date) {
+ if (!row || row.dateList === null || row.dateList === undefined || row.dateList === "") {
+ return '棰勭害';
+ }
+ var dateLst = row.dateList
+ for (const dateLstElement of dateLst) {
+ if (dateLstElement.date === date) {
+ if (dateLstElement.value === 0) {
+ return '棰勭害';
+ } else {
+ return dateLstElement.value;
+ }
+ }
+ }
+ return '棰勭害';
+ },
+
+ ValidateAndQuery() {
+ if (!this.startTime || !this.endTime) {
+ this.$message.error('璇烽�夋嫨鏃ユ湡鑼冨洿');
+ return;
+ }
+ if ((new Date(this.endTime) - new Date(this.startTime)) / (1000 * 60 * 60 * 24) >= 10) {
+ this.$message.error('鍙兘棰勭害10澶╀互鍐�');
+ return;
+ }
+ if (new Date(this.startTime) > new Date(this.endTime)) {
+ this.$message.error('寮�濮嬫棩鏈熶笉鑳藉ぇ浜庣粨鏉熸棩鏈�');
+ return;
+ }
+ this.query();
+ },
+ initDate() {
+ if (this.startTime == '' || this.endTime == '' || this.startTime == null || this.endTime == null) {
+ const daysAdd = 3;
+ const now = new Date();
+ this.startTime = now.getFullYear() + "-" +
+ String(now.getMonth() + 1).padStart(2, '0') + "-" +
+ String(now.getDate()).padStart(2, '0');
+ let endTime = new Date(now);
+ endTime.setDate(now.getDate() + daysAdd);
+ this.endTime = endTime.getFullYear() + "-" +
+ String(endTime.getMonth() + 1).padStart(2, '0') + "-" +
+ String(endTime.getDate()).padStart(2, '0');
+ const start = new Date(this.startTime);
+ const end = new Date(this.endTime);
+ const tempDates = [];
+ while (start <= end) {
+ const year = start.getFullYear();
+ const month = String(start.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ュ姞1锛屽苟浣跨敤padStart琛�0
+ const day = String(start.getDate()).padStart(2, '0'); // 浣跨敤padStart琛�0
+ tempDates.push(`${year}-${month}-${day}`);
+ start.setDate(start.getDate() + 1);
+ }
+ this.dates = tempDates;
+ this.getStartTimeAndEndTime();
+ }
+ },
+ query() {
+ if (this.startTime && this.endTime) {
+ const start = new Date(this.startTime);
+ const end = new Date(this.endTime);
+ const tempDates = [];
+ while (start <= end) {
+ const year = start.getFullYear();
+ const month = String(start.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ュ姞1锛屽苟浣跨敤padStart琛�0
+ const day = String(start.getDate()).padStart(2, '0'); // 浣跨敤padStart琛�0
+ tempDates.push(`${year}-${month}-${day}`);
+ start.setDate(start.getDate() + 1);
+ }
+ this.dates = tempDates;
+ this.getStartTimeAndEndTime();
+ }
+ },
+ //鏌ヨ鏃堕棿
+ getStartTimeAndEndTime() {
+ //鏌ヨ閫昏緫
+ this.tableLoading = true;
+ reservationSelectDevice({
+ current: this.currentPage,
+ size: this.pageSize,
+ ...this.entity,
+ laboratoryNameIsNull: this.laboratoryNameIsNull
+ }).then(res => {
+ this.tableLoading = false;
+ if (res.code === 200) {
+ this.tableData = res.data;
+ }
+ }).catch(err => {
+ this.tableLoading = false;
+ })
+ },
+ openModal(date, row) {
+ this.yuyue = row;
+ this.yuyuetime = date;
+ this.appointment = row.time
+ this.showModal = true;
+ this.getList();
+ },
+ openAdd() {
+ this.addVisiable = true;
+ this.addReservation.deviceId = this.yuyue.id;
+ // this.addReservation.deviceNumber = this.yuyue.deviceNumber;
+ this.addReservation.deviceName = this.yuyue.deviceName;
+ this.addReservation.reservationTime = this.yuyuetime + " " + this.yuyue.time;
+ this.addReservation.specificTime = this.yuyue.time;
+ this.addReservation.deviceNumber = 'TX-ABC-01' + Math.floor(Math.random() * 10 + 1);
+ },
+ handleSelectionChange(selected) {
+ this.selectedRow = selected.length > 0 ? selected : null;
+ },
+ async cancelReservation(selectedRow) {
+ if (!selectedRow || selectedRow.length == 0) {
+ this.$message.error('璇烽�夋嫨瑕佸垹闄ょ殑棰勭害');
+ return;
+ }
+ let ids = selectedRow.map(item => item.id).join(',');
+ try {
+ const res = await reservationDelete({ids: ids});
+ if (res.code === 200) {
+ this.$message.success({
+ message: '鍒犻櫎鎴愬姛',
+ type: 'success'
+ });
+ this.getList();
+ this.query();
+ this.showModal = false;
+ } else {
+ this.$message.error({
+ message: '鍒犻櫎澶辫触',
+ type: 'error'
+ });
+ }
+ } catch (error) {
+ this.$message.error({
+ message: '鍒犻櫎杩囩▼涓彂鐢熼敊璇紝璇风◢鍚庨噸璇�',
+ type: 'error'
+ });
+ }
+ },
+ addRecord() {
+ this.$refs.addReservationForm.validate((valid) => {
+ if (valid) {
+ this.addReservation.reservationTime = this.yuyuetime;
+ reservationSave(this.addReservation).then(res => {
+ if (res.code == 200) {
+ this.$message.success('淇濆瓨鎴愬姛')
+ this.addVisiable = false
+ this.getList();
+ this.query();
+ this.addReservation = {};
+ }
+ })
+ } else {
+ this.$message.error({message: '璇锋鏌ヨ〃鍗曞~鍐欐槸鍚︽纭�', type: 'error'});
+ return false;
+ }
+ });
+ },
+ getList() {
+ const params = {
+ selectReservationParameterPage: this.yuyue.id,
+ reservationTime: this.yuyuetime,
+ specificTime: this.yuyue.time,
+ }
+ selectReservationParameterPage(params).then(res => {
+ if (res.code == 200) {
+ this.tableData2 = res.data;
+ }
+ })
+ },
+ // 鐐瑰嚮渚ц竟鏍忓埛鏂�
+ clickSidebar(clickNodeVal) {
+ this.laboratoryNameIsNull = false
+ // 鏄惁瀛樺湪value锛屽瓨鍦╲alue浠h〃涓轰笁绾�
+ if (!clickNodeVal.value) {
+ this.finishLoding = false;
+ this.keyMap = {};
+ this.currentPage = 1;
+ this.list = [];
+ this.entity.laboratoryName = null
+ this.entity.storagePoint = null
+ // 绛変簬1浠h〃涓烘爲鐨勪竴绾э紝label涓洪儴闂�
+ if (clickNodeVal.label == '鍏朵粬') {
+ this.laboratoryNameIsNull = true
+ this.getStartTimeAndEndTime();
+ return
+ }
+ if (clickNodeVal.level == 1) {
+ this.entity.laboratoryName = clickNodeVal.label
+ // 绛変簬浜岀骇銆俵abel涓哄瓨鍌ㄥ湴鐐�
+ } else if (clickNodeVal.level == 2) {
+ // 鍏朵粬琛ㄧず娌℃湁閰嶇疆瀹為獙瀹わ紝鍙厤缃簡鍦扮偣
+ if (clickNodeVal.parent.label == '鍏朵粬') {
+ this.laboratoryNameIsNull = true
+ } else {
+ this.entity.laboratoryName = clickNodeVal.parent.label
+ }
+ this.entity.storagePoint = clickNodeVal.label
+ }
+ this.getStartTimeAndEndTime();
+ }
+ }
+ },
+
+}
+</script>
+
+<style scoped>
+.table-container {
+ overflow: auto;
+ height: calc(100vh - 15em);
+ /* 鍙互鏍规嵁闇�瑕佽皟鏁撮珮搴� */
+}
+
+.scrollable-table {
+ max-height: 100%;
+ overflow-y: auto;
+ /* overflow-x: auto; */
+}
+
+h4 {
+ font-weight: 400;
+ font-size: 16px;
+ display: flex;
+ justify-content: flex-end;
+ margin: 10px 0;
+}
+
+.form-row {
+ display: flex;
+ justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/state.vue b/src/views/CNAS/resourceDemand/device/component/state.vue
new file mode 100644
index 0000000..e7467ce
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/state.vue
@@ -0,0 +1,605 @@
+<!-- 璁惧鍋滅敤鍚敤 -->
+<template>
+ <div>
+ <div class="search">
+ <el-row :gutter="10" style="width: 100%;">
+ <el-col :span="20" style="display: flex;flex-wrap: wrap;">
+ <div class="search_thing">
+ <div class="search_label">娴佺▼缂栧彿锛�</div>
+ <div class="search_input">
+ <el-input v-model="search.processNumber" clearable placeholder="璇疯緭鍏�" size="small" style="width: 100%"
+ @keyup.enter.native="getDeviceStatePage(clickNodeVal.value)"></el-input>
+ </div>
+ </div>
+ <div class="search_thing" style="padding-left: 20px;">
+ <el-button size="small" @click="resetSearch">閲� 缃�</el-button>
+ <el-button size="small" type="primary" @click="getDeviceStatePage(clickNodeVal.value)">鏌� 璇�</el-button>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="btns">
+ <el-button size="small" type="primary" @click="dialogVisible = true">鏂板缓</el-button>
+ <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">瀵煎嚭Excel</el-button>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ <div>
+ <el-table :data="tableDatalist" height="calc(100vh - 20em)" style="width: 100% ;">
+ <!-- 琛ㄦ牸鍒� -->
+ <el-table-column align="center" header-align="center" label="搴忓彿" prop="prop" type="index"
+ width="70"></el-table-column>
+ <el-table-column label="娴佺▼缂栧彿" min-width="180" prop="processNumber"></el-table-column>
+ <el-table-column label="璁惧鍚嶇О" min-width="180" prop="deviceName"></el-table-column>
+ <el-table-column label="绠$悊缂栧彿" min-width="150" prop="managementNumber"></el-table-column>
+ <el-table-column label="璁惧鐘舵��" min-width="130" prop="deviceStatus">
+ <template #default="{ row }">
+ {{ row.deviceStatus === '0scrap' ? '鎶ュ簾' : row.deviceStatus === '1startUsing' ? '鍚敤' : '鍋滅敤' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="鍋滅敤/鍚敤鐞嗙敱" min-width="180" prop="reason"></el-table-column>
+ <el-table-column label="鎻愪氦浜�" min-width="130" prop="createUser"></el-table-column>
+ <el-table-column label="鎻愪氦鏃ユ湡" min-width="150" prop="createTime"></el-table-column>
+ <el-table-column label="褰撳墠鐘舵��" min-width="130" prop="currentState"></el-table-column>
+ <el-table-column label="褰撳墠璐d换浜�" min-width="180" prop="currentResponsible"></el-table-column>
+ <!-- 鎿嶄綔鎸夐挳 -->
+ <el-table-column fixed="right" label="鎿嶄綔" min-width="150">
+ <template #default="{ row }">
+ <el-button size="small" type="text" @click="handleViewClick(row)">鏌ョ湅</el-button>
+ <el-button size="small" type="text" @click="handleDownOne(row)">瀵煎嚭</el-button>
+ <el-button size="small" type="text" @click="handleDeleteClick(row)">鍒犻櫎</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>
+ </div>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="璁惧鎯呭喌"
+ top="5vh" width="60%" @open="openRecordAcceptance">
+ <el-steps :active="currentStep" align-center finish-status="success">
+ <el-step v-for="(v, i) in steps" :key="i" :title="v" style="cursor:pointer"
+ @click.native="choiceStep(i)"></el-step>
+ </el-steps>
+ <el-form ref="form" :model="form" :rules="rules" label-width="130px">
+ <div v-show="currentStepClick === 0">
+ <el-card style="margin-top: 1em; height: 42vh; overflow-y: scroll;">
+ <!-- 鍗$墖 -->
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="娴佺▼缂栧彿锛�">
+ <el-input v-model="form.processNumber" disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="绠$悊缂栧彿锛�">
+ <el-input v-model="form.managementNumber" disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁惧鍚嶇О锛�">
+ <el-input v-model="form.deviceName" disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瑙勬牸鍨嬪彿锛�">
+ <el-input v-model="form.specificationModel" disabled size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: currentStep === 0, message: '璇疯緭鍏ラ厤浠�', trigger: 'blur' }]" label="閰嶄欢锛�"
+ prop="accessoryPart">
+ <el-input v-model="form.accessoryPart" :disabled="currentStep !== 0" size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: currentStep === 0, message: '璇烽�夋嫨璁惧鐘舵��', trigger: 'change' }]"
+ label="璁惧鎯呭喌锛�" prop="deviceStatus">
+ <el-select v-model="form.deviceStatus" :disabled="currentStep !== 0" placeholder="璇烽�夋嫨" size="small"
+ style="width:100%">
+ <el-option label="鎶ュ簾" value="0scrap"></el-option>
+ <el-option label="鍚敤" value="1startUsing"></el-option>
+ <el-option label="鍋滅敤" value="2stopUsing"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: currentStep === 0, message: '璇疯緭鍏ュ仠鐢ㄥ惎鐢ㄧ悊鐢�', trigger: 'blur' }]"
+ label="鍋滅敤鍚敤鐞嗙敱锛�" prop="reason">
+ <el-input v-model="form.reason" :disabled="currentStep !== 0" :rows="3" size="small"
+ type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: currentStep === 0, message: '璇烽�夋嫨涓嬬幆鑺傝矗浠讳汉', trigger: 'change' }]"
+ label="涓嬬幆鑺傝矗浠讳汉锛�" prop="submitNextPesponsible">
+ <el-select v-model="form.submitNextPesponsible" :disabled="currentStep !== 0" clearable filterable
+ placeholder="璇烽�夋嫨涓嬬幆鑺傝礋璐d汉" size="small" style="width: 100%">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.submitOperatingPersonnel }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.submitDate }}
+ </el-col>
+ </el-row>
+ </div>
+ <div v-show="currentStepClick === 1">
+ <el-card style="margin-top: 1em; height: 42vh; overflow-y: scroll;">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="閮ㄩ棬璐熻矗浜烘剰瑙侊細" prop="departmentReviewOpinion">
+ <el-input v-model="form.departmentReviewOpinion" :disabled="currentStep !== 1" size="small"
+ type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: currentStep === 1, message: '璇疯緭鍏ヤ笅鐜妭璐d换浜�', trigger: 'change' }]"
+ label="涓嬬幆鑺傝矗浠讳汉锛�" prop="departmentNextPesponsible">
+ <el-select v-model="form.departmentNextPesponsible" :disabled="currentStep !== 1" clearable filterable
+ placeholder="璇烽�夋嫨涓嬬幆鑺傝礋璐d汉" size="small" style="width: 100%;">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.departmentOperatingPersonnel }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.departmentDate }}
+ </el-col>
+ </el-row>
+ </div>
+ <div v-show="currentStepClick === 2">
+ <el-card style="margin-top: 1em; height: 42vh; overflow-y: scroll;">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item :rules="[{ required: currentStep === 2, message: '璇疯緭鍏ヨ閲忓鎰忚', trigger: 'blur' }]"
+ label="璁¢噺瀹ゆ剰瑙侊細" prop="measuringRoomReviewOpinion">
+ <el-input v-model="form.measuringRoomReviewOpinion" :disabled="currentStep !== 2" size="small"
+ type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: currentStep === 2, message: '璇疯緭鍏ヤ笅鐜妭璐d换浜�', trigger: 'blur' }]"
+ label="涓嬬幆鑺傝矗浠讳汉锛�" prop="measuringRoomNextPesponsible">
+ <el-select v-model="form.measuringRoomNextPesponsible" :disabled="currentStep !== 2" clearable
+ filterable placeholder="璇烽�夋嫨涓嬬幆鑺傝礋璐d汉" size="small" style="width: 100%;">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.measuringRoomOperatingPersonnel }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.measuringRoomDate }}
+ </el-col>
+ </el-row>
+ </div>
+ <div v-show="currentStepClick === 3">
+ <el-card style="margin-top: 1em; height: 42vh; overflow-y: scroll;">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item :rules="[{ required: currentStep === 3, message: '璇疯緭鍏ユ壒鍑嗘剰瑙�', trigger: 'blur' }]"
+ label="鎵瑰噯鎰忚锛�" prop="approvalOpinion">
+ <el-input v-model="form.approvalOpinion" :disabled="currentStep !== 3" size="small"
+ type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item :rules="[{ required: currentStep === 3, message: '璇疯緭鍏ヤ笅鐜妭璐熻矗浜�', trigger: 'change' }]"
+ label="涓嬬幆鑺傝矗浠讳汉锛�" prop="approvalNextPesponsible">
+ <el-select v-model="form.approvalNextPesponsible" :disabled="currentStep !== 3" clearable filterable
+ placeholder="璇烽�夋嫨涓嬬幆鑺傝礋璐d汉" size="small" style="width: 100%;">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ <el-row style="margin-top: 1em;">
+ <el-col :span="4">
+ 鎿嶄綔浜猴細{{ form.approvalOperatingPersonnel }}
+ </el-col>
+ <el-col :span="6">
+ 鏃ユ湡锛歿{ form.approvalDate }}
+ </el-col>
+ </el-row>
+ </div>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button v-if="currentStep !== 0 && currentStep !== 4" :loading="sumbitLoading1"
+ @click="submitForm('3reject')">椹冲洖</el-button>
+ <el-button v-if="currentStep === 0" :loading="sumbitLoading2" @click="submitForm('2save')">淇濆瓨</el-button>
+ <el-button v-if="currentStep !== 4" :loading="sumbitLoading3" type="primary" @click="submitForm('1submit')">
+ {{ currentStep === 0 ? '鎻愪氦' : '閫氳繃' }}
+ </el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+<script>
+import {
+ saveDeviceState,
+ selectDeviceByCode,
+ exportDeviceStatus,
+ deleteDeviceState,
+ deviceStateExport,
+ getDeviceStatePage,
+} from '@/api/cnas/resourceDemand/device.js'
+import { selectUserCondition } from "@/api/system/user";
+import { dateFormat } from '@/utils/date'
+import { mapGetters } from "vuex";
+export default {
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ computed: {
+ ...mapGetters(["nickName"]),
+ },
+ data() {
+ return {
+ outLoading: false, // 瀵煎嚭loading
+ dialogVisible: false,
+ form: {},
+ currentStep: 0, // 姝ラ鏉℃樉绀虹鍑犳
+ currentStepClick: 0, // 鐐瑰嚮姝ラ鏉″彉鍖�
+ steps: ['鎻愪氦', '閮ㄩ棬璐熻矗浜�', '璁¢噺瀹�', '鎵瑰噯浜�'],
+ responsibleOptions: [], // 涓嬬幆鑺傝礋璐d汉
+ tableDatalist: [], // table琛ㄦ牸
+ rules: {
+ quantity: [{ required: true, message: '璇疯緭鍏ユ暟閲�', trigger: 'blur' }],
+ },
+ search: {
+ size: 20,
+ current: 1,
+ total: 0,
+ processNumber: ''
+ },
+ sumbitLoading1: false,
+ sumbitLoading2: false,
+ sumbitLoading3: false,
+ }
+ },
+ mounted() {
+ this.getDeviceStatePage(this.clickNodeVal.value)
+ },
+ methods: {
+ // 鍒嗛〉
+ handleSizeChange(val) {
+ this.search.size = val
+ this.getDeviceStatePage(this.clickNodeVal.value)
+ },
+ // 鍒嗛〉
+ handleCurrentChange(val) {
+ this.search.current = val
+ this.getDeviceStatePage(this.clickNodeVal.value)
+ },
+ //鎻愪氦琛ㄥ崟
+ async submitForm(saveState) {
+ let currentStepAction;
+ // 璁剧疆璇ユ搷浣滃垽鏂槸鍚︿负鎻愪氦锛屼繚瀛橈紝椹冲洖锛岄�氳繃 寮�鍚痩oding
+ switch (saveState) {
+ // 鎻愪氦锛岄�氳繃
+ case '1submit':
+ currentStepAction = this.currentStep + 1
+ this.sumbitLoading1 = true
+ break
+ // 淇濆瓨
+ case '2save':
+ currentStepAction = this.currentStep
+ this.sumbitLoading2 = true
+ break
+ // 椹冲洖
+ case '3reject':
+ currentStepAction = this.currentStep - 1
+ this.sumbitLoading3 = true
+ break
+ default:
+ break
+ }
+ this.$refs.form.validate((valid) => {
+ if (valid === true || saveState !== '1submit') {
+ // 缁欏綋鍓嶇幆鑺傝缃垱寤轰汉涓庢椂闂�
+ const dateTime = dateFormat(new Date())
+ // 鑾峰彇褰撳墠鐜妭鎿嶄綔浜轰笌鏃ユ湡
+ switch (this.currentStep) {
+ case 0:
+ this.form.createUser = this.nickName
+ this.form.submitOperatingPersonnel = this.nickName
+ this.form.submitDate = dateTime
+ break
+ case 1:
+ this.form.departmentOperatingPersonnel = this.nickName
+ this.form.departmentDate = dateTime
+ break
+ case 2:
+ this.form.measuringRoomOperatingPersonnel = this.nickName
+ this.form.measuringRoomDate = dateTime
+ break
+ case 3:
+ this.form.approvalOperatingPersonnel = this.nickName
+ this.form.approvalDate = dateTime
+ break
+ default:
+ break
+ }
+ // 鑾峰彇褰撳墠鐜妭璐熻矗浜�
+ switch (saveState === '3reject' ? this.currentStep - 1 : this.currentStep) {
+ case 0:
+ this.form.currentResponsible = this.form.submitOperatingPersonnel
+ break
+ case 1:
+ this.form.currentResponsible = this.form.departmentOperatingPersonnel
+ break
+ case 2:
+ this.form.currentResponsible = this.form.measuringRoomOperatingPersonnel
+ break
+ case 3:
+ this.form.currentResponsible = this.form.approvalOperatingPersonnel
+ break
+ default:
+ break
+ }
+ // 鑾峰彇褰撳墠鐘舵��
+ this.form.currentState = currentStepAction === 4 ? '鍏抽棴' : this.steps[currentStepAction]
+ this.form.deviceId = this.clickNodeVal.value
+ saveDeviceState(this.form).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鎻愪氦鎴愬姛')
+ this.getDeviceStatePage(this.clickNodeVal.value)
+ this.dialogVisible = false
+ this.closeLoading()
+ }
+ this.closeLoading()
+ })
+ } else {
+ let step = this.steps[this.currentStep]
+ this.$message.warning(step + ' 娴佺▼涓湁蹇呭~椤规湭濉紒');
+ this.closeLoading()
+ }
+ });
+ },
+ closeLoading() {
+ this.sumbitLoading1 = false
+ this.sumbitLoading2 = false
+ this.sumbitLoading3 = false
+ },
+ choiceStep(index) {
+ this.currentStepClick = index
+ },
+ openRecordAcceptance() {
+ // 鑾峰彇璁惧鍩虹淇℃伅
+ selectDeviceByCode({ id: this.clickNodeVal.value }).then(res => {
+ this.form.deviceName = res.data.deviceName
+ this.form.specificationModel = res.data.specificationModel
+ this.form.managementNumber = res.data.managementNumber
+ this.$nextTick(() => {
+ this.$refs['form'].clearValidate()
+ })
+ });
+ // 鑾峰彇璐熻矗浜轰俊鎭�
+ this.getUserList()
+ },
+ // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
+ getUserList() {
+ selectUserCondition().then(res => {
+ if (res.code == 200) {
+ this.responsibleOptions = res.data
+ }
+ })
+ },
+ // 鏌ョ湅
+ handleViewClick(row) {
+ this.form = { ...row }
+ // 濡傛灉绱㈠紩涓�6琛ㄧず鍏ㄩ儴閫氳繃
+ this.currentStep = this.steps.indexOf(this.form.currentState) === -1 ? 4 : this.steps.indexOf(this.form.currentState)
+ this.currentStepClick = this.currentStep === 4 ? 0 : this.currentStep
+ this.$nextTick(() => {
+ this.$refs['form'].clearValidate()
+ })
+ this.dialogVisible = true
+ },
+ // 瀵煎嚭
+ handleDownOne(row) {
+ this.outLoading = true
+ exportDeviceStatus({ deviceId: row.deviceId, processNumber: row.processNumber }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '璁惧鍋�/鍚敤.doc')
+ })
+ },
+ // 鍒犻櫎
+ handleDeleteClick(row) {
+ this.$confirm('姝ゆ搷浣滃皢鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteDeviceState({ stateId: row.stateId }).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.getDeviceStatePage(this.clickNodeVal.value)
+ }
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ //瀵煎嚭
+ handleDown() {
+ this.outLoading = true
+ deviceStateExport({
+ deviceId: this.clickNodeVal.value,
+ processNumber: this.search.processNumber
+ }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '璁惧鍋滅敤/鍚敤.xlsx')
+ }).finally(() => {
+ this.outLoading = false
+ })
+ },
+ resetSearch() {
+ this.search = {
+ size: 20,
+ current: 1,
+ total: 0,
+ processNumber: '',
+ }
+ this.getDeviceStatePage(this.clickNodeVal.value);
+ },
+ getDeviceStatePage(deviceId) {
+ getDeviceStatePage({ deviceId, ...this.search }).then(res => {
+ if (res.code == 200) {
+ this.tableDatalist = res.data.records
+ this.search.total = res.data.total
+ }
+ })
+ }
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ this.componentData.entity.deviceId = this.clickNodeVal.value
+ this.entityCopy = this.HaveJson(this.componentData.entity)
+ this.getDeviceStatePage(newVal.value)
+ }
+ },
+ dialogVisible(newVal) {
+ if (!newVal) {
+ this.form = {
+ }
+ this.closeLoading()
+ this.currentStep = 0 // 姝ラ鏉℃樉绀虹鍑犳
+ this.currentStepClick = 0 // 鐐瑰嚮姝ラ鏉″彉鍖�
+ this.$refs['form'].clearValidate()
+ }
+ }
+ },
+}
+</script>
+
+<style scoped>
+.dialog-content {
+ max-height: 70vh;
+ /* 璁剧疆鏈�澶ч珮搴� */
+ overflow-y: auto;
+ /* 鍚敤鍨傜洿婊氬姩 */
+}
+
+h4 {
+ font-weight: 400;
+ font-size: 16px;
+ margin: 10px 0;
+}
+
+/*
+淇濆瓨鎻愪氦鎸夐挳鏍峰紡
+*/
+h4 .title {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+h4 .title .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ background: #3A7BFA;
+ margin-right: 4px;
+}
+
+.tables {
+ width: 100%;
+ height: calc(100vh - 15em);
+}
+
+.el-from {
+ max-width: 400px;
+ margin: 0 auto;
+}
+
+.form-row {
+ display: flex;
+ justify-content: space-between;
+}
+
+
+.form-row .el-form-item {
+ flex: 1;
+ /* 姣忎釜琛ㄥ崟椤瑰崰鎹浉鍚屾瘮渚嬬殑绌洪棿 */
+ margin-right: 100px;
+ /* 鍙�夛細涓哄彸渚у厓绱犳坊鍔犻棿璺� */
+}
+
+/* 绉婚櫎鏈�鍚庝竴涓厓绱犵殑鍙宠竟璺� */
+.form-row .el-form-item:last-child {
+ margin-right: 0;
+
+}
+
+.search {
+ background-color: #fff;
+ margin: 10px 0;
+ display: flex;
+ align-items: center;
+ position: relative;
+}
+
+.search_thing {
+ display: flex;
+ align-items: center;
+ height: 40px;
+}
+
+.search_label {
+ width: 70px;
+ font-size: 14px;
+ text-align: right;
+}
+
+.search_input {
+ width: 70%;
+}
+
+.btns {
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translate(0, -50%);
+}
+
+.form .search_label {
+ width: 120px;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/device/index.vue b/src/views/CNAS/resourceDemand/device/index.vue
new file mode 100644
index 0000000..0c79ff6
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/index.vue
@@ -0,0 +1,263 @@
+<template>
+ <div class="device-page">
+ <div class="device-left">
+ <el-input v-model="deviceName" class="div_left_input" clearable placeholder="杈撳叆璁惧鍚嶇О" size="small"
+ suffix-icon="el-icon-search" @blur="searchFilter" @clear="searchFilter"
+ @keyup.enter.native="searchFilter"></el-input>
+ <el-tree ref="tree" v-loading="loading" :data="list" :expand-on-click-node="false"
+ :filter-node-method="filterNode" :props="{ children: 'children', label: 'label' }" highlight-current
+ node-key="id" style="height:calc(100vh - 200px);
+ overflow-y: scroll;
+ scrollbar-width: none;" @node-click="handleNodeClick" @node-expand="nodeOpen" @node-collapse="nodeClose">
+ <div slot-scope="{ node, data }" class="custom-tree-node">
+ <el-row style="width: 100%;">
+ <el-col :span="24">
+ <p class="single-line-ellipsis" style="width: 100%">
+ <i :class="`node_i ${data.children != undefined
+ ? data.code === '[1]'
+ ? 'el-icon-folder-opened'
+ : 'el-icon-folder'
+ : 'el-icon-tickets'
+ }`
+ "></i>
+ {{ data.label }}
+ </p>
+ <p>
+ {{ data.managementNumber === undefined ? '' : data.managementNumber }}
+ </p>
+ </el-col>
+ </el-row>
+ </div>
+ </el-tree>
+ </div>
+ <div class="device-right">
+ <div v-if="isShowAll" style="height: 100%;">
+ <el-tabs v-model="menuListActiveName" class="main_right" type="border-card">
+ <el-tab-pane label="璁惧鎬昏" name="璁惧鎬昏">
+ <!-- 瀹屾垚鎺ュ彛 -->
+ <overview v-if="menuListActiveName == '璁惧鎬昏'" :clickNodeVal="clickNodeVal" />
+ </el-tab-pane>
+ <el-tab-pane label="璁惧宸ュ叿鏄庣粏" name="璁惧宸ュ叿鏄庣粏">
+ <!-- 瀹屾垚鎺ュ彛 -->
+ <management v-if="menuListActiveName == '璁惧宸ュ叿鏄庣粏'" :clickNodeVal="clickNodeVal" />
+ </el-tab-pane>
+ <el-tab-pane label="璧勬簮棰勫畾" name="璧勬簮棰勫畾">
+ <resourceReservation v-if="menuListActiveName == '璧勬簮棰勫畾'" :clickNodeVal="clickNodeVal"/>
+ </el-tab-pane>
+ <el-tab-pane label="浣滀笟鎸囧涔�" name="浣滀笟鎸囧涔�">
+ <operationInstruction v-if="tabListActiveName == '浣滀笟鎸囧涔�'" :clickNodeVal="clickNodeVal" />
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ <div v-if="!isShowAll" style="height: 100%;">
+ <el-tabs v-model="tabListActiveName" class="main_right" type="border-card" @tab-click="handleClick">
+ <el-tab-pane label="璁惧杩愯鎬昏" name="璁惧杩愯鎬昏">
+ <operationOverview v-if="tabListActiveName == '璁惧杩愯鎬昏'" :clickNodeVal="clickNodeVal"/>
+ </el-tab-pane>
+ <el-tab-pane label="璁惧妗f" name="璁惧妗f">
+ <!-- 瀹屾垚鎺ュ彛 -->
+ <files v-if="tabListActiveName == '璁惧妗f'" :clickNodeVal="clickNodeVal" />
+ </el-tab-pane>
+ <el-tab-pane label="璁惧楠屾敹" name="璁惧楠屾敹">
+ <!-- 瀹屾垚鎺ュ彛 -->
+ <equipment-acceptance v-if="tabListActiveName == '璁惧楠屾敹'"
+ :clickNodeVal="clickNodeVal"></equipment-acceptance>
+ </el-tab-pane>
+ <el-tab-pane label="璁惧鏍″噯" name="璁惧鏍″噯">
+ <!-- 瀹屾垚鎺ュ彛 -->
+ <calibration v-if="tabListActiveName == '璁惧鏍″噯'" :clickNodeVal="clickNodeVal" />
+ </el-tab-pane>
+ <el-tab-pane label="璁惧鏍告煡" name="璁惧鏍告煡">
+ <check v-if="tabListActiveName == '璁惧鏍告煡'" :clickNodeVal="clickNodeVal"/>
+ </el-tab-pane>
+ <el-tab-pane label="璁惧缁存姢" name="璁惧缁存姢">
+ <!-- 瀹屾垚鎺ュ彛 -->
+ <maintenance v-if="tabListActiveName == '璁惧缁存姢'" :clickNodeVal="clickNodeVal" />
+ </el-tab-pane>
+ <el-tab-pane label="璁惧鍊熺敤" name="璁惧鍊熺敤">
+ <!-- 瀹屾垚鎺ュ彛 -->
+ <borrow v-if="tabListActiveName == '璁惧鍊熺敤'" :clickNodeVal="clickNodeVal" />
+ </el-tab-pane>
+ <el-tab-pane label="璁惧鏁呴殰" name="璁惧鏁呴殰">
+ <fault v-if="tabListActiveName == '璁惧鏁呴殰'" :clickNodeVal="clickNodeVal" />
+ </el-tab-pane>
+ <!-- 瀹屾垚鎺ュ彛 -->
+ <el-tab-pane label="浣跨敤璁板綍" name="浣跨敤璁板綍">
+ <record v-if="tabListActiveName == '浣跨敤璁板綍'" :clickNodeVal="clickNodeVal" />
+ </el-tab-pane>
+ <!-- 瀹屾垚鎺ュ彛 -->
+ <el-tab-pane label="璁惧鍋滅敤/鍚敤" name="璁惧鍋滅敤/鍚敤">
+ <state v-if="tabListActiveName == '璁惧鍋滅敤/鍚敤'" :clickNodeVal="clickNodeVal" />
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import management from "./component/management.vue";
+import overview from "./component/device-overview.vue";
+import resourceReservation from "./component/resource-reservation.vue";
+import operationInstruction from "./component/operationInstruction.vue";
+import operationOverview from "./component/operationOverview.vue";
+import files from "./component/files.vue";
+import EquipmentAcceptance from "./component/equipmentAcceptance.vue";
+import calibration from "./component/calibration.vue";
+import check from "./component/check.vue";
+import maintenance from "./component/maintenance.vue";
+import borrow from "./component/borrow.vue";
+import fault from "./component/fault.vue";
+import record from "./component/record.vue";
+import state from "./component/state.vue";
+
+import {
+ treeDevice,
+} from '@/api/cnas/resourceDemand/device.js'
+export default {
+ components: {
+ EquipmentAcceptance,
+ operationOverview,
+ files,
+ calibration,
+ check,
+ maintenance,
+ borrow,
+ fault,
+ record,
+ state,
+ management,
+ overview,
+ resourceReservation,
+ operationInstruction
+ },
+ data() {
+ return {
+ isShowAll: true,
+ deviceName: "", // 渚ц竟鏍忔悳绱�
+ loading: false,
+ tabListActiveName: '璁惧妗f',
+ menuListActiveName: '璁惧鎬昏',
+ list: [],
+ clickNodeVal: {}
+ };
+ },
+ mounted() {
+ // 鍒濆鍖栬皟鐢�
+ this.geList();
+ },
+ methods: {
+ handleClick(tab, event) {
+ },
+ searchFilter() {
+ this.$refs.tree.filter(this.deviceName)
+ },
+ filterNode(value, data) {
+ if (!value) return true;
+ return data.label.indexOf(value) !== -1;
+ },
+ // 鐖剁骇
+ geList() {
+ this.loading = true;
+ treeDevice().then(res => {
+ let data = res.data;
+ this.list = data;
+ this.loading = false
+ });
+ },
+ handleNodeClick(val, node, el) {
+ // 鐐瑰嚮涓存椂缂撳瓨
+ this.clickNodeVal = val;
+ // 瀛樺偍鐖剁骇鑺傜偣绾ф暟
+ this.clickNodeVal.level = node.level
+ this.clickNodeVal.parent = node.parent.data
+ // 鏄惁鏄剧ず璁惧璇︽儏
+ if (!val.value) {
+ this.isShowAll = true
+ } else {
+ this.isShowAll = false
+ }
+ },
+ nodeOpen(data, node, el) {
+ // $($(el.$el).find(".node_i")[0]).attr(
+ // "class",
+ // "node_i el-icon-folder-opened"
+ // );
+ },
+ nodeClose(data, node, el) {
+ // $($(el.$el).find(".node_i")[0]).attr("class", "node_i el-icon-folder");
+ },
+ }
+};
+</script>
+
+<style scoped>
+.device-page {
+ display: flex;
+ padding-top: 10px;
+ box-sizing: border-box;
+ width: 100%;
+}
+
+.device-left {
+ width: 250px;
+ height: 100%;
+ background: #fff;
+ border-radius: 16px;
+ box-sizing: border-box;
+ padding: 10px 16px;
+ flex-shrink: 0;
+ padding-right: 0;
+}
+
+.device-right {
+ background: #fff;
+ width: calc(100% - 250px);
+ height: calc(100vh - 100px);
+ border-radius: 16px;
+ box-sizing: border-box;
+ padding: 10px;
+}
+
+.showLargeCategory {
+ width: 100%;
+ height: 100%;
+}
+
+.device-right-content {
+ /* margin-top: 10px; */
+ height: calc(100% - 42px);
+ width: 100%;
+}
+
+.custom-tree-node {
+ width: 100%;
+ line-height: 32px;
+ font-size: 14px;
+}
+
+.node_i {
+ color: orange;
+ font-size: 18px;
+}
+
+.main_right {
+ height: calc(100% - 5px);
+ overflow: hidden;
+}
+
+>>>.el-tabs__content {
+ padding-top: 0;
+}
+
+>>>.single-line-ellipsis {
+ margin: 0 !important;
+}
+
+>>>.el-tree-node__content {
+ text-align: left;
+ align-items: start;
+ margin: 4px;
+ height: 100%;
+}
+</style>
--
Gitblit v1.9.3