Adds comprehensive Settings page with multiple configuration tabs

Introduces a new Settings page with configurable modules:
- General company information
- Calendar and booking settings
- Billing and payment configurations
- Tracking and analytics integrations

Implements modular ViewComponents for each settings section
Enhances user experience with toggle switches and detailed configuration options
This commit is contained in:
Janus C. H. Knudsen 2026-01-18 22:50:33 +01:00
parent 7643a6ab82
commit 33c338345e
31 changed files with 3167 additions and 21 deletions

View file

@ -0,0 +1,110 @@
@page "/indstillinger"
@using PlanTempus.Application.Features.Settings.Pages
@model PlanTempus.Application.Features.Settings.Pages.IndexModel
@{
ViewData["Title"] = "Indstillinger";
}
<!-- Sticky Header with Tabs -->
<swp-sticky-header>
<swp-header-content>
<swp-page-header>
<swp-page-title>
<i class="ph ph-gear"></i>
<span localize="settings.title">Indstillinger</span>
</swp-page-title>
</swp-page-header>
</swp-header-content>
<!-- Tab Bar -->
<swp-tab-bar>
<swp-tab class="active" data-tab="general">
<i class="ph ph-buildings"></i>
<span localize="settings.tabs.company">Virksomhed</span>
</swp-tab>
<swp-tab data-tab="calendar">
<i class="ph ph-calendar"></i>
<span localize="settings.tabs.calendar">Kalender</span>
</swp-tab>
<swp-tab data-tab="booking">
<i class="ph ph-globe"></i>
<span localize="settings.tabs.booking">Online Booking</span>
</swp-tab>
<swp-tab data-tab="billing">
<i class="ph ph-receipt"></i>
<span localize="settings.tabs.billing">Faktura & Kvittering</span>
</swp-tab>
<swp-tab data-tab="reminders">
<i class="ph ph-bell"></i>
<span localize="settings.tabs.reminders">Påmindelser</span>
</swp-tab>
<swp-tab data-tab="payments">
<i class="ph ph-credit-card"></i>
<span localize="settings.tabs.payments">Betalinger</span>
</swp-tab>
<swp-tab data-tab="modules">
<i class="ph ph-puzzle-piece"></i>
<span localize="settings.tabs.modules">Moduler</span>
</swp-tab>
<swp-tab data-tab="tracking">
<i class="ph ph-chart-line-up"></i>
<span localize="settings.tabs.tracking">Tracking</span>
</swp-tab>
</swp-tab-bar>
</swp-sticky-header>
<!-- Tab Content: Virksomhed -->
<swp-tab-content data-tab="general" class="active">
<swp-page-container>
@await Component.InvokeAsync("SettingsGeneral")
</swp-page-container>
</swp-tab-content>
<!-- Tab Content: Kalender -->
<swp-tab-content data-tab="calendar">
<swp-page-container>
@await Component.InvokeAsync("SettingsCalendar")
</swp-page-container>
</swp-tab-content>
<!-- Tab Content: Online Booking -->
<swp-tab-content data-tab="booking">
<swp-page-container>
@await Component.InvokeAsync("SettingsBooking")
</swp-page-container>
</swp-tab-content>
<!-- Tab Content: Faktura & Kvittering -->
<swp-tab-content data-tab="billing">
<swp-page-container>
@await Component.InvokeAsync("SettingsBilling")
</swp-page-container>
</swp-tab-content>
<!-- Tab Content: Påmindelser -->
<swp-tab-content data-tab="reminders">
<swp-page-container>
@await Component.InvokeAsync("SettingsReminders")
</swp-page-container>
</swp-tab-content>
<!-- Tab Content: Betalinger -->
<swp-tab-content data-tab="payments">
<swp-page-container>
@await Component.InvokeAsync("SettingsPayments")
</swp-page-container>
</swp-tab-content>
<!-- Tab Content: Moduler -->
<swp-tab-content data-tab="modules">
<swp-page-container>
@await Component.InvokeAsync("SettingsModules")
</swp-page-container>
</swp-tab-content>
<!-- Tab Content: Tracking -->
<swp-tab-content data-tab="tracking">
<swp-page-container>
@await Component.InvokeAsync("SettingsTracking")
</swp-page-container>
</swp-tab-content>

View file

@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace PlanTempus.Application.Features.Settings.Pages;
public class IndexModel : PageModel
{
public void OnGet()
{
}
}