import {createStore} from "vuex"; import {setLocalStorage, getLocalStorage} from "../utils"; import {Obj, StrNumObj} from "../interface"; import router from "../router" import {logout} from "../api"; interface State { userInfo: StrNumObj, chatUserInfo: Obj, isShowChat: boolean, isShowUserInfo: boolean, isShowGroupInfo: boolean, isShowRight: boolean, isSearching: boolean, userList: any[], } export default createStore({ state: { userInfo: getLocalStorage('userInfo') || {}, //自己的信息 chatUserInfo: { friendId: 0, friendName: '', id: 0, isGroup: 0, noReadNum: 0, userId: 0, username: '', nickname: '', email: '', }, //当前聊天用户的信息 isShowChat: false, isShowUserInfo: false, isShowGroupInfo: false, isShowRight: true, isSearching: false, userList: [], } as State, mutations: { logout() { setLocalStorage('userInfo', {}) router.push('/') }, setUserInfo(state, data) { state.userInfo = data setLocalStorage('userInfo', data) }, updateUserInfo(state, obj) { state.userInfo = {...state.userInfo, ...obj} setLocalStorage('userInfo', state.userInfo) }, setUserList(state, data) { state.userList = data }, setChatUserInfo(state, data) { state.chatUserInfo = data }, setIsShowChat(state, status) { state.isShowChat = status }, setIsShowUserInfo(state, status) { state.isShowUserInfo = status }, setIsShowGroupInfo(state, status) { state.isShowGroupInfo = status }, setIsSearching(state, status) { state.isSearching = status }, setIsShowRight(state, status) { state.isShowRight = status }, setNotReadMessage(state, id) { state.userList.forEach((item: Obj) => { if (id === item.friendId) { item.noReadNum++; } }) }, // 把有未读消息的好友移到上面 hasNotReadMsgUserSort(state) { const userList: Obj[] = state.userList.filter(item => item.noReadNum > 0) state.userList = Array.from(new Set([...userList, ...state.userList])) }, // 正在聊天的好友移到上面 chatUserSort(state, obj: Obj) { const i = state.userList.findIndex(item => item === obj) state.userList.splice(i, 1) state.userList.unshift(obj) }, }, actions: { async logout({commit}) { await logout() commit('logout') } }, modules: {} });