2025-06-06 15:17:30 +08:00

268 lines
6.3 KiB
JavaScript

const { getGoal } = require("../../../utils/serve/train")
const { setGoal, getClock } = require("../../../utils/serve/user")
// subpackage/train/goal/goal.js
Page({
/**
* 页面的初始数据
*/
data: {
goalNum:0,
nowGoal:{},
year: new Date().getFullYear(),
month: (new Date().getMonth() + 1).toString().padStart(2, '0'),
days: [],
startX: 0, // 触摸起始位置
startY: 0, // 触摸起始位置
minSwipeDistance: 50 ,
isChooseDate:' '
},
putNum(e){
console.log(e)
this.setData({
goalNum:e.detail.value,
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.getMyGoal()
this.loadCalendar();
},
async loadCalendar() {
wx.showLoading()
const {
year,
month
} = this.data;
// 获取当月的第一天是星期几
const firstDay = new Date(year, month - 1, 1).getDay();
// 获取当月的天数
const totalDays = new Date(year, month, 0).getDate();
// 获取今天的日期(用于高亮显示)
const today = new Date();
const todayDate = `${today.getFullYear()}-${(today.getMonth() + 1).toString().padStart(2, '0')}-${today.getDate().toString().padStart(2, '0')}`;
const {data} = await getClock({
StartTime:`${year}-${month}-01`,
EndTime:`${year}-${month}-${totalDays}`,
})
// 创建日期数组
const days = [];
// 填充空白日期
for (let i = 0; i < firstDay; i++) {
days.push('nn');
}
// 填充实际日期
for (let i = 1; i <= totalDays; i++) {
const day = `${year}-${month.toString().padStart(2, '0')}-${i.toString().padStart(2, '0')}`;
const isToday = day === todayDate; // 如果是今天的日期,则标记为今天
const goal = data.filter(item => item.day == i)
let haveGoal = false
let finishGoal = false
let itemClass = ''
if(goal.length>0){
haveGoal = true
itemClass = 'haveGoal'
if(goal[0].completedCount > goal[0].goalAmount){
itemClass = 'finishGoal'
}
}
days.push({ day: i.toString().padStart(2,'0'),isToday ,...goal[0],haveGoal,finishGoal,itemClass});
}
console.log(days)
this.setData({
days,
selectedDate:this.data.selectedDate?this.data.selectedDate:todayDate
});
wx.hideLoading()
},
changeMonth(event) {
const direction = event.currentTarget.dataset.direction;
let {
year,
month
} = this.data;
if (direction === 'prev') {
month--;
if (month < 1) {
month = 12;
year--;
}
} else if (direction === 'next') {
month++;
if (month > 12) {
month = 1;
year++;
}
}
this.setData({
year,
month:month.toString().padStart(2,'0'),
isChooseDate:' '
}, () => {
this.loadCalendar();
});
},
// 显示事件详情
showEventDetail(event) {
return
const day = event.currentTarget.dataset.day.day;
const selectedDate = this.data.year + '-'+ `${this.data.month}`.padStart(2, '0')+'-' +`${day.toString().padStart(2, '0')}`;
this.setData({
isChooseDate:day,
selectedDate:selectedDate
})
},
touchStart(e) {
this.setData({
startX: e.touches[0].clientX,
startY: e.touches[0].clientY
});
},
// 触摸结束事件
touchEnd(e) {
const endX = e.changedTouches[0].clientX;
const endY = e.changedTouches[0].clientY;
const dx = endX - this.data.startX; // 水平滑动距离
const dy = endY - this.data.startY; // 垂直滑动距离
// 判断是否为左右滑动(忽略上下滑动)
if (Math.abs(dx) > Math.abs(dy)) {
if (Math.abs(dx) >= this.data.minSwipeDistance) { // 只有当滑动距离超过阈值时才切换,防止误触
if (dx > 0) {
// 向右滑动,切换到上个月
this.changeMonthBySwipe('prev');
} else if (dx < 0) {
// 向左滑动,切换到下个月
this.changeMonthBySwipe('next');
}
}
}
},
// 根据滑动方向切换月份
changeMonthBySwipe(direction) {
let {
year,
month
} = this.data;
if (direction === 'prev') {
month--;
if (month < 1) {
month = 12;
year--;
}
} else if (direction === 'next') {
month++;
if (month > 12) {
month = 1;
year++;
}
}
this.setData({
year,
month,
isChooseDate:' '
}, () => {
this.loadCalendar();
});
},
//设置个人目标
async setMyGoal(){
const that = this
wx.showLoading({
title: '',
})
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const res = await setGoal({
"goalDuration": 0,
"goalAmount": this.data.goalNum,
"goalDate": year + '-' + month + '-' + day
})
await that.getMyGoal()
wx.showToast({
title: res.success ? '设置成功':'设置失败,请稍后重试!',
})
let app = getApp()
app.globalData.teamRefresh = 1
},
async getMyGoal(){
const res = await getGoal()
this.setData({
nowGoal : res.data
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})