From a55bf916c22de25db6305d5e43e4d000a63e3c85 Mon Sep 17 00:00:00 2001 From: QDKF Date: Fri, 26 Sep 2025 20:33:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AD=A6=E5=91=98=E7=AB=AF=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E9=A1=B5=E9=9D=A2,=20=E6=8E=A5=E5=85=A5=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/profile/default-avatar.png | Bin 0 -> 4647 bytes src/api/modules/message.ts | 54 + src/components/InstantMessage.vue | 2755 ++++++++++++++--- src/views/Profile.vue | 1264 ++++++-- .../components/NotificationMessages.vue | 71 +- 5 files changed, 3508 insertions(+), 636 deletions(-) create mode 100644 public/images/profile/default-avatar.png diff --git a/public/images/profile/default-avatar.png b/public/images/profile/default-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff2e4836693e8c8c34543cb110f204497fa39c0 GIT binary patch literal 4647 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 literal 0 HcmV?d00001 diff --git a/src/api/modules/message.ts b/src/api/modules/message.ts index 76e1a5a..df8bdb0 100644 --- a/src/api/modules/message.ts +++ b/src/api/modules/message.ts @@ -451,6 +451,60 @@ class MessageApi { } }) } + + /** + * 获取我的会话列表 + * @returns Promise> + */ + async getMyChats(): Promise> { + return request({ + url: '/aiol/aiolChat/my_chats', + method: 'GET' + }) + } + + /** + * 查询会话消息 + * @param chatId 会话ID + * @returns Promise> + */ + async getChatMessages(chatId: string): Promise> { + return request({ + url: `/aiol/aiolChat/${chatId}/messages`, + method: 'GET' + }) + } + + /** + * 发送消息 + * @param data 消息数据 + * @returns Promise> + */ + async sendMessage(data: { + chat_id: string + content: string + message_type: string + file_url?: string + }): Promise> { + return request({ + url: '/aiol/aiolChatMessage/send', + method: 'POST', + data + }) + } + + /** + * 更新最后读取消息ID + * @param chatId 会话ID + * @param messageId 消息ID + * @returns Promise> + */ + async updateLastReadMessage(chatId: string, messageId: string): Promise> { + return request({ + url: `/aiol/aiolChat/${chatId}/update_last_read/${messageId}`, + method: 'POST' + }) + } } export default new MessageApi() \ No newline at end of file diff --git a/src/components/InstantMessage.vue b/src/components/InstantMessage.vue index bc55718..d6b43b0 100644 --- a/src/components/InstantMessage.vue +++ b/src/components/InstantMessage.vue @@ -5,27 +5,56 @@

全部消息

- +
-
-
- - -
-
-
{{ conversation.name }}
-
{{ conversation.lastMessage }}
-
-
-
{{ conversation.lastTime }}
-
+ +
+
正在加载对话列表...
+
+ + +
+
{{ conversationsError }}
+ +
+ + +
+
+
+ +
+
+
+ {{ conversation.name }} + + ({{ conversation.memberCount }}人) + + + + + + + + +
+
{{ conversation.lastMessage }}
+
+
+
+
+ + +
+
暂无对话
+
@@ -35,50 +64,207 @@ 选择对话

选择一个对话开始聊天

- +
{{ selectedConversation.name }}
+
+ +
-
-
-
- -
-
-
-
{{ message.content }}
-
- 图片 -
-
- 文件 - {{ message.fileName }} +
+
+
+ +
+
+ {{ message.time }} +
+
+ + +
+
+ +
+
+ +
+ {{ getSenderName(message) }} + 讲师 +
+
+
{{ message.content }}
+
+ 图片 +
+
+ 文件 + {{ message.fileName }} +
+
+
+
+
-
{{ message.time }}
-
- 我 +
+ + +
+
+ +
+ +
+
+ + + + +
+
+
+
+
+ + +
+ +
+
+
+ +
+
+
{{ member.realname }}
+
+
+
+ + +
+
+ + + +
+
未找到相关成员
+
请尝试其他关键词
+
+ + +
+ 查看更多 + + + +
+
+ + +
+
+ 班级名称 + {{ groupInfo.name || '暂无' }} +
+
+ 班级人数 + {{ groupInfo.memberCount }}人 +
+
+ + +
+
+ 消息免打扰 +
+ + +
+
+
+ + +
+ + +
+
+ + +
+ + + + +
+
+ 消息免打扰 +
+ + +
+
+
+ + +
+ +
+
-
- + +
+
+ + + + + 群聊已禁言,只有管理员、讲师、群主可以发言 +
+
+ + +
+
{{ messageInput.length }}/500 -
@@ -102,11 +288,121 @@
+ + + + + +
diff --git a/src/views/Profile.vue b/src/views/Profile.vue index 423ac5f..ef4536e 100644 --- a/src/views/Profile.vue +++ b/src/views/Profile.vue @@ -233,7 +233,7 @@ fontSize: '14px' }"> {{ detailAssignment.status === '未完成' || detailAssignment.status === '待提交' ? '未完成' : - (detailAssignment.status === '已完成' ? '已完成' : '541人已完成') }} + (detailAssignment.status === '已完成' ? '已完成' : '541人已完成') }}
@@ -313,7 +313,7 @@ fontSize: '14px' }"> {{ draftAssignment.status === '未完成' || draftAssignment.status === '待提交' ? '未完成' : - (draftAssignment.status === '已完成' ? '已完成' : '541人已完成') }} + (draftAssignment.status === '已完成' ? '已完成' : '541人已完成') }}
@@ -663,7 +663,7 @@
{{ activity.status === 'ongoing' ? '进行中' : '已结束' - }} + }}
@@ -722,31 +722,32 @@ 即时消息 - 2 + {{ instantMessageCount }} 评论和@ - 3 + {{ commentMessageCount }} 点赞 - 5 + {{ likeMessageCount }} 系统消息 + {{ systemMessageCount }}
- + 全部已读 - 全部已读 + {{ markingAllAsRead ? '标记中...' : '全部已读' }} - + 按时间 - 按时间 + {{ getSortText() }}
@@ -759,108 +760,181 @@
-
- -
+
+ +
+
正在加载评论和@消息...
+
- -
- -
- -