From 06bf6c948e9064bed40a7af575c56307fd51ee69 Mon Sep 17 00:00:00 2001 From: Egor Date: Fri, 16 Jan 2026 08:48:35 +0300 Subject: [PATCH 1/2] Update tariffs.ts --- src/api/tariffs.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/api/tariffs.ts b/src/api/tariffs.ts index e50ddbb..00a6255 100644 --- a/src/api/tariffs.ts +++ b/src/api/tariffs.ts @@ -83,6 +83,8 @@ export interface TariffDetail { // Дневной тариф is_daily: boolean daily_price_kopeks: number + // Режим сброса трафика + traffic_reset_mode: string | null // 'DAY', 'WEEK', 'MONTH', 'NO_RESET', null = глобальная настройка created_at: string updated_at: string | null } @@ -117,6 +119,8 @@ export interface TariffCreateRequest { // Дневной тариф is_daily?: boolean daily_price_kopeks?: number + // Режим сброса трафика + traffic_reset_mode?: string | null } export interface TariffUpdateRequest { @@ -150,6 +154,8 @@ export interface TariffUpdateRequest { // Дневной тариф is_daily?: boolean daily_price_kopeks?: number + // Режим сброса трафика + traffic_reset_mode?: string | null } export interface TariffToggleResponse { From 581205110530de8b364f4c5d3cb1f328d61a7dea Mon Sep 17 00:00:00 2001 From: Egor Date: Fri, 16 Jan 2026 08:49:14 +0300 Subject: [PATCH 2/2] Update AdminTariffs.tsx --- src/pages/AdminTariffs.tsx | 84 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/src/pages/AdminTariffs.tsx b/src/pages/AdminTariffs.tsx index a83383b..8994e94 100644 --- a/src/pages/AdminTariffs.tsx +++ b/src/pages/AdminTariffs.tsx @@ -155,6 +155,9 @@ function PeriodTariffModal({ tariff, servers, onSave, onClose, isLoading }: Peri tariff?.traffic_topup_packages || {} ) + // Режим сброса трафика + const [trafficResetMode, setTrafficResetMode] = useState(tariff?.traffic_reset_mode || null) + // Новый период для добавления const [newPeriodDays, setNewPeriodDays] = useState(30) const [newPeriodPrice, setNewPeriodPrice] = useState(300) @@ -185,6 +188,7 @@ function PeriodTariffModal({ tariff, servers, onSave, onClose, isLoading }: Peri max_topup_traffic_gb: maxTopupTrafficGb, is_daily: false, daily_price_kopeks: 0, + traffic_reset_mode: trafficResetMode, } onSave(data) } @@ -579,6 +583,44 @@ function PeriodTariffModal({ tariff, servers, onSave, onClose, isLoading }: Peri )} + + {/* Режим сброса трафика */} +
+

Режим сброса трафика

+

+ Определяет, когда сбрасывается использованный трафик у подписчиков этого тарифа +

+
+ {[ + { value: null, label: '🌐 Глобальная настройка', desc: 'Использовать значение из конфига бота' }, + { value: 'DAY', label: '📅 Ежедневно', desc: 'Сброс каждый день' }, + { value: 'WEEK', label: '📆 Еженедельно', desc: 'Сброс каждую неделю' }, + { value: 'MONTH', label: '🗓️ Ежемесячно', desc: 'Сброс каждый месяц' }, + { value: 'NO_RESET', label: '🚫 Никогда', desc: 'Трафик не сбрасывается' }, + ].map(option => ( + + ))} +
+
)} @@ -635,6 +677,9 @@ function DailyTariffModal({ tariff, servers, onSave, onClose, isLoading }: Daily tariff?.traffic_topup_packages || {} ) + // Режим сброса трафика + const [trafficResetMode, setTrafficResetMode] = useState(tariff?.traffic_reset_mode || null) + const [activeTab, setActiveTab] = useState<'basic' | 'servers' | 'extra'>('basic') const handleSubmit = () => { @@ -661,6 +706,7 @@ function DailyTariffModal({ tariff, servers, onSave, onClose, isLoading }: Daily max_topup_traffic_gb: maxTopupTrafficGb, is_daily: true, daily_price_kopeks: dailyPriceKopeks, + traffic_reset_mode: trafficResetMode, } onSave(data) } @@ -969,6 +1015,44 @@ function DailyTariffModal({ tariff, servers, onSave, onClose, isLoading }: Daily )} + + {/* Режим сброса трафика */} +
+

Режим сброса трафика

+

+ Определяет, когда сбрасывается использованный трафик у подписчиков этого тарифа +

+
+ {[ + { value: null, label: '🌐 Глобальная настройка', desc: 'Использовать значение из конфига бота' }, + { value: 'DAY', label: '📅 Ежедневно', desc: 'Сброс каждый день' }, + { value: 'WEEK', label: '📆 Еженедельно', desc: 'Сброс каждую неделю' }, + { value: 'MONTH', label: '🗓️ Ежемесячно', desc: 'Сброс каждый месяц' }, + { value: 'NO_RESET', label: '🚫 Никогда', desc: 'Трафик не сбрасывается' }, + ].map(option => ( + + ))} +
+
)}