PERTEMUAN8
PERTEMUAN8
NIM : A11.2022.14739
Kelompok : Pemerograman Sisi Klien (4721)
Tugas Pertemuan 7
Hasil Tampilan
return (
<div className="h-screen bg-gray-100 p-8 relative">
{/* Logout Button in the Top Right Corner */}
<button
onClick={handleLogout}
className="absolute top-4 right-4 bg-red-500 text-white py-2 px-6 rounded hover:bg-red-600"
>
Logout
</button>
<header className="mb-4">
<h1 className="text-3xl font-bold">Dashboard Mahasiswa</h1>
</header>
<section>
<p className="text-lg mb-6">Selamat datang di dashboard mahasiswa! Berikut adalah ringkasan
informasi yang terkait dengan mahasiswa.</p>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{/* Card for Total Students */}
<div className="bg-white shadow rounded-lg p-6">
<h3 className="text-xl font-semibold">Total Mahasiswa</h3>
<p className="mt-2 text-gray-600">Jumlah mahasiswa yang terdaftar di universitas</p>
<div className="text-2xl font-bold mt-4">1200</div>
</div>
<div className="mt-8">
<h2 className="text-2xl font-bold mb-4">Tautan Cepat</h2>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{/* Quick Link 1 */}
<div className="bg-white shadow rounded-lg p-6">
<h4 className="text-lg font-semibold">Lihat Data Mahasiswa</h4>
<p className="mt-2 text-gray-600">Akses data mahasiswa lengkap dan detail.</p>
<button className="mt-4 bg-blue-500 text-white py-2 px-4 rounded hover:bg-blue-600">
Lihat Data
</button>
</div>
src/admin/Mahsiswa.jsx
useEffect(() => {
// Fungsi untuk mengambil data
const fetchData = async () => {
try {
const response = await axios.get("https://jsonplaceholder.typicode.com/posts");
setData(response.data); // Set data dari response API
setError(null); // Pastikan error di-reset
} catch (err) {
setError("Terjadi kesalahan saat mengambil data.");
} finally {
setLoading(false); // Hentikan loading setelah selesai
}
};
fetchData();
}, []);
return (
<div>
<h1>Halaman Mahasiswa</h1>
<div>
<table className="min-w-full table-auto">
<thead>
<tr className="bg-gray-200">
<th className="border px-4 py-2">No</th>
<th className="border px-4 py-2">Title</th>
<th className="border px-4 py-2">Body</th>
</tr>
</thead>
<tbody>
{data.map((item, index) => (
<tr key={item.id} className={index % 2 === 0 ? 'bg-gray-100' : 'bg-gray-200'}>
<td className="border px-4 py-2">{index + 1}</td>
<td className="border px-4 py-2">{item.title}</td>
<td className="border px-4 py-2">{item.body}</td>
</tr>
))}
</tbody>
</table>
</div>
</div>
);
};
return (
<div className="flex justify-center items-center h-screen bg-gray-100">
<form onSubmit={handleLogin} className="bg-white p-6 rounded shadow-md w-96">
<h2 className="text-2xl font-bold mb-4">Login</h2>
<div className="mb-4">
<label className="block mb-1">Email</label>
<input
type="email"
className="w-full px-4 py-2 border rounded"
value={email}
onChange={(e) => setEmail(e.target.value)}
required
/>
</div>
<div className="mb-4">
<label className="block mb-1">Password</label>
<input
type="password"
className="w-full px-4 py-2 border rounded"
value={password}
onChange={(e) => setPassword(e.target.value)}
required
/>
</div>
<button
type="submit"
className="w-full bg-blue-500 text-white py-2 rounded hover:bg-blue-600"
>
Login
</button>
<div className="mt-4 text-center">
<p className="text-sm">
Belum punya akun?{' '}
<button
onClick={goToRegister}
className="text-blue-500 hover:underline"
>
Daftar di sini
</button>
</p>
</div>
</form>
</div>
);
};
alert('Pendaftaran berhasil!');
navigate('/login'); // Setelah daftar, arahkan pengguna ke halaman login
};
return (
<div className="flex justify-center items-center h-screen bg-gray-100">
<form onSubmit={handleRegister} className="bg-white p-6 rounded shadow-md w-96">
<h2 className="text-2xl font-bold mb-4">Daftar Akun</h2>
<div className="mb-4">
<label className="block mb-1">Email</label>
<input
type="email"
className="w-full px-4 py-2 border rounded"
value={email}
onChange={(e) => setEmail(e.target.value)}
required
/>
</div>
<div className="mb-4">
<label className="block mb-1">Password</label>
<input
type="password"
className="w-full px-4 py-2 border rounded"
value={password}
onChange={(e) => setPassword(e.target.value)}
required
/>
</div>
<div className="mb-4">
<label className="block mb-1">Konfirmasi Password</label>
<input
type="password"
className="w-full px-4 py-2 border rounded"
value={confirmPassword}
onChange={(e) => setConfirmPassword(e.target.value)}
required
/>
</div>
<button
type="submit"
className="w-full bg-blue-500 text-white py-2 rounded hover:bg-blue-600"
>
Daftar
</button>
</form>
</div>
);
};
useEffect(() => {
// Cek status login dari localStorage
const user = localStorage.getItem('isLoggedIn');
if (user === 'true') {
setIsLoggedIn(true);
}
}, []);
return (
<Router>
<Routes>
{/* Rute untuk autentikasi */}
<Route path="/login" element={<Login setIsLoggedIn={setIsLoggedIn} />} />
<Route path="/register" element={<Register />} />