projek besar

This commit is contained in:
Alfiansyahp2 2025-05-13 16:54:42 +07:00
parent 4ff69210ed
commit fb8c926033
79 changed files with 3653 additions and 1814 deletions

View File

@ -9,6 +9,8 @@
use App\Models\Kriteria;
use App\Models\Alternatif;
use App\Models\Role;
use App\Models\Makanan;
use App\Models\Rekomendasi;
use App\Http\Requests\UserRequest;
use App\Http\Requests\KriteriaRequest;
use App\Http\Requests\AlternatifRequest;
@ -17,18 +19,35 @@
use App\Http\Requests\UpdateKriteriaRequest;
use App\Http\Requests\UpdateAlternatifRequest;
use App\Http\Requests\UpdateRoleRequest;
use Illuminate\Support\Facades\DB;
class AdminController extends Controller
{
//
public function admindash(){
return view('admin.admindash');
}
public function admindash()
{
$userCount = User::count();
$makananCount = Makanan::count();
// Ambil 5 rekomendasi tertinggi dengan relasi makanan
$chartData = Rekomendasi::with('makanan')
->orderByDesc('nilai_akhir')
->take(5)
->get()
->map(function ($item) {
return [
'name' => $item->makanan->nama,
'value' => $item->nilai_akhir
];
});
return view('admin.admindash', compact('userCount', 'makananCount', 'chartData'));
}
// USER
public function datauser(){
$users = User::with('role')->get(); // Eager load the role relationship
return view('admin.datauser.datauser', compact('users'));
@ -90,7 +109,7 @@ public function deleteuser(User $user) {
// role
public function role(){
$roles = Role::all();
return view('admin.role.role', compact('roles'));
@ -115,61 +134,5 @@ public function deleterole(Role $role) {
$role->delete();
return redirect()->route('role')->with('success', 'user deleted successfully');
}
public function kriteria(){
$kriterias = Kriteria::all();
return view('admin.kriteria.kriteria', compact('kriterias'));
}
public function editkriteria(Kriteria $kriteria){
return view('admin.kriteria.editkriteria', compact('kriteria'));
}
public function tambahkriteria(){
return view('admin.kriteria.tambahkriteria');
}
public function storekriteria(KriteriaRequest $request){
$validatedData = $request->validated();
Kriteria::create($validatedData);
return redirect()->route('kriteria');
}
public function updatekriteria(UpdateKriteriaRequest $request, Kriteria $kriteria){
$validatedData = $request->validated();
$kriteria->update($validatedData);
return redirect()->route('kriteria');
}
public function deletekriteria(Kriteria $kriteria) {
$kriteria->delete();
return redirect()->route('kriteria')->with('success', 'user deleted successfully');
}
public function alternatif(){
return view('admin.alternatif.alternatif');
}
public function editalternatif(Alternatif $alternatif){
return view('admin.alternatif.editalternatif', compact('alternatif'));
}
public function tambahalternatif(){
return view('admin.alternatif.tambahalternatif');
}
public function storealternatif(AlternatifRequest $request){
$validatedData = $request->validated();
Alternatif::create($validatedData);
return redirect()->route('alternatif');
}
public function updatealternatif(UpdateAlternatifRequest $request, Alternatif $alternatif){
$validatedData = $request->validated();
$alternatif->update($validatedData);
return redirect()->route('alternatif');
}
public function deletealternatif(Alternatif $alternatif) {
$alternatif->delete();
return redirect()->route('alternatif')->with('success', 'user deleted successfully');
}
}

View File

@ -0,0 +1,196 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Kriteria;
use App\Models\Makanan; // alternatif
use App\Models\PerbandinganAlternatif;
use App\Models\SkorMakanan;
use Illuminate\Support\Facades\DB;
class AlternatifController extends Controller
{
//
// 1. Tampilkan form pemilihan alternatif
public function formPilihAlternatif(Request $request)
{
$sort = $request->query('sort');
if (in_array($sort, ['lemak', 'natrium', 'energi', 'karbohidrat'])) {
$makanans = Makanan::orderBy($sort, 'desc')->get(); // urut dari tinggi ke rendah
} else {
$makanans = Makanan::all();
}
return view('admin.alternatif.pilih', compact('makanans'));
}
// 2. Simpan pilihan alternatif ke session
public function pilihAlternatif(Request $request)
{
$request->validate([
'alternatifs' => 'required|array|min:2',
]);
session(['alternatifs_dipilih' => $request->alternatifs]);
return redirect()->route('alternatif.perbandingan');
}
// 3. Tampilkan form perbandingan alternatif per kriteria
public function tampilPerbandingan()
{
$idAlternatif = session('alternatifs_dipilih');
if (!$idAlternatif || count($idAlternatif) < 2) {
return redirect()->route('alternatif.pilih')->with('error', 'Pilih minimal dua alternatif terlebih dahulu.');
}
$alternatifs = Makanan::whereIn('id', $idAlternatif)->get();
$kriterias = Kriteria::all();
return view('admin.alternatif.perbandingan', compact('kriterias', 'alternatifs'));
}
// 4. Simpan hasil perbandingan ke database
public function simpanPerbandingan(Request $request)
{
$data = $request->input('nilai');
foreach ($data as $kriteria_id => $baris) {
foreach ($baris as $alt1 => $kolom) {
foreach ($kolom as $alt2 => $nilai) {
if ($alt1 != $alt2 && $nilai != null) {
// Simpan nilai asli
PerbandinganAlternatif::updateOrCreate(
[
'kriteria_id' => $kriteria_id,
'alternatif_id_1' => $alt1,
'alternatif_id_2' => $alt2,
],
['nilai' => $nilai]
);
// Simpan nilai kebalikannya
PerbandinganAlternatif::updateOrCreate(
[
'kriteria_id' => $kriteria_id,
'alternatif_id_1' => $alt2,
'alternatif_id_2' => $alt1,
],
['nilai' => 1 / $nilai]
);
}
}
}
}
if ($request->input('action') == 'lanjut') {
return redirect()->route('alternatif.normalisasi')->with('success', 'Data berhasil disimpan, lanjut ke tahap normalisasi.');
}
return redirect()->back()->with('success', 'Perbandingan alternatif berhasil disimpan.');
}
public function tampilNormalisasi()
{
$idAlternatif = session('alternatifs_dipilih');
if (!$idAlternatif || count($idAlternatif) < 2) {
return redirect()->route('alternatif.pilih')->with('error', 'Pilih minimal dua alternatif terlebih dahulu.');
}
$alternatifs = Makanan::whereIn('id', $idAlternatif)->get();
$kriterias = Kriteria::all();
$matriks = [];
foreach ($kriterias as $kriteria) {
$matriks[$kriteria->id] = [];
foreach ($alternatifs as $alt1) {
$matriks[$kriteria->id][$alt1->id] = [];
foreach ($alternatifs as $alt2) {
if ($alt1->id == $alt2->id) {
$matriks[$kriteria->id][$alt1->id][$alt2->id] = 1;
} else {
$nilai = DB::table('perbandingan_alternatifs')
->where('kriteria_id', $kriteria->id)
->where('alternatif_id_1', $alt1->id)
->where('alternatif_id_2', $alt2->id)
->value('nilai');
$matriks[$kriteria->id][$alt1->id][$alt2->id] = $nilai ?? 1; // default 1
}
}
}
}
return view('admin.alternatif.normalisasi', compact('alternatifs', 'kriterias', 'matriks'));
}
public function simpanNormalisasi()
{
$idAlternatif = session('alternatifs_dipilih');
if (!$idAlternatif || count($idAlternatif) < 2) {
return redirect()->route('alternatif.pilih')->with('error', 'Pilih minimal dua alternatif terlebih dahulu.');
}
$alternatifs = Makanan::whereIn('id', $idAlternatif)->get();
$kriterias = Kriteria::all();
foreach ($kriterias as $kriteria) {
$jumlahKolom = [];
foreach ($alternatifs as $colAlt) {
$jumlahKolom[$colAlt->id] = 0;
}
// Hitung jumlah kolom
foreach ($alternatifs as $rowAlt) {
foreach ($alternatifs as $colAlt) {
$nilai = DB::table('perbandingan_alternatifs')
->where('kriteria_id', $kriteria->id)
->where('alternatif_id_1', $rowAlt->id)
->where('alternatif_id_2', $colAlt->id)
->value('nilai') ?? 1;
$jumlahKolom[$colAlt->id] += $nilai;
}
}
// Hitung bobot (normalisasi + rata-rata baris)
foreach ($alternatifs as $rowAlt) {
$jumlahBaris = 0;
foreach ($alternatifs as $colAlt) {
$nilai = DB::table('perbandingan_alternatifs')
->where('kriteria_id', $kriteria->id)
->where('alternatif_id_1', $rowAlt->id)
->where('alternatif_id_2', $colAlt->id)
->value('nilai') ?? 1;
$normalized = $nilai / $jumlahKolom[$colAlt->id];
$jumlahBaris += $normalized;
}
$bobot = $jumlahBaris / count($alternatifs);
// Simpan ke skor_makanan
SkorMakanan::updateOrCreate(
[
'kriteria_id' => $kriteria->id,
'makanan_id' => $rowAlt->id
],
[
'nilai' => $bobot
]
);
}
}
return redirect()->route('rekomendasi.proses')->with('success', 'Bobot alternatif berhasil disimpan ke skor_makanan.');
}
}

View File

@ -1,59 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\Role;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
class RegisterController extends Controller
{
/**
* Show the registration form.
*/
public function showForm()
{
return view('auth.register');
}
/**
* Handle the registration of a new user.
*/
public function register(Request $request)
{
// Validate the input data
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'no_telp' => 'required|string|max:20', // Example: Indonesian phone numbers starting with 08
'password' => 'required|min:6|confirmed', // Ensure password confirmation is required
]);
if ($validator->fails()) {
return redirect()->route('register')
->withErrors($validator)
->withInput();
}
// Find the 'user' role ID (assuming the role name is 'user')
$role = Role::where('name', 'user')->first(); // Adjust if your roles table is structured differently
$roleId = $role ? $role->id : 2; // Default to 2 (user role) if not found
// Create the new user (without hashing the password)
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'no_telp' => $request->no_telp,
'password' => $request->password, // Store the password as plain text
'role_id' => $roleId, // Assign the user role by default
]);
// Redirect to the login page after successful registration
return redirect()->route('login')->with('success', 'Account created successfully. Please login.');
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class LandingPageController extends Controller
{
//
public function lp(){
$totalData = DB::table('makanans')->count(); // atau model: DataMakanan::count()
$totalKriteria = DB::table('kriterias')->count();
$totalUser = DB::table('users')->count();
return view('landingpage', compact('totalData', 'totalKriteria', 'totalUser'));
}
}

View File

@ -3,6 +3,9 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
class LoginController extends Controller
{
@ -10,4 +13,40 @@ class LoginController extends Controller
public function login(){
return view('login');
}
public function loginPost(Request $request)
{
// Validasi input
$credentials = $request->only('email', 'password');
// Ambil user berdasarkan email
$user = User::where('email', $credentials['email'])->first();
// Cek apakah user ada dan password cocok (tanpa hash)
if ($user && $user->password === $credentials['password']) {
// Login manual
Auth::login($user);
$role = $user->role->name; // Pastikan relasi role-nya benar
if ($role === 'admin') {
return redirect()->route('admindash');
} elseif ($role === 'user') {
return redirect()->route('userdash');
} else {
Auth::logout();
return redirect()->route('login')->with('error', 'Role tidak dikenali.');
}
}
return redirect()->route('login')->with('error', 'Email atau password salah.');
}
// Logout
public function logout()
{
Auth::logout();
return redirect()->route('lp');
}
}

View File

@ -9,27 +9,32 @@
use App\Models\Kategori;
use App\Http\Requests\KategoriRequest;
use App\Http\Requests\UpdateKategoriRequest;
use App\Models\JenisMakanan;
use App\Http\Requests\JenisMakananRequest;
use App\Http\Requests\UpdateJenisMakananRequest;
class MakananController extends Controller
{
//
public function makanan(){
$makanans = Makanan::with('kategori')->get(); // Ambil semua data makanan dengan relasi kategori
$makanans = Makanan::with('kategori', 'jenis')->get(); // Ambil semua data makanan dengan relasi kategori
return view('admin.makanan.makanan', compact('makanans'));
}
public function editmakanan(Makanan $makanan){
// Ambil semua kategori untuk dropdown
// Ambil semua kategori untuk dropdown
$kategoris = Kategori::pluck('kategori', 'id'); // Ambil nama dan ID kategori
return view('admin.makanan.editmakanan', compact('makanan', 'kategoris'));
$jenis_makanans = JenisMakanan::pluck('name', 'id'); // Ambil nama dan ID kategori
return view('admin.makanan.editmakanan', compact('makanan', 'kategoris', 'jenis_makanans'));
}
public function tambahMakanan(){
// Mengambil semua data kategori
$kategoris = Kategori::all(); // Pastikan ini adalah koleksi Eloquent
$jenis_makanans = JenisMakanan::all(); // Pastikan ini adalah koleksi Eloquent
// Mengirim data ke view
return view('admin.makanan.tambahmakanan', compact('kategoris'));
return view('admin.makanan.tambahmakanan', compact('kategoris', 'jenis_makanans'));
}
@ -39,13 +44,16 @@ public function storemakanan(MakananRequest $request)
// dd($validatedData);
// Ganti koma dengan titik untuk input desimal
$validatedData['lemak_jenuh'] = str_replace(',', '.', $validatedData['lemak_jenuh']);
$validatedData['lemak'] = str_replace(',', '.', $validatedData['lemak']);
$validatedData['natrium'] = str_replace(',', '.', $validatedData['natrium']);
$validatedData['kolesterol'] = str_replace(',', '.', $validatedData['kolesterol']);
$validatedData['kalori'] = str_replace(',', '.', $validatedData['kalori']);
$validatedData['energi'] = str_replace(',', '.', $validatedData['energi']);
$validatedData['karbohidrat'] = str_replace(',', '.', $validatedData['karbohidrat']);
// Simpan relasi kategori_id ke database
$validatedData['kategori_id'] = $request->input('kategori_id');
$validatedData['jenis_id'] = $request->input('jenis_id');
// Simpan data makanan ke database
@ -56,21 +64,24 @@ public function storemakanan(MakananRequest $request)
public function updatemakanan(UpdateMakananRequest $request, Makanan $makanan)
{
$validatedData = $request->validated();
// Ganti koma dengan titik untuk input desimal
$validatedData['lemak_jenuh'] = str_replace(',', '.', $validatedData['lemak_jenuh']);
$validatedData['natrium'] = str_replace(',', '.', $validatedData['natrium']);
$validatedData['kolesterol'] = str_replace(',', '.', $validatedData['kolesterol']);
$validatedData['kalori'] = str_replace(',', '.', $validatedData['kalori']);
// Simpan relasi kategori_id ke database
$validatedData['kategori_id'] = $request->input('kategori_id');
$validatedData['jenis_id'] = $request->input('jenis_id');
// Ganti koma dengan titik untuk input desimal
$validatedData['lemak'] = str_replace(',', '.', $validatedData['lemak']);
$validatedData['natrium'] = str_replace(',', '.', $validatedData['natrium']);
$validatedData['energi'] = str_replace(',', '.', $validatedData['energi']);
$validatedData['karbohidrat'] = str_replace(',', '.', $validatedData['karbohidrat']);
// Update data makanan di database
$makanan->update($validatedData);
return redirect()->route('makanan')->with('success', 'Makanan berhasil diperbarui!');
return redirect()->route('makanan')->with('success', 'Makanan berhasil diperbarui!');
}
public function deletemakanan(Makanan $makanan) {
@ -113,4 +124,47 @@ public function deletekategori(Kategori $kategori) {
$kategori->delete();
return redirect()->route('kategori')->with('success', 'user deleted successfully');
}
public function jenismakanan()
{
$jenis_makanans = JenisMakanan::all();
return view('admin.jenismakanan.jenismakanan', compact('jenis_makanans'));
}
public function editjenismakanan(JenisMakanan $jenis)
{
return view('admin.jenismakanan.editjenismakanan', compact('jenis'));
}
public function tambahjenismakanan()
{
return view('admin.jenismakanan.tambahjenismakanan');
}
public function storejenismakanan(JenisMakananRequest $request)
{
$validatedData = $request->validated();
JenisMakanan::create($validatedData);
return redirect()->route('jenismakanan');
}
public function updatejenismakanan(UpdateJenisMakananRequest $request, JenisMakanan $jenis)
{
$validatedData = $request->validated();
$jenis->update($validatedData);
return redirect()->route('jenismakanan');
}
public function deletejenismakanan(JenisMakanan $jenis)
{
$jenis->delete();
return redirect()->route('jenismakanan')->with('success', 'Jenis makanan berhasil dihapus');
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Kriteria;
use App\Http\Requests\KriteriaRequest;
use App\Http\Requests\UpdateKriteriaRequest;
use Illuminate\Support\Facades\Session;
class PerbandinganKriteriaController extends Controller
{
//
public function kriteria(){
$kriterias = Kriteria::all();
return view('admin.kriteria.kriteria', compact('kriterias'));
}
public function editkriteria(Kriteria $kriteria){
return view('admin.kriteria.editkriteria', compact('kriteria'));
}
public function tambahkriteria(){
return view('admin.kriteria.tambahkriteria');
}
public function storekriteria(KriteriaRequest $request){
$validatedData = $request->validated();
Kriteria::create($validatedData);
return redirect()->route('kriteria');
}
public function updatekriteria(UpdateKriteriaRequest $request, Kriteria $kriteria){
$validatedData = $request->validated();
$kriteria->update($validatedData);
return redirect()->route('kriteria');
}
public function deletekriteria(Kriteria $kriteria) {
$kriteria->delete();
return redirect()->route('kriteria')->with('success', 'user deleted successfully');
}
}

View File

@ -0,0 +1,145 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Kriteria;
use App\Models\Alternatif;
use App\Models\PerbandinganKriteria;
use App\Models\BobotKriteria;
use App\Models\Makanan;
use Illuminate\Support\Facades\Session;
class ProsesController extends Controller
{
public function showPerbandingan()
{
$kriterias = Kriteria::all();
return view('admin.proses.perbandingan', compact('kriterias'));
}
public function prosesSementara(Request $request)
{
$request->validate([
'nilai' => 'required|array',
]);
$kriterias = Kriteria::all();
$nilai = [];
// Hapus data lama (opsional, jika ingin reset)
foreach ($kriterias as $baris) {
foreach ($kriterias as $kolom) {
if ($baris->id != $kolom->id) {
PerbandinganKriteria::where([
['kriteria_id_1', $baris->id],
['kriteria_id_2', $kolom->id]
])->delete();
}
}
}
// Membuat matriks perbandingan dan menyimpannya ke session dan DB
foreach ($kriterias as $baris) {
foreach ($kriterias as $kolom) {
if ($baris->id == $kolom->id) {
$nilai[$baris->id][$kolom->id] = 1;
} elseif (isset($request->nilai[$baris->id][$kolom->id])) {
$val = floatval($request->nilai[$baris->id][$kolom->id]);
$nilai[$baris->id][$kolom->id] = $val;
$nilai[$kolom->id][$baris->id] = 1 / $val;
PerbandinganKriteria::updateOrCreate(
[
'kriteria_id_1' => $baris->id,
'kriteria_id_2' => $kolom->id
],
[
'nilai' => $val
]
);
}
}
}
Session::put('matriks', $nilai);
return redirect()->route('perbandingan');
}
public function simpanPerbandingan()
{
$matriks = Session::get('matriks');
if (!$matriks) {
return redirect()->route('perbandingan')->with('error', 'Belum ada data untuk disimpan.');
}
Session::put('matriks_perbandingan', $matriks);
return redirect()->route('hasil.normalisasi')->with('success', 'Data berhasil disimpan!');
}
public function hasilNormalisasi()
{
$kriterias = Kriteria::all();
$matriks = Session::get('matriks_perbandingan');
if (!$matriks) {
return redirect()->route('perbandingan')->with('error', 'Data perbandingan belum tersedia.');
}
// Hitung jumlah per kolom
$jumlahKolom = [];
foreach ($kriterias as $kriteria) {
$id = $kriteria->id;
$jumlahKolom[$id] = 0;
foreach ($matriks as $baris) {
$jumlahKolom[$id] += $baris[$id];
}
}
// Normalisasi
$normalisasi = [];
foreach ($kriterias as $baris) {
$row = [];
foreach ($kriterias as $kolom) {
$row[] = $matriks[$baris->id][$kolom->id] / $jumlahKolom[$kolom->id];
}
$normalisasi[] = $row;
}
// Hitung bobot
$bobot = [];
foreach ($normalisasi as $baris) {
$bobot[] = array_sum($baris) / count($baris);
}
// Simpan bobot ke database dan session
foreach ($bobot as $index => $value) {
BobotKriteria::updateOrCreate(
['kriteria_id' => $kriterias[$index]->id],
['bobot' => $value]
);
}
Session::put('bobot_kriteria', $bobot);
return view('admin.proses.normalisasi', [
'kriterias' => $kriterias,
'normalisasi' => $normalisasi,
'bobot' => $bobot
]);
}
public function perbandinganAlternatif()
{
$kriterias = Kriteria::all();
$alternatifs = Makanan::all();
$bobot = Session::get('bobot_kriteria');
if (!$bobot) {
return redirect()->route('hasil.normalisasi')->with('error', 'Bobot kriteria belum tersedia.');
}
return view('admin.alternatif.perbandingan', compact('kriterias', 'alternatifs', 'bobot'));
}
}

View File

@ -0,0 +1,47 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use App\Models\Role;
class RegisterController extends Controller
{
//
public function register(){
return view('register');
}
public function registerPost(Request $request)
{
// Validasi input
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'no_telp' => 'required|string|max:20',
'password' => 'required|min:4',
]);
// Cari role 'user' dari tabel roles
$userRole = Role::where('name', 'user')->first();
if (!$userRole) {
return redirect()->back()->with('error', 'Role user belum dibuat di database.');
}
// Buat user (password tidak di-hash)
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'no_telp' => $request->no_telp,
'password' => $request->password, // TANPA Hash::make()
'role_id' => $userRole->id,
]);
// // Login otomatis
// Auth::login($user);
return redirect()->route('login')->with('success', 'Registrasi berhasil!');
}
}

View File

@ -0,0 +1,88 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Makanan;
use App\Models\Kriteria;
use App\Models\BobotKriteria;
use App\Models\SkorMakanan;
use App\Models\Rekomendasi;
use Illuminate\Support\Facades\Auth; // pastikan ini ada di atas
use Carbon\Carbon;
class RekomendasiController extends Controller
{
//
public function hitungDanSimpan()
{
$alternatifs = Makanan::all();
$kriterias = Kriteria::all();
$bobotKriterias = BobotKriteria::pluck('bobot', 'kriteria_id');
foreach ($alternatifs as $alternatif) {
$nilaiAkhir = 0;
foreach ($kriterias as $kriteria) {
$bobotKriteria = $bobotKriterias[$kriteria->id] ?? 0;
$bobotAlternatif = SkorMakanan::where('kriteria_id', $kriteria->id)
->where('makanan_id', $alternatif->id)
->value('nilai') ?? 0;
$nilaiAkhir += $bobotKriteria * $bobotAlternatif;
}
// Simpan ke tabel rekomendasi
Rekomendasi::updateOrCreate(
['makanan_id' => $alternatif->id, 'user_id' => Auth::id()],
[
'nilai_akhir' => $nilaiAkhir,
'tanggal_rekomendasi' => Carbon::now()->toDateString()
]
);
}
return redirect()->route('rekomendasi.hasil')->with('success', 'Rekomendasi berhasil dihitung dan disimpan.');
}
// 2. Tampilkan hasil rekomendasi
public function tampil()
{
// Hanya mengambil data rekomendasi dengan nilai_akhir lebih besar dari 0
$rekomendasi = Rekomendasi::with('makanan')
->where('nilai_akhir', '>', 0)
->orderByDesc('nilai_akhir')
->get();
return view('admin.rekomendasi', compact('rekomendasi'));
}
public function kirimKeUser($userId)
{
$adminId = Auth::id();
$dataAdmin = Rekomendasi::where('user_id', $adminId)->get();
foreach ($dataAdmin as $item) {
Rekomendasi::updateOrCreate(
['user_id' => $userId, 'makanan_id' => $item->makanan_id],
[
'nilai_akhir' => $item->nilai_akhir,
'tanggal_rekomendasi' => now(),
]
);
}
return redirect()->back()->with('success', 'Hasil rekomendasi berhasil dikirim ke user.');
}
public function hapusSemua()
{
Rekomendasi::truncate(); // Menghapus semua data
return redirect()->back()->with('success', 'Semua data rekomendasi berhasil dihapus.');
}
}

