NEW RELEASE

This commit is contained in:
2026-04-25 15:15:49 +05:00
parent 108064b08f
commit b725147825
18 changed files with 2880 additions and 0 deletions

66
login.js Normal file
View File

@@ -0,0 +1,66 @@
/* ═══ CYPHER-HR Login Module ═══ */
const Login = {
show() {
App.setView(`
<div class="auth-container">
<div class="auth-left">
<div class="auth-brand">
<div class="brand-logo">${icon('shield', 24)}</div>
<h1>CYPHER-HR</h1>
<p>Enterprise Human Resource Management</p>
</div>
<div class="auth-features">
<div class="feature-item"><div class="feature-dot">${icon('checkCircle', 16)}</div>Streamlined Leave Management</div>
<div class="feature-item"><div class="feature-dot">${icon('report', 16)}</div>Real-time Analytics & Reports</div>
<div class="feature-item"><div class="feature-dot">${icon('lock', 16)}</div>Role-based Access Control</div>
<div class="feature-item"><div class="feature-dot">${icon('clock', 16)}</div>Automated Balance Tracking</div>
</div>
</div>
<div class="auth-right">
<div class="auth-card">
<h2>Welcome back</h2>
<p class="auth-subtitle">Sign in to your HR portal</p>
<form id="loginForm" onsubmit="Login.handleLogin(event)">
<div class="form-group">
<label>Email Address</label>
<input type="email" id="loginEmail" placeholder="you@company.com" required autocomplete="email">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" id="loginPassword" placeholder="Enter your password" required autocomplete="current-password">
</div>
<button type="submit" class="btn btn-primary btn-full" id="loginBtn">
Sign In ${icon('chevronRight', 16)}
</button>
<div id="loginError" class="form-error" style="display:none"></div>
</form>
</div>
</div>
</div>
`);
},
async handleLogin(e) {
e.preventDefault();
const btn = document.getElementById('loginBtn');
const err = document.getElementById('loginError');
btn.disabled = true;
btn.textContent = 'Signing in...';
err.style.display = 'none';
try {
const data = await App.api('/api/auth/login', {
method: 'POST',
body: JSON.stringify({
email: document.getElementById('loginEmail').value,
password: document.getElementById('loginPassword').value
})
});
App.login(data.token, data.user);
} catch (error) {
err.textContent = error.message;
err.style.display = 'block';
btn.disabled = false;
btn.innerHTML = `Sign In ${icon('chevronRight', 16)}`;
}
}
};