refactor: change pattern from area to mvc

main-dlh
Yuri Dimas 2025-11-11 16:09:04 +07:00
parent 7ce08b6f6a
commit 9ff34f0b03
No known key found for this signature in database
GPG Key ID: 9FD7E44BC294C68C
46 changed files with 1026 additions and 381 deletions

View File

@ -1,3 +0,0 @@
@{
Layout = "/Areas/Shared/Layouts/App/_Layout.cshtml";
}

View File

@ -1,147 +0,0 @@
<label class="drawer-overlay" for="my-drawer-2" aria-label="close sidebar"></label>
<aside class="bg-base-100 min-h-screen border-e border-gray-200">
<!-- Navbar -->
<div class="navbar bg-profiling-500 sticky top-0 hidden items-center justify-center gap-2 border-b border-gray-200 bg-white px-4 py-2 font-bold lg:z-50 lg:flex">
<img src="/images/logo.png" alt="Logo" width="48" />
<span>BPS RW</span>
</div>
<ul class="menu menu-sidebar bg-base-100 text-base-content min-h-full w-64 space-y-2 p-4">
@{
var currentArea = ViewContext.RouteData.Values["area"] as string;
var controller = ViewContext.RouteData.Values["controller"] as string;
}
<!-- Sidebar content here -->
@if (currentArea == "Admin")
{
<li>
<a asp-area="Admin" asp-controller="Dashboard" asp-action="Index" class="@(controller == "Dashboard" ? "menu-active" : "")">
<span class="icon icon-fill">analytics</span>
Dashboard
</a>
</li>
<li>
<details @(new[] { "RumahMemilah", "DataSudinChecklistHarian" }.Contains(controller) ? "open" : "")>
<summary>DATA SUDIN</summary>
<ul>
<li>
<a asp-area="Admin" asp-controller="RumahMemilah" asp-action="Index" class="@(controller == "RumahMemilah" ? "menu-active" : "")">
<span class="icon icon-fill">house</span>
Rumah Memilah
</a>
</li>
<li>
<a asp-area="Admin" asp-controller="DataSudinChecklistHarian" asp-action="Index" class="@(controller == "DataSudinChecklistHarian" ? "menu-active" : "")">
<span class="icon icon-fill">playlist_add_check</span>
Checklist Harian
</a>
</li>
</ul>
</details>
</li>
<li>
<details @(new[] { "DataKecamatan", "DataKecamatanRumahMemilah", "DataKecamatanChecklistHarian" }.Contains(controller) ? "open" : "")>
<summary>DATA KECAMATAN</summary>
<ul>
<li>
<a asp-area="Admin" asp-controller="DataKecamatan" asp-action="Index" class="@(controller == "DataKecamatan" ? "menu-active" : "")">
<span class="icon icon-fill">list</span>
Data Kecamatan
</a>
</li>
<li>
<a asp-area="Admin" asp-controller="DataKecamatanRumahMemilah" asp-action="Index" class="@(controller == "DataKecamatanRumahMemilah" ? "menu-active" : "")">
<span class="icon icon-fill">house</span>
Rumah Memilah
</a>
</li>
<li>
<a asp-area="Admin" asp-controller="DataKecamatanChecklistHarian" asp-action="Index" class="@(controller == "DataKecamatanChecklistHarian" ? "menu-active" : "")">
<span class="icon icon-fill">playlist_add_check</span>
Checklist Harian
</a>
</li>
</ul>
</details>
</li>
<li>
<a asp-area="Admin" asp-controller="DataRw" asp-action="Index" class="@(controller == "DataRw" ? "menu-active" : "")">
<span class="icon icon-fill">list</span>
Data RW
</a>
</li>
<li>
<a asp-area="Admin" asp-controller="DataRt" asp-action="Index" class="@(controller == "DataRt" ? "menu-active" : "")">
<span class="icon icon-fill">list</span>
Data RT
</a>
</li>
<li>
<details @(new[] { "DataRumahRumah" }.Contains(controller) ? "open" : "")>
<summary>DATA RUMAH</summary>
<ul>
<li>
<a asp-area="Admin" asp-controller="DataRumahRumah" asp-action="Index" class="@(controller == "DataRumahRumah" ? "menu-active" : "")">
<span class="icon icon-fill">house</span>
Rumah
</a>
</li>
<li>
<a>
<span class="icon icon-fill">playlist_add_check</span>
Potensi Rumah
</a>
</li>
</ul>
</details>
</li>
<li>
<a>
<span class="icon icon-fill">list</span>
Data Bank Sampah
</a>
</li>
<li>
<a asp-area="Admin" asp-controller="DataPendampingRw" asp-action="Index" class="@(controller == "DataPendampingRw" ? "menu-active" : "")">
<span class="icon icon-fill">list</span>
Data Pendamping RW
</a>
</li>
<li>
<a>
<span class="icon icon-fill">list</span>
Data Berat Sampah
</a>
</li>
<li>
<details @(new[] { "LaporanRw", "DataVerifikasiChecklistHarian" }.Contains(controller) ? "open" : "")>
<summary>DATA VERIFIKASI</summary>
<ul>
<li>
<a asp-area="Admin" asp-controller="LaporanRw" asp-action="Index" class="@(controller == "LaporanRw" ? "menu-active" : "")">
<span class="icon icon-fill">house</span>
Laporan RW
</a>
</li>
<li>
<a asp-area="Admin" asp-controller="DataVerifikasiChecklistHarian" asp-action="Index" class="@(controller == "DataVerifikasiChecklistHarian" ? "menu-active" : "")">
<span class="icon icon-fill">playlist_add_check</span>
Checklist Harian
</a>
</li>
<li>
<a>
<span class="icon icon-fill">playlist_add_check</span>
Total Checklist Rumah
</a>
</li>
</ul>
</details>
</li>
}
else
{
//
}
</ul>
</aside>

View File

@ -1,2 +0,0 @@
@using BpsRwApp
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

View File

@ -0,0 +1,14 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace BpsRwApp.Controllers
{
public abstract class AppControllerBase : Controller
{
public override void OnActionExecuting(ActionExecutingContext context)
{
ViewData["Layout"] = "~/Views/Shared/Layouts/App/_Layout.cshtml";
base.OnActionExecuting(context);
}
}
}

