Resto de las vistas y plantillas del sistema
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
<!doctype html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Recuperar credenciales administrador</title>
|
||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||
</head>
|
||||
<body class="bg-light">
|
||||
<main class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-sm-10 col-md-8 col-lg-5">
|
||||
<div class="card shadow-sm border-0">
|
||||
<div class="card-body p-4 p-md-5">
|
||||
<h1 class="h4 mb-1 text-center">Recuperar credenciales administrador</h1>
|
||||
<p class="text-muted text-center small mb-4">Completá todos los datos con los que está registrado en el sistema</p>
|
||||
|
||||
@if(session('recuperar_success'))
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ session('recuperar_success') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(session('recuperar_error'))
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ session('recuperar_error') }}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if($errors->any())
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<ul class="mb-0 ps-3">
|
||||
@foreach($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="alert alert-warning py-2" role="alert">
|
||||
<strong>Intentos restantes:</strong> {{ $intentosRestantes ?? 5 }} de {{ $intentosMaximos ?? 5 }}
|
||||
</div>
|
||||
|
||||
<form method="POST" action="/admin/recuperar-credenciales" class="d-grid gap-3">
|
||||
@csrf
|
||||
<div>
|
||||
<label class="form-label" for="celular">Número de celular</label>
|
||||
<input class="form-control" id="celular" name="celular" type="text" value="{{ old('celular') }}" required autofocus>
|
||||
</div>
|
||||
<div>
|
||||
<label class="form-label" for="nombre">Nombre</label>
|
||||
<input class="form-control" id="nombre" name="nombre" type="text" value="{{ old('nombre') }}" required>
|
||||
</div>
|
||||
<div>
|
||||
<label class="form-label" for="apellido">Apellido</label>
|
||||
<input class="form-control" id="apellido" name="apellido" type="text" value="{{ old('apellido') }}" required>
|
||||
</div>
|
||||
<div>
|
||||
<label class="form-label" for="correo">Correo electrónico</label>
|
||||
<input class="form-control" id="correo" name="correo" type="email" value="{{ old('correo') }}" required>
|
||||
</div>
|
||||
<div>
|
||||
<label class="form-label" for="pregunta_secreta">Pregunta secreta</label>
|
||||
<input class="form-control" id="pregunta_secreta" name="pregunta_secreta" type="text" value="{{ old('pregunta_secreta') }}" placeholder="Ingresá el correo para visualizar la pregunta" readonly>
|
||||
<div id="pregunta-secreta-ayuda" class="form-text">La pregunta se mostrará automáticamente según el correo ingresado.</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="form-label" for="respuesta_secreta">Respuesta secreta</label>
|
||||
<input class="form-control" id="respuesta_secreta" name="respuesta_secreta" type="text" value="{{ old('respuesta_secreta') }}" required>
|
||||
</div>
|
||||
<div style="position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden;" aria-hidden="true">
|
||||
<label class="form-label" for="website">No completar este campo</label>
|
||||
<input class="form-control" id="website" name="website" type="text" value="{{ old('website') }}" tabindex="-1" autocomplete="off">
|
||||
</div>
|
||||
<button class="btn btn-primary" type="submit">Enviar enlace</button>
|
||||
</form>
|
||||
|
||||
<hr class="my-4">
|
||||
<div class="d-grid">
|
||||
<a href="/login/personal" class="btn btn-outline-secondary">Volver al login</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const correoInput = document.getElementById('correo');
|
||||
const preguntaInput = document.getElementById('pregunta_secreta');
|
||||
const ayuda = document.getElementById('pregunta-secreta-ayuda');
|
||||
|
||||
if (!correoInput || !preguntaInput || !ayuda) {
|
||||
return;
|
||||
}
|
||||
|
||||
const limpiarPregunta = (mensaje = 'La pregunta se mostrará automáticamente según el correo ingresado.') => {
|
||||
preguntaInput.value = '';
|
||||
ayuda.textContent = mensaje;
|
||||
};
|
||||
|
||||
const cargarPregunta = async () => {
|
||||
const correo = correoInput.value.trim();
|
||||
|
||||
if (correo === '') {
|
||||
limpiarPregunta();
|
||||
return;
|
||||
}
|
||||
|
||||
ayuda.textContent = 'Buscando pregunta secreta...';
|
||||
|
||||
try {
|
||||
const response = await fetch('/admin/recuperar-credenciales/pregunta?correo=' + encodeURIComponent(correo), {
|
||||
headers: {
|
||||
'X-Requested-With': 'XMLHttpRequest'
|
||||
}
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.encontrada && data.pregunta) {
|
||||
preguntaInput.value = data.pregunta;
|
||||
ayuda.textContent = 'Respondé la pregunta secreta para continuar.';
|
||||
} else {
|
||||
limpiarPregunta('No se encontró una pregunta secreta visible para ese correo.');
|
||||
}
|
||||
} catch (error) {
|
||||
limpiarPregunta('No se pudo cargar la pregunta secreta. Intentá nuevamente.');
|
||||
}
|
||||
};
|
||||
|
||||
correoInput.addEventListener('blur', cargarPregunta);
|
||||
correoInput.addEventListener('change', cargarPregunta);
|
||||
|
||||
if (correoInput.value.trim() !== '') {
|
||||
cargarPregunta();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user