diff --git a/public/app.js b/public/app.js index 212b788..666fa7c 100644 --- a/public/app.js +++ b/public/app.js @@ -4,17 +4,29 @@ let quotes = []; let currentQuoteId = null; let currentCustomerId = null; let itemCounter = 0; +let currentLogoFile = null; // Initialize app document.addEventListener('DOMContentLoaded', () => { loadCustomers(); loadQuotes(); setDefaultDate(); + checkCurrentLogo(); // Setup form handlers document.getElementById('customer-form').addEventListener('submit', handleCustomerSubmit); document.getElementById('quote-form').addEventListener('submit', handleQuoteSubmit); document.getElementById('quote-tax-exempt').addEventListener('change', updateTotals); + + // Setup logo upload handler + document.getElementById('logo-upload').addEventListener('change', (e) => { + const file = e.target.files[0]; + if (file) { + currentLogoFile = file; + document.getElementById('logo-filename').textContent = file.name; + document.getElementById('upload-btn').disabled = false; + } + }); }); // Tab Management @@ -29,6 +41,61 @@ function showTab(tabName) { loadQuotes(); } else if (tabName === 'customers') { loadCustomers(); + } else if (tabName === 'settings') { + checkCurrentLogo(); + } +} + +// Logo Management +async function checkCurrentLogo() { + try { + const response = await fetch('/api/logo-info'); + if (response.ok) { + const data = await response.json(); + if (data.hasLogo) { + document.getElementById('logo-preview').classList.remove('hidden'); + document.getElementById('logo-image').src = data.logoPath + '?t=' + Date.now(); + } + } + } catch (error) { + console.error('Error checking logo:', error); + } +} + +async function uploadLogo() { + if (!currentLogoFile) { + alert('Please select a file first'); + return; + } + + const formData = new FormData(); + formData.append('logo', currentLogoFile); + + const statusDiv = document.getElementById('upload-status'); + statusDiv.innerHTML = '
Uploading...
'; + + try { + const response = await fetch('/api/upload-logo', { + method: 'POST', + body: formData + }); + + if (response.ok) { + const data = await response.json(); + statusDiv.innerHTML = '✓ Logo uploaded successfully!
'; + document.getElementById('logo-preview').classList.remove('hidden'); + document.getElementById('logo-image').src = data.path + '?t=' + Date.now(); + document.getElementById('upload-btn').disabled = true; + currentLogoFile = null; + document.getElementById('logo-filename').textContent = ''; + document.getElementById('logo-upload').value = ''; + } else { + const error = await response.json(); + statusDiv.innerHTML = `✗ Error: ${error.error}
`; + } + } catch (error) { + console.error('Upload error:', error); + statusDiv.innerHTML = '✗ Upload failed
'; } } diff --git a/public/index.html b/public/index.html index ecba362..a581ac2 100644 --- a/public/index.html +++ b/public/index.html @@ -27,6 +27,7 @@