- Ruhiges Dark-Designsystem (Tokens, Karten, Badges/Pills, KPIs) in global.css, animierter PixelBlast-Hintergrund entfernt (kleineres Bundle) - Aufgeraeumter App-Rahmen: feste Sidebar mit sichtbaren Labels, gruppierter Navigation, aktivem Zustand und Collapse - Wiederverwendbare UI-Bausteine unter src/components/ui/ - Ticketliste als scanbare Karten (TicketCard) statt rowSpan-Tabelle - Neue Bereiche: Kunden (CRM-360), Finanzen-Cockpit, Dokumente-Browser - Dashboard als echtes Cockpit (Ticket-/Finanz-/Dokument-Kennzahlen) - Alle Seiten auf einheitlichen PageHeader/Container/Tokens umgestellt Co-authored-by: Cursor <cursoragent@cursor.com>
41 lines
1.3 KiB
JavaScript
41 lines
1.3 KiB
JavaScript
import { useState } from 'react'
|
|
import { FaServer, FaDesktop, FaPrint, FaNetworkWired } from 'react-icons/fa6'
|
|
import { PageHeader, Card } from '../components/ui'
|
|
|
|
export default function AssetsPage() {
|
|
const [searchTerm, setSearchTerm] = useState('')
|
|
|
|
const assetCategories = [
|
|
{ icon: FaServer, name: 'Server', count: 0 },
|
|
{ icon: FaDesktop, name: 'Arbeitsplaetze', count: 0 },
|
|
{ icon: FaPrint, name: 'Drucker', count: 0 },
|
|
{ icon: FaNetworkWired, name: 'Netzwerkgeraete', count: 0 },
|
|
]
|
|
|
|
return (
|
|
<div className="page">
|
|
<PageHeader title="Assets" subtitle="IT-Inventar und Geraete" />
|
|
|
|
<input
|
|
className="form-control"
|
|
placeholder="Assets suchen..."
|
|
value={searchTerm}
|
|
onChange={(e) => setSearchTerm(e.target.value)}
|
|
style={{ maxWidth: 400, marginBottom: 16 }}
|
|
/>
|
|
|
|
<div className="kpi-grid">
|
|
{assetCategories.map(({ icon: Icon, name, count }) => (
|
|
<div key={name} className="kpi">
|
|
<span className="kpi-accent" />
|
|
<div className="kpi-label"><Icon /> {name}</div>
|
|
<div className="kpi-value">{count}</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
|
|
<Card><p className="muted" style={{ margin: 0 }}>Asset-Modul - mit Appwrite verbinden, um IT-Assets zu verwalten.</p></Card>
|
|
</div>
|
|
)
|
|
}
|