View File

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
public class DashboardController : Controller
[Route("[controller]/[action]")]
public class DashboardController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -0,0 +1,128 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Controllers
{
[Route("[controller]/[action]")]
public class DataBankSampahController : AppControllerBase
{
public IActionResult Index()
{
return View();
}
[HttpGet]
public IActionResult Table()
{
var data = new[]
{
new {
nama = "Risky Adi Putra",
kelurahan = "Kebon Jeruk",
rt = "093",
rw = "003",
alamat = "Jl. Jenderal Sudirman No. 10, Kel. Setiabudi, Kec. Setiabudi, Jakarta Selatan 12910",
jumlah_nasabah = 581,
jumlah_potensi_nasabah = 581,
status = "<div class=\"badge badge-success badge-soft rounded-full\">Aktif</div>",
},
new {
nama = "Sulaiman",
kelurahan = "Kebon Jeruk",
rt = "093",
rw = "003",
alamat = "Jl. HR Rasuna Said No. 27, Kel. Guntur, Kec. Setiabudi, Jakarta Selatan 12980",
jumlah_nasabah = 889,
jumlah_potensi_nasabah = 889,
status = "<div class=\"badge badge-success badge-soft rounded-full\">Aktif</div>",
},
new {
nama = "Siti Nurhaliza",
kelurahan = "Kebon Jeruk",
rt = "093",
rw = "003",
alamat = "Jl. Prof. DR. Satrio No. 45, Kel. Kuningan Timur, Kec. Setiabudi, Jakarta Selatan 12950",
jumlah_nasabah = 673,
jumlah_potensi_nasabah = 673,
status = "<div class=\"badge badge-success badge-soft rounded-full\">Aktif</div>",
},
new {
nama = "Budi Santoso",
kelurahan = "Kebon Jeruk",
rt = "093",
rw = "003",
alamat = "Jl. Casablanca No. 12, Kel. Karet Semanggi, Kec. Setiabudi, Jakarta Selatan 12930",
jumlah_nasabah = 790,
jumlah_potensi_nasabah = 790,
status = "<div class=\"badge badge-success badge-soft rounded-full\">Aktif</div>",
},
new {
nama = "Dewi Lestari",
kelurahan = "Kebon Jeruk",
rt = "093",
rw = "003",
alamat = "Jl. Gatot Subroto Kav. 33, Kel. Karet Kuningan, Kec. Setiabudi, Jakarta Selatan 12940",
jumlah_nasabah = 750,
jumlah_potensi_nasabah = 750,
status = "<div class=\"badge badge-success badge-soft rounded-full\">Aktif</div>",
},
new {
nama = "Andi Prabowo",
kelurahan = "Kebon Jeruk",
rt = "093",
rw = "003",
alamat = "Jl. Galunggung No. 8, Kel. Pasar Manggis, Kec. Setiabudi, Jakarta Selatan 12970",
jumlah_nasabah = 780,
jumlah_potensi_nasabah = 780,
status = "<div class=\"badge badge-success badge-soft rounded-full\">Aktif</div>",
},
new {
nama = "Nina Sari",
kelurahan = "Kebon Jeruk",
rt = "093",
rw = "003",
alamat = "Jl. Mega Kuningan Barat No. 5, Kel. Karet, Kec. Setiabudi, Jakarta Selatan 12920",
jumlah_nasabah = 552,
jumlah_potensi_nasabah = 552,
status = "<div class=\"badge badge-success badge-soft rounded-full\">Aktif</div>",
},
new {
nama = "Hendra Wijaya",
kelurahan = "Kebon Jeruk",
rt = "093",
rw = "003",
alamat = "Jl. Denpasar No. 17, Kel. Guntur, Kec. Setiabudi, Jakarta Selatan 12980",
jumlah_nasabah = 582,
jumlah_potensi_nasabah = 582,
status = "<div class=\"badge badge-success badge-soft rounded-full\">Aktif</div>",
},
new {
nama = "Lina Marlina",
kelurahan = "Kebon Jeruk",
rt = "093",
rw = "003",
alamat = "Jl. Teknika No. 29, Kel. Setiabudi, Kec. Setiabudi, Jakarta Selatan 12910",
jumlah_nasabah = 935,
jumlah_potensi_nasabah = 935,
status = "<div class=\"badge badge-success badge-soft rounded-full\">Aktif</div>",
},
new {
nama = "Yudi Hartono",
kelurahan = "Kebon Jeruk",
rt = "093",
rw = "003",
alamat = "Jl. Kuningan Timur Raya No. 3, Kel. Kuningan Timur, Kec. Setiabudi, Jakarta Selatan 12950 Kec. Setiabudi, Jakarta Selatan 12950",
jumlah_nasabah = 593,
jumlah_potensi_nasabah = 593,
status = "<div class=\"badge badge-success badge-soft rounded-full\">Aktif</div>",
},
};
var response = new
{
data = data
};
return Json(response);
}
}
}

View File

@ -0,0 +1,138 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Controllers
{
[Route("[controller]/[action]")]
public class DataBeratSampahController : AppControllerBase
{
public IActionResult Index()
{
return View();
}
[HttpGet]
public IActionResult Table()
{
var data = new[]
{
new {
tanggal = "22 Nov 2025",
kelurahan = "Kebon Jeruk",
rw = "04",
berat_mudah_terurai = 104,
berat_material_daur_ulang = 104,
berat_b3 = 104,
timbulan = 104,
total_pengurangan_sampah = 104,
neraca_sampah = 104,
},
new {
tanggal = "15 Sep 2023",
kelurahan = "Pancoran",
rw = "01",
berat_mudah_terurai = 67,
berat_material_daur_ulang = 67,
berat_b3 = 67,
timbulan = 67,
total_pengurangan_sampah = 67,
neraca_sampah = 67,
},
new {
tanggal = "5 Mei 2022",
kelurahan = "Kembangan",
rw = "04",
berat_mudah_terurai = 110,
berat_material_daur_ulang = 110,
berat_b3 = 110,
timbulan = 110,
total_pengurangan_sampah = 110,
neraca_sampah = 110,
},
new {
tanggal = "12 Des 2023",
kelurahan = "Senen",
rw = "04",
berat_mudah_terurai = 88,
berat_material_daur_ulang = 88,
berat_b3 = 88,
timbulan = 88,
total_pengurangan_sampah = 88,
neraca_sampah = 88,
},
new {
tanggal = "18 Mar 2025",
kelurahan = "Kebayoran Baru",
rw = "04",
berat_mudah_terurai = 90,
berat_material_daur_ulang = 90,
berat_b3 = 90,
timbulan = 90,
total_pengurangan_sampah = 90,
neraca_sampah = 90,
},
new {
tanggal = "21 Apr 2026",
kelurahan = "Menteng",
rw = "04",
berat_mudah_terurai = 72,
berat_material_daur_ulang = 72,
berat_b3 = 72,
timbulan = 72,
total_pengurangan_sampah = 72,
neraca_sampah = 72,
},
new {
tanggal = "27 Jul 2024",
kelurahan = "Cilandak",
rw = "04",
berat_mudah_terurai = 81,
berat_material_daur_ulang = 81,
berat_b3 = 81,
timbulan = 81,
total_pengurangan_sampah = 81,
neraca_sampah = 81,
},
new {
tanggal = "10 Okt 2023",
kelurahan = "Cakung",
rw = "04",
berat_mudah_terurai = 65,
berat_material_daur_ulang = 65,
berat_b3 = 65,
timbulan = 65,
total_pengurangan_sampah = 65,
neraca_sampah = 65,
},
new {
tanggal = "03 Feb 2025",
kelurahan = "Grogol Petamburan",
rw = "09",
berat_mudah_terurai = 78,
berat_material_daur_ulang = 78,
berat_b3 = 78,
timbulan = 78,
total_pengurangan_sampah = 78,
neraca_sampah = 78,
},
new {
tanggal = "30 Jan 2026",
kelurahan = "Tanah Abang",
rw = "10",
berat_mudah_terurai = 95,
berat_material_daur_ulang = 95,
berat_b3 = 95,
timbulan = 95,
total_pengurangan_sampah = 95,
neraca_sampah = 95,
},
};
var response = new
{
data = data
};
return Json(response);
}
}
}

