diff --git a/im-uniapp/store/friendStore.js b/im-uniapp/store/friendStore.js index 033f856..c846e75 100644 --- a/im-uniapp/store/friendStore.js +++ b/im-uniapp/store/friendStore.js @@ -5,36 +5,27 @@ import { TERMINAL_TYPE } from '../common/enums.js' export default defineStore('friendStore', { state: () => { return { - friends: [], + friendMap: new Map(), timer: null } }, actions: { setFriends(friends) { - friends.forEach((f) => { - f.online = false; - f.onlineWeb = false; - f.onlineApp = false; - }) - this.friends = friends; + this.friendMap.clear(); + friends.forEach(f => this.friendMap.set(f.id, f)) }, updateFriend(friend) { let f = this.findFriend(friend.id); - let copy = JSON.parse(JSON.stringify(f)); - Object.assign(f, friend); - f.online = copy.online; - f.onlineWeb = copy.onlineWeb; - f.onlineApp = copy.onlineApp; + friend.online = f.online; + friend.onlineWeb = f.onlineWeb; + friend.onlineApp = f.onlineApp; + this.friendMap.set(friend.id, friend) }, removeFriend(id) { - this.friends.filter(f => f.id == id).forEach(f => f.deleted = true); + this.friendMap.get(id).deleted = true; }, addFriend(friend) { - if (this.friends.some((f) => f.id == friend.id)) { - this.updateFriend(friend) - } else { - this.friends.unshift(friend); - } + this.friendMap.set(friend.id, friend) }, setOnlineStatus(onlineTerminals) { this.friends.forEach((f) => { @@ -68,12 +59,11 @@ export default defineStore('friendStore', { }, 30000) }, setDnd(id, isDnd) { - let friend = this.findFriend(id); - friend.isDnd = isDnd; + this.friendMap.get(id).isDnd = isDnd; }, clear() { + this.friendMap.clear(); clearTimeout(this.timer); - this.friends = []; this.timer = null; }, loadFriend() { @@ -92,11 +82,15 @@ export default defineStore('friendStore', { } }, getters: { - isFriend: (state) => (userId) => { - return state.friends.filter((f) => !f.deleted).some((f) => f.id == userId); + friends: (state) => { + return Array.from(state.friendMap.values()); }, - findFriend: (state) => (id) => { - return state.friends.find((f) => f.id == id); + findFriend: (state) => (userId) => { + return state.friendMap.get(userId); + }, + isFriend: (state) => (userId) => { + let f = state.findFriend(userId) + return f && !f.deleted } } }) \ No newline at end of file diff --git a/im-uniapp/store/groupStore.js b/im-uniapp/store/groupStore.js index 739361b..3409b10 100644 --- a/im-uniapp/store/groupStore.js +++ b/im-uniapp/store/groupStore.js @@ -4,33 +4,28 @@ import http from '@/common/request'; export default defineStore('groupStore', { state: () => { return { - groups: [] + groupMap: new Map() } }, actions: { setGroups(groups) { - this.groups = groups; + this.groupMap.clear(); + groups.forEach(g => this.groupMap.set(g.id, g)) }, addGroup(group) { - if (this.groups.some((g) => g.id == group.id)) { - this.updateGroup(group); - } else { - this.groups.unshift(group); - } + this.groupMap.set(group.id, group); }, removeGroup(id) { - this.groups.filter(g => g.id == id).forEach(g => g.quit = true); + this.groupMap.get(id).quit = true; }, updateGroup(group) { - let g = this.findGroup(group.id); - Object.assign(g, group); + this.groupMap.set(group.id, group); }, setDnd(id, isDnd) { - let group = this.findGroup(id); - group.isDnd = isDnd; + this.groupMap.get(id).isDnd = isDnd; }, clear() { - this.groups = []; + this.groupMap.clear(); }, loadGroup() { return new Promise((resolve, reject) => { @@ -47,8 +42,15 @@ export default defineStore('groupStore', { } }, getters: { + groups: (state) => { + return Array.from(state.groupMap.values()); + }, findGroup: (state) => (id) => { - return state.groups.find((g) => g.id == id); + return state.groupMap.get(id); + }, + isGroup: (state) => (id) => { + let group = state.findGroup(id); + return group && !group.quit } } }) \ No newline at end of file