Updated menu visibility
This commit is contained in:
14
README.md
14
README.md
@@ -57,3 +57,17 @@ Angular CLI does not come with an end-to-end testing framework by default. You c
|
|||||||
## Additional Resources
|
## Additional Resources
|
||||||
|
|
||||||
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
||||||
|
|
||||||
|
|
||||||
|
## Cheat sheet
|
||||||
|
|
||||||
|
### Create new component
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ng generate c app/immo-manager/billing
|
||||||
|
|
||||||
|
CREATE src/app/app/immo-manager/billing/billing.scss (0 bytes)
|
||||||
|
CREATE src/app/app/immo-manager/billing/billing.spec.ts (535 bytes)
|
||||||
|
CREATE src/app/app/immo-manager/billing/billing.ts (190 bytes)
|
||||||
|
CREATE src/app/app/immo-manager/billing/billing.html (22 bytes)
|
||||||
|
```
|
||||||
|
|||||||
@@ -19,35 +19,35 @@ export const appRoutes: Routes = [
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '', component: Dashboard,
|
path: '', component: Dashboard,
|
||||||
// data: { role: ['admin', 'can-view-dashboard'] }, canActivate: [canActivateAuthRole]
|
// data: { role: ['dev', 'admin', 'can-view-dashboard'] }, canActivate: [canActivateAuthRole]
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
path: 'projects', component: Projects,
|
path: 'projects', component: Projects,
|
||||||
data: { role: ['admin', 'can-view-projects'] }, canActivate: [canActivateAuthRole]
|
data: { role: ['dev', 'admin', 'can-view-projects'] }, canActivate: [canActivateAuthRole]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'projects/:id', component: ProjectDetails,
|
path: 'projects/:id', component: ProjectDetails,
|
||||||
data: { role: ['admin', 'can-view-projects'] }, canActivate: [canActivateAuthRole]
|
data: { role: ['dev', 'admin', 'can-view-projects'] }, canActivate: [canActivateAuthRole]
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
path: 'contacts', component: Contacts,
|
path: 'contacts', component: Contacts,
|
||||||
data: { role: ['admin', 'can-view-contacts'] }, canActivate: [canActivateAuthRole]
|
data: { role: ['dev', 'admin', 'can-view-contacts'] }, canActivate: [canActivateAuthRole]
|
||||||
},
|
},
|
||||||
|
|
||||||
// admin pages
|
// admin pages
|
||||||
{
|
{
|
||||||
path: 'properties', component: Properties,
|
path: 'properties', component: Properties,
|
||||||
data: { role: ['admin', 'can-view-properties'] }, canActivate: [canActivateAuthRole]
|
data: { role: ['dev', 'admin', 'can-view-properties'] }, canActivate: [canActivateAuthRole]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'properties/:id', component: PropertyDetails,
|
path: 'properties/:id', component: PropertyDetails,
|
||||||
data: { role: ['admin', 'can-view-properties'] }, canActivate: [canActivateAuthRole]
|
data: { role: ['dev', 'admin', 'can-view-properties'] }, canActivate: [canActivateAuthRole]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'admin/properties', component: PropertyManager,
|
path: 'admin/properties', component: PropertyManager,
|
||||||
data: { role: ['admin', 'can-manage-properties'] }, canActivate: [canActivateAuthRole]
|
data: { role: ['dev', 'admin', 'can-manage-properties'] }, canActivate: [canActivateAuthRole]
|
||||||
},
|
},
|
||||||
|
|
||||||
{ path: 'uikit', loadChildren: () => import('./app/pages/uikit/uikit.routes') },
|
{ path: 'uikit', loadChildren: () => import('./app/pages/uikit/uikit.routes') },
|
||||||
|
|||||||
1
src/app/app/immo-manager/billing/billing.html
Normal file
1
src/app/app/immo-manager/billing/billing.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<p>billing works!</p>
|
||||||
0
src/app/app/immo-manager/billing/billing.scss
Normal file
0
src/app/app/immo-manager/billing/billing.scss
Normal file
23
src/app/app/immo-manager/billing/billing.spec.ts
Normal file
23
src/app/app/immo-manager/billing/billing.spec.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { Billing } from './billing';
|
||||||
|
|
||||||
|
describe('Billing', () => {
|
||||||
|
let component: Billing;
|
||||||
|
let fixture: ComponentFixture<Billing>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
imports: [Billing]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(Billing);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
11
src/app/app/immo-manager/billing/billing.ts
Normal file
11
src/app/app/immo-manager/billing/billing.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-billing',
|
||||||
|
imports: [],
|
||||||
|
templateUrl: './billing.html',
|
||||||
|
styleUrl: './billing.scss'
|
||||||
|
})
|
||||||
|
export class Billing {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -45,9 +45,24 @@ export class AppMenu {
|
|||||||
items: [
|
items: [
|
||||||
{ label: 'Dashboard', icon: 'pi pi-fw pi-home', routerLink: ['/'] },
|
{ label: 'Dashboard', icon: 'pi pi-fw pi-home', routerLink: ['/'] },
|
||||||
{ label: 'Projekte', icon: 'pi pi-fw pi-list', routerLink: ['/projects'], roles: ['dev', 'admin', 'can-view-projects'] },
|
{ label: 'Projekte', icon: 'pi pi-fw pi-list', routerLink: ['/projects'], roles: ['dev', 'admin', 'can-view-projects'] },
|
||||||
|
{ label: 'Organisationen', icon: 'pi pi-fw pi-list', routerLink: ['/organizations'], roles: ['dev', 'admin', 'can-view-organizations'] },
|
||||||
{ label: 'Kontakte', icon: 'pi pi-fw pi-id-card', routerLink: ['/contacts'], roles: ['dev', 'admin', 'can-view-contacts'] }
|
{ label: 'Kontakte', icon: 'pi pi-fw pi-id-card', routerLink: ['/contacts'], roles: ['dev', 'admin', 'can-view-contacts'] }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
roles: ['dev', 'real_estate_agent'],
|
||||||
|
label: 'Immo Manager',
|
||||||
|
items: [
|
||||||
|
{ label: 'Kontaktverwaltung', icon: 'pi pi-fw pi-list', routerLink: ['/immo-manager/contacts'], roles: ['dev', 'admin', 'can-view-projects'] },
|
||||||
|
{ label: 'Objektverwaltung', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/objects'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
||||||
|
{ label: 'Abrechnungen & Auswertung', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/billing'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
||||||
|
{ label: 'Ticketsystem', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/ticket-system'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
||||||
|
{ label: 'Buchhaltung & Rechnungswesen', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/accounting'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
||||||
|
{ label: 'Effizienz-Features', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/efficiency-features'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
||||||
|
{ label: 'Dokumenten-Management-System', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/dms'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
||||||
|
{ label: 'Service-Portal', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/service-portal'], roles: ['dev', 'admin', 'can-view-contacts'] }
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
roles: ['dev', 'admin'],
|
roles: ['dev', 'admin'],
|
||||||
label: 'Admin',
|
label: 'Admin',
|
||||||
|
|||||||
@@ -47,9 +47,12 @@ import { Tag } from 'primeng/tag';
|
|||||||
|
|
||||||
@if (keycloak.authenticated) {
|
@if (keycloak.authenticated) {
|
||||||
<p-tag severity="success" value="Authenticated" />
|
<p-tag severity="success" value="Authenticated" />
|
||||||
|
@if(keycloak) {
|
||||||
|
<p-tag severity="info" value="Realm: {{ keycloak.realm }}" />
|
||||||
|
}
|
||||||
|
|
||||||
@for (item of keycloak.realmAccess?.roles; track $index) {
|
@for (item of keycloak.realmAccess?.roles; track $index) {
|
||||||
<p-tag severity="info" value="{{ item }}" />
|
<p-tag severity="warn" value="{{ item }}" />
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@if (!keycloak.authenticated) {
|
@if (!keycloak.authenticated) {
|
||||||
@@ -104,17 +107,13 @@ import { Tag } from 'primeng/tag';
|
|||||||
@if (loggedIn) {
|
@if (loggedIn) {
|
||||||
<div>
|
<div>
|
||||||
Logged in as <span
|
Logged in as <span
|
||||||
class="font-medium text-surface-900 dark:text-surface-0 block mb-2">{{ firstName }} {{ lastName }}</span>
|
class="font-medium text-surface-900 dark:text-surface-0 block mb-2">{{ firstName }} {{ lastName }} <{{ email }}></span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p-button icon="pi pi-sign-out" label="Logout" severity="danger"
|
<p-button icon="pi pi-sign-out" label="Logout" severity="danger"
|
||||||
(click)="logout()" />
|
(click)="logout()" />
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
<div>
|
|
||||||
<span class="font-medium text-surface-900 dark:text-surface-0 block mb-2">Team Members</span>
|
|
||||||
...
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</p-popover>
|
</p-popover>
|
||||||
</div>
|
</div>
|
||||||
@@ -130,14 +129,18 @@ export class AppTopbar {
|
|||||||
public loggedIn: boolean = false;
|
public loggedIn: boolean = false;
|
||||||
public firstName?: string = 'unknown';
|
public firstName?: string = 'unknown';
|
||||||
public lastName?: string = 'unknown';
|
public lastName?: string = 'unknown';
|
||||||
|
public email?: string = 'unknown';
|
||||||
|
|
||||||
|
|
||||||
constructor(public layoutService: LayoutService) {
|
constructor(public layoutService: LayoutService) {
|
||||||
if (this.keycloak.authenticated) {
|
if (this.keycloak.authenticated) {
|
||||||
|
// console.log('KC', this.keycloak);
|
||||||
this.loggedIn = true;
|
this.loggedIn = true;
|
||||||
|
|
||||||
this.keycloak.loadUserProfile().then((userProfile) => {
|
this.keycloak.loadUserProfile().then((userProfile) => {
|
||||||
this.firstName = userProfile.firstName;
|
this.firstName = userProfile.firstName;
|
||||||
this.lastName = userProfile.lastName;
|
this.lastName = userProfile.lastName;
|
||||||
|
this.email = userProfile.email;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
<div class="flex">
|
<div class="flex">
|
||||||
<div class="flex-1 text-left">
|
<div class="flex-1 text-left">
|
||||||
<div class="mb-5">
|
<div class="mb-5">
|
||||||
<h1 i18n>Contacts</h1>
|
<h1 >Contacts</h1>
|
||||||
<p class="my-4 text-lg text-gray-500">Verwalten Sie Personen und Organisationen in Ihrem Netzwerk</p>
|
<p class="my-4 text-lg text-gray-500">Verwalten Sie Personen und Organisationen in Ihrem Netzwerk</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex-1 text-right">
|
<div class="flex-1 text-right">
|
||||||
|
|
||||||
<p-button i18n-label label="Exportieren" class="p-button-outlined">
|
<p-button label="Exportieren" class="p-button-outlined">
|
||||||
<span class="flex items-center gap-2">
|
<span class="flex items-center gap-2">
|
||||||
<span class="material-icons !text-base">download</span>
|
<span class="material-icons !text-base">download</span>
|
||||||
</span>
|
</span>
|
||||||
</p-button>
|
</p-button>
|
||||||
|
|
||||||
<p-button i18n-label label="Kontakt hinzufügen" class="p-button-outlined ml-4">
|
<p-button label="Kontakt hinzufügen" class="p-button-outlined ml-4">
|
||||||
<span class="flex items-center gap-2">
|
<span class="flex items-center gap-2">
|
||||||
<span class="material-icons !text-base">person_add</span>
|
<span class="material-icons !text-base">person_add</span>
|
||||||
</span>
|
</span>
|
||||||
@@ -300,7 +300,7 @@
|
|||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
<div class="ml-4 flex flex-col">
|
<div class="ml-4 flex flex-col">
|
||||||
<span class="text-2xl font-bold text-gray-800 leading-none">1</span>
|
<span class="text-2xl font-bold text-gray-800 leading-none">1</span>
|
||||||
<span class="text-sm text-gray-500" i18n>Contacts total</span>
|
<span class="text-sm text-gray-500" >Contacts total</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -315,7 +315,7 @@
|
|||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
<div class="ml-4 flex flex-col">
|
<div class="ml-4 flex flex-col">
|
||||||
<span class="text-2xl font-bold text-gray-800 leading-none">0</span>
|
<span class="text-2xl font-bold text-gray-800 leading-none">0</span>
|
||||||
<span class="text-sm text-gray-500" i18n>Persons</span>
|
<span class="text-sm text-gray-500" >Persons</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -330,7 +330,7 @@
|
|||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
<div class="ml-4 flex flex-col">
|
<div class="ml-4 flex flex-col">
|
||||||
<span class="text-2xl font-bold text-gray-800 leading-none">0</span>
|
<span class="text-2xl font-bold text-gray-800 leading-none">0</span>
|
||||||
<span class="text-sm text-gray-500" i18n>Organisations</span>
|
<span class="text-sm text-gray-500" >Organisations</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -345,7 +345,7 @@
|
|||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
<div class="ml-4 flex flex-col">
|
<div class="ml-4 flex flex-col">
|
||||||
<span class="text-2xl font-bold text-gray-800 leading-none">12</span>
|
<span class="text-2xl font-bold text-gray-800 leading-none">12</span>
|
||||||
<span class="text-sm text-gray-500" i18n>With notes</span>
|
<span class="text-sm text-gray-500" >With notes</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ import { MenuModule } from 'primeng/menu';
|
|||||||
imports: [ButtonModule, MenuModule],
|
imports: [ButtonModule, MenuModule],
|
||||||
template: `<div class="card">
|
template: `<div class="card">
|
||||||
<div class="flex items-center justify-between mb-6">
|
<div class="flex items-center justify-between mb-6">
|
||||||
<div class="font-semibold text-xl" i18n>Letzte Aktivitäten</div>
|
<div class="font-semibold text-xl" >Letzte Aktivitäten</div>
|
||||||
<div>
|
<div>
|
||||||
<button pButton type="button" icon="pi pi-ellipsis-v" class="p-button-rounded p-button-text p-button-plain" (click)="menu.toggle($event)"></button>
|
<button pButton type="button" icon="pi pi-ellipsis-v" class="p-button-rounded p-button-text p-button-plain" (click)="menu.toggle($event)"></button>
|
||||||
<p-menu #menu [popup]="true" [model]="items"></p-menu>
|
<p-menu #menu [popup]="true" [model]="items"></p-menu>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="block text-muted-color font-medium mb-4" i18n>HEUTE</span>
|
<span class="block text-muted-color font-medium mb-4" >HEUTE</span>
|
||||||
<ul class="space-y-4 mb-10">
|
<ul class="space-y-4 mb-10">
|
||||||
<li class="flex items-start mb-10">
|
<li class="flex items-start mb-10">
|
||||||
<div class="w-12 h-12 flex items-center justify-center bg-blue-100 dark:bg-blue-400/10 rounded-full mr-4 shrink-0">
|
<div class="w-12 h-12 flex items-center justify-center bg-blue-100 dark:bg-blue-400/10 rounded-full mr-4 shrink-0">
|
||||||
@@ -23,9 +23,9 @@ import { MenuModule } from 'primeng/menu';
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ml-3">
|
<div class="ml-3">
|
||||||
<p class="text-gray-800 font-bold">Ereignis "vor Ort Aufnahme " hinzugefügt</p>
|
<p class="text-muted-color font-bold">Ereignis "vor Ort Aufnahme " hinzugefügt</p>
|
||||||
<p class="text-gray-700 font-medium">Ein neues Ereignis wurde zu Projekt "Heizungsmodernisierung " hinzugefügt</p>
|
<p class="text-muted-color font-medium">Ein neues Ereignis wurde zu Projekt "Heizungsmodernisierung " hinzugefügt</p>
|
||||||
<p class="text-gray-500 text-sm">01.09.2025</p>
|
<p class="text-muted-color text-sm">01.09.2025</p>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@@ -35,14 +35,14 @@ import { MenuModule } from 'primeng/menu';
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ml-3">
|
<div class="ml-3">
|
||||||
<p class="text-gray-800 font-bold">Ereignis "Antrag Bafa iSFP" hinzugefügt</p>
|
<p class="text-muted-color font-bold">Ereignis "Antrag Bafa iSFP" hinzugefügt</p>
|
||||||
<p class="text-gray-700 font-medium">Ein neues Ereignis wurde zu Projekt "Heizungsmodernisierung " hinzugefügt</p>
|
<p class="text-muted-color font-medium">Ein neues Ereignis wurde zu Projekt "Heizungsmodernisierung " hinzugefügt</p>
|
||||||
<p class="text-gray-500 text-sm">01.09.2025</p>
|
<p class="text-muted-color text-sm">01.09.2025</p>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<span class="block text-muted-color font-medium mb-4" i18n>GESTERN</span>
|
<span class="block text-muted-color font-medium mb-4" >GESTERN</span>
|
||||||
<ul class="p-0 m-0 list-none mb-6">
|
<ul class="p-0 m-0 list-none mb-6">
|
||||||
<li class="flex items-start mb-10">
|
<li class="flex items-start mb-10">
|
||||||
<div class="w-12 h-12 flex items-center justify-center bg-blue-100 dark:bg-blue-400/10 rounded-full mr-4 shrink-0">
|
<div class="w-12 h-12 flex items-center justify-center bg-blue-100 dark:bg-blue-400/10 rounded-full mr-4 shrink-0">
|
||||||
@@ -50,14 +50,14 @@ import { MenuModule } from 'primeng/menu';
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ml-3">
|
<div class="ml-3">
|
||||||
<p class="text-gray-800 font-bold">Eier gekrault</p>
|
<p class="text-muted-color font-bold">Eier gekrault</p>
|
||||||
<p class="text-gray-700 font-medium">kwt</p>
|
<p class="text-muted-color font-medium">kwt</p>
|
||||||
<p class="text-gray-500 text-sm">01.09.2025</p>
|
<p class="text-muted-color text-sm">01.09.2025</p>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<span class="block text-muted-color font-medium mb-4" i18n>LETZTE WOCHE</span>
|
<span class="block text-muted-color font-medium mb-4" >LETZTE WOCHE</span>
|
||||||
<ul class="p-0 m-0 list-none">
|
<ul class="p-0 m-0 list-none">
|
||||||
<li class="flex items-start mb-10">
|
<li class="flex items-start mb-10">
|
||||||
<div class="w-12 h-12 flex items-center justify-center bg-blue-100 dark:bg-blue-400/10 rounded-full mr-4 shrink-0">
|
<div class="w-12 h-12 flex items-center justify-center bg-blue-100 dark:bg-blue-400/10 rounded-full mr-4 shrink-0">
|
||||||
@@ -65,9 +65,9 @@ import { MenuModule } from 'primeng/menu';
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ml-3">
|
<div class="ml-3">
|
||||||
<p class="text-gray-800 font-bold">Lorem Ipsum</p>
|
<p class="text-muted-color font-bold">Lorem Ipsum</p>
|
||||||
<p class="text-gray-700 font-medium">yadda yadda yadda</p>
|
<p class="text-muted-color font-medium">yadda yadda yadda</p>
|
||||||
<p class="text-gray-500 text-sm">01.09.2025</p>
|
<p class="text-muted-color text-sm">01.09.2025</p>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { ProgressBar } from 'primeng/progressbar';
|
|||||||
template: `
|
template: `
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="flex justify-between items-center mb-6">
|
<div class="flex justify-between items-center mb-6">
|
||||||
<div class="font-semibold text-xl" i18n>Aktuelle Projekte</div>
|
<div class="font-semibold text-xl" >Aktuelle Projekte</div>
|
||||||
<div>
|
<div>
|
||||||
<button pButton type="button" icon="pi pi-ellipsis-v"
|
<button pButton type="button" icon="pi pi-ellipsis-v"
|
||||||
class="p-button-rounded p-button-text p-button-plain"
|
class="p-button-rounded p-button-text p-button-plain"
|
||||||
@@ -38,13 +38,13 @@ import { ProgressBar } from 'primeng/progressbar';
|
|||||||
<ng-template #icons>
|
<ng-template #icons>
|
||||||
<p-button icon="pi pi-cog" severity="secondary" rounded text (click)="menu.toggle($event)" />
|
<p-button icon="pi pi-cog" severity="secondary" rounded text (click)="menu.toggle($event)" />
|
||||||
<p-menu #menu id="config_menu" [model]="items" [popup]="true" />
|
<p-menu #menu id="config_menu" [model]="items" [popup]="true" />
|
||||||
<p-button i18n-label label="Vorbereitung" variant="text" severity="info" [rounded]="true" size="small"/>
|
<p-button label="Vorbereitung" variant="text" severity="info" [rounded]="true" size="small"/>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
<p class="m-0">
|
<p class="m-0">
|
||||||
<span class="text-surface-500 dark:text-surface-400"><i class="pi pi-map-marker"></i> Nicht-Wohngebäude mit Mischnutzung</span>
|
<span class="text-surface-500 dark:text-surface-400"><i class="pi pi-map-marker"></i> Nicht-Wohngebäude mit Mischnutzung</span>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<span i18n>Fortschritt:</span>
|
<span >Fortschritt:</span>
|
||||||
<p-progress-bar [value]="25"></p-progress-bar>
|
<p-progress-bar [value]="25"></p-progress-bar>
|
||||||
</p>
|
</p>
|
||||||
</p-panel>
|
</p-panel>
|
||||||
|
|||||||
@@ -9,35 +9,35 @@ import { CommonModule } from '@angular/common';
|
|||||||
<div class="card mb-0">
|
<div class="card mb-0">
|
||||||
<div class="flex justify-between mb-4">
|
<div class="flex justify-between mb-4">
|
||||||
<div>
|
<div>
|
||||||
<span class="min-h-10 block text-muted-color font-medium mb-4" i18n>Gebäude verwaltet</span>
|
<span class="min-h-10 block text-muted-color font-medium mb-4">Gebäude verwaltet</span>
|
||||||
<div class="text-surface-900 dark:text-surface-0 font-medium text-xl">152</div>
|
<div class="text-surface-900 dark:text-surface-0 font-medium text-xl">152</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-center bg-blue-100 dark:bg-blue-400/10 rounded-border" style="width: 2.5rem; height: 2.5rem">
|
<div class="flex items-center justify-center bg-blue-100 dark:bg-blue-400/10 rounded-border" style="width: 2.5rem; height: 2.5rem">
|
||||||
<i class="pi pi-home text-blue-500 text-xl!"></i>
|
<i class="pi pi-home text-blue-500 text-xl!"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<span class="text-muted-color" i18n>Gesamt im Portfolio</span>
|
<span class="text-muted-color">Gesamt im Portfolio</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-span-12 lg:col-span-6 xl:col-span-3">
|
<div class="col-span-12 lg:col-span-6 xl:col-span-3">
|
||||||
<div class="card mb-0">
|
<div class="card mb-0">
|
||||||
<div class="flex justify-between mb-4">
|
<div class="flex justify-between mb-4">
|
||||||
<div>
|
<div>
|
||||||
<span class="min-h-10 block text-muted-color font-medium mb-4" i18n>Aktive Projekte</span>
|
<span class="min-h-10 block text-muted-color font-medium mb-4">Aktive Projekte</span>
|
||||||
<div class="text-surface-900 dark:text-surface-0 font-medium text-xl">12</div>
|
<div class="text-surface-900 dark:text-surface-0 font-medium text-xl">12</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-center bg-orange-100 dark:bg-orange-400/10 rounded-border" style="width: 2.5rem; height: 2.5rem">
|
<div class="flex items-center justify-center bg-orange-100 dark:bg-orange-400/10 rounded-border" style="width: 2.5rem; height: 2.5rem">
|
||||||
<i class="pi pi-wrench text-orange-500 text-xl!"></i>
|
<i class="pi pi-wrench text-orange-500 text-xl!"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<span class="text-muted-color" i18n>von 73 insgesamt</span>
|
<span class="text-muted-color">von 73 insgesamt</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-span-12 lg:col-span-6 xl:col-span-3">
|
<div class="col-span-12 lg:col-span-6 xl:col-span-3">
|
||||||
<div class="card mb-0">
|
<div class="card mb-0">
|
||||||
<div class="flex justify-between mb-4">
|
<div class="flex justify-between mb-4">
|
||||||
<div>
|
<div>
|
||||||
<span class="min-h-10 block text-muted-color font-medium mb-4" i18n>Kontakte</span>
|
<span class="min-h-10 block text-muted-color font-medium mb-4">Kontakte</span>
|
||||||
<div class="text-surface-900 dark:text-surface-0 font-medium text-xl">28441</div>
|
<div class="text-surface-900 dark:text-surface-0 font-medium text-xl">28441</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-center bg-cyan-100 dark:bg-cyan-400/10 rounded-border" style="width: 2.5rem; height: 2.5rem">
|
<div class="flex items-center justify-center bg-cyan-100 dark:bg-cyan-400/10 rounded-border" style="width: 2.5rem; height: 2.5rem">
|
||||||
@@ -51,14 +51,14 @@ import { CommonModule } from '@angular/common';
|
|||||||
<div class="card mb-0">
|
<div class="card mb-0">
|
||||||
<div class="flex justify-between mb-4">
|
<div class="flex justify-between mb-4">
|
||||||
<div>
|
<div>
|
||||||
<span class="min-h-10 block text-muted-color font-medium mb-4" i18n>Projekte abgeschlossen</span>
|
<span class="min-h-10 block text-muted-color font-medium mb-4">Projekte abgeschlossen</span>
|
||||||
<div class="text-surface-900 dark:text-surface-0 font-medium text-xl">152</div>
|
<div class="text-surface-900 dark:text-surface-0 font-medium text-xl">152</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-center bg-purple-100 dark:bg-purple-400/10 rounded-border" style="width: 2.5rem; height: 2.5rem">
|
<div class="flex items-center justify-center bg-purple-100 dark:bg-purple-400/10 rounded-border" style="width: 2.5rem; height: 2.5rem">
|
||||||
<i class="pi pi-list-check text-purple-500 text-xl!"></i>
|
<i class="pi pi-list-check text-purple-500 text-xl!"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<span class="text-muted-color" i18n>Erfolgreich beendet</span>
|
<span class="text-muted-color">Erfolgreich beendet</span>
|
||||||
</div>
|
</div>
|
||||||
</div>`
|
</div>`
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { CurrentProjectsWidget } from './components/current-projects-widget.comp
|
|||||||
imports: [StatsWidget, CurrentProjectsWidget, ActivitiesWidget],
|
imports: [StatsWidget, CurrentProjectsWidget, ActivitiesWidget],
|
||||||
template: `
|
template: `
|
||||||
<div class="mb-5">
|
<div class="mb-5">
|
||||||
<h1 i18n>Dashboard</h1>
|
<h1 >Dashboard</h1>
|
||||||
<p class="my-4 text-lg text-gray-500">Willkommen zurück! Hier ist ein Überblick über Ihr Portfolio.</p>
|
<p class="my-4 text-lg text-gray-500">Willkommen zurück! Hier ist ein Überblick über Ihr Portfolio.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="flex flex-wrap items-center justify-between gap-4">
|
<div class="flex flex-wrap items-center justify-between gap-4">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<div class="mb-5">
|
<div class="mb-5">
|
||||||
<h1 i18n>Projekt Details</h1>
|
<h1 >Projekt Details</h1>
|
||||||
<h4>{{ projectDetailsDTO?.name }}</h4>
|
<h4>{{ projectDetailsDTO?.name }}</h4>
|
||||||
<p class="my-4 text-lg text-gray-500">Erstellt: {{ projectDetailsDTO?.createdAt | date: 'dd.MM.yyyy HH:mm' }}</p>
|
<p class="my-4 text-lg text-gray-500">Erstellt: {{ projectDetailsDTO?.createdAt | date: 'dd.MM.yyyy HH:mm' }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<p-toolbar styleClass="mb-6">
|
<p-toolbar styleClass="mb-6">
|
||||||
<ng-template #start>
|
<ng-template #start>
|
||||||
<p-button i18n-label label="Neu" icon="pi pi-plus" severity="secondary" class="mr-2" (onClick)="openNew()" />
|
<p-button label="Neu" icon="pi pi-plus" severity="secondary" class="mr-2" (onClick)="openNew()" />
|
||||||
<p-button i18n-label label="Löschen" icon="pi pi-trash" severity="danger" outlined (onClick)="deleteSelected()" [disabled]="!selectedProperties || !selectedProperties.length" />
|
<p-button label="Löschen" icon="pi pi-trash" severity="danger" outlined (onClick)="deleteSelected()" [disabled]="!selectedProperties || !selectedProperties.length" />
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<ng-template #end>
|
<ng-template #end>
|
||||||
<p-button i18n-label label="Exportieren" icon="pi pi-upload" severity="secondary" (onClick)="exportCSV()" />
|
<p-button label="Exportieren" icon="pi pi-upload" severity="secondary" (onClick)="exportCSV()" />
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</p-toolbar>
|
</p-toolbar>
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
>
|
>
|
||||||
<ng-template #caption>
|
<ng-template #caption>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<h5 class="m-0" i18n>Verwalte Liegenschaften</h5>
|
<h5 class="m-0" >Verwalte Liegenschaften</h5>
|
||||||
<p-iconfield>
|
<p-iconfield>
|
||||||
<p-inputicon styleClass="pi pi-search" />
|
<p-inputicon styleClass="pi pi-search" />
|
||||||
<input pInputText type="text" (input)="onGlobalFilter(dt, $event)" i18n-placeholder placeholder="Suche..." />
|
<input pInputText type="text" (input)="onGlobalFilter(dt, $event)" i18n-placeholder placeholder="Suche..." />
|
||||||
@@ -39,39 +39,39 @@
|
|||||||
<th style="width: 3rem">
|
<th style="width: 3rem">
|
||||||
<p-tableHeaderCheckbox />
|
<p-tableHeaderCheckbox />
|
||||||
</th>
|
</th>
|
||||||
<th pSortableColumn="nr" style="min-width:8rem" i18n>
|
<th pSortableColumn="nr" style="min-width:8rem" >
|
||||||
Nr.
|
Nr.
|
||||||
<p-sortIcon field="nr" />
|
<p-sortIcon field="nr" />
|
||||||
</th>
|
</th>
|
||||||
<th pSortableColumn="name" style="min-width:8rem" i18n>
|
<th pSortableColumn="name" style="min-width:8rem" >
|
||||||
Name
|
Name
|
||||||
<p-sortIcon field="name" />
|
<p-sortIcon field="name" />
|
||||||
</th>
|
</th>
|
||||||
<th pSortableColumn="owner" style="min-width:8rem" i18n>
|
<th pSortableColumn="owner" style="min-width:8rem" >
|
||||||
Eigentümer
|
Eigentümer
|
||||||
<p-sortIcon field="owner" />
|
<p-sortIcon field="owner" />
|
||||||
</th>
|
</th>
|
||||||
<th pSortableColumn="street" style="min-width: 8rem" i18n>
|
<th pSortableColumn="street" style="min-width: 8rem" >
|
||||||
Straße
|
Straße
|
||||||
<p-sortIcon field="street" />
|
<p-sortIcon field="street" />
|
||||||
</th>
|
</th>
|
||||||
<th pSortableColumn="houseNumber" style="min-width:8rem" i18n>
|
<th pSortableColumn="houseNumber" style="min-width:8rem" >
|
||||||
Hausnummer
|
Hausnummer
|
||||||
<p-sortIcon field="houseNumber" />
|
<p-sortIcon field="houseNumber" />
|
||||||
</th>
|
</th>
|
||||||
<th pSortableColumn="zipCode" style="min-width: 12rem" i18n>
|
<th pSortableColumn="zipCode" style="min-width: 12rem" >
|
||||||
Postleitzahl
|
Postleitzahl
|
||||||
<p-sortIcon field="zipCode" />
|
<p-sortIcon field="zipCode" />
|
||||||
</th>
|
</th>
|
||||||
<th pSortableColumn="city" style="min-width: 12rem" i18n>
|
<th pSortableColumn="city" style="min-width: 12rem" >
|
||||||
Stadt
|
Stadt
|
||||||
<p-sortIcon field="city" />
|
<p-sortIcon field="city" />
|
||||||
</th>
|
</th>
|
||||||
<th pSortableColumn="bundesland" style="min-width:8rem" i18n>
|
<th pSortableColumn="bundesland" style="min-width:8rem" >
|
||||||
Bundesland
|
Bundesland
|
||||||
<p-sortIcon field="bundesland" />
|
<p-sortIcon field="bundesland" />
|
||||||
</th>
|
</th>
|
||||||
<th pSortableColumn="Einheiten" style="min-width:8rem" i18n>
|
<th pSortableColumn="Einheiten" style="min-width:8rem" >
|
||||||
Einheiten
|
Einheiten
|
||||||
<p-sortIcon field="Einheiten" />
|
<p-sortIcon field="Einheiten" />
|
||||||
</th>
|
</th>
|
||||||
@@ -244,8 +244,8 @@
|
|||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<ng-template #footer>
|
<ng-template #footer>
|
||||||
<p-button i18n-label label="Abbrechen" icon="pi pi-times" text (click)="hideDialog()" />
|
<p-button label="Abbrechen" icon="pi pi-times" text (click)="hideDialog()" />
|
||||||
<p-button i18n-label label="Speichern" icon="pi pi-check" (click)="saveProperty()" />
|
<p-button label="Speichern" icon="pi pi-check" (click)="saveProperty()" />
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</p-dialog>
|
</p-dialog>
|
||||||
|
|
||||||
|
|||||||
@@ -26,14 +26,13 @@ body {
|
|||||||
// Default the application to a light color theme. This can be changed to
|
// Default the application to a light color theme. This can be changed to
|
||||||
// `dark` to enable the dark color theme, or to `light dark` to defer to the
|
// `dark` to enable the dark color theme, or to `light dark` to defer to the
|
||||||
// user's system settings.
|
// user's system settings.
|
||||||
color-scheme: light;
|
color-scheme: dark;
|
||||||
|
|
||||||
// Set a default background, font and text colors for the application using
|
// Set a default background, font and text colors for the application using
|
||||||
// Angular Material's system-level CSS variables. Learn more about these
|
// Angular Material's system-level CSS variables. Learn more about these
|
||||||
// variables at https://material.angular.dev/guide/system-variables
|
// variables at https://material.angular.dev/guide/system-variables
|
||||||
background-color: var(--mat-sys-surface);
|
background-color: var(--surface-ground);
|
||||||
color: var(--mat-sys-on-surface);
|
color: var(--text-color);
|
||||||
font: var(--mat-sys-body-medium);
|
|
||||||
|
|
||||||
// Reset the user agent margin.
|
// Reset the user agent margin.
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ const keycloakBaseUrl = 'https://auth.dev.localhost';
|
|||||||
const keycloakRealm = 'skamp';
|
const keycloakRealm = 'skamp';
|
||||||
const keycloakClientId = 'skamp-app';
|
const keycloakClientId = 'skamp-app';
|
||||||
|
|
||||||
|
|
||||||
export const environment = {
|
export const environment = {
|
||||||
production: false,
|
production: false,
|
||||||
bearerTokenUrlCondition: `^(${apiBaseUrl})(/.*)?$`,
|
bearerTokenUrlCondition: `^(${apiBaseUrl})(/.*)?$`,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const apiBaseUrl = 'http://localhost:8080';
|
const apiBaseUrl = 'http://localhost:8180';
|
||||||
const keycloakBaseUrl = 'http://localhost:8280';
|
const keycloakBaseUrl = 'https://kc.dev.localhost';
|
||||||
const keycloakRealm = 'skamp';
|
const keycloakRealm = 'skamp';
|
||||||
const keycloakClientId = 'skamp-app';
|
const keycloakClientId = 'skamp-app';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user