+
+
-
diff --git a/resources/js/pages/Produk.vue b/resources/js/pages/Produk.vue
index a922635..0886dbb 100644
--- a/resources/js/pages/Produk.vue
+++ b/resources/js/pages/Produk.vue
@@ -16,7 +16,7 @@
message="Apakah Anda yakin ingin menghapus produk ini?"
/>
-
+
PRODUK
@@ -81,9 +81,16 @@
-
+
+
+
+
+
+
+
+
+
+
+
Tidak ada data produk
+
@@ -214,7 +242,9 @@ const showOverlay = ref(false);
const currentFotoIndex = ref(0);
const kategori = ref([]);
+const loading = ref(false); // 🔥 Loading persis kategori
+// Load kategori
const loadKategori = async () => {
try {
const response = await axios.get("/api/kategori", {
@@ -236,23 +266,27 @@ const loadKategori = async () => {
}
};
+// Load produk
const loadProduk = async () => {
+ loading.value = true; // 🔵 start loading
try {
const response = await axios.get(`/api/produk`, {
headers: {
Authorization: `Bearer ${localStorage.getItem("token")}`,
},
});
-
+
if (response.data && Array.isArray(response.data)) {
products.value = response.data;
}
} catch (error) {
console.error("Error loading products:", error);
+ } finally {
+ loading.value = false; // 🔵 stop loading
}
};
-// Buka modal item
+// Modal item
const openItemModal = () => {
creatingItem.value = true;
};
@@ -260,13 +294,13 @@ const closeItemModal = () => {
creatingItem.value = false;
};
-// Fetch data awal
+// Fetch awal
onMounted(async () => {
- loadKategori();
- loadProduk();
+ await loadKategori();
+ await loadProduk();
});
-// Filter produk (kategori + search)
+// Filter produk
const filteredProducts = computed(() => {
let hasil = products.value;
@@ -283,7 +317,7 @@ const filteredProducts = computed(() => {
return hasil;
});
-// Buka overlay detail
+// Overlay detail
function openOverlay(id) {
const produk = products.value.find((p) => p.id === id);
if (produk) {
@@ -292,8 +326,6 @@ function openOverlay(id) {
showOverlay.value = true;
}
}
-
-// Tutup overlay detail
function closeOverlay() {
showOverlay.value = false;
currentFotoIndex.value = 0;
@@ -322,7 +354,11 @@ function formatNumber(num) {
// Hapus produk
async function deleteProduk() {
try {
- await axios.delete(`/api/produk/${detail.value.id}`);
+ await axios.delete(`/api/produk/${detail.value.id}`, {
+ headers: {
+ Authorization: `Bearer ${localStorage.getItem("token")}`,
+ },
+ });
products.value = products.value.filter((p) => p.id !== detail.value.id);
deleting.value = false;
showOverlay.value = false;
@@ -340,7 +376,6 @@ async function deleteProduk() {
width: 100% !important;
justify-content: flex-start !important;
}
-
.searchbar-mobile:deep(input) {
width: 100% !important;
}