From a950c924be5c50cc9d970f10304378d2a06a2484 Mon Sep 17 00:00:00 2001 From: ericko-cyber Date: Wed, 21 May 2025 00:03:50 +0700 Subject: [PATCH] final project --- app/Http/Controllers/DiagnosaController.php | 13 +- app/Http/Controllers/HistoryController.php | 27 +- app/Models/RiwayatDiagnosa.php | 1 + ...31_add_hasil_diagnosa_to_riwayat_table.php | 30 + .../views/layouts/admin/daftaruser.blade.php | 2 +- .../layouts/diagnosa/diagnosalay.blade.php | 22 +- .../layouts/diagnosa/hasildiagnosa.blade.php | 48 +- .../layouts/diagnosa/masterdiagnosa.blade.php | 35 + .../views/layouts/diagnosa/print.blade.php | 38 +- .../diagnosa/rinciandetailpenyakit.blade.php | 2 +- resources/views/layouts/master.blade.php | 734 +++++++++--------- resources/views/layouts/register.blade.php | 2 +- 12 files changed, 574 insertions(+), 380 deletions(-) create mode 100644 database/migrations/2025_05_20_074231_add_hasil_diagnosa_to_riwayat_table.php diff --git a/app/Http/Controllers/DiagnosaController.php b/app/Http/Controllers/DiagnosaController.php index e76f361..172cd3d 100644 --- a/app/Http/Controllers/DiagnosaController.php +++ b/app/Http/Controllers/DiagnosaController.php @@ -88,6 +88,7 @@ public function process(Request $request) 'id_penyakit' => $terbesar['penyakit']->id, 'nilai' => ($terbesar['nilai'] * 100) . '%', 'tanggal' => now(), + 'hasil_diagnosa' => json_encode($hasil), // Store all results in JSON format ]); if (!$riwayat) { @@ -100,6 +101,16 @@ public function process(Request $request) public function hasil($id) { $riwayat = RiwayatDiagnosa::with(['user', 'penyakit'])->findOrFail($id); - return view('layouts.diagnosa.hasildiagnosa', compact('riwayat')); + + // Get alternative diagnoses from the JSON field + $alternativeDiagnoses = []; + if (isset($riwayat->hasil_diagnosa)) { + $hasilDiagnosa = json_decode($riwayat->hasil_diagnosa, true); + + // Skip the first item (primary diagnosis) and get up to 3 alternatives + $alternativeDiagnoses = array_slice($hasilDiagnosa, 1, 3); + } + + return view('layouts.diagnosa.hasildiagnosa', compact('riwayat', 'alternativeDiagnoses')); } } diff --git a/app/Http/Controllers/HistoryController.php b/app/Http/Controllers/HistoryController.php index 0e7c5f1..dff9f66 100644 --- a/app/Http/Controllers/HistoryController.php +++ b/app/Http/Controllers/HistoryController.php @@ -31,25 +31,34 @@ public function index() public function detail($id) { $role = auth()->user()->role; - // Ambil data RiwayatDiagnosa berdasarkan ID $riwayat = RiwayatDiagnosa::with('penyakit', 'user')->findOrFail($id); - // Mengecek apakah riwayat ditemukan - if (!$riwayat) { - abort(404, 'Riwayat tidak ditemukan'); + // Ambil alternative diagnoses dari JSON hasil diagnosa + $alternativeDiagnoses = []; + if (!empty($riwayat->hasil_diagnosa)) { + $hasilDiagnosa = json_decode($riwayat->hasil_diagnosa, true); + // Ambil selain utama (index 0), misal 3 alternatif + $alternativeDiagnoses = array_slice($hasilDiagnosa, 1, 3); } - // Kirim data ke tampilan - return view('layouts.diagnosa.hasildiagnosa', compact('riwayat', 'role')); + return view('layouts.diagnosa.hasildiagnosa', compact('riwayat', 'role', 'alternativeDiagnoses')); } + public function print($id) { $riwayat = \App\Models\RiwayatDiagnosa::with('penyakit', 'user')->findOrFail($id); - $role = auth()->user()->role; - // Kirim data riwayat dan role ke tampilan - return view('layouts.diagnosa.print', compact('riwayat', 'role')); + // Decode hasil_diagnosa untuk alternatif diagnosa + $hasilDiagnosa = json_decode($riwayat->hasil_diagnosa, true); + $alternativeDiagnoses = []; + if ($hasilDiagnosa) { + // Ambil alternatif setelah utama, maksimal 3 + $alternativeDiagnoses = array_slice($hasilDiagnosa, 1, 3); + } + + // Kirim data riwayat, role, dan alternativeDiagnoses ke view + return view('layouts.diagnosa.print', compact('riwayat', 'role', 'alternativeDiagnoses')); } } diff --git a/app/Models/RiwayatDiagnosa.php b/app/Models/RiwayatDiagnosa.php index 07fe559..6fe0650 100644 --- a/app/Models/RiwayatDiagnosa.php +++ b/app/Models/RiwayatDiagnosa.php @@ -18,6 +18,7 @@ class RiwayatDiagnosa extends Model 'id_user', 'id_penyakit', 'nilai', + 'hasil_diagnosa', 'tanggal', ]; diff --git a/database/migrations/2025_05_20_074231_add_hasil_diagnosa_to_riwayat_table.php b/database/migrations/2025_05_20_074231_add_hasil_diagnosa_to_riwayat_table.php new file mode 100644 index 0000000..4b66f30 --- /dev/null +++ b/database/migrations/2025_05_20_074231_add_hasil_diagnosa_to_riwayat_table.php @@ -0,0 +1,30 @@ +longText('hasil_diagnosa')->nullable()->after('nilai'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('riwayat', function (Blueprint $table) { + // + $table->dropColumn('hasil_diagnosa'); + }); + } +}; diff --git a/resources/views/layouts/admin/daftaruser.blade.php b/resources/views/layouts/admin/daftaruser.blade.php index 9c11b10..0c35ec2 100644 --- a/resources/views/layouts/admin/daftaruser.blade.php +++ b/resources/views/layouts/admin/daftaruser.blade.php @@ -67,10 +67,10 @@ {{ $user->role }} {{ $user->registered }} - @if($user->role !== 'admin') Edit + @if($user->role !== 'admin')
@csrf @method('DELETE') diff --git a/resources/views/layouts/diagnosa/diagnosalay.blade.php b/resources/views/layouts/diagnosa/diagnosalay.blade.php index 9406c60..24d2219 100644 --- a/resources/views/layouts/diagnosa/diagnosalay.blade.php +++ b/resources/views/layouts/diagnosa/diagnosalay.blade.php @@ -151,10 +151,11 @@