View File

@ -3,20 +3,73 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\Rekomendasi;
use App\Models\Makanan; // pastikan model di-import
use App\Models\JenisMakanan;
use App\Models\Kategori;
use Illuminate\Support\Facades\Auth; // pastikan ini ada di atas
class UserController extends Controller
{
//
public function userdash(){
return view('user.userdash');
$totalData = DB::table('makanans')->count(); // atau model: DataMakanan::count()
$totalKriteria = DB::table('kriterias')->count();
$totalUser = DB::table('users')->count();
return view('user.userdash', compact('totalData', 'totalKriteria', 'totalUser'));
}
public function about(){
return view('user.about');
public function userabout(){
return view('user.userabout');
}
public function service(){
return view('user.service');
public function userfeature(){
return view('user.userfeature');
}
public function feature(){
return view('user.feature');
public function userdata(Request $request)
{
$jenisMakananList = JenisMakanan::all();
$kategoriList = Kategori::all();
$makanans = Makanan::query();
if ($request->has('jenis_id') && $request->jenis_id != '') {
$makanans->where('jenis_id', $request->jenis_id);
}
if ($request->has('kategori_id') && $request->kategori_id != '') {
$makanans->where('kategori_id', $request->kategori_id);
}
$makanans = $makanans->get();
return view('user.userdata', compact('makanans', 'jenisMakananList', 'kategoriList'));
}
public function userresult()
{
$rekomendasi = Rekomendasi::with('makanan')
->where('nilai_akhir', '>', 0)
->orderByDesc('nilai_akhir')
->get();
// Hitung total nilai akhir
$totalNilaiAkhir = $rekomendasi->sum('nilai_akhir');
return view('user.userresult', compact('rekomendasi', 'totalNilaiAkhir'));
}
public function show($id)
{
// ambil data berdasarkan $id atau bisa juga switch/case
return view('user.userfeature', compact('id'));
}
}

View File

@ -63,5 +63,6 @@ class Kernel extends HttpKernel
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'cekrole' => \App\Http\Middleware\CekRole::class,
];
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Auth;
class CekRole
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next, ...$roles): Response
{
if (!Auth::check()) {
return redirect('/login')->with('error', 'Silakan login dulu.');
}
$user = Auth::user();
// Ambil nama role dari relasi role
$userRoleName = $user->role->name ?? null;
if (!in_array($userRoleName, $roles)) {
return abort(403, 'Kamu tidak punya akses ke halaman ini.');
}
return $next($request);
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class JenisMakananRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
//
'name' => 'required|string|max:100',
];
}
}

View File

@ -24,6 +24,7 @@ public function rules(): array
return [
//
'nama' => 'required|string|max:255',
'satuan' => 'required|string|max:50',
];
}
}

View File

@ -22,20 +22,21 @@ public function rules(): array
return [
'nama' => 'required|string|max:100',
'kategori_id' => 'required|exists:kategoris,id', // Ensures role_id exists in the 'roles' table
'lemak_jenuh' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'jenis_id' => 'required|exists:jenis_makanans,id',
'lemak' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'natrium' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'kolesterol' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'kalori' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'energi' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'karbohidrat' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
];
}
public function messages()
{
return [
'lemak_jenuh.regex' => 'Lemak jenuh harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'lemak.regex' => 'Lemak jenuh harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'natrium.regex' => 'Natrium harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'kolesterol.regex' => 'kolesterol harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'kalori.regex' => 'Kalori harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'energi.regex' => 'energi harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'karbohidrat.regex' => 'karbohidrat harus berupa angka atau desimal dengan koma (contoh: 1,5).',
];
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateJenisMakananRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
//
'name' => 'required|string|max:100',
];
}
}

View File

@ -24,6 +24,7 @@ public function rules(): array
return [
//
'nama' => 'required|string|max:255',
'satuan' => 'required|string|max:50',
];
}
}

View File

@ -22,20 +22,21 @@ public function rules(): array
return [
'nama' => 'required|string|max:100',
'kategori_id' => 'required|exists:kategoris,id', // Ensures role_id exists in the 'roles' table
'lemak_jenuh' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'jenis_id' => 'required|exists:jenis_makanans,id',
'lemak' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'natrium' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'kolesterol' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'kalori' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'energi' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
'karbohidrat' => 'required|regex:/^\d+(\,\d{1,2})?$/', // Mendukung desimal dengan koma
];
}
public function messages()
{
return [
'lemak_jenuh.regex' => 'lemak jenuh harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'natrium.regex' => 'natrium harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'kolesterol.regex' => 'kolesterol harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'kalori.regex' => 'kalori harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'lemak.regex' => 'Lemak jenuh harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'natrium.regex' => 'Natrium harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'energi.regex' => 'energi harus berupa angka atau desimal dengan koma (contoh: 1,5).',
'karbohidrat.regex' => 'karbohidrat harus berupa angka atau desimal dengan koma (contoh: 1,5).',
];
}

View File

@ -8,6 +8,4 @@
class Alternatif extends Model
{
use HasFactory;
protected $fillable = ['name', 'nilai']; // ganti dengan kolom yang sesuai dengan tabelmu
}

View File

@ -8,4 +8,11 @@
class BobotKriteria extends Model
{
use HasFactory;
public $timestamps = false;
protected $fillable = ['kriteria_id', 'bobot'];
public function kriteria()
{
return $this->belongsTo(Kriteria::class);
}
}

View File

@ -0,0 +1,28 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class JenisMakanan extends Model
{
use HasFactory;
// Menentukan nama tabel jika tidak mengikuti konvensi Laravel
protected $table = 'jenis_makanans';
// Kolom-kolom yang bisa diisi secara massal
protected $fillable = ['name'];
// Menonaktifkan timestamps jika memang tidak digunakan
public $timestamps = false;
/**
* Relasi: satu jenis makanan bisa memiliki banyak makanan.
*/
public function makanan()
{
return $this->hasMany(Makanan::class, 'jenis_id');
}
}

View File

@ -8,6 +8,25 @@
class Kriteria extends Model
{
use HasFactory;
protected $fillable = ['nama', 'satuan'];
protected $fillable = ['nama'];
public function pairwise1()
{
return $this->hasMany(PerbandinganKriteria::class, 'kriteria_id_1');
}
public function pairwise2()
{
return $this->hasMany(PerbandinganKriteria::class, 'kriteria_id_2');
}
public function bobot()
{
return $this->hasOne(BobotKriteria::class);
}
public function skorMakanan()
{
return $this->hasMany(SkorMakanan::class);
}
}

View File

@ -8,32 +8,39 @@
class Makanan extends Model
{
use HasFactory;
// Menentukan nama tabel yang digunakan (jika nama tabel tidak mengikuti konvensi)
protected $table = 'makanans';
// Menentukan kolom yang dapat diisi massal
protected $fillable = [
'nama',
'kategori_id', // Tambahkan kategori_id untuk relasi
'lemak_jenuh',
'kategori_id',
'jenis_id',
'lemak',
'natrium',
'kolesterol',
'kalori',
'energi',
'karbohidrat'
];
// Menentukan kolom yang tidak boleh diisi massal (jika ada)
protected $guarded = [];
// Jika kamu ingin menggunakan timestamp, pastikan sudah disetel di migration
public $timestamps = true;
public $timestamps = true;
/**
* Relasi ke model Kategori.
* Satu makanan memiliki satu kategori.
*/
public function kategori()
{
return $this->belongsTo(Kategori::class, 'kategori_id');
}
public function jenis()
{
return $this->belongsTo(JenisMakanan::class, 'jenis_id');
}
public function skor()
{
return $this->hasMany(SkorMakanan::class);
}
public function rekomendasi()
{
return $this->hasMany(Rekomendasi::class);
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class PerbandinganAlternatif extends Model
{
use HasFactory;
protected $fillable = [
'kriteria_id',
'alternatif_id_1',
'alternatif_id_2',
'nilai',
];
}

View File

@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class PerbandinganKriteria extends Model
{
use HasFactory;
public $timestamps = false;
protected $fillable = ['kriteria_id_1', 'kriteria_id_2', 'nilai'];
public function kriteria1()
{
return $this->belongsTo(Kriteria::class, 'kriteria_id_1');
}
public function kriteria2()
{
return $this->belongsTo(Kriteria::class, 'kriteria_id_2');
}
}

View File

@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Rekomendasi extends Model
{
use HasFactory;
public $timestamps = false;
protected $fillable = ['user_id', 'makanan_id', 'nilai_akhir', 'tanggal_rekomendasi'];
public function user()
{
return $this->belongsTo(User::class);
}
public function makanan()
{
return $this->belongsTo(Makanan::class);
}
}

View File

@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class SkorMakanan extends Model
{
use HasFactory;
public $timestamps = false;
protected $fillable = ['makanan_id', 'kriteria_id', 'nilai', 'tanggal_rekomendasi'];
public function makanan()
{
return $this->belongsTo(Makanan::class);
}
public function kriteria()
{
return $this->belongsTo(Kriteria::class);
}
}

View File

@ -1,33 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Jalankan migrasi.
*/
public function up(): void
{
// Membuat tabel bobot_kriterias dengan relasi ke kriterias
Schema::create('bobot_kriterias', function (Blueprint $table) {
$table->id(); // id sebagai primary key
$table->unsignedBigInteger('criteria_id'); // Foreign key ke tabel kriterias
$table->float('bobot'); // Kolom bobot
$table->timestamps();
// Menambahkan foreign key constraint
$table->foreign('criteria_id')->references('id')->on('kriterias')->onDelete('cascade')->onUpdate('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('bobot_kriterias');
}
};

View File

@ -1,29 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('alternatifs', function (Blueprint $table) {
$table->id(); // Kolom id BIGINT Primary Key
$table->string('nama', 100); // Kolom nama VARCHAR(100)
$table->text('deskripsi'); // Kolom deskripsi TEXT
$table->timestamps(); // Kolom created_at dan updated_at TIMESTAMP
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('alternatifs');
}
};

View File

@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('jenis_makanans', function (Blueprint $table) {
$table->id();
$table->string('name')->unique(); // Nama kategori, misalnya 'makanan berat', 'cemilan'
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('jenis_makanans');
}
};

View File

@ -12,9 +12,10 @@
public function up(): void
{
Schema::create('kriterias', function (Blueprint $table) {
$table->id(); // Kolom id BIGINT Primary Key
$table->string('nama', 100); // Kolom nama VARCHAR(100)
$table->timestamps(); // Kolom created_at dan updated_at TIMESTAMP
$table->id();
$table->string('nama', 100);
$table->string('satuan', 50);
$table->timestamps();
});
}

View File

@ -7,23 +7,24 @@
return new class extends Migration
{
/**
* Jalankan migrasi.
* Run the migrations.
*/
public function up(): void
{
// Membuat tabel makanans dengan relasi ke kategori
Schema::create('makanans', function (Blueprint $table) {
$table->id(); // id sebagai primary key
$table->string('nama', 100); // Kolom nama dengan panjang 100
$table->unsignedBigInteger('kategori_id'); // Foreign key
$table->float('lemak_jenuh'); // Kolom kalori
$table->float('natrium'); // Kolom protein
$table->float('kolesterol'); // Kolom lemak
$table->float('kalori'); // Kolom karbohidrat
$table->id();
$table->string('nama', 100);
$table->unsignedBigInteger('kategori_id');
$table->unsignedBigInteger('jenis_id');
$table->float('lemak');
$table->float('natrium');
$table->float('energi');
$table->float('karbohidrat');
$table->timestamps();
// Menambahkan foreign key constraint
$table->foreign('kategori_id')->references('id')->on('kategoris')->onDelete('cascade');
$table->foreign('jenis_id')->references('id')->on('jenis_makanans')->onDelete('cascade');
});
}

View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('perbandingan_kriterias', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('kriteria_id_1');
$table->unsignedBigInteger('kriteria_id_2');
$table->float('nilai');
$table->foreign('kriteria_id_1')->references('id')->on('kriterias')->onDelete('cascade');
$table->foreign('kriteria_id_2')->references('id')->on('kriterias')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('perbandingan_kriterias');
}
};

View File

@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('bobot_kriterias', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('kriteria_id');
$table->float('bobot');
$table->foreign('kriteria_id')->references('id')->on('kriterias')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('bobot_kriterias');
}
};

View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('skor_makanans', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('makanan_id');
$table->unsignedBigInteger('kriteria_id');
$table->float('nilai');
$table->foreign('makanan_id')->references('id')->on('makanans')->onDelete('cascade');
$table->foreign('kriteria_id')->references('id')->on('kriterias')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('skor_makanans');
}
};

View File

@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('rekomendasis', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('makanan_id');
$table->float('nilai_akhir');
$table->date('tanggal_rekomendasi');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('makanan_id')->references('id')->on('makanans')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('rekomendasis');
}
};

View File

@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('perbandingan_alternatifs', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('kriteria_id');
$table->unsignedBigInteger('alternatif_id_1');
$table->unsignedBigInteger('alternatif_id_2');
$table->float('nilai');
$table->timestamps();
$table->foreign('kriteria_id')->references('id')->on('kriterias')->onDelete('cascade');
$table->foreign('alternatif_id_1')->references('id')->on('makanans')->onDelete('cascade');
$table->foreign('alternatif_id_2')->references('id')->on('makanans')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('perbandingan_alternatifs');
}
};

View File

@ -1230,4 +1230,58 @@ .footer .credits {
text-align: center;
font-size: 13px;
color: #012970;
}
}
/* Agar elemen header di-home tampil optimal */
#home .col-lg-6 {
height: 100vh; /* Membuat kolom ini memenuhi layar */
display: flex;
justify-content: center;
align-items: center;
}
#home h1 {
font-size: 2.5rem; /* Ukuran font besar untuk header */
text-align: center;
color: white;
}
/* Agar gambar carousel menyesuaikan dengan layar */
.owl-carousel-item img {
width: 100%;
height: 100%; /* Gambar menyesuaikan ukuran kontainer */
object-fit: cover; /* Menjaga rasio gambar agar tidak terdistorsi */
}
#home {
height: 100vh; /* Menentukan tinggi 100% dari layar */
background-size: cover; /* Memastikan gambar background menutupi layar */
background-position: center center; /* Menjaga agar gambar tetap terpusat */
}
.header .row {
min-height: 100vh; /* Mengatur row agar setinggi layar */
align-items: center; /* Menjaga agar konten di tengah */
}
.container-fluid.header {
padding: 0; /* Menghapus padding untuk membuat konten pas di layar */
}
#features {
padding-top: 0; /* Menghilangkan padding top agar langsung pas ke atas */
}
#features .container {
padding-left: 0; /* Mengurangi margin padding kiri dan kanan */
padding-right: 0;
}
/* Responsive pada grid fitur */
@media (max-width: 768px) {
#features .row-cols-2 {
grid-template-columns: 1fr; /* 1 kolom pada layar kecil */
}
}

View File

