feat: admin partner settings page, partner section visibility toggle, custom requisites text

- New AdminPartnerSettings page with validation (pattern from AdminTicketSettings)
- Settings gear button on AdminPartners header
- Hide partner/withdrawal sections when partner_section_visible is false
- Use custom requisites_text as label in withdrawal form
- i18n keys for ru/en
This commit is contained in:
Fringg
2026-02-18 04:12:19 +03:00
parent 9cf8e095b8
commit 76d20fdb1a
10 changed files with 550 additions and 112 deletions

View File

@@ -113,6 +113,26 @@ export interface PartnerStats {
total_earnings_kopeks: number;
}
// ==================== Partner Settings types ====================
export interface PartnerSettings {
withdrawal_enabled: boolean;
withdrawal_min_amount_kopeks: number;
withdrawal_cooldown_days: number;
withdrawal_requisites_text: string;
partner_section_visible: boolean;
referral_program_enabled: boolean;
}
export interface PartnerSettingsUpdate {
withdrawal_enabled?: boolean;
withdrawal_min_amount_kopeks?: number;
withdrawal_cooldown_days?: number;
withdrawal_requisites_text?: string;
partner_section_visible?: boolean;
referral_program_enabled?: boolean;
}
export const partnerApi = {
// User endpoints
getStatus: async (): Promise<PartnerStatusResponse> => {
@@ -191,4 +211,18 @@ export const partnerApi = {
unassignCampaign: async (userId: number, campaignId: number): Promise<void> => {
await apiClient.post(`/cabinet/admin/partners/${userId}/campaigns/${campaignId}/unassign`);
},
// Settings
getPartnerSettings: async (): Promise<PartnerSettings> => {
const response = await apiClient.get<PartnerSettings>('/cabinet/admin/partners/settings');
return response.data;
},
updatePartnerSettings: async (data: PartnerSettingsUpdate): Promise<PartnerSettings> => {
const response = await apiClient.patch<PartnerSettings>(
'/cabinet/admin/partners/settings',
data,
);
return response.data;
},
};

View File

@@ -14,6 +14,7 @@ export interface WithdrawalBalanceResponse {
is_withdrawal_enabled: boolean;
can_request: boolean;
cannot_request_reason: string | null;
requisites_text: string;
}
export interface WithdrawalCreateRequest {