feat: show VPN connection info and subscription request history on admin user detail

- Load panelInfo eagerly on page load (not just on subscription tab)
- Add VPN connection card to info tab: last/first connection, online status indicator, last node
- Rename "Last activity" to "Bot activity" to distinguish from VPN connection
- Show cabinet_last_login field that was never rendered
- Add collapsible subscription request history section in subscription tab with paginated table
- Add subscription request history API types and method
- Add i18n keys for all 4 locales (ru, en, zh, fa)
This commit is contained in:
Fringg
2026-04-29 06:11:12 +03:00
parent 5b1892ddbb
commit e1d2f8cee4
6 changed files with 342 additions and 2 deletions

View File

@@ -3075,6 +3075,19 @@
"language": "Language",
"registration": "Registration",
"lastActivity": "Last activity",
"botActivity": "Bot activity",
"cabinetLastLogin": "Last cabinet login",
"vpnConnection": "VPN connection",
"lastConnection": "Last connection",
"firstConnection": "First connection",
"online": "Online",
"requestHistory": "Subscription request history",
"requestHistoryTotal": "Total requests",
"requestAt": "Date",
"requestIp": "IP address",
"requestUserAgent": "Device",
"loadMore": "Show more",
"noRequests": "No requests",
"totalSpent": "Total spent",
"purchases": "Purchases",
"campaign": "Advertising campaign",

View File

@@ -2579,6 +2579,19 @@
"language": "زبان",
"registration": "ثبت‌نام",
"lastActivity": "آخرین فعالیت",
"botActivity": "فعالیت در ربات",
"cabinetLastLogin": "آخرین ورود به کابینت",
"vpnConnection": "اتصال VPN",
"lastConnection": "آخرین اتصال",
"firstConnection": "اولین اتصال",
"online": "آنلاین",
"requestHistory": "تاریخچه درخواست‌های اشتراک",
"requestHistoryTotal": "کل درخواست‌ها",
"requestAt": "تاریخ",
"requestIp": "آدرس IP",
"requestUserAgent": "دستگاه",
"loadMore": "نمایش بیشتر",
"noRequests": "بدون درخواست",
"totalSpent": "کل هزینه",
"purchases": "خریدها",
"campaign": "کمپین تبلیغاتی",

View File

@@ -3482,6 +3482,19 @@
"language": "Язык",
"registration": "Регистрация",
"lastActivity": "Последняя активность",
"botActivity": "Активность в боте",
"cabinetLastLogin": "Последний вход в кабинет",
"vpnConnection": "VPN подключение",
"lastConnection": "Последнее подключение",
"firstConnection": "Первое подключение",
"online": "Онлайн",
"requestHistory": "История запросов подписки",
"requestHistoryTotal": "Всего запросов",
"requestAt": "Дата",
"requestIp": "IP адрес",
"requestUserAgent": "Устройство",
"loadMore": "Показать ещё",
"noRequests": "Нет запросов",
"totalSpent": "Всего потрачено",
"purchases": "Покупок",
"campaign": "Рекламная кампания",

View File

@@ -2578,6 +2578,19 @@
"language": "语言",
"registration": "注册时间",
"lastActivity": "最后活跃",
"botActivity": "机器人活动",
"cabinetLastLogin": "最后登录面板",
"vpnConnection": "VPN 连接",
"lastConnection": "最后连接",
"firstConnection": "首次连接",
"online": "在线",
"requestHistory": "订阅请求历史",
"requestHistoryTotal": "总请求数",
"requestAt": "日期",
"requestIp": "IP 地址",
"requestUserAgent": "设备",
"loadMore": "显示更多",
"noRequests": "没有请求",
"totalSpent": "总消费",
"purchases": "购买次数",
"campaign": "广告活动",