Initial commit: Retribusi frontend dengan dashboard, event logs, dan settings

This commit is contained in:
mwpn
2025-12-18 11:21:40 +07:00
commit b3573ed390
35 changed files with 7368 additions and 0 deletions

View File

@@ -0,0 +1,183 @@
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Dashboard - Btekno Retribusi Admin</title>
<link rel="stylesheet" href="css/app.css" />
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<style>
.video-panel {
background: #fff;
border-radius: 0.5rem;
border: 1px solid #e5e7eb;
overflow: hidden;
}
.video-panel-header {
padding: 1rem;
border-bottom: 1px solid #e5e7eb;
display: flex;
justify-content: space-between;
align-items: center;
}
.video-panel-title {
font-weight: 600;
font-size: 0.95rem;
color: #111827;
}
.video-toggle {
padding: 0.375rem 0.75rem;
font-size: 0.875rem;
border: 1px solid #d1d5db;
border-radius: 0.375rem;
background: #fff;
color: #374151;
cursor: pointer;
}
.video-toggle:hover {
background: #f9fafb;
}
.video-container {
position: relative;
width: 100%;
aspect-ratio: 16/9;
background: #000;
}
.video-container video {
width: 100%;
height: 100%;
object-fit: contain;
}
.video-placeholder {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
color: #9ca3af;
font-size: 0.875rem;
}
</style>
</head>
<body>
<div class="page">
<header class="topbar">
<div class="topbar-title">Dashboard Retribusi</div>
<div class="topbar-actions">
<span id="topbar-date" style="font-size:0.85rem;color:#6b7280;"></span>
<a href="event.html" class="topbar-link">Events</a>
<a href="settings.html" class="topbar-link">Pengaturan</a>
<button id="logout-button" class="topbar-link">
Logout
</button>
</div>
</header>
<main class="container">
<section class="filters">
<div class="filter-group">
<label for="filter-date" class="filter-label">Tanggal</label>
<input id="filter-date" type="date" class="filter-control" />
</div>
<div class="filter-group">
<label for="filter-location" class="filter-label">Lokasi</label>
<select id="filter-location" class="filter-control">
<option value="">Semua Lokasi</option>
</select>
</div>
<div class="filter-group">
<label for="filter-gate" class="filter-label">Gate</label>
<select id="filter-gate" class="filter-control">
<option value="">Semua Gate</option>
</select>
</div>
</section>
<div id="summary-error" class="error-text" style="margin-bottom:0.5rem; display:none;"></div>
<section class="summary-grid">
<article class="card card-success">
<div class="card-content">
<div class="card-title">Total Pendapatan</div>
<div id="card-total-amount" class="card-value">Rp 0</div>
<div class="card-subtext">Nilai bruto sebelum pemotongan</div>
</div>
<div id="summary-loading" class="card-loading-overlay">Memuat data...</div>
</article>
<article class="card card-info">
<div class="card-content">
<div class="card-title">Jumlah Orang</div>
<div id="card-person-count" class="card-value">0</div>
<div class="card-subtext">Person walk (pejalan kaki)</div>
</div>
</article>
<article class="card card-warning">
<div class="card-content">
<div class="card-title">Jumlah Motor</div>
<div id="card-motor-count" class="card-value">0</div>
<div class="card-subtext">Kendaraan roda dua</div>
</div>
</article>
<article class="card card-danger">
<div class="card-content">
<div class="card-title">Jumlah Mobil</div>
<div id="card-car-count" class="card-value">0</div>
<div class="card-subtext">Kendaraan roda empat</div>
</div>
</article>
</section>
<section class="content-grid">
<article class="panel">
<div class="panel-header">
<h2 class="panel-title">Trend Harian</h2>
</div>
<div class="panel-body">
<div class="chart-container">
<canvas id="daily-chart"></canvas>
</div>
</div>
</article>
<article class="panel">
<div class="panel-header">
<h2 class="panel-title">Per Kategori</h2>
</div>
<div class="panel-body">
<div class="chart-container" style="height:240px;">
<canvas id="category-chart"></canvas>
</div>
</div>
</article>
</section>
<section id="video-section" style="display:none; margin-top:1.5rem;">
<article class="video-panel">
<div class="video-panel-header">
<div id="video-panel-title" class="video-panel-title">Live Camera</div>
<button id="video-toggle" class="video-toggle">Hidupkan</button>
</div>
<div class="video-container">
<video id="video-player" controls style="display:none;"></video>
<div id="video-placeholder" class="video-placeholder">
Kamera tidak aktif
</div>
</div>
</article>
</section>
</main>
</div>
<script type="module">
import { Auth } from './js/auth.js';
import './js/dashboard.js';
import './js/realtime.js';
document.getElementById('logout-button')?.addEventListener('click', () => {
Auth.logout();
});
</script>
</body>
</html>