diff --git a/src/utils/dict.ts b/src/utils/dict.ts index 7cb356818..c0cd1afda 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -333,6 +333,8 @@ export enum DICT_TYPE { IM_GROUP_MESSAGE_STATUS = 'im_group_message_status', // IM 群聊消息状态:0=正常 / 2=已撤回 IM_GROUP_MESSAGE_RECEIPT_STATUS = 'im_group_message_receipt_status', // IM 群消息回执状态 IM_FRIEND_STATUS = 'im_friend_status', // IM 好友状态 + IM_FRIEND_ADD_SOURCE = 'im_friend_add_source', // IM 好友添加来源 + IM_FRIEND_REQUEST_HANDLE_RESULT = 'im_friend_request_handle_result', // IM 好友申请处理结果 IM_GROUP_STATUS = 'im_group_status', // IM 群状态 IM_GROUP_MEMBER_ROLE = 'im_group_member_role' // IM 群成员角色 } diff --git a/src/views/im/home/components/ToolBar.vue b/src/views/im/home/components/ToolBar.vue index ee715d5b9..66d5b8b58 100644 --- a/src/views/im/home/components/ToolBar.vue +++ b/src/views/im/home/components/ToolBar.vue @@ -30,6 +30,14 @@ > + + + @@ -55,6 +63,7 @@ import { useRoute, useRouter } from 'vue-router' import Icon from '@/components/Icon/src/Icon.vue' import { useUserStore } from '@/store/modules/user' import { useConversationStore } from '../store/conversationStore' +import { useFriendStore } from '../store/friendStore' import UserAvatar from './user/UserAvatar.vue' defineOptions({ name: 'ImToolBar' }) @@ -63,15 +72,15 @@ const route = useRoute() const router = useRouter() const userStore = useUserStore() const conversationStore = useConversationStore() +const friendStore = useFriendStore() -/** 消息 Tab 的红点:所有非免打扰会话的未读总和 */ -const totalUnread = computed(() => conversationStore.getTotalUnread) +const totalUnread = computed(() => conversationStore.getTotalUnread) // 消息 Tab 的红点:所有非免打扰会话的未读总和 +const unhandledRequestCount = computed(() => friendStore.getUnhandledRequestCount) // 通讯录 Tab 的红点:未处理好友申请数(接收方=我) -/** 两个主 Tab;用路由 name 而非 path,避免前缀 / 嵌套调整后失效 */ const tabs = [ { name: 'ImHomeConversation', label: '消息', icon: 'ep:chat-round' }, { name: 'ImHomeContact', label: '通讯录', icon: 'mingcute:contacts-line' } -] +] // 两个主 Tab;用路由 name 而非 path,避免前缀 / 嵌套调整后失效 /** 当前路由是否命中 Tab:直接比对 route.name */ const isActive = (name: string) => route.name === name diff --git a/src/views/im/home/components/friend/FriendAddDialog.vue b/src/views/im/home/components/friend/FriendAddDialog.vue index 23a50b99e..8aa6c3256 100644 --- a/src/views/im/home/components/friend/FriendAddDialog.vue +++ b/src/views/im/home/components/friend/FriendAddDialog.vue @@ -136,6 +136,7 @@ import { useUserStore } from '@/store/modules/user' import UserAvatar from '../user/UserAvatar.vue' import { useFriendStore } from '../../store/friendStore' import { getCurrentUserId } from '../../../utils/storage' +import { ImFriendAddSource } from '../../../utils/constants' import { getGenderColor, getGenderIcon } from '../../../utils/user' import { getSimpleUserListByNickname, type UserVO } from '@/api/system/user' @@ -153,7 +154,7 @@ const props = withDefaults( }>(), { presetUser: null, - addSource: 1 + addSource: ImFriendAddSource.SEARCH } ) @@ -226,8 +227,7 @@ function buildPresetApplyContent(): string { return '' } // 群聊场景拼带群名的话术;其它场景默认「我是 YY」 - // TODO @AI:使用 addSource 的枚举; - const groupExtra = props.addSource === 2 ? props.addSourceExtra : '' + const groupExtra = props.addSource === ImFriendAddSource.GROUP ? props.addSourceExtra : '' return groupExtra ? `我是"${groupExtra}"的${myNickname}` : `我是${myNickname}` } diff --git a/src/views/im/home/components/group/GroupMember.vue b/src/views/im/home/components/group/GroupMember.vue index 363c48917..874786b2b 100644 --- a/src/views/im/home/components/group/GroupMember.vue +++ b/src/views/im/home/components/group/GroupMember.vue @@ -14,7 +14,7 @@ :url="member.avatar" :clickable="clickable" :id="member.userId" - :add-source="2" + :add-source="ImFriendAddSource.GROUP" :add-source-extra="groupName" />
-
import UserAvatar from '../user/UserAvatar.vue' +import { ImFriendAddSource } from '../../../utils/constants' import type { GroupMemberLite } from './GroupMember.vue' defineOptions({ name: 'ImGroupMemberGrid' }) diff --git a/src/views/im/home/components/user/UserAvatar.vue b/src/views/im/home/components/user/UserAvatar.vue index 4be0aed77..a08db53f8 100644 --- a/src/views/im/home/components/user/UserAvatar.vue +++ b/src/views/im/home/components/user/UserAvatar.vue @@ -45,6 +45,7 @@ import { computed } from 'vue' import { useImUiStore } from '../../store/uiStore' +import { ImFriendAddSource } from '../../../utils/constants' import type { User } from '../../types' defineOptions({ name: 'ImUserAvatar', inheritAttrs: false }) @@ -69,7 +70,7 @@ const props = withDefaults( clickable: true, previewable: false, previewZIndex: 2000, - addSource: 1 // @AI:是不是枚举下; + addSource: ImFriendAddSource.SEARCH } ) diff --git a/src/views/im/home/components/user/UserInfo.vue b/src/views/im/home/components/user/UserInfo.vue index 237b176e1..fd4125c62 100644 --- a/src/views/im/home/components/user/UserInfo.vue +++ b/src/views/im/home/components/user/UserInfo.vue @@ -295,7 +295,12 @@ function handleChat() { emit('chat', props.user) } -// TODO @AI:添加好友、删除好友,作为一个 ==== 栏目,这样好理解点; +/** 占位提示:语音 / 视频聊天能力尚未接入,先以"开发中"友好提示 */ +function handleComingSoon(featureName: string) { + message.info(`${featureName} 功能开发中`) +} + +// ==================== 添加好友 / 删除好友 ==================== // 加好友弹窗显隐 + 预填用户(点「加为好友」时把 props.user 传给 FriendAddDialog 跳过搜索) const addFriendVisible = ref(false) @@ -330,11 +335,6 @@ async function handleDeleteFriend() { message.success('已删除好友') emit('deleted', target) } - -/** 占位提示:语音 / 视频聊天能力尚未接入,先以"开发中"友好提示 */ -function handleComingSoon(featureName: string) { - message.info(`${featureName} 功能开发中`) -}