From 431a0bfb93612cbbdd0b8b2c61b12c2e06f5c1e1 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 28 Apr 2026 20:13:01 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(im):=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=20side=20=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/im/friend/index.ts | 6 +- src/router/modules/remaining.ts | 6 +- .../conversation/ConversationGroupSide.vue | 690 +++++++++++++++--- .../conversation/ConversationPrivateSide.vue | 280 ++++++- .../components/input/MentionPicker.vue | 8 +- .../{MessagePage.vue => index.vue} | 0 6 files changed, 830 insertions(+), 160 deletions(-) rename src/views/im/home/pages/conversation/{MessagePage.vue => index.vue} (100%) diff --git a/src/api/im/friend/index.ts b/src/api/im/friend/index.ts index 8b3137381..e0730485b 100644 --- a/src/api/im/friend/index.ts +++ b/src/api/im/friend/index.ts @@ -5,6 +5,7 @@ export interface ImFriendRespVO { id: number // 关系记录编号 friendUserId: number // 好友的用户编号 muted?: boolean // 是否免打扰 + displayName?: string // 好友展示备注(仅自己可见) status?: number // 好友状态(0=正常,1=已删除) addTime?: string // 添加好友时间 deleteTime?: string // 删除好友时间 @@ -16,7 +17,8 @@ export interface ImFriendRespVO { // IM 好友更新 Request VO export interface ImFriendUpdateReqVO { friendUserId: number // 好友的用户编号 - muted: boolean // 是否免打扰 + muted?: boolean // 是否免打扰 + displayName?: string // 好友展示备注 } // 获得当前登录用户的好友列表 @@ -39,7 +41,7 @@ export const deleteFriend = (friendUserId: number | string) => { return request.delete({ url: '/im/friend/delete', params: { friendUserId } }) } -// 更新好友信息(当前仅免打扰) +// 更新好友信息 export const updateFriend = (data: ImFriendUpdateReqVO) => { return request.put({ url: '/im/friend/update', data }) } diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index d0d0f5474..2b4b06986 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -763,19 +763,19 @@ const remainingRouter: AppRouteRecordRaw[] = [ children: [ { path: 'conversation', - component: () => import('@/views/im/home/pages/conversation/MessagePage.vue'), + component: () => import('@/views/im/home/pages/conversation/index.vue'), name: 'ImHomeConversation', meta: { hidden: true, title: '消息' } }, { path: 'friend', - component: () => import('@/views/im/home/pages/friend/FriendPage.vue'), + component: () => import('@/views/im/home/pages/friend/index.vue'), name: 'ImHomeFriend', meta: { hidden: true, title: '好友' } }, { path: 'group', - component: () => import('@/views/im/home/pages/group/GroupPage.vue'), + component: () => import('@/views/im/home/pages/group/index.vue'), name: 'ImHomeGroup', meta: { hidden: true, title: '群聊' } } diff --git a/src/views/im/home/pages/conversation/components/conversation/ConversationGroupSide.vue b/src/views/im/home/pages/conversation/components/conversation/ConversationGroupSide.vue index 8c3726402..0a47396b5 100644 --- a/src/views/im/home/pages/conversation/components/conversation/ConversationGroupSide.vue +++ b/src/views/im/home/pages/conversation/components/conversation/ConversationGroupSide.vue @@ -1,94 +1,276 @@ + + + diff --git a/src/views/im/home/pages/conversation/components/conversation/ConversationPrivateSide.vue b/src/views/im/home/pages/conversation/components/conversation/ConversationPrivateSide.vue index 031478cc2..4dab279c7 100644 --- a/src/views/im/home/pages/conversation/components/conversation/ConversationPrivateSide.vue +++ b/src/views/im/home/pages/conversation/components/conversation/ConversationPrivateSide.vue @@ -1,41 +1,107 @@ + + + diff --git a/src/views/im/home/pages/conversation/components/input/MentionPicker.vue b/src/views/im/home/pages/conversation/components/input/MentionPicker.vue index 82c21e965..29b8350fe 100644 --- a/src/views/im/home/pages/conversation/components/input/MentionPicker.vue +++ b/src/views/im/home/pages/conversation/components/input/MentionPicker.vue @@ -114,7 +114,13 @@ const allItem = computed(() => { if (!IM_AT_ALL_NICKNAME.startsWith(props.searchText)) { return null } - return { userId: IM_AT_ALL_USER_ID, showNickName: IM_AT_ALL_NICKNAME } + // @所有人 是个伪成员,nickname 给 IM_AT_ALL_NICKNAME 让头像 :name 行为对齐普通成员 + return { + userId: IM_AT_ALL_USER_ID, + // TODO @AI:改成 displayName 会更好 + showNickName: IM_AT_ALL_NICKNAME, + nickname: IM_AT_ALL_NICKNAME + } }) /** 真成员:过滤自己 / 退群 / 不匹配关键字;不截断数量,浮层 max-height + el-scrollbar 撑滚动 */ diff --git a/src/views/im/home/pages/conversation/MessagePage.vue b/src/views/im/home/pages/conversation/index.vue similarity index 100% rename from src/views/im/home/pages/conversation/MessagePage.vue rename to src/views/im/home/pages/conversation/index.vue