Medical Panel is a frontend interface for clinic management with static data demonstration.
Laboratory results view with PDF export option
Patient medical history visualization
-
Patient List
-
Real-time search by name and ID
-
Status visualization (Active, Pending, Inactive)
-
Patient List Actions:
<!--View Details Button (ποΈ) --> <button class="action-btn"><i class="fas fa-eye"></i></button> - Opens a modal with detailed patient information - Shows ID, name, age, last visit and status - Can be closed with X button or clicking outside <!-- Edit Patient Button --> <button class="action-btn"><i class="fas fa-edit"></i></button> - Opens a modal form to edit patient - Allows name and status modification - ID in read-only mode
-
-
Emergency Button
- Emergency contacts modal
- Direct call to emergency numbers
- On-duty medical contacts list
<button class="emergency-btn"> <i class="fas fa-phone"></i> Emergency </button>
-
Dynamic Forms
- Pre-populated fields with current data
- Required field validation
- Save and cancel buttons
-
Navigation
- Show/hide container system
- Functional dropdown menus
- Default dashboard
-
PDF Export
- Laboratory results export to PDF
- Automatic button removal in PDF version
- Pending appointments visualization
- Diagnosis visualization
- Treatment history
- Current medication
- Analysis visualization
- PDF export
- Medical conditions visualization
- Treatment details
- Patient monitoring
- Personal information
- Credentials
- HTML5
- CSS3
- JavaScript
- External Libraries:
- Font Awesome 6.0.0 (for icons)
- html2pdf.js 0.10.1 (for PDF export)
- Clone the repository
- Open index.html in a web browser
- No additional configuration required
- Adaptable to multiple devices
- Optimized mobile menu
- Flexible layouts
The system implements dynamic navigation that:
- Shows only one container at a time
- Automatically hides other sections
- Maintains clean and organized interface state
- Dashboard (
dashboard-container) - Patient List (
patients-list-container) - New Patients (
new-patient-container) - Pending Appointments (
pending-appointments-container) - Medical History (
medical-history-container) - Laboratory Results (
lab-results-container) - Diagnostics (
diagnostics-container) - Prescriptions (
prescriptions-container) - Statistics (
statistics-container) - Doctor Profile (
doctor-profile-container)
- Logic for correctly showing/hiding containers
- Prevent multiple containers from showing simultaneously
- Maintain consistent navigation state
function hideAllContainers() {
Object.values(containers).forEach(container => {
if (container) {
container.style.display = 'none';
}
});
}- Dynamic patient filtering
- Handling no results cases
- Performance optimization in large tables
function filterPatients(searchTerm) {
searchTerm = searchTerm.toLowerCase();
let hasResults = false;
tableRows.forEach(row => {
const name = row.querySelector('td:nth-child(2)').textContent.toLowerCase();
const id = row.querySelector('td:nth-child(1)').textContent.toLowerCase();
if (name.includes(searchTerm) || id.includes(searchTerm)) {
row.style.display = '';
hasResults = true;
} else {
row.style.display = 'none';
}
});
}- Patient data validation
- Automatic ID generation
- Precise age calculations
function getNextPatientId() {
const rows = document.querySelectorAll('.patients-table tbody tr');
let maxId = 0;
rows.forEach(row => {
const id = parseInt(row.querySelector('td:first-child').textContent.replace('#', ''));
maxId = Math.max(maxId, id);
});
return String(maxId + 1).padStart(3, '0');
}


