From 8b37f20b0f440b13e625d92bae2daaac7d865a82 Mon Sep 17 00:00:00 2001 From: xuncha <1658671838@qq.com> Date: Sun, 1 Feb 2026 15:24:48 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BE=A4=E8=81=8A=E5=88=86=E6=9E=90=20?= =?UTF-8?q?=E7=BE=A4=E6=88=90=E5=91=98=E6=9F=A5=E7=9C=8B=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/services/groupAnalyticsService.ts | 59 +++++++++++++++++++--- src/pages/GroupAnalyticsPage.tsx | 45 +++++++++++++++-- src/types/electron.d.ts | 4 ++ 3 files changed, 97 insertions(+), 11 deletions(-) diff --git a/electron/services/groupAnalyticsService.ts b/electron/services/groupAnalyticsService.ts index 889efdf..3e09181 100644 --- a/electron/services/groupAnalyticsService.ts +++ b/electron/services/groupAnalyticsService.ts @@ -16,6 +16,10 @@ export interface GroupMember { username: string displayName: string avatarUrl?: string + nickname?: string + alias?: string + remark?: string + groupNickname?: string } export interface GroupMessageRank { @@ -211,14 +215,55 @@ class GroupAnalyticsService { } const members = result.members as { username: string; avatarUrl?: string }[] - const usernames = members.map((m) => m.username) - const displayNames = await wcdbService.getDisplayNames(usernames) + const usernames = members.map((m) => m.username).filter(Boolean) - const data: GroupMember[] = members.map((m) => ({ - username: m.username, - displayName: displayNames.success && displayNames.map ? (displayNames.map[m.username] || m.username) : m.username, - avatarUrl: m.avatarUrl - })) + const [displayNames, groupNicknames] = await Promise.all([ + wcdbService.getDisplayNames(usernames), + this.getGroupNicknamesForRoom(chatroomId) + ]) + + const contactMap = new Map() + const concurrency = 6 + await this.parallelLimit(usernames, concurrency, async (username) => { + const contactResult = await wcdbService.getContact(username) + if (contactResult.success && contactResult.contact) { + const contact = contactResult.contact as any + contactMap.set(username, { + remark: contact.remark || '', + nickName: contact.nickName || contact.nick_name || '', + alias: contact.alias || '' + }) + } else { + contactMap.set(username, { remark: '', nickName: '', alias: '' }) + } + }) + + const myWxid = this.cleanAccountDirName(this.configService.get('myWxid') || '') + const data: GroupMember[] = members.map((m) => { + const wxid = m.username || '' + const displayName = displayNames.success && displayNames.map ? (displayNames.map[wxid] || wxid) : wxid + const contact = contactMap.get(wxid) + const nickname = contact?.nickName || '' + const remark = contact?.remark || '' + const alias = contact?.alias || '' + const rawGroupNickname = groupNicknames.get(wxid.toLowerCase()) || '' + const normalizedWxid = this.cleanAccountDirName(wxid) + const groupNickname = this.normalizeGroupNickname( + rawGroupNickname, + normalizedWxid === myWxid ? myWxid : wxid, + '' + ) + + return { + username: wxid, + displayName, + nickname, + alias, + remark, + groupNickname, + avatarUrl: m.avatarUrl + } + }) return { success: true, data } } catch (e) { diff --git a/src/pages/GroupAnalyticsPage.tsx b/src/pages/GroupAnalyticsPage.tsx index c7e6a36..c37f0f4 100644 --- a/src/pages/GroupAnalyticsPage.tsx +++ b/src/pages/GroupAnalyticsPage.tsx @@ -16,6 +16,10 @@ interface GroupMember { username: string displayName: string avatarUrl?: string + nickname?: string + alias?: string + remark?: string + groupNickname?: string } interface GroupMessageRank { @@ -298,6 +302,10 @@ function GroupAnalyticsPage() { const renderMemberModal = () => { if (!selectedMember) return null + const nickname = (selectedMember.nickname || '').trim() + const alias = (selectedMember.alias || '').trim() + const remark = (selectedMember.remark || '').trim() + const groupNickname = (selectedMember.groupNickname || '').trim() return (
setSelectedMember(null)}> @@ -320,11 +328,40 @@ function GroupAnalyticsPage() {
昵称 - {selectedMember.displayName} - + {nickname || '未设置'} + {nickname && ( + + )}
+ {alias && ( +
+ 微信号 + {alias} + +
+ )} + {groupNickname && ( +
+ 群昵称 + {groupNickname} + +
+ )} + {remark && ( +
+ 备注 + {remark} + +
+ )} diff --git a/src/types/electron.d.ts b/src/types/electron.d.ts index 68e2cf5..67b1097 100644 --- a/src/types/electron.d.ts +++ b/src/types/electron.d.ts @@ -219,6 +219,10 @@ export interface ElectronAPI { username: string displayName: string avatarUrl?: string + nickname?: string + alias?: string + remark?: string + groupNickname?: string }> error?: string }>