325 lines
7.8 KiB
JavaScript
325 lines
7.8 KiB
JavaScript
// pages/electricQuery/index.js
|
|
import { exportElectricityList, getAccountingList, getElectricityList, getMeterReadingList } from "../../service/accounting";
|
|
import { getTenementMeterList } from "../../service/meter";
|
|
import dayjs from "../../utils/dayjs";
|
|
import request from '../../utils/request';
|
|
import * as echarts from '../../components/echarts/echarts';
|
|
import { alertInfo, getPixelRatio, loadingFunc } from "../../utils/index";
|
|
const { OK } = request;
|
|
Page({
|
|
|
|
/**
|
|
* 页面的初始数据
|
|
*/
|
|
data: {
|
|
queryType: 0,
|
|
timeType: 0,
|
|
show: false,
|
|
columns: [],
|
|
meterList: [],
|
|
meterCode: "",
|
|
meterId: "",
|
|
year: dayjs().format('YYYY'),
|
|
yearMonth: dayjs().format("YYYY-MM"),
|
|
yearMonthDay: dayjs().format("YYYY-MM-DD"),
|
|
yearStamp: new Date().getTime(),
|
|
yearMonthStamp: new Date().getTime(),
|
|
yearMonthDayStamp: new Date().getTime(),
|
|
header: [
|
|
{ key: 'address', title: '电表地址', renderBody: (item) => item.meter?.address },
|
|
{ title: '时间',renderBody: (item) => { return item.time } },
|
|
{ key: 'number', title: '耗量' },
|
|
],
|
|
meterReadingHeader: [
|
|
{ key: 'address', title: '电表地址', renderBody: (item) => item.meter?.address },
|
|
{ title: '倍率', key: 'ratio' },
|
|
{ key: 'number', title: '抄表记录' },
|
|
],
|
|
list: [],
|
|
visible: false,
|
|
meterReadingList: [],
|
|
accountingList: [],
|
|
electricNumber: 0,
|
|
meterNumber: 0,
|
|
},
|
|
changeQueryType(e) {
|
|
const { type } = e.currentTarget.dataset
|
|
this.setData({ queryType: type },() => {
|
|
switch(type) {
|
|
case 0:
|
|
this.init()
|
|
break;
|
|
case 1:
|
|
this.getReadingList();
|
|
break;
|
|
case 2:
|
|
this.getAccountingBalanceList();
|
|
break;
|
|
}
|
|
|
|
})
|
|
},
|
|
clickTime() {
|
|
const { timeType } = this.data;
|
|
this.setData({
|
|
timePickerType: timeType === 0 ? "day" : (timeType === 1 ? 'month' : 'year'),
|
|
visible: true
|
|
})
|
|
},
|
|
changeTimeType(e) {
|
|
const { type } = e.currentTarget.dataset
|
|
this.setData({ timeType: type }, () => {
|
|
this.init()
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面加载
|
|
*/
|
|
onLoad(options) {
|
|
this.init()
|
|
},
|
|
async init() {
|
|
const { queryType, timeType, meterId, year, yearMonth, yearMonthDay } = this.data;
|
|
let time;
|
|
switch(timeType) {
|
|
case 1:
|
|
time = yearMonth;
|
|
break;
|
|
case 2:
|
|
time = year;
|
|
break;
|
|
default:
|
|
time = yearMonthDay;
|
|
break;
|
|
}
|
|
const { code, message, data, electricNumber, meterNumber } = await getElectricityList({ type: timeType, meter: meterId, time: time })
|
|
if (code !== OK) {
|
|
alertInfo(message)
|
|
return;
|
|
}
|
|
this.setData({ list: data, electricNumber, meterNumber })
|
|
if (!data?.length) {
|
|
return;
|
|
}
|
|
this.selectComponent('#echarts').init((canvas, width, height) => {
|
|
// 初始化图表
|
|
const pieChart = echarts.init(canvas, null, {
|
|
width: width,
|
|
height: height,
|
|
devicePixelRatio: getPixelRatio(),
|
|
});
|
|
const ids = [...new Set(data?.map(item => item?.meter?.id))]
|
|
const options = {
|
|
tooltip: {
|
|
trigger: 'axis'
|
|
},
|
|
legend: {
|
|
data: data?.map(item => item?.meter?.address),
|
|
},
|
|
grid: {
|
|
left: '3%',
|
|
right: '4%',
|
|
bottom: '3%',
|
|
containLabel: true
|
|
},
|
|
xAxis: {
|
|
type: 'category',
|
|
boundaryGap: false,
|
|
data: [...new Set(data?.map(item => item.time))]
|
|
},
|
|
yAxis: {
|
|
type: 'value'
|
|
},
|
|
series: ids?.map(item => {
|
|
const element = data?.find(i => i?.meter?.id === item)
|
|
return {
|
|
name: element?.meter?.address,
|
|
type: 'line',
|
|
stack: 'Total',
|
|
data: data?.filter(ele => ele?.meter?.id === item).map(item => item.number)
|
|
}})
|
|
|
|
};
|
|
pieChart.setOption(options);
|
|
// 注意这里一定要返回 chart 实例,否则会影响事件处理等
|
|
return pieChart;
|
|
});
|
|
},
|
|
async getReadingList() {
|
|
const { meterId } = this.data;
|
|
const { code, message, data } = await getMeterReadingList(meterId)
|
|
if (code !== OK) {
|
|
alertInfo(message)
|
|
return;
|
|
}
|
|
this.setData({ meterReadingList: data })
|
|
},
|
|
async export() {
|
|
loadingFunc(async () => {
|
|
const { queryType, timeType, meterId, year, yearMonth, yearMonthDay } = this.data;
|
|
let time;
|
|
switch(timeType) {
|
|
case 1:
|
|
time = yearMonth;
|
|
break;
|
|
case 2:
|
|
time = year;
|
|
break;
|
|
default:
|
|
time = yearMonthDay;
|
|
break;
|
|
}
|
|
const data = await exportElectricityList({ type: timeType, meter: meterId, time: time })
|
|
// if (code !== OK) {
|
|
// alertInfo(message)
|
|
// return;
|
|
// }
|
|
wx.openDocument({
|
|
filePath: data.tempFilePath,
|
|
fileType: ['xlsx'],
|
|
success() {
|
|
},
|
|
fail(err) {
|
|
}
|
|
})
|
|
|
|
})
|
|
},
|
|
async getAccountingBalanceList() {
|
|
const { meterId } = this.data;
|
|
const { code, message, data } = await getAccountingList(meterId)
|
|
if (code !== OK) {
|
|
alertInfo(message)
|
|
return;
|
|
}
|
|
this.setData({ accountingList: data })
|
|
},
|
|
async getMeters() {
|
|
const { id } = wx.getStorageSync('tenement')
|
|
const { code, message, data } = await getTenementMeterList(id);
|
|
if (code !== OK) {
|
|
alertInfo(message)
|
|
return;
|
|
}
|
|
|
|
this.setData({
|
|
meterList: data || [],
|
|
})
|
|
},
|
|
clickMeter() {
|
|
this.setData({
|
|
type: "meter",
|
|
columns: [{ id: "", name: "全部", code: "" }, ...this.data.meterList.map(item => ({ id: item.id, name: `${item.code}-${item.address}`, code: item.code }))],
|
|
show: true,
|
|
title: "表计"
|
|
})
|
|
},
|
|
onCancel() {
|
|
this.setData({
|
|
type: "meter",
|
|
columns: [],
|
|
show: false,
|
|
title: "",
|
|
})
|
|
},
|
|
onOk(e) {
|
|
const { id, code } = e.detail.value;
|
|
this.setData({
|
|
// year: currentYear,
|
|
meterId: id,
|
|
meterCode: code,
|
|
type: "",
|
|
show: false,
|
|
title: ""
|
|
}, () => {
|
|
const { queryType, } = this.data;
|
|
switch(queryType) {
|
|
case 1:
|
|
this.getReadingList();
|
|
break;
|
|
case 2:
|
|
this.getAccountingBalanceList();
|
|
break;
|
|
default:
|
|
this.init();
|
|
break;
|
|
}
|
|
})
|
|
},
|
|
onTimeClose() {
|
|
this.setData({ visible: false })
|
|
},
|
|
onTimeCancel() {
|
|
this.setData({ visible: false })
|
|
},
|
|
onTimeConfirm(e) {
|
|
const { type, time } = e.detail;
|
|
switch(type) {
|
|
case "year":
|
|
this.setData({ year: time, visible: false, }, () => {
|
|
this.init();
|
|
});
|
|
break;
|
|
case "month":
|
|
const [year, month] = time.split("-")
|
|
this.setData({ yearMonth: time, yearMonthStamp: new Date(Number(year), Number(month) - 1, 1).getTime(), visible: false }, () => {
|
|
this.init();
|
|
});
|
|
break;
|
|
case "day":
|
|
this.setData({ yearMonthDay: time, yearMonthDayStamp: new Date(time).getTime(), visible: false }, () => {
|
|
this.init();
|
|
})
|
|
break;
|
|
}
|
|
},
|
|
/**
|
|
* 生命周期函数--监听页面初次渲染完成
|
|
*/
|
|
onReady() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面显示
|
|
*/
|
|
onShow() {
|
|
this.getMeters()
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面隐藏
|
|
*/
|
|
onHide() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面卸载
|
|
*/
|
|
onUnload() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 页面相关事件处理函数--监听用户下拉动作
|
|
*/
|
|
onPullDownRefresh() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 页面上拉触底事件的处理函数
|
|
*/
|
|
onReachBottom() {
|
|
|
|
},
|
|
|
|
/**
|
|
* 用户点击右上角分享
|
|
*/
|
|
onShareAppMessage() {
|
|
|
|
}
|
|
}) |