index.js 10.6 KB
import { getHomeUserSchedule } from '../../api/request.js'
import { throttle } from './../../utils/utils.js'
Page({
  data: {
    AllScheduleList: [],
    scheduleList: [],
    todayStr: '',
    thisYear: '',
    maxYear: '',
    minYear: '',
    // isClicked: false,
    startPageOnLoad: false,
    startPageOnShow: false,
    isFirstLoad: true
  },
  onLoad(query) {
    // 页面加载
    this.setData({
      startPageOnLoad: true
    })
  },
  onReady() {
  },
  onScroll() {
    this.setData({
      todayStr: '00000'
    })
  },
  onShow() {
    // 页面显示
    let data = {
      "startTime": "2020-01-01 00:00:00",
      "endTime": "2025-12-30 23:59:59"
    }
    let that = this
    getHomeUserSchedule(data).then(res => {
      console.log(res.data.data)
      that.setData({
        AllScheduleList: res.data.data
      }, () => {
        let now = new Date()
        let year = now.getFullYear();
        let scheduleList = [];
        for (let i = 0; i <= year - 2019; i++) {
          scheduleList.push(that.returnScheduleList(2019 + i))
        }
        // 第一次加载
        if (this.data.isFirstLoad) {
          const today = new Date()
          // finalDate 是用来定位到今天的
          const finalDate = new Date(today)
          // finalDate.setDate(today.getDate() - today.getDay())
          that.setData({
            scheduleList: scheduleList,
            todayStr: finalDate.toLocaleDateString(),
            thisYear: year,
            maxYear: year,
            canClick: true,
            startPageOnShow: true,
            isFirstLoad: false
          })
        } else {
          that.setData({
            scheduleList: scheduleList,
            thisYear: year,
            maxYear: year,
            canClick: true,
            startPageOnShow: true
          })
        }
      })
    })
  },
  returnScheduleList(year) {
    let that = this
    let weekList = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
    let DateMap = new Map();
    let isLeapYear = year % 4 == 0 && year % 100 != 0 || year % 400 == 0
    // 闰年
    if (isLeapYear) {
      let isFirstWeek = false;
      for (let i = 1; i <= 366; i++) {
        // 判断一月第一周的第一个周一
        if (i < 7 && new Date(year, 0, i).getDay() === 0) {
          isFirstWeek = true
        }
        // 是第一个月第一个周一
        if (isFirstWeek) {
          DateMap.set(`${new Date(year, 0, i).toLocaleDateString()}`, {
            scheduleList: []
          })
        }
      }
      // 跨年的那几天不是周一的
      let num = 6 - new Date(year, 0, 366).getDay()
      for (let i = 0; i <= num; i++) {
        DateMap.set(`${new Date(year, 0, 366 + i).toLocaleDateString()}`, {
          scheduleList: []
        })
      }
    } else {
      let isFirstWeek = false;
      for (let i = 1; i <= 365; i++) {
        if (i < 7 && new Date(year, 0, i).getDay() === 0) {
          isFirstWeek = true
        }
        if (isFirstWeek) {
          DateMap.set(`${new Date(year, 0, i).toLocaleDateString()}`, {
            scheduleList: []
          })
        }
      }
      let num = 6 - new Date(year, 0, 365).getDate()
      for (let i = 0; i <= num; i++) {
        DateMap.set(`${new Date(year, 0, 366 + i).toLocaleDateString()}`, {
          scheduleList: []
        })
      }
    }
    // 遍历所有日程
    for (let y = 0; y < this.data.AllScheduleList.length; y++) {
      let date1 = this.data.AllScheduleList[y].startTime.slice(0, 10).replace(/-/g, '/')
      let date2 = this.data.AllScheduleList[y].endTime.slice(0, 10).replace(/-/g, '/')
      let count = this.count(date1, date2)
      // 不跨天
      if (count == 0) {
        // 每年的第一周和跨天的那几天有日程就push进去
        if (DateMap.get(`${new Date(this.data.AllScheduleList[y].startTime.replace(/-/g, '/')).toLocaleDateString()}`)) {
          DateMap.get(`${new Date(this.data.AllScheduleList[y].startTime.replace(/-/g, '/')).toLocaleDateString()}`).scheduleList.push({
            ...this.data.AllScheduleList[y],
            thisDayStartTime: this.data.AllScheduleList[y].startTime.slice(11, 16),
            thisDayEndTime: this.data.AllScheduleList[y].endTime.slice(11, 16),
            isBeOverdue: new Date().getTime() > new Date(this.data.AllScheduleList[y].endTime.replace(/-/g, '/')).getTime() ? true : false
          })
        }
      }
      // 跨天
      else {
        for (let j = 0; j <= count; j++) {
          let time = new Date(date1);
          time.setDate(time.getDate() + j)
          if (DateMap.get(new Date(time.getFullYear(), time.getMonth(), time.getDate()).toLocaleDateString())) {
            DateMap.get(new Date(time.getFullYear(), time.getMonth(), time.getDate()).toLocaleDateString()).scheduleList.push({
              ...this.data.AllScheduleList[y],
              isfirstDayOrEndDay: j === 0 ? '0' : j === count ? '2' : '1', // 0 第一天,1中间的天,2结束的天
              thisDayStartTime: this.data.AllScheduleList[y].startTime.slice(11, 16),
              thisDayEndTime: this.data.AllScheduleList[y].endTime.slice(11, 16),
              isFewDays: j + 1,
              duration: count + 1,
              isBeOverdue: new Date().getTime() > new Date(this.data.AllScheduleList[y].endTime.replace(/-/g, '/')).getTime() ? true : false
            })
          }
        }
      }
    }
    let DateList = [];
    let listMonth = '';
    // 第一个月的第一天
    let listWeek = new Date(year, 0, 1).getDay() === 0 ? 0 : 1;
    DateList.push({
      type: 'year',
      value: year
    })
    let thisDay = new Date().toLocaleDateString()
    DateMap.forEach(function (value, key, map) {
      if (new Date(key).getDay() === 0 && that.count(key, new Date(year, 0, isLeapYear ? 366 : 365).toLocaleDateString()) > 7) {
        listWeek = listWeek + 1
        // 有此月份
        if (new Date(key).getMonth() !== listMonth) {
          listMonth = new Date(key).getMonth()
          DateList.push({
            type: 'month',
            value: new Date(key).getMonth() + 1
          })
          let rangeYear1 = new Date(key).getFullYear()
          let rangeMonth1 = new Date(key).getMonth()
          let rangeDay1 = new Date(key).getDate()
          let rangeDate = new Date(rangeYear1, rangeMonth1, rangeDay1 + 6)
          let rangeMonth2 = new Date(rangeDate).getMonth()
          let rangeDay2 = new Date(rangeDate).getDate()
          DateList.push({
            type: 'week',
            value: `第${listWeek}周,${rangeMonth1 + 1}${rangeDay1}日 - ${rangeMonth2 == rangeMonth1 ? '' : rangeMonth2 + 1 + '月'}${rangeDay2}日`,
            dayStr: key
          })
        }
        // 没有此月份
        else {
          let rangeYear1 = new Date(key).getFullYear()
          let rangeMonth1 = new Date(key).getMonth()
          let rangeDay1 = new Date(key).getDate()
          let rangeDate = new Date(rangeYear1, rangeMonth1, rangeDay1 + 6)
          let rangeMonth2 = new Date(rangeDate).getMonth()
          let rangeDay2 = new Date(rangeDate).getDate()
          DateList.push({
            type: 'week',
            value: `第${listWeek}周,${rangeMonth1 + 1}${rangeDay1}日 - ${rangeMonth2 == rangeMonth1 ? '' : rangeMonth2 + 1 + '月'}${rangeDay2}日`,
            dayStr: key
          })
        }
      } else if (new Date(key).getDay() === 0 && that.count(new Date(key), new Date(year, 0, isLeapYear ? 366 : 365) < 7)) {
        let rangeYear1 = new Date(key).getFullYear()
        let rangeMonth1 = new Date(key).getMonth()
        let rangeDay1 = new Date(key).getDate()
        let rangeDate = new Date(rangeYear1, rangeMonth1, rangeDay1 + 6)
        let rangeMonth2 = new Date(rangeDate).getMonth()
        let rangeDay2 = new Date(rangeDate).getDate()
        listWeek = 1
        DateList.push({
          type: 'week',
          value: `第${listWeek}周,${rangeMonth1 + 1}${rangeDay1}日 - ${rangeMonth2 == rangeMonth1 ? '' : rangeMonth2 + 1 + '月'}${rangeDay2}日`,
          dayStr: key
        })
      }
      // 有日程长度 并且不是今天
      if (value.scheduleList.length !== 0 && key !== thisDay) {
        DateList.push({
          type: 'day',
          isThisDay: true,
          value: {
            value: value.scheduleList,
            day: new Date(key).getDate() < 10 ? '0' + new Date(key).getDate() : new Date(key).getDate(),
            week: weekList[new Date(key).getDay()]
          },
        })
      }
      // 有日程长度,并且是今天
      else if (value.scheduleList.length !== 0 && key === thisDay) {
        DateList.push({
          type: 'today',
          value: {
            value: value.scheduleList,
            day: new Date(key).getDate() < 10 ? '0' + new Date(key).getDate() : new Date(key).getDate(),
            week: weekList[new Date(key).getDay()],
            dateStr: key
          },
        })
      }
      if (value.scheduleList.length === 0 && key === thisDay) {
        console.log(key)
        console.log(111111)
        DateList.push({
          type: 'thisDay',
          value: {
            value: value.scheduleList,
            day: new Date(key).getDate() < 10 ? '0' + new Date(key).getDate() : new Date(key).getDate(),
            week: weekList[new Date(key).getDay()],
            dateStr: key
          },
        })
      }
    });
    return DateList
  },
  // 是否跨天 返回跨天数
  count(date1, date2) {
    var date1 = new Date(date1);
    var date2 = new Date(date2);
    var date = (date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24);/*不用考虑闰年否*/
    return date
  },
  onHide() {
    // 页面隐藏
  },
  onUnload() {
    // 页面被关闭
  },
  onTitleClick() {
    // 标题被点击
  },
  onPullDownRefresh() {
    // 页面被下拉
  },
  onReachBottom() {
    // 页面被拉到底部
  },
  onShareAppMessage() {
    // 返回自定义分享信息
    return {
      title: 'My App',
      desc: 'My App description',
      path: 'pages/index/index',
    };
  },
  nextPage() {
    // isClicked(this)
    dd.navigateTo({ url: './../createMeeting/createMeeting' })
  },
  nextDetail: throttle(function (e) {
    let item = e.target.dataset.item
    dd.navigateTo({ url: `./../editMeeting/editMeeting?scheduleItem=${JSON.stringify(item)}` })
  }, 1000),
  // nextPage: throttle(function (e) {
  //   console.log(11111111)
  //   dd.navigateTo({ url: './../createOrEditSchedule/createOrEditSchedule' })
  // }, 1000),
  lower() {
    let year = this.data.maxYear + 1
    let DateList = this.returnScheduleList(year)
    this.data.scheduleList.push(DateList)
    let scheduleList = [...this.data.scheduleList]
    this.setData({
      scheduleList: scheduleList,
      maxYear: year
    })
  }
});