smartmeter-app/pages/shebei/eletj.vue
2024-05-13 02:34:58 +08:00

439 lines
9.4 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="用电分析" :border-bottom="false" :background="bgc" title-color='#2E4975' title-size='36'
height='36' id="navbar"></u-navbar>
<view class="card">
<view class="xzsj">
<u-picker mode="time" v-model="show" :params="params" @confirm="confirm"></u-picker>
</view>
<view class="month" @click="show = true">
{{yeartime.year + '年' + yeartime.month + '月'}}
</view>
<view class="tit">
本月收入(元)
</view>
<div class="txt">
{{quantity}}
</div>
<view class="echarts" v-if="loging">
<!-- <mpvue-echarts id="main" ref="pieChart" :echarts="echarts" @onInit="initChart" /> -->
<uni-ec-canvas class="uni-ec-canvas" id="uni-ec-canvas" ref="canvas" canvas-id="uni-ec-canvas"
:ec="ec">
</uni-ec-canvas>
</view>
</view>
<view class="list" style="padding-bottom: 120rpx;">
<view class="card_list" v-for="(item,index) in timelist" :key="index">
<view class="left">
{{yeartime.year + '年' + yeartime.month + '月' + item.createDay + '日'}}
</view>
<view class="right">
{{item.usedElectriQuantity}}
</view>
</view>
</view>
</view>
</template>
<script>
import uniEcCanvas from '@/components/uni-ec-canvas/uni-ec-canvas.vue'
import * as echarts from '@/components/uni-ec-canvas/echarts'
let chart = null
export default {
components: {
uniEcCanvas
},
data() {
return {
ec: {
lazyLoad: true
},
bgc: {
backgroundColor: "#F7FAFE",
},
params: {
year: true,
month: true,
day: false,
hour: false,
minute: false,
second: false
},
show: false,
yeartime: {
year: '',
month: ''
},
timelist: '',
quantity: 0, //电量
chartData: [],
chartday: [],
loging: true,
deviceId: '',
userType: ''
}
},
onLoad(e) {
// setTimeout(() => {
// this.initChart()
// }, 300);
// this.initChart()
setTimeout(() => {
console.log(this.$refs)
this.$refs.canvas.init(this.initChart)
}, 1000)
this.deviceId = e.id
const now = new Date();
this.yeartime.year = now.getFullYear()
this.yeartime.month = now.getMonth() + 1
this.gettimes()
},
methods: {
confirm(e) {
setTimeout(() => {
console.log(this.$refs)
this.$refs.canvas.init(this.initChart)
}, 1000)
this.yeartime = e
this.gettimes()
},
// 进行获取用电量请求
gettimes() {
let data = {
deviceId:this.deviceId,
year: this.yeartime.year,
month: this.yeartime.month,
groupBy: 'create_date'
}
this.loging=false
this.$u.get('/app/device/electric/count', data).then((res) => {
if (res.code == 200) {
this.timelist = res.data
this.chartData = this.timelist.map(item => item.usedElectriQuantity);
this.chartday = this.timelist.map(item => item.createDay + '日');
// console.log('用电', this.chartData, '时间', this.chartday);
this.loging=true
// 求用电总度数
// this.quantity = 0
// for (let i = 0; i < this.timelist.length; i++) {
// this.quantity += this.timelist[i].recharge / 0.5
// }
// return this.quantity
}
})
},
generateWaveData(length) {
const data = [];
for (let i = 0; i < length; i++) {
const y = Math.sin((i / (length - 1)) * Math.PI * 2); // 正弦函数生成波浪形状的y值
data.push((y + 1) * 50); // 映射到0-100的范围
}
return data;
},
// async initChart() {
// console.log('111111');
// let that =this
// // let _this = this
// const option = {
// grid: {
// left: 60,
// right: 10,
// top: 10,
// bottom: 30,
// },
// xAxis: {
// type: 'category',
// boundaryGap: false,
// axisLine: {
// show: false,
// },
// axisTick: {
// show: false,
// },
// axisLabel: {
// show: true,
// color: '#fff',
// fontSize: 11,
// rotate: 0,
// },
// splitLine: {
// show: false,
// },
// data:that.chartday,
// },
// yAxis: {
// show: true,
// axisLine: {
// show: false,
// },
// axisTick: {
// show: false,
// },
// axisLabel: {
// show: true,
// color: '#fff',
// fontSize: 11,
// formatter: function(value) {
// // 保留两位小数没有小数时显示00
// return value + '度'
// },
// },
// splitLine: {
// show: false,
// },
// },
// visualMap: {
// type: 'piecewise',
// show: false,
// dimension: 0,
// seriesIndex: 0,
// pieces: [{
// gt: 1,
// lt: 3,
// color: 'rgba(0, 0, 180, 0.4)',
// },
// {
// gt: 5,
// lt: 7,
// color: 'rgba(0, 0, 180, 0.4)',
// },
// ],
// },
// series: [{
// type: 'line',
// smooth: 0.6,
// symbol: 'none',
// lineStyle: {
// color: '#E0DBFF',
// width: 4,
// },
// areaStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
// offset: 0,
// color: '#B4B0F7'
// }, ]),
// },
// },
// data:that.chartData,
// }],
// };
// const chart = await that.$refs.chart.init(echarts)
// console.log(option,'111');
// // 给折线图赋值
// // option.series[0].data = that.chartData
// option.xAxis.data = that.chartday
// chart.setOption(option)
// return chart
// },
initChart(canvas, width, height, canvasDpr) {
let that = this
console.log(canvas, width, height, canvasDpr)
const option = {
grid: {
left: 60,
right: 10,
top: 10,
bottom: 30,
},
xAxis: {
type: 'category',
boundaryGap: false,
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
show: true,
color: '#fff',
fontSize: 11,
rotate: 0,
},
splitLine: {
show: false,
},
data:that.chartday,
},
yAxis: {
show: true,
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
show: true,
color: '#fff',
fontSize: 11,
formatter: function(value) {
// 保留两位小数没有小数时显示00
return value + '度'
},
},
splitLine: {
show: false,
},
},
visualMap: {
type: 'piecewise',
show: false,
dimension: 0,
seriesIndex: 0,
pieces: [{
gt: 1,
lt: 3,
color: 'rgba(0, 0, 180, 0.4)',
},
{
gt: 5,
lt: 7,
color: 'rgba(0, 0, 180, 0.4)',
},
],
},
series: [{
type: 'line',
smooth: 0.6,
symbol: 'none',
lineStyle: {
color: '#E0DBFF',
width: 4,
},
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: '#B4B0F7'
}, ]),
},
},
data:that.chartData,
}],
};
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: canvasDpr
})
console.log(chart);
option.xAxis.data = that.chartday
canvas.setChart(chart)
chart.setOption(option)
return chart
},
}
}
</script>
<style lang="scss">
page {
background-color: #F7FAFE;
}
.page {
padding: 0 59rpx;
.title {
margin-top: 120rpx;
font-size: 48rpx;
font-weight: 400;
letter-spacing: 0rpx;
color: rgba(38, 43, 55, 1);
}
.card {
padding-top: 32rpx;
margin-top: 46rpx;
width: 632rpx;
height: 586rpx;
background: #8883F0;
box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1);
opacity: 1;
// filter: blur(0px);
border-radius: 40rpx;
.month {
margin-left: 22rpx;
font-size: 28rpx;
font-family: Source Han Sans, Source Han Sans;
font-weight: 400;
color: #FFFFFF;
}
.tit {
margin-top: 18rpx;
margin-left: 22rpx;
font-size: 20rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #FFFFFF;
}
.txt {
margin-top: 2rpx;
margin-left: 22rpx;
font-size: 36rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 700;
color: #FFFFFF;
}
.echarts {
margin-left: 22rpx;
margin-top: 60rpx;
// width: 100%;
// height: 80%;
width: 588rpx;
height: 320rpx;
}
}
.list {
margin-top: 16rpx;
// height:280rpx;
// overflow-y: scroll;
.card_list {
width: 632rpx;
height: 88rpx;
background: #FFFFFF;
box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1);
opacity: 1;
border-radius: 30rpx;
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
margin-top: 16rpx;
align-items: center;
.left {
margin-left: 52rpx;
font-size: 28rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #808080;
}
.right {
margin-right: 20rpx;
font-size: 28rpx;
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC;
font-weight: 400;
color: #808080;
}
}
}
}
</style>