Initial commit

This commit is contained in:
root
2026-05-26 08:07:45 +00:00
commit a234e55e64
4263 changed files with 855927 additions and 0 deletions
+207
View File
@@ -0,0 +1,207 @@
<div class="container mt-4">
<div class="card modern-card shadow-sm border-0 rounded-4">
<div class="card-body p-4 text-center">
<h5 id="judulscan">Silahkan Scan QR <?= ucfirst($scan_type); ?></h5>
<div id="reader" style="max-width: 50%; margin: 0 auto;"></div>
<div id="result" class="mt-4">Hasil scan akan muncul di sini</div>
<button class="btn btn-success btn-add mt-3" id="backBtn" style="display:none;">Ulangi Scan</button>
<a href="<?= base_url(); ?>" class="btn btn-success btn-add mt-3">Kembali</a>
</div>
</div>
</div>
<style>
/* Modern Detail Card Style */
.detail-card {
background: #fff;
border-radius: 12px;
padding: 20px;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
max-width: 450px;
margin: 20px auto;
}
.detail-card img {
width: 120px;
height: 120px;
border-radius: 50%;
object-fit: cover;
border: 3px solid #fb6340;
}
.detail-card h2 {
margin-top: 15px;
color: #333;
font-weight: 700;
}
.detail-row {
display: flex;
justify-content: space-between;
padding: 8px 0;
border-bottom: 1px solid #f0f0f0;
color: #555;
}
.detail-row:last-child {
border-bottom: none;
}
.detail-label {
font-weight: 600;
color: #fb6340;
}
</style>
<script>
let scanner;
const resultDiv = document.getElementById("result");
const backBtn = document.getElementById("backBtn");
const judul = document.getElementById("judulscan");
function startScanner() {
scanner = new Html5Qrcode("reader");
Html5Qrcode.getCameras().then(cameras => {
if (cameras && cameras.length) {
let cameraId = cameras[0].id;
const backCamera = cameras.find(cam =>
cam.label.toLowerCase().includes("back")
);
if (backCamera) cameraId = backCamera.id;
scanner.start(
cameraId,
{ fps: 10, qrbox: { width: 250, height: 250 } },
qrCodeMessage => {
// Stop scanner
scanner.stop().then(() => {
scanner.clear();
// Kirim data ke server
fetch('<?= site_url("cameraqrscan/get_data"); ?>', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
qr_code: qrCodeMessage,
scan_type: '<?= $scan_type ?>'
})
})
.then(res => res.json())
.then(data => {
// Jika sukses (status true)
if (data.status) {
// Jika ada peringatan 5 menit
if (data.message && data.message.includes("5 menit")) {
showDetail(data.data, true, data.message);
}
// Sukses normal
else {
showDetail(data.data, false, "");
}
} else {
// Jika error lain
resultDiv.innerHTML = `
<p class="text-danger">${data.message}</p>
`;
backBtn.style.display = "inline-block";
}
});
});
},
errorMessage => {
console.warn(errorMessage);
}
).catch(err => {
console.error("Start scanner error:", err);
alert("Gagal membuka kamera: " + err);
});
} else {
alert("Tidak ada kamera terdeteksi");
}
}).catch(err => {
console.error("Camera error:", err);
alert("Tidak bisa mengakses kamera: " + err);
});
}
// ===========================================
// TAMPIL DETAIL DATA + WARNING JIKA PERLU
// ===========================================
function showDetail(data, isWarning = false, warningText = "") {
const foto = data.foto
? `<?= base_url('uploads/siswa/') ?>` + data.foto
: 'https://storage.manjapro.net/file/users/avatar/default.jpg';
let warningHtml = "";
if (isWarning) {
warningHtml = `
<div class="alert alert-warning mt-3">
⚠️ ${warningText}
</div>
`;
}
let html = `
${warningHtml}
<h2>Scan <?= ucfirst($scan_type) ?> Berhasil</h2>
<div class="detail-card text-center">
<img src="${foto}" alt="Foto Siswa">
<h2>${data.nama}</h2>
<div class="detail-row mt-3">
<div class="detail-label">Kelas</div>
<div>${data.nama_kelas}</div>
</div>
<div class="detail-row mt-3">
<div class="detail-label">Kamar</div>
<div>${data.nama_kamar} (${data.nama_gedung_kamar})</div>
</div>
<div class="detail-row">
<div class="detail-label">Alamat</div>
<div>${data.alamat}</div>
</div>
<div class="detail-row">
<div class="detail-label">Nama Orang Tua</div>
<div>${data.nama_wali}</div>
</div>
<div class="detail-row">
<div class="detail-label">Waktu</div>
<div>${data.created_at}</div>
</div>
</div>
`;
resultDiv.innerHTML = html;
backBtn.style.display = "inline-block";
judul.style.display = "none";
}
// ===========================================
// TOMBOL ULANGI SCAN
// ===========================================
backBtn.addEventListener("click", () => {
resultDiv.innerText = "Hasil scan akan muncul di sini";
backBtn.style.display = "none";
judul.style.display = "block";
startScanner();
});
// ===========================================
// MULAI SCANNER SAAT PAGE LOAD
// ===========================================
window.onload = startScanner;
</script>