админка
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
@extends('layouts.portal')
|
||||
|
||||
@section('portal-content')
|
||||
<section class="section">
|
||||
<div class="section-heading">
|
||||
<span class="eyebrow">Личный кабинет</span>
|
||||
<h2>{{ $user->username }}</h2>
|
||||
<p>Здесь можно посмотреть персонажей, сменить пароль и получить ссылку на клиент игры.</p>
|
||||
</div>
|
||||
|
||||
<div class="portal-grid">
|
||||
<article class="content-card">
|
||||
<h3>Данные аккаунта</h3>
|
||||
|
||||
<dl class="stats-list">
|
||||
<div>
|
||||
<dt>Логин</dt>
|
||||
<dd>{{ $user->username }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>Email</dt>
|
||||
<dd>{{ $user->email !== '' ? $user->email : '—' }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>Уровень доступа</dt>
|
||||
<dd>{{ $user->accessLabel() }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>Регистрация</dt>
|
||||
<dd>{{ $user->joinedAtLabel() }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>Последний вход</dt>
|
||||
<dd>{{ $user->lastLoginLabel() }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>Статус</dt>
|
||||
<dd>{{ $user->locked ? 'Заблокирован' : 'Активен' }}</dd>
|
||||
</div>
|
||||
</dl>
|
||||
|
||||
@if ($user->canAccessAdminPanel())
|
||||
<a class="button button--ghost" href="{{ route('admin.accounts.index') }}">Перейти в админку</a>
|
||||
@endif
|
||||
</article>
|
||||
|
||||
<article class="content-card">
|
||||
<h3>Клиент игры</h3>
|
||||
<p>Ссылка формируется при нажатии. Файл выдаётся напрямую из хранилища.</p>
|
||||
|
||||
<div class="action-stack">
|
||||
<a class="button button--gold" href="{{ route('cabinet.client') }}">Получить ссылку на клиент</a>
|
||||
<span class="muted-note">Файл: {{ $clientFilename }}</span>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section section--split">
|
||||
<article class="content-card">
|
||||
<span class="eyebrow">Безопасность</span>
|
||||
<h2>Сменить пароль</h2>
|
||||
<p>После обновления новый пароль сразу начнёт действовать для входа в игру и кабинет.</p>
|
||||
|
||||
<form class="register-form" method="POST" action="{{ route('cabinet.password.update') }}">
|
||||
@csrf
|
||||
|
||||
<label class="form-field">
|
||||
<span>Текущий пароль</span>
|
||||
<input class="form-control @error('current_password') is-invalid @enderror" type="password" name="current_password" maxlength="32" required>
|
||||
@error('current_password')<span class="form-error">{{ $message }}</span>@enderror
|
||||
</label>
|
||||
|
||||
<label class="form-field">
|
||||
<span>Новый пароль</span>
|
||||
<input class="form-control @error('password') is-invalid @enderror" type="password" name="password" maxlength="32" required>
|
||||
</label>
|
||||
|
||||
<label class="form-field">
|
||||
<span>Подтверждение нового пароля</span>
|
||||
<input class="form-control @error('password') is-invalid @enderror" type="password" name="password_confirmation" maxlength="32" required>
|
||||
@error('password')<span class="form-error">{{ $message }}</span>@enderror
|
||||
</label>
|
||||
|
||||
<button class="button button--gold button--full" type="submit">Обновить пароль</button>
|
||||
</form>
|
||||
</article>
|
||||
|
||||
<article class="content-card">
|
||||
<span class="eyebrow">Персонажи</span>
|
||||
<h2>Краткая сводка</h2>
|
||||
<p>Всего персонажей: {{ $characters->count() }}. Ниже показан полный список по этому аккаунту.</p>
|
||||
|
||||
@if ($characters->isNotEmpty())
|
||||
<div class="tag-list">
|
||||
@foreach ($characters as $character)
|
||||
<span class="tag">{{ $character['name'] }} · {{ $character['class'] }} · {{ $character['level'] }}</span>
|
||||
@endforeach
|
||||
</div>
|
||||
@else
|
||||
<div class="empty-inline">Персонажей пока нет.</div>
|
||||
@endif
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="section-heading">
|
||||
<span class="eyebrow">Мои персонажи</span>
|
||||
<h2>Все персонажи аккаунта</h2>
|
||||
<p>Здесь отображаются игровые персонажи, связанные с текущим аккаунтом.</p>
|
||||
</div>
|
||||
|
||||
<div class="character-grid">
|
||||
@forelse ($characters as $character)
|
||||
<article class="character-card">
|
||||
<div class="character-card__top">
|
||||
<div>
|
||||
<h3>{{ $character['name'] }}</h3>
|
||||
<p>{{ $character['race'] }} · {{ $character['class'] }}</p>
|
||||
</div>
|
||||
|
||||
<span class="tag">{{ $character['online'] ? 'Онлайн' : 'Оффлайн' }}</span>
|
||||
</div>
|
||||
|
||||
<dl class="stats-list stats-list--compact">
|
||||
<div>
|
||||
<dt>Уровень</dt>
|
||||
<dd>{{ $character['level'] }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>Пол</dt>
|
||||
<dd>{{ $character['gender'] }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>Золото</dt>
|
||||
<dd>{{ $character['money'] }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>Наработано</dt>
|
||||
<dd>{{ $character['played'] }}</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</article>
|
||||
@empty
|
||||
<article class="content-card empty-state">
|
||||
<h3>Персонажей пока нет</h3>
|
||||
<p>Создай персонажа в игре, и он появится здесь автоматически.</p>
|
||||
</article>
|
||||
@endforelse
|
||||
</div>
|
||||
</section>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user