feat: add Remnawave panel 2.7.0 support

- Add MONTH_ROLLING traffic reset mode (button, locales: ru/en/zh/fa)
- Add NodeInfo config_profile and active_plugin_uuid fields
- Update bandwidth display: remove /s suffix, label as Inbound Traffic
- Update tariffs.ts type comment with MONTH_ROLLING
This commit is contained in:
c0mrade
2026-03-28 12:35:47 +03:00
parent a57674c22b
commit a50c06c101
8 changed files with 41 additions and 11 deletions

View File

@@ -94,6 +94,19 @@ export interface NodeInfo {
created_at?: string;
updated_at?: string;
provider_uuid?: string;
active_plugin_uuid?: string;
config_profile?: {
active_config_profile_uuid: string | null;
active_inbounds: Array<{
uuid: string;
profile_uuid: string;
tag: string;
type: string;
network: string | null;
security: string | null;
port: number | null;
}>;
};
}
export interface NodesListResponse {

View File

@@ -86,7 +86,7 @@ export interface TariffDetail {
is_daily: boolean;
daily_price_kopeks: number;
// Режим сброса трафика
traffic_reset_mode: string | null; // 'DAY', 'WEEK', 'MONTH', 'NO_RESET', null = глобальная настройка
traffic_reset_mode: string | null; // 'DAY', 'WEEK', 'MONTH', 'MONTH_ROLLING', 'NO_RESET', null = глобальная настройка
// Внешний сквад RemnaWave
external_squad_uuid: string | null;
created_at: string;

View File

@@ -316,7 +316,8 @@
"trafficReset": {
"DAY": "Resets daily",
"WEEK": "Resets weekly",
"MONTH": "Resets monthly"
"MONTH": "Resets monthly",
"MONTH_ROLLING": "Resets every 30 days"
},
"traffic": "Traffic",
"unlimited": "Unlimited",
@@ -1490,7 +1491,7 @@
"totalUsers": "Total Users",
"nodesOnline": "Nodes Online",
"connections": "Connections",
"bandwidth": "Realtime Bandwidth",
"bandwidth": "Inbound Traffic",
"download": "Download",
"upload": "Upload",
"total": "Total",
@@ -2198,6 +2199,8 @@
"resetModeWeeklyDesc": "Reset every week",
"resetModeMonthly": "Monthly",
"resetModeMonthlyDesc": "Reset every month",
"resetModeMonthRolling": "Rolling month",
"resetModeMonthRollingDesc": "Reset every 30 days from first connection",
"resetModeNever": "Never",
"resetModeNeverDesc": "Traffic is not reset",
"cancelButton": "Cancel",

View File

@@ -277,7 +277,8 @@
"trafficReset": {
"DAY": "بازنشانی روزانه",
"WEEK": "بازنشانی هفتگی",
"MONTH": "بازنشانی ماهانه"
"MONTH": "بازنشانی ماهانه",
"MONTH_ROLLING": "بازنشانی هر ۳۰ روز"
},
"traffic": "ترافیک",
"unlimited": "نامحدود",
@@ -1853,6 +1854,8 @@
"resetModeWeeklyDesc": "بازنشانی هر هفته",
"resetModeMonthly": "ماهانه",
"resetModeMonthlyDesc": "بازنشانی هر ماه",
"resetModeMonthRolling": "ماه متحرک",
"resetModeMonthRollingDesc": "بازنشانی هر ۳۰ روز از اولین اتصال",
"resetModeNever": "هرگز",
"resetModeNeverDesc": "ترافیک بازنشانی نمی‌شود",
"cancelButton": "لغو",

View File

@@ -331,7 +331,8 @@
"trafficReset": {
"DAY": "Сброс ежедневно",
"WEEK": "Сброс еженедельно",
"MONTH": "Сброс ежемесячно"
"MONTH": "Сброс ежемесячно",
"MONTH_ROLLING": "Сброс раз в 30 дней"
},
"traffic": "Трафик",
"unlimited": "Безлимит",
@@ -1511,7 +1512,7 @@
"totalUsers": "Всего пользователей",
"nodesOnline": "Нод онлайн",
"connections": "Подключений",
"bandwidth": "Пропускная способность",
"bandwidth": "Трафик по inbounds",
"download": "Загрузка",
"upload": "Отдача",
"total": "Всего",
@@ -2712,6 +2713,8 @@
"resetModeWeeklyDesc": "Сброс каждую неделю",
"resetModeMonthly": "Ежемесячно",
"resetModeMonthlyDesc": "Сброс каждый месяц",
"resetModeMonthRolling": "Скользящий месяц",
"resetModeMonthRollingDesc": "Сброс через 30 дней от первого подключения",
"resetModeNever": "Никогда",
"resetModeNeverDesc": "Трафик не сбрасывается",
"cancelButton": "Отмена",

View File

@@ -277,7 +277,8 @@
"trafficReset": {
"DAY": "每日重置",
"WEEK": "每周重置",
"MONTH": "每月重置"
"MONTH": "每月重置",
"MONTH_ROLLING": "每30天重置"
},
"traffic": "流量",
"unlimited": "无限",
@@ -1890,6 +1891,8 @@
"resetModeWeeklyDesc": "每周重置",
"resetModeMonthly": "每月",
"resetModeMonthlyDesc": "每月重置",
"resetModeMonthRolling": "滚动月",
"resetModeMonthRollingDesc": "从首次连接起每30天重置",
"resetModeNever": "从不",
"resetModeNeverDesc": "流量不重置",
"cancelButton": "取消",

View File

@@ -405,24 +405,24 @@ function OverviewTab({ stats, isLoading, onRefresh }: OverviewTabProps) {
{/* Bandwidth */}
<div>
<h3 className="mb-3 text-sm font-medium text-dark-300">
{t('admin.remnawave.overview.bandwidth', 'Realtime Bandwidth')}
{t('admin.remnawave.overview.bandwidth', 'Inbound Traffic')}
</h3>
<div className="grid grid-cols-2 gap-3 sm:grid-cols-3">
<StatCard
label={t('admin.remnawave.overview.download', 'Download')}
value={formatBytes(stats.bandwidth.realtime_download) + '/s'}
value={formatBytes(stats.bandwidth.realtime_download)}
icon={<span className="text-lg"></span>}
color="green"
/>
<StatCard
label={t('admin.remnawave.overview.upload', 'Upload')}
value={formatBytes(stats.bandwidth.realtime_upload) + '/s'}
value={formatBytes(stats.bandwidth.realtime_upload)}
icon={<span className="text-lg"></span>}
color="blue"
/>
<StatCard
label={t('admin.remnawave.overview.total', 'Total')}
value={formatBytes(stats.bandwidth.realtime_total) + '/s'}
value={formatBytes(stats.bandwidth.realtime_total)}
icon={<span className="text-lg"></span>}
color="purple"
/>

View File

@@ -1029,6 +1029,11 @@ export default function AdminTariffCreate() {
{ value: 'DAY', labelKey: 'admin.tariffs.resetModeDaily', emoji: '📅' },
{ value: 'WEEK', labelKey: 'admin.tariffs.resetModeWeekly', emoji: '📆' },
{ value: 'MONTH', labelKey: 'admin.tariffs.resetModeMonthly', emoji: '🗓️' },
{
value: 'MONTH_ROLLING',
labelKey: 'admin.tariffs.resetModeMonthRolling',
emoji: '🔄',
},
{ value: 'NO_RESET', labelKey: 'admin.tariffs.resetModeNever', emoji: '🚫' },
].map((option) => (
<button