riku
2024-11-13 ab70c6eb4a181b282af0eb200275cd8a4d2ab172
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
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);
    },
  },
});