Files
noteapp/app/templates/dashboard.html
Nicolay Braetter 5c7ce5d0ca Initial commit: Notes Manager App (notes.braetter-int.de)
- Python/Flask Backend
- SQLAlchemy Models (notes, tasks, templates, users)
- Gunicorn + Nginx Deploy-Konfiguration
- Static Assets (CSS/JS)
- Jinja2 Templates
2026-04-15 09:28:33 +02:00

83 lines
4.1 KiB
HTML
Executable File

{% extends 'base.html' %}
{% block title %}Dashboard - NotesManager{% endblock %}
{% block content %}
<div class="d-flex justify-content-between align-items-center mb-4 flex-wrap gap-2">
<div>
<h1 class="h2 mb-1">Dashboard</h1>
<div class="text-muted">Stand: {{ today.strftime('%d.%m.%Y') }}</div>
</div>
<div class="d-flex gap-2">
<a href="{{ url_for('main.entry_new') }}" class="btn btn-primary">Neuer Eintrag</a>
<a href="{{ url_for('main.export_markdown') }}" class="btn btn-outline-secondary">Markdown-Export</a>
</div>
</div>
<div class="row g-3 mb-4">
<div class="col-md-3"><div class="card stat-card"><div class="card-body"><div class="stat-number">{{ stats.entries_total }}</div><div class="text-muted">Einträge gesamt</div></div></div></div>
<div class="col-md-3"><div class="card stat-card"><div class="card-body"><div class="stat-number">{{ stats.entries_today }}</div><div class="text-muted">Einträge heute</div></div></div></div>
<div class="col-md-3"><div class="card stat-card"><div class="card-body"><div class="stat-number">{{ stats.templates_total }}</div><div class="text-muted">Vorlagen</div></div></div></div>
<div class="col-md-3"><div class="card stat-card"><div class="card-body"><div class="stat-number">{{ stats.open_tasks }}</div><div class="text-muted">Offene Aufgaben</div></div></div></div>
</div>
<div class="row g-4">
<div class="col-lg-7">
<div class="card shadow-sm">
<div class="card-body">
<h2 class="h5 mb-3">Neueste Dokumentation</h2>
{% if latest_entries %}
<div class="list-group list-group-flush">
{% for item in latest_entries %}
<a href="{{ url_for('main.entry_view', entry_id=item.id) }}" class="list-group-item list-group-item-action">
<div class="d-flex justify-content-between flex-wrap gap-2">
<strong>{{ item.title }}</strong>
<span class="badge text-bg-secondary">{{ item.work_date.strftime('%d.%m.%Y') }}</span>
</div>
<div class="small text-muted">{{ item.category }} · {{ item.system_name or 'kein System' }} · {{ item.status }}</div>
</a>
{% endfor %}
</div>
{% else %}
<p class="text-muted">Noch keine Einträge vorhanden.</p>
{% endif %}
</div>
</div>
</div>
<div class="col-lg-5">
<div class="card shadow-sm mb-4">
<div class="card-body">
<h2 class="h5 mb-3">Heutige Einträge</h2>
{% if entries_today %}
<ul class="list-group list-group-flush">
{% for item in entries_today %}
<li class="list-group-item px-0">
<strong>{{ item.title }}</strong><br>
<span class="small text-muted">{{ item.category }} · {{ item.priority }} · {{ item.created_by }}</span>
</li>
{% endfor %}
</ul>
{% else %}
<p class="text-muted mb-0">Heute gibt es noch keine Einträge.</p>
{% endif %}
</div>
</div>
<div class="card shadow-sm">
<div class="card-body">
<h2 class="h5 mb-3">Offene Aufgaben</h2>
{% if open_tasks %}
<ul class="list-group list-group-flush">
{% for task in open_tasks[:6] %}
<li class="list-group-item px-0">
<strong>{{ task.title }}</strong><br>
<span class="small text-muted">{{ task.priority }}{% if task.due_date %} · Fällig {{ task.due_date.strftime('%d.%m.%Y') }}{% endif %}</span>
</li>
{% endfor %}
</ul>
{% else %}
<p class="text-muted mb-0">Keine offenen Aufgaben.</p>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock %}