From d231ebe90999183e2a8d18197eb0745d21219172 Mon Sep 17 00:00:00 2001 From: adityaalfarison Date: Fri, 29 Aug 2025 11:07:46 +0700 Subject: [PATCH 1/2] brankaslist, traylist --- resources/js/components/BrankasList.vue | 3 +- resources/js/components/TrayList.vue | 220 ++++++++++++++++-------- 2 files changed, 150 insertions(+), 73 deletions(-) diff --git a/resources/js/components/BrankasList.vue b/resources/js/components/BrankasList.vue index 0135531..5532207 100644 --- a/resources/js/components/BrankasList.vue +++ b/resources/js/components/BrankasList.vue @@ -20,7 +20,7 @@ - {{ item.berat }}g + {{ item.produk.berat }}g @@ -39,6 +39,7 @@ const props = defineProps({ }); const items = ref([]); +const produk = ref([]) const loading = ref(true); const error = ref(null); diff --git a/resources/js/components/TrayList.vue b/resources/js/components/TrayList.vue index 85e8124..9453e41 100644 --- a/resources/js/components/TrayList.vue +++ b/resources/js/components/TrayList.vue @@ -1,66 +1,49 @@ + +
+
+
+
+ QR Code +
+
+
{{ selectedItem.produk.nama }}
+
{{ selectedItem.produk.kategori }}
+
+ +
+
+ + +
+
+ + +
+
+
+ \ No newline at end of file + +// Daftar nampan lain (selain tempat item saat ini) +const availableTrays = computed(() => { + if (!selectedItem.value || !trays.value) return []; + return trays.value.filter( + (tray) => Number(tray.id) !== Number(selectedItem.value.id_nampan) + ); +}); + +onMounted(() => { + refreshData(); +}); + From 8a0ded4b3e26d80316211cb0f0e3a9cb367516d5 Mon Sep 17 00:00:00 2001 From: adityaalfarison Date: Fri, 29 Aug 2025 11:22:18 +0700 Subject: [PATCH 2/2] update itemcontroller, traylist DONE --- app/Http/Controllers/ItemController.php | 4 ++-- resources/js/components/TrayList.vue | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/Http/Controllers/ItemController.php b/app/Http/Controllers/ItemController.php index 399e5e0..3e336d4 100644 --- a/app/Http/Controllers/ItemController.php +++ b/app/Http/Controllers/ItemController.php @@ -52,8 +52,8 @@ class ItemController extends Controller public function update(Request $request, int $id) { $validated = $request->validate([ - 'id_produk' => 'required|in:produks.id', - 'id_nampan' => 'nullable|in:nampans.id' + 'id_produk' => 'required|exists:produks,id', + 'id_nampan' => 'nullable|exists:nampans,id' ],[ 'id_produk' => 'Id produk tidak valid.', 'id_nampan' => 'Id nampan tidak valid' diff --git a/resources/js/components/TrayList.vue b/resources/js/components/TrayList.vue index 9453e41..de19062 100644 --- a/resources/js/components/TrayList.vue +++ b/resources/js/components/TrayList.vue @@ -34,10 +34,12 @@
+ v-for="item in tray.items" + :key="item.id" + class="flex justify-between items-center border rounded-lg p-2" + @click="openMovePopup(item)" +> +
{{ item.produk.berat }}g -
@@ -168,16 +164,20 @@ const closePopup = () => { const saveMove = async () => { if (!selectedTrayId.value || !selectedItem.value) return; try { - await axios.put(`/api/item/${selectedItem.value.id}`, { nampan_id: selectedTrayId.value }); + await axios.put(`/api/item/${selectedItem.value.id}`, { + id_nampan: selectedTrayId.value, + id_produk: selectedItem.value.id_produk, // ikutkan id_produk karena API minta + }); await refreshData(); closePopup(); } catch (err) { - console.error("Gagal memindahkan item:", err); + console.error("Gagal memindahkan item:", err.response?.data || err); alert("Gagal memindahkan item. Silakan coba lagi."); } }; + // --- Ambil data nampan + item --- const refreshData = async () => { try {