diff --git a/src/api/ai/chat/message/index.ts b/src/api/ai/chat/message/index.ts
index 023333665..193e87b79 100644
--- a/src/api/ai/chat/message/index.ts
+++ b/src/api/ai/chat/message/index.ts
@@ -14,6 +14,7 @@ export interface ChatMessageVO {
modelId: number // 模型编号
content: string // 聊天内容
reasoningContent?: string // 推理内容
+ attachmentUrls?: string[] // 附件 URL 数组
tokens: number // 消耗 Token 数量
segmentIds?: number[] // 段落编号
segments?: {
@@ -45,7 +46,8 @@ export const ChatMessageApi = {
enableContext: boolean,
onMessage,
onError,
- onClose
+ onClose,
+ attachmentUrls?: string[]
) => {
const token = getAccessToken()
return fetchEventSource(`${config.base_url}/ai/chat/message/send-stream`, {
@@ -58,7 +60,8 @@ export const ChatMessageApi = {
body: JSON.stringify({
conversationId,
content,
- useContext: enableContext
+ useContext: enableContext,
+ attachmentUrls: attachmentUrls || []
}),
onmessage: onMessage,
onerror: onError,
diff --git a/src/utils/file.ts b/src/utils/file.ts
new file mode 100644
index 000000000..c8bccbd30
--- /dev/null
+++ b/src/utils/file.ts
@@ -0,0 +1,19 @@
+/** 从 URL 中提取文件名 */
+export const getFileNameFromUrl = (url: string): string => {
+ try {
+ const urlObj = new URL(url)
+ const pathname = urlObj.pathname
+ const fileName = pathname.split('/').pop() || 'unknown'
+ return decodeURIComponent(fileName)
+ } catch {
+ // 如果 URL 解析失败,尝试从字符串中提取
+ const parts = url.split('/')
+ return parts[parts.length - 1] || 'unknown'
+ }
+}
+
+/** 判断是否为图片 */
+export const isImage = (filename: string): boolean => {
+ const ext = filename.split('.').pop()?.toLowerCase() || ''
+ return ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'].includes(ext)
+}
diff --git a/src/utils/index.ts b/src/utils/index.ts
index f0b4faaef..0bcedb438 100644
--- a/src/utils/index.ts
+++ b/src/utils/index.ts
@@ -529,7 +529,6 @@ export function jsonParse(str: string) {
* @param start 开始位置
* @param end 结束位置
*/
-
export const subString = (str: string, start: number, end: number) => {
if (str.length > end) {
return str.slice(start, end)
diff --git a/src/views/ai/chat/index/components/message/MessageFiles.vue b/src/views/ai/chat/index/components/message/MessageFiles.vue
new file mode 100644
index 000000000..9362c994b
--- /dev/null
+++ b/src/views/ai/chat/index/components/message/MessageFiles.vue
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+
diff --git a/src/views/ai/chat/index/components/message/MessageList.vue b/src/views/ai/chat/index/components/message/MessageList.vue
index 5efd39c5f..12ce67101 100644
--- a/src/views/ai/chat/index/components/message/MessageList.vue
+++ b/src/views/ai/chat/index/components/message/MessageList.vue
@@ -22,6 +22,7 @@
class="text-[var(--el-text-color-primary)] text-[0.95rem]"
:content="item.content"
/>
+