From aff9233ce27f38b7e3adfeff68745c7a3b1f5306 Mon Sep 17 00:00:00 2001 From: zoujing Date: Tue, 3 Feb 2026 14:38:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=20=E5=AF=B9=E8=AF=9D=E7=9A=84=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/api/ConversationApi.ts | 14 +++++++++ src/renderer/utils/request.ts | 47 ++++++++++++++++++++++----- src/renderer/views/home/ChatBox.vue | 49 ++++++++++++++--------------- 3 files changed, 76 insertions(+), 34 deletions(-) create mode 100644 src/renderer/api/ConversationApi.ts diff --git a/src/renderer/api/ConversationApi.ts b/src/renderer/api/ConversationApi.ts new file mode 100644 index 0000000..4eeca84 --- /dev/null +++ b/src/renderer/api/ConversationApi.ts @@ -0,0 +1,14 @@ +/* eslint-disable */ +// @ts-ignore +import { getRequest, ResponseModel } from '@utils/request' + +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 +} \ No newline at end of file diff --git a/src/renderer/utils/request.ts b/src/renderer/utils/request.ts index 516358a..24d7588 100644 --- a/src/renderer/utils/request.ts +++ b/src/renderer/utils/request.ts @@ -1,7 +1,7 @@ import axios from 'axios' import cache from '@utils/cache' import errorCode from '@constant/errorCode' -import { ElNotification , ElMessageBox, ElMessage } from 'element-plus' +import { ElNotification, ElMessageBox, ElMessage } from 'element-plus' import { Session } from '@renderer/utils/storage' import { tansParams } from '@utils/tansParams' @@ -29,7 +29,7 @@ instance.interceptors.request.use( // 是否需要防止数据重复提交 const isRepeatSubmit = (config.headers || {}).repeatSubmit === false const token = Session.getToken(); - + if (token && !isToken) { config.headers['Authorization'] = `Bearer ${token}` // 让每个请求携带自定义token 请根据实际情况自行修改 } @@ -87,12 +87,13 @@ instance.interceptors.request.use( // 添加响应拦截器 instance.interceptors.response.use( (res) => { + console.log("🚀 ~ response:", res.data) // 未设置状态码则默认成功状态 const code = res.data.code || 200 // 获取错误信息 const msg = (errorCode as any)[code] || res.data.msg || errorCode['default'] // 二进制数据则直接返回 - if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { + if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { return res.data } if (code === 401) { @@ -103,10 +104,10 @@ instance.interceptors.response.use( // useUserStore().logOut().then(() => { // location.href = '/index' // }) - }).catch(() => { - isRelogin.show = false - }) - } + }).catch(() => { + isRelogin.show = false + }) + } return Promise.reject('无效的会话,或者会话已过期,请重新登录。') } else if (code === 500) { ElMessage({ message: msg, type: 'error' }) @@ -118,7 +119,7 @@ instance.interceptors.response.use( ElNotification.error({ title: msg }) return Promise.reject('error') } else { - return Promise.resolve(res.data) + return Promise.resolve(res.data) } }, (error) => { @@ -138,4 +139,34 @@ instance.interceptors.response.use( } ) +// 封装基于 request 的 POST 请求( +export const postRequest = (url: string, data?: any, options?: any): Promise => { + return instance.request({ + url, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data, + ...(options || {}), + }) as Promise +} + +// 封装基于 request 的 GET 请求 +export const getRequest = (url: string, params?: any, options?: any): Promise => { + return instance.request({ + url, + method: 'GET', + params, + ...(options || {}), + }) as Promise +} + export default instance + +/// 响应模型 +export interface ResponseModel { + code: number; + msg: string | null; + data: any | null; +}; \ No newline at end of file diff --git a/src/renderer/views/home/ChatBox.vue b/src/renderer/views/home/ChatBox.vue index 7ac862c..a77c6de 100644 --- a/src/renderer/views/home/ChatBox.vue +++ b/src/renderer/views/home/ChatBox.vue @@ -20,7 +20,7 @@ - + - - + + @@ -88,6 +88,8 @@ 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 { ElMessage, ElLoading } from 'element-plus' // 支持外部通过 prop 控制是否为引导页 const props = defineProps({ @@ -108,6 +110,7 @@ watch(isGuidePage, (v) => { if (v) { // 当切换到引导页时,重置/清理会话状态 resetConversation(); + createConversationRequest(); } }); @@ -122,7 +125,7 @@ const inputMessage = ref(""); const isSendingMessage = ref(false); /// agentId 首页接口中获取 1953462165250859010 -const agentId = ref("1"); +const agentId = ref("1953462165250859010"); /// 会话ID 历史数据接口中获取 const conversationId = ref(""); // 会话进行中标志 @@ -261,11 +264,12 @@ onMounted(() => { }); // token存在,初始化数据 -const initHandler = () => { +const initHandler = async () => { console.log("initHandler"); const token = getAccessToken(); if (!token) return; - initWebSocket(); + await createConversationRequest(); + await initWebSocket(); }; const getAccessToken = () => { @@ -280,6 +284,12 @@ const checkToken = async () => { } }; +// 调用接口创建新会话 +const createConversationRequest = async () => { + const res = await createConversation(); + conversationId.value = res.conversationId; +}; + /// =============对话↓================ // 初始化WebSocket const initWebSocket = async () => { @@ -475,10 +485,7 @@ const sendMessage = async (message: string, isInstruct: boolean = false) => { if (!isWsConnected()) { console.log("WebSocket未连接,尝试重新连接..."); // 显示加载提示 - // uni.showLoading({ - // title: "正在连接服务器...", - // }); - + const loadingInstance = ElLoading.service({ fullscreen: true, text: '正在连接服务器...' }); // 尝试重新初始化WebSocket连接 try { await initWebSocket(); @@ -487,31 +494,22 @@ const sendMessage = async (message: string, isInstruct: boolean = false) => { // 检查连接是否成功建立 if (!isWsConnected()) { - // uni.hideLoading(); - // uni.showToast({ - // title: "连接服务器失败,请稍后重试", - // icon: "none", - // }); + loadingInstance.close(); + ElMessage({ message: '连接服务器失败,请稍后重试', type: 'error' }) console.error("重新连接WebSocket后仍未连接成功"); return; } - // uni.hideLoading(); + loadingInstance.close(); } catch (error) { + loadingInstance.close(); console.error("重新连接WebSocket失败:", error); - // uni.hideLoading(); - // uni.showToast({ - // title: "连接服务器失败,请稍后重试", - // icon: "none", - // }); + ElMessage({ message: '连接服务器失败,请稍后重试', type: 'error' }) return; } } if (isSessionActive.value) { - // uni.showToast({ - // title: "请等待当前回复完成", - // icon: "none", - // }); + ElMessage({ message: '当前会话正在进行中,请等待回复完成', type: 'warning' }) console.warn("当前会话正在进行中,请等待回复完成"); return; } @@ -801,5 +799,4 @@ const resetConversation = () => { } }; -