在MessageList组件中实现对丢失头像或昵称的详细获取,并相应更新会话状态和数据库,以确保准确显示用户信息。
This commit is contained in:
@@ -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(只更新未读数量)
|
||||
|
||||
Reference in New Issue
Block a user