2025-04-10 04:08:55 +04:00

183 lines
8.9 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Multi-Project Progress Monitor</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
<div class="container">
<!-- Project Selector -->
<div class="row mb-3 align-items-center">
<div class="col-auto">
<label for="projectSelector" class="col-form-label">Select Project:</label>
</div>
<div class="col">
<select class="form-select" id="projectSelector">
{% if projects %}
{% for project in projects %}
<option value="{{ project }}">{{ project }}</option>
{% endfor %}
{% else %}
<option value="" disabled>No projects found</option>
{% endif %}
</select>
</div>
<!-- Add Project Button -->
<div class="col-auto">
<button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#addProjectModal">
Add Project
</button>
</div>
</div>
<!-- Navigation between views (remains the same) -->
<nav class="nav nav-pills mb-3" id="viewTabs">
<a class="nav-link active" aria-current="page" href="#" data-view="scada">SCADA Progress</a>
<a class="nav-link" href="#" data-view="drawings">Drawing Progress</a>
<a class="nav-link" href="#" data-view="conflicts">Conflicts</a>
</nav>
<!-- Dynamic Content Area -->
<div id="project-content">
<!-- SCADA Content Section -->
<div id="scada-content" class="view-content">
<h1 class="mb-4">SCADA Device Placement Progress (<span class="project-name-display"></span>)</h1>
<p>Compares the Equipment Manifest against the SCADA view.json files.</p>
<div id="overall-scada-progress" class="chart-container">
<span class="chart-label">Overall SCADA Progress</span>
<canvas id="overall-scada-chart-canvas" class="panel-chart-canvas" style="max-width: 200px; max-height: 200px;"></canvas>
<div id="overall-scada-text" style="font-weight: bold; margin-top: 10px;">Found in SCADA: 0/0 (0%)</div>
</div>
<hr>
<h2>SCADA Progress by Control Panel</h2>
<div id="scada-panels-progress">
<p>Loading panel data...</p>
</div>
</div>
<!-- Drawing Content Section (Initially Hidden) -->
<div id="drawings-content" class="view-content" style="display: none;">
<h1 class="mb-4">Drawing Device Placement Progress (<span class="project-name-display"></span>)</h1>
<p>Compares the Equipment Manifest against the extracted text from drawing files (.txt).</p>
<div id="overall-drawing-progress" class="chart-container">
<span class="chart-label">Overall Drawing Progress</span>
<canvas id="overall-drawing-chart-canvas" class="panel-chart-canvas" style="max-width: 200px; max-height: 200px;"></canvas>
<div id="overall-drawing-text" style="font-weight: bold; margin-top: 10px;">Found in Drawing: 0/0 (0%)</div>
</div>
<hr>
<h2>Drawing Progress by Control Panel</h2>
<div id="drawing-panels-progress">
<p>Loading panel data...</p>
</div>
</div>
<!-- Conflicts Content Section (Initially Hidden) -->
<div id="conflicts-content" class="view-content" style="display: none;">
<h1 class="mb-4">SCADA/Drawing Conflicts (<span class="project-name-display"></span>) <span id="conflict-count" class="badge bg-warning ms-2">0</span></h1>
<p>Items found in SCADA views but <strong>not</strong> found in the extracted drawing text files.</p>
<div id="panels-conflicts">
<p>Loading conflict data...</p>
</div>
</div>
</div> <!-- End project-content -->
</div> <!-- End container -->
<!-- Status Bar -->
<div class="status-bar">
Status (<span id="selected-project-status-name">...</span>): <span id="status-message">Initializing...</span> | Last Commit: <span id="last-commit">N/A</span>
</div>
<!-- Bootstrap Modal for Details (remains the same structure, content filled by JS) -->
<div class="modal fade" id="detailsModal" tabindex="-1" aria-labelledby="detailsModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="detailsModalLabel">Details for Panel: <span></span></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<table class="table table-sm table-striped">
<thead>
<tr>
<th>Alias</th>
<th>Panel</th>
<th>SCADA Status</th>
<th>Drawing Status</th>
<th>Equipment Type</th>
<th>Type of Conveyor</th>
</tr>
</thead>
<tbody>
<!-- Missing/Found items will be populated here -->
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- NEW: Add Project Modal -->
<div class="modal fade" id="addProjectModal" tabindex="-1" aria-labelledby="addProjectModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="addProjectModalLabel">Add New Project</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="addProjectForm" enctype="multipart/form-data">
<div class="mb-3">
<label for="projectName" class="form-label">Project Name</label>
<input type="text" class="form-control" id="projectName" name="projectName" required>
<div class="form-text">Use only letters, numbers, underscores, or hyphens.</div>
</div>
<div class="mb-3">
<label for="repoUrl" class="form-label">Git Repository URL</label>
<input type="url" class="form-control" id="repoUrl" name="repoUrl" required>
<div class="form-text">The URL will be used for cloning after restart.</div>
</div>
<div class="mb-3">
<label for="manifestFile" class="form-label">Manifest CSV File</label>
<input class="form-control" type="file" id="manifestFile" name="manifestFile" accept=".csv" required>
</div>
<div class="mb-3">
<label for="pdfFiles" class="form-label">Drawing PDF Files</label>
<input class="form-control" type="file" id="pdfFiles" name="pdfFiles" accept=".pdf" multiple required>
</div>
<div id="addProjectStatus" class="mt-3" style="display: none;"></div>
<button type="submit" class="btn btn-primary">Add Project & Prepare for Restart</button>
</form>
</div>
</div>
</div>
</div>
<!-- End Add Project Modal -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<!-- Pass initial data to JavaScript -->
<script>
// Embed initial data directly into the page for faster initial load
const initialServerData = {
projects: {{ projects | tojson }},
status: {{ initial_statuses | tojson }}
// Note: Full progress data is not embedded initially, fetched via SSE
};
</script>
<script src="/static/js/script.js"></script>
</body>
</html>