feat: add WiFi authorization module

- Backend: hotel_wifi_settings table (migration 046), CRUD routes
- Public API endpoint /api/wifi-auth/verify for captive portal
- Auth methods: room+lastname, room+birthdate, room+any, room_only
- Frontend: WiFiPage with settings, token management, setup guide
- Guide tabs: MikroTik, UniFi, Universal with copy-paste instructions
- Sidebar: WiFi item in Settings group

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-29 12:08:51 +03:00
parent 46524077a0
commit 0088457f51
7 changed files with 886 additions and 2 deletions

View File

@@ -3,7 +3,7 @@ import { useState, useEffect } from 'react'
import {
CalendarDays, BookOpen, BedDouble, Globe, Settings,
FileText, LayoutDashboard, Building2, Users, X, Hotel, Puzzle, CalendarRange, Map, LayoutGrid, UserCog, UsersRound,
TrendingUp, Tag, Award, Wrench, Utensils, CalendarClock, Zap, ChevronRight, Star, CreditCard, Monitor,
TrendingUp, Tag, Award, Wrench, Utensils, CalendarClock, Zap, ChevronRight, Star, CreditCard, Monitor, Wifi,
} from 'lucide-react'
import { useAuth } from '../../contexts/AuthContext'
import { useModules } from '../../contexts/ModulesContext'
@@ -185,7 +185,7 @@ export function Sidebar({ open, onClose }: SidebarProps) {
prices: ['/tariffs', '/dynamic-pricing', '/discounts', '/rental'],
service: ['/housekeeping', '/technical', ...activeModuleItems.map(m => m.sidebarItem!.path)],
management: ['/users', '/schedule', '/loyalty', '/maintenance', '/floor-map', '/channels'],
settingsGroup:['/modules', '/settings', '/billing', '/equipment'],
settingsGroup:['/modules', '/settings', '/billing', '/equipment', '/wifi'],
devGroup: ['/api-docs'],
}
@@ -233,6 +233,7 @@ export function Sidebar({ open, onClose }: SidebarProps) {
{ to: '/modules', icon: Puzzle, label: 'Модули' },
{ to: '/settings', icon: Settings, label: 'Настройки' },
{ to: '/equipment', icon: Monitor, label: 'Оборудование' },
{ to: '/wifi', icon: Wifi, label: 'WiFi авторизация' },
// dev
{ to: '/api-docs', icon: FileText, label: 'API & Документация' },
]
@@ -415,6 +416,7 @@ export function Sidebar({ open, onClose }: SidebarProps) {
<NavItem to="/settings" icon={Settings} label="Настройки" {...navItemProps} />
<NavItem to="/billing" icon={CreditCard} label="Тарифы и оплата" {...navItemProps} />
<NavItem to="/equipment" icon={Monitor} label="Оборудование" {...navItemProps} />
<NavItem to="/wifi" icon={Wifi} label="WiFi авторизация" {...navItemProps} />
</div>
)}
</>