From 15c3471e7ff1f0db4b8b43cbb7749be7284e03c7 Mon Sep 17 00:00:00 2001 From: HotelSync Date: Mon, 16 Mar 2026 20:51:56 +0300 Subject: [PATCH] Fix mobile responsiveness across all pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BookingsPage: hide Номер/Выезд/Источник columns on small screens, show nights inline on mobile - GuestsPage: stats grid 2→4 cols (grid-cols-2 lg:grid-cols-4), table columns hidden on mobile (md/lg breakpoints), GuestModal stats 2→4 cols on sm+ - BookingDetailPanel: full-width on mobile (w-full sm:w-[400px]) - Topbar: notifications panel full-width on mobile (w-[calc(100vw-1rem)] sm:w-96) - LoyaltyPage, MaintenancePage, DiscountsPage, TariffsPage: stats grids grid-cols-2 lg:grid-cols-4 Co-Authored-By: Claude Sonnet 4.6 --- .../bookings/BookingDetailPanel.tsx | 2 +- src/components/layout/Topbar.tsx | 2 +- src/pages/BookingsPage.tsx | 13 +++++++--- src/pages/DiscountsPage.tsx | 2 +- src/pages/GuestsPage.tsx | 26 +++++++++---------- src/pages/LoyaltyPage.tsx | 2 +- src/pages/MaintenancePage.tsx | 2 +- src/pages/TariffsPage.tsx | 2 +- 8 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/components/bookings/BookingDetailPanel.tsx b/src/components/bookings/BookingDetailPanel.tsx index 9a6268c..cf7d72e 100644 --- a/src/components/bookings/BookingDetailPanel.tsx +++ b/src/components/bookings/BookingDetailPanel.tsx @@ -171,7 +171,7 @@ export function BookingDetailPanel({ booking, room, rooms, allBookings, onClose, <>
-
+
{/* Toast notification */} {toast && ( diff --git a/src/components/layout/Topbar.tsx b/src/components/layout/Topbar.tsx index d803ceb..6916878 100644 --- a/src/components/layout/Topbar.tsx +++ b/src/components/layout/Topbar.tsx @@ -58,7 +58,7 @@ function NotificationsPanel({ onClose }: { onClose: () => void }) { : notifications return ( -
+
{/* Header */}
diff --git a/src/pages/BookingsPage.tsx b/src/pages/BookingsPage.tsx index 7cb43c0..8972277 100644 --- a/src/pages/BookingsPage.tsx +++ b/src/pages/BookingsPage.tsx @@ -187,7 +187,11 @@ export function BookingsPage() { {COLUMNS.map(col => ( {col.key ? (
{/* Stats */} -
+
{[ { label: 'Всего скидок', value: discounts.length }, { label: 'Активных', value: discounts.filter(d => d.isActive).length }, diff --git a/src/pages/GuestsPage.tsx b/src/pages/GuestsPage.tsx index f4e8833..c71eec1 100644 --- a/src/pages/GuestsPage.tsx +++ b/src/pages/GuestsPage.tsx @@ -250,7 +250,7 @@ function GuestModal({ guest, onClose }: { guest: Guest; onClose: () => void }) {
{/* Stats strip */} -
+
{[ { label: 'Визитов', value: guest.totalStays }, { label: 'Потрачено', value: `${guest.totalSpent.toLocaleString('ru-RU')} ₽` }, @@ -588,14 +588,14 @@ export function GuestsPage() { {pageTab === 'list' && <> {/* Stats */} -
+
{[ { icon: Users, label: 'Всего гостей', value: MOCK_GUESTS.length, color: 'text-brand-600 dark:text-brand-400', bg: 'bg-brand-50 dark:bg-brand-900/20' }, { icon: Award, label: 'VIP гостей', value: vipCount, color: 'text-amber-600 dark:text-amber-400', bg: 'bg-amber-50 dark:bg-amber-900/20' }, { icon: Repeat2, label: 'Постоянных', value: repeatCount, color: 'text-blue-600 dark:text-blue-400', bg: 'bg-blue-50 dark:bg-blue-900/20' }, { icon: Star, label: 'Средний рейтинг',value: avgRating, color: 'text-emerald-600 dark:text-emerald-400', bg: 'bg-emerald-50 dark:bg-emerald-900/20' }, ].map(s => ( -
+
@@ -646,12 +646,12 @@ export function GuestsPage() { Гость - Контакты - Визиты - Потрачено + Контакты + Визиты + Потрачено Рейтинг - Последний визит - Метки + Последний визит + Метки @@ -679,7 +679,7 @@ export function GuestsPage() { {guest.name}
- +
{guest.phone && (
@@ -693,13 +693,13 @@ export function GuestsPage() { )}
- +
{guest.totalStays}
- + {guest.totalSpent.toLocaleString('ru-RU')} ₽ @@ -707,10 +707,10 @@ export function GuestsPage() { - + {formatDate(guest.lastVisit)} - +
{guest.tags.map(tag => ( {/* Stats */} -
+
{[ { label: 'Участников программы', value: activeGuests, icon: User, color: 'text-brand-600 dark:text-brand-400', bg: 'bg-brand-50 dark:bg-brand-900/20' }, { label: 'Всего баллов в обороте', value: totalPoints.toLocaleString('ru-RU'), icon: TrendingUp, color: 'text-amber-600 dark:text-amber-400', bg: 'bg-amber-50 dark:bg-amber-900/20' }, diff --git a/src/pages/MaintenancePage.tsx b/src/pages/MaintenancePage.tsx index 15cef62..43315b2 100644 --- a/src/pages/MaintenancePage.tsx +++ b/src/pages/MaintenancePage.tsx @@ -378,7 +378,7 @@ export function MaintenancePage() {
{/* Stats */} -
+
{[ { label: 'Всего записей', value: records.length, cls: '' }, { label: 'Активных', value: active.length, cls: 'text-amber-600 dark:text-amber-400' }, diff --git a/src/pages/TariffsPage.tsx b/src/pages/TariffsPage.tsx index ba75119..ced2f09 100644 --- a/src/pages/TariffsPage.tsx +++ b/src/pages/TariffsPage.tsx @@ -429,7 +429,7 @@ export function TariffsPage() {
{/* Stats */} -
+
{[ { label: 'Всего тарифов', value: tariffs.length, color: 'text-slate-900 dark:text-slate-100' }, { label: 'Активных', value: activeTariffs.length, color: 'text-emerald-600 dark:text-emerald-400' },