// 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() { } })