diff --git a/src/api/admin.ts b/src/api/admin.ts
index acc3d91..cc935f6 100644
--- a/src/api/admin.ts
+++ b/src/api/admin.ts
@@ -59,6 +59,8 @@ export interface TicketSettings {
sla_check_interval_seconds: number
sla_reminder_cooldown_minutes: number
support_system_mode: string // tickets, contact, both
+ cabinet_user_notifications_enabled: boolean
+ cabinet_admin_notifications_enabled: boolean
}
export interface TicketSettingsUpdate {
@@ -67,6 +69,8 @@ export interface TicketSettingsUpdate {
sla_check_interval_seconds?: number
sla_reminder_cooldown_minutes?: number
support_system_mode?: string
+ cabinet_user_notifications_enabled?: boolean
+ cabinet_admin_notifications_enabled?: boolean
}
export interface AdminTicketListResponse {
diff --git a/src/components/layout/Layout.tsx b/src/components/layout/Layout.tsx
index ad725d1..c8d27d9 100644
--- a/src/components/layout/Layout.tsx
+++ b/src/components/layout/Layout.tsx
@@ -338,7 +338,7 @@ export default function Layout({ children }: LayoutProps) {
)}
-
+
{/* Profile - Desktop */}
diff --git a/src/locales/en.json b/src/locales/en.json
index 4e85c02..ab9d0ef 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -35,6 +35,20 @@
"info": "Info",
"wheel": "Fortune Wheel"
},
+ "notifications": {
+ "ticketNotifications": "Ticket Notifications",
+ "markAllRead": "Mark all read",
+ "noNotifications": "No notifications",
+ "justNow": "Just now",
+ "minutesAgo": "{{count}} min ago",
+ "hoursAgo": "{{count}} h ago",
+ "daysAgo": "{{count}} d ago",
+ "viewAll": "View all tickets",
+ "newNotification": "New notification",
+ "clickToView": "Click to view",
+ "newTicket": "New ticket: {{title}}",
+ "newReply": "New reply in ticket"
+ },
"auth": {
"login": "Login",
"register": "Register",
@@ -732,7 +746,12 @@
"reminderCooldown": "Reminder interval (minutes)",
"reminderCooldownDesc": "Minimum time between reminders (1-120 minutes)",
"settingsUpdateError": "Error saving settings",
- "copyTelegramId": "Click to copy Telegram ID"
+ "copyTelegramId": "Click to copy Telegram ID",
+ "cabinetNotifications": "Cabinet Notifications",
+ "userNotificationsEnabled": "User Notifications",
+ "userNotificationsEnabledDesc": "Send notifications to users about admin replies",
+ "adminNotificationsEnabled": "Admin Notifications",
+ "adminNotificationsEnabledDesc": "Send notifications to admins about new tickets and replies"
},
"tariffs": {
"title": "Tariff Management",
diff --git a/src/locales/ru.json b/src/locales/ru.json
index e46a052..9cb1f19 100644
--- a/src/locales/ru.json
+++ b/src/locales/ru.json
@@ -35,6 +35,20 @@
"info": "Информация",
"wheel": "Колесо удачи"
},
+ "notifications": {
+ "ticketNotifications": "Уведомления о тикетах",
+ "markAllRead": "Прочитать все",
+ "noNotifications": "Нет уведомлений",
+ "justNow": "Только что",
+ "minutesAgo": "{{count}} мин. назад",
+ "hoursAgo": "{{count}} ч. назад",
+ "daysAgo": "{{count}} д. назад",
+ "viewAll": "Все тикеты",
+ "newNotification": "Новое уведомление",
+ "clickToView": "Нажмите для просмотра",
+ "newTicket": "Новый тикет: {{title}}",
+ "newReply": "Новый ответ в тикете"
+ },
"auth": {
"login": "Вход",
"register": "Регистрация",
@@ -732,7 +746,12 @@
"reminderCooldown": "Интервал напоминаний (минуты)",
"reminderCooldownDesc": "Минимальное время между напоминаниями (1-120 минут)",
"settingsUpdateError": "Ошибка сохранения настроек",
- "copyTelegramId": "Нажмите чтобы скопировать Telegram ID"
+ "copyTelegramId": "Нажмите чтобы скопировать Telegram ID",
+ "cabinetNotifications": "Уведомления в кабинете",
+ "userNotificationsEnabled": "Уведомления для пользователей",
+ "userNotificationsEnabledDesc": "Отправлять уведомления пользователям об ответах админа",
+ "adminNotificationsEnabled": "Уведомления для админов",
+ "adminNotificationsEnabledDesc": "Отправлять уведомления админам о новых тикетах и ответах"
},
"tariffs": {
"title": "Управление тарифами",
diff --git a/src/pages/AdminTickets.tsx b/src/pages/AdminTickets.tsx
index 9d6b622..1206b13 100644
--- a/src/pages/AdminTickets.tsx
+++ b/src/pages/AdminTickets.tsx
@@ -460,6 +460,8 @@ function TicketSettingsModal({ onClose }: { onClose: () => void }) {
sla_check_interval_seconds: settings?.sla_check_interval_seconds ?? 60,
sla_reminder_cooldown_minutes: settings?.sla_reminder_cooldown_minutes ?? 15,
support_system_mode: settings?.support_system_mode ?? 'both',
+ cabinet_user_notifications_enabled: settings?.cabinet_user_notifications_enabled ?? true,
+ cabinet_admin_notifications_enabled: settings?.cabinet_admin_notifications_enabled ?? true,
})
// Update form when settings load
@@ -471,6 +473,8 @@ function TicketSettingsModal({ onClose }: { onClose: () => void }) {
sla_check_interval_seconds: settings.sla_check_interval_seconds,
sla_reminder_cooldown_minutes: settings.sla_reminder_cooldown_minutes,
support_system_mode: settings.support_system_mode,
+ cabinet_user_notifications_enabled: settings.cabinet_user_notifications_enabled ?? true,
+ cabinet_admin_notifications_enabled: settings.cabinet_admin_notifications_enabled ?? true,
})
}
}, [settings])
@@ -526,6 +530,43 @@ function TicketSettingsModal({ onClose }: { onClose: () => void }) {
{t('admin.tickets.supportModeDesc')}
+ {/* Cabinet Notifications */}
+
+
{t('admin.tickets.cabinetNotifications')}
+
+ {/* User Notifications */}
+
+
+
+
+ {/* Admin Notifications */}
+
+
+
+
+
{t('admin.tickets.slaSettings')}
diff --git a/src/types/index.ts b/src/types/index.ts
index d040af7..a71cefe 100644
--- a/src/types/index.ts
+++ b/src/types/index.ts
@@ -517,21 +517,33 @@ export interface ManualCheckResponse {
new_status: string | null
}
-// Ticket notification types
+// Ticket notifications types
export interface TicketNotification {
id: number
ticket_id: number
- notification_type: string
- message: string
+ notification_type: 'new_ticket' | 'admin_reply' | 'user_reply'
+ message: string | null
is_read: boolean
created_at: string
+ read_at: string | null
}
export interface TicketNotificationList {
items: TicketNotification[]
- total: number
+ unread_count: number
}
export interface UnreadCountResponse {
unread_count: number
}
+
+// Extended TicketSettings with cabinet notifications
+export interface TicketSettings {
+ sla_enabled: boolean
+ sla_minutes: number
+ sla_check_interval_seconds: number
+ sla_reminder_cooldown_minutes: number
+ support_system_mode: string
+ cabinet_user_notifications_enabled: boolean
+ cabinet_admin_notifications_enabled: boolean
+}