View File

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
public class DataKecamatanChecklistHarianController : Controller
[Route("[controller]/[action]")]
public class DataKecamatanChecklistHarianController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -1,10 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
[Route("Admin/[controller]/[action]")]
public class DataKecamatanController : Controller
[Route("[controller]/[action]")]
public class DataKecamatanController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
public class DataKecamatanRumahMemilahController : Controller
[Route("[controller]/[action]")]
public class DataKecamatanRumahMemilahController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
public class DataPendampingRwController : Controller
[Route("[controller]/[action]")]
public class DataPendampingRwController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
public class DataRtController : Controller
[Route("[controller]/[action]")]
public class DataRtController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -0,0 +1,148 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Controllers
{
[Route("[controller]/[action]")]
public class DataRumahPotensiRumahController : AppControllerBase
{
public IActionResult Index()
{
return View();
}
[HttpGet]
public IActionResult Table()
{
var data = new[]
{
new {
rt = "001",
rw = "001",
alamat = "Jl. Jenderal Sudirman No. 10, Kel. Setiabudi, Kec. Setiabudi, Jakarta Selatan 12910",
kota = "Setiabudi, Jakarta Selatan",
pemilik_rumah = "Rizky Adi",
id_bangunan = "BGN4455",
potensi = "Potensi",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-ghost btn-square btn-xs\"><span class=\"icon icon-fill text-sm\">more_horiz</span></a>" +
"</div>",
},
new {
rt = "002",
rw = "001",
alamat = "Jl. HR Rasuna Said No. 27, Kel. Guntur, Kec. Setiabudi, Jakarta Selatan 12980",
kota = "Setiabudi, Jakarta Selatan",
pemilik_rumah = "Dewi Lestari",
id_bangunan = "BGN9202",
potensi = "Potensi",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-ghost btn-square btn-xs\"><span class=\"icon icon-fill text-sm\">more_horiz</span></a>" +
"</div>",
},
new {
rt = "003",
rw = "001",
alamat = "Jl. Prof. DR. Satrio No. 45, Kel. Kuningan Timur, Kec. Setiabudi, Jakarta Selatan 12950",
kota = "Setiabudi, Jakarta Selatan",
pemilik_rumah = "Fajar Setiawan",
id_bangunan = "BGN5161",
potensi = "Potensi",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-ghost btn-square btn-xs\"><span class=\"icon icon-fill text-sm\">more_horiz</span></a>" +
"</div>",
},
new {
rt = "004",
rw = "001",
alamat = "Jl. Casablanca No. 12, Kel. Karet Semanggi, Kec. Setiabudi, Jakarta Selatan 12930",
kota = "Setiabudi, Jakarta Selatan",
pemilik_rumah = "Budi Santoso",
id_bangunan = "BGN7181",
potensi = "Potensi",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-ghost btn-square btn-xs\"><span class=\"icon icon-fill text-sm\">more_horiz</span></a>" +
"</div>",
},
new {
rt = "005",
rw = "001",
alamat = "Jl. Gatot Subroto Kav. 33, Kel. Karet Kuningan, Kec. Setiabudi, Jakarta Selatan 12940",
kota = "Setiabudi, Jakarta Selatan",
pemilik_rumah = "Siti Nurhaliza",
id_bangunan = "BGN2233",
potensi = "Tidak Potensi",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-ghost btn-square btn-xs\"><span class=\"icon icon-fill text-sm\">more_horiz</span></a>" +
"</div>",
},
new {
rt = "006",
rw = "001",
alamat = "Jl. Galunggung No. 8, Kel. Pasar Manggis, Kec. Setiabudi, Jakarta Selatan 12970",
kota = "Setiabudi, Jakarta Selatan",
pemilik_rumah = "Andi Prabowo",
id_bangunan = "BGN9101",
potensi = "Tidak Potensi",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-ghost btn-square btn-xs\"><span class=\"icon icon-fill text-sm\">more_horiz</span></a>" +
"</div>",
},
new {
rt = "007",
rw = "001",
alamat = "Jl. Mega Kuningan Barat No. 5, Kel. Karet, Kec. Setiabudi, Jakarta Selatan 12920",
kota = "Setiabudi, Jakarta Selatan",
pemilik_rumah = "Tina Sari",
id_bangunan = "BGN3141",
potensi = "Potensi",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-ghost btn-square btn-xs\"><span class=\"icon icon-fill text-sm\">more_horiz</span></a>" +
"</div>",
},
new {
rt = "008",
rw = "001",
alamat = "Jl. Denpasar No. 17, Kel. Guntur, Kec. Setiabudi, Jakarta Selatan 12980",
kota = "Setiabudi, Jakarta Selatan",
pemilik_rumah = "Hendra Wijaya",
id_bangunan = "BGN1121",
potensi = "Potensi",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-ghost btn-square btn-xs\"><span class=\"icon icon-fill text-sm\">more_horiz</span></a>" +
"</div>",
},
new {
rt = "009",
rw = "001",
alamat = "Jl. Teknika No. 29, Kel. Setiabudi, Kec. Setiabudi, Jakarta Selatan 12910",
kota = "Setiabudi, Jakarta Selatan",
pemilik_rumah = "Lina Anggraini",
id_bangunan = "BGN1234",
potensi = "Potensi",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-ghost btn-square btn-xs\"><span class=\"icon icon-fill text-sm\">more_horiz</span></a>" +
"</div>",
},
new {
rt = "010",
rw = "001",
alamat = "Jl. Kuningan Timur Raya No. 3, Kel. Kuningan Timur, Kec. Setiabudi, Jakarta Selatan 12950 Kec. Setiabudi, Jakarta Selatan 12950",
kota = "Setiabudi, Jakarta Selatan",
pemilik_rumah = "Nina Kurniawati",
id_bangunan = "BGN5678",
potensi = "Tidak Potensi",
aksi = "<div class=\"flex gap-2\">" +
"<a href=\"#\" class=\"btn btn-ghost btn-square btn-xs\"><span class=\"icon icon-fill text-sm\">more_horiz</span></a>" +
"</div>",
},
};
var response = new
{
data = data
};
return Json(response);
}
}
}

