smartmeter-app/pages/shebei/sbdetail.vue
2024-04-27 17:20:50 +08:00

662 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page">
<u-navbar :title="tittxt" :border-bottom="false" :background="bgc" title-color='#2E4975'
title-size='36' height='36' id="navbar">
</u-navbar>
<view class="zhuhu" >
<view class="card1">
<view class="top">
<view class="left">
设备
</view>
<view class="right">
<image class="img1" src="https://api.ccttiot.com/smartmeter/img/static/uGvS4RQvbw7OOfhzy6xf" mode="" style="margin-right: 30rpx;" @click="opendevices"></image>
<image class="img1" src="https://api.ccttiot.com/smartmeter/img/static/uNEKwe2WKsJdtQzOdEay" mode="" @click="toewm()"></image>
</view>
</view>
<view class="mid">
<view class="mid_left">
<image src="https://api.ccttiot.com/smartmeter/img/static/uoQO0pUZ1UHcW5uVKkuR" mode=""></image>
</view>
<view class="mid_right">
<view class="mid_top">
{{ deviceInfo.deviceName }}
</view>
<view class="mid_bot">
<view class="txt" v-if="deviceInfo">电表号{{ deviceInfo.deviceId }}</view>
<div class="tip" v-if="deviceInfo.onlineStatus==1">在线</div>
<div class="tip" v-if="deviceInfo.onlineStatus==0">离线</div>
<div class="tip" v-if="deviceInfo.powerStatus==0">断电</div>
<div class="tip" v-if="deviceInfo.powerStatus==1">正常</div>
</view>
</view>
</view>
<view class="bot">
<view class="bot_left">
<view class="echarts">
<!-- <mpvue-echarts id="main" ref="pieChart" :echarts="echarts" @onInit="initChart" /> -->
<l-echart ref="chart" @finished="initChart"></l-echart>
</view>
</view>
<view class="bot_right">
<view class="cont">
<view class="tit">
{{deviceInfo.totalElectriQuantity}}KWH
</view>
<view class="txt">
总用电量
</view>
</view>
<view class="cont" style="margin-left: 60rpx;">
<view class="tit">
{{deviceInfo.price}}/
</view>
<view class="txt">
电价
</view>
</view>
</view>
</view>
</view>
<view class="card2">
<view class="tit">实时</view>
<view class="cont_box">
<view class="cont">
<view class="top">{{deviceInfo.realTimePower}}KW</view>
<view class="bot">实时功率</view>
</view>
<view class="cont" style="width: 70rpx;">
<view class="top">{{deviceInfo.electricity}}A</view>
<view class="bot">电流</view>
</view>
<view class="cont" style="width: 110rpx;">
<view class="top">{{deviceInfo.voltage}}V</view>
<view class="bot">电压</view>
</view>
</view>
</view>
<view class="card3">
<view class="tit">其他</view>
<view class="cont_box">
<!-- <view class="cont" style="width: 56rpx;" @click="topage(0)">
<view class="top">
<image src="https://api.ccttiot.com/smartmeter/img/static/uj4DT6WructS782RY0J7" mode="" style="width: 58rpx;height: 56rpx;" ></image>
</view>
<view class="bot">抄表</view>
</view> -->
<view class="cont" style="width: 58rpx;" @click="topage(1)">
<view class="top">
<image src="https://api.ccttiot.com/smartmeter/img/static/uGaAuulryhDmaDwWLuwo" mode="" style="width: 58rpx;height: 58rpx;"></image>
</view>
<view class="bot">归零</view>
</view>
<!-- <view class="cont" style="width: 58rpx;" @click="topage(2)">
<view class="top">
<image src="https://api.ccttiot.com/smartmeter/img/static/u8QfFAKCq8wE32dFA9Go" mode="" style="width: 58rpx;height: 60rpx;"></image>
</view>
<view class="bot">异常</view>
</view> -->
<view class="cont" @click="toydfx()">
<view class="top">
<image src="https://api.ccttiot.com/smartmeter/img/static/u0N4pFke1isIzNrNT6Wh" mode=""></image>
</view>
<view class="bot">用电分析</view>
</view>
<view class="cont" style="width: 115rpx;" @click="topage(3)">
<view class="top">
<image src="https://api.ccttiot.com/smartmeter/img/static/u8QfFAKCq8wE32dFA9Go" mode="" style="width: 58rpx;height: 60rpx;"></image>
</view>
<view class="bot">房租提醒</view>
</view>
<view class="cont" style="width: 56rpx;" @click="topage(4)">
<view class="top">
<image src="https://api.ccttiot.com/smartmeter/img/static/ubxoYVnbIK1rk0cfoL3j" mode=""></image>
</view>
<view class="bot">设置</view>
</view>
</view>
<view class="cont_box" style="padding-left: 30rpx;">
</view>
</view>
<!-- <view class="button">电费充值</view> -->
<!-- <view class="zhanwei" style="width: 100%;height: 300rpx;">
</view> -->
</view>
</view>
</template>
<script>
var xBlufi = require("@/utils/blufi/xBlufi.js")
import * as echarts from 'echarts'
import LEchart from '@/uni_modules/lime-echart/components/l-echart/l-echart.vue';
export default {
data() {
return {
bgc: {
backgroundColor: "#F7FAFE",
},
deviceInfo:{},
loadings:false,
info:'',
tittxt:"设备列表",
titlist: [
"全部",
"电表",
"水表",
],
curtitidx:0,
id:''
}
},
onLoad(option) {
let id = option.id
this.id=id
this.getDevice(id)
},
methods: {
async initChart() {
let value = 100;
let value2 = this.deviceInfo.surplusElectriQuantity
const option = {
// backgroundColor:"#061740",
title: {
show: false,
text: `历史请求满意度`, // 图表标题
x: 'center',
y: '20',
textStyle: {
color: '#333', //'#fff',
fontSize: 20,
},
},
series: [{
type: 'pie', // 饼图类型
radius: ['98%', '70%'], // 饼图半径,第一个值是内半径,第二个值是外半径
silent: true,
clockwise: true,
startAngle: 90, // 起始角度
z: 0,
zlevel: 0,
data: [{
value: value,
name: '占比', // 数据项名称
itemStyle: {
normal: {
color: '#8883F0', // 数据项颜色
},
},
label: {
normal: {
position: 'center',
formatter: ` {a|${value2}}\n\n{b|剩余电量}`, // 标签内容格式
rich: {
a: {
fontSize: 15,
fontWeight: '700',
color: '#333',
},
b: {
fontSize: 11,
color: '#888',
},
},
},
},
},
{
value: 100 - value,
name: '',
label: {
normal: {
show: false,
},
},
itemStyle: {
normal: {
color: '#173164',
},
},
},
],
},
{
type: 'gauge', // 仪表盘类型
radius: '130%', // 仪表盘半径,占图表容器的百分比
center: ['50%', '50%'], // 仪表盘中心位置
startAngle: 359,
endAngle: 359.9,
splitNumber: 2, // 刻度分割段数
hoverAnimation: true,
axisTick: {
show: true, // 是否显示刻度线
length: 10, // 刻度线长度
lineStyle: {
color: 'auto',
width: 1,
},
},
splitLine: {
length: 0, // 刻度线分隔线长度
lineStyle: {
width: 1,
color: '#061740',
},
},
axisLabel: {
show: false, // 是否显示刻度标签
},
pointer: {
show: false, // 是否显示指针
},
axisLine: {
lineStyle: {
opacity: 0,
},
},
detail: {
show: false, // 是否显示仪表盘详情
},
data: [{
value: 0,
name: '',
}, ],
},
],
};
// console.log( this.$refs.chartRef,'1111');
const chart = await this.$refs.chart.init(echarts);
console.log(option,11);
chart.setOption(option)
// chart.resize({
// width: uni.upx2px(210), // Convert 210rpx to pixels
// height: uni.upx2px(190.14) // Convert 190.14rpx to pixels
// });
return chart
},
// 获取设备详情
getDevice(id){
this.$u.get("/app/device/"+id).then((res) => {
// this.$forceUpdate()
if (res.code == 200) {
this.deviceInfo=res.data
console.log(this.deviceInfo,'resres');
this.loadings=true
this.initChart()
}
});
},
opendevice(){
let stause=0
if(this.deviceInfo.powerStatus==1){
stause= 0
}else{
stause=1
}
console.log(stause,'stausestause');
this.$u.put(`/app/device/${this.deviceInfo.deviceId}/changePower?status=`+stause).then((res) => {
// this.$forceUpdate()
if (res.code == 200) {
// this.groupList=res.rows
setTimeout(()=>{
this.getDevice(this.id)
},2000)
// this.loadings=true
// this.initChart()
}else{
uni.showToast({
title: res.msg,
icon: 'none'
});
}
});
},
opendevices(){
},
swiperchange(e){
this.curtitidx=e.detail.current
console.log(e,'aaaa');
},
changeidx(index){
this.curtitidx=index
},
toewm(){
uni.navigateTo({
url:"/pages/shebei/ewm"
})
},
toydfx(){
uni.navigateTo({
url:"/pages/shebei/eletj?id="+this.id
})
},
tofztx(){
console.log(this.id,'this.id');
uni.navigateTo({
url:"/page_user/fztx?id="+this.id
})
},
// 其他部分 点击进行跳转
topage(num){
if(num == 0){
uni.navigateTo({ //抄表
url:'/page_user/cbRecord'
})
}else if(num == 1){ //归零
this.$u.put(`/app/device/${this.id}/reset`).then((res) => {
if (res.code == 200) {
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
this.getDevice(this.id)
}
})
// uni.navigateTo({
// url:'/page_user/glRecord'
// })
}else if(num == 2){ //异常
}else if(num == 3){
uni.navigateTo({
url:"/page_user/fztx?id="+this.id
})
}else if(num == 4){ //设置
uni.navigateTo({
url:'/pages/shebei/setting?id='+this.id
})
}
}
}
}
</script>
<style lang="scss">
page {
background-color: #F7FAFE;
}
.page {
.zhuhu {
margin-top: 20rpx;
padding: 0 40rpx;
.card1 {
padding: 34rpx 0 0 40rpx;
width: 670rpx;
height: 583rpx;
background: #FFFFFF;
box-shadow: 0rpx 14rpx 35rpx 0rpx rgba(53, 140, 255, 0.1);
border-radius: 28rpx 28rpx 28rpx 28rpx;
.top {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
.left {
font-size: 35rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #8883F0;
}
.right {
margin-right: 56rpx;
.img1 {
width: 76rpx;
height: 76rpx;
}
}
}
.mid {
margin-top: 54rpx;
display: flex;
flex-wrap: nowrap;
align-content: flex-start;
.mid_left {
image {
width: 37rpx;
height: 98rpx;
}
}
.mid_right {
margin-left: 40rpx;
display: flex;
flex-wrap: wrap;
.mid_top {
width: 100%;
font-size: 42rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #262B37;
}
.mid_bot {
display: flex;
flex-wrap: nowrap;
align-items: center;
.txt {
font-size: 24rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #95989D;
}
.tip {
display: flex;
align-items: center;
justify-content: center;
margin-left: 19rpx;
width: 38rpx;
height: 23rpx;
background: rgba(204, 204, 204, 0);
opacity: 1;
border: 2rpx solid #8883F0;
border-radius: 40rpx;
font-size: 14rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #8883F0;
}
}
}
}
.bot {
margin-top: 83rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
.bot_left {
width: 210rpx;
height: 190.14rpx;
margin-right: 34rpx;
.echarts {
width: 210rpx;
height: 190.14rpx;
}
}
.bot_right {
// margin-top: 50rpx;
display: flex;
flex-wrap: nowrap;
.cont {
.tit {
font-size: 28rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 600;
color: #262B37;
line-height: 49rpx;
}
.txt {
font-size: 24rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #262B37;
}
}
}
}
}
.card2 {
padding-top: 40rpx;
margin-top: 24rpx;
width: 670rpx;
height: 254rpx;
background: #FFFFFF;
box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(53, 140, 255, 0.1);
border-radius: 28rpx;
.tit {
margin-left: 40rpx;
font-size: 35rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #8883F0;
}
.cont_box {
margin-top: 32rpx;
display: flex;
flex-wrap: nowrap;
justify-content: space-around;
.cont {
width: 25%;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
text-align: center;
.top {
width: 110rpx;
font-size: 32rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #262B37;
}
.bot {
margin-top: 20rpx;
font-size: 24rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #262B37;
}
}
}
}
.card3 {
padding-top: 40rpx;
margin-top: 24rpx;
width: 670rpx;
// height: 318rpx;
background: #FFFFFF;
box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(53, 140, 255, 0.1);
border-radius: 28rpx;
padding-bottom: 20rpx;
.tit {
margin-left: 40rpx;
font-size: 35rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #8883F0;
}
.cont_box {
// padding-left: 30rpx;
// padding-right: 30rpx;
padding: 0 40rpx;
margin-top: 32rpx;
display: flex;
flex-wrap: nowrap;
justify-content: space-around;
.cont:last-child{
margin-right: 0rpx;
}
.cont {
width: 112rpx;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
margin-right: 80rpx;
.top {
image {
width: 56rpx;
height: 56rpx;
}
}
.bot {
margin-top: 15rpx;
font-size: 28rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #808080;
}
}
}
}
.button {
margin-left: 76rpx;
margin-top: 178rpx;
display: flex;
justify-content: center;
align-items: center;
width: 520rpx;
height: 104rpx;
background: #8883F0;
box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1);
border-radius: 52rpx 52rpx 52rpx 52rpx;
font-size: 32rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #FFFFFF;
}
}
}
</style>