From 504c1d84f56e245a8c0825ae4963fcb7e8ab421a Mon Sep 17 00:00:00 2001
From: longyvfengyun <496960745@qq.com>
Date: 星期四, 24 八月 2023 23:29:29 +0800
Subject: [PATCH] 门禁内容提交

---
 src/assets/js/const/door.js                          |   24 ++++
 src/views/accessControl/accessControl.vue            |   20 +--
 src/assets/js/tools/getLabelByKey.js                 |   19 +++
 src/views/airConditioning/components/setAirParam.vue |    8 -
 src/assets/js/const/air.js                           |    2 
 src/views/accessControl/js/doorInfoModule.js         |   57 +++++++++++
 src/views/airConditioning/js/airControlModule.js     |   69 +++++++++++++
 src/views/airConditioning/js/api.js                  |   17 +++
 src/views/airConditioning/airConditioning.vue        |   44 +++++++-
 9 files changed, 236 insertions(+), 24 deletions(-)

diff --git a/src/assets/js/const/air.js b/src/assets/js/const/air.js
index ee16b0e..2bc1b9f 100644
--- a/src/assets/js/const/air.js
+++ b/src/assets/js/const/air.js
@@ -12,7 +12,7 @@
     startDisinfect: 0x38, // 鍚姩绌鸿皟娑堟瘨
     stopDisinfect: 0x3A, // 鍋滄绌鸿皟娑堟瘨
 
-    startExhaustFan: 0x3C,  // 鍚姩绌鸿皟鎺掗鏈哄惎鍔�
+    startExhaustFan: 0x3C,  // 鍚姩绌鸿皟鎺掗鏈�
     stopExhaustFan: 0x3E    // 鍋滄绌鸿皟鎺掗鏈�
   }
 }
diff --git a/src/assets/js/const/door.js b/src/assets/js/const/door.js
new file mode 100644
index 0000000..667af4c
--- /dev/null
+++ b/src/assets/js/const/door.js
@@ -0,0 +1,24 @@
+export default {
+  lockStatus: [
+    {
+      key: 0,
+      label: "姝e父鍏�"
+    },
+    {
+      key: 1,
+      label: "姝e父寮�"
+    },
+    {
+      key: 2,
+      label: "鐭矾鎶ヨ"
+    },
+    {
+      key: 3,
+      label: "鏂矾鎶ヨ"
+    },
+    {
+      key: 4,
+      label: "寮傚父鎶ヨ"
+    },
+  ]
+}
diff --git a/src/assets/js/tools/getLabelByKey.js b/src/assets/js/tools/getLabelByKey.js
new file mode 100644
index 0000000..afc3a45
--- /dev/null
+++ b/src/assets/js/tools/getLabelByKey.js
@@ -0,0 +1,19 @@
+/**
+ * 鏍规嵁key鍊硷紝鑾峰彇label鍊�
+ * @param key
+ * @param list
+ * @param defaultLabel
+ * @return label
+ */
+function getLabelByKey(key, list, defaultLabel) {
+  let label = defaultLabel===undefined?"":defaultLabel;
+  for(let i=0; i<list.length; i++) {
+    let item = list[i];
+    if(item.key === key) {
+      label = item.label;
+      break;
+    }
+  }
+  return label;
+}
+export default getLabelByKey;
diff --git a/src/views/accessControl/accessControl.vue b/src/views/accessControl/accessControl.vue
index 0f602e3..3a5ffa2 100644
--- a/src/views/accessControl/accessControl.vue
+++ b/src/views/accessControl/accessControl.vue
@@ -1,10 +1,8 @@
 <script setup>
 import FlexBox from "@/components/FlexBox.vue";
-import {reactive} from "vue";
-const nums = reactive([]);
-for(let i=0; i<10; i++) {
-	nums.push(i);
-}
+import doorInfoModule from "@/views/accessControl/js/doorInfoModule";
+const {doorInfos} = doorInfoModule();
+
 </script>
 
 <template>