View File

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
public class DataRumahRumahController : Controller
[Route("[controller]/[action]")]
public class DataRumahRumahController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
public class DataRwController : Controller
[Route("/[controller]/[action]")]
public class DataRwController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -1,10 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
[Route("Admin/[controller]/[action]")]
public class DataSudinChecklistHarianController : Controller
[Route("[controller]/[action]")]
public class DataSudinChecklistHarianController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -1,10 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
[Route("Admin/[controller]/[action]")]
public class DataVerifikasiChecklistHarianController : Controller
[Route("[controller]/[action]")]
public class DataVerifikasiChecklistHarianController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
public class LaporanRwController : Controller
[Route("[controller]/[action]")]
public class LaporanRwController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
namespace BpsRwApp.Areas.Admin.Controllers
namespace BpsRwApp.Controllers
{
[Area("Admin")]
public class RumahMemilahController : Controller
[Route("[controller]/[action]")]
public class RumahMemilahController : AppControllerBase
{
public IActionResult Index()
{

View File

@ -115,10 +115,6 @@ app.UseAntiforgery();
app.UseAuthorization();
// Map routes with .NET 9 improvements
app.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");

View File

@ -1,12 +1,7 @@
{
"profiles": {
"BpsRwApp": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:51154;http://localhost:51155"
"commandName": "Project"
}
}
}

View File

@ -0,0 +1,77 @@
@{
ViewData["Title"] = "Data Bank Sampah";
}
<div class="breadcrumbs text-sm">
<ul>
<li><a>Data Bank Sampah</a></li>
</ul>
</div>
<!-- Header -->
<div class="grid grid-cols-1 gap-4 lg:grid-cols-2">
<div class="prose">
<h3 class="mb-2">Data Bank Sampah</h3>
</div>
<div class="justify-self-end lg:self-center">
<a class="btn rounded-full bg-white" href="#">
<span class="icon icon-fill me-2">filter_list</span>
Filter
</a>
</div>
</div>
<div class="h-8"></div>
<div class="card bg-white shadow-sm">
<div class="card-body p-0">
<table class="table-zebra table" id="example">
<thead>
<tr>
<th class="w-[5%]">No</th>
<th class="w-[10%]">Nama</th>
<th class="w-[15%]">Kelurahan</th>
<th class="w-[5%]">RT</th>
<th class="w-[5%]">RW</th>
<th class="w-[35%] whitespace-normal">Alamat</th>
<th class="w-[10%]">Jumlah Nasabah</th>
<th class="w-[10%]">Jumlah Potensi Nasabah</th>
<th class="w-[5%]">Status</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script src="https://cdn.datatables.net/2.3.4/js/dataTables.js"></script>
<script src="/plugins/datatables/dataTables.tailwindcss.js"></script>
<script type="text/javascript">
var table;
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '@Url.Action("Table", "DataBankSampah")',
scrollX: true,
autoWidth: true,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
},
columns: [
{ data: null, render: (d, t, r, m) => m.row + 1, orderable: false, searchable: false },
{ data: 'nama' },
{ data: 'kelurahan' },
{ data: 'rt' },
{ data: 'rw' },
{ data: 'alamat' },
{ data: 'jumlah_nasabah' },
{ data: 'jumlah_potensi_nasabah' },
{ data: 'status' },
],
"columnDefs": [
{ "className": "whitespace-normal", "targets": 5 }
]
});
});
</script>

View File

@ -0,0 +1,76 @@
@{
ViewData["Title"] = "Data Berat Sampah";
}
<div class="breadcrumbs text-sm">
<ul>
<li>Data Berat Sampah</li>
</ul>
</div>
<!-- Header -->
<div class="grid grid-cols-1 gap-4 lg:grid-cols-2">
<div class="prose">
<h3 class="mb-2">Data Berat Sampah</h3>
</div>
<div class="justify-self-end lg:self-center">
<button class="btn rounded-full bg-white" onclick="modal_filter.showModal()">
<span class="icon icon-fill me-2">filter_list</span>
Filter
</button>
</div>
</div>
<div class="h-8"></div>
<div class="card bg-white shadow-sm">
<div class="card-body p-0">
<table class="table-zebra table" id="example">
<thead>
<tr>
<th class="w-[5%]">No</th>
<th class="w-[10%]">Tanggal</th>
<th class="w-[20%]">Kelurahan</th>
<th class="w-[5%]">RW</th>
<th class="w-[10%]">Berat Mudah Terurai <br /> (Kg)</th>
<th class="w-[10%]">Berat Material Daur Ulang <br /> (Kg)</th>
<th class="w-[10%]">Berat B3 <br /> (Kg)</th>
<th class="w-[10%]">Timbulan <br /> (Kg)</th>
<th class="w-[10%]">Total Pengurangan Sampah <br /> (Kg)</th>
<th class="w-[10%]">Neraca Sampah <br /> (Kg)</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script src="https://cdn.datatables.net/2.3.4/js/dataTables.js"></script>
<script src="/plugins/datatables/dataTables.tailwindcss.js"></script>
<script type="text/javascript">
var table;
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '@Url.Action("Table", "DataBeratSampah")',
scrollX: true,
autoWidth: false,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
},
columns: [
{ data: null, render: (d, t, r, m) => m.row + 1, orderable: false, searchable: false },
{ data: 'tanggal' },
{ data: 'kelurahan' },
{ data: 'rw' },
{ data: 'berat_mudah_terurai' },
{ data: 'berat_material_daur_ulang' },
{ data: 'berat_b3' },
{ data: 'timbulan' },
{ data: 'total_pengurangan_sampah' },
{ data: 'neraca_sampah' },
]
});
});
</script>

