Update tampilan Dashboard

This commit is contained in:
daffarahman11 2025-04-12 17:18:36 +07:00
parent c11b7b207b
commit c404164666
7 changed files with 180 additions and 222 deletions

View File

@ -0,0 +1,25 @@
<?php
namespace App\Http\Controllers;
use App\Models\Curas;
use App\Models\Curanmor;
use App\Models\Kecamatan;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class dashboardController extends Controller
{
public function index()
{
$jumlahRawanCuras = Curas::where('klaster_id', '3')->count();
$jumlahTotalCuras = Curas::count();
$jumlahRawanCuranmor = Curanmor::where('klaster_id', '3')->count();
$jumlahTotalCuranmor = Curanmor::count();
$namaUser = Auth::user()->nama;
$prosentaseCuras = ($jumlahRawanCuras / $jumlahTotalCuras) * 100;
$prosentaseCuranmor = ($jumlahRawanCuranmor / $jumlahTotalCuranmor) * 100;
$totalKecamatan = Kecamatan::count();
return view('admin.dashboardAdmin', compact('jumlahRawanCuras', 'jumlahRawanCuranmor', 'namaUser', 'prosentaseCuras', 'prosentaseCuranmor', 'totalKecamatan'));
}
}

View File

@ -3,10 +3,42 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class loginController extends Controller class loginController extends Controller
{ {
public function index(){ public function index(){
return view('Admin.login'); return view('Admin.login');
} }
public function authenticate(Request $request){
$credentials = $request->validate([
'email' => 'required',
'password' => 'required',
]);
try{
if(Auth::attempt($credentials)){
$request->session()->regenerate();
return redirect()->intended('/dashboard');
}
return back()->with('loginError', 'Email atau password salah.');
}catch (\Exception $e){
return redirect('/login')->with('loginError', 'Terjadi kesalahan sistem: ' . $e->getMessage());
}
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/login');
}
} }

View File

