feat: add login/register page with JWT auth flow
Login form with role-based redirect (ADMIN→demo, BODEGA→bodega, TALLER→demo). Register form for TALLER/BODEGA with admin approval required. Includes authFetch() wrapper with automatic token refresh. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
108
dashboard/login.html
Normal file
108
dashboard/login.html
Normal file
@@ -0,0 +1,108 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Nexus Autoparts - Iniciar Sesion</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Orbitron:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="/shared.css">
|
||||
<link rel="stylesheet" href="/login.css">
|
||||
</head>
|
||||
<body class="login-page">
|
||||
|
||||
<div class="login-card">
|
||||
<!-- Brand -->
|
||||
<div class="login-brand">
|
||||
<div class="logo-icon">⚙</div>
|
||||
<h1>NEXUS <span>AUTOPARTS</span></h1>
|
||||
<p class="slogan">Tu conexion directa con las partes que necesitas</p>
|
||||
</div>
|
||||
|
||||
<!-- Alert (shared between forms) -->
|
||||
<div id="alert" class="login-alert" role="alert"></div>
|
||||
|
||||
<!-- LOGIN FORM -->
|
||||
<div id="loginPanel" class="form-panel active">
|
||||
<h2 class="form-title">Iniciar Sesion</h2>
|
||||
<form id="loginForm" autocomplete="on">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="loginEmail">Correo electronico</label>
|
||||
<input class="form-input" type="email" id="loginEmail" name="email"
|
||||
placeholder="tu@correo.com" required autocomplete="email">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="loginPassword">Contrasena</label>
|
||||
<input class="form-input" type="password" id="loginPassword" name="password"
|
||||
placeholder="Tu contrasena" required autocomplete="current-password">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary btn-submit">
|
||||
<span class="spinner"></span>
|
||||
<span class="btn-label">Iniciar Sesion</span>
|
||||
</button>
|
||||
</form>
|
||||
<p class="toggle-link">
|
||||
¿No tienes cuenta? <a onclick="showPanel('register')">Registrate</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- REGISTER FORM -->
|
||||
<div id="registerPanel" class="form-panel">
|
||||
<h2 class="form-title">Crear Cuenta</h2>
|
||||
<form id="registerForm" autocomplete="on">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="regName">Nombre completo</label>
|
||||
<input class="form-input" type="text" id="regName" name="name"
|
||||
placeholder="Juan Perez" required autocomplete="name">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="regEmail">Correo electronico</label>
|
||||
<input class="form-input" type="email" id="regEmail" name="email"
|
||||
placeholder="tu@correo.com" required autocomplete="email">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="regPassword">Contrasena</label>
|
||||
<input class="form-input" type="password" id="regPassword" name="password"
|
||||
placeholder="Min. 8 caracteres" required minlength="8"
|
||||
autocomplete="new-password">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="regConfirm">Confirmar contrasena</label>
|
||||
<input class="form-input" type="password" id="regConfirm" name="confirm"
|
||||
placeholder="Repetir contrasena" required minlength="8"
|
||||
autocomplete="new-password">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="regBusiness">Nombre del negocio</label>
|
||||
<input class="form-input" type="text" id="regBusiness" name="business_name"
|
||||
placeholder="Taller / Refaccionaria" required autocomplete="organization">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="regPhone">Telefono</label>
|
||||
<input class="form-input" type="tel" id="regPhone" name="phone"
|
||||
placeholder="(555) 123-4567" required autocomplete="tel">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="regRole">Tipo de cuenta</label>
|
||||
<select class="form-select" id="regRole" name="role" required>
|
||||
<option value="TALLER">Taller</option>
|
||||
<option value="BODEGA">Bodega</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary btn-submit">
|
||||
<span class="spinner"></span>
|
||||
<span class="btn-label">Crear Cuenta</span>
|
||||
</button>
|
||||
</form>
|
||||
<p class="toggle-link">
|
||||
¿Ya tienes cuenta? <a onclick="showPanel('login')">Inicia Sesion</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/login.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user