riku
4 小时以前 b09c7e7aefd41a62326ea56460092aa0db54c083
package_supervision/pages/subtask/index.js
@@ -1,19 +1,30 @@
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: [],
  },
@@ -22,6 +33,26 @@
   */
  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,
    });
  },
  /**
@@ -44,12 +75,23 @@
   * 切换月份或年份事件处理函数
   */
  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();
  },
@@ -60,21 +102,18 @@
   * 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;
  },
@@ -83,8 +122,14 @@
   * 点击日期事件处理函数
   */
  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();
  },
  /**
@@ -96,16 +141,24 @@
    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();
@@ -120,12 +173,22 @@
    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);
  },
});