Membuat Modal Data Kelas
This commit is contained in:
parent
fcaf956cab
commit
1f54071957
|
|
@ -75,4 +75,48 @@ class SiswaController extends Controller
|
|||
|
||||
return redirect()->route('siswa.index')->with('success', 'Data berhasil dihapus.');
|
||||
}
|
||||
|
||||
public function kelasIndex()
|
||||
{
|
||||
$kelases = Kelas::all();
|
||||
return view('kelas.index', compact('kelases'));
|
||||
}
|
||||
|
||||
public function kelasStore(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'nama' => 'required|string|max:255',
|
||||
]);
|
||||
|
||||
Kelas::create($request->only('nama'));
|
||||
|
||||
return redirect()->route('kelas.index')->with('success', 'Data kelas berhasil ditambahkan!');
|
||||
}
|
||||
|
||||
public function kelasEdit($id)
|
||||
{
|
||||
$kelas = Kelas::findOrFail($id);
|
||||
$kelases = Kelas::all();
|
||||
return view('kelas.index', compact('kelas', 'kelases'));
|
||||
}
|
||||
|
||||
public function kelasUpdate(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
'nama' => 'required|string|max:255',
|
||||
]);
|
||||
|
||||
$kelas = Kelas::findOrFail($id);
|
||||
$kelas->update(['nama' => $request->nama]);
|
||||
|
||||
return redirect()->route('kelas.index')->with('success', 'Data kelas berhasil diperbarui!');
|
||||
}
|
||||
|
||||
public function kelasDestroy($id)
|
||||
{
|
||||
$kelas = Kelas::findOrFail($id);
|
||||
$kelas->delete();
|
||||
|
||||
return redirect()->route('kelas.index')->with('success', 'Data kelas berhasil dihapus!');
|
||||
}
|
||||
}
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
<footer class="main-footer text-sm text-center">
|
||||
<strong>© {{ date('Y') }} Admin Panel</strong> All rights reserved.
|
||||
<strong>© {{ date('Y') }} Halaman Admin</strong> All rights reserved.
|
||||
</footer>
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@
|
|||
</a>
|
||||
</li>
|
||||
|
||||
<!-- Master Data Dropdown -->
|
||||
<!-- Semua Data Dropdown -->
|
||||
<li class="nav-item has-treeview {{ request()->is('siswa*') || request()->is('guru*') || request()->is('kelas*') ? 'menu-open' : '' }}">
|
||||
<a href="#" class="nav-link">
|
||||
<i class="nav-icon fas fa-database"></i>
|
||||
<p>
|
||||
Master Data
|
||||
Semua Data
|
||||
<i class="right fas fa-angle-left"></i>
|
||||
</p>
|
||||
</a>
|
||||
|
|
@ -50,11 +50,17 @@
|
|||
<p>Data Siswa</p>
|
||||
</a>
|
||||
</li>
|
||||
{{-- Tambah menu lain seperti Guru/Kelas di sini --}}
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('kelas.index') }}" class="nav-link {{ request()->is('kelas') ? 'active' : '' }}">
|
||||
<i class="nav-icon fas fa-chalkboard"></i>
|
||||
<p>Data Kelas</p>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<!-- Logout (Di luar Master Data) -->
|
||||
<!-- Logout -->
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('logout') }}" class="nav-link"
|
||||
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
|
||||
|
|
|
|||
|
|
@ -22,6 +22,20 @@
|
|||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Kotak Data Kelas -->
|
||||
<div class="col-md-4 col-sm-12 mb-3">
|
||||
<a href="{{ route('kelas.index') }}" class="text-decoration-none">
|
||||
<div class="card shadow-sm h-100" style="background-color: #3a8cf7ff; color: #ffffffff;">
|
||||
<div class="card-body text-center d-flex flex-column justify-content-center align-items-center">
|
||||
<i class="fas fa-school fa-4x mb-3" style="color: #ffffffff;"></i>
|
||||
<h5 class="card-title">4 Kelas</h5>
|
||||
<p class="m-0">View Details</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Grafik Statistik Pengguna -->
|
||||
<div class="col-md-8 col-sm-12 mb-3">
|
||||
<div class="card bg-white text-dark shadow-sm h-100">
|
||||
|
|
@ -51,10 +65,10 @@
|
|||
const userChart = new Chart(ctx, {
|
||||
type: 'bar',
|
||||
data: {
|
||||
labels: ['Siswa'],
|
||||
labels: ['Siswa', 'Kelas'],
|
||||
datasets: [{
|
||||
label: 'Jumlah Data',
|
||||
data: [2, 1, 6],
|
||||
data: [2, 4],
|
||||
backgroundColor: ['#007bff', '#28a745', '#dc3545'],
|
||||
borderRadius: 5
|
||||
}]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,290 @@
|
|||
@extends('layouts.admin')
|
||||
|
||||
@section('title', 'Data Kelas')
|
||||
@section('content')
|
||||
|
||||
<style>
|
||||
.card {
|
||||
background: #fff;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
background: #2563eb;
|
||||
color: white;
|
||||
padding: 16px 24px;
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
border-radius: 12px 12px 0 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.card-header i {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.table th {
|
||||
background-color: #dbeafe;
|
||||
color: #1e3a8a;
|
||||
}
|
||||
|
||||
.btn-sm {
|
||||
font-size: 13px;
|
||||
padding: 5px 10px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: #3b82f6;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
background-color: #ef4444;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background-color: #6b7280;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.btn i {
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
border-radius: 16px;
|
||||
box-shadow: 0 12px 25px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
background-color: #2563eb;
|
||||
color: white;
|
||||
border-top-left-radius: 16px;
|
||||
border-top-right-radius: 16px;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.modal-header.bg-danger {
|
||||
background-color: #dc2626 !important;
|
||||
}
|
||||
|
||||
.modal-title i {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.modal-footer .btn {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.modal.fade .modal-dialog {
|
||||
transform: translateY(20px);
|
||||
transition: all 0.3s ease-out;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.modal.fade.show .modal-dialog {
|
||||
transform: translateY(0);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.success-icon, .error-icon {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.success-icon {
|
||||
background-color: #d1fae5;
|
||||
}
|
||||
|
||||
.error-icon {
|
||||
background-color: #fee2e2;
|
||||
}
|
||||
|
||||
.success-icon svg,
|
||||
.error-icon svg {
|
||||
animation: popIn 0.4s ease-out forwards;
|
||||
transform: scale(0.8);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
@keyframes popIn {
|
||||
to {
|
||||
transform: scale(1);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<i class="fas fa-chalkboard"></i> Data Kelas
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-bordered text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Nama Kelas</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($kelases as $index => $kelas)
|
||||
<tr>
|
||||
<td>{{ $index + 1 }}</td>
|
||||
<td>{{ $kelas->nama }}</td>
|
||||
<td>
|
||||
<button class="btn btn-primary btn-sm" data-toggle="modal" data-target="#editModal{{ $kelas->id }}">
|
||||
<i class="fas fa-edit"></i> Edit
|
||||
</button>
|
||||
<button class="btn btn-danger btn-sm" data-toggle="modal" data-target="#deleteModal{{ $kelas->id }}">
|
||||
<i class="fas fa-trash-alt"></i> Hapus
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<div class="modal fade" id="editModal{{ $kelas->id }}" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<form action="{{ route('kelas.update', $kelas->id) }}" method="POST">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title"><i class="fas fa-edit"></i> Edit Kelas</h5>
|
||||
<button type="button" class="close text-white" data-dismiss="modal">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label>Nama Kelas</label>
|
||||
<input type="text" name="nama" class="form-control" value="{{ $kelas->nama }}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary"><i class="fas fa-save"></i> Simpan</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal"><i class="fas fa-times"></i> Batal</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="deleteModal{{ $kelas->id }}" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<form action="{{ route('kelas.destroy', $kelas->id) }}" method="POST">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<div class="modal-content">
|
||||
<div class="modal-header bg-danger">
|
||||
<h5 class="modal-title"><i class="fas fa-exclamation-circle"></i> Hapus Kelas</h5>
|
||||
<button type="button" class="close text-white" data-dismiss="modal">×</button>
|
||||
</div>
|
||||
<div class="modal-body text-center">
|
||||
<p>Yakin ingin menghapus <strong>{{ $kelas->nama }}</strong>?</p>
|
||||
</div>
|
||||
<div class="modal-footer justify-content-center">
|
||||
<button type="submit" class="btn btn-danger"><i class="fas fa-trash-alt"></i> Ya, Hapus</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal"><i class="fas fa-times"></i> Batal</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="text-center mt-4">
|
||||
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#tambahModal">
|
||||
<i class="fas fa-plus-circle"></i> Tambah Kelas
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="tambahModal" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
||||
<form action="{{ route('kelas.store') }}" method="POST">
|
||||
@csrf
|
||||
<div class="modal-content animate__animated animate__fadeInDown" style="border-radius: 12px;">
|
||||
<div class="modal-header bg-primary text-white">
|
||||
<h5 class="modal-title">
|
||||
<i class="fas fa-plus-circle me-1"></i> Tambah Kelas
|
||||
</h5>
|
||||
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="nama">Nama Kelas</label>
|
||||
<input type="text" name="nama" id="nama" class="form-control" placeholder="Masukkan nama kelas..." required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="fas fa-save"></i> Simpan
|
||||
</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">
|
||||
<i class="fas fa-times"></i> Batal
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (session('success'))
|
||||
<div class="modal fade show" id="successModal" tabindex="-1" aria-modal="true" role="dialog" style="display: block;">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content border-0 text-center p-4" style="border-radius: 16px; box-shadow: 0 8px 20px rgba(0,0,0,0.1);">
|
||||
<div class="modal-body">
|
||||
<div class="d-flex justify-content-center mb-3 success-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M5 13l4 4L19 7"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<h5 class="text-success font-weight-bold">{{ session('success') }}</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
setTimeout(() => {
|
||||
document.getElementById("successModal").style.display = "none";
|
||||
}, 2500);
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if (session('error'))
|
||||
<div class="modal fade show" id="errorModal" tabindex="-1" aria-modal="true" role="dialog" style="display: block;">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content border-0 text-center p-4" style="border-radius: 16px; box-shadow: 0 8px 20px rgba(0,0,0,0.1);">
|
||||
<div class="modal-body">
|
||||
<div class="d-flex justify-content-center mb-3 error-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="#ef4444" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M6 18L18 6M6 6l12 12"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<h5 class="text-danger font-weight-bold">{{ session('error') }}</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
setTimeout(() => {
|
||||
document.getElementById("errorModal").style.display = "none";
|
||||
}, 3000);
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@endsection
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
|
||||
background-color: white;
|
||||
overflow: hidden;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.card-header.bg-primary {
|
||||
|
|
@ -93,14 +94,31 @@
|
|||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
margin-top: 20px;
|
||||
.text-center.mt-4 {
|
||||
margin-top: 30px !important;
|
||||
}
|
||||
|
||||
.btn-lg {
|
||||
padding: 10px 24px;
|
||||
font-size: 16px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.text-center p {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.btn i {
|
||||
margin-right: 5px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- pastikan FontAwesome sudah dimuat -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet">
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header bg-primary">
|
||||
<h3 class="card-title">📋 Data Siswa</h3>
|
||||
<h3 class="card-title"><i class="fas fa-users mr-2"></i>Data Siswa</h3>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
|
|
@ -133,11 +151,15 @@
|
|||
<td>{{ $siswa->umur }}</td>
|
||||
<td>{{ $siswa->absen }}</td>
|
||||
<td>
|
||||
<a href="{{ route('siswa.edit', $siswa->id) }}" class="btn btn-info btn-sm">Edit</a>
|
||||
<a href="{{ route('siswa.edit', $siswa->id) }}" class="btn btn-info btn-sm">
|
||||
<i class="fas fa-edit"></i>Edit
|
||||
</a>
|
||||
<form action="{{ route('siswa.destroy', $siswa->id) }}" method="POST" class="d-inline">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Yakin mau hapus?')">Hapus</button>
|
||||
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Yakin mau hapus?')">
|
||||
<i class="fas fa-trash-alt"></i>Hapus
|
||||
</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -151,8 +173,10 @@
|
|||
</div>
|
||||
@endif
|
||||
|
||||
<div class="text-right">
|
||||
<a href="{{ route('siswa.create') }}" class="btn btn-primary">+ Tambah Data Siswa</a>
|
||||
<div class="text-center mt-4">
|
||||
<a href="{{ route('siswa.create') }}" class="btn btn-primary btn-lg font-weight-bold">
|
||||
<i class="fas fa-plus-circle"></i> Tambah Data Siswa
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -35,4 +35,16 @@ Route::get('/datasiswa/{id}', [SiswaController::class, 'show'])->name('siswa.sho
|
|||
// Hapus Data Siswa
|
||||
Route::delete('/datasiswa/{id}', [SiswaController::class, 'destroy'])->name('siswa.destroy');
|
||||
|
||||
// Data Kelas Siswa
|
||||
Route::get('/kelas', [SiswaController::class, 'kelasIndex'])->name('kelas.index');
|
||||
|
||||
// Edit & Update Data Kelas Siswa
|
||||
Route::get('/kelas/{id}/edit', [SiswaController::class, 'kelasEdit'])->name('kelas.edit');
|
||||
Route::put('/kelas/{id}', [SiswaController::class, 'kelasUpdate'])->name('kelas.update');
|
||||
|
||||
// Hapus Data Kelas Siswa
|
||||
Route::delete('/kelas/{id}', [SiswaController::class, 'kelasDestroy'])->name('kelas.destroy');
|
||||
|
||||
Route::post('/kelas', [SiswaController::class, 'kelasStore'])->name('kelas.store');
|
||||
|
||||
require __DIR__.'/auth.php';
|
||||
|
|
|
|||
Loading…
Reference in New Issue