Files
im/store/modules/contact.js
T
2026-02-15 19:40:36 +08:00

347 lines
8.8 KiB
JavaScript

import {v4 as uuidv4} from "uuid";
import IMSDK from "openim-uniapp-polyfill";
import conversation from "./conversation";
const state = {
friendList: [],
blackList: [],
groupList: [],
recvFriendApplications: [],
sentFriendApplications: [],
recvGroupApplications: [],
sentGroupApplications: [],
unHandleFriendApplicationNum: 0,
unHandleGroupApplicationNum: 0,
};
const mutations = {
SET_FRIEND_LIST(state, list) {
state.friendList = [...list];
},
SET_BLACK_LIST(state, list) {
state.blackList = [...list];
},
SET_GROUP_LIST(state, list) {
state.groupList = [...list];
},
SET_RECV_FRIEND_APPLICATIONS(state, list) {
state.recvFriendApplications = [...list];
const count = list.filter((item) => item.handleResult === 0);
state.unHandleFriendApplicationNum = count.length;
},
SET_SENT_FRIEND_APPLICATIONS(state, list) {
state.sentFriendApplications = [...list];
},
SET_RECV_GROUP_APPLICATIONS(state, list) {
state.recvGroupApplications = [...list];
const count = list.filter((item) => item.handleResult === 0);
state.unHandleGroupApplicationNum = count.length;
},
SET_SENT_GROUP_APPLICATIONS(state, list) {
state.sentGroupApplications = [...list];
},
};
const actions = {
async getFriendList({commit }) {
let offset = 0;
let friendInfoList = [];
let initialFetch = true;
while (true) {
try {
const count = initialFetch ? 10000 : 1000;
const {data} = await IMSDK.asyncApi("getFriendListPage", uuidv4(), {offset,count,filterBlack:true});
//console.log(data);
friendInfoList = [
...friendInfoList,
...data,
];
offset += count;
if (data.length < count) break;
initialFetch = false;
} catch (error) {
console.error("getFriendListPage error",error);
break;
}
}
commit("SET_FRIEND_LIST", friendInfoList);
},
async getGrouplist({commit}) {
let offset = 0;
let groupList = [];
while (true) {
try {
const {
data
} = await IMSDK.asyncApi(
"getJoinedGroupListPage",
uuidv4(), {
offset,
count: 1000,
}
);
groupList = [...groupList, ...data];
offset += 1000;
if (data.length < 1000) break;
} catch (error) {
console.error("getGrouplist error");
}
}
//console.log(groupList);
commit("SET_GROUP_LIST", groupList);
},
getBlacklist({commit}) {
//#ifndef APP
return [];
//#endif
IMSDK.asyncApi(IMSDK.IMMethods.GetBlackList, uuidv4()).then(({
data
}) => {
commit("SET_BLACK_LIST", data);
});
},
getRecvFriendApplications({commit}) {
//#ifndef APP
return [];
//#endif
IMSDK.asyncApi(
IMSDK.IMMethods.GetFriendApplicationListAsRecipient,
uuidv4(),
).then(({
data
}) => {
commit("SET_RECV_FRIEND_APPLICATIONS", data);
});
},
getSentFriendApplications({ commit }) {
//#ifndef APP
return [];
//#endif
IMSDK.asyncApi(
IMSDK.IMMethods.GetFriendApplicationListAsApplicant,
uuidv4(),
).then(({
data
}) => {
commit("SET_SENT_FRIEND_APPLICATIONS", data);
});
},
getRecvGroupApplications({ commit,state}) {
//#ifndef APP
return [];
//#endif
IMSDK.asyncApi(
IMSDK.IMMethods.GetGroupApplicationListAsRecipient,
uuidv4(),
).then(({
data
}) => {
commit("SET_RECV_GROUP_APPLICATIONS", data);
});
},
getSentGroupApplications({ commit }) {
//#ifndef APP
return [];
//#endif
IMSDK.asyncApi(
IMSDK.IMMethods.GetGroupApplicationListAsApplicant,
uuidv4(),
).then(({
data
}) => {
commit("SET_SENT_GROUP_APPLICATIONS", data);
});
},
pushNewFriend({ commit, state}, friendInfo) {
const tmpList = [...state.friendList];
const idx = tmpList.findIndex((item) => item.userID === friendInfo.userID);
if (idx === -1) {
commit("SET_FRIEND_LIST", [...tmpList, friendInfo]);
}
},
updateFriendInfo({commit,state,dispatch }, { friendInfo,isRemove = false}) {
const tmpList = [...state.friendList];
const idx = tmpList.findIndex((item) => item.userID === friendInfo.userID);
if (idx !== -1) {
if (isRemove) {
tmpList.splice(idx, 1);
} else {
tmpList[idx] = {
...friendInfo,
};
}
commit("SET_FRIEND_LIST", tmpList);
}
if (isRemove) {
const conversationID = friendInfo.userID ? `si_${friendInfo.ownerUserID}_${friendInfo.userID}` : `si_${friendInfo.groupID}`;
dispatch('conversation/deleteConversation',conversationID, { root: true });
}
},
pushNewBlack({ commit, state}, blackInfo) {
const tmpList = [...state.blackList];
const idx = tmpList.findIndex((item) => item.userID === blackInfo.userID);
if (idx === -1) {
commit("SET_BLACK_LIST", [...tmpList, blackInfo]);
}
},
updateBlackInfo({commit,state}, {blackInfo,isRemove = false}) {
const tmpList = [...state.blackList];
const idx = tmpList.findIndex((item) => item.userID === blackInfo.userID);
if (idx !== -1) {
if (isRemove) {
tmpList.splice(idx, 1);
} else {
tmpList[idx] = {
...blackInfo,
};
}
commit("SET_BLACK_LIST", tmpList);
}
},
pushNewGroup({commit,state}, groupInfo) {
const tmpList = [...state.groupList];
const idx = tmpList.findIndex((item) => item.groupID === groupInfo.groupID);
if (idx === -1) {
commit("SET_GROUP_LIST", [...tmpList, groupInfo]);
}
},
updateGroupInfo({commit,state,rootState}, {groupInfo,isRemove = false}, ) {
const tmpList = [...state.groupList];
const idx = tmpList.findIndex((item) => item.groupID === groupInfo.groupID);
if (rootState.conversation.currentGroup.groupID === groupInfo.groupID) {
commit("conversation/SET_CURRENT_GROUP", groupInfo, {
root: true
});
}
if (idx !== -1) {
if (isRemove) {
tmpList.splice(idx, 1);
} else {
tmpList[idx] = {
...groupInfo,
};
}
commit("SET_GROUP_LIST", tmpList);
}
},
pushNewRecvFriendApplition({commit,state}, application) {
const tmpList = [...state.recvFriendApplications];
const idx = tmpList.findIndex(
(item) => item.fromUserID === application.fromUserID,
);
if (idx !== -1) {
tmpList.splice(idx, 1);
}
commit("SET_RECV_FRIEND_APPLICATIONS", [...tmpList, application]);
},
updateRecvFriendApplition({commit,state,rootState}, {application,isRemove = false}, ) {
console.log(application);
const tmpList = [...state.recvFriendApplications];
const idx = tmpList.findIndex(
(item) => item.fromUserID === application.fromUserID,
);
if (idx !== -1) {
if (isRemove) {
tmpList.splice(idx, 1);
} else {
tmpList[idx] = {
...application,
};
}
commit("SET_RECV_FRIEND_APPLICATIONS", tmpList);
}
},
pushNewSentFriendApplition({commit,state}, application) {
const tmpList = [...state.sentFriendApplications];
const idx = tmpList.findIndex(
(item) => item.toUserID === application.toUserID,
);
if (idx !== -1) {
tmpList.splice(idx, 1);
}
commit("SET_SENT_FRIEND_APPLICATIONS", [...tmpList, application]);
},
updateSentFriendApplition({commit,state,rootState}, {application,isRemove = false}, ) {
const tmpList = [...state.sentFriendApplications];
const idx = tmpList.findIndex(
(item) => item.toUserID === application.toUserID,
);
if (idx !== -1) {
if (isRemove) {
tmpList.splice(idx, 1);
} else {
tmpList[idx] = {
...application,
};
}
commit("SET_SENT_FRIEND_APPLICATIONS", tmpList);
}
},
pushNewRecvGroupApplition({commit,state}, application) {
const tmpList = [...state.recvGroupApplications];
const idx = tmpList.findIndex((item) => item.userID === application.userID);
if (idx !== -1) {
tmpList.splice(idx, 1);
}
commit("SET_RECV_GROUP_APPLICATIONS", [...tmpList, application]);
// const newList = state.recvGroupApplications.filter((item)=>{
// item.userID !== application.userID
// });
// commit("SET_RECV_GROUP_APPLICATIONS", [...newList, application]);
},
updateRecvGroupApplition({commit,state,rootState}, {application,isRemove = false}, ) {
const tmpList = [...state.recvGroupApplications];
const idx = tmpList.findIndex((item) => item.userID === application.userID);
if (idx !== -1) {
if (isRemove) {
tmpList.splice(idx, 1);
} else {
tmpList[idx] = {
...application,
};
}
commit("SET_RECV_GROUP_APPLICATIONS", tmpList);
}
},
pushNewSentGroupApplition({commit,state}, application) {
const tmpList = [...state.sentGroupApplications];
const idx = tmpList.findIndex(
(item) => item.groupID === application.groupID,
);
if (idx !== -1) {
tmpList.splice(idx, 1);
}
commit("SET_SENT_GROUP_APPLICATIONS", [...tmpList, application]);
},
updateSentGroupApplition({commit,state,rootState}, {application,isRemove = false}, ) {
const tmpList = [...state.sentGroupApplications];
const idx = tmpList.findIndex(
(item) => item.groupID === application.groupID,
);
if (idx !== -1) {
if (isRemove) {
tmpList.splice(idx, 1);
} else {
tmpList[idx] = {
...application,
};
}
commit("SET_SENT_GROUP_APPLICATIONS", tmpList);
}
},
};
export default {
namespaced: true,
state,
mutations,
actions,
};