created quality page
This commit is contained in:
@@ -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
|
||||
});
|
||||
});
|
||||
@@ -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 */
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user