139 lines
7.1 KiB
HTML
139 lines
7.1 KiB
HTML
{% extends "base.html" %}
|
||
{% block title %}Morozovka Platform — главная{% endblock %}
|
||
{% block main_class %}container{% endblock %}
|
||
|
||
{% block content %}
|
||
{% if session.get('user_id') and not onboarding_completed and not request.args.get('skip_tour') %}
|
||
<div class="welcome-banner">
|
||
<div class="welcome-banner-icon">🎓</div>
|
||
<div class="welcome-banner-body">
|
||
<h3 class="welcome-banner-title">Первый раз здесь?</h3>
|
||
<p class="welcome-banner-text">Пройди короткий тур по разделам платформы — это займёт 2 минуты.</p>
|
||
</div>
|
||
<a href="/onboarding" class="btn btn-primary">Пройти тур →</a>
|
||
</div>
|
||
{% endif %}
|
||
|
||
<div class="hero-grid">
|
||
<div class="hero-main">
|
||
{% if session.get('username') %}
|
||
<h1 class="hero-title">Привет, {{ session.get('username') }}!</h1>
|
||
<p class="hero-subtitle">Расписание, проекты, мастер-классы и файлы — всё в одном месте. Выбирай, чем займёшься сегодня.</p>
|
||
{% else %}
|
||
<h1 class="hero-title">Morozovka Platform</h1>
|
||
<p class="hero-subtitle">Единая платформа команды: расписание, проекты, мастер-классы, файлы и лента. Войди, чтобы получить полный доступ.</p>
|
||
{% endif %}
|
||
<div class="hero-actions">
|
||
<a href="/schedule" class="btn btn-primary btn-lg">
|
||
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M3.75 1.5a.75.75 0 0 1 .75.75V3h7V2.25a.75.75 0 0 1 1.5 0V3h.5A1.75 1.75 0 0 1 15 4.75v9A1.75 1.75 0 0 1 13.5 15.5h-11A1.75 1.75 0 0 1 1 13.75v-9A1.75 1.75 0 0 1 2.5 3H3V2.25a.75.75 0 0 1 .75-.75Zm10.75 5.5h-13v6.75c0 .138.112.25.25.25h11a.25.25 0 0 0 .25-.25Z"/></svg>
|
||
Расписание
|
||
</a>
|
||
<a href="/projects" class="btn btn-outline btn-lg">Проекты</a>
|
||
<a href="/workshops" class="btn btn-outline btn-lg">Мастер-классы</a>
|
||
</div>
|
||
</div>
|
||
<div class="hero-side">
|
||
<div class="status-card">
|
||
<div class="status-label">Статус Никиты Сергеевича</div>
|
||
<div class="status-value" id="status-value"><span class="status-dot status-dot-grey"></span><span>Загрузка...</span></div>
|
||
<div class="status-meta" id="status-meta">Проверяем расписание...</div>
|
||
<a href="/schedule" class="status-link">Открыть расписание →</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="section-header-row">
|
||
<h2>Разделы платформы</h2>
|
||
</div>
|
||
|
||
<div class="cards-grid">
|
||
{% if session.get('username') %}
|
||
<a href="/dashboard" class="feature-card">
|
||
<div class="feature-icon">🏠</div>
|
||
<h3 class="feature-title">Мой дашборд</h3>
|
||
<p class="feature-desc">Проекты, задачи, уведомления, материалы — всё в одном месте</p>
|
||
<span class="feature-badge feature-badge-new">NEW</span>
|
||
</a>
|
||
{% endif %}
|
||
<a href="/schedule" class="feature-card">
|
||
<div class="feature-icon">📅</div>
|
||
<h3 class="feature-title">Расписание</h3>
|
||
<p class="feature-desc">Календарь событий, статус преподавателя, встроенный ассистент</p>
|
||
</a>
|
||
<a href="/projects" class="feature-card">
|
||
<div class="feature-icon">🗂</div>
|
||
<h3 class="feature-title">Проекты</h3>
|
||
<p class="feature-desc">Каталог проектов, канбан-доски, участники и роли</p>
|
||
</a>
|
||
<a href="/workshops" class="feature-card">
|
||
<div class="feature-icon">🎓</div>
|
||
<h3 class="feature-title">Мастер-классы</h3>
|
||
<p class="feature-desc">Пайка, embedded, Linux, творчество. Регистрация и материалы</p>
|
||
</a>
|
||
<a href="/files" class="feature-card">
|
||
<div class="feature-icon">📁</div>
|
||
<h3 class="feature-title">Файлы</h3>
|
||
<p class="feature-desc">Единое хранилище документов, схем и материалов</p>
|
||
</a>
|
||
<a href="/feed" class="feature-card">
|
||
<div class="feature-icon">📰</div>
|
||
<h3 class="feature-title">Лента</h3>
|
||
<p class="feature-desc">Все новости из проектов и мастер-классов в одном потоке</p>
|
||
</a>
|
||
{% if session.get('username') %}
|
||
|
||
<a href="/onboarding" class="feature-card">
|
||
<div class="feature-icon">🎯</div>
|
||
<h3 class="feature-title">Тур по платформе</h3>
|
||
<p class="feature-desc">Короткое знакомство со всеми разделами</p>
|
||
<span class="feature-badge feature-badge-new">NEW</span>
|
||
</a>
|
||
{% endif %}
|
||
{% if session.get('role') in ['admin', 'professor'] %}
|
||
<a href="/admin/schedule" class="feature-card">
|
||
<div class="feature-icon">⚙️</div>
|
||
<h3 class="feature-title">Управление расписанием</h3>
|
||
<p class="feature-desc">Быстрые действия, события, импорт/экспорт .ics</p>
|
||
</a>
|
||
{% endif %}
|
||
{% if session.get('role') == 'admin' %}
|
||
<a href="/admin/users" class="feature-card">
|
||
<div class="feature-icon">👥</div>
|
||
<h3 class="feature-title">Пользователи</h3>
|
||
<p class="feature-desc">Управление ролями, блокировка, поиск</p>
|
||
</a>
|
||
{% endif %}
|
||
</div>
|
||
{% endblock %}
|
||
|
||
{% block scripts %}
|
||
<script>
|
||
(function() {
|
||
fetch('/api/public-status')
|
||
.then(r => r.ok ? r.json() : null)
|
||
.then(data => {
|
||
const valEl = document.getElementById('status-value');
|
||
const metaEl = document.getElementById('status-meta');
|
||
if (!data || !data.status) {
|
||
valEl.innerHTML = '<span class="status-dot status-dot-grey"></span><span>Нет данных</span>';
|
||
metaEl.textContent = '';
|
||
return;
|
||
}
|
||
const map = {
|
||
'on_place': { text: 'На месте', dot: 'green' },
|
||
'delayed': { text: 'Опаздывает на ' + (data.delay_minutes || 0) + ' мин', dot: 'yellow' },
|
||
'away': { text: 'Вне вуза', dot: 'red' },
|
||
'cancelled': { text: 'Отменено', dot: 'red' },
|
||
'free': { text: 'Вне расписания', dot: 'grey' }
|
||
};
|
||
const info = map[data.status] || map.free;
|
||
valEl.innerHTML = '<span class="status-dot status-dot-' + info.dot + '"></span><span>' + info.text + '</span>';
|
||
metaEl.textContent = data.message || '';
|
||
})
|
||
.catch(() => {
|
||
document.getElementById('status-value').innerHTML = '<span class="status-dot status-dot-grey"></span><span>Нет данных</span>';
|
||
});
|
||
})();
|
||
</script>
|
||
{% endblock %}
|