created quality page

This commit is contained in:
2025-04-23 16:34:42 +03:00
parent d6cd4d0e69
commit 3ecd0e1361
7 changed files with 421 additions and 7 deletions

View File

@@ -120,4 +120,80 @@ document.addEventListener('DOMContentLoaded', () => {
deleteUserPopup.style.display = 'none';
}
});
const reportButtons = document.querySelectorAll('.report-btn');
const reportTitle = document.getElementById('report-title');
const reportTable = document.getElementById('report-table');
// Handle report button clicks
reportButtons.forEach((button) => {
button.addEventListener('click', () => {
const reportNumber = button.dataset.report;
// Update the title dynamically
reportTitle.textContent = `Data for "Report ${reportNumber}"`;
// Fetch data for the selected report (mocked for now)
fetch(`/get_report_data?report=${reportNumber}`)
.then((response) => response.json())
.then((data) => {
populateTable(data);
})
.catch((error) => {
console.error('Error fetching report data:', error);
});
});
});
// Populate the table with data
function populateTable(data) {
const tableHead = reportTable.querySelector('thead tr');
const tableBody = reportTable.querySelector('tbody');
// Clear existing table content
tableHead.innerHTML = '';
tableBody.innerHTML = '';
if (data.headers && data.rows) {
// Populate table headers
data.headers.forEach((header) => {
const th = document.createElement('th');
th.textContent = header;
tableHead.appendChild(th);
});
// Populate table rows
data.rows.forEach((row) => {
const tr = document.createElement('tr');
row.forEach((cell) => {
const td = document.createElement('td');
td.textContent = cell;
tr.appendChild(td);
});
tableBody.appendChild(tr);
});
} else {
// No data available
const tr = document.createElement('tr');
const td = document.createElement('td');
td.textContent = 'No data available.';
td.colSpan = data.headers ? data.headers.length : 1;
tr.appendChild(td);
tableBody.appendChild(tr);
}
}
// Export buttons
const exportCsvButton = document.getElementById('export-csv');
const exportPdfButton = document.getElementById('export-pdf');
exportCsvButton.addEventListener('click', () => {
alert('Exporting current report as CSV...');
// Add logic to export the current report as CSV
});
exportPdfButton.addEventListener('click', () => {
alert('Exporting current report as PDF...');
// Add logic to export the current report as PDF
});
});

View File

@@ -556,4 +556,87 @@ body.dark-mode .scan-table tr:nth-child(odd) {
.scan-form-card, .scan-table-card {
width: 100%; /* Make both cards take full width */
}
}
/* Dashboard container */
.dashboard-container {
display: flex;
flex-wrap: wrap; /* Allow wrapping to the next row if needed */
justify-content: space-between; /* Distribute cards evenly */
gap: 20px; /* Add spacing between the cards */
margin: 20px auto; /* Center the container */
max-width: 1200px; /* Optional: Limit the maximum width of the container */
}
/* Full-width card for the dashboard */
.dashboard-full-width-card {
flex: 0 0 100%; /* Take up the full width of the container */
text-align: center;
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
}
/* Individual cards for the dashboard */
.dashboard-card {
flex: 1 1 calc(25% - 20px); /* Ensure cards are evenly distributed */
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
text-align: center;
transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
}
/* Light mode styles for dashboard cards */
body.light-mode .dashboard-card,
body.light-mode .dashboard-full-width-card {
background: #fff;
color: #000;
border: 1px solid #ddd;
}
/* Dark mode styles for dashboard cards */
body.dark-mode .dashboard-card,
body.dark-mode .dashboard-full-width-card {
background: #1e1e1e;
color: #fff;
border: 1px solid #444;
}
/* Ensure cards have consistent height */
.dashboard-card h3 {
margin-bottom: 15px;
font-size: 1.5em;
}
.dashboard-card p {
margin-bottom: 20px;
color: inherit; /* Inherit text color from the card */
}
.dashboard-card .btn {
display: inline-block;
padding: 10px 20px;
font-size: 1em;
color: #fff;
background-color: #007bff;
text-decoration: none;
border-radius: 5px;
transition: background-color 0.3s ease;
}
.dashboard-card .btn:hover {
background-color: #0056b3;
}
/* Responsive design for smaller screens */
@media (max-width: 768px) {
.dashboard-card {
flex: 1 1 100%; /* Stack cards vertically on smaller screens */
}
.dashboard-full-width-card {
flex: 1 1 100%; /* Ensure the full-width card spans the entire width */
}
}