// js/view.js export default { renderProductList(products, onEdit, onDelete) { const list = document.getElementById('productsList'); list.innerHTML = ''; products.forEach(product => { const col = document.createElement('div'); col.className = 'col'; // Если image не начинается с "data:" — выводим как есть (старые товары), иначе как base64 const imgSrc = product.image?.startsWith('data:') ? product.image : (product.image || 'images/no-image.png'); col.innerHTML = `
${product.name}
${product.name}

${product.price} руб

Категория: ${product.category?.name || '-'}
Бренд: ${product.brand?.name || '-'}

`; // Навесить обработчики col.querySelector('.edit-btn').onclick = () => onEdit(product.id); col.querySelector('.delete-btn').onclick = () => onDelete(product.id); list.appendChild(col); }); }, showProductModal({ product = {}, categories = [], brands = [] }, onSubmit) { const modalContent = document.getElementById('productModalContent'); modalContent.innerHTML = `
`; // Показываем модалку через Bootstrap JS const modal = new bootstrap.Modal(document.getElementById('productModal')); modal.show(); // Предпросмотр выбранной картинки const fileInput = modalContent.querySelector('input[type="file"]'); const preview = modalContent.querySelector('#previewImage'); fileInput.onchange = () => { const file = fileInput.files[0]; if (file) { const reader = new FileReader(); reader.onload = e => { preview.src = e.target.result; preview.style.display = ''; }; reader.readAsDataURL(file); } }; // Обработка формы (с поддержкой base64-картинки) document.getElementById('productForm').onsubmit = async (e) => { e.preventDefault(); const formData = new FormData(e.target); const obj = Object.fromEntries(formData.entries()); obj.price = +obj.price; obj.categoryId = +obj.categoryId; obj.brandId = +obj.brandId; if (fileInput.files.length) { const file = fileInput.files[0]; const reader = new FileReader(); reader.onload = function(event) { obj.image = event.target.result; // base64 onSubmit(obj, modal); }; reader.readAsDataURL(file); } else { obj.image = product.image || ''; onSubmit(obj, modal); } }; } };