This commit is contained in:
E31232303evimr 2026-05-24 15:08:40 +07:00
parent 2ad9c6f295
commit 4476e5361a
4 changed files with 53 additions and 48 deletions

View File

@ -21,12 +21,11 @@ public function index()
public function proses(Request $request) public function proses(Request $request)
{ {
$request->validate([ $request->validate([
'gejala' => 'required|array|min:1', 'gejala' => 'required|array|min:3',
], [ ], [
'gejala.required' => 'Pilih minimal 1 gejala!', 'gejala.required' => 'Pilih minimal 3 gejala!',
'gejala.min' => 'Pilih minimal 1 gejala!', 'gejala.min' => 'Pilih minimal 3 gejala!',
]); ]);
$gejalaInput = $request->gejala; $gejalaInput = $request->gejala;
// Ambil semua rule yang relevan // Ambil semua rule yang relevan

View File

@ -49,14 +49,18 @@
.badge-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } .badge-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; }
@media (max-width: 1023px) { @media (max-width: 1023px) {
.sidebar-desktop { display: none !important; } .sidebar-desktop { display: none !important; }
.main-content { margin-left: 0 !important; } .main-content { margin-left: 0 !important; width: 100% !important; max-width: 100% !important; }
.header-bar { left: 0 !important; } .header-bar { left: 0 !important; }
} }
@media (min-width: 1024px) {
.main-content { margin-left: 16rem; }
.header-bar { left: 16rem; }
}
</style> </style>
@stack('styles') @stack('styles')
</head> </head>
<body class="font-sans antialiased bg-gray-50"> <body class="font-sans antialiased bg-gray-50 overflow-x-hidden">
<div class="min-h-screen flex"> <div class="min-h-screen flex">
<!-- Mobile Overlay --> <!-- Mobile Overlay -->
@ -303,11 +307,11 @@ class="w-full flex items-center px-4 py-3 rounded-xl hover:bg-gray-700 {{ reques
</aside> </aside>
<!-- Main Content --> <!-- Main Content -->
<div class="flex-1 sidebar-transition main-content" style="margin-left:16rem;"> <div class="flex-1 sidebar-transition main-content" style="overflow-x:hidden; min-width:0;">
<!-- Header --> <!-- Header -->
<header class="bg-white border-b border-gray-200 fixed top-0 right-0 z-20 shadow-sm header-bar" <header class="bg-white border-b border-gray-200 fixed top-0 right-0 z-20 shadow-sm header-bar"
style="left:16rem; transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1);"> style="transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1);">
<div class="px-4 lg:px-8 py-4"> <div class="px-4 lg:px-8 py-4">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">

View File