View File

@ -1,5 +1,5 @@
@{
ViewData["Title"] = "Data Kecamatan";
ViewData["Title"] = "Data Kecamatan";
}
<div class="breadcrumbs text-sm">
@ -52,7 +52,7 @@
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Admin/DataKecamatan/Table',
ajax: '@Url.Action("Table", "DataKecamatan")',
scrollX: true,
autoWidth: false,
initComplete: function () {
@ -88,4 +88,4 @@
});
});
});
</script>
</script>

View File

@ -1,5 +1,5 @@
@{
ViewData["Title"] = "Checklist Harian";
ViewData["Title"] = "Checklist Harian";
}
<div class="breadcrumbs text-sm">
@ -43,13 +43,13 @@
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script src="https://cdn.datatables.net/2.3.4/js/dataTables.js"></script>
<script src="/plugins/datatables/dataTables.tailwindcss.js"></script>s
<script src="/plugins/datatables/dataTables.tailwindcss.js"></script>
<script type="text/javascript">
var table;
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Admin/DataKecamatanChecklistHarian/Table',
ajax: '@Url.Action("Table", "DataKecamatanChecklistHarian")',
scrollX: true,
autoWidth: false,
initComplete: function () {
@ -64,4 +64,4 @@
]
});
});
</script>
</script>

View File

@ -1,5 +1,5 @@
@{
ViewData["Title"] = "Rumah Memilah";
ViewData["Title"] = "Rumah Memilah";
}
<div class="breadcrumbs text-sm">
@ -51,7 +51,7 @@
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Admin/DataKecamatanRumahMemilah/Table',
ajax: '@Url.Action("Table", "DataKecamatanRumahMemilah")',
scrollX: true,
autoWidth: false,
initComplete: function () {
@ -68,4 +68,4 @@
]
});
});
</script>
</script>

View File

@ -96,7 +96,7 @@
$(document).ready(function () {
tableRapot = new DataTable('#tableRapot', {
ajax: '/Admin/DataPendampingRw/TableRapot',
ajax: '@Url.Action("TableRapot", "DataPendampingRw")',
scrollX: true,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
@ -113,7 +113,7 @@
});
tableChecklist = new DataTable('#tableChecklist', {
ajax: '/Admin/DataPendampingRw/TableChecklist',
ajax: '@Url.Action("TableChecklist", "DataPendampingRw")',
scrollX: true,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
@ -129,7 +129,7 @@
});
tableBeratSampah = new DataTable('#tableBeratSampah', {
ajax: '/Admin/DataPendampingRw/TableBeratSampah',
ajax: '@Url.Action("TableBeratSampah", "DataPendampingRw")',
scrollX: true,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
@ -145,4 +145,4 @@
]
});
});
</script>
</script>

View File

@ -1,5 +1,5 @@
@{
ViewData["Title"] = "Data RT";
ViewData["Title"] = "Data RT";
}
<div class="breadcrumbs text-sm">
@ -47,7 +47,7 @@
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Admin/DataRt/Table',
ajax: '@Url.Action("Table", "DataRt")',
scrollX: true,
autoWidth: false,
initComplete: function () {
@ -61,4 +61,4 @@
]
});
});
</script>
</script>

View File

@ -0,0 +1,78 @@
@{
ViewData["Title"] = "Potensi Rumah";
}
<div class="breadcrumbs text-sm">
<ul>
<li class="text-gray-500"><a>Data Rumah</a></li>
<li><a>Potensi Rumah</a></li>
</ul>
</div>
<!-- Header -->
<div class="grid grid-cols-1 gap-4 lg:grid-cols-2">
<div class="prose">
<h3 class="mb-2">Potensi Rumah</h3>
</div>
<div class="justify-self-end lg:self-center">
<a class="btn rounded-full bg-white" href="#">
<span class="icon icon-fill me-2">filter_list</span>
Filter
</a>
</div>
</div>
<div class="h-8"></div>
<div class="card bg-white shadow-sm">
<div class="card-body p-0">
<table class="table-zebra table" id="example">
<thead>
<tr>
<th class="w-[5%]">No</th>
<th class="w-[5%]">RT</th>
<th class="w-[5%]">RW</th>
<th class="w-[35%] whitespace-normal">Alamat</th>
<th class="w-[15%]">Kota</th>
<th class="w-[10%]">Pemilik Rumah</th>
<th class="w-[10%]">ID Bangunan</th>
<th class="w-[10%]">Potensi</th>
<th class="w-[5%]">Aksi</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script src="https://cdn.datatables.net/2.3.4/js/dataTables.js"></script>
<script src="/plugins/datatables/dataTables.tailwindcss.js"></script>
<script type="text/javascript">
var table;
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '@Url.Action("Table", "DataRumahPotensiRumah")',
scrollX: true,
autoWidth: true,
initComplete: function () {
$('div.dt-scroll-body thead').css('visibility', 'collapse');
},
columns: [
{ data: null, render: (d, t, r, m) => m.row + 1, orderable: false, searchable: false },
{ data: 'rt' },
{ data: 'rw' },
{ data: 'alamat' },
{ data: 'kota' },
{ data: 'pemilik_rumah' },
{ data: 'id_bangunan' },
{ data: 'potensi' },
{ data: 'aksi' },
],
"columnDefs": [
{ "className": "whitespace-normal", "targets": 3 }
]
});
});
</script>

View File

@ -1,5 +1,5 @@
@{
ViewData["Title"] = "Data Rumah";
ViewData["Title"] = "Data Rumah";
}
<div class="breadcrumbs text-sm">
@ -53,7 +53,7 @@
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Admin/DataRumahRumah/Table',
ajax: '@Url.Action("Table", "DataRumahRumah")',
scrollX: true,
autoWidth: true,
initComplete: function () {
@ -75,4 +75,4 @@
]
});
});
</script>
</script>

View File

@ -1,5 +1,5 @@
@{
ViewData["Title"] = "Data RW";
ViewData["Title"] = "Data RW";
}
<div class="breadcrumbs text-sm">
@ -50,7 +50,7 @@
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Admin/DataRw/Table',
ajax: '@Url.Action("Table", "DataRw")',
scrollX: true,
autoWidth: false,
initComplete: function () {
@ -67,4 +67,4 @@
]
});
});
</script>
</script>

View File

