fix(stats): scope group usage by providers and add ungrouped view

This commit is contained in:
wangpengxiang
2026-09-21 12:49:48 +08:00
parent ba7c9f8b27
commit a9a7c64e5d
15 changed files with 622 additions and 48 deletions
@@ -77,7 +77,7 @@
<TableCell class="font-medium">
{{ item.rank }}
</TableCell>
<TableCell>{{ item.name }}</TableCell>
<TableCell>{{ showMemberCount && item.id === '__ungrouped__' ? t('userStats.ungrouped') : item.name }}</TableCell>
<TableCell
v-if="showMemberCount"
class="text-right"
+2
View File
@@ -350,6 +350,7 @@ export const messages = {
'userStats.description': '按用户或当前用户组成员查看排行榜与使用趋势',
'userStats.scope.placeholder': '统计维度',
'userStats.scope.user': '按用户',
'userStats.ungrouped': '未分组',
'userStats.scope.userGroup': '按用户组',
'userStats.search.user': '搜索用户',
'userStats.search.userGroup': '搜索用户组',
@@ -834,6 +835,7 @@ export const messages = {
'userStats.description': 'View leaderboards and usage trends by user or current user-group membership',
'userStats.scope.placeholder': 'Statistics scope',
'userStats.scope.user': 'By user',
'userStats.ungrouped': 'Ungrouped',
'userStats.scope.userGroup': 'By user group',
'userStats.search.user': 'Search users',
'userStats.search.userGroup': 'Search user groups',
+9 -6
View File
@@ -297,7 +297,8 @@ let ready = false
const allEntities = computed<SelectableEntity[]>(() => scope.value === 'user'
? users.value.map(user => ({ id: user.id, name: user.username || user.email || user.id }))
: userGroups.value.map(group => ({ id: group.id, name: group.name })))
: [...userGroups.value.map(group => ({ id: group.id, name: group.name })),
{ id: '__ungrouped__', name: t('userStats.ungrouped') }])
const selectedEntityId = computed({
get: () => scope.value === 'user' ? selectedUserId.value : selectedUserGroupId.value,
@@ -417,7 +418,7 @@ async function loadPanels() {
limit: PAGE_SIZE
})
: Promise.resolve({ items: [] })
const groupMembersPromise: Promise<UserGroupMember[]> = scope.value === 'user_group'
const groupMembersPromise: Promise<UserGroupMember[]> = scope.value === 'user_group' && selectedId !== '__ungrouped__'
? usersApi.listUserGroupMembers(selectedId)
: Promise.resolve([])
@@ -433,10 +434,12 @@ async function loadPanels() {
series.value = primarySeries
comparisonSeries.value = compareSeries
memberLeaderboard.value = members.items
groupMemberCount.value = groupMembers.filter(member => !member.is_deleted).length
activeGroupMemberCount.value = groupMembers.filter(
member => !member.is_deleted && member.is_active
).length
const ungroupedUsers = users.value.filter(user => user.groups?.length === 0)
groupMemberCount.value = selectedId === '__ungrouped__'
? ungroupedUsers.length : groupMembers.filter(member => !member.is_deleted).length
activeGroupMemberCount.value = selectedId === '__ungrouped__'
? ungroupedUsers.filter(user => user.is_active).length
: groupMembers.filter(member => !member.is_deleted && member.is_active).length
} finally {
if (requestId === panelRequestId) {
summaryLoading.value = false