From d74be80085b73df2132e1af1daa5f724b217e52a Mon Sep 17 00:00:00 2001 From: oxel Date: Fri, 24 Apr 2026 21:48:54 +0700 Subject: [PATCH] add everything that i like to ad --- .../kelola-data/CetakInstanModal.tsx | 176 ++++++++++++------ 1 file changed, 117 insertions(+), 59 deletions(-) diff --git a/app/dashboard/kelola-data/CetakInstanModal.tsx b/app/dashboard/kelola-data/CetakInstanModal.tsx index 13253cf..cbe6bd3 100644 --- a/app/dashboard/kelola-data/CetakInstanModal.tsx +++ b/app/dashboard/kelola-data/CetakInstanModal.tsx @@ -30,6 +30,8 @@ interface PenggunaData { nama_anak: string jenis_kelamin: string | null tanggal_lahir: string | null + username?: string + password?: string } const MONTHS = [ @@ -203,7 +205,7 @@ export function CetakInstanModal() { logging: false, }) - const imgData = canvas.toDataURL('image/jpeg', 0.95) + const imgData = canvas.toDataURL('image/png') // Safety check: ensure imgData is a valid Data URI if (!imgData || !imgData.startsWith('data:image/')) { @@ -217,7 +219,7 @@ export function CetakInstanModal() { const imgH = (canvas.height * pageW) / canvas.width if (imgH <= pageH) { - pdf.addImage(imgData, 'JPEG', 0, 0, pageW, imgH) + pdf.addImage(imgData, 'PNG', 0, 0, pageW, imgH) } else { let yPos = 0 const sliceH = canvas.width * (pageH / pageW) @@ -228,7 +230,7 @@ export function CetakInstanModal() { const ctx = sliceCanvas.getContext('2d')! ctx.drawImage(canvas, 0, -yPos) if (yPos > 0) pdf.addPage() - pdf.addImage(sliceCanvas.toDataURL('image/jpeg', 0.95), 'JPEG', 0, 0, pageW, pageH) + pdf.addImage(sliceCanvas.toDataURL('image/png'), 'PNG', 0, 0, pageW, pageH) yPos += sliceH } } @@ -281,6 +283,8 @@ export function CetakInstanModal() { const isStunting = activePrintData?.row.status_stunting === true const tanggalCetak = new Date().toLocaleDateString('id-ID', { day: 'numeric', month: 'long', year: 'numeric' }) + const tanggalUpload = activePrintData ? formatTgl(activePrintData.row.tanggal_upload) : '-' + const tanggalLahir = activePrintData ? formatTgl(activePrintData.pengguna.tanggal_lahir) : '-' return ( <> @@ -431,128 +435,182 @@ export function CetakInstanModal() { backgroundColor: '#ffffff', fontFamily: 'Arial, Helvetica, sans-serif', color: '#111111', - padding: '48px 56px', + padding: '32px 48px', boxSizing: 'border-box', }} > {/* Header */} -
+
Sistem Informasi Posyandu
Laporan Pemeriksaan Balita
-
Tanggal Cetak
-
{tanggalCetak}
+
Tanggal Cetak
+
{tanggalCetak}
Tgl Pemeriksaan
-
{formatTgl(activePrintData.row.tanggal_upload)}
+
{tanggalUpload}
{/* Identitas */} -
-
Identitas
-
+
+
Identitas
+
{[ ['Nama Ibu / Orang Tua', activePrintData.pengguna.nama_orang_tua], ['Nama Anak', activePrintData.pengguna.nama_anak], ['Alamat', activePrintData.pengguna.alamat ?? '-'], ['Jenis Kelamin', activePrintData.pengguna.jenis_kelamin ?? '-'], - ['Tanggal Lahir', formatTgl(activePrintData.pengguna.tanggal_lahir)], + ['', ''], + ['Tanggal Lahir', tanggalLahir], ].map(([label, value], i) => ( -
-
{label}
-
{value}
-
+ label ? ( +
+
{label}
+
{value}
+
+ ) :
))}
{/* Charts */} -
-
Grafik Perkembangan (5 Bulan)
-
-
-
📏 Tinggi Badan (cm)
- +
+
Grafik Perkembangan Balita (5 Bulan Terakhir)
+
+ {/* Tinggi */} +
+
📏 Tinggi Badan (cm)
+ + + + + + + - - - + + +
-
-
⚖️ Berat Badan (kg)
- + {/* Berat */} +
+
⚖️ Berat Badan (kg)
+ + + + + + + - - - + + +
{/* Z-Score PDF Chart */} -
-
📈 Z-Score (SD)
+
+
📈 Z-Score (SD)
+ + + + + + - - - + + +
{/* Table */} -
-
Data Pemeriksaan
- +
+
Data Pemeriksaan
+
- {['Tinggi', 'Berat', 'Z-Score', 'Status', 'Posyandu', 'Tgl Upload'].map(h => ( - + {['Tinggi', 'Berat', 'Z-Score', 'Status Stunting', 'Posyandu', 'Tgl Pemeriksaan'].map(h => ( + ))} - - - - + + + - - + +
{h}{h}
{activePrintData.row.tinggi_badan} cm{activePrintData.row.berat_badan} kg{activePrintData.row.z_score} SD - - {isStunting ? 'Stunting' : 'Normal'} + {activePrintData.row.tinggi_badan ?? '-'} cm{activePrintData.row.berat_badan ?? '-'} kg{activePrintData.row.z_score ?? '-'} SD + + {isStunting ? '⚠ Stunting' : '✓ Normal'} {activePrintData.row.nama_posyandu}{formatTgl(activePrintData.row.tanggal_upload)}{activePrintData.row.nama_posyandu ?? '-'}{tanggalUpload}
{activePrintData.row.pesan_ai && ( -
-
PESAN AI
-
{activePrintData.row.pesan_ai}
+
+
Rekomendasi / Pesan AI
+
{activePrintData.row.pesan_ai}
)}
- {/* Signatures */} -
+ {/* ── WhatsApp Info Box ── */} +
+
📱
-
Mengetahui,
-
Supervisor
+
Layanan Informasi WhatsApp
+
+ Untuk orang tua yang tidak memiliki akun WhatsApp, yuk segera buat akun karena kami melayani layanan penyampaian informasi hasil stunting dengan menggunakan WhatsApp agar mendapatkan informasi lebih cepat. +
-
-
Petugas Posyandu,
-
Nama & Tanda Tangan
+
+ + {/* ── Portal Access Info Box ── */} +
+
+ 🌐 Akses Portal Online Orang Tua
+
+ * Yuk kunjungi website Bapak/Ibu agar mendapatkan informasi perkembangan buah hati Anda. +
+
+
+
Alamat Website (URL)
+
https://website-cloud-stunting.vercel.app/
+
+
+
+
Username
+
{activePrintData.pengguna.username || '-'}
+
+
+
Password
+
{activePrintData.pengguna.password || '-'}
+
+
+
+
+ + {/* Footer */} +
+ Dicetak oleh Sistem Informasi Posyandu + Dokumen ini sah tanpa tanda tangan basah apabila dicetak dari sistem