/** * 聊天接口模块 */ 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 }