edit profile

This commit is contained in:
Savema 2026-03-26 17:57:09 +07:00
parent 01bf741a46
commit 2a0f07848a
9 changed files with 205 additions and 62 deletions

View File

@ -0,0 +1,31 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules\Password;
class ProfileController extends Controller
{
public function edit()
{
// Ambil data user yang sedang login
$user = auth()->user();
return view('profile.edit', compact('user'));
}
public function updatePassword(Request $request)
{
$request->validate([
'current_password' => ['required', 'current_password'], // Cek password lama benar/tidak
'password' => ['required', 'confirmed', Password::defaults()], // Password baru
]);
$request->user()->update([
'password' => Hash::make($request->password),
]);
return back()->with('success', 'Password berhasil diperbarui!');
}
}

View File

@ -4,6 +4,7 @@
use App\Models\User; use App\Models\User;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class UsersController extends Controller class UsersController extends Controller
{ {
@ -41,7 +42,7 @@ public function store(Request $request)
'nama' => $request->nama, 'nama' => $request->nama,
'no_hp' => $request->no_hp, 'no_hp' => $request->no_hp,
'email' => $request->email, 'email' => $request->email,
'password' => bcrypt($request->password), 'password' => Hash::make('12345678'),
'role' => $request->role 'role' => $request->role
]); ]);

View File

@ -12,11 +12,11 @@ class DatabaseSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
// \App\Models\User::factory(10)->create(); \App\Models\User::create([
'name' => 'Administrator PosSehat',
// \App\Models\User::factory()->create([ 'email' => 'admin@gmail.com',
// 'name' => 'Test User', 'password' => \Illuminate\Support\Facades\Hash::make('admin123'), // Password khusus admin
// 'email' => 'test@example.com', 'role' => 'admin',
// ]); ]);
} }
} }

View File

@ -57,7 +57,7 @@
</div> </div>
</div> </div>
</form><!-- End General Form Elements --> </form>
</div> </div>
</div> </div>
</div> </div>

View File

@ -150,6 +150,12 @@
transform: translateY(-5px); transform: translateY(-5px);
transition: all 0.3s ease-in-out; transition: all 0.3s ease-in-out;
} }
.navbar {
z-index: 9999 !important; /* Memastikan navbar selalu di depan */
}
.dropdown-menu {
z-index: 10000 !important; /* Memastikan menu dropdown lebih depan lagi */
}
</style> </style>
</head> </head>
@ -172,6 +178,7 @@
{{-- JS --}} {{-- JS --}}
<script src="{{ asset('assets/js/main.js') }}"></script> <script src="{{ asset('assets/js/main.js') }}"></script>
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script> <script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
@stack('scripts') @stack('scripts')
</body> </body>

View File

@ -1,14 +1,46 @@
<nav class="navbar navbar-expand-lg navbar-light bg-white py-3 shadow-sm fixed-top"> <nav class="navbar navbar-expand-lg navbar-light bg-white py-2 shadow-sm fixed-top">
<div class="container-fluid px-4"> <div class="container-fluid px-4">
<a class="navbar-brand" href="/">PosSehat</a> <a class="navbar-brand fw-bold" href="/" style="color: #ff5757;">PosSehat</a>
<div class="ms-auto"> <div class="ms-auto d-flex align-items-center">
<form action="/logout" method="POST"> <ul class="navbar-nav">
@csrf <li class="nav-item dropdown pe-3">
<button class="btn btn-primary rounded-pill px-4">
Keluar <a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
</button> <img src="https://ui-avatars.com/api/?name={{ urlencode(auth()->user()->name) }}&background=9c3a5b&color=fff" alt="Profile" class="rounded-circle" width="35">
</form> <span class="d-none d-md-block dropdown-toggle ps-2">{{ auth()->user()->name }}</span>
</a>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header text-start">
<h6>{{ auth()->user()->name }}</h6>
<span class="badge bg-info text-capitalize">{{ auth()->user()->role }}</span>
</li>
<li><hr class="dropdown-divider"></li>
<li>
<a class="dropdown-item d-flex align-items-center" href="{{ route('profile.edit') }}">
<i class="bi bi-person"></i>
<span>Profil Saya</span>
</a>
</li>
<li><hr class="dropdown-divider"></li>
<li>
<a class="dropdown-item d-flex align-items-center text-danger" href="#"
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
<i class="bi bi-box-arrow-right"></i>
<span>Keluar</span>
</a>
<form id="logout-form" action="/logout" method="POST" class="d-none">
@csrf
</form>
</li>
</ul>
</li>
</ul>
</div> </div>
</div> </div>
</nav> </nav>

View File

