diff --git a/resources/js/pages/Akun.vue b/resources/js/pages/Akun.vue
index d8c6f68..4eef43c 100644
--- a/resources/js/pages/Akun.vue
+++ b/resources/js/pages/Akun.vue
@@ -48,7 +48,26 @@
Tambah User
-
+
+
+
+ Error!
+ {{ alert.error }}
+
+
+ Success!
+ {{ alert.success }}
+
+
+
{
+ alert.value = null;
+ }, 5000);
+ }
// Fetch data dari API
const fetchAkun = async () => {
loading.value = true;
@@ -191,6 +219,7 @@ const confirmDelete = async () => {
});
fetchAkun();
confirmDeleteOpen.value = false;
+ showAlert("success", "User berhasil dihapus.");
} catch (error) {
console.error("Error deleting akun:", error);
}
@@ -205,11 +234,13 @@ const closeDeleteModal = () => {
const closeAkun = () => {
creatingAkun.value = false;
fetchAkun();
+ showAlert("success", "User berhasil ditambahkan.");
};
const closeEditAkun = () => {
editingAkun.value = false;
fetchAkun();
+ showAlert("success", "User berhasil diubah.");
};
// Lifecycle
diff --git a/resources/js/pages/EditProduk.vue b/resources/js/pages/EditProduk.vue
index 97ac7f8..9e57d13 100644
--- a/resources/js/pages/EditProduk.vue
+++ b/resources/js/pages/EditProduk.vue
@@ -288,7 +288,7 @@ const loadProduk = async () => {
});
const produk = response.data;
// console.log(produk);
-
+
form.value = {
nama: produk.nama,
id_kategori: produk.id_kategori,
@@ -310,7 +310,7 @@ const loadFoto = async () => {
// console.log(uploadedImages.value);
} catch (e) {
console.error(e);
-
+
uploadError.value = "Gagal memuat foto";
}
};
@@ -415,7 +415,7 @@ const submitForm = async () => {
},
}
);
- router.push("/produk");
+ router.push("/produk?message=Produk berhasil diperbarui");
} catch (err) {
errorMessages.value = err.response?.data?.message || "Gagal menyimpan produk";
console.error(err);
diff --git a/resources/js/pages/InputProduk.vue b/resources/js/pages/InputProduk.vue
index e264117..f497f7a 100644
--- a/resources/js/pages/InputProduk.vue
+++ b/resources/js/pages/InputProduk.vue
@@ -174,7 +174,7 @@ import CreateItemModal from "../components/CreateItemModal.vue";
const router = useRouter();
const form = ref({
- nama: '', id_kategori: null, berat: 0, kadar: 0, harga_per_gram: 0, harga_jual: 0,
+ nama: '', id_kategori: null, berat: null, kadar: null, harga_per_gram: null, harga_jual: null,
});
const category = ref([]);
const showUploadMenu = ref(false);
diff --git a/resources/js/pages/Kategori.vue b/resources/js/pages/Kategori.vue
index f1a1b66..0524b57 100644
--- a/resources/js/pages/Kategori.vue
+++ b/resources/js/pages/Kategori.vue
@@ -16,7 +16,26 @@
Tambah Kategori
-
+
+
+
+ Error!
+ {{ alert.error }}
+
+
+ Success!
+ {{ alert.success }}
+
+
+
@@ -96,9 +115,18 @@ const creatingKategori = ref(false);
const detail = ref(null);
const confirmDeleteOpen = ref(false);
const kategoriToDelete = ref(null);
-
+const alert = ref(null);
+const timer = ref(null);
const isAdmin = localStorage.getItem("role") === "owner";
+function showAlert(type, message) {
+ alert.value = { [type]: message };
+ clearTimeout(timer.value);
+ timer.value = setTimeout(() => {
+ alert.value = null;
+ }, 5000);
+ }
+
// Fetch data kategori dari API
const fetchKategoris = async () => {
loading.value = true;
@@ -109,7 +137,6 @@ const fetchKategoris = async () => {
},
});
kategori.value = response.data;
- // console.log("Data kategori:", response.data);
} catch (error) {
console.error("Error fetching kategori:", error);
} finally {
@@ -119,14 +146,19 @@ const fetchKategoris = async () => {
// Tambah kategori - open modal
const tambahKategori = () => {
- detail.value = null; // Reset detail untuk mode create
+ detail.value = null;
creatingKategori.value = true;
};
// Close modal
const closeKategori = () => {
creatingKategori.value = false;
- fetchKategoris(); // Refresh data setelah modal ditutup
+ fetchKategoris();
+ if (detail.value==null) {
+
+ showAlert("success", "Kategori berhasil ditambahkan");
+ } else
+ showAlert("success", "Kategori berhasil diubah");
};
// Ubah kategori
@@ -139,6 +171,7 @@ const ubahKategori = (item) => {
const hapusKategori = (item) => {
kategoriToDelete.value = item;
confirmDeleteOpen.value = true;
+ showAlert("success", "Kategori berhasil dihapus");
};
// 🔵 Ditambahkan: aksi konfirmasi hapus
diff --git a/resources/js/pages/Produk.vue b/resources/js/pages/Produk.vue
index 2911502..1675e45 100644
--- a/resources/js/pages/Produk.vue
+++ b/resources/js/pages/Produk.vue
@@ -1,11 +1,11 @@
-
@@ -51,6 +51,27 @@
+
+
+
+ Error!
+ {{ alert.error }}
+
+
+ Success!
+ {{ alert.success }}
+
+
+
+
@@ -159,13 +180,21 @@ const searchQuery = ref("");
const selectedCategory = ref(0);
const creatingItem = ref(false);
const deleting = ref(false);
-
+const alert = ref(null);
+const timer = ref(null);
const detail = ref({});
const showOverlay = ref(false);
const currentFotoIndex = ref(0);
-
const kategori = ref([]);
-const loading = ref(false); // 🔥 Loading persis kategori
+const loading = ref(false);
+
+function showAlert(type, message) {
+ alert.value = { [type]: message };
+ clearTimeout(timer.value);
+ timer.value = setTimeout(() => {
+ alert.value = null;
+ }, 5000);
+ }
// Load kategori
const loadKategori = async () => {
@@ -221,6 +250,18 @@ const closeItemModal = () => {
onMounted(async () => {
await loadKategori();
await loadProduk();
+
+ // 🔹 Cek apakah ada ?message= di URL
+ const params = new URLSearchParams(window.location.search);
+ const message = params.get("message");
+
+ if (message) {
+ showAlert("success", message);
+
+ // 🔹 Hapus query param biar tidak muncul lagi pas refresh
+ const newUrl = window.location.pathname;
+ window.history.replaceState({}, document.title, newUrl);
+ }
});
// Filter produk
diff --git a/resources/js/pages/Sales.vue b/resources/js/pages/Sales.vue
index 1c0264b..55fb3e0 100644
--- a/resources/js/pages/Sales.vue
+++ b/resources/js/pages/Sales.vue
@@ -1,190 +1,236 @@
-
-
-
+
+
+
-
+
-
-
+
+
-
-
SALES
-
-