feat: add partner management and withdrawal admin pages

- Admin partners page: list partners, view applications, approve/reject
- Admin partner detail: stats, commission management, campaign assignment
- Admin withdrawals page: list with risk scoring, status filters including cancelled
- Admin withdrawal detail: fraud analysis, approve/reject/complete actions
- Partner API client with full TypeScript interfaces
- Withdrawal API client with admin and user endpoints
- Referral page: partner application form, withdrawal balance and history
- Navigation: partners and withdrawals in admin panel marketing group
- i18n: full translations for ru, en, zh, fa locales
- Neutral fallbacks for unknown status badges
This commit is contained in:
Fringg
2026-02-17 09:51:48 +03:00
parent e0dd21fd0b
commit 779fbf0dc6
13 changed files with 3322 additions and 15 deletions

View File

@@ -59,6 +59,10 @@ const AdminCampaigns = lazy(() => import('./pages/AdminCampaigns'));
const AdminCampaignCreate = lazy(() => import('./pages/AdminCampaignCreate'));
const AdminCampaignStats = lazy(() => import('./pages/AdminCampaignStats'));
const AdminCampaignEdit = lazy(() => import('./pages/AdminCampaignEdit'));
const AdminPartners = lazy(() => import('./pages/AdminPartners'));
const AdminPartnerDetail = lazy(() => import('./pages/AdminPartnerDetail'));
const AdminWithdrawals = lazy(() => import('./pages/AdminWithdrawals'));
const AdminWithdrawalDetail = lazy(() => import('./pages/AdminWithdrawalDetail'));
const AdminUsers = lazy(() => import('./pages/AdminUsers'));
const AdminPayments = lazy(() => import('./pages/AdminPayments'));
const AdminPaymentMethods = lazy(() => import('./pages/AdminPaymentMethods'));
@@ -549,6 +553,46 @@ function App() {
</AdminRoute>
}
/>
<Route
path="/admin/partners"
element={
<AdminRoute>
<LazyPage>
<AdminPartners />
</LazyPage>
</AdminRoute>
}
/>
<Route
path="/admin/partners/:userId"
element={
<AdminRoute>
<LazyPage>
<AdminPartnerDetail />
</LazyPage>
</AdminRoute>
}
/>
<Route
path="/admin/withdrawals"
element={
<AdminRoute>
<LazyPage>
<AdminWithdrawals />
</LazyPage>
</AdminRoute>
}
/>
<Route
path="/admin/withdrawals/:id"
element={
<AdminRoute>
<LazyPage>
<AdminWithdrawalDetail />
</LazyPage>
</AdminRoute>
}
/>
<Route
path="/admin/users"
element={