import scheduleservice from '../../../service/scheduleservice'; import sysSchedules from '../../../data/schedules'; import moment from '../../../utils/moment.min'; import util from '../../../utils/util'; const app = getApp(); /** * 环保日程管理 */ module.exports = Behavior({ // behaviors: [bLoadingStatus], properties: { ledgerCompleted: { type: Number, observer(value) { this.checkScheduleComplete(1, value); }, }, assessmentCompleted: { type: Number, observer(value) { this.checkScheduleComplete(2, value); }, }, }, data: { // 全部环保日程 allSchedules: [], // 当前用户最临近未完成日程 thisSchedule: {}, // 当前用户最临近未完成日程索引 index: 0, // 台账和自评本期完成情况 scheduleComplete: new Map(), // 需要做日程是否完成判断的日程个数(台账和自评) scheduleCount: 2, }, lifetimes: { attached: function () { 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 = 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; for (let i = 0; i < schedules.length; i++) { let s = schedules[i]; let d = s.diffDays; // if (d == -8) { if (Math.abs(d) < Math.abs(diffDays)) { let _index = i; schedule = s; diffDays = d; index = _index; } } //2.3 日程在时间维度上分为三类提醒,预告、当日、未完成的逾期提醒 this.setData({ thisSchedule: schedule, index, }); }, //获取所有日程 getAllSchedules() { return sysSchedules().then(res => { this.setData({ allSchedules: res, }); }); }, // 当前日程完成,顺延下一个日程 nextSchedules() { let s = this.data.allSchedules[this.data.index + 1]; this.setData({ thisSchedule: s, index: this.data.index + 1, }); }, // 检查当前日程是否完成(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; 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); }, }, });