// nova-werun/pages/my/my-way/index.js const Parse = getApp().Parse; const company = getApp().globalData.company; const uid = Parse.User.current()?.id const dateF = require("../../../../utils/date") let sev = require('../../../service/getSportData') Page({ /** * 页面的初始数据 */ data: { actData: [], //运动数据 show: false, //轨迹弹框 points: [], //运动轨迹-点 }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { this.getActData() }, /** 获取运动数据*/ async getActData() { let { actData } = this.data let query = new Parse.Query('ActivityData') query.equalTo('company', company) query.equalTo('user', uid) query.notEqualTo('isDeleted', true) query.descending('createdAt') query.include('activity') query.limit(30) query.skip(actData?.length || 0) let d = await query.find() if (d?.length <= 0) { wx.showToast({ title: '到底了~', icon: 'none' }) } let that = this let data = d?.map(item => { let obj = item?.toJSON() obj.startDate = dateF.formatTime("YYYY年mm月dd日 HH:MM", obj?.startDate?.iso || item.createdAt) obj.sportDate = that.formatSeconds(obj.sportDate) return obj }) this.setData({ actData: [...actData, ...data] }) }, /** 秒 转 时分秒*/ formatSeconds(seconds) { if (!seconds) return '00:00:00' const hours = Math.floor(seconds / 3600); const minutes = Math.floor((seconds % 3600) / 60); const secs = seconds % 60; return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(secs).padStart(2, '0')}`; }, async getPoints(aid) { let { points } = this.data let query = new Parse.Query('ActivityRunLog') query.equalTo('company', company) query.equalTo('user', uid) query.equalTo('actData', aid) query.select('location') query.limit(20) query.skip(points?.length) let d = await query.find() let list = d?.map(item => { return { longitude: item.get('location')?._longitude, latitude: item.get('location')?._latitude } }) await this.setData({ points: [...(points || []), ...(list || [])] }) this.getActLog() }, /**获取运动轨迹 */ async getActLog() { let { points } = this.data let obj = sev.getScale(points) if (!obj?.center?.latitude || !points[0]?.latitude || !obj?.center?.longitude || !points[0]?.longitude) { wx.showToast({ title: '未记录运动轨迹', icon: 'none' }) return } this.setData({ scale: obj?.scale, latitude: obj?.center?.latitude || points[0]?.latitude, longitude: obj?.center?.longitude || points[0]?.longitude, polyline: [{ points: points, color: '#58c16c', width: 5, borderColor: '#fff', borderWidth: 1 }], markers: [{ id: 1, latitude: points[0].latitude, longitude: points[0].longitude, iconPath: 'https://file-cloud.fmode.cn/13WZ0W7u3l/20240724/7ebg0k104325941.png?imageView2/1/w/200/h/200', // 自定义标记图标 width: 20, height: 20, }, { id: 2, latitude: points[points?.length - 1].latitude, longitude: points[points?.length - 1].longitude, iconPath: 'https://file-cloud.fmode.cn/qpFbRRSZrO/20250311/ug4h1k042739214.jpg?imageView2/1/w/200/h/200', // 自定义标记图标 width: 20, height: 20, } ] }) }, async onOpen(e) { let { index } = e.currentTarget.dataset let { actData } = this.data let query = new Parse.Query('ActivityRunLog') query.equalTo('company', company) query.equalTo('user', uid) query.equalTo('actData', actData[index]?.objectId) let count = await query.count() if (!count || count <= 0) { wx.showToast({ title: '未记录运动轨迹', icon: 'none' }) return } this.setData({ chickAct: actData[index], show: true, points: [], logCount:count, }) for (let i = 0; i < Math.ceil(count / 20); i++) { await this.getPoints(actData[index]?.objectId) } }, onClose() { this.setData({ show: false }); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { }, /** * 生命周期函数--监听页面显示 */ onShow() { }, /** * 生命周期函数--监听页面隐藏 */ onHide() { }, /** * 生命周期函数--监听页面卸载 */ onUnload() { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { this.getActData() }, /** * 用户点击右上角分享 */ onShareAppMessage() { } })