@ -5,8 +5,8 @@
<div class="col-lg-4"> <div class="col-lg-4">
<div class="card card-transparent card-block card-stretch card-height border-none"> <div class="card card-transparent card-block card-stretch card-height border-none">
<div class="card-body p-0 mt-lg-2 mt-0"> <div class="card-body p-0 mt-lg-2 mt-0">
<h3 class="mb-3">Hi Graham, Good Morning</h3> <h3 class="mb-3">Hai {{ Auth::user()->nama }}</h3>
<p class="mb-0 mr-4">Your dashboard gives you views of key performance or business process.</p> <p class="mb-0 mr-4">Selamat Datang di Dashboard Admin Sistem Informasi Geografis (SIG) PROTECT</p>
</div> </div>
</div> </div>
</div> </div>
@ -20,12 +20,14 @@
<img src="../assets/images/product/1.png" class="img-fluid" alt="image"> <img src="../assets/images/product/1.png" class="img-fluid" alt="image">
</div> </div>
<div> <div>
<p class="mb-2">Total Sales</p> <p class="mb-2">
<h4>31.50</h4> <strong> Kecamatan Rawan Curas </strong>
</p>
<h4>{{ $jumlahRawanCuras }}</h4>
</div> </div>
</div> </div>
<div class="iq-progress-bar mt-2"> <div class="iq-progress-bar mt-2">
<span class="bg-info iq-progress progress-1" data-percent="85"> <span class="bg-info iq-progress progress-1" data-percent="{{ $prosentaseCuras }}">
</span> </span>
</div> </div>
</div> </div>
@ -39,12 +41,14 @@
<img src="../assets/images/product/2.png" class="img-fluid" alt="image"> <img src="../assets/images/product/2.png" class="img-fluid" alt="image">
</div> </div>
<div> <div>
<p class="mb-2">Total Cost</p> <p class="mb-2">
<h4>$ 4598</h4> <strong> Kecamatan Rawan Ranmor </strong>
</p>
<h4>{{ $jumlahRawanCuranmor }}</h4>
</div> </div>
</div> </div>
<div class="iq-progress-bar mt-2"> <div class="iq-progress-bar mt-2">
<span class="bg-danger iq-progress progress-1" data-percent="70"> <span class="bg-danger iq-progress progress-1" data-percent="{{ $prosentaseCuranmor }}">
</span> </span>
</div> </div>
</div> </div>
@ -58,12 +62,14 @@
<img src="../assets/images/product/3.png" class="img-fluid" alt="image"> <img src="../assets/images/product/3.png" class="img-fluid" alt="image">
</div> </div>
<div> <div>
<p class="mb-2">Product Sold</p> <p class="mb-2">
<h4>4589 M</h4> <strong>Kecamatan Kab Probolinggo</strong>
</p>
<h4>{{ $totalKecamatan }}</h4>
</div> </div>
</div> </div>
<div class="iq-progress-bar mt-2"> <div class="iq-progress-bar mt-2">
<span class="bg-success iq-progress progress-1" data-percent="75"> <span class="bg-success iq-progress progress-1" data-percent="100">
</span> </span>
</div> </div>
</div> </div>
@ -71,11 +77,11 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-6"> <div class="col-lg-12">
<div class="card card-block card-stretch card-height"> <div class="card card-block card-stretch card-height">
<div class="card-header d-flex justify-content-between"> <div class="card-header d-flex justify-content-between">
<div class="header-title"> <div class="header-title">
<h4 class="card-title">Overview</h4> <h4 class="card-title">Pemetaan Curas dan Curanmor Kab Probolinggo</h4>
</div> </div>
<div class="card-header-toolbar d-flex align-items-center"> <div class="card-header-toolbar d-flex align-items-center">
<div class="dropdown"> <div class="dropdown">
@ -85,41 +91,14 @@
</span> </span>
<div class="dropdown-menu dropdown-menu-right shadow-none" <div class="dropdown-menu dropdown-menu-right shadow-none"
aria-labelledby="dropdownMenuButton001"> aria-labelledby="dropdownMenuButton001">
<a class="dropdown-item" href="#">Year</a> <a class="dropdown-item" href="#">Curas</a>
<a class="dropdown-item" href="#">Month</a> <a class="dropdown-item" href="#">Curanmor</a>
<a class="dropdown-item" href="#">Week</a>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
<div id="layout1-chart1"></div> <div id="map" style="width: 100%; height: 500px;" ></div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="card card-block card-stretch card-height">
<div class="card-header d-flex align-items-center justify-content-between">
<div class="header-title">
<h4 class="card-title">Revenue Vs Cost</h4>
</div>
<div class="card-header-toolbar d-flex align-items-center">
<div class="dropdown">
<span class="dropdown-toggle dropdown-bg btn" id="dropdownMenuButton002"
data-toggle="dropdown">
This Month<i class="ri-arrow-down-s-line ml-1"></i>
</span>
<div class="dropdown-menu dropdown-menu-right shadow-none"
aria-labelledby="dropdownMenuButton002">
<a class="dropdown-item" href="#">Yearly</a>
<a class="dropdown-item" href="#">Monthly</a>
<a class="dropdown-item" href="#">Weekly</a>
</div>
</div>
</div>
</div>
<div class="card-body">
<div id="layout1-chart-2" style="min-height: 360px;"></div>
</div> </div>
</div> </div>
</div> </div>
@ -150,7 +129,7 @@
<div class="card card-block card-stretch card-height mb-0"> <div class="card card-block card-stretch card-height mb-0">
<div class="card-body"> <div class="card-body">
<div class="bg-warning-light rounded"> <div class="bg-warning-light rounded">
<img src="../assets/images/product/01.png" class="style-img img-fluid m-auto p-3" alt="image"> <img src="{{ asset('assets/images/product/01.png') }}" class="style-img img-fluid m-auto p-3" alt="image">
</div> </div>
<div class="style-text text-left mt-3"> <div class="style-text text-left mt-3">
<h5 class="mb-1">Organic Cream</h5> <h5 class="mb-1">Organic Cream</h5>
@ -355,6 +334,67 @@
</div> </div>
</div> </div>
</div> </div>
<!-- Page end --> <!-- Page end -->
</div> </div>
{{-- Script MAP --}}
<script>
let curasData = {};
fetch("{{ url('/api/map') }}")
.then(res => res.json())
.then(data => {
data.forEach(item => {
curasData[item.kecamatan] = item;
});
loadMap(); // setelah data siap, jalankan ini
});
function getColor(klasterWarna) {
return klasterWarna || '#cccccc'; // fallback
}
function styleFeature(feature) {
let namaKecamatan = feature.properties.WADMKC;
let curas = curasData[namaKecamatan];
return {
fillColor: curas ? getColor(curas.klaster) : '#cccccc',
weight: 1,
opacity: 1,
color: 'white',
fillOpacity: 0.7
};
}
function popUp(feature, layer) {
let namaKecamatan = feature.properties.WADMKC;
let curas = curasData[namaKecamatan];
let content = `<strong>${namaKecamatan}</strong><br/>`;
if (curas) {
content += `Jumlah Curas: ${curas.jumlah_curas}<br/>Klaster: ${curas.klaster}`;
} else {
content += `Data tidak tersedia`;
}
layer.bindPopup(content);
}
function loadMap() {
var map = L.map('map').setView([-7.843271790154591, 113.2990930356143], 10);
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
new L.GeoJSON.AJAX(["{{ asset('/assets/map/gisProbolinggo.geojson') }}"], {
style: styleFeature,
onEachFeature: popUp
}).addTo(map);
}
</script>
</x-layoutAdmin> </x-layoutAdmin>

