import taskApi from '../../api/taskApi';
|
import dayjs from 'dayjs';
|
import { useSubTaskItem } from './subtaskitem-proxy.js';
|
|
const app = getApp();
|
|
Page({
|
behaviors: [useSubTaskItem],
|
/**
|
* 页面的初始数据
|
*/
|
data: {
|
// 日历显示日期范围
|
minDate: new Date(2026, 2, 1).getTime(),
|
maxDate: new Date(2026, 3, 30).getTime(),
|
|
// 选中的日期
|
thisDate: new Date().getTime(),
|
// 上次选中的日期
|
lastDate: new Date().getTime(),
|
|
// 当月总任务选项及选中的任务
|
toptask: {
|
options: [],
|
value: '',
|
},
|
// 选中总任务下对应的日任务
|
daytasks: [],
|
},
|
|
/**
|
* 生命周期函数--监听页面加载
|
*/
|
onLoad(options) {
|
this.fetchToptask();
|
// 页面加载完成后,设定日历的格式化日期函数
|
const _formatCalendarDay = this._formatCalendarDay;
|
this.setData({
|
formatCalendarDay: _formatCalendarDay,
|
});
|
|
// 设置日历起止时间
|
this.setData({
|
minDate: dayjs().startOf('month').add(-1, 'month').toDate().getTime(),
|
maxDate: dayjs().endOf('month').toDate().getTime(),
|
});
|
},
|
|
/**
|
* 监听页面滚动
|
*/
|
onPageScroll(e) {
|
this.setData({
|
scrollTop: e.scrollTop,
|
});
|
},
|
|
/**
|
* 用户点击右上角分享
|
*/
|
onShareAppMessage() {},
|
|
/**
|
* 修改总任务事件处理函数
|
*/
|
onToptaskChange(e) {
|
console.log('onToptaskChange', e);
|
this.setData({
|
'toptask.value': e.detail.value,
|
});
|
this.fetchDayTasks();
|
},
|
|
/**
|
* 切换月份或年份事件处理函数
|
*/
|
handelMonthChange(e) {
|
// 选中日期同步切换一个月
|
const { year, month } = e.detail;
|
let thisDay = dayjs(this.data.thisDate);
|
thisDay = thisDay.year(year);
|
thisDay = thisDay.month(month - 1);
|
|
// 如果切换后的月份为当前日历范围的起始月份,则修改起始月份减少一个月,确保用户可继续查看历史月份
|
const _minDate = dayjs(this.data.minDate);
|
if (thisDay.month() == _minDate.month()) {
|
this.setData({
|
minDate: _minDate.add(-1, 'month').toDate().getTime(),
|
});
|
}
|
|
this.setData({
|
thisDate: thisDay.toDate().getTime(),
|
});
|
this.fetchToptask();
|
},
|
|
/**
|
* 根据日任务情况,格式化对应日期的样式和内容
|
* @param {TDate } day
|
* TDate { date: Date; day: number; type: TDateType; className?: string; prefix?: string; suffix?: string;}
|
* type TDateType = 'selected' | 'disabled' | 'start' | 'start-end' |'centre' | 'end' | ''
|
*/
|
_formatCalendarDay(day) {
|
if (!this) return;
|
const { date } = day;
|
const { daytasks } = this.data;
|
|
// 查找当天是否有日任务
|
const fdt = daytasks.find(d => {
|
return dayjs(d.date).isSame(dayjs(date), 'day') && d.totalTaskNum > 0;
|
});
|
|
if (fdt) {
|
day.suffix = `${fdt.completeTaskNum}/${fdt.totalTaskNum}`;
|
day.className = 'has-task';
|
}
|
return day;
|
},
|
|
/**
|
* 点击日期事件处理函数
|
*/
|
handleSelectDay(e) {
|
console.log('app', app);
|
const date = new Date(e.detail.value);
|
const { thisDate } = this.data;
|
this.setData({
|
lastDate: thisDate,
|
thisDate: date.getTime(),
|
});
|
this.fetchSubtaskByDayTask();
|
},
|
|
/**
|
* 根据所选时段获取总任务
|
*/
|
fetchToptask() {
|
this.setData({ pageLoading: true });
|
const thisDay = dayjs(this.data.thisDate);
|
const starttime = thisDay.startOf('month').format('YYYY-MM-DD HH:mm:ss');
|
const endtime = thisDay.endOf('month').format('YYYY-MM-DD HH:mm:ss');
|
taskApi.fetchTopTasks({ starttime, endtime }).then(res => {
|
const options =
|
res.data.length > 0
|
? res.data.map(r => {
|
return {
|
label: r.name,
|
value: r.tguid,
|
};
|
})
|
: [
|
{
|
label: '本月无监管任务',
|
value: null,
|
},
|
];
|
this.setData({
|
toptask: {
|
options: options,
|
value: options[0].value,
|
},
|
});
|
this.fetchDayTasks();
|
});
|
},
|
|
/**
|
* 获取每日任务统计信息
|
*/
|
fetchDayTasks() {
|
this.setData({ pageLoading: true });
|
taskApi
|
.fetchDayTasks(this.data.toptask.value)
|
.then(res => {
|
if (res) {
|
this.setData({ daytasks: res });
|
this.selectThisDay();
|
}
|
})
|
.finally(() => this.setData({ pageLoading: false }));
|
},
|
|
// 用于触发日历的日期格式化函数,显示每日任务完成情况
|
selectThisDay() {
|
setTimeout(() => {
|
const { thisDate } = this.data;
|
this.setData({
|
thisDate,
|
});
|
this.fetchSubtaskByDayTask();
|
}, 200);
|
},
|
});
|