perbarui tampilan prt 3

This commit is contained in:
Sveemaaa 2026-04-10 11:28:28 +07:00
parent d2e645c206
commit 62c5887282
6 changed files with 710 additions and 817 deletions

View File

@ -5,344 +5,156 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>PosSehat - Login</title>
<!-- Bootstrap CSS -->
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"/>
<!-- Font Awesome -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet"/>
<style>
body {
background-color: #f0f8ff;
font-family: 'Segoe UI', sans-serif;
background-color: #fffaf7; /* Warna oranye sangat muda */
font-family: 'Poppins', sans-serif;
}
.navbar-brand {
font-weight: bold;
font-size: 1.5rem;
color: #ff5757;
}
.navbar-brand span {
color: #ff5757;
}
.nav-link {
font-weight: 500;
color: #333;
}
.nav-link:hover {
color: #ff5757;
}
/* Navbar Brand */
.navbar-brand { font-weight: bold; font-size: 1.5rem; color: #FF782D !important; }
.nav-link { font-weight: 500; color: #333 !important; }
.nav-link:hover { color: #FF782D !important; }
/* Buttons */
.btn-primary {
background: linear-gradient(90deg, #ff5757, #ff5757);
background: #FF782D;
border: none;
font-weight: 600;
transition: all 0.3s ease;
}
.btn-primary:hover {
background: linear-gradient(90deg, #ff5757, #ff5757);
background: #e66a25;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(255, 120, 45, 0.3);
}
.hero-section {
background-color: #fff7f2;
min-height: 100vh; /* agar tetap bisa lebih tinggi dari viewport jika konten bertambah */
display: flex;
align-items: center;
padding-top: 100px; /* agar konten tidak tertutup navbar fixed-top */
}
.card {
/* Hero & Card */
.hero-section {
height: 100vh;
display: flex;
align-items: center;
padding-top: 80px;
}
.login-card {
background-color: #ffffff;
padding: 2rem;
padding: 2.5rem;
border: none;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
border-radius: 1rem;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);
border-radius: 20px;
}
@media (max-width: 768px) {
.hero-section {
padding-top: 120px;
flex-direction: column;
align-items: start;
}
}
.form-control {
border: 1px solid #ddd;
padding: 12px;
border-radius: 10px;
border: 1px solid #eee;
}
.form-control:focus {
border-color: #ff5757;
box-shadow: 0 0 0 0.2rem rgba(94, 121, 255, 0.25);
border-color: #FF782D;
box-shadow: 0 0 0 0.25rem rgba(255, 120, 45, 0.1);
}
/* Animasi Lingkaran */
.circle-background {
position: absolute;
top: 30%;
left: 10%;
width: 250px;
height: 250px;
background: rgba(173, 216, 230, 0.2);
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 350px;
height: 350px;
background: rgba(255, 120, 45, 0.08);
border-radius: 50%;
animation: expandCircle 3s ease-in-out infinite;
z-index: -1;
animation: expandCircle 4s ease-in-out infinite;
}
@keyframes expandCircle {
0% { width: 250px; height: 250px; }
50% { width: 300px; height: 300px; }
100% { width: 250px; height: 250px; }
0%, 100% { transform: translate(-50%, -50%) scale(1); }
50% { transform: translate(-50%, -50%) scale(1.2); }
}
.animated {
opacity: 0;
/* Animasi Muncul */
.animate-up {
animation: fadeInUp 1s forwards;
}
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(20px); }
from { opacity: 0; transform: translateY(30px); }
to { opacity: 1; transform: translateY(0); }
}
.image-container img {
max-width: 100%;
border-radius: 1rem;
animation-delay: 1.5s;
z-index: 2;
}
.btn-primary {
background: linear-gradient(90deg, #ff5757, #ff5757);
border: none;
}
.btn-primary:hover {
background: linear-gradient(90deg, #ff5757, #ff5757);
}
.hero-section {
background-color: #fff7f2;
height: 100vh;
display: flex;
align-items: center;
}
.hero-section img {
max-width: 100%;
}
.section-title {
font-weight: bold;
color: #27304b;
}
.service-card {
border-radius: 16px;
padding: 20px;
background-color: #fff;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.05);
}
.footer {
background-color: #d47c64;
color: #fff;
padding: 40px 0;
}
.footer a {
color: #fff;
text-decoration: none;
}
.footer a:hover {
color: #fff;
}
.circle-background {
position: absolute;
top: 30%;
left: 10%;
width: 250px;
height: 250px;
background: #ffeadc(173, 216, 230, 0.2);
border-radius: 50%;
animation: expandCircle 3s ease-in-out infinite;
}
@keyframes expandCircle {
0% {
width: 250px;
height: 250px;
}
50% {
width: 300px;
height: 300px;
}
100% {
width: 250px;
height: 250px;
}
}
.gradient-icon {
background: linear-gradient(90deg, #ff5757, #ff5757);
/* -webkit-background-clip: text; */
-webkit-text-fill-color: transparent;
}
.fade-left,
.fade-right,
.fade-up {
opacity: 0;
transition: opacity 1s ease-out;
}
.fade-left.animate__fadeInLeft {
animation: fadeInLeft 1s forwards;
}
.fade-right.animate__fadeInRight {
animation: fadeInRight 1s forwards;
}
.fade-up.animate__fadeInUp {
animation: fadeInUp 1s forwards;
}
@keyframes fadeInLeft {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes fadeInRight {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.shadow-card {
box-shadow: 0px 8px 20px rgba(0, 0, 0, 0.2);
height: 300px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.shadow-card:hover {
box-shadow: 0px 12px 25px rgba(0, 0, 0, 0.15);
transform: translateY(-5px);
transition: all 0.3s ease-in-out;
}
.navbar-brand {
font-weight: bold;
font-size: 1.5rem;
color: #ff5757;
}
.navbar-brand span {
color: #00bcd4;
}
.nav-link {
font-weight: 500;
color: #333;
}
.nav-link:hover {
color: #ff5757;
}
</style>
</head>
<body>
<!-- Navbar langsung dalam file -->
<nav class="navbar navbar-expand-lg navbar-light bg-white py-3 shadow-sm fixed-top">
<div class="container">
<a class="navbar-brand" href="/">PosSehat<span></span></a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-end" id="navbarNav">
<ul class="navbar-nav">
<a class="navbar-brand" href="/">PosSehat</a>
<div class="collapse navbar-collapse justify-content-end">
<ul class="navbar-nav align-items-center">
<li class="nav-item"><a class="nav-link" href="/">Beranda</a></li>
<li class="nav-item"><a class="nav-link" href="#fiturutama">Fitur</a></li>
<li class="nav-item"><a class="nav-link" href="#footer">Kontak</a></li>
<li class="nav-item"><a class="btn btn-primary rounded-pill px-4 ms-3" href="/login">Login</a></li>
</ul>
</div>
</div>
</nav>
<!-- Login Section -->
<section class="hero-section">
<div class="container">
<div class="row align-items-center">
<div class="row align-items-center g-5">
<!-- Image -->
<div class="col-md-6 text-center">
<div class="image-container position-relative">
<img src="assets/img/posyandu.png" alt="Login Illustration" class="animated fadeInUp">
<!-- <div class="circle-background"></div> -->
<div class="col-md-6 text-center position-relative d-none d-md-block">
<div class="circle-background"></div>
<div class="image-container animate-up">
<img src="{{ asset('assets/img/posyandu.png') }}" alt="PosSehat Illustration">
</div>
</div>
<!-- Login Form -->
<div class="col-md-6">
<div class="card shadow-lg animated" style="animation-delay: 1s;">
<h3 class="text-center fw-bold mb-3 " style="animation-delay: 0.5s; color: #ff5757">Selamat Datang</h3>
<p class="text-center text-muted mb-4 animated" style="animation-delay: 0.7s;">Silakan masuk untuk melanjutkan</p>
<div class="login-card animate-up" style="animation-delay: 0.3s;">
<div class="mb-4">
<h3 class="fw-bold" style="color: #FF782D">Selamat Datang</h3>
<p class="text-muted">Silakan masuk ke akun petugas Anda</p>
</div>
@if(session('error'))
<div class="alert alert-danger">
{{ session('error') }}
<div class="alert alert-danger border-0 small" style="border-radius: 10px;">
<i class="bi bi-exclamation-triangle me-2"></i> {{ session('error') }}
</div>
@endif
<form action="/proseslogin" method="POST">
@csrf
<div class="mb-3 animated" style="animation-delay: 0.9s;">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control rounded-3" id="email" name="email" placeholder="Masukkan email Anda" required>
<div class="mb-3">
<label for="email" class="form-label small fw-bold text-muted">Email</label>
<div class="input-group">
<span class="input-group-text bg-white border-end-0 text-muted"><i class="bi bi-envelope"></i></span>
<input type="email" class="form-control border-start-0" id="email" name="email" placeholder="nama@email.com" required>
</div>
<div class="mb-3 animated" style="animation-delay: 1.1s;">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control rounded-3" id="password" name="password" placeholder="Masukkan password Anda" required>
</div>
<div class="mb-4">
<label for="password" class="form-label small fw-bold text-muted">Password</label>
<div class="input-group">
<span class="input-group-text bg-white border-end-0 text-muted"><i class="bi bi-lock"></i></span>
<input type="password" class="form-control border-start-0" id="password" name="password" placeholder="••••••••" required>
</div>
<button type="submit" class="btn btn-primary w-100 rounded-pill mt-3 animated" style="animation-delay: 1.3s;">Masuk</button>
</div>
<button type="submit" class="btn btn-primary w-100 rounded-pill py-2 shadow-sm">
Masuk Sekarang <i class="bi bi-arrow-right-short ms-1"></i>
</button>
</form>
<div class="text-center mt-4 animated" style="animation-delay: 1.5s;">
<a href="#" class="text-muted small">Lupa password?</a>
<div class="text-center mt-4">
<a href="#" class="text-muted small text-decoration-none">Lupa password? Hubungi Admin</a>
</div>
</div>
</div>
@ -351,7 +163,6 @@
</div>
</section>
<!-- Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

View File

@ -8,328 +8,291 @@
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet" />
<link href="https://cdn.jsdelivr.net/npm/animate.css@4.1.1/animate.min.css" rel="stylesheet" />
<style>
/* === Styles kamu yang lama dipertahankan === */
body {
font-family: 'Segoe UI', sans-serif;
background-color: #f8f9ff;
}
<style>
html {
scroll-behavior: smooth;
}
body {
font-family: 'Poppins', 'Segoe UI', sans-serif; /* Poppins terasa lebih modern */
background-color: #ffffff;
overflow-x: hidden;
}
.btn-primary {
background: linear-gradient(90deg, #ff5757, #ff5757);
border: none;
}
section {
scroll-margin-top: 100px;
}
.btn-primary:hover {
background: linear-gradient(90deg, #ff5757, #ff5757);
}
/* Warna Utama: Oranye PosSehat */
.btn-primary {
background: #FF782D;
border: none;
transition: all 0.3s ease;
}
.hero-section {
background-color: #fff7f2;
height: 100vh;
display: flex;
align-items: center;
}
.btn-primary:hover {
background: #e66a25;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(255, 120, 45, 0.3);
}
.hero-section img {
max-width: 100%;
}
.hero-section {
background-color: #fffaf7; /* Oranye sangat muda */
min-height: 100vh;
display: flex;
align-items: center;
position: relative;
}
.section-title {
font-weight: bold;
color: #27304b;
}
.section-title {
font-weight: 800;
color: #2c3e50;
}
.service-card {
border-radius: 16px;
padding: 20px;
background-color: #fff;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.05);
}
.fitur-scroll {
padding-top: 100px; /* Jarak agar konten turun */
margin-top: -100px; /* Menarik section kembali ke atas secara layout */
}
.footer {
background-color: #d47c64;
color: #fff;
padding: 40px 0;
}
.service-card {
border-radius: 20px;
padding: 30px;
background-color: #fff;
border: none;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);
transition: all 0.3s ease;
}
.footer a {
color: #fff;
text-decoration: none;
}
.service-card:hover {
transform: translateY(-10px);
box-shadow: 0 15px 35px rgba(255, 120, 45, 0.1);
}
.footer a:hover {
color: #fff;
}
.footer {
background-color: #2c3e50; /* Gelap elegan agar oranye lebih menyala */
color: #fff;
padding: 60px 0 20px 0;
}
.circle-background {
position: absolute;
top: 30%;
left: 10%;
width: 250px;
height: 250px;
background: #ffeadc(173, 216, 230, 0.2);
border-radius: 50%;
animation: expandCircle 3s ease-in-out infinite;
}
.footer a { color: #bdc3c7; text-decoration: none; transition: 0.3s; }
.footer a:hover { color: #FF782D; }
@keyframes expandCircle {
0% {
width: 250px;
height: 250px;
}
50% {
/* Perbaikan Lingkaran Background */
.circle-background {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); /* Menjaga di tengah */
width: 300px;
height: 300px;
}
background: rgba(255, 120, 45, 0.1); /* Oranye transparan */
border-radius: 50%;
z-index: 1; /* Di bawah gambar */
animation: expandCircle 4s ease-in-out infinite;
}
100% {
width: 250px;
height: 250px;
}
}
@keyframes expandCircle {
0%, 100% { transform: translate(-50%, -50%) scale(1); }
50% { transform: translate(-50%, -50%) scale(1.3); }
}
.gradient-icon {
background: linear-gradient(90deg, #ff5757, #ff5757);
/* -webkit-background-clip: text; */
-webkit-text-fill-color: transparent;
}
/* Perbaikan Ikon Gradient */
.gradient-icon {
background: linear-gradient(135deg, #FF782D, #ffb38e);
-webkit-background-clip: text; /* WAJIB ADA */
-webkit-text-fill-color: transparent;
display: inline-block;
}
.fade-left,
.fade-right,
.fade-up {
opacity: 0;
transition: opacity 1s ease-out;
}
/* Navbar Style */
.navbar-brand { font-weight: 800; color: #FF782D !important; letter-spacing: 1px; }
.navbar-brand span { color: #2c3e50; }
.nav-link { font-weight: 600; color: #555 !important; margin: 0 10px; }
.nav-link:hover { color: #FF782D !important; }
.fade-left.animate__fadeInLeft {
animation: fadeInLeft 1s forwards;
}
/* Animations Base */
.fade-left, .fade-right, .fade-up { opacity: 0; }
.fade-right.animate__fadeInRight {
animation: fadeInRight 1s forwards;
}
@keyframes myFadeInLeft {
from { opacity: 0; transform: translateX(-50px); }
to { opacity: 1; transform: translateX(0); }
}
@keyframes myFadeInRight {
from { opacity: 0; transform: translateX(50px); }
to { opacity: 1; transform: translateX(0); }
}
@keyframes myFadeInUp {
from { opacity: 0; transform: translateY(50px); }
to { opacity: 1; transform: translateY(0); }
}
.fade-up.animate__fadeInUp {
animation: fadeInUp 1s forwards;
}
/* Class yang akan dipicu JavaScript */
.show-now {
opacity: 1 !important;
}
.animate-left { animation: myFadeInLeft 1s forwards; }
.animate-right { animation: myFadeInRight 1s forwards; }
.animate-up { animation: myFadeInUp 1s forwards; }
@keyframes fadeInLeft {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes fadeInRight {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.shadow-card {
box-shadow: 0px 8px 20px rgba(0, 0, 0, 0.2);
height: 300px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.shadow-card:hover {
box-shadow: 0px 12px 25px rgba(0, 0, 0, 0.15);
transform: translateY(-5px);
transition: all 0.3s ease-in-out;
}
.navbar-brand {
font-weight: bold;
font-size: 1.5rem;
color: #ff5757;
}
.navbar-brand span {
color: #00bcd4;
}
.nav-link {
font-weight: 500;
color: #333;
}
.nav-link:hover {
color: #5e79ff;
}
</style>
/* Dasar transparan agar bisa dianimasikan */
.fade-left, .fade-right, .fade-up {
opacity: 0;
transition: opacity 0.5s ease;
}
</style>
</head>
<body>
<!-- Navbar -->
<!-- Navbar -->
<nav class="navbar navbar-expand-lg navbar-light bg-white py-3 shadow-sm fixed-top">
<div class="container">
<a class="navbar-brand" href="/">PosSehat<span></span></a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-end" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="/">Beranda</a></li>
<li class="nav-item"><a class="nav-link" href="#fiturutama">Fitur</a></li>
<li class="nav-item"><a class="nav-link" href="#footer">Kontak</a></li>
<li class="nav-item"><a class="btn btn-primary rounded-pill px-4 ms-3" href="/login">Login</a></li>
</ul>
</div>
</div>
</nav>
<!-- Hero Section -->
<section class="hero-section pt-5">
<div class="container pt-5">
<div class="row align-items-center pt-5">
<div class="col-md-6 fade-left">
<h1 class="mb-3 display-5 fw-bold text-dark">Sistem Informasi yang Mendukung Kegiatan Posyandu</h1>
<p class="lead text-dark mb-4">Gunakan Teknologi untuk Meningkatkan Pendataan dan Pelayanan Posyandu Secara Efisien dan Terintegrasi.</p>
</div>
<div class="col-md-6 text-center fade-right">
<div class="image-container position-relative">
<img src="assets/img/posyandu.png" alt="Anak" class="img-fluid animated fadeInUp" style="animation-delay: 1.5s;">
<div class="circle-background"></div>
</div>
</div>
</div>
</div>
</section>
<!-- Fitur -->
<section class="py-5" id="fiturutama">
<div class="container">
<h3 class="section-title text-center mb-5 display-6 fade-up">Fitur Utama</h3>
<div class="row g-5">
<!-- Fitur 1 -->
<div class="col-md-4 fade-left">
<div class="service-card text-center h-100 p-4">
<div class="mb-4">
<i class="fas fa-chart-line fa-3x gradient-icon"></i>
</div>
<h5 class="fw-bold mb-3">Pencatatan Data Balita</h5>
<p class="text-muted">Catat informasi balita dengan cepat, mulai dari identitas hingga status pertumbuhannya.</p>
</div>
</div>
<!-- Fitur 2 -->
<div class="col-md-4 fade-up">
<div class="service-card text-center h-100 p-4">
<div class="mb-4">
<i class="fas fa-book-open fa-3x gradient-icon"></i>
</div>
<h5 class="fw-bold mb-3">Deteksi Stunting</h5>
<p class="text-muted">Lakukan deteksi stunting berdasarkan data berat, tinggi, dan usia balita secara otomatis.</p>
</div>
</div>
<!-- Fitur 3 -->
<div class="col-md-4 fade-right">
<div class="service-card text-center h-100 p-4">
<div class="mb-4">
<i class="fas fa-hospital-alt fa-3x gradient-icon"></i>
</div>
<h5 class="fw-bold mb-3">Pencatatan Ibu Hamil</h5>
<p class="text-muted">Pantau kondisi ibu hamil dengan pencatatan kehamilan secara sistematis dan rapi.</p>
</div>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="footer" id="footer">
<!-- Navbar -->
<nav class="navbar navbar-expand-lg navbar-light bg-white py-3 shadow-sm fixed-top">
<div class="container">
<div class="row">
<div class="col-md-4">
<h5>PosSehat<span class="text-info">.</span></h5>
<p>Perum Villa Kembang Asri Sukowiryo, Kec. Bondowoso, Kabupaten Bondowoso, Jawa Timur 68219</p>
<div>
<a href="#"><i class="fab fa-facebook-f me-3"></i></a>
<a href="#"><i class="fab fa-instagram me-3"></i></a>
<a href="#"><i class="fab fa-twitter"></i></a>
</div>
<a class="navbar-brand" href="/">PosSehat<span></span></a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-end" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="/">Beranda</a></li>
<li class="nav-item"><a class="nav-link" href="#fiturutama">Fitur</a></li>
<li class="nav-item"><a class="nav-link" href="#footer">Kontak</a></li>
<li class="nav-item"><a class="btn btn-primary rounded-pill px-4 ms-3" href="/login">Login</a></li>
</ul>
</div>
<div class="col-md-2">
<h6>Informasi</h6>
<ul class="list-unstyled">
<li><a href="#">Tentang Kami</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Pusat Bantuan</a></li>
</ul>
</div>
<div class="col-md-3">
<h6>Wilayah Layanan</h6>
<p>Bondowoso, Jawa Timur</p>
</div>
<div class="col-md-3">
<h6>Kontak</h6>
<p>+6285646546543<br>info@possehat.id<br>Telp: +6285331904446</p>
</div>
</div>
<div class="text-center mt-4">
<small>&copy; PosSehat 2026</small>
</div>
</div>
</footer>
</nav>
<section class="hero-section">
<div class="container">
<div class="row align-items-center">
<div class="col-md-6 fade-left">
<h1 class="mb-3 display-4 fw-bold text-dark">Sistem Informasi Digital <span style="color: #FF782D;">PosSehat</span></h1>
<p class="lead text-muted mb-4">Gunakan teknologi untuk meningkatkan efisiensi pendataan dan deteksi dini kesehatan Ibu & Balita di Posyandu.</p>
<div class="d-flex gap-3">
<a href="/login" class="btn btn-primary btn-lg rounded-pill px-5">Mulai Sekarang</a>
<a href="#fiturutama" class="btn btn-outline-secondary btn-lg rounded-pill px-4">Pelajari Fitur</a>
</div>
</div>
<div class="col-md-6 text-center fade-right position-relative">
<div class="circle-background"></div>
<img src="assets/img/posyandu.png" alt="Posyandu" class="img-fluid position-relative" style="z-index: 2;">
</div>
</div>
</div>
</section>
<!-- Fitur -->
<section class="py-3" id="fiturutama">
<div class="container">
<h3 class="section-title text-center mb-5 display-6 fade-up">Fitur Utama</h3>
<div class="row g-5">
<!-- Fitur 1 -->
<div class="col-md-4 fade-left">
<div class="service-card text-center h-100 p-4">
<div class="mb-4">
<i class="fas fa-chart-line fa-3x gradient-icon"></i>
</div>
<h5 class="fw-bold mb-3">Pencatatan Data Balita</h5>
<p class="text-muted">Catat informasi balita dengan cepat, mulai dari identitas hingga status pertumbuhannya.</p>
</div>
</div>
<!-- Fitur 2 -->
<div class="col-md-4 fade-up">
<div class="service-card text-center h-100 p-4">
<div class="mb-4">
<i class="fas fa-book-open fa-3x gradient-icon"></i>
</div>
<h5 class="fw-bold mb-3">Deteksi Stunting</h5>
<p class="text-muted">Lakukan deteksi stunting berdasarkan data berat, tinggi, dan usia balita secara otomatis.</p>
</div>
</div>
<!-- Fitur 3 -->
<div class="col-md-4 fade-right">
<div class="service-card text-center h-100 p-4">
<div class="mb-4">
<i class="fas fa-hospital-alt fa-3x gradient-icon"></i>
</div>
<h5 class="fw-bold mb-3">Pencatatan Ibu Hamil</h5>
<p class="text-muted">Pantau kondisi ibu hamil dengan pencatatan kehamilan secara sistematis dan rapi.</p>
</div>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="footer" id="footer">
<div class="container">
<div class="row">
<div class="col-md-4">
<h5>PosSehat<span class="text-info">.</span></h5>
<p>Perum Villa Kembang Asri Sukowiryo, Kec. Bondowoso, Kabupaten Bondowoso, Jawa Timur 68219</p>
<div>
<a href="#"><i class="fab fa-facebook-f me-3"></i></a>
<a href="#"><i class="fab fa-instagram me-3"></i></a>
<a href="#"><i class="fab fa-twitter"></i></a>
</div>
</div>
<div class="col-md-2">
<h6>Informasi</h6>
<ul class="list-unstyled">
<li><a href="#">Tentang Kami</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Pusat Bantuan</a></li>
</ul>
</div>
<div class="col-md-3">
<h6>Wilayah Layanan</h6>
<p>Bondowoso, Jawa Timur</p>
</div>
<div class="col-md-3">
<h6>Kontak</h6>
<p>+6285646546543<br>info@possehat.id<br>Telp: +6285331904446</p>
</div>
</div>
<div class="text-center mt-4">
<small>&copy; PosSehat 2026</small>
</div>
</div>
</footer>
<!-- JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
// Scroll animation handler
const addFadeInClass = (entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const section = entry.target;
if (section.classList.contains('fade-left')) {
section.classList.add('animate__fadeInLeft');
} else if (section.classList.contains('fade-right')) {
section.classList.add('animate__fadeInRight');
} else if (section.classList.contains('fade-up')) {
section.classList.add('animate__fadeInUp');
}
observer.unobserve(section);
}
});
};
document.addEventListener("DOMContentLoaded", function() {
const observerOptions = {
threshold: 0.1 // 10% muncul di layar langsung gerak
};
const observer = new IntersectionObserver(addFadeInClass, { threshold: 0.5 });
document.querySelectorAll('.fade-left, .fade-right, .fade-up').forEach(el => observer.observe(el));
</script>
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const el = entry.target;
// Paksa opacity jadi 1
el.classList.add('show-now');
// Tambahkan animasi sesuai class awal
if (el.classList.contains('fade-left')) el.classList.add('animate-left');
if (el.classList.contains('fade-right')) el.classList.add('animate-right');
if (el.classList.contains('fade-up')) el.classList.add('animate-up');
observer.unobserve(el);
}
});
}, observerOptions);
// Ambil semua elemen yang mau dianimasikan
document.querySelectorAll('.fade-left, .fade-right, .fade-up').forEach(el => {
observer.observe(el);
});
});
</script>
</body>
</html>

View File

@ -1,50 +1,88 @@
<!DOCTYPE html>
<html>
<head>
<title>Laporan Hasil Pengukuran Ibu Hamil</title>
<title>Laporan Pengukuran Ibu Hamil - {{ $pengukuran->ibuHamil->nama ?? 'Data' }}</title>
<style>
body { font-family: sans-serif; font-size: 12px; }
.header { text-align: center; margin-bottom: 20px; }
.table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }
.table th, .table td { border: 1px solid #ddd; padding: 8px; text-align: left; }
.table th { background-color: #f2f2f2; }
.chart-container { text-align: center; margin-top: 20px; }
.chart-image { width: 100%; max-width: 600px; border: 1px solid #eee; }
.footer { margin-top: 30px; font-style: italic; font-size: 10px; }
.text-bold { font-weight: bold; }
body { font-family: 'Helvetica', 'Arial', sans-serif; font-size: 12px; color: #333; line-height: 1.5; }
.header { text-align: center; margin-bottom: 25px; border-bottom: 2px solid #FF782D; padding-bottom: 10px; }
.header h2 { color: #FF782D; margin: 0; text-transform: uppercase; font-size: 18px; }
.header p { margin: 5px 0; color: #666; font-size: 10px; letter-spacing: 1px; }
.info-box {
background-color: #fdf2f5; /* Pink muda khas Ibu Hamil */
border-left: 5px solid #9c3a5b;
padding: 10px;
margin-bottom: 15px;
background-color: #fff5f0; /* Oranye sangat muda */
border-left: 5px solid #FF782D;
padding: 12px;
margin-bottom: 20px;
font-size: 11px;
line-height: 1.4;
border-radius: 0 5px 5px 0;
}
.table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }
.table th, .table td { border: 1px solid #eee; padding: 10px; text-align: left; }
.table th { background-color: #fafafa; color: #555; font-weight: bold; width: 35%; }
.section-title {
color: #FF782D;
font-size: 14px;
font-weight: bold;
margin-top: 20px;
margin-bottom: 10px;
border-bottom: 1px solid #ffccbc;
padding-bottom: 5px;
}
.chart-container { text-align: center; margin: 20px 0; padding: 10px; border: 1px solid #f9f9f9; }
.chart-image { width: 100%; max-width: 580px; }
.edukasi-item { margin-bottom: 12px; padding-bottom: 8px; border-bottom: 1px dashed #eee; }
.edukasi-item strong { color: #FF782D; font-size: 12px; }
.rekomendasi {
margin-top: 20px;
background-color: #fffaf0;
border: 1px solid #ffeccb;
padding: 15px;
border-radius: 8px;
color: #856404;
}
.footer {
margin-top: 40px;
border-top: 1px solid #eee;
padding-top: 10px;
font-style: italic;
font-size: 9px;
color: #999;
text-align: right;
}
.text-bold { font-weight: bold; }
.status-text { color: #FF782D; font-weight: bold; font-size: 13px; }
</style>
</head>
<body>
<div class="header">
<h2 style="color: #9c3a5b;">LAPORAN HASIL PENGUKURAN IBU HAMIL</h2>
<p>Aplikasi PosSehat - Kesehatan Ibu & Anak</p>
<h2>LAPORAN HASIL PENGUKURAN IBU HAMIL</h2>
<p>Aplikasi PosSehat Digital - Kesehatan Ibu & Anak</p>
</div>
<div class="info-box">
<span class="text-bold">Panduan Indeks Massa Tubuh (IMT):</span><br>
IMT digunakan untuk memantau apakah status gizi Ibu selama kehamilan berada dalam kondisi ideal.<br>
<span class="text-bold">Gizi Kurang:</span> < 18.5 |
<span class="text-bold">Gizi Normal:</span> 18.5 - 24.9 |
<span class="text-bold">Gizi Lebih:</span> 24.9 - 29.9 |
<span class="text-bold">Obesitas:</span> > 29.9
IMT memantau status gizi Ibu selama kehamilan:<br>
<span class="text-bold">Kurang:</span> < 18.5 |
<span class="text-bold">Normal:</span> 18.5 - 24.9 |
<span class="text-bold">Lebih:</span> 25.0 - 29.9 |
<span class="text-bold">Obesitas:</span> > 30.0
</div>
<table class="table">
<tr>
<th style="width: 30%;">Nama Ibu</th>
<td>{{ $pengukuran->ibuHamil->nama ?? '-' }}</td>
<th>Nama Ibu Hamil</th>
<td><strong style="font-size: 13px;">{{ $pengukuran->ibuHamil->nama ?? '-' }}</strong></td>
</tr>
<tr>
<th>Tanggal Periksa</th>
<td>{{ $pengukuran->tanggal }}</td>
<th>Tanggal Pemeriksaan</th>
<td>{{ \Carbon\Carbon::parse($pengukuran->tanggal)->translatedFormat('d F Y') }}</td>
</tr>
<tr>
<th>Usia Kehamilan</th>
@ -64,40 +102,40 @@
</tr>
<tr>
<th>Status Gizi</th>
<td><strong style="color: #9c3a5b;">{{ $pengukuran->status_gizi }}</strong></td>
<td><span class="status-text">{{ strtoupper($pengukuran->status_gizi) }}</span></td>
</tr>
</table>
<h3>Grafik Perkembangan (BB & IMT)</h3>
<div class="section-title">Grafik Perkembangan (BB & IMT)</div>
<div class="chart-container">
@if($chartImage)
<img src="{{ $chartImage }}" class="chart-image">
@else
<p style="color: red;">Grafik tidak tersedia. Pastikan grafik muncul di layar sebelum mencetak.</p>
<p style="color: #999;">Grafik visual tidak tersedia dalam laporan ini.</p>
@endif
</div>
<h3>Edukasi & Informasi Kesehatan</h3>
@forelse($edukasi as $item)
<div style="margin-bottom: 12px; border-bottom: 1px solid #eee; padding-bottom: 5px;">
<strong style="color: #9c3a5b;">{{ $item->judul }}</strong>
<p style="margin-top: 5px;">{{ $item->konten }}</p>
</div>
@empty
<p>Edukasi belum tersedia.</p>
@endforelse
<div style="margin-top: 20px; border: 1px solid #9c3a5b; padding: 10px; border-radius: 5px;">
<span class="text-bold">Rekomendasi Medis:</span><br>
@if($pengukuran->status_gizi == 'Normal')
Status gizi Ibu terpantau baik. Pertahankan asupan nutrisi seimbang, konsumsi tablet tambah darah, dan rutin lakukan kontrol kehamilan sesuai jadwal.
<div class="section-title">Edukasi & Rekomendasi</div>
<div class="rekomendasi">
<strong>Pesan Petugas Kesehatan:</strong><br>
@if(strtolower($pengukuran->status_gizi) == 'ibu hamil gizi normal')
Status gizi Ibu terpantau <strong>Baik/Normal</strong>. Pertahankan asupan nutrisi seimbang, konsumsi tablet tambah darah, dan rutin lakukan kontrol kehamilan.
@else
Ibu disarankan untuk berkonsultasi lebih lanjut dengan Bidan atau Dokter di Puskesmas mengenai pola makan dan kenaikan berat badan yang ideal selama kehamilan.
Status gizi Ibu memerlukan perhatian lebih. Mohon konsultasikan hasil ini dengan Bidan atau Dokter untuk mengatur pola makan yang ideal.
@endif
</div>
<div style="margin-top: 15px;">
@foreach($edukasi as $item)
<div class="edukasi-item">
<strong>{{ $item->judul }}</strong>
<p style="margin: 3px 0 0 0; color: #555;">{{ $item->konten }}</p>
</div>
@endforeach
</div>
<div class="footer">
Dicetak pada: {{ date('d-m-Y H:i:s') }} oleh Petugas: {{ $pengukuran->petugas->nama ?? 'Sistem PosSehat' }}
Dicetak pada: {{ date('d-m-Y H:i') }} | Petugas: {{ $pengukuran->petugas->nama ?? 'Sistem PosSehat' }}
</div>
</body>
</html>

View File

@ -1,124 +1,152 @@
@extends('layouts.dashboard')
@section('title', 'Pengukuran Ibu Hamil')
@section('title', 'Form Pengukuran Ibu Hamil')
@section('content')
<div class="pagetitle mb-4">
<h1 style="color: #9c3a5b;">Form Pengukuran Ibu Hamil</h1>
<h1 style="color: #FF782D; font-weight: 700;">Form Pengukuran Ibu Hamil</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('pengukuran_ibu_hamil.index') }}">Data Pengukuran</a></li>
<li class="breadcrumb-item active">Tambah Data</li>
</ol>
</nav>
</div>
<section class="section">
<div class="row">
<div class="row justify-content-center">
<div class="col-lg-10">
<div class="card">
<div class="card-body">
<h5 class="card-title">Tambah Data Pengukuran</h5>
<div class="card shadow-sm border-0" style="border-radius: 20px;">
<div class="card-body p-4">
<div class="d-flex align-items-center mb-4">
<div class="icon-box me-3" style="background: #fff5f0; padding: 10px; border-radius: 12px;">
<i class="bi bi-droplet-half" style="color: #FF782D; font-size: 1.5rem;"></i>
</div>
<h5 class="card-title mb-0" style="color: #2c3e50; font-weight: 600;">Input Pemeriksaan Ibu Hamil</h5>
</div>
<!-- General Form Elements -->
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
<div class="alert alert-danger border-0 shadow-sm mb-4" style="border-radius: 12px;">
<ul class="mb-0">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('pengukuran_ibu_hamil.store') }}" method="POST">
@csrf
<div class="row mb-3">
<label for="tanggal" class="col-sm-2 col-form-label">Tanggal</label>
<div class="col-sm-10">
<input type="date" class="form-control" name="tanggal" id="tanggal_ukur" value="{{ date('Y-m-d') }}" required>
</div>
</div>
<div class="row mb-3">
<label class="col-sm-2 col-form-label">Nama</label>
<div class="col-sm-10">
<select name="ibu_hamil_id" id="ibu_id" class="form-control select2" required>
<option value="">-- Pilih Ibu Hamil --</option>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label fw-semibold">Tanggal Periksa</label>
<div class="input-group">
<span class="input-group-text bg-white border-end-0"><i class="bi bi-calendar-check text-muted"></i></span>
<input type="date" class="form-control border-start-0 custom-input" name="tanggal" id="tanggal_ukur" value="{{ date('Y-m-d') }}" required>
</div>
</div>
@foreach($ibu_hamil as $ibu)
<option value="{{ $ibu->id }}" data-tgl="{{ $ibu->tgl_lahir }}">
{{ $ibu->nama }}
</option>
@endforeach
</select>
<div class="col-md-6 mb-3">
<label class="form-label fw-semibold">Nama Ibu Hamil</label>
<div class="input-group">
<span class="input-group-text bg-white border-end-0"><i class="bi bi-search text-muted"></i></span>
<select name="ibu_hamil_id" id="ibu_id" class="form-select border-start-0 custom-input select2" required>
<option value="" selected disabled>Cari nama ibu...</option>
@foreach($ibu_hamil as $ibu)
<option value="{{ $ibu->id }}" data-tgl="{{ $ibu->tgl_lahir }}">
{{ $ibu->nama }}
</option>
@endforeach
</select>
</div>
</div>
<div class="col-md-6 mb-3">
<label class="form-label fw-semibold text-muted">Usia Ibu (Tahun)</label>
<input type="text" id="usia" name="usia" class="form-control bg-light border-0 px-3" readonly placeholder="Otomatis terisi" style="border-radius: 10px;">
</div>
<div class="col-md-6 mb-3">
<label class="form-label fw-semibold">Usia Kehamilan (Minggu)</label>
<div class="input-group">
<span class="input-group-text bg-white border-end-0"><i class="bi bi-clock-history text-muted"></i></span>
<input type="number" class="form-control border-start-0 custom-input" name="usia_kehamilan" required placeholder="Contoh: 12">
<span class="input-group-text bg-light border-start-0 text-muted">Minggu</span>
</div>
</div>
<div class="col-12"><hr class="my-4 opacity-25"></div>
<div class="col-md-4 mb-3">
<label class="form-label fw-semibold">Berat Badan</label>
<div class="input-group">
<input type="number" step="0.1" class="form-control custom-input fs-5 fw-bold text-center" name="berat_badan" required placeholder="0.0">
<span class="input-group-text bg-light border-start-0 text-muted">kg</span>
</div>
</div>
<div class="col-md-4 mb-3">
<label class="form-label fw-semibold">Tinggi Badan</label>
<div class="input-group">
<input type="number" step="0.1" class="form-control custom-input fs-5 fw-bold text-center" name="tinggi_badan" required placeholder="0.0">
<span class="input-group-text bg-light border-start-0 text-muted">cm</span>
</div>
</div>
<div class="col-md-4 mb-3">
<label class="form-label fw-semibold">LILA (Lingkar Lengan)</label>
<div class="input-group">
<input type="number" step="0.1" class="form-control custom-input fs-5 fw-bold text-center" name="lila" required placeholder="0.0">
<span class="input-group-text bg-light border-start-0 text-muted">cm</span>
</div>
</div>
</div>
<div class="row mb-3">
<label for="nama" class="col-sm-2 col-form-label">Usia</label>
<div class="col-sm-10">
<input type="text" id="usia" name="usia" class="form-control" readonly>
</div>
<div class="d-flex justify-content-end gap-2 border-top mt-4 pt-4">
<a href="{{ route('pengukuran_ibu_hamil.index') }}" class="btn btn-light px-4" style="border-radius: 10px;">Batal</a>
<button type="submit" class="btn btn-orange px-4 py-2" style="background-color: #FF782D; color: white; border-radius: 10px; font-weight: 600; border: none;">
<i class="bi bi-save me-2"></i>Simpan Data Pengukuran
</button>
</div>
<div class="row mb-3">
<label for="berat_badan" class="col-sm-2 col-form-label">Berat Badan</label>
<div class="col-sm-10">
<input type="number" class="form-control" name="berat_badan" required placeholder="kg">
</div>
</div>
<div class="row mb-3">
<label for="tinggi_badan" class="col-sm-2 col-form-label">Tinggi Badan</label>
<div class="col-sm-10">
<input type="number" class="form-control" name="tinggi_badan" required placeholder="cm">
</div>
</div>
<div class="row mb-3">
<label for="lila" class="col-sm-2 col-form-label">Lila</label>
<div class="col-sm-10">
<input type="number" class="form-control" name="lila" required>
</div>
</div>
<div class="row mb-3">
<label for="usia_kehamilan" class="col-sm-2 col-form-label">Usia Kehamilan</label>
<div class="col-sm-10">
<input type="number" class="form-control" name="usia_kehamilan" required placeholder="minggu">
</div>
</div>
<div class="row mb-3">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">Submit Form</button>
</div>
</div>
</form><!-- End General Form Elements -->
</form>
</div>
</div>
</div>
</div>
</section>
<style>
.custom-input:focus {
border-color: #FF782D !important;
box-shadow: 0 0 0 0.25rem rgba(255, 120, 45, 0.1) !important;
}
.input-group-text { border-radius: 10px 0 0 10px; }
.custom-input { border-radius: 0 10px 10px 0 !important; }
/* Style untuk baris BB/TB/LILA */
.col-md-4 .custom-input { border-radius: 10px 0 0 10px !important; }
.col-md-4 .input-group-text { border-radius: 0 10px 10px 0; }
</style>
<script>
document.getElementById("ibu_id").addEventListener("change", function() {
let selected = this.options[this.selectedIndex];
let tgl_lahir = selected.getAttribute("data-tgl");
if(tgl_lahir){
let lahir = new Date(tgl_lahir);
let today = new Date();
let usia = today.getFullYear() - lahir.getFullYear();
let m = today.getMonth() - lahir.getMonth();
if (m < 0 || (m === 0 && today.getDate() < lahir.getDate())) {
usia--;
}
document.getElementById("usia").value = usia;
document.getElementById("usia").value = usia + " Tahun";
}
});
</script>
@endsection

View File

@ -4,97 +4,106 @@
@section('content')
<!-- Page Title -->
<div class="pagetitle mb-4">
<h1 style="color: #9c3a5b;">Data Pengukuran Ibu Hamil</h1>
<h1 style="color: #FF782D; font-weight: 700;">Data Pengukuran Ibu Hamil</h1>
<p class="text-muted">Monitoring kesehatan nutrisi dan perkembangan ibu hamil secara berkala.</p>
</div>
<!-- Card -->
<div class="card shadow-sm">
<div class="card-body">
<div class="card shadow-sm border-0" style="border-radius: 20px;">
<div class="card-body p-4">
<!-- Card Header -->
<div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="card-title mb-0">Daftar Hasil Pengukuran</h5>
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-4">
<h5 class="card-title mb-0" style="color: #2c3e50; font-weight: 600;">Daftar Hasil Pengukuran</h5>
<a href="{{ route('pengukuran_ibu_hamil.create') }}" class="btn btn-success btn-sm">
<i class="bi bi-plus-circle me-1"></i> Tambah Pengukuran
</a>
<div class="mt-3 mt-md-0">
<a href="{{ route('pengukuran_ibu_hamil.create') }}" class="btn btn-orange px-4 py-2 shadow-sm" style="background-color: #FF782D; color: white; border-radius: 10px; font-weight: 500;">
<i class="bi bi-plus-circle me-2"></i> Tambah Pengukuran
</a>
</div>
</div>
<form method="GET" action="{{ route('pengukuran_ibu_hamil.index') }}" class="mb-3">
<div class="input-group" style="max-width: 300px;">
<input type="text" name="search" class="form-control" id="search"
placeholder="Cari nama..."
value="{{ request('search') }}">
<button class="btn btn-primary" type="submit">
<i class="bi bi-search"></i> Cari
</button>
<form method="GET" action="{{ route('pengukuran_ibu_hamil.index') }}" class="mb-4">
<div class="input-group search-bar" style="max-width: 400px;">
<span class="input-group-text bg-white border-end-0" style="border-radius: 10px 0 0 10px;">
<i class="bi bi-search" style="color: #FF782D;"></i>
</span>
<input type="text" name="search" class="form-control border-start-0 custom-input" id="search"
placeholder="Cari nama ibu hamil..."
value="{{ request('search') }}" style="border-radius: 0 10px 10px 0;">
</div>
</form>
<!-- Table -->
<div class="table-responsive">
<table class="table table-hover align-middle datatable">
<thead class="table-light">
<table class="table table-hover align-middle custom-table">
<thead>
<tr>
<th style="width: 5%" >No</th>
<th>Petugas</th>
<th>Tanggal</th>
<th>Nama</th>
<th>Usia</th>
<th>Berat Badan</th>
<th>Tinggi Badan</th>
<th>Lila</th>
<th>Usia Kehamilan</th>
<th>IMT</th>
<th>Status Gizi</th>
<th style="width: 15%" class="text-center">Aksi</th>
<th style="width: 5%">No</th>
<th>Tanggal & Petugas</th>
<th>Identitas Ibu</th>
<th>Fisik (BB/TB/LILA)</th>
<th class="text-center">Kehamilan</th>
<th class="text-center">IMT & Status</th>
<th style="width: 10%" class="text-center">Aksi</th>
</tr>
</thead>
<tbody id="pengukuran-ibuhamil-table">
@forelse ($p_ibuhamil as $index => $ibu)
<tr>
<td>{{ $p_ibuhamil->firstItem() + $index }}</td>
<td>{{ $ibu->petugas->nama ?? '-' }}</td>
<td>{{ $ibu->tanggal }}</td>
<td>{{ $ibu->ibuHamil->nama ?? '-' }}</td>
<td>{{ \Carbon\Carbon::parse($ibu->ibuHamil->tgl_lahir)->age ?? '-' }}</td>
<td>{{ $ibu->berat_badan }}</td>
<td>{{ $ibu->tinggi_badan }}</td>
<td>{{ $ibu->lila }}</td>
<td class="text-center">{{ $ibu->usia_kehamilan }}</td>
<td>{{ $ibu->imt }}</td>
<td>{{ $ibu->status_gizi }}</td>
<td class="fw-bold text-muted">{{ $p_ibuhamil->firstItem() + $index }}</td>
<td>
<div class="fw-bold text-dark">{{ \Carbon\Carbon::parse($ibu->tanggal)->translatedFormat('d M Y') }}</div>
<small class="text-muted"><i class="bi bi-person-badge me-1"></i>{{ $ibu->petugas->nama ?? '-' }}</small>
</td>
<td>
<div class="fw-bold text-dark">{{ $ibu->ibuHamil->nama ?? '-' }}</div>
<small class="text-muted">{{ \Carbon\Carbon::parse($ibu->ibuHamil->tgl_lahir)->age }} Tahun</small>
</td>
<td>
<div class="small">
<span class="badge bg-blue-soft text-primary mb-1">BB: {{ $ibu->berat_badan }}kg</span>
<span class="badge bg-green-soft text-success mb-1">TB: {{ $ibu->tinggi_badan }}cm</span>
<br>
<span class="badge bg-purple-soft text-purple">LILA: {{ $ibu->lila }}cm</span>
</div>
</td>
<td class="text-center">
<!-- Detail -->
<a href="{{ route('pengukuran_ibu_hamil.detail', $ibu->id) }}"
class="btn btn-sm btn-info"
title="Detail">
<i class="bi bi-eye"></i>
</a>
<!-- Delete -->
<form action="{{ route('pengukuran_ibu_hamil.destroy', $ibu->id) }}"
method="POST"
style="display:inline;">
@csrf
@method('DELETE')
<button class="btn btn-sm btn-danger"
onclick="return confirm('Yakin ingin menghapus data?')"
title="Hapus">
<i class="bi bi-trash"></i>
</button>
</form>
<div class="badge bg-light text-dark border px-3 py-2" style="border-radius: 8px;">
{{ $ibu->usia_kehamilan }} <small>Minggu</small>
</div>
</td>
<td class="text-center">
<div class="fw-bold text-dark mb-1">IMT: {{ $ibu->imt }}</div>
@php
$statusClass = match(strtolower($ibu->status_gizi)) {
'gizi kurang' => 'bg-danger',
'gizi normal', 'normal' => 'bg-success',
'gizi lebih', 'obesitas' => 'bg-warning text-dark',
default => 'bg-secondary'
};
@endphp
<span class="badge {{ $statusClass }} px-2 py-1" style="font-size: 10px; border-radius: 5px;">
{{ strtoupper($ibu->status_gizi) }}
</span>
</td>
<td class="text-center">
<div class="d-flex justify-content-center gap-1">
<a href="{{ route('pengukuran_ibu_hamil.detail', $ibu->id) }}" class="btn btn-sm btn-detail-custom" title="Detail">
<i class="bi bi-eye"></i>
</a>
<form action="{{ route('pengukuran_ibu_hamil.destroy', $ibu->id) }}" method="POST" style="display:inline;">
@csrf @method('DELETE')
<button class="btn btn-sm btn-delete-custom" onclick="return confirm('Hapus data pengukuran ini?')" title="Hapus">
<i class="bi bi-trash"></i>
</button>
</form>
</div>
</td>
</tr>
@empty
<tr>
<td colspan="12" class="text-center text-muted">
Belum ada data pengukuran
<td colspan="7" class="text-center py-5 text-muted">
<i class="bi bi-clipboard-x d-block mb-2" style="font-size: 3rem; color: #dee2e6;"></i>
Belum ada data pengukuran ditemukan
</td>
</tr>
@endforelse
@ -102,15 +111,31 @@ class="btn btn-sm btn-info"
</table>
</div>
<div class="d-flex justify-content-center mt-3">
<div class="d-flex justify-content-center mt-4">
{{ $p_ibuhamil->withQueryString()->links() }}
</div>
</div>
</div>
<style>
.custom-table th { color: #7a7a7a; font-weight: 600; text-transform: uppercase; font-size: 11px; padding: 15px; border: none; }
.custom-table td { padding: 15px; border-bottom: 1px solid #f8f9fa; }
/* Soft Badges */
.bg-blue-soft { background-color: #e7f3ff; color: #007bff; }
.bg-green-soft { background-color: #eafff1; color: #28a745; }
.bg-purple-soft { background-color: #f3e8ff; color: #6f42c1; }
.text-purple { color: #6f42c1; }
/* Action Buttons */
.btn-detail-custom { background-color: #e7f3ff; color: #007bff; border: none; border-radius: 8px; }
.btn-detail-custom:hover { background-color: #007bff; color: white; }
.btn-delete-custom { background-color: #fff5f5; color: #fa5252; border: none; border-radius: 8px; }
.btn-delete-custom:hover { background-color: #fa5252; color: white; }
</style>
<script>
let delayTimer;
let delayTimer;
document.getElementById('search').addEventListener('keyup', function () {
clearTimeout(delayTimer);
@ -129,6 +154,7 @@ class="btn btn-sm btn-info"
});
}, 300);
});
</script>
@endsection

View File

@ -1,90 +1,117 @@
@extends('layouts.dashboard')
@section('title','Detail Edukasi Ibu Hamil')
@section('title','Detail Perkembangan Ibu Hamil')
@section('content')
<div class="pagetitle">
<h1>Detail Edukasi</h1>
<div class="pagetitle mb-4">
<h1 style="color: #FF782D; font-weight: 700;">Laporan Kesehatan Ibu Hamil</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('pengukuran_ibu_hamil.index') }}">Data Pengukuran</a></li>
<li class="breadcrumb-item active">Detail Laporan</li>
</ol>
</nav>
</div>
<section class="section">
<div class="row">
<div class="col-lg-4">
<div class="card shadow-sm border-0 mb-4" style="border-radius: 20px;">
<div class="card-body pt-4">
<div class="text-center mb-4">
<div class="d-inline-flex align-items-center justify-content-center bg-orange-light rounded-circle mb-3" style="width: 80px; height: 80px;">
<i class="bi bi-person-heart" style="font-size: 2.5rem; color: #FF782D;"></i>
</div>
<h4 class="fw-bold text-dark mb-0">{{ $pengukuran->ibuHamil->nama ?? '-' }}</h4>
<span class="text-muted">{{ \Carbon\Carbon::parse($pengukuran->ibuHamil->tgl_lahir)->age ?? '-' }} Tahun</span>
</div>
<section class="section">
<div class="row align-items-top">
<div class="col-lg-13">
<div class="status-box p-3 rounded-4 mb-3 text-center" style="background-color: #f8f9fa;">
<small class="text-uppercase fw-bold text-muted d-block mb-1">Status Gizi (IMT)</small>
@php
$statusClass = match(strtolower($pengukuran->status_gizi)) {
'normal' => 'bg-success',
'gizi kurang' => 'bg-danger',
'gizi lebih', 'obesitas' => 'bg-warning text-dark',
default => 'bg-secondary'
};
@endphp
<span class="badge {{ $statusClass }} fs-6 px-4 py-2" style="border-radius: 10px;">
{{ strtoupper($pengukuran->status_gizi) }}
</span>
</div>
<!-- Default Card -->
<div class="card">
<div class="card-body">
<form id="formPdf" action="/cetak-ibu-hamil/{{ $pengukuran->id }}" method="POST">
<ul class="list-group list-group-flush small">
<li class="list-group-item d-flex justify-content-between px-0">
<span class="text-muted">Usia Kehamilan:</span>
<span class="fw-bold text-orange">{{ $pengukuran->usia_kehamilan }} Minggu</span>
</li>
<li class="list-group-item d-flex justify-content-between px-0">
<span class="text-muted">Nilai IMT:</span>
<span class="fw-bold">{{ $pengukuran->imt }}</span>
</li>
<li class="list-group-item d-flex justify-content-between px-0">
<span class="text-muted">LILA:</span>
<span class="fw-bold">{{ $pengukuran->lila }} cm</span>
</li>
<li class="list-group-item d-flex justify-content-between px-0">
<span class="text-muted">BB / TB:</span>
<span class="fw-bold">{{ $pengukuran->berat_badan }}kg / {{ $pengukuran->tinggi_badan }}cm</span>
</li>
</ul>
<form id="formPdf" action="/cetak-ibu-hamil/{{ $pengukuran->id }}" method="POST" class="mt-4">
@csrf
<input type="hidden" name="chartImage" id="chartImage">
<button type="submit" class="btn btn-danger">
Cetak PDF
<button type="submit" class="btn btn-danger w-100 py-2 shadow-sm" style="border-radius: 12px;">
<i class="bi bi-file-pdf me-2"></i> Cetak Laporan PDF
</button>
</form>
</div>
</div>
</div>
<h5 class="card-title">Hasil Pengukuran</h5>
<!-- Table -->
<div class="table-responsive">
<table class="table table-hover align-middle datatable">
<thead class="table-light">
<tr>
<th>Petugas</th>
<th>Tanggal</th>
<th>Nama</th>
<th>Usia</th>
<th>Berat Badan</th>
<th>Tinggi Badan</th>
<th>Lila</th>
<th>Usia Kehamilan</th>
<th>IMT</th>
<th>Status Gizi</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ $pengukuran->petugas->nama ?? '-' }}</td>
<td>{{ $pengukuran->tanggal }}</td>
<td>{{ $pengukuran->ibuHamil->nama ?? '-' }}</td>
<td>{{ \Carbon\Carbon::parse($pengukuran->ibuHamil->tgl_lahir)->age ?? '-' }}</td>
<td>{{ $pengukuran->berat_badan }}</td>
<td>{{ $pengukuran->tinggi_badan }}</td>
<td>{{ $pengukuran->lila }}</td>
<td class="text-center">{{ $pengukuran->usia_kehamilan }}</td>
<td>{{ $pengukuran->imt }}</td>
<td>{{ $pengukuran->status_gizi }}</td>
</tr>
</tbody>
</table>
<div class="col-lg-8">
<div class="card shadow-sm border-0 mb-4" style="border-radius: 20px;">
<div class="card-body">
<h5 class="card-title" style="color: #2c3e50;"><i class="bi bi-activity me-2 text-orange"></i>Grafik BB & IMT</h5>
<div id="grafikIbuHamil"></div>
</div>
</div>
<!-- Grafik Perkembangan -->
<h5 class="card-title">Grafik Perkembangan Pengukuran Ibu Hamil</h5>
<div id="grafikIbuHamil" style="min-height:350px;"></div>
<hr>
<h5 class="card-title">Edukasi dan Informasi Kesehatan</h5>
<div class="edukasi-content p-3 bg-light rounded">
<div class="card shadow-sm border-0" style="border-radius: 20px;">
<div class="card-body">
<h5 class="card-title" style="color: #2c3e50;"><i class="bi bi-lightbulb me-2 text-warning"></i>Saran Kesehatan Ibu</h5>
<div class="edukasi-content mt-2">
@forelse($edukasi as $item)
<div class="mb-3">
<h6 class="fw-bold text-primary"><i class="bi bi-info-circle-fill me-2"></i>{{ $item->judul }}</h6>
<p class="mb-0">{{ $item->konten }}</p>
<div class="d-flex align-items-start p-3 mb-3 border-0 shadow-sm rounded-4" style="background-color: #fffaf0;">
<div class="icon-circle me-3" style="color: #FF782D;">
<i class="bi bi-info-circle-fill fs-4"></i>
</div>
<div>
<h6 class="fw-bold mb-1" style="color: #FF782D;">{{ $item->judul }}</h6>
<p class="mb-0 text-muted small" style="line-height: 1.6;">{{ $item->konten }}</p>
</div>
</div>
@empty
<p class="text-danger">Edukasi belum tersedia untuk kategori ini.</p>
<div class="alert alert-light border-0 text-center py-4">
<i class="bi bi-info-circle d-block mb-2 fs-2 text-muted"></i>
<p class="text-muted mb-0">Edukasi belum tersedia untuk kategori gizi ini.</p>
</div>
@endforelse
</div>
</div><!-- End Default Card -->
</div>
</div>
</div>
</div>
</section>
</div>
</div>
</div>
</section>
<style>
.bg-orange-light { background-color: #fff5f0; }
.text-orange { color: #FF782D; }
.rounded-4 { border-radius: 1rem !important; }
</style>
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
<script>