diff --git a/web/admin-spa/src/views/UserDashboardView.vue b/web/admin-spa/src/views/UserDashboardView.vue index 2b0b75d3..974d3342 100644 --- a/web/admin-spa/src/views/UserDashboardView.vue +++ b/web/admin-spa/src/views/UserDashboardView.vue @@ -30,7 +30,7 @@ ? 'bg-blue-100 text-blue-700' : 'text-gray-500 hover:text-gray-700' ]" - @click="activeTab = 'overview'" + @click="handleTabChange('overview')" > Overview @@ -41,7 +41,7 @@ ? 'bg-blue-100 text-blue-700' : 'text-gray-500 hover:text-gray-700' ]" - @click="activeTab = 'api-keys'" + @click="handleTabChange('api-keys')" > API Keys @@ -52,7 +52,7 @@ ? 'bg-blue-100 text-blue-700' : 'text-gray-500 hover:text-gray-700' ]" - @click="activeTab = 'usage'" + @click="handleTabChange('usage')" > Usage Stats @@ -84,13 +84,13 @@ -
+
-
API Keys
+
Active API Keys
- {{ userProfile?.apiKeyCount || 0 }} + {{ apiKeysStats.active }} +
+
+
+
+
+
+ +
+
+
+
+ + + +
+
+
+
Deleted API Keys
+
+ {{ apiKeysStats.deleted }}
@@ -282,8 +312,9 @@ import UserUsageStats from '@/components/user/UserUsageStats.vue' const router = useRouter() const userStore = useUserStore() -const activeTab = ref('api-keys') +const activeTab = ref('overview') const userProfile = ref(null) +const apiKeysStats = ref({ active: 0, deleted: 0 }) const formatNumber = (num) => { if (num >= 1000000) { @@ -305,6 +336,14 @@ const formatDate = (dateString) => { }) } +const handleTabChange = (tab) => { + activeTab.value = tab + // Refresh API keys stats when switching to overview tab + if (tab === 'overview') { + loadApiKeysStats() + } +} + const handleLogout = async () => { try { await userStore.logout() @@ -325,8 +364,26 @@ const loadUserProfile = async () => { } } +const loadApiKeysStats = async () => { + try { + const allApiKeys = await userStore.getUserApiKeys(true) // Include deleted keys + const activeCount = allApiKeys.filter( + (key) => !(key.isDeleted === 'true' || key.deletedAt) && key.isActive + ).length + const deletedCount = allApiKeys.filter( + (key) => key.isDeleted === 'true' || key.deletedAt + ).length + + apiKeysStats.value = { active: activeCount, deleted: deletedCount } + } catch (error) { + console.error('Failed to load API keys stats:', error) + apiKeysStats.value = { active: 0, deleted: 0 } + } +} + onMounted(() => { loadUserProfile() + loadApiKeysStats() })