@@ -13,17 +11,17 @@
 			<div class="flex-layout-absolute">
 				<div class="access-control-list">
 					<el-row>
-						<el-col :span="4" v-for="item in nums" :key="item">
+						<el-col :span="4" v-for="item in doorInfos" :key="item">
 							<div class="access-control-item">
 								<flex-box>
 									<div class="access-control-img">
 										<img src="./images/menJin.png" alt="">
 									</div>
-									<div class="access-control-text update-time">
-										2023-06-29 00:00:00
-									</div>
-									<div class="access-control-text home-number">401</div>
-									<div class="access-control-text state">鍏抽棴鐘舵��</div>
+<!--									<div class="access-control-text update-time">-->
+<!--										2023-06-29 00:00:00-->
+<!--									</div>-->
+									<div class="access-control-text home-number">{{ item.ip }}</div>
+									<div class="access-control-text state">闂ㄩ攣鐘舵�侊細{{ item.status }}</div>
 								</flex-box>
 							</div>
 						</el-col>
diff --git a/src/views/accessControl/js/doorInfoModule.js b/src/views/accessControl/js/doorInfoModule.js
new file mode 100644
index 0000000..e1a12a7
--- /dev/null
+++ b/src/views/accessControl/js/doorInfoModule.js
@@ -0,0 +1,57 @@
+import createWs from "@/assets/js/tools/websocket/createWs";
+import {onMounted, reactive} from "vue";
+import door from "@/assets/js/const/door";
+import getLabelByKey from "@/assets/js/tools/getLabelByKey";
+const lockStatusList = door.lockStatus;
+const doorInfoModule = ()=>{
+  const {
+    SOCKET
+  } = createWs("carCameraSocket");
+
+  const doorInfos = reactive([
+    {
+      ip: "192.168.10.19",
+      passWord: "a1234567.",
+      port: 8000,
+      userName: "admin",
+      status: "鏈煡"
+    },
+    {
+      ip: "192.168.10.18",
+      passWord: "a1234567.",
+      port: 8000,
+      userName: "admin",
+      status: "鏈煡"
+    },
+    {
+      ip: "192.168.10.44",
+      passWord: "a1234567.",
+      port: 8000,
+      userName: "admin",
+      status: "鏈煡"
+    },
+  ]);
+
+  const handleOpen = ()=>{
+    SOCKET.value.send(JSON.stringify(doorInfos));
+  }
+
+  const handleMessage = (res)=>{
+    let rs = JSON.parse(res.data);
+    let data = rs.data;
+    doorInfos.map(item=>{
+      let doorInfo = data[item.ip];
+      console.log(doorInfo);
+      item.status = getLabelByKey(doorInfo.data2.lockStatus, lockStatusList, "鏈煡");
+    });
+  }
+
+  onMounted(()=>{
+    SOCKET.value.addEventListener("open", handleOpen, false);
+    SOCKET.value.addEventListener("message", handleMessage, false);
+  });
+
+  return {doorInfos};
+}
+
+export default doorInfoModule;
diff --git a/src/views/airConditioning/airConditioning.vue b/src/views/airConditioning/airConditioning.vue
index 66b6fe8..3e4966b 100644
--- a/src/views/airConditioning/airConditioning.vue
+++ b/src/views/airConditioning/airConditioning.vue
@@ -1,6 +1,7 @@
 <script setup>
 import FlexBox from "@/components/FlexBox.vue";
 import {DArrowRight, CaretTop} from "@element-plus/icons-vue";
+import {ElMessageBox} from "element-plus";
 import HdwLight from "@/components/HdwLight.vue";
 import {ref, watch} from "vue";
 
@@ -12,6 +13,13 @@
 
 import setAirParam from "@/views/airConditioning/components/setAirParam.vue";
 
