语音聊天
视频聊天
@@ -159,6 +151,7 @@ import { useMessage } from '@/hooks/web/useMessage'
import UserAvatar from './UserAvatar.vue'
import { getSimpleUser } from '@/api/system/user'
import { useFriendStore } from '../../store/friendStore'
+import { getGenderColor, getGenderIcon } from '../../../utils/user'
import type { User } from '../../types'
defineOptions({ name: 'ImUserInfo' })
@@ -208,29 +201,8 @@ const headerName = computed(() => props.displayName || full.value?.nickname || '
const deptText = computed(() => full.value?.deptName || '-')
-/** 性别图标:男 1 / 女 2,0 / null / undefined 一律不展示 */
-const genderIcon = computed(() => {
- // TODO @AI: 有没更好看的图标。
- const sex = full.value?.sex
- if (sex === 1) {
- return 'mdi:human-male'
- }
- if (sex === 2) {
- return 'mdi:human-female'
- }
- return ''
-})
-
-const genderColor = computed(() => {
- const sex = full.value?.sex
- if (sex === 1) {
- return '#5b97f5'
- }
- if (sex === 2) {
- return '#f56c92'
- }
- return ''
-})
+const genderIcon = computed(() => getGenderIcon(full.value?.sex))
+const genderColor = computed(() => getGenderColor(full.value?.sex))
/** 备注内联编辑:editingRemark 控制输入态;user 切换时由下面的 watch 复位避免脏态泄漏 */
const editingRemark = ref(false)
@@ -251,33 +223,25 @@ watch(
if (!id) {
return
}
- try {
- const data = (await getSimpleUser(id)) as User
- if (props.user?.id !== id) {
- return
- }
- full.value = { ...props.user, ...data }
- } catch (e) {
- // TODO @AI:最好把 id 打印进去
- console.warn('[IM] 获取用户详情失败', e)
+ const data = (await getSimpleUser(id)) as User
+ if (props.user?.id !== id) {
+ return
}
+ full.value = { ...props.user, ...data }
},
{ immediate: true }
)
-// TODO @AI:目前项目里,更多使用 handleXXX 为主;可能要统一跟进下;
-// TODO @AI:是不是通过 await 做;
-// TODO @AI:注释一下;
-function onRowClick() {
+/** 备注行点击:进编辑态 + 把当前备注灌进输入框,下一帧把焦点 / 全选交给 el-input */
+async function handleRowClick() {
if (editingRemark.value) {
return
}
remarkInput.value = props.displayName || ''
editingRemark.value = true
- void nextTick(() => {
- remarkInputRef.value?.focus()
- remarkInputRef.value?.select()
- })
+ await nextTick()
+ remarkInputRef.value?.focus()
+ remarkInputRef.value?.select()
}
/**
@@ -335,29 +299,25 @@ async function handleDeleteFriend() {
return
}
const target = props.user
- // 二次确认(用户点取消时 message.confirm 抛 reject,吃掉直接 return)
- try {
- await message.confirm(`确定删除好友「${target.nickname || ''}」吗?`, '删除联系人')
- } catch {
- return
- }
+ // 二次确认
+ await message.confirm(`确定删除好友「${target.nickname || ''}」吗?`, '删除联系人')
+ // 删除好友
await friendStore.deleteFriend(target.id)
message.success('已删除好友')
emit('deleted', target)
}
/** 占位提示:语音 / 视频聊天能力尚未接入,先以"开发中"友好提示 */
-function onComingSoon(featureName: string) {
+function handleComingSoon(featureName: string) {
message.info(`${featureName} 功能开发中`)
}
-
-