第一次提交
This commit is contained in:
273
store/modules/chat.js
Normal file
273
store/modules/chat.js
Normal file
@@ -0,0 +1,273 @@
|
||||
import storage from '@/utils/storage'
|
||||
import {
|
||||
ACCESS_TOKEN,
|
||||
USER_ID
|
||||
} from '@/store/mutation-types'
|
||||
import io from '@hyoga/uni-socket.io';
|
||||
import {
|
||||
isEmpty
|
||||
} from '@/utils/util'
|
||||
import Vue from 'vue'
|
||||
import {
|
||||
socketUrl
|
||||
} from "@/config.js"
|
||||
import {
|
||||
getConversationList,
|
||||
sendMessage,
|
||||
getFriemdMessages,
|
||||
postMarkRead,
|
||||
removeConversation
|
||||
} from '@/api/chat.js'
|
||||
import {
|
||||
getUserDetail
|
||||
} from '@/api/love-user-profile.js'
|
||||
import {getArticleCommentUnreadCount} from '@/api/article-comment.js'
|
||||
import {pageLike} from '@/api/user-like.js'
|
||||
import {pageLook} from '@/api/user-look.js'
|
||||
const theme = {
|
||||
state: {
|
||||
conversations: {},
|
||||
friends: [],
|
||||
unReadCommentNumber: 0,
|
||||
unReadLikeNumber: 0,
|
||||
unReadLikeMeNumber: 0,
|
||||
unReadLookNumber: 0,
|
||||
},
|
||||
|
||||
mutations: {
|
||||
ADD_FRIEND(state, userInfo) {
|
||||
if (!state.conversations[userInfo.userId]) {
|
||||
Vue.set(state.conversations, userInfo.userId, {
|
||||
friendInfo: userInfo,
|
||||
messages: [],
|
||||
unRead: 0,
|
||||
updateTime: new Date()
|
||||
});
|
||||
}
|
||||
},
|
||||
REMOVE_FRIEND(state, userId) {
|
||||
if (state.conversations[userId]) {
|
||||
Vue.delete(state.conversations,userId)
|
||||
}
|
||||
},
|
||||
ADD_MESSAGE(state, {
|
||||
userId,
|
||||
message,
|
||||
friendInfo
|
||||
}) {
|
||||
|
||||
if (!state.conversations[userId]) {
|
||||
|
||||
// todo getFriendInfo
|
||||
Vue.set(state.conversations, userId, {
|
||||
messages: [],
|
||||
unRead: 0,
|
||||
friendInfo,
|
||||
updateTime: new Date()
|
||||
});
|
||||
}
|
||||
state.conversations[userId].messages.push(message);
|
||||
// console.log(message.formUserId, storage.get(USER_ID));
|
||||
if (message.formUserId != storage.get(USER_ID)) {
|
||||
state.conversations[userId].unRead++
|
||||
}
|
||||
state.conversations[userId].updateTime = new Date()
|
||||
console.log(message.type);
|
||||
if (message.type == 'image') {
|
||||
state.conversations[userId].content = '[图片]'
|
||||
} else if (message.type == 'card') {
|
||||
state.conversations[userId].content = '[卡片]'
|
||||
} else {
|
||||
state.conversations[userId].content = message.content
|
||||
}
|
||||
|
||||
uni.$emit('message' + userId, message)
|
||||
},
|
||||
|
||||
SET_CONVERSATION(state, data) {
|
||||
state.conversations = data
|
||||
},
|
||||
|
||||
SET_MESSAGES(state, {
|
||||
friendId,
|
||||
messages
|
||||
}) {
|
||||
state.conversations[friendId].messages = messages
|
||||
},
|
||||
MARK_READ(state, friendId) {
|
||||
state.conversations[friendId].unRead = 0
|
||||
},
|
||||
SET_UNREAD_COMMENT_NUMBER(state, number) {
|
||||
if(number < 0) {
|
||||
return
|
||||
}
|
||||
state.unReadCommentNumber = number
|
||||
},
|
||||
SET_UNREAD_LIKE_NUMBER(state, number) {
|
||||
if(number < 0) {
|
||||
return
|
||||
}
|
||||
state.unReadLikeNumber = number
|
||||
},
|
||||
SET_UNREAD_LIKE_ME_NUMBER(state, number) {
|
||||
if(number < 0) {
|
||||
return
|
||||
}
|
||||
state.unReadLikeMeNumber = number
|
||||
},
|
||||
SET_UNREAD_LOOK_NUMBER(state, number) {
|
||||
if(number < 0) {
|
||||
return
|
||||
}
|
||||
state.unReadLookNumber = number
|
||||
}
|
||||
},
|
||||
|
||||
actions: {
|
||||
async RemoveFriend({
|
||||
state,
|
||||
commit
|
||||
}, friendId){
|
||||
removeConversation(state.conversations[friendId].id)
|
||||
commit('REMOVE_FRIEND', friendId);
|
||||
|
||||
},
|
||||
|
||||
async SendMessage({
|
||||
commit
|
||||
}, data) {
|
||||
await sendMessage(data)
|
||||
data.createTime = new Date()
|
||||
commit('ADD_MESSAGE', {
|
||||
userId: data.toUserId,
|
||||
message: data
|
||||
})
|
||||
},
|
||||
async LoadFriendMessage({
|
||||
commit
|
||||
}, friendId) {
|
||||
const res = await getFriemdMessages(friendId)
|
||||
commit('SET_MESSAGES', {
|
||||
friendId: friendId,
|
||||
messages: res.data
|
||||
})
|
||||
|
||||
},
|
||||
ConnectSocket({
|
||||
state,
|
||||
commit
|
||||
}, data) {
|
||||
console.log("ConnectSocket");
|
||||
const socket = io(socketUrl, {
|
||||
//这里是连接时所携带的数据
|
||||
query: {
|
||||
token: storage.get(ACCESS_TOKEN),
|
||||
userId: storage.get(USER_ID)
|
||||
},
|
||||
//连接方式
|
||||
transports: ['websocket', 'polling'],
|
||||
//过期时间
|
||||
timeout: 5000,
|
||||
});
|
||||
|
||||
socket.on('connect', () => {
|
||||
const {
|
||||
id
|
||||
} = socket
|
||||
console.log("socketio 已连接 clientId" + id);
|
||||
uni.socket = socket
|
||||
// 获取聊天记录
|
||||
getConversationList().then(res => {
|
||||
const data = {}
|
||||
res.data.forEach(item => {
|
||||
item.messages = []
|
||||
if(item.friendInfo){
|
||||
data[item.friendInfo.userId] = item
|
||||
}
|
||||
})
|
||||
console.log('SET_CONVERSATION', data);
|
||||
commit('SET_CONVERSATION', data)
|
||||
}).catch(err=>{
|
||||
console.log(err)
|
||||
})
|
||||
// 获取恋爱圈未读消息
|
||||
getArticleCommentUnreadCount().then(res=>{
|
||||
commit('SET_UNREAD_COMMENT_NUMBER', res.data)
|
||||
})
|
||||
// 喜欢我和我喜欢
|
||||
pageLike({
|
||||
sceneType: 'UN_READ_USER_LIKE'
|
||||
}).then(res=>{
|
||||
commit('SET_UNREAD_LIKE_NUMBER', res.data.count)
|
||||
})
|
||||
pageLike({
|
||||
sceneType: 'UN_READ_USER_LIKE_ME'
|
||||
}).then(res=>{
|
||||
commit('SET_UNREAD_LIKE_ME_NUMBER', res.data.count)
|
||||
})
|
||||
pageLook({
|
||||
sceneType: 'UN_READ_USER_LOOK'
|
||||
}).then(res=>{
|
||||
commit('SET_UNREAD_LOOK_NUMBER', res.data.count)
|
||||
})
|
||||
})
|
||||
|
||||
socket.on('message', (data) => {
|
||||
if (!state.conversations[data.formUserId]) {
|
||||
getUserDetail(data.formUserId).then(res => {
|
||||
commit('ADD_MESSAGE', {
|
||||
userId: data.formUserId,
|
||||
message: data,
|
||||
friendInfo: res.data.userInfo
|
||||
})
|
||||
})
|
||||
} else {
|
||||
commit('ADD_MESSAGE', {
|
||||
userId: data.formUserId,
|
||||
message: data
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
socket.on('pyq', (data) => {
|
||||
commit('SET_UNREAD_COMMENT_NUMBER', data)
|
||||
})
|
||||
|
||||
socket.on('likeme', (data) => {
|
||||
console.log("likeme",state.unReadLikeMeNumber , data);
|
||||
commit('SET_UNREAD_LIKE_ME_NUMBER', state.unReadLikeMeNumber + data)
|
||||
})
|
||||
|
||||
socket.on('look', (data) => {
|
||||
console.log("look",state.unReadLookNumber , data);
|
||||
commit('SET_UNREAD_LOOK_NUMBER', state.unReadLookNumber + data)
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
MarkRead({
|
||||
state,
|
||||
commit
|
||||
}, friendId) {
|
||||
postMarkRead({
|
||||
id: state.conversations[friendId].id
|
||||
})
|
||||
commit('MARK_READ', friendId)
|
||||
},
|
||||
|
||||
CloseSocket({
|
||||
state,
|
||||
commit
|
||||
}, data) {
|
||||
if (uni.socket) {
|
||||
uni.socket.close()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export default theme
|
||||
Reference in New Issue
Block a user