Add data import export functions
This commit is contained in:
+16
-1
@@ -113,7 +113,7 @@ function switchView(viewName) {
|
||||
document.querySelectorAll('.view').forEach((view) => view.classList.toggle('active-view', view.id === `${viewName}-view`));
|
||||
document.querySelectorAll('.nav-item').forEach((item) => item.classList.toggle('active', item.dataset.view === viewName));
|
||||
$('#new-customer-button').hidden = viewName === 'customers' || viewName === 'vehicles' || viewName === 'orders';
|
||||
$('#page-title').textContent = viewName === 'overview' ? 'Good morning, workshop.' : viewName === 'customers' ? 'Your customer directory.' : viewName === 'vehicles' ? 'Know every vehicle.' : viewName === 'orders' ? 'Keep the bays moving.' : 'Manage workshop access.';
|
||||
$('#page-title').textContent = viewName === 'overview' ? 'Good morning, workshop.' : viewName === 'customers' ? 'Your customer directory.' : viewName === 'vehicles' ? 'Know every vehicle.' : viewName === 'orders' ? 'Keep the bays moving.' : viewName === 'users' ? 'Manage workshop access.' : 'Keep your workshop data portable.';
|
||||
if (viewName === 'customers') loadCustomers();
|
||||
if (viewName === 'vehicles') loadVehicles();
|
||||
if (viewName === 'orders') loadOrders();
|
||||
@@ -137,6 +137,21 @@ $('#cancel-record-button').addEventListener('click', () => $('#record-dialog').c
|
||||
$('#close-record-button').addEventListener('click', () => $('#record-dialog').close());
|
||||
$('#order-filters').addEventListener('input', renderOrders);
|
||||
$('#order-filters').addEventListener('change', renderOrders);
|
||||
$('#export-data-button').addEventListener('click', async () => {
|
||||
try {
|
||||
const response = await fetch('/api/data/export');
|
||||
if (!response.ok) throw new Error('Unable to export database data.');
|
||||
const blob = await response.blob();
|
||||
const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = `car-service-backup-${new Date().toISOString().slice(0, 10)}.json`; link.click(); URL.revokeObjectURL(link.href);
|
||||
$('#notice').textContent = 'Database backup downloaded.';
|
||||
} catch (error) { showError(error); }
|
||||
});
|
||||
$('#import-data-input').addEventListener('change', async (event) => {
|
||||
const file = event.target.files[0]; if (!file) return;
|
||||
$('#import-file-name').textContent = file.name;
|
||||
if (!window.confirm('Importing a backup replaces all current database data. Continue?')) { event.target.value = ''; $('#import-file-name').textContent = 'No file selected.'; return; }
|
||||
try { const result = await request('/api/data/import', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: await file.text() }); $('#notice').textContent = `Backup imported: ${result.imported} records restored.`; await loadOverview(); await loadCustomers(); await loadVehicles(); await loadOrders(); await loadUsers(); } catch (error) { showError(error); } finally { event.target.value = ''; }
|
||||
});
|
||||
['vin', 'licensePlate'].forEach((name) => $('#record-form').elements[name].addEventListener('blur', async (event) => {
|
||||
const identifier = event.target.value.trim();
|
||||
if (!identifier) return;
|
||||
|
||||
Reference in New Issue
Block a user