feat(admin): Cockpit — Suche/Filter, Kennzahlen, klickbare Kunden-Detailansicht
- Kennzahlen-Kacheln mit Unterzeile (neu/30T, gesperrt, ARR) + Plan-Leiste - Toolbar: Suche (E-Mail/Firma) + Plan-Filter, live - Kundentabelle: Zeilen klickbar → Detailansicht - Detail: Profil, Abo-Historie, Instanzen mit Öffnen/Sperren/Reaktivieren - fix: Abmelden-Button hatte keinen Handler E2E: Detail, Suspend→Counter, Reactivate verifiziert. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -125,8 +125,8 @@ macOS: Xcode Command Line Tools (xcode-select --install) Windows: Microsoft C
|
||||
Voraussetzungen Tool Version Node.js ≥ 20 (für Vite 8) npm ≥ 10 Rust toolchain ≥ 1.77.2 (via rustup) Plattform-Tools siehe Tauri Prerequisites Plattform-spezifisch:
|
||||
macOS: Xcode Command Line Tools (xcode-select --install) Windows: Microsoft C++ Build Tools + WebView2 Linux: webkit2gtk-4.1, librsvg2-dev, libayatana-appindicator3-dev, build-essential Setup git clone https://git.kgva.ch/karim/RAPPORT.git cd RAPPORT/APP npm install Entwicklung Web-Modus (HMR, schnellster Loop) npm run dev # http://localhost:3000 Hot-Module-Replacement Schnellster Iteration-Loop für UI-Arbeit Datenpersistierung: Browser-localStorage Native Window (Tauri-Fenster mit Desktop-Integration) npx tauri dev Echtes Tauri-Fenster System-Tray, Updater, native APIs verfügbar Erster Start dauert lange (Rust-Compile) Architektur in einem Absatz RAPPORT ist eine monolithische SPA: ein React-Root in App.jsx hält den gesamten App-State in einem useState({...}), persistiert ihn synchron in localStorage unter studio_data_v1, und übergibt ihn als Props an lazy-geladene Views. Kein Routing-Framework, kein State-Library, kein TypeScript, kein CSS-Framework. Der Rust-Teil ist 109 Zeilen und macht nur drei Dinge: System-Tray, Window-Hide-on-Close, Plugin-Registrierung (Updater, Process, Log). Keine #[tauri::command] — Frontend ↔ Backend kommuniziert nur über das Event rapport:navigate (Tray → Frontend).">
|
||||
|
||||
<link rel="preload" href="/css/compiled/main.min.9e7ba5cc2f8fede57d631892f51554687d9697bebe78354e35d5baa7683fa57a.css" as="style" integrity="sha256-nnulzC+P7eV9YxiS9RVUaH2Wl76+eDVONdW6p2g/pXo=" />
|
||||
<link href="/css/compiled/main.min.9e7ba5cc2f8fede57d631892f51554687d9697bebe78354e35d5baa7683fa57a.css" rel="stylesheet" integrity="sha256-nnulzC+P7eV9YxiS9RVUaH2Wl76+eDVONdW6p2g/pXo=" />
|
||||
<link rel="preload" href="/css/compiled/main.min.4e6c8bd9baa81422228dbc44a656d3be761d2660e4820d4258f4959717cb7fe0.css" as="style" integrity="sha256-TmyL2bqoFCIijbxEplbTvnYdJmDkgg1CWPSVlxfLf+A=" />
|
||||
<link href="/css/compiled/main.min.4e6c8bd9baa81422228dbc44a656d3be761d2660e4820d4258f4959717cb7fe0.css" rel="stylesheet" integrity="sha256-TmyL2bqoFCIijbxEplbTvnYdJmDkgg1CWPSVlxfLf+A=" />
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user