@ -17,197 +17,218 @@
<div class="col-lg-8">
<div class="row">
<!-- Sales Card -->
<div class="col-xxl-4 col-md-6">
<div class="card info-card sales-card">
<div class="filter">
<a class="icon" href="#" data-bs-toggle="dropdown"><i class="bi bi-three-dots"></i></a>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
<li class="dropdown-header text-start">
<h6>Filter</h6>
</li>
<li><a class="dropdown-item" href="#">Today</a></li>
<li><a class="dropdown-item" href="#">This Month</a></li>
<li><a class="dropdown-item" href="#">This Year</a></li>
</ul>
</div>
<div class="card-body">
<h5 class="card-title">Sales <span>| Today</span></h5>
<div class="d-flex align-items-center">
<div class="card-icon rounded-circle d-flex align-items-center justify-content-center">
<i class="bi bi-cart"></i>
</div>
<div class="ps-3">
<h6>145</h6>
<span class="text-success small pt-1 fw-bold">12%</span> <span class="text-muted small pt-2 ps-1">increase</span>
</div>
</div>
</div>
</div>
</div><!-- End Sales Card -->
<!-- Revenue Card -->
<div class="col-xxl-4 col-md-6">
<div class="card info-card revenue-card">
<div class="filter">
<a class="icon" href="#" data-bs-toggle="dropdown"><i class="bi bi-three-dots"></i></a>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
<li class="dropdown-header text-start">
<h6>Filter</h6>
</li>
<li><a class="dropdown-item" href="#">Today</a></li>
<li><a class="dropdown-item" href="#">This Month</a></li>
<li><a class="dropdown-item" href="#">This Year</a></li>
</ul>
</div>
<div class="card-body">
<h5 class="card-title">Revenue <span>| This Month</span></h5>
<div class="d-flex align-items-center">
<div class="card-icon rounded-circle d-flex align-items-center justify-content-center">
<i class="bi bi-currency-dollar"></i>
</div>
<div class="ps-3">
<h6>$3,264</h6>
<span class="text-success small pt-1 fw-bold">8%</span> <span class="text-muted small pt-2 ps-1">increase</span>
</div>
</div>
</div>
</div>
</div><!-- End Revenue Card -->
<!-- Users Card -->
<div class="col-xxl-4 col-xl-12">
<!-- Users Card -->
<div class="col-xxl-6 col-md-6">
<div class="card info-card customers-card">
<div class="card-body position-relative">
<div class="d-flex justify-content-between align-items-center">
<h5 class="card-title mb-0">Users <span>| Total</span></h5>
<small>
<a href="{{ route('datauser') }}" class="text-primary d-flex align-items-center" style="text-decoration: none;">
<span>Selengkapnya<span> <i class="bi bi-arrow-right-circle ms-1"></i>
</a>
</small>
</div>
<div class="card info-card customers-card">
<div class="d-flex align-items-center mt-3">
<div class="card-icon rounded-circle d-flex align-items-center justify-content-center">
<i class="bi bi-people"></i>
</div>
<div class="ps-3">
<h6>{{ $userCount }} Users</h6>
</div>
</div>
</div>
</div>
</div>
<div class="filter">
<a class="icon" href="#" data-bs-toggle="dropdown"><i class="bi bi-three-dots"></i></a>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
<li class="dropdown-header text-start">
<h6>Filter</h6>
</li>
<!-- Data Makanan Card -->
<div class="col-xxl-6 col-md-6">
<div class="card info-card sales-card">
<div class="card-body position-relative">
<div class="d-flex justify-content-between align-items-center">
<h5 class="card-title mb-0">Data Makanan <span>| Total</span></h5>
<small>
<a href="{{ route('makanan') }}" class="text-primary d-flex align-items-center" style="text-decoration: none;">
<span>Selengkapnya<span> <i class="bi bi-arrow-right-circle ms-1"></i>
</a>
</small>
</div>
<li><a class="dropdown-item" href="#">Today</a></li>
<li><a class="dropdown-item" href="#">This Month</a></li>
<li><a class="dropdown-item" href="#">This Year</a></li>
</ul>
</div>
<div class="d-flex align-items-center mt-3">
<div class="card-icon rounded-circle d-flex align-items-center justify-content-center">
<i class="bi bi-basket"></i>
</div>
<div class="ps-3">
<h6>{{ $makananCount }} Data</h6>
</div>
</div>
</div>
</div>
</div>
<div class="card-body">
<h5 class="card-title">Users <span>| This Year</span></h5>
<div class="d-flex align-items-center">
<div class="card-icon rounded-circle d-flex align-items-center justify-content-center">
<i class="bi bi-people"></i>
</div>
<div class="ps-3">
<h6>1244</h6>
<span class="text-danger small pt-1 fw-bold">12%</span> <span class="text-muted small pt-2 ps-1">decrease</span>
<!-- End Data Makanan Card -->
</div>
<div class="card shadow-lg border-start border-4 border-primary mb-4">
<div class="card-body">
<h5 class="card-title text-primary fw-bold mb-0 d-flex justify-content-between align-items-center">
📌 Aturan Penilaian <span class="text-muted">| AHP</span>
<button class="btn btn-sm btn-outline-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseAHP" aria-expanded="false" aria-controls="collapseAHP">
Lihat Detail
</button>
</h5>
<div class="collapse mt-3" id="collapseAHP">
<p class="fs-6">Sebelum melakukan perbandingan, pahami skala penilaian berikut. Skala ini digunakan untuk menilai tingkat kepentingan antar kriteria maupun alternatif.</p>
<div class="row row-cols-1 row-cols-md-2 g-3 mt-2">
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-success rounded-pill me-3">1</span>
<div>
<strong>Equal Importance</strong><br>
Kedua elemen sama pentingnya
</div>
</div>
</div>
</div>
</div><!-- End Customers Card -->
{{-- <!-- Reports -->
<div class="col-12">
<div class="card">
<div class="filter">
<a class="icon" href="#" data-bs-toggle="dropdown"><i class="bi bi-three-dots"></i></a>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
<li class="dropdown-header text-start">
<h6>Filter</h6>
</li>
<li><a class="dropdown-item" href="#">Today</a></li>
<li><a class="dropdown-item" href="#">This Month</a></li>
<li><a class="dropdown-item" href="#">This Year</a></li>
</ul>
</div>
<div class="card-body">
<h5 class="card-title">Reports <span>/Today</span></h5>
<!-- Line Chart -->
<div id="reportsChart"></div>
<script>
document.addEventListener("DOMContentLoaded", () => {
new ApexCharts(document.querySelector("#reportsChart"), {
series: [{
name: 'Sales',
data: [31, 40, 28, 51, 42, 82, 56],
}, {
name: 'Revenue',
data: [11, 32, 45, 32, 34, 52, 41]
}, {
name: 'Customers',
data: [15, 11, 32, 18, 9, 24, 11]
}],
chart: {
height: 350,
type: 'area',
toolbar: {
show: false
},
},
markers: {
size: 4
},
colors: ['#4154f1', '#2eca6a', '#ff771d'],
fill: {
type: "gradient",
gradient: {
shadeIntensity: 1,
opacityFrom: 0.3,
opacityTo: 0.4,
stops: [0, 90, 100]
}
},
dataLabels: {
enabled: false
},
stroke: {
curve: 'smooth',
width: 2
},
xaxis: {
type: 'datetime',
categories: ["2018-09-19T00:00:00.000Z", "2018-09-19T01:30:00.000Z", "2018-09-19T02:30:00.000Z", "2018-09-19T03:30:00.000Z", "2018-09-19T04:30:00.000Z", "2018-09-19T05:30:00.000Z", "2018-09-19T06:30:00.000Z"]
},
tooltip: {
x: {
format: 'dd/MM/yy HH:mm'
},
}
}).render();
});
</script>
<!-- End Line Chart -->
</div>
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-primary rounded-pill me-3">3</span>
<div>
<strong>Moderate Importance</strong><br>
Salah satu elemen sedikit lebih penting
</div>
</div>
</div>
</div><!-- End Reports --> --}}
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-warning text-dark rounded-pill me-3">5</span>
<div>
<strong>Strong Importance</strong><br>
Salah satu elemen lebih penting secara kuat
</div>
</div>
</div>
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-danger rounded-pill me-3">7</span>
<div>
<strong>Very Strong Importance</strong><br>
Salah satu elemen sangat penting
</div>
</div>
</div>
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-dark rounded-pill me-3">9</span>
<div>
<strong>Extreme Importance</strong><br>
Salah satu elemen mutlak lebih penting
</div>
</div>
</div>
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-secondary rounded-pill me-3">2, 4, 6, 8</span>
<div>
<strong>Intermediate Values</strong><br>
Nilai antara dua pertimbangan yang berdekatan
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card shadow-lg border-start border-4 border-primary mb-4">
<div class="card-body">
<h5 class="card-title text-primary fw-bold mb-0 d-flex justify-content-between align-items-center">
📋 Langkah-langkah Mengisi Data <span class="text-muted">| Aplikasi</span>
<button class="btn btn-sm btn-outline-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSteps" aria-expanded="false" aria-controls="collapseSteps">
Lihat Detail
</button>
</h5>
<div class="collapse mt-3" id="collapseSteps">
<p class="fs-6">Berikut adalah langkah-langkah yang harus diikuti untuk mengisi data dalam aplikasi ini. Pastikan Anda mengikuti setiap langkah untuk mendapatkan hasil yang tepat.</p>
<div class="row row-cols-1 row-cols-md-2 g-3 mt-2">
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-success rounded-pill me-3">1</span>
<div>
<strong>Masukkan Data Makanan</strong><br>
Pilih kategori makanan dan masukkan informasi seperti lemak, natrium, energi, dan karbohidrat.
</div>
</div>
</div>
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-primary rounded-pill me-3">2</span>
<div>
<strong>Input Kriteria</strong><br>
Tentukan kriteria yang relevan untuk perbandingan antar makanan, seperti kandungan gizi dan kecocokan dengan kebutuhan diet.
</div>
</div>
</div>
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-warning text-dark rounded-pill me-3">3</span>
<div>
<strong>Perbandingan Berpasangan</strong><br>
Bandingkan alternatif makanan menggunakan skala penilaian untuk menentukan prioritas berdasarkan kriteria.
</div>
</div>
</div>
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-danger rounded-pill me-3">4</span>
<div>
<strong>Normalisasi Data</strong><br>
Lakukan normalisasi terhadap data yang telah dimasukkan untuk memastikan konsistensi perbandingan antar makanan.
</div>
</div>
</div>
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-dark rounded-pill me-3">5</span>
<div>
<strong>Simpan dan Hasilkan Rekomendasi</strong><br>
Setelah data selesai diinput dan dinormalisasi, simpan perubahan dan hasilkan rekomendasi menu makanan berdasarkan analisis AHP.
</div>
</div>
</div>
<div class="col">
<div class="d-flex align-items-start">
<span class="badge bg-secondary rounded-pill me-3">6</span>
<div>
<strong>Evaluasi dan Sesuaikan</strong><br>
Evaluasi rekomendasi yang diberikan dan sesuaikan jika diperlukan berdasarkan kebutuhan diet atau preferensi pengguna.
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Recent Sales -->
<div class="col-12">
{{-- <div class="col-12">
<div class="card recent-sales overflow-auto">
<div class="filter">
@ -278,7 +299,7 @@
</div>
</div>
</div><!-- End Recent Sales -->
</div><!-- End Recent Sales --> --}}
</div>
</div><!-- End Left side columns -->
@ -286,102 +307,23 @@
<div class="col-lg-4">
<!-- Recent Activity -->
<div class="card">
<div class="filter">
<a class="icon" href="#" data-bs-toggle="dropdown"><i class="bi bi-three-dots"></i></a>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
<li class="dropdown-header text-start">
<h6>Filter</h6>
</li>
<li><a class="dropdown-item" href="#">Today</a></li>
<li><a class="dropdown-item" href="#">This Month</a></li>
<li><a class="dropdown-item" href="#">This Year</a></li>
</ul>
</div>
<div class="card-body">
<h5 class="card-title">Recent Activity <span>| Today</span></h5>
<div class="activity">
<div class="activity-item d-flex">
<div class="activite-label">32 min</div>
<i class='bi bi-circle-fill activity-badge text-success align-self-start'></i>
<div class="activity-content">
Quia quae rerum <a href="#" class="fw-bold text-dark">explicabo officiis</a> beatae
</div>
</div><!-- End activity item-->
<div class="activity-item d-flex">
<div class="activite-label">56 min</div>
<i class='bi bi-circle-fill activity-badge text-danger align-self-start'></i>
<div class="activity-content">
Voluptatem blanditiis blanditiis eveniet
</div>
</div><!-- End activity item-->
<div class="activity-item d-flex">
<div class="activite-label">2 hrs</div>
<i class='bi bi-circle-fill activity-badge text-primary align-self-start'></i>
<div class="activity-content">
Voluptates corrupti molestias voluptatem
</div>
</div><!-- End activity item-->
<div class="activity-item d-flex">
<div class="activite-label">1 day</div>
<i class='bi bi-circle-fill activity-badge text-info align-self-start'></i>
<div class="activity-content">
Tempore autem saepe <a href="#" class="fw-bold text-dark">occaecati voluptatem</a> tempore
</div>
</div><!-- End activity item-->
<div class="activity-item d-flex">
<div class="activite-label">2 days</div>
<i class='bi bi-circle-fill activity-badge text-warning align-self-start'></i>
<div class="activity-content">
Est sit eum reiciendis exercitationem
</div>
</div><!-- End activity item-->
<div class="activity-item d-flex">
<div class="activite-label">4 weeks</div>
<i class='bi bi-circle-fill activity-badge text-muted align-self-start'></i>
<div class="activity-content">
Dicta dolorem harum nulla eius. Ut quidem quidem sit quas
</div>
</div><!-- End activity item-->
</div>
</div>
</div><!-- End Recent Activity -->
{{-- <!-- Website Traffic -->
<!-- Website Traffic -->
<div class="card">
<div class="filter">
<a class="icon" href="#" data-bs-toggle="dropdown"><i class="bi bi-three-dots"></i></a>
<ul class="dropdown-menu dropdowzzzn-menu-end dropdown-menu-arrow">
<li class="dropdown-header text-start">
<h6>Filter</h6>
</li>
<li><a class="dropdown-item" href="#">Today</a></li>
<li><a class="dropdown-item" href="#">This Month</a></li>
<li><a class="dropdown-item" href="#">This Year</a></li>
</ul>
</div>
<div class="card-body pb-0">
<h5 class="card-title">Website Traffic <span>| Today</span></h5>
<h5 class="card-title">Rekomendasi Tertinggi</h5>
<div id="trafficChart" style="min-height: 400px;" class="echart"></div>
<script>
document.addEventListener("DOMContentLoaded", () => {
echarts.init(document.querySelector("#trafficChart")).setOption({
const chart = echarts.init(document.querySelector("#trafficChart"));
const chartData = @json($chartData);
chart.setOption({
tooltip: {
trigger: 'item'
},
@ -390,7 +332,7 @@
left: 'center'
},
series: [{
name: 'Access From',
name: 'Rekomendasi Makanan',
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
@ -408,88 +350,18 @@
labelLine: {
show: false
},
data: [{
value: 1048,
name: 'Search Engine'
},
{
value: 735,
name: 'Direct'
},
{
value: 580,
name: 'Email'
},
{
value: 484,
name: 'Union Ads'
},
{
value: 300,
name: 'Video Ads'
}
]
data: chartData
}]
});
});
</script>
</div>
</div><!-- End Website Traffic --> --}}
</div>
{{-- <!-- News & Updates Traffic -->
<div class="card">
<div class="filter">
<a class="icon" href="#" data-bs-toggle="dropdown"><i class="bi bi-three-dots"></i></a>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
<li class="dropdown-header text-start">
<h6>Filter</h6>
</li>
<li><a class="dropdown-item" href="#">Today</a></li>
<li><a class="dropdown-item" href="#">This Month</a></li>
<li><a class="dropdown-item" href="#">This Year</a></li>
</ul>
</div>
<div class="card-body pb-0">
<h5 class="card-title">News &amp; Updates <span>| Today</span></h5>
<div class="news">
<div class="post-item clearfix">
<img src="assets/img/news-1.jpg" alt="">
<h4><a href="#">Nihil blanditiis at in nihil autem</a></h4>
<p>Sit recusandae non aspernatur laboriosam. Quia enim eligendi sed ut harum...</p>
</div>
<div class="post-item clearfix">
<img src="assets/img/news-2.jpg" alt="">
<h4><a href="#">Quidem autem et impedit</a></h4>
<p>Illo nemo neque maiores vitae officiis cum eum turos elan dries werona nande...</p>
</div>
<div class="post-item clearfix">
<img src="assets/img/news-3.jpg" alt="">
<h4><a href="#">Id quia et et ut maxime similique occaecati ut</a></h4>
<p>Fugiat voluptas vero eaque accusantium eos. Consequuntur sed ipsam et totam...</p>
</div>
<div class="post-item clearfix">
<img src="assets/img/news-4.jpg" alt="">
<h4><a href="#">Laborum corporis quo dara net para</a></h4>
<p>Qui enim quia optio. Eligendi aut asperiores enim repellendusvel rerum cuder...</p>
</div>
<div class="post-item clearfix">
<img src="assets/img/news-5.jpg" alt="">
<h4><a href="#">Et dolores corrupti quae illo quod dolor</a></h4>
<p>Odit ut eveniet modi reiciendis. Atque cupiditate libero beatae dignissimos eius...</p>
</div>
</div><!-- End sidebar recent posts-->
</div>
</div><!-- End News & Updates --> --}}
</div><!-- End Right side columns -->

View File

@ -0,0 +1,93 @@
@extends('layout.app')
@section('content')
<div class="pagetitle">
<h1>Normalisasi Alternatif</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('admindash') }}">Home</a></li>
<li class="breadcrumb-item active"><a href="{{ route('alternatif.pilih') }}">Pemilihan Alternatif</a></li>
<li class="breadcrumb-item active"><a href="{{ route('alternatif.perbandingan') }}">Perbandingan Alternatif</a></li>
<li class="breadcrumb-item active"><a href="{{ route('alternatif.normalisasi') }}">Normalisasi Alternatif</a></li>
</ol>
</nav>
</div><!-- End Page Title -->
<section class="section">
<div class="row">
<div class="col-lg-12">
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@foreach ($kriterias as $kriteria)
<div class="card mb-4">
<div class="card-body">
<h5 class="card-title">{{ $kriteria->nama }}</h5>
<div class="table-responsive">
<table class="table table-bordered text-center">
<thead>
<tr>
<th>Alternatif</th>
@foreach ($alternatifs as $alt)
<th>{{ $alt->nama }}</th>
@endforeach
<th>Jumlah</th>
</tr>
</thead>
<tbody>
@php
$jumlahKolom = [];
foreach ($alternatifs as $colAlt) {
$jumlahKolom[$colAlt->id] = 0;
}
// hitung jumlah kolom
foreach ($alternatifs as $rowAlt) {
foreach ($alternatifs as $colAlt) {
$jumlahKolom[$colAlt->id] += $matriks[$kriteria->id][$rowAlt->id][$colAlt->id];
}
}
@endphp
@foreach ($alternatifs as $rowAlt)
<tr>
<th>{{ $rowAlt->nama }}</th>
@php $jumlahBaris = 0; @endphp
@foreach ($alternatifs as $colAlt)
@php
$val = $matriks[$kriteria->id][$rowAlt->id][$colAlt->id];
$normalized = $val / $jumlahKolom[$colAlt->id];
$jumlahBaris += $normalized;
@endphp
<td>{{ number_format($normalized, 4) }}</td>
@endforeach
<td><strong>{{ number_format($jumlahBaris, 4) }}</strong></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
@endforeach
<!-- Form untuk menyimpan hasil normalisasi -->
<form action="{{ route('alternatif.simpanNormalisasi') }}" method="POST">
@csrf
<div class="text-center mb-5">
<button type="submit" class="btn btn-success">Simpan Normalisasi</button>
</div>
</form>
</div>
</div>
</section>
@endsection

View File

@ -0,0 +1,80 @@
@extends('layout.app')
@section('content')
<div class="pagetitle">
<h1>Perbandingan Alternatif</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('admindash') }}">Home</a></li>
<li class="breadcrumb-item active"><a href="{{ route('alternatif.pilih') }}">Pemilihan Alternatif</a></li>
<li class="breadcrumb-item active"><a href="{{ route('alternatif.perbandingan') }}">Perbandingan Alternatif</a></li>
</ol>
</nav>
</div><!-- End Page Title -->
<section class="section">
<div class="row">
<div class="col-lg-12">
@if(session('success'))
<div class="alert alert-success">{{ session('success') }}</div>
@endif
<div class="card">
<div class="card-body">
<h5 class="card-title">Matriks Perbandingan Alternatif</h5>
<form action="{{ route('alternatif.simpan') }}" method="POST">
@csrf
@foreach ($kriterias as $kriteria)
<h6 class="mt-4">{{ $kriteria->nama }}</h6>
<div class="table-responsive">
<table class="table table-bordered text-center">
<thead>
<tr>
<th>Alternatif</th>
@foreach ($alternatifs as $alt)
<th>{{ $alt->nama }}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach ($alternatifs as $alt1)
<tr>
<th>{{ $alt1->nama }}</th>
@foreach ($alternatifs as $alt2)
<td>
@if ($alt1->id == $alt2->id)
1
@elseif ($alt1->id < $alt2->id)
<input type="number" step="0.01" min="0.01"
name="nilai[{{ $kriteria->id }}][{{ $alt1->id }}][{{ $alt2->id }}]"
class="form-control" required>
@else
-
@endif
</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
</div>
@endforeach
<div class="text-end mt-4">
<button type="submit" name="action" value="simpan" class="btn btn-success">Simpan Saja</button>
<button type="submit" name="action" value="lanjut" class="btn btn-primary">Simpan & Lanjut</button>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
@endsection

View File

@ -0,0 +1,137 @@
@extends('layout.app')
@section('content')
<div class="pagetitle">
<h1>Perbandingan Alternatif</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('admindash') }}">Home</a></li>
<li class="breadcrumb-item active"><a href="{{ route('alternatif.pilih') }}">Pemilihan Alternatif</a></li>
</ol>
</nav>
</div>
<section class="section">
<div class="row">
<div class="col-lg-12">
@if(session('success'))
<div class="alert alert-success">{{ session('success') }}</div>
@endif
<div class="card">
<div class="card-body">
<h5 class="card-title">Pemilihan Alternatif</h5>
<form action="{{ route('alternatif.pilih') }}" method="POST">
@csrf
<div class="row">
@foreach ($makanans as $makanan)
<div class="col-md-4">
<div class="form-check">
<input class="form-check-input alternatif-checkbox" type="checkbox" name="alternatifs[]" value="{{ $makanan->id }}" id="alt{{ $makanan->id }}">
<label class="form-check-label" for="alt{{ $makanan->id }}">
{{ $makanan->nama }}
</label>
</div>
</div>
@endforeach
</div>
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-primary mt-3" id="submitBtn" disabled>Lanjut ke Perbandingan</button>
</div>
</form>
<hr class="my-4">
<h5 class="card-title">Data Semua Alternatif</h5>
<div class="row">
<div class="col-md-8">
{{-- Tabel --}}
<div class="table-responsive">
<table class="table table-bordered text-center">
<thead class="table-light">
<tr>
<th>No</th>
<th>Nama Makanan</th>
<th>Lemak</th>
<th>Natrium</th>
<th>Energi</th>
<th>Karbohidrat</th>
</tr>
</thead>
<tbody>
@foreach ($makanans as $index => $makanan)
<tr>
<td>{{ $index + 1 }}</td>
<td>{{ $makanan->nama }}</td>
<td>{{ $makanan->lemak }} g</td>
<td>{{ $makanan->natrium }} mg</td>
<td>{{ $makanan->energi }} kal</td>
<td>{{ $makanan->karbohidrat }} g</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
<div class="col-md-4">
{{-- Filter Kriteria --}}
<form method="GET" class="mb-3">
<div class="row align-items-end">
<div class="col-md-12">
<label for="sort" class="form-label">Urutkan berdasarkan kriteria:</label>
<select class="form-select" name="sort" id="sort">
<option value="">-- Pilih Kriteria --</option>
<option value="lemak" {{ request('sort') == 'lemak' ? 'selected' : '' }}>Lemak</option>
<option value="natrium" {{ request('sort') == 'natrium' ? 'selected' : '' }}>Natrium</option>
<option value="energi" {{ request('sort') == 'energi' ? 'selected' : '' }}>Energi</option>
<option value="karbohidrat" {{ request('sort') == 'karbohidrat' ? 'selected' : '' }}>Karbohidrat</option>
</select>
</div>
<div class="col-md-12 mt-2">
<button type="submit" class="btn btn-secondary w-100">Filter</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
@endsection
@push('scripts')
<script>
document.addEventListener('DOMContentLoaded', function () {
const checkboxes = document.querySelectorAll('.alternatif-checkbox');
const maxAllowed = 6;
const submitBtn = document.getElementById('submitBtn');
function updateUI() {
const checked = document.querySelectorAll('.alternatif-checkbox:checked');
const checkedCount = checked.length;
checkboxes.forEach(cb => {
if (!cb.checked) {
cb.disabled = checkedCount >= maxAllowed;
}
});
submitBtn.disabled = (checkedCount !== maxAllowed);
}
checkboxes.forEach(cb => {
cb.addEventListener('change', updateUI);
});
});
</script>
@endpush

View File

@ -42,7 +42,7 @@
<td class="text-center">{{ $usr->name }}</td>
<td class="text-center">{{ $usr->email }}</td>
<td class="text-center">{{ $usr->no_telp }}</td>
<td class="text-center">{{ $usr->password }}</td>
<td class="text-center">****</td> <!-- Tampilkan bintang, bukan password asli -->
<td class="text-center">{{ $usr->role->name }}</td> <!-- Display role name -->
<td class="text-center">
<a href="{{ route('edituser', $usr->id) }}" class="btn btn-sm btn-warning">Edit</a>

View File

@ -2,34 +2,32 @@
@section('content')
<div class="pagetitle">
<h1>Edit Data User</h1>
<h1>Edit Data Jenis Makanan</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('admindash') }}">Home</a></li>
<li class="breadcrumb-item active"><a href="{{ route('alternatif') }}">User</a></li>
<li class="breadcrumb-item active"><a href="{{ route('editalternatif', $alternatif->id) }}">Edit User</a></li>
<li class="breadcrumb-item active"><a href="{{ route('jenismakanan') }}">Jenis Makanan</a></li>
<li class="breadcrumb-item active"><a href="{{ route('editjenismakanan', $jenis->id) }}">Edit Jenis Makanan</a></li>
</ol>
</nav>
</div><!-- End Page Title -->
<div class="card">
<div class="card-body">
<h5 class="card-title">Edit User</h5>
<h5 class="card-title">Edit Jenis Makanan</h5>
<!-- General Form Elements -->
<form id="editUserForm" method="POST" action="{{ url("/alternatif/{$alternatif->id}") }}">
<form id="editUserForm" method="POST" action="{{ url("/jenismakanan/{$jenis->id}") }}">
@method('PUT')
@csrf
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Name</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" value="{{ $alternatif->name }}">
<input type="text" class="form-control" name="name" value="{{ $jenis->name }}">
</div>
</div>
<div class="row mb-3">
<div class="col-sm-12 text-center">
<a href="{{ route('alternatif') }}" class="btn btn-secondary mx-3">Back</a>
<a href="{{ route('jenismakanan') }}" class="btn btn-secondary mx-3">Back</a>
<button type="button" class="btn btn-primary mx-3" onclick="confirmSave()">Save</button>
<!-- Reset button to reset form fields -->
<button type="reset" class="btn btn-secondary">Reset</button>

View File

@ -2,11 +2,11 @@
@section('content')
<div class="pagetitle">
<h1>Alternatif</h1>
<h1>Jenis Makanan</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('admindash') }}">Home</a></li>
<li class="breadcrumb-item active"><a href="{{ route('alternatif') }}"> Alternatif</a></li>
<li class="breadcrumb-item active"><a href="{{ route('jenismakanan') }}"> Jenis Makanan</a></li>
</ol>
</nav>
@ -18,9 +18,9 @@
<div class="card">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<h5 class="card-title mb-2">Alternatif</h5>
<h5 class="card-title mb-2">Jenis Makanan</h5>
<div class="text-center">
<a href="{{ route('tambahalternatif') }}" class="btn btn-primary">Tambah</a>
<a href="{{ route('tambahjenismakanan') }}" class="btn btn-primary">Tambah</a>
</div>
</div>
@ -29,18 +29,18 @@
<thead>
<tr>
<th class="text-center">No</th>
<th class="text-center">Nama</th>
<th class="text-center">Jenis Makanan</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
@foreach ($alternatifs as $alter)
@foreach ($jenis_makanans as $jm)
<tr>
<td class="text-center">{{ $loop->iteration }}</td>
<td class="text-center">{{ $alter->name }}</td>
<td class="text-center">{{ $jm->name }}</td>
<td class="text-center">
<a href="{{ route('editalternatif', $alter->id) }}" class="btn btn-sm btn-warning">Edit</a>
<form action="{{ url('/alternatif', $alter->id) }}" method="POST" style="display: inline;">
<a href="{{ route('editjenismakanan', $jm->id) }}" class="btn btn-sm btn-warning">Edit</a>
<form action="{{ url('/jenismakanan', $jm->id) }}" method="POST" style="display: inline;">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger">Hapus</button>

View File

@ -2,12 +2,12 @@
@section('content')
<div class="pagetitle">
<h1>Tambah Data User</h1>
<h1>Tambah Data Jenis Makanan</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('admindash') }}">Home</a></li>
<li class="breadcrumb-item active"><a href="{{ route('alternatif') }}">alternatif</a></li>
<li class="breadcrumb-item active"><a href="{{ route('alternatif') }}">Tambah alternatif</a></li>
<li class="breadcrumb-item active"><a href="{{ route('jenismakanan') }}">Jenis Makanan</a></li>
<li class="breadcrumb-item active"><a href="{{ route('tambahjenismakanan') }}">Tambah Jenis Makanan</a></li>
</ol>
</nav>
@ -15,22 +15,23 @@
<div class="card">
<div class="card-body">
<h5 class="card-title">Tambah alternatif</h5>
<h5 class="card-title">Tambah Jenis Makanan</h5>
<!-- General Form Elements -->
<form id="AddUserForm" method="POST" action="{{ url('/alternatif/storealternatif') }}">
<form id="AddUserForm" method="POST" action="{{ url('/jenismakanan/storejenismakanan') }}">
@csrf <!-- Add this to include CSRF token -->
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Name</label>
<label for="inputText" class="col-sm-2 col-form-label">Jenis Makanan</label>
<div class="col-sm-10">
<input type="text" class="form-control" placeholder="Your name" aria-label="Your Name"
<input type="text" class="form-control" placeholder="jenismakanan" aria-label="Your Name"
aria-describedby="basic-addon1" name="name">
</div>
</div>
<div class="row mb-3">
<div class="col-sm-12 text-center">
<a href="{{ route('alternatif') }}" class="btn btn-secondary mx-3">Back</a>
<a href="{{ route('jenismakanan') }}" class="btn btn-secondary mx-3">Back</a>
<button type="button" class="btn btn-primary mx-3" onclick="confirmSave()">Save</button>
</div>
</div>

View File

@ -30,7 +30,7 @@
<div class="row mb-3">
<div class="col-sm-12 text-center">
<a href="{{ route('kategori') }}" class="btn btn-secondary mx-3">Back</a>
<button type="submit" class="btn btn-primary mx-3" onclick="return confirmSave()">Save</button>
<button type="button" class="btn btn-primary mx-3" onclick="confirmSave()">Save</button>
<!-- Reset button to reset form fields -->
<button type="reset" class="btn btn-secondary">Reset</button>

View File

@ -27,6 +27,12 @@
<input type="text" class="form-control" name="nama" value="{{ $kriteria->nama }}">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Satuan</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="satuan" value="{{ $kriteria->satuan }}">
</div>
</div>
<div class="row mb-3">
<div class="col-sm-12 text-center">
<a href="{{ route('kriteria') }}" class="btn btn-secondary mx-3">Back</a>

View File

@ -30,6 +30,7 @@
<tr>
<th class="text-center">No</th>
<th class="text-center">Nama</th>
<th class="text-center">Satuan</th>
<th class="text-center">Action</th>
</tr>
</thead>
@ -38,6 +39,7 @@
<tr>
<td class="text-center">{{ $loop->iteration }}</td>
<td class="text-center">{{ $krt->nama }}</td>
<td class="text-center">{{ $krt->satuan }}</td>
<td class="text-center">
<a href="{{ route('editkriteria', $krt->id) }}" class="btn btn-sm btn-warning">Edit</a>
<form action="{{ url('/kriteria', $krt->id) }}" method="POST" style="display: inline;">

