feat: add admin pinned messages section

- API client with full CRUD, broadcast, activate/deactivate, unpin endpoints
- List page with active/inactive badges, action buttons, pagination
- Create/edit form with content editor, media upload, display settings toggles
- Routes and navigation in admin marketing group
- i18n translations for ru, en, fa, zh
This commit is contained in:
Fringg
2026-02-12 19:33:18 +03:00
parent a0b10e688c
commit aa5113b8e3
9 changed files with 1203 additions and 8 deletions

View File

@@ -768,7 +768,8 @@
"promocodes": "Promo Codes",
"promoGroups": "Discount Groups",
"trafficUsage": "Traffic Usage",
"updates": "Updates"
"updates": "Updates",
"pinnedMessages": "Pinned Messages"
},
"panel": {
"title": "Admin Panel",
@@ -792,7 +793,8 @@
"promocodesDesc": "Manage promo codes",
"promoGroupsDesc": "Discount groups for users",
"trafficUsageDesc": "Per-user traffic by nodes",
"updatesDesc": "Bot & cabinet versions"
"updatesDesc": "Bot & cabinet versions",
"pinnedMessagesDesc": "Manage pinned messages for users"
},
"trafficUsage": {
"title": "Traffic Usage",
@@ -1157,6 +1159,48 @@
"bothCreated": "Broadcasts created",
"atLeastOneChannel": "Select at least one channel"
},
"pinnedMessages": {
"title": "Pinned Messages",
"subtitle": "Manage pinned messages for users",
"create": "Create",
"empty": "No pinned messages",
"content": "Message text",
"contentPlaceholder": "Enter pinned message text...",
"noContent": "No text",
"media": "Media file",
"addMedia": "Add media",
"uploading": "Uploading...",
"settings": "Settings",
"sendBeforeMenu": "Send before menu",
"sendOnEveryStart": "Send on every start",
"broadcast": "Broadcast",
"broadcastOnCreate": "Broadcast on create",
"broadcastConfirm": "Broadcast pinned message to all active users?",
"broadcastToAll": "Broadcast to all",
"activate": "Activate",
"deactivate": "Deactivate",
"unpin": "Unpin",
"unpinAll": "Unpin for everyone",
"unpinConfirm": "Unpin message for all users?",
"delete": "Delete",
"deleteConfirm": "Delete this pinned message?",
"active": "Active",
"inactive": "Inactive",
"prev": "Previous",
"next": "Next",
"createSuccess": "Pinned message created",
"updateSuccess": "Message updated",
"deleteSuccess": "Message deleted",
"activateSuccess": "Message activated",
"deactivateSuccess": "Message deactivated",
"broadcastSuccess": "Broadcast completed",
"unpinSuccess": "Messages unpinned",
"sentCount": "Sent",
"failedCount": "Failed",
"unpinnedCount": "Unpinned",
"editMessage": "Edit",
"cantDeleteActive": "Cannot delete active message"
},
"settings": {
"title": "System Settings",
"allCategories": "All categories",

View File

@@ -649,7 +649,8 @@
"remnawave": "RemnaWave",
"users": "کاربران",
"trafficUsage": "مصرف ترافیک",
"updates": "به‌روزرسانی‌ها"
"updates": "به‌روزرسانی‌ها",
"pinnedMessages": "پیام‌های سنجاق‌شده"
},
"panel": {
"title": "پنل مدیریت",
@@ -673,7 +674,8 @@
"remnawaveDesc": "مدیریت پنل و آمار",
"usersDesc": "مدیریت کاربران ربات",
"trafficUsageDesc": "ترافیک هر کاربر بر اساس نود",
"updatesDesc": "نسخه‌های ربات و کابینت"
"updatesDesc": "نسخه‌های ربات و کابینت",
"pinnedMessagesDesc": "مدیریت پیام‌های سنجاق‌شده"
},
"trafficUsage": {
"title": "مصرف ترافیک",
@@ -861,6 +863,48 @@
"bothCreated": "پیام‌رسانی‌ها ایجاد شدند",
"atLeastOneChannel": "حداقل یک کانال را انتخاب کنید"
},
"pinnedMessages": {
"title": "Pinned Messages",
"subtitle": "Manage pinned messages for users",
"create": "Create",
"empty": "No pinned messages",
"content": "Message text",
"contentPlaceholder": "Enter pinned message text...",
"noContent": "No text",
"media": "Media file",
"addMedia": "Add media",
"uploading": "Uploading...",
"settings": "Settings",
"sendBeforeMenu": "Send before menu",
"sendOnEveryStart": "Send on every start",
"broadcast": "Broadcast",
"broadcastOnCreate": "Broadcast on create",
"broadcastConfirm": "Broadcast pinned message to all active users?",
"broadcastToAll": "Broadcast to all",
"activate": "Activate",
"deactivate": "Deactivate",
"unpin": "Unpin",
"unpinAll": "Unpin for everyone",
"unpinConfirm": "Unpin message for all users?",
"delete": "Delete",
"deleteConfirm": "Delete this pinned message?",
"active": "Active",
"inactive": "Inactive",
"prev": "Previous",
"next": "Next",
"createSuccess": "Pinned message created",
"updateSuccess": "Message updated",
"deleteSuccess": "Message deleted",
"activateSuccess": "Message activated",
"deactivateSuccess": "Message deactivated",
"broadcastSuccess": "Broadcast completed",
"unpinSuccess": "Messages unpinned",
"sentCount": "Sent",
"failedCount": "Failed",
"unpinnedCount": "Unpinned",
"editMessage": "Edit",
"cantDeleteActive": "Cannot delete active message"
},
"payments": {
"title": "تأیید پرداخت",
"description": "پرداخت‌های معلق در ۲۴ ساعت گذشته",

View File

@@ -789,7 +789,8 @@
"promocodes": "Промокоды",
"promoGroups": "Группы скидок",
"trafficUsage": "Расход трафика",
"updates": "Обновления"
"updates": "Обновления",
"pinnedMessages": "Закреплённые"
},
"panel": {
"title": "Панель администратора",
@@ -813,7 +814,8 @@
"promocodesDesc": "Управление промокодами",
"promoGroupsDesc": "Группы скидок для пользователей",
"trafficUsageDesc": "Трафик пользователей по нодам",
"updatesDesc": "Версии бота и кабинета"
"updatesDesc": "Версии бота и кабинета",
"pinnedMessagesDesc": "Управление закреплёнными сообщениями"
},
"trafficUsage": {
"title": "Расход трафика",
@@ -1182,6 +1184,48 @@
"bothCreated": "Рассылки созданы",
"atLeastOneChannel": "Выберите хотя бы один канал"
},
"pinnedMessages": {
"title": "Закреплённые сообщения",
"subtitle": "Управление закреплёнными сообщениями для пользователей",
"create": "Создать",
"empty": "Нет закреплённых сообщений",
"content": "Текст сообщения",
"contentPlaceholder": "Введите текст закреплённого сообщения...",
"noContent": "Без текста",
"media": "Медиафайл",
"addMedia": "Добавить медиа",
"uploading": "Загрузка...",
"settings": "Настройки",
"sendBeforeMenu": "Отправлять перед меню",
"sendOnEveryStart": "Отправлять при каждом старте",
"broadcast": "Разослать",
"broadcastOnCreate": "Разослать при создании",
"broadcastConfirm": "Разослать закреплённое сообщение всем активным пользователям?",
"broadcastToAll": "Разослать всем",
"activate": "Активировать",
"deactivate": "Деактивировать",
"unpin": "Открепить",
"unpinAll": "Открепить у всех",
"unpinConfirm": "Открепить сообщение у всех пользователей?",
"delete": "Удалить",
"deleteConfirm": "Удалить это закреплённое сообщение?",
"active": "Активно",
"inactive": "Неактивно",
"prev": "Назад",
"next": "Далее",
"createSuccess": "Закреплённое сообщение создано",
"updateSuccess": "Сообщение обновлено",
"deleteSuccess": "Сообщение удалено",
"activateSuccess": "Сообщение активировано",
"deactivateSuccess": "Сообщение деактивировано",
"broadcastSuccess": "Рассылка завершена",
"unpinSuccess": "Сообщения откреплены",
"sentCount": "Отправлено",
"failedCount": "Ошибки",
"unpinnedCount": "Откреплено",
"editMessage": "Редактировать",
"cantDeleteActive": "Нельзя удалить активное сообщение"
},
"settings": {
"title": "Настройки системы",
"allCategories": "Все категории",

View File

@@ -649,7 +649,8 @@
"remnawave": "RemnaWave",
"users": "用户",
"trafficUsage": "流量使用",
"updates": "更新"
"updates": "更新",
"pinnedMessages": "置顶消息"
},
"panel": {
"title": "管理面板",
@@ -673,7 +674,8 @@
"remnawaveDesc": "面板管理和统计",
"usersDesc": "管理机器人用户",
"trafficUsageDesc": "按节点统计用户流量",
"updatesDesc": "机器人和面板版本"
"updatesDesc": "机器人和面板版本",
"pinnedMessagesDesc": "管理用户置顶消息"
},
"trafficUsage": {
"title": "流量使用",
@@ -913,6 +915,48 @@
"bothCreated": "群发已创建",
"atLeastOneChannel": "请至少选择一个渠道"
},
"pinnedMessages": {
"title": "置顶消息",
"subtitle": "管理用户置顶消息",
"create": "创建",
"empty": "暂无置顶消息",
"content": "消息文本",
"contentPlaceholder": "输入置顶消息文本...",
"noContent": "无文本",
"media": "媒体文件",
"addMedia": "添加媒体",
"uploading": "上传中...",
"settings": "设置",
"sendBeforeMenu": "菜单前发送",
"sendOnEveryStart": "每次启动时发送",
"broadcast": "广播",
"broadcastOnCreate": "创建时广播",
"broadcastConfirm": "向所有活跃用户广播置顶消息?",
"broadcastToAll": "广播给所有人",
"activate": "激活",
"deactivate": "停用",
"unpin": "取消置顶",
"unpinAll": "取消所有人的置顶",
"unpinConfirm": "取消所有用户的置顶消息?",
"delete": "删除",
"deleteConfirm": "删除此置顶消息?",
"active": "活跃",
"inactive": "不活跃",
"prev": "上一页",
"next": "下一页",
"createSuccess": "置顶消息已创建",
"updateSuccess": "消息已更新",
"deleteSuccess": "消息已删除",
"activateSuccess": "消息已激活",
"deactivateSuccess": "消息已停用",
"broadcastSuccess": "广播完成",
"unpinSuccess": "消息已取消置顶",
"sentCount": "已发送",
"failedCount": "失败",
"unpinnedCount": "已取消置顶",
"editMessage": "编辑",
"cantDeleteActive": "无法删除活跃消息"
},
"settings": {
"title": "系统设置",
"allCategories": "所有分类",