v1.1.0: Полный редизайн фронтенда, усиление безопасности и обновление версии
Deploy Telegram Bot / build-and-push (push) Successful in 5m19s
Deploy Telegram Bot / deploy (push) Successful in 10s

This commit is contained in:
2026-04-21 15:21:18 +03:00
parent b6af5f047c
commit 176f1105ab
18 changed files with 1392 additions and 413 deletions
@@ -6,57 +6,65 @@
@inject SessionService SessionService
@inject NavigationManager Navigation
<PageTitle>Редактирование сессии - GM-Relay</PageTitle>
<PageTitle>Редактирование сессии GM-Relay</PageTitle>
<div class="container mt-4">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Главная</a></li>
<li class="breadcrumb-item active">Редактирование сессии</li>
</ol>
</nav>
<div class="page-container">
<ul class="gm-breadcrumb animate-fade-in">
<li><a href="/">Главная</a></li>
<li class="active">Редактирование сессии</li>
</ul>
<h2>Редактирование сессии</h2>
<div class="page-header animate-fade-in">
<h2>✏️ Редактирование сессии</h2>
</div>
@if (session == null)
{
<p>Загрузка деталей сессии...</p>
<div class="glass-card" style="padding: 2rem;">
<div class="skeleton skeleton-text" style="width: 50%; margin-bottom: 1.5rem;"></div>
<div class="skeleton skeleton-text" style="width: 100%; height: 2.5rem; margin-bottom: 1.5rem;"></div>
<div class="skeleton skeleton-text" style="width: 50%; margin-bottom: 1.5rem;"></div>
<div class="skeleton skeleton-text" style="width: 100%; height: 2.5rem; margin-bottom: 1.5rem;"></div>
<div class="skeleton skeleton-text" style="width: 30%; height: 2.5rem;"></div>
</div>
}
else
{
<div class="card shadow-sm mt-4">
<div class="card-body">
<EditForm Model="@model" OnValidSubmit="HandleSubmit">
<div class="mb-3">
<label class="form-label font-weight-bold">Название игры</label>
<InputText @bind-Value="model.Title" class="form-control" placeholder="например, D&D 5e: Dragon's Hoard" />
<div class="form-text">Изменение этого поля обновит все сессии в одной группе.</div>
</div>
<div class="glass-card animate-slide-up" style="max-width: 640px;">
<EditForm Model="@model" OnValidSubmit="HandleSubmit">
<div class="gm-form-group">
<label class="gm-form-label">Название игры</label>
<InputText @bind-Value="model.Title" class="gm-form-control" placeholder="например, D&D 5e: Dragon's Hoard" />
<div class="gm-form-hint">Изменение этого поля обновит все сессии в одной группе.</div>
</div>
<div class="mb-3">
<label class="form-label font-weight-bold">Запланированное время (МСК UTC+3)</label>
<input type="datetime-local" @bind="model.ScheduledAtLocal" class="form-control" />
<div class="form-text">Текущее: @session.ScheduledAt.FormatMoscow()</div>
</div>
<div class="gm-form-group">
<label class="gm-form-label">Запланированное время (МСК, UTC+3)</label>
<input type="datetime-local" @bind="model.ScheduledAtLocal" class="gm-form-control" />
<div class="gm-form-hint">Текущее: @session.ScheduledAt.FormatMoscow()</div>
</div>
<div class="mb-3">
<label class="form-label font-weight-bold">Ссылка для подключения</label>
<InputText @bind-Value="model.JoinLink" class="form-control" placeholder="Ссылка на Discord или VTT" />
</div>
<div class="gm-form-group">
<label class="gm-form-label">Ссылка для подключения</label>
<InputText @bind-Value="model.JoinLink" class="gm-form-control" placeholder="Ссылка на Discord или VTT" />
</div>
<div class="mt-4">
<button type="submit" class="btn btn-success" disabled="@isSubmitting">
@(isSubmitting ? "Сохранение..." : "Сохранить изменения")
</button>
<button type="button" class="btn btn-outline-secondary ms-2" @onclick="GoBack">Отмена</button>
</div>
</EditForm>
</div>
<div style="display: flex; gap: 0.75rem; margin-top: 1.5rem;">
<button type="submit" class="btn-gm btn-gm-success" disabled="@isSubmitting">
@(isSubmitting ? "Сохранение..." : "Сохранить изменения")
</button>
<button type="button" class="btn-gm btn-gm-outline" @onclick="GoBack">
Отмена
</button>
</div>
</EditForm>
</div>
@if (!string.IsNullOrEmpty(errorMessage))
{
<div class="alert alert-danger mt-3">@errorMessage</div>
<div class="gm-alert gm-alert-danger" style="margin-top: 1rem; max-width: 640px;">
⚠️ @errorMessage
</div>
}
}
</div>