diff --git a/resources/js/components/ConfirmDeleteModal.vue b/resources/js/components/ConfirmDeleteModal.vue new file mode 100644 index 0000000..ffcca4e --- /dev/null +++ b/resources/js/components/ConfirmDeleteModal.vue @@ -0,0 +1,40 @@ + + + diff --git a/resources/js/pages/Produk.vue b/resources/js/pages/Produk.vue index d6219d0..e57a268 100644 --- a/resources/js/pages/Produk.vue +++ b/resources/js/pages/Produk.vue @@ -1,12 +1,19 @@ @@ -142,26 +159,26 @@ import mainLayout from "../layouts/mainLayout.vue"; import ProductCard from "../components/ProductCard.vue"; import searchbar from "../components/searchbar.vue"; import CreateItemModal from "../components/CreateItemModal.vue"; +import ConfirmDeleteModal from "../components/ConfirmDeleteModal.vue"; const products = ref([]); const searchQuery = ref(""); const selectedCategory = ref("semua"); const creatingItem = ref(false); +const deleting = ref(false); +const detail = ref({}); +const showOverlay = ref(false); +const currentFotoIndex = ref(0); + +// Buka modal item const openItemModal = () => { - console.log("open item modal", detail.value); - creatingItem.value = true; }; const closeItemModal = () => { creatingItem.value = false; }; -// overlay state -const showOverlay = ref(false); -const detail = ref({}); -const currentFotoIndex = ref(0); - // Fetch data awal onMounted(async () => { try { @@ -172,18 +189,16 @@ onMounted(async () => { } }); -// Filter gabungan (kategori + search) +// Filter produk (kategori + search) const filteredProducts = computed(() => { let hasil = products.value; - // filter kategori if (selectedCategory.value !== "semua") { hasil = hasil.filter( (p) => p.kategori.toLowerCase() === selectedCategory.value ); } - // filter search if (searchQuery.value) { hasil = hasil.filter((p) => p.nama.toLowerCase().includes(searchQuery.value.toLowerCase()) @@ -193,30 +208,29 @@ const filteredProducts = computed(() => { return hasil; }); -// buka overlay +// Buka overlay detail function openOverlay(id) { const produk = products.value.find((p) => p.id === id); if (produk) { detail.value = produk; - currentFotoIndex.value = 0; // reset ke foto pertama + currentFotoIndex.value = 0; showOverlay.value = true; } } -// tutup overlay +// Tutup overlay detail function closeOverlay() { showOverlay.value = false; currentFotoIndex.value = 0; } -// foto navigation +// Navigasi foto function nextFoto() { if (detail.value.foto && detail.value.foto.length > 0) { currentFotoIndex.value = (currentFotoIndex.value + 1) % detail.value.foto.length; } } - function prevFoto() { if (detail.value.foto && detail.value.foto.length > 0) { currentFotoIndex.value = @@ -229,4 +243,18 @@ function prevFoto() { function formatNumber(num) { return new Intl.NumberFormat().format(num || 0); } + +// Hapus produk +async function deleteProduk() { + try { + await axios.delete(`/api/produk/${detail.value.id}`); + products.value = products.value.filter((p) => p.id !== detail.value.id); + deleting.value = false; + showOverlay.value = false; + alert("Produk berhasil dihapus!"); + } catch (err) { + console.error("Gagal hapus produk:", err); + alert("Gagal menghapus produk!"); + } +}