|
@ -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();
|
||||
|
|
|
@ -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',
|
||||
]);
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
|
|
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 345 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 98 KiB |
|
@ -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
|
|
@ -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>
|
||||
|
|
|
@ -7,5 +7,6 @@
|
|||
@include('partials.top')
|
||||
@include('partials.basic')
|
||||
@include('partials.panduan')
|
||||
@include('partials.tentang')
|
||||
|
||||
@endsection
|
|
@ -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())
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|