From edefdd66d8a3799a2e95ca5bf1543c02b31c11bf Mon Sep 17 00:00:00 2001 From: Tobi G Date: Fri, 28 Aug 2026 09:43:40 +0200 Subject: [PATCH] Reifen/Version/Wartungsplan: erste Runde des Sammel-Feedbacks behoben MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Archiv-Knopf jetzt in Zeile mit "Montiert" (stale margin-top entfernt), bekommt einen sichtbaren Hintergrund - companion-app: Wechseltermin-Datumsfeld (appearance-Reset gegen natives Safari-Chrome, Breite auf Inhalt geschrumpft) - Mein Audi/Reifen-Box: "montiert: Sommerräder" links statt Marke/Modell, "offen" durch "-" ersetzt - "Servicebuch" ueberall in "Wartungsplan" umbenannt (nur Anzeigetext, beide Codebasen) - Version-Kachel: tote Fahrzeugdaten-/Position-/Dashboard-Zeilen entfernt (inkl. der nie aktualisierten CONFIG.version-Konstante) Version 2026.8.28.1, live im Testcontainer verifiziert. Co-Authored-By: Claude Sonnet 5 --- AGENTS.md | 80 +++++++++++++++++++ companion-app/src/navigation.ts | 2 +- companion-app/src/screens/MeinAudi.tsx | 2 +- companion-app/src/screens/Service.tsx | 14 ++-- companion-app/src/screens/Uebersicht.tsx | 2 +- companion-app/src/stile/screens.css | 16 ++++ .../frontend/audi-dashboard-app.js | 34 ++++---- .../frontend/audi-dashboard.css | 8 +- .../audi_dashboard/manifest.json | 2 +- 9 files changed, 129 insertions(+), 31 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index e6e99fb..b7f63c8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -3939,6 +3939,86 @@ reading source): the battery list's `
` now computes `cursor: a a genuinely navigable trip row (`
@@ -156,7 +156,7 @@ export function Service({ geheZu }: { geheZu: (name: SeitenName, id?: string) => {inspFussnote &&
{inspFussnote}
} ) : ( -
kein Eintrag im Servicebuch
+
kein Eintrag im Wartungsplan
)} @@ -167,7 +167,7 @@ export function Service({ geheZu }: { geheZu: (name: SeitenName, id?: string) => {huGueltig ? (
{datum(fahrzeug.hu)}
) : ( -
kein Eintrag im Servicebuch
+
kein Eintrag im Wartungsplan
)} @@ -183,7 +183,7 @@ export function Service({ geheZu }: { geheZu: (name: SeitenName, id?: string) => )}

- Die eigene Prognose rechnet ab dem letzten Eintrag der jeweiligen Art im Servicebuch neu + Die eigene Prognose rechnet ab dem letzten Eintrag der jeweiligen Art im Wartungsplan neu und nutzt die seither tatsächlich gefahrene Strecke. Sie ersetzt die Meldung des Fahrzeugs nicht, sondern ergänzt sie.

@@ -196,7 +196,7 @@ export function Service({ geheZu }: { geheZu: (name: SeitenName, id?: string) => beiKlick={() => geheZu("werkstatt")} /> geheZu("sbuch")} /> @@ -324,7 +324,7 @@ export function Servicebuch() { } const entfernen = async (index: number) => { - if (!bestaetigen("Diesen Servicebuch-Eintrag löschen?")) return + if (!bestaetigen("Diesen Wartungsplan-Eintrag löschen?")) return await schreiben(buch.filter((_, i) => i !== index)) } @@ -397,7 +397,7 @@ export function Servicebuch() { {buch.length === 0 && !neuOffen && ( setzeNeuOffen(true) }} /> diff --git a/companion-app/src/screens/Uebersicht.tsx b/companion-app/src/screens/Uebersicht.tsx index e741517..6e31f66 100644 --- a/companion-app/src/screens/Uebersicht.tsx +++ b/companion-app/src/screens/Uebersicht.tsx @@ -176,7 +176,7 @@ export function Uebersicht({ geheZu }: { geheZu: (name: SeitenName, id?: string) ) : ( - kein Eintrag im Servicebuch + kein Eintrag im Wartungsplan )}
diff --git a/companion-app/src/stile/screens.css b/companion-app/src/stile/screens.css index e86d169..f71f392 100644 --- a/companion-app/src/stile/screens.css +++ b/companion-app/src/stile/screens.css @@ -24,6 +24,22 @@ color: var(--fg3); } +/* type="date": ohne appearance-Reset behält Safari/WKWebView (die iOS-Hülle + dieser App) sein eigenes, stark abgerundetes natives Eingabe-Chrome statt + der Box-Optik aus @audi-dash/ui's Feld - beim Nutzer sichtbar als + "gestreckter Kreis statt Box" (Reifen.tsx, Wechseltermin). @audi-dash/ui + selbst bleibt unangetastet (kein appearance-Reset dort, andere Felder + zeigen den Fehler nicht) - der Reset sitzt hier, spezifisch für type=date, + höhere Selektor-Spezifität als das geteilte ".ads-feld input" schlägt + dessen feste min-width:132px, die hier breiter ist als "27.08.2026" + braucht. */ +input[type="date"].dm-eingabe { + -webkit-appearance: none; + appearance: none; + min-width: 0; + width: fit-content; +} + /* Eine Zeile aus einer bearbeitbaren Liste (z. B. Selbstbeteiligung im Vertrag) - zwei Eingaben plus Löschen-Knopf in einer Reihe, deckungsgleich mit .feld/.zeile-loeschen im Panel (audi-dashboard.css). */ diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard-app.js b/custom_components/audi_dashboard/frontend/audi-dashboard-app.js index c43ec10..f2aef41 100644 --- a/custom_components/audi_dashboard/frontend/audi-dashboard-app.js +++ b/custom_components/audi_dashboard/frontend/audi-dashboard-app.js @@ -116,7 +116,6 @@ function profilZuConfig(p) { fahrzeuguntertitel: p.fahrzeug.untertitel, kennzeichen: p.fahrzeug.kennzeichen, startbild: p.einstellungen.uebersichtsbild, - version: "1.0", tankvolumen: p.fahrzeug.tankvolumen_liter, nachtVon: p.einstellungen.nacht_von, nachtBis: p.einstellungen.nacht_bis, @@ -1394,7 +1393,7 @@ function terminText(t) { const restKmAbs = restKm !== null ? Math.abs(restKm) : null; const haupt = t.zuerst === "km" && restKm !== null ? "in " + de(restKmAbs) + " km" : dedat(t.datum); const neben = t.zuerst === "km" ? "voraussichtlich " + dedat(t.kmDatum) + " · " + dedat(t.datum) - : (t.km !== null ? "in " + de(restKmAbs) + " km" : (t.art === "Hauptuntersuchung" ? "" : "aus dem Servicebuch fortgeschrieben")); + : (t.km !== null ? "in " + de(restKmAbs) + " km" : (t.art === "Hauptuntersuchung" ? "" : "aus dem Wartungsplan fortgeschrieben")); return { haupt, neben, restKm }; } @@ -1468,7 +1467,7 @@ function vHome() {
`; if (!t) return `
Nächster Service: -
kein Eintrag im Servicebuch
+
kein Eintrag im Wartungsplan
${kmZeile}
`; // naechsterTermin() waehlt bereits ueber alle drei Arten hinweg (Oelwechsel, @@ -1656,13 +1655,13 @@ function vAudi() {
${eur(CAR.versicherung.beitrag + CAR.steuer.betrag)} €
`; } @@ -2039,7 +2038,7 @@ function vService() { const iv = intervalle(t); if (!iv && !hatMeldung) return `
${kopf}
-
kein Eintrag im Servicebuch
+
kein Eintrag im Wartungsplan
`; const anzeige = iv ? (iv.hersteller || iv.eigen) : null; // Forecast-Zeile aus dem kundeneigenen Intervall in "Einrichten" mit @@ -2119,13 +2118,13 @@ function vService() { href="https://maps.google.com/?q=${encodeURIComponent(sv.autohaus.adresse)}" style="display:block;text-decoration:none;text-align:center">In Karten öffnen -
Servicebuch +
Wartungsplan ${sv.buch.length ? sv.buch.map((e, i) => swipeZeile(`sbuch:${i}`, ``)).join("") : `
Noch keine Einträge -

Aus dem Servicebuch berechnet die App die Fälligkeit von Inspektion, Ölwechsel und Hauptuntersuchung. Der erste Eintrag ist die Grundlage für jede Prognose.

+

Aus dem Wartungsplan berechnet die App die Fälligkeit von Inspektion, Ölwechsel und Hauptuntersuchung. Der erste Eintrag ist die Grundlage für jede Prognose.

`}
`; @@ -2653,14 +2652,11 @@ function vEinst() { Tabellenprogrammen aufgehen. - +
Version
-
Dashboard
${esc(CONFIG.version)}
-
Installiert
${esc(APP_VERSION || "unbekannt")}Home-Assistant-Integration
-
Fahrzeugdaten
FMM003Zündung · Batterie
-
Position
FMM003GPS-Tracker
+
Installiert
${esc(APP_VERSION || "unbekannt")}Home-Assistant-Integration
Integration-Update @@ -2958,9 +2954,9 @@ function vReifen() {
` : ""} -
+
- +
${feld(k, "marke", "Hersteller")} @@ -3418,14 +3414,14 @@ function swipeZeile(id, inhaltHtml) { const LOESCH_TEXT = { trip: "Fahrt löschen?", fill: "Tankvorgang löschen?", - sbuch: "Servicebuch-Eintrag löschen?", + sbuch: "Wartungsplan-Eintrag löschen?", bild: "Foto löschen?", batt: "Messwert löschen?", }; const LOESCH_HINWEIS = { trip: "Die Fahrt wird aus dem Fahrtenbuch entfernt. Das lässt sich nicht widerrufen.", fill: "Der Tankvorgang und der zugehörige Beleg werden entfernt. Das lässt sich nicht widerrufen.", - sbuch: "Der Eintrag wird aus dem Servicebuch entfernt. Das lässt sich nicht widerrufen.", + sbuch: "Der Eintrag wird aus dem Wartungsplan entfernt. Das lässt sich nicht widerrufen.", bild: "Das Foto wird vom Server gelöscht. Der Platz bleibt bestehen und kann neu belegt werden.", batt: "Der Tageseintrag wird aus der Messwertliste entfernt. Das lässt sich nicht widerrufen.", }; @@ -4077,7 +4073,7 @@ function render() { else if (route.name === "werkstatt") { head = ["Service", "Autohaus"]; v.innerHTML = vWerkstatt(); } else if (route.name === "battverlauf") { head = ["Fahrzeug", "Batteriespannung"]; v.innerHTML = vBatterieverlauf(); bvZeichnen(); } else if (route.name === "battliste") { head = ["Batteriespannung", "Messwerte"]; v.innerHTML = vBatterieliste(); } - else if (route.name === "sbuch") { head = ["Servicebuch", "Eintrag"]; v.innerHTML = vSbuch(); } + else if (route.name === "sbuch") { head = ["Wartungsplan", "Eintrag"]; v.innerHTML = vSbuch(); } else if (route.name === "standort") { head = ["Fahrzeug", "Standort"]; v.innerHTML = vStandort(); } else { const t = TABS.find((x) => x.id === route.name); head = [t.eyebrow, t.id === "audi" ? "Mein Audi" : t.title]; v.innerHTML = { audi: vAudi, trips: vTrips, stat: vStat, fuel: vFuel }[route.name](); } diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard.css b/custom_components/audi_dashboard/frontend/audi-dashboard.css index 85a8a00..66ddf74 100644 --- a/custom_components/audi_dashboard/frontend/audi-dashboard.css +++ b/custom_components/audi_dashboard/frontend/audi-dashboard.css @@ -182,6 +182,12 @@ } .iconbtn:hover { background: var(--tile-2); color: var(--fg); } .iconbtn:active { background: var(--tile-2); color: var(--fg); transform: scale(.92); } +/* "Neue Räder anlegen" auf der Reifen-Seite: bewusst dauerhaft mit + sichtbarem Hintergrund statt nur bei Hover/Tap wie .iconbtn sonst - sitzt + direkt neben dem gefüllten "Montiert"-Knopf und wirkt ohne eigene Fläche + zu unscheinbar, um dort als eigenständiger Knopf erkannt zu werden. */ +.archivbtn { background: var(--tile-2); color: var(--fg2); } +.archivbtn:hover, .archivbtn:active { color: var(--fg); } /* D4 war urspruenglich: die Ringe sind Marke, kein Knopf. Seit die iOS-Auflage in Telefonbreite das Zahnrad ausblendet, sind sie dort aber der einzige Zugang zu den Einstellungen - und als reines div mit @@ -1131,7 +1137,7 @@ button.leaf:active { background: var(--tile-2); } überlagert (das saß nur dort, solange Überschrift+km diesen Platz noch nicht beanspruchten). */ .montiert { - position: relative; margin-top: var(--sp-4); + position: relative; display: inline-flex; align-items: center; justify-content: center; font-family: inherit; font-size: 12px; letter-spacing: normal; color: var(--fg2); diff --git a/custom_components/audi_dashboard/manifest.json b/custom_components/audi_dashboard/manifest.json index 11d1667..115c350 100644 --- a/custom_components/audi_dashboard/manifest.json +++ b/custom_components/audi_dashboard/manifest.json @@ -1,7 +1,7 @@ { "domain": "audi_dashboard", "name": "Audi Dashboard", - "version": "2026.8.27.22", + "version": "2026.8.28.1", "documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md", "issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues", "codeowners": ["@paul"],