outLookContact.js 9.52 KB
import { getUserScheduleInTime, modifySchedule } from '../../api/request.js'
import { throttle } from './../../utils/utils.js'
import create from 'dd-store'
import { observer } from '/utils/observer.js'
create.Page({
  data: {
    $data: null,
    userList: [],
    userListId: [],
    outlookContact: [],
    value: '',
    conflictPeople: [],
    scheduleItem: '',
    // 传给组件 hList 水平排列  所有数据 comHListData
    comHListData: {
      contactData: [
        { id: 0, text: '钉钉联系人', imageUrl: '../../assests/dingContact.png' },
        { id: 1, text: '手动添加邮箱', imageUrl: '../../assests/emailContact.png' }
      ]
    },
    popupShow: false,
    // 传递给组件selectPopup 的数据
    conSelectPopupData: {
      selectPopupId: '',
      showSelectPopup: false,
      selectType: 'common',
      editSaveList: [{ text: '仅保存此会议', id: 'only' }, { text: '保存此次及以后会议', id: 'future' }]
    },
    // 传递给组件centerPopup 的数据
    centerPopup: {
      showCenterPopup: false,
      centerPopupList: [
        { id: 0, text: '不发送通知' },
        { id: 1, text: '发送通知' },
        { id: -1, text: '取消编辑' }
      ],
      centerPopupId: ''
    },
    // 传递给组件toast的所有数据
    conToastData: {
      showToast: false,
      title: '保存成功'
    },
    currentPeople: ''
  },
  onLoad(event) {
    const _that = this
    if (event.scheduleItem) {
      let scheduleItem = JSON.parse(event.scheduleItem)
      this.setData({
        scheduleItem: scheduleItem
      })
    }
    let outlookContact = []
    for (let value of this.$store.data.participatorList) {
      if (value.platform === 'outlook') {
        outlookContact.push(value)
      }
    }
    this.setData({
      outlookContact: outlookContact,
      currentPeople: getApp().globalData.userid
    })
    observer.register({
      notice(scheduleItem) {
        _that.setData({
          'scheduleItem.scheduleTemplateId': scheduleItem
        })
        console.log(scheduleItem);
      }
    })
    this.conflictPeople()
  },
  onShow() {
  },
  // input 的输入 事件
  onInput(event) {
    this.setData({
      value: event.detail.value
    })
  },
  // 添加email
  addEmail() {
    let reg = /^\w+((.\w+)|(-\w+))@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+).[A-Za-z0-9]+$/
    if (reg.test(this.data.value)) {
      let outlookContact = this.data.outlookContact
      outlookContact.push({
        userId: this.data.value,
        username: this.data.value,
        headUrl: '',
        platform: 'outlook'
      })
      outlookContact = this.setArrary(outlookContact)
      this.setData({
        value: '',
        outlookContact: outlookContact
      })
      this.conflictPeople()
    } else {
      dd.alert({
        content: '请输入正确的邮箱格式',
        buttonText: '确定'
      })
    }
  },
  // 关闭
  close(event) {
    let outlookContact = this.data.outlookContact
    let index = 0
    for (let value of this.data.outlookContact) {
      if (value.userId === event.currentTarget.dataset.item.userId) {
        outlookContact.splice(index, 1)
        this.setData({
          outlookContact: outlookContact
        })
        return
      }
      index++
    }
  },
  // 数组 去重
  setArrary(arr) {
    let containt = {}
    for (let x of arr) {
      containt['id' + x.userId] = x
    }
    return Object.values(containt)
  },
  // 保存
  save() {
    // concat 拼接后生成新的数组 push 返回的是长度 
    let participatorList = []
    let participatorListId = []
    for (let value of this.$store.data.participatorList) {
      if (value.platform !== 'outlook') {
        participatorList.push(value)
        participatorListId.push(value.userId)
      }
    }
    participatorListId.push(getApp().globalData.userid)
    participatorList.push({ userId: getApp().globalData.userid, username: getApp().globalData.name, headUrl: getApp().globalData.avatar, platform: 'dingtalk' })
    participatorList.push(...this.data.outlookContact)
    participatorList = this.setArrary(participatorList)
    this.data.outlookContact.forEach(item => {
      participatorListId.push(item.userId)
    })
    this.setData({
      userList: participatorList,
      userListId: [...new Set(participatorListId)]
    })
    if (!!this.data.scheduleItem) {
      if (this.$store.data.originalData.repeatable === 1) {
        this.setData({
          'conSelectPopupData.showSelectPopup': true
        })
      } else {
        let addUserList = this.arrayPoor(this.$store.data.originUsers, this.data.userList).addUserList
        let deleteUserList = this.arrayPoor(this.$store.data.originUsers, this.data.userList).deleteUserList
        let dataUser = {
          addUserList: addUserList,
          deleteUserList: deleteUserList,
          modifyModel: 'only',
          modifyContent: 'operate_user'
        }
        this.modifySchedule(dataUser)
      }
    } else {
      this.$store.data.participatorList = participatorList
      this.update()
      dd.navigateBack({
        delta: 1
      })
    }
  },
  // 选择弹窗
  onSelectPopup(event) {
    this.setData({
      'conSelectPopupData.showSelectPopup': false,
      'conSelectPopupData.selectPopupId': event.currentTarget.dataset.item.id,
      'centerPopup.showCenterPopup': true
    })
  },
  // 选择发不发通知 
  onSelectSend(event) {
    this.setData({
      'centerPopup.showCenterPopup': false
    })
    if (event.currentTarget.dataset.item.id > -1) {
      let addUserList = this.arrayPoor(this.$store.data.originUsers, this.data.userList).addUserList
      let deleteUserList = this.arrayPoor(this.$store.data.originUsers, this.data.userList).deleteUserList
      let dataUser = {
        addUserList: addUserList,
        deleteUserList: deleteUserList,
        modifyModel: this.data.conSelectPopupData.selectPopupId,
        modifyContent: 'operate_user'
      }
      this.modifySchedule(dataUser, event.currentTarget.dataset.item.id)
    } else {
      this.operateUserE(false)
    }
  },
  // toast 消失之后的回调
  onToastHidden() {
    this.setData({
      'conToastData.showToast': false
    })
  },
  // 保存编辑
  modifySchedule(data, needNotice = 0) {
    let obj = {
      needNotice: needNotice,
      scheduleId: this.data.scheduleItem.id,
      templateId: this.data.scheduleItem.scheduleTemplateId,
      planDate: this.data.scheduleItem.planDate
    }
    return new Promise((resolve, rejects) => {
      modifySchedule(Object.assign(data, obj)).then(res => {
        if (res.data.code === 0) {
          this.$store.data.indexNeedUpdate = true
          this.update()
          this.setData({
            'conToastData.showToast': true,
            'conToastData.title': '保存成功'
          })
          if (this.$store.data.originalData.repeatable === 1) {
            observer.notice(res.data.data)
          }
          this.operateUserS()
          return resolve(res)
        } else {
          this.operateUserE()
          return rejects(res)
        }
      }).catch(err => {
        this.operateUserE()
        return rejects(err)
      })
    })
  },
  // 数组取差值 原先的数组与现在的比较 增加与减少
  arrayPoor(origin, now) {
    let originMap = new Map()
    let nowMap = new Map()
    let add = []
    let del = []
    for (let x of origin) {
      originMap.set(x.userId, x)
    }
    for (let x of now) {
      nowMap.set(x.userId, x)
      let status1 = originMap.get(x.userId)
      if (!status1) {
        add.push(x)
      }
    }
    for (let x of origin) {
      let status2 = nowMap.get(x.userId)
      if (!status2) {
        del.push(x)
      }
    }
    return {
      addUserList: add,
      deleteUserList: del
    }
  },
  // 会议冲突
  conflictPeople() {
    let userIds = []
    for (let value of this.data.outlookContact) {
      userIds.push(value.userId)
    }
    let data = {
      startTime: this.$store.data.startTime.replace(/\//g, "-"),
      endTime: this.$store.data.endTime.replace(/\//g, "-"),
      userIds: userIds
    }
    getUserScheduleInTime(data).then(res => {
      let conflictPeople = []
      for (let value in res.data.data) {
        if (!!this.data.scheduleItem) {
          const arr = res.data.data[value].filter(function (item) {
            return item.confirmAttendance === 1
          })
          if (arr.length > 1) {
            conflictPeople.push(value)
          }

        } else {
          const arr = res.data.data[value].filter(function (item) {
            return item.confirmAttendance === 1
          })
          if (arr.length > 1) {
            conflictPeople.push(value)
          }
        }

      }
      this.setData({
        conflictPeople: conflictPeople
      })
    })
  },
  // onSelectPopupCancel 点击取消 
  onSelectPopupCancel() {
    this.setData({
      'conSelectPopupData.showSelectPopup': false,
      'centerPopup.showCenterPopup': false
    })
    this.operateUserE(false)
  },
  // 参会人修改成功
  operateUserS() {
    this.$store.data.participatorList = this.data.userList
    this.$store.data.participatorUserId = this.data.userListId
    this.$store.data.indexNeedUpdate = true
    this.$store.data.originUsers = this.$store.data.participatorList
    this.$store.data.originUsersId = this.$store.data.participatorUserId
    this.update()
    dd.navigateBack({
      delta: 1
    })
  },
  // 参会人修改失败
  operateUserE(x = true) {
    if (x) {
      this.setData({
        'conToastData.showToast': true,
        'conToastData.title': '保存失败'
      })
    }

  },
  // 页面卸载
  onUnload() {
    // 页面被关闭
    observer.unregister()
  },
});