From 794a63c0d767ffc2af32683cc2b374d425d68272 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 3 Oct 2026 01:51:42 +0000 Subject: [PATCH] =?UTF-8?q?Terminplaner:=20Abschluss=20=E2=80=93=20Client?= =?UTF-8?q?=20(Formular-Token,=20Widerruf=20prominent,=20Telefonlink,=20Ei?= =?UTF-8?q?nbau-Code,=20G02)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - R53: Das Widget wartet vor jedem Absenden, bis das Formular-Token formMinSekunden plus 0,5 s alt ist ("Einen Moment …", Knopf gesperrt); gilt nach dem Neuladen der Konfiguration und beim Wiederholen nach "neu_laden". Kein stilles Erfolgs-201 ohne Buchung mehr. - R54: "Vertrag widerrufen" im Fuß ist ein zweiter Knopf (44 px). Im Knopfmodus lädt das Widget die Konfiguration beim Laden der Seite (ein Abruf) und zeigt bei Widerrufsrecht dauerhaft einen zweiten Knopf "Vertrag widerrufen" neben dem Buchungsknopf, der den Dialog beim Widerrufsformular öffnet. - Telefonlink im Widget und auf der Gästeseite: Text mit Buchstaben oder Mehrfachangaben wird nie zum tel:-Link, "(0)" hinter der Landesvorwahl entfällt. - Portal, Einstellungen: Kasten "Einbau auf deiner Website" mit Einbau-Code und Kopierknopf; Hinweistexte zum Widerruf passen zu R55 (auch Anfragen). - G02: Widerrufssatz nennt, dass der Knopf bis zum Beginn des Termins gilt und danach das Formular auf der Website oder die E-Mail an den Betrieb. - Einbau-Anleitung angepasst (siteKey und Code im Portal, Knopfmodus, Checkliste); Tests und Playwright. Co-Authored-By: Claude Sonnet 5.5 --- docs/funktionen/termine-einbau.md | 13 +- public/embed/termine.js | 184 ++++++++++++----- public/termin.js | 16 +- public/termine-tab-einstellungen.js | 38 +++- public/termine.css | 7 +- .../mail-templates/G02 Termin bestaetigt.html | 2 +- test/mailTemplates.test.js | 6 + test/termineEmbedStatic.test.js | 60 ++++++ test/termineSeiteStatic.test.js | 35 ++++ test/ui/termin-seiten.ui.mjs | 9 +- test/ui/termine-portal.ui.mjs | 40 +++- test/ui/termine-widget.ui.mjs | 190 +++++++++++++++++- 12 files changed, 536 insertions(+), 64 deletions(-) diff --git a/docs/funktionen/termine-einbau.md b/docs/funktionen/termine-einbau.md index 9cbce96..1cc00bb 100644 --- a/docs/funktionen/termine-einbau.md +++ b/docs/funktionen/termine-einbau.md @@ -1,6 +1,6 @@ # Terminplaner auf der Kundenwebsite einbauen -Anleitung für das WEBklar-Team. Das Widget lässt Gäste auf der Website des Kunden Termine buchen. Leistungen, Personen und Öffnungszeiten pflegt der Kunde im Portal (Tab „Funktionen“, Kachel „Terminplaner“). Den `siteKey` findest Du im Ticketsystem beim Projekt (16 Zeichen, a–z und 2–7). Ohne aktive Funktion, ohne gespeicherte Einstellung und ohne Telefonnummer des Betriebs (bei Verbrauchern auch ohne Anschrift) ist nichts buchbar: Das Widget zeigt dann den Ausweichtext der Seite. +Anleitung für das WEBklar-Team. Das Widget lässt Gäste auf der Website des Kunden Termine buchen. Leistungen, Personen und Öffnungszeiten pflegt der Kunde im Portal (Tab „Funktionen“, Kachel „Terminplaner“). Den `siteKey` (16 Zeichen, a–z und 2–7) und den fertigen Einbau-Code findest Du im Portal: in der Kundenansicht des Kunden unter Terminplaner → Einstellungen, Abschnitt „Einbau auf deiner Website“ (mit Knopf „Code kopieren“). Den `siteKey` zeigt auch das Ticketsystem (WOMS): Kunde → Reiter „Funktionen“, Zeile Terminplaner, mit Kopierknopf. Ohne aktive Funktion, ohne gespeicherte Einstellung und ohne Telefonnummer des Betriebs (bei Verbrauchern auch ohne Anschrift) ist nichts buchbar: Das Widget zeigt dann den Ausweichtext der Seite. ## 1. Das Snippet @@ -19,7 +19,7 @@ Das Skript steht einmal pro Seite, vor ``. Es hat keine Abhängigkeiten, | --- | --- | --- | | `data-webklar-termine` | ja | der `siteKey` des Projekts | | `data-api` | nein | Herkunft des Portals, Standard `https://project.webklar.com`. Ohne Angabe nimmt das Skript die Herkunft seiner eigenen Adresse. Das klappt nur bei einem normalen `