// frontend/src/pages/dashboard/mainpage.tsx import { useState, useEffect } from 'react'; import { Routes, Route, Link, useNavigate, useLocation } from 'react-router-dom'; import axios from 'axios'; import AuthContext from '../../context/authcontext'; import { useContext } from 'react'; // Импортируем компоненты для вкладок import Summary from './summary'; import Servers from './servers'; import Tickets from './tickets'; import Billing from './billing'; import Settings from './settings'; import CheckVerification from './checkverification'; import TicketResponse from './ticketresponse'; const Dashboard = () => { const [userData, setUserData] = useState(null); const [loading, setLoading] = useState(true); const navigate = useNavigate(); const location = useLocation(); const { logout } = useContext(AuthContext); // Определяем активную вкладку из URL const getActiveTab = () => { const path = location.pathname.split('/dashboard/')[1] || ''; return path === '' ? 'summary' : path; }; const [activeTab, setActiveTab] = useState(getActiveTab()); // Обновляем активную вкладку при изменении URL useEffect(() => { setActiveTab(getActiveTab()); }, [location]); useEffect(() => { const fetchData = async () => { try { const token = localStorage.getItem('access_token'); if (!token) { console.log('Токен не найден, перенаправляем на логин'); logout(); navigate('/login'); return; } const headers = { Authorization: `Bearer ${token}` }; const userRes = await axios.get('http://localhost:5000/api/auth/me', { headers }); setUserData({ user: userRes.data.user, balance: 1500, servers: [], tickets: [], }); } catch (err) { console.error('Ошибка загрузки данных:', err); if (axios.isAxiosError(err) && err.response?.status === 401) { logout(); navigate('/login'); } } finally { setLoading(false); } }; fetchData(); }, [logout, navigate]); if (loading) { return (

Загрузка...

); } if (!userData || !userData.user) { return (

Ошибка загрузки данных

); } const isOperator = userData.user.operator === 1; return (
{/* Sidebar - фиксированный слева */}
{/* Заголовок сайдбара */}

Привет, {userData.user.username}!

{isOperator && ( Оператор )}
Баланс: ₽{userData.balance}
{/* Навигация */} {/* Футер сайдбара */}

© 2024 ospab.host

Версия 1.0.0

{/* Main Content - занимает оставшееся место */}
{/* Хлебные крошки/заголовок */}

{activeTab === 'summary' ? 'Сводка' : activeTab === 'servers' ? 'Серверы' : activeTab === 'tickets' ? 'Тикеты поддержки' : activeTab === 'billing' ? 'Пополнение баланса' : activeTab === 'settings' ? 'Настройки аккаунта' : activeTab === 'checkverification' ? 'Проверка чеков' : activeTab === 'ticketresponse' ? 'Ответы на тикеты' : 'Панель управления'}

{new Date().toLocaleDateString('ru-RU', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}

{/* Быстрые действия */}
💰 Пополнить 🆘 Поддержка
{/* Контент страницы */}
} /> } /> } /> } /> } /> {isOperator && ( <> } /> } /> )}
); }; export default Dashboard;