diff --git a/src/components/Toast.tsx b/src/components/Toast.tsx index 15f6857..2404ed7 100644 --- a/src/components/Toast.tsx +++ b/src/components/Toast.tsx @@ -97,28 +97,32 @@ function ToastItem({ toast, onClose }: { toast: Toast; onClose: () => void }) { const typeStyles = { success: { - bg: 'bg-gradient-to-r from-success-500/20 to-success-600/10', - border: 'border-success-500/30', + bg: 'bg-dark-800', + accent: 'bg-gradient-to-r from-success-500/30 to-transparent', + border: 'border-success-500/50', icon: 'text-success-400', - iconBg: 'bg-success-500/20', + iconBg: 'bg-success-500/30', }, error: { - bg: 'bg-gradient-to-r from-error-500/20 to-error-600/10', - border: 'border-error-500/30', + bg: 'bg-dark-800', + accent: 'bg-gradient-to-r from-error-500/30 to-transparent', + border: 'border-error-500/50', icon: 'text-error-400', - iconBg: 'bg-error-500/20', + iconBg: 'bg-error-500/30', }, warning: { - bg: 'bg-gradient-to-r from-warning-500/20 to-warning-600/10', - border: 'border-warning-500/30', + bg: 'bg-dark-800', + accent: 'bg-gradient-to-r from-warning-500/30 to-transparent', + border: 'border-warning-500/50', icon: 'text-warning-400', - iconBg: 'bg-warning-500/20', + iconBg: 'bg-warning-500/30', }, info: { - bg: 'bg-gradient-to-r from-accent-500/20 to-accent-600/10', - border: 'border-accent-500/30', + bg: 'bg-dark-800', + accent: 'bg-gradient-to-r from-accent-500/30 to-transparent', + border: 'border-accent-500/50', icon: 'text-accent-400', - iconBg: 'bg-accent-500/20', + iconBg: 'bg-accent-500/30', }, }; @@ -181,11 +185,11 @@ function ToastItem({ toast, onClose }: { toast: Toast; onClose: () => void }) { return (
- {/* Glow effect */} -
+ {/* Color accent */} +
diff --git a/src/locales/en.json b/src/locales/en.json index 1b61b52..64dc1d3 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1215,9 +1215,9 @@ "deactivate": "Deactivate", "toggleTrial": "Toggle Trial", "delete": "Delete", - "cannotDeleteHasSubscriptions": "Cannot delete: has active subscriptions", "confirmDelete": "Delete tariff?", "confirmDeleteText": "This action cannot be undone. The tariff will be permanently deleted.", + "confirmDeleteWithSubscriptions": "This tariff has {{count}} active subscriptions. After deletion, users will need to select a new tariff when renewing.", "deleteSuccess": "Tariff deleted successfully", "days": "days", "days_one": "{{count}} day", diff --git a/src/locales/fa.json b/src/locales/fa.json index 6a0c26a..2b09f14 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -989,9 +989,9 @@ "deactivate": "غیرفعال‌سازی", "toggleTrial": "تغییر آزمایشی", "delete": "حذف", - "cannotDeleteHasSubscriptions": "حذف ممکن نیست: اشتراک‌های فعال وجود دارد", "confirmDelete": "تعرفه حذف شود؟", "confirmDeleteText": "این عمل قابل بازگشت نیست. تعرفه برای همیشه حذف می‌شود.", + "confirmDeleteWithSubscriptions": "این تعرفه {{count}} اشتراک فعال دارد. پس از حذف، کاربران هنگام تمدید باید تعرفه جدید انتخاب کنند.", "deleteSuccess": "تعرفه با موفقیت حذف شد", "days": "روز", "days_other": "{{count}} روز", diff --git a/src/locales/ru.json b/src/locales/ru.json index 181cca0..5e8c5cb 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -1725,9 +1725,9 @@ "deactivate": "Деактивировать", "toggleTrial": "Переключить триал", "delete": "Удалить", - "cannotDeleteHasSubscriptions": "Нельзя удалить: есть активные подписки", "confirmDelete": "Удалить тариф?", - "confirmDeleteText": "Это действие нельзя отменить. Тариф будет удален навсегда.", + "confirmDeleteText": "Это действие нельзя отменить. Тариф будет удалён навсегда.", + "confirmDeleteWithSubscriptions": "У этого тарифа {{count}} активных подписок. При удалении пользователям потребуется выбрать новый тариф при продлении.", "deleteSuccess": "Тариф успешно удален", "days": "дней", "days_one": "{{count}} день", diff --git a/src/locales/zh.json b/src/locales/zh.json index 061f456..5539eeb 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -1027,9 +1027,9 @@ "deactivate": "停用", "toggleTrial": "切换试用", "delete": "删除", - "cannotDeleteHasSubscriptions": "无法删除:有活跃订阅", "confirmDelete": "删除套餐?", "confirmDeleteText": "此操作不可撤销。套餐将被永久删除。", + "confirmDeleteWithSubscriptions": "此套餐有 {{count}} 个活跃订阅。删除后,用户续订时需要选择新套餐。", "deleteSuccess": "套餐删除成功", "days": "天", "days_other": "{{count}} 天", diff --git a/src/pages/AdminTariffs.tsx b/src/pages/AdminTariffs.tsx index 60a9867..b05d426 100644 --- a/src/pages/AdminTariffs.tsx +++ b/src/pages/AdminTariffs.tsx @@ -67,13 +67,16 @@ export default function AdminTariffs() { }); const handleDelete = async (tariff: TariffListItem) => { - if (tariff.subscriptions_count > 0) { - notify.warning(t('admin.tariffs.cannotDeleteHasSubscriptions')); - return; - } + // If tariff has active subscriptions, show warning but still allow deletion + const confirmText = + tariff.subscriptions_count > 0 + ? t('admin.tariffs.confirmDeleteWithSubscriptions', { + count: tariff.subscriptions_count, + }) + : t('admin.tariffs.confirmDeleteText'); const confirmed = await confirmDelete( - t('admin.tariffs.confirmDeleteText'), + confirmText, t('common.delete'), t('admin.tariffs.confirmDelete'), );