View File

@ -28,6 +28,13 @@
aria-describedby="basic-addon1" name="nama">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Satuan</label>
<div class="col-sm-10">
<input type="text" class="form-control" placeholder="satuan yang mau dipakai" aria-label="Your Name"
aria-describedby="basic-addon1" name="satuan">
</div>
</div>
<div class="row mb-3">
<div class="col-sm-12 text-center">

View File

@ -6,8 +6,8 @@
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('admindash') }}">Home</a></li>
<li class="breadcrumb-item active"><a href="{{ route('makanan') }}">User</a></li>
<li class="breadcrumb-item active"><a href="{{ route('editmakanan', $makanan->id) }}">Edit User</a></li>
<li class="breadcrumb-item active"><a href="{{ route('makanan') }}">Makanan></li>
<li class="breadcrumb-item active"><a href="{{ route('editmakanan', $makanan->id) }}">Edit Makanan</a></li>
</ol>
</nav>
</div><!-- End Page Title -->
@ -36,35 +36,46 @@
@endforeach
</select>
</div>
</div>
<div class="row mb-3">
<label for="role" class="col-sm-2 col-form-label">Jenis Makanan</label>
<div class="col-sm-10">
<select id="role" class="form-select" name="jenis_id">
@foreach ($jenis_makanans as $id => $jenis)
<option value="{{ $id }}" {{ $makanan->jenis_id == $id ? 'selected' : '' }}>{{ $jenis }}</option>
@endforeach
</select>
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Kalori</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="kalori" value="{{ $makanan->lemak_jenuh }}">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Protein</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="protein" value="{{ $makanan->natrium }}">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Lemak</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="lemak" value="{{ $makanan->kolesterol }}">
<input type="text" class="form-control" name="lemak" value="{{ $makanan->lemak }}">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Natrium</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="natrium" value="{{ $makanan->natrium }}">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Energi</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="energi" value="{{ $makanan->energi }}">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Karbohidrat</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="karbohidrat" value="{{ $makanan->kalori }}">
<input type="text" class="form-control" name="karbohidrat" value="{{ $makanan->karbohidrat }}">
</div>
</div>
<div class="row mb-3">
<div class="col-sm-12 text-center">
<a href="{{ route('makanan') }}" class="btn btn-secondary mx-3">Back</a>
<button type="button" class="btn btn-primary mx-3" onclick="confirmSave()">Save</button>
{{-- <button type="submit" class="btn btn-primary mx-3" onclick="return confirmSave()">Save</button> --}}
<!-- Reset button to reset form fields -->
<button type="reset" class="btn btn-secondary">Reset</button>
</div>

View File

@ -38,7 +38,7 @@
</button>
</h3>
<div id="flush-collapseOne" class="accordion-collapse collapse" aria-labelledby="flush-headingOne" data-bs-parent="#accordionFlushExample">
<div class="accordion-body">Satuan yang ada pada dalam satuan <code>100 gram</code></div>
<div class="accordion-body">Komposisi gizi pangan dihitung per <code>100 gram</code>, dengan Berat Dapat Dimakan (BDD) 100 % </div>
</div>
</div>
@ -49,10 +49,11 @@
<th class="text-center">No</th>
<th class="text-center">Name</th>
<th class="text-center">Kategori</th>
<th class="text-center">Lemak Jenuh</th>
<th class="text-center">Natrium</th>
<th class="text-center">Kolesterol</th>
<th class="text-center">Kalori</th>
<th class="text-center">Jenis Makanan</th>
<th class="text-center">Lemak (g)</th>
<th class="text-center">Natrium (mg)</th>
<th class="text-center">Energi (Kal)</th>
<th class="text-center">Karbohidrat (g)</th>
<th class="text-center">Action</th>
</tr>
</thead>
@ -62,10 +63,11 @@
<td class="text-center">{{ $loop->iteration }}</td>
<td class="text-center">{{ $mknn->nama }}</td>
<td class="text-center">{{ $mknn->kategori->kategori }}</td>
<td class="text-center">{{ $mknn->lemak_jenuh }}</td>
<td class="text-center">{{ $mknn->jenis->name }}</td>
<td class="text-center">{{ $mknn->lemak }}</td>
<td class="text-center">{{ $mknn->natrium }}</td>
<td class="text-center">{{ $mknn->kolesterol }}</td>
<td class="text-center">{{ $mknn->kalori }}</td>
<td class="text-center">{{ $mknn->energi }}</td>
<td class="text-center">{{ $mknn->karbohidrat }}</td>
<td class="text-center">
<a href="{{ route('editmakanan', $mknn->id) }}" class="btn btn-sm btn-warning">Edit</a>
<form action="{{ url('/makanan', $mknn->id) }}" method="POST" style="display: inline;">

View File

@ -38,35 +38,46 @@
@endforeach
</select>
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">Jenis Makanan</label>
<div class="col-sm-10">
<select class="form-select" name="jenis_id" aria-label="Select Jenis Makanan" required>
<option selected disabled>Select a Jenis Makanan</option>
@foreach($jenis_makanans as $jenis)
<option value="{{ $jenis->id }}">{{ $jenis->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Lemak Jenuh</label>
<label for="inputText" class="col-sm-2 col-form-label">Lemak</label>
<div class="col-sm-10">
<input type="text" class="form-control" placeholder="lemak jenuh" aria-label="Your Name"
aria-describedby="basic-addon1" name="lemak_jenuh">
<input type="text" class="form-control" placeholder="lemak" aria-label="Your Name"
aria-describedby="basic-addon1" name="lemak">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Natrium</label>
<div class="col-sm-10">
<input type="text" class="form-control" placeholder="natrium" aria-label="Your Name"
aria-describedby="basic-addon1" name="natrium">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Kolesterol</label>
<div class="col-sm-10">
<input type="text" class="form-control" placeholder="kolesterol" aria-label="Your Name"
aria-describedby="basic-addon1" name="kolesterol">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Kalori</label>
<div class="col-sm-10">
<input type="text" class="form-control" placeholder="kalori" aria-label="Your Name"
aria-describedby="basic-addon1" name="kalori">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Natrium</label>
<div class="col-sm-10">
<input type="text" class="form-control" placeholder="natrium" aria-label="Your Name"
aria-describedby="basic-addon1" name="natrium">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Energi</label>
<div class="col-sm-10">
<input type="text" class="form-control" placeholder="energi" aria-label="Your Name"
aria-describedby="basic-addon1" name="energi">
</div>
</div>
<div class="row mb-3">
<label for="inputText" class="col-sm-2 col-form-label">Karbohidrat</label>
<div class="col-sm-10">
<input type="text" class="form-control" placeholder="karbohidrat" aria-label="Your Name"
aria-describedby="basic-addon1" name="karbohidrat">
</div>
</div>
</div>
<div class="row mb-3">
<div class="col-sm-12 text-center">

View File

@ -0,0 +1,88 @@
@extends('layout.app')
@section('content')
<div class="pagetitle">
<h1>Normalisasi Matriks Perbandingan</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('admindash') }}">Home</a></li>
<li class="breadcrumb-item"><a href="{{ route('perbandingan') }}">Perbandingan Kriteria</a></li>
<li class="breadcrumb-item"><a href="{{ route('hasil.normalisasi') }}">Normalisasi Kriteria</a></li>
</ol>
</nav>
</div><!-- End Page Title -->
<section class="section">
<div class="row">
<div class="col-lg-12">
<!-- Form Input Normalisasi -->
<div class="card">
<div class="card-body">
<h5 class="card-title mb-4">Normalisasi Matriks</h5>
<div class="table-responsive">
<table class="table table-bordered text-center">
<thead>
<tr>
<th>Kriteria</th>
@foreach ($kriterias as $k)
<th>{{ $k->nama }}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach ($kriterias as $i => $baris)
<tr>
<th>{{ $baris->nama }}</th>
@foreach ($kriterias as $j => $kolom)
<td>
{{ number_format($normalisasi[$i][$j], 4) }}
</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<!-- Tabel Bobot Kriteria -->
<div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Bobot Kriteria</h5>
<div class="table-responsive">
<table class="table table-bordered text-center">
<thead>
<tr>
<th>Kriteria</th>
<th>Bobot</th>
</tr>
</thead>
<tbody>
@foreach ($kriterias as $index => $kriteria)
<tr>
<td>{{ $kriteria->nama }}</td>
<td>{{ number_format($bobot[$index], 4) }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<!-- Tindakan Selanjutnya -->
<div class="text-end mt-3">
<form method="GET" action="{{ route('alternatif.pilih') }}">
@csrf
<button type="submit" class="btn btn-success">Lanjut ke Perbandingan Alternatif</button>
</form>
</div>
</div>
</div>
</section>
@endsection

View File

@ -0,0 +1,131 @@
@extends('layout.app')
@section('content')
<div class="pagetitle">
<h1>Matriks Perbandingan</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('admindash') }}">Home</a></li>
<li class="breadcrumb-item"><a href="{{ route('perbandingan') }}">Perbandingan Kriteria</a></li>
</ol>
</nav>
</div><!-- End Page Title -->
<section class="section">
<div class="row">
<div class="col-lg-12">
<!-- Form input -->
<div class="card">
<div class="card-body">
<h5 class="card-title mb-4">Input Perbandingan Kriteria</h5>
<form method="POST" action="{{ route('sementara') }}">
@csrf
<div class="table-responsive">
<table class="table table-bordered text-center">
<thead>
<tr>
<th>Kriteria</th>
@foreach ($kriterias as $k)
<th>{{ $k->nama }}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach ($kriterias as $i => $k1)
<tr>
<th>{{ $k1->nama }}</th>
@foreach ($kriterias as $j => $k2)
<td>
@if ($i == $j)
<input type="text" class="form-control text-center" value="1" disabled>
@elseif ($i < $j)
<select name="nilai[{{ $k1->id }}][{{ $k2->id }}]" class="form-select">
@for ($n = 1; $n <= 9; $n++)
<option value="{{ $n }}">{{ $n }}</option>
@endfor
</select>
@else
<input type="text" class="form-control text-center" value="-" disabled>
@endif
</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="text-end mt-3">
<button type="submit" class="btn btn-warning">Proses (Tampilkan)</button>
</div>
</form>
</div>
</div>
<!-- Tabel hasil sementara -->
@if(session('matriks'))
<div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Matriks Perbandingan Sementara</h5>
<div class="table-responsive">
<table class="table table-bordered text-center">
<thead>
<tr>
<th>Kriteria</th>
@foreach ($kriterias as $k)
<th>{{ $k->nama }}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach ($kriterias as $baris)
<tr>
<th>{{ $baris->nama }}</th>
@foreach ($kriterias as $kolom)
<td>{{ number_format(session('matriks')[$baris->id][$kolom->id], 4) }}</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
</div>
<!-- Tombol trigger modal -->
<div class="text-end">
<button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#konfirmasiModal">
Simpan & Normalisasi
</button>
</div>
<!-- Modal konfirmasi -->
<div class="modal fade" id="konfirmasiModal" tabindex="-1" aria-labelledby="konfirmasiModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<form method="POST" action="{{ route('simpan.perbandingan') }}">
@csrf
<div class="modal-header">
<h5 class="modal-title" id="konfirmasiModalLabel">Konfirmasi Penyimpanan</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Tutup"></button>
</div>
<div class="modal-body">
Apakah Anda yakin data perbandingan ini sudah benar dan ingin disimpan untuk proses normalisasi?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<button type="submit" class="btn btn-primary">Ya, Simpan</button>
</div>
</form>
</div>
</div>
</div>
<!-- End Modal -->
</div>
</div>
@endif
</div>
</div>
</section>
@endsection

View File

