Presensi Terbaru
Presensi Terbaru
DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sistem Presensi Sekolah</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-
awesome/6.4.0/css/all.min.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
body {
background: linear-gradient(135deg, #1a73e8, #6ec1e4);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 20px;
}
.container {
background-color: white;
border-radius: 12px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
width: 100%;
max-width: 450px;
overflow: hidden;
position: relative;
}
.header {
background: linear-gradient(135deg, #1a73e8, #1e88e5);
color: white;
text-align: center;
padding: 25px 20px;
position: relative;
}
.header h1 {
font-size: 24px;
margin-bottom: 10px;
}
.header p {
font-size: 14px;
opacity: 0.9;
}
.school-icon {
font-size: 40px;
margin-bottom: 15px;
color: white;
}
.form-container {
padding: 25px;
}
.form-group {
margin-bottom: 20px;
position: relative;
}
label {
display: block;
margin-bottom: 8px;
color: #555;
font-weight: 500;
}
input[type="text"],
input[type="password"],
input[type="email"],
select {
width: 100%;
padding: 14px;
border: 1px solid #ddd;
border-radius: 6px;
font-size: 16px;
transition: border 0.3s;
}
input[type="text"]:focus,
input[type="password"]:focus,
input[type="email"]:focus,
select:focus {
border-color: #1a73e8;
outline: none;
}
button {
width: 100%;
padding: 14px;
background: linear-gradient(135deg, #1a73e8, #1e88e5);
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 16px;
font-weight: 600;
transition: transform 0.2s, box-shadow 0.2s;
margin-top: 10px;
}
button:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(26, 115, 232, 0.4);
}
.logout-btn {
background: linear-gradient(135deg, #e53935, #e57373);
max-width: 200px;
margin: 20px auto;
}
.logout-btn:hover {
box-shadow: 0 5px 15px rgba(229, 57, 53, 0.4);
}
.secondary-btn {
background: linear-gradient(135deg, #78909c, #b0bec5);
}
.secondary-btn:hover {
box-shadow: 0 5px 15px rgba(120, 144, 156, 0.4);
}
.message {
text-align: center;
margin-top: 20px;
color: #e53935;
font-size: 14px;
min-height: 20px;
}
.success-message {
color: #43a047;
}
.dashboard {
text-align: center;
padding: 20px;
}
.dashboard-content {
background-color: #f9f9f9;
border-radius: 8px;
padding: 20px;
margin: 20px 0;
text-align: left;
}
.hidden {
display: none;
}
.user-info {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20px;
}
.user-avatar {
width: 70px;
height: 70px;
background: linear-gradient(135deg, #1a73e8, #1e88e5);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 28px;
font-weight: bold;
margin-right: 15px;
}
.user-details {
text-align: left;
}
.welcome-text {
font-size: 22px;
margin-bottom: 10px;
color: #333;
}
.info-text {
color: #666;
margin-bottom: 5px;
}
.attendance-form {
margin: 20px 0;
}
.attendance-list {
margin-top: 20px;
max-height: 300px;
overflow-y: auto;
}
.attendance-item {
padding: 12px;
border-bottom: 1px solid #eee;
display: flex;
justify-content: space-between;
align-items: center;
}
.attendance-item:last-child {
border-bottom: none;
}
.present {
color: #43a047;
}
.absent {
color: #e53935;
}
.late {
color: #ff8f00;
}
.role-tag {
display: inline-block;
padding: 3px 10px;
border-radius: 20px;
font-size: 12px;
margin-left: 8px;
background: #1a73e8;
color: white;
}
.teacher-role {
background: #ff8f00;
}
.student-role {
background: #43a047;
}
.admin-role {
background: #6a1b9a;
}
.form-toggle {
text-align: center;
margin-top: 20px;
padding: 10px;
border-top: 1px solid #eee;
}
.form-toggle a {
color: #1a73e8;
text-decoration: none;
cursor: pointer;
font-weight: 500;
}
.form-toggle a:hover {
text-decoration: underline;
}
.password-toggle {
position: absolute;
right: 15px;
top: 45px;
cursor: pointer;
color: #777;
}
.header {
padding: 20px 15px;
}
.form-container {
padding: 20px;
}
}
</style>
</head>
<body>
<div class="container">
<!-- Header -->
<div class="header">
<div class="school-icon">
<i class="fas fa-school"></i>
</div>
<h1>Sistem Presensi Sekolah</h1>
<p>SMK NEGERI 1 BANGUN NEGARA</p>
</div>
<div class="form-toggle">
<p>Belum punya akun? <a id="show-signup">Daftar di sini</a></p>
</div>
</div>
</div>
<div class="form-toggle">
<p>Sudah punya akun? <a id="show-login">Login di sini</a></p>
</div>
</div>
</div>
<div class="dashboard-content">
<h3><i class="fas fa-calendar-check"></i> Presensi Hari
Ini</h3>
<div id="dashboard-content">
<!-- Konten akan diisi berdasarkan peran pengguna -->
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Elemen DOM
const loginForm = document.getElementById('login-form');
const signupForm = document.getElementById('signup-form');
const dashboard = document.getElementById('dashboard');
const loginRoleSelect = document.getElementById('login-role');
const signupRoleSelect = document.getElementById('signup-role');
const loginUsernameInput = document.getElementById('login-username');
const loginPasswordInput = document.getElementById('login-password');
const signupUsernameInput = document.getElementById('signup-username');
const signupPasswordInput = document.getElementById('signup-password');
const signupConfirmPasswordInput = document.getElementById('signup-
confirm-password');
const loginBtn = document.getElementById('login-btn');
const signupBtn = document.getElementById('signup-btn');
const logoutBtn = document.getElementById('logout-btn');
const loginMessage = document.getElementById('login-message');
const signupMessage = document.getElementById('signup-message');
const userNameSpan = document.getElementById('user-name');
const userAvatar = document.getElementById('user-avatar');
const userIdSpan = document.getElementById('user-id');
const classInfoSpan = document.getElementById('class-info');
const roleBadge = document.getElementById('role-badge');
const dashboardContent = document.getElementById('dashboard-content');
const showSignupLink = document.getElementById('show-signup');
const showLoginLink = document.getElementById('show-login');
const studentFields = document.getElementById('student-fields');
const teacherFields = document.getElementById('teacher-fields');
// Data pengguna
let users = JSON.parse(localStorage.getItem('presenceUsers')) || {
student: [
{
username: 'siswa1',
password: 'siswa123',
name: 'Budi Santoso',
email: '[email protected]',
id: 'NIS: 2022001',
class: 'Kelas: XII RPL 1',
avatarColor: '#1a73e8'
},
{
username: 'siswa2',
password: 'siswa123',
name: 'Siti Rahayu',
email: '[email protected]',
id: 'NIS: 2022002',
class: 'Kelas: XII RPL 2',
avatarColor: '#6ec1e4'
}
],
teacher: [
{
username: 'guru1',
password: 'guru123',
name: 'Dr. Ahmad, M.Pd',
email: '[email protected]',
id: 'NIP: 198011012000121001',
class: 'Guru Matematika',
avatarColor: '#ff8f00'
},
{
username: 'guru2',
password: 'guru123',
name: 'Dewi Anggraeni, S.Pd',
email: '[email protected]',
id: 'NIP: 198502142006042001',
class: 'Wali Kelas XII RPL 1',
avatarColor: '#ffb300'
}
],
admin: [
{
username: 'admin',
password: 'admin123',
name: 'Administrator',
email: '[email protected]',
id: 'ID: ADM001',
class: 'Staff Administrasi',
avatarColor: '#6a1b9a'
}
]
};
signupPasswordToggle.addEventListener('click', function() {
togglePasswordVisibility(signupPasswordInput, this);
});
confirmPasswordToggle.addEventListener('click', function() {
togglePasswordVisibility(signupConfirmPasswordInput, this);
});
loginPasswordInput.addEventListener('keypress', function(e) {
if (e.key === 'Enter') login();
});
// Validasi input
if (!username || !password) {
showLoginMessage('Username dan password harus diisi', true);
return;
}
// Tampilkan dashboard
showDashboard(user, role, timestamp);
} else {
showLoginMessage('Username atau password salah', true);
}
}
// Validasi input
if (!fullname || !email || !username || !password || !
confirmPassword) {
showSignupMessage('Semua field harus diisi', true);
return;
}
if (password.length < 6) {
showSignupMessage('Password minimal 6 karakter', true);
return;
}
if (usernameExists) {
showSignupMessage('Username sudah digunakan', true);
return;
}
// Simpan ke localStorage
localStorage.setItem('presenceUsers', JSON.stringify(users));
// Reset form
document.getElementById('signup-fullname').value = '';
document.getElementById('signup-email').value = '';
signupUsernameInput.value = '';
signupPasswordInput.value = '';
signupConfirmPasswordInput.value = '';
document.getElementById('signup-nis').value = '';
document.getElementById('signup-nip').value = '';
dashboardContent.innerHTML = `
<div style="text-align: center; margin-bottom: 20px;">
<div style="font-size: 18px; color: #333; margin-bottom:
5px;">${currentDate}</div>
<div style="font-size: 24px; font-weight: bold; color:
#1a73e8;">${currentTime}</div>
</div>
<p>Status presensi hari ini: <span class="present" style="font-
weight: bold;">TELAH HADIR</span></p>
<p>Waktu presensi: 07:15:32</p>
<div style="margin-top: 20px; padding: 15px; background:
#e8f5e9; border-radius: 8px;">
<h4><i class="fas fa-info-circle"></i> Informasi
Presensi</h4>
<p>Jam masuk: 07:00</p>
<p>Jam pulang: 15:30</p>
</div>
`;
}
// Reset form
loginUsernameInput.value = '';
loginPasswordInput.value = '';
loginMessage.textContent = loginInfo[loginRoleSelect.value];
loginMessage.classList.remove('success-message');
}
if (!isError) {
signupMessage.classList.add('success-message');
} else {
signupMessage.classList.remove('success-message');
}
}
});
</script>
</body>
</html>