View File

@ -2,25 +2,7 @@
<div class="content-page"> <div class="content-page">
<div id="map" style="width: 100%; height: 500px;" ></div> <div id="map" style="width: 100%; height: 500px;" ></div>
{{-- <script>
var map = L.map('map').setView([-7.843271790154591, 113.2990930356143], 10);
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
function popUp(f,l){
var out = [];
if (f.properties){
for(key in f.properties){
out.push(key+": "+f.properties[key]);
}
l.bindPopup(out.join("<br />"));
}
}
var jsonTest = new L.GeoJSON.AJAX(["{{ asset('/assets/map/gisProbolinggo.geojson') }}"],{onEachFeature:popUp}).addTo(map);
</script> --}}
<script> <script>
let curasData = {}; let curasData = {};

View File

@ -47,7 +47,7 @@ class="navbar-toggler"
<div class="collapse navbar-collapse" id="navbarSupportedContent"> <div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto"> <ul class="navbar-nav ml-auto">
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="index.html">Home</a> <a class="nav-link" href="/">Home</a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="privacy-policy.html">Privacy</a> <a class="nav-link" href="privacy-policy.html">Privacy</a>
@ -63,7 +63,15 @@ class="navbar-toggler"
<h6> <h6>
Selamat Datang Di <span class="main-color">PROTECT</span> Silakan Masuk Ke Akun Anda Selamat Datang Di <span class="main-color">PROTECT</span> Silakan Masuk Ke Akun Anda
</h6> </h6>
<form>
@if (session()->has('loginError'))
<div class="alert alert-danger alert-dismissible fade show" role="alert">
{{ session('loginError') }}
</div>
@endif
<form action="/login" method="POST">
@csrf
<div class="form-group"> <div class="form-group">
<label>Masukkan Email</label> <label>Masukkan Email</label>
<input <input
@ -73,6 +81,9 @@ class="navbar-toggler"
class="form-control" class="form-control"
placeholder="Email" placeholder="Email"
autocomplete="email" autocomplete="email"
autofocus
required @error('email') is-invalid
@enderror value="{{ old('email') }}"
/> />
</div> </div>
<div class="form-group"> <div class="form-group">
@ -80,9 +91,10 @@ class="form-control"
<input <input
id="password" id="password"
type="password" type="password"
name="" name="password"
class="form-control" class="form-control"
placeholder="Password" placeholder="Password"
required
/> />
</div> </div>

View File

