diff --git a/src/renderer/api/ConversationApi.ts b/src/renderer/api/ConversationApi.ts index 4eeca84..fdd09c2 100644 --- a/src/renderer/api/ConversationApi.ts +++ b/src/renderer/api/ConversationApi.ts @@ -1,14 +1,64 @@ /* eslint-disable */ // @ts-ignore -import { getRequest, ResponseModel } from '@utils/request' +import { getRequest, postRequest, ResponseModel } from '@utils/request' +/** 创建会话 创建会话创建会话 GET /agent/assistant/createConversation */ export interface CreateConversationResponse { conversationId: string } -/** 创建会话 创建会话创建会话 GET /agent/assistant/createConversation */ - export const createConversation = async () => { const res: ResponseModel = await getRequest('/agent/assistant/createConversation') return res.data as CreateConversationResponse +} + +/** 获取会话列表 获取会话列表获取会话列表 POST /agent/assistant/conversationList */ +export interface ConversationListRequest { + pageSize: number + pageNum: number + conversationId?: string +} + +export interface ConversationListResponse { + records: Array + total: number + size: number + current: number + optimizeCountSql: boolean + searchCount: boolean +} + +export interface ConversationListRecords { + conversationTitle: string + conversationId: string +} + +export interface ConversationMessageListResponse { + records: Array + total: number + size: number + current: number + optimizeCountSql: boolean + searchCount: boolean +} + +export interface ConversationMessageListRecords { + messageId: string + conversationId: string + messageType: string + messageContent: string + messageDisplay: string + messageSenderId: string + messageSenderRole: string + messageTime: string +} + +export const getConversationList = async (params: ConversationListRequest) => { + const res: ResponseModel = await postRequest('/agent/assistant/conversationList', params) + return res.data as ConversationListResponse +} + +export const conversationMessageList = async (params: ConversationListRequest) => { + const res: ResponseModel = await postRequest('/agent/assistant/conversationMessageList', params) + return res.data as ConversationMessageListResponse } \ No newline at end of file diff --git a/src/renderer/utils/request.ts b/src/renderer/utils/request.ts index 24d7588..43799b4 100644 --- a/src/renderer/utils/request.ts +++ b/src/renderer/utils/request.ts @@ -87,7 +87,7 @@ instance.interceptors.request.use( // 添加响应拦截器 instance.interceptors.response.use( (res) => { - console.log("🚀 ~ response:", res.data) + console.log(`🚀 ~ response: \n url:${res.config.url} \n params:${JSON.stringify(res.config.params)} \n data:\n ${JSON.stringify(res.data)}`) // 未设置状态码则默认成功状态 const code = res.data.code || 200 // 获取错误信息 diff --git a/src/renderer/views/home/ChatBox.vue b/src/renderer/views/home/ChatBox.vue index a77c6de..43c9a7a 100644 --- a/src/renderer/views/home/ChatBox.vue +++ b/src/renderer/views/home/ChatBox.vue @@ -88,12 +88,13 @@ import { Session } from '../../utils/storage'; import userAvatar from '@assets/images/login/user_icon.png'; import aiAvatar from '@assets/images/login/blue_logo.png'; -import { createConversation } from '../../api/ConversationApi'; +import { createConversation, conversationMessageList } from '../../api/ConversationApi'; import { ElMessage, ElLoading } from 'element-plus' // 支持外部通过 prop 控制是否为引导页 const props = defineProps({ - guide: { type: Boolean, default: true } + guide: { type: Boolean, default: true }, + conversationId: { type: String, default: '' } }); const emit = defineEmits(['update:guide']); @@ -127,7 +128,16 @@ const isSendingMessage = ref(false); /// agentId 首页接口中获取 1953462165250859010 const agentId = ref("1953462165250859010"); /// 会话ID 历史数据接口中获取 -const conversationId = ref(""); +const conversationId = ref(props.conversationId); + +// 监听 conversationId prop 变化,只有当有值时(选择历史消息)才请求消息列表 +watch(() => props.conversationId, (newId) => { + if (newId) { + conversationId.value = newId; + loadConversationMessages(newId); + } +}); + // 会话进行中标志 const isSessionActive = ref(false); /// 指令通用消息类型 @@ -285,9 +295,35 @@ const checkToken = async () => { }; // 调用接口创建新会话 -const createConversationRequest = async () => { +const createConversationRequest = async (): Promise => { const res = await createConversation(); - conversationId.value = res.conversationId; + if (res && res.conversationId) { + conversationId.value = res.conversationId; + console.log("创建新会话,ID:", conversationId.value); + return res.conversationId; + } else { + console.log("创建会话失败,接口返回异常"); + return null; + } +}; + +// 加载历史会话消息 +const loadConversationMessages = async (convId: string) => { + try { + const res = await conversationMessageList({ conversationId: convId, pageSize: 50, pageNum: 1 }); + // 将消息转换为 ChatMessage 格式 + chatMsgList.value = res.records.map((msg: any) => ({ + messageId: msg.messageId, + messageRole: msg.messageSenderRole === 'user' ? MessageRole.ME : MessageRole.AI, + messageContent: msg.messageContent, + finished: true, // 历史消息已完成 + })); + console.log("加载历史消息:", chatMsgList.value); + // 加载历史消息后滚动到底部 + nextTick(() => scrollToBottom()); + } catch (error) { + console.error("加载历史消息失败:", error); + } }; /// =============对话↓================ diff --git a/src/renderer/views/home/ChatHistory.vue b/src/renderer/views/home/ChatHistory.vue index 6033c94..716d68d 100644 --- a/src/renderer/views/home/ChatHistory.vue +++ b/src/renderer/views/home/ChatHistory.vue @@ -5,130 +5,79 @@
YINIAN
-
+
新对话
-
-
- {{ group.title }} - - -
- -
    -
  • +
  • - -
    -
    {{ item.title }}
    -
    - -
  • -
-
+ +
+
{{ item.conversationId }}
+
+ + +
diff --git a/src/renderer/views/home/index.vue b/src/renderer/views/home/index.vue index 684dacb..3b41930 100644 --- a/src/renderer/views/home/index.vue +++ b/src/renderer/views/home/index.vue @@ -1,9 +1,9 @@