Demoklart: demoärende, dashboard-filter, publik delningssida, utskrift

- Demoärende med ett klick: komplett vibrationsärende (Volvo XC60)
  med 1 tim 35 min historik — besvarade symptomfrågor, fyra hjulfoton,
  mätvärden, provkörning, inaktivitetsförklaring, överlämning mellan
  två tekniker och en hypotes. Testat: tidsordning, arbetstid, kvar-
  varande kontroller så guiden kan fortsätta live i demon.
- Dashboard enligt direktivet: räknare och filter Alla/Pågående/Klara.
- Publik delningssida /felsokning/delad/:kod som läser via
  hamta_delat_arende utan inloggning och pollar för liveuppdatering;
  delad vykomponent med interna förhandsvisningen; Kopiera
  delningslänk i rapportfliken.
- Utskriftsvänlig kundrapport: svart på vitt vid utskrift, knappar
  och fält döljs automatiskt.
- Demomanus i docs/DEMO.md med steg-för-steg-flöde och tabell över
  demoläge kontra produktion.

Verifierat: 21 vitest-tester gröna, produktionsbygge ok, Playwright-
röktest inkl. demoflödet i färsk profil.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
This commit is contained in:
Claude
2026-08-03 00:49:21 +00:00
parent 8908224a01
commit a33e2bfcbf
13 changed files with 540 additions and 128 deletions
+15
View File
@@ -648,6 +648,21 @@ function RapportFlik({
<Link to={`/felsokning/dela/${arende.id}`} className="mt-2 block">
<StorKnapp variant="sekundar">🟢 Öppna Live Share-vy</StorKnapp>
</Link>
{arende.delningskod && (
<StorKnapp
variant="sekundar"
className="mt-2"
onClick={() => {
navigator.clipboard.writeText(`${window.location.origin}/felsokning/delad/${arende.delningskod}`);
skicka({ typ: "kommentar", text: "Delningslänk kopierad för extern mottagare." });
}}
>
🔗 Kopiera delningslänk
</StorKnapp>
)}
<p className="mt-2 text-sm text-zinc-500">
Delningslänken kräver att ärendet är synkat mot molnet (inloggad användare).
</p>
</Panel>
<Panel rubrik={`Ärende #${arende.nummer}`}>
{b.objekt && (