@ -180,40 +180,7 @@
</button> </button>
<div class="collapse navbar-collapse" id="navbarSupportedContent"> <div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto navbar-list align-items-center"> <ul class="navbar-nav ml-auto navbar-list align-items-center">
<li class="nav-item nav-icon dropdown">
<a href="#" class="search-toggle dropdown-toggle btn border add-btn"
id="dropdownMenuButton02" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
<img src="{{ asset('assets/images/small/flag-01.png') }}" alt="img-flag"
class="img-fluid image-flag mr-2">En
</a>
<div class="iq-sub-dropdown dropdown-menu" aria-labelledby="dropdownMenuButton2">
<div class="card shadow-none m-0">
<div class="card-body p-3">
<a class="iq-sub-card" href="#"><img
src="{{ asset('assets/images/small/flag-02.png') }}" alt="img-flag"
class="img-fluid mr-2">French</a>
<a class="iq-sub-card" href="#"><img
src="{{ asset('assets/images/small/flag-03.png') }}" alt="img-flag"
class="img-fluid mr-2">Spanish</a>
<a class="iq-sub-card" href="#"><img
src="{{ asset('assets/images/small/flag-04.png') }}" alt="img-flag"
class="img-fluid mr-2">Italian</a>
<a class="iq-sub-card" href="#"><img
src="{{ asset('assets/images/small/flag-05.png') }}" alt="img-flag"
class="img-fluid mr-2">German</a>
<a class="iq-sub-card" href="#"><img
src="{{ asset('assets/images/small/flag-06.png') }}" alt="img-flag"
class="img-fluid mr-2">Japanese</a>
</div>
</div>
</div>
</li>
<li>
<a href="#" class="btn border add-btn shadow-none mx-2 d-none d-md-block"
data-toggle="modal" data-target="#new-order"><i class="las la-plus mr-2"></i>New
Order</a>
</li>
<li class="nav-item nav-icon search-content"> <li class="nav-item nav-icon search-content">
<a href="#" class="search-toggle rounded" id="dropdownSearch" data-toggle="dropdown" <a href="#" class="search-toggle rounded" id="dropdownSearch" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false"> aria-haspopup="true" aria-expanded="false">
@ -247,61 +214,21 @@ class="img-fluid mr-2">Japanese</a>
<div class="card-body p-0 "> <div class="card-body p-0 ">
<div class="cust-title p-3"> <div class="cust-title p-3">
<div class="d-flex align-items-center justify-content-between"> <div class="d-flex align-items-center justify-content-between">
<h5 class="mb-0">All Messages</h5> <h5 class="mb-0">Pesan Masuk</h5>
<a class="badge badge-primary badge-card" href="#">3</a> <a class="badge badge-primary badge-card" href="#"></a>
</div> </div>
</div> </div>
<div class="px-3 pt-0 pb-0 sub-card"> <div class="px-3 pt-0 pb-0 sub-card">
<a href="#" class="iq-sub-card">
<div class="media align-items-center cust-card py-3 border-bottom">
<div class="">
<img class="avatar-50 rounded-small"
src="{{ asset('assets/images/user/01.jpg') }}" alt="01">
</div>
<div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between">
<h6 class="mb-0">Emma Watson</h6>
<small class="text-dark"><b>12 : 47 pm</b></small>
</div>
<small class="mb-0">Lorem ipsum dolor sit amet</small>
</div>
</div>
</a>
<a href="#" class="iq-sub-card">
<div class="media align-items-center cust-card py-3 border-bottom">
<div class="">
<img class="avatar-50 rounded-small"
src="{{ asset('assets/images/user/02.jpg') }}" alt="02">
</div>
<div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between">
<h6 class="mb-0">Ashlynn Franci</h6>
<small class="text-dark"><b>11 : 30 pm</b></small>
</div>
<small class="mb-0">Lorem ipsum dolor sit amet</small>
</div>
</div>
</a>
<a href="#" class="iq-sub-card"> <a href="#" class="iq-sub-card">
<div class="media align-items-center cust-card py-3"> <div class="media align-items-center cust-card py-3">
<div class="">
<img class="avatar-50 rounded-small"
src="{{ asset('assets/images/user/03.jpg') }}" alt="03">
</div>
<div class="media-body ml-3"> <div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between"> <div class="d-flex align-items-center justify-content-between">
<h6 class="mb-0">Kianna Carder</h6> <h6 class="mb-0">Tidak Ada Pesan Masuk</h6>
<small class="text-dark"><b>11 : 21 pm</b></small>
</div> </div>
<small class="mb-0">Lorem ipsum dolor sit amet</small>
</div> </div>
</div> </div>
</a> </a>
</div> </div>
<a class="right-ic btn btn-primary btn-block position-relative p-2" href="#"
role="button">
View All
</a>
</div> </div>
</div> </div>
</div> </div>
@ -322,61 +249,22 @@ class="img-fluid mr-2">Japanese</a>
<div class="card-body p-0 "> <div class="card-body p-0 ">
<div class="cust-title p-3"> <div class="cust-title p-3">
<div class="d-flex align-items-center justify-content-between"> <div class="d-flex align-items-center justify-content-between">
<h5 class="mb-0">Notifications</h5> <h5 class="mb-0">Notifikasi</h5>
<a class="badge badge-primary badge-card" href="#">3</a> <a class="badge badge-primary badge-card" href="#"></a>
</div> </div>
</div> </div>
<div class="px-3 pt-0 pb-0 sub-card"> <div class="px-3 pt-0 pb-0 sub-card">
<a href="#" class="iq-sub-card">
<div class="media align-items-center cust-card py-3 border-bottom">
<div class="">
<img class="avatar-50 rounded-small"
src="{{ asset('assets/images/user/01.jpg') }}" alt="01">
</div>
<div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between">
<h6 class="mb-0">Emma Watson</h6>
<small class="text-dark"><b>12 : 47 pm</b></small>
</div>
<small class="mb-0">Lorem ipsum dolor sit amet</small>
</div>
</div>
</a>
<a href="#" class="iq-sub-card">
<div class="media align-items-center cust-card py-3 border-bottom">
<div class="">
<img class="avatar-50 rounded-small"
src="{{ asset('assets/images/user/02.jpg') }}" alt="02">
</div>
<div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between">
<h6 class="mb-0">Ashlynn Franci</h6>
<small class="text-dark"><b>11 : 30 pm</b></small>
</div>
<small class="mb-0">Lorem ipsum dolor sit amet</small>
</div>
</div>
</a>
<a href="#" class="iq-sub-card"> <a href="#" class="iq-sub-card">
<div class="media align-items-center cust-card py-3"> <div class="media align-items-center cust-card py-3">
<div class="">
<img class="avatar-50 rounded-small"
src="{{ asset('assets/images/user/03.jpg') }}" alt="03">
</div>
<div class="media-body ml-3"> <div class="media-body ml-3">
<div class="d-flex align-items-center justify-content-between"> <div class="d-flex align-items-center justify-content-between">
<h6 class="mb-0">Kianna Carder</h6> <h6 class="mb-0">Tidak Ada Notifikasi Terbaru</h6>
<small class="text-dark"><b>11 : 21 pm</b></small>
</div> </div>
<small class="mb-0">Lorem ipsum dolor sit amet</small>
</div> </div>
</div> </div>
</a> </a>
</div> </div>
<a class="right-ic btn btn-primary btn-block position-relative p-2" href="#"
role="button">
View All
</a>
</div> </div>
</div> </div>
</div> </div>
@ -396,11 +284,13 @@ class="rounded-top img-fluid mb-4">
class="rounded profile-img img-fluid avatar-70"> class="rounded profile-img img-fluid avatar-70">
</div> </div>
<div class="p-3"> <div class="p-3">
<h5 class="mb-1">JoanDuo@property.com</h5> <h5 class="mb-1">{{ Auth::user()->nama }}</h5>
<p class="mb-0">Since 10 march, 2020</p> <p class="mb-0">{{ Auth::user()->email }}</p>
<div class="d-flex align-items-center justify-content-center mt-3"> <div class="d-flex align-items-center justify-content-center mt-3">
<a href="../app/user-profile.html" class="btn border mr-2">Profile</a> <form action="/logout" method="POST">
<a href="auth-sign-in.html" class="btn border">Sign Out</a> @csrf
<button class="btn border" href="">Sign Out</button>
</form>
</div> </div>
</div> </div>
</div> </div>
@ -413,29 +303,6 @@ class="rounded profile-img img-fluid avatar-70">
</nav> </nav>
</div> </div>
</div> </div>
<div class="modal fade" id="new-order" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-body">
<div class="popup text-left">
<h4 class="mb-3">New Order</h4>
<div class="content create-workform bg-body">
<div class="pb-3">
<label class="mb-2">Email</label>
<input type="text" class="form-control" placeholder="Enter Name or Email">
</div>
<div class="col-lg-12 mt-4">
<div class="d-flex flex-wrap align-items-ceter justify-content-center">
<div class="btn btn-primary mr-4" data-dismiss="modal">Cancel</div>
<div class="btn btn-outline-primary" data-dismiss="modal">Create</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{{ $slot }} {{ $slot }}