@ -1,5 +1,5 @@
@{
ViewData["Title"] = "Checklist Harian";
ViewData["Title"] = "Checklist Harian";
}
<div class="breadcrumbs text-sm">
@ -49,7 +49,7 @@
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Admin/DataSudinChecklistHarian/Table',
ajax: '@Url.Action("Table", "DataSudinChecklistHarian")',
scrollX: true,
autoWidth: false,
initComplete: function () {
@ -64,4 +64,4 @@
]
});
});
</script>
</script>

View File

@ -101,7 +101,7 @@
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Admin/DataVerifikasiChecklistHarian/Table',
ajax: '@Url.Action("Table", "DataVerifikasiChecklistHarian")',
scrollX: true,
autoWidth: false,
initComplete: function () {
@ -121,4 +121,4 @@
]
});
});
</script>
</script>

View File

@ -103,7 +103,7 @@
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Admin/LaporanRw/Table',
ajax: '@Url.Action("Table", "LaporanRw")',
scrollX: true,
autoWidth: false,
initComplete: function () {
@ -139,4 +139,4 @@
});
});
});
</script>
</script>

View File

@ -1,5 +1,5 @@
@{
ViewData["Title"] = "Rumah Memilah";
ViewData["Title"] = "Rumah Memilah";
}
<div class="breadcrumbs text-sm">
@ -52,7 +52,7 @@
$(document).ready(function () {
table = new DataTable('#example', {
ajax: '/Admin/RumahMemilah/Table',
ajax: '@Url.Action("Table", "RumahMemilah")',
scrollX: true,
autoWidth: false,
initComplete: function () {
@ -88,4 +88,4 @@
});
});
});
</script>
</script>

View File

@ -12,7 +12,7 @@
<meta name="author" content="Bank Sampah Digital">
<!-- Open Graph Meta Tags -->
<meta property="og:title" content="@ViewData[" Title"] - Bank Sampah Digital">
<meta property="og:title" content="@ViewData["Title"] - Bank Sampah Digital">
<meta property="og:description" content="Kelola sampah Anda dengan mudah dan dapatkan reward!">
<meta property="og:type" content="website">
@ -42,7 +42,7 @@
<input id="my-drawer-2" type="checkbox" class="drawer-toggle" />
<div class="drawer-content">
<!-- Navbar -->
<partial name="~/Areas/Shared/Layouts/App/_Navbar.cshtml" />
<partial name="~/Views/Shared/Layouts/App/_Navbar.cshtml" />
<!-- Page content here -->
<main class="container mx-auto p-6">
@RenderBody()
@ -50,7 +50,7 @@
</div>
<div class="drawer-side z-50 lg:z-0">
<!-- Sidebar -->
<partial name="~/Areas/Shared/Layouts/App/_Sidebar.cshtml" />
<partial name="~/Views/Shared/Layouts/App/_Sidebar.cshtml" />
</div>
</div>
@ -59,4 +59,4 @@
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
</html>

View File

@ -0,0 +1,147 @@
<label class="drawer-overlay" for="my-drawer-2" aria-label="close sidebar"></label>
<aside class="bg-base-100 min-h-screen border-e border-gray-200">
<div class="navbar bg-profiling-500 sticky top-0 hidden items-center justify-center gap-2 border-b border-gray-200 bg-white px-4 py-2 font-bold lg:z-50 lg:flex">
<img src="/images/logo.png" alt="Logo" width="48" />
<span>BPS RW</span>
</div>
<ul class="menu menu-sidebar bg-base-100 text-base-content min-h-full w-64 space-y-2 p-4">
@{
var controller = (ViewContext.RouteData.Values["controller"] as string) ?? string.Empty;
}
<li>
<a asp-controller="Dashboard" asp-action="Index" class="@(controller == "Dashboard" ? "menu-active" : "")">
<span class="icon icon-fill">analytics</span>
Dashboard
</a>
</li>
<li>
<details @(new[] { "RumahMemilah", "DataSudinChecklistHarian" }.Contains(controller) ? "open" : "")>
<summary>DATA SUDIN</summary>
<ul>
<li>
<a asp-controller="RumahMemilah" asp-action="Index" class="@(controller == "RumahMemilah" ? "menu-active" : "")">
<span class="icon icon-fill">house</span>
Rumah Memilah
</a>
</li>
<li>
<a asp-controller="DataSudinChecklistHarian" asp-action="Index" class="@(controller == "DataSudinChecklistHarian" ? "menu-active" : "")">
<span class="icon icon-fill">playlist_add_check</span>
Checklist Harian
</a>
</li>
</ul>
</details>
</li>
<li>
<details @(new[] { "DataKecamatan", "DataKecamatanRumahMemilah", "DataKecamatanChecklistHarian" }.Contains(controller) ? "open" : "")>
<summary>DATA KECAMATAN</summary>
<ul>
<li>
<a asp-controller="DataKecamatan" asp-action="Index" class="@(controller == "DataKecamatan" ? "menu-active" : "")">
<span class="icon icon-fill">list</span>
Data Kecamatan
</a>
</li>
<li>
<a asp-controller="DataKecamatanRumahMemilah" asp-action="Index" class="@(controller == "DataKecamatanRumahMemilah" ? "menu-active" : "")">
<span class="icon icon-fill">house</span>
Rumah Memilah
</a>
</li>
<li>
<a asp-controller="DataKecamatanChecklistHarian" asp-action="Index" class="@(controller == "DataKecamatanChecklistHarian" ? "menu-active" : "")">
<span class="icon icon-fill">playlist_add_check</span>
Checklist Harian
</a>
</li>
</ul>
</details>
</li>
<li>
<a asp-controller="DataRw" asp-action="Index" class="@(controller == "DataRw" ? "menu-active" : "")">
<span class="icon icon-fill">list</span>
Data RW
</a>
</li>
<li>
<a asp-controller="DataRt" asp-action="Index" class="@(controller == "DataRt" ? "menu-active" : "")">
<span class="icon icon-fill">list</span>
Data RT
</a>
</li>
<li>
<details @(new[] { "DataRumahRumah", "DataRumahPotensiRumah" }.Contains(controller) ? "open" : "")>
<summary>DATA RUMAH</summary>
<ul>
<li>
<a asp-controller="DataRumahRumah" asp-action="Index" class="@(controller == "DataRumahRumah" ? "menu-active" : "")">
<span class="icon icon-fill">house</span>
Rumah
</a>
</li>
<li>
<a asp-controller="DataRumahPotensiRumah" asp-action="Index" class="@(controller == "DataRumahPotensiRumah" ? "menu-active" : "")">
<span class="icon icon-fill">playlist_add_check</span>
Potensi Rumah
</a>
</li>
</ul>
</details>
</li>
<li>
<a asp-controller="DataBankSampah" asp-action="Index" class="@(controller == "DataBankSampah" ? "menu-active" : "")">
<span class="icon icon-fill">list</span>
Data Bank Sampah
</a>
</li>
<li>
<a asp-controller="DataPendampingRw" asp-action="Index" class="@(controller == "DataPendampingRw" ? "menu-active" : "")">
<span class="icon icon-fill">list</span>
Data Pendamping RW
</a>
</li>
<li>
<a asp-controller="DataBeratSampah" asp-action="Index" class="@(controller == "DataBeratSampah" ? "menu-active" : "")">
<span class="icon icon-fill">list</span>
Data Berat Sampah
</a>
</li>
<li>
<details @(new[] { "LaporanRw", "DataVerifikasiChecklistHarian" }.Contains(controller) ? "open" : "")>
<summary>DATA VERIFIKASI</summary>
<ul>
<li>
<a asp-controller="LaporanRw" asp-action="Index" class="@(controller == "LaporanRw" ? "menu-active" : "")">
<span class="icon icon-fill">house</span>
Laporan RW
</a>
</li>
<li>
<a asp-controller="DataVerifikasiChecklistHarian" asp-action="Index" class="@(controller == "DataVerifikasiChecklistHarian" ? "menu-active" : "")">
<span class="icon icon-fill">playlist_add_check</span>
Checklist Harian
</a>
</li>
<li>
<a>
<span class="icon icon-fill">playlist_add_check</span>
Total Checklist Rumah
</a>
</li>
</ul>
</details>
</li>
</ul>
</aside>

