feat: document templates with auto-fill from case data (P1)
- Database: kanzlai.document_templates table with RLS policies
- Seed: 4 system templates (Klageerwiderung UPC, Berufungsschrift,
Mandatsbestätigung, Kostenrechnung)
- Backend: TemplateService (CRUD + render), TemplateHandler with
endpoints: GET/POST /api/templates, GET/PUT/DELETE /api/templates/{id},
POST /api/templates/{id}/render?case_id=X
- Template variables: case.*, party.*, tenant.*, user.*, date.*, deadline.*
- Frontend: /vorlagen page with category filters, template detail/editor,
render flow (select case -> preview -> copy/download), variable toolbar
- Quick action: "Schriftsatz erstellen" button on case detail page
- Also: resolved merge conflicts between audit-trail and role-based branches,
added missing Notification/AuditLog types to frontend
This commit is contained in:
46
frontend/src/app/(app)/vorlagen/neu/page.tsx
Normal file
46
frontend/src/app/(app)/vorlagen/neu/page.tsx
Normal file
@@ -0,0 +1,46 @@
|
||||
"use client";
|
||||
|
||||
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { api } from "@/lib/api";
|
||||
import type { DocumentTemplate } from "@/lib/types";
|
||||
import { Breadcrumb } from "@/components/layout/Breadcrumb";
|
||||
import { TemplateEditor } from "@/components/templates/TemplateEditor";
|
||||
import { toast } from "sonner";
|
||||
|
||||
export default function NeueVorlagePage() {
|
||||
const router = useRouter();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
const createMutation = useMutation({
|
||||
mutationFn: (data: Partial<DocumentTemplate>) =>
|
||||
api.post<DocumentTemplate>("/templates", data),
|
||||
onSuccess: (result) => {
|
||||
queryClient.invalidateQueries({ queryKey: ["templates"] });
|
||||
toast.success("Vorlage erstellt");
|
||||
router.push(`/vorlagen/${result.id}`);
|
||||
},
|
||||
onError: () => toast.error("Fehler beim Erstellen"),
|
||||
});
|
||||
|
||||
return (
|
||||
<div className="animate-fade-in space-y-4">
|
||||
<Breadcrumb
|
||||
items={[
|
||||
{ label: "Dashboard", href: "/dashboard" },
|
||||
{ label: "Vorlagen", href: "/vorlagen" },
|
||||
{ label: "Neue Vorlage" },
|
||||
]}
|
||||
/>
|
||||
|
||||
<h1 className="text-lg font-semibold text-neutral-900">
|
||||
Neue Vorlage erstellen
|
||||
</h1>
|
||||
|
||||
<TemplateEditor
|
||||
onSave={(data) => createMutation.mutate(data)}
|
||||
isSaving={createMutation.isPending}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user