feat: add referral network graph visualization page

Interactive Sigma.js + graphology graph with ForceAtlas2 web worker
layout, campaign/user node coloring, filters via nodeReducer pattern,
search highlighting, user/campaign detail side panels, and 4-locale
translations. Dependencies: sigma v3, graphology, graphology-layout-forceatlas2.
This commit is contained in:
Fringg
2026-03-19 07:56:01 +03:00
parent 84f0e4e9b4
commit 235eaec85f
23 changed files with 2126 additions and 8 deletions

View File

@@ -940,7 +940,8 @@
"policies": "سیاست‌های دسترسی",
"auditLog": "گزارش بازرسی",
"salesStats": "آمار فروش",
"landings": "صفحات فرود"
"landings": "صفحات فرود",
"referralNetwork": "شبکه ارجاع"
},
"panel": {
"title": "پنل مدیریت",
@@ -974,7 +975,8 @@
"policiesDesc": "تنظیم سیاست‌های کنترل دسترسی ABAC",
"auditLogDesc": "بررسی فعالیت سیستم و تاریخچه دسترسی",
"salesStatsDesc": "تحلیل فروش و روندها",
"landingsDesc": "صفحات خرید سریع"
"landingsDesc": "صفحات خرید سریع",
"referralNetworkDesc": "نمایش بصری گراف ارجاعات و کمپین‌ها"
},
"salesStats": {
"title": "آمار فروش",
@@ -1056,6 +1058,77 @@
},
"loadError": "بارگذاری آمار ناموفق بود"
},
"referralNetwork": {
"title": "شبکه ارجاع",
"subtitle": "نمایش بصری گراف ارجاعات و کمپین‌های تبلیغاتی",
"search": {
"placeholder": "جستجو بر اساس TG ID، @نام‌کاربری، ایمیل، کمپین...",
"noResults": "نتیجه‌ای یافت نشد",
"resultsCount": "یافت شد: {{count}}",
"clear": "پاک کردن جستجو"
},
"filters": {
"title": "فیلترها",
"campaigns": "کمپین‌ها",
"partnersOnly": "فقط شرکا",
"minReferrals": "حداقل ارجاعات",
"reset": "بازنشانی"
},
"stats": {
"totalUsers": "کاربران",
"totalReferrers": "ارجاع‌دهندگان",
"totalCampaigns": "کمپین‌ها",
"totalEarnings": "درآمد کل"
},
"legend": {
"title": "راهنما",
"regularUser": "کاربر عادی",
"activeReferrer": "ارجاع‌دهنده فعال",
"partner": "شریک",
"topReferrer": "ارجاع‌دهنده برتر (+۱۰)",
"campaignUser": "از کمپین",
"campaignNode": "کمپین تبلیغاتی"
},
"user": {
"tgId": "شناسه TG",
"email": "ایمیل",
"partner": "شریک",
"subscription": "اشتراک",
"validUntil": "تا {{date}}",
"noSubscription": "بدون اشتراک",
"personalStats": "آمار شخصی",
"totalSpent": "مجموع پرداختی",
"referralEarnings": "درآمد ارجاع",
"referralBranch": "شاخه ارجاع",
"directReferrals": "ارجاعات مستقیم",
"branchSize": "کل شاخه",
"branchRevenue": "درآمد شاخه",
"source": "منبع",
"referredBy": "معرفی شده توسط",
"fromCampaign": "کمپین",
"organic": "طبیعی"
},
"campaign": {
"startParam": "پارامتر",
"active": "فعال",
"inactive": "غیرفعال",
"directUsers": "مستقیم",
"totalNetwork": "کل شبکه",
"totalRevenue": "درآمد کل",
"conversionRate": "نرخ تبدیل",
"avgCheck": "میانگین مبلغ",
"topReferrers": "ارجاع‌دهندگان برتر کمپین"
},
"controls": {
"zoomIn": "بزرگ‌نمایی",
"zoomOut": "کوچک‌نمایی",
"resetZoom": "بازنشانی زوم",
"fullscreen": "تمام‌صفحه"
},
"loading": "بارگذاری گراف...",
"error": "خطا در بارگذاری داده‌های شبکه",
"empty": "داده‌ای برای نمایش وجود ندارد"
},
"trafficUsage": {
"title": "مصرف ترافیک",
"subtitle": "آمار ترافیک کاربران بر اساس نودها",