Add Availability Calendar, Modules system, and route refactoring
- Add AvailabilityPage with price grid (categories × dates), drag-select, channel prices, EditPanel, PeriodModal, and rate periods tab - Add ModulesContext with localStorage persistence and dynamic sidebar items - Add ModulesPage with WiFi Auth, Payments, TV Welcome, Smart Locks, OLAP Reports, Website Builder, Booking Widget modules - Add ReportsPage (OLAP analytics with KPI cards, charts, tables) - Add WebsitePage and BookingWidgetPage placeholders - Remove hotel slug from URL routing; hotel context from JWT - Add Доступность nav item in Sidebar under Управление - Fix LoginPage redirects and HotelSync branding Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
205
src/data/modulesData.ts
Normal file
205
src/data/modulesData.ts
Normal file
@@ -0,0 +1,205 @@
|
||||
import {
|
||||
Wifi, CreditCard, Tv2, KeyRound,
|
||||
BarChart3, Globe, CalendarCheck2,
|
||||
} from 'lucide-react'
|
||||
import type { ElementType } from 'react'
|
||||
|
||||
export type ModuleStatus = 'active' | 'inactive' | 'trial'
|
||||
|
||||
export interface ModuleSidebarItem {
|
||||
path: string
|
||||
label: string
|
||||
icon: ElementType
|
||||
}
|
||||
|
||||
export interface ModuleDef {
|
||||
id: string
|
||||
name: string
|
||||
tagline: string
|
||||
description: string
|
||||
icon: ElementType
|
||||
iconBg: string
|
||||
iconColor: string
|
||||
accentColor: string
|
||||
price: number
|
||||
trialDays?: number
|
||||
features: string[]
|
||||
stats?: { label: string; value: string }[]
|
||||
badge?: string
|
||||
/** Если задан — при активации модуля этот пункт появляется в сайдбаре */
|
||||
sidebarItem?: ModuleSidebarItem
|
||||
}
|
||||
|
||||
export const MODULES_DATA: ModuleDef[] = [
|
||||
{
|
||||
id: 'wifi-auth',
|
||||
name: 'Wi-Fi Авторизация',
|
||||
tagline: 'Captive portal для гостей',
|
||||
description:
|
||||
'Персонализированная страница входа в Wi-Fi с брендингом отеля. Сбор контактов гостей, автовыдача паролей, статистика подключений.',
|
||||
icon: Wifi,
|
||||
iconBg: 'bg-blue-100 dark:bg-blue-900/40',
|
||||
iconColor: 'text-blue-600 dark:text-blue-400',
|
||||
accentColor: 'bg-blue-500',
|
||||
price: 2900,
|
||||
features: [
|
||||
'Брендированная страница входа',
|
||||
'Авторизация по номеру телефона / коду бронирования',
|
||||
'Сбор email для маркетинга',
|
||||
'Ограничение скорости по тарифу номера',
|
||||
'Статистика: устройства, время онлайн, трафик',
|
||||
],
|
||||
stats: [
|
||||
{ label: 'Подключений сегодня', value: '47' },
|
||||
{ label: 'Активных устройств', value: '31' },
|
||||
{ label: 'Конверсия email', value: '68%' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'payments',
|
||||
name: 'Депозиты и страховки',
|
||||
tagline: 'Онлайн-оплата при бронировании',
|
||||
description:
|
||||
'Автоматический сбор страхового депозита и предоплаты. Интеграция с Тинькофф, СБП, ЮKassa. Умное удержание и автовозврат при выезде.',
|
||||
icon: CreditCard,
|
||||
iconBg: 'bg-emerald-100 dark:bg-emerald-900/40',
|
||||
iconColor: 'text-emerald-600 dark:text-emerald-400',
|
||||
accentColor: 'bg-emerald-500',
|
||||
price: 4900,
|
||||
trialDays: 12,
|
||||
badge: 'Популярный',
|
||||
features: [
|
||||
'Приём депозита онлайн при заезде',
|
||||
'Интеграция: Тинькофф, ЮKassa, СБП',
|
||||
'Автоматический возврат при выезде',
|
||||
'Удержание с подтверждением менеджера',
|
||||
'Отчёты и история транзакций',
|
||||
'Уведомления гостю и администратору',
|
||||
],
|
||||
stats: [
|
||||
{ label: 'Собрано за месяц', value: '₽ 184 000' },
|
||||
{ label: 'Активных депозитов', value: '14' },
|
||||
{ label: 'Возвратов сегодня', value: '3' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'tv-welcome',
|
||||
name: 'Приветствие на TV',
|
||||
tagline: 'Welcome screen в номере',
|
||||
description:
|
||||
'Персональное приветствие на телевизоре при заезде. Расписание ресторана, прогноз погоды, QR-код для заказа услуг. Поддержка Samsung, LG, Android TV.',
|
||||
icon: Tv2,
|
||||
iconBg: 'bg-violet-100 dark:bg-violet-900/40',
|
||||
iconColor: 'text-violet-600 dark:text-violet-400',
|
||||
accentColor: 'bg-violet-500',
|
||||
price: 3500,
|
||||
badge: 'Новинка',
|
||||
features: [
|
||||
'Персональное приветствие по имени гостя',
|
||||
'Расписание: ресторан, спа, трансфер',
|
||||
'Прогноз погоды и местные новости',
|
||||
'Заказ услуг и room service с TV',
|
||||
'Поддержка Samsung SSSP, LG webOS, Android TV',
|
||||
'Брендирование под стиль отеля',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'smart-locks',
|
||||
name: 'Электронные замки',
|
||||
tagline: 'Интеграция СКУД и смарт-замков',
|
||||
description:
|
||||
'Управление доступом в номера через PMS. Автовыдача кода при заезде, блокировка при выезде. Поддержка Salto, Dormakaba, TTLock и других систем.',
|
||||
icon: KeyRound,
|
||||
iconBg: 'bg-amber-100 dark:bg-amber-900/40',
|
||||
iconColor: 'text-amber-600 dark:text-amber-400',
|
||||
accentColor: 'bg-amber-500',
|
||||
price: 5900,
|
||||
features: [
|
||||
'Автовыдача PIN-кода / мобильного ключа при заезде',
|
||||
'Автоблокировка при выезде или отмене',
|
||||
'История открытий с временными метками',
|
||||
'Поддержка: Salto KS, Dormakaba, TTLock, ASSA ABLOY',
|
||||
'Экстренный доступ для персонала',
|
||||
'Интеграция с мобильным приложением гостя',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'olap-reports',
|
||||
name: 'OLAP Отчёты',
|
||||
tagline: 'Аналитика и бизнес-отчёты',
|
||||
description:
|
||||
'Глубокая аналитика по загрузке, выручке, каналам продаж и гостям. Конструктор отчётов, экспорт в Excel/PDF, автоотправка руководству.',
|
||||
icon: BarChart3,
|
||||
iconBg: 'bg-cyan-100 dark:bg-cyan-900/40',
|
||||
iconColor: 'text-cyan-600 dark:text-cyan-400',
|
||||
accentColor: 'bg-cyan-500',
|
||||
price: 3900,
|
||||
badge: 'Популярный',
|
||||
features: [
|
||||
'Загрузка (OCC), ADR, RevPAR в динамике',
|
||||
'Анализ по источникам бронирования',
|
||||
'Портрет гостя: география, повторные визиты',
|
||||
'Конструктор произвольных отчётов',
|
||||
'Экспорт в Excel, PDF, Google Sheets',
|
||||
'Автоотправка отчётов по расписанию на email',
|
||||
'Сравнение периодов и план/факт',
|
||||
],
|
||||
sidebarItem: {
|
||||
path: '/reports',
|
||||
label: 'Аналитика',
|
||||
icon: BarChart3,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'website-builder',
|
||||
name: 'Конструктор сайта',
|
||||
tagline: 'Сайт отеля без разработчика',
|
||||
description:
|
||||
'Drag & drop конструктор сайта с готовыми шаблонами для отелей. SEO-оптимизация, мультиязычность, интеграция с модулем онлайн-бронирования.',
|
||||
icon: Globe,
|
||||
iconBg: 'bg-rose-100 dark:bg-rose-900/40',
|
||||
iconColor: 'text-rose-600 dark:text-rose-400',
|
||||
accentColor: 'bg-rose-500',
|
||||
price: 4500,
|
||||
features: [
|
||||
'Готовые шаблоны для отелей и апартаментов',
|
||||
'Drag & drop редактор страниц',
|
||||
'Галерея номеров с виртуальными турами',
|
||||
'SEO-оптимизация и sitemap',
|
||||
'Мультиязычность (RU, EN, DE, ZH)',
|
||||
'Интеграция с модулем онлайн-бронирования',
|
||||
'Кастомный домен и SSL',
|
||||
],
|
||||
sidebarItem: {
|
||||
path: '/website',
|
||||
label: 'Сайт отеля',
|
||||
icon: Globe,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'booking-widget',
|
||||
name: 'Онлайн-бронирование',
|
||||
tagline: 'Виджет прямых продаж',
|
||||
description:
|
||||
'Виджет бронирования для сайта отеля с оплатой картой. Прямые продажи без комиссии OTA. Подбор номеров, тарифы, спецпредложения.',
|
||||
icon: CalendarCheck2,
|
||||
iconBg: 'bg-indigo-100 dark:bg-indigo-900/40',
|
||||
iconColor: 'text-indigo-600 dark:text-indigo-400',
|
||||
accentColor: 'bg-indigo-500',
|
||||
price: 3200,
|
||||
features: [
|
||||
'Виджет бронирования на сайт отеля',
|
||||
'Оплата картой, СБП, ЮKassa',
|
||||
'Тарифы и спецпредложения',
|
||||
'Промокоды и программа лояльности',
|
||||
'Подтверждение на email и SMS',
|
||||
'Минимизация комиссий OTA',
|
||||
'Аналитика конверсии',
|
||||
],
|
||||
sidebarItem: {
|
||||
path: '/booking-widget',
|
||||
label: 'Онлайн-бронирование',
|
||||
icon: CalendarCheck2,
|
||||
},
|
||||
},
|
||||
]
|
||||
Reference in New Issue
Block a user