first commit + add fe component vue accone

This commit is contained in:
2026-05-07 17:10:10 +07:00
parent fd8e4d694b
commit 38a182641a
327 changed files with 263946 additions and 0 deletions

39
libs/formatters.js Normal file
View File

@@ -0,0 +1,39 @@
// Buat sebagai variabel global
window.formatNumber = function(value) {
if (!value && value !== 0) return '';
// Split nilai menjadi bagian integer dan desimal (jika ada)
const parts = value.toString().split('.');
const integerPart = parts[0];
const decimalPart = parts.length > 1 ? parts[1].substring(0, 3) : '';
// Format bagian integer dengan separator titik ribuan
const formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
// Gabungkan kembali dengan bagian desimal (jika ada)
return decimalPart ? `${formattedInteger},${decimalPart}` : formattedInteger;
};
window.parseNumberInput = function(value) {
if (value === undefined || value === null) return '';
// Validasi input: hanya menerima angka, titik, dan koma
// Periksa apakah ada lebih dari satu koma, jika ya, ambil yang pertama
let cleanValue = value.toString();
// Jika ada koma, pastikan tidak ada lebih dari 3 digit setelahnya
if (cleanValue.includes(',')) {
const parts = cleanValue.split(',');
// Bagian integer (sebelum koma)
const integerPart = parts[0].replace(/\./g, '');
// Bagian desimal (setelah koma), maksimal 3 digit
const decimalPart = parts[1].substring(0, 3);
// Gabungkan kembali dengan titik untuk JavaScript
cleanValue = integerPart + '.' + decimalPart;
} else {
// Jika tidak ada koma, cukup hapus semua titik
cleanValue = cleanValue.replace(/\./g, '');
}
return cleanValue;
};