@ -0,0 +1,66 @@
@extends('layouts.dashboard')
@section('title', 'Profil Petugas')
@section('content')
<div class="pagetitle">
<h1>Pengaturan Profil</h1>
</div>
<section class="section profile">
<div class="row">
<div class="col-xl-4">
<div class="card">
<div class="card-body profile-card pt-4 d-flex flex-column align-items-center">
<img src="https://ui-avatars.com/api/?name={{ urlencode(auth()->user()->name) }}&background=9c3a5b&color=fff" alt="Profile" class="rounded-circle mb-3" width="100">
<h3 style="text-">{{ $user->nama }}</h3>
</div>
</div>
</div>
<div class="col-xl-8">
<div class="card">
<div class="card-body pt-3">
<h5 class="card-title">Ubah Password</h5>
@if(session('success'))
<div class="alert alert-success">{{ session('success') }}</div>
@endif
<form action="{{ route('profile.password.update') }}" method="POST">
@csrf
@method('PUT')
<div class="row mb-3">
<label for="current_password" class="col-md-4 col-lg-3 col-form-label">Password Saat Ini</label>
<div class="col-md-8 col-lg-9">
<input name="current_password" type="password" class="form-control @error('current_password') is-invalid @enderror" id="current_password">
@error('current_password') <div class="invalid-feedback">{{ $message }}</div> @enderror
</div>
</div>
<div class="row mb-3">
<label for="newPassword" class="col-md-4 col-lg-3 col-form-label">Password Baru</label>
<div class="col-md-8 col-lg-9">
<input name="password" type="password" class="form-control @error('password') is-invalid @enderror" id="newPassword">
@error('password') <div class="invalid-feedback">{{ $message }}</div> @enderror
</div>
</div>
<div class="row mb-3">
<label for="renewPassword" class="col-md-4 col-lg-3 col-form-label">Konfirmasi Password Baru</label>
<div class="col-md-8 col-lg-9">
<input name="password_confirmation" type="password" class="form-control" id="renewPassword">
</div>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary" style="background-color: #9c3a5b; border: none;">Simpan Perubahan</button>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
@endsection

View File

@ -16,54 +16,54 @@
<div class="card-body"> <div class="card-body">
<h5 class="card-title">Tambah Data Petugas</h5> <h5 class="card-title">Tambah Data Petugas</h5>
<!-- General Form Elements --> <form action="{{ route('users.store') }}" method="POST">
<form action="{{ route('users.store') }}" method="POST"> @csrf
@csrf
<div class="row mb-3">
<label for="nama" class="col-sm-2 col-form-label">Nama</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="nama" required>
</div>
</div>
<div class="row mb-3">
<label for="no_hp" class="col-sm-2 col-form-label">No HP</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="no_hp" id="no_hp" required>
</div>
</div>
<div class="row mb-3"> <div class="alert alert-info border-light shadow-sm" role="alert">
<label for="email" class="col-sm-2 col-form-label">Email</label> <i class="bi bi-info-circle me-1"></i>
<div class="col-sm-10"> Password petugas baru akan otomatis diatur menjadi: <strong>12345678</strong>
<input type="email" class="form-control" name="email" required> </div>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<label for="password" class="col-sm-2 col-form-label">Password</label> <label for="nama" class="col-sm-2 col-form-label">Nama</label>
<div class="col-sm-10"> <div class="col-sm-10">
<input type="password" class="form-control" name="password" required> <input type="text" class="form-control" name="nama" required>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<label for="no_hp" class="col-sm-2 col-form-label">Role</label> <label for="no_hp" class="col-sm-2 col-form-label">No HP</label>
<div class="col-sm-10"> <div class="col-sm-10">
<select name="role" class="form-control" required> <input type="text" class="form-control" name="no_hp" required>
<option value="">-- Pilih Role --</option> </div>
<option value="admin">Admin</option> </div>
<option value="petugas">Petugas</option>
</select>
</div>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-sm-10"> <label for="email" class="col-sm-2 col-form-label">Email</label>
<button type="submit" class="btn btn-primary">Submit Form</button> <div class="col-sm-10">
</div> <input type="email" class="form-control" name="email" required>
</div> </div>
</div>
<div class="row mb-3">
<label for="role" class="col-sm-2 col-form-label">Role</label>
<div class="col-sm-10">
<select name="role" class="form-control" required>
<option value="">-- Pilih Role --</option>
<option value="admin">Admin</option>
<option value="petugas">Petugas</option>
</select>
</div>
</div>
<div class="row mb-3">
<div class="col-sm-10 offset-sm-2">
<button type="submit" class="btn btn-primary" style="background-color: #9c3a5b; border: none;">Simpan Petugas</button>
<a href="{{ route('users.index') }}" class="btn btn-secondary">Batal</a>
</div>
</div>
</form>
</form><!-- End General Form Elements -->
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,7 +1,5 @@
<?php <?php
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AnakController; use App\Http\Controllers\AnakController;
use App\Http\Controllers\AuthController; use App\Http\Controllers\AuthController;
use App\Http\Controllers\DashboardController; use App\Http\Controllers\DashboardController;
@ -9,7 +7,10 @@
use App\Http\Controllers\IbuHamilController; use App\Http\Controllers\IbuHamilController;
use App\Http\Controllers\PengukuranBalitaController; use App\Http\Controllers\PengukuranBalitaController;
use App\Http\Controllers\PengukuranIbuHamilController; use App\Http\Controllers\PengukuranIbuHamilController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\UsersController; use App\Http\Controllers\UsersController;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Route;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -55,6 +56,11 @@
Route::resource('users', UsersController::class); Route::resource('users', UsersController::class);
}); });
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::put('/profile/password', [ProfileController::class, 'updatePassword'])->name('profile.password.update');
});
Route::middleware(['auth'])->group(function () { Route::middleware(['auth'])->group(function () {
Route::resource('pengukuran_ibu_hamil', PengukuranIbuHamilController::class); Route::resource('pengukuran_ibu_hamil', PengukuranIbuHamilController::class);
}); });