feat: add Referrals tab to admin user detail page

- New Рефералы tab with three sections:
  - Referred By: shows who referred this user, assign/remove referrer
  - Stats grid: total referrals, earnings, commission, referral code
  - Referrals list: all referred users with navigate and remove buttons
- User search with debounce for assigning referrer
- Shows warning when selected user already has a referrer
- API methods: assignReferrer, removeReferrer, removeReferral
- i18n translations for all 4 locales (en, ru, zh, fa)
This commit is contained in:
Fringg
2026-03-29 03:43:47 +03:00
parent 3e6c0212a6
commit e32663f291
6 changed files with 444 additions and 6 deletions

View File

@@ -2940,7 +2940,8 @@
"balance": "Balance",
"sync": "Synchronization",
"tickets": "Tickets",
"gifts": "Gifts"
"gifts": "Gifts",
"referrals": "Referrals"
},
"noTickets": "No tickets from this user",
"ticketsCount": "tickets",
@@ -3100,6 +3101,26 @@
"unknownUser": "Unknown",
"totalSent": "Total sent",
"totalReceived": "Total received"
},
"referrals": {
"referredBy": "Referred By",
"noReferrer": "No referrer assigned",
"assignReferrer": "Assign Referrer",
"removeReferrer": "Remove",
"referrerAssigned": "Referrer assigned successfully",
"referrerRemoved": "Referrer removed successfully",
"totalReferrals": "Total Referrals",
"totalEarnings": "Total Earnings",
"commission": "Commission",
"referralCode": "Referral Code",
"default": "default",
"referralsList": "Referrals",
"noReferrals": "No referrals yet",
"removeReferral": "Remove referral",
"referralRemoved": "Referral removed successfully",
"searchPlaceholder": "Search by name, email, or Telegram ID...",
"alreadyReferred": "already has referrer",
"noUsersFound": "No users found"
}
}
},

View File

@@ -2562,7 +2562,8 @@
"balance": "موجودی",
"sync": "همگام‌سازی",
"tickets": "تیکت‌ها",
"gifts": "هدایا"
"gifts": "هدایا",
"referrals": "معرفی‌ها"
},
"noTickets": "این کاربر تیکتی ندارد",
"ticketsCount": "تیکت",
@@ -2718,6 +2719,26 @@
"unknownUser": "ناشناس",
"totalSent": "کل ارسال شده",
"totalReceived": "کل دریافت شده"
},
"referrals": {
"referredBy": "معرفی‌شده توسط",
"noReferrer": "معرفی‌کننده‌ای تعیین نشده",
"assignReferrer": "تعیین معرفی‌کننده",
"removeReferrer": "حذف",
"referrerAssigned": "معرفی‌کننده تعیین شد",
"referrerRemoved": "معرفی‌کننده حذف شد",
"totalReferrals": "کل معرفی‌ها",
"totalEarnings": "کل درآمد",
"commission": "کمیسیون",
"referralCode": "کد معرفی",
"default": "پیش‌فرض",
"referralsList": "لیست معرفی‌ها",
"noReferrals": "هنوز معرفی‌ای نیست",
"removeReferral": "حذف معرفی",
"referralRemoved": "معرفی حذف شد",
"searchPlaceholder": "جستجو بر اساس نام، ایمیل یا شناسه تلگرام...",
"alreadyReferred": "قبلاً معرفی شده",
"noUsersFound": "کاربری یافت نشد"
}
}
},

View File

@@ -3452,7 +3452,8 @@
"balance": "Баланс",
"sync": "Синхронизация",
"tickets": "Тикеты",
"gifts": "Подарки"
"gifts": "Подарки",
"referrals": "Рефералы"
},
"noTickets": "У пользователя нет тикетов",
"ticketsCount": "тикетов",
@@ -3611,6 +3612,26 @@
"unknownUser": "Неизвестный",
"totalSent": "Всего отправлено",
"totalReceived": "Всего получено"
},
"referrals": {
"referredBy": "Приглашён",
"noReferrer": "Реферер не назначен",
"assignReferrer": "Назначить реферера",
"removeReferrer": "Удалить",
"referrerAssigned": "Реферер назначен",
"referrerRemoved": "Реферер удалён",
"totalReferrals": "Всего рефералов",
"totalEarnings": "Всего заработано",
"commission": "Комиссия",
"referralCode": "Реферальный код",
"default": "стандарт",
"referralsList": "Рефералы",
"noReferrals": "Рефералов пока нет",
"removeReferral": "Удалить реферала",
"referralRemoved": "Реферал удалён",
"searchPlaceholder": "Поиск по имени, email или Telegram ID...",
"alreadyReferred": "уже чей-то реферал",
"noUsersFound": "Пользователи не найдены"
}
}
},

View File

@@ -2561,7 +2561,8 @@
"balance": "余额",
"sync": "同步",
"tickets": "工单",
"gifts": "礼物"
"gifts": "礼物",
"referrals": "推荐"
},
"noTickets": "该用户没有工单",
"ticketsCount": "个工单",
@@ -2717,6 +2718,26 @@
"unknownUser": "未知",
"totalSent": "已发送总数",
"totalReceived": "已收到总数"
},
"referrals": {
"referredBy": "推荐人",
"noReferrer": "未分配推荐人",
"assignReferrer": "分配推荐人",
"removeReferrer": "移除",
"referrerAssigned": "推荐人已分配",
"referrerRemoved": "推荐人已移除",
"totalReferrals": "总推荐数",
"totalEarnings": "总收益",
"commission": "佣金",
"referralCode": "推荐码",
"default": "默认",
"referralsList": "推荐列表",
"noReferrals": "暂无推荐",
"removeReferral": "移除推荐",
"referralRemoved": "推荐已移除",
"searchPlaceholder": "按名称、邮箱或 Telegram ID 搜索...",
"alreadyReferred": "已有推荐人",
"noUsersFound": "未找到用户"
}
}
},