riku
2024-11-13 ab70c6eb4a181b282af0eb200275cd8a4d2ab172
pages/mService/behaviors/bScheduleManager.js
@@ -1,9 +1,9 @@
import scheduleservice from '../../../service/scheduleservice'
import sysSchedules from '../../../data/schedules'
import moment from '../../../utils/moment.min'
import util from '../../../utils/util'
import scheduleservice from '../../../service/scheduleservice';
import sysSchedules from '../../../data/schedules';
import moment from '../../../utils/moment.min';
import util from '../../../utils/util';
const app = getApp()
const app = getApp();
/**
 * 环保日程管理
@@ -12,125 +12,146 @@
  // behaviors: [bLoadingStatus],
  properties: {
    ledgerCompleted: {
      type: Boolean,
      type: Number,
      observer(value) {
        this.checkScheduleComplete(0, value)
      }
        this.checkScheduleComplete(1, value);
      },
    },
    assessmentCompleted: {
      type: Boolean,
      type: Number,
      observer(value) {
        this.checkScheduleComplete(1, value)
      }
    }
        this.checkScheduleComplete(2, value);
      },
    },
  },
  data: {
    // 全部环保日程
    allSchedules: [],
    // 当前用户最临近未完成日程
    thisSchedule: {},
    index: 0
    // 当前用户最临近未完成日程索引
    index: 0,
    // 台账和自评本期完成情况
    scheduleComplete: new Map(),
    // 需要做日程是否完成判断的日程个数(台账和自评)
    scheduleCount: 2,
  },
  lifetimes: {
    attached: function () {
      this.getRecentSchedule()
      if (app.globalData.newUser) {
        this.nextSchedules()
      }
      // this.getAllSchedules()
    }
      this.setData({
        scheduleComplete: new Map(),
      });
      this.getAllSchedules().then(() => {
        this.getRecentSchedule();
        if (app.globalData.newUser) {
          this.nextSchedules();
        }
      });
      // this.getSchedules();
    },
  },
  methods: {
    // 获取最邻近的一个环保系统日程
    getSchedules() {
      let startTime = moment().format('YYYY-MM-DD');
      let endTime = startTime;
      const that = this;
      scheduleservice.getSchedules(
        { startTime, endTime, type: 0 },
        {
          success(res) {
            if (res.data.length > 0) {
              res.data.sort(
                (a, b) => Math.abs(a.diffDays) - Math.abs(b.diffDays),
              );
              const schedule = res.data[0];
              schedule.time = moment(schedule.time.split('T')[0]).format(
                'YYYY-MM-DD',
              );
              that.setData({
                thisSchedule: schedule,
              });
            }
          },
          fail(e) {
            console.log(e);
          },
        },
      );
    },
    //查找最临近的日程
    getRecentSchedule() {
      //1. 从接口获取用户个人、用户企业类型的相关最临近日程
      //2. 按照本地逻辑,得出最邻近日程
      const schedules = sysSchedules()
      const schedules = this.data.allSchedules;
      //2.1 将台账、评估、承诺三项APP功能定义为日程
      //2.2 选择最邻近的事项作为当日的提醒事项,
      let today = moment().hour(0).minute(0).second(0).millisecond(0)
      let diffDays = 999
      let schedule
      let index = 0
      //2.2 选择最邻近的事项作为当日的提醒事项,
      let today = moment().hour(0).minute(0).second(0).millisecond(0);
      let diffDays = 999;
      let schedule;
      let index = 0;
      for (let i = 0; i < schedules.length; i++) {
        let s = schedules[i];
        let d = s.time.diff(today, 'days')
        s.diffDays = d
        let d = s.diffDays;
        // if (d == -8) {
        if (Math.abs(d) < Math.abs(diffDays)) {
          let _index = i
          let _index = i;
          schedule = s
          diffDays = d
          index = _index
          schedule = s;
          diffDays = d;
          index = _index;
        }
      }
      //2.3 日程在时间维度上分为三类提醒,预告、当日、未完成的逾期提醒
      this.setData({
        allSchedules: schedules,
        thisSchedule: {
          date: schedule.time,
          time: schedule.time.format('YYYY-MM-DD dddd'),
          type: schedule.type,
          events: schedule.events,
          diffDays: schedule.diffDays,
        },
        index
      })
        thisSchedule: schedule,
        index,
      });
    },
    //获取所有日程
    getAllSchedules() {
      console.log('getAllSchedules');
      scheduleservice.getAllSchedules(app.globalData.accessToken.userId, {
        success(res) {
          console.log('success');
          console.log(res);
        },
        fail(e) {
          console.log('fail');
          console.log(e);
        },
        complete(res) {
          console.log('complete');
        },
      })
      return sysSchedules().then(res => {
        this.setData({
          allSchedules: res,
        });
      });
    },
    // 当前日程完成,顺延下一个日程
    nextSchedules() {
      let today = moment().hour(0).minute(0).second(0).millisecond(0)
      let s = this.data.allSchedules[this.data.index + 1];
      let d = s.time.diff(today, 'days')
      s.diffDays = d
      this.setData({
        thisSchedule: {
          date: s.time,
          time: s.time.format('YYYY-MM-DD dddd'),
          type: s.type,
          events: s.events,
          diffDays: s.diffDays,
        },
        index: this.data.index + 1
      })
        thisSchedule: s,
        index: this.data.index + 1,
      });
    },
    // 检查当前日程是否完成
    checkScheduleComplete(type, value) {
      debugger
    // 检查当前日程是否完成(2023.8.24 目前只涉及台账和自评两类日程)
    checkScheduleComplete(scId, value) {
      const { scheduleComplete, scheduleCount } = this.data;
      scheduleComplete.set(scId, value);
      // 台账和自评的结果全部传入后再做判断
      if (scheduleComplete.size < scheduleCount) return;
      // 新用户不做判断
      if (app.globalData.newUser) return
      // 日程类型不一致无需判断
      if (this.data.thisSchedule.type != type) return
      // 日程不在当月的无需判断
      const thisMonth = moment().month()
      const sTimeMonth = moment(this.data.thisSchedule.date).month()
      if (thisMonth != sTimeMonth) return
      if (app.globalData.newUser) return;
      // 日程完成则顺延下个日程
      if (value) {
        this.nextSchedules()
      }
    }
  }
})
      let index = 0;
      const thisMonth = moment().month();
      do {
        const { thisSchedule } = this.data;
        // 日程不在当月的无需判断
        const sTimeMonth = moment(thisSchedule.time).month();
        if (thisMonth != sTimeMonth) return;
        // 判断当月该日程是否完成,完成则将当前日程顺延至下一个
        if (scheduleComplete.get(thisSchedule.id) == 2) {
          this.nextSchedules();
        }
        index++
      } while (index < scheduleCount);
    },
  },
});