From e275b8fcd69775c56f5fb6bb13da349e189d834d Mon Sep 17 00:00:00 2001 From: Claude Project Manager Date: Mon, 29 Sep 2025 00:35:31 +0200 Subject: [PATCH] Dummydaten und Sprache angepasst --- README.md | 8 +- admin-panel/src/views/CreateEmployee.tsx | 36 ++++---- admin-panel/src/views/Dashboard.tsx | 82 ++++--------------- admin-panel/src/views/EmployeeForm.tsx | 16 ++-- .../src/views/EmployeeFormComplete.tsx | 22 ++--- admin-panel/src/views/EmployeeManagement.tsx | 10 +-- admin-panel/src/views/OrganizationEditor.tsx | 2 +- admin-panel/src/views/SyncSettings.tsx | 4 +- admin-panel/src/views/UserManagement.tsx | 8 +- backend/scripts/seed-demo-data.ts | 2 +- .../src/repositories/employeeRepository.ts | 4 +- backend/src/routes/employees.ts | 4 +- backend/src/routes/employeesSecure.ts | 4 +- backend/src/usecases/employees.ts | 2 +- frontend/electron-builder.json | 8 +- frontend/index-electron.html | 4 +- frontend/index.html | 4 +- frontend/installer/skillmate-setup.iss | 4 +- frontend/package.json | 2 +- frontend/src/components/DeputyManagement.tsx | 2 +- frontend/src/components/OfficeMap3D.tsx | 4 +- frontend/src/components/OfficeMapModal.tsx | 4 +- frontend/src/components/OrganizationChart.tsx | 6 +- frontend/src/components/Sidebar.tsx | 2 +- frontend/src/views/Dashboard.tsx | 6 +- frontend/src/views/EmployeeDetail.tsx | 4 +- frontend/src/views/EmployeeForm.tsx | 10 +-- frontend/src/views/EmployeeList.tsx | 8 +- frontend/src/views/MyProfile.tsx | 4 +- frontend/src/views/Settings.tsx | 3 +- frontend/src/views/SkillSearch.tsx | 6 +- frontend/src/views/TeamZusammenstellung.tsx | 12 +-- 32 files changed, 122 insertions(+), 175 deletions(-) diff --git a/README.md b/README.md index 4cd0c45..013c6f2 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -# SkillMate - Mitarbeiter-Skills-Management für Sicherheitsbehörden +# SkillMate - Skill-Management für Sicherheitsbehörden -SkillMate ist eine spezialisierte Anwendung zur Verwaltung von Mitarbeiterfähigkeiten und -kompetenzen in Sicherheitsbehörden. Die Anwendung läuft lokal bei jedem Nutzer und kann über ein Admin-Panel zentral verwaltet werden. +SkillMate ist eine spezialisierte Anwendung zur Verwaltung von Fähigkeiten und Kompetenzen der Mitarbeitenden in Sicherheitsbehörden. Die Anwendung läuft lokal bei jedem Nutzer und kann über ein Admin-Panel zentral verwaltet werden. ## Features -- 🔍 **Skill-basierte Suche**: Finden Sie Mitarbeiter anhand ihrer Fähigkeiten -- 👥 **Mitarbeiterverwaltung**: Umfassende Profile mit Skills, Sprachen und Spezialisierungen +- 🔍 **Skill-basierte Suche**: Finden Sie Mitarbeitende anhand ihrer Fähigkeiten +- 👥 **Mitarbeitendenverwaltung**: Umfassende Profile mit Skills, Sprachen und Spezialisierungen - 🔐 **Sicherheitsüberprüfungen**: Verwaltung von Ü2/Ü3-Clearances - 🌓 **Dark/Light Mode**: Anpassbare Benutzeroberfläche - 🔄 **Synchronisation**: Zentrale Datenverwaltung über Admin-Panel diff --git a/admin-panel/src/views/CreateEmployee.tsx b/admin-panel/src/views/CreateEmployee.tsx index f3e19db..9761f84 100644 --- a/admin-panel/src/views/CreateEmployee.tsx +++ b/admin-panel/src/views/CreateEmployee.tsx @@ -46,9 +46,9 @@ export default function CreateEmployee() { case 'stellvertreter': return 'Stellvertretung' case 'beauftragter': - return 'Beauftragte:r' + return 'Beauftragte Person' default: - return 'Mitarbeiter:in' + return 'Teammitglied' } } @@ -73,9 +73,9 @@ export default function CreateEmployee() { if (response.data.data?.temporaryPassword) { setCreatedUser({ password: response.data.data.temporaryPassword }) - setSuccess(`Mitarbeiter und Benutzerkonto erfolgreich erstellt!`) + setSuccess(`Profil und Benutzerkonto erfolgreich erstellt!`) } else { - setSuccess('Mitarbeiter erfolgreich erstellt!') + setSuccess('Profil erfolgreich erstellt!') } } catch (err: any) { console.error('Error:', err.response?.data) @@ -96,8 +96,8 @@ export default function CreateEmployee() { const getRoleDescription = (role: UserRole): string => { const descriptions = { admin: 'Vollzugriff auf alle Funktionen inklusive Admin Panel und Benutzerverwaltung', - superuser: 'Kann Mitarbeiter anlegen und verwalten, aber kein Zugriff auf Admin Panel', - user: 'Kann nur das eigene Profil bearbeiten und Mitarbeiter durchsuchen' + superuser: 'Kann Mitarbeitende anlegen und verwalten, aber kein Zugriff auf Admin Panel', + user: 'Kann nur das eigene Profil bearbeiten und Mitarbeitende durchsuchen' } return descriptions[role] } @@ -112,10 +112,10 @@ export default function CreateEmployee() { ← Zurück zur Benutzerverwaltung

