| | |
| | | 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, 0, 1).getTime(), |
| | | // 日历显示日期范围 |
| | | minDate: new Date(2026, 2, 1).getTime(), |
| | | maxDate: new Date(2026, 3, 30).getTime(), |
| | | thisDate: new Date().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, |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | |
| | | * 切换月份或年份事件处理函数 |
| | | */ |
| | | handelMonthChange(e) { |
| | | console.log('handelMonthChange', e); |
| | | // 选中日期同步切换一个月 |
| | | const { year, month } = e.detail; |
| | | let thisDay = dayjs(this.data.thisDate); |
| | | thisDay = thisDay.year(year); |
| | | thisDay = thisDay.month(month - 1); |
| | | this.setData({ thisDate: thisDay.toDate().getTime() }); |
| | | |
| | | // 如果切换后的月份为当前日历范围的起始月份,则修改起始月份减少一个月,确保用户可继续查看历史月份 |
| | | 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(); |
| | | }, |
| | | |
| | |
| | | * type TDateType = 'selected' | 'disabled' | 'start' | 'start-end' |'centre' | 'end' | '' |
| | | */ |
| | | _formatCalendarDay(day) { |
| | | console.log('_formatCalendarDay', day); |
| | | if (!this) return; |
| | | const { date } = day; |
| | | const year = date.getFullYear(); |
| | | const month = date.getMonth() + 1; |
| | | const curDate = date.getDate(); |
| | | |
| | | const { daytasks } = this.data; |
| | | |
| | | // 查找当天是否有日任务 |
| | | const fdt = daytasks.find(d => { |
| | | return dayjs(d.date).isSame(dayjs(date), 'day'); |
| | | 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); |
| | | console.log('handleSelectDay', date); |
| | | const { thisDate } = this.data; |
| | | this.setData({ |
| | | lastDate: thisDate, |
| | | thisDate: date.getTime(), |
| | | }); |
| | | this.fetchSubtaskByDayTask(); |
| | | }, |
| | | |
| | | /** |
| | |
| | | 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.map(r => { |
| | | return { |
| | | label: r.name, |
| | | value: r.tguid, |
| | | }; |
| | | }); |
| | | const options = |
| | | res.data.length > 0 |
| | | ? res.data.map(r => { |
| | | return { |
| | | label: r.name, |
| | | value: r.tguid, |
| | | }; |
| | | }) |
| | | : [ |
| | | { |
| | | label: '本月无监管任务', |
| | | value: null, |
| | | }, |
| | | ]; |
| | | this.setData({ |
| | | toptask: { |
| | | options, |
| | | value: options.length > 0 ? options[0].value : '', |
| | | options: options, |
| | | value: options[0].value, |
| | | }, |
| | | }); |
| | | this.fetchDayTasks(); |
| | |
| | | taskApi |
| | | .fetchDayTasks(this.data.toptask.value) |
| | | .then(res => { |
| | | this.setData({ daytasks: res }); |
| | | setTimeout(() => { |
| | | const _formatCalendarDay = this._formatCalendarDay; |
| | | this.setData({ formatCalendarDay: _formatCalendarDay }); |
| | | }, 1000); |
| | | 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); |
| | | }, |
| | | }); |