158 lines
4.0 KiB
JavaScript
158 lines
4.0 KiB
JavaScript
/**
|
||
* 聊天接口模块
|
||
* Requirements: 7.1, 7.2, 7.3
|
||
*/
|
||
|
||
import { get, post } from './request'
|
||
import config from '../config/index'
|
||
import { getToken } from '../utils/storage'
|
||
|
||
/**
|
||
* 获取会话列表
|
||
*
|
||
* @returns {Promise<Object>} 会话列表
|
||
*/
|
||
export async function getSessions() {
|
||
const response = await get('/chat/sessions')
|
||
// 统一返回格式
|
||
if (response && response.code === 0) {
|
||
return {
|
||
success: true,
|
||
data: Array.isArray(response.data) ? response.data : (response.data?.list || [])
|
||
}
|
||
}
|
||
return { success: false, data: [] }
|
||
}
|
||
|
||
/**
|
||
* 获取消息列表
|
||
* WHEN a user opens chat page, THE XiangYi_MiniApp SHALL call endpoint and display message history
|
||
* Requirements: 7.1
|
||
*
|
||
* @param {number} sessionId - 会话ID
|
||
* @param {number} [pageIndex=1] - 页码
|
||
* @param {number} [pageSize=20] - 每页数量
|
||
* @returns {Promise<Object>} 消息列表
|
||
*/
|
||
export async function getMessages(sessionId, pageIndex = 1, pageSize = 20) {
|
||
const response = await get('/chat/messages', { sessionId, pageIndex, pageSize })
|
||
return response
|
||
}
|
||
|
||
/**
|
||
* 发送消息
|
||
* WHEN a user sends a text message, THE XiangYi_MiniApp SHALL call endpoint
|
||
* Requirements: 7.2
|
||
*
|
||
* @param {Object} data - 消息数据
|
||
* @param {number} data.sessionId - 会话ID
|
||
* @param {number} data.receiverId - 接收者ID
|
||
* @param {number} data.messageType - 消息类型:1文本 2语音 3图片
|
||
* @param {string} data.content - 消息内容
|
||
* @returns {Promise<Object>} 发送结果
|
||
*/
|
||
export async function sendMessage(data) {
|
||
const response = await post('/chat/send', data)
|
||
return response
|
||
}
|
||
|
||
/**
|
||
* 请求交换微信
|
||
* WHEN a user clicks "交换微信" button, THE XiangYi_MiniApp SHALL call endpoint
|
||
* Requirements: 7.3
|
||
*
|
||
* @param {number} sessionId - 会话ID
|
||
* @param {number} receiverId - 接收者ID
|
||
* @returns {Promise<Object>} 交换请求结果
|
||
*/
|
||
export async function exchangeWeChat(sessionId, receiverId) {
|
||
const response = await post('/chat/exchangeWeChat', { sessionId, receiverId })
|
||
return response
|
||
}
|
||
|
||
/**
|
||
* 请求交换照片
|
||
*
|
||
* @param {number} sessionId - 会话ID
|
||
* @param {number} receiverId - 接收者ID
|
||
* @returns {Promise<Object>} 交换请求结果
|
||
*/
|
||
export async function exchangePhoto(sessionId, receiverId) {
|
||
const response = await post('/chat/exchangePhoto', { sessionId, receiverId })
|
||
return response
|
||
}
|
||
|
||
/**
|
||
* 响应交换请求
|
||
*
|
||
* @param {number} requestMessageId - 请求消息ID
|
||
* @param {boolean} accept - 是否接受
|
||
* @returns {Promise<Object>} 响应结果
|
||
*/
|
||
export async function respondExchange(requestMessageId, accept) {
|
||
const response = await post('/chat/respondExchange', { requestMessageId, accept })
|
||
return response
|
||
}
|
||
|
||
/**
|
||
* 获取未读消息数
|
||
*
|
||
* @returns {Promise<Object>} 未读消息数
|
||
*/
|
||
export async function getUnreadCount() {
|
||
const response = await get('/chat/unreadCount')
|
||
return response
|
||
}
|
||
|
||
/**
|
||
* 上传语音文件
|
||
*
|
||
* @param {string} filePath - 临时文件路径
|
||
* @returns {Promise<Object>} 上传结果,包含 voiceUrl
|
||
*/
|
||
export async function uploadVoice(filePath) {
|
||
return new Promise((resolve, reject) => {
|
||
// 简化 URL 拼接
|
||
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,
|
||
exchangeWeChat,
|
||
exchangePhoto,
|
||
respondExchange,
|
||
getUnreadCount,
|
||
uploadVoice
|
||
}
|