+import air from "@/assets/js/const/air";
+const airCmd = ref(air.cmd);
+
+import airControlModule from "@/views/airConditioning/js/airControlModule";
+
+const {startAir} = airControlModule();
+
 const setParamVisible = ref(false);
 
 const showSetParamDialog = ()=>{
@@ -21,6 +29,22 @@
 const setParamClose = ()=>{
 	setParamVisible.value = false;
 };
+
+const startAirByCmd = (opCmd)=>{
+	ElMessageBox.confirm(
+		"纭杩涜鎺у埗",
+		"绯荤粺鎻愮ず",
+		{
+			confirmButtonText: '纭畾',
+			cancelButtonText: '鍙栨秷',
+			type: 'info',
+			draggable: true,
+		}
+	).then(()=>{
+		startAir(opCmd);
+	}).catch(()=>{});
+
+}
 
 watch(monitorData, (data)=>{
 	setRunMonitorData(data);
@@ -140,26 +164,34 @@
 					</div>
 					<div class="tools-btn-list">
 						<div class="tools-btn-item">
-							<el-button type="primary">鍚姩绌鸿皟鍊肩彮</el-button>
+							<el-button type="primary" @click="startAirByCmd(airCmd.startWork)">鍚姩绌鸿皟宸ヤ綔</el-button>
 						</div>
 						<div class="tools-btn-item">
-							<el-button type="warning">鍋滄绌鸿皟鍊肩彮</el-button>
+							<el-button type="warning" @click="startAirByCmd(airCmd.stopWork)">鍋滄绌鸿皟宸ヤ綔</el-button>
 						</div>
 					</div>
 					<div class="tools-btn-list">
 						<div class="tools-btn-item">
-							<el-button type="primary">鍚姩绌鸿皟娑堟瘨</el-button>
+							<el-button type="primary" @click="startAirByCmd(airCmd.startOnDuty)">鍚姩绌鸿皟鍊肩彮</el-button>
 						</div>
 						<div class="tools-btn-item">
-							<el-button type="warning">鍋滄绌鸿皟娑堟瘨</el-button>
+							<el-button type="warning" @click="startAirByCmd(airCmd.stopOnDuty)">鍋滄绌鸿皟鍊肩彮</el-button>
 						</div>
 					</div>
 					<div class="tools-btn-list">
 						<div class="tools-btn-item">
-							<el-button type="primary">鍚姩绌鸿皟鎺掗</el-button>
+							<el-button type="primary" @click="startAirByCmd(airCmd.startDisinfect)">鍚姩绌鸿皟娑堟瘨</el-button>
 						</div>
 						<div class="tools-btn-item">
-							<el-button type="warning">鍋滄绌鸿皟鎺掗</el-button>
+							<el-button type="warning" @click="startAirByCmd(airCmd.stopDisinfect)">鍋滄绌鸿皟娑堟瘨</el-button>
+						</div>
+					</div>
+					<div class="tools-btn-list">
+						<div class="tools-btn-item">
+							<el-button type="primary" @click="startAirByCmd(airCmd.startExhaustFan)">鍚姩绌鸿皟鎺掗</el-button>
+						</div>
+						<div class="tools-btn-item">
+							<el-button type="warning" @click="startAirByCmd(airCmd.stopExhaustFan)">鍋滄绌鸿皟鎺掗</el-button>
 						</div>
 					</div>
 				</div>
diff --git a/src/views/airConditioning/components/setAirParam.vue b/src/views/airConditioning/components/setAirParam.vue
index 6580e58..574d942 100644
--- a/src/views/airConditioning/components/setAirParam.vue
+++ b/src/views/airConditioning/components/setAirParam.vue
@@ -17,15 +17,14 @@
 
 const setAirParam = async ()=>{
 	const isSuccess = await setParam();
-	console.log(isSuccess);
 	if(isSuccess) {
 		emits('close', false);
 	}
 }
 
-// onMounted(()=>{
-// 	getParam();
-// });
+onMounted(()=>{
+	getParam();
+});
 </script>
 
 <template>
@@ -52,7 +51,6 @@
 	<div class="el-dialog-footer">
 		<el-button type="primary" @click="getParam">璇诲彇</el-button>
 		<el-button type="success" :disabled="!isCanSet" @click="setAirParam">璁剧疆</el-button>
-		<el-button type="success" @click="setAirParam">璁剧疆</el-button>
 	</div>
 </div>
 </template>
diff --git a/src/views/airConditioning/js/airControlModule.js b/src/views/airConditioning/js/airControlModule.js
index 40d4d32..9033c70 100644
--- a/src/views/airConditioning/js/airControlModule.js
+++ b/src/views/airConditioning/js/airControlModule.js
@@ -1,6 +1,6 @@
 import {reactive, ref} from "vue";
 import air from "@/assets/js/const/air";
-import {getAirParam, setAirParam} from "@/views/airConditioning/js/api";
+import {controlAir, getAirParam, setAirParam} from "@/views/airConditioning/js/api";
 import {ElLoading, ElMessage} from "element-plus";
 
 const airControlModule = ()=>{
@@ -62,6 +62,10 @@
     });
   }
 
+  /**
+   * 璁剧疆鍙傛暟
+   * @return {Promise<Awaited<boolean>>}
+   */
   const setParam = async ()=>{
     const loading = ElLoading.service({
       lock: false,
@@ -95,11 +99,74 @@
     }
   }
 
+  const startAir = async (opCmd)=>{
+    const loading = ElLoading.service({
+      lock: false,
+      text: '鎵ц涓�...',
+      background: 'rgba(0, 0, 0, 0.3)',
+    });
+    let msg = "";
+    switch (opCmd) {
+      case 0x30:
+        msg = "鍚姩绌鸿皟宸ヤ綔";
+        break;
+      case 0x32:
+        msg = "鍋滄绌鸿皟宸ヤ綔";
+        break;
+      case 0x34:
+        msg = "鍚姩绌鸿皟鍊肩彮";
+        break;
+      case 0x36:
+        msg = "鍋滄绌鸿皟鍊肩彮";
+        break;
+      case 0x38:
+        msg = "鍚姩绌鸿皟娑堟瘨";
+        break;
+      case 0x3A:
+        msg = "鍋滄绌鸿皟娑堟瘨";
+        break;
+      case 0x3C:
+        msg = "鍚姩绌鸿皟鎺掗鏈�";
+        break;
+      case 0x3E:
+        msg = "鍚姩绌鸿皟鎺掗鏈�";
+        break;
+    }
+    try {
+      const res = await controlAir(210000001, opCmd);
+      loading.close();
+      let rs = res.data;
+      if(rs.code === 1 && rs.data) {
+        ElMessage({
+          showClose: true,
+          message: msg+'鎴愬姛',
+          type: 'success',
+        });
+      }else {
+        ElMessage({
+          showClose: true,
+          message: msg+'澶辫触',
+          type: 'error',
+        });
+      }
+    }catch (error) {
+      ElMessage({
+        showClose: true,
+        message: msg+'澶辫触',
+        type: 'error',
+      });
+      loading.close();
+      console.log(error);
+    }
+
+  }
+
   return {
     isCanSet,
     airParam,
     getParam,
     setParam,
+    startAir
   };
 }
 export default airControlModule;
diff --git a/src/views/airConditioning/js/api.js b/src/views/airConditioning/js/api.js
index 2c0f581..756bb2b 100644
--- a/src/views/airConditioning/js/api.js
+++ b/src/views/airConditioning/js/api.js
@@ -27,3 +27,20 @@
     data,
   });
 }
+
+/**
+ * 鎺у埗绌鸿皟
+ * @param devId 璁惧ID
+ * @param opCmd 鎺у埗鍛戒护
+ * @return {Promise<axios.AxiosResponse<any>> | *}
+ */
+export const controlAir = (devId, opCmd)=>{
+  return axios({
+    method: "POST",
+    url: "/envirParam/updateAirStartTest",
+    params: {
+      devId,
+      opCmd
+    },
+  });
+}

--
Gitblit v1.9.1