This commit is contained in:
ericko-cyber 2025-05-07 19:14:08 +07:00
parent e3b641115f
commit c3d3226556
19 changed files with 319 additions and 29 deletions

View File

@ -20,11 +20,19 @@ public function store(Request $request)
$request->validate([
'kode_gejala' => 'required|unique:gejala,kode_gejala|max:10',
'nama_gejala' => 'required|string|max:255',
'gambar' => 'nullable|image|mimes:jpeg,png,jpg,gif',
]);
// Upload gambar
$gambar = $request->file('gambar');
$namaGambar = time() . '_' . $gambar->getClientOriginalName();
$gambar->move(public_path('assets/images'), $namaGambar);
Gejala::create([
'kode_gejala' => $request->kode_gejala,
'nama_gejala' => $request->nama_gejala,
'gambar' => $namaGambar
]);
return redirect()->back()->with('success', 'Gejala berhasil ditambahkan.');
@ -35,17 +43,41 @@ public function update(Request $request, $id)
$request->validate([
'kode_gejala' => 'required|max:10',
'nama_gejala' => 'required|string|max:255',
'gambar' => 'nullable|image|mimes:jpeg,png,jpg,gif',
]);
$gejala = Gejala::findOrFail($id);
$gejala->update([
'kode_gejala' => $request->kode_gejala,
'nama_gejala' => $request->nama_gejala,
]);
// Update data teks terlebih dahulu
$gejala->kode_gejala = $request->kode_gejala;
$gejala->nama_gejala = $request->nama_gejala;
// Jika ada gambar baru, upload dan ganti gambar
if ($request->hasFile('gambar')) {
// Hapus gambar lama jika ada
if ($gejala->gambar) {
$gambarPath = public_path('assets/images/' . $gejala->gambar);
if (file_exists($gambarPath)) {
unlink($gambarPath);
}
}
// Upload gambar baru
$gambar = $request->file('gambar');
$namaGambar = time() . '_' . $gambar->getClientOriginalName();
$gambar->move(public_path('assets/images'), $namaGambar);
// Simpan nama gambar baru
$gejala->gambar = $namaGambar;
}
// Simpan perubahan ke database
$gejala->save();
return redirect()->route('daftargejala')->with('success', 'Gejala berhasil diperbarui.');
}
public function destroy($id)
{
DB::table('gejala')->where('id', $id)->delete();

View File

@ -28,7 +28,7 @@ public function store(Request $request)
'subjudul' => 'required|string|max:150',
'deskripsi' => 'required|string',
'penanganan' => 'required|string',
'gambar' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',
'gambar' => 'required|image|mimes:jpeg,png,jpg,gif',
'gejala' => 'required|array', // Memastikan gejala yang dipilih adalah array
'gejala.*' => 'exists:gejala,id', // Memastikan ID gejala ada di tabel gejala
]);
@ -68,7 +68,7 @@ public function update(Request $request, $id)
'subjudul' => 'required|string|max:150',
'deskripsi' => 'required|string',
'penanganan' => 'required|string',
'gambar' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
'gambar' => 'nullable|image|mimes:jpeg,png,jpg,gif',
'gejala' => 'required|array', // Validasi gejala yang dipilih
'gejala.*' => 'exists:gejala,id',
]);

View File

