Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
d50ea60af9 | |||
ec559f5c72 |
@@ -5,6 +5,11 @@ Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert
|
|||||||
Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/),
|
Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/),
|
||||||
und dieses Projekt adhäriert zu [Semantic Versioning](https://semver.org/lang/de/).
|
und dieses Projekt adhäriert zu [Semantic Versioning](https://semver.org/lang/de/).
|
||||||
|
|
||||||
|
## [v1.2.10] - 2024-03-19
|
||||||
|
### Geändert
|
||||||
|
- Version wird jetzt aus der VERSION-Variable in app.py im Footer angezeigt
|
||||||
|
- Verbesserte Zeilenabstände in den Suchergebnissen
|
||||||
|
|
||||||
## [v1.2.9] - 2024-03-19
|
## [v1.2.9] - 2024-03-19
|
||||||
### Geändert
|
### Geändert
|
||||||
- Verbesserte Darstellung der Adress-Links mit Location- und Route-Icons
|
- Verbesserte Darstellung der Adress-Links mit Location- und Route-Icons
|
||||||
|
@@ -14,7 +14,7 @@ Eine moderne Webanwendung zur Suche und Verwaltung von Kundendaten, die MEDISOFT
|
|||||||
|
|
||||||
## Version
|
## Version
|
||||||
|
|
||||||
Aktuelle Version: v1.2.9
|
Aktuelle Version: v1.2.10
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
@@ -119,7 +119,7 @@
|
|||||||
let lastResults = [];
|
let lastResults = [];
|
||||||
|
|
||||||
function createPhoneLink(phone) {
|
function createPhoneLink(phone) {
|
||||||
if (!phone) return 'N/A';
|
if (!phone) return '';
|
||||||
|
|
||||||
const clientIP = '{{ request.headers.get("X-Forwarded-For", request.remote_addr) }}';
|
const clientIP = '{{ request.headers.get("X-Forwarded-For", request.remote_addr) }}';
|
||||||
const allowedIPRanges = '{{ allowed_ip_ranges }}'.split(',');
|
const allowedIPRanges = '{{ allowed_ip_ranges }}'.split(',');
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createEmailLink(email) {
|
function createEmailLink(email) {
|
||||||
if (!email) return 'N/A';
|
if (!email) return '';
|
||||||
return `<a href="mailto:${email}" class="email-link">${email}</a>`;
|
return `<a href="mailto:${email}" class="email-link">${email}</a>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createAddressLink(street, plz, city) {
|
function createAddressLink(street, plz, city) {
|
||||||
if (!street || !plz || !city) return 'N/A';
|
if (!street || !plz || !city) return '';
|
||||||
const address = `${street}, ${plz} ${city}`;
|
const address = `${street}, ${plz} ${city}`;
|
||||||
const searchQuery = encodeURIComponent(address);
|
const searchQuery = encodeURIComponent(address);
|
||||||
const routeQuery = encodeURIComponent(address);
|
const routeQuery = encodeURIComponent(address);
|
||||||
@@ -243,7 +243,7 @@
|
|||||||
const resultsDiv = document.getElementById('results');
|
const resultsDiv = document.getElementById('results');
|
||||||
const resultCount = document.getElementById('resultCount');
|
const resultCount = document.getElementById('resultCount');
|
||||||
|
|
||||||
if (results.length === 0) {
|
if (!results || results.length === 0) {
|
||||||
resultsDiv.innerHTML = '<p>Keine Ergebnisse gefunden.</p>';
|
resultsDiv.innerHTML = '<p>Keine Ergebnisse gefunden.</p>';
|
||||||
resultCount.textContent = '0 Ergebnisse';
|
resultCount.textContent = '0 Ergebnisse';
|
||||||
return;
|
return;
|
||||||
@@ -251,7 +251,15 @@
|
|||||||
|
|
||||||
resultCount.textContent = `${results.length} Ergebnisse`;
|
resultCount.textContent = `${results.length} Ergebnisse`;
|
||||||
|
|
||||||
const resultsList = results.map(customer => `
|
const resultsList = results.map(customer => {
|
||||||
|
// Hilfsfunktion zum Erstellen von Feldern nur wenn sie Werte haben
|
||||||
|
const createFieldIfValue = (label, value, formatter = (v) => v) => {
|
||||||
|
if (!value || value === 'N/A' || value === 'n/a' || value === 'N/a' || (typeof value === 'string' && value.trim() === '')) return '';
|
||||||
|
const formattedValue = formatter(value);
|
||||||
|
return `<p><strong>${label}:</strong> ${formattedValue}</p>`;
|
||||||
|
};
|
||||||
|
|
||||||
|
return `
|
||||||
<div class="card mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="d-flex justify-content-between align-items-start">
|
<div class="d-flex justify-content-between align-items-start">
|
||||||
@@ -264,12 +272,18 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-text">
|
<div class="card-text">
|
||||||
<p><strong>Nummer:</strong> ${customer.nummer}</p>
|
${createFieldIfValue('Nummer', customer.nummer)}
|
||||||
<p><strong>Adresse:</strong> ${createAddressLink(customer.strasse, customer.plz, customer.ort)}</p>
|
${createFieldIfValue('Adresse', (customer.strasse && customer.plz && customer.ort) ? true : false,
|
||||||
<p><strong>Telefon:</strong> ${createPhoneLink(customer.telefon)}</p>
|
() => createAddressLink(customer.strasse, customer.plz, customer.ort))}
|
||||||
<p><strong>Mobil:</strong> ${createPhoneLink(customer.mobil)}</p>
|
${createFieldIfValue('Telefon', customer.telefon, createPhoneLink)}
|
||||||
<p><strong>E-Mail:</strong> ${createEmailLink(customer.email)}</p>
|
${createFieldIfValue('Mobil', customer.mobil, createPhoneLink)}
|
||||||
<p><strong>Fachrichtung:</strong> ${customer.fachrichtung}</p>
|
${createFieldIfValue('Handy', customer.handy, createPhoneLink)}
|
||||||
|
${createFieldIfValue('Telefon Firma', customer.tele_firma, createPhoneLink)}
|
||||||
|
${createFieldIfValue('E-Mail', customer.email, createEmailLink)}
|
||||||
|
${createFieldIfValue('Fachrichtung', customer.fachrichtung)}
|
||||||
|
${createFieldIfValue('Kontakt 1', customer.kontakt1, createPhoneLink)}
|
||||||
|
${createFieldIfValue('Kontakt 2', customer.kontakt2, createPhoneLink)}
|
||||||
|
${createFieldIfValue('Kontakt 3', customer.kontakt3, createPhoneLink)}
|
||||||
${customer.tags && customer.tags.length > 0 ? `
|
${customer.tags && customer.tags.length > 0 ? `
|
||||||
<p><strong>Tags:</strong>
|
<p><strong>Tags:</strong>
|
||||||
${customer.tags.map(tag => `<span class="badge bg-primary me-1">${tag}</span>`).join('')}
|
${customer.tags.map(tag => `<span class="badge bg-primary me-1">${tag}</span>`).join('')}
|
||||||
@@ -278,7 +292,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`).join('');
|
`}).join('');
|
||||||
|
|
||||||
resultsDiv.innerHTML = resultsList;
|
resultsDiv.innerHTML = resultsList;
|
||||||
}
|
}
|
||||||
@@ -309,12 +323,18 @@
|
|||||||
|
|
||||||
// Führe die Suche durch
|
// Führe die Suche durch
|
||||||
fetch('/search?' + params.toString())
|
fetch('/search?' + params.toString())
|
||||||
.then(response => response.json())
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('Netzwerk-Antwort war nicht ok');
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
// Verstecke das Lade-Icon
|
// Verstecke das Lade-Icon
|
||||||
document.getElementById('loading').style.display = 'none';
|
document.getElementById('loading').style.display = 'none';
|
||||||
|
|
||||||
if (data.error) {
|
if (data.error) {
|
||||||
|
console.error('Fehler bei der Suche:', data.error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,6 +344,8 @@
|
|||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
document.getElementById('loading').style.display = 'none';
|
document.getElementById('loading').style.display = 'none';
|
||||||
|
console.error('Fehler bei der Suche:', error);
|
||||||
|
document.getElementById('results').innerHTML = '<p>Ein Fehler ist aufgetreten. Bitte versuchen Sie es später erneut.</p>';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user