diff --git a/frontend-v2/src/App.tsx b/frontend-v2/src/App.tsx
index 2aae59f..73a295c 100644
--- a/frontend-v2/src/App.tsx
+++ b/frontend-v2/src/App.tsx
@@ -9,6 +9,7 @@ import { KnowledgePage } from '@/pages/front/KnowledgePage';
import { ImBotHub } from '@/pages/front/ImBotHub';
import { AppServices } from '@/pages/front/AppServices';
import { DashboardPage } from '@/pages/front/DashboardPage';
+import { ProfilePage } from '@/pages/front/ProfilePage';
import { ComingSoon } from '@/components/common/ComingSoon';
import {
Zap,
@@ -17,7 +18,6 @@ import {
Workflow,
Shield,
Radio,
- User,
Bell,
Sparkles,
} from 'lucide-react';
@@ -126,21 +126,7 @@ function App() {
}
/>
} />
-
- }
- />
+ } />
) => profileApi.update(data),
+ mutationFn: (data: Parameters[0]) => profileApi.update(data),
onSuccess: () => qc.invalidateQueries({ queryKey: ['profile'] }),
});
}
+export function useProfileBalance() {
+ return useQuery({
+ queryKey: ['profile', 'balance'],
+ queryFn: profileApi.getBalance,
+ });
+}
+
+export function useProfileMembership() {
+ return useQuery({
+ queryKey: ['profile', 'membership'],
+ queryFn: profileApi.getMembership,
+ });
+}
+
+export function useProfileLoginLogs(page = 1, page_size = 10) {
+ return useQuery({
+ queryKey: ['profile', 'login-logs', page, page_size],
+ queryFn: () => profileApi.getLoginLogs(page, page_size),
+ });
+}
+
+export function useProfileApiKeys() {
+ return useQuery({
+ queryKey: ['profile', 'api-keys'],
+ queryFn: profileApi.getApiKeys,
+ });
+}
+
+export function useProfilePurchasedApps() {
+ return useQuery({
+ queryKey: ['profile', 'purchased-apps'],
+ queryFn: profileApi.getPurchasedApps,
+ });
+}
+
// ─── Token 驾驶舱 ─────────────────────────────────────────────────────────────────
// Landing hero still shows a few headline numbers; reuse the real token overview