|
|
import request from '@/components/hzjc/utils/request.js'
|
|
|
|
|
|
let chat = {}
|
|
|
|
|
|
// 1--列表页 2--详情页 3--其他页
|
|
|
chat.curPage = 3
|
|
|
// 当前在线聊天室ID
|
|
|
chat.curRoomId = ''
|
|
|
// 当前页面object
|
|
|
chat.that = {}
|
|
|
|
|
|
/**
|
|
|
* 获取和好友的聊天列表
|
|
|
* @date 2022-09-15
|
|
|
*/
|
|
|
chat.listChatRoom = function() {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
request.getData('chat/api/FriendsChat/listChatRoom').then(res => {
|
|
|
resolve(res)
|
|
|
}).catch(res => {
|
|
|
reject(res)
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 绑定客户端到组和USER_ID
|
|
|
* @param {int} roomId 房间ID
|
|
|
* @param {string} clientId 客户端ID
|
|
|
* @date 2022-09-15
|
|
|
*/
|
|
|
chat.bindUser = function(roomId, clientId) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
request.getData('chat/api/FriendsChat/bindUser', {
|
|
|
room_id: roomId,
|
|
|
client_id: clientId
|
|
|
}).then(res => {
|
|
|
resolve(res)
|
|
|
}).catch(res => {
|
|
|
reject(res)
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取聊天室详情
|
|
|
* @param {int} roomId 房间ID
|
|
|
* @date 2022-09-15
|
|
|
*/
|
|
|
chat.getChatRoomDetail = function(roomId) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
request.getData('chat/api/FriendsChat/getChatRoomDetail', {
|
|
|
room_id: roomId
|
|
|
}).then(res => {
|
|
|
resolve(res)
|
|
|
}).catch(res => {
|
|
|
reject(res)
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更改用户在线状态以及标记消息已读
|
|
|
* @param {int} roomId 房间ID
|
|
|
* @param {int} isOnline 是否在线 0--离线 1--在线
|
|
|
* @date 2022-09-15
|
|
|
*/
|
|
|
chat.updateUserOnlineStatus = function(roomId, isOnline) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
request.getData('chat/api/FriendsChat/updateUserOnlineStatus', {
|
|
|
room_id: roomId,
|
|
|
is_online: isOnline
|
|
|
}).then(res => {
|
|
|
resolve(res)
|
|
|
}).catch(res => {
|
|
|
reject(res)
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取和某个好友的聊天记录
|
|
|
* @param {int} roomId 房间ID
|
|
|
* @param {int} curFirstMessageId 当前最上面的信息ID
|
|
|
* @param {int} firstPage 1--加载第一页,自动清空列表 0--加载上一页,不清空列表
|
|
|
* @param {object} _$this
|
|
|
* @date 2022-09-15
|
|
|
*/
|
|
|
chat.listChatRoomMessage = function(roomId, curFirstMessageId, firstPage, _$this) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
request.getUpList('chat/api/FriendsChat/listChatRoomMessage', {
|
|
|
room_id: roomId,
|
|
|
cur_first_message_id: curFirstMessageId
|
|
|
}, {
|
|
|
that: _$this,
|
|
|
first_page: firstPage
|
|
|
}).then(res => {
|
|
|
resolve(res)
|
|
|
}).catch(res => {
|
|
|
reject(res)
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 发送消息
|
|
|
* @param {int} roomId 房间ID
|
|
|
* @param {int} messageType 消息类型
|
|
|
* @param {string} messageType 消息内容
|
|
|
* @param {int|string} recordSeconds messageType=2时,录音时长
|
|
|
* @param {object} attach 附加数据
|
|
|
* @date 2022-09-15
|
|
|
*/
|
|
|
chat.insertChatMessage = function(roomId, messageType, messageContent, attach = {}, product = {}) {
|
|
|
let data = {
|
|
|
room_id: roomId,
|
|
|
type: messageType,
|
|
|
content: messageContent
|
|
|
}
|
|
|
// 语音类型
|
|
|
if (messageType == 2) {
|
|
|
data.record_seconds = attach.recordSeconds
|
|
|
}
|
|
|
// 位置类型
|
|
|
if (messageType == 4) {
|
|
|
data.name = attach.name
|
|
|
data.address = attach.address
|
|
|
data.lat = attach.lat
|
|
|
data.lng = attach.lng
|
|
|
}
|
|
|
// 商品类型
|
|
|
if (messageType == 5) {
|
|
|
data.product_id = product.id;
|
|
|
data.product_name = product.name;
|
|
|
data.product_cover_img = product.cover_img;
|
|
|
}
|
|
|
return new Promise((resolve, reject) => {
|
|
|
request.getData('chat/api/FriendsChat/insertChatMessage', data).then(res => {
|
|
|
resolve(res)
|
|
|
}).catch(res => {
|
|
|
reject(res)
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 监听消息
|
|
|
* @date 2022-09-21
|
|
|
*/
|
|
|
chat.onMessage = function() {
|
|
|
|
|
|
// 监听WebSocket接受到服务器的消息事件
|
|
|
uni.onSocketMessage((res) => {
|
|
|
let data = JSON.parse(res.data)
|
|
|
console.log('onSocketMessage', data)
|
|
|
switch (data.type) {
|
|
|
// websocket连接成功
|
|
|
case "init":
|
|
|
uni.setStorageSync('clientId', data.to_client)
|
|
|
// 绑定用户和所有直播间
|
|
|
request.getData('chat/api/FriendsChat/bindUser', {
|
|
|
client_id: data.to_client
|
|
|
}).then(res => {
|
|
|
|
|
|
})
|
|
|
break;
|
|
|
// 心跳
|
|
|
case "heart_beat":
|
|
|
break;
|
|
|
// 收到聊天消息
|
|
|
case "chat_friend_message":
|
|
|
switch (this.curPage) {
|
|
|
// 列表页
|
|
|
case 1:
|
|
|
let roomList = this.that.roomList
|
|
|
let curData = {}
|
|
|
let isInRoomList = false
|
|
|
roomList.forEach((e, index) => {
|
|
|
// 消息在聊天列表中,仅更新且移到第一位
|
|
|
if (e.room_id == data.to_group) {
|
|
|
isInRoomList = true
|
|
|
|
|
|
curData = e
|
|
|
curData.unread_number = e.unread_number + 1
|
|
|
curData.last_message_type = data.data.type
|
|
|
curData.show_message_text = data.data.show_message_text
|
|
|
curData.show_time = data.data.list_time_show
|
|
|
|
|
|
roomList.splice(index, 1)
|
|
|
}
|
|
|
})
|
|
|
if (!isInRoomList) {
|
|
|
curData.room_id = data.data.room_id
|
|
|
curData.to_user_id = data.data.to_user_id
|
|
|
curData.to_user_nick_name = data.data.to_user_nick_name
|
|
|
curData.to_user_head_img = data.data.to_user_head_img
|
|
|
curData.unread_number = 1
|
|
|
curData.last_message_type = data.data.type
|
|
|
curData.show_message_text = data.data.show_message_text
|
|
|
curData.show_time = data.data.list_time_show
|
|
|
}
|
|
|
roomList.unshift(curData)
|
|
|
|
|
|
this.that.roomList = roomList
|
|
|
break;
|
|
|
// 详情页
|
|
|
case 2:
|
|
|
if (data.to_group == this.curRoomId) {
|
|
|
delete data.data.show_message_text
|
|
|
delete data.data.list_time_show
|
|
|
delete data.data.to_user_nick_name
|
|
|
delete data.data.to_user_head_img
|
|
|
this.that.up_list.push(data.data)
|
|
|
// 滚动到最新消息
|
|
|
setTimeout(() => {
|
|
|
this.that.scrollToId = 'scroll' + data.data.id
|
|
|
}, 100)
|
|
|
}
|
|
|
break;
|
|
|
// 其他页
|
|
|
case 3:
|
|
|
break;
|
|
|
// 未知
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
export default chat |