From ce1cd280b90cee2aa49e13998a6e0d21887ad45c Mon Sep 17 00:00:00 2001 From: dhilanradya Date: Thu, 18 Sep 2025 15:04:05 +0700 Subject: [PATCH] [create] detail transaksi --- app/Http/Controllers/TransaksiController.php | 8 +- .../js/components/KasirTransaksiList.vue | 72 ++++- resources/js/components/StrukOverlay.vue | 19 +- resources/js/components/StrukView.vue | 271 ++++++++++++++++++ resources/js/pages/Kasir.vue | 18 +- 5 files changed, 356 insertions(+), 32 deletions(-) create mode 100644 resources/js/components/StrukView.vue diff --git a/app/Http/Controllers/TransaksiController.php b/app/Http/Controllers/TransaksiController.php index c975503..350a82f 100644 --- a/app/Http/Controllers/TransaksiController.php +++ b/app/Http/Controllers/TransaksiController.php @@ -25,15 +25,15 @@ class TransaksiController extends Controller $transaksi->total_items = $transaksi->itemTransaksi->count(); $transaksi->tanggal = $transaksi->created_at->format('d/m/Y'); }); - return response()->json($transaksi); - + return response()->json($transaksi); + } // Detail transaksi by ID public function show($id) { - $transaksi = Transaksi::with(['kasir', 'sales', 'items.produk.foto'])->findOrFail($id); + $transaksi = Transaksi::with(['kasir', 'sales', 'itemTransaksi.produk.foto'])->findOrFail($id); return response()->json($transaksi); } @@ -64,7 +64,7 @@ class TransaksiController extends Controller $transaksi = Transaksi::create([ 'kode_transaksi' => 'belum pak', - 'id_kasir' => $kasir->id, + 'id_kasir' => $kasir->id, 'id_sales' => $request->id_sales, 'nama_sales' => $sales->nama ?? 'N/A', 'nama_pembeli' => $request->nama_pembeli, diff --git a/resources/js/components/KasirTransaksiList.vue b/resources/js/components/KasirTransaksiList.vue index e5f76d4..6fc9638 100644 --- a/resources/js/components/KasirTransaksiList.vue +++ b/resources/js/components/KasirTransaksiList.vue @@ -16,8 +16,8 @@ {{ trx.kode_transaksi }} Rp{{ (trx.total_harga || 0).toLocaleString() }} - @@ -25,10 +25,30 @@ + + + + + +
+
+
+ Memuat detail transaksi... +
+
diff --git a/resources/js/components/StrukOverlay.vue b/resources/js/components/StrukOverlay.vue index 055ae13..03a3292 100644 --- a/resources/js/components/StrukOverlay.vue +++ b/resources/js/components/StrukOverlay.vue @@ -158,8 +158,8 @@ -
@@ -175,7 +175,7 @@
- +

{{ toastMessage }}

@@ -230,7 +230,7 @@ const toastClasses = computed(() => { const baseClasses = 'text-white' const typeClasses = { error: 'bg-red-500', - success: 'bg-green-500', + success: 'bg-green-500', info: 'bg-blue-500' } return `${baseClasses} ${typeClasses[toastType.value]}` @@ -264,7 +264,7 @@ const showSimpleToast = (type, message, duration = 3000) => { toastType.value = type toastMessage.value = message showToast.value = true - + setTimeout(() => { showToast.value = false }, duration) @@ -317,7 +317,7 @@ const handleSimpan = () => { nama_pembeli: namaPembeli.value, no_hp: nomorTelepon.value, alamat: alamat.value, - ongkosBikin: ongkosBikin.value || 0, + ongkos_bikin: ongkosBikin.value || 0, // Pastikan nama field benar total_harga: grandTotal.value, items: props.pesanan }) @@ -334,11 +334,10 @@ const simpanTransaksi = async (dataTransaksi) => { }); showSimpleToast('success', 'Transaksi berhasil disimpan!', 2000) - + // Delay untuk memberikan waktu user membaca notifikasi setTimeout(() => { - props.pesanan.value = []; - props.isOpen = false; + emit('close'); window.location.reload(); }, 2200); @@ -379,4 +378,4 @@ function formatInput(e) { font-family: "PT Serif", serif; font-weight: 400; } - \ No newline at end of file + diff --git a/resources/js/components/StrukView.vue b/resources/js/components/StrukView.vue new file mode 100644 index 0000000..66aa0ee --- /dev/null +++ b/resources/js/components/StrukView.vue @@ -0,0 +1,271 @@ + + + + + diff --git a/resources/js/pages/Kasir.vue b/resources/js/pages/Kasir.vue index b04ee97..52bc489 100644 --- a/resources/js/pages/Kasir.vue +++ b/resources/js/pages/Kasir.vue @@ -10,9 +10,7 @@ class="bg-white rounded-xl shadow-lg border border-B overflow-hidden h-auto lg:h-full" >
- -
@@ -63,7 +61,6 @@ @@ -84,7 +81,7 @@ import KasirTransaksiList from "../components/KasirTransaksiList.vue"; const transaksi = ref([]); const loading = ref(true); -// ==== TAMBAHAN: Fungsi untuk fetch transaksi (dipindah ke fungsi terpisah) ==== +// Fungsi untuk fetch transaksi const fetchTransaksi = async () => { try { loading.value = true; @@ -95,31 +92,22 @@ const fetchTransaksi = async () => { }); transaksi.value = res.data; - console.log("Fetched transaksi:", transaksi.value); - + } catch (err) { console.error("Gagal fetch transaksi:", err); } finally { loading.value = false; } }; -// ==== END TAMBAHAN ==== onMounted(async () => { - // ==== MODIFIKASI: Panggil fungsi fetchTransaksi ==== await fetchTransaksi(); - // ==== END MODIFIKASI ==== }); -// ==== TAMBAHAN: Handle ketika transaksi baru disimpan ==== +// Handle ketika transaksi baru disimpan const handleTransaksiSaved = async (newTransaksi) => { // Refresh daftar transaksi await fetchTransaksi(); }; -// ==== END TAMBAHAN ==== - -const lihatDetail = (trx) => { - alert(`Detail transaksi: ${trx.kode}`); -};