feat: Analyse-Module auf 100% Runde 2 — CREATE-Forms, Button-Handler, Persistenz
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 36s
CI / test-python-backend-compliance (push) Successful in 36s
CI / test-python-document-crawler (push) Successful in 22s
CI / test-python-dsms-gateway (push) Successful in 19s

Requirements: ADD-Form + Details-Panel mit Controls/Status-Anzeige
Controls: ADD-Form + Effectiveness-Persistenz via PUT
Evidence: Anzeigen/Herunterladen-Buttons mit fileUrl + disabled-State
Risks: RiskMatrix Cell-Click filtert Risiko-Liste mit Badge + Reset
AI Act: Mock-Daten entfernt, Loading-Skeleton, Edit/Delete-Handler
Audit Checklist: JSON-Export, debounced Notes-Persistenz, Neue Checkliste
Audit Report: Animiertes Skeleton statt Loading-Text

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-03-02 13:13:26 +01:00
parent a50a9810ee
commit fc83ebfd82
7 changed files with 607 additions and 96 deletions

View File

@@ -8,7 +8,7 @@
import { useState, useEffect } from 'react'
import { useSDK } from '@/lib/sdk'
import StepHeader from '@/components/sdk/StepHeader/StepHeader'
import { StepHeader, STEP_EXPLANATIONS } from '@/components/sdk/StepHeader'
interface AuditSession {
id: string
@@ -177,7 +177,14 @@ export default function AuditReportPage() {
return (
<div className="space-y-6">
<StepHeader stepId="audit-report" showProgress={true} />
<StepHeader
stepId="audit-report"
title={STEP_EXPLANATIONS['audit-report']?.title || 'Audit Report'}
description={STEP_EXPLANATIONS['audit-report']?.description || 'Audit-Berichte erstellen und verwalten'}
explanation={STEP_EXPLANATIONS['audit-report']?.explanation || 'Erstellen Sie Audit-Sessions und generieren Sie PDF-Reports.'}
tips={STEP_EXPLANATIONS['audit-report']?.tips}
showProgress={true}
/>
{error && (
<div className="p-4 bg-red-50 border border-red-200 rounded-lg text-red-700 flex items-center justify-between">
@@ -216,7 +223,31 @@ export default function AuditReportPage() {
</div>
{loading ? (
<div className="text-center py-12 text-slate-500">Lade Audit-Sessions...</div>
<div className="space-y-4">
{[1, 2, 3].map(i => (
<div key={i} className="bg-white rounded-xl border border-slate-200 p-6 animate-pulse">
<div className="flex items-start justify-between mb-4">
<div className="flex-1">
<div className="flex items-center gap-3 mb-2">
<div className="h-6 w-48 bg-slate-200 rounded" />
<div className="h-5 w-20 bg-slate-200 rounded-full" />
</div>
<div className="h-4 w-64 bg-slate-100 rounded mt-2" />
</div>
<div className="text-right">
<div className="h-8 w-16 bg-slate-200 rounded" />
<div className="h-3 w-24 bg-slate-100 rounded mt-1" />
</div>
</div>
<div className="h-2 bg-slate-100 rounded-full mb-4" />
<div className="grid grid-cols-3 gap-4">
<div className="h-16 bg-slate-100 rounded-lg" />
<div className="h-16 bg-slate-100 rounded-lg" />
<div className="h-16 bg-slate-100 rounded-lg" />
</div>
</div>
))}
</div>
) : sessions.length === 0 ? (
<div className="bg-white rounded-xl border border-slate-200 p-8 text-center">
<h3 className="text-lg font-medium text-slate-700 mb-2">Keine Audit-Sessions vorhanden</h3>