- Neuen Mitarbeiter & Benutzer anlegen + Neues Mitarbeitendenprofil & Benutzer anlegen

- Erstellen Sie einen neuen Mitarbeiter-Datensatz und optional ein Benutzerkonto + Erstellen Sie ein neues Profil und optional ein Benutzerkonto

@@ -141,7 +141,7 @@ export default function CreateEmployee() { {createdUser.password}

- ⚠️ Bitte notieren Sie dieses Passwort und geben Sie es sicher an den Mitarbeiter weiter. + ⚠️ Bitte notieren Sie dieses Passwort und geben Sie es sicher an die betreffende Person weiter. Das Passwort muss beim ersten Login geändert werden.

@@ -160,7 +160,7 @@ export default function CreateEmployee() {

- Mitarbeiter-Grunddaten + Grunddaten des Profils

@@ -251,7 +251,7 @@ export default function CreateEmployee() { }} />

- Wählen Sie die primäre Organisationseinheit für den neuen Mitarbeiter. Die Abteilung wird automatisch anhand der Auswahl gesetzt. + Wählen Sie die primäre Organisationseinheit für die neue Person. Die Abteilung wird automatisch anhand der Auswahl gesetzt.

@@ -265,10 +265,10 @@ export default function CreateEmployee() { onChange={event => setSelectedUnitRole(event.target.value as EmployeeUnitRole)} className="input-field w-full" > - + - - + +

Diese Rolle wird für Vertretungs- und Organigramm-Funktionen verwendet. @@ -296,7 +296,7 @@ export default function CreateEmployee() {

- Erstellt ein Benutzerkonto, mit dem sich der Mitarbeiter im System anmelden kann. + Erstellt ein Benutzerkonto, mit dem sich die angelegte Person im System anmelden kann. Ein sicheres temporäres Passwort wird automatisch generiert.

@@ -327,10 +327,10 @@ export default function CreateEmployee() { 📋 Was passiert als Nächstes?
@@ -349,7 +349,7 @@ export default function CreateEmployee() { className="btn-primary" disabled={loading} > - {loading ? 'Erstelle...' : 'Mitarbeiter erstellen'} + {loading ? 'Erstelle...' : 'Profil erstellen'} diff --git a/admin-panel/src/views/Dashboard.tsx b/admin-panel/src/views/Dashboard.tsx index 6f9e81b..45756bd 100644 --- a/admin-panel/src/views/Dashboard.tsx +++ b/admin-panel/src/views/Dashboard.tsx @@ -1,19 +1,15 @@ import { useEffect, useState } from 'react' +import { useNavigate } from 'react-router-dom' import { api } from '../services/api' -import SyncStatus from '../components/SyncStatus' interface DashboardStats { totalEmployees: number totalSkills: number totalUsers: number - lastSync?: { - timestamp: string - success: boolean - itemsSynced: number - } } export default function Dashboard() { + const navigate = useNavigate() const [stats, setStats] = useState({ totalEmployees: 0, totalSkills: 0, @@ -65,23 +61,19 @@ export default function Dashboard() { const statsCards = [ { - title: 'Mitarbeiter', + title: 'Mitarbeitende', value: stats.totalEmployees, color: 'text-primary-blue', bgColor: 'bg-bg-accent', + path: '/users' }, { title: 'Skills', value: stats.totalSkills, color: 'text-success', bgColor: 'bg-success-bg', - }, - { - title: 'Benutzer', - value: stats.totalUsers, - color: 'text-info', - bgColor: 'bg-info-bg', - }, + path: '/skills' + } ] return ( @@ -90,9 +82,14 @@ export default function Dashboard() { Dashboard -
+
{statsCards.map((stat, index) => ( -
+ ))}
-
-
-

- Letzte Synchronisation -

- {stats.lastSync ? ( -
-

- Zeitpunkt:{' '} - {new Date(stats.lastSync.timestamp).toLocaleString('de-DE')} -

-

- Status:{' '} - - {stats.lastSync.success ? 'Erfolgreich' : 'Fehlgeschlagen'} - -

-

- Synchronisierte Elemente:{' '} - {stats.lastSync.itemsSynced} -

-
- ) : ( -

- Noch keine Synchronisation durchgeführt -

- )} -
- -
-

- Systemstatus -

-
-

- Backend:{' '} - Online -

-

- Datenbank:{' '} - Verbunden -

-

- Version: 1.0.0 -

-
-
-
- - +
) } diff --git a/admin-panel/src/views/EmployeeForm.tsx b/admin-panel/src/views/EmployeeForm.tsx index 54066f0..0eb5e44 100644 --- a/admin-panel/src/views/EmployeeForm.tsx +++ b/admin-panel/src/views/EmployeeForm.tsx @@ -44,7 +44,7 @@ export default function EmployeeForm() { }) } catch (error) { console.error('Failed to fetch employee:', error) - setError('Mitarbeiter konnte nicht geladen werden') + setError('Profil konnte nicht geladen werden') } } @@ -80,8 +80,8 @@ export default function EmployeeForm() { const getRoleDescription = (role: UserRole): string => { const descriptions = { admin: 'Vollzugriff auf alle Funktionen inklusive Admin Panel und Benutzerverwaltung', - superuser: 'Kann Mitarbeiter anlegen und verwalten, aber kein Zugriff auf Admin Panel', - user: 'Kann nur das eigene Profil bearbeiten und Mitarbeiter durchsuchen' + superuser: 'Kann Mitarbeitende anlegen und verwalten, aber kein Zugriff auf Admin Panel', + user: 'Kann nur das eigene Profil bearbeiten und Mitarbeitende durchsuchen' } return descriptions[role] } @@ -96,7 +96,7 @@ export default function EmployeeForm() { ← Zurück zur Übersicht

- {isEdit ? 'Mitarbeiter bearbeiten' : 'Neuer Mitarbeiter'} + {isEdit ? 'Mitarbeitendenprofil bearbeiten' : 'Neues Mitarbeitendenprofil'}

@@ -109,7 +109,7 @@ export default function EmployeeForm() {

- Mitarbeiterdaten + Profilinformationen

@@ -192,7 +192,7 @@ export default function EmployeeForm() { className="w-5 h-5 rounded border-border-input text-primary-blue focus:ring-primary-blue" /> - Benutzerkonto für diesen Mitarbeiter erstellen + Benutzerkonto für diese Person erstellen

@@ -242,10 +242,10 @@ export default function EmployeeForm() { disabled={loading} className="btn-primary disabled:opacity-50 disabled:cursor-not-allowed" > - {loading ? 'Speichern...' : (isEdit ? 'Änderungen speichern' : 'Mitarbeiter anlegen')} + {loading ? 'Speichern...' : (isEdit ? 'Änderungen speichern' : 'Profil anlegen')}

) -} \ No newline at end of file +} diff --git a/admin-panel/src/views/EmployeeFormComplete.tsx b/admin-panel/src/views/EmployeeFormComplete.tsx index e415613..60b4fb7 100644 --- a/admin-panel/src/views/EmployeeFormComplete.tsx +++ b/admin-panel/src/views/EmployeeFormComplete.tsx @@ -66,7 +66,7 @@ export default function EmployeeFormComplete() { }) } catch (error) { console.error('Failed to fetch employee:', error) - setError('Mitarbeiter konnte nicht geladen werden') + setError('Profil konnte nicht geladen werden') } } @@ -97,15 +97,15 @@ export default function EmployeeFormComplete() { let response if (isEdit) { response = await api.put(`/employees/${id}`, payload) - setSuccess('Mitarbeiter erfolgreich aktualisiert!') + setSuccess('Profil erfolgreich aktualisiert!') } else { response = await api.post('/employees', payload) if (response.data.data.temporaryPassword) { setCreatedUser({ password: response.data.data.temporaryPassword }) - setSuccess(`Mitarbeiter erfolgreich erstellt! Temporäres Passwort: ${response.data.data.temporaryPassword}`) + setSuccess(`Profil erfolgreich erstellt! Temporäres Passwort: ${response.data.data.temporaryPassword}`) } else { - setSuccess('Mitarbeiter erfolgreich erstellt!') + setSuccess('Profil erfolgreich erstellt!') } } @@ -131,8 +131,8 @@ export default function EmployeeFormComplete() { const getRoleDescription = (role: UserRole): string => { const descriptions = { admin: 'Vollzugriff auf alle Funktionen inklusive Admin Panel und Benutzerverwaltung', - superuser: 'Kann Mitarbeiter anlegen und verwalten, aber kein Zugriff auf Admin Panel', - user: 'Kann nur das eigene Profil bearbeiten und Mitarbeiter durchsuchen' + superuser: 'Kann Mitarbeitende anlegen und verwalten, aber kein Zugriff auf Admin Panel', + user: 'Kann nur das eigene Profil bearbeiten und Mitarbeitende durchsuchen' } return descriptions[role] } @@ -147,7 +147,7 @@ export default function EmployeeFormComplete() { ← Zurück zur Übersicht

- {isEdit ? 'Mitarbeiter bearbeiten' : 'Neuer Mitarbeiter'} + {isEdit ? 'Mitarbeitendenprofil bearbeiten' : 'Neues Mitarbeitendenprofil'}

@@ -207,10 +207,10 @@ export default function EmployeeFormComplete() {
@@ -346,7 +346,7 @@ export default function EmployeeFormComplete() { className="w-5 h-5 rounded border-border-input text-primary-blue focus:ring-primary-blue" /> - Benutzerkonto für diesen Mitarbeiter erstellen + Benutzerkonto für diese Person erstellen

@@ -395,4 +395,4 @@ export default function EmployeeFormComplete() {

) -} \ No newline at end of file +} diff --git a/admin-panel/src/views/EmployeeManagement.tsx b/admin-panel/src/views/EmployeeManagement.tsx index 5281b8d..8d193a9 100644 --- a/admin-panel/src/views/EmployeeManagement.tsx +++ b/admin-panel/src/views/EmployeeManagement.tsx @@ -33,7 +33,7 @@ export default function EmployeeManagement() { if (loading) { return (
-

Mitarbeiter werden geladen...

+

Mitarbeitende werden geladen...

) } @@ -42,13 +42,13 @@ export default function EmployeeManagement() {

- Mitarbeiterverwaltung + Mitarbeitendenverwaltung

@@ -110,10 +110,10 @@ export default function EmployeeManagement() { {filteredEmployees.length === 0 && (
-

Keine Mitarbeiter gefunden

+

Keine Mitarbeitenden gefunden

)}
) -} \ No newline at end of file +} diff --git a/admin-panel/src/views/OrganizationEditor.tsx b/admin-panel/src/views/OrganizationEditor.tsx index c19ebeb..80d730c 100644 --- a/admin-panel/src/views/OrganizationEditor.tsx +++ b/admin-panel/src/views/OrganizationEditor.tsx @@ -68,7 +68,7 @@ const OrganizationNode = ({ data }: { data: any }) => { {data.employeeCount !== undefined && (

- 👥 {data.employeeCount} Mitarbeiter + 👥 {data.employeeCount} Mitarbeitende

)} {data.hasFuehrungsstelle && ( diff --git a/admin-panel/src/views/SyncSettings.tsx b/admin-panel/src/views/SyncSettings.tsx index 297132a..a3a2273 100644 --- a/admin-panel/src/views/SyncSettings.tsx +++ b/admin-panel/src/views/SyncSettings.tsx @@ -454,7 +454,7 @@ export default function SyncSettings() { checked={syncSettings.syncEmployees} onChange={(e) => setSyncSettings({ ...syncSettings, syncEmployees: e.target.checked })} /> - Mitarbeiterdaten + Daten der Mitarbeitenden