новый дизайн

This commit is contained in:
2026-07-25 18:36:45 +04:00
parent df7f98fe8b
commit c43a73e148
54 changed files with 4234 additions and 1110 deletions
+95
View File
@@ -0,0 +1,95 @@
<script setup>
import { Head, useForm, usePage } from '@inertiajs/vue3';
import { computed } from 'vue';
import PortalLayout from '../../Layouts/PortalLayout.vue';
import { arrowSvg, moonMark } from '../Landing/Components/symbols';
const props = defineProps({
site: { type: Object, required: true },
auth: { type: Object, required: true },
urls: { type: Object, required: true },
flash: { type: Object, default: () => ({}) },
old: { type: Object, default: () => ({}) },
});
const page = usePage();
const sharedErrors = computed(() => page.props.errors || {});
const form = useForm({
username: props.old.username || '',
password: '',
});
function submit() {
form.post(props.urls.login_store, {
preserveScroll: true,
onError: () => form.reset('password'),
});
}
</script>
<template>
<Head>
<title>Вход в личный кабинет — {{ site.name }}</title>
<meta name="description" content="Вход в личный кабинет игрового сервера MoonWell." />
</Head>
<PortalLayout :site="site" :auth="auth" :urls="urls" :flash="flash">
<section class="portal-auth wrap">
<div class="portal-auth__intro">
<span class="eyebrow">Личный кабинет</span>
<h1 class="h-display">Вернись к своему приключению</h1>
<p class="lead">
Используй логин и пароль игрового аккаунта. Здесь тебя ждут персонажи,
баланс, настройки безопасности и лаунчер.
</p>
<div class="portal-feature-list">
<div><span>01</span><p>Все персонажи аккаунта в одной сводке</p></div>
<div><span>02</span><p>Пополнение Слёз Элуны и история операций</p></div>
<div><span>03</span><p>Смена игрового пароля без ручных команд</p></div>
</div>
</div>
<form class="portal-card portal-form-card corners" @submit.prevent="submit">
<div class="portal-form-card__mark" v-html="moonMark(48)"></div>
<span class="eyebrow">Авторизация</span>
<h2 class="h-serif">Войти в аккаунт</h2>
<p>Вход выполняется по игровым учётным данным.</p>
<label :class="['portal-field', { 'has-error': sharedErrors.username || form.errors.username }]">
<span>Логин</span>
<input
v-model="form.username"
type="text"
autocomplete="username"
maxlength="32"
placeholder="Moonwalker"
autofocus
required
/>
<small v-if="form.errors.username || sharedErrors.username">{{ form.errors.username || sharedErrors.username }}</small>
</label>
<label :class="['portal-field', { 'has-error': sharedErrors.password || form.errors.password }]">
<span>Пароль</span>
<input
v-model="form.password"
type="password"
autocomplete="current-password"
maxlength="32"
placeholder="Твой пароль"
required
/>
<small v-if="form.errors.password || sharedErrors.password">{{ form.errors.password || sharedErrors.password }}</small>
</label>
<button class="btn btn-primary portal-submit" type="submit" :disabled="form.processing">
{{ form.processing ? 'Входим…' : 'Войти в кабинет' }}
<span v-html="arrowSvg"></span>
</button>
<a class="portal-back-link" :href="urls.home">← Вернуться на главную</a>
</form>
</section>
</PortalLayout>
</template>