From 7c5202021fc35ab9b325a304f8fabfe94fb17dc8 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 15 Dec 2025 16:29:31 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(currency):=20perbaiki=20thou?= =?UTF-8?q?sand=20separator=20pada=20input=20currency=20dinamis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Gunakan nilai mentah dari DB pada template JS (hapus number_format di JS) - Inisialisasi IMask untuk nilai existing saat loadSavedNPW() - Terapkan IMask pada class .currency dan .currency-format - Tambahkan event blur untuk menjaga format saat edit ulang - Perbaiki parsing nilai luas dengan parseFloat + regex cleaning - Pastikan perhitungan total NPW tetap akurat - Hapus fungsi formatCurrencyValue yang tidak terpakai - Pastikan thousand separator muncul saat load dan input baru --- .../views/component/form-penilai.blade.php | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/resources/views/component/form-penilai.blade.php b/resources/views/component/form-penilai.blade.php index 4008502..02d44fc 100644 --- a/resources/views/component/form-penilai.blade.php +++ b/resources/views/component/form-penilai.blade.php @@ -366,7 +366,7 @@ class="w-full currency" name="nilai_npw_${npwCounter}_1" placeholder="Harga per meter" - value="${npw.nilai_1 || ''}" + value="${npw.nilai_1 || '0'}" oninput="calculateTotal()"> @@ -398,10 +398,36 @@ calculateTotal(); }); - // Tambahkan event listener untuk currency format - newNPWRow.querySelectorAll('.currency-format').forEach(input => { - input.addEventListener('input', function() { - formatCurrency(this); + // Initialize currency formatting for existing values + newNPWRow.querySelectorAll('.currency').forEach(input => { + // Apply IMask immediately for existing values + if (input.value && input.value !== '0') { + window.IMask(input, { + mask: Number, + scale: 0, + thousandsSeparator: ".", + padFractionalZeros: false, + normalizeZeros: true, + radix: ",", + mapToRadix: ["."], + autofix: true, + }); + } + + // Also add blur event for future editing + input.addEventListener('blur', function() { + if (!this.imask) { + window.IMask(this, { + mask: Number, + scale: 0, + thousandsSeparator: ".", + padFractionalZeros: false, + normalizeZeros: true, + radix: ",", + mapToRadix: ["."], + autofix: true, + }); + } }); }); @@ -417,7 +443,7 @@ // Panggil fungsi load NPW saat halaman dimuat loadSavedNPW(); - document.querySelectorAll('.currency-format').forEach(input => { + document.querySelectorAll('.currency').forEach(input => { input.addEventListener('input', function() { formatCurrency(this); }); @@ -503,7 +529,7 @@ const outputElement = row.querySelector('input[id^="nilai_npw_"][id$="_2"]'); if (luasInput && nilaiInput && outputElement) { - const luas = parseInput(luasInput.value); + const luas = parseFloat(luasInput.value.replace(/[^0-9.]/g, '')) || 0; const nilai = parseInput(nilaiInput.value); const hasil = luas * nilai;