users.js 1.1 KB
Newer Older
DCloud_JSON's avatar
DCloud_JSON 已提交
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
import $state from '../state/index.js';
export default {
  merge(usersInfo) {
    if (Array.isArray(usersInfo)) {
      let obj = {}
      usersInfo.forEach(item => {
        obj[item._id] = item
      })
      usersInfo = obj
    }
    $state.users = Object.assign({}, $state.users, usersInfo)
  },
  async get(param) {
    const uid_list = Array.isArray(param) ? param : [param]
    // 信息在本地不存在的用户id
    let new_uid_list = [];
    let userInfoList = [];
    uid_list.forEach(uid => {
      let users = $state.users[uid]
      if (users) {
        userInfoList.push(users)
      } else {
        new_uid_list.push(uid)
      }
    })
    if (new_uid_list.length) {
      // 从云端加载本地不存在的用户数据
      const db = uniCloud.database();
      let res = await db.collection('uni-id-users').where({
          "_id": db.command.in(new_uid_list)
        })
        .field('_id,nickname,avatar_file')
        .get()
      userInfoList.push(...res.result.data)
      $state.users.merge(res.result.data)
    }
    return Array.isArray(param) ? userInfoList : userInfoList[0]
  }
}