View File

@ -6,6 +6,7 @@
use App\Http\Controllers\KmeansController; use App\Http\Controllers\KmeansController;
use App\Http\Controllers\KlasterController; use App\Http\Controllers\KlasterController;
use App\Http\Controllers\CuranmorController; use App\Http\Controllers\CuranmorController;
use App\Http\Controllers\dashboardController;
use App\Http\Controllers\KecamatanController; use App\Http\Controllers\KecamatanController;
use App\Http\Controllers\hasilIterasiController; use App\Http\Controllers\hasilIterasiController;
@ -13,9 +14,6 @@
return view('landing'); return view('landing');
}); });
Route::get('/dashboard', function () {
return view('admin.dashboardAdmin');
});
Route::get('/blank', function () { Route::get('/blank', function () {
return view('admin.dashboardBlank'); return view('admin.dashboardBlank');
@ -25,12 +23,14 @@
return view('admin.dashboardMapCuras'); return view('admin.dashboardMapCuras');
}); });
Route::get('/dashboard', [dashboardController::class, 'index'])->middleware('auth');
Route::resource('/dashboard/kecamatan', KecamatanController::class) ->parameters(['data-kecamatan' => 'kecamatan']); Route::get('/login', [loginController::class, 'index'])->name('login');
Route::resource('/dashboard/curas', CurasController::class); Route::post('/login', [loginController::class, 'authenticate']);
Route::resource('/dashboard/curanmor', CuranmorController::class) ->parameters(['data-curanmor' => 'curanmor']); Route::post('/logout', [loginController::class, 'logout']);
Route::resource('/dashboard/klaster', KlasterController::class) ->parameters(['data-klaster' => 'klaster']); Route::resource('/dashboard/kecamatan', KecamatanController::class) ->parameters(['data-kecamatan' => 'kecamatan'])->middleware('auth');
Route::get('/dashboard/iterasiCuras', [hasilIterasiController::class, 'iterasiCuras']); Route::resource('/dashboard/curas', CurasController::class)->middleware('auth');
Route::get('/login', [loginController::class, 'index']); Route::resource('/dashboard/curanmor', CuranmorController::class) ->parameters(['data-curanmor' => 'curanmor'])->middleware('auth');
Route::resource('/dashboard/klaster', KlasterController::class) ->parameters(['data-klaster' => 'klaster'])->middleware('auth');
Route::get('/dashboard/iterasiCuras', [hasilIterasiController::class, 'iterasiCuras'])->middleware('auth');
Route::get('/kmeans-curas', [KmeansController::class, 'KMeansCuras']); Route::get('/kmeans-curas', [KmeansController::class, 'KMeansCuras']);
Route::get('/kmeans-curanmor', [KmeansController::class, 'KMeansCuranmor']); Route::get('/kmeans-curanmor', [KmeansController::class, 'KMeansCuranmor']);