334 lines
6.8 KiB
Vue
334 lines
6.8 KiB
Vue
<template>
|
||
<view class="page">
|
||
<div class="title">
|
||
统计
|
||
</div>
|
||
<div 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">
|
||
<!-- <mpvue-echarts id="main" ref="pieChart" :echarts="echarts" @onInit="initChart" /> -->
|
||
<l-echart ref="chart" @finished="initChart"></l-echart>
|
||
</view>
|
||
</div>
|
||
<view class="list">
|
||
<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.recharge}}元
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<tab-bar :indexs='1'></tab-bar>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import * as echarts from 'echarts'
|
||
import LEchart from '@/uni_modules/lime-echart/components/l-echart/l-echart.vue';
|
||
export default {
|
||
components: {
|
||
LEchart
|
||
},
|
||
data() {
|
||
return {
|
||
params: {
|
||
year: true,
|
||
month: true,
|
||
day: false,
|
||
hour: false,
|
||
minute: false,
|
||
second: false
|
||
},
|
||
show: false,
|
||
yeartime: {
|
||
year: '',
|
||
month: ''
|
||
},
|
||
timelist: '',
|
||
quantity: 0, //电量
|
||
chartData: [],
|
||
chartday:[]
|
||
}
|
||
},
|
||
onLoad() {
|
||
// setTimeout(() => {
|
||
|
||
// this.initChart()
|
||
// }, 300);
|
||
// this.initChart()
|
||
|
||
// 首次加载页面给现在的时间
|
||
const now = new Date();
|
||
this.yeartime.year = now.getFullYear()
|
||
this.yeartime.month = now.getMonth() + 1
|
||
this.gettime()
|
||
},
|
||
onShow() {
|
||
|
||
},
|
||
|
||
methods: {
|
||
// 点击获取时间
|
||
confirm(e) {
|
||
this.yeartime = e
|
||
this.gettime()
|
||
},
|
||
// 进行获取用电量请求
|
||
gettime() {
|
||
let data = {
|
||
year: this.yeartime.year,
|
||
month: this.yeartime.month,
|
||
groupBy: 'create_day'
|
||
}
|
||
this.$u.get('app/bill/landlordCount', data).then((res) => {
|
||
if (res.code == 200) {
|
||
this.timelist = res.data
|
||
this.chartData = this.timelist.map(item => item.recharge / 0.5)
|
||
this.chartday = this.timelist.map(item => item.createDay + '日')
|
||
console.log('用电' +this.chartData,'时间' + this.chartday)
|
||
// 求用电总度数
|
||
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 _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: ['1日', '2日', '3日', '4日', '5日', '6日', '7日'],
|
||
},
|
||
yAxis: {
|
||
show: true,
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
axisLabel: {
|
||
show: true,
|
||
color: '#fff',
|
||
fontSize: 11,
|
||
formatter: function(value) {
|
||
// 保留两位小数,没有小数时显示00
|
||
return value + '.00' + '度'
|
||
},
|
||
},
|
||
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:[10,20,30,50,20,10,60],
|
||
}],
|
||
};
|
||
const chart = await this.$refs.chart.init(echarts)
|
||
console.log(option,'111');
|
||
// 给折线图赋值
|
||
option.series[0].data = this.chartData
|
||
option.xAxis.data = this.chartday
|
||
chart.setOption(option)
|
||
return chart
|
||
},
|
||
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
.btnxz {
|
||
padding: 0 20rpx;
|
||
box-sizing: border-box;
|
||
font-size: 28rpx;
|
||
font-family: Source Han Sans, Source Han Sans;
|
||
font-weight: 400;
|
||
color: #FFFFFF;
|
||
}
|
||
|
||
page {
|
||
background-color: #F7FAFE;
|
||
// padding-bottom: 240rpx;
|
||
// box-sizing: border-box;
|
||
}
|
||
|
||
.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> |