MIF_E31230333/resources/views/user/riwayat.blade.php

170 lines
7.3 KiB
PHP

{{-- resources/views/user/riwayat.blade.php --}}
@extends('layouts.app')
@section('title', 'Riwayat Diagnosa')
@push('styles')
<style>
/* STATS */
.stats-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-bottom: 24px; }
.stat-card {
background: var(--white); border-radius: 14px; padding: 20px;
border: 1px solid var(--border); box-shadow: var(--shadow-sm);
position: relative; overflow: hidden; transition: all 0.3s;
}
.stat-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); }
.stat-card::before { content:''; position:absolute; top:0; left:0; right:0; height:3px; background:var(--gl); border-radius:3px 3px 0 0; }
.stat-card:first-child::before { background:var(--rm); }
.stat-icon { font-size: 24px; margin-bottom: 10px; display: block; }
.stat-val { font-family: 'Plus Jakarta Sans', sans-serif; font-size: 32px; font-weight: 800; color: var(--text); line-height: 1; margin-bottom: 4px; }
.stat-val.red { color: var(--rm); }
.stat-label { font-size: 12px; color: var(--text2); font-weight: 500; }
/* TOOLBAR */
.toolbar { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; flex-wrap: wrap; }
.search-box {
flex: 1; min-width: 200px; display: flex; align-items: center; gap: 10px;
background: var(--white); border: 1px solid var(--border); border-radius: 10px;
padding: 0 14px; box-shadow: var(--shadow-sm);
}
.search-box input {
flex: 1; border: none; background: none; font-size: 13px;
padding: 11px 0; font-family: 'DM Sans', sans-serif; outline: none; color: var(--text);
}
.search-icon { font-size: 15px; color: var(--text3); }
/* LIST */
.riwayat-list { display: flex; flex-direction: column; gap: 12px; }
.riwayat-card {
background: var(--white); border-radius: 14px; padding: 16px 20px;
border: 1px solid var(--border); box-shadow: var(--shadow-sm);
display: flex; align-items: center; gap: 16px;
transition: all 0.25s; cursor: pointer; text-decoration: none;
}
.riwayat-card:hover { border-color: rgba(192,57,43,0.3); box-shadow: var(--shadow-md); transform: translateY(-2px); }
.riwayat-foto {
width: 54px; height: 54px; border-radius: 10px; flex-shrink: 0;
overflow: hidden; border: 1px solid var(--border); background: var(--gpl);
display: flex; align-items: center; justify-content: center; font-size: 22px;
}
.riwayat-foto img { width: 100%; height: 100%; object-fit: cover; }
.riwayat-info { flex: 1; min-width: 0; }
.riwayat-nama { font-family: 'Plus Jakarta Sans', sans-serif; font-size: 14px; font-weight: 700; color: var(--text); margin-bottom: 4px; }
.riwayat-meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 3px; }
.riwayat-kode { font-size: 11px; font-family: monospace; color: var(--rm); background: var(--rp); padding: 2px 8px; border-radius: 4px; }
.riwayat-tgl { font-size: 12px; color: var(--text3); }
.riwayat-gejala { font-size: 12px; color: var(--text3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.riwayat-right { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; flex-shrink: 0; }
.riwayat-cf { font-family: 'Plus Jakarta Sans', sans-serif; font-size: 18px; font-weight: 800; color: var(--rm); }
.riwayat-cf-label { font-size: 10px; color: var(--text3); text-align: right; }
.riwayat-arrow { font-size: 16px; color: var(--text3); transition: transform 0.2s; }
.riwayat-card:hover .riwayat-arrow { transform: translateX(4px); color: var(--rm); }
/* EMPTY */
.empty-state { text-align: center; padding: 60px 20px; }
.empty-icon { font-size: 56px; display: block; margin-bottom: 16px; }
.empty-state h3 { font-family: 'Plus Jakarta Sans', sans-serif; font-size: 18px; font-weight: 700; color: var(--text); margin-bottom: 8px; }
.empty-state p { font-size: 14px; color: var(--text2); margin-bottom: 24px; }
@media (max-width: 768px) {
.stats-row { grid-template-columns: 1fr 1fr; }
.stats-row .stat-card:last-child { grid-column: 1 / -1; }
.riwayat-card { flex-wrap: wrap; }
.riwayat-right { display: none; }
.toolbar { flex-direction: column; align-items: stretch; }
}
</style>
@endpush
@section('content')
<div class="page-header">
<div class="breadcrumb"><a href="{{ route('konsultasi.index') }}">Beranda</a> / Riwayat diagnosa</div>
<h1>Riwayat diagnosa</h1>
<p>Semua hasil diagnosa tanamanmu tersimpan di sini</p>
</div>
<div class="stats-row">
<div class="stat-card">
<span class="stat-icon">🩺</span>
<div class="stat-val red">{{ $totalKonsultasi }}</div>
<div class="stat-label">Total diagnosa</div>
</div>
<div class="stat-card">
<span class="stat-icon"></span>
<div class="stat-val">{{ $totalTerdeteksi }}</div>
<div class="stat-label">Penyakit terdeteksi</div>
</div>
<div class="stat-card">
<span class="stat-icon">📅</span>
<div class="stat-val">{{ $bulanIni }}</div>
<div class="stat-label">Diagnosa bulan ini</div>
</div>
</div>
<div class="toolbar">
<div class="search-box">
<span class="search-icon">🔍</span>
<input type="text" id="searchInput" placeholder="Cari kode atau nama penyakit..." oninput="filterRiwayat()">
</div>
<a href="{{ route('konsultasi.index') }}" class="btn btn-primary">+ Diagnosa baru</a>
</div>
<div class="riwayat-list" id="riwayatList">
@forelse($riwayat as $k)
<a href="{{ route('konsultasi.show', $k->id) }}" class="riwayat-card"
data-search="{{ strtolower($k->kode_konsultasi . ' ' . ($k->hasilUtama?->penyakit?->nama ?? '')) }}">
<div class="riwayat-foto">
@if($k->hasilUtama?->penyakit?->gambar)
<img src="{{ asset('storage/' . $k->hasilUtama->penyakit->gambar) }}"> @else
🌿
@endif
</div>
<div class="riwayat-info">
<div class="riwayat-nama">{{ $k->hasilUtama?->penyakit?->nama ?? 'Tidak terdeteksi' }}</div>
<div class="riwayat-meta">
<span class="riwayat-kode">{{ $k->kode_konsultasi }}</span>
<span class="riwayat-tgl">📅 {{ \Carbon\Carbon::parse($k->tanggal)->locale('id')->isoFormat('D MMM Y, HH:mm') }}</span>
@if($k->hasilUtama?->penyakit?->jenis)
<span class="badge badge-{{ $k->hasilUtama->penyakit->jenis === 'Hama' ? 'gray' : 'red' }}">{{ $k->hasilUtama->penyakit->jenis }}</span>
@endif
</div>
<div class="riwayat-gejala">{{ $k->gejala->count() }} gejala · {{ $k->gejala->take(3)->pluck('nama')->join(', ') }}{{ $k->gejala->count() > 3 ? '...' : '' }}</div>
</div>
@if($k->hasilUtama)
<div class="riwayat-right">
<div class="riwayat-cf">{{ number_format($k->hasilUtama->persentase, 0) }}%</div>
<div class="riwayat-cf-label">kepercayaan</div>
</div>
@endif
<div class="riwayat-arrow"></div>
@empty
<div class="empty-state">
<span class="empty-icon">🌱</span>
<h3>Belum ada riwayat diagnosa</h3>
<p>Kamu belum pernah melakukan diagnosa. Mulai sekarang!</p>
<a href="{{ route('konsultasi.index') }}" class="btn btn-primary">Mulai diagnosa pertama</a>
</div>
@endforelse
</div>
@if($riwayat->hasPages())
<div style="margin-top:1.5rem;display:flex;justify-content:center;">
{{ $riwayat->links() }}
</div>
@endif
@endsection
@push('scripts')
<script>
function filterRiwayat() {
const q = document.getElementById('searchInput').value.toLowerCase();
document.querySelectorAll('.riwayat-card').forEach(card => {
card.style.display = card.dataset.search.includes(q) ? 'flex' : 'none';
});
}
</script>
@endpush