@ -205,6 +205,17 @@
display: none; display: none;
} }
@media (max-width: 1023px) {
.accordion-body { padding: 0 12px 16px 12px !important; }
.accordion-trigger { padding: 12px 12px !important; }
.section-header { padding: 14px 12px !important; }
.budidaya-wrap { overflow-x: hidden; }
.article-title { font-size: 1.1rem !important; }
.hero-img-wrap { height: 180px !important; }
.sidebar-card { padding: 16px 12px !important; }
.hero-card > div:last-child { padding: 16px 12px !important; }
}
.accordion-body.open { .accordion-body.open {
display: block; display: block;
animation: fadeSlideIn .25s ease; animation: fadeSlideIn .25s ease;
@ -418,12 +429,12 @@
@section('content') @section('content')
<div class="budidaya-wrap grid grid-cols-1 lg:grid-cols-3 gap-6"> <div class="budidaya-wrap grid grid-cols-1 lg:grid-cols-3 gap-6 min-w-0">
{{-- ══════════════════════════════════ {{-- ══════════════════════════════════
KONTEN UTAMA KONTEN UTAMA
══════════════════════════════════ --}} ══════════════════════════════════ --}}
<div class="lg:col-span-2 space-y-6"> <div class="lg:col-span-2 space-y-6 min-w-0 overflow-hidden">
{{-- Header Artikel --}} {{-- Header Artikel --}}
<div class="hero-card"> <div class="hero-card">
@ -537,41 +548,18 @@
══════════════════════════════════ --}} ══════════════════════════════════ --}}
<div class="space-y-5 sidebar-sticky"> <div class="space-y-5 sidebar-sticky">
{{-- Info Artikel --}} {{-- Download PDF --}}
<!-- <div class="sidebar-card"> @if($artikel->file_pdf)
<h3> <div class="sidebar-card">
<span class="sidebar-icon" style="background:#e3f2fd"> <a href="{{ Storage::url($artikel->file_pdf) }}" target="_blank" class="btn-pdf">
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" fill="#1565c0" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/> <path d="M14 14V4.5L9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2M9.5 3A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.5z"/>
<path d="m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0"/> <path d="M4.603 14.087a.8.8 0 0 1-.438-.42c-.195-.388-.13-.776.08-1.102.198-.307.526-.568.897-.787a7.7 7.7 0 0 1 1.482-.645 20 20 0 0 0 1.062-2.227 7.3 7.3 0 0 1-.43-1.295c-.086-.4-.119-.796-.046-1.136.075-.354.274-.672.65-.823.192-.077.4-.12.602-.077a.7.7 0 0 1 .477.365c.088.164.12.356.127.538.007.188-.012.396-.047.614-.084.51-.27 1.134-.52 1.794a11 11 0 0 0 .98 1.686 5.8 5.8 0 0 1 1.334.05c.364.066.734.195.96.465.12.144.193.32.2.518.007.192-.047.382-.138.563a1.04 1.04 0 0 1-.354.416.86.86 0 0 1-.51.138c-.331-.014-.654-.196-.933-.417a5.7 5.7 0 0 1-.911-.95 11.7 11.7 0 0 0-1.997.406 11.3 11.3 0 0 1-1.02 1.51c-.292.35-.609.656-.927.787a.8.8 0 0 1-.58.029"/>
</svg> </svg>
</span> Download PDF
Info Artikel </a>
</h3>
<div class="info-row">
<span class="lbl">Kategori</span>
<span class="val green">Budidaya</span>
</div>
<div class="info-row">
<span class="lbl">Tanggal</span>
<span class="val">{{ $artikel->published_at?->format('d M Y') ?? '-' }}</span>
</div>
<div class="info-row">
<span class="lbl">Sub-bab</span>
<span class="val blue">{{ $artikel->subBab->count() }} sub-bab</span>
</div> -->
@if($artikel->file_pdf)
<a href="{{ Storage::url($artikel->file_pdf) }}" target="_blank" class="btn-pdf">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 16 16">
<path d="M14 14V4.5L9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2M9.5 3A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.5z"/>
<path d="M4.603 14.087a.8.8 0 0 1-.438-.42c-.195-.388-.13-.776.08-1.102.198-.307.526-.568.897-.787a7.7 7.7 0 0 1 1.482-.645 20 20 0 0 0 1.062-2.227 7.3 7.3 0 0 1-.43-1.295c-.086-.4-.119-.796-.046-1.136.075-.354.274-.672.65-.823.192-.077.4-.12.602-.077a.7.7 0 0 1 .477.365c.088.164.12.356.127.538.007.188-.012.396-.047.614-.084.51-.27 1.134-.52 1.794a11 11 0 0 0 .98 1.686 5.8 5.8 0 0 1 1.334.05c.364.066.734.195.96.465.12.144.193.32.2.518.007.192-.047.382-.138.563a1.04 1.04 0 0 1-.354.416.86.86 0 0 1-.51.138c-.331-.014-.654-.196-.933-.417a5.7 5.7 0 0 1-.911-.95 11.7 11.7 0 0 0-1.997.406 11.3 11.3 0 0 1-1.02 1.51c-.292.35-.609.656-.927.787a.8.8 0 0 1-.58.029"/>
</svg>
Download PDF
</a>
@endif
</div> </div>
@endif
{{-- Navigasi --}} {{-- Navigasi --}}
<div class="sidebar-card space-y-3"> <div class="sidebar-card space-y-3">

View File

