feat: редизайн страницы платежей в админке — поиск, фильтры, статистика

Поиск по инвойсу/клиенту, фильтры по статусу/периоду/методу, карточки статистики,
кастомный диапазон дат, обработка ошибок, локализация на 4 языка.
This commit is contained in:
Fringg
2026-03-18 05:40:56 +03:00
parent 914a802c1b
commit df73b3f77e
6 changed files with 512 additions and 97 deletions

View File

@@ -6,6 +6,14 @@ export interface PaymentsStats {
by_method: Record<string, number>;
}
export interface SearchStats {
total: number;
pending: number;
paid: number;
cancelled: number;
by_method: Record<string, number>;
}
export const adminPaymentsApi = {
// Get all pending payments (admin)
getPendingPayments: async (params?: {
@@ -28,6 +36,39 @@ export const adminPaymentsApi = {
return response.data;
},
// Search payments with filters
searchPayments: async (params?: {
search?: string;
status_filter?: string;
method_filter?: string;
period?: string;
date_from?: string;
date_to?: string;
page?: number;
per_page?: number;
}): Promise<PaginatedResponse<PendingPayment>> => {
const response = await apiClient.get<PaginatedResponse<PendingPayment>>(
'/cabinet/admin/payments/search',
{ params },
);
return response.data;
},
// Get search statistics with filters
getSearchStats: async (params?: {
search?: string;
status_filter?: string;
method_filter?: string;
period?: string;
date_from?: string;
date_to?: string;
}): Promise<SearchStats> => {
const response = await apiClient.get<SearchStats>('/cabinet/admin/payments/search/stats', {
params,
});
return response.data;
},
// Get specific payment details
getPayment: async (method: string, paymentId: number): Promise<PendingPayment> => {
const response = await apiClient.get<PendingPayment>(