feat: landing analytics goals, daily bar chart, referrer tracking, contact persistence

- Add per-landing analytics goals (view/click) with admin editor toggle
- Add sticky pay button option for mobile landing pages
- Add daily purchases bar chart (created vs paid) to landing stats
- Replace single purchase count with created/paid split in stats summary
- Add referrer tracking to purchases with hostname display in stats
- Add time display to purchase cards alongside date
- Pass user timezone to stats API for correct daily grouping
- Clamp referrer (500 chars) and subid (255 chars) to backend limits
- Persist contact value per-landing-slug in localStorage
- Fire buy_success analytics goal on successful delivery
- Export USER_TIMEZONE from format utils
- Add analytics/stats translations for fa.json and zh.json locales

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Fringg
2026-04-29 09:17:52 +03:00
parent a50bd39df2
commit 020f4c95e2
11 changed files with 482 additions and 79 deletions

View File

@@ -3381,7 +3381,70 @@
"loadingPeriods": "در حال بارگذاری...",
"periodDaySuffix": "روز",
"localeTab": "زبان",
"localeHint": "زبان را تغییر دهید تا متن را به آن زبان ویرایش کنید"
"localeHint": "زبان را تغییر دهید تا متن را به آن زبان ویرایش کنید",
"discount": "تخفیف",
"discountEnabled": "فعال‌سازی تخفیف",
"discountPercent": "تخفیف %",
"discountStartsAt": "تاریخ شروع",
"discountEndsAt": "تاریخ پایان",
"discountBadge": "متن بنر (اختیاری)",
"discountBadgePlaceholder": "مثلاً حراج بهاره!",
"discountOverrides": "تخفیف‌های جداگانه برای هر طرح",
"discountOverridesHint": "خالی بگذارید تا از تخفیف عمومی استفاده شود",
"discountPreview": "پیش‌نمایش",
"discountActive": "تخفیف",
"background": "پس‌زمینه متحرک",
"analytics": "تحلیل‌ها",
"viewGoal": "هدف بازدید",
"clickGoal": "هدف کلیک پرداخت",
"statistics": "آمار",
"stats": {
"title": "آمار صفحه فرود",
"totalPurchases": "خریدها",
"revenue": "درآمد",
"giftPurchases": "هدایا",
"regularPurchases": "عادی",
"conversionRate": "نرخ تبدیل",
"avgPurchase": "میانگین خرید",
"dailyChart": "خرید و درآمد روزانه",
"tariffChart": "توزیع طرح‌ها",
"giftBreakdown": "هدایا در مقابل عادی",
"purchases": "خریدها",
"revenueLabel": "درآمد",
"gifts": "هدایا",
"regular": "عادی",
"created": "ایجاد شده",
"successful": "موفق",
"funnel": "قیف",
"loadError": "بارگذاری آمار ناموفق بود",
"noPurchases": "خریدی وجود ندارد",
"paid": "پرداخت شده"
},
"purchases": {
"title": "خریدها",
"contact": "مخاطب",
"recipient": "گیرنده",
"tariff": "طرح",
"period": "دوره",
"days": "روز",
"price": "قیمت",
"method": "روش",
"date": "تاریخ",
"gift": "هدیه",
"forSelf": "برای خود",
"allStatuses": "همه وضعیت‌ها",
"status_pending": "در انتظار",
"status_paid": "پرداخت شده",
"status_delivered": "تحویل شده",
"status_pending_activation": "در انتظار فعال‌سازی",
"status_failed": "ناموفق",
"status_expired": "منقضی شده",
"noPurchases": "خریدی وجود ندارد",
"showing": "نمایش {{from}}{{to}} از {{total}}",
"page": "صفحه {{current}} از {{total}}",
"prev": "قبلی",
"next": "بعدی"
}
},
"infoPages": {
"title": "صفحات اطلاعات",