群聊消息记录中点击发送者头像/名字可跳转查看详情

isGroup且非本人消息、非多选态时,头像与名字改为Link跳转到/contacts/{msg.from},
其余情况(含选中模式,避免中断正在进行的批量选择)保持原有纯展示span不变。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-09-16 18:03:25 +08:00
co-authored by Claude Sonnet 5
parent 8431f83ede
commit d1f3aea26e
+30 -8
View File
@@ -141,17 +141,39 @@ export function MessageRow({
}}
className={`flex flex-1 items-start gap-2.5 ${mine ? 'flex-row-reverse' : ''}`}
>
<span
className={`grid h-9 w-9 flex-none place-items-center rounded-lg text-sm font-medium text-white ${
mine ? 'bg-accent' : avatarBgClass(msg.from || (isGroup ? '' : peerName))
}`}
>
{avatarLetter(mine ? '我' : isGroup ? senderName || msg.from : peerName)}
</span>
{/* Group members' avatar/name go to their profile (same destination ContactCardBubble's own
card already uses, which works for a non-friend group member too -- FriendProfileView's
relationship-aware buttons handle that case, it isn't friends-only). Not for `mine` -- that
slot always reads "我", and viewing "your own profile" via a route built around a two-party
relationship isn't a case this app has ever needed to support. Not during `selectMode`
either -- the checkbox is the only thing a tap in this row should do while bulk-selecting,
not navigate away and lose whatever's already been picked. */}
{isGroup && !mine && !selectMode && msg.from ? (
<Link
to={`/contacts/${msg.from}`}
className={`grid h-9 w-9 flex-none place-items-center rounded-lg text-sm font-medium text-white no-underline ${avatarBgClass(msg.from)}`}
>
{avatarLetter(senderName || msg.from)}
</Link>
) : (
<span
className={`grid h-9 w-9 flex-none place-items-center rounded-lg text-sm font-medium text-white ${
mine ? 'bg-accent' : avatarBgClass(msg.from || (isGroup ? '' : peerName))
}`}
>
{avatarLetter(mine ? '我' : isGroup ? senderName || msg.from : peerName)}
</span>
)}
<div className={`flex max-w-[60%] flex-col gap-1 ${mine ? 'items-end' : 'items-start'}`}>
{isGroup ? (
<div className={`flex items-center gap-1 px-0.5 text-xs text-text-tertiary-4 ${mine ? 'flex-row-reverse' : ''}`}>
<span>{mine ? '我' : senderName || msg.from}</span>
{!mine && !selectMode && msg.from ? (
<Link to={`/contacts/${msg.from}`} className="text-text-tertiary-4 no-underline hover:underline">
{senderName || msg.from}
</Link>
) : (
<span>{mine ? '我' : senderName || msg.from}</span>
)}
<MessageRoleTag role={senderRole === 'owner' || senderRole === 'admin' ? senderRole : undefined} />
</div>
) : null}