// src/routes/BAST.tsx import React, { useState, useEffect } from "react"; import axios from "axios"; import { useNavigate } from "react-router-dom"; // Kita pakai untuk redirect user biasa import { FileText, ArrowRight, ClipboardList, User, ShieldAlert } from "lucide-react"; interface UserType { user_id: number; nama_lengkap: string; role: string; } interface BarangType { barang_id: number; nama_barang: string; } export default function BAST() { const [daftarUser, setDaftarUser] = useState([]); const [daftarBarang, setDaftarBarang] = useState([]); // State Input Form const [barangId, setBarangId] = useState(""); const [userSerahId, setUserSerahId] = useState(""); // Ditambahkan sesuai soal: Admin bebas pilih User Serah const [userTerimaId, setUserTerimaId] = useState(""); // Ditambahkan sesuai soal: Admin bebas pilih User Terima const [loadingSubmit, setLoadingSubmit] = useState(false); // State Otentikasi Role const [currentAdmin, setCurrentAdmin] = useState(null); const [isAuthorized, setIsAuthorized] = useState(false); const navigate = useNavigate(); useEffect(() => { // 1. CEK SESSION LOGIN DAN ROLE NYA const savedUser = sessionStorage.getItem("user"); if (!savedUser) { alert("Silakan login terlebih dahulu!"); navigate("/login"); return; } try { const parsed = JSON.parse(savedUser); // KUNCI UTAMA SESUAI SOAL UKK: JIKA BUKAN ADMIN, BLOKIR AKSESNYA! if (parsed.role !== "Admin") { setIsAuthorized(false); alert("Akses Ditolak! Berdasarkan soal UKK, hanya Admin yang boleh membuat dokumen BAST."); navigate("/userDashboard"); // Buang user biasa ke dashboard mereka sendiri return; } // Jika dia Admin, izinkan akses halaman ini setCurrentAdmin(parsed); setIsAuthorized(true); } catch (e) { console.error("Gagal membaca session:", e); navigate("/login"); return; } // 2. AMBIL DATA PILIHAN USER (UNTUK DROPDOWN SERAH & TERIMA) axios.get("http://localhost:5000/api/users") .then((res) => { if (res.data.success) setDaftarUser(res.data.data); }) .catch((err) => console.error("Gagal memuat list user:", err)); // 3. AMBIL DATA BARANG DARI BACKEND axios.get("http://localhost:5000/api/barang") .then((res) => { if (res.data.success) setDaftarBarang(res.data.data); }) .catch((err) => console.error("Gagal memuat list barang:", err)); }, [navigate]); // PROSES KIRIM FORM (ADMIN YANG MEMBUATKAN) const handleSubmitBAST = async (e: React.FormEvent) => { e.preventDefault(); if (!barangId || !userSerahId || !userTerimaId) { alert("Harap lengkapi semua pilihan barang, pihak penyerah, dan pihak penerima!"); return; } if (userSerahId === userTerimaId) { alert("Pihak Penyerah dan Pihak Penerima tidak boleh orang yang sama!"); return; } setLoadingSubmit(true); try { const response = await axios.post("http://localhost:5000/api/bast", { barang_id: Number(barangId), user_serah_id: Number(userSerahId), // Input dinamis pilihan Admin user_terima_id: Number(userTerimaId), // Input dinamis pilihan Admin }); if (response.data.success) { alert("Dokumen BAST Baru Berhasil Diterbitkan! Status otomatis 'Menunggu Approval' dari kedua belah pihak."); // Reset pilihan form setBarangId(""); setUserSerahId(""); setUserTerimaId(""); } else { alert("Gagal menerbitkan BAST: " + response.data.message); } } catch (error: any) { console.error(error); alert(error.response?.data?.message || "Terjadi kendala pada sistem backend."); } finally { setLoadingSubmit(false); } }; // Guarding UI biar tidak bocor sekilas saat loading validasi role if (!isAuthorized) { return (

Memvalidasi Otoritas Akun...

); } return (
{/* HEADER FORM (KHUSUS PORTAL ADMIN) */}

Penerbitan BAST (Admin)

Petugas: {currentAdmin?.nama_lengkap} (Manajemen Inventaris)

{/* BODY FORM */}
{/* SELEKSI BARANG */}
{/* SELEKSI PIHAK 1 (PENYERAH) */}
{/* SELEKSI PIHAK 2 (PENERIMA) */}
{/* BUTTON PEMBUATAN DOKUMEN */}
); }