Initial import of HarborSmith website
Some checks failed
build-website / build (push) Failing after 1m2s
Some checks failed
build-website / build (push) Failing after 1m2s
This commit is contained in:
579
website-mockups/maintenance/maintenance-reports.html
Normal file
579
website-mockups/maintenance/maintenance-reports.html
Normal file
@@ -0,0 +1,579 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Service Reports - HarborSmith Portal</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Playfair+Display:wght@400;700;900&display=swap" rel="stylesheet">
|
||||
<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.js"></script>
|
||||
<link rel="stylesheet" href="../css/voyage-layout.css">
|
||||
<link rel="stylesheet" href="../css/themes.css">
|
||||
<link rel="stylesheet" href="../css/portal-styles.css">
|
||||
<link rel="stylesheet" href="../css/maintenance-enhanced.css">
|
||||
<style>
|
||||
.reports-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
|
||||
gap: 1.5rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.report-card {
|
||||
background: white;
|
||||
border-radius: 16px;
|
||||
padding: 1.5rem;
|
||||
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
|
||||
transition: all 0.3s ease;
|
||||
cursor: pointer;
|
||||
border: 2px solid transparent;
|
||||
}
|
||||
|
||||
.report-card:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 8px 24px rgba(0,0,0,0.12);
|
||||
border-color: #667eea;
|
||||
}
|
||||
|
||||
.report-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.report-status {
|
||||
padding: 0.25rem 0.75rem;
|
||||
border-radius: 20px;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.report-status.completed {
|
||||
background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%);
|
||||
color: #16a34a;
|
||||
}
|
||||
|
||||
.report-status.pending {
|
||||
background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);
|
||||
color: #d97706;
|
||||
}
|
||||
|
||||
.report-status.in-progress {
|
||||
background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);
|
||||
color: #2563eb;
|
||||
}
|
||||
|
||||
.report-details {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
margin-top: 1rem;
|
||||
padding-top: 1rem;
|
||||
border-top: 1px solid #e5e7eb;
|
||||
}
|
||||
|
||||
.report-detail-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.filter-tabs {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
margin-bottom: 2rem;
|
||||
border-bottom: 2px solid #e5e7eb;
|
||||
}
|
||||
|
||||
.filter-tab {
|
||||
padding: 0.75rem 1.5rem;
|
||||
background: none;
|
||||
border: none;
|
||||
color: #6b7280;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.filter-tab:hover {
|
||||
color: #667eea;
|
||||
}
|
||||
|
||||
.filter-tab.active {
|
||||
color: #667eea;
|
||||
}
|
||||
|
||||
.filter-tab.active::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -2px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
|
||||
}
|
||||
|
||||
.stats-row {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||||
gap: 1.5rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.stat-box {
|
||||
background: linear-gradient(135deg, #f9fafb 0%, #f3f4f6 100%);
|
||||
padding: 1.5rem;
|
||||
border-radius: 12px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 2rem;
|
||||
font-weight: 700;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
|
||||
.stat-label {
|
||||
color: #6b7280;
|
||||
font-size: 0.875rem;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="portal">
|
||||
<div class="portal-wrapper">
|
||||
<!-- Sidebar -->
|
||||
<aside class="portal-sidebar" id="sidebar">
|
||||
<div class="sidebar-header">
|
||||
<a href="maintenance-dashboard.html" class="sidebar-logo">
|
||||
<img src="../logo.jpg" alt="HarborSmith">
|
||||
<span>HarborSmith</span>
|
||||
</a>
|
||||
<button class="sidebar-toggle" onclick="toggleSidebar()">
|
||||
<i data-lucide="menu"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<nav class="sidebar-nav">
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">Main</div>
|
||||
<a href="maintenance-dashboard.html" class="sidebar-link">
|
||||
<i data-lucide="layout-dashboard"></i>
|
||||
<span>Dashboard</span>
|
||||
</a>
|
||||
<a href="maintenance-vessels.html" class="sidebar-link">
|
||||
<i data-lucide="ship"></i>
|
||||
<span>My Vessels</span>
|
||||
</a>
|
||||
<a href="maintenance-schedule.html" class="sidebar-link">
|
||||
<i data-lucide="calendar"></i>
|
||||
<span>Schedule Service</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">Records</div>
|
||||
<a href="maintenance-documents.html" class="sidebar-link">
|
||||
<i data-lucide="file-text"></i>
|
||||
<span>Documents</span>
|
||||
</a>
|
||||
<a href="maintenance-reports.html" class="sidebar-link active">
|
||||
<i data-lucide="clipboard-list"></i>
|
||||
<span>Service Reports</span>
|
||||
</a>
|
||||
<a href="maintenance-invoices.html" class="sidebar-link">
|
||||
<i data-lucide="receipt"></i>
|
||||
<span>Invoices</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">Account</div>
|
||||
<a href="#" class="sidebar-link">
|
||||
<i data-lucide="settings"></i>
|
||||
<span>Settings</span>
|
||||
</a>
|
||||
<a href="../portal-login.html" class="sidebar-link" onclick="logout()">
|
||||
<i data-lucide="log-out"></i>
|
||||
<span>Logout</span>
|
||||
</a>
|
||||
</div>
|
||||
</nav>
|
||||
</aside>
|
||||
|
||||
<!-- Main Content -->
|
||||
<main class="portal-main">
|
||||
<!-- Header -->
|
||||
<header class="portal-header">
|
||||
<div class="portal-breadcrumb">
|
||||
<span>Maintenance Portal</span>
|
||||
<span class="breadcrumb-separator">/</span>
|
||||
<span>Service Reports</span>
|
||||
</div>
|
||||
|
||||
<div class="portal-header-actions">
|
||||
<div class="header-search">
|
||||
<i data-lucide="search"></i>
|
||||
<input type="text" placeholder="Search reports...">
|
||||
</div>
|
||||
|
||||
<button class="header-notifications" style="background: none; border: none; cursor: pointer; position: relative;">
|
||||
<i data-lucide="bell"></i>
|
||||
<span class="notification-badge">3</span>
|
||||
</button>
|
||||
|
||||
<div class="header-user">
|
||||
<div class="user-avatar">JS</div>
|
||||
<div>
|
||||
<div style="font-weight: 600;">John Smith</div>
|
||||
<div style="font-size: 0.875rem; color: var(--text-light);">Maintenance Client</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="portal-content">
|
||||
<div class="page-header">
|
||||
<h1>Service Reports</h1>
|
||||
<p>View and download your maintenance service reports</p>
|
||||
</div>
|
||||
|
||||
<!-- Statistics -->
|
||||
<div class="stats-row">
|
||||
<div class="stat-box">
|
||||
<div class="stat-value">24</div>
|
||||
<div class="stat-label">Total Reports</div>
|
||||
</div>
|
||||
<div class="stat-box">
|
||||
<div class="stat-value">18</div>
|
||||
<div class="stat-label">Completed Services</div>
|
||||
</div>
|
||||
<div class="stat-box">
|
||||
<div class="stat-value">3</div>
|
||||
<div class="stat-label">Pending Reviews</div>
|
||||
</div>
|
||||
<div class="stat-box">
|
||||
<div class="stat-value">98%</div>
|
||||
<div class="stat-label">Satisfaction Rate</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Filter Tabs -->
|
||||
<div class="filter-tabs">
|
||||
<button class="filter-tab active" onclick="filterReports('all')">All Reports</button>
|
||||
<button class="filter-tab" onclick="filterReports('completed')">Completed</button>
|
||||
<button class="filter-tab" onclick="filterReports('pending')">Pending</button>
|
||||
<button class="filter-tab" onclick="filterReports('scheduled')">Scheduled</button>
|
||||
</div>
|
||||
|
||||
<!-- Action Bar -->
|
||||
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem;">
|
||||
<div style="display: flex; gap: 1rem;">
|
||||
<select class="form-select" style="width: 200px;">
|
||||
<option>All Vessels</option>
|
||||
<option>Sea Breeze</option>
|
||||
<option>Wave Runner</option>
|
||||
<option>Ocean Spirit</option>
|
||||
</select>
|
||||
<select class="form-select" style="width: 200px;">
|
||||
<option>Last 30 Days</option>
|
||||
<option>Last 3 Months</option>
|
||||
<option>Last 6 Months</option>
|
||||
<option>Last Year</option>
|
||||
</select>
|
||||
</div>
|
||||
<button class="btn btn-primary">
|
||||
<i data-lucide="download"></i>
|
||||
Export All
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Reports Grid -->
|
||||
<div class="reports-grid">
|
||||
<!-- Report Card 1 -->
|
||||
<div class="report-card">
|
||||
<div class="report-header">
|
||||
<div>
|
||||
<h4>Annual Inspection</h4>
|
||||
<p style="color: #6b7280; font-size: 0.875rem;">Sea Breeze</p>
|
||||
</div>
|
||||
<span class="report-status completed">Completed</span>
|
||||
</div>
|
||||
<div class="report-details">
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Report #</span>
|
||||
<strong>SR-2024-089</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Date</span>
|
||||
<strong>Nov 10, 2024</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Technician</span>
|
||||
<strong>Mike Johnson</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Duration</span>
|
||||
<strong>5.5 hours</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex; gap: 0.5rem; margin-top: 1rem;">
|
||||
<button class="btn btn-sm btn-secondary" style="flex: 1;">
|
||||
<i data-lucide="eye"></i>
|
||||
View
|
||||
</button>
|
||||
<button class="btn btn-sm btn-primary" style="flex: 1;">
|
||||
<i data-lucide="download"></i>
|
||||
Download
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Report Card 2 -->
|
||||
<div class="report-card">
|
||||
<div class="report-header">
|
||||
<div>
|
||||
<h4>Engine Service</h4>
|
||||
<p style="color: #6b7280; font-size: 0.875rem;">Wave Runner</p>
|
||||
</div>
|
||||
<span class="report-status completed">Completed</span>
|
||||
</div>
|
||||
<div class="report-details">
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Report #</span>
|
||||
<strong>SR-2024-087</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Date</span>
|
||||
<strong>Oct 28, 2024</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Technician</span>
|
||||
<strong>Sarah Williams</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Duration</span>
|
||||
<strong>3.5 hours</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex; gap: 0.5rem; margin-top: 1rem;">
|
||||
<button class="btn btn-sm btn-secondary" style="flex: 1;">
|
||||
<i data-lucide="eye"></i>
|
||||
View
|
||||
</button>
|
||||
<button class="btn btn-sm btn-primary" style="flex: 1;">
|
||||
<i data-lucide="download"></i>
|
||||
Download
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Report Card 3 -->
|
||||
<div class="report-card">
|
||||
<div class="report-header">
|
||||
<div>
|
||||
<h4>Hull Cleaning</h4>
|
||||
<p style="color: #6b7280; font-size: 0.875rem;">Ocean Spirit</p>
|
||||
</div>
|
||||
<span class="report-status pending">Pending Review</span>
|
||||
</div>
|
||||
<div class="report-details">
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Report #</span>
|
||||
<strong>SR-2024-086</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Date</span>
|
||||
<strong>Nov 5, 2024</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Technician</span>
|
||||
<strong>Tom Davis</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Duration</span>
|
||||
<strong>2.5 hours</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex; gap: 0.5rem; margin-top: 1rem;">
|
||||
<button class="btn btn-sm btn-secondary" style="flex: 1;">
|
||||
<i data-lucide="eye"></i>
|
||||
Review
|
||||
</button>
|
||||
<button class="btn btn-sm" style="flex: 1; background: #fbbf24; color: #78350f;">
|
||||
<i data-lucide="message-circle"></i>
|
||||
Feedback
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Report Card 4 -->
|
||||
<div class="report-card">
|
||||
<div class="report-header">
|
||||
<div>
|
||||
<h4>Electronics Check</h4>
|
||||
<p style="color: #6b7280; font-size: 0.875rem;">Sea Breeze</p>
|
||||
</div>
|
||||
<span class="report-status completed">Completed</span>
|
||||
</div>
|
||||
<div class="report-details">
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Report #</span>
|
||||
<strong>SR-2024-085</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Date</span>
|
||||
<strong>Oct 15, 2024</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Technician</span>
|
||||
<strong>Tom Davis</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Duration</span>
|
||||
<strong>4.0 hours</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex; gap: 0.5rem; margin-top: 1rem;">
|
||||
<button class="btn btn-sm btn-secondary" style="flex: 1;">
|
||||
<i data-lucide="eye"></i>
|
||||
View
|
||||
</button>
|
||||
<button class="btn btn-sm btn-primary" style="flex: 1;">
|
||||
<i data-lucide="download"></i>
|
||||
Download
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Report Card 5 -->
|
||||
<div class="report-card">
|
||||
<div class="report-header">
|
||||
<div>
|
||||
<h4>Quarterly Maintenance</h4>
|
||||
<p style="color: #6b7280; font-size: 0.875rem;">Wave Runner</p>
|
||||
</div>
|
||||
<span class="report-status in-progress">In Progress</span>
|
||||
</div>
|
||||
<div class="report-details">
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Report #</span>
|
||||
<strong>SR-2024-090</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Date</span>
|
||||
<strong>Dec 22, 2024</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Technician</span>
|
||||
<strong>Mike Johnson</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Status</span>
|
||||
<strong>Scheduled</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex; gap: 0.5rem; margin-top: 1rem;">
|
||||
<button class="btn btn-sm btn-secondary" style="flex: 1;">
|
||||
<i data-lucide="calendar"></i>
|
||||
Details
|
||||
</button>
|
||||
<button class="btn btn-sm" style="flex: 1; background: #ef4444; color: white;">
|
||||
<i data-lucide="x-circle"></i>
|
||||
Cancel
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Report Card 6 -->
|
||||
<div class="report-card">
|
||||
<div class="report-header">
|
||||
<div>
|
||||
<h4>Safety Equipment</h4>
|
||||
<p style="color: #6b7280; font-size: 0.875rem;">Ocean Spirit</p>
|
||||
</div>
|
||||
<span class="report-status completed">Completed</span>
|
||||
</div>
|
||||
<div class="report-details">
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Report #</span>
|
||||
<strong>SR-2024-084</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Date</span>
|
||||
<strong>Sep 20, 2024</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Technician</span>
|
||||
<strong>Sarah Williams</strong>
|
||||
</div>
|
||||
<div class="report-detail-row">
|
||||
<span style="color: #6b7280;">Duration</span>
|
||||
<strong>2.0 hours</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex; gap: 0.5rem; margin-top: 1rem;">
|
||||
<button class="btn btn-sm btn-secondary" style="flex: 1;">
|
||||
<i data-lucide="eye"></i>
|
||||
View
|
||||
</button>
|
||||
<button class="btn btn-sm btn-primary" style="flex: 1;">
|
||||
<i data-lucide="download"></i>
|
||||
Download
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Pagination -->
|
||||
<div style="display: flex; justify-content: center; gap: 0.5rem; margin-top: 3rem;">
|
||||
<button class="btn btn-sm" disabled style="opacity: 0.5;">
|
||||
<i data-lucide="chevron-left"></i>
|
||||
</button>
|
||||
<button class="btn btn-sm btn-primary">1</button>
|
||||
<button class="btn btn-sm">2</button>
|
||||
<button class="btn btn-sm">3</button>
|
||||
<button class="btn btn-sm">4</button>
|
||||
<button class="btn btn-sm">
|
||||
<i data-lucide="chevron-right"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Initialize Lucide icons
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
lucide.createIcons();
|
||||
});
|
||||
|
||||
// Toggle sidebar
|
||||
function toggleSidebar() {
|
||||
document.getElementById('sidebar').classList.toggle('collapsed');
|
||||
}
|
||||
|
||||
// Logout function
|
||||
function logout() {
|
||||
localStorage.clear();
|
||||
window.location.href = '../portal-login.html';
|
||||
}
|
||||
|
||||
// Filter reports
|
||||
function filterReports(type) {
|
||||
document.querySelectorAll('.filter-tab').forEach(tab => {
|
||||
tab.classList.remove('active');
|
||||
});
|
||||
event.target.classList.add('active');
|
||||
// In a real app, this would filter the reports
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user