diff --git a/web/admin/messages/ar.json b/web/admin/messages/ar.json index 192b36f..9490911 100644 --- a/web/admin/messages/ar.json +++ b/web/admin/messages/ar.json @@ -1114,7 +1114,29 @@ "title": "خطط الاشتراك", "monthlyPrice": "السعر الشهري (تومان)", "maxOrders": "حد الطلبات اليومي", - "saved": "تم الحفظ" + "saved": "تم الحفظ", + "active": "مفعل", + "nameFa": "الاسم (فارسي)", + "nameEn": "الاسم (إنجليزي)", + "sortOrder": "الترتيب", + "billable": "قابل للدفع عبر الإنترنت", + "limitsTitle": "الحدود", + "featuresTitle": "الميزات", + "allFeatures": "كل الميزات", + "allFeaturesNote": "تشمل هذه الباقة جميع الميزات الحالية والمستقبلية.", + "save": "حفظ", + "limits": { + "maxOrders": "طلبات/يوم", + "maxTables": "الطاولات", + "maxTerminals": "أجهزة POS", + "maxBranches": "الفروع", + "maxCategories": "فئات القائمة", + "maxItems": "أصناف القائمة", + "maxCustomers": "العملاء", + "maxReportDays": "سجل التقارير (أيام)", + "maxSms": "رسائل/شهر", + "maxAi3d": "3D/شهر" + } }, "settings": { "title": "إعدادات التطبيق", diff --git a/web/admin/messages/en.json b/web/admin/messages/en.json index e8b8069..578d82b 100644 --- a/web/admin/messages/en.json +++ b/web/admin/messages/en.json @@ -1107,7 +1107,29 @@ "title": "Subscription plans", "monthlyPrice": "Monthly price (Toman)", "maxOrders": "Max orders per day", - "saved": "Plan saved" + "saved": "Plan saved", + "active": "Active", + "nameFa": "Name (Persian)", + "nameEn": "Name (English)", + "sortOrder": "Sort order", + "billable": "Billable online", + "limitsTitle": "Limits", + "featuresTitle": "Features", + "allFeatures": "All features", + "allFeaturesNote": "This plan includes all features (current and future).", + "save": "Save", + "limits": { + "maxOrders": "Orders/day", + "maxTables": "Tables", + "maxTerminals": "POS terminals", + "maxBranches": "Branches", + "maxCategories": "Menu categories", + "maxItems": "Menu items", + "maxCustomers": "Customers", + "maxReportDays": "Report history (days)", + "maxSms": "SMS/month", + "maxAi3d": "AI 3D/month" + } }, "settings": { "title": "Application settings", diff --git a/web/admin/messages/fa.json b/web/admin/messages/fa.json index f161721..c62bb8b 100644 --- a/web/admin/messages/fa.json +++ b/web/admin/messages/fa.json @@ -1107,7 +1107,29 @@ "title": "پلنها و قیمتگذاری", "monthlyPrice": "قیمت ماهانه (تومان)", "maxOrders": "سقف سفارش روزانه", - "saved": "پلن ذخیره شد" + "saved": "پلن ذخیره شد", + "active": "فعال", + "nameFa": "نام (فارسی)", + "nameEn": "نام (انگلیسی)", + "sortOrder": "ترتیب", + "billable": "قابل پرداخت آنلاین", + "limitsTitle": "محدودیتها", + "featuresTitle": "امکانات", + "allFeatures": "همه امکانات", + "allFeaturesNote": "این پلن به همه امکانات (فعلی و آینده) دسترسی دارد.", + "save": "ذخیره", + "limits": { + "maxOrders": "سفارش روزانه", + "maxTables": "میزها", + "maxTerminals": "پایانه POS", + "maxBranches": "شعب", + "maxCategories": "دسته منو", + "maxItems": "آیتم منو", + "maxCustomers": "مشتریان", + "maxReportDays": "تاریخچه گزارش (روز)", + "maxSms": "پیامک ماهانه", + "maxAi3d": "تولید ۳D ماهانه" + } }, "settings": { "title": "تنظیمات اپلیکیشن", diff --git a/web/admin/src/components/admin/admin-screens.tsx b/web/admin/src/components/admin/admin-screens.tsx index 0e91226..3c9883f 100644 --- a/web/admin/src/components/admin/admin-screens.tsx +++ b/web/admin/src/components/admin/admin-screens.tsx @@ -18,6 +18,7 @@ import type { AdminNotificationRow, AdminPlan, AdminStats, + PlanLimitsData, GatewayCredentials, PaymentGatewayConfig, PlatformFeature, @@ -131,45 +132,167 @@ function StatCard({ label, value }: { label: string; value: number }) { ); } -function PlanCard({ plan, onSave }: { plan: AdminPlan; onSave: (p: AdminPlan) => void }) { +const PLAN_UNLIMITED = 2147483647; + +const LIMIT_FIELDS: { key: keyof PlanLimitsData; label: string }[] = [ + { key: "maxOrdersPerDay", label: "maxOrders" }, + { key: "maxTables", label: "maxTables" }, + { key: "maxTerminals", label: "maxTerminals" }, + { key: "maxBranches", label: "maxBranches" }, + { key: "maxMenuCategories", label: "maxCategories" }, + { key: "maxMenuItems", label: "maxItems" }, + { key: "maxCustomers", label: "maxCustomers" }, + { key: "maxReportHistoryDays", label: "maxReportDays" }, + { key: "maxSmsPerMonth", label: "maxSms" }, + { key: "maxMenuAi3dPerMonth", label: "maxAi3d" }, +]; + +function LimitField({ label, value, onChange }: { label: string; value: number; onChange: (n: number) => void }) { + const unlimited = value >= PLAN_UNLIMITED; + return ( +
{plan.tier}
+{draft.tier}
+