- Клиентская часть Vue 3 + Vite - Серверная часть Node.js + WebSocket - Система авторизации и смен - Управление игровыми портами - Поддержка тем (светлая/темная) - Адаптивный дизайн 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
353 lines
11 KiB
Markdown
353 lines
11 KiB
Markdown
# VERSION INFO - Информация о версии в футере
|
||
|
||
## 📋 Описание
|
||
|
||
VersionInfo - это правая секция футера, отображающая копирайт информацию и версию приложения. Предоставляет пользователям информацию о продукте и его текущей версии.
|
||
|
||
---
|
||
|
||
## Архитектура
|
||
|
||
### Местоположение
|
||
- **Компонент**: Часть `Footer.tsx`
|
||
- **Позиция**: Правая часть футера
|
||
- **Видимость**: Частично адаптивная (копирайт скрыт на очень маленьких экранах)
|
||
|
||
### Структура отображаемых данных
|
||
```typescript
|
||
interface VersionInfoData {
|
||
copyright: string; // Копирайт информация
|
||
version: string; // Версия приложения
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Функциональность
|
||
|
||
### 1. Отображение копирайта
|
||
```typescript
|
||
<span className="hidden sm:inline">© 2024 NEWPULT</span>
|
||
```
|
||
- Показывает информацию об авторских правах
|
||
- Скрыта на очень маленьких экранах (< 640px)
|
||
|
||
### 2. Разделитель
|
||
```typescript
|
||
<span>•</span>
|
||
```
|
||
- Визуальная точка-разделитель между копирайтом и версией
|
||
|
||
### 3. Отображение версии
|
||
```typescript
|
||
<span>v1.0.0</span>
|
||
```
|
||
- Показывает текущую версию приложения
|
||
- Всегда видима на всех экранах
|
||
|
||
---
|
||
|
||
## Структура компонента
|
||
|
||
### HTML разметка
|
||
```typescript
|
||
<div className="flex items-center gap-2 text-xs text-gray-400">
|
||
<span className="hidden sm:inline">© 2024 NEWPULT</span>
|
||
<span>•</span>
|
||
<span>v1.0.0</span>
|
||
</div>
|
||
```
|
||
|
||
---
|
||
|
||
## Адаптивность и стили
|
||
|
||
### CSS классы
|
||
```css
|
||
/* Контейнер */
|
||
.flex.items-center.gap-2.text-xs.text-gray-400
|
||
|
||
/* Копирайт - скрыт до sm размера */
|
||
.hidden.sm:inline
|
||
|
||
/* Разделитель и версия - всегда видимы */
|
||
/* Используют базовые стили контейнера */
|
||
```
|
||
|
||
### Адаптивное поведение
|
||
|
||
#### Mobile (< 640px)
|
||
```
|
||
• v1.0.0
|
||
```
|
||
- Копирайт скрыт для экономии места
|
||
- Разделитель и версия остаются видимыми
|
||
|
||
#### Small и выше (≥ 640px)
|
||
```
|
||
© 2024 NEWPULT • v1.0.0
|
||
```
|
||
- Полная информация отображается
|
||
|
||
### Логика адаптивности
|
||
```typescript
|
||
// Копирайт появляется только на экранах sm и больше
|
||
className="hidden sm:inline"
|
||
|
||
// Версия всегда видима (без условных классов)
|
||
<span>v1.0.0</span>
|
||
```
|
||
|
||
---
|
||
|
||
## Конфигурация версии
|
||
|
||
### Текущая реализация
|
||
```typescript
|
||
// Статическая версия в коде
|
||
<span>v1.0.0</span>
|
||
```
|
||
|
||
### Улучшенная реализация (предложение)
|
||
```typescript
|
||
// Версия из package.json
|
||
import packageJson from '../../../package.json';
|
||
|
||
const VersionInfo = () => {
|
||
return <span>v{packageJson.version}</span>;
|
||
};
|
||
```
|
||
|
||
### Версия из переменных окружения
|
||
```typescript
|
||
// Версия из environment variables
|
||
const version = process.env.REACT_APP_VERSION || '1.0.0';
|
||
<span>v{version}</span>
|
||
```
|
||
|
||
---
|
||
|
||
## Позиционирование в футере
|
||
|
||
### Расположение между элементами
|
||
```
|
||
[Подключения] [Система] [ Пользователь ] [ ВЕРСИЯ ]
|
||
Локальный CPU: 35% Пульт: #8 © 2024 NEWPULT
|
||
Внешний RAM: 45% Админ: Иванов И. •
|
||
Disk: 75% Uptime: 02:15:30 v1.0.0
|
||
```
|
||
|
||
### Выравнивание
|
||
```typescript
|
||
// justify-between в родительском контейнере размещает
|
||
// этот элемент в правой части футера
|
||
<div className="h-full flex items-center justify-between">
|
||
{/* Левая часть */}
|
||
{/* Центральная часть */}
|
||
{/* ПРАВАЯ ЧАСТЬ */}
|
||
<div className="flex items-center gap-2 text-xs text-gray-400">
|
||
{/* VersionInfo здесь */}
|
||
</div>
|
||
</div>
|
||
```
|
||
|
||
---
|
||
|
||
## Особенности реализации
|
||
|
||
### 1. Статичность данных
|
||
- **Копирайт**: Захардкожен в коде ("© 2024 NEWPULT")
|
||
- **Версия**: Статическое значение ("v1.0.0")
|
||
- **Нет динамического обновления**: Изменения только при новой сборке
|
||
|
||
### 2. Минималистичный дизайн
|
||
- Простой серый текст
|
||
- Маленький размер шрифта (text-xs)
|
||
- Ненавязчивое позиционирование
|
||
|
||
### 3. Приоритизация версии
|
||
- Версия всегда видима
|
||
- Копирайт может быть скрыт для экономии места
|
||
- Версия критична для технической поддержки
|
||
|
||
---
|
||
|
||
## Управление версиями
|
||
|
||
### Рекомендуемые подходы
|
||
|
||
#### 1. Семантическое версионирование (SemVer)
|
||
```
|
||
v1.0.0 - MAJOR.MINOR.PATCH
|
||
v1.2.3 - 1 мажорная, 2 минорная, 3 патч версия
|
||
```
|
||
|
||
#### 2. Автоматическое обновление из package.json
|
||
```typescript
|
||
// vite.config.ts или webpack.config.js
|
||
const packageJson = require('./package.json');
|
||
|
||
export default {
|
||
define: {
|
||
'process.env.APP_VERSION': JSON.stringify(packageJson.version),
|
||
},
|
||
};
|
||
|
||
// В компоненте
|
||
const version = process.env.APP_VERSION || '1.0.0';
|
||
```
|
||
|
||
#### 3. CI/CD интеграция
|
||
```typescript
|
||
// Автоматическое обновление при деплое
|
||
const version = process.env.BUILD_NUMBER ||
|
||
process.env.GIT_COMMIT?.substring(0, 7) ||
|
||
'1.0.0';
|
||
```
|
||
|
||
---
|
||
|
||
## Расширение функциональности
|
||
|
||
### Потенциальные улучшения
|
||
|
||
#### 1. Детальная информация о версии
|
||
```typescript
|
||
interface DetailedVersionInfo {
|
||
version: string; // "1.0.0"
|
||
buildNumber: string; // "2024010901"
|
||
gitCommit: string; // "a1b2c3d"
|
||
buildDate: string; // "2024-01-09"
|
||
environment: string; // "production"
|
||
}
|
||
```
|
||
|
||
#### 2. Интерактивная версия с тултипом
|
||
```typescript
|
||
<Tooltip content={`
|
||
Версия: v${version}
|
||
Сборка: ${buildNumber}
|
||
Дата: ${buildDate}
|
||
Коммит: ${gitCommit}
|
||
`}>
|
||
<span className="cursor-help">v{version}</span>
|
||
</Tooltip>
|
||
```
|
||
|
||
#### 3. Цветовая индикация среды
|
||
```typescript
|
||
const getEnvironmentColor = (env: string) => {
|
||
switch (env) {
|
||
case 'production': return 'text-green-400';
|
||
case 'staging': return 'text-yellow-400';
|
||
case 'development': return 'text-blue-400';
|
||
default: return 'text-gray-400';
|
||
}
|
||
};
|
||
|
||
<span className={getEnvironmentColor(environment)}>
|
||
v{version}
|
||
</span>
|
||
```
|
||
|
||
#### 4. Ссылка на changelog
|
||
```typescript
|
||
<a
|
||
href="/changelog"
|
||
className="text-xs text-gray-400 hover:text-gray-300 underline"
|
||
>
|
||
v{version}
|
||
</a>
|
||
```
|
||
|
||
---
|
||
|
||
## Интеграция с системой сборки
|
||
|
||
### Package.json интеграция
|
||
```json
|
||
{
|
||
"name": "newpult",
|
||
"version": "1.0.0",
|
||
"scripts": {
|
||
"build": "vite build --mode production",
|
||
"version:bump": "npm version patch && git push && git push --tags"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Автоматизация обновления
|
||
```bash
|
||
# Автоматическое обновление версии при деплое
|
||
npm version patch # 1.0.0 -> 1.0.1
|
||
npm version minor # 1.0.0 -> 1.1.0
|
||
npm version major # 1.0.0 -> 2.0.0
|
||
```
|
||
|
||
---
|
||
|
||
## Тестирование
|
||
|
||
### Тестовые сценарии
|
||
1. **Корректное отображение версии** на всех экранах
|
||
2. **Скрытие копирайта** на маленьких экранах (< 640px)
|
||
3. **Показ копирайта** на больших экранах (≥ 640px)
|
||
4. **Правильное позиционирование** в правой части футера
|
||
5. **Стилизация текста** (размер, цвет, отступы)
|
||
|
||
### Unit тесты
|
||
```typescript
|
||
describe('VersionInfo', () => {
|
||
test('shows version on all screen sizes', () => {
|
||
render(<VersionInfo />);
|
||
expect(screen.getByText(/v1\.0\.0/)).toBeVisible();
|
||
});
|
||
|
||
test('hides copyright on small screens', () => {
|
||
render(<VersionInfo />);
|
||
const copyright = screen.getByText(/© 2024 NEWPULT/);
|
||
expect(copyright).toHaveClass('hidden', 'sm:inline');
|
||
});
|
||
});
|
||
```
|
||
|
||
---
|
||
|
||
## Безопасность и конфиденциальность
|
||
|
||
### Соображения
|
||
1. **Версия не содержит чувствительной информации**
|
||
2. **Копирайт указывает на владельца продукта**
|
||
3. **Публичная информация** - безопасна для отображения
|
||
4. **Не раскрывает внутреннюю архитектуру** или уязвимости
|
||
|
||
### Рекомендации
|
||
- Избегать отображения детальной информации о сборке
|
||
- Не показывать пути к файлам или внутренние идентификаторы
|
||
- Ограничить информацию до необходимого минимума
|
||
|
||
---
|
||
|
||
## Связь с брендингом
|
||
|
||
### Элементы бренда
|
||
- **"NEWPULT"**: Название продукта в копирайте
|
||
- **"© 2024"**: Актуальный год авторских прав
|
||
- **Цветовая схема**: Серый цвет соответствует общей теме
|
||
|
||
### Консистентность
|
||
- Соответствует общему стилю приложения
|
||
- Гармонирует с другими элементами футера
|
||
- Поддерживает профессиональный вид интерфейса
|
||
|
||
---
|
||
|
||
## Заключение
|
||
|
||
VersionInfo служит важной идентификационной функцией, предоставляя пользователям информацию о текущей версии продукта и авторских правах. Несмотря на свою простоту, компонент играет ключевую роль в поддержке пользователей и идентификации версии при решении технических вопросов.
|
||
|
||
---
|
||
|
||
**Дата создания**: 2025-01-09
|
||
**Версия документации**: 1.0
|
||
**Родительский компонент**: Footer.tsx |