Files
RFID_detectionGUI/templates/index.html
T
2026-05-30 18:46:43 +02:00

378 lines
18 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RFID Detektivni Sistem</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
<div class="container">
<!-- Left Panel -->
<div class="left-panel">
<div class="result-section">
<img src="{{ url_for('static', filename='assets/logo.png') }}" alt="Logo" class="result-logo" onerror="this.style.display='none'">
<h3>Zadnji rezultat skeniranja</h3>
<div class="result-card" id="resultCard">
<div id="scan-result-uid-container" class="result-uid-box">
<div class="result-uid">-</div>
<button class="copy-btn" onclick="copyUID(event)" title="Kopiraj UID">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path>
<rect x="8" y="2" width="8" height="4" rx="1" ry="1"></rect>
</svg>
</button>
</div>
<div class="result-name">-</div>
<div class="result-status">-</div>
</div>
</div>
<div class="stats-section">
<h3>Statistika</h3>
<div class="stats-grid">
<div class="stat-card">
<div class="stat-label">Registrirani</div>
<div class="stat-value" id="statRegistered">0</div>
</div>
<div class="stat-card">
<div class="stat-label">Neregistrirani</div>
<div class="stat-value" id="statUnregistered">0</div>
</div>
</div>
</div>
<div class="admin-section">
<h3>Dostop Administrator</h3>
<button id="adminToggleBtn" class="admin-btn" onclick="openLoginModal()">Prijava Admin</button>
</div>
</div>
<!-- Right Panel -->
<div class="right-panel">
<!-- Tab Navigation -->
<div class="tab-nav">
<button class="tab-nav-btn active" onclick="switchTab('logs', event)">Dnevnik skeniranja</button>
<button class="tab-nav-btn" onclick="switchTab('participants', event)">Člani</button>
<button class="tab-nav-btn" onclick="switchTab('documents', event)">Dokumenti</button>
<button class="tab-nav-btn" onclick="switchTab('store', event)">Trgovina</button>
</div>
<!-- Participants Tab -->
<div id="participants-tab" class="tab-panel">
<div class="panel-header">
<h2>Člani</h2>
<button class="btn btn-primary" onclick="openAddParticipantModal()">Dodaj udeleženca</button>
</div>
<div class="panel-content">
<div class="table-container">
<table>
<thead>
<tr>
<th>ID</th>
<th>Ime</th>
<th id="card-uid-header">UID kartice</th>
<th id="key-uid-header">UID ključa</th>
<th>Datum veljavnosti</th>
<th>Datum dodajanja</th>
<th>Dejanja</th>
</tr>
</thead>
<tbody id="participantsTable">
</tbody>
</table>
</div>
</div>
</div>
<!-- Scan Logs Tab -->
<div id="logs-tab" class="tab-panel active">
<div class="panel-header">
<h2>Zgodovina skeniranja</h2>
<div class="header-actions">
<button class="btn btn-primary" onclick="exportLogs()">Izvozi v Excel</button>
<button class="btn btn-primary" onclick="printLogs()">Natisni</button>
<button id="addUnregisteredBtn" class="btn btn-primary" onclick="openAddUnregisteredModal()">Dodaj neregistriranega</button>
</div>
</div>
<div class="panel-filters">
<div class="filters-row">
<div class="filter-group">
<label>Rezultat:</label>
<select id="filterSelect" onchange="refreshLogs()">
<option value="All">Vse</option>
<option value="PASS">Samo PASS</option>
<option value="FAIL">Samo FAIL</option>
</select>
</div>
<div class="filter-group">
<label>Udeleženec:</label>
<select id="participantFilter" onchange="refreshLogs()">
<option value="">Vsi udeleženci</option>
</select>
</div>
<div class="filter-group">
<label>Od:</label>
<input type="date" id="startDateFilter" onchange="refreshLogs()">
</div>
<div class="filter-group">
<label>Do:</label>
<input type="date" id="endDateFilter" onchange="refreshLogs()">
</div>
</div>
<div class="filters-quick">
<button class="btn-quick-filter" onclick="filterByToday()">Danes</button>
<button class="btn-quick-filter" onclick="filterByLastWeek()">Teden</button>
<button class="btn-quick-filter" onclick="filterByLastMonth()">Mesec</button>
<button class="btn-quick-filter" onclick="filterByLastYear()">Leto</button>
<button class="btn-filter" onclick="resetFilters()">Resetiraj</button>
</div>
</div>
<div class="panel-content">
<div class="table-container">
<table>
<thead>
<tr>
<th>ID</th>
<th>Ime</th>
<th id="logs-card-uid-header">UID kartice</th>
<th id="logs-key-uid-header">UID ključa</th>
<th>Rezultat</th>
<th>Datum</th>
<th>Čas</th>
<th id="logs-actions-header">Dejanja</th>
</tr>
</thead>
<tbody id="logsTable">
</tbody>
</table>
</div>
</div>
</div>
<!-- Documents Tab -->
<div id="documents-tab" class="tab-panel">
<div class="panel-header">
<h2>Dokumenti</h2>
</div>
<div class="panel-content">
<div id="documentsGrid" class="documents-grid">
<p style="color: var(--text-secondary);">Nalaganje dokumentov...</p>
</div>
</div>
</div>
<!-- Store Tab -->
<div id="store-tab" class="tab-panel">
<div class="panel-header">
<h2>Trgovina</h2>
<div class="header-actions">
<div class="store-balance-display">
<span class="store-balance-label">Stanje:</span>
<span id="storeBalanceDisplay" class="store-balance-value">€0.00</span>
<button id="editBalanceBtn" class="btn btn-primary" onclick="openEditBalanceModal()" style="display:none;">Uredi stanje</button>
</div>
<button class="btn btn-primary" onclick="togglePaymentHistory()">Zgodovina plačil</button>
</div>
</div>
<div class="store-tab-scroll panel-content">
<div class="store-layout">
<!-- Inventory -->
<div class="store-inventory">
<div class="store-section-header">
<h3>Zaloga</h3>
<button id="addItemBtn" class="btn btn-primary" onclick="openAddItemModal()" style="display:none;">+ Dodaj artikel</button>
</div>
<div class="inventory-grid" id="inventoryGrid">
<p style="color: var(--text-secondary);">Nalaganje...</p>
</div>
</div>
<!-- Cart -->
<div class="store-cart">
<div class="store-section-header">
<h3>Košarica</h3>
<button class="btn btn-primary" onclick="clearCart()">Počisti</button>
</div>
<div class="cart-items" id="cartItems">
<p style="color: var(--text-secondary); text-align: center; padding: 20px;">Košarica je prazna</p>
</div>
<div class="cart-total">
<div class="cart-total-row">
<span>Skupaj:</span>
<span id="cartTotal" class="cart-total-amount">€0.00</span>
</div>
<div class="cart-total-row cart-balance-row">
<span>Stanje po plačilu:</span>
<span id="cartBalanceAfter" class="cart-balance-after">€0.00</span>
</div>
<button class="btn btn-primary cart-pay-btn" onclick="processPayment()">Plačaj</button>
</div>
</div>
</div>
</div><!-- end store-layout -->
<!-- Payment History Panel -->
<div id="paymentHistoryPanel" class="payment-history-panel" style="display:none;">
<div class="store-section-header" style="padding: 0 16px 12px;">
<h3>Zgodovina plačil</h3>
<button id="clearHistoryBtn" class="action-btn delete-btn" onclick="clearPaymentHistory()" style="display:none;">Izbriši zgodovino</button>
</div>
<div class="table-container" style="margin: 0 16px 16px;">
<table>
<thead>
<tr>
<th>#</th>
<th>Datum</th>
<th>Čas</th>
<th>Artikli</th>
<th>Skupaj</th>
<th>Stanje pred</th>
<th>Stanje po</th>
</tr>
</thead>
<tbody id="paymentHistoryTable">
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- Add Item Modal -->
<div id="addItemModal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeAddItemModal()">&times;</span>
<h2 id="addItemModalTitle">Dodaj artikel</h2>
<div class="form-group">
<label>Slika (neobvezno):</label>
<div class="image-upload-area" id="imageUploadArea" onclick="document.getElementById('itemImageInput').click()">
<div id="imagePreviewWrapper">
<div class="image-upload-placeholder" id="imageUploadPlaceholder">
<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg>
<span>Kliknite za nalaganje slike</span>
</div>
<img id="imagePreview" src="" alt="" style="display:none; max-height:140px; border-radius:6px; object-fit:contain;">
</div>
<input type="file" id="itemImageInput" accept="image/*" style="display:none" onchange="handleImageUpload(event)">
</div>
<button type="button" class="btn-remove-image" id="removeImageBtn" onclick="removeItemImage()" style="display:none;">Odstrani sliko</button>
</div>
<div class="form-group">
<label>Ime artikla:</label>
<input type="text" id="itemName" placeholder="Ime artikla">
</div>
<div class="form-group">
<label>Cena (€):</label>
<input type="number" id="itemPrice" placeholder="0.00" min="0" step="0.01">
</div>
<div class="form-group">
<label>Zaloga (kos):</label>
<input type="number" id="itemStock" placeholder="0" min="0" step="1">
</div>
<button class="btn btn-primary" id="addItemSubmitBtn" onclick="submitItem()">Dodaj</button>
</div>
</div>
<!-- Edit Balance Modal -->
<div id="editBalanceModal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeEditBalanceModal()">&times;</span>
<h2>Uredi stanje</h2>
<div class="form-group">
<label>Novo stanje (€):</label>
<input type="number" id="balanceInput" placeholder="0.00" step="0.01">
</div>
<button class="btn btn-primary" onclick="saveBalance()">Shrani</button>
</div>
</div>
<!-- Add Participant Modal -->
<div id="addParticipantModal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeAddParticipantModal()">&times;</span>
<h2>Dodaj novega udeleženca</h2>
<div class="form-group">
<label>Ime:</label>
<input type="text" id="inputName" placeholder="Ime udeleženca">
</div>
<div class="form-group">
<label>UID kartice:</label>
<input type="text" id="inputCardUID" placeholder="UID kartice">
</div>
<div class="form-group">
<label>UID ključa (neobvezno):</label>
<input type="text" id="inputKeyUID" placeholder="UID ključa">
</div>
<div class="form-group">
<label>Datum veljavnosti (neobvezno):</label>
<input type="date" id="inputExpiration">
</div>
<button class="btn btn-primary" onclick="addParticipant()">Dodaj udeleženca</button>
</div>
</div>
<!-- Edit Modal -->
<div id="editModal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeModal()">&times;</span>
<h2>Uredi udeleženca</h2>
<div class="form-group">
<label>Ime:</label>
<input type="text" id="editName">
</div>
<div class="form-group">
<label>UID kartice:</label>
<input type="text" id="editCardUID">
</div>
<div class="form-group">
<label>UID ključa (neobvezno):</label>
<input type="text" id="editKeyUID">
</div>
<div class="form-group">
<label>Datum veljavnosti (neobvezno):</label>
<input type="date" id="editExpiration">
</div>
<button class="btn btn-primary" onclick="saveChanges()">Shrani</button>
</div>
</div>
<!-- Login Modal -->
<div id="loginModal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeLoginModal()">&times;</span>
<h2>Administratorski Dostop</h2>
<div class="form-group">
<label>Zaupno Geslo:</label>
<input type="password" id="loginPassword" placeholder="Vnesite geslo administratorja" onkeypress="handleLoginKeypress(event)" autocomplete="off">
</div>
<button class="btn btn-primary" onclick="adminLogin()">Prijava v Admin Način</button>
</div>
</div>
<!-- Add Unregistered User Modal -->
<div id="addUnregisteredModal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeAddUnregisteredModal()">&times;</span>
<h2>Dodaj neregistriranega udeleženca</h2>
<div class="form-group">
<label>Ime:</label>
<input type="text" id="inputUnregisteredName" placeholder="Ime udeleženca">
</div>
<button class="btn btn-primary" onclick="addUnregisteredUser()">Dodaj v dnevnik</button>
</div>
</div>
<div id="print-header" style="visibility:hidden;position:fixed;">
<img src="{{ url_for('static', filename='assets/logo.png') }}" alt="Logo">
<p id="print-date-range" style="font-size:13px;color:#444;margin-top:4px;"></p>
</div>
<script src="{{ url_for('static', filename='js/app.js') }}"></script>
</body>
</html>