From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目

---
 src/api/ai/chat/message/index.ts |  104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 104 insertions(+), 0 deletions(-)

diff --git a/src/api/ai/chat/message/index.ts b/src/api/ai/chat/message/index.ts
new file mode 100644
index 0000000..19bc25b
--- /dev/null
+++ b/src/api/ai/chat/message/index.ts
@@ -0,0 +1,104 @@
+import request from '@/config/axios'
+import { fetchEventSource } from '@microsoft/fetch-event-source'
+import { getAccessToken } from '@/utils/auth'
+import { config } from '@/config/axios/config'
+
+// 鑱婂ぉVO
+export interface ChatMessageVO {
+  id: number // 缂栧彿
+  conversationId: number // 瀵硅瘽缂栧彿
+  type: string // 娑堟伅绫诲瀷
+  userId: string // 鐢ㄦ埛缂栧彿
+  roleId: string // 瑙掕壊缂栧彿
+  model: number // 妯″瀷鏍囧織
+  modelId: number // 妯″瀷缂栧彿
+  content: string // 鑱婂ぉ鍐呭
+  reasoningContent?: string // 鎺ㄧ悊鍐呭
+  attachmentUrls?: string[] // 闄勪欢 URL 鏁扮粍
+  tokens: number // 娑堣�� Token 鏁伴噺
+  segmentIds?: number[] // 娈佃惤缂栧彿
+  segments?: {
+    id: number // 娈佃惤缂栧彿
+    content: string // 娈佃惤鍐呭
+    documentId: number // 鏂囨。缂栧彿
+    documentName: string // 鏂囨。鍚嶇О
+  }[]
+  webSearchPages?: {
+    name: string // 鍚嶇О
+    icon: string // 鍥炬爣
+    title: string // 鏍囬
+    url: string // URL
+    snippet: string // 鍐呭鐨勭畝鐭弿杩�
+    summary: string // 鍐呭鐨勬枃鏈憳瑕�
+  }[]
+  createTime: Date // 鍒涘缓鏃堕棿
+  roleAvatar: string // 瑙掕壊澶村儚
+  userAvatar: string // 鐢ㄦ埛澶村儚
+}
+
+// AI chat 鑱婂ぉ
+export const ChatMessageApi = {
+  // 娑堟伅鍒楄〃
+  getChatMessageListByConversationId: async (conversationId: number | null) => {
+    return await request.get({
+      url: `/ai/chat/message/list-by-conversation-id?conversationId=${conversationId}`
+    })
+  },
+
+  // 鍙戦�� Stream 娑堟伅
+  // 涓轰粈涔堜笉鐢� axios 鍛紵鍥犱负瀹冧笉鏀寔 SSE 璋冪敤
+  sendChatMessageStream: async (
+    conversationId: number,
+    content: string,
+    ctrl,
+    enableContext: boolean,
+    enableWebSearch: boolean,
+    onMessage,
+    onError,
+    onClose,
+    attachmentUrls?: string[]
+  ) => {
+    const token = getAccessToken()
+    return fetchEventSource(`${config.base_url}/ai/chat/message/send-stream`, {
+      method: 'post',
+      headers: {
+        'Content-Type': 'application/json',
+        Authorization: `Bearer ${token}`
+      },
+      openWhenHidden: true,
+      body: JSON.stringify({
+        conversationId,
+        content,
+        useContext: enableContext,
+        useSearch: enableWebSearch,
+        attachmentUrls: attachmentUrls || []
+      }),
+      onmessage: onMessage,
+      onerror: onError,
+      onclose: onClose,
+      signal: ctrl.signal
+    })
+  },
+
+  // 鍒犻櫎娑堟伅
+  deleteChatMessage: async (id: string) => {
+    return await request.delete({ url: `/ai/chat/message/delete?id=${id}` })
+  },
+
+  // 鍒犻櫎鎸囧畾瀵硅瘽鐨勬秷鎭�
+  deleteByConversationId: async (conversationId: number) => {
+    return await request.delete({
+      url: `/ai/chat/message/delete-by-conversation-id?conversationId=${conversationId}`
+    })
+  },
+
+  // 鑾峰緱娑堟伅鍒嗛〉
+  getChatMessagePage: async (params: any) => {
+    return await request.get({ url: '/ai/chat/message/page', params })
+  },
+
+  // 绠$悊鍛樺垹闄ゆ秷鎭�
+  deleteChatMessageByAdmin: async (id: number) => {
+    return await request.delete({ url: `/ai/chat/message/delete-by-admin?id=${id}` })
+  }
+}

--
Gitblit v1.8.0