feat(assessment-form): create assessment form page

This commit is contained in:
arieeefajar 2025-02-03 20:38:16 +07:00
parent 9c88807fb2
commit 19328a7ff6
9 changed files with 249 additions and 31 deletions

View File

@ -0,0 +1,13 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AssesmentFormController extends Controller
{
public function index()
{
return view('assesment-form.index');
}
}

View File

@ -64,5 +64,7 @@ class Kernel extends HttpKernel
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'verifiedAcount' => \App\Http\Middleware\verifiedAcount::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
'officer' => \App\Http\Middleware\OfficerMiddleware::class
];
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (Auth::check() && Auth::user()->role == 'admin') {
return $next($request);
}
toast('Anda tidak memiliki akses', 'warning')->position('top')->autoclose(3000);
return redirect()->back();
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
class OfficerMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (Auth::check() && Auth::user()->role == 'user') {
return $next($request);
}
toast('Anda tidak memiliki akses', 'warning')->position('top')->autoclose(3000);
return redirect()->back();
}
}

View File

@ -0,0 +1,20 @@
document.addEventListener("DOMContentLoaded", function () {
const inputs = document.querySelectorAll(
"#pH-field, #ketinggian_tempat-field",
"#ketersediaan_air-field",
"#curah_hujan-field"
);
inputs.forEach((input) => {
input.addEventListener("input", function () {
this.value = this.value.replace(/[^0-9.]/g, "");
this.value = this.value.replace(/^(\.)/, "");
if ((this.value.match(/\./g) || []).length > 1) {
this.value = this.value.substring(
0,
this.value.lastIndexOf(".")
);
}
});
});
});

View File

@ -0,0 +1,115 @@
@extends('layouts.app')
@push('title', 'Form Penilaian')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
<div class="row">
<div class="col-12">
<div class="page-title-box d-sm-flex align-items-center justify-content-between">
<h4 class="mb-sm-0">Form Penilaian</h4>
<div class="page-title-right">
<ol class="breadcrumb m-0">
<li class="breadcrumb-item">
<a href="javascript: void(0);">Menu</a>
</li>
<li class="breadcrumb-item active">Form Penilaian</li>
</ol>
</div>
</div>
</div>
</div>
<!-- end page title -->
<div class="row">
<div class="col-xl-8 col-md-6">
<div class="card">
<div class="card-header">
<h4 class="card-title mb-0">Form Penilaian</h4>
</div>
<form action="" class="needs-validation" method="POST" novalidate id="add-form">
<div class="card-body">
<div class="mb-3">
<label for="" class="form-label">pH Tanah</label>
<div class="input-group">
<input type="text" class="form-control" name="pH" id="pH-field"
placeholder="Masukan nilai pH Tanah" aria-label="Masukan nilai pH Tanah"
required autofocus>
<span class="input-group-text" id="pH-addon">pH</span>
<div class="invalid-feedback">
Masukan nilai pH
</div>
</div>
</div>
<div class="mb-3">
<label for="" class="form-label">Ketinggian Tempat</label>
<div class="input-group">
<input type="text" class="form-control" name="ketinggian_tempat"
id="ketinggian_tempat-field" placeholder="Masukan nilai Ketinggian Tempat"
aria-label="Masukan nilai Ketinggian Tempat" required>
<span class="input-group-text" id="ketinggian_tempat-addon">m</span>
<div class="invalid-feedback">
Masukan nilai Ketinggian Tempat
</div>
</div>
</div>
<div class="mb-3">
<label for="" class="form-label">Ketersediaan Air</label>
<div class="input-group">
<input type="text" class="form-control" name="ketersediaan_air"
id="ketersediaan_air-field" placeholder="Masukan nilai Ketersediaan Air"
aria-label="Masukan nilai Ketersediaan Air" required>
<span class="input-group-text" id="ketersediaan_air-addon">%</span>
<div class="invalid-feedback">
Masukan nilai Ketersediaan Air
</div>
</div>
</div>
<div class="mb-3">
<label for="" class="form-label">Curah Hujan</label>
<div class="input-group">
<input type="text" class="form-control" name="curah_hujan" id="curah_hujan-field"
placeholder="Masukan nilai Curah Hujan" aria-label="Masukan nilai Curah Hujan"
required>
<span class="input-group-text" id="curah_hujan-addon">mm</span>
<div class="invalid-feedback">
Masukan nilai Curah Hujan
</div>
</div>
</div>
</div>
<div class="card-footer d-flex justify-content-end">
<button type="submit" class="btn btn-success">Simpan</button>
</div>
</form>
</div>
</div>
<div class="col-xl-4 col-md-6">
<div class="card">
<div class="card-header">
<h4 class="card-title mb-0">Hasil Penilaian</h4>
</div>
<form action="">
<div class="card-body"></div>
</form>
</div>
</div>
</div>
</div>
<!-- container-fluid -->
</div>
@push('other-js')
<!-- prismjs plugin -->
<script src="assets/libs/prismjs/prism.js"></script>
<script src="assets/libs/list.js/list.min.js"></script>
<script src="assets/libs/list.pagination.js/list.pagination.min.js"></script>
<!-- listjs init -->
<script src="assets/js/pages/form-validation.init.js"></script>
<script src="assets/js/pages/customJs/assesment-form/index.js"></script>
@endpush
@endsection

