177 lines
5.2 KiB
TypeScript
177 lines
5.2 KiB
TypeScript
import { http } from '@/utils/request'
|
|
import type { ChatMessage } from '@/types'
|
|
|
|
// 消息相关类型定义
|
|
export interface MessageResponse {
|
|
id: string
|
|
conversationId: string
|
|
content: string
|
|
type: string
|
|
sender: string
|
|
isRead: number
|
|
aiReply?: string
|
|
emotionAnalysis?: string
|
|
createTime: string
|
|
updateTime: string
|
|
}
|
|
|
|
export interface PageResult<T> {
|
|
records: T[]
|
|
total: number
|
|
size: number
|
|
current: number
|
|
pages: number
|
|
}
|
|
|
|
export interface MessagePageRequest {
|
|
current: number
|
|
size: number
|
|
conversationId?: string
|
|
type?: string
|
|
sender?: string
|
|
startTime?: string
|
|
endTime?: string
|
|
}
|
|
|
|
export interface MessageSearchRequest {
|
|
keyword: string
|
|
limit: number
|
|
conversationId?: string
|
|
type?: string
|
|
sender?: string
|
|
startTime?: string
|
|
endTime?: string
|
|
}
|
|
|
|
export interface MessageRecentRequest {
|
|
limit: number
|
|
conversationId?: string
|
|
type?: string
|
|
sender?: string
|
|
}
|
|
|
|
/**
|
|
* 消息API服务 - 与web项目保持一致的接口
|
|
*/
|
|
export const messageApi = {
|
|
// 获取用户消息分页
|
|
getUserMessages: async (current: number = 1, size: number = 20) => {
|
|
console.log('📨 调用getUserMessages API:', { current, size })
|
|
const response = await http.get(`/message/user/page`, { params: { current, size } })
|
|
console.log('📨 getUserMessages API响应:', response)
|
|
return response
|
|
},
|
|
|
|
// 搜索用户消息
|
|
searchUserMessages: async (keyword: string, limit: number = 50) => {
|
|
console.log('🔍 调用searchUserMessages API:', { keyword, limit })
|
|
const response = await http.post(`/message/user/search`, { keyword, limit })
|
|
console.log('🔍 searchUserMessages API响应:', response)
|
|
return response
|
|
},
|
|
|
|
// 获取用户最近的聊天记录 - 修复:使用POST请求匹配后端接口
|
|
getRecentMessages: async (limit: number = 10) => {
|
|
console.log('📝 调用getRecentMessages API:', { limit })
|
|
const response = await http.post(`/message/user/recent`, { limit })
|
|
console.log('📝 getRecentMessages API响应:', response)
|
|
return response
|
|
},
|
|
|
|
// 获取消息详情
|
|
getMessageById: async (id: string) => {
|
|
console.log('📄 调用getMessageById API:', { id })
|
|
const response = await http.get(`/message/${id}`)
|
|
console.log('📄 getMessageById API响应:', response)
|
|
return response
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 消息服务类 - 提供高级封装
|
|
*/
|
|
class MessageService {
|
|
/**
|
|
* 获取用户消息分页
|
|
*/
|
|
static async getUserMessages(current: number = 1, size: number = 20): Promise<PageResult<MessageResponse>> {
|
|
const response = await messageApi.getUserMessages(current, size)
|
|
return response.data || response
|
|
}
|
|
|
|
/**
|
|
* 搜索用户消息
|
|
*/
|
|
static async searchUserMessages(request: MessageSearchRequest): Promise<MessageResponse[]> {
|
|
const response = await messageApi.searchUserMessages(request.keyword, request.limit)
|
|
return response.data || response
|
|
}
|
|
|
|
/**
|
|
* 获取用户最近的聊天记录
|
|
*/
|
|
static async getRecentMessages(request: MessageRecentRequest): Promise<MessageResponse[]> {
|
|
console.log('📝 MessageService.getRecentMessages 调用:', request)
|
|
const response = await messageApi.getRecentMessages(request.limit)
|
|
console.log('📝 MessageService.getRecentMessages 响应:', response)
|
|
|
|
// 处理响应数据结构
|
|
const messageList = response.data || response || []
|
|
return Array.isArray(messageList) ? messageList : []
|
|
}
|
|
|
|
/**
|
|
* 根据ID获取消息详情
|
|
*/
|
|
static async getMessageById(id: string): Promise<MessageResponse> {
|
|
const response = await messageApi.getMessageById(id)
|
|
return response.data || response
|
|
}
|
|
|
|
/**
|
|
* 转换消息格式为聊天消息格式 - 完整匹配后端字段
|
|
*/
|
|
static convertToChatMessage(msg: MessageResponse): ChatMessage {
|
|
console.log('🔄 转换消息格式:', msg)
|
|
|
|
// 处理时间格式 - 后端返回 "2025-07-26 22:09:10" 格式
|
|
// 直接保持原始字符串格式,让前端UI层处理
|
|
let timestamp = msg.createTime
|
|
console.log('🕐 保持原始时间格式:', msg.createTime)
|
|
|
|
const chatMessage: ChatMessage = {
|
|
id: msg.id,
|
|
content: msg.content,
|
|
type: msg.sender === 'user' ? 'user' : (msg.sender === 'ai' ? 'ai' : 'system'),
|
|
timestamp: timestamp,
|
|
conversationId: msg.conversationId,
|
|
sessionId: msg.conversationId, // 别名,保持兼容性
|
|
status: 'sent',
|
|
sender: msg.sender as 'user' | 'ai' | 'system',
|
|
isRead: msg.isRead,
|
|
role: msg.sender === 'user' ? 'user' : 'assistant' // 用于UI显示
|
|
}
|
|
|
|
console.log('✅ 转换后的消息详情:', {
|
|
原始sender: msg.sender,
|
|
转换后role: chatMessage.role,
|
|
转换后type: chatMessage.type,
|
|
时间: msg.createTime + ' -> ' + timestamp
|
|
})
|
|
console.log('✅ 转换后的消息:', chatMessage)
|
|
return chatMessage
|
|
}
|
|
|
|
/**
|
|
* 批量转换消息格式
|
|
*/
|
|
static convertToChatMessages(messages: MessageResponse[]): ChatMessage[] {
|
|
console.log('🔄 批量转换消息格式,数量:', messages.length)
|
|
const chatMessages = messages.map(msg => this.convertToChatMessage(msg))
|
|
console.log('✅ 批量转换完成,结果:', chatMessages)
|
|
return chatMessages
|
|
}
|
|
}
|
|
|
|
export default MessageService
|