View File

@ -0,0 +1,47 @@
<footer class="w-full px-4 lg:px-28 py-20 relative bg-green-950 flex flex-col justify-start items-center gap-20 overflow-hidden">
<!-- Background overlay -->
<div class="w-full h-full left-0 top-0 absolute overflow-hidden">
<img src="/images/leaf.svg" class="w-full h-full absolute bg-green-950" alt="Leaf" />
</div>
<!-- Footer Content -->
<div class="w-full max-w-[1280px] relative z-10 flex flex-col justify-start items-start gap-20">
<div class="self-stretch flex flex-col lg:flex-row justify-start items-start gap-8">
<!-- Logo -->
<div class="flex-1 flex justify-start items-center gap-2 overflow-hidden">
<div class="w-16 h-16 relative">
<img class="w-16 h-16" src="/images/logo-white.png" alt="Logo" />
</div>
</div>
<!-- Navigation Menu -->
<div class="grid gap-8 grid-cols-4">
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-green-800/20 px-4 py-2 transition-colors">
<div class="text-white text-base font-semibold font-jakarta leading-normal">Beranda</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-green-800/20 px-4 py-2 transition-colors">
<div class="text-white text-base font-semibold font-jakarta leading-normal">Tentang</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-green-800/20 px-4 py-2 transition-colors">
<div class="text-white text-base font-semibold font-jakarta leading-normal">Regulasi</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-green-800/20 px-4 py-2 transition-colors">
<div class="text-white text-base font-semibold font-jakarta leading-normal">Edukasi</div>
</a>
</div>
<!-- Right space -->
<div class="flex-1 flex justify-end items-center gap-3"></div>
</div>
<!-- Footer Bottom -->
<div class="self-stretch flex flex-col justify-start items-center gap-8">
<div class="self-stretch h-px bg-green-950"></div>
<div class="flex justify-start items-start gap-6">
<div class="text-white text-sm font-normal leading-tight">
Copyright © @DateTime.Now.Year Dinas Lingkungan Hidup Provinsi DKI Jakarta.
</div>
</div>
</div>
</div>
</footer>

View File

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="id" data-theme="emerald">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Bank Sampah Digital</title>
<!-- Meta tags untuk SEO -->
<meta name="description" content="Aplikasi Bank Sampah Digital untuk mengelola sampah dan mendapatkan reward">
<meta name="keywords" content="bank sampah, recycle, environment, go green, sampah">
<meta name="author" content="Bank Sampah Digital">
<!-- Open Graph Meta Tags -->
<meta property="og:title" content="@ViewData["Title"] - Bank Sampah Digital">
<meta property="og:description" content="Kelola sampah Anda dengan mudah dan dapatkan reward!">
<meta property="og:type" content="website">
<!-- Google 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=Plus+Jakarta+Sans:ital,wght@0,200..800;1,200..800&display=swap" rel="stylesheet">
<!-- Phosphor Icons -->
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@@phosphor-icons/web@2.1.2/src/regular/style.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@@phosphor-icons/web@2.1.2/src/fill/style.css" />
<!-- CSS -->
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="~/favicon.ico">
</head>
<body class="min-h-screen bg-base-100">
<!-- Navigation Bar - White Background -->
<partial name="~/Views/Shared/Layouts/Landing/_Navbar.cshtml" />
<!-- Main Content -->
<main role="main">
@RenderBody()
</main>
<!-- Footer -->
<partial name="~/Views/Shared/Layouts/Landing/_Footer.cshtml" />
<!-- Scripts -->
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>

View File

@ -0,0 +1,46 @@
<header class="w-full h-20 px-4 lg:px-28 bg-white flex flex-col justify-center items-center shadow-sm">
<div class="self-stretch flex justify-center items-center gap-8">
<!-- Logo -->
<div class="flex-1 flex justify-start items-center gap-2">
<img class="w-10 h-10" src="/images/logo.png" alt="Logo" />
</div>
<!-- Navigation Menu - Desktop -->
<div class="hidden lg:flex justify-start items-center gap-8">
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-gray-100 px-4 py-2 transition-colors">
<div class="text-green-800 text-base font-semibold font-jakarta leading-normal">Beranda</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-gray-100 px-4 py-2 transition-colors">
<div class="text-slate-600 text-base font-semibold font-jakarta leading-normal">Tentang</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-gray-100 px-4 py-2 transition-colors">
<div class="text-slate-600 text-base font-semibold font-jakarta leading-normal">Regulasi</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-gray-100 px-4 py-2 transition-colors">
<div class="text-slate-600 text-base font-semibold font-jakarta leading-normal">Edukasi</div>
</a>
</div>
<!-- Login Button -->
<div class="flex flex-1 items-center justify-end gap-4">
<a asp-controller="Dashboard" asp-action="Index" class="btn btn-success rounded-full border-0 bg-bpsrw-500 shadow-none">
<span class="font-jakarta text-base leading-normal font-semibold text-white">Login</span>
</a>
</div>
<!-- Mobile Menu Button -->
<div class="dropdown dropdown-bottom dropdown-end lg:hidden">
<div tabindex="0" role="button" class="btn btn-ghost">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h8m-8 6h16" />
</svg>
</div>
<ul tabindex="0" class="menu menu-sm dropdown-content mt-3 z-[1] p-2 shadow bg-base-100 rounded-box w-52">
<li><a href="#">Beranda</a></li>
<li><a href="#">Tentang</a></li>
<li><a href="#">Regulasi</a></li>
<li><a href="#">Edukasi</a></li>
</ul>
</div>
</div>
</header>

