// nova-werun/pages/home/statistics/index.js import * as echarts from "../../../components/ec-canvas/echarts.min" const Parse = getApp().Parse; const company = getApp().globalData.company; function initChart(canvas, width, height, dpr) { const chart = echarts.init(canvas, null, { width: width, height: height, devicePixelRatio: dpr }); canvas.setChart(chart); var option = { xAxis: { type: 'category', data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], axisLabel: { formatter: function(value, index) { const dates = ['1号', '2号', '3号', '4号', '5号', '6号', '7号']; return index === 1 ? '今天' : value + '\n'+'\n' + dates[index]; } } }, yAxis: { type: 'value', max: 20000, // 设置Y轴最大值为20000 axisLabel: { formatter: function(value) { if (value >= 10000) { return (value / 10000) + 'k'; // 格式化为20k } return value; } } }, series: [ { data: [ 12000, { value: 12000, itemStyle: { color: '#a90000', } }, 12000, 12000, 12000, 12000, 12000 ], type: 'bar', barWidth:'10', itemStyle: { borderRadius:15, } } ], }; chart.setOption(option); return chart; } Page({ /** * 页面的初始数据 */ data: { //屏幕高度 statusBarHeight: 0, // 状态栏高度 screenHeight: 0, // 屏幕高度 customHeight: 0, // 自定义导航栏高度(如小程序右上角胶囊按钮) bottomNavHeight: 0, // 底部导航栏高度 contentHeight: 0, // 可用内容高度 contentHeight2: 0, contentpadding: 0, //顶部padding高度 active: 0, // day: '7', target: '', sharList: [], //生涯数据 stardate: '', daysDifference: "", totalSteps: 0, totalDistance: 0, totalBurnCalories: 0, totalsportDate: 0, ec: { onInit: initChart }, }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { // 计算 const systemInfo = wx.getSystemInfoSync(); const statusBarHeight = systemInfo.statusBarHeight || 0; const screenHeight = systemInfo.screenHeight || 0; const custom = wx.getMenuButtonBoundingClientRect(); const customHeight = custom.height + 10 + 2 || 0; const bottomNavHeight = systemInfo.screenHeight - systemInfo.safeArea.bottom || 0; const contentpadding = (statusBarHeight + customHeight) * 750 / systemInfo.windowWidth; const contentHeight = (screenHeight - 50 - bottomNavHeight - statusBarHeight - customHeight) * 750 / systemInfo.windowWidth; this.setData({ statusBarHeight, screenHeight, customHeight, bottomNavHeight, contentpadding, contentHeight }); this.gettarget() this.order() this.allorder() }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { }, onChange(event) { this.setData({ active: event.detail }); }, changeday() { if (this.data.day == '7') { this.setData({ day: '30' }) } else { this.setData({ day: '7' }) } }, async gettarget() { const currentUser = Parse.User.current(); let userquery = new Parse.Query('_User'); userquery.equalTo('company', company); userquery.equalTo('objectId', currentUser.id); userquery.notEqualTo('isDeleted', true) let user = await userquery.find(); let num = user.map(item => item.toJSON()); if (num[0].num) { this.setData({ target: num[0].num }) console.log('当前步数', this.data.target); } }, //获取当天运动数据 async order() { const currentUser = Parse.User.current(); let ActivityDataquery = new Parse.Query('ActivityData'); ActivityDataquery.equalTo('user', currentUser.id); ActivityDataquery.equalTo('company', company); ActivityDataquery.equalTo('type', 'today'); ActivityDataquery.notEqualTo('isDeleted', true); // 获取今天的日期 const today = new Date(); const todayStart = new Date(today.getFullYear(), today.getMonth(), today.getDate()); // 今天的开始时间 const todayEnd = new Date(todayStart); todayEnd.setHours(23, 59, 59, 999); // 今天的结束时间 // 在查询条件中添加对 createdAt 的限制 ActivityDataquery.greaterThanOrEqualTo('createdAt', todayStart); ActivityDataquery.lessThanOrEqualTo('createdAt', todayEnd); ActivityDataquery.include('user'); let r = await ActivityDataquery.find(); let sharList = r.map(item => item.toJSON()); this.setData({ sharList }); console.log(this.data.sharList); }, //获取生涯运动数据 async allorder() { const currentUser = Parse.User.current(); let ActivityDataquery = new Parse.Query('ActivityData'); ActivityDataquery.equalTo('user', currentUser.id); ActivityDataquery.equalTo('company', company); ActivityDataquery.equalTo('type', 'today'); ActivityDataquery.notEqualTo('isDeleted', true); let r = await ActivityDataquery.find(); let allList = r.map(item => item.toJSON()); // 根据 createdAt 日期从以前到现在排列 allList.sort((a, b) => new Date(a.createdAt) - new Date(b.createdAt)); // 获取最早的 createdAt 日期 const earliestDate = new Date(allList[0].createdAt); // 格式化为 YYYY年MM月DD日 const formattedDate = `${earliestDate.getFullYear()}年${String(earliestDate.getMonth() + 1).padStart(2, '0')}月${String(earliestDate.getDate()).padStart(2, '0')}日`; // 计算从最早日期到今天的天数 const today = new Date(); // 清零时间部分 earliestDate.setHours(0, 0, 0, 0); // 将最早日期的时间部分清零 today.setHours(0, 0, 0, 0); // 将今天的时间部分清零 // 计算日期差值 const timeDifference = today - earliestDate; // 时间差(毫秒) const daysDifference = Math.floor(timeDifference / (1000 * 60 * 60 * 24)); // 转换为天数 // 计算 steps、distance 和 burnCalories 的总和 let totalSteps = 0; let totalDistance = 0; let totalBurnCalories = 0; let totalsportDate = 0; allList.forEach(item => { totalSteps += Number(item.steps) || 0; // 确保为数字类型,避免 NaN totalDistance += Number(item.distance) || 0; // 确保为数字类型,避免 NaN totalBurnCalories += Number(item.burnCalories) || 0; // 确保为数字类型,避免 NaN totalsportDate += Number(item.sportDate) || 0; }); // 将总运动时间转换为天、小时、分钟 const days = Math.floor(totalsportDate / (60 * 24)); // 转换为天数 const hours = Math.floor((totalsportDate % (60 * 24)) / 60); // 剩余小时 const minutes = totalsportDate % 60; // 剩余分钟 // 设置 stardate 和 daysDifference this.setData({ stardate: formattedDate, daysDifference: daysDifference, totalSteps, totalDistance, totalBurnCalories, totalsportDate: `${days}天 ${hours}小时 ${minutes}分钟` // 格式化为字符串 }); console.log(allList, this.data.totalsportDate); }, })