@ -16,7 +16,8 @@ class Gejala extends Model
// Relasi ke tabel penyakit melalui pivot 'rules'
protected $fillable = [
'kode_gejala',
'nama_gejala'
'nama_gejala',
'gambar'
];
public function penyakit()
{

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@ -34,6 +34,7 @@
<tr>
<th>Kode Gejala</th>
<th>Nama Gejala</th>
<th>Gambar</th>
<th>Aksi</th>
</tr>
</thead>
@ -41,6 +42,7 @@
<tr>
<th>Kode Gejala</th>
<th>Nama Gejala</th>
<th>Gambar</th>
<th>Aksi</th>
</tr>
</tfoot>
@ -49,6 +51,9 @@
<tr>
<td>{{ $gejala->kode_gejala }}</td>
<td>{{ $gejala->nama_gejala }}</td>
<td>
<img src="{{ asset('assets/images/' . $gejala->gambar) }}" width="100" alt="Gambar Gejala">
</td>
<td>
<form action="{{ route('gejala.destroy', $gejala->id) }}" method="POST" style="display:inline-block;">
@csrf
@ -70,7 +75,7 @@
@foreach($gejala_list as $gejala)
<div class="modal fade" id="editGejalaModal{{ $gejala->id }}" tabindex="-1" aria-labelledby="editGejalaModalLabel{{ $gejala->id }}" aria-hidden="true">
<div class="modal-dialog">
<form action="{{ route('gejala.update', $gejala->id) }}" method="POST">
<form action="{{ route('gejala.update', $gejala->id) }}" method="POST" enctype="multipart/form-data">
@csrf
@method('PUT')
<div class="modal-content">
@ -87,6 +92,15 @@
<label for="nama_gejala" class="form-label">Nama Gejala</label>
<input type="text" name="nama_gejala" class="form-control" value="{{ $gejala->nama_gejala }}" required>
</div>
<div class="mb-3">
<label for="gambar" class="form-label">Gambar (Kosongkan jika tidak ingin mengganti)</label>
<input type="file" class="form-control" name="gambar" accept="image/*">
<small class="form-text text-muted">Gambar saat ini: <br><img src="{{ asset('assets/images/' . $gejala->gambar) }}" width="100"></small>
</div>
@error('gambar')
<div class="text-danger">{{ $message }}</div>
@enderror
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Tutup</button>
@ -101,7 +115,7 @@
<!-- Modal Tambah Gejala -->
<div class="modal fade" id="tambahGejalaModal" tabindex="-1" aria-labelledby="tambahGejalaModalLabel" aria-hidden="true">
<div class="modal-dialog">
<form action="{{ route('gejala.store') }}" method="POST">
<form action="{{ route('gejala.store') }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="modal-content">
<div class="modal-header">
@ -117,6 +131,10 @@
<label for="nama_gejala" class="form-label">Nama Gejala</label>
<input type="text" name="nama_gejala" class="form-control" id="nama_gejala" required>
</div>
<div class="mb-3">
<label for="gambar" class="form-label">Gambar</label>
<input type="file" class="form-control" id="gambar" name="gambar" accept="image/*" required>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Tutup</button>
@ -127,4 +145,4 @@
</div>
</div>
@endsection
@endsection

View File

@ -75,19 +75,15 @@
<div class="container detailpenyakit">
@foreach ($gejala as $g)
<a href="{{ route('rinciandetailpenyakit', ['id' => $p->id]) }}" class="card-link">
<a href="{{ route('rinciandetailpenyakit', ['id' => $g->id]) }}" class="card-link">
<div class="card">
<div class="card__header">
<img src="{{ asset('assets/images/gambar') }}" alt="card__image" class="card__image" width="600">
<img src="{{ asset('assets/images/' . $g->gambar) }}" alt="card__image" class="card__image" width="600">
</div>
<div class="card__body">
<h4 class="judul-penyakit">
{{ $g->nama_gejala }}
</h4>
<!-- <div class="flex-container">
<div class="label-box">Penyakit</div>
<div class="rekaman-button">Akses Rincian Penyakit</div>
</div> -->
</div>
</div>
</a>

View File

@ -7,5 +7,6 @@
@include('partials.top')
@include('partials.basic')
@include('partials.panduan')
@include('partials.tentang')
@endsection

View File

@ -178,6 +178,7 @@
<li class="scroll-to-section"><a href="#top" class="active">Home</a></li>
<li class="scroll-to-section"><a href="#about">Basic Pengetahuan</a></li>
<li class="scroll-to-section"><a href="#PP">Panduan Penggunaan</a></li>
<li class="scroll-to-section"><a href="#tentang">Tentang Pakar</a></li>
<li><a href="{{ route('diagnosa') }}">Diagnosa</a></li>
<li class="d-flex align-items-center">
@if(Auth::check())

View File

@ -51,19 +51,6 @@
</div>
</div>
</div>
<div class="col-lg-6">
<div class="item wow fadeIn" data-wow-duration="1s" data-wow-delay="1.1s">
<div class="icon">
<img src="assets/images/virus.png" alt="">
</div>
<div class="right-text">
<div>
<h4>Mati Pucuk</h4>
<p>Penyakit yang menyebabkan daun layu, mengering, dan akhirnya mati, sering kali dimulai dari ujung daun.</p>
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="item wow fadeIn" data-wow-duration="1s" data-wow-delay="1.1s">
<div class="icon">

View File

@ -0,0 +1,254 @@
<style>
.subcontainer {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 10px;
width: 900px;
height: 680px;
max-height: fit-content;
background-color: #e2e3e3;
padding: 10px;
box-shadow: rgba(128, 128, 128, 0.6) 0px 7px 19px 0px;
}
.top-subcontainer {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
width: 80%;
height: 150px;
}
.bottom-subcontainer {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 10px;
width: 100%;
height: calc((700px - 150px) - 40px);
}
.left {
display: flex;
justify-content: center;
align-items: center;
width: 50%;
height: fit-content;
}
.left img {
height: calc((700px - 150px) - 120px);
width: 370px;
border: 5px solid transparent;
outline: 5px solid #E98462;
object-fit: cover;
object-position: 60% 0%;
border-radius: 10px;
}
.right {
display: flex;
flex-direction: column;
justify-content: left;
align-items: left;
width: 50%;
height: fit-content;
}
.right table {
display: flex;
flex-direction: column;
justify-content: left;
align-items: left;
width: 100%;
border-collapse: collapse;
}
.right table th {
padding: 5px;
border: none;
text-align: left;
}
.right table td {
padding: 5px;
border: none;
}
.right button {
width: 130px;
margin-top: 10px;
}
.right button {
background-color: #E98462;
border: 2px solid #000;
color: #fff;
padding: 12px 20px;
border-radius: 5px;
}
.right button:hover {
cursor: pointer;
background-color: #d1dae0;
transition: .5s;
color: #000;
border: 2px solid #E98462;
}
.right h2 {
margin: 0px;
}
.bottom-subcontainer .right span {
color: #cb2d3e;
font-size: 35px;
}
@media only screen and (max-width: 1024px) {
.container {
height: fit-content;
}
.subcontainer {
margin: 10px 0px 0px;
width: 85%;
height: fit-content;
}
.top-subcontainer {
width: 100%;
padding: 20px;
height: fit-content;
}
.bottom-subcontainer {
display: flex;
flex-direction: column;
padding: 0px;
height: fit-content;
}
.right {
width: 100%;
height: fit-content;
padding: 40px;
}
}
@media only screen and (max-width: 630px) {
.container {
height: fit-content;
}
.subcontainer {
margin: 20px 0px;
width: 95%;
height: fit-content;
}
.top-subcontainer {
width: 100%;
height: fit-content;
}
.bottom-subcontainer {
display: flex;
flex-direction: column;
height: fit-content;
}
.left img {
height: 300px;
width: 300px;
}
.right {
width: 100%;
padding: 20px;
}
}
.credit a {
text-decoration: none;
color: #000;
font-weight: 800;
}
.credit {
color: #000;
text-align: center;
margin-top: 10px;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
.credit span {
color: tomato;
font-size: 20px;
}
.our-tentang .section-heading h2 {
text-align: center;
margin: 0px 90px 0px 90px;
margin-bottom: 80px;
margin-top: 100px;
position: relative;
z-index: 1;
}
p{
font-size: 15px;
font-weight: 600;
}
</style>
<div id="tentang" class="our-tentang section">
<div class="container">
<div class="row">
<div class="col-lg-6 offset-lg-3">
<div class="section-heading wow bounceIn" data-wow-duration="1s" data-wow-delay="0.2s">
<h2><span>Tentang</span> <em>Pakar</em></h2>
</div>
</div>
</div>
<div class="bottom-subcontainer">
<div class="left">
<img src="assets/images/foto_pakar.jpg" alt="Gallyndra Fatkhu Dinata">
</div>
<div class="right">
<h2 class="mb-2"><span>Gallyndra Fatkhu Dinata, S.P., M.P.</span></h2>
<p>
Gallyndra Fatkhu Dinata, S.P., M.P. merupakan dosen di Jurusan Produksi Pertanian, Politeknik Negeri Jember.
Beliau memiliki keahlian dalam bidang budidaya pertanian dan pengelolaan tanaman hortikultura, serta aktif dalam berbagai kegiatan penelitian pada tanaman maupun hama.
Sebagai pakar, beliau telah banyak membantu mahasiswa dalam mengembangkan penelitian yang aplikatif di bidang pertanian modern.
</p>
<table>
<tr>
<th>Nama :</th>
<td>Gallyndra Fatkhu Dinata, S.P., M.P.</td>
</tr>
<tr>
<th>NIP :</th>
<td>199604302022031004</td>
</tr>
<tr>
<th>NIDN :</th>
<td>0030049603</td>
</tr>
<tr>
<th>Email :</th>
<td>gallyndra.fatkhu@polije.ac.id</td>
</tr>
<tr>
<th>Institusi :</th>
<td>Politeknik Negeri Jember</td>
</tr>
</table>
</div>
</div>
</div>
</div>