feat: 完成情绪博物馆项目重构和功能增强 - 新增日记评论和帖子功能 - 重构前端架构,优化用户体验 - 完善WebSocket通信机制 - 更新项目文档和部署配置
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
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
|
||||
Reference in New Issue
Block a user