# ФУТЕР - ОБЩАЯ ДОКУМЕНТАЦИЯ
## 📋 Оглавление
1. [Архитектура футера](#архитектура-футера)
2. [Структура компонентов](#структура-компонентов)
3. [Визуальная структура](#визуальная-структура)
4. [Зависимости](#зависимости)
5. [Адаптивность](#адаптивность)
---
## Архитектура футера
### Местоположение
- **Файл**: `client/src/components/Layout/Footer.tsx`
- **Используется в**: `MainLayout.tsx`
- **Высота**: Фиксированная 40px
- **Позиционирование**: Нижняя часть экрана, всегда видима
### Назначение
Футер предоставляет пользователю важную системную информацию и статистику в реальном времени:
- Статус подключений к серверам
- Системная информация (CPU, RAM, Disk)
- Информация о текущем пользователе
- Время работы приложения (uptime)
- Версия и копирайт
---
## Структура компонентов
### Основные компоненты футера
#### 1. **ConnectionIndicator** (Индикатор подключения)
- **Назначение**: Отображает статус подключения к серверу
- **Расположение**: Левая часть футера
- **Типы соединений**:
- **Локальный сервер** - основной WebSocket
- **Внешний сервер** - внешний сервер авторизации
#### 2. **SystemInfo** (Системная информация)
- **Назначение**: Отображает загрузку системы
- **Расположение**: Левая часть футера (скрыта на мобильных)
- **Показатели**:
- CPU загрузка (%)
- RAM использование (%)
- Disk использование (%)
#### 3. **UserInfo** (Информация о пользователе)
- **Назначение**: Показывает данные текущего пользователя
- **Расположение**: Центральная часть футера
- **Данные**:
- ID пульта
- Имя администратора
- Время работы (uptime)
#### 4. **VersionInfo** (Информация о версии)
- **Назначение**: Копирайт и версия приложения
- **Расположение**: Правая часть футера
- **Содержимое**:
- Копирайт "© 2024 NEWPULT"
- Версия приложения "v1.0.0"
---
## Визуальная структура
```
┌─────────────────────────────────────────────────────────────────────────┐
│ ФУТЕР (40px) │
├─────────────────────────┬─────────────────────────┬─────────────────────┤
│ ЛЕВАЯ ЧАСТЬ │ ЦЕНТРАЛЬНАЯ │ ПРАВАЯ │
│ │ ЧАСТЬ │ ЧАСТЬ │
│ • Подключения: │ • Пульт: #8 │ • © 2024 NEWPULT │
│ ✓ Локальный (25ms) │ • Админ: Иванов И. │ • v1.0.0 │
│ ✓ Внешний │ • Uptime: 02:15:30 │ │
│ • Система: │ │ │
│ CPU: 35% RAM: 45% │ │ │
│ Disk: 75% │ │ │
└─────────────────────────┴─────────────────────────┴─────────────────────┘
```
---
## Зависимости
### Внешние зависимости
```typescript
// React и хуки
import React, { useEffect, useState } from 'react';
// Иконки Lucide
import { Wifi, WifiOff, Activity, HardDrive, Cpu } from 'lucide-react';
// Контексты приложения
import { useWebSocketContext } from '../../contexts/WebSocketContext';
import { useAuth } from '../../hooks/useAuth';
// Внешний WebSocket менеджер
import { externalWsManager } from '../../lib/externalWebSocket';
```
### Используемые данные
- **WebSocketContext**: статус подключения к основному серверу
- **AuthContext**: данные текущего пользователя (ID, имя)
- **ExternalWebSocket**: статус подключения к внешнему серверу
- **Локальное состояние**: пинг, системная информация, uptime
---
## Адаптивность
### Breakpoints и видимость компонентов
#### Mobile (< 768px)
```typescript
// Видимые элементы:
- Индикаторы подключения
- Версия (только "v1.0.0")
// Скрытые элементы:
- Системная информация (CPU, RAM, Disk)
- Информация о пользователе
- Копирайт "© 2024 NEWPULT"
```
#### Tablet (768px - 1024px)
```typescript
// Видимые элементы:
- Индикаторы подключения
- Информация о пользователе (центр)
- Полная правая часть (копирайт + версия)
// Скрытые элементы:
- Системная информация (CPU, RAM, Disk)
```
#### Desktop (> 1024px)
```typescript
// Все элементы видимы:
- Индикаторы подключения
- Системная информация (CPU, RAM, Disk)
- Информация о пользователе
- Копирайт и версия
```
### CSS классы адаптивности
```css
/* Системная информация - только на больших экранах */
.hidden.lg:flex
/* Информация о пользователе - от планшета и выше */
.hidden.md:flex
/* Копирайт - от небольших экранов */
.hidden.sm:inline
```
---
## Особенности реализации
### 1. Обновление данных в реальном времени
- **Пинг**: обновляется каждые 5 секунд
- **Системная информация**: обновляется каждые 10 секунд
- **Uptime**: обновляется каждую секунду
- **Статусы подключений**: реагируют на изменения в реальном времени
### 2. Эмуляция данных
```typescript
// Пинг (10-50ms)
setPing(Math.floor(Math.random() * 40) + 10);
// CPU загрузка (20-50%)
cpu: Math.floor(Math.random() * 30) + 20
// RAM использование (30-70%)
memory: Math.floor(Math.random() * 40) + 30
// Disk - фиксированное значение
disk: 75
```
### 3. Форматирование времени
```typescript
// Uptime в формате HH:MM:SS
const hours = Math.floor(elapsed / 3600000);
const minutes = Math.floor((elapsed % 3600000) / 60000);
const seconds = Math.floor((elapsed % 60000) / 1000);
setUptime(`${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`);
```
### 4. Индикаторы состояния
```typescript
// Подключен: зеленая иконка WiFi
// Отключен: красная иконка WiFi с крестом
```
---
## Интеграция с системой
### В MainLayout
```typescript
// Футер размещается внизу layout с фиксированной высотой
```
### Стили
- **Фон**: `bg-gray-900` (темный)
- **Граница**: `border-t border-gray-700` (тонкая серая линия сверху)
- **Отступы**: `px-4` (горизонтальные отступы)
- **Флексбокс**: `flex items-center justify-between` (элементы распределены по краям)
---
## Заключение
Футер является важной частью пользовательского интерфейса, предоставляя:
- **Системную диагностику** в реальном времени
- **Статус подключений** для мониторинга работоспособности
- **Контекстную информацию** о текущем сеансе работы
- **Идентификационные данные** приложения
Компонент спроектирован с учетом адаптивности и оптимально использует ограниченное пространство для отображения максимально полезной информации.
---
**Дата создания**: 2025-01-09
**Версия документации**: 1.0
**Компонент**: Footer.tsx