@ -109,7 +109,7 @@
<table style="width:100%; border-collapse:collapse;"> <table style="width:100%; border-collapse:collapse;">
<tr> <tr>
<td style="vertical-align:top;"> <td style="vertical-align:top;">
<span class="badge">Penyakit Terdeteksi</span> <span class="badge">{{ ($riwayat->penyakit?->kategori === 'Hama') ? 'Hama Terdeteksi' : 'Penyakit Terdeteksi' }}</span>
@if($riwayat->penyakit?->tingkat_bahaya) @if($riwayat->penyakit?->tingkat_bahaya)
@php @php
$bc = match($riwayat->penyakit->tingkat_bahaya) { $bc = match($riwayat->penyakit->tingkat_bahaya) {
@ -160,7 +160,7 @@
{{-- Tentang Penyakit --}} {{-- Tentang Penyakit --}}
@if($riwayat->penyakit?->deskripsi_singkat) @if($riwayat->penyakit?->deskripsi_singkat)
<div class="section"> <div class="section">
<div class="section-title"><span class="section-title-bar"></span>Tentang Penyakit</div> <div class="section-title"><span class="section-title-bar"></span>Tentang {{ ($riwayat->penyakit?->kategori === 'Hama') ? 'Hama' : 'Penyakit' }}</div>
<div class="desc-box">{{ $riwayat->penyakit->deskripsi_singkat }}</div> <div class="desc-box">{{ $riwayat->penyakit->deskripsi_singkat }}</div>
</div> </div>
@endif @endif
@ -213,7 +213,15 @@
{{-- Semua Kemungkinan Penyakit --}} {{-- Semua Kemungkinan Penyakit --}}
@if($riwayat->hasil_diagnosa && count($riwayat->hasil_diagnosa) > 1) @if($riwayat->hasil_diagnosa && count($riwayat->hasil_diagnosa) > 1)
<div class="section"> <div class="section">
<div class="section-title"><span class="section-title-bar"></span>Semua Kemungkinan Penyakit</div> @php
$kategoriListPdf = collect($riwayat->hasil_diagnosa)
->map(fn($h) => \App\Models\MasterPenyakit::find($h['id_penyakit'])?->kategori)
->filter()->unique()->values();
$labelPdf = $kategoriListPdf->count() > 1
? 'Semua Kemungkinan Hama & Penyakit'
: 'Semua Kemungkinan ' . ($kategoriListPdf->first() ?? 'Penyakit');
@endphp
<div class="section-title"><span class="section-title-bar"></span>{{ $labelPdf }}</div>
<table class="kemung-table"> <table class="kemung-table">
<thead> <thead>
<tr> <tr>
@ -225,9 +233,15 @@
</thead> </thead>
<tbody> <tbody>
@foreach($riwayat->hasil_diagnosa as $index => $hasil) @foreach($riwayat->hasil_diagnosa as $index => $hasil)
@php $penyakitPdf = \App\Models\MasterPenyakit::find($hasil['id_penyakit']); @endphp
<tr> <tr>
<td><span class="rank-circle {{ $index === 0 ? 'rank-1' : 'rank-other' }}">{{ $index + 1 }}</span></td> <td><span class="rank-circle {{ $index === 0 ? 'rank-1' : 'rank-other' }}">{{ $index + 1 }}</span></td>
<td style="{{ $index === 0 ? 'font-weight:bold; color:#166534;' : 'color:#374151;' }}">{{ $hasil['nama_penyakit'] }}</td> <td style="{{ $index === 0 ? 'font-weight:bold; color:#166534;' : 'color:#374151;' }}">
{{ $hasil['nama_penyakit'] }}
@if($penyakitPdf?->nama_latin)
<br><span style="font-style:italic; font-size:8.5px; color:#9ca3af; font-weight:normal;">{{ $penyakitPdf->nama_latin }}</span>
@endif
</td>
<td style="text-align:right; font-weight:bold; color:{{ $index === 0 ? '#16a34a' : '#6b7280' }};">{{ $hasil['persentase'] }}%</td> <td style="text-align:right; font-weight:bold; color:{{ $index === 0 ? '#16a34a' : '#6b7280' }};">{{ $hasil['persentase'] }}%</td>
<td> <td>
<div class="mini-track"> <div class="mini-track">