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