diff --git a/packages/node-runtime/src/services/session-service.ts b/packages/node-runtime/src/services/session-service.ts index 2647237e..a62e8e06 100644 --- a/packages/node-runtime/src/services/session-service.ts +++ b/packages/node-runtime/src/services/session-service.ts @@ -24,6 +24,8 @@ export interface AnalysisSessionDTO extends CoreSessionInfo { dbPath: string memberAvatar: string | null aiConversationCount: number + ownerName: string | null + ownerStatus: 'resolved' | 'missing' | 'unresolved' } /** @@ -64,7 +66,26 @@ function buildSession( memberAvatar = getPrivateChatMemberAvatar(db, meta.name, meta.ownerId) } - let dto: AnalysisSessionDTO = { ...info, id, dbPath, memberAvatar, aiConversationCount: 0 } + const ownerMember = meta.ownerId + ? (db + .prepare( + `SELECT COALESCE(NULLIF(group_nickname, ''), NULLIF(account_name, ''), platform_id) as displayName + FROM member + WHERE platform_id = ? + LIMIT 1` + ) + .get(meta.ownerId) as { displayName: string } | undefined) + : undefined + + let dto: AnalysisSessionDTO = { + ...info, + id, + dbPath, + memberAvatar, + aiConversationCount: 0, + ownerName: ownerMember?.displayName ?? null, + ownerStatus: !meta.ownerId ? 'missing' : ownerMember ? 'resolved' : 'unresolved', + } if (options?.enrichSession) { dto = options.enrichSession(dto) } diff --git a/src/components/analysis/member/OwnerPromptModal.vue b/src/components/analysis/member/OwnerPromptModal.vue index 5126f805..06ccb5bb 100644 --- a/src/components/analysis/member/OwnerPromptModal.vue +++ b/src/components/analysis/member/OwnerPromptModal.vue @@ -54,7 +54,9 @@ const isDismissing = ref(false) const searchQuery = ref('') const selectedPlatformId = ref(null) -const currentOwnerId = computed(() => sessionStore.currentSession?.ownerId ?? null) +const currentOwnerId = computed( + () => sessionStore.sessions.find((session) => session.id === props.sessionId)?.ownerId ?? null +) function getDisplayName(member: MemberWithStats): string { return member.groupNickname || member.accountName || member.platformId @@ -154,18 +156,26 @@ function later() { isOpen.value = false } -// 打开时加载成员并默认选中当前 owner -watch(isOpen, (open) => { - if (open) { - searchQuery.value = '' - selectedPlatformId.value = currentOwnerId.value - loadMembers() - } -}) +function prepareOwnerSelection() { + searchQuery.value = '' + selectedPlatformId.value = currentOwnerId.value + members.value = [] + void loadMembers() +} + +// 打开时加载成员并默认选中当前 owner。immediate 覆盖以打开状态首次挂载的场景。 +watch( + isOpen, + (open) => { + if (open) prepareOwnerSelection() + }, + { immediate: true } +) watch( () => props.sessionId, () => { + if (isOpen.value) prepareOwnerSelection() checkAndAutoOpen() } ) @@ -176,7 +186,7 @@ onMounted(() => {