Konto: Name jetzt fest wie E-Mail/Lieferadresse, nur Benutzername änderbar

Der echte Name war bisher versehentlich ebenfalls editierbar. Jetzt steht
er als reine Anzeige in derselben Tabelle wie E-Mail und Lieferadresse —
änderbar bleibt ausschließlich der optionale Benutzername (Spitzname).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
qcigano
2026-08-03 13:56:00 +02:00
co-authored by Claude Sonnet 5
parent 279960b950
commit 5434801dda
4 changed files with 24 additions and 100 deletions
+6 -25
View File
@@ -198,17 +198,11 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
<span class="small" style="display:block; color: var(--c-text-muted); margin-top:0.3em;">{t.accountDash.usernameHint}</span> <span class="small" style="display:block; color: var(--c-text-muted); margin-top:0.3em;">{t.accountDash.usernameHint}</span>
</div> </div>
<div class="profile-field">
<label for="profile-name">{t.accountDash.profileName}</label>
<div class="profile-field-row">
<input type="text" id="profile-name" maxlength="60" />
<button type="button" class="btn btn-primary btn-sm" id="profile-name-save">{t.accountDash.nameSave}</button>
</div>
<span class="small" id="profile-name-status" style="display:none; color: var(--c-accent);">{t.accountDash.nameSaved}</span>
</div>
<table class="specs"> <table class="specs">
<tbody> <tbody>
{/* Name, E-Mail und Lieferadresse sind fest (wie bei einer echten Bestellung) — nur
der Spitzname oben ist änderbar. */}
<tr><th>{t.accountDash.profileName}</th><td id="profile-name-display"></td></tr>
<tr><th>{t.accountDash.profileEmail}</th><td id="profile-email"></td></tr> <tr><th>{t.accountDash.profileEmail}</th><td id="profile-email"></td></tr>
<tr><th>{t.accountDash.profileAddress}</th><td>Musterstraße 1<br />10115 Berlin<br />Deutschland</td></tr> <tr><th>{t.accountDash.profileAddress}</th><td>Musterstraße 1<br />10115 Berlin<br />Deutschland</td></tr>
</tbody> </tbody>
@@ -277,7 +271,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
setActiveTab(null); setActiveTab(null);
</script> </script>
<script> <script>
import { getAccount, isLoggedIn, logout, setName, setUsername, setPhoto, hatBestellungBewertet, anzeigeName } from "../../../scripts/account"; import { getAccount, isLoggedIn, logout, setUsername, setPhoto, hatBestellungBewertet, anzeigeName } from "../../../scripts/account";
const { loginPath, fallbackName, greetingTemplate, reviewedBadgeText } = (window as any).__accountDashVars; const { loginPath, fallbackName, greetingTemplate, reviewedBadgeText } = (window as any).__accountDashVars;
// Zugriffsschutz: diese Seite ist nur für angemeldete Kund:innen gedacht. Es gibt noch kein // Zugriffsschutz: diese Seite ist nur für angemeldete Kund:innen gedacht. Es gibt noch kein
@@ -301,8 +295,8 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
if (greetingEl) greetingEl.textContent = greetingTemplate.replace("{name}", anzeigeName(a) || fallbackName); if (greetingEl) greetingEl.textContent = greetingTemplate.replace("{name}", anzeigeName(a) || fallbackName);
const emailEl = document.getElementById("profile-email"); const emailEl = document.getElementById("profile-email");
if (emailEl) emailEl.textContent = a.email || ""; if (emailEl) emailEl.textContent = a.email || "";
const nameInput = document.getElementById("profile-name") as HTMLInputElement | null; const nameDisplay = document.getElementById("profile-name-display");
if (nameInput && document.activeElement !== nameInput) nameInput.value = a.name; if (nameDisplay) nameDisplay.textContent = a.name || "";
const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null; const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null;
if (usernameInput && document.activeElement !== usernameInput) usernameInput.value = a.username; if (usernameInput && document.activeElement !== usernameInput) usernameInput.value = a.username;
@@ -316,19 +310,6 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
renderProfil(); renderProfil();
window.addEventListener("account:changed", renderProfil); window.addEventListener("account:changed", renderProfil);
// Echter Name ändern (fest, Pflichtfeld)
const nameSaveBtn = document.getElementById("profile-name-save");
const nameInputEl = document.getElementById("profile-name") as HTMLInputElement | null;
const nameStatus = document.getElementById("profile-name-status");
nameSaveBtn?.addEventListener("click", () => {
if (!nameInputEl) return;
setName(nameInputEl.value);
if (nameStatus) {
nameStatus.style.display = "inline";
setTimeout(() => { nameStatus.style.display = "none"; }, 1800);
}
});
// Benutzername ändern // Benutzername ändern
const saveBtn = document.getElementById("profile-username-save"); const saveBtn = document.getElementById("profile-username-save");
const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null; const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null;
+6 -25
View File
@@ -198,17 +198,11 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
<span class="small" style="display:block; color: var(--c-text-muted); margin-top:0.3em;">{t.accountDash.usernameHint}</span> <span class="small" style="display:block; color: var(--c-text-muted); margin-top:0.3em;">{t.accountDash.usernameHint}</span>
</div> </div>
<div class="profile-field">
<label for="profile-name">{t.accountDash.profileName}</label>
<div class="profile-field-row">
<input type="text" id="profile-name" maxlength="60" />
<button type="button" class="btn btn-primary btn-sm" id="profile-name-save">{t.accountDash.nameSave}</button>
</div>
<span class="small" id="profile-name-status" style="display:none; color: var(--c-accent);">{t.accountDash.nameSaved}</span>
</div>
<table class="specs"> <table class="specs">
<tbody> <tbody>
{/* Name, E-Mail und Lieferadresse sind fest (wie bei einer echten Bestellung) — nur
der Spitzname oben ist änderbar. */}
<tr><th>{t.accountDash.profileName}</th><td id="profile-name-display"></td></tr>
<tr><th>{t.accountDash.profileEmail}</th><td id="profile-email"></td></tr> <tr><th>{t.accountDash.profileEmail}</th><td id="profile-email"></td></tr>
<tr><th>{t.accountDash.profileAddress}</th><td>Musterstraße 1<br />10115 Berlin<br />Deutschland</td></tr> <tr><th>{t.accountDash.profileAddress}</th><td>Musterstraße 1<br />10115 Berlin<br />Deutschland</td></tr>
</tbody> </tbody>
@@ -277,7 +271,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
setActiveTab(null); setActiveTab(null);
</script> </script>
<script> <script>
import { getAccount, isLoggedIn, logout, setName, setUsername, setPhoto, hatBestellungBewertet, anzeigeName } from "../../../scripts/account"; import { getAccount, isLoggedIn, logout, setUsername, setPhoto, hatBestellungBewertet, anzeigeName } from "../../../scripts/account";
const { loginPath, fallbackName, greetingTemplate, reviewedBadgeText } = (window as any).__accountDashVars; const { loginPath, fallbackName, greetingTemplate, reviewedBadgeText } = (window as any).__accountDashVars;
// Zugriffsschutz: diese Seite ist nur für angemeldete Kund:innen gedacht. Es gibt noch kein // Zugriffsschutz: diese Seite ist nur für angemeldete Kund:innen gedacht. Es gibt noch kein
@@ -301,8 +295,8 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
if (greetingEl) greetingEl.textContent = greetingTemplate.replace("{name}", anzeigeName(a) || fallbackName); if (greetingEl) greetingEl.textContent = greetingTemplate.replace("{name}", anzeigeName(a) || fallbackName);
const emailEl = document.getElementById("profile-email"); const emailEl = document.getElementById("profile-email");
if (emailEl) emailEl.textContent = a.email || ""; if (emailEl) emailEl.textContent = a.email || "";
const nameInput = document.getElementById("profile-name") as HTMLInputElement | null; const nameDisplay = document.getElementById("profile-name-display");
if (nameInput && document.activeElement !== nameInput) nameInput.value = a.name; if (nameDisplay) nameDisplay.textContent = a.name || "";
const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null; const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null;
if (usernameInput && document.activeElement !== usernameInput) usernameInput.value = a.username; if (usernameInput && document.activeElement !== usernameInput) usernameInput.value = a.username;
@@ -316,19 +310,6 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
renderProfil(); renderProfil();
window.addEventListener("account:changed", renderProfil); window.addEventListener("account:changed", renderProfil);
// Echter Name ändern (fest, Pflichtfeld)
const nameSaveBtn = document.getElementById("profile-name-save");
const nameInputEl = document.getElementById("profile-name") as HTMLInputElement | null;
const nameStatus = document.getElementById("profile-name-status");
nameSaveBtn?.addEventListener("click", () => {
if (!nameInputEl) return;
setName(nameInputEl.value);
if (nameStatus) {
nameStatus.style.display = "inline";
setTimeout(() => { nameStatus.style.display = "none"; }, 1800);
}
});
// Benutzername ändern // Benutzername ändern
const saveBtn = document.getElementById("profile-username-save"); const saveBtn = document.getElementById("profile-username-save");
const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null; const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null;
+6 -25
View File
@@ -198,17 +198,11 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
<span class="small" style="display:block; color: var(--c-text-muted); margin-top:0.3em;">{t.accountDash.usernameHint}</span> <span class="small" style="display:block; color: var(--c-text-muted); margin-top:0.3em;">{t.accountDash.usernameHint}</span>
</div> </div>
<div class="profile-field">
<label for="profile-name">{t.accountDash.profileName}</label>
<div class="profile-field-row">
<input type="text" id="profile-name" maxlength="60" />
<button type="button" class="btn btn-primary btn-sm" id="profile-name-save">{t.accountDash.nameSave}</button>
</div>
<span class="small" id="profile-name-status" style="display:none; color: var(--c-accent);">{t.accountDash.nameSaved}</span>
</div>
<table class="specs"> <table class="specs">
<tbody> <tbody>
{/* Name, E-Mail und Lieferadresse sind fest (wie bei einer echten Bestellung) — nur
der Spitzname oben ist änderbar. */}
<tr><th>{t.accountDash.profileName}</th><td id="profile-name-display"></td></tr>
<tr><th>{t.accountDash.profileEmail}</th><td id="profile-email"></td></tr> <tr><th>{t.accountDash.profileEmail}</th><td id="profile-email"></td></tr>
<tr><th>{t.accountDash.profileAddress}</th><td>Musterstraße 1<br />10115 Berlin<br />Deutschland</td></tr> <tr><th>{t.accountDash.profileAddress}</th><td>Musterstraße 1<br />10115 Berlin<br />Deutschland</td></tr>
</tbody> </tbody>
@@ -277,7 +271,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
setActiveTab(null); setActiveTab(null);
</script> </script>
<script> <script>
import { getAccount, isLoggedIn, logout, setName, setUsername, setPhoto, hatBestellungBewertet, anzeigeName } from "../../../scripts/account"; import { getAccount, isLoggedIn, logout, setUsername, setPhoto, hatBestellungBewertet, anzeigeName } from "../../../scripts/account";
const { loginPath, fallbackName, greetingTemplate, reviewedBadgeText } = (window as any).__accountDashVars; const { loginPath, fallbackName, greetingTemplate, reviewedBadgeText } = (window as any).__accountDashVars;
// Zugriffsschutz: diese Seite ist nur für angemeldete Kund:innen gedacht. Es gibt noch kein // Zugriffsschutz: diese Seite ist nur für angemeldete Kund:innen gedacht. Es gibt noch kein
@@ -301,8 +295,8 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
if (greetingEl) greetingEl.textContent = greetingTemplate.replace("{name}", anzeigeName(a) || fallbackName); if (greetingEl) greetingEl.textContent = greetingTemplate.replace("{name}", anzeigeName(a) || fallbackName);
const emailEl = document.getElementById("profile-email"); const emailEl = document.getElementById("profile-email");
if (emailEl) emailEl.textContent = a.email || ""; if (emailEl) emailEl.textContent = a.email || "";
const nameInput = document.getElementById("profile-name") as HTMLInputElement | null; const nameDisplay = document.getElementById("profile-name-display");
if (nameInput && document.activeElement !== nameInput) nameInput.value = a.name; if (nameDisplay) nameDisplay.textContent = a.name || "";
const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null; const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null;
if (usernameInput && document.activeElement !== usernameInput) usernameInput.value = a.username; if (usernameInput && document.activeElement !== usernameInput) usernameInput.value = a.username;
@@ -316,19 +310,6 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
renderProfil(); renderProfil();
window.addEventListener("account:changed", renderProfil); window.addEventListener("account:changed", renderProfil);
// Echter Name ändern (fest, Pflichtfeld)
const nameSaveBtn = document.getElementById("profile-name-save");
const nameInputEl = document.getElementById("profile-name") as HTMLInputElement | null;
const nameStatus = document.getElementById("profile-name-status");
nameSaveBtn?.addEventListener("click", () => {
if (!nameInputEl) return;
setName(nameInputEl.value);
if (nameStatus) {
nameStatus.style.display = "inline";
setTimeout(() => { nameStatus.style.display = "none"; }, 1800);
}
});
// Benutzername ändern // Benutzername ändern
const saveBtn = document.getElementById("profile-username-save"); const saveBtn = document.getElementById("profile-username-save");
const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null; const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null;
+6 -25
View File
@@ -198,17 +198,11 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
<span class="small" style="display:block; color: var(--c-text-muted); margin-top:0.3em;">{t.accountDash.usernameHint}</span> <span class="small" style="display:block; color: var(--c-text-muted); margin-top:0.3em;">{t.accountDash.usernameHint}</span>
</div> </div>
<div class="profile-field">
<label for="profile-name">{t.accountDash.profileName}</label>
<div class="profile-field-row">
<input type="text" id="profile-name" maxlength="60" />
<button type="button" class="btn btn-primary btn-sm" id="profile-name-save">{t.accountDash.nameSave}</button>
</div>
<span class="small" id="profile-name-status" style="display:none; color: var(--c-accent);">{t.accountDash.nameSaved}</span>
</div>
<table class="specs"> <table class="specs">
<tbody> <tbody>
{/* Name, E-Mail und Lieferadresse sind fest (wie bei einer echten Bestellung) — nur
der Spitzname oben ist änderbar. */}
<tr><th>{t.accountDash.profileName}</th><td id="profile-name-display"></td></tr>
<tr><th>{t.accountDash.profileEmail}</th><td id="profile-email"></td></tr> <tr><th>{t.accountDash.profileEmail}</th><td id="profile-email"></td></tr>
<tr><th>{t.accountDash.profileAddress}</th><td>Musterstraße 1<br />10115 Berlin<br />Deutschland</td></tr> <tr><th>{t.accountDash.profileAddress}</th><td>Musterstraße 1<br />10115 Berlin<br />Deutschland</td></tr>
</tbody> </tbody>
@@ -277,7 +271,7 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
setActiveTab(null); setActiveTab(null);
</script> </script>
<script> <script>
import { getAccount, isLoggedIn, logout, setName, setUsername, setPhoto, hatBestellungBewertet, anzeigeName } from "../../scripts/account"; import { getAccount, isLoggedIn, logout, setUsername, setPhoto, hatBestellungBewertet, anzeigeName } from "../../scripts/account";
const { loginPath, fallbackName, greetingTemplate, reviewedBadgeText } = (window as any).__accountDashVars; const { loginPath, fallbackName, greetingTemplate, reviewedBadgeText } = (window as any).__accountDashVars;
// Zugriffsschutz: diese Seite ist nur für angemeldete Kund:innen gedacht. Es gibt noch kein // Zugriffsschutz: diese Seite ist nur für angemeldete Kund:innen gedacht. Es gibt noch kein
@@ -301,8 +295,8 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
if (greetingEl) greetingEl.textContent = greetingTemplate.replace("{name}", anzeigeName(a) || fallbackName); if (greetingEl) greetingEl.textContent = greetingTemplate.replace("{name}", anzeigeName(a) || fallbackName);
const emailEl = document.getElementById("profile-email"); const emailEl = document.getElementById("profile-email");
if (emailEl) emailEl.textContent = a.email || ""; if (emailEl) emailEl.textContent = a.email || "";
const nameInput = document.getElementById("profile-name") as HTMLInputElement | null; const nameDisplay = document.getElementById("profile-name-display");
if (nameInput && document.activeElement !== nameInput) nameInput.value = a.name; if (nameDisplay) nameDisplay.textContent = a.name || "";
const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null; const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null;
if (usernameInput && document.activeElement !== usernameInput) usernameInput.value = a.username; if (usernameInput && document.activeElement !== usernameInput) usernameInput.value = a.username;
@@ -316,19 +310,6 @@ const offeneSendungen = beispielBestellungen.filter((b) => b.status === "versend
renderProfil(); renderProfil();
window.addEventListener("account:changed", renderProfil); window.addEventListener("account:changed", renderProfil);
// Echter Name ändern (fest, Pflichtfeld)
const nameSaveBtn = document.getElementById("profile-name-save");
const nameInputEl = document.getElementById("profile-name") as HTMLInputElement | null;
const nameStatus = document.getElementById("profile-name-status");
nameSaveBtn?.addEventListener("click", () => {
if (!nameInputEl) return;
setName(nameInputEl.value);
if (nameStatus) {
nameStatus.style.display = "inline";
setTimeout(() => { nameStatus.style.display = "none"; }, 1800);
}
});
// Benutzername ändern // Benutzername ändern
const saveBtn = document.getElementById("profile-username-save"); const saveBtn = document.getElementById("profile-username-save");
const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null; const usernameInput = document.getElementById("profile-username") as HTMLInputElement | null;