Aplikasi Tes Online Lengkap
Selamat Datang di Aplikasi Tes Online
Masuk sebagai Peserta
Masuk sebagai Admin
Petunjuk Pengerjaan Tes
Tes Inteligensi Umum
1. Bacalah setiap soal dengan teliti.
2. Pilihlah salah satu jawaban yang Anda anggap paling tepat.
3. Soal akan ditampilkan satu per satu.
4. Waktu pengerjaan tes adalah 10 menit untuk 10 soal .
5. Jawaban Anda akan tersimpan otomatis. Hasil tes akan ditampilkan setelah semua soal terjawab atau ketika waktu pengerjaan habis.
Saya Mengerti, Mulai Mengerjakan
Kembali ke Identitas
Sisa Waktu: 10:00
Soal Ke-1
Ini adalah teks pertanyaan?
Sebelumnya
Selanjutnya
Selesai & Lihat Hasil
Hasil Tes Anda
Ulangi Tes
Selesai (Logout)
Dasbor Admin
Selamat datang, Admin! Kelola tes dan lihat hasilnya di sini.
Manajemen Soal & Jawaban untuk: Tes Inteligensi Umum
Fitur ini memerlukan backend untuk menyimpan dan mengelola soal dari berbagai jenis.
Tambah Soal Baru
Acak Urutan Soal (Simulasi)
(Saat ini: Tidak Diacak)
Daftar soal akan muncul di sini. Klik soal untuk mengedit.
Hasil Tes Peserta
Fitur ini memerlukan backend untuk mengambil dan mengekspor data hasil tes.
Ekspor ke Excel (Simulasi)
Ekspor ke Google Spreadsheet (Simulasi)
Tabel hasil tes peserta akan ditampilkan di sini.
// Sebelumnya (menggunakan variabel JS):
// if (enteredPassword === currentPasswordPeserta) { ... }
// Sekarang (mengirim ke backend):
async function loginAs(role) {
const username = document.getElementById('loginUsername').value; // Jika ada username
const password = document.getElementById('loginPassword').value;
try {
const response = await fetch('/api/login', { // URL API backend
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password, role })
});
const data = await response.json();
if (response.ok) {
localStorage.setItem('authToken', data.token); // Simpan token autentikasi
currentUserRole = data.role;
if (data.role === 'admin') {
showPage('adminPage');
// Muat data admin
} else {
showPage('identityPage');
}
} else {
document.getElementById('loginError').textContent = data.message || "Login gagal!";
}
} catch (error) {
console.error("Error logging in:", error);
document.getElementById('loginError').textContent = "Terjadi kesalahan koneksi.";
}
}
// Sebelumnya (dari array JS `currentActiveQuestions`):
// const question = currentActiveQuestions[index];
// Sekarang (mengambil dari backend):
async function loadQuestion(index) {
try {
// Asumsi currentTestId sudah diketahui
const response = await fetch(`/api/tests/
\{currentTestId\}/questions/ {index}`, {
headers: { 'Authorization': `Bearer ${localStorage.getItem('authToken')}` }
});
if (!response.ok) throw new Error('Gagal memuat soal');
const question = await response.json();
// ... (lanjutkan logika untuk menampilkan soal seperti sebelumnya) ...
// questionNumberEl.textContent = `Soal Ke-${question.order_in_test} dari ${totalQuestionsInThisTest}`;
// questionTextEl.textContent = question.question_text;
// ... dan seterusnya ...
} catch (error) {
console.error("Error loading question:", error);
// Tampilkan pesan error ke pengguna
}
}
async function submitTest(timeUp = false) {
// ... (hentikan timer, kumpulkan semua jawaban dari userAnswers array) ...
try {
const response = await fetch(`/api/tests/${currentTestId}/submit`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${localStorage.getItem('authToken')}`
},
body: JSON.stringify({ answers: userAnswers, timeUp })
});
const resultData = await response.json();
if (response.ok) {
// ... (tampilkan hasil tes seperti sebelumnya menggunakan resultData dari backend) ...
showPage('resultPage');
} else {
// Tampilkan pesan error
}
} catch (error) {
// Tangani error koneksi
}
}
from app import init_db
init_db()
exit()