<template> <view class="contentike"> <view class="fixed" style="color: #FFFDEF;"> <cu-custom bgColor="bg-gradual-sisBlack" :isBack="true"> <block slot="backText"><view style="height: 80rpx;line-height: 80rpx;color: silver;">返回</view></block> <block slot="content"> <view style="color: silver;">{{ address }}</view> </block> </cu-custom> </view> <view class="threeTarget" v-show="targetdetail_visable.targetdetail_target"> <view class="target"> <view class="target_zi">指标</view> <view class="target_dianLiang">{{targetName}}</view> </view> <view class="target"> <view style="font-size: 16px;margin-top: -7px;">数值</view> <view class="target_count">{{ targetdetail.targetdetail_target }}</view> </view> <view class="target"> <view style="font-size: 16px;margin-top: -7px;">单位</view> <view class="target_danWei">{{targetUnit}}</view> </view> </view> <view class="qiun-charts"> <view class="speedPowerDiagram">24小时指标曲线图</view> <canvas canvas-id="canvasLineA" id="canvasLineA" class="charts" @touchstart="touchLineA"></canvas> </view> <view class="qiun-columnCharts"> <view class="sevenDayColunm">7天指标柱状图</view> <canvas canvas-id="canvasColumn" id="canvasColumn" class="charts" @touchstart="touchColumn"></canvas> </view> </view> </template> <script> import uCharts from '../../components/tools/u-charts/u-charts.js'; import res from '../../common/data.json'; var _self=this; var canvaLineA; var canvaColumn = null; export default { data() { let data = { targetName:"日发电量", targetUnit:"万kwh", pointKey:"MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0087", targetdetail_visable: { targetdetail_target: true, targetdetail_curve: true, targetdetail_histogram: true}, targetdetail: { targetdetail_target: '', targetdetail_curve: '', targetdetail_histogram: ''}, socketTask_bracelet:"", socketTask_targetdetail_curve:"", socketTask_targetdetail_histogram:"", socketTask_targetdetail_histogram:"", cWidth: '', cHeight: '', pixelRatio: 1, serverData: '', windPowerStationId: '', address: '', FDC: '' } return data; }, onShow() { //this.windPowerStationId = uni.getStorageSync('windPowerStationId'); //this.address = this.getWindPowerStationNameToSessionStorage(); this.address = this.dataprocessing.getWindPowerStationName(); this.FDC=this.dataprocessing.getWindPowerStationId(); this.windPowerStationId =this.dataprocessing.getWindPowerStationId(); this.hideModals(); }, onLoad(pointKey) { _self = this; this.cWidth = uni.upx2px(750); this.cHeight = uni.upx2px(400); this.getColumnServerData(); this.getLineServerData(); //this.address = this.getWindPowerStationNameToSessionStorage(); //this.windPowerStationId = uni.getStorageSync('windPowerStationId'); this.address = this.dataprocessing.getWindPowerStationName(); this.FDC=this.dataprocessing.getWindPowerStationId(); this.windPowerStationId =this.dataprocessing.getWindPowerStationId(); this.pointKey = pointKey.pointKey; this.targetName = pointKey.callTargetName; this.targetUnit = pointKey.callTargetUnit; this.targetdetail_target(); this.targetdetail_curve(); this.targetdetail_histogram(); }, onReady() {}, computed:{ backStageIp:function(){ return this.$store.state.wholeSituationBackStageIp; }, backStagePort:function(){ return this.$store.state.wholeSituationBackStagePort; },windpowerstationNameToId:function(){ return this.$store.state.windpowerstationNameToId; } }, methods: { targetInformation(pointKey,callTargetName,callTargetUnit){ //this.address = this.getWindPowerStationNameToSessionStorage(); //this.windPowerStationId = uni.getStorageSync('windPowerStationId'); this.address = this.dataprocessing.getWindPowerStationName(); this.FDC=this.dataprocessing.getWindPowerStationId(); this.windPowerStationId =this.dataprocessing.getWindPowerStationId(); this.pointKey = pointKey; this.targetName = callTargetName; this.targetUnit = callTargetUnit; this.targetdetail_target(); this.targetdetail_curve(); this.targetdetail_histogram(); }, async targetdetail_target() { let ip; uni.request({ url:'http://'+this.backStageIp+':'+this.backStagePort+'/targetdetail/targetdetail_target?pointKey='+this.pointKey, success: (res) => { ip = res.data; } }); let _this = this; // 创建一个this.socketTask对象【发送、接收、关闭socket都由这个对象操作】 this.socketTask_targetdetail_target = uni.connectSocket({ // 【非常重要】必须确保你的服务器是成功的,如果是手机测试千万别使用ws://127.0.0.1:9099【特别容易犯的错误】 url: 'ws://'+this.backStageIp+':'+this.backStagePort+'/websocket/pageNumber_8/functionNumber_1/all', success(data) { console.log('websocket连接成功'); } }); // 消息的发送和接收必须在正常连接打开中,才能发送或接收【否则会失败】 this.socketTask_targetdetail_target.onOpen(res => { console.log('WebSocket连接正常打开中...!'); this.is_open_socket = true; // 注:只有连接正常打开中 ,才能正常收到消息 this.socketTask_targetdetail_target.onMessage(res => { //console.log("收到服务器内容:" + res.data); _this.targetdetail.targetdetail_target =JSON.parse(res.data)[ip]; //console.log(_this.targetdetail.targetdetail_target); }); }); // 这里仅是事件监听【如果socket关闭了会执行】 this.socketTask_targetdetail_target.onClose(() => { uni.request({ url: 'http://'+this.backStageIp+':'+this.backStagePort+'/targetdetail/close_targetdetail_target?pointKey='+this.pointKey, success: (res) => { } }); }) }, targetdetail_curve() { Date.prototype.Format = function(fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if(/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for(var k in o) if(new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; }; let ip; uni.request({ url: 'http://'+this.backStageIp+':'+this.backStagePort+'/targetdetail/targetdetail_curve?pointKey='+this.pointKey, success: (res) => { ip = res.data; } }); let _this = this; // 创建一个this.socketTask对象【发送、接收、关闭socket都由这个对象操作】 this.socketTask_targetdetail_curve = uni.connectSocket({ // 【非常重要】必须确保你的服务器是成功的,如果是手机测试千万别使用ws://127.0.0.1:9099【特别容易犯的错误】 url: 'ws://'+this.backStageIp+':'+this.backStagePort+'/websocket/pageNumber_8/functionNumber_2/all', success(data) { console.log('websocket连接成功'); } }); // 消息的发送和接收必须在正常连接打开中,才能发送或接收【否则会失败】 this.socketTask_targetdetail_curve.onOpen(res => { console.log('WebSocket连接正常打开中...!'); this.is_open_socket = true; // 注:只有连接正常打开中 ,才能正常收到消息 this.socketTask_targetdetail_curve.onMessage(res => { //console.log("收到服务器内容:" + res.data); _this.targetdetail.targetdetail_curve = JSON.parse(res.data)[ip]; let LineA = { categories: [ ], series: [ { name: '功率', data: [], color: '#4A80B1', textColor: '#FFFFFF', textSize: this.seriesTextSize, format: val => { return val + 'kwh'; }, index: 0, legendShape: 'circle' } ] }; LineA.categories=[]; LineA.series[0].data=[]; LineA.series[0].name=this.targetName; for(var i=0;i<_this.targetdetail.targetdetail_curve.length;i++){ _this.targetdetail.targetdetail_curve[i].pointTime = new Date(_this.targetdetail.targetdetail_curve[i].pointTime*1000).Format("hh"); LineA.categories.push(_this.targetdetail.targetdetail_curve[i].pointTime); LineA.series[0].data.push(_this.targetdetail.targetdetail_curve[i].pointValueInDouble); } this.showLineA('canvasLineA', LineA); }); }); // 这里仅是事件监听【如果socket关闭了会执行】 this.socketTask_targetdetail_curve.onClose(() => { uni.request({ url: 'http://'+this.backStageIp+':'+this.backStagePort+'/targetdetail/close_targetdetail_curve?pointKey='+this.pointKey, success: (res) => { } }); }) }, targetdetail_histogram() { Date.prototype.Format = function(fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if(/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for(var k in o) if(new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; }; let ip; uni.request({ url: 'http://'+this.backStageIp+':'+this.backStagePort+'/targetdetail/targetdetail_histogram?pointKey='+this.pointKey, success: (res) => { ip = res.data; } }); let _this = this; // 创建一个this.socketTask对象【发送、接收、关闭socket都由这个对象操作】 this.socketTask_targetdetail_histogram = uni.connectSocket({ // 【非常重要】必须确保你的服务器是成功的,如果是手机测试千万别使用ws://127.0.0.1:9099【特别容易犯的错误】 url: 'ws://'+this.backStageIp+':'+this.backStagePort+'/websocket/pageNumber_8/functionNumber_3/all', success(data) { console.log('websocket连接成功'); } }); // 消息的发送和接收必须在正常连接打开中,才能发送或接收【否则会失败】 this.socketTask_targetdetail_histogram.onOpen(res => { console.log('WebSocket连接正常打开中...!'); this.is_open_socket = true; // 注:只有连接正常打开中 ,才能正常收到消息 this.socketTask_targetdetail_histogram.onMessage(res => { //console.log("收到服务器内容:" + res.data); _this.targetdetail.targetdetail_histogram = JSON.parse(res.data)[ip]; let Column = { "categories": ["04/11","04/12", "04/13", "04/14", "04/15", "04/16", "04/17"], "series": [{ "name": "发电量", "data": [], "color": "#29C35A" }] }; Column.categories=[]; Column.series[0].data=[]; Column.series[0].name=this.targetName; for(var i=0;i<_this.targetdetail.targetdetail_histogram.length;i++){ _this.targetdetail.targetdetail_histogram[i].pointTime = new Date(_this.targetdetail.targetdetail_histogram[i].pointTime*1000).Format("MM/dd"); Column.categories.push(_this.targetdetail.targetdetail_histogram[i].pointTime); Column.series[0].data.push(_this.targetdetail.targetdetail_histogram[i].pointValueInDouble); } //这里我后台返回的是数组,所以用等于,如果您后台返回的是单条数据,需要push进去 _self.showColumn('canvasColumn', Column); }); }); // 这里仅是事件监听【如果socket关闭了会执行】 this.socketTask_targetdetail_histogram.onClose(() => { uni.request({ url: 'http://'+this.backStageIp+':'+this.backStagePort+'/targetdetail/close_targetdetail_histogram?pointKey='+this.pointKey, success: (res) => { } }); }); },pushWindPowerStationNameToSessionStorage(windpowerstationName) { uni.setStorageSync('windpowerstationName', windpowerstationName); //sessionStorage.setItem('windpowerstationName', windpowerstationName); //alert("v"+ sessionStorage.getItem("windpowerstationName")); //this.common.goback('/pages/index/Index'); }, getWindPowerStationNameToSessionStorage() { uni.getStorageSync('windpowerstationName'); return uni.getStorageSync('windpowerstationName'); }, getLineServerData() { // 折线图 let LineA = { categories: [ ], series: [ { name: '功率', data: [], color: '#4A80B1', textColor: '#FFFFFF', textSize: this.seriesTextSize, format: val => { return val + 'kwh'; }, index: 0, legendShape: 'circle' } ] }; this.showLineA('canvasLineA', LineA); }, showLineA(canvasId, chartData) { canvaLineA = new uCharts({ $this: _self, canvasId: canvasId, type: 'line', fontSize: 11, legend: { show: true, position: 'top', float: 'right', fontColor: 'silver', itemGap: '4' }, dataLabel: false, dataPointShape: false, background: '#FFFFFF', pixelRatio: _self.pixelRatio, categories: chartData.categories, series: chartData.series, animation: false, xAxis: { type: 'grid', gridColor: 'silver', fontColor: 'silver', gridType: 'solid', gridColor: '#2E2E2E', axisLineColor: '#2E2E2E', labelCount: '3' // itemCount:"3" }, yAxis: { data: [ { type: 'value', fontColor: 'silver', disabled: false, //y轴轴线 min: 0, max: 40, position: 'left', axisLineColor: '#2E2E2E', title: ' 功率:(kw/h)', titleFontColor: 'silver' }, { fontColor: 'silver', disabled: false, //y轴轴线 min: 0, max: 40, position: 'right', axisLineColor: '#2E2E2E', title: '功率:(kwh)', titleFontColor: 'silver' } ], gridColor: '#2E2E2E', splitNumber: 5, gridType: 'solid', dashLength: 8, showTitle: 'true', format: val => { return val.toFixed(0) + '元'; } }, width: _self.cWidth * _self.pixelRatio, height: _self.cHeight * _self.pixelRatio, extra: { line: { type: 'line', width: '1' } } }); }, touchLineA(e) { canvaLineA.showToolTip(e, { format: function(item, category) { return category + ' ' + item.name + ':' + item.data; } }); }, moveLineA(e) { canvaLineA.scroll(e); }, getColumnServerData() { let Column = { "categories": [], "series": [{ "name": "发电量", "data": [], "color": "#29C35A" }] }; //这里我后台返回的是数组,所以用等于,如果您后台返回的是单条数据,需要push进去 _self.showColumn('canvasColumn', Column); }, showColumn(canvasId, chartData) { canvaColumn = new uCharts({ $this: _self, canvasId: canvasId, type: 'column', legend: { show: true, fontSize: 12, padding: 5, fontColor: 'silver', itemGap: '4', // margin:0, position: 'top', float: 'right' }, fontSize: 6, background: '#242424', pixelRatio: _self.pixelRatio, animation: false, categories: chartData.categories, series: chartData.series, xAxis: { // disabled:true, rotateLabel: true, disableGrid: true, axisLineColor: '#2D2D2D', fontColor: '#ffffff' // gridColor:'#2D2D2D', }, yAxis: { showTitle: true, // disableGrid:true, gridType: 'solid', dashLength: 8, gridColor: '#2D2D2D', splitNumber: 5, min: 0, max: 40, data: [ { min: 0, max: 40, position: 'left', axisLine: false, fontColor: 'silver', // title: '7天功率柱状图', title: ' 功率:(kw/h)', titleFontColor: 'silver', // title: '功率(kw/h)', // titleFontColor: '#FFFFFF', titleFontSize: 11, format: val => { return val.toFixed(0) + ''; } } ] }, dataLabel: true, width: _self.cWidth * _self.pixelRatio, height: _self.cHeight * _self.pixelRatio, extra: { column: { type: 'group', // width: _self.cWidth * _self.pixelRatio * 0.45 / chartData.categories.length width: 12, lineStyle: { width: 5 } } } }); }, goToIndex() { uni.switchTab({ url: '/pages/index/Index' }); }, touchColumn(e) { canvaColumn.showToolTip(e, { format: function(item, category) { if (typeof item.data === 'object') { return category + ' ' + item.name + ':' + item.data.value; } else { return category + ' ' + item.name + ':' + item.data; } } }); } } }; </script> <style> @font-face { font-family: '方正兰亭细黑_GBK'; src: url(../../static/fzltxh.TTF); } page { /* background-color: #FFFFFF; */ font-family: '方正兰亭细黑_GBK'; background-color: #1f1f1f; color: silver; font-size: 14px; } body { background: #1f1f1f; font-family: '方正兰亭细黑_GBK'; font-size: 14px; color: silver; } .addressName { /* width: 100%; */ /* background-color: white; */ /* width: 126px; */ height: 80rpx; line-height: 80rpx; margin-left: 40%; color: silver; font-size: 18px; } .target_dianLiang { margin-top: 15px; font-size: 16px; font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', STHeiti, 'Microsoft Yahei', Tahoma, Simsun, sans-serif; } .target_count { margin-top: 15px; font-size: 16px; font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', STHeiti, 'Microsoft Yahei', Tahoma, Simsun, sans-serif; } .target_danWei { margin-top: 15px; font-size: 16px; font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', STHeiti, 'Microsoft Yahei', Tahoma, Simsun, sans-serif; } .threeTarget { width: 100%; height: 120px; background-color: #242424; display: -webkit-flex; display: flex; justify-content: space-around; float: left; } .target { width: 28%; height: 78px; background: -webkit-linear-gradient(top, rgba(159, 131, 111, 0.1) 0%, rgba(193, 94, 21, 0.2) 100%); border-radius: 5px; float: left; margin-top: 20px; text-align: center; color: silver; padding-top: 20px; font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', STHeiti, 'Microsoft Yahei', Tahoma, Simsun, sans-serif; } .target_zi { font-size: 16px; text-align: center; margin-top: -7px; } .speedPowerDiagram { width: 100px; height: 30px; user-select: text; -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; color: silver; float: left; margin-top: 18px; margin-left: 9px; font-size: 11px; } .qiun-charts { width: 750upx; height: 400upx; margin-top: 140px; background-color: #242424; } .charts { width: 750upx; height: 400upx; } .qiun-columnCharts { width: 750upx; height: 400upx; margin-top: 20px; background-color: #242424; } .sevenDayColunm { width: 100px; height: 30px; user-select: text; -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; color: silver; float: left; margin-top: 18px; margin-left: 10px; font-size: 11px; } </style>