From 5ed76f681004f90b596441815c5ffc76b2f48d84 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 30 Mar 2026 07:33:19 +0000 Subject: [PATCH] feat: mandantenzentrische UI-Umstellung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dashboard zeigt Mandanten-Karten statt Workflow-Statistiken - Neue /tenants/:id Detail-Seite (Workflows pro Mandant) - Sidebar: Mandanten als primäre Navigation - TenantList: klickbare Zeilen → Detail-Seite - WorkflowList: Mandant-Vorfilter via URL-Parameter - WorkflowEditor: Mandant-Vorauswahl bei Erstellung aus Mandant-Kontext - Arbeitsweise: Kunde öffnen → dessen Workflows sehen/verwalten --- frontend/src/App.tsx | 12 + frontend/src/components/Layout.tsx | 80 +++-- frontend/src/pages/Dashboard.tsx | 248 ++++++++++++-- frontend/src/pages/TenantDetail.tsx | 458 ++++++++++++++++++++++++++ frontend/src/pages/TenantList.tsx | 69 +++- frontend/src/pages/WorkflowEditor.tsx | 8 +- frontend/src/pages/WorkflowList.tsx | 51 ++- 7 files changed, 862 insertions(+), 64 deletions(-) create mode 100644 frontend/src/pages/TenantDetail.tsx diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 0d48f51..902d8bc 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -7,6 +7,7 @@ import WorkflowList from './pages/WorkflowList'; import WorkflowView from './pages/WorkflowView'; import WorkflowEditor from './pages/WorkflowEditor'; import TenantList from './pages/TenantList'; +import TenantDetail from './pages/TenantDetail'; import UserList from './pages/UserList'; function AppLayout({ children }: { children: React.ReactNode }) { @@ -84,6 +85,17 @@ export default function App() { } /> + + + + + + } + /> + `flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-medium transition-colors ${ isActive @@ -49,6 +54,9 @@ export default function Layout({ children }: { children: React.ReactNode }) { : 'text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-100' }`; + // Check if we're on a tenant detail page to highlight Mandanten nav + const isTenantDetailPage = /^\/tenants\/[^/]+$/.test(location.pathname); + const sidebarContent = ( <>
@@ -66,18 +74,42 @@ export default function Layout({ children }: { children: React.ReactNode }) {