import storage from '@/uni_modules/vrapile-im/utils/storage' import constant from '@/uni_modules/vrapile-im/utils/constant' import { getChatKey } from '@/uni_modules/vrapile-im/utils/tiosocket'; // 外部需提供获取用户好友,获取用户所有群,以及群中所有用户三个接口 import { getUserAllFriend, getUserAllGroup, getGroupUser } from '@/api/chat' const chat = { state: { friendList: storage.get(constant.friendList) || [], groupList: storage.get(constant.groupList) || [], userObject: storage.get(constant.userObject) || {}, groupObject: storage.get(constant.groupObject) || {}, chatList: storage.get(constant.chatList) || [] }, mutations: { // 清空聊天列表 CLEAN_CHAT_LIST: (state) => { state.chatList = new Array(); storage.set(constant.chatList, state.chatList) }, // 存储好友聊天列表 SET_CHAT_FRIEND_LIST: (state, data) => { state.friendList = data; storage.set(constant.friendList, data) for(let item of data){ item["key"] = getChatKey(item["type"], item["friendId"], item["userId"]) item["haveHistory"] = 1; item["id"] = item["friendId"]; item["name"] = item["remarkName"] || item["nickName"]; item["messageNum"] = 0; item["messageList"] = []; item["messageShow"] = ""; item["messageLast"] = {}; state.chatList.push(item) } storage.set(constant.chatList, state.chatList) }, // 存储群聊列表 SET_CHAT_GROUP_LIST: (state, data) => { state.groupList = data; storage.set(constant.groupList, data) for(let item of data){ item["key"] = getChatKey(item["type"], item["id"], item["userId"]) item["haveHistory"] = 1; item["id"] = item["id"]; item["name"] = item["remarkName"] || item["name"] item["messageNum"] = 0; item["messageList"] = []; item["messageShow"] = ""; item["messageLast"] = {}; state.chatList.push(item) } storage.set(constant.chatList, state.chatList) }, // 存储用户对象,方便寻找用户名,头像等 SET_USER_OBJECT: (state, userObject) => { state.userObject[userObject.userId] = userObject; storage.set(constant.userObject, state.userObject) }, // 存储群组对象,方便寻找群组名,头像等 SET_GROUP_OBJECT: (state, groupObject) => { state.groupObject[groupObject.id] = groupObject; storage.set(constant.groupObject, state.groupObject) } }, actions: { // 获取登录用户所有聊天列表 GetChatList({ commit, state }, params) { return new Promise((resolve, reject) => { commit('CLEAN_CHAT_LIST'); // 查询好友 getUserAllFriend().then(res => { let list = [] for(let item of res.data){ list.push({type: 0, ...item, userId: params.userId}) commit('SET_USER_OBJECT', item) } commit('SET_CHAT_FRIEND_LIST', list) // 查询群组 getUserAllGroup().then(res1 => { let list = [] for(let item1 of res1.data){ list.push({type: 1, ...item1, userId: params.userId}) // 查询群组人员 getGroupUser(item1.id).then(res2 => { for(let user of res2.data){ commit('SET_USER_OBJECT', user) } resolve(res2) }); commit('SET_GROUP_OBJECT', item1) } commit('SET_CHAT_GROUP_LIST', list) }).catch(error => { reject(error) }) }).catch(error => { reject(error) }) }) } }, getters: { getUserAvatar: (state) => (userId, defaultAvatar) => { if(state.userObject[userId] && state.userObject[userId]["avatar"]){ return state.userObject[userId]["avatar"] } return defaultAvatar || '/uni_modules/vrapile-im/static/image/yy.png'; }, getGroupAvatar: (state) => (groupId, defaultAvatar) => { if(state.groupObject[groupId] && state.groupObject[groupId]["avatar"]){ return state.groupObject[groupId]["avatar"] } return defaultAvatar || '/uni_modules/vrapile-im/static/image/yy.png'; }, getUserName: (state) => (userId, defaultName) => { if(state.userObject[userId]){ return state.userObject[userId]["remarkName"] || state.userObject[userId]["nickName"] || defaultName } return defaultName || "无名"; }, getGroupName: (state) => (groupId, defaultName) => { if(state.groupObject[groupId]){ return state.groupObject[userId]["remarkName"] || state.groupObject[userId]["name"] || defaultName } return defaultName || "无名"; } } } export default chat