Keterangan tingkat keyakinan:

    -
  • Pasti (100%): Anda yakin 100% gejala ini terjadi
  • +
  • Hampir Pasti (80%): Anda cukup yakin gejala ini terjadi
  • Kemungkinan Besar (60%): Anda melihat gejala ini ada tapi tidak terlalu jelas
  • Mungkin (40%): Anda tidak yakin tapi ada kemungkinan gejala ini terjadi
  • +
  • Tidak Yakin (20%): Anda sama sekali tidak yakin/tidak tahu
@@ -241,7 +242,7 @@ function updateDropdownOptions() { }].concat( gejalaList.map(g => ({ value: g.id, - label: g.nama_gejala, + label: `${g.kode_gejala} - ${g.nama_gejala}`, // <- update label jadi kode - nama disabled: selectedValues.includes(String(g.id)) && String(g.id) !== currentValue, selected: String(g.id) === currentValue })) @@ -260,10 +261,6 @@ function updateDropdownOptions() { value: '', label: 'Kondisi', selected: currentValue === '' - }, { - value: '1.0', - label: 'Pasti (100%)', - selected: currentValue === '1.0' }, { value: '0.8', label: 'Hampir Pasti (80%)', @@ -276,6 +273,10 @@ function updateDropdownOptions() { value: '0.4', label: 'Mungkin (40%)', selected: currentValue === '0.4' + }, { + value: '0.2', + label: 'Tidak Yakin (20%)', + selected: currentValue === '0.2' }], 'value', 'label', @@ -308,23 +309,20 @@ function updateDropdownOptions() {
- `; + `; + $("#gejala-container").append(newDropdown); diff --git a/resources/views/layouts/diagnosa/hasildiagnosa.blade.php b/resources/views/layouts/diagnosa/hasildiagnosa.blade.php index 2c112d4..8d71c3b 100644 --- a/resources/views/layouts/diagnosa/hasildiagnosa.blade.php +++ b/resources/views/layouts/diagnosa/hasildiagnosa.blade.php @@ -3,6 +3,7 @@ @section('title', 'Hasil Diagnosa') @section('content') +
@@ -12,7 +13,6 @@ // Bersihkan nilai agar hanya angka $nilai_angka = isset($riwayat->nilai) ? preg_replace('/[^0-9.]/', '', $riwayat->nilai) : null; @endphp - @@ -44,7 +44,9 @@ - + @@ -56,7 +58,21 @@ - +
Gambar PenyakitGambar Penyakit + Gambar Penyakit +
Penanganan{{ $riwayat->penyakit->penanganan ?? '-' }} + @if(!empty($riwayat->penyakit->penanganan)) + @php + // Pisah penanganan berdasarkan baris baru (newline) + $list_penanganan = preg_split('/\r\n|\r|\n/', $riwayat->penyakit->penanganan); + @endphp +
    + @foreach($list_penanganan as $item) +
  • {{ $item }}
  • + @endforeach +
+ @else + - + @endif +
@@ -64,9 +80,29 @@ + + {{-- Kemungkinan Penyakit Lainnya --}} + @if(!empty($alternativeDiagnoses)) +
+
+
+ Kemungkinan Penyakit Lainnya +
+
+ @foreach($alternativeDiagnoses as $diagnosa) +
+
+ {{ $diagnosa['penyakit']['nama_penyakit'] }} +
Kemungkinan: {{ number_format($diagnosa['nilai'] * 100, 2) }}%
+
+
+ @endforeach +
+
+
+ @endif
- -@endsection \ No newline at end of file + + @endsection \ No newline at end of file diff --git a/resources/views/layouts/diagnosa/masterdiagnosa.blade.php b/resources/views/layouts/diagnosa/masterdiagnosa.blade.php index 202aab1..6324962 100644 --- a/resources/views/layouts/diagnosa/masterdiagnosa.blade.php +++ b/resources/views/layouts/diagnosa/masterdiagnosa.blade.php @@ -198,6 +198,18 @@ animation: slideIn 0.3s ease-out forwards; } + .popup-overlay .popup-box { + width: 500px; + max-width: 90%; + transition: width 0.3s ease, min-height 0.3s ease; + /* style lain seperti sebelumnya */ + } + + .popup-overlay .popup-box.password-tab { + width: 400px; + } + + @keyframes slideIn { from { opacity: 0; @@ -374,6 +386,29 @@ function togglePopup() { } // Tab switching functionality + function openTab(tabId, btn) { + // Hide semua tab-content + document.querySelectorAll('.tab-content').forEach(tc => tc.classList.remove('active')); + + // Hapus active dari semua tombol tab + document.querySelectorAll('.tab-button').forEach(b => b.classList.remove('active')); + + // Show tab yang diklik + document.getElementById(tabId).classList.add('active'); + + // Tambahkan active pada tombol yang diklik + btn.classList.add('active'); + + // Ambil popup-box + const popupBox = document.querySelector('.popup-overlay .popup-box'); + + if (tabId === 'passwordTab') { + popupBox.classList.add('password-tab'); + } else { + popupBox.classList.remove('password-tab'); + } + } + function openTab(tabName, buttonElement) { // Hide all tab contents const tabContents = document.getElementsByClassName("tab-content"); diff --git a/resources/views/layouts/diagnosa/print.blade.php b/resources/views/layouts/diagnosa/print.blade.php index e56e836..7186093 100644 --- a/resources/views/layouts/diagnosa/print.blade.php +++ b/resources/views/layouts/diagnosa/print.blade.php @@ -85,10 +85,46 @@ Penanganan - {{ $riwayat->penyakit->penanganan ?? '-' }} + + @if(!empty($riwayat->penyakit->penanganan)) + @php + $list_penanganan = preg_split('/\r\n|\r|\n/', $riwayat->penyakit->penanganan); + @endphp + + @else + - + @endif + +
+ + {{-- Tambahkan section kemungkinan penyakit lainnya --}} + @if(!empty($alternativeDiagnoses) && count($alternativeDiagnoses) > 0) +
Alternatif Kemungkinan Penyakit Lainnya
+ + + + + + + + + @foreach($alternativeDiagnoses as $alt) + + + + + @endforeach + +
Nama PenyakitPersentase
{{ $alt['penyakit']['nama_penyakit'] ?? '-' }}{{ number_format($alt['nilai'] * 100, 2) }}%
+ @endif +
@if ($role === 'admin') diff --git a/resources/views/layouts/diagnosa/rinciandetailpenyakit.blade.php b/resources/views/layouts/diagnosa/rinciandetailpenyakit.blade.php index 73b8b3a..929e0b7 100644 --- a/resources/views/layouts/diagnosa/rinciandetailpenyakit.blade.php +++ b/resources/views/layouts/diagnosa/rinciandetailpenyakit.blade.php @@ -56,7 +56,7 @@
-

Penanganan

+

Pengendalian

    @foreach(explode("\n", $penyakit->penanganan) as $item)
  1. {{ $item }}
  2. diff --git a/resources/views/layouts/master.blade.php b/resources/views/layouts/master.blade.php index b6bc0c5..75781ae 100644 --- a/resources/views/layouts/master.blade.php +++ b/resources/views/layouts/master.blade.php @@ -2,404 +2,442 @@ - - - @yield('title', 'Login System') + + + @yield('title', 'Login System') - - + + - - - + + + - - - - - + + + + + - + .popup-box.password-tab { + width: 400px; + } + + + @keyframes slideIn { + from { + opacity: 0; + transform: translateX(50px); + } + + to { + opacity: 1; + transform: translateX(0); + } + } + + /* Responsive adjustments */ + @media (max-width: 480px) { + .form-row { + flex-direction: column; + gap: 12px; + } + + .popup-box { + width: 85%; + padding: 15px; + } + } + -
    -
    -
    -
    - -
    -
    -
    -
    +
    +
    +
    +
    + +
    +
    +
    +
    - @if(session('success')) -
    - {{ session('success') }} -
    - - @endif + @if(session('success')) +
    + {{ session('success') }} +
    + + @endif - -
    - +
    -
    - @yield('content') -
    +
    + @yield('content') +
    -
    -
    -
    -
    -

    © Copyright 2024 by Ihya Ulumuddin

    -
    -
    -
    -
    +
    +
    +
    +
    +

    © Copyright 2024 by Ihya Ulumuddin

    +
    +
    +
    +
    - - - - - - - + + + + + + + - + // Show tab yang diklik + document.getElementById(tabId).classList.add('active'); + + // Tambahkan active pada tombol yang diklik + btn.classList.add('active'); + + // Ambil popup-box + const popupBox = document.querySelector('.popup-overlay .popup-box'); + + if (tabId === 'passwordTab') { + popupBox.classList.add('password-tab'); + } else { + popupBox.classList.remove('password-tab'); + } + } + + // Tab switching functionality + function openTab(tabName, buttonElement) { + // Hide all tab contents + const tabContents = document.getElementsByClassName("tab-content"); + for (let i = 0; i < tabContents.length; i++) { + tabContents[i].classList.remove("active"); + } + + // Remove active class from all tab buttons + const tabButtons = document.getElementsByClassName("tab-button"); + for (let i = 0; i < tabButtons.length; i++) { + tabButtons[i].classList.remove("active"); + } + + // Show the selected tab content + document.getElementById(tabName).classList.add("active"); + + // Add active class to the clicked button + buttonElement.classList.add("active"); + } + \ No newline at end of file diff --git a/resources/views/layouts/register.blade.php b/resources/views/layouts/register.blade.php index 482cc5e..4f92a20 100644 --- a/resources/views/layouts/register.blade.php +++ b/resources/views/layouts/register.blade.php @@ -5,7 +5,7 @@ @section('content')
    -

    Register dulu gan

    +

    Register dulu