Add admin features for broadcasts, campaigns, and users

- Introduced new pages and API integrations for managing broadcasts, campaigns, and users in the admin panel.
- Added localization support for new features in English, Persian, Russian, and Chinese.
- Enhanced the AdminPanel to include navigation for the new sections, improving overall admin experience.
This commit is contained in:
PEDZEO
2026-01-17 07:50:17 +03:00
14 changed files with 5284 additions and 63 deletions

View File

@@ -268,8 +268,8 @@
"selectPaymentOption": "Select payment option",
"paymentMethods": {
"yookassa": {
"name": "YooKassa (Bank Card)",
"description": "Pay with bank card via YooKassa"
"name": "YooKassa",
"description": "Pay via YooKassa"
},
"cryptobot": {
"name": "CryptoBot",
@@ -386,7 +386,7 @@
"goToProfile": "Go to Profile",
"useExternalLink": "Please use the external link to get support",
"openSupport": "Open Support",
"contactSupport": "Please contact {username} for support",
"contactSupport": "Please contact {{username}} for support",
"contactUs": "Contact Support"
},
"wheel": {
@@ -442,7 +442,8 @@
"wheel": "Wheel",
"tariffs": "Tariffs",
"servers": "Servers",
"banSystem": "Ban Monitoring"
"banSystem": "Ban Monitoring",
"broadcasts": "Broadcasts"
},
"panel": {
"title": "Admin Panel",
@@ -454,7 +455,8 @@
"wheelDesc": "Configure fortune wheel and prizes",
"tariffsDesc": "Manage tariff plans",
"serversDesc": "Configure VPN servers",
"banSystemDesc": "Ban monitoring and violations"
"banSystemDesc": "Ban monitoring and violations",
"broadcastsDesc": "Mass messaging to users"
},
"wheel": {
"title": "Fortune Wheel Settings",
@@ -514,6 +516,32 @@
"topWins": "Top Wins"
}
},
"broadcasts": {
"title": "Broadcasts",
"subtitle": "Mass messaging to users",
"create": "Create Broadcast",
"empty": "No broadcasts yet",
"selectFilter": "Select audience",
"selectFilterPlaceholder": "Select filter...",
"recipients": "recip.",
"messageText": "Message text",
"messageTextPlaceholder": "Enter broadcast message...",
"media": "Media file",
"addMedia": "Add media",
"uploading": "Uploading...",
"buttons": "Buttons",
"willBeSent": "Will be sent to",
"users": "users",
"send": "Send",
"stop": "Stop",
"progress": "Progress",
"total": "Total",
"sent": "Sent",
"failed": "Failed",
"filter": "Filter",
"message": "Message",
"unknownAdmin": "Unknown admin"
},
"settings": {
"title": "System Settings",
"allCategories": "All categories",

View File

@@ -167,8 +167,8 @@
"topUpBalance": "شارژ موجودی",
"paymentMethods": {
"yookassa": {
"name": "کارت بانکی",
"description": "پرداخت با کارت بانکی"
"name": "YooKassa",
"description": "پرداخت از طریق YooKassa"
},
"cryptobot": {
"name": "CryptoBot",
@@ -334,7 +334,8 @@
"apps": "برنامه‌ها",
"wheel": "چرخ",
"tariffs": "تعرفه‌ها",
"servers": "سرورها"
"servers": "سرورها",
"broadcasts": "پیام‌رسانی"
},
"panel": {
"title": "پنل مدیریت",
@@ -345,7 +346,8 @@
"appsDesc": "مدیریت برنامه‌های اتصال",
"wheelDesc": "تنظیم چرخ شانس و جوایز",
"tariffsDesc": "مدیریت طرح‌های تعرفه",
"serversDesc": "تنظیم سرورهای VPN"
"serversDesc": "تنظیم سرورهای VPN",
"broadcastsDesc": "ارسال پیام گروهی به کاربران"
},
"wheel": {
"title": "تنظیمات چرخ شانس",
@@ -405,6 +407,32 @@
"topWins": "برترین برنده‌ها"
}
},
"broadcasts": {
"title": "پیام‌رسانی",
"subtitle": "ارسال پیام گروهی به کاربران",
"create": "ایجاد پیام",
"empty": "هنوز پیامی ارسال نشده",
"selectFilter": "انتخاب مخاطبین",
"selectFilterPlaceholder": "انتخاب فیلتر...",
"recipients": "نفر",
"messageText": "متن پیام",
"messageTextPlaceholder": "متن پیام را وارد کنید...",
"media": "فایل رسانه",
"addMedia": "افزودن رسانه",
"uploading": "در حال آپلود...",
"buttons": "دکمه‌ها",
"willBeSent": "ارسال می‌شود به",
"users": "کاربر",
"send": "ارسال",
"stop": "توقف",
"progress": "پیشرفت",
"total": "کل",
"sent": "ارسال شده",
"failed": "ناموفق",
"filter": "فیلتر",
"message": "پیام",
"unknownAdmin": "مدیر ناشناس"
},
"settings": {
"title": "تنظیمات سیستم",
"allCategories": "همه دسته‌ها",

View File

@@ -1,4 +1,4 @@
{
{
"common": {
"loading": "Загрузка...",
"error": "Ошибка",
@@ -268,8 +268,8 @@
"selectPaymentOption": "Выберите способ оплаты",
"paymentMethods": {
"yookassa": {
"name": "ЮKassa (Банковская карта)",
"description": "Оплата банковской картой через ЮKassa"
"name": "ЮKassa",
"description": "Оплата через ЮKassa"
},
"cryptobot": {
"name": "CryptoBot",
@@ -386,7 +386,7 @@
"goToProfile": "Перейти в профиль",
"useExternalLink": "Для получения поддержки воспользуйтесь внешней ссылкой",
"openSupport": "Открыть поддержку",
"contactSupport": "Для получения поддержки обратитесь к {username}",
"contactSupport": "Для получения поддержки обратитесь к {{username}}",
"contactUs": "Связаться с поддержкой"
},
"wheel": {
@@ -442,7 +442,9 @@
"wheel": "Колесо",
"tariffs": "Тарифы",
"servers": "Серверы",
"banSystem": "Мониторинг банов"
"banSystem": "Мониторинг банов",
"broadcasts": "Рассылки",
"users": "Пользователи"
},
"panel": {
"title": "Панель администратора",
@@ -454,7 +456,9 @@
"wheelDesc": "Настройка колеса удачи и призов",
"tariffsDesc": "Управление тарифными планами",
"serversDesc": "Настройка VPN серверов",
"banSystemDesc": "Мониторинг банов и нарушений"
"banSystemDesc": "Мониторинг банов и нарушений",
"broadcastsDesc": "Массовая отправка сообщений",
"usersDesc": "Управление пользователями бота"
},
"wheel": {
"title": "Настройки колеса удачи",
@@ -514,6 +518,32 @@
"topWins": "Топ выигрышей"
}
},
"broadcasts": {
"title": "Рассылки",
"subtitle": "Массовая отправка сообщений пользователям",
"create": "Создать рассылку",
"empty": "Рассылок пока нет",
"selectFilter": "Выберите аудиторию",
"selectFilterPlaceholder": "Выберите фильтр...",
"recipients": "получ.",
"messageText": "Текст сообщения",
"messageTextPlaceholder": "Введите текст рассылки...",
"media": "Медиафайл",
"addMedia": "Добавить медиа",
"uploading": "Загрузка...",
"buttons": "Кнопки",
"willBeSent": "Будет отправлено",
"users": "пользователям",
"send": "Отправить",
"stop": "Остановить",
"progress": "Прогресс",
"total": "Всего",
"sent": "Отправлено",
"failed": "Ошибки",
"filter": "Фильтр",
"message": "Сообщение",
"unknownAdmin": "Неизвестный админ"
},
"settings": {
"title": "Настройки системы",
"allCategories": "Все категории",
@@ -1025,6 +1055,164 @@
"uptime": "Аптайм"
}
},
"adminUsers": {
"title": "Пользователи",
"subtitle": "Управление пользователями",
"searchPlaceholder": "Поиск по ID, username, имени...",
"filters": {
"all": "Все",
"active": "Активные",
"blocked": "Заблокированные",
"deleted": "Удалённые"
},
"sort": {
"created_at": "Дата регистрации",
"balance": "Баланс",
"traffic": "Трафик",
"last_activity": "Активность",
"total_spent": "Потрачено",
"purchase_count": "Покупки"
},
"stats": {
"totalUsers": "Всего пользователей",
"activeUsers": "Активных",
"blockedUsers": "Заблокировано",
"withSubscription": "С подпиской",
"newToday": "Новых сегодня",
"newWeek": "За неделю",
"newMonth": "За месяц",
"totalBalance": "Общий баланс",
"activeToday": "Активны сегодня",
"activeWeek": "За неделю",
"activeMonth": "За месяц"
},
"table": {
"user": "Пользователь",
"status": "Статус",
"balance": "Баланс",
"subscription": "Подписка",
"spent": "Потрачено",
"registered": "Регистрация",
"activity": "Активность",
"noUsers": "Пользователи не найдены"
},
"userStatus": {
"active": "Активен",
"blocked": "Заблокирован",
"deleted": "Удалён"
},
"subscriptionStatus": {
"active": "Активна",
"trial": "Триал",
"expired": "Истекла",
"none": "Нет подписки"
},
"detail": {
"title": "Информация о пользователе",
"tabs": {
"info": "Инфо",
"subscription": "Подписка",
"balance": "Баланс",
"sync": "Синхронизация"
},
"telegramId": "Telegram ID",
"username": "Username",
"fullName": "Имя",
"email": "Email",
"emailVerified": "Подтверждён",
"emailNotVerified": "Не подтверждён",
"language": "Язык",
"registeredAt": "Регистрация",
"lastActivity": "Последняя активность",
"cabinetLogin": "Вход в кабинет",
"referralCode": "Реферальный код",
"referralsCount": "Рефералов",
"referralEarnings": "Заработано",
"referredBy": "Приглашён",
"promoGroup": "Промо-группа",
"noPromoGroup": "Не задана",
"restrictions": "Ограничения",
"restrictionTopup": "Пополнение баланса",
"restrictionSubscription": "Покупка подписки",
"restrictionReason": "Причина",
"noRestrictions": "Нет ограничений",
"totalSpent": "Всего потрачено",
"purchaseCount": "Покупок",
"usedPromocodes": "Использовано промокодов",
"lifetimeTraffic": "Трафик за всё время",
"recentTransactions": "Последние транзакции",
"noTransactions": "Нет транзакций"
},
"subscription": {
"noSubscription": "Подписка отсутствует",
"currentTariff": "Текущий тариф",
"status": "Статус",
"endDate": "Окончание",
"daysRemaining": "Осталось дней",
"trafficUsed": "Использовано трафика",
"deviceLimit": "Лимит устройств",
"autopay": "Автоплатёж",
"enabled": "Включён",
"disabled": "Отключён",
"actions": {
"extend": "Продлить",
"changeTariff": "Сменить тариф",
"setTraffic": "Установить трафик",
"toggleAutopay": "Вкл/выкл автоплатёж",
"cancel": "Отменить подписку",
"create": "Создать подписку"
},
"extendDays": "Дней",
"selectTariff": "Выберите тариф",
"trafficLimitGb": "Лимит ГБ",
"trafficUsedGb": "Использовано ГБ",
"isTrial": "Пробный период"
},
"balance": {
"currentBalance": "Текущий баланс",
"addFunds": "Пополнить",
"deductFunds": "Списать",
"amount": "Сумма",
"description": "Описание",
"createTransaction": "Создать транзакцию",
"transactionHistory": "История транзакций"
},
"sync": {
"title": "Синхронизация с панелью",
"status": "Статус синхронизации",
"lastSync": "Последняя синхронизация",
"neverSynced": "Никогда",
"botData": "Данные бота",
"panelData": "Данные панели",
"notFound": "Не найден в панели",
"differences": "Различия",
"noDifferences": "Различий нет",
"syncFromPanel": "Синхронизировать из панели",
"syncToPanel": "Синхронизировать в панель",
"remawave_uuid": "Remnawave UUID",
"notLinked": "Не привязан"
},
"actions": {
"block": "Заблокировать",
"unblock": "Разблокировать",
"delete": "Удалить",
"blockReason": "Причина блокировки",
"confirmBlock": "Подтвердить блокировку",
"confirmDelete": "Подтвердить удаление"
},
"messages": {
"loadError": "Не удалось загрузить пользователей",
"userLoadError": "Не удалось загрузить пользователя",
"balanceUpdated": "Баланс обновлён",
"balanceError": "Ошибка обновления баланса",
"subscriptionUpdated": "Подписка обновлена",
"subscriptionError": "Ошибка обновления подписки",
"statusUpdated": "Статус обновлён",
"statusError": "Ошибка обновления статуса",
"syncSuccess": "Синхронизация выполнена",
"syncError": "Ошибка синхронизации"
}
},
"profile": {
"title": "Профиль",
"accountInfo": "Информация об аккаунте",

View File

@@ -167,8 +167,8 @@
"topUpBalance": "充值余额",
"paymentMethods": {
"yookassa": {
"name": "银行卡",
"description": "通过银行卡支付"
"name": "YooKassa",
"description": "通过YooKassa支付"
},
"cryptobot": {
"name": "CryptoBot",
@@ -334,7 +334,8 @@
"apps": "应用",
"wheel": "转盘",
"tariffs": "套餐",
"servers": "服务器"
"servers": "服务器",
"broadcasts": "群发"
},
"panel": {
"title": "管理面板",
@@ -345,7 +346,8 @@
"appsDesc": "管理连接应用",
"wheelDesc": "配置幸运转盘和奖品",
"tariffsDesc": "管理套餐计划",
"serversDesc": "配置VPN服务器"
"serversDesc": "配置VPN服务器",
"broadcastsDesc": "向用户群发消息"
},
"wheel": {
"title": "幸运转盘设置",
@@ -405,6 +407,32 @@
"topWins": "最高奖品"
}
},
"broadcasts": {
"title": "群发",
"subtitle": "向用户群发消息",
"create": "创建群发",
"empty": "暂无群发",
"selectFilter": "选择受众",
"selectFilterPlaceholder": "选择筛选条件...",
"recipients": "人",
"messageText": "消息内容",
"messageTextPlaceholder": "输入群发消息...",
"media": "媒体文件",
"addMedia": "添加媒体",
"uploading": "上传中...",
"buttons": "按钮",
"willBeSent": "将发送给",
"users": "用户",
"send": "发送",
"stop": "停止",
"progress": "进度",
"total": "总计",
"sent": "已发送",
"failed": "失败",
"filter": "筛选",
"message": "消息",
"unknownAdmin": "未知管理员"
},
"settings": {
"title": "系统设置",
"allCategories": "所有分类",