Sistem Rekam Data Parfum

Sistem Rekam Data Konsumen

Ekstrak, rekam, dan kelola data persona parfum konsumen.

Format yang didukung:

  • ID Unik: ME24101512A
  • Nama: [nama konsumen]
  • Usia: [usia] Tahun
  • Preferensi Aroma: [Feminin/Maskulin/Unisex]
  • Tipe Persona: [jenis persona]
  • Deskripsi: [deskripsi persona]
  • Rekomendasi Komponen Aroma: [daftar komponen]
  • Rekomendasi Parfum: [nama parfum]

2. Form Data Konsumen

Masukkan komponen aroma untuk melihat saran.

3. Data Tersimpan

x
ID UnikNamaUsiaPreferensiPersonaRekomendasiAksi

Belum ada data yang disimpan. Ekstrak dan simpan data pertama Anda.

`;const printWindow = window.open('', '_blank'); printWindow.document.open(); printWindow.document.write(printContent); printWindow.document.close(); setTimeout(() => { printWindow.focus(); printWindow.print(); printWindow.close(); }, 250); }function saveData() { const data = { id: resIdInput.value.trim(), name: resNameInput.value.trim(), age: resAgeInput.value.trim(), preference: resPreferenceInput.value.trim(), personaType: resPersonaTypeInput.value.trim(), description: resDescriptionInput.value.trim(), components: resComponentsInput.value.trim(), recommendation: resRecommendationFinalInput.value.trim(), };if (!data.id || !data.name) { showToast('ID Unik dan Nama harus diisi!', 'error'); return; }const editIndex = editIndexInput.value;if (editIndex !== "") { // Update data yang ada localDataCache[parseInt(editIndex)] = data; showToast('Data berhasil diperbarui!', 'success'); } else { // Tambah data baru const existingDoc = localDataCache.find(item => item.id === data.id); if (existingDoc) { showToast('ID Unik sudah ada. Gunakan ID lain atau edit data yang ada.', 'error'); return; } data.timestamp = new Date().toISOString(); localDataCache.push(data); showToast('Data berhasil disimpan!', 'success'); } localStorage.setItem('perfumeConsumerData', JSON.stringify(localDataCache)); renderDataTable(); resetForm(); }function editData(index) { const data = localDataCache[index]; if (!data) return; fillFormWithData(data); editIndexInput.value = index; document.querySelector('.bg-white.p-6').scrollIntoView({ behavior: 'smooth' }); showToast('Data siap untuk diedit', 'warning'); }function deleteData(index) { localDataCache.splice(index, 1); localStorage.setItem('perfumeConsumerData', JSON.stringify(localDataCache)); renderDataTable(); showToast('Data berhasil dihapus!', 'success'); } function resetForm() { editIndexInput.value = ''; // Menggunakan querySelector untuk menemukan form dan meresetnya const form = document.querySelector('#form-title').closest('div'); if(form) { // Ini akan mengosongkan semua input di dalam form tersebut Array.from(form.querySelectorAll('input, textarea')).forEach(input => input.value = ''); } // Membersihkan elemen lain secara manual jika diperlukan editIndexInput.value = ''; recommendationSuggestions.innerHTML = '

Masukkan komponen aroma untuk melihat saran.

'; extractionPreview.classList.add('hidden'); rawTextInput.value = ''; }function exportToExcel() { if (localDataCache.length === 0) { showToast('Tidak ada data untuk diexport!', 'error'); return; } const exportData = localDataCache.map(({ ...rest }) => rest); const ws = XLSX.utils.json_to_sheet(exportData); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, "Data Konsumen Parfum"); XLSX.writeFile(wb, "data_konsumen_parfum.xlsx"); showToast('Data berhasil diexport ke Excel!', 'success'); } function clearAllData() { if (localDataCache.length === 0) { showToast('Tidak ada data untuk dihapus.', 'warning'); return; } localDataCache = []; localStorage.removeItem('perfumeConsumerData'); renderDataTable(); showToast('Semua data berhasil dihapus!', 'success'); } // --- EVENT LISTENERS --- extractBtn.addEventListener('click', () => { const rawText = rawTextInput.value.trim(); if (!rawText) { showToast('Harap masukkan teks data mentah!', 'error'); return; } const extractedData = extractDataFromText(rawText); showExtractionPreview(extractedData); fillFormWithData(extractedData); showToast('Data berhasil diekstrak!', 'success'); }); resComponentsInput.addEventListener('input', updateRecommendationSuggestions); saveBtn.addEventListener('click', saveData); resetBtn.addEventListener('click', resetForm); exportExcelBtn.addEventListener('click', exportToExcel); clearAllBtn.addEventListener('click', clearAllData); // --- INITIALIZATION --- document.addEventListener('DOMContentLoaded', () => { const storedData = localStorage.getItem('perfumeConsumerData'); if (storedData) { localDataCache = JSON.parse(storedData); } renderDataTable(); });