const app = getApp() import * as echarts from '../../../commpents/ec-canvas/echarts' Page({ data: { frameStyle: { useTop: true, name: '出勤情况', leftArrow: true, useBar: false }, // 学校 zhSchool: '', school_id: '', schoolList: [], }, // 返回 back(e) { wx.navigateBack({ delta: 1 }) }, // 选择学校 schoolChange: function (e) { const that = this; let data = that.data.schoolList[e.detail.value]; if (data) { that.setData({ school_id: data.school_id }); that.setData({ zhSchool: data.school_id_name }); } that.watchLogin(); }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { }, // 监听用户是否登录 watchLogin: async function () { const that = this; wx.getStorage({ key: 'user', success: async res => { that.setData({ ec: { onInit: that.initChart } }) // 学校 const school = await app.$get(`/rss`, { student_id: res.data.info.id }); if (school.errcode == '0' && school.total > 0) { that.setData({ schoolList: school.data }) } // 模拟请求 var times = setTimeout(async function () { if (that.data.school_id) { const arr = await app.$get(`/statistics/studentLearning`, { school_id: that.data.school_id, student_id: res.data.info.id }); if (arr.errcode == '0') { that.data.data1 = arr.data.signs; that.data.data2 = arr.data.minutes; } } clearTimeout(times); }, 1000) }, fail: async res => { wx.redirectTo({ url: '/pages/index/index' }) } }) }, // 折线图 initChart(canvas, width, height, dpr) { let that = this; // 由于请求数据有延迟所以写一个时间函数,当数据存在的时候再执行绘制 var times = setInterval(function () { var data1 = that.data.data1; var data2 = that.data.data2; if (data1 && data2) { clearInterval(times) const chart = echarts.init(canvas, null, { width: width, height: height, devicePixelRatio: dpr // new }); canvas.setChart(chart); var option = { tooltip: { trigger: 'axis', axisPointer: { type: 'cross', label: { backgroundColor: '#6a7985' } } , formatter: function (params) { let html = params[0].name + "
"; for (let i = 0; i < params.length; i++) { html += '' if (params[i].seriesName == "签到数") { html += params[i].seriesName + ":" + params[i].value + "%
"; } if (params[i].seriesName == "时长") { html += params[i].seriesName + ":" + params[i].value + "小时
"; } } return html; } }, legend: { textStyle: { color: '#4CA6A3' }, x: 'right', data: [{ name: '签到数', icon: 'rect' }, { name: '时长', icon: 'rect' }] }, grid: { left: '2%', right: '2%', containLabel: true }, xAxis: [ { type: 'category', boundaryGap: false, // 设置x轴线的属性 axisLabel: { //x轴文字的配置 show: true, interval: 0,//使x轴文字显示全 }, axisLine: { lineStyle: { color: '#4CA6A3', // 设置x轴字体颜色 width: 2, // 设置x轴字体宽度 } }, data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] } ], yAxis: [ { type: 'value', name: '时长', position: 'left', alignTicks: true, axisLine: { show: true, lineStyle: { fontSize: 16, color: '#293C55' } }, axisLabel: { formatter: '{value} 小时' } }, { type: 'value', alignTicks: true, nameGap: 10, nameRotate: 0, nameTextStyle: { fontSize: 16, color: '#293C55' }, splitLine: { show: false },//去除网格线 min: 0, max: 100, interval: 10, // 设置轴线的属性 axisLine: { show: true, lineStyle: { color: '#293C55', } } } ], series: [ { name: '签到数', type: 'line', stack: '总量', areaStyle: {}, itemStyle: { normal: { color: "#25DEDB",//折线点的颜色 lineStyle: { color: "#25DEDB"//折线的颜色 } } }, areaStyle: { // 该属性设置可以使这下图区域颜色达到渐变的效果 color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#25DEDB' }, { offset: 1, color: '#ffe' }]) }, data: data1 }, { name: '时长', type: 'line', stack: '总量', areaStyle: {}, itemStyle: { normal: { color: "#E96C44",//折线点的颜色 lineStyle: { color: "#E96C44"//折线的颜色 } } }, areaStyle: { // 该属性设置可以使这下图区域颜色达到渐变的效果 color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#E96C44' }, { offset: 1, color: '#ffe' }]) }, data: data2 } ] }; chart.setOption(option, true); return chart; } }, 100) }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { const that = this; // 监听用户是否登录 that.watchLogin(); }, /** * 页面上拉触底事件的处理函数 */ /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function (res) { }, })