feat: 完成情绪博物馆项目重构和功能增强 - 新增日记评论和帖子功能 - 重构前端架构,优化用户体验 - 完善WebSocket通信机制 - 更新项目文档和部署配置

This commit is contained in:
2025-07-27 10:05:59 +08:00
parent 6903ac1c0d
commit cc886cd4d5
126 changed files with 21179 additions and 15734 deletions
+176
View File
@@ -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