From e5cdf3af17609b49138cec3e8fb200752365f651 Mon Sep 17 00:00:00 2001 From: lzhe <lzhe@example.com> Date: 星期五, 01 十一月 2024 14:58:12 +0800 Subject: [PATCH] 1 --- src/views/mdc/realtime-status/index.vue | 233 ++++++++++++++++++++++------------------------------------ 1 files changed, 89 insertions(+), 144 deletions(-) diff --git a/src/views/mdc/realtime-status/index.vue b/src/views/mdc/realtime-status/index.vue index 904247d..ecc298c 100644 --- a/src/views/mdc/realtime-status/index.vue +++ b/src/views/mdc/realtime-status/index.vue @@ -1,8 +1,8 @@ <!-- * @Date: 2024-04-09 22:11:21 - * @LastEditors: gaosp - * @LastEditTime: 2024-09-04 22:11:55 - * @FilePath: /mdc/Users/mache/Documents/demo/cps-web/src/views/mdc/realtime-status/index.vue + * @LastEditors: lzhe lzhe@example.com + * @LastEditTime: 2024-10-31 17:27:54 + * @FilePath: /cps-web/src/views/mdc/realtime-status/index.vue 瀹炴椂鐪嬫澘 --> <template> @@ -16,7 +16,7 @@ <el-icon class="setIcon"> <Setting /> </el-icon> - <span class="setBtn" @click="goSet">璁剧疆</span> + <span class="setBtn" @click="goSet">鍒嗘瀽璁剧疆</span> </span> </div> <ul class="status-view-box" v-if="station == '鐘舵�佽鍥�'"> @@ -44,37 +44,34 @@ <ArrowRight /> </el-icon> </div> - <div class="status-content-cardp" v-for="item in timestatus" :style="{ 'width': (100 / column) + '%' }"> + <div class="status-content-cardp" v-for="(item, index) in timestatus" + :style="{ 'width': (100 / column) + '%' }"> <div class="status-card-box" style="border-color: #ccc;"> <div class="status-card-top"> <div class="status-card-detail"> - <div title="461" class="status-card-detail-name">{{ item.code }}</div> + <div class="status-card-detail-name" :title="item.name">{{ item.name }}</div> <div class="status-card-detail-status"> <div class="status-card-detail-point" :style="{ 'background-color': item.statusStyle }"> </div>{{ item.statusName }} - <div class="status-card-detail-time" :style="{ 'color': item.statusStyle }">{{ item.time - }} + <div class="status-card-detail-time" :style="{ 'color': item.statusStyle }">{{ item.time }} </div> </div> </div> <div class="status-card-machine" style="border-color: #ccc;"> <div class="status-card-machine-img"> - <img src="./station.png" width="68" height="68"> + <img :src="item.avatar" width="68" height="68"> + </div> <div class="status-card-machine-mesg"> <div class="status-card-machine-mesg-form"> <div class="status-card-machine-mesg-label">宸ヤ綅缂栧彿</div> <div class="status-card-machine-mesg-value">{{ item.code }}</div> </div> - <div class="status-card-machine-mesg-form"> - <div class="status-card-machine-mesg-label">宸ュ崟</div> - <div class="status-card-machine-mesg-value">-</div> - </div> </div> </div> </div> <div class="status-card-bottom"> - <div class="status-card-bottom-realtime" @click="showvisible(item)"><i + <div class="status-card-bottom-realtime" @click="showvisible(item, index)"><i class="iconfont saber-xiangqing status-card-bottom-icon"></i> 瀹炴椂鏁版嵁</div> <div class="status-card-bottom-detail" @click="gostatus(item)"><i class="iconfont saber-shuju status-card-bottom-icon"></i> 宸ヤ綅璇︽儏</div> @@ -84,18 +81,18 @@ </div> <el-dialog :title="titleMap" v-model="visible" :width="740"> <div class="dialogstyle"> - <div class="realtime-analysis-card" v-for="item in visibleList"> - <div class="card-name" :style="{ 'background-color': item.color }">{{ item.name }}</div> - <div class="card-value" - :class="{ 'card-value': true, 'card-value-bg1': item.key != 'Alarm', 'card-value-bg2': item.key == 'Alarm' }"> - {{ item.code }}</div> - </div> + <el-table :data="timestatus[clickIndex].properties" style="width: 100%" border> + <el-table-column prop="name" label="鏁版嵁鐐�"></el-table-column> + <el-table-column prop="code" label="鍊�"></el-table-column> + <el-table-column prop="moment" label="閲囬泦鏃堕棿"></el-table-column> + </el-table> </div> </el-dialog> </div> </template> <script> +import station from "./station1.jpg"; import moment from 'moment'; import * as ElementPlusIconsVue from '@element-plus/icons-vue' let icons = [] @@ -108,6 +105,8 @@ }, data() { return { + station: station, + clickIndex: 0, allwcs: [], statusStyle: "#ccc", titleMap: "", @@ -127,8 +126,8 @@ } }, mounted() { + this.deviceStatus = this.$route.query.currentTag ? [...this.$route.query.currentTag] : []; this.getstationlabelList(); //鑾峰彇鏍囩瑙嗗浘涓嬬殑list - this.setIntervalTime(); //鍗佺澧炲姞鏃堕棿 this.getprocess(); //鑾峰彇棰滆壊==銆嬭幏鍙栭《閮╰itle==銆嬭缃嚑琛屽嚑鍒�==銆媤s }, methods: { @@ -144,42 +143,6 @@ } }) }, - setIntervalTime() { - function addTime(timeStr) { - var increaseByMilliseconds = 10 * 1000; // 10绉掕浆鎹负姣 - // 瑙f瀽鏃堕棿瀛楃涓蹭负澶╂暟銆佸皬鏃躲�佸垎閽熷拰绉� - if (timeStr != undefined && timeStr != "--") { - var parts = timeStr.match(/(\d+)澶�(\d+)鏃�(\d+)鍒�(\d+)绉�/); - var days = parseInt(parts[1], 10) * 24 * 60 * 60 * 1000; // 澶╂暟杞崲涓烘绉� - var hours = parseInt(parts[2], 10) * 60 * 60 * 1000; // 灏忔椂杞崲涓烘绉� - var minutes = parseInt(parts[3], 10) * 60 * 1000; // 鍒嗛挓杞崲涓烘绉� - var seconds = parseInt(parts[4], 10) * 1000; // 绉掕浆鎹负姣 - // 鍒涘缓涓�涓狹oment.js鐨勬寔缁椂闂村璞� - var duration = moment.duration(days + hours + minutes + seconds); - // 澧炲姞鏃堕棿 - duration.add(increaseByMilliseconds); // 澧炲姞10绉� - // 灏嗘寔缁椂闂磋浆鎹㈠洖澶╂暟銆佸皬鏃躲�佸垎閽熷拰绉掞紙娉ㄦ剰杩欓噷鍙兘涓嶅畬鍏ㄧ簿纭紝鍥犱负澶╂暟鍙兘涓嶆槸鏁存暟锛� - var totalMilliseconds = duration.asMilliseconds(); - var totalDays = Math.floor(totalMilliseconds / (1000 * 60 * 60 * 24)); - var remainingMilliseconds = totalMilliseconds % (1000 * 60 * 60 * 24); - var totalHours = Math.floor(remainingMilliseconds / (1000 * 60 * 60)); - remainingMilliseconds %= (1000 * 60 * 60); - var totalMinutes = Math.floor(remainingMilliseconds / (1000 * 60)); - remainingMilliseconds %= (1000 * 60); - var totalSeconds = Math.floor(remainingMilliseconds / 1000); - return `${totalDays}澶�${totalHours}鏃�${totalMinutes}鍒�${totalSeconds}绉抈; - } else { - return timeStr; - } - } - setInterval(() => { - if (this.timestatus.length != 0) { - this.timestatus.forEach(item => { - item.time = addTime(item.time); - }) - } - }, 1000 * 10) - }, changestationlabel(name) { this.stationlabel = name; this.stationlabelList.forEach(item => { @@ -190,14 +153,21 @@ this.gettimestatus(); //鏌ヨ鍒楄〃 }, getstationlabelList() { - this.$HTTP.get("/api/blade-cps/group/get-mdc-group").then(res => { + this.$HTTP.get("/api/smis/group/get-mdc-group").then(res => { if (res.code == 200) { this.stationlabelList = res.data; - this.stationlabel = res.data[0].groupName; + if (res.data.length != 0) { + this.stationlabel = res.data[0].groupName; + } } }) }, changestatus(name) { + if (this.stationlabelList.length == 0) { + this.station = "鐘舵�佽鍥�"; + this.$message.error('鏈�夊畾瀹炴椂鐪嬫澘鏌ヨ缁勶紝璇峰埌"鍒嗘瀽璁剧疆 -> 瀹炴椂鐪嬫澘鏌ヨ缁勮缃�"涓�夋嫨宸ヤ綅缁�'); + return; + } this.station = name; if (this.station == '鐘舵�佽鍥�') { this.workStationGroupIdList = []; @@ -207,17 +177,15 @@ } this.gettimestatus(); //鏌ヨ鍒楄〃 }, - showvisible(item) { - if (item.properties == null || item.properties.length == 0) { + showvisible(item, index) { + if(item.properties.length == 0) { this.$message({ - message: '璇烽厤缃噰闆嗛」', + message: '璇ュ伐浣嶆病鏈夐厤缃暟鎹偣', type: 'warning' }); return; } - var visibleList = JSON.parse(JSON.stringify(item.properties)); - this.titleMap = "瀹炴椂鏁版嵁(" + item.code + ")"; - this.visibleList = visibleList; + this.clickIndex = index; this.visible = true; }, searchstatus(item, index) { @@ -240,13 +208,13 @@ } }, goSet() { - this.$router.push('/mdc/configuration'); + this.$router.push('/mdc/configuration?isShowSearch=1'); //鍒嗘瀽璁剧疆 }, gostatus(item) { this.$router.push('/mdc/station-live?code=' + item.id); }, getprocess() { //棰滆壊鐘舵�� - this.$HTTP.get(`/api/blade-cps/global_wcs/list?code=&name=`).then(res => { + this.$HTTP.get(`/api/smis/global_wcs/list?code=&name=`).then(res => { if (res.code == 200) { this.allwcs = res.data; this.getdevicestatus(); //鑾峰彇椤堕儴title/鍏蜂綋鏁版嵁 @@ -254,12 +222,12 @@ } }) }, - changeTime(time) { + changeTime(time,diffTime) { // 浣跨敤Moment.js瑙f瀽杩欎袱涓棩鏈熷瓧绗︿覆 var date1 = moment(time); - var date2 = moment(moment().format('YYYY-MM-DD HH:mm:ss')); + var date2 = moment(diffTime); // 璁$畻涓や釜鏃ユ湡涔嬮棿鐨勫樊寮傦紙姣锛� - var differenceInMilliseconds = date2.diff(date1); // 娉ㄦ剰锛歞ate2 - date1 缁欏嚭姝f暟宸紓 + var differenceInMilliseconds = date1.diff(date2); // 娉ㄦ剰锛歞ate1 - date2 缁欏嚭姝f暟宸紓 // 浣跨敤duration瀵硅薄灏嗗樊寮傝浆鎹负鏇存槗浜庡鐞嗙殑鍗曚綅 var duration = moment.duration(differenceInMilliseconds); // 鎻愬彇澶╂暟銆佸皬鏃舵暟銆佸垎閽熸暟鍜岀鏁� @@ -277,26 +245,14 @@ workStationGroupIdList: this.workStationGroupIdList } this.timestatus = []; - this.$HTTP.post(`/api/blade-cps/workstation/real-time-status?current=${this.current || 0}&size=${this.size || 0}`, obj).then(res => { + this.$HTTP.post(`/api/smis/workstation/real-time-status?current=${this.current || 0}&size=${this.size || 6}`, obj).then(res => { if (res.code == 200) { var ids = []; - console.log(this.allwcs, res.data) res.data.records.forEach(item => { - ids.push(item.id); - if (item.properties != null && item.properties.length != 0) { - item.properties.forEach(item1 => { - if (item1.key == "DeviceStatus") { - this.allwcs.forEach(item2 => { - if (item2.code == item1.value) { - item1.color = item2.color; - } - }) - } - }) - } else { - item.statusName = "鏈煡"; - item.statusStyle = '#ccc'; + if(item.avatar == "") { + item.avatar = station; } + ids.push(item.id); }) this.timestatus = res.data.records; this.total = res.data.total; @@ -314,10 +270,7 @@ that.$TOOL.socket.sendDataToWebSocket(obj); //鍙戦�� } }, 500); - var num = 0; - var intervalId; this.$TOOL.socket.websocket.onmessage = function (event) { - num++; var eventData = JSON.parse(event.data); if (that.timestatus.length == 0) return; //娌″�间笉鐢ㄥ惊鐜� that.timestatus.forEach((item, index) => { //绗竴姝ユ妸v鏀惧埌code閲� @@ -328,7 +281,9 @@ } if (eventData.data.DeviceStatus) { var time = moment(eventData.data.DeviceStatus.t).format('YYYY-MM-DD HH:mm:ss'); - var diffTime = that.changeTime(time); //杞崲鎴愬樊鍊硷紙鏃跺垎绉掞級 + var preT = moment(eventData.data.DeviceStatus.preT).format('YYYY-MM-DD HH:mm:ss'); + var diffTime = that.changeTime(time,preT); //杞崲鎴愬樊鍊硷紙鏃跺垎绉掞級 + var diffTime = diffTime; item.time = diffTime; that.allwcs.forEach(item1 => { if (item1.code == eventData.data.DeviceStatus.v) { @@ -338,71 +293,56 @@ }) } else { if (item.time == undefined || item.time == "--") { - var diffTime = "--"; - item.time = diffTime; + item.time = "--"; + item.statusName = "鏈煡"; + item.statusStyle = '#ccc'; } } item.properties.forEach((item1, index1) => { if (item1.key == "DeviceStatus") { //鏈哄櫒鐘舵�� - if (item1.value == "2") { - that.allwcs.forEach(item2 => { - if (item2.code == item1.value) { - item1.color = item2.color; - item1.code = item2.name; - } - }) - } else { - item1.color = "#75C0C0"; - } + that.allwcs.forEach(item2 => { + if(eventData.data.DeviceStatus && item2.code == eventData.data.DeviceStatus.v) { + item1.value = item2.code; + item1.code = item2.name; + item1.moment = that.timestampChangeTime(eventData.data[item1.key].t); //鏃堕棿鎴宠浆鍖栨垚鏃ユ湡 + } + }) + if (Object.keys(eventData.data).length == 0) { //ws娌℃湁data鏁版嵁锛岀粰榛樿鍊� + item1.code = ""; + item1.moment = ""; + }; } else { - if (item1.key == 'Alarm') { //鎶ヨ - if (eventData.data[item1.key]) { - var v = JSON.parse(eventData.data[item1.key].v); - if (Array.isArray(v)) { //濡傛灉鏄暟缁勶紝涓嶈祴鍊� - if (v.length == 0) { - res.data.records[index].properties.splice(index1, 1); - } else { - item1.name = v[0].code; - item1.code = v[0].msg; - that.allwcs.forEach(item2 => { - if (item2.name == "鎶ヨ") { - item1.color = item2.color; - } - }) - } - } else { - item1.name = v.code; - item1.code = v.msg; - that.allwcs.forEach(item2 => { - if (item2.name == "鎶ヨ") { - item1.color = item2.color; - } - }) - } - } - } else { - if (eventData.data[item1.key]) { - item1.code = eventData.data[item1.key].v; - item1.color = "#75C0C0"; - } + if(eventData.data[item1.key]) { + item1.code = eventData.data[item1.key].v; + item1.moment = that.timestampChangeTime(eventData.data[item1.key].t); //鏃堕棿鎴宠浆鍖栨垚鏃ユ湡 + }else { + item1.code = ""; + item1.moment = ""; } } + }) } }); }; - // var len = res.data.records.length; - // intervalId = setInterval(function() { - // if (num === len) { - // clearInterval(intervalId); - // that.timestatus = res.data.records; //绛夋墍鏈塻ocket鍥炴潵浠ュ悗璧嬪�� - // } - // }, 500); } }) }, + timestampChangeTime(timestamp) { //鏃堕棿鎴宠浆鎹㈡垚鏃堕棿 + var date = new Date(timestamp); + //鎻愬彇骞存湀鏃ュ皬鏃跺垎閽熺 + var year = date.getFullYear(); + var month = date.getMonth() + 1; // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ヨ鍔�1 + var day = date.getDate(); + var hours = date.getHours(); + var minutes = date.getMinutes(); + var seconds = date.getSeconds(); + // 鏍煎紡鍖栨棩鏈熷瓧绗︿覆 + var formattedDate = `${year}-${month < 10 ? '0' : ''}${month}-${day < 10 ? '0' : ''}${day} ${hours < 10 ? '0' : ''}${hours}:${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`; + return formattedDate; + }, getdevicestatus() { - this.$HTTP.get(`/api/blade-mdc/work-station-analysis/device-status-statistics`).then(res => { + this.$HTTP.get(`/api/mdc/work-station-analysis/device-status-statistics`).then(res => { if (res.code == 200) { res.data.forEach(item => { item.active = false; @@ -411,6 +351,9 @@ item.color = item1.color; } }) + if (this.$route.query.currentTag == item.status) { + item.active = true; + } }) res.data[0].icon = "Position"; res.data[1].icon = "Loading"; @@ -421,7 +364,7 @@ } }) } - } + }, } </script> @@ -530,7 +473,7 @@ font-weight: 700; font-size: 16px; color: #333; - width: 33%; + max-width: 37%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; @@ -546,12 +489,12 @@ width: 12px; height: 12px; border-radius: 6px; - margin-right: 8px; + margin-right: 2px; } .status-card-detail-time { line-height: 12px; - margin-left: 16px; + margin-left: 2px; } .status-card-machine { @@ -615,6 +558,7 @@ display: flex; align-items: center; justify-content: center; + cursor: pointer; } .status-card-bottom-detail, @@ -623,6 +567,7 @@ display: flex; align-items: center; justify-content: center; + cursor: pointer; } .status-card-bottom-icon { -- Gitblit v1.9.3