Add admin management features and MongoDB setup scripts

- Created .vscode/settings.json for Python environment configuration.
- Added run.sh script for MongoDB installation and project setup.
- Implemented admin chat interface in admin_chats.html.
- Developed invoice management interface in admin_invoices.html.
- Created license management interface in admin_licenses.html.
- Added support ticket management interface in admin_tickets.html.
- Implemented user management interface in admin_users.html.
- Developed user chat interface in chat.html.
- Created user invoice overview in my_invoices.html.
- Developed user license overview in my_licenses.html.
- Added support ticket creation and tracking in tickets.html.
- Created test.sh script for MongoDB setup.
This commit is contained in:
Maximilian G.
2026-03-23 22:10:13 +00:00
committed by GitHub
parent 283a37638b
commit d00c4e2cb9
18 changed files with 1424 additions and 71 deletions
+114 -4
View File
@@ -25,6 +25,8 @@
--accent: #f28c28;
--radius-md: 14px;
--shadow-sm: 0 10px 30px rgba(17, 35, 50, 0.08);
--shell-gutter: clamp(12px, 2.2vw, 34px);
--shell-max-width: 100vw;
}
* { box-sizing: border-box; }
@@ -40,16 +42,39 @@
var(--bg-main);
}
h1, h2, h3, h4 {
h1 {
margin: 0;
font-family: "Space Grotesk", system-ui, sans-serif;
line-height: 1.08;
font-size: clamp(1.75rem, 4.5vw, 4.2rem);
}
h2 {
margin: 0;
font-family: "Space Grotesk", system-ui, sans-serif;
line-height: 1.08;
font-size: clamp(1.4rem, 3.2vw, 3rem);
}
h3 {
margin: 0;
font-family: "Space Grotesk", system-ui, sans-serif;
line-height: 1.08;
font-size: clamp(1.1rem, 2.5vw, 2rem);
}
h4 {
margin: 0;
font-family: "Space Grotesk", system-ui, sans-serif;
line-height: 1.08;
font-size: clamp(1rem, 1.8vw, 1.5rem);
}
p {
margin: 0;
line-height: 1.55;
color: var(--text-soft);
font-size: clamp(0.95rem, 1.2vw, 1.1rem);
}
a {
@@ -63,7 +88,7 @@
}
.site-shell {
width: min(1240px, calc(100% - 2rem));
width: min(var(--shell-max-width), calc(100% - (var(--shell-gutter) * 2)));
margin: 0 auto;
}
@@ -134,6 +159,56 @@
background: linear-gradient(120deg, #0b5b89 0%, #0b4262 100%);
}
.nav-dropdown {
position: relative;
}
.nav-dropdown > summary {
list-style: none;
cursor: pointer;
}
.nav-dropdown > summary::-webkit-details-marker {
display: none;
}
.nav-dropdown > summary::after {
content: "▾";
margin-left: 0.45rem;
font-size: 0.72rem;
color: #57798f;
}
.nav-dropdown[open] > summary::after {
content: "▴";
}
.dropdown-menu {
position: absolute;
right: 0;
top: calc(100% + 0.45rem);
min-width: 220px;
padding: 0.5rem;
border-radius: 12px;
border: 1px solid #ccdae5;
background: #ffffff;
box-shadow: 0 12px 24px rgba(16, 44, 62, 0.15);
display: grid;
gap: 0.35rem;
z-index: 40;
}
.dropdown-menu a {
padding: 0.5rem 0.65rem;
border-radius: 8px;
font-weight: 600;
color: #1a4865;
}
.dropdown-menu a:hover {
background: #f3f8fc;
}
.main-wrap {
padding: 2rem 0 3.4rem;
}
@@ -174,6 +249,12 @@
padding: 0.42rem 0.72rem;
font-size: 0.85rem;
}
.dropdown-menu {
right: auto;
left: 0;
min-width: 200px;
}
}
</style>
{% endblock %}
@@ -190,11 +271,40 @@
</div>
<div class="nav-actions">
{% if 'username' in session %}
<a class="nav-btn" href="{{ url_for('blog') }}">Blog</a>
<a class="nav-btn" href="{{ url_for('appointments') }}">Termin anfragen</a>
<details class="nav-dropdown">
<summary class="nav-btn">Nutzerbereich</summary>
<div class="dropdown-menu">
<a href="{{ url_for('my_licenses') }}">Meine Lizenzen</a>
<a href="{{ url_for('my_invoices') }}">Meine Rechnungen</a>
<a href="{{ url_for('user_chat') }}">Chat mit Admin</a>
<a href="{{ url_for('user_tickets') }}">Support Tickets</a>
</div>
</details>
<details class="nav-dropdown">
<summary class="nav-btn">Inhalte</summary>
<div class="dropdown-menu">
<a href="{{ url_for('blog') }}">Blog</a>
</div>
</details>
{% if session.get('is_admin') %}
<a class="nav-btn" href="{{ url_for('admin_dashboard') }}">Admin</a>
<details class="nav-dropdown">
<summary class="nav-btn">Admin</summary>
<div class="dropdown-menu">
<a href="{{ url_for('admin_dashboard') }}">Dashboard</a>
<a href="{{ url_for('admin_users') }}">Userverwaltung</a>
<a href="{{ url_for('admin_licenses') }}">Lizenzverwaltung</a>
<a href="{{ url_for('admin_invoices') }}">Rechnungsverwaltung</a>
<a href="{{ url_for('admin_chats') }}">Admin-Chat</a>
<a href="{{ url_for('admin_tickets') }}">Support-Center</a>
<a href="{{ url_for('admin_blog') }}">Blog verwalten</a>
</div>
</details>
{% endif %}
<a class="nav-btn" href="{{ url_for('logout') }}">Logout</a>
{% else %}
<a class="nav-btn" href="{{ url_for('blog') }}">Blog</a>