mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-28 09:33:46 +00:00
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:
@@ -94,6 +94,19 @@ export interface NodeInfo {
|
|||||||
created_at?: string;
|
created_at?: string;
|
||||||
updated_at?: string;
|
updated_at?: string;
|
||||||
provider_uuid?: 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 {
|
export interface NodesListResponse {
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ export interface TariffDetail {
|
|||||||
is_daily: boolean;
|
is_daily: boolean;
|
||||||
daily_price_kopeks: number;
|
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
|
// Внешний сквад RemnaWave
|
||||||
external_squad_uuid: string | null;
|
external_squad_uuid: string | null;
|
||||||
created_at: string;
|
created_at: string;
|
||||||
|
|||||||
@@ -316,7 +316,8 @@
|
|||||||
"trafficReset": {
|
"trafficReset": {
|
||||||
"DAY": "Resets daily",
|
"DAY": "Resets daily",
|
||||||
"WEEK": "Resets weekly",
|
"WEEK": "Resets weekly",
|
||||||
"MONTH": "Resets monthly"
|
"MONTH": "Resets monthly",
|
||||||
|
"MONTH_ROLLING": "Resets every 30 days"
|
||||||
},
|
},
|
||||||
"traffic": "Traffic",
|
"traffic": "Traffic",
|
||||||
"unlimited": "Unlimited",
|
"unlimited": "Unlimited",
|
||||||
@@ -1490,7 +1491,7 @@
|
|||||||
"totalUsers": "Total Users",
|
"totalUsers": "Total Users",
|
||||||
"nodesOnline": "Nodes Online",
|
"nodesOnline": "Nodes Online",
|
||||||
"connections": "Connections",
|
"connections": "Connections",
|
||||||
"bandwidth": "Realtime Bandwidth",
|
"bandwidth": "Inbound Traffic",
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
@@ -2198,6 +2199,8 @@
|
|||||||
"resetModeWeeklyDesc": "Reset every week",
|
"resetModeWeeklyDesc": "Reset every week",
|
||||||
"resetModeMonthly": "Monthly",
|
"resetModeMonthly": "Monthly",
|
||||||
"resetModeMonthlyDesc": "Reset every month",
|
"resetModeMonthlyDesc": "Reset every month",
|
||||||
|
"resetModeMonthRolling": "Rolling month",
|
||||||
|
"resetModeMonthRollingDesc": "Reset every 30 days from first connection",
|
||||||
"resetModeNever": "Never",
|
"resetModeNever": "Never",
|
||||||
"resetModeNeverDesc": "Traffic is not reset",
|
"resetModeNeverDesc": "Traffic is not reset",
|
||||||
"cancelButton": "Cancel",
|
"cancelButton": "Cancel",
|
||||||
|
|||||||
@@ -277,7 +277,8 @@
|
|||||||
"trafficReset": {
|
"trafficReset": {
|
||||||
"DAY": "بازنشانی روزانه",
|
"DAY": "بازنشانی روزانه",
|
||||||
"WEEK": "بازنشانی هفتگی",
|
"WEEK": "بازنشانی هفتگی",
|
||||||
"MONTH": "بازنشانی ماهانه"
|
"MONTH": "بازنشانی ماهانه",
|
||||||
|
"MONTH_ROLLING": "بازنشانی هر ۳۰ روز"
|
||||||
},
|
},
|
||||||
"traffic": "ترافیک",
|
"traffic": "ترافیک",
|
||||||
"unlimited": "نامحدود",
|
"unlimited": "نامحدود",
|
||||||
@@ -1853,6 +1854,8 @@
|
|||||||
"resetModeWeeklyDesc": "بازنشانی هر هفته",
|
"resetModeWeeklyDesc": "بازنشانی هر هفته",
|
||||||
"resetModeMonthly": "ماهانه",
|
"resetModeMonthly": "ماهانه",
|
||||||
"resetModeMonthlyDesc": "بازنشانی هر ماه",
|
"resetModeMonthlyDesc": "بازنشانی هر ماه",
|
||||||
|
"resetModeMonthRolling": "ماه متحرک",
|
||||||
|
"resetModeMonthRollingDesc": "بازنشانی هر ۳۰ روز از اولین اتصال",
|
||||||
"resetModeNever": "هرگز",
|
"resetModeNever": "هرگز",
|
||||||
"resetModeNeverDesc": "ترافیک بازنشانی نمیشود",
|
"resetModeNeverDesc": "ترافیک بازنشانی نمیشود",
|
||||||
"cancelButton": "لغو",
|
"cancelButton": "لغو",
|
||||||
|
|||||||
@@ -331,7 +331,8 @@
|
|||||||
"trafficReset": {
|
"trafficReset": {
|
||||||
"DAY": "Сброс ежедневно",
|
"DAY": "Сброс ежедневно",
|
||||||
"WEEK": "Сброс еженедельно",
|
"WEEK": "Сброс еженедельно",
|
||||||
"MONTH": "Сброс ежемесячно"
|
"MONTH": "Сброс ежемесячно",
|
||||||
|
"MONTH_ROLLING": "Сброс раз в 30 дней"
|
||||||
},
|
},
|
||||||
"traffic": "Трафик",
|
"traffic": "Трафик",
|
||||||
"unlimited": "Безлимит",
|
"unlimited": "Безлимит",
|
||||||
@@ -1511,7 +1512,7 @@
|
|||||||
"totalUsers": "Всего пользователей",
|
"totalUsers": "Всего пользователей",
|
||||||
"nodesOnline": "Нод онлайн",
|
"nodesOnline": "Нод онлайн",
|
||||||
"connections": "Подключений",
|
"connections": "Подключений",
|
||||||
"bandwidth": "Пропускная способность",
|
"bandwidth": "Трафик по inbounds",
|
||||||
"download": "Загрузка",
|
"download": "Загрузка",
|
||||||
"upload": "Отдача",
|
"upload": "Отдача",
|
||||||
"total": "Всего",
|
"total": "Всего",
|
||||||
@@ -2712,6 +2713,8 @@
|
|||||||
"resetModeWeeklyDesc": "Сброс каждую неделю",
|
"resetModeWeeklyDesc": "Сброс каждую неделю",
|
||||||
"resetModeMonthly": "Ежемесячно",
|
"resetModeMonthly": "Ежемесячно",
|
||||||
"resetModeMonthlyDesc": "Сброс каждый месяц",
|
"resetModeMonthlyDesc": "Сброс каждый месяц",
|
||||||
|
"resetModeMonthRolling": "Скользящий месяц",
|
||||||
|
"resetModeMonthRollingDesc": "Сброс через 30 дней от первого подключения",
|
||||||
"resetModeNever": "Никогда",
|
"resetModeNever": "Никогда",
|
||||||
"resetModeNeverDesc": "Трафик не сбрасывается",
|
"resetModeNeverDesc": "Трафик не сбрасывается",
|
||||||
"cancelButton": "Отмена",
|
"cancelButton": "Отмена",
|
||||||
|
|||||||
@@ -277,7 +277,8 @@
|
|||||||
"trafficReset": {
|
"trafficReset": {
|
||||||
"DAY": "每日重置",
|
"DAY": "每日重置",
|
||||||
"WEEK": "每周重置",
|
"WEEK": "每周重置",
|
||||||
"MONTH": "每月重置"
|
"MONTH": "每月重置",
|
||||||
|
"MONTH_ROLLING": "每30天重置"
|
||||||
},
|
},
|
||||||
"traffic": "流量",
|
"traffic": "流量",
|
||||||
"unlimited": "无限",
|
"unlimited": "无限",
|
||||||
@@ -1890,6 +1891,8 @@
|
|||||||
"resetModeWeeklyDesc": "每周重置",
|
"resetModeWeeklyDesc": "每周重置",
|
||||||
"resetModeMonthly": "每月",
|
"resetModeMonthly": "每月",
|
||||||
"resetModeMonthlyDesc": "每月重置",
|
"resetModeMonthlyDesc": "每月重置",
|
||||||
|
"resetModeMonthRolling": "滚动月",
|
||||||
|
"resetModeMonthRollingDesc": "从首次连接起每30天重置",
|
||||||
"resetModeNever": "从不",
|
"resetModeNever": "从不",
|
||||||
"resetModeNeverDesc": "流量不重置",
|
"resetModeNeverDesc": "流量不重置",
|
||||||
"cancelButton": "取消",
|
"cancelButton": "取消",
|
||||||
|
|||||||
@@ -405,24 +405,24 @@ function OverviewTab({ stats, isLoading, onRefresh }: OverviewTabProps) {
|
|||||||
{/* Bandwidth */}
|
{/* Bandwidth */}
|
||||||
<div>
|
<div>
|
||||||
<h3 className="mb-3 text-sm font-medium text-dark-300">
|
<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>
|
</h3>
|
||||||
<div className="grid grid-cols-2 gap-3 sm:grid-cols-3">
|
<div className="grid grid-cols-2 gap-3 sm:grid-cols-3">
|
||||||
<StatCard
|
<StatCard
|
||||||
label={t('admin.remnawave.overview.download', 'Download')}
|
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>}
|
icon={<span className="text-lg">↓</span>}
|
||||||
color="green"
|
color="green"
|
||||||
/>
|
/>
|
||||||
<StatCard
|
<StatCard
|
||||||
label={t('admin.remnawave.overview.upload', 'Upload')}
|
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>}
|
icon={<span className="text-lg">↑</span>}
|
||||||
color="blue"
|
color="blue"
|
||||||
/>
|
/>
|
||||||
<StatCard
|
<StatCard
|
||||||
label={t('admin.remnawave.overview.total', 'Total')}
|
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>}
|
icon={<span className="text-lg">⇅</span>}
|
||||||
color="purple"
|
color="purple"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -1029,6 +1029,11 @@ export default function AdminTariffCreate() {
|
|||||||
{ value: 'DAY', labelKey: 'admin.tariffs.resetModeDaily', emoji: '📅' },
|
{ value: 'DAY', labelKey: 'admin.tariffs.resetModeDaily', emoji: '📅' },
|
||||||
{ value: 'WEEK', labelKey: 'admin.tariffs.resetModeWeekly', emoji: '📆' },
|
{ value: 'WEEK', labelKey: 'admin.tariffs.resetModeWeekly', emoji: '📆' },
|
||||||
{ value: 'MONTH', labelKey: 'admin.tariffs.resetModeMonthly', emoji: '🗓️' },
|
{ value: 'MONTH', labelKey: 'admin.tariffs.resetModeMonthly', emoji: '🗓️' },
|
||||||
|
{
|
||||||
|
value: 'MONTH_ROLLING',
|
||||||
|
labelKey: 'admin.tariffs.resetModeMonthRolling',
|
||||||
|
emoji: '🔄',
|
||||||
|
},
|
||||||
{ value: 'NO_RESET', labelKey: 'admin.tariffs.resetModeNever', emoji: '🚫' },
|
{ value: 'NO_RESET', labelKey: 'admin.tariffs.resetModeNever', emoji: '🚫' },
|
||||||
].map((option) => (
|
].map((option) => (
|
||||||
<button
|
<button
|
||||||
|
|||||||
Reference in New Issue
Block a user