View File

@ -1,140 +0,0 @@
<!DOCTYPE html>
<html lang="id" data-theme="emerald">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Bank Sampah Digital</title>
<!-- Meta tags untuk SEO -->
<meta name="description" content="Aplikasi Bank Sampah Digital untuk mengelola sampah dan mendapatkan reward">
<meta name="keywords" content="bank sampah, recycle, environment, go green, sampah">
<meta name="author" content="Bank Sampah Digital">
<!-- Open Graph Meta Tags -->
<meta property="og:title" content="@ViewData["Title"] - Bank Sampah Digital">
<meta property="og:description" content="Kelola sampah Anda dengan mudah dan dapatkan reward!">
<meta property="og:type" content="website">
<!-- Google 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=Plus+Jakarta+Sans:ital,wght@0,200..800;1,200..800&display=swap" rel="stylesheet">
<!-- Phosphor Icons -->
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@@phosphor-icons/web@2.1.2/src/regular/style.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@@phosphor-icons/web@2.1.2/src/fill/style.css" />
<!-- CSS -->
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="~/favicon.ico">
</head>
<body class="min-h-screen bg-base-100">
<!-- Navigation Bar - White Background -->
<header class="w-full h-20 px-4 lg:px-28 bg-white flex flex-col justify-center items-center shadow-sm">
<div class="self-stretch flex justify-center items-center gap-8">
<!-- Logo -->
<div class="flex-1 flex justify-start items-center gap-2">
<img class="w-10 h-10" src="/images/logo.png" alt="Logo" />
</div>
<!-- Navigation Menu - Desktop -->
<div class="hidden lg:flex justify-start items-center gap-8">
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-gray-100 px-4 py-2 transition-colors">
<div class="text-green-800 text-base font-semibold font-jakarta leading-normal">Beranda</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-gray-100 px-4 py-2 transition-colors">
<div class="text-slate-600 text-base font-semibold font-jakarta leading-normal">Tentang</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-gray-100 px-4 py-2 transition-colors">
<div class="text-slate-600 text-base font-semibold font-jakarta leading-normal">Regulasi</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-gray-100 px-4 py-2 transition-colors">
<div class="text-slate-600 text-base font-semibold font-jakarta leading-normal">Edukasi</div>
</a>
</div>
<!-- Login Button -->
<div class="flex flex-1 items-center justify-end gap-4">
<a asp-area="Admin" asp-action="Index" asp-controller="Dashboard" class="btn btn-success rounded-full border-0 bg-bpsrw-500 shadow-none">
<span class="font-jakarta text-base leading-normal font-semibold text-white">Login</span>
</a>
</div>
<!-- Mobile Menu Button -->
<div class="dropdown dropdown-bottom dropdown-end lg:hidden">
<div tabindex="0" role="button" class="btn btn-ghost">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h8m-8 6h16" />
</svg>
</div>
<ul tabindex="0" class="menu menu-sm dropdown-content mt-3 z-[1] p-2 shadow bg-base-100 rounded-box w-52">
<li><a href="#">Beranda</a></li>
<li><a href="#">Tentang</a></li>
<li><a href="#">Regulasi</a></li>
<li><a href="#">Edukasi</a></li>
</ul>
</div>
</div>
</header>
<!-- Main Content -->
<main role="main">
@RenderBody()
</main>
<!-- Footer -->
<footer class="w-full px-4 lg:px-28 py-20 relative bg-green-950 flex flex-col justify-start items-center gap-20 overflow-hidden">
<!-- Background overlay -->
<div class="w-full h-full left-0 top-0 absolute overflow-hidden">
<img src="/images/leaf.svg" class="w-full h-full absolute bg-green-950" alt="Leaf" />
</div>
<!-- Footer Content -->
<div class="w-full max-w-[1280px] relative z-10 flex flex-col justify-start items-start gap-20">
<div class="self-stretch flex flex-col lg:flex-row justify-start items-start gap-8">
<!-- Logo -->
<div class="flex-1 flex justify-start items-center gap-2 overflow-hidden">
<div class="w-16 h-16 relative">
<img class="w-16 h-16" src="/images/logo-white.png" alt="Logo" />
</div>
</div>
<!-- Navigation Menu -->
<div class="grid gap-8 grid-cols-4">
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-green-800/20 px-4 py-2 transition-colors">
<div class="text-white text-base font-semibold font-jakarta leading-normal">Beranda</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-green-800/20 px-4 py-2 transition-colors">
<div class="text-white text-base font-semibold font-jakarta leading-normal">Tentang</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-green-800/20 px-4 py-2 transition-colors">
<div class="text-white text-base font-semibold font-jakarta leading-normal">Regulasi</div>
</a>
<a href="#" class="rounded-full flex justify-center items-center gap-2 hover:bg-green-800/20 px-4 py-2 transition-colors">
<div class="text-white text-base font-semibold font-jakarta leading-normal">Edukasi</div>
</a>
</div>
<!-- Right space -->
<div class="flex-1 flex justify-end items-center gap-3"></div>
</div>
<!-- Footer Bottom -->
<div class="self-stretch flex flex-col justify-start items-center gap-8">
<div class="self-stretch h-px bg-green-950"></div>
<div class="flex justify-start items-start gap-6">
<div class="text-white text-sm font-normal leading-tight">
Copyright © @DateTime.Now.Year Dinas Lingkungan Hidup Provinsi DKI Jakarta.
</div>
</div>
</div>
</div>
</footer>
<!-- Scripts -->
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>

View File

@ -1,3 +1,4 @@
@using BpsRwApp
@using BpsRwApp.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@using System.Linq
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

View File

@ -1,3 +1,3 @@
@{
Layout = "_Layout";
}
Layout = ViewData["Layout"] as string ?? "~/Views/Shared/Layouts/Landing/_Layout.cshtml";
}