From dcf9c9e0410fe1186239e3f8d6f7bdc789c08010 Mon Sep 17 00:00:00 2001 From: lzhe <lzhe@example.com> Date: 星期三, 05 六月 2024 18:00:39 +0800 Subject: [PATCH] 1 --- src/views/mdc/station-live.vue | 332 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 287 insertions(+), 45 deletions(-) diff --git a/src/views/mdc/station-live.vue b/src/views/mdc/station-live.vue index 0afc929..acc9866 100644 --- a/src/views/mdc/station-live.vue +++ b/src/views/mdc/station-live.vue @@ -2,7 +2,7 @@ * @Author: lzhe lzhe@example.com * @Date: 2024-03-26 10:28:33 * @LastEditors: lzhe lzhe@example.com - * @LastEditTime: 2024-04-23 17:08:42 + * @LastEditTime: 2024-06-05 11:37:17 * @FilePath: /smart-web/src/views/master/person/main/index.vue * @Description: 杩欐槸榛樿璁剧疆,璇疯缃甡customMade`, 鎵撳紑koroFileHeader鏌ョ湅閰嶇疆 杩涜璁剧疆: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE --> @@ -38,16 +38,16 @@ <div class="collect-info-panel"> <div class="fact-analysis-realtim"> <div class="wimi-empty" style="background-color: rgb(255, 255, 255);" v-if="dmpList.length == 0"> - <div class="wimi-empty-img" style="width: 150px; height: 150px;"> + <!-- <div class="wimi-empty-img" style="width: 150px; height: 150px;"> <img src="./quesheng.bd026700.png" style="height: auto; width: 100%;"> - </div> + </div> --> <div class="empty-description"> <div>鏆傛棤鏁版嵁</div> </div> </div> <div class="fact-analysis-card" v-for="item in dmpList" v-if="dmpList.length != 0"> - <div class="card-name" style="background-color: rgb(127, 192, 192);">{{item.description}}</div> - <div class="card-value" style="background-color: rgba(127, 192, 192, 0.14);"></div> + <div class="card-name" :style="{'background-color': item.color}">{{item.description}}</div> + <div :class="{'card-value': true,'card-value-bg1':item.name != 'Alarm','card-value-bg2':item.name == 'Alarm'}">{{item.codeName}}</div> </div> </div> </div> @@ -81,13 +81,21 @@ <div id="wcs-log" style="width: 100%;height:200px;"></div> <el-table ref="multipleTableRef1" :data="recordData" border style="width: 100%;"> <el-table-column prop="shiftIndexName" label="鐝"></el-table-column> - <el-table-column prop="temdata" label="璋冭瘯"></el-table-column> - <el-table-column prop="temdata" label="绂荤嚎"></el-table-column> - <el-table-column prop="temdata" label="寰呮満"></el-table-column> - <el-table-column prop="temdata" label="鎶ヨ"></el-table-column> - <el-table-column prop="temdata" label="杩愯"></el-table-column> - <el-table-column prop="perdata" label="绋煎姩鐜�%"></el-table-column> - <el-table-column prop="perdata" label="鎶ヨ鐜�%"></el-table-column> + <el-table-column prop="5" label="璋冭瘯"></el-table-column> + <el-table-column prop="4" label="绂荤嚎"></el-table-column> + <el-table-column prop="3" label="寰呮満"></el-table-column> + <el-table-column prop="1" label="鎶ヨ"></el-table-column> + <el-table-column prop="2" label="杩愯"></el-table-column> + <el-table-column prop="oee" label="绋煎姩鐜�%"> + <template #default="scope"> + <span>{{(Number(scope.row.oee) * 100).toFixed(2)}}</span> + </template> + </el-table-column> + <el-table-column prop="perdata" label="鎶ヨ鐜�%"> + <template #default="scope"> + <span>{{(Number(scope.row.fault) * 100).toFixed(2)}}</span> + </template> + </el-table-column> </el-table> </div> </div> @@ -116,6 +124,7 @@ <save-dialog v-if="dialog.save" ref="saveDialog" @success="addfeedbackSuccess" :workstationId="lastLevelId" @closed="dialog.save=false"></save-dialog> </template> <script> + import moment from 'moment' import * as echarts from 'echarts'; import saveDialog from './add-station-status' export default { @@ -142,7 +151,7 @@ tooltip: { trigger: 'item', //formatter: '{a} <br/>{b} : {c} ({d}%)' - formatter: '{a} 0鍒嗛挓' + formatter: '{a} {c}鍒嗛挓' }, legend: { orient: 'vertical', @@ -233,26 +242,13 @@ }, xAxis: { type: 'category', - data: ['00:00:00', '02:00:00', '04:00:00', '06:00:00', '08:00:00', '10:00:00', '12:00:00', '14:00:00', '18:00:00'], + data: [], }, yAxis: { type: 'category', data: ['1', '2'] }, - series: [ - { - name: 'wcsLog', - type: 'bar', - data: [], - emphasis: { - itemStyle: { - shadowBlur: 10, - shadowOffsetX: 0, - shadowColor: 'rgba(0, 0, 0, 0.5)' - } - } - } - ] + series: [] }, dmpList: [], stationForm: { @@ -289,7 +285,9 @@ current: "1", size: "15" }, - recordData: [] // 鐝鐘舵�佽褰晅able + records: [], + recordData: [], // 鐝鐘舵�佽褰晅able + allwcs: [] } }, created(){ @@ -343,30 +341,221 @@ } this.$HTTP.post(`/api/blade-mdc/status-record/shift-index-status-record-table`,obj).then(res=> { if(res.code == 200) { - res.data.forEach(item=> { - item.temdata = "00:00:00"; - item.perdata = "0"; - }) + var defaultValues = { + oee: 0, + fault: 0, + '1': "00:00:00", + '2': "00:00:00", + '3': "00:00:00", + '4': "00:00:00", + '5': "00:00:00" + }; + res.data.forEach(item => { + Object.keys(defaultValues).forEach(key => { + if (!item[key]) { + item[key] = defaultValues[key]; + } + }); + }); this.recordData = res.data; } }) }, + renderItem(params, api) { + var categoryIndex = api.value(0); + var start = api.coord([api.value(1), categoryIndex]); + var end = api.coord([api.value(2), categoryIndex]); + var height = api.size([0, 1])[1] * 0.6; + var rectShape = echarts.graphic.clipRectByRect( + { + x: start[0], + y: start[1] - height / 2, + width: end[0] - start[0], + height: height + }, + { + x: params.coordSys.x, + y: params.coordSys.y, + width: params.coordSys.width, + height: params.coordSys.height + } + ); + return ( + rectShape && { + type: 'rect', + transition: ['shape'], + shape: rectShape, + style: api.style() + } + ); + }, + getColor(name) { + var color = ''; + this.achievements.forEach(item=> { + if(item.code == name) { + color = item.color; + } + }) + return color; + }, + getStatus(name) { + var stauts = {}; + this.allwcs.forEach(item=> { + if(item.code == name) { + stauts.name= item.name; + stauts.type= item.type; + } + }) + return stauts; + }, getlogcart() { //鐝鐘舵�佽褰昪hart var obj = { date: this.wcsDate, + //date : "2024-05-15", humanFeedback: true, workstationId: this.lastLevelId } - this.$HTTP.post(`/api/blade-mdc/status-record/shift-index-status-record-table`,obj).then(res=> { + this.$HTTP.post(`/api/blade-mdc/status-record/shift-index-status-record-chart`,obj).then(res=> { if(res.code == 200) { - var myChart = echarts.init(document.getElementById('wcs-log')); - res.data.forEach(item => { - item.value = 0; + var yAxisData = []; + var newData = []; + this.records = res.data.reverse(); + res.data.forEach(item=> { + if(item.statusRecordList == null) item.statusRecordList = []; + var filterRecordList = []; + item.statusRecordList.forEach(item1=> { + if(item1.endTime.startsWith(this.wcsDate)) { //鍙繑鍥炲綋鍓嶇粨鏉熸棩鏈熺殑 + filterRecordList.push(item1) + } + }) + item.statusRecordList = filterRecordList; }) - this.wcsOptionLog.series[0].data = res.data; + res.data.forEach((item,index)=> { + yAxisData.push(item.shiftIndex); + //璁$畻寮�濮嬫椂闂达紝鏄剧ず鏃堕棿 + if(item.statusRecordList == null) item.statusRecordList = []; + item.statusRecordList.forEach(item1=> { + var initstart = item1.startTime.split(" ")[0]; //鏍规嵁鏃ユ湡璁$畻宸�� + var startTime = moment(item1.startTime).diff(moment(initstart + " 00:00:00"), 'minutes'); + var endTime = moment(item1.endTime).diff(moment(initstart + " 00:00:00"), 'minutes'); + var diff = moment(item1.endTime).diff(moment(item1.startTime), 'minutes') //寮�濮嬩簡澶氫箙 + var color = this.getColor(item1.wcs); + item1.value = [index,startTime,endTime,diff]; + item1.itemStyle = {"normal": {"color": color}}; + item1.statusName = this.getStatus(item1.wcs).name; + item1.statusType = this.getStatus(item1.wcs).type; + }) + newData.push(...item.statusRecordList); + }) + //娓叉煋鍥捐〃 + this.setCharts(yAxisData,newData); + + var nowTime = moment().format("HH:mm:ss"); //11:37:54 + var spaceTime = moment(obj.date + " " + nowTime).diff(moment(obj.date + " 00:00:00"), 'hours'); //绂诲綋澶�00:00:00杩囦簡澶氬皯灏忔椂 + //console.log(spaceTime,obj.date + " " + nowTime,234) + return; + //璁$畻鏃堕棿 + var startOfDay = moment().startOf('day'); //00:00:00 + var now = moment(); //褰撳墠鏃堕棿 + var diffInMilliseconds = now.diff(startOfDay); //鏃堕棿宸� + var diffInHours = Math.floor(diffInMilliseconds / (1000 * 60 * 60)); //鏃堕棿宸浆鎹㈡垚灏忔椂 + //鍒嗗壊 + var everTime = Math.ceil(diffInHours/8); + var arrData = []; + for(var i=0;i<=diffInHours;i+=everTime) { + if(i<=10) { + var num = '0' + i; + }else { + var num = i; + } + arrData.push(num + ':00:00'); + } + //璁$畻鏃堕棿缁撴潫 + this.wcsOptionLog.xAxis.data = [...arrData,moment().format("HH:mm:ss")]; myChart.setOption(this.wcsOptionLog); } }) + }, + setCharts(yAxisData,data) { + var option = { + tooltip: { + formatter: function (params) { + if(params.data.statusType == 4) { + var dom = `<span class="tipdesc">宸ヤ綅:</span>${params.data.name}</br> + <span class="tipdesc">鐘舵��:</span>${params.data.wcsDesc}</br> + <span class="tipdesc">鎻忚堪:</span>${params.data.feedbackDesc}</br> + <span class="tipdesc">鐘舵�佹椂闂�:</span>${params.data.startTime} 锝� ${params.data.endTime}</br> + <span class="tipdesc">鍙嶉鏃堕棿:</span>${params.data.feedbackTime}</br> + <span class="tipdesc">鍙嶉浜�:</span>${params.data.feedUser}</br>` + }else { + var dom = `<span class="tipstatus">${params.data.statusName}</span></br> + <span class="tipdesc">鏃舵:</span><span>${params.data.startTime.split(" ")[1]} 锝� ${params.data.endTime.split(" ")[1]}</span></br>` + } + return dom; + } + }, + grid: { + top: 10, + left: 70, + bottom: 120 + }, + xAxis: { + min: 0, + max: 1440, // 鍗曚綅鍒嗛挓 + interval: 1440/6, //姣忛殧澶氬皯鍒嗛挓鏄剧ず涓�涓埢搴� + axisLabel: { + formatter: (value)=> { + if(value == 0) { + return "00:00:00"; + }else if(value == 240) { + return "04:00:00"; + }else if(value == 480) { + return "08:00:00"; + }else if(value == 720) { + return "12:00:00"; + }else if(value == 960) { + return "16:00:00"; + }else if(value == 1200) { + return "18:00:00"; + }else if(value == 1440) { + return "00:00:00"; + } + } + } + }, + yAxis: { + type: 'category', + axisLabel: { + formatter: function (value) { + return value; + }, + rich: { + a: { + color: '#409eff', + cursor: 'pointer', + fontSize: '12px' + } + } + }, + data: yAxisData + }, + series: [ + { + type: 'custom', + renderItem: this.renderItem, + itemStyle: { + opacity: 0.8 + }, + encode: { + x: [1, 2], + y: 0 + }, + data: data + } + ] + }; + var myChart = echarts.init(document.getElementById('wcs-log')); + myChart.setOption(option); }, getwscLvalue() { var obj = { @@ -380,7 +569,7 @@ var wcsOption = JSON.parse(JSON.stringify(this.wcsBeginOption)); if(res.data.length == 0) { wcsOption.forEach(item=> { - item.value = 20; + item.value = 0; }) }else { wcsOption.forEach(item=> { @@ -444,7 +633,7 @@ if(res.code == 200) { this.stationForm = res.data; this.getdmp(this.lastLevelId,this.stationForm.machineId); - this.newDate(); //鑾峰彇褰撳墠鏃ユ湡 + //this.newDate(); //鑾峰彇褰撳墠鏃ユ湡 this.getwcsR(); this.getwscLvalue(); //宸︿晶鍥捐〃 this.alarmsearchBtn(); //鏈哄櫒灞ュ巻 @@ -455,10 +644,50 @@ } }, getdmp(lastLevelId,machineId) { + console.log(lastLevelId,machineId) this.$HTTP.get(`/api/blade-cps/workstation/get-dmp-variables?machineId=${machineId}&workstationId=${lastLevelId}`).then(res=> { if(res.code == 200) { - this.dmpList = res.data; - console.log(this.dmpList,1) + this.dmpList = []; + var that = this; + //鍙戦�亀ebsocket + var obj = { + type: "realTimeData", + workstationIdList: [lastLevelId] + } + if(this.$TOOL.socket.websocket == null) { //娌℃湁寤虹珛鍏堝缓绔� + this.$TOOL.socket.connectToWebSocket(this.$TOOL.cookie.get("TOKEN")); + } + this.$TOOL.socket.sendDataToWebSocket(obj); //鍙戦�� + this.$TOOL.socket.websocket.onmessage = function(event) { + if(res.data.length == 0) return; //娌″�间笉鐢ㄥ惊鐜� + res.data.forEach(item=> { //绗竴姝ユ妸v鏀惧埌code閲� + var eventData = JSON.parse(event.data); + if(item.name == "DeviceStatus") { //鏈哄櫒鐘舵�� + item.code = eventData.data[item.name].v; + that.allwcs.forEach(item1=> { + if(item.code == item1.code) { + item.codeName = item1.name; //绗簩姝ユ妸v鐨刢ode鍜岃繍琛屽搴� + if(item.code == "2") { + item.color = "#73D13D"; + }else { + item.color = "#75C0C0"; + } + } + }) + }else { + if(item.name == 'Alarm') { //鎶ヨ + var v = JSON.parse(eventData.data[item.name].v); + item.description = v.code; + item.codeName = v.msg; + item.color = "#370C0D"; + }else { + item.codeName = eventData.data[item.name].v; + item.color = "#75C0C0"; + } + } + }); + that.dmpList = res.data; + }; } }) }, @@ -562,6 +791,7 @@ }) this.achievements = achievements; this.collectionstatus = collectionstatus; + this.allwcs = res.data; } }) }, @@ -673,6 +903,13 @@ padding: 0 8px; overflow: hidden; word-break: break-all; + line-height: 68px; +} +.card-value-bg1 { + background-color: rgba(115, 209, 61, 0.14); +} +.card-value-bg2 { + background-color: rgba(55, 12, 13, 0.14); } .wcs-main { display: flex; @@ -763,7 +1000,7 @@ position: absolute; right: 10px; top: -2px; - color: #3b8e8e; + color: #409eff; cursor: pointer; } .status-wrap.align-left, .status-wrap:first-child { @@ -776,7 +1013,7 @@ justify-content: start; } .collect-status { - color: #3b8e8e; + color: #409eff; margin-right: 16px; font-size: 14px; } @@ -803,6 +1040,11 @@ flex-wrap: wrap; } .status-wrap /deep/ .el-checkbox.el-checkbox--large { - color: #3b8e8e; + color: #409eff; +} +#record /deep/ .tipstatus { + width: 100%; + display: inline-block; + border-bottom: 1px solid #eee; } </style> \ No newline at end of file -- Gitblit v1.9.3