@ -0,0 +1,72 @@
@extends('layout.app')
@section('content')
<div class="container mt-4">
<div class="text-center mb-4">
<h2 class="fw-bold">📊 Hasil Rekomendasi Makanan</h2>
<p class="text-muted">Berikut adalah peringkat makanan berdasarkan hasil perhitungan AHP.</p>
</div>
@if(session('success'))
<div class="alert alert-success alert-dismissible fade show mt-3" role="alert">
{{ session('success') }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
@endif
<div class="row justify-content-center">
<div class="col-lg-10">
<div class="card shadow rounded">
<div class="card-header bg-success text-white text-center">
<h5 class="mb-0">Daftar Rekomendasi</h5>
</div>
<div class="card-body p-0">
<table class="table table-hover mb-0 text-center">
<thead class="table-light">
<tr>
<th scope="col">🏅 Peringkat</th>
<th scope="col">🍽️ Nama Makanan</th>
<th scope="col">📈 Nilai Akhir</th>
</tr>
</thead>
<tbody>
@forelse($rekomendasi as $index => $item)
<tr>
<td><span class="badge bg-primary fs-6">{{ $index + 1 }}</span></td>
<td class="fw-semibold">{{ $item->makanan->nama }}</td>
<td>{{ number_format($item->nilai_akhir, 4) }}</td>
</tr>
@empty
<tr>
<td colspan="3" class="text-muted">Tidak ada data rekomendasi.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
<div class="mt-4 text-end">
<form action="{{ route('rekomendasi.kirim', ['user' => 2]) }}" method="POST" onsubmit="return confirm('Yakin ingin mengirim hasil ini ke user?')">
@csrf
<button type="submit" class="btn btn-success">📤 Kirim Hasil ke User</button>
</form>
</div>
<div class="mt-3 text-end">
<form action="{{ route('rekomendasi.hapusSemua') }}" method="POST" onsubmit="return confirm('Yakin ingin menghapus semua data rekomendasi?')">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">🗑️ Hapus Semua Rekomendasi</button>
</form>
</div>
<div class="text-end mt-4">
<a href="{{ route('alternatif.pilih') }}" class="btn btn-outline-secondary">🔙 Kembali ke Pemilihan Alternatif</a>
</div>
</div>
</div>
</div>
@endsection

View File

@ -1,138 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Pages Register</title>
<meta content="" name="description">
<meta content="" name="keywords">
<!-- Favicons -->
<link href="assets/img/favicon.png" rel="icon">
<link href="assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="{{ asset('assets/vendor/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/bootstrap-icons/bootstrap-icons.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/boxicons/css/boxicons.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/quill/quill.snow.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/quill/quill.bubble.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/remixicon/remixicon.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/simple-datatables/style.css') }}" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="{{ asset('assets/css/style.css') }}" rel="stylesheet">
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
</head>
<body>
<main>
<div class="container">
<section class="section register min-vh-100 d-flex flex-column align-items-center justify-content-center py-4">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-4 col-md-6 d-flex flex-column align-items-center justify-content-center">
{{-- <div class="d-flex justify-content-center py-4">
<a href="index.html" class="logo d-flex align-items-center w-auto">
<img src="assets/img/logo.png" alt="">
<span class="d-none d-lg-block">NiceAdmin</span>
</a>
</div><!-- End Logo --> --}}
<div class="card mb-3">
<div class="card-body">
<div class="pt-4 pb-2">
<h5 class="card-title text-center pb-0 fs-4">Create an Account</h5>
<p class="text-center small">Enter your personal details to create account</p>
</div>
<form class="row g-3 needs-validation" action="{{ route('register.submit') }}" method="POST" novalidate>
@csrf
<div class="col-12">
<label for="yourName" class="form-label">Your Name</label>
<input type="text" name="name" class="form-control" id="yourName" required>
<div class="invalid-feedback">Please, enter your name!</div>
</div>
<div class="col-12">
<label for="yourEmail" class="form-label">Your Email</label>
<input type="email" name="email" class="form-control" id="yourEmail" required>
<div class="invalid-feedback">Please enter a valid Email address!</div>
</div>
<div class="col-12">
<label for="phoneNumber" class="form-label">Phone Number</label>
<div class="input-group has-validation">
<input type="tel" name="no_telp" class="form-control" id="phoneNumber" required placeholder="08...">
<div class="invalid-feedback">Please enter a valid phone number.</div>
</div>
</div>
<div class="col-12">
<label for="yourPassword" class="form-label">Password</label>
<input type="password" name="password" class="form-control" id="yourPassword" required placeholder="input min 6 characters">
<div class="invalid-feedback">Please enter your password!</div>
</div>
<div class="col-12">
<label for="yourPasswordConfirmation" class="form-label">Confirm Password</label>
<input type="password" name="password_confirmation" class="form-control" id="yourPasswordConfirmation" required placeholder="Re-enter password">
<div class="invalid-feedback">Please confirm your password!</div>
</div>
<div class="col-12">
<button class="btn btn-primary w-100" type="submit">Create Account</button>
</div>
<div class="col-12">
<p class="small mb-0">Already have an account? <a href="{{ route('login') }}">Log in</a></p>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
</main><!-- End #main -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Vendor JS Files -->
<script src="{{ asset('assets/vendor/apexcharts/apexcharts.min.js') }}"></script>
<script src="{{ asset('assets/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
<script src="{{ asset('assets/vendor/chart.js/chart.umd.js') }}"></script>
<script src="{{ asset('assets/vendor/echarts/echarts.min.js') }}"></script>
<script src="{{ asset('assets/vendor/quill/quill.js') }}"></script>
<script src="{{ asset('assets/vendor/simple-datatables/simple-datatables.js') }}"></script>
<script src="{{ asset('assets/vendor/tinymce/tinymce.min.js') }}"></script>
<script src="{{ asset('assets/vendor/php-email-form/validate.js') }}"></script>
<!-- Template Main JS File -->
<script src="{{ asset('assets/js/main.js') }}"></script>
</body>
</html>

View File

@ -0,0 +1,141 @@
@extends('layoutlp.app')
@section('content')
{{-- <div id="spinner" class="show bg-white position-fixed translate-middle w-100 vh-100 top-50 start-50 d-flex align-items-center justify-content-center">
<div class="spinner-grow text-primary" style="width: 3rem; height: 3rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div> --}}
<div id="home" class="container-fluid header bg-primary p-0 mb-5">
<div class="row g-0 align-items-center flex-column-reverse flex-lg-row">
<div class="col-lg-6 p-5 wow fadeIn" data-wow-delay="0.1s">
<h1 class="display-4 text-white mb-5">HeartChoice</h1>
<div class="row g-4">
<div class="col-sm-4">
<div class="border-start border-light ps-4">
<h2 class="text-white mb-1" data-toggle="counter-up">{{ $totalData }}</h2>
<p class="text-light mb-0">Data Yang Diperoleh</p>
</div>
</div>
<div class="col-sm-4">
<div class="border-start border-light ps-4">
<h2 class="text-white mb-1" data-toggle="counter-up">{{ $totalKriteria }}</h2>
<p class="text-light mb-0">Kriteria</p>
</div>
</div>
<div class="col-sm-4">
<div class="border-start border-light ps-4">
<h2 class="text-white mb-1" data-toggle="counter-up">{{ $totalUser }}</h2>
<p class="text-light mb-0">Total User</p>
</div>
</div>
</div>
</div>
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.5s">
<div class="owl-carousel header-carousel">
<div class="owl-carousel-item position-relative">
<img class="img-fluid" src="{{ asset('assetss/img/carousel-1.jpg')}}" alt="">
<div class="owl-carousel-text">
<h1 class="display-1 text-white mb-0">Cardiology</h1>
</div>
</div>
<div class="owl-carousel-item position-relative">
<img class="img-fluid" src="{{ asset('assetss/img/carousel-2.jpg')}}" alt="">
<div class="owl-carousel-text">
<h1 class="display-1 text-white mb-0">Neurology</h1>
</div>
</div>
<div class="owl-carousel-item position-relative">
<img class="img-fluid" src="{{ asset('assetss/img/carousel-3.jpg')}}" alt="">
<div class="owl-carousel-text">
<h1 class="display-1 text-white mb-0">Pulmonary</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="about" class="container-xxl py-5">
<div class="container">
<div class="row g-5">
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.1s">
<div class="d-flex flex-column">
<img class="img-fluid rounded w-75 align-self-end" src="{{ asset('assetss/img/about-1.jpg')}}" alt="">
<img class="img-fluid rounded w-50 bg-white pt-3 pe-3" src="{{ asset('assetss/img/about-2.jpg')}}" alt="" style="margin-top: -25%;">
</div>
</div>
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.5s">
<p class="d-inline-block border rounded-pill py-1 px-4">About Us</p>
<h1 class="mb-4">Mengapa Anda Harus Mempercayai Sistem Kami</h1>
<p>HeartChoice ini merupakan sebuah Sistem Pendukung Keputusan untuk membantu penderita penyakit jantung dalam memilih menu makanan yang sesuai dengan kriteria kesehatan mereka. Dengan menggunakan metode AHP (Analytic Hierarchy Process), kami memberikan rekomendasi yang tepat berdasarkan berbagai kriteria gizi yang penting.</p>
<p class="mb-4">Aplikasi ini menggunakan pendekatan berbasis web yang mudah diakses oleh siapa saja, memberikan pemahaman yang jelas mengenai perbandingan kriteria seperti lemak, natrium, energi, dan karbohidrat dalam menu makanan. Dengan sistem ini, penderita penyakit jantung dapat membuat keputusan yang lebih sehat dan aman dalam memilih makanan mereka.</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Mempermudah Pemilihan Makanan yang Sehat</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Memanfaatkan Metode AHP untuk Keputusan yang Lebih Tepat</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Aplikasi yang Mudah Digunakan dan Aksesible</p>
<a class="btn btn-primary rounded-pill py-3 px-5 mt-3" href="{{ route('login') }}">Read More</a>
</div>
</div>
</div>
</div>
<!-- About End -->
<!-- fEATURES Start -->
<!-- Latar belakang biru lembut -->
<div id="features" class="container-xxl py-5" style="background: linear-gradient(to bottom, #e3f2fd, #bbdefb);">
<div class="container">
<div class="text-center mb-5">
<p class="d-inline-block border rounded-pill bg-primary text-light py-1 px-4">Fitur Unggulan</p>
<h1 class="text-dark mb-4">Kenali Fitur-fitur Utama Kami</h1>
<p class="text-dark mb-4 pb-2">
Sistem ini dirancang khusus untuk membantu penderita penyakit jantung memilih menu makanan terbaik dengan pendekatan ilmiah dan teknologi yang mudah digunakan.
</p>
</div>
<!-- Daftar Fitur Horizontal -->
<div class="row row-cols-2 row-cols-md-3 row-cols-lg-5 g-4 text-center mb-5">
@php
$features = [
['id' => 'feature1', 'icon' => 'fas fa-heartbeat', 'label' => 'Rekomendasi Sehat'],
['id' => 'feature2', 'icon' => 'fas fa-brain', 'label' => 'Pendekatan Ilmiah'],
['id' => 'feature3', 'icon' => 'fas fa-desktop', 'label' => 'Tampilan Responsif'],
['id' => 'feature4', 'icon' => 'fas fa-database', 'label' => 'Keamanan Data'],
['id' => 'feature5', 'icon' => 'fas fa-hands-helping', 'label' => 'Dukungan Penuh'],
];
@endphp
@foreach ($features as $feature)
<div class="col">
<!-- Tombol "Read More" tanpa garis -->
<a href="{{ route('login') }}" class="text-decoration-none">
<div class="p-3 rounded shadow-sm bg-white hover-shadow transition" style="cursor: pointer; border: none;">
<i class="{{ $feature['icon'] }} text-primary fs-4 mb-2"></i>
<h6 class="text-dark mb-0">{{ $feature['label'] }}</h6>
<p class="text-primary mb-0">Read More</p>
</div>
</a>
</div>
@endforeach
</div>
</div>
</div>
<!-- Animasi Hover CSS -->
<style>
.hover-shadow:hover {
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
transform: translateY(-5px);
transition: all 0.3s ease;
}
.transition {
transition: all 0.3s ease;
}
</style>
<!-- fEATURES End -->
@endsection

View File

@ -83,6 +83,11 @@ class="bi bi-arrow-up-short"></i></a>
<!-- Template Main JS File -->
<script src="{{ asset('assets/js/main.js') }}"></script>
{{-- <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script> --}}
@stack('scripts')
</body>
</html>

View File

@ -7,82 +7,63 @@
</a>
</div><!-- End Logo -->
{{-- <div class="search-bar">
<form class="search-form d-flex align-items-center" method="POST" action="#">
<input type="text" name="query" placeholder="Search" title="Enter search keyword">
<button type="submit" title="Search"><i class="bi bi-search"></i></button>
</form>
</div><!-- End Search Bar --> --}}
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item d-block d-lg-none">
<a class="nav-link nav-icon search-bar-toggle " href="#">
<a class="nav-link nav-icon search-bar-toggle" href="#">
<i class="bi bi-search"></i>
</a>
</li><!-- End Search Icon-->
</li><!-- End Search Icon -->
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
{{-- <img src="assets/img/profile-img.jpg" alt="Profile" class="rounded-circle"> --}}
<span class="d-none d-md-block dropdown-toggle ps-2">Admin</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6>Admin</h6>
{{-- <span>Admin</span> --}}
{{-- <img src="{{ asset('assetss/img/profile-default.png') }}" alt="Profile" class="rounded-circle" width="32" height="32"> --}}
<span class="d-none d-md-block dropdown-toggle ps-2 fw-semibold text-dark">{{ Auth::user()->name }}</span>
</a>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile shadow-sm">
<li class="dropdown-header text-center">
{{-- <img src="{{ asset('assetss/img/profile-default.png') }}" alt="Profile" class="rounded-circle mb-2" width="60" height="60"> --}}
<h6 class="mb-0">{{ Auth::user()->name }}</h6>
<span class="text-muted">{{ Auth::user()->role->name ?? 'User' }}</span><br>
<small class="text-muted">{{ Auth::user()->email }}</small>
</li>
<li>
<li>
<hr class="dropdown-divider">
</li>
{{-- <li>
<a class="dropdown-item d-flex align-items-center" href="{{ route('profile')}}">
<i class="bi bi-person"></i>
<span>My Profile</span>
</a>
</li> --}}
<li>
<hr class="dropdown-divider">
<form id="logoutForm" method="POST" action="{{ route('logout') }}">
@csrf
<button type="button" class="dropdown-item d-flex align-items-center gap-2 text-danger" onclick="confirmLogout()">
<i class="bi bi-box-arrow-right" style="font-size: 1.2rem;"></i>
<span>Sign Out</span>
</button>
</form>
</li>
{{-- <li>
<a class="dropdown-item d-flex align-items-center" href="users-profile.html">
<i class="bi bi-gear"></i>
<span>Account Settings</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="pages-faq.html">
<i class="bi bi-question-circle"></i>
<span>Need Help?</span>
</a>
</li> --}}
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="{{ route('login') }}">
<i class="bi bi-box-arrow-right"></i>
<span>Sign Out</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</li>
</ul>
</nav><!-- End Icons Navigation -->
<!-- SweetAlert2 -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<!-- Confirmation Dialog Script -->
<script>
function confirmLogout() {
Swal.fire({
title: 'Apakah Anda yakin?',
text: "Anda akan keluar dari akun ini!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, keluar',
cancelButtonText: 'Batal'
}).then((result) => {
if (result.isConfirmed) {
document.getElementById('logoutForm').submit();
}
});
}
</script>

View File

@ -9,34 +9,6 @@
<li class="nav-heading">Pages</li>
{{-- <li class="nav-item">
<a class="nav-link {{ request()->routeIs('dataadmin') ? '' : 'collapsed' }}" href="{{ route('dataadmin') }}">
<i class="ri-admin-line"></i>
<span>Admin</span>
</a>
</li> --}}
{{-- <li class="nav-item">
<a class="nav-link" data-bs-target="#users-nav" data-bs-toggle="collapse" href="#">
<i class="bi bi-layout-text-window-reverse"></i><span>User</span><i class="bi bi-chevron-down ms-auto"></i>
</a>
<ul id="users-nav" class="nav-content collapse show" data-bs-parent="#sidebar-nav">
<li>
<a class="nav-link {{ request()->routeIs('role') ? 'active' : '' }}" href="{{ route('role') }}">
<i class="bi bi-circle"></i>
<span>Role</span>
</a>
</li>
<li>
<a class="nav-link {{ request()->routeIs('datauser') ? 'active' : '' }}" href="{{ route('datauser') }}">
<i class="ri-admin-line"></i>
<span>User</span>
</a>
</li>
</ul>
</li> --}}
<li class="nav-item">
<a class="nav-link {{ request()->routeIs(['tables-general', 'tables-data']) ? '' : 'collapsed' }}" data-bs-target="#users-nav" data-bs-toggle="collapse" href="#">
<i class="ri-admin-line"></i><span>User</span><i class="bi bi-chevron-down ms-auto"></i>
@ -68,6 +40,12 @@
<span>kategori</span>
</a>
</li>
<li>
<a class="nav-link {{ request()->routeIs('jenismakanan') ? '' : 'collapsed' }}" href="{{ route('jenismakanan') }}">
<i class="ri-store-2-line"></i>
<span>Jenis Makanan</span>
</a>
</li>
<li>
<a class="nav-link {{ request()->routeIs('makanan') ? '' : 'collapsed' }}" href="{{ route('makanan') }}">
<i class="ri-store-2-line"></i>
@ -77,36 +55,64 @@
</ul>
</li>
<li class="nav-item">
<a class="nav-link {{ request()->routeIs('kriteria') ? '' : 'collapsed' }}" href="{{ route('kriteria') }}">
<i class="ri-file-text-line"></i>
<span>Kriteria</span>
</a>
</li><!-- End Profile Page Nav -->
<li class="nav-item">
<a class="nav-link {{ request()->routeIs('alternatif') ? '' : 'collapsed' }}" href="{{ route('alternatif') }}">
<i class="ri-file-text-fill"></i>
<span>Alternatif</span>
</a>
</li><!-- End Profile Page Nav -->
<a class="nav-link {{ request()->routeIs(['tables-general', 'tables-data']) ? '' : 'collapsed' }}" data-bs-target="#kriter-nav" data-bs-toggle="collapse" href="#">
<i class="ri-file-text-fill"></i><span>Kriteria</span><i class="bi bi-chevron-down ms-auto"></i>
</a>
<ul id="kriter-nav" class="nav-content collapse {{ request()->routeIs(['tables-general', 'tables-data']) ? 'show' : '' }}" data-bs-parent="#sidebar-nav">
<li>
<a class="nav-link {{ request()->routeIs('kriteria') ? '' : 'collapsed' }}" href="{{ route('kriteria') }}">
<i class="ri-store-2-line"></i>
<span>Pilih Kriteria</span>
</a>
</li>
<li>
<a class="nav-link {{ request()->routeIs('perbandingan') ? '' : 'collapsed' }}" href="{{ route('perbandingan') }}">
<i class="ri-store-2-line"></i>
<span>Perbandingan Kriteria</span>
</a>
</li>
<li>
<a class="nav-link {{ request()->routeIs('hasil.normalisasi') ? '' : 'collapsed' }}" href="{{ route('hasil.normalisasi') }}">
<i class="ri-store-2-line"></i>
<span>Normalisasi Kriteria</span>
</a>
</li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link {{ request()->routeIs(['tables-general', 'tables-data']) ? '' : 'collapsed' }}" data-bs-target="#pers-nav" data-bs-toggle="collapse" href="#">
<i class="bi bi-layout-text-window-reverse"></i><span>Perhitungan</span><i class="bi bi-chevron-down ms-auto"></i>
</a>
<ul id="pers-nav" class="nav-content collapse {{ request()->routeIs(['tables-general', 'tables-data']) ? 'show' : '' }}" data-bs-parent="#sidebar-nav">
<li>
<a href="tables-general.html" class="{{ request()->routeIs('tables-general') ? 'active' : '' }}">
<i class="bi bi-circle"></i><span>Input Nilai</span>
</a>
</li>
<li>
<a href="tables-data.html" class="{{ request()->routeIs('tables-data') ? 'active' : '' }}">
<i class="bi bi-circle"></i><span>Hasil</span>
</a>
</li>
</ul>
</li><!-- End Tables Nav -->
<a class="nav-link {{ request()->routeIs(['tables-general', 'tables-data']) ? '' : 'collapsed' }}" data-bs-target="#alter-nav" data-bs-toggle="collapse" href="#">
<i class="ri-file-text-fill"></i><span>Alternatif</span><i class="bi bi-chevron-down ms-auto"></i>
</a>
<ul id="alter-nav" class="nav-content collapse {{ request()->routeIs(['tables-general', 'tables-data']) ? 'show' : '' }}" data-bs-parent="#sidebar-nav">
<li>
<a class="nav-link {{ request()->routeIs('alternatif.pilih') ? '' : 'collapsed' }}" href="{{ route('alternatif.pilih') }}">
<i class="ri-store-2-line"></i>
<span>Pilih Alternatif</span>
</a>
</li>
<li>
<a class="nav-link {{ request()->routeIs('alternatif.perbandingan') ? '' : 'collapsed' }}" href="{{ route('alternatif.perbandingan') }}">
<i class="ri-store-2-line"></i>
<span>Perbandingan Alternatif</span>
</a>
</li>
<li>
<a class="nav-link {{ request()->routeIs('alternatif.normalisasi') ? '' : 'collapsed' }}" href="{{ route('alternatif.normalisasi') }}">
<i class="ri-store-2-line"></i>
<span>Normalisasi Alternatif</span>
</a>
</li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link {{ request()->routeIs('rekomendasi.hasil') ? '' : 'collapsed' }}" href="{{ route('rekomendasi.hasil') }}">
<i class="ri-file-text-line"></i>
<span>HASIL</span>
</a>
</li><!-- End Profile Page Nav -->
</ul>

View File

@ -0,0 +1,119 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>HeartChoice</title>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="" name="keywords">
<meta content="" name="description">
<!-- Favicon -->
<link href="{{ asset('logo/baru/dutdut.png') }}" rel="icon">
<!-- Google Web Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;500&family=Roboto:wght@500;700;900&display=swap" rel="stylesheet">
<!-- Icon Font Stylesheet -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.10.0/css/all.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.4.1/font/bootstrap-icons.css" rel="stylesheet">
<!-- Libraries Stylesheet -->
<link href="{{ asset('assetss/lib/animate/animate.min.css') }}" rel="stylesheet">
<link href="{{ asset('assetss/lib/owlcarousel/assets/owl.carousel.min.css') }}" rel="stylesheet">
<link href="{{ asset('assetss/lib/tempusdominus/css/tempusdominus-bootstrap-4.min.css') }}" rel="stylesheet" />
<!-- Customized Bootstrap Stylesheet -->
<link href="{{ asset('assetss/css/bootstrap.min.css') }}" rel="stylesheet">
<!-- Template Stylesheet -->
<link href="{{ asset('assetss/css/style.css') }}" rel="stylesheet">
</head>
<body>
<!-- Spinner Start -->
{{-- <div id="spinner" class="show bg-white position-fixed translate-middle w-100 vh-100 top-50 start-50 d-flex align-items-center justify-content-center">
<div class="spinner-grow text-primary" style="width: 3rem; height: 3rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
<!-- Spinner End --> --}}
{{-- <!-- Topbar Start -->
<div class="container-fluid bg-light p-0 wow fadeIn" data-wow-delay="0.1s">
<div class="row gx-0 d-none d-lg-flex">
<div class="col-lg-7 px-5 text-start">
<div class="h-100 d-inline-flex align-items-center py-3 me-4">
<small class="fa fa-map-marker-alt text-primary me-2"></small>
<small>123 Street, New York, USA</small>
</div>
<div class="h-100 d-inline-flex align-items-center py-3">
<small class="far fa-clock text-primary me-2"></small>
<small>Mon - Fri : 09.00 AM - 09.00 PM</small>
</div>
</div>
<div class="col-lg-5 px-5 text-end">
<div class="h-100 d-inline-flex align-items-center py-3 me-4">
<small class="fa fa-phone-alt text-primary me-2"></small>
<small>+012 345 6789</small>
</div>
<div class="h-100 d-inline-flex align-items-center">
<a class="btn btn-sm-square rounded-circle bg-white text-primary me-1" href=""><i class="fab fa-facebook-f"></i></a>
<a class="btn btn-sm-square rounded-circle bg-white text-primary me-1" href=""><i class="fab fa-twitter"></i></a>
<a class="btn btn-sm-square rounded-circle bg-white text-primary me-1" href=""><i class="fab fa-linkedin-in"></i></a>
<a class="btn btn-sm-square rounded-circle bg-white text-primary me-0" href=""><i class="fab fa-instagram"></i></a>
</div>
</div>
</div>
</div>
<!-- Topbar End --> --}}
<!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top p-0 wow fadeIn" data-wow-delay="0.1s">
@include('layoutlp.header')
</nav>
<!-- Navbar End -->
<!-- Header Start -->
<!-- Header End -->
<!-- About Start -->
@yield('content')
<!-- Testimonial End -->
<!-- Footer Start -->
{{-- <div class="container-fluid bg-dark text-light footer mt-5 pt-5 wow fadeIn" data-wow-delay="0.1s">
@include('layoutlp.footer') --}}
</div>
<!-- Footer End -->
<!-- Back to Top -->
<a href="#" class="btn btn-lg btn-primary btn-lg-square rounded-circle back-to-top"><i class="bi bi-arrow-up"></i></a>
<!-- JavaScript Libraries -->
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js"></script>
<script src="{{ asset('assetss/lib/wow/wow.min.js')}}"></script>
<script src="{{ asset('assetss/lib/easing/easing.min.js')}}"></script>
<script src="{{ asset('assetss/lib/waypoints/waypoints.min.js')}}"></script>
<script src="{{ asset('assetss/lib/counterup/counterup.min.js')}}"></script>
<script src="{{ asset('assetss/lib/owlcarousel/owl.carousel.min.js')}}"></script>
<script src="{{ asset('assetss/lib/tempusdominus/js/moment.min.js')}}"></script>
<script src="{{ asset('assetss/lib/tempusdominus/js/moment-timezone.min.js')}}"></script>
<script src="{{ asset('assetss/lib/tempusdominus/js/tempusdominus-bootstrap-4.min.js')}}"></script>
<!-- Template Javascript -->
<script src="{{ asset('assetss/js/main.js') }}"></script>
</body>
</html>

View File

@ -0,0 +1,55 @@
{{-- <div class="container py-5">
<div class="row g-5">
<div class="col-lg-3 col-md-6">
<h5 class="text-light mb-4">Address</h5>
<p class="mb-2"><i class="fa fa-map-marker-alt me-3"></i>123 Street, New York, USA</p>
<p class="mb-2"><i class="fa fa-phone-alt me-3"></i>+012 345 67890</p>
<p class="mb-2"><i class="fa fa-envelope me-3"></i>info@example.com</p>
<div class="d-flex pt-2">
<a class="btn btn-outline-light btn-social rounded-circle" href=""><i class="fab fa-twitter"></i></a>
<a class="btn btn-outline-light btn-social rounded-circle" href=""><i class="fab fa-facebook-f"></i></a>
<a class="btn btn-outline-light btn-social rounded-circle" href=""><i class="fab fa-youtube"></i></a>
<a class="btn btn-outline-light btn-social rounded-circle" href=""><i class="fab fa-linkedin-in"></i></a>
</div>
</div>
<div class="col-lg-3 col-md-6">
<h5 class="text-light mb-4">Services</h5>
<a class="btn btn-link" href="">Cardiology</a>
<a class="btn btn-link" href="">Pulmonary</a>
<a class="btn btn-link" href="">Neurology</a>
<a class="btn btn-link" href="">Orthopedics</a>
<a class="btn btn-link" href="">Laboratory</a>
</div>
<div class="col-lg-3 col-md-6">
<h5 class="text-light mb-4">Quick Links</h5>
<a class="btn btn-link" href="">About Us</a>
<a class="btn btn-link" href="">Contact Us</a>
<a class="btn btn-link" href="">Our Services</a>
<a class="btn btn-link" href="">Terms & Condition</a>
<a class="btn btn-link" href="">Support</a>
</div>
<div class="col-lg-3 col-md-6">
<h5 class="text-light mb-4">Newsletter</h5>
<p>Dolor amet sit justo amet elitr clita ipsum elitr est.</p>
<div class="position-relative mx-auto" style="max-width: 400px;">
<input class="form-control border-0 w-100 py-3 ps-4 pe-5" type="text" placeholder="Your email">
<button type="button" class="btn btn-primary py-2 position-absolute top-0 end-0 mt-2 me-2">SignUp</button>
</div>
</div>
</div>
</div>
{{-- <div class="container">
<div class="copyright">
<div class="row">
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
&copy; <a class="border-bottom" href="#">Your Site Name</a>, All Right Reserved.
</div>
<div class="col-md-6 text-center text-md-end">
<!--/*** This template is free as long as you keep the footer authors credit link/attribution link/backlink. If you'd like to use the template without the footer authors credit link/attribution link/backlink, you can purchase the Credit Removal License from "https://htmlcodex.com/credit-removal". Thank you for your support. ***/-->
Designed By <a class="border-bottom" href="https://htmlcodex.com">HTML Codex</a>
</br>
Distributed By <a class="border-bottom" href="https://themewagon.com" target="_blank">ThemeWagon</a>
</div>
</div>
</div>
</div> --}}

View File

@ -0,0 +1,27 @@
<a href="#home" class="navbar-brand d-flex align-items-center px-4 px-lg-5">
<h1 class="m-0 text-primary">
<img src="{{ asset('logo/baru/HC.png') }}" alt="Hospital Icon" class="me-2" style="width:60px; height:auto;">
HeartChoice
</h1>
</a>
<button type="button" class="navbar-toggler me-4" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<div class="navbar-nav ms-auto p-4 p-lg-0">
<a href="#home" class="nav-item nav-link">Home</a>
<a href="#about" class="nav-item nav-link">About</a>
<a href="#features" class="nav-item nav-link">Features</a>
<!-- Sign In untuk layar kecil -->
<a href="{{ route('login') }}" class="nav-item nav-link d-lg-none text-primary">
Sign In <i class="fa fa-arrow-right ms-2"></i>
</a>
</div>
<!-- Tombol untuk layar besar -->
<a href="{{ route('login') }}" class="btn btn-primary rounded-0 py-4 px-lg-5 d-none d-lg-block">
Sign In <i class="fa fa-arrow-right ms-3"></i>
</a>
</div>

View File

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<title>Klinik - Clinic Website Template</title>
<title>HeartChoice</title>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="" name="keywords">
<meta content="" name="description">
@ -34,16 +34,16 @@
<body>
<!-- Spinner Start -->
{{-- <div id="spinner" class="show bg-white position-fixed translate-middle w-100 vh-100 top-50 start-50 d-flex align-items-center justify-content-center">
<div id="spinner" class="show bg-white position-fixed translate-middle w-100 vh-100 top-50 start-50 d-flex align-items-center justify-content-center">
<div class="spinner-grow text-primary" style="width: 3rem; height: 3rem;" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
<!-- Spinner End --> --}}
<!-- Spinner End -->
{{-- <!-- Topbar Start -->
<div class="container-fluid bg-light p-0 wow fadeIn" data-wow-delay="0.1s">
<!-- Topbar Start -->
{{-- <div class="container-fluid bg-light p-0 wow fadeIn" data-wow-delay="0.1s">
<div class="row gx-0 d-none d-lg-flex">
<div class="col-lg-7 px-5 text-start">
<div class="h-100 d-inline-flex align-items-center py-3 me-4">
@ -68,8 +68,8 @@
</div>
</div>
</div>
</div>
<!-- Topbar End --> --}}
</div> --}}
<!-- Topbar End -->
<!-- Navbar Start -->
@ -90,9 +90,9 @@
<!-- Footer Start -->
<div class="container-fluid bg-dark text-light footer mt-5 pt-5 wow fadeIn" data-wow-delay="0.1s">
{{-- <div class="container-fluid bg-dark text-light footer mt-5 pt-5 wow fadeIn" data-wow-delay="0.1s">
@include('layoutuser.footer')
</div>
</div> --}}
<!-- Footer End -->
@ -114,6 +114,8 @@
<!-- Template Javascript -->
<script src="{{ asset('assetss/js/main.js') }}"></script>
</body>
</html>

View File

@ -37,11 +37,11 @@
</div>
</div>
</div>
</div>
{{-- <div class="container">
</div> --}}
<div class="container">
<div class="copyright">
<div class="row">
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
{{-- <div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
&copy; <a class="border-bottom" href="#">Your Site Name</a>, All Right Reserved.
</div>
<div class="col-md-6 text-center text-md-end">
@ -49,7 +49,7 @@
Designed By <a class="border-bottom" href="https://htmlcodex.com">HTML Codex</a>
</br>
Distributed By <a class="border-bottom" href="https://themewagon.com" target="_blank">ThemeWagon</a>
</div>
</div> --}}
</div>
</div>
</div> --}}
</div>

View File

@ -3,28 +3,62 @@
<img src="{{ asset('logo/baru/HC.png') }}" alt="Hospital Icon" class="me-2" style="width:60px; height:auto;">
HeartChoice
</h1>
</a>
<button type="button" class="navbar-toggler me-4" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<div class="navbar-nav ms-auto p-4 p-lg-0">
<a href="{{ route('userdash') }}" class="nav-item nav-link {{ request()->routeIs('userdash') ? 'active' : '' }}">Home</a>
<a href="{{ route('about') }}" class="nav-item nav-link {{ request()->routeIs('about') ? 'active' : '' }}">About</a>
<a href="{{ route('service') }}" class="nav-item nav-link {{ request()->routeIs('service') ? 'active' : '' }}">Service</a>
<a href="{{ route('feature') }}" class="nav-item nav-link {{ request()->routeIs('feature') ? 'active' : '' }}">Features</a>
{{-- <div class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle {{ request()->is('feature', 'team', 'appointment', 'testimonial', '404') ? 'active' : '' }}" data-bs-toggle="dropdown">Pages</a>
<div class="dropdown-menu rounded-0 rounded-bottom m-0">
<a href="feature.html" class="dropdown-item {{ request()->is('feature') ? 'active' : '' }}">Feature</a>
<a href="team.html" class="dropdown-item {{ request()->is('team') ? 'active' : '' }}">Our Doctor</a>
<a href="appointment.html" class="dropdown-item {{ request()->is('appointment') ? 'active' : '' }}">Appointment</a>
<a href="testimonial.html" class="dropdown-item {{ request()->is('testimonial') ? 'active' : '' }}">Testimonial</a>
<a href="404.html" class="dropdown-item {{ request()->is('404') ? 'active' : '' }}">404 Page</a>
</div>
</div> --}}
{{-- <a href="contact.html" class="nav-item nav-link {{ request()->is('contact') ? 'active' : '' }}">Contact</a> --}}
<a href="{{ route('userabout') }}" class="nav-item nav-link {{ request()->routeIs('userabout') ? 'active' : '' }}">About</a>
<a href="{{ route('userfeature') }}" class="nav-item nav-link {{ request()->routeIs('userfeature') ? 'active' : '' }}">Features</a>
<a href="{{ route('userdata') }}" class="nav-item nav-link {{ request()->routeIs('userdata') ? 'active' : '' }}">Data</a>
<a href="{{ route('userresult') }}" class="nav-item nav-link {{ request()->routeIs('userresult') ? 'active' : '' }}">Result</a>
<a class="nav-link dropdown-toggle d-flex justify-content justify-content-lg-start align-items-center" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<span class="ps-2 fw-semibold text-dark">{{ Auth::user()->name }}</span>
</a>
<ul class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="navbarDropdown">
<li class="dropdown-header text-center">
<h6 class="mb-0">{{ Auth::user()->name }}</h6>
{{-- <span class="text-muted">{{ Auth::user()->role->name ?? 'User' }}</span><br> --}}
<small class="text-muted">{{ Auth::user()->email }}</small>
</li>
<li><hr class="dropdown-divider"></li>
<li>
<form id="logoutForm" method="POST" action="{{ route('logout') }}">
@csrf
<button type="button" class="dropdown-item d-flex align-items-center gap-2 text-danger" onclick="confirmLogout()">
<i class="bi bi-box-arrow-right" style="font-size: 1.2rem;"></i>
<span>Sign Out</span>
</button>
</form>
</li>
</ul>
</div>
<a href="{{ route('login') }}" class="btn btn-primary rounded-0 py-4 px-lg-5 d-none d-lg-block">Appointment<i class="fa fa-arrow-right ms-3"></i></a>
</div>
<!-- SweetAlert2 -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<!-- Confirmation Dialog Script -->
<script>
function confirmLogout() {
Swal.fire({
title: 'Apakah Anda yakin?',
text: "Anda akan keluar dari akun ini!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, keluar',
cancelButtonText: 'Batal'
}).then((result) => {
if (result.isConfirmed) {
document.getElementById('logoutForm').submit();
}
});
}
</script>

View File

@ -2,134 +2,126 @@
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta charset="utf-8" />
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
<title>Login</title>
<meta content="" name="description">
<meta content="" name="keywords">
{{-- <!-- Favicons -->
<link href="assets/img/favicon.png" rel="icon">
<link href="assets/img/apple-touch-icon.png" rel="apple-touch-icon"> --}}
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<link href="https://fonts.gstatic.com" rel="preconnect" />
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet" />
<!-- Vendor CSS Files -->
<link href="{{ asset('assets/vendor/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/bootstrap-icons/bootstrap-icons.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/boxicons/css/boxicons.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/quill/quill.snow.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/quill/quill.bubble.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/remixicon/remixicon.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/simple-datatables/style.css') }}" rel="stylesheet">
<!-- Vendor CSS -->
<link href="{{ asset('assets/vendor/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet" />
<link href="{{ asset('assets/vendor/bootstrap-icons/bootstrap-icons.css') }}" rel="stylesheet" />
<link href="{{ asset('assets/css/style.css') }}" rel="stylesheet" />
<!-- Template Main CSS File -->
<link href="{{ asset('assets/css/style.css') }}" rel="stylesheet">
<style>
body {
font-family: 'Nunito', sans-serif;
background: #f8f9fa;
}
<!-- =======================================================
* Template Name: NiceAdmin
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/
* Updated: Apr 20 2024 with Bootstrap v5.3.3
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
======================================================== -->
.login-container {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
}
.login-card {
width: 100%;
max-width: 400px;
border-radius: 10px;
box-shadow: 0 0 30px rgba(0, 0, 0, 0.05);
background-color: #ffffff;
}
@media (max-width: 576px) {
.login-card {
padding: 1rem;
}
.login-card h5 {
font-size: 1.25rem;
}
.login-card p {
font-size: 0.875rem;
}
}
</style>
</head>
<body>
<main>
<div class="container">
<div class="container-fluid login-container">
<div class="login-card p-4">
<section class="section register min-vh-100 d-flex flex-column align-items-center justify-content-center py-4">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-4 col-md-6 d-flex flex-column align-items-center justify-content-center">
{{-- <div class="d-flex justify-content-center py-4">
<a href="index.html" class="logo d-flex align-items-center w-auto">
<img src="assets/img/logo.png" alt="">
<span class="d-none d-lg-block">NiceAdmin</span>
</a>
</div><!-- End Logo --> --}}
<div class="card mb-3">
<div class="card-body">
<div class="pt-4 pb-2">
<h5 class="card-title text-center pb-0 fs-4">Login to Your Account</h5>
<p class="text-center small">Enter your username & password to login</p>
</div>
<form class="row g-3 needs-validation" novalidate>
<div class="col-12">
<label for="yourUsername" class="form-label">Username</label>
<div class="input-group has-validation">
{{-- <span class="input-group-text" id="inputGroupPrepend">@</span> --}}
<input type="text" name="name" class="form-control" id="yourUsername" required>
<div class="invalid-feedback">Please enter your username.</div>
</div>
</div>
<div class="col-12">
<label for="yourPassword" class="form-label">Password</label>
<input type="password" name="password" class="form-control" id="yourPassword" required>
<div class="invalid-feedback">Please enter your password!</div>
</div>
{{-- <div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" value="true" id="rememberMe">
<label class="form-check-label" for="rememberMe">Remember me</label>
</div>
</div> --}}
<div class="col-12">
<button class="btn btn-primary w-100" type="submit">Login</button>
</div>
<div class="col-12">
<p class="small mb-0">Don't have account? <a href="{{ route('register') }}">Create an account</a></p>
</div>
</form>
</div>
</div>
{{-- <div class="credits">
<!-- All the links in the footer should remain intact. -->
<!-- You can delete the links only if you purchased the pro version. -->
<!-- Licensing information: https://bootstrapmade.com/license/ -->
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ -->
Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a>
</div> --}}
</div>
</div>
<div class="text-center mb-4">
<h5 class="card-title text-primary fw-bold mb-2">Login to Your Account</h5>
<p class="text-muted small">Enter your email & password to login</p>
</div>
</section>
@if(session('error'))
<div class="alert alert-danger">
{{ session('error') }}
</div>
@endif
<form method="POST" action="{{ route('login.post') }}" class="needs-validation" novalidate>
@csrf
<div class="mb-3">
<label for="yourEmail" class="form-label">Email</label>
<input type="email" name="email" class="form-control" id="yourEmail" required>
<div class="invalid-feedback">Please enter your email.</div>
</div>
<div class="mb-3">
<label for="yourPassword" class="form-label">Password</label>
<input type="password" name="password" class="form-control" id="yourPassword" required>
<div class="invalid-feedback">Please enter your password!</div>
</div>
<div class="d-grid mb-3">
<button class="btn btn-primary" type="submit">Login</button>
</div>
<div class="text-center">
<p class="small">Don't have an account? <a href="{{ route('register') }}">Create one</a></p>
</div>
</form>
</div>
</div>
</main><!-- End #main -->
</main>
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
<!-- Back to Top -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center">
<i class="bi bi-arrow-up-short"></i>
</a>
<!-- Vendor JS Files -->
<script src="{{ asset('assets/vendor/apexcharts/apexcharts.min.js') }}"></script>
<!-- Vendor JS -->
<script src="{{ asset('assets/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
<script src="{{ asset('assets/vendor/chart.js/chart.umd.js') }}"></script>
<script src="{{ asset('assets/vendor/echarts/echarts.min.js') }}"></script>
<script src="{{ asset('assets/vendor/quill/quill.js') }}"></script>
<script src="{{ asset('assets/vendor/simple-datatables/simple-datatables.js') }}"></script>
<script src="{{ asset('assets/vendor/tinymce/tinymce.min.js') }}"></script>
<script src="{{ asset('assets/vendor/php-email-form/validate.js') }}"></script>
<!-- Template Main JS File -->
<script src="{{ asset('assets/js/main.js') }}"></script>
<script>
// Bootstrap validation script
(() => {
'use strict'
const forms = document.querySelectorAll('.needs-validation')
Array.from(forms).forEach(form => {
form.addEventListener('submit', event => {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
})()
</script>
</body>
</html>
</html>

View File

@ -0,0 +1,189 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>Register</title>
<meta content="" name="description">
<meta content="" name="keywords">
<!-- Favicons -->
<link href="{{ asset('logo/baru/dutdut.png') }}" rel="icon">
<link href="assets/img/apple-touch-icon.png" rel="apple-touch-icon">
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="{{ asset('assets/vendor/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('assets/vendor/bootstrap-icons/bootstrap-icons.css') }}" rel="stylesheet">
<!-- Template Main CSS File -->
<link href="{{ asset('assets/css/style.css') }}" rel="stylesheet">
<style>
body {
font-family: 'Nunito', sans-serif;
background: #f8f9fa;
}
.register-container {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
}
.register-card {
width: 100%;
max-width: 500px;
border-radius: 10px;
box-shadow: 0 0 30px rgba(0, 0, 0, 0.05);
background-color: #ffffff;
}
.register-card .card-body {
padding: 2rem;
}
.register-card h5 {
font-size: 1.75rem;
}
.register-card p {
font-size: 1rem;
}
/* Responsive design for smaller screens */
@media (max-width: 768px) {
.register-card .card-body {
padding: 1.5rem;
}
.register-card h5 {
font-size: 1.5rem;
}
}
@media (max-width: 576px) {
.register-card {
max-width: 100%;
}
.register-card h5 {
font-size: 1.25rem;
}
.register-card p {
font-size: 0.875rem;
}
.register-card .card-body {
padding: 1rem;
}
}
</style>
</head>
<body>
<main>
<div class="container">
<section class="section register min-vh-100 d-flex flex-column align-items-center justify-content-center py-4">
<div class="row justify-content-center w-100">
<div class="col-12 col-md-8 col-lg-6 d-flex flex-column align-items-center justify-content-center">
<div class="card mb-3 register-card">
<div class="card-body">
<div class="pt-4 pb-2">
<h5 class="card-title text-center pb-0 fs-4">Create an Account</h5>
<p class="text-center small">Enter your personal details to create an account</p>
</div>
<form class="row g-3 needs-validation" action="{{ route('register.post') }}" method="POST" novalidate>
@csrf
<div class="col-12">
<label for="yourName" class="form-label">Your Name</label>
<input type="text" name="name" class="form-control" id="yourName" required>
<div class="invalid-feedback">Please, enter your name!</div>
</div>
<div class="col-12">
<label for="yourEmail" class="form-label">Your Email</label>
<input type="email" name="email" class="form-control" id="yourEmail" required>
<div class="invalid-feedback">Please enter a valid Email address!</div>
</div>
<div class="col-12">
<label for="phoneNumber" class="form-label">Phone Number</label>
<div class="input-group has-validation">
<input type="tel" name="no_telp" class="form-control" id="phoneNumber" required placeholder="08...">
<div class="invalid-feedback">Please enter a valid phone number.</div>
</div>
</div>
<div class="col-12">
<label for="yourPassword" class="form-label">Password</label>
<input type="password" name="password" class="form-control" id="yourPassword" required placeholder="input min 6 characters">
<div class="invalid-feedback">Please enter your password!</div>
</div>
<div class="col-12">
<label for="yourPasswordConfirmation" class="form-label">Confirm Password</label>
<input type="password" name="password_confirmation" class="form-control" id="yourPasswordConfirmation" required placeholder="Re-enter password">
<div class="invalid-feedback">Please confirm your password!</div>
</div>
<div class="col-12">
<button class="btn btn-primary w-100" type="submit">Create Account</button>
</div>
<div class="col-12">
<p class="small mb-0">Already have an account? <a href="{{ route('login') }}">Log in</a></p>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
</div>
</main>
<!-- Back to Top -->
<a href="#" class="back-to-top d-flex align-items-center justify-content-center">
<i class="bi bi-arrow-up-short"></i>
</a>
<!-- Vendor JS -->
<script src="{{ asset('assets/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
<script>
// Bootstrap validation script
(() => {
'use strict'
const forms = document.querySelectorAll('.needs-validation')
Array.from(forms).forEach(form => {
form.addEventListener('submit', event => {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
})()
</script>
</body>
</html>

View File

@ -1,171 +0,0 @@
@extends('layoutuser.app')
@section('content')
<div class="container-xxl py-5">
<div class="container">
<div class="row g-5">
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.1s">
<div class="d-flex flex-column">
<img class="img-fluid rounded w-75 align-self-end" src="{{ asset('assetss/img/about-1.jpg')}}" alt="">
<img class="img-fluid rounded w-50 bg-white pt-3 pe-3" src="{{ asset('assetss/img/about-2.jpg')}}" alt="" style="margin-top: -25%;">
</div>
</div>
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.5s">
<p class="d-inline-block border rounded-pill py-1 px-4">About Us</p>
<h1 class="mb-4">Why You Should Trust Us? Get Know About Us!</h1>
<p>Tempor erat elitr rebum at clita. Diam dolor diam ipsum sit. Aliqu diam amet diam et eos. Clita erat ipsum et lorem et sit, sed stet lorem sit clita duo justo magna dolore erat amet</p>
<p class="mb-4">Stet no et lorem dolor et diam, amet duo ut dolore vero eos. No stet est diam rebum amet diam ipsum. Clita clita labore, dolor duo nonumy clita sit at, sed sit sanctus dolor eos.</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Quality health care</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Only Qualified Doctors</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Medical Research Professionals</p>
<a class="btn btn-primary rounded-pill py-3 px-5 mt-3" href="">Read More</a>
</div>
</div>
</div>
</div>
<!-- About End -->
<!-- Feature Start -->
<div class="container-fluid bg-primary overflow-hidden my-5 px-lg-0">
<div class="container feature px-lg-0">
<div class="row g-0 mx-lg-0">
<div class="col-lg-6 feature-text py-5 wow fadeIn" data-wow-delay="0.1s">
<div class="p-lg-5 ps-lg-0">
<p class="d-inline-block border rounded-pill text-light py-1 px-4">Features</p>
<h1 class="text-white mb-4">Why Choose Us</h1>
<p class="text-white mb-4 pb-2">Tempor erat elitr rebum at clita. Diam dolor diam ipsum sit. Aliqu diam amet diam et eos. Clita erat ipsum et lorem et sit, sed stet lorem sit clita duo justo erat amet</p>
<div class="row g-4">
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-user-md text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Experience</p>
<h5 class="text-white mb-0">Doctors</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-check text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Quality</p>
<h5 class="text-white mb-0">Services</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-comment-medical text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Positive</p>
<h5 class="text-white mb-0">Consultation</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-headphones text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">24 Hours</p>
<h5 class="text-white mb-0">Support</h5>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6 pe-lg-0 wow fadeIn" data-wow-delay="0.5s" style="min-height: 400px;">
<div class="position-relative h-100">
<img class="position-absolute img-fluid w-100 h-100" src="{{ asset('assetss/img/feature.jpg')}}" style="object-fit: cover;" alt="">
</div>
</div>
</div>
</div>
</div>
<!-- Feature End -->
<!-- Team Start -->
<div class="container-xxl py-5">
<div class="container">
<div class="text-center mx-auto mb-5 wow fadeInUp" data-wow-delay="0.1s" style="max-width: 600px;">
<p class="d-inline-block border rounded-pill py-1 px-4">Doctors</p>
<h1>Our Experience Doctors</h1>
</div>
<div class="row g-4">
<div class="col-lg-3 col-md-6 wow fadeInUp" data-wow-delay="0.1s">
<div class="team-item position-relative rounded overflow-hidden">
<div class="overflow-hidden">
<img class="img-fluid" src="{{ asset('assetss/img/team-1.jpg')}}" alt="">
</div>
<div class="team-text bg-light text-center p-4">
<h5>Doctor Name</h5>
<p class="text-primary">Department</p>
<div class="team-social text-center">
<a class="btn btn-square" href=""><i class="fab fa-facebook-f"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-twitter"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-instagram"></i></a>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6 wow fadeInUp" data-wow-delay="0.3s">
<div class="team-item position-relative rounded overflow-hidden">
<div class="overflow-hidden">
<img class="img-fluid" src="{{ asset('assetss/img/team-2.jpg')}}" alt="">
</div>
<div class="team-text bg-light text-center p-4">
<h5>Doctor Name</h5>
<p class="text-primary">Department</p>
<div class="team-social text-center">
<a class="btn btn-square" href=""><i class="fab fa-facebook-f"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-twitter"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-instagram"></i></a>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6 wow fadeInUp" data-wow-delay="0.5s">
<div class="team-item position-relative rounded overflow-hidden">
<div class="overflow-hidden">
<img class="img-fluid" src="{{ asset('assetss/img/team-3.jpg')}}" alt="">
</div>
<div class="team-text bg-light text-center p-4">
<h5>Doctor Name</h5>
<p class="text-primary">Department</p>
<div class="team-social text-center">
<a class="btn btn-square" href=""><i class="fab fa-facebook-f"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-twitter"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-instagram"></i></a>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6 wow fadeInUp" data-wow-delay="0.7s">
<div class="team-item position-relative rounded overflow-hidden">
<div class="overflow-hidden">
<img class="img-fluid" src="{{ asset('assetss/img/team-4.jpg')}}" alt="">
</div>
<div class="team-text bg-light text-center p-4">
<h5>Doctor Name</h5>
<p class="text-primary">Department</p>
<div class="team-social text-center">
<a class="btn btn-square" href=""><i class="fab fa-facebook-f"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-twitter"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-instagram"></i></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -1,69 +0,0 @@
@extends('layoutuser.app')
@section('content')
<!-- Feature Start -->
<div class="container-fluid bg-primary overflow-hidden px-lg-0" style="margin: 6rem 0;">
<div class="container feature px-lg-0">
<div class="row g-0 mx-lg-0">
<div class="col-lg-6 feature-text py-5 wow fadeIn" data-wow-delay="0.1s">
<div class="p-lg-5 ps-lg-0">
<p class="d-inline-block border rounded-pill text-light py-1 px-4">Features</p>
<h1 class="text-white mb-4">Why Choose Us</h1>
<p class="text-white mb-4 pb-2">Tempor erat elitr rebum at clita. Diam dolor diam ipsum sit. Aliqu diam amet diam et eos. Clita erat ipsum et lorem et sit, sed stet lorem sit clita duo justo erat amet</p>
<div class="row g-4">
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-user-md text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Experience</p>
<h5 class="text-white mb-0">Doctors</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-check text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Quality</p>
<h5 class="text-white mb-0">Services</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-comment-medical text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Positive</p>
<h5 class="text-white mb-0">Consultation</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-headphones text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">24 Hours</p>
<h5 class="text-white mb-0">Support</h5>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6 pe-lg-0 wow fadeIn" data-wow-delay="0.5s" style="min-height: 400px;">
<div class="position-relative h-100">
<img class="position-absolute img-fluid w-100 h-100" src="{{ asset('assetss/img/feature.jpg')}}" style="object-fit: cover;" alt="">
</div>
</div>
</div>
</div>
</div>
<!-- Feature End -->
@endsection

View File

@ -1,189 +0,0 @@
@extends('layoutuser.app')
@section('content')
<div class="container-xxl py-5">
<div class="container">
<div class="text-center mx-auto mb-5 wow fadeInUp" data-wow-delay="0.1s" style="max-width: 600px;">
<p class="d-inline-block border rounded-pill py-1 px-4">Services</p>
<h1>Health Care Solutions</h1>
</div>
<div class="row g-4">
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.1s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-heartbeat text-primary fs-4"></i>
</div>
<h4 class="mb-3">Cardiology</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.3s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-x-ray text-primary fs-4"></i>
</div>
<h4 class="mb-3">Pulmonary</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.5s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-brain text-primary fs-4"></i>
</div>
<h4 class="mb-3">Neurology</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.1s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-wheelchair text-primary fs-4"></i>
</div>
<h4 class="mb-3">Orthopedics</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.3s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-tooth text-primary fs-4"></i>
</div>
<h4 class="mb-3">Dental Surgery</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.5s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-vials text-primary fs-4"></i>
</div>
<h4 class="mb-3">Laboratory</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
</div>
</div>
</div>
</div>
<!-- Service End -->
<!-- Appointment Start -->
<div class="container-xxl py-5">
<div class="container">
<div class="row g-5">
<div class="col-lg-6 wow fadeInUp" data-wow-delay="0.1s">
<p class="d-inline-block border rounded-pill py-1 px-4">Appointment</p>
<h1 class="mb-4">Make An Appointment To Visit Our Doctor</h1>
<p class="mb-4">Tempor erat elitr rebum at clita. Diam dolor diam ipsum sit. Aliqu diam amet diam et eos. Clita erat ipsum et lorem et sit, sed stet lorem sit clita duo justo magna dolore erat amet</p>
<div class="bg-light rounded d-flex align-items-center p-5 mb-4">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-white" style="width: 55px; height: 55px;">
<i class="fa fa-phone-alt text-primary"></i>
</div>
<div class="ms-4">
<p class="mb-2">Call Us Now</p>
<h5 class="mb-0">+012 345 6789</h5>
</div>
</div>
<div class="bg-light rounded d-flex align-items-center p-5">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-white" style="width: 55px; height: 55px;">
<i class="fa fa-envelope-open text-primary"></i>
</div>
<div class="ms-4">
<p class="mb-2">Mail Us Now</p>
<h5 class="mb-0">info@example.com</h5>
</div>
</div>
</div>
<div class="col-lg-6 wow fadeInUp" data-wow-delay="0.5s">
<div class="bg-light rounded h-100 d-flex align-items-center p-5">
<form>
<div class="row g-3">
<div class="col-12 col-sm-6">
<input type="text" class="form-control border-0" placeholder="Your Name" style="height: 55px;">
</div>
<div class="col-12 col-sm-6">
<input type="email" class="form-control border-0" placeholder="Your Email" style="height: 55px;">
</div>
<div class="col-12 col-sm-6">
<input type="text" class="form-control border-0" placeholder="Your Mobile" style="height: 55px;">
</div>
<div class="col-12 col-sm-6">
<select class="form-select border-0" style="height: 55px;">
<option selected>Choose Doctor</option>
<option value="1">Doctor 1</option>
<option value="2">Doctor 2</option>
<option value="3">Doctor 3</option>
</select>
</div>
<div class="col-12 col-sm-6">
<div class="date" id="date" data-target-input="nearest">
<input type="text"
class="form-control border-0 datetimepicker-input"
placeholder="Choose Date" data-target="#date" data-toggle="datetimepicker" style="height: 55px;">
</div>
</div>
<div class="col-12 col-sm-6">
<div class="time" id="time" data-target-input="nearest">
<input type="text"
class="form-control border-0 datetimepicker-input"
placeholder="Choose Date" data-target="#time" data-toggle="datetimepicker" style="height: 55px;">
</div>
</div>
<div class="col-12">
<textarea class="form-control border-0" rows="5" placeholder="Describe your problem"></textarea>
</div>
<div class="col-12">
<button class="btn btn-primary w-100 py-3" type="submit">Book Appointment</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Appointment End -->
<!-- Testimonial Start -->
<div class="container-xxl py-5">
<div class="container">
<div class="text-center mx-auto mb-5 wow fadeInUp" data-wow-delay="0.1s" style="max-width: 600px;">
<p class="d-inline-block border rounded-pill py-1 px-4">Testimonial</p>
<h1>What Say Our Patients!</h1>
</div>
<div class="owl-carousel testimonial-carousel wow fadeInUp" data-wow-delay="0.1s">
<div class="testimonial-item text-center">
<img class="img-fluid bg-light rounded-circle p-2 mx-auto mb-4" src="img/testimonial-1.jpg" style="width: 100px; height: 100px;">
<div class="testimonial-text rounded text-center p-4">
<p>Clita clita tempor justo dolor ipsum amet kasd amet duo justo duo duo labore sed sed. Magna ut diam sit et amet stet eos sed clita erat magna elitr erat sit sit erat at rebum justo sea clita.</p>
<h5 class="mb-1">Patient Name</h5>
<span class="fst-italic">Profession</span>
</div>
</div>
<div class="testimonial-item text-center">
<img class="img-fluid bg-light rounded-circle p-2 mx-auto mb-4" src="img/testimonial-2.jpg" style="width: 100px; height: 100px;">
<div class="testimonial-text rounded text-center p-4">
<p>Clita clita tempor justo dolor ipsum amet kasd amet duo justo duo duo labore sed sed. Magna ut diam sit et amet stet eos sed clita erat magna elitr erat sit sit erat at rebum justo sea clita.</p>
<h5 class="mb-1">Patient Name</h5>
<span class="fst-italic">Profession</span>
</div>
</div>
<div class="testimonial-item text-center">
<img class="img-fluid bg-light rounded-circle p-2 mx-auto mb-4" src="img/testimonial-3.jpg" style="width: 100px; height: 100px;">
<div class="testimonial-text rounded text-center p-4">
<p>Clita clita tempor justo dolor ipsum amet kasd amet duo justo duo duo labore sed sed. Magna ut diam sit et amet stet eos sed clita erat magna elitr erat sit sit erat at rebum justo sea clita.</p>
<h5 class="mb-1">Patient Name</h5>
<span class="fst-italic">Profession</span>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,171 @@
@extends('layoutuser.app')
@section('content')
<div class="container-xxl py-5">
<div class="container">
<div class="row g-5">
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.1s">
<div class="d-flex flex-column">
<img class="img-fluid rounded w-75 align-self-end" src="{{ asset('assetss/img/about-1.jpg')}}" alt="">
<img class="img-fluid rounded w-50 bg-white pt-3 pe-3" src="{{ asset('assetss/img/about-2.jpg')}}" alt="" style="margin-top: -25%;">
</div>
</div>
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.5s">
<p class="d-inline-block border rounded-pill py-1 px-4">About Us</p>
<h1 class="mb-4">Mengapa Anda Harus Mempercayai Sistem Kami</h1>
<p>HeartChoice ini merupakan sebuah Sistem Pendukung Keputusan untuk membantu penderita penyakit jantung dalam memilih menu makanan yang sesuai dengan kriteria kesehatan mereka. Dengan menggunakan metode AHP (Analytic Hierarchy Process), kami memberikan rekomendasi yang tepat berdasarkan berbagai kriteria gizi yang penting.</p>
<p class="mb-4">Aplikasi ini menggunakan pendekatan berbasis web yang mudah diakses oleh siapa saja, memberikan pemahaman yang jelas mengenai perbandingan kriteria seperti lemak, natrium, energi, dan karbohidrat dalam menu makanan. Dengan sistem ini, penderita penyakit jantung dapat membuat keputusan yang lebih sehat dan aman dalam memilih makanan mereka.</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Mempermudah Pemilihan Makanan yang Sehat</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Memanfaatkan Metode AHP untuk Keputusan yang Lebih Tepat</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Aplikasi yang Mudah Digunakan dan Aksesible</p>
{{-- <a class="btn btn-primary rounded-pill py-3 px-5 mt-3" href="">Read More</a> --}}
</div>
</div>
</div>
</div>
<!-- About End -->
<!-- Feature Start -->
<div class="container-fluid bg-primary overflow-hidden my-5 px-lg-0">
<div class="container feature px-lg-0">
<div class="row g-0 mx-lg-0">
<div class="col-lg-6 feature-text py-5 wow fadeIn" data-wow-delay="0.1s">
<div class="p-lg-5 ps-lg-0">
<p class="d-inline-block border rounded-pill text-light py-1 px-4">Tentang Sistem</p>
<h1 class="text-white mb-4">Latar Belakang dan Tujuan</h1>
<p class="text-white mb-4 pb-2">
Penyakit jantung merupakan salah satu penyebab kematian tertinggi di dunia. Salah satu faktor penting dalam pengelolaan penyakit ini adalah pengaturan pola makan yang tepat. Namun, banyak penderita kesulitan menentukan menu yang sesuai dengan kondisi kesehatannya.
<br><br>
Sistem ini dikembangkan sebagai solusi untuk membantu penderita penyakit jantung dalam memilih menu makanan sehat berdasarkan kriteria medis seperti kadar lemak, natrium, energi, dan karbohidrat. Dengan menggunakan metode Analytic Hierarchy Process (AHP), sistem ini dapat memberikan rekomendasi yang akurat dan sesuai kebutuhan.
</p>
<div class="row g-4">
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-balance-scale text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Metode AHP</p>
<h5 class="text-white mb-0">Pengambilan Keputusan Terstruktur</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-check text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Normalisasi Data</p>
<h5 class="text-white mb-0">Perbandingan yang Objektif</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-chart-line text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Antarmuka Sederhana</p>
<h5 class="text-white mb-0">Mudah Digunakan</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-cogs text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Perhitungan Otomatis</p>
<h5 class="text-white mb-0">Rekomendasi Berdasarkan Data</h5>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6 pe-lg-0 wow fadeIn" data-wow-delay="0.5s" style="min-height: 400px;">
<div class="position-relative h-100">
<img class="position-absolute img-fluid w-100 h-100" src="{{ asset('assetss/img/feature.jpg')}}" style="object-fit: cover;" alt="Feature Image">
</div>
</div>
</div>
</div>
</div>
<!-- Feature End -->
<div class="container-xxl py-5">
<div class="container">
<div class="row g-5">
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.1s">
<div class="d-flex flex-column">
<img class="img-fluid rounded w-75 align-self-end" src="{{ asset('assetss/img/about-1.jpg')}}" alt="">
<img class="img-fluid rounded w-50 bg-white pt-3 pe-3" src="{{ asset('assetss/img/about-2.jpg')}}" alt="" style="margin-top: -25%;">
</div>
</div>
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.5s">
<p class="d-inline-block border rounded-pill py-1 px-4">Tentang Metode</p>
<h1 class="mb-4">Mengapa Memilih Metode AHP?</h1>
<p>
Dalam pengambilan keputusan multi-kriteria seperti pemilihan menu makanan bagi penderita penyakit jantung, metode Analytic Hierarchy Process (AHP) menjadi pilihan utama karena kemampuannya dalam mengolah data kualitatif dan kuantitatif secara terstruktur.
AHP memungkinkan proses perbandingan berpasangan antar kriteria seperti lemak, natrium, energi, dan karbohidrat untuk menghasilkan bobot prioritas yang akurat.
</p>
<p class="mb-4">
Dibandingkan dengan metode lain seperti Simple Additive Weighting (SAW) atau Weighted Product (WP), AHP lebih unggul karena memperhatikan konsistensi logika dalam pengambilan keputusan dan memberikan fleksibilitas dalam membandingkan tingkat kepentingan antar kriteria.
</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Mampu menangani perbandingan kriteria secara logis dan bertingkat</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Menghasilkan bobot yang akurat berdasarkan perbandingan berpasangan</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Memastikan konsistensi dalam pengambilan keputusan</p>
{{-- <a class="btn btn-primary rounded-pill py-3 px-5 mt-3" href="">Read More</a> --}}
</div>
</div>
</div>
</div>
<!-- Kriteria yang Digunakan Start -->
<div class="container-xxl py-5">
<div class="container">
<div class="text-center mx-auto mb-5 wow fadeInUp" data-wow-delay="0.1s" style="max-width: 600px;">
<p class="d-inline-block border rounded-pill py-1 px-4">Kriteria</p>
<h1 class="mb-4">Kriteria Pemilihan Menu Makanan</h1>
<p class="mb-4">Aplikasi ini menggunakan empat kriteria utama yang penting bagi penderita penyakit jantung untuk menentukan makanan yang aman dan sehat.</p>
</div>
<div class="row g-4 justify-content-center">
<div class="col-lg-3 col-md-6 text-center wow fadeInUp" data-wow-delay="0.1s">
<div class="bg-light rounded p-4">
<i class="fa fa-tint fa-2x text-primary mb-3"></i>
<h5 class="mb-2">Lemak</h5>
<p class="mb-0">Kadar lemak yang tinggi dapat meningkatkan risiko komplikasi jantung, sehingga perlu dikontrol dengan cermat.</p>
</div>
</div>
<div class="col-lg-3 col-md-6 text-center wow fadeInUp" data-wow-delay="0.3s">
<div class="bg-light rounded p-4">
<i class="fa fa-utensils fa-2x text-primary mb-3"></i>
<h5 class="mb-2">Natrium</h5>
<p class="mb-0">Asupan natrium yang berlebihan dapat memicu tekanan darah tinggi, salah satu faktor risiko utama penyakit jantung.</p>
</div>
</div>
<div class="col-lg-3 col-md-6 text-center wow fadeInUp" data-wow-delay="0.5s">
<div class="bg-light rounded p-4">
<i class="fa fa-bolt fa-2x text-primary mb-3"></i>
<h5 class="mb-2">Energi</h5>
<p class="mb-0">Keseimbangan energi penting untuk menjaga berat badan ideal dan mencegah beban berlebih pada jantung.</p>
</div>
</div>
<div class="col-lg-3 col-md-6 text-center wow fadeInUp" data-wow-delay="0.7s">
<div class="bg-light rounded p-4">
<i class="fa fa-bread-slice fa-2x text-primary mb-3"></i>
<h5 class="mb-2">Karbohidrat</h5>
<p class="mb-0">Pemilihan jenis dan jumlah karbohidrat yang tepat dapat membantu mengatur kadar gula darah dan energi.</p>
</div>
</div>
</div>
</div>
</div>
<!-- Kriteria yang Digunakan End -->
@endsection

View File

@ -10,27 +10,27 @@
<div class="container-fluid header bg-primary p-0 mb-5">
<div class="row g-0 align-items-center flex-column-reverse flex-lg-row">
<div class="col-lg-6 p-5 wow fadeIn" data-wow-delay="0.1s">
<h1 class="display-4 text-white mb-5">Sistem Pendukung Keputusan</h1>
<h1 class="display-4 text-white mb-5">HeartChoice</h1>
<div class="row g-4">
<div class="col-sm-4">
<div class="border-start border-light ps-4">
<h2 class="text-white mb-1" data-toggle="counter-up">123</h2>
<h2 class="text-white mb-1" data-toggle="counter-up">{{ $totalData }}</h2>
<p class="text-light mb-0">Data Yang Diperoleh</p>
</div>
</div>
<div class="col-sm-4">
<div class="border-start border-light ps-4">
<h2 class="text-white mb-1" data-toggle="counter-up">4</h2>
<p class="text-light mb-0">Parameter</p>
<h2 class="text-white mb-1" data-toggle="counter-up">{{ $totalKriteria }}</h2>
<p class="text-light mb-0">Kriteria</p>
</div>
</div>
<div class="col-sm-4">
<div class="border-start border-light ps-4">
<h2 class="text-white mb-1" data-toggle="counter-up">9</h2>
<h2 class="text-white mb-1" data-toggle="counter-up">{{ $totalUser }}</h2>
<p class="text-light mb-0">Total User</p>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.5s">
<div class="owl-carousel header-carousel">
@ -68,13 +68,14 @@
</div>
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.5s">
<p class="d-inline-block border rounded-pill py-1 px-4">About Us</p>
<h1 class="mb-4">Why You Should Trust Us? Get Know About Us!</h1>
<p>Tempor erat elitr rebum at clita. Diam dolor diam ipsum sit. Aliqu diam amet diam et eos. Clita erat ipsum et lorem et sit, sed stet lorem sit clita duo justo magna dolore erat amet</p>
<p class="mb-4">Stet no et lorem dolor et diam, amet duo ut dolore vero eos. No stet est diam rebum amet diam ipsum. Clita clita labore, dolor duo nonumy clita sit at, sed sit sanctus dolor eos.</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Quality health care</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Only Qualified Doctors</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Medical Research Professionals</p>
<a class="btn btn-primary rounded-pill py-3 px-5 mt-3" href="">Read More</a>
<h1 class="mb-4">Mengapa Anda Harus Mempercayai Sistem Kami</h1>
<p>HeartChoice ini merupakan sebuah Sistem Pendukung Keputusan untuk membantu penderita penyakit jantung dalam memilih menu makanan yang sesuai dengan kriteria kesehatan mereka. Dengan menggunakan metode AHP (Analytic Hierarchy Process), kami memberikan rekomendasi yang tepat berdasarkan berbagai kriteria gizi yang penting.</p>
<p class="mb-4">Aplikasi ini menggunakan pendekatan berbasis web yang mudah diakses oleh siapa saja, memberikan pemahaman yang jelas mengenai perbandingan kriteria seperti lemak, natrium, energi, dan karbohidrat dalam menu makanan. Dengan sistem ini, penderita penyakit jantung dapat membuat keputusan yang lebih sehat dan aman dalam memilih makanan mereka.</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Mempermudah Pemilihan Makanan yang Sehat</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Memanfaatkan Metode AHP untuk Keputusan yang Lebih Tepat</p>
<p><i class="far fa-check-circle text-primary me-3"></i>Aplikasi yang Mudah Digunakan dan Aksesible</p>
<a class="btn btn-primary rounded-pill py-3 px-5 mt-3" href="{{ route('userabout') }}">Lihat Selengkapnya</a>
</div>
</div>
</div>
@ -82,258 +83,77 @@
<!-- About End -->
<!-- Service Start -->
<!-- fEATURES Start -->
<!-- Latar belakang biru lembut -->
<div class="container-xxl py-5" style="background: linear-gradient(to bottom, #e3f2fd, #bbdefb);">
<div class="container">
<div class="text-center mb-5">
<p class="d-inline-block border rounded-pill bg-primary text-light py-1 px-4">Fitur Unggulan</p>
<h1 class="text-dark mb-4">Kenali Fitur-fitur Utama Kami</h1>
<p class="text-dark mb-4 pb-2">
Sistem ini dirancang khusus untuk membantu penderita penyakit jantung memilih menu makanan terbaik dengan pendekatan ilmiah dan teknologi yang mudah digunakan.
</p>
</div>
<!-- Daftar Fitur Horizontal -->
<div class="row row-cols-2 row-cols-md-3 row-cols-lg-5 g-4 text-center mb-5">
@php
$features = [
['id' => 'feature1', 'icon' => 'fas fa-heartbeat', 'label' => 'Rekomendasi Sehat'],
['id' => 'feature2', 'icon' => 'fas fa-brain', 'label' => 'Pendekatan Ilmiah'],
['id' => 'feature3', 'icon' => 'fas fa-desktop', 'label' => 'Tampilan Responsif'],
['id' => 'feature4', 'icon' => 'fas fa-database', 'label' => 'Keamanan Data'],
['id' => 'feature5', 'icon' => 'fas fa-hands-helping', 'label' => 'Dukungan Penuh'],
];
@endphp
@foreach ($features as $feature)
<div class="col">
<!-- Tombol "Read More" tanpa garis -->
<a href="{{ url('/userfeatures/' . $feature['id']) }}" class="text-decoration-none">
<div class="p-3 rounded shadow-sm bg-white hover-shadow transition" style="cursor: pointer; border: none;">
<i class="{{ $feature['icon'] }} text-primary fs-4 mb-2"></i>
<h6 class="text-dark mb-0">{{ $feature['label'] }}</h6>
<p class="text-primary mb-0" style="font-size: 0.8rem;">Lihat Selengkapnya ></p>
</div>
</a>
</div>
@endforeach
</div>
</div>
</div>
<!-- Animasi Hover CSS -->
<style>
.hover-shadow:hover {
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
transform: translateY(-5px);
transition: all 0.3s ease;
}
.transition {
transition: all 0.3s ease;
}
</style>
<!-- fEATURES End -->
<div class="container-xxl py-5">
<div class="container">
<div class="text-center mx-auto mb-5 wow fadeInUp" data-wow-delay="0.1s" style="max-width: 600px;">
<p class="d-inline-block border rounded-pill py-1 px-4">Services</p>
<h1>Health Care Solutions</h1>
</div>
<div class="row g-4">
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.1s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-heartbeat text-primary fs-4"></i>
</div>
<h4 class="mb-3">Cardiology</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
<div class="row g-5">
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.1s">
<div class="d-flex flex-column">
<img class="img-fluid rounded w-75 align-self-end" src="{{ asset('assetss/img/about-1.jpg')}}" alt="">
<img class="img-fluid rounded w-50 bg-white pt-3 pe-3" src="{{ asset('assetss/img/about-2.jpg')}}" alt="" style="margin-top: -25%;">
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.3s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-x-ray text-primary fs-4"></i>
</div>
<h4 class="mb-3">Pulmonary</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.5s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-brain text-primary fs-4"></i>
</div>
<h4 class="mb-3">Neurology</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.1s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-wheelchair text-primary fs-4"></i>
</div>
<h4 class="mb-3">Orthopedics</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.3s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-tooth text-primary fs-4"></i>
</div>
<h4 class="mb-3">Dental Surgery</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.5s">
<div class="service-item bg-light rounded h-100 p-5">
<div class="d-inline-flex align-items-center justify-content-center bg-white rounded-circle mb-4" style="width: 65px; height: 65px;">
<i class="fa fa-vials text-primary fs-4"></i>
</div>
<h4 class="mb-3">Laboratory</h4>
<p class="mb-4">Erat ipsum justo amet duo et elitr dolor, est duo duo eos lorem sed diam stet diam sed stet.</p>
<a class="btn" href=""><i class="fa fa-plus text-primary me-3"></i>Read More</a>
</div>
<div class="col-lg-6 wow fadeIn" data-wow-delay="0.5s">
<p class="d-inline-block border rounded-pill py-1 px-4">Menu Makanan</p>
<p class="mb-4">Eksplorasi pilihan menu makanan yang sehat dan bergizi, lengkap dengan informasi tentang kandungan gizi yang dapat membantu Anda membuat pilihan terbaik untuk diet dan kesehatan.</p>
<a class="btn btn-primary rounded-pill py-3 px-5 mt-3" href="{{ route('userdata') }}">Lihat Selengkapnya</a>
</div>
</div>
</div>
</div>
<!-- Service End -->
<!-- Feature Start -->
<div class="container-fluid bg-primary overflow-hidden my-5 px-lg-0">
<div class="container feature px-lg-0">
<div class="row g-0 mx-lg-0">
<div class="col-lg-6 feature-text py-5 wow fadeIn" data-wow-delay="0.1s">
<div class="p-lg-5 ps-lg-0">
<p class="d-inline-block border rounded-pill text-light py-1 px-4">Features</p>
<h1 class="text-white mb-4">Why Choose Us</h1>
<p class="text-white mb-4 pb-2">Tempor erat elitr rebum at clita. Diam dolor diam ipsum sit. Aliqu diam amet diam et eos. Clita erat ipsum et lorem et sit, sed stet lorem sit clita duo justo erat amet</p>
<div class="row g-4">
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-user-md text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Experience</p>
<h5 class="text-white mb-0">Doctors</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-check text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Quality</p>
<h5 class="text-white mb-0">Services</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-comment-medical text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">Positive</p>
<h5 class="text-white mb-0">Consultation</h5>
</div>
</div>
</div>
<div class="col-6">
<div class="d-flex align-items-center">
<div class="d-flex flex-shrink-0 align-items-center justify-content-center rounded-circle bg-light" style="width: 55px; height: 55px;">
<i class="fa fa-headphones text-primary"></i>
</div>
<div class="ms-4">
<p class="text-white mb-2">24 Hours</p>
<h5 class="text-white mb-0">Support</h5>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6 pe-lg-0 wow fadeIn" data-wow-delay="0.5s" style="min-height: 400px;">
<div class="position-relative h-100">
<img class="position-absolute img-fluid w-100 h-100" src="{{ asset('assetss/img/feature.jpg')}}" style="object-fit: cover;" alt="">
</div>
</div>
</div>
</div>
</div>
<!-- Feature End -->
<!-- Team Start -->
<div class="container-xxl py-5">
<div class="container">
<div class="text-center mx-auto mb-5 wow fadeInUp" data-wow-delay="0.1s" style="max-width: 600px;">
<p class="d-inline-block border rounded-pill py-1 px-4">Doctors</p>
<h1>Our Experience Doctors</h1>
</div>
<div class="row g-4">
<div class="col-lg-3 col-md-6 wow fadeInUp" data-wow-delay="0.1s">
<div class="team-item position-relative rounded overflow-hidden">
<div class="overflow-hidden">
<img class="img-fluid" src="{{ asset('assetss/img/team-1.jpg')}}" alt="">
</div>
<div class="team-text bg-light text-center p-4">
<h5>Doctor Name</h5>
<p class="text-primary">Department</p>
<div class="team-social text-center">
<a class="btn btn-square" href=""><i class="fab fa-facebook-f"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-twitter"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-instagram"></i></a>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6 wow fadeInUp" data-wow-delay="0.3s">
<div class="team-item position-relative rounded overflow-hidden">
<div class="overflow-hidden">
<img class="img-fluid" src="{{ asset('assetss/img/team-2.jpg')}}" alt="">
</div>
<div class="team-text bg-light text-center p-4">
<h5>Doctor Name</h5>
<p class="text-primary">Department</p>
<div class="team-social text-center">
<a class="btn btn-square" href=""><i class="fab fa-facebook-f"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-twitter"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-instagram"></i></a>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6 wow fadeInUp" data-wow-delay="0.5s">
<div class="team-item position-relative rounded overflow-hidden">
<div class="overflow-hidden">
<img class="img-fluid" src="{{ asset('assetss/img/team-3.jpg')}}" alt="">
</div>
<div class="team-text bg-light text-center p-4">
<h5>Doctor Name</h5>
<p class="text-primary">Department</p>
<div class="team-social text-center">
<a class="btn btn-square" href=""><i class="fab fa-facebook-f"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-twitter"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-instagram"></i></a>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6 wow fadeInUp" data-wow-delay="0.7s">
<div class="team-item position-relative rounded overflow-hidden">
<div class="overflow-hidden">
<img class="img-fluid" src="{{ asset('assetss/img/team-4.jpg')}}" alt="">
</div>
<div class="team-text bg-light text-center p-4">
<h5>Doctor Name</h5>
<p class="text-primary">Department</p>
<div class="team-social text-center">
<a class="btn btn-square" href=""><i class="fab fa-facebook-f"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-twitter"></i></a>
<a class="btn btn-square" href=""><i class="fab fa-instagram"></i></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Team End -->
<!-- Testimonial Start -->
<div class="container-xxl py-5">
<div class="container">
<div class="text-center mx-auto mb-5 wow fadeInUp" data-wow-delay="0.1s" style="max-width: 600px;">
<p class="d-inline-block border rounded-pill py-1 px-4">Testimonial</p>
<h1>What Say Our Patients!</h1>
</div>
<div class="owl-carousel testimonial-carousel wow fadeInUp" data-wow-delay="0.1s">
<div class="testimonial-item text-center">
<img class="img-fluid bg-light rounded-circle p-2 mx-auto mb-4" src="{{ asset('assetss/img/testimonial-1.jpg')}}" style="width: 100px; height: 100px;">
<div class="testimonial-text rounded text-center p-4">
<p>Clita clita tempor justo dolor ipsum amet kasd amet duo justo duo duo labore sed sed. Magna ut diam sit et amet stet eos sed clita erat magna elitr erat sit sit erat at rebum justo sea clita.</p>
<h5 class="mb-1">Patient Name</h5>
<span class="fst-italic">Profession</span>
</div>
</div>
<div class="testimonial-item text-center">
<img class="img-fluid bg-light rounded-circle p-2 mx-auto mb-4" src="{{ asset('assetss/img/testimonial-2.jpg')}}" style="width: 100px; height: 100px;">
<div class="testimonial-text rounded text-center p-4">
<p>Clita clita tempor justo dolor ipsum amet kasd amet duo justo duo duo labore sed sed. Magna ut diam sit et amet stet eos sed clita erat magna elitr erat sit sit erat at rebum justo sea clita.</p>
<h5 class="mb-1">Patient Name</h5>
<span class="fst-italic">Profession</span>
</div>
</div>
<div class="testimonial-item text-center">
<img class="img-fluid bg-light rounded-circle p-2 mx-auto mb-4" src="{{ asset('assetss/img/testimonial-3.jpg')}}" style="width: 100px; height: 100px;">
<div class="testimonial-text rounded text-center p-4">
<p>Clita clita tempor justo dolor ipsum amet kasd amet duo justo duo duo labore sed sed. Magna ut diam sit et amet stet eos sed clita erat magna elitr erat sit sit erat at rebum justo sea clita.</p>
<h5 class="mb-1">Patient Name</h5>
<span class="fst-italic">Profession</span>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,88 @@
@extends('layoutuser.app')
@section('content')
<!-- Data Makanan Start -->
<div class="container-xxl py-5 bg-light">
<div class="container">
<!-- Judul dan Deskripsi -->
<div class="text-center mb-5">
<p class="d-inline-block border rounded-pill bg-primary text-light py-1 px-4">Data Aplikasi</p>
<h2 class="fw-bold text-dark">Daftar Menu Makanan Sehat</h2>
<p class="text-muted">
Informasi kandungan gizi makanan yang tersedia dalam sistem untuk membantu Anda memilih menu yang tepat bagi penderita penyakit jantung.
</p>
</div>
<!-- Catatan Penting -->
<div class="alert alert-info mt-4 rounded-4 shadow-sm" role="alert">
<i class="fas fa-info-circle me-2"></i>
<strong>Catatan:</strong> Komposisi gizi pangan dihitung per 100 gram, dengan Berat Dapat Dimakan (BDD) 100%.
</div>
<!-- Filter Section -->
<div class="row mb-4">
<div class="col-md-6">
<form method="GET" action="{{ route('userdata') }}">
<div class="input-group">
<label class="input-group-text bg-primary text-white" for="jenis_id">Jenis Makanan</label>
<select class="form-select text-dark bg-white" id="jenis_id" name="jenis_id">
<option value="">Semua</option>
@foreach ($jenisMakananList as $jenis)
<option value="{{ $jenis->id }}" {{ request('jenis_id') == $jenis->id ? 'selected' : '' }}>
{{ ucfirst($jenis->name) }}
</option>
@endforeach
</select>
</div>
</div>
<div class="col-md-6">
<div class="input-group">
<label class="input-group-text bg-primary text-white" for="kategori_id">Kategori</label>
<select class="form-select text-dark bg-white" id="kategori_id" name="kategori_id">
<option value="">Semua</option>
@foreach ($kategoriList as $kategori)
<option value="{{ $kategori->id }}" {{ request('kategori_id') == $kategori->id ? 'selected' : '' }}>
{{ ucfirst($kategori->kategori) }}
</option>
@endforeach
</select>
<button class="btn btn-outline-primary" type="submit">Terapkan</button>
</div>
</form>
</div>
</div>
<!-- Tabel Data -->
<div class="table-responsive shadow-sm rounded-4 overflow-hidden">
<table class="table table-hover table-bordered align-middle text-center bg-white">
<thead class="table-primary text-dark">
<tr>
<th scope="col">#</th>
<th scope="col">🍽️ Nama Makanan</th>
<th scope="col">🥑 Lemak (g)</th>
<th scope="col">🧂 Natrium (mg)</th>
<th scope="col">🔥 Energi (kkal)</th>
<th scope="col">🍞 Karbohidrat (g)</th>
</tr>
</thead>
<tbody>
@foreach ($makanans as $index => $makanan)
<tr>
<td class="fw-bold text-primary">{{ $index + 1 }}</td>
<td class="text-start fw-semibold">{{ $makanan->nama }}</td>
<td>{{ number_format($makanan->lemak, 1) }}</td>
<td>{{ number_format($makanan->natrium) }}</td>
<td>{{ number_format($makanan->energi) }}</td>
<td>{{ number_format($makanan->karbohidrat, 1) }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<!-- Data Makanan End -->
@endsection

View File

@ -0,0 +1,133 @@
@extends('layoutuser.app')
@section('content')
<!-- Latar belakang biru gradasi penuh -->
<div style="background: linear-gradient(to bottom, #e3f2fd, #bbdefb); min-height: 100vh; padding-top: 5rem; padding-bottom: 5rem;">
<div class="container">
<div class="text-center mb-5">
<p class="d-inline-block border rounded-pill bg-primary text-light py-1 px-4">Fitur Unggulan</p>
<h1 class="text-dark mb-4">Kenali Fitur-fitur Utama Kami</h1>
<p class="text-dark mb-4 pb-2">
Sistem ini dirancang khusus untuk membantu penderita penyakit jantung memilih menu makanan terbaik dengan pendekatan ilmiah dan teknologi yang mudah digunakan.
</p>
</div>
<!-- Daftar Fitur Horizontal -->
<div class="row row-cols-2 row-cols-md-3 row-cols-lg-5 g-4 text-center mb-5">
@php
$features = [
['id' => 'feature1', 'icon' => 'fas fa-heartbeat', 'label' => 'Rekomendasi Sehat'],
['id' => 'feature2', 'icon' => 'fas fa-brain', 'label' => 'Pendekatan Ilmiah'],
['id' => 'feature3', 'icon' => 'fas fa-desktop', 'label' => 'Tampilan Responsif'],
['id' => 'feature4', 'icon' => 'fas fa-database', 'label' => 'Keamanan Data'],
['id' => 'feature5', 'icon' => 'fas fa-hands-helping', 'label' => 'Dukungan Penuh'],
];
@endphp
@foreach ($features as $feature)
<div class="col">
<div class="p-3 rounded shadow-sm bg-white hover-shadow transition" data-bs-toggle="collapse" href="#{{ $feature['id'] }}" style="cursor: pointer;">
<i class="{{ $feature['icon'] }} text-primary fs-4 mb-2"></i>
<h6 class="text-dark mb-0">{{ $feature['label'] }}</h6>
</div>
</div>
@endforeach
</div>
<!-- Penjelasan Fitur -->
<div class="row justify-content-center">
<div class="col-lg-10">
<!-- Fitur 1 -->
<div class="collapse" id="feature1">
<div class="p-4 rounded shadow-sm mb-3" style="background-color: #e3f2fd;">
<button type="button" class="btn-close position-absolute top-0 end-0 m-3" data-bs-toggle="collapse" data-bs-target="#feature1" aria-label="Close"></button>
<p class="text-dark mb-0">
Sistem ini memberikan <strong>rekomendasi makanan khusus untuk penderita penyakit jantung</strong> berdasarkan nutrisi seperti <strong>lemak, natrium, energi, dan karbohidrat</strong>.
Data makanan bersumber dari <a href="https://www.panganku.org/id-ID/beranda" target="_blank"><strong>Panganku.org</strong></a>, sehingga akurat dan terpercaya.
</p>
</div>
</div>
<!-- Fitur 2 -->
<div class="collapse" id="feature2">
<div class="p-4 rounded shadow-sm mb-3" style="background-color: #bbdefb;">
<button type="button" class="btn-close position-absolute top-0 end-0 m-3" data-bs-toggle="collapse" data-bs-target="#feature2" aria-label="Close"></button>
<p class="text-dark mb-2">
Metode <strong>AHP (Analytical Hierarchy Process)</strong> digunakan untuk menilai dan membandingkan makanan berdasarkan berbagai kriteria gizi.
</p>
<p class="text-dark mb-2">
AHP memecah masalah menjadi hierarki dan memungkinkan perbandingan berpasangan secara sistematis. Ini menghasilkan bobot dan peringkat akhir yang objektif.
</p>
<ul class="text-dark mb-2">
<li>Memperhatikan konsistensi penilaian pengguna.</li>
<li>Cocok untuk keputusan berbasis preferensi manusia.</li>
<li>Dapat menangani data kuantitatif dan kualitatif.</li>
</ul>
<p class="text-dark">
🔗 Referensi lebih lanjut:
<ul class="text-dark">
<li><a href="https://www.1000minds.com/decision-making/analytic-hierarchy-process-ahp" target="_blank">1000Minds: Penjelasan AHP</a></li>
<li><a href="https://informatika.ciputra.ac.id/2023/03/analytical-hierarchy-process-ahp/" target="_blank">Universitas Ciputra: AHP dalam SPK</a></li>
</ul>
</p>
<p class="text-dark mb-0">
Anda tidak perlu memahami rumusnya sistem kami melakukan perhitungannya secara otomatis untuk membantu keputusan yang tepat dan sehat.
</p>
</div>
</div>
<!-- Fitur 3 -->
<div class="collapse" id="feature3">
<div class="p-4 rounded shadow-sm mb-3" style="background-color: #c8e6c9;">
<button type="button" class="btn-close position-absolute top-0 end-0 m-3" data-bs-toggle="collapse" data-bs-target="#feature3" aria-label="Close"></button>
<p class="text-dark mb-0">
Tampilan antarmuka dirancang sederhana dan responsif. Siapa pun dapat menggunakannya dengan mudah, termasuk pasien, keluarga, dan tenaga medis.
</p>
</div>
</div>
<!-- Fitur 4 -->
<div class="collapse" id="feature4">
<div class="p-4 rounded shadow-sm mb-3" style="background-color: #fff9c4;">
<button type="button" class="btn-close position-absolute top-0 end-0 m-3" data-bs-toggle="collapse" data-bs-target="#feature4" aria-label="Close"></button>
<p class="text-dark mb-0">
Data hasil rekomendasi disimpan otomatis, sehingga bisa diakses kembali dan digunakan dalam diskusi dengan ahli gizi untuk evaluasi lanjutan.
</p>
</div>
</div>
<!-- Fitur 5 -->
<div class="collapse" id="feature5">
<div class="p-4 rounded shadow-sm mb-3" style="background-color: #e1bee7;">
<button type="button" class="btn-close position-absolute top-0 end-0 m-3" data-bs-toggle="collapse" data-bs-target="#feature5" aria-label="Close"></button>
<p class="text-dark mb-0">
Fitur ini dikembangkan untuk mendampingi Anda menjalani gaya hidup lebih sehat. Kami percaya bahwa informasi yang baik menghasilkan keputusan yang baik pula.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Animasi Hover CSS -->
<style>
.hover-shadow:hover {
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
transform: translateY(-5px);
transition: all 0.3s ease;
}
.transition {
transition: all 0.3s ease;
}
body {
background: linear-gradient(to bottom, #e3f2fd, #bbdefb) !important;
}
</style>
@endsection

View File

@ -0,0 +1,83 @@
@extends('layoutuser.app')
@section('content')
<div class="container-xxl py-5">
<div class="container">
<div class="text-center mx-auto mb-5 wow fadeInUp" data-wow-delay="0.1s" style="max-width: 600px;">
<p class="d-inline-block border rounded-pill py-1 px-4 bg-primary text-white">Hasil Rekomendasi AHP</p>
<h1 class="mb-3">Rekomendasi Menu Makanan Terbaik untuk Anda</h1>
<p class="text-muted">Berikut adalah hasil akhir dari perhitungan berdasarkan metode AHP. Nilai akhir menunjukkan tingkat kesesuaian berdasarkan kriteria yang telah di pilih.</p>
</div>
<div class="table-responsive wow fadeInUp" data-wow-delay="0.2s">
<table class="table align-middle table-hover shadow-sm">
<thead class="table-dark text-center">
<tr>
<th>Peringkat</th>
<th>Nama Makanan</th>
<th>Nilai Akhir</th>
<th>Persentase</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@foreach ($rekomendasi->sortByDesc('nilai_akhir')->values() as $index => $rekom)
<tr>
<td class="text-center">
<span class="badge bg-success fs-6">{{ $index + 1 }}</span>
</td>
<td class="fw-semibold">{{ $rekom->makanan->nama }}</td>
<td class="text-center">{{ number_format($rekom->nilai_akhir, 4) }}</td>
<td style="min-width: 150px;">
@php
$persentase = ($totalNilaiAkhir > 0) ? ($rekom->nilai_akhir / $totalNilaiAkhir) * 100 : 0;
@endphp
<div class="d-flex align-items-center">
<div class="progress flex-grow-1 me-2" style="height: 20px;">
<div class="progress-bar bg-info" role="progressbar"
style="width: {{ $persentase }}%;"
aria-valuenow="{{ $persentase }}" aria-valuemin="0" aria-valuemax="100">
</div>
</div>
<small class="fw-semibold text-dark" style="width: 50px;">{{ number_format($persentase, 2) }}%</small>
</div>
</td>
<td class="text-center">
<a class="btn btn-outline-primary btn-sm" data-bs-toggle="modal" data-bs-target="#detailModal{{ $index }}">
<i class="fa fa-info-circle me-1"></i> Detail
</a>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
@foreach ($rekomendasi as $index => $rekom)
<!-- Modal -->
<div class="modal fade" id="detailModal{{ $index }}" tabindex="-1" aria-labelledby="detailModalLabel{{ $index }}" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="detailModalLabel{{ $index }}">Detail Makanan: {{ $rekom->makanan->nama }}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Tutup"></button>
</div>
<div class="modal-body">
<ul class="list-group list-group-flush">
<li class="list-group-item"><strong>Lemak:</strong> {{ $rekom->makanan->lemak }} g</li>
<li class="list-group-item"><strong>Natrium:</strong> {{ $rekom->makanan->natrium }} mg</li>
<li class="list-group-item"><strong>Energi:</strong> {{ $rekom->makanan->energi }} kal</li>
<li class="list-group-item"><strong>Karbohidrat:</strong> {{ $rekom->makanan->karbohidrat }} g</li>
</ul>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Tutup</button>
</div>
</div>
</div>
</div>
@endforeach
@endsection

View File

@ -5,7 +5,12 @@
use App\Http\Controllers\AdminController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\MakananController;
use App\Http\Controllers\Auth\RegisterController;
use App\Http\Controllers\PerbandinganKriteriaController;
use App\Http\Controllers\ProsesController;
use App\Http\Controllers\AlternatifController;
use App\Http\Controllers\LandingPageController;
use App\Http\Controllers\RegisterController;
use App\Http\Controllers\RekomendasiController;
/*
|--------------------------------------------------------------------------
@ -24,77 +29,107 @@
Route::get('/admindash',[AdminController::class,'admindash'])->name('admindash');
Route::middleware(['cekrole:admin'])->group(function () {
Route::get('/admindash', [AdminController::class, 'admindash'])->name('admindash');
Route::get('/datauser', [AdminController::class, 'datauser'])->name('datauser');
Route::get('/edituser/{user}/edituser', [AdminController::class, 'edituser'])->name('edituser');
Route::put('/datauser/{user}', [AdminController::class, 'updateuser'])->name('updateuser');
Route::delete('/datauser/{user}', [AdminController::class, 'deleteuser'])->name('deleteuser');
Route::get('/tambahuser', [AdminController::class, 'tambahuser'])->name('tambahuser');
Route::post('/datauser/storeuser', [AdminController::class, 'storeuser'])->name('storeuser');
Route::get('/role', [AdminController::class, 'role'])->name('role');
Route::get('/editrole/{role}/editrole', [AdminController::class, 'editrole'])->name('editrole');
Route::put('/role/{role}', [AdminController::class, 'updaterole'])->name('updaterole');
Route::delete('/role/{role}', [AdminController::class, 'deleterole'])->name('deleterole');
Route::get('/tambahrole', [AdminController::class, 'tambahrole'])->name('tambahrole');
Route::post('/role/storerole', [AdminController::class, 'storerole'])->name('storerole');
});
// Routes untuk kategori, jenis makanan, dan makanan
Route::middleware(['cekrole:admin'])->group(function () {
Route::get('/kategori', [MakananController::class, 'kategori'])->name('kategori');
Route::get('/editkategori/{kategori}/editkategori', [MakananController::class, 'editkategori'])->name('editkategori');
Route::put('/kategori/{kategori}', [MakananController::class, 'updatekategori'])->name('updatekategori');
Route::delete('/kategori/{kategori}', [MakananController::class, 'deletekategori'])->name('deletekategori');
Route::get('/tambahkategori', [MakananController::class, 'tambahkategori'])->name('tambahkategori');
Route::post('/kategori/storekategori', [MakananController::class, 'storekategori'])->name('storekategori');
Route::get('/jenismakanan', [MakananController::class, 'jenismakanan'])->name('jenismakanan');
Route::get('/editjenismakanan/{jenis}/editjenismakanan', [MakananController::class, 'editjenismakanan'])->name('editjenismakanan');
Route::put('/jenismakanan/{jenis}', [MakananController::class, 'updatejenismakanan'])->name('updatejenismakanan');
Route::delete('/jenismakanan/{jenis}', [MakananController::class, 'deletejenismakanan'])->name('deletejenismakanan');
Route::get('/tambahjenismakanan', [MakananController::class, 'tambahjenismakanan'])->name('tambahjenismakanan');
Route::post('/jenismakanan/storejenismakanan', [MakananController::class, 'storejenismakanan'])->name('storejenismakanan');
Route::get('/makanan', [MakananController::class, 'makanan'])->name('makanan');
Route::get('/editmakanan/{makanan}/editmakanan', [MakananController::class, 'editmakanan'])->name('editmakanan');
Route::put('/makanan/{makanan}', [MakananController::class, 'updatemakanan'])->name('updatemakanan');
Route::delete('/makanan/{makanan}', [MakananController::class, 'deletemakanan'])->name('deletemakanan');
Route::get('/tambahmakanan', [MakananController::class, 'tambahmakanan'])->name('tambahmakanan');
Route::post('/makanan/storemakanan', [MakananController::class, 'storemakanan'])->name('makanan.storemakanan');
});
Route::middleware(['cekrole:admin'])->group(function () {
Route::get('/kriteria', [PerbandinganKriteriaController::class, 'kriteria'])->name('kriteria');
Route::get('/editkriteria/{kriteria}/editkriteria', [PerbandinganKriteriaController::class, 'editkriteria'])->name('editkriteria');
Route::put('/kriteria/{kriteria}', [PerbandinganKriteriaController::class, 'updatekriteria'])->name('updatekriteria');
Route::delete('/kriteria/{kriteria}', [PerbandinganKriteriaController::class, 'deletekriteria'])->name('deletekriteria');
Route::get('/tambahkriteria', [PerbandinganKriteriaController::class, 'tambahkriteria'])->name('tambahkriteria');
Route::post('/kriteria/storekriteria', [PerbandinganKriteriaController::class, 'storekriteria'])->name('storekriteria');
});
// Routes untuk proses
Route::middleware(['cekrole:admin'])->group(function () {
Route::get('/perbandingan', [ProsesController::class, 'showPerbandingan'])->name('perbandingan');
Route::post('/perbandingan/proses', [ProsesController::class, 'prosesSementara'])->name('sementara');
Route::post('/simpan-perbandingan', [ProsesController::class, 'simpanPerbandingan'])->name('simpan.perbandingan');
Route::get('/perbandingan/normalisasi', [ProsesController::class, 'hasilNormalisasi'])->name('hasil.normalisasi');
Route::get('perbandingan-alternatif', [ProsesController::class, 'perbandinganAlternatif'])->name('perbandingan.alternatif');
// Alternatif
Route::get('/alternatif/pilih', [AlternatifController::class, 'formPilihAlternatif'])->name('alternatif.pilih');
Route::post('/alternatif/pilih', [AlternatifController::class, 'pilihAlternatif'])->name('alternatif.pilih.simpan');
Route::get('/alternatif/perbandingan', [AlternatifController::class, 'tampilPerbandingan'])->name('alternatif.perbandingan');
Route::post('/alternatif/perbandingan', [AlternatifController::class, 'simpanPerbandingan'])->name('alternatif.simpan');
Route::get('/alternatif/normalisasi', [AlternatifController::class, 'tampilNormalisasi'])->name('alternatif.normalisasi');
Route::post('/alternatif/simpan-normalisasi', [AlternatifController::class, 'simpanNormalisasi'])->name('alternatif.simpanNormalisasi');
Route::get('/rekomendasi/proses', [RekomendasiController::class, 'hitungDanSimpan'])->name('rekomendasi.proses');
Route::get('/rekomendasi/hasil', [RekomendasiController::class, 'tampil'])->name('rekomendasi.hasil');
Route::post('/rekomendasi/kirim/{user}', [RekomendasiController::class, 'kirimKeUser'])->name('rekomendasi.kirim');
Route::delete('/rekomendasi/hapus', [RekomendasiController::class, 'hapusSemua'])->name('rekomendasi.hapusSemua');
Route::get('/datauser', [AdminController::class, 'datauser'])->name('datauser');
Route::get('/edituser/{user}/edituser', [AdminController::class, 'edituser'])->name('edituser');
Route::put('/datauser/{user}', [AdminController::class, 'updateuser'])->name('updateuser');
Route::delete('/datauser/{user}', [AdminController::class, 'deleteuser'])->name('deleteuser');
Route::get('/tambahuser', [AdminController::class, 'tambahuser'])->name('tambahuser');
Route::post('/datauser/storeuser', [AdminController::class, 'storeuser'])->name('storeuser');
});
// User Routes (Hanya bisa diakses oleh User)
Route::middleware(['cekrole:user'])->group(function () {
Route::get('/userdash', [UserController::class, 'userdash'])->name('userdash');
Route::get('/userabout', [UserController::class, 'userabout'])->name('userabout');
Route::get('/userresult', [UserController::class, 'userresult'])->name('userresult');
Route::get('/userfeature', [UserController::class, 'userfeature'])->name('userfeature');
Route::get('/userdata', [UserController::class, 'userdata'])->name('userdata');
Route::get('/userfeatures/{id}', [UserController::class, 'show'])->name('userfeatures.show');
Route::get('/user/makanan', [UserController::class, 'userdata'])->name('user.makanan');
});
Route::get('/role',[AdminController::class,'role'])->name('role');
Route::get('/editrole/{role}/editrole', [AdminController::class, 'editrole'])->name('editrole');
Route::put('/role/{role}', [AdminController::class, 'updaterole'])->name('updaterole');
Route::delete('/role/{role}', [AdminController::class, 'deleterole'])->name('deleterole');
Route::get('/tambahrole', [AdminController::class, 'tambahrole'])->name('tambahrole');
Route::post('/role/storerole', [AdminController::class, 'storerole'])->name('storerole');
// Landing Page Routes
Route::get('/', [LandingPageController::class, 'lp'])->name('lp');
// Auth Routes
Route::get('/login', [LoginController::class, 'login'])->name('login');
Route::post('/login', [LoginController::class, 'loginPost'])->name('login.post');
Route::post('/logout', [LoginController::class, 'logout'])->name('logout');
Route::get('/kategori', [MakananController::class, 'kategori'])->name('kategori');
Route::get('/editkategori/{kategori}/editkategori', [MakananController::class, 'editkategori'])->name('editkategori');
Route::put('/kategori/{kategori}', [MakananController::class, 'updatekategori'])->name('updatekategori');
Route::delete('/kategori/{kategori}', [MakananController::class, 'deletekategori'])->name('deletekategori');
Route::get('/tambahkategori', [MakananController::class, 'tambahkategori'])->name('tambahkategori');
Route::post('/kategori/storekategori', [MakananController::class, 'storekategori'])->name('storekategori');
Route::get('/makanan',[MakananController::class,'makanan'])->name('makanan');
Route::get('/editmakanan/{makanan}/editmakanan', [MakananController::class, 'editmakanan'])->name('editmakanan');
Route::put('/makanan/{makanan}', [MakananController::class, 'updatemakanan'])->name('updatemakanan');
Route::delete('/makanan/{makanan}', [MakananController::class, 'deletemakanan'])->name('deletemakanan');
Route::get('/tambahmakanan', [MakananController::class, 'tambahmakanan'])->name('tambahmakanan');
Route::post('/makanan/storemakanan', [MakananController::class, 'storemakanan'])->name('makanan.storemakanan');
Route::get('/kriteria',[AdminController::class,'kriteria'])->name('kriteria');
Route::get('/editkriteria/{kriteria}/editkriteria', [AdminController::class, 'editkriteria'])->name('editkriteria');
Route::put('/kriteria/{kriteria}', [AdminController::class, 'updatekriteria'])->name('updatekriteria');
Route::delete('/kriteria/{kriteria}', [AdminController::class, 'deletekriteria'])->name('deletekriteria');
Route::get('/tambahkriteria', [AdminController::class, 'tambahkriteria'])->name('tambahkriteria');
Route::post('/kriteria/storekriteria', [AdminController::class, 'storekriteria'])->name('storekriteria');
Route::get('/alternatif',[AdminController::class,'alternatif'])->name('alternatif');
Route::get('/editalternatif/{alternatif}/editalternatif', [AdminController::class, 'editalternatif'])->name('editalternatif');
Route::put('/alternatif/{alternatif}', [AdminController::class, 'updatealternatif'])->name('updatealternatif');
Route::delete('/alternatif/{alternatif}', [AdminController::class, 'deletealternatif'])->name('deletealternatif');
Route::get('/tambahalternatif', [AdminController::class, 'tambahalternatif'])->name('tambahalternatif');
Route::post('/alternatif/storealternatif', [AdminController::class, 'storealternatif'])->name('storealternatif');
Route::get('/',[UserController::class,'userdash'])->name('userdash');
Route::get('/about',[UserController::class,'about'])->name('about');
Route::get('/service',[UserController::class,'service'])->name('service');
Route::get('/feature',[UserController::class,'feature'])->name('feature');
Route::get('/login',[LoginController::class,'login'])->name('login');
Route::get('/register', [RegisterController::class, 'showForm'])->name('register');
Route::post('/register', [RegisterController::class, 'register'])->name('register.submit');
// Register Routes
Route::get('/register', [ RegisterController::class, 'register'])->name('register');
Route::post('/register', [RegisterController::class, 'registerPost'])->name('register.post');