View File

@ -66,7 +66,7 @@
</div>
<!-- Theme Settings -->
<div class="offcanvas offcanvas-end border-0" tabindex="-1" id="theme-settings-offcanvas">
{{-- <div class="offcanvas offcanvas-end border-0" tabindex="-1" id="theme-settings-offcanvas">
<div class="d-flex align-items-center bg-primary bg-gradient p-3 offcanvas-header">
<h5 class="m-0 me-2 text-white">Theme Customizer</h5>
@ -590,7 +590,7 @@ class="form-check-input">
</div>
</div>
</div>
</div>
</div> --}}
@include('sweetalert::alert')
<!-- JAVASCRIPT -->

View File

@ -86,6 +86,13 @@ class="nav-link {{ request()->routeIs('master_data.aturan.*') ? 'active' : '' }}
data-key="t-dashboards">Dashboards</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link menu-link {{ request()->routeIs('assesment_form.index') ? 'active' : '' }}"
href="{{ route('assesment_form.index') }}">
<i data-feather="file-text" class="icon-dual"></i> <span
data-key="t-dashboards">Form Penilaian</span>
</a>
</li>
@endif <!-- end Dashboard Menu -->
{{-- <li class="menu-title"><i class="ri-more-fill"></i> <span data-key="t-pages">Pages</span>

View File

@ -1,5 +1,6 @@
<?php
use App\Http\Controllers\AssesmentFormController;
use App\Http\Controllers\Auth\AuthenticatedSessionController;
use App\Http\Controllers\Auth\PasswordResetLinkController;
use App\Http\Controllers\Auth\RegisteredUserController;
@ -10,6 +11,7 @@
use App\Http\Controllers\MasterData\RuleController;
use App\Http\Controllers\MasterData\UserController;
use Illuminate\Routing\RouteGroup;
use Illuminate\Routing\RouteUrlGenerator;
use Illuminate\Support\Facades\Route;
/*
@ -56,39 +58,46 @@
Route::middleware(['auth', 'verifiedAcount'])->group(function () {
Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])->name('auth.logout');
Route::controller(DashboardController::class)->name('dashboard.')->group(function () {
Route::get('/dashboard-admin', 'admin')->name('admin');
Route::get('/dashboard-petugas', 'petugas')->name('petugas');
Route::middleware('admin')->group(function () {
Route::get('/dashboard-admin', [DashboardController::class, 'admin'])->name('dashboard.admin');
Route::name('master_data.')->group(function () {
Route::prefix('data-pengguna')->controller(UserController::class)->name('pengguna.')->group(function () {
Route::get('/', 'index')->name('index');
Route::post('/', 'store')->name('store');
Route::put('/{id}', 'update')->name('update');
Route::delete('/{id}', 'destroy')->name('destroy');
});
Route::prefix('data-lahan')->controller(LandController::class)->name('lahan.')->group(function () {
Route::get('/', 'index')->name('index');
Route::post('/', 'store')->name('store');
Route::put('/{id}', 'update')->name('update');
Route::delete('/{id}', 'destroy')->name('destroy');
});
Route::prefix('data-indikator')->controller(IndicatorController::class)->name('indikator.')->group(function () {
Route::get('/', 'index')->name('index');
// Route::post('/', 'store')->name('store');
Route::put('/{id}', 'update')->name('update');
// Route::delete('/{id}', 'destroy')->name('destroy');
});
Route::prefix('data-aturan')->controller(RuleController::class)->name('aturan.')->group(function () {
Route::get('/', 'index')->name('index');
// Route::post('/', 'store')->name('store');
Route::put('/{id}', 'update')->name('update');
// Route::delete('/{id}', 'destroy')->name('destroy');
});
});
});
Route::name('master_data.')->group(function () {
Route::middleware('officer')->group(function () {
Route::get('/dashboard-petugas', [DashboardController::class, 'petugas'])->name('dashboard.petugas');
Route::prefix('data-pengguna')->controller(UserController::class)->name('pengguna.')->group(function () {
Route::prefix('form-penilaian')->controller(AssesmentFormController::class)->name('assesment_form.')->group(function () {
Route::get('/', 'index')->name('index');
Route::post('/', 'store')->name('store');
Route::put('/{id}', 'update')->name('update');
Route::delete('/{id}', 'destroy')->name('destroy');
});
Route::prefix('data-lahan')->controller(LandController::class)->name('lahan.')->group(function () {
Route::get('/', 'index')->name('index');
Route::post('/', 'store')->name('store');
Route::put('/{id}', 'update')->name('update');
Route::delete('/{id}', 'destroy')->name('destroy');
});
Route::prefix('data-indikator')->controller(IndicatorController::class)->name('indikator.')->group(function () {
Route::get('/', 'index')->name('index');
// Route::post('/', 'store')->name('store');
Route::put('/{id}', 'update')->name('update');
// Route::delete('/{id}', 'destroy')->name('destroy');
});
Route::prefix('data-aturan')->controller(RuleController::class)->name('aturan.')->group(function () {
Route::get('/', 'index')->name('index');
// Route::post('/', 'store')->name('store');
Route::put('/{id}', 'update')->name('update');
// Route::delete('/{id}', 'destroy')->name('destroy');
});
});
});