| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- import { emContacts, emUserInfos, emPresence } from "@/EaseIM/emApis";
- import Vue from "vue";
- import { handlePresence } from "@/EaseIM/utils";
- import { EMClient } from "@/EaseIM";
- const { fetchContactsListFromServer, getBlocklistFromServer } = emContacts();
- const { fetchOtherInfoFromServer } = emUserInfos();
- const { subscribePresence, unsubscribePresence } = emPresence();
- const ContactsStore = {
- state: {
- friendList: [],
- friendUserInfoCollection: {}, //用对象替换好友属性集合
- blockUserList: [],
- subscribeStatusInfoMap: {}, //好友用户在线状态
- loginUserPresenceInfoMap: {}, //自己的用户状态变更
- },
- mutations: {
- RESET_CONTACTS_STORE: (state) => {
- state.friendList = [];
- state.friendUserInfoCollection = {};
- state.blockUserList = [];
- },
- SET_FROEND_LIST: (state, payload) => {
- if (state.friendList.length === 0) {
- if (Array.isArray(payload)) {
- Vue.set(state, "friendList", [...payload]);
- } else {
- Vue.set(state, "friendList", [payload]);
- }
- } else {
- if (Array.isArray(payload)) {
- Vue.set(state, "friendList", [...state.friendList, ...payload]);
- } else {
- Vue.set(state, "friendList", [...state.friendList, payload]);
- }
- }
- },
- DELETE_FRIEND_ITEM: (state, friendId) => {
- state.friendList.map((item, idnex) => {
- if (item.userId === friendId) {
- state.friendList.splice(idnex, 1);
- }
- });
- },
- SET_FRIEND_USER_INFO_COLLECTION: (state, friendProfiles) => {
- if (Object.keys(friendProfiles).length) {
- for (const key in friendProfiles) {
- if (Object.hasOwnProperty.call(friendProfiles, key)) {
- const values = friendProfiles[key];
- Object.values(values).length &&
- Vue.set(state.friendUserInfoCollection, key, values);
- }
- }
- }
- },
- SET_BLOCK_USER_LIST: (state, userList) => {
- state.blockUserList = [...userList];
- },
- UPDATE_FRIEND_USER_REMARK: (state, { contactId, remark }) => {
- state.friendList.map((item) => {
- if (item.userId === contactId) {
- Vue.set(item, "remark", remark);
- }
- });
- // Vue.set(state.friendUserInfoCollection[contactId], 'remark', remark);
- },
- // 好友在线状态
- SET_FRIENDSTATUS_STATUS_INFO: (state, subscribeStatus) => {
- subscribeStatus.map((item) => {
- // console.log("用户在线状态", handlePresence(item));
- const commonStatus = handlePresence(item);
- const matchingFriend = state.friendList.find(
- (friend) => friend.userId === commonStatus.uid
- );
- if (matchingFriend) {
- Vue.set(
- state.subscribeStatusInfoMap,
- matchingFriend.userId,
- commonStatus
- );
- } else {
- Vue.set(state.subscribeStatusInfoMap, commonStatus.uid, commonStatus);
- }
- });
- console.log("用户在线状态", state.subscribeStatusInfoMap);
- },
- // 自己状态变更
- SET_SUBSCRIBE_STATUS_INFO_LOGIN_USER: (state, subscribeStatus) => {
- if (Object.keys(subscribeStatus).length) {
- for (const key in subscribeStatus) {
- if (Object.hasOwnProperty.call(subscribeStatus, key)) {
- const values = subscribeStatus[key];
- Object.values(values).length &&
- Vue.set(state.loginUserPresenceInfoMap, key, values);
- }
- }
- }
- console.log("自己的状态变更", state.loginUserPresenceInfoMap);
- },
- // 取消订阅删除对应的好友状态
- DELETE_PRESENCE_ITEM: (state, friendId) => {
- for (const key in state.subscribeStatusInfoMap) {
- if (
- Object.values(state.subscribeStatusInfoMap[key]).includes(friendId)
- ) {
- Vue.delete(state.subscribeStatusInfoMap, key);
- }
- }
- },
- },
- actions: {
- async fetchFriendList({ commit }) {
- try {
- const friendList = await fetchContactsListFromServer();
- commit("SET_FROEND_LIST", friendList);
- } catch (error) {
- console.log(">>>>好友列表获取失败", error);
- }
- },
- //批量获取好友列表对应的用户属性
- async fetchFriendUserInfoCollection({ state, commit }) {
- try {
- const friendProfiles = await fetchOtherInfoFromServer(
- state.friendList.map((item) => item.userId)
- );
- console.log("friendProfiles", friendProfiles);
- commit("SET_FRIEND_USER_INFO_COLLECTION", friendProfiles);
- } catch (error) {
- console.log(">>>>获取好友属性失败", error);
- }
- },
- //获取单个用户的用户属性
- async fetchFriendUserInfo({ state, commit }, userId) {
- try {
- const friendProfile = await fetchOtherInfoFromServer([userId]);
- console.log(">>>>获取单个用户属性执行", friendProfile);
- commit("SET_FRIEND_USER_INFO_COLLECTION", friendProfile);
- } catch (error) {
- console.log(">>>>获取好友属性失败", error);
- }
- },
- async fetchBlockUserList({ commit }) {
- try {
- const userList = await getBlocklistFromServer();
- console.log(">>>>getBlocklistFromServer", userList);
- commit("SET_BLOCK_USER_LIST", userList);
- } catch (error) {
- console.log(">>>>获取好友黑名单失败", error);
- }
- },
- // 订阅用户的在线状态
- async subscribePresenceStatus({ state, commit }) {
- try {
- const subscribeStatus = await subscribePresence(
- state.friendList.map((item) => item.userId)
- );
- commit("SET_FRIENDSTATUS_STATUS_INFO", subscribeStatus);
- console.log(">>>>订阅用户在线状态", subscribeStatus);
- } catch (error) {
- console.log(">>>>订阅用户在线状态失败", error);
- }
- },
- // 取消订阅
- async unsubscribePresenceStatus({ state, commit }, userId) {
- try {
- const subscribeStatus = await unsubscribePresence(userId);
- } catch (error) {
- console.log(">>>>取消订阅用户在线状态失败", error);
- }
- },
- // 处理状态变更
- async handlePresenceChanges({ state, commit }, status) {
- const { userId } = status || {};
- if (userId === EMClient.user) {
- commit("SET_SUBSCRIBE_STATUS_INFO_LOGIN_USER", status);
- } else {
- commit("SET_FRIENDSTATUS_STATUS_INFO", [{ ...status }]);
- }
- },
- },
- getters: {
- friendUserInfoCollection(state) {
- return state.friendUserInfoCollection;
- },
- friendList(state) {
- return state.friendList;
- },
- blockUserList(state) {
- return state.blockUserList;
- },
- subscribeStatusInfoMap(state) {
- return state.subscribeStatusInfoMap;
- },
- },
- };
- export default ContactsStore;
|