Files
app_umbrix/app/help/page.tsx

262 lines
13 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use client';
import { useState } from 'react';
import { useRouter } from 'next/navigation';
import {
ChevronLeft, ChevronDown, ChevronUp,
Rocket, HelpCircle, Wrench, MessageCircle, FileText,
Smartphone, Download, Play, Apple, Monitor, Wifi, Globe, Shield, Zap
} from 'lucide-react';
export default function HelpPage() {
const router = useRouter();
const [openFaq, setOpenFaq] = useState<number | null>(null);
const [openTrouble, setOpenTrouble] = useState<number | null>(null);
const toggleFaq = (index: number) => {
setOpenFaq(openFaq === index ? null : index);
};
const toggleTrouble = (index: number) => {
setOpenTrouble(openTrouble === index ? null : index);
};
const faqs = [
{
question: 'Как подключиться к VPN?',
answer: 'Откройте приложение Umbrix → выберите сервер → нажмите кнопку "Подключить". Приложение автоматически установит безопасное соединение.'
},
{
question: 'Как изменить страну/сервер?',
answer: 'В главном экране нажмите на текущий сервер → выберите нужную страну из списка → нажмите "Подключить". Приложение переключится на новый сервер.'
},
{
question: 'Как проверить что VPN работает?',
answer: 'Проверьте иконку в статус-баре (должна быть зеленой). Или зайдите на сайт 2ip.ru - вы увидите IP-адрес выбранной страны, а не свой реальный.'
},
{
question: 'Как продлить подписку?',
answer: 'Главное меню → Тарифы → выберите нужный план → оплатите. Подписка продлится автоматически после подтверждения оплаты.'
},
{
question: 'Можно ли использовать на нескольких устройствах?',
answer: 'Да! Одна подписка работает на неограниченном количестве устройств. Просто установите Umbrix на каждое устройство и войдите с той же подпиской.'
},
{
question: 'Как получить бесплатный пробный период?',
answer: '7 дней бесплатно при регистрации! Или получите +7 дней за каждого приглашенного друга через реферальную программу.'
},
];
const troubleshooting = [
{
problem: 'VPN не подключается',
solution: '1) Проверьте интернет-соединение\n2) Попробуйте другой сервер\n3) Переустановите приложение\n4) Напишите в поддержку с описанием проблемы'
},
{
problem: 'Низкая скорость соединения',
solution: '1) Выберите ближайший к вам сервер\n2) Смените протокол на WireGuard (быстрее OpenVPN)\n3) Проверьте скорость без VPN для сравнения\n4) Попробуйте подключиться в другое время суток'
},
{
problem: 'Приложение вылетает/зависает',
solution: '1) Обновите приложение до последней версии\n2) Очистите кеш приложения\n3) Перезагрузите устройство\n4) Переустановите приложение заново'
},
{
problem: 'Ошибка "Не удалось установить соединение"',
solution: '1) Проверьте срок действия подписки\n2) Убедитесь что не превышен лимит трафика\n3) Попробуйте переключиться на другой протокол\n4) Проверьте не блокирует ли ваш провайдер VPN'
},
{
problem: 'Не приходит код подтверждения',
solution: '1) Проверьте папку "Спам" в почте\n2) Убедитесь что email указан верно\n3) Подождите 5-10 минут\n4) Запросите код повторно\n5) Напишите в поддержку Telegram'
},
];
return (
<div className="min-h-screen bg-[var(--bg-app)] text-white">
{/* Header */}
<div className="bg-[var(--bg-card)] border-b border-slate-700 sticky top-0 z-10 backdrop-blur-sm">
<div className="max-w-2xl mx-auto p-4 flex items-center gap-3">
<button
onClick={() => router.back()}
className="p-2 hover:bg-slate-700 rounded-lg transition-colors"
>
<ChevronLeft className="w-6 h-6" />
</button>
<h1 className="text-xl font-bold">Помощь</h1>
</div>
</div>
{/* Content */}
<div className="max-w-2xl mx-auto p-4 space-y-6">
{/* 1. Начало работы */}
<section className="bg-[var(--bg-card)] border border-slate-700 rounded-xl p-6">
<div className="flex items-center gap-3 mb-4">
<Rocket className="w-6 h-6" style={{ color: 'var(--primary)' }} />
<h2 className="text-xl font-bold">Начало работы</h2>
</div>
<div className="space-y-4">
{/* Шаг 1: Установка */}
<div>
<h3 className="font-semibold mb-2 flex items-center gap-2">
<Download className="w-5 h-5" style={{ color: 'var(--primary)' }} />
1. Установите приложение
</h3>
<div className="pl-7 space-y-2 text-sm text-slate-400">
<div className="flex items-center gap-2">
<Smartphone className="w-4 h-4" />
<span><strong>Android:</strong> Google Play Store "Umbrix VPN"</span>
</div>
<div className="flex items-center gap-2">
<Apple className="w-4 h-4" />
<span><strong>iOS:</strong> App Store "Umbrix VPN"</span>
</div>
<div className="flex items-center gap-2">
<Monitor className="w-4 h-4" />
<span><strong>Desktop:</strong> umbrix.net/download</span>
</div>
</div>
</div>
{/* Шаг 2: Активация */}
<div>
<h3 className="font-semibold mb-2 flex items-center gap-2">
<Play className="w-5 h-5" style={{ color: 'var(--primary)' }} />
2. Активируйте подписку
</h3>
<p className="pl-7 text-sm text-slate-400">
Скопируйте ссылку подписки из бота вставьте в приложение Umbrix готово!
</p>
</div>
{/* Шаг 3: Подключение */}
<div>
<h3 className="font-semibold mb-2 flex items-center gap-2">
<Wifi className="w-5 h-5" style={{ color: 'var(--primary)' }} />
3. Подключитесь к VPN
</h3>
<p className="pl-7 text-sm text-slate-400">
Перейдите во вкладку "Локации" выберите сервер (страну) нажмите большую зеленую кнопку VPN активирован!
</p>
</div>
</div>
</section>
{/* 2. FAQ */}
<section className="bg-[var(--bg-card)] border border-slate-700 rounded-xl p-6">
<div className="flex items-center gap-3 mb-4">
<HelpCircle className="w-6 h-6" style={{ color: 'var(--primary)' }} />
<h2 className="text-xl font-bold">Частые вопросы</h2>
</div>
<div className="space-y-3">
{faqs.map((faq, index) => (
<div
key={index}
className="border border-slate-700 rounded-lg overflow-hidden"
>
<button
onClick={() => toggleFaq(index)}
className="w-full flex items-center justify-between p-4 hover:bg-slate-700/50 transition-colors text-left"
>
<span className="font-medium">{faq.question}</span>
{openFaq === index ? (
<ChevronUp className="w-5 h-5 flex-shrink-0" style={{ color: 'var(--primary)' }} />
) : (
<ChevronDown className="w-5 h-5 flex-shrink-0" style={{ color: 'var(--primary)' }} />
)}
</button>
{openFaq === index && (
<div className="px-4 pb-4 text-sm text-slate-400 border-t border-slate-700 pt-4">
{faq.answer}
</div>
)}
</div>
))}
</div>
</section>
{/* 3. Решение проблем */}
<section className="bg-[var(--bg-card)] border border-slate-700 rounded-xl p-6">
<div className="flex items-center gap-3 mb-4">
<Wrench className="w-6 h-6" style={{ color: 'var(--primary)' }} />
<h2 className="text-xl font-bold">Решение проблем</h2>
</div>
<div className="space-y-3">
{troubleshooting.map((item, index) => (
<div
key={index}
className="border border-slate-700 rounded-lg overflow-hidden"
>
<button
onClick={() => toggleTrouble(index)}
className="w-full flex items-center justify-between p-4 hover:bg-slate-700/50 transition-colors text-left"
>
<span className="font-medium">{item.problem}</span>
{openTrouble === index ? (
<ChevronUp className="w-5 h-5 flex-shrink-0" style={{ color: 'var(--primary)' }} />
) : (
<ChevronDown className="w-5 h-5 flex-shrink-0" style={{ color: 'var(--primary)' }} />
)}
</button>
{openTrouble === index && (
<div className="px-4 pb-4 text-sm text-slate-400 border-t border-slate-700 pt-4 whitespace-pre-line">
{item.solution}
</div>
)}
</div>
))}
</div>
</section>
{/* 4. Связаться с поддержкой */}
<section className="bg-[var(--bg-card)] border border-slate-700 rounded-xl p-6">
<div className="flex items-center gap-3 mb-4">
<MessageCircle className="w-6 h-6" style={{ color: 'var(--primary)' }} />
<h2 className="text-xl font-bold">Связаться с поддержкой</h2>
</div>
<div className="space-y-4">
<p className="text-sm text-slate-400">
Не нашли ответ на свой вопрос? Свяжитесь с нами любым удобным способом:
</p>
<div className="space-y-3">
<a
href="https://telegram.me/umbrix_support"
target="_blank"
rel="noopener noreferrer"
className="flex items-center gap-3 p-4 bg-slate-700/50 hover:bg-slate-700 rounded-lg transition-colors"
>
<MessageCircle className="w-5 h-5" style={{ color: 'var(--primary)' }} />
<div className="flex-1">
<div className="font-medium">Telegram поддержка</div>
<div className="text-xs text-slate-400">Ответим в течение 5 минут</div>
</div>
<ChevronDown className="w-5 h-5 rotate-[-90deg]" />
</a>
<div className="p-4 bg-slate-700/30 rounded-lg">
<div className="text-sm text-slate-400">
<div className="flex items-center gap-2 mb-1">
<Globe className="w-4 h-4" style={{ color: 'var(--primary)' }} />
<strong>Email:</strong> support@umbrix.net
</div>
<div className="flex items-center gap-2">
<Zap className="w-4 h-4" style={{ color: 'var(--primary)' }} />
<strong>Время работы:</strong> 24/7
</div>
</div>
</div>
</div>
</div>
</section>
{/* Spacer для нижнего отступа */}
<div className="h-8" />
</div>
</div>
);
}