108 lines
2.5 KiB
JavaScript
108 lines
2.5 KiB
JavaScript
/**
|
|
* 聊天接口模块
|
|
*/
|
|
|
|
import { get, post } from './request'
|
|
import config from '../config/index'
|
|
import { getToken } from '../utils/storage'
|
|
|
|
/**
|
|
* 获取会话列表
|
|
*/
|
|
export async function getSessions() {
|
|
const response = await get('/chat/sessions')
|
|
if (response && response.code === 0) {
|
|
const list = Array.isArray(response.data) ? response.data : (response.data?.list || [])
|
|
const mappedList = list.map(item => ({
|
|
sessionId: item.sessionId,
|
|
targetUserId: item.otherUserId,
|
|
targetNickname: item.otherNickname,
|
|
targetAvatar: item.otherAvatar,
|
|
lastMessage: item.lastMessageContent,
|
|
lastMessageType: item.lastMessageType,
|
|
lastMessageTime: item.lastMessageTime,
|
|
unreadCount: item.unreadCount
|
|
}))
|
|
return { success: true, data: mappedList }
|
|
}
|
|
return { success: false, data: [] }
|
|
}
|
|
|
|
/**
|
|
* 获取消息列表
|
|
*/
|
|
export async function getMessages(sessionId, pageIndex = 1, pageSize = 20) {
|
|
const response = await get('/chat/messages', { sessionId, pageIndex, pageSize })
|
|
return response
|
|
}
|
|
|
|
/**
|
|
* 发送消息
|
|
*/
|
|
export async function sendMessage(data) {
|
|
const response = await post('/chat/send', data)
|
|
return response
|
|
}
|
|
|
|
/**
|
|
* 获取未读消息数
|
|
*/
|
|
export async function getUnreadCount() {
|
|
const response = await get('/chat/unreadCount')
|
|
return response
|
|
}
|
|
|
|
/**
|
|
* 获取或创建会话
|
|
*/
|
|
export async function getOrCreateSession(targetUserId) {
|
|
const response = await get('/chat/session', { targetUserId })
|
|
return response
|
|
}
|
|
|
|
/**
|
|
* 上传语音文件
|
|
*/
|
|
export async function uploadVoice(filePath) {
|
|
return new Promise((resolve, reject) => {
|
|
const uploadUrl = `${config.API_BASE_URL}/upload/voice`
|
|
|
|
uni.uploadFile({
|
|
url: uploadUrl,
|
|
filePath: filePath,
|
|
name: 'file',
|
|
header: {
|
|
'Authorization': `Bearer ${getToken()}`
|
|
},
|
|
success: (res) => {
|
|
if (res.statusCode === 200) {
|
|
try {
|
|
const data = JSON.parse(res.data)
|
|
if (data.code === 0) {
|
|
resolve(data)
|
|
} else {
|
|
reject(new Error(data.message || '上传失败'))
|
|
}
|
|
} catch (e) {
|
|
reject(new Error('解析响应失败'))
|
|
}
|
|
} else {
|
|
reject(new Error(`上传失败: ${res.statusCode}`))
|
|
}
|
|
},
|
|
fail: (err) => {
|
|
reject(new Error(err.errMsg || '网络错误'))
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
export default {
|
|
getSessions,
|
|
getMessages,
|
|
sendMessage,
|
|
getUnreadCount,
|
|
getOrCreateSession,
|
|
uploadVoice
|
|
}
|