在MessageList组件中实现对丢失头像或昵称的详细获取,并相应更新会话状态和数据库,以确保准确显示用户信息。

This commit is contained in:
乘风
2025-12-01 14:43:33 +08:00
parent 2cc2184002
commit 75aab08a72

View File

@@ -805,6 +805,59 @@ const MessageList: React.FC<MessageListProps> = () => {
// 设置当前会话
setCurrentContact(session as any);
// 如果头像或昵称缺失,则尝试拉取详情并更新列表
const needFetchDetail =
!session.avatar ||
!(session.conRemark || session.nickname || session.wechatId);
if (needFetchDetail) {
try {
let detailResult: any = null;
if (session.type === "friend") {
detailResult = await getWechatFriendDetail({ id: session.id });
} else {
detailResult = await getWechatChatroomDetail({ id: session.id });
}
const detail = detailResult?.detail;
if (detail) {
// 1. 更新会话列表中的该条记录(驱动 UI 立即更新头像和昵称)
setSessionState(prev =>
prev.map(s =>
s.id === session.id && s.type === session.type
? {
...s,
avatar:
session.type === "group"
? detail.chatroomAvatar || s.avatar
: detail.avatar || s.avatar,
nickname: detail.nickname || s.nickname,
conRemark: detail.conRemark || s.conRemark,
wechatId: detail.wechatId || s.wechatId,
}
: s,
),
);
// 2. 同步到会话数据库,保证刷新后数据仍然是最新的
await MessageManager.updateSession({
userId: currentUserId,
id: session.id,
type: session.type,
avatar:
session.type === "group"
? detail.chatroomAvatar || session.avatar
: detail.avatar || session.avatar,
nickname: detail.nickname || session.nickname,
conRemark: detail.conRemark || session.conRemark,
wechatId: detail.wechatId || session.wechatId,
});
}
} catch (e) {
console.error("点击会话补拉详情失败:", e);
}
}
// 标记为已读(不更新时间和排序)
if (session.config.unreadCount > 0) {
// 立即更新UI只更新未读数量