oceanhelm 0.0.16 → 0.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oceanhelm.umd.js","sources":["../src/components/ConfigurableSidebar.vue","../src/components/VesselList.vue","../src/components/DashHead.vue","../src/components/Reports.vue","../src/components/OceanHelmMaintenance.vue","../src/components/ActivityLogs.vue","../src/components/CrewManagement.vue","../src/components/RequisitionSystem.vue","../src/utils/sidebarConfig.js","../src/utils/permissions.js","../src/index.js"],"sourcesContent":["<template>\n <nav id=\"sidebar\" :class=\"sidebarClasses\">\n <!-- Logo Section -->\n <div class=\"logo d-flex align-items-center left\" v-if=\"showLogo\">\n <span style=\"margin-left: 45px;\">{{ brandName }}</span>\n </div>\n\n <!-- Navigation Items -->\n <ul class=\"list-unstyled components mt-4\">\n <li v-for=\"(item, index) in filteredMenuItems\" :key=\"index\"\n :class=\"{ 'active': item.active, 'dropdown': item.type === 'dropdown' }\" @click=\"handleItemClick(item)\">\n <!-- Regular Link -->\n <a v-if=\"item.type === 'link'\" :href=\"item.href || '#'\" @click.prevent=\"handleNavigation(item)\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n </a>\n\n <!-- Button/Action -->\n <a v-else-if=\"item.type === 'button'\" @click.prevent=\"handleAction(item)\" style=\"cursor: pointer;\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n </a>\n\n <!-- Dropdown -->\n <template v-else-if=\"item.type === 'dropdown'\">\n <a class=\"dropdown-toggle\" @click.prevent=\"toggleDropdown(item)\" style=\"cursor: pointer;\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n <i class=\"\" :class=\"{ open: item.open }\"></i>\n </a>\n\n <ul v-show=\"item.open\" class=\"sidebar-dropdown\">\n <li v-for=\"(subItem, subIndex) in getFilteredChildren(item)\" :key=\"subIndex\">\n <a class=\"dropdown-item\" @click.prevent=\"handleAction(subItem)\">\n {{ subItem.label }}\n </a>\n </li>\n </ul>\n </template>\n\n <!-- Separator -->\n <div v-else-if=\"item.type === 'separator'\" class=\"dropdown-divider\"></div>\n\n <!-- Static Text -->\n <a v-else-if=\"item.type === 'text'\">\n {{ item.label }}\n </a>\n </li>\n </ul>\n\n <!-- Custom Slot for Additional Content -->\n <slot name=\"footer\"></slot>\n </nav>\n</template>\n\n<script>\nexport default {\n name: 'ConfigurableSidebar',\n\n props: {\n // Brand configuration\n brandName: {\n type: String,\n default: 'OceanHelm'\n },\n logoIcon: {\n type: String,\n default: 'bi bi-water'\n },\n showLogo: {\n type: Boolean,\n default: true\n },\n\n // Menu items configuration\n menuItems: {\n type: Array,\n required: true,\n default: () => []\n },\n\n // User profile for role-based filtering\n // Expected shape: { role: 'staff', categories: ['hr', 'purchaser'] }\n userProfile: {\n type: Object,\n default: () => ({})\n },\n\n // Sidebar behavior\n responsive: {\n type: Boolean,\n default: true\n },\n\n // Custom classes\n customClasses: {\n type: String,\n default: ''\n },\n\n // Optional override: provide your own permission function\n // Signature: (item, userProfile) => Boolean\n permissionChecker: {\n type: Function,\n default: null\n }\n },\n\n computed: {\n sidebarClasses() {\n return this.customClasses;\n },\n\n filteredMenuItems() {\n return this.menuItems.filter(item => {\n if (!this.hasPermission(item)) return false;\n\n // For dropdowns, only show if at least one child is permitted\n if (item.type === 'dropdown' && item.children) {\n return item.children.some(child => this.hasPermission(child));\n }\n\n return true;\n });\n }\n },\n\n mounted() {\n if (this.responsive) {\n this.initializeResponsiveBehavior();\n }\n },\n\n methods: {\n toggleDropdown(item) {\n // Accordion behaviour — close others\n this.filteredMenuItems.forEach(i => {\n if (i !== item && i.type === 'dropdown') {\n i.open = false;\n }\n });\n item.open = !item.open;\n },\n\n getFilteredChildren(item) {\n if (!item.children) return [];\n return item.children.filter(child => this.hasPermission(child));\n },\n\n // ─── Permission logic ────────────────────────────────────────────────────\n // Rule summary:\n // 1. Use permissionChecker prop if supplied.\n // 2. No `roles` array on the item → visible to everyone.\n // 3. User's role must be in item.roles.\n // 4. If the item also has a `categories` array AND the user's role is\n // NOT one of the \"elevated\" roles (owner, super-staff), the user must\n // possess at least one of the listed categories.\n // Elevated roles bypass the category gate entirely.\n // ────────────────────────────────────────────────────────────────────────\n hasPermission(item) {\n if (this.permissionChecker) {\n return this.permissionChecker(item, this.userProfile);\n }\n\n const userRole = this.userProfile?.role || '';\n const userCategories = this.userProfile?.categories || [];\n\n // No role restriction — always visible\n if (!item.roles || item.roles.length === 0) return true;\n\n // Role must be listed\n if (!item.roles.includes(userRole)) return false;\n\n // Category gate — only applies when the item declares categories\n // AND the user is not an elevated role that bypasses it\n if (item.categories && item.categories.length > 0) {\n const elevatedRoles = ['owner', 'super-staff'];\n if (!elevatedRoles.includes(userRole)) {\n // Regular staff: must hold at least one of the required categories\n const hasCategory = item.categories.some(cat => userCategories.includes(cat));\n if (!hasCategory) return false;\n }\n // Elevated roles fall through — no category check needed\n }\n\n return true;\n },\n\n // Navigation handling\n handleNavigation(item) {\n this.$emit('navigate', item);\n\n if (item.href && !item.preventDefault) {\n if (item.external) {\n window.open(item.href, '_blank');\n } else {\n this.$router?.push(item.href);\n }\n }\n },\n\n // Action handling\n handleAction(item) {\n this.$emit('action', item);\n },\n\n // Item click handling\n handleItemClick(item) {\n this.$emit('item-click', item);\n },\n\n // Responsive behaviour\n initializeResponsiveBehavior() {\n const sidebarToggle = document.getElementById('sidebarToggle');\n const sidebar = document.getElementById('sidebar');\n const content = document.getElementById('content');\n\n if (!sidebarToggle || !sidebar || !content) return;\n\n if (window.innerWidth >= 768) {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n }\n\n sidebarToggle.addEventListener('click', () => {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n });\n\n document.addEventListener('click', (event) => {\n const isClickInsideSidebar = sidebar.contains(event.target);\n const isClickOnToggleBtn = sidebarToggle.contains(event.target);\n\n if (!isClickInsideSidebar && !isClickOnToggleBtn &&\n window.innerWidth < 768 &&\n sidebar.classList.contains('active')) {\n sidebar.classList.remove('active');\n content.classList.remove('active');\n }\n });\n }\n },\n\n emits: ['navigate', 'action', 'item-click']\n}\n</script>\n\n<style>\n.sidebar-dropdown {\n list-style: none;\n padding-left: 20px;\n margin: 5px 0 10px 0;\n}\n\n.sidebar-dropdown li a {\n display: block;\n padding: 8px 15px;\n font-size: 14px;\n color: #ddd;\n border-radius: 4px;\n transition: background 0.2s ease;\n}\n\n.sidebar-dropdown li a:hover {\n background: rgba(255, 255, 255, 0.1);\n}\n\n.dropdown-arrow {\n float: right;\n transition: transform 0.2s ease;\n}\n\n.dropdown-arrow.open {\n transform: rotate(180deg);\n}\n</style>","<template>\n <!-- Fleet Summary -->\n <div class=\"row mb-3\">\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\" @click=\"filterVessels('Active')\"\n :class=\"{ 'border-primary border-2': activeFilter === 'Active' }\" style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-primary bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-check-circle-fill text-primary fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Active Vessels</h6>\n <h3 class=\"mt-2 mb-0\">{{ activeVesselsCount }}</h3>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\" @click=\"filterVessels('Inactive')\"\n :class=\"{ 'border-secondary border-2': activeFilter === 'Inactive' }\" style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-secondary bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-pause-circle-fill text-secondary fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Inactive</h6>\n <h3 class=\"mt-2 mb-0\">{{ inactiveVesselsCount }}</h3>\n </div>\n </div>\n </div>\n </div>\n <!-- Register New Fleet -->\n <div class=\"col-md-4\" v-if=\"canAddVessel\">\n <div class=\"card border-0 shadow-sm\" @click=\"handleAddVessel\" style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-success bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-patch-plus-fill text-success fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Add New Vessel</h6>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mb-4\">\n <h4 class=\"mb-0\"><i class=\"bi bi-ship me-2\"></i>Registered Vessels</h4>\n <button v-if=\"activeFilter !== 'All'\" class=\"btn btn-sm btn-outline-secondary\" @click=\"clearFilter\">\n <i class=\"bi bi-x-circle me-1\"></i>Clear Filter\n </button>\n </div>\n\n <!-- Filter indicator -->\n <div v-if=\"activeFilter !== 'All'\" class=\"alert alert-info mb-3\" role=\"alert\">\n Showing <strong>{{ activeFilter }}</strong> vessels ({{ filteredVessels.length }})\n </div>\n\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"text-center py-4\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n <p class=\"mt-2\">Loading vessels...</p>\n </div>\n\n <!-- Empty State -->\n <div v-else-if=\"!filteredVessels.length && activeFilter === 'All'\" class=\"alert alert-primary\" role=\"alert\">\n <h4 class=\"alert-heading\">Empty Fleet!</h4>\n <p>You have an empty fleet, you have not added any vessel yet.</p>\n <hr>\n <p class=\"mb-0\">Click on the add vessel button above, to start adding vessels to your fleet</p>\n </div>\n\n <!-- No results for filter -->\n <div v-else-if=\"!filteredVessels.length && activeFilter !== 'All'\" class=\"alert alert-warning\" role=\"alert\">\n <h4 class=\"alert-heading\">No {{ activeFilter }} Vessels</h4>\n <p class=\"mb-0\">There are no {{ activeFilter.toLowerCase() }} vessels in your fleet.</p>\n </div>\n\n <!-- Vessel Cards -->\n <div v-else class=\"row\">\n <div class=\"col-lg-6\" v-for=\"vessel in filteredVessels\" :key=\"vessel.registrationNumber || vessel.id\">\n <div class=\"vessel-card\" @click=\"handleVesselClick(vessel)\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"vessel-icon v-left\">\n <i class=\"fas fa-ship\"></i>\n </div>\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <h5 class=\"card-title mb-0\">{{ vessel.name }}</h5>\n <span :class=\"['vessel-status', statusClass(vessel.status)]\">{{ vessel.status }}</span>\n </div>\n <div class=\"row\">\n <div class=\"col-6\">\n <small class=\"text-muted\">Registration #:</small>\n <p class=\"mb-0\">{{ vessel.registrationNumber }}</p>\n </div>\n\n <div class=\"col-6\" v-if=\"vessel.date\">\n <template v-if=\"vessel.status === 'Active'\">\n <small class=\"text-muted\">Active Duration:</small>\n <p class=\"mb-0\">{{ getDuration(vessel.date, vessel.registrationNumber) }}</p>\n </template>\n <template v-else>\n <small class=\"text-muted\">Inactive Duration:</small>\n <p class=\"mb-0\">{{ getDuration(vessel.date, vessel.registrationNumber) }}</p>\n </template>\n </div>\n\n <div class=\"col-6\" v-else>\n <small class=\"text-muted\">{{ vessel.status }} Duration:</small>\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm mt-1\"\n @click.stop=\"setVesselDate(vessel.registrationNumber)\">\n Set Date\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"action-icon v-left delete\">\n <i class=\"bi bi-trash\" @click.stop=\"handleDeleteVessel(vessel)\"></i>\n </div>\n <button class=\"btn btn-primary\" @click.stop=\"handleToggleStatus(vessel)\">\n {{ vessel.status === 'Active' ? 'Mark Inactive' : 'Mark Active' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'VesselList',\n\n props: {\n // Required props\n vessels: {\n type: Array,\n required: true,\n default: () => []\n },\n userProfile: {\n type: Object,\n required: true,\n default: () => ({ role: 'viewer', vessel: null })\n },\n\n // Optional props\n loading: {\n type: Boolean,\n default: false\n },\n currentRoute: {\n type: String,\n default: 'dashboard' // 'dashboard', 'maintenanceroute', 'crewroute'\n },\n\n // Configuration props\n config: {\n type: Object,\n default: () => ({\n enableAdd: true,\n enableEdit: true,\n enableDelete: true,\n enableStatusToggle: true,\n showCertifications: true\n })\n }\n },\n\n data() {\n return {\n activeFilter: 'All' // 'All', 'Active', or 'Inactive'\n };\n },\n\n emits: [\n 'vessel-add',\n 'vessel-click',\n 'vessel-edit',\n 'vessel-delete',\n 'vessel-toggle-status',\n 'vessel-navigate',\n 'access-denied',\n 'date-change'\n ],\n\n computed: {\n activeVesselsCount() {\n return this.vessels.filter(vessel => vessel.status === \"Active\").length;\n },\n\n inactiveVesselsCount() {\n return this.vessels.filter(vessel => vessel.status === \"Inactive\").length;\n },\n\n filteredVessels() {\n if (this.activeFilter === 'All') {\n return this.vessels;\n }\n return this.vessels.filter(vessel => vessel.status === this.activeFilter);\n },\n\n canAddVessel() {\n return this.config.enableAdd &&\n (this.userProfile.role === 'owner' || this.userProfile.role === 'staff');\n }\n },\n\n methods: {\n // Filter methods\n filterVessels(status) {\n this.activeFilter = status;\n },\n\n clearFilter() {\n this.activeFilter = 'All';\n },\n\n // Event handlers that emit to parent\n handleAddVessel() {\n if (!this.canAddVessel) {\n this.handleAccessDenied('add vessel');\n return;\n }\n this.$emit('vessel-add');\n },\n\n handleVesselClick(vessel) {\n const navigationData = {\n vessel,\n route: this.currentRoute,\n id: vessel.registrationNumber,\n name: vessel.name\n };\n\n if (this.grantAccess(vessel)) {\n if (this.currentRoute === 'dashboard') {\n this.$emit('vessel-click', vessel);\n } else {\n this.$emit('vessel-navigate', navigationData);\n }\n } else {\n this.handleAccessDenied('this protected route');\n }\n },\n\n handleDeleteVessel(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('delete vessel');\n return;\n }\n\n if (!this.config.enableDelete) {\n return;\n }\n\n this.$emit('vessel-delete', vessel);\n },\n\n handleToggleStatus(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('change vessel status');\n return;\n }\n\n if (!this.config.enableStatusToggle) {\n return;\n }\n\n this.$emit('vessel-toggle-status', vessel);\n },\n\n handleEditVessel(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('edit vessel');\n return;\n }\n\n if (!this.config.enableEdit) {\n return;\n }\n\n this.$emit('vessel-edit', vessel);\n },\n\n handleAccessDenied(action) {\n this.$emit('access-denied', { action, userProfile: this.userProfile });\n },\n\n // Utility methods (keep these in component as they're UI-related)\n statusClass(status) {\n const normalized = status?.toLowerCase() || '';\n return `status-${normalized}`;\n },\n\n getDuration(date, registrationNumber) {\n const now = new Date();\n const inputDate = new Date(date);\n\n // difference in milliseconds\n const diffMs = now - inputDate;\n\n if (diffMs < 0) return \"Invalid (future date)\";\n\n // convert to hours\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60));\n\n const days = Math.floor(diffHours / 24);\n const hours = diffHours % 24;\n\n let result = \"\";\n\n if (days > 0) {\n result += `${days} day${days > 1 ? \"s\" : \"\"}`;\n }\n if (hours > 0) {\n result += (result ? \" \" : \"\") + `${hours} hr${hours > 1 ? \"s\" : \"\"}`;\n }\n\n return result || '0 hr'\n },\n\n setVesselDate(registrationNumber) {\n this.$emit('date-change', registrationNumber);\n },\n\n grantAccess(vessel) {\n const { role, vessel: userVessel, categories = [] } = this.userProfile;\n\n // Assign marine-staff only\n this.userRole = categories.includes('marine-staff') ? 'marine-staff' : 'staff';\n\n return (\n role === 'owner' ||\n role === 'marine-staff' ||\n (role === 'captain' && userVessel === vessel.name)\n );\n\n },\n\n getDaysToExpiry(expiry_date) {\n if (!expiry_date) return null;\n\n const today = new Date();\n const expiry = new Date(expiry_date);\n const diffTime = expiry - today;\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n return diffDays;\n },\n\n getExpiryClass(expiry_date) {\n const days = this.getDaysToExpiry(expiry_date);\n if (days === null) return '';\n if (days < 30) return 'cert-critical';\n if (days < 90) return 'cert-warning';\n return '';\n }\n }\n}\n</script>\n\n<style>\n.v-left {\n margin-left: 20px;\n}\n\n.vessel-card {\n background: white;\n border-radius: 10px;\n box-shadow: 0 8px 16px rgba(0, 105, 192, 0.15);\n transition: all 0.3s ease;\n margin-bottom: 20px;\n overflow: hidden;\n border-left: 4px solid var(--accent-color);\n}\n\n.vessel-card:hover {\n transform: translateY(-5px);\n box-shadow: 0 12px 20px rgba(0, 105, 192, 0.2);\n}\n\n.vessel-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 50px;\n height: 50px;\n background-color: #e3f2fd;\n border-radius: 10px;\n color: var(--accent-color);\n font-size: 24px;\n margin-right: 15px;\n}\n\n.black {\n color: black !important;\n}\n\n.action-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border-radius: 20px;\n color: var(--accent-color);\n font-size: 16px;\n margin-right: 15px;\n margin-top: 20px;\n margin-bottom: 10px;\n}\n\n.delete {\n background-color: var(--danger);\n}\n\n.edit {\n background-color: var(--success);\n}\n\n.vessel-status {\n display: inline-block;\n padding: 5px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-active {\n background-color: #e8f5e9;\n color: #2e7d32;\n}\n\n.status-maintenance {\n background-color: #fff8e1;\n color: #f57f17;\n}\n\n.status-inactive {\n background-color: #f5f5f5;\n color: #757575;\n}\n</style>","<template>\n <div class=\"page-header d-flex justify-content-between align-items-center\">\n <h4 style=\"margin-left: 20px;\">{{ name }}</h4>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary me-2\" @click=\"addUser()\" v-if=\"this.userProfile.role == 'owner'\">\n <i class=\"bi bi-bell\"></i>\n <span class=\"badge bg-danger\">1</span>\n </button>\n <button class=\"btn btn-outline-primary\" @click=\"loggedIn()\">\n <i class=\"bi bi-person-circle\"></i>\n </button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'DashHead',\n \n props: {\n name: {\n type: String,\n required: true\n },\n userProfile: {\n type: Object,\n required: true,\n default: () => ({ role: 'viewer', vessel: null })\n }\n },\n\n emits: [\n 'add-user',\n 'logged-in'\n ],\n\n methods: {\n addUser() {\n this.$emit('add-user');\n },\n loggedIn() {\n this.$emit('logged-in');\n }\n }\n}\n</script>\n\n<style>\n.page-header {\n margin-bottom: 30px;\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 15px;\n}\n\n.btn-outline-primary {\n border: 1px solid #0d6efd !important;\n}\n\n.btn-outline-primary:hover {\n background-color: #0d6efd !important;\n border-color: #0d6efd !important;\n color: white !important;\n}\n</style>","<template>\n <div class=\"reports-container\">\n\n <!-- ── Missing Reports Alert Banner ── -->\n <transition name=\"slide-down\">\n <div class=\"missing-banner\" v-if=\"!bannerDismissed && (pendingContext || missingReports.length > 0)\">\n <div class=\"missing-banner-inner\">\n <div class=\"missing-icon\"><i class=\"bi bi-exclamation-triangle-fill\"></i></div>\n <div class=\"missing-content\">\n <strong v-if=\"pendingContext\">\n Action Required — Report for\n <span class=\"ref-chip\">{{ pendingContext.entity_ref }}</span> must be submitted\n </strong>\n <strong v-else>\n {{ missingReports.length }} report{{ missingReports.length > 1 ? 's' : '' }} awaiting\n submission\n </strong>\n <p v-if=\"pendingContext\">{{ pendingContext.title }}</p>\n </div>\n <button class=\"btn btn-warning btn-sm fw-bold\" @click=\"openReportForm('qhse')\">\n <i class=\"bi bi-pencil-square me-1\"></i> Submit Report\n </button>\n <button class=\"btn-dismiss\" @click=\"dismissBanner\" title=\"Dismiss\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n </div>\n </transition>\n\n <!-- ── Page Header ── -->\n <div class=\"page-header d-flex justify-content-between align-items-center\">\n <div>\n <h4 class=\"page-title\">Reports</h4>\n <p class=\"page-subtitle\">Document Management & QHSE Reports</p>\n </div>\n <div class=\"header-actions\">\n <div class=\"btn-group-split\">\n <button class=\"btn btn-outline-primary\" @click=\"openReportForm('qhse')\">\n <i class=\"bi bi-shield-check\"></i> QHSE Report\n </button>\n <button class=\"btn btn-outline-secondary\" @click=\"openReportForm('manual')\">\n <i class=\"bi bi-file-earmark-plus\"></i> Manual Report\n </button>\n <!--\n <button class=\"btn btn-primary\" @click=\"showNewFolderModal = true\">\n <i class=\"bi bi-folder-plus\"></i> New Folder\n </button>\n -->\n </div>\n </div>\n </div>\n\n <!-- ── Tab Navigation ── -->\n <div class=\"tab-nav\">\n <button :class=\"['tab-btn', { active: activeTab === 'all' }]\" @click=\"activeTab = 'all'\">\n All Reports <span class=\"tab-count\">{{ reports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'drill' }]\" @click=\"activeTab = 'drill'\">\n <i class=\"bi bi-people-fill me-1\"></i>Drills\n <span class=\"tab-count drill\">{{ drillReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'incident' }]\" @click=\"activeTab = 'incident'\">\n <i class=\"bi bi-exclamation-octagon-fill me-1\"></i>Incidents\n <span class=\"tab-count incident\">{{ incidentReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'manual' }]\" @click=\"activeTab = 'manual'\">\n <i class=\"bi bi-file-earmark-text me-1\"></i>Manual\n <span class=\"tab-count manual\">{{ manualReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'folders' }]\" @click=\"activeTab = 'folders'\">\n <i class=\"bi bi-folder-fill me-1\"></i>Folders\n <span class=\"tab-count\">{{ reports.length + folders.length }}</span>\n </button>\n </div>\n\n <!-- ── Loading ── -->\n <div v-if=\"isLoading\" class=\"loading-container\">\n <div class=\"spinner\"></div>\n <p>Loading reports…</p>\n </div>\n\n <!-- ════════════════════════════════════════\n REPORTS LIST TABS (all/drill/incident/manual)\n ════════════════════════════════════════ -->\n <div v-if=\"activeTab !== 'folders' && !isLoading\">\n <div class=\"report-cards\" v-if=\"filteredReports.length > 0\">\n <div v-for=\"report in filteredReports\" :key=\"report.id\" :ref=\"'report-' + report.entityRef\"\n :class=\"['report-card', { 'report-card--highlighted': highlightedRef === report.entityRef }]\">\n <div class=\"rc-type-bar\" :class=\"reportTypeClass(report)\"></div>\n <div class=\"rc-badge\" :class=\"reportTypeClass(report)\">{{ reportTypeLabel(report) }}</div>\n\n <div class=\"rc-body\" @click=\"viewReport(report)\">\n <strong class=\"rc-ref\">{{ report.entityRef || report.id?.slice(0, 8).toUpperCase() }}</strong>\n <span class=\"rc-title\">{{ report.title }}</span>\n <span class=\"rc-meta\">\n <i class=\"bi bi-person-fill me-1\"></i>{{ report.submittedBy }}\n · \n <i class=\"bi bi-calendar3 me-1\"></i>{{ formatDate(report.submittedAt) }}\n </span>\n </div>\n\n <div class=\"rc-files\" v-if=\"getFilesForReport(report.id).length > 0\">\n <i class=\"bi bi-paperclip\"></i> {{ getFilesForReport(report.id).length }}\n </div>\n\n <!-- Folder pill: click jumps to the auto-folder -->\n <button class=\"rc-folder-pill\" :class=\"reportTypeClass(report)\" @click.stop=\"jumpToFolder(report)\"\n title=\"View folder\">\n <i class=\"bi bi-folder-fill me-1\"></i>\n {{ report.entityRef || report.title }}\n </button>\n\n <div class=\"rc-actions\">\n <button class=\"rc-btn rc-btn--view\" @click=\"viewReport(report)\" title=\"View\">\n <i class=\"bi bi-eye\"></i>\n </button>\n <button class=\"rc-btn rc-btn--download\" @click=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\" title=\"Download ZIP\">\n <span v-if=\"generatingPdf === report.id\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-file-zip\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"empty-state text-center\" v-if=\"filteredReports.length === 0\">\n <i class=\"bi bi-file-earmark-x\" style=\"font-size:3.5rem;color:#ccc;\"></i>\n <h5 class=\"mt-3 text-muted\">No {{ activeTab === 'all' ? '' : activeTab }} reports yet</h5>\n <p class=\"text-muted\">\n <span v-if=\"activeTab === 'manual'\">Create a manual report using the button above</span>\n <span v-else-if=\"activeTab === 'drill'\">Submit a report after logging a drill</span>\n <span v-else-if=\"activeTab === 'incident'\">Submit a report after logging an incident</span>\n <span v-else>Submit a report or create a folder to get started</span>\n </p>\n </div>\n </div>\n\n <!-- ════════════════════════════════════════\n FOLDERS TAB\n ════════════════════════════════════════ -->\n <div v-if=\"activeTab === 'folders' && !isLoading\">\n\n <!-- ─ Auto-folders ─ -->\n <div v-if=\"reports.length > 0\">\n <div class=\"section-heading\">\n <i class=\"bi bi-folder-symlink-fill text-primary me-1\"></i>\n Report Folders\n <span class=\"section-count\">{{ reports.length }}</span>\n <span class=\"section-hint\">Auto-generated · one per submitted report</span>\n </div>\n\n <div class=\"folders-list\">\n <div v-for=\"report in reports\" :key=\"'af-' + report.id\"\n :ref=\"'folder-' + (report.entityRef || report.id)\"\n :class=\"['auto-folder-card', reportTypeClass(report), { 'is-open': expandedFolders.includes('auto-' + report.id) }]\">\n <div class=\"af-header\" @click=\"toggleFolder('auto-' + report.id)\">\n <div class=\"af-icon-wrap\">\n <i class=\"bi bi-folder-fill af-folder-icon\"\n :class=\"'color--' + reportTypeClass(report)\"></i>\n <span class=\"af-count-badge\">{{ 1 + getFilesForReport(report.id).length }}</span>\n </div>\n <div class=\"af-meta\">\n <span class=\"af-ref\">{{ report.entityRef || report.id?.slice(0, 8).toUpperCase()\n }}</span>\n <span class=\"af-title\">{{ report.title }}</span>\n <div class=\"af-sub\">\n <span class=\"mini-badge\" :class=\"reportTypeClass(report)\">{{ reportTypeLabel(report)\n }}</span>\n <span class=\"text-muted\">{{ formatDate(report.submittedAt) }}</span>\n <span class=\"text-muted\" v-if=\"getFilesForReport(report.id).length\">\n · {{ getFilesForReport(report.id).length }} attachment{{\n getFilesForReport(report.id).length !== 1 ? 's' : '' }}\n </span>\n </div>\n </div>\n <div class=\"af-actions\">\n <button class=\"rc-btn rc-btn--download\" @click.stop=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\" title=\"Download ZIP\">\n <span v-if=\"generatingPdf === report.id\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-file-zip\"></i>\n </button>\n <i class=\"bi chevron-icon\"\n :class=\"expandedFolders.includes('auto-' + report.id) ? 'bi-chevron-up' : 'bi-chevron-down'\"></i>\n </div>\n </div>\n\n <transition name=\"folder-expand\">\n <div class=\"af-contents\" v-if=\"expandedFolders.includes('auto-' + report.id)\">\n\n <div class=\"ffi ffi--report\" @click=\"viewReport(report)\">\n <div class=\"ffi-icon ffi-icon--pdf\"><i class=\"bi bi-file-earmark-pdf-fill\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ safeRef(report) }}_report.pdf</span>\n <span class=\"ffi-sub\">Generated report sheet · click to preview</span>\n </div>\n <div class=\"ffi-acts\">\n <button class=\"rc-btn rc-btn--view\" @click.stop=\"viewReport(report)\"\n title=\"Preview\"><i class=\"bi bi-eye\"></i></button>\n <button class=\"rc-btn rc-btn--download\"\n @click.stop=\"downloadReportPdfOnly(report)\"\n :disabled=\"generatingPdf === report.id + '-pdf'\" title=\"Download PDF only\">\n <span v-if=\"generatingPdf === report.id + '-pdf'\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-download\"></i>\n </button>\n </div>\n </div>\n\n <div v-for=\"f in getFilesForReport(report.id)\" :key=\"f.id\" class=\"ffi\">\n <div class=\"ffi-icon\" :class=\"ffiIconClass(f)\">\n <i class=\"bi\" :class=\"fileIcon(f.type)\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ f.name }}</span>\n <span class=\"ffi-sub\">{{ formatFileSize(f.size) }}</span>\n </div>\n <div class=\"ffi-acts\">\n <a v-if=\"f.publicUrl\" :href=\"f.publicUrl\" target=\"_blank\" rel=\"noopener\"\n class=\"rc-btn rc-btn--view\" title=\"Open\"><i\n class=\"bi bi-box-arrow-up-right\"></i></a>\n </div>\n </div>\n\n <div class=\"ffi-empty\" v-if=\"getFilesForReport(report.id).length === 0\">\n <i class=\"bi bi-paperclip me-1\"></i>No attachments — ZIP will contain the report PDF\n only\n </div>\n\n <div class=\"af-zip-row\">\n <button class=\"btn btn-sm btn-outline-primary\" @click=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\">\n <span v-if=\"generatingPdf === report.id\">\n <span class=\"spinner-xs me-1\"></span>Building ZIP…\n </span>\n <span v-else>\n <i class=\"bi bi-file-zip me-1\"></i>Download all as ZIP\n </span>\n </button>\n <span class=\"af-zip-hint\">\n {{ safeRef(report) }}.zip\n · report PDF{{ getFilesForReport(report.id).length ? ' + ' +\n getFilesForReport(report.id).length + ' file(s)' : '' }}\n </span>\n </div>\n\n </div>\n </transition>\n </div>\n </div>\n </div>\n\n <!-- ─ User folders ─ -->\n <div :class=\"{ 'mt-4': reports.length > 0 }\" v-if=\"folders.length > 0\">\n <div class=\"section-heading\">\n <i class=\"bi bi-folder-plus text-warning me-1\"></i>\n Custom Folders\n <span class=\"section-count\">{{ folders.length }}</span>\n </div>\n\n <div class=\"folders-list\">\n <div v-for=\"folder in folders\" :key=\"'uf-' + folder.id\"\n :class=\"['user-folder-card', { 'is-open': expandedFolders.includes('user-' + folder.id) }]\">\n <div class=\"af-header\" @click=\"toggleFolder('user-' + folder.id)\">\n <div class=\"af-icon-wrap\">\n <i class=\"bi bi-folder-fill af-folder-icon color--user\"></i>\n <span class=\"af-count-badge\" style=\"background:#f0ad4e;color:#664d03;\">{{\n folder.files.length }}</span>\n </div>\n <div class=\"af-meta\">\n <span class=\"af-ref\">{{ folder.name }}</span>\n <span class=\"af-sub\">\n <span class=\"text-muted\">{{ folder.files.length }} file{{ folder.files.length !== 1\n ? 's' : '' }}</span>\n </span>\n </div>\n <div class=\"af-actions\">\n <!-- FIX: opens manual report modal pre-linked to this folder -->\n <button class=\"rc-btn\" style=\"color:#6f42c1;\"\n @click.stop=\"openManualReportForFolder(folder)\" title=\"Add Report / Files\">\n <i class=\"bi bi-file-earmark-plus\"></i>\n </button>\n <button class=\"rc-btn rc-btn--danger\"\n @click.stop=\"$emit('folder-delete-requested', folder.id)\" title=\"Delete\">\n <i class=\"bi bi-trash\"></i>\n </button>\n <i class=\"bi chevron-icon\"\n :class=\"expandedFolders.includes('user-' + folder.id) ? 'bi-chevron-up' : 'bi-chevron-down'\"></i>\n </div>\n </div>\n\n <transition name=\"folder-expand\">\n <div class=\"af-contents\" v-if=\"expandedFolders.includes('user-' + folder.id)\">\n <div v-for=\"file in folder.files\" :key=\"file.id\" class=\"ffi\">\n <div class=\"ffi-icon\" :class=\"ffiIconClass(file)\">\n <i class=\"bi\" :class=\"fileIcon(file.type)\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ file.name }}</span>\n <span class=\"ffi-sub\">{{ formatFileSize(file.size) }}</span>\n </div>\n <div class=\"ffi-acts\">\n <button class=\"rc-btn rc-btn--danger\"\n @click=\"$emit('file-remove-requested', { folderId: folder.id, fileId: file.id })\"\n title=\"Remove\"><i class=\"bi bi-x-circle\"></i></button>\n </div>\n </div>\n\n <div class=\"ffi-empty\" v-if=\"folder.files.length === 0\">\n <i class=\"bi bi-inbox me-1\"></i>Empty folder\n <!-- FIX: opens manual report modal instead of raw file picker -->\n <button class=\"btn btn-sm btn-outline-secondary ms-2\"\n @click=\"openManualReportForFolder(folder)\">\n <i class=\"bi bi-file-earmark-plus me-1\"></i>Add Report\n </button>\n </div>\n </div>\n </transition>\n </div>\n </div>\n </div>\n\n <!-- All empty -->\n <div class=\"empty-state text-center\" v-if=\"reports.length === 0 && folders.length === 0\">\n <i class=\"bi bi-folder2-open\" style=\"font-size:3.5rem;color:#ccc;\"></i>\n <h5 class=\"mt-3 text-muted\">No folders yet</h5>\n <p class=\"text-muted\">Each submitted report auto-creates a folder here. You can also create custom\n folders.</p>\n <button class=\"btn btn-primary mt-2\" @click=\"showNewFolderModal = true\">\n <i class=\"bi bi-folder-plus me-1\"></i> New Folder\n </button>\n </div>\n </div>\n\n <!-- ════════════════════════════════════════\n MODALS\n ════════════════════════════════════════ -->\n\n <!-- New Folder -->\n <div class=\"modal\" :class=\"{ 'show': showNewFolderModal }\" @click.self=\"showNewFolderModal = false\">\n <div class=\"modal-dialog modal-dialog-centered\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\"><i class=\"bi bi-folder-plus me-2\"></i>Create New Folder</h5>\n <button type=\"button\" class=\"btn-close\" @click=\"showNewFolderModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n <label class=\"form-label\">Folder Name</label>\n <input type=\"text\" class=\"form-control\" v-model=\"newFolderName\"\n @keyup.enter=\"requestCreateFolder\" placeholder=\"e.g., Q1 2025 Drills\" />\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\"\n @click=\"showNewFolderModal = false\">Cancel</button>\n <button type=\"button\" class=\"btn btn-primary\" @click=\"requestCreateFolder\"\n :disabled=\"!newFolderName.trim()\">Create Folder</button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Submit Report -->\n <div class=\"modal\" :class=\"{ 'show': showReportModal }\" @click.self=\"closeReportForm\">\n <div class=\"modal-dialog modal-dialog-centered modal-lg\">\n <div class=\"modal-content\">\n <div class=\"modal-header rpt-modal-header\">\n <h5 class=\"modal-title\">\n <i\n :class=\"reportForm.report_type === 'manual' ? 'bi bi-file-earmark-text me-2' : 'bi bi-shield-check me-2'\"></i>\n {{ reportForm.report_type === 'manual' ? 'New Manual Report' : 'Submit QHSE Report' }}\n <!-- Show folder context badge when opened from a folder -->\n <span v-if=\"reportForm.folderName\" class=\"folder-context-badge\">\n <i class=\"bi bi-folder-fill me-1\"></i>{{ reportForm.folderName }}\n </span>\n </h5>\n <div class=\"modal-type-toggle\" v-if=\"!pendingContext && !reportForm.folderId\">\n <button :class=\"['type-toggle-btn', { active: reportForm.report_type === 'qhse' }]\"\n @click=\"reportForm.report_type = 'qhse'\">\n <i class=\"bi bi-shield-check me-1\"></i>QHSE\n </button>\n <button :class=\"['type-toggle-btn', { active: reportForm.report_type === 'manual' }]\"\n @click=\"reportForm.report_type = 'manual'\">\n <i class=\"bi bi-file-earmark-text me-1\"></i>Manual\n </button>\n </div>\n <button type=\"button\" class=\"btn-close btn-close-white\" @click=\"closeReportForm\"></button>\n </div>\n <div class=\"modal-body\">\n\n <!-- QHSE: entity link -->\n <div class=\"rpt-entity-box\" v-if=\"reportForm.report_type === 'qhse'\">\n <label class=\"form-label fw-semibold\"><i class=\"bi bi-link-45deg me-1\"></i>Link to Drill /\n Incident</label>\n <div class=\"prefilled-entity\" v-if=\"reportForm.entity_ref && reportForm.entity_type\">\n <span class=\"entity-chip\" :class=\"reportForm.entity_type\">\n {{ reportForm.entity_type === 'drill' ? 'DRILL' : 'INCIDENT' }}\n </span>\n <strong>{{ reportForm.entity_ref }}</strong>\n <span class=\"text-muted ms-2\">{{ reportForm.entity_label }}</span>\n <button class=\"btn btn-link btn-sm text-danger ms-auto\" @click=\"clearEntityLink\"><i\n class=\"bi bi-x-circle\"></i> Clear</button>\n </div>\n <div v-else>\n <select class=\"form-control\" v-model=\"reportForm.selectedMissing\"\n @change=\"applyMissingSelection\">\n <option value=\"\">— Select a missing report (optional) —</option>\n <optgroup label=\"Missing Drill Reports\">\n <option v-for=\"r in missingReports.filter(x => x.entity_type === 'drill')\"\n :key=\"r.entity_id\" :value=\"JSON.stringify(r)\">\n {{ r.entity_ref }} — {{ r.label }}\n </option>\n </optgroup>\n <optgroup label=\"Missing Incident Reports\">\n <option v-for=\"r in missingReports.filter(x => x.entity_type === 'incident')\"\n :key=\"r.entity_id\" :value=\"JSON.stringify(r)\">\n {{ r.entity_ref }} — {{ r.label }}\n </option>\n </optgroup>\n </select>\n <small class=\"text-muted\">Linking will mark the drill / incident as reported.</small>\n </div>\n </div>\n\n <!-- Manual: category + ref -->\n <div class=\"input-row\" v-if=\"reportForm.report_type === 'manual'\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Report Category</label>\n <select class=\"form-control\" v-model=\"reportForm.manual_category\">\n <option>General</option>\n <option>Maintenance</option>\n <option>Safety Observation</option>\n <option>Environmental</option>\n <option>Audit</option>\n <option>Training</option>\n <option>Other</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Reference Number</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.manual_ref\"\n placeholder=\"e.g. RPT-2025-001\" />\n </div>\n </div>\n\n <!-- Drill-specific hint -->\n <div class=\"crew-hint\" v-if=\"reportForm.entity_type === 'drill'\">\n <i class=\"bi bi-info-circle-fill me-1\"></i>\n <span>\n <strong>Crew list tip:</strong> Start your Findings with\n <code>CREW: Name (Rank), Name (Rank), …</code>\n to generate a named crew participation table in the PDF.\n Otherwise the PDF will show the total count ({{ reportForm.entity_participants || 0 }}\n members) with a note to attach the signed list.\n </span>\n </div>\n\n <!-- Drill checklist — only shown when linked to a drill -->\n <div class=\"drill-checklist-box\" v-if=\"reportForm.entity_type === 'drill'\">\n <div class=\"drill-checklist-title\">\n <i class=\"bi bi-clipboard2-check me-1\"></i>\n Comments Checklist\n <span class=\"checklist-hint\">Tick = YES · unticked = NO in the PDF</span>\n </div>\n <div class=\"checklist-grid\">\n <label v-for=\"(q, idx) in drillChecklistQuestions\" :key=\"idx\"\n :class=\"['checklist-item', { checked: reportForm.drillChecklist[idx] }]\">\n <div class=\"checklist-checkbox\">\n <input type=\"checkbox\" :checked=\"reportForm.drillChecklist[idx]\"\n @change=\"reportForm.drillChecklist[idx] = $event.target.checked\" />\n <span class=\"custom-check\">\n <i class=\"bi\"\n :class=\"reportForm.drillChecklist[idx] ? 'bi-check-lg' : 'bi-x-lg'\"></i>\n </span>\n </div>\n <span class=\"checklist-q\">{{ q }}</span>\n <span class=\"checklist-answer\"\n :class=\"reportForm.drillChecklist[idx] ? 'answer-yes' : 'answer-no'\">\n {{ reportForm.drillChecklist[idx] ? 'YES' : 'NO' }}\n </span>\n </label>\n </div>\n </div>\n\n <!-- Common fields -->\n <div class=\"input-row mt-3\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Report Title *</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.title\"\n :placeholder=\"reportForm.entity_ref ? `Report — ${reportForm.entity_ref}` : 'Enter report title'\" />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Submitted By *</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.submittedBy\"\n placeholder=\"Your name\" />\n </div>\n </div>\n <div class=\"input-row\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Date</label>\n <input type=\"date\" class=\"form-control\" v-model=\"reportForm.date\" />\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">\n {{ reportForm.entity_type === 'incident' ? 'Description of Event (Findings) *' :\n 'Findings / Summary *' }}\n <span class=\"form-hint\" v-if=\"reportForm.entity_type === 'incident'\">Pre-filled from\n incident objective — edit as needed</span>\n </label>\n <textarea class=\"form-control\" rows=\"4\" v-model=\"reportForm.findings\" :placeholder=\"reportForm.entity_type === 'drill'\n ? 'CREW: John Smith (Master), Jane Doe (Chief Officer), …\\n\\nThen describe the drill scenario and findings…'\n : reportForm.entity_type === 'incident'\n ? 'Describe what happened, when, and where…'\n : 'Describe findings, observations, and outcomes…'\">\n </textarea>\n </div>\n\n <!-- Incident-specific structured fields -->\n <template v-if=\"reportForm.entity_type === 'incident'\">\n <div class=\"incident-fields-box\">\n <div class=\"incident-fields-title\">\n <i class=\"bi bi-layout-text-window-reverse me-1\"></i>\n Incident Report Fields\n <span class=\"checklist-hint\">These map directly to the PDF sections</span>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Possible Consequences</label>\n <div class=\"field-hint\">e.g. Personal injury, damage, collision, grounding, fire,\n pollution</div>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_consequences\"\n placeholder=\"Describe possible consequences…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Relevant Factors / Conditions Surrounding the\n Event</label>\n <div class=\"field-hint\">e.g. weather, lighting, fatigue, time pressure</div>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_factors\"\n placeholder=\"Describe relevant factors and conditions…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Immediate Action Taken</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_immediate_action\"\n placeholder=\"What was done immediately after the event?\"></textarea>\n </div>\n <div class=\"input-row\" style=\"margin-bottom:0;\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Direct Cause</label>\n <div class=\"field-hint\">e.g. failure to follow procedures, defective equipment\n </div>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.inc_direct_cause\"\n placeholder=\"Direct cause of the event…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Root Cause</label>\n <div class=\"field-hint\">e.g. lack of training, management factors</div>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.inc_root_cause\"\n placeholder=\"Root / underlying cause…\"></textarea>\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Action Taken to Avoid Re-occurrence</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.correctiveActions\"\n placeholder=\"Corrective actions and preventive measures…\"></textarea>\n </div>\n <div class=\"form-group\" style=\"margin-bottom:0;\">\n <label class=\"form-label fw-semibold\">Any Other Remarks</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_remarks\"\n placeholder=\"Additional remarks…\"></textarea>\n </div>\n </div>\n </template>\n\n <!-- Non-incident: standard corrective actions -->\n <template v-else>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Corrective Actions</label>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.correctiveActions\"\n placeholder=\"List any corrective actions required or taken…\"></textarea>\n </div>\n </template>\n\n <!-- Attachments -->\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">\n Attach Files\n <span class=\"form-hint\">Images embed in PDF · all files go into the ZIP</span>\n </label>\n <div class=\"file-drop-zone\" @click=\"$refs.reportFileInput.click()\" @dragover.prevent\n @drop.prevent=\"handleReportFileDrop\">\n <i class=\"bi bi-cloud-upload\" style=\"font-size:2rem;color:#6c757d;\"></i>\n <p class=\"mb-0 mt-2 text-muted\">Click or drag files here (PNG, JPG, PDF…)</p>\n <div class=\"attached-files\" v-if=\"reportForm.files.length > 0\">\n <span class=\"attached-chip\" v-for=\"(f, i) in reportForm.files\" :key=\"i\">\n <i class=\"bi me-1\" :class=\"fileIcon(f.type)\"></i>{{ f.name }}\n <button @click.stop=\"removeReportFile(i)\"><i class=\"bi bi-x\"></i></button>\n </span>\n </div>\n </div>\n <input ref=\"reportFileInput\" type=\"file\" multiple style=\"display:none\"\n @change=\"handleReportFileAttach\" />\n </div>\n\n <!-- ZIP preview -->\n <div class=\"zip-hint\" v-if=\"reportForm.title || reportForm.files.length > 0\">\n <i class=\"bi bi-file-zip me-1\"></i>\n Download will produce <strong>{{ zipName }}.zip</strong>\n containing the report PDF\n <span v-if=\"reportForm.files.length\"> + {{ reportForm.files.length }} attachment{{\n reportForm.files.length !== 1 ?\n 's' : '' }}</span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" @click=\"closeReportForm\">Cancel</button>\n <button type=\"button\" class=\"btn btn-success\" @click=\"requestSubmitReport\"\n :disabled=\"isSubmitting || !reportForm.title || !reportForm.submittedBy || !reportForm.findings\">\n <span v-if=\"isSubmitting\"><span class=\"spinner-sm\"></span> Submitting…</span>\n <span v-else><i class=\"bi bi-check-circle me-1\"></i>Submit Report</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Report Viewer -->\n <div class=\"modal\" :class=\"{ 'show': showViewModal }\" @click.self=\"closeViewer\">\n <div class=\"modal-dialog modal-dialog-centered modal-lg\">\n <div class=\"modal-content\" v-if=\"viewingReport\">\n <div class=\"modal-header rpt-modal-header\">\n <div class=\"d-flex align-items-center gap-2\">\n <span class=\"entity-chip me-2\" :class=\"reportTypeClass(viewingReport)\">{{\n reportTypeLabel(viewingReport) }}</span>\n <strong style=\"color:#fff\">{{ viewingReport.title }}</strong>\n </div>\n <button type=\"button\" class=\"btn-close btn-close-white\" @click=\"closeViewer\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"view-grid\">\n <div class=\"view-item\"><label>Reference</label><span class=\"ref-mono\">{{\n viewingReport.entityRef ||\n '—' }}</span></div>\n <div class=\"view-item\"><label>Type</label><span>{{ reportTypeLabel(viewingReport) }}</span>\n </div>\n <div class=\"view-item\" v-if=\"viewingReport.manualCategory\"><label>Category</label><span>{{\n viewingReport.manualCategory }}</span></div>\n <div class=\"view-item\"><label>Submitted By</label><span>{{ viewingReport.submittedBy\n }}</span></div>\n <div class=\"view-item\"><label>Date</label><span>{{ viewingReport.date }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.vessel\"><label>Vessel / Location</label><span>{{\n viewingReport.vessel }}</span></div>\n <div class=\"view-item\"><label>Submitted At</label><span>{{\n formatDate(viewingReport.submittedAt)\n }}</span></div>\n <!-- Drill-specific meta -->\n <div class=\"view-item\" v-if=\"viewingReport.entity_subtype\"><label>Drill Type</label><span>{{\n viewingReport.entity_subtype }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_creator\"><label>Drill\n Master</label><span>{{\n viewingReport.entity_creator }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_duration\"><label>Duration</label><span>{{\n viewingReport.entity_duration }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_participants\">\n <label>Participants</label><span>{{\n viewingReport.entity_participants }}</span></div>\n </div>\n <div class=\"view-section\">\n <label>Findings / Summary</label>\n <div class=\"view-text\">{{ viewingReport.findings }}</div>\n </div>\n <div class=\"view-section\" v-if=\"viewingReport.correctiveActions\">\n <label>Corrective Actions</label>\n <div class=\"view-text\">{{ viewingReport.correctiveActions }}</div>\n </div>\n <div class=\"view-section\" v-if=\"getFilesForReport(viewingReport.id).length > 0\">\n <label>Attachments</label>\n <div class=\"attached-files mt-1\">\n <a v-for=\"f in getFilesForReport(viewingReport.id)\" :key=\"f.id\" :href=\"f.publicUrl\"\n target=\"_blank\" rel=\"noopener\" class=\"attached-chip attached-chip--link\">\n <i class=\"bi me-1\" :class=\"fileIcon(f.type)\"></i>{{ f.name }}\n <small class=\"text-muted ms-1\">({{ formatFileSize(f.size) }})</small>\n <i class=\"bi bi-box-arrow-up-right ms-1\" style=\"font-size:10px;\"></i>\n </a>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-danger btn-sm me-auto\" @click=\"requestDeleteReport(viewingReport.id)\">\n <i class=\"bi bi-trash\"></i> Delete\n </button>\n <button class=\"btn btn-secondary\" @click=\"closeViewer\">Close</button>\n <button class=\"btn btn-primary\" @click=\"downloadReport(viewingReport)\"\n :disabled=\"generatingPdf === viewingReport.id\">\n <span v-if=\"generatingPdf === viewingReport.id\"><span class=\"spinner-sm\"></span> Building\n ZIP…</span>\n <span v-else><i class=\"bi bi-file-zip me-1\"></i>Download ZIP</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Hidden file input for user folders (kept for legacy, no longer primary path) -->\n <input ref=\"fileInput\" type=\"file\" multiple style=\"display:none;\" @change=\"handleFileSelection\" />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'Reports',\n\n props: {\n reports: { type: Array, default: () => [] },\n reportFiles: { type: Array, default: () => [] },\n folders: { type: Array, default: () => [] },\n isLoading: { type: Boolean, default: false },\n isSubmitting: { type: Boolean, default: false },\n pendingContext: { type: Object, default: null },\n missingReports: { type: Array, default: () => [] },\n highlightRef: { type: String, default: null },\n },\n\n emits: [\n 'report-submit-requested',\n 'report-delete-requested',\n 'folder-create-requested',\n 'files-add-requested',\n 'file-remove-requested',\n 'folder-delete-requested',\n 'report-viewed',\n ],\n\n data() {\n return {\n activeTab: 'all',\n showNewFolderModal: false,\n newFolderName: '',\n selectedFolder: null,\n expandedFolders: [],\n\n showReportModal: false,\n showViewModal: false,\n viewingReport: null,\n highlightedRef: null,\n bannerDismissed: false,\n generatingPdf: null,\n\n drillChecklistQuestions: [\n 'Is the reaction of crew members satisfactory?',\n 'Is the equipment functioning properly?',\n 'Is the crew properly trained and ready?',\n 'Was debriefing conducted on completion of drill?',\n 'Is time log of various activities marked on checklist?',\n ],\n\n reportForm: this.emptyForm(),\n };\n },\n\n computed: {\n drillReports() { return this.reports.filter(r => r.entityType === 'drill'); },\n incidentReports() { return this.reports.filter(r => r.entityType === 'incident'); },\n manualReports() {\n return this.reports.filter(r =>\n r.entityType === 'manual' ||\n (!r.entityType && !r.entityRef?.startsWith('DRILL') && !r.entityRef?.startsWith('INC'))\n );\n },\n filteredReports() {\n switch (this.activeTab) {\n case 'drill': return this.drillReports;\n case 'incident': return this.incidentReports;\n case 'manual': return this.manualReports;\n default: return this.reports;\n }\n },\n zipName() {\n const ref = this.reportForm.entity_ref || this.reportForm.manual_ref || this.reportForm.title;\n return (ref || 'report').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 50);\n },\n },\n\n watch: {\n pendingContext: {\n immediate: true,\n handler(ctx) {\n if (ctx) {\n this.reportForm.entity_type = ctx.entity_type;\n this.reportForm.entity_id = ctx.entity_id;\n this.reportForm.entity_ref = ctx.entity_ref;\n this.reportForm.entity_label = ctx.title;\n this.reportForm.title = ctx.title || `Report — ${ctx.entity_ref}`;\n this.reportForm.report_type = 'qhse';\n this.reportForm.entity_creator = ctx.entity_creator;\n this.reportForm.entity_objectives = ctx.entity_objectives;\n this.reportForm.entity_subtype = ctx.entity_subtype;\n this.reportForm.entity_duration = ctx.entity_duration;\n this.reportForm.entity_participants = ctx.entity_participants;\n if (ctx.entity_type === 'incident' && ctx.entity_objectives) {\n this.reportForm.findings = ctx.entity_objectives;\n }\n }\n },\n },\n highlightRef: {\n immediate: true,\n handler(ref) {\n if (ref) {\n this.highlightedRef = ref;\n this.$nextTick(() => this.scrollToReport(ref));\n }\n },\n },\n isSubmitting(val, prev) {\n if (prev === true && val === false) {\n this.showReportModal = false;\n this.resetForm();\n }\n },\n },\n\n methods: {\n\n // ─── Helpers ────────────────────────────────────────────────────────────\n\n emptyForm() {\n return {\n report_type: 'qhse', manual_category: 'General', manual_ref: '',\n title: '', submittedBy: '', vessel: '', folderId: '', folderName: '',\n date: new Date().toISOString().split('T')[0],\n findings: '', correctiveActions: '', files: [],\n entity_type: '', entity_id: '', entity_ref: '', entity_label: '',\n entity_creator: '', entity_objectives: '', entity_subtype: '',\n entity_duration: '', entity_participants: null,\n selectedMissing: '',\n drillChecklist: [true, true, true, true, true],\n inc_consequences: '',\n inc_factors: '',\n inc_immediate_action: '',\n inc_direct_cause: '',\n inc_root_cause: '',\n inc_remarks: '',\n };\n },\n\n getFilesForReport(reportId) {\n return this.reportFiles.filter(f => f.report_id === reportId || f.reportId === reportId);\n },\n\n safeRef(report) {\n return (report.entityRef || report.title || 'report').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 60);\n },\n\n reportTypeClass(report) {\n const t = report?.entityType || report?.entity_type;\n if (t === 'drill') return 'drill';\n if (t === 'incident') return 'incident';\n return 'manual';\n },\n\n reportTypeLabel(report) {\n const t = report?.entityType || report?.entity_type;\n if (t === 'drill') return 'DRILL';\n if (t === 'incident') return 'INCIDENT';\n const cat = report?.manualCategory || report?.manual_category;\n return cat ? cat.toUpperCase() : 'MANUAL';\n },\n\n fileIcon(type) {\n if (!type) return 'bi-file-earmark';\n if (type.startsWith('image/')) return 'bi-file-earmark-image';\n if (type === 'application/pdf') return 'bi-file-earmark-pdf-fill';\n if (type.includes('word')) return 'bi-file-earmark-word';\n if (type.includes('sheet') || type.includes('excel')) return 'bi-file-earmark-excel';\n return 'bi-file-earmark';\n },\n\n ffiIconClass(file) {\n const t = file?.type || '';\n if (t.startsWith('image/')) return 'ffi-icon--img';\n if (t === 'application/pdf') return 'ffi-icon--pdf';\n return 'ffi-icon--generic';\n },\n\n // ─── Banner ─────────────────────────────────────────────────────────────\n dismissBanner() { this.bannerDismissed = true; },\n\n // ─── Report form ─────────────────────────────────────────────────────────\n\n openReportForm(type = 'qhse') {\n this.reportForm = this.emptyForm();\n this.reportForm.report_type = type;\n if (type === 'qhse' && this.pendingContext) {\n this.reportForm.entity_creator = this.pendingContext.entity_creator;\n this.reportForm.entity_objectives = this.pendingContext.entity_objectives;\n this.reportForm.entity_subtype = this.pendingContext.entity_subtype;\n this.reportForm.entity_duration = this.pendingContext.entity_duration;\n this.reportForm.entity_participants = this.pendingContext.entity_participants;\n this.reportForm.entity_type = this.pendingContext.entity_type;\n this.reportForm.entity_id = this.pendingContext.entity_id;\n this.reportForm.entity_ref = this.pendingContext.entity_ref;\n this.reportForm.entity_label = this.pendingContext.title;\n this.reportForm.title = this.pendingContext.title || `Report — ${this.pendingContext.entity_ref}`;\n if (this.pendingContext.entity_type === 'incident' && this.pendingContext.entity_objectives) {\n this.reportForm.findings = this.pendingContext.entity_objectives;\n }\n }\n this.showReportModal = true;\n },\n\n // ─── FIX: Open manual report modal pre-linked to a custom folder ─────────\n openManualReportForFolder(folder) {\n this.reportForm = this.emptyForm();\n this.reportForm.report_type = 'manual';\n this.reportForm.folderId = folder.id;\n this.reportForm.folderName = folder.name;\n this.showReportModal = true;\n },\n\n closeReportForm() { this.showReportModal = false; },\n\n clearEntityLink() {\n Object.assign(this.reportForm, {\n entity_type: '', entity_id: '', entity_ref: '', entity_label: '',\n entity_creator: '', entity_objectives: '', entity_subtype: '',\n entity_duration: '', entity_participants: null, selectedMissing: '',\n });\n },\n\n applyMissingSelection() {\n if (!this.reportForm.selectedMissing) return;\n const r = JSON.parse(this.reportForm.selectedMissing);\n this.reportForm.entity_type = r.entity_type;\n this.reportForm.entity_id = r.entity_id;\n this.reportForm.entity_ref = r.entity_ref;\n this.reportForm.entity_label = r.label;\n this.reportForm.entity_creator = r.entity_creator || '';\n this.reportForm.entity_objectives = r.entity_objectives || '';\n this.reportForm.entity_subtype = r.entity_subtype || '';\n this.reportForm.entity_duration = r.entity_duration || '';\n this.reportForm.entity_participants = r.entity_participants || null;\n if (!this.reportForm.title) this.reportForm.title = `Report — ${r.entity_ref}`;\n if (r.entity_type === 'incident' && r.entity_objectives && !this.reportForm.findings) {\n this.reportForm.findings = r.entity_objectives;\n }\n },\n\n requestSubmitReport() {\n if (!this.reportForm.title || !this.reportForm.submittedBy || !this.reportForm.findings) return;\n\n const isManual = this.reportForm.report_type === 'manual';\n\n // ── FIX: never send entity_id for manual reports ──────────────────────\n // The DB column has gen_random_uuid() as default, so omitting it\n // (or sending undefined) lets Postgres generate it automatically.\n // Sending null explicitly triggers the NOT NULL constraint violation.\n const payload = {\n entity_type: isManual ? 'manual' : (this.reportForm.entity_type || null),\n entity_ref: isManual\n ? (this.reportForm.manual_ref || null)\n : (this.reportForm.entity_ref || null),\n title: this.reportForm.title,\n submittedBy: this.reportForm.submittedBy,\n vessel: this.reportForm.vessel || null,\n date: this.reportForm.date,\n findings: this.reportForm.findings,\n correctiveActions: this.reportForm.correctiveActions || null,\n folderId: this.reportForm.folderId || null,\n folderName: this.reportForm.folderName || null,\n manual_category: isManual ? this.reportForm.manual_category : null,\n files: this.reportForm.files,\n entity_subtype: this.reportForm.entity_subtype || null,\n entity_creator: this.reportForm.entity_creator || null,\n entity_objectives: this.reportForm.entity_objectives || null,\n entity_duration: this.reportForm.entity_duration || null,\n entity_participants: this.reportForm.entity_participants || null,\n drill_checklist: [...this.reportForm.drillChecklist],\n inc_consequences: this.reportForm.inc_consequences || null,\n inc_factors: this.reportForm.inc_factors || null,\n inc_immediate_action:this.reportForm.inc_immediate_action || null,\n inc_direct_cause: this.reportForm.inc_direct_cause || null,\n inc_root_cause: this.reportForm.inc_root_cause || null,\n inc_remarks: this.reportForm.inc_remarks || null,\n };\n\n // Only include entity_id when it's a real linked entity (drill/incident)\n // For manual reports we omit the key entirely so the DB default fires\n if (!isManual && this.reportForm.entity_id) {\n payload.entity_id = this.reportForm.entity_id;\n }\n\n this.$emit('report-submit-requested', payload);\n },\n\n resetForm() { this.reportForm = this.emptyForm(); },\n\n highlightReport(entityRef) {\n this.highlightedRef = entityRef;\n this.$nextTick(() => this.scrollToReport(entityRef));\n setTimeout(() => { this.highlightedRef = null; }, 3000);\n },\n\n // ─── View ────────────────────────────────────────────────────────────────\n\n viewReport(report) {\n this.viewingReport = report;\n this.showViewModal = true;\n this.$emit('report-viewed', report);\n },\n\n closeViewer() {\n this.showViewModal = false;\n this.viewingReport = null;\n },\n\n requestDeleteReport(reportId) {\n this.closeViewer();\n this.$emit('report-delete-requested', reportId);\n },\n\n scrollToReport(ref) {\n this.$nextTick(() => {\n const el = this.$refs['report-' + ref];\n if (el) (Array.isArray(el) ? el[0] : el)?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n },\n\n jumpToFolder(report) {\n this.activeTab = 'folders';\n const key = 'auto-' + report.id;\n if (!this.expandedFolders.includes(key)) this.expandedFolders.push(key);\n this.$nextTick(() => {\n const ref = report.entityRef || report.id;\n const el = this.$refs['folder-' + ref];\n if (el) (Array.isArray(el) ? el[0] : el)?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n },\n\n // ─── Download ────────────────────────────────────────────────────────────\n\n async downloadReport(report) {\n this.generatingPdf = report.id;\n try {\n await this._loadLibraries();\n const attachments = this.getFilesForReport(report.id);\n const imageFiles = attachments.filter(f => f.type?.startsWith('image/'));\n const reportPdfBytes = await this._buildReportPdf(report, imageFiles);\n await this._buildAndDownloadZip(report, reportPdfBytes, attachments);\n } catch (err) {\n console.error('ZIP generation failed:', err);\n alert('Failed to generate download: ' + err.message);\n } finally {\n this.generatingPdf = null;\n }\n },\n\n async downloadReportPdfOnly(report) {\n this.generatingPdf = report.id + '-pdf';\n try {\n await this._loadLibraries();\n const imageFiles = this.getFilesForReport(report.id).filter(f => f.type?.startsWith('image/'));\n const reportPdfBytes = await this._buildReportPdf(report, imageFiles);\n const blob = new Blob([reportPdfBytes], { type: 'application/pdf' });\n this._triggerDownload(blob, `${this.safeRef(report)}_report.pdf`);\n } catch (err) {\n alert('Failed to generate PDF: ' + err.message);\n } finally {\n this.generatingPdf = null;\n }\n },\n\n async _loadLibraries() {\n if (!window.jspdf) await this._loadScript('https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js');\n if (!window.JSZip) await this._loadScript('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js');\n },\n\n _loadScript(src) {\n return new Promise((resolve, reject) => {\n if (document.querySelector(`script[src=\"${src}\"]`)) { resolve(); return; }\n const s = document.createElement('script');\n s.src = src; s.onload = resolve; s.onerror = reject;\n document.head.appendChild(s);\n });\n },\n\n // ─── PDF router ──────────────────────────────────────────────────────────\n\n async _buildReportPdf(report, imageFiles = []) {\n const type = report.entityType || report.entity_type;\n if (type === 'drill') return this._buildDrillPdf(report, imageFiles);\n if (type === 'incident') return this._buildIncidentPdf(report, imageFiles);\n return this._buildManualPdf(report, imageFiles);\n },\n\n // ─── DRILL PDF ───────────────────────────────────────────────────────────\n\n async _buildDrillPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const pageW = 210, margin = 15, contentW = pageW - margin * 2;\n let y = 0;\n\n const checkPage = (needed = 10) => {\n if (y + needed > 275) { doc.addPage(); y = 20; }\n };\n\n const sectionHeading = (text) => {\n checkPage(12);\n doc.setFillColor(26, 54, 107);\n doc.rect(margin, y, contentW, 7, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(8.5);\n doc.setFont('helvetica', 'bold');\n doc.text(text.toUpperCase(), margin + 3, y + 5);\n y += 10;\n doc.setTextColor(30, 30, 30);\n };\n\n const fieldRow = (label, value, labelWidth = 68) => {\n checkPage(7);\n doc.setFontSize(9);\n doc.setFont('helvetica', 'bold');\n doc.setTextColor(80, 90, 110);\n doc.text(label, margin + 2, y);\n doc.setFont('helvetica', 'normal');\n doc.setTextColor(20, 20, 20);\n doc.text(':', margin + labelWidth - 6, y);\n const valLines = doc.splitTextToSize(String(value || '—'), contentW - labelWidth - 4);\n doc.text(valLines, margin + labelWidth, y);\n y += Math.max(valLines.length * 5, 5) + 2;\n };\n\n // ── Header band ──────────────────────────────────────────────────────\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 0, pageW, 24, 'F');\n doc.setDrawColor(255, 200, 50);\n doc.setLineWidth(1.2);\n doc.line(margin, 23.4, pageW - margin, 23.4);\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(14);\n doc.setFont('helvetica', 'bold');\n doc.text('EMERGENCY DRILL REPORT', pageW / 2, 10, { align: 'center' });\n doc.setFontSize(8);\n doc.setFont('helvetica', 'normal');\n doc.setTextColor(200, 215, 240);\n doc.text('Quality, Health, Safety & Environment Management System', pageW / 2, 17, { align: 'center' });\n y = 30;\n\n if (report.entityRef) {\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(pageW - margin - 44, 26, 44, 8, 2, 2, 'F');\n doc.setTextColor(26, 54, 107);\n doc.setFontSize(8);\n doc.setFont('helvetica', 'bold');\n doc.text(report.entityRef, pageW - margin - 2, 31, { align: 'right' });\n doc.setTextColor(30, 30, 30);\n }\n\n // ── Vessel / Drill kind grid ──────────────────────────────────────────\n doc.setDrawColor(180, 190, 210);\n doc.setLineWidth(0.4);\n doc.rect(margin, y, contentW, 28, 'S');\n doc.line(margin + contentW / 2, y, margin + contentW / 2, y + 28);\n doc.line(margin, y + 14, margin + contentW / 2, y + 14);\n\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('VESSEL:', margin + 3, y + 6);\n doc.setFont('helvetica', 'bold'); doc.setTextColor(20, 20, 20); doc.setFontSize(10);\n doc.text(String(report.vessel || '—').toUpperCase(), margin + 22, y + 6);\n\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('DATE / PLACE:', margin + 3, y + 20);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(`${report.date || '—'} / ${report.vessel || '—'}`, margin + 33, y + 20);\n\n const hx = margin + contentW / 2 + 3;\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('KIND OF DRILL:', hx, y + 6);\n doc.setFontSize(11); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text(String(report.entity_subtype || '—').toUpperCase(), hx, y + 16);\n doc.setFontSize(7.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(120, 120, 120);\n doc.text('RELEVANT IMAGES/NOTES ARE ATTACHED', hx, y + 23);\n\n y += 32;\n\n // ── Drill details ─────────────────────────────────────────────────────\n sectionHeading('Drill Details');\n fieldRow('Drill Master / Conducted By', report.entity_creator);\n fieldRow('Duration', report.entity_duration);\n fieldRow('Objectives', report.entity_objectives);\n fieldRow('Submitted By', report.submittedBy);\n fieldRow('Submitted At', this.formatDate(report.submittedAt));\n y += 2;\n\n // ── Crew participation table ──────────────────────────────────────────\n const participantCount = report.entity_participants || 0;\n sectionHeading(`Crew Participation — ${participantCount} member${participantCount !== 1 ? 's' : ''} participated`);\n\n const crewLines = (() => {\n const raw = (report.findings || '').trim();\n if (/^CREW:/i.test(raw)) {\n const crewSection = raw.replace(/^CREW:\\s*/i, '').split(/\\n\\n/)[0];\n return crewSection.split(/[\\n,]+/).map(s => s.trim()).filter(Boolean);\n }\n const list = [];\n if (report.entity_creator) list.push(`${report.entity_creator} (Drill Master)`);\n if (report.submittedBy && report.submittedBy !== report.entity_creator)\n list.push(`${report.submittedBy} (Reporter)`);\n return list;\n })();\n\n checkPage(14);\n const colNr = margin, wNr = 12;\n const colName = margin + wNr, wName = contentW - wNr;\n\n doc.setFillColor(235, 240, 250);\n doc.rect(colNr, y, contentW, 7, 'F');\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text('NO.', colNr + 2, y + 5);\n doc.text('NAME / RANK', colName + 2, y + 5);\n y += 8;\n\n if (crewLines.length > 0) {\n crewLines.forEach((name, idx) => {\n checkPage(7);\n if (idx % 2 === 0) {\n doc.setFillColor(249, 250, 252);\n doc.rect(colNr, y - 1, contentW, 7, 'F');\n }\n doc.setFontSize(8.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n doc.text(String(idx + 1), colNr + 2, y + 4);\n doc.text(doc.splitTextToSize(name, wName - 4)[0], colName + 2, y + 4);\n y += 7;\n });\n } else {\n checkPage(8);\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(150, 150, 150);\n doc.text(\n `${participantCount} crew members participated — attach signed crew list with participants' signatures`,\n colName + 2, y + 4\n );\n y += 8;\n }\n y += 4;\n\n // ── Comments checklist ────────────────────────────────────────────────\n sectionHeading('Comments');\n const checkQuestions = [\n 'Is the reaction of crew members satisfactory?',\n 'Is the equipment functioning properly?',\n 'Is the crew properly trained and ready?',\n 'Was debriefing conducted on completion of drill?',\n 'Is time log of various activities marked on checklist?',\n ];\n const checkAnswers = (() => {\n const raw = report.drill_checklist || report.drillChecklist;\n if (Array.isArray(raw)) return raw;\n try { return JSON.parse(raw); } catch { return [true, true, true, true, true]; }\n })();\n checkQuestions.forEach((q, idx) => {\n checkPage(9);\n const yes = checkAnswers[idx] !== false;\n doc.setFontSize(8.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n doc.text(`${idx + 1}. ${q}`, margin + 3, y + 5);\n if (yes) {\n doc.setFillColor(212, 237, 218);\n doc.roundedRect(pageW - margin - 18, y + 1, 18, 6, 2, 2, 'F');\n doc.setTextColor(21, 87, 36); doc.setFont('helvetica', 'bold'); doc.setFontSize(7.5);\n doc.text('YES', pageW - margin - 9, y + 5.5, { align: 'center' });\n } else {\n doc.setFillColor(248, 215, 218);\n doc.roundedRect(pageW - margin - 18, y + 1, 18, 6, 2, 2, 'F');\n doc.setTextColor(114, 28, 36); doc.setFont('helvetica', 'bold'); doc.setFontSize(7.5);\n doc.text('NO', pageW - margin - 9, y + 5.5, { align: 'center' });\n }\n y += 9;\n });\n y += 3;\n\n // ── Drill scenario / findings ─────────────────────────────────────────\n const scenarioText = (() => {\n const raw = (report.findings || '').trim();\n if (/^CREW:/i.test(raw)) {\n const parts = raw.split(/\\n\\n+/);\n return parts.slice(1).join('\\n\\n').trim();\n }\n return raw;\n })();\n\n if (scenarioText) {\n sectionHeading('Drill Scenario & Findings');\n checkPage(10);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n const lines = doc.splitTextToSize(scenarioText, contentW - 6);\n lines.forEach(line => {\n checkPage(6);\n doc.text(line, margin + 3, y);\n y += 5.5;\n });\n y += 4;\n }\n\n // ── Corrective actions ────────────────────────────────────────────────\n if (report.correctiveActions) {\n sectionHeading('Suggestions for Improvement & Corrective Actions');\n checkPage(10);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n const lines = doc.splitTextToSize(report.correctiveActions, contentW - 6);\n lines.forEach(line => {\n checkPage(6);\n doc.text(line, margin + 3, y);\n y += 5.5;\n });\n y += 4;\n }\n\n // ── Remarks box ───────────────────────────────────────────────────────\n checkPage(22);\n sectionHeading('Remarks');\n doc.setDrawColor(180, 190, 210); doc.setLineWidth(0.3);\n doc.rect(margin, y, contentW, 16, 'S');\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(140, 140, 140);\n doc.text('Drill carried out satisfactorily.', margin + 3, y + 8);\n y += 20;\n\n // ── Embedded images ───────────────────────────────────────────────────\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n checkPage(30);\n sectionHeading('Attachment: ' + imgFile.name);\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n checkPage(ih + 5);\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n // ── Footer ────────────────────────────────────────────────────────────\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(7.5); doc.setFont('helvetica', 'normal');\n doc.text(`Emergency Drill Report · Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── INCIDENT PDF ────────────────────────────────────────────────────────\n\n async _buildIncidentPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const pageW = 210, margin = 15, contentW = pageW - margin * 2;\n let y = 0;\n\n const checkPage = (needed = 10) => {\n if (y + needed > 275) { doc.addPage(); y = 20; }\n };\n\n const labelledBox = (label, text, minHeight = 18) => {\n const bodyText = text ? doc.splitTextToSize(String(text), contentW - 6) : [];\n const textH = bodyText.length * 5.5;\n const boxH = Math.max(minHeight, textH + 14);\n checkPage(boxH + 4);\n\n doc.setDrawColor(140, 150, 165);\n doc.setLineWidth(0.35);\n doc.rect(margin, y, contentW, boxH, 'S');\n\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(70, 80, 100);\n const labelLines = doc.splitTextToSize(label.toUpperCase(), contentW - 6);\n labelLines.forEach((ll, i) => doc.text(ll, margin + 3, y + 5 + i * 4));\n const labelH = labelLines.length * 4 + 2;\n\n doc.setDrawColor(200, 208, 220); doc.setLineWidth(0.2);\n doc.line(margin + 1, y + labelH + 2, margin + contentW - 1, y + labelH + 2);\n\n if (bodyText.length > 0) {\n doc.setFontSize(9.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n let ty = y + labelH + 7;\n bodyText.forEach(line => { doc.text(line, margin + 3, ty); ty += 5.5; });\n }\n\n y += boxH + 3;\n };\n\n // ── Header ────────────────────────────────────────────────────────────\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 0, pageW, 16, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(12); doc.setFont('helvetica', 'bold');\n const incLabel = (report.entity_subtype || report.entityType || 'INCIDENT').toUpperCase() + ' REPORT';\n doc.text(incLabel, margin, 10);\n doc.setFontSize(7.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(200, 215, 240);\n doc.text(`Ref: ${report.entityRef || '—'}`, pageW - margin, 8, { align: 'right' });\n doc.text(`Date: ${report.date || '—'}`, pageW - margin, 13, { align: 'right' });\n y = 20;\n\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('FORM NUMBER:', margin, y + 4);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(report.entityRef || '—', margin + 30, y + 4);\n doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('SUBMITTED BY:', pageW / 2, y + 4);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(report.submittedBy || '—', pageW / 2 + 28, y + 4);\n y += 10;\n\n const halfW = (contentW - 2) / 2;\n doc.setDrawColor(140, 150, 165); doc.setLineWidth(0.35);\n doc.rect(margin, y, halfW, 14, 'S');\n doc.rect(margin + halfW + 2, y, halfW, 14, 'S');\n\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('VESSEL NAME', margin + 3, y + 5);\n doc.text('SEVERITY / TYPE', margin + halfW + 5, y + 5);\n doc.setFontSize(10); doc.setFont('helvetica', 'bold'); doc.setTextColor(20, 20, 20);\n doc.text(String(report.vessel || '—'), margin + 3, y + 12);\n doc.text(\n `${report.entity_subtype || '—'} · ${report.severity || report.entity_subtype || '—'}`,\n margin + halfW + 5, y + 12\n );\n y += 18;\n\n doc.setDrawColor(140, 150, 165); doc.setLineWidth(0.35);\n doc.rect(margin, y, halfW, 10, 'S');\n doc.rect(margin + halfW + 2, y, halfW, 10, 'S');\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('MANAGEMENT OFFICE', margin + 3, y + 4);\n doc.text('DATE', margin + halfW + 5, y + 4);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text('—', margin + 3, y + 9);\n doc.text(report.date || '—', margin + halfW + 5, y + 9);\n y += 14;\n\n labelledBox('Description of Event', report.findings, 24);\n labelledBox(\n 'Possible Consequences\\n(e.g. Personal injury, damage, collision, grounding, fire, pollution etc.)',\n report.inc_consequences || null, 18\n );\n labelledBox(\n 'Relevant Factors / Conditions Surrounding the Event\\n(e.g. weather, lighting etc.)',\n report.inc_factors || null, 18\n );\n labelledBox('Immediate Action Taken', report.inc_immediate_action || null, 16);\n labelledBox(\n 'Direct Cause\\n(e.g. failure to follow procedures, inadequate or defective equipment etc.)',\n report.inc_direct_cause || null, 18\n );\n labelledBox(\n 'Root Cause\\n(e.g. lack of training, personal factors, job factors, control management factors, instructions not clear etc.)',\n report.inc_root_cause || null, 18\n );\n labelledBox('Action Taken on Board to Avoid Re-occurrence', report.correctiveActions || null, 18);\n labelledBox('Any Other Remarks', report.inc_remarks || null, 16);\n\n // ── Embedded images ───────────────────────────────────────────────────\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n checkPage(30);\n doc.setFillColor(235, 240, 250);\n doc.rect(margin, y, contentW, 7, 'F');\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text('ATTACHMENT: ' + imgFile.name, margin + 3, y + 5);\n y += 10;\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n checkPage(ih + 5);\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n checkPage(14);\n y += 4;\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(100, 110, 130);\n doc.text('Closed out on board / Office support required (delete as applicable)', margin, y);\n y += 8;\n\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(7.5); doc.setFont('helvetica', 'normal');\n doc.text(`Incident Report · Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── MANUAL PDF ──────────────────────────────────────────────────────────\n\n async _buildManualPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const margin = 18, pageW = 210, contentW = pageW - margin * 2;\n let y = 0;\n\n doc.setFillColor(30, 60, 114);\n doc.rect(0, 0, pageW, 28, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(16); doc.setFont('helvetica', 'bold');\n doc.text('QHSE REPORT', margin, 11);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal');\n doc.text(this.reportTypeLabel(report), margin, 18);\n if (report.entityRef) {\n doc.setFontSize(10); doc.setFont('helvetica', 'bold');\n doc.text(report.entityRef, pageW - margin, 18, { align: 'right' });\n }\n y = 36;\n\n doc.setTextColor(30, 60, 114); doc.setFontSize(13); doc.setFont('helvetica', 'bold');\n const titleLines = doc.splitTextToSize(report.title, contentW);\n doc.text(titleLines, margin, y);\n y += titleLines.length * 6 + 4;\n\n doc.setDrawColor(200, 210, 230); doc.line(margin, y, pageW - margin, y); y += 6;\n\n const meta = [\n ['Submitted By', report.submittedBy || '—'],\n ['Date', report.date || '—'],\n ['Vessel / Location', report.vessel || '—'],\n ['Submitted At', this.formatDate(report.submittedAt)],\n ];\n if (report.manualCategory) meta.splice(2, 0, ['Category', report.manualCategory]);\n\n const colW = contentW / 2;\n meta.forEach((item, idx) => {\n const col = idx % 2, row = Math.floor(idx / 2);\n const xo = margin + col * colW, yo = y + row * 10;\n doc.setFontSize(9); doc.setFont('helvetica', 'bold'); doc.setTextColor(100, 120, 160);\n doc.text(item[0].toUpperCase(), xo, yo);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(40, 40, 40);\n doc.text(String(item[1]), xo, yo + 4.5);\n });\n y += Math.ceil(meta.length / 2) * 10 + 6;\n\n const addSection = (heading, text) => {\n if (!text) return;\n if (y > 250) { doc.addPage(); y = 20; }\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(margin, y, contentW, 7, 1, 1, 'F');\n doc.setFont('helvetica', 'bold'); doc.setFontSize(9); doc.setTextColor(30, 60, 114);\n doc.text(heading.toUpperCase(), margin + 3, y + 5); y += 10;\n doc.setFont('helvetica', 'normal'); doc.setFontSize(10); doc.setTextColor(40, 40, 40);\n doc.splitTextToSize(text, contentW).forEach(line => {\n if (y > 272) { doc.addPage(); y = 20; }\n doc.text(line, margin, y); y += 5.5;\n });\n y += 4;\n };\n addSection('Findings / Summary', report.findings);\n addSection('Corrective Actions', report.correctiveActions);\n\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n if (y > 220) { doc.addPage(); y = 20; }\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(margin, y, contentW, 7, 1, 1, 'F');\n doc.setFont('helvetica', 'bold'); doc.setFontSize(9); doc.setTextColor(30, 60, 114);\n doc.text('ATTACHMENT: ' + imgFile.name, margin + 3, y + 5); y += 10;\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n if (y + ih > 272) { doc.addPage(); y = 20; }\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(30, 60, 114); doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(8); doc.setFont('helvetica', 'normal');\n doc.text(`Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── ZIP builder ─────────────────────────────────────────────────────────\n\n async _buildAndDownloadZip(report, reportPdfBytes, allAttachments) {\n const zip = new window.JSZip();\n const safeName = this.safeRef(report);\n const folder = zip.folder(safeName);\n\n folder.file(`${safeName}_report.pdf`, reportPdfBytes);\n\n for (const att of allAttachments) {\n try {\n let bytes;\n if (att.file instanceof File) {\n bytes = await att.file.arrayBuffer();\n } else if (att.publicUrl) {\n const resp = await fetch(att.publicUrl);\n if (!resp.ok) throw new Error(`HTTP ${resp.status}`);\n bytes = await resp.arrayBuffer();\n }\n if (bytes) folder.file(att.name, bytes);\n } catch (e) {\n console.warn(`Could not add ${att.name} to ZIP:`, e);\n }\n }\n\n const blob = await zip.generateAsync({\n type: 'blob',\n compression: 'DEFLATE',\n compressionOptions: { level: 6 },\n });\n this._triggerDownload(blob, `${safeName}.zip`);\n },\n\n _triggerDownload(blob, filename) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url; a.download = filename;\n document.body.appendChild(a); a.click(); document.body.removeChild(a);\n setTimeout(() => URL.revokeObjectURL(url), 5000);\n },\n\n _fileToDataUrl(file) {\n return new Promise((resolve, reject) => {\n const r = new FileReader();\n r.onload = () => resolve(r.result); r.onerror = reject;\n r.readAsDataURL(file);\n });\n },\n\n async _fetchImageAsDataUrl(url) {\n try {\n const resp = await fetch(url);\n return this._fileToDataUrl(await resp.blob());\n } catch { return null; }\n },\n\n // ─── File input (report form) ─────────────────────────────────────────────\n handleReportFileAttach(e) { this.reportForm.files.push(...Array.from(e.target.files)); e.target.value = ''; },\n handleReportFileDrop(e) { this.reportForm.files.push(...Array.from(e.dataTransfer.files)); },\n removeReportFile(i) { this.reportForm.files.splice(i, 1); },\n\n // ─── User-folder UI ───────────────────────────────────────────────────────\n requestCreateFolder() {\n if (!this.newFolderName.trim()) return;\n this.$emit('folder-create-requested', this.newFolderName.trim());\n this.newFolderName = '';\n this.showNewFolderModal = false;\n this.activeTab = 'folders';\n },\n\n // Legacy raw file picker — kept in case parent still uses files-add-requested directly\n selectFolder(folder) { this.selectedFolder = folder; this.$refs.fileInput.click(); },\n\n handleFileSelection(event) {\n const files = Array.from(event.target.files);\n if (!this.selectedFolder || files.length === 0) return;\n this.$emit('files-add-requested', {\n folderId: this.selectedFolder.id,\n files: files.map(file => ({\n id: Date.now() + Math.random(),\n name: file.name,\n size: file.size,\n type: file.type,\n file,\n addedAt: new Date(),\n })),\n });\n event.target.value = ''; this.selectedFolder = null;\n },\n\n toggleFolder(key) {\n const i = this.expandedFolders.indexOf(key);\n if (i > -1) this.expandedFolders.splice(i, 1); else this.expandedFolders.push(key);\n },\n\n // ─── Formatters ───────────────────────────────────────────────────────────\n formatFileSize(bytes) {\n if (!bytes) return '0 B';\n const k = 1024, sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\n },\n formatDate(d) {\n return d ? new Date(d).toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }) : '—';\n },\n },\n};\n</script>\n\n<style scoped>\n/* ─── Base ─── */\n.reports-container {\n padding: 24px;\n}\n\n/* ─── Banner ─── */\n.missing-banner {\n background: linear-gradient(135deg, #fff3cd, #ffe8a1);\n border: 1.5px solid #f0ad4e;\n border-radius: 10px;\n margin-bottom: 22px;\n overflow: hidden;\n}\n\n.missing-banner-inner {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 18px;\n flex-wrap: wrap;\n}\n\n.missing-icon {\n font-size: 22px;\n color: #856404;\n flex-shrink: 0;\n}\n\n.missing-content {\n flex: 1;\n min-width: 0;\n}\n\n.missing-content strong {\n font-size: 14px;\n color: #664d03;\n display: block;\n}\n\n.missing-content p {\n margin: 2px 0 0;\n font-size: 12px;\n color: #856404;\n}\n\n.ref-chip {\n background: #856404;\n color: #fff;\n border-radius: 4px;\n padding: 1px 8px;\n font-family: monospace;\n font-size: 12px;\n font-weight: 700;\n}\n\n.btn-dismiss {\n background: none;\n border: none;\n color: #856404;\n cursor: pointer;\n font-size: 15px;\n padding: 4px 6px;\n border-radius: 4px;\n transition: background .15s;\n}\n\n.btn-dismiss:hover {\n background: rgba(0, 0, 0, .08);\n}\n\n.slide-down-enter-active,\n.slide-down-leave-active {\n transition: all .25s;\n}\n\n.slide-down-enter-from,\n.slide-down-leave-to {\n opacity: 0;\n transform: translateY(-12px);\n}\n\n/* ─── Page Header ─── */\n.page-header {\n margin-bottom: 18px;\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 16px;\n}\n\n.page-title {\n font-size: 22px;\n font-weight: 700;\n color: #1e3c72;\n margin: 0;\n}\n\n.page-subtitle {\n font-size: 13px;\n color: #6c757d;\n margin: 2px 0 0;\n}\n\n.btn-group-split {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n/* ─── Tabs ─── */\n.tab-nav {\n display: flex;\n gap: 4px;\n margin-bottom: 20px;\n border-bottom: 2px solid #e9ecef;\n overflow-x: auto;\n}\n\n.tab-btn {\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n padding: 9px 16px;\n font-size: 13px;\n font-weight: 600;\n color: #6c757d;\n cursor: pointer;\n white-space: nowrap;\n margin-bottom: -2px;\n transition: all .2s;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.tab-btn:hover {\n color: #2a5298;\n}\n\n.tab-btn.active {\n color: #2a5298;\n border-bottom-color: #2a5298;\n}\n\n.tab-count {\n font-size: 10px;\n background: #e9ecef;\n color: #495057;\n border-radius: 10px;\n padding: 1px 7px;\n font-weight: 700;\n}\n\n.tab-count.drill {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.tab-count.incident {\n background: #f8d7da;\n color: #721c24;\n}\n\n.tab-count.manual {\n background: #e2e3f0;\n color: #383d72;\n}\n\n/* ─── Report Cards ─── */\n.report-cards {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-bottom: 24px;\n}\n\n.report-card {\n display: flex;\n align-items: center;\n gap: 12px;\n background: #fff;\n border: 1.5px solid #e9ecef;\n border-radius: 10px;\n padding: 12px 16px;\n transition: all .2s;\n position: relative;\n overflow: hidden;\n}\n\n.report-card:hover {\n border-color: #2a5298;\n box-shadow: 0 2px 10px rgba(42, 82, 152, .1);\n}\n\n.report-card--highlighted {\n border-color: #f0ad4e !important;\n background: #fffbf0 !important;\n box-shadow: 0 0 0 3px rgba(240, 173, 78, .25) !important;\n animation: flash-highlight 1.5s ease;\n}\n\n@keyframes flash-highlight {\n 0%, 100% { background: #fffbf0 }\n 50% { background: #fff3cd }\n}\n\n.rc-type-bar {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n}\n\n.rc-type-bar.drill { background: #17a2b8; }\n.rc-type-bar.incident { background: #dc3545; }\n.rc-type-bar.manual { background: #6f42c1; }\n\n.rc-badge {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.rc-badge.drill { background: #d1ecf1; color: #0c5460; }\n.rc-badge.incident { background: #f8d7da; color: #721c24; }\n.rc-badge.manual { background: #ede9f6; color: #383d72; }\n\n.rc-body {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n}\n\n.rc-ref {\n font-family: monospace;\n font-size: 12px;\n color: #2a5298;\n font-weight: 700;\n}\n\n.rc-title {\n font-size: 14px;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.rc-meta {\n font-size: 11px;\n color: #6c757d;\n margin-top: 2px;\n}\n\n.rc-files {\n font-size: 11px;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.rc-folder-pill {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 700;\n padding: 3px 10px;\n border-radius: 12px;\n cursor: pointer;\n border: 1.5px solid;\n transition: all .18s;\n white-space: nowrap;\n flex-shrink: 0;\n max-width: 170px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.rc-folder-pill.drill { background: #e8f7fa; border-color: #17a2b8; color: #0c5460; }\n.rc-folder-pill.incident { background: #fce8ea; border-color: #dc3545; color: #721c24; }\n.rc-folder-pill.manual { background: #f0ebfa; border-color: #6f42c1; color: #383d72; }\n.rc-folder-pill:hover { filter: brightness(.92); }\n\n.rc-actions {\n display: flex;\n gap: 5px;\n flex-shrink: 0;\n}\n\n.rc-btn {\n width: 30px;\n height: 30px;\n border: 1.5px solid #dee2e6;\n border-radius: 6px;\n background: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n transition: all .18s;\n text-decoration: none;\n color: #495057;\n}\n\n.rc-btn:disabled { opacity: .5; cursor: not-allowed; }\n.rc-btn--view:hover:not(:disabled) { background: #2a5298; color: #fff; border-color: #2a5298; }\n.rc-btn--download { color: #28a745; }\n.rc-btn--download:hover:not(:disabled) { background: #28a745; color: #fff; border-color: #28a745; }\n.rc-btn--danger { color: #dc3545; }\n.rc-btn--danger:hover:not(:disabled) { background: #dc3545; color: #fff; border-color: #dc3545; }\n\n/* ─── Folder context badge in modal header ─── */\n.folder-context-badge {\n display: inline-flex;\n align-items: center;\n font-size: 11px;\n font-weight: 600;\n background: rgba(255, 255, 255, .2);\n border: 1px solid rgba(255, 255, 255, .35);\n border-radius: 12px;\n padding: 2px 10px;\n margin-left: 10px;\n color: rgba(255, 255, 255, .9);\n}\n\n/* ─── Crew hint ─── */\n.crew-hint {\n background: #eef7ff;\n border: 1px solid #b8deff;\n border-radius: 7px;\n padding: 10px 14px;\n font-size: 12px;\n color: #0c5460;\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.crew-hint code {\n background: #d1ecf1;\n border-radius: 3px;\n padding: 1px 5px;\n font-size: 11px;\n color: #0c5460;\n}\n\n/* ─── Section Heading ─── */\n.section-heading {\n display: flex;\n align-items: center;\n font-size: 13px;\n font-weight: 700;\n color: #495057;\n margin-bottom: 12px;\n gap: 5px;\n}\n\n.section-count {\n background: #e9ecef;\n color: #495057;\n font-size: 10px;\n font-weight: 700;\n border-radius: 10px;\n padding: 1px 8px;\n}\n\n.section-hint {\n font-size: 11px;\n font-weight: 400;\n color: #adb5bd;\n margin-left: 2px;\n}\n\n/* ─── Folders list ─── */\n.folders-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.auto-folder-card {\n border: 1.5px solid #e9ecef;\n border-radius: 12px;\n background: #fff;\n overflow: hidden;\n transition: border-color .18s;\n}\n\n.auto-folder-card.drill { border-left: 4px solid #17a2b8; }\n.auto-folder-card.incident { border-left: 4px solid #dc3545; }\n.auto-folder-card.manual { border-left: 4px solid #6f42c1; }\n\n.auto-folder-card:hover,\n.auto-folder-card.is-open { border-color: #adb5bd; }\n\n.user-folder-card {\n border: 1.5px solid #e9ecef;\n border-left: 4px solid #f0ad4e;\n border-radius: 12px;\n background: #fff;\n overflow: hidden;\n transition: border-color .18s;\n}\n\n.user-folder-card:hover,\n.user-folder-card.is-open { border-color: #adb5bd; }\n\n.af-header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 18px;\n cursor: pointer;\n user-select: none;\n transition: background .15s;\n}\n\n.af-header:hover { background: #f8f9fa; }\n\n.af-icon-wrap {\n position: relative;\n flex-shrink: 0;\n}\n\n.af-folder-icon { font-size: 2.1rem; }\n\n.color--drill { color: #17a2b8; }\n.color--incident { color: #dc3545; }\n.color--manual { color: #6f42c1; }\n.color--user { color: #f0ad4e; }\n\n.af-count-badge {\n position: absolute;\n top: -5px;\n right: -8px;\n background: #2a5298;\n color: #fff;\n font-size: 9px;\n font-weight: 700;\n border-radius: 10px;\n padding: 1px 6px;\n min-width: 18px;\n text-align: center;\n line-height: 16px;\n}\n\n.af-meta {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.af-ref {\n font-family: monospace;\n font-size: 13px;\n font-weight: 700;\n color: #2a5298;\n}\n\n.af-title {\n font-size: 13px;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.af-sub {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-top: 1px;\n}\n\n.af-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.chevron-icon {\n font-size: .85rem;\n color: #6c757d;\n}\n\n.af-contents {\n border-top: 1px solid #e9ecef;\n padding: 12px 16px;\n background: #fafbff;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.folder-expand-enter-active,\n.folder-expand-leave-active {\n transition: all .2s ease;\n overflow: hidden;\n}\n\n.folder-expand-enter-from,\n.folder-expand-leave-to {\n opacity: 0;\n max-height: 0 !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.ffi {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 9px 12px;\n background: #fff;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: border-color .15s;\n}\n\n.ffi:hover { border-color: #adb5bd; }\n\n.ffi--report {\n border-color: #c5d0ee;\n background: #f5f7ff;\n cursor: pointer;\n}\n\n.ffi--report:hover { border-color: #2a5298; }\n\n.ffi-icon {\n width: 34px;\n height: 34px;\n border-radius: 7px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2rem;\n flex-shrink: 0;\n}\n\n.ffi-icon--pdf { background: #ffeaea; color: #dc3545; }\n.ffi-icon--img { background: #e8f5e9; color: #28a745; }\n.ffi-icon--generic { background: #e9ecef; color: #6c757d; }\n\n.ffi-meta {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.ffi-name {\n font-size: 13px;\n font-weight: 600;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ffi-sub { font-size: 11px; color: #6c757d; }\n\n.ffi-acts {\n display: flex;\n gap: 5px;\n flex-shrink: 0;\n}\n\n.ffi-empty {\n padding: 8px 2px;\n font-size: 12px;\n color: #6c757d;\n display: flex;\n align-items: center;\n}\n\n.af-zip-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 8px;\n border-top: 1px dashed #dee2e6;\n margin-top: 2px;\n}\n\n.af-zip-hint {\n font-size: 11px;\n color: #6c757d;\n font-family: monospace;\n}\n\n.mini-badge {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.mini-badge.drill { background: #d1ecf1; color: #0c5460; }\n.mini-badge.incident { background: #f8d7da; color: #721c24; }\n.mini-badge.manual { background: #ede9f6; color: #383d72; }\n\n/* ─── Modals ─── */\n.modal {\n display: none;\n position: fixed;\n z-index: 1050;\n inset: 0;\n background: rgba(0, 0, 0, .5);\n align-items: center;\n justify-content: center;\n}\n\n.modal.show { display: flex; }\n\n.modal-dialog {\n max-width: 500px;\n width: 95%;\n margin: 1.5rem auto;\n}\n\n.modal-dialog.modal-lg { max-width: 780px; }\n\n.modal-content {\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 10px 40px rgba(0, 0, 0, .25);\n overflow: hidden;\n}\n\n.modal-header {\n padding: 16px 22px;\n border-bottom: 1px solid #dee2e6;\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 10px;\n}\n\n.modal-body {\n padding: 22px;\n max-height: 70vh;\n overflow-y: auto;\n}\n\n.modal-footer {\n padding: 14px 22px;\n border-top: 1px solid #dee2e6;\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n align-items: center;\n}\n\n.rpt-modal-header {\n background: linear-gradient(135deg, #1e3c72, #2a5298);\n color: #fff;\n}\n\n.modal-type-toggle {\n display: flex;\n background: rgba(255, 255, 255, .15);\n border-radius: 6px;\n padding: 3px;\n gap: 2px;\n margin-left: auto;\n margin-right: 10px;\n}\n\n.type-toggle-btn {\n background: transparent;\n border: none;\n color: rgba(255, 255, 255, .7);\n font-size: 12px;\n font-weight: 600;\n padding: 4px 12px;\n border-radius: 4px;\n cursor: pointer;\n transition: all .2s;\n}\n\n.type-toggle-btn.active { background: #fff; color: #2a5298; }\n.type-toggle-btn:hover:not(.active) { color: #fff; background: rgba(255, 255, 255, .2); }\n\n.btn-close {\n background: transparent;\n border: none;\n font-size: 1.4rem;\n cursor: pointer;\n opacity: .6;\n color: inherit;\n}\n\n.btn-close:hover { opacity: 1; }\n\n/* ─── Report Form ─── */\n.rpt-entity-box {\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n padding: 14px 16px;\n margin-bottom: 4px;\n}\n\n.prefilled-entity {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.entity-chip {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.entity-chip.drill { background: #d1ecf1; color: #0c5460; }\n.entity-chip.incident { background: #f8d7da; color: #721c24; }\n.entity-chip.manual { background: #ede9f6; color: #383d72; }\n\n.input-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 14px;\n margin-bottom: 14px;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n margin-bottom: 14px;\n}\n\n.form-label {\n font-size: 13px;\n margin-bottom: 5px;\n color: #495057;\n}\n\n.form-hint {\n font-size: 10px;\n font-weight: 400;\n color: #adb5bd;\n margin-left: 8px;\n}\n\n.form-control {\n padding: 9px 12px;\n border: 1px solid #ced4da;\n border-radius: 6px;\n font-size: 14px;\n transition: border-color .2s;\n width: 100%;\n box-sizing: border-box;\n}\n\n.form-control:focus {\n outline: none;\n border-color: #2a5298;\n box-shadow: 0 0 0 3px rgba(42, 82, 152, .1);\n}\n\ntextarea.form-control { resize: vertical; min-height: 80px; }\nselect.form-control { cursor: pointer; }\n\n.file-drop-zone {\n border: 2px dashed #ced4da;\n border-radius: 8px;\n padding: 18px;\n text-align: center;\n cursor: pointer;\n transition: border-color .2s;\n min-height: 80px;\n}\n\n.file-drop-zone:hover { border-color: #2a5298; }\n\n.attached-files {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 10px;\n justify-content: center;\n}\n\n.attached-chip {\n background: #e9ecef;\n border-radius: 5px;\n padding: 3px 10px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.attached-chip--link {\n text-decoration: none;\n color: #2a5298;\n background: #eef2ff;\n border: 1px solid #c5d0ee;\n transition: background .15s;\n}\n\n.attached-chip--link:hover { background: #dce4f8; }\n\n.attached-chip button {\n background: none;\n border: none;\n cursor: pointer;\n color: #dc3545;\n padding: 0;\n font-size: 11px;\n}\n\n.zip-hint {\n background: #eef2ff;\n border: 1px solid #c5d0ee;\n border-radius: 7px;\n padding: 8px 14px;\n font-size: 12px;\n color: #2a5298;\n display: flex;\n align-items: center;\n margin-top: -6px;\n}\n\n/* ─── Report Viewer ─── */\n.view-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 14px;\n margin-bottom: 20px;\n}\n\n.view-item { display: flex; flex-direction: column; gap: 3px; }\n\n.view-item label {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: .05em;\n color: #6c757d;\n}\n\n.view-item span { font-size: 14px; color: #212529; }\n\n.ref-mono {\n font-family: monospace;\n font-size: 13px;\n color: #2a5298;\n font-weight: 700;\n}\n\n.view-section { margin-bottom: 18px; }\n\n.view-section label {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: .05em;\n color: #6c757d;\n display: block;\n margin-bottom: 6px;\n}\n\n.view-text {\n background: #f8f9fa;\n border-radius: 6px;\n padding: 12px 14px;\n font-size: 14px;\n line-height: 1.6;\n color: #212529;\n white-space: pre-wrap;\n}\n\n/* ─── Buttons ─── */\n.btn {\n padding: 9px 18px;\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all .2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.btn:disabled { opacity: .6; cursor: not-allowed; }\n.btn-primary { background: #2a5298; color: #fff; }\n.btn-primary:hover:not(:disabled) { background: #1e3c72; }\n.btn-success { background: #28a745; color: #fff; }\n.btn-success:hover:not(:disabled) { background: #218838; }\n.btn-secondary { background: #6c757d; color: #fff; }\n.btn-secondary:hover:not(:disabled) { background: #5a6268; }\n.btn-danger { background: #dc3545; color: #fff; }\n.btn-danger:hover:not(:disabled) { background: #c82333; }\n.btn-warning { background: #f0ad4e; color: #664d03; }\n.btn-warning:hover { background: #e0972e; }\n.btn-outline-primary { background: transparent; border: 1.5px solid #2a5298; color: #2a5298; }\n.btn-outline-primary:hover:not(:disabled) { background: #2a5298; color: #fff; }\n.btn-outline-secondary { background: transparent; border: 1.5px solid #6c757d; color: #6c757d; }\n.btn-outline-secondary:hover:not(:disabled) { background: #6c757d; color: #fff; }\n.btn-link { background: none; border: none; padding: 0; font-size: 13px; text-decoration: none; cursor: pointer; }\n.btn-sm { padding: 5px 12px; font-size: 12px; }\n\n/* ─── Loading / Spinners ─── */\n.loading-container { display: flex; flex-direction: column; align-items: center; padding: 40px 20px; }\n\n.spinner {\n border: 4px solid #f3f3f3;\n border-top: 4px solid #2a5298;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n margin-bottom: 14px;\n}\n\n.spinner-sm {\n display: inline-block;\n width: 14px;\n height: 14px;\n border: 2px solid rgba(255, 255, 255, .4);\n border-top-color: #fff;\n border-radius: 50%;\n animation: spin .7s linear infinite;\n}\n\n.spinner-xs {\n display: inline-block;\n width: 11px;\n height: 11px;\n border: 2px solid rgba(0, 0, 0, .15);\n border-top-color: #333;\n border-radius: 50%;\n animation: spin .7s linear infinite;\n}\n\n@keyframes spin { to { transform: rotate(360deg); } }\n\n/* ─── Utilities ─── */\n.fw-bold { font-weight: 700; }\n.fw-semibold { font-weight: 600; }\n.me-1 { margin-right: 4px; }\n.me-2 { margin-right: 8px; }\n.me-auto { margin-right: auto; }\n.ms-1 { margin-left: 4px; }\n.ms-2 { margin-left: 8px; }\n.mt-2 { margin-top: 8px; }\n.mt-3 { margin-top: 16px; }\n.mt-4 { margin-top: 24px; }\n.mb-0 { margin-bottom: 0; }\n.text-muted { color: #6c757d !important; }\n.text-danger { color: #dc3545 !important; }\n.text-success { color: #28a745 !important; }\n.text-primary { color: #2a5298 !important; }\n.text-warning { color: #f0ad4e !important; }\n.d-flex { display: flex; }\n.gap-2 { gap: 8px; }\n.justify-content-between { justify-content: space-between; }\n.text-center { text-align: center; }\n.empty-state { padding: 60px 20px; }\n\n/* ─── Incident Fields Box ─── */\n.incident-fields-box {\n background: #fff8f5;\n border: 1.5px solid #f5d0c0;\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 14px;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n\n.incident-fields-title {\n font-size: 13px;\n font-weight: 700;\n color: #7b2d1a;\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.field-hint { font-size: 11px; color: #adb5bd; margin-bottom: 4px; margin-top: -2px; }\n\n/* ─── Drill Checklist ─── */\n.drill-checklist-box {\n background: #f8faff;\n border: 1.5px solid #d0daf0;\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 14px;\n}\n\n.drill-checklist-title {\n font-size: 13px;\n font-weight: 700;\n color: #1e3c72;\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.checklist-hint { font-size: 11px; font-weight: 400; color: #adb5bd; margin-left: 4px; }\n\n.checklist-grid { display: flex; flex-direction: column; gap: 6px; }\n\n.checklist-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n border-radius: 7px;\n border: 1.5px solid #e2e8f0;\n background: #fff;\n cursor: pointer;\n transition: all .18s;\n user-select: none;\n}\n\n.checklist-item:hover { border-color: #2a5298; background: #f5f8ff; }\n.checklist-item.checked { border-color: #28a745; background: #f0fff4; }\n\n.checklist-checkbox input[type=\"checkbox\"] { display: none; }\n\n.custom-check {\n width: 22px;\n height: 22px;\n border-radius: 5px;\n border: 2px solid #ced4da;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 12px;\n transition: all .18s;\n}\n\n.checklist-item.checked .custom-check { background: #28a745; border-color: #28a745; color: #fff; }\n.checklist-item:not(.checked) .custom-check { background: #fff8f8; border-color: #dc3545; color: #dc3545; }\n\n.checklist-q { flex: 1; font-size: 13px; color: #212529; }\n\n.checklist-answer {\n font-size: 10px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 4px;\n flex-shrink: 0;\n}\n\n.answer-yes { background: #d4edda; color: #155724; }\n.answer-no { background: #f8d7da; color: #721c24; }\n\n@media (max-width: 640px) {\n .input-row { grid-template-columns: 1fr; }\n .btn-group-split { gap: 5px; }\n .btn { padding: 8px 12px; font-size: 12px; }\n .tab-btn { padding: 8px 10px; font-size: 12px; }\n .modal-type-toggle { display: none; }\n .rc-folder-pill { display: none; }\n .af-header { padding: 12px 14px; gap: 10px; }\n}\n</style>","<template>\n <div v-if=\"ready\">\n <div>\n <nav v-show=\"!showReport\">\n <button v-for=\"section in sections\" :key=\"section.id\" class=\"nav-btn\"\n :class=\"{ active: activeSection === section.id }\" @click=\"handleSectionClick(section)\">\n {{ section.icon }} {{ section.name }}\n </button>\n </nav>\n \n <div class=\"content\" v-show=\"!showReport\">\n <!-- Maintenance Tasks Form -->\n <section :class=\"['form-section', { active: activeSection === 'maintenance' }]\"\n v-show=\"activeSection === 'maintenance'\">\n <h2>🛠️ Maintenance Tasks</h2>\n <!-- Loading indicator -->\n <div class=\"loading-container\" v-if=\"isLoading\">\n <div class=\"loading-spinner\"></div>\n <p>Loading checklist...</p>\n </div>\n <form v-if=\"!isLoading\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h1>Maintenance Checklist</h1>\n <button v-if=\"showAddTaskButton\" class=\"btn btn-outline-custom\" @click.prevent=\"addTask()\">\n Manually Add Task\n <i class=\"fas fa-plus\"></i>\n </button>\n </div>\n\n <div class=\"progress-container\">\n <div class=\"progress-info\">\n Progress: {{ progress }}% ({{ completedCount.length }}/{{ checklists.length }})\n </div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" :style=\"{ width: progress + '%' }\"></div>\n </div>\n </div>\n\n <ul class=\"checklist\">\n <li v-for=\"checklist in checklists\" :key=\"checklist.id\" class=\"checklist-item\">\n <div class=\"checkbox\" :class=\"{ 'checked': checklist.completed }\"\n @click=\"toggleTask(checklist)\">\n <span v-if=\"checklist.completed\">✓</span>\n </div>\n <span class=\"task-text\" :class=\"{ 'completed': checklist.completed }\"\n @click=\"toggleTask(checklist)\">\n {{ checklist.text }}\n </span>\n <button v-if=\"showAddTaskButton\" class=\"delete-btn\" @click=\"deleteTask(checklist.id)\"\n title=\"Delete task\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path\n d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\">\n </path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </li>\n </ul>\n\n <div v-if=\"after\">\n <label>Upload Image Evidence</label>\n <ul class=\"checklist\">\n <li class=\"checklist-item\">\n <span class=\"task-text\">\n Image Evidence Already Uploaded\n </span>\n <button type=\"button\" class=\"delete-btn\" @click=\"deleteEvidence()\"\n title=\"Delete Image\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path\n d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\">\n </path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </li>\n </ul>\n </div>\n\n <div class=\"form-group\" v-else :key=\"refreshKey || 'default'\">\n <label>Upload Image Evidence</label>\n <p>You can only upload one image evidence here.</p>\n <div class=\"attachment-area\">\n <p>{{ fileText }}</p>\n <input type=\"file\" id=\"evidence-files\" class=\"file-input\" @change=\"handleImg\">\n <label for=\"evidence-files\" class=\"file-label\">Browse Files</label>\n </div>\n </div>\n\n <div class=\"status\" v-if=\"completedCount === checklists.length\">\n All tasks completed! ✅\n </div>\n\n <button class=\"reset-button\" @click.prevent=\"resetTasks\">{{ checklistButtonLabel }}</button>\n </div>\n </form>\n </section>\n\n <!-- Maintenance Schedule Form -->\n <section :class=\"['form-section', { active: activeSection === 'schedule' }]\"\n v-show=\"activeSection === 'schedule'\">\n <h2>📅 Maintenance Schedule</h2>\n <form>\n <div class=\"form-group\">\n <label for=\"task-name\">Task Name</label>\n <input type=\"text\" id=\"task-name\" v-model=\"form.taskName\" required>\n </div>\n\n <div class=\"form-group\">\n <label for=\"task-description\">Description</label>\n <textarea id=\"task-description\" v-model=\"form.description\" required></textarea>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"maintenance-type\">Maintenance Type</label>\n <select id=\"maintenance-type\" v-model=\"form.maintenanceType\" required>\n <option value=\"\">-- Select Type --</option>\n <option value=\"preventive\">Preventive</option>\n <option value=\"corrective\">Corrective</option>\n <option value=\"predictive\">Predictive</option>\n <option value=\"condition\">Condition-Based</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label for=\"component\">Component/System</label>\n <select id=\"component\" v-model=\"form.component\" required>\n <option value=\"\">-- Select Component --</option>\n <option value=\"engine\">Engine</option>\n <option value=\"hull\">Hull</option>\n <option value=\"electronics\">Electronics</option>\n <option value=\"deck\">Deck Machinery</option>\n <option value=\"plumbing\">Plumbing</option>\n <option value=\"electrical\">Electrical</option>\n <option value=\"hvac\">HVAC</option>\n <option value=\"safety\">Safety Systems</option>\n <option value=\"Other\">Other</option>\n </select>\n <input v-if=\"form.component === 'Other'\" type=\"text\"\n placeholder=\"Enter custom component/system\" v-model=\"form.customComponent\"\n style=\"margin-top: 8px;\">\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"priority\">Priority</label>\n <select id=\"priority\" v-model=\"form.priority\" required>\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"critical\">Critical</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label for=\"status\">Status</label>\n <input type=\"text\" id=\"status\" v-model=\"form.status\" readonly>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"estimated-hours\">Estimated Hours</label>\n <input type=\"number\" id=\"estimated-hours\" v-model=\"form.estimatedHours\" min=\"0\" step=\"0.5\">\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"assigned-to\">Assigned To</label>\n <select id=\"assigned-to\" v-model=\"form.assignedTo\">\n <option value=\"\">-- Select Personnel --</option>\n <option v-for=\"member in vesselCrew\" :key=\"member.id\"\n :value=\"`${member.name} - ${member.role}`\">\n {{ member.name }} - {{ member.role }}\n </option>\n </select>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"recurrence-type\">Recurrence</label>\n <select id=\"recurrence-type\" v-model=\"form.recurrence\" required>\n <option value=\"once\">One-time</option>\n <option value=\"daily\">Daily</option>\n <option value=\"weekly\">Weekly</option>\n <option value=\"monthly\">Monthly</option>\n <option value=\"quarterly\">Quarterly</option>\n <option value=\"semi-annual\">Semi-annually</option>\n <option value=\"annual\">Annually</option>\n <option value=\"custom\">Custom Interval</option>\n </select>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"last-performed\">Last Performed Date</label>\n <input type=\"date\" id=\"last-performed\" v-model=\"form.lastPerformed\">\n </div>\n\n <div class=\"form-group\">\n <label for=\"next-due\">Due Date</label>\n <input type=\"date\" id=\"next-due\" v-model=\"form.nextDue\" required>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label>Notifications</label>\n <div class=\"checkbox-group\">\n <div class=\"checkbox-item\">\n <input type=\"checkbox\" id=\"notify-email\" v-model=\"form.notifyEmail\">\n <label for=\"notify-email\">Email Notification</label>\n </div>\n <div class=\"checkbox-item\">\n <input type=\"checkbox\" id=\"notify-sms\" v-model=\"form.notifySms\">\n <label for=\"notify-sms\">SMS Notification</label>\n </div>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"reminder-days\">Reminder (Days Before)</label>\n <select id=\"reminder-days\" v-model=\"form.reminderDays\">\n <option value=\"1\">1 day</option>\n <option value=\"3\">3 days</option>\n <option value=\"7\">1 week</option>\n <option value=\"14\">2 weeks</option>\n <option value=\"30\">1 month</option>\n </select>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"schedule-notes\">Notes</label>\n <textarea id=\"schedule-notes\" v-model=\"form.notes\"></textarea>\n </div>\n\n <div class=\"form-group\">\n <label>Attachments</label>\n <div class=\"attachment-area\">\n <p>{{ imgText }}</p>\n <input type=\"file\" id=\"maintenance-files\" class=\"file-input\" @change=\"handleFiles\" multiple>\n <label for=\"maintenance-files\" class=\"file-label\">Browse Files</label>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn btn-primary\" @click.prevent=\"saveSchedule\"\n :disabled=\"isSaving\">\n {{ isSaving ? 'Saving...' : 'Save Schedule' }}\n </button>\n </div>\n </form>\n </section>\n\n <!-- Inventory Form -->\n <section :class=\"['form-section', { active: activeSection === 'inventory' }]\"\n v-show=\"activeSection === 'inventory'\">\n <h2>All Maintenance</h2>\n <div class=\"task-table-wrapper\">\n <!-- Filters and Controls -->\n <div class=\"table-controls\">\n <div class=\"filters\">\n <button :class=\"{ active: activeFilter === 'due' }\" @click=\"setFilter('due')\">Due</button>\n <button :class=\"{ active: activeFilter === 'all' }\" @click=\"setFilter('all')\">All</button>\n <button :class=\"{ active: activeFilter === 'completed' }\"\n @click=\"setFilter('completed')\">Completed</button>\n <input type=\"text\" v-model=\"searchQuery\" placeholder=\"Search...\" />\n </div>\n </div>\n\n <!-- Task Table -->\n <table class=\"task-table\">\n <thead>\n <tr>\n <th>Equipment</th>\n <th>Task Name</th>\n <th>Assigned To</th>\n <th>Intervals</th>\n <th>Remaining</th>\n <th>Next Due</th>\n <th>Status</th>\n <th>Action</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"task in filteredTasks\" :key=\"task.id\">\n <td>{{ task.component }}</td>\n <td>{{ task.taskName }}</td>\n <td>{{ task.assignedTo }}</td>\n <td>{{ task.recurrence }}</td>\n <td>{{ task.remainingDays }}</td>\n <td>{{ task.nextDue }}</td>\n <td>\n <span :class=\"['status-badge', task.status.toLowerCase().replace(' ', '-')]\">\n {{ task.status }}\n </span>\n </td>\n <td>\n <button @click=\"printMaintenance(task.component)\" v-if=\"task.status === 'Completed'\"\n class=\"status-action\">Print</button>\n <button @click=\"showMaintenance(task.component)\" v-else\n class=\"status-action\">Start</button>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Empty schedule -->\n <div v-if=\"!tasks.length\">\n <div class=\"alert alert-primary\" role=\"alert\">\n <h4 class=\"alert-heading\">Such Empty!!!</h4>\n <p>You have no maintenance, because you have not scheduled any for this ship.</p>\n <hr>\n <p class=\"mb-0\">Navigate to the schedule tab, to start scheduling. Or click on this button\n to\n <button type=\"button\" class=\"btn btn-primary\"\n @click=\"switchSchedule()\">Schedule</button>\n </p>\n </div>\n </div>\n </div>\n </section>\n </div>\n\n <div class=\"report-container\" ref=\"reportContainer\" v-show=\"showReport\">\n <div class=\"header\">\n <div class=\"report-title\">MAINTENANCE TASK REPORT</div>\n </div>\n\n <div class=\"report-info\">\n <div class=\"info-box\">\n <div class=\"info-label\">Report Generated:</div>\n <div>{{ reportDate }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Report ID:</div>\n <div>{{ reportId }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Total Tasks:</div>\n <div>{{ maintenanceTasks.length }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Generated By:</div>\n <div>OceanHelm System</div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">📊 Task Summary</div>\n <div class=\"summary-grid\">\n <div class=\"summary-card\">\n <div class=\"summary-number\">1</div>\n <div class=\"summary-label\">Completed</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">0</div>\n <div class=\"summary-label\">Pending</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">0</div>\n <div class=\"summary-label\">Overdue</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">{{ totalEstimatedHours }}</div>\n <div class=\"summary-label\">Total Hours</div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">🔧 Maintenance Tasks</div>\n <div v-for=\"task in maintenanceTasks\" :key=\"task.taskName\"\n :class=\"['task-item', getTaskStatusClass(task)]\">\n\n <div class=\"task-header\">\n <div>\n <div class=\"task-title\">\n {{ task.taskName }}\n <span :class=\"['maintenance-type', 'type-' + task.maintenanceType]\">\n {{ task.maintenanceType }}\n </span>\n </div>\n <div class=\"task-component\">Component: {{ task.component }}</div>\n </div>\n <span :class=\"['status-badge', 'status-' + task.status.toLowerCase().replace(' ', '-')]\">\n {{ task.status }}\n </span>\n </div>\n\n <div class=\"task-details\">\n <div class=\"detail-item\">\n <div class=\"detail-label\">Assigned To</div>\n <div class=\"detail-value\">{{ task.assignedTo }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Estimated Hours</div>\n <div class=\"detail-value\">{{ task.estimatedHours }} hours</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Last Performed</div>\n <div class=\"detail-value\">{{ formatDate(task.lastPerformed) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Next Due</div>\n <div class=\"detail-value\">{{ formatDate(task.nextDue) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Recurrence</div>\n <div class=\"detail-value\">{{ task.recurrence }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Remaining Days</div>\n <div class=\"detail-value\">{{ task.remainingDays }} days</div>\n </div>\n </div>\n\n <div v-if=\"task.description\"\n style=\"margin: 15px 0; padding: 10px; background: white; border-radius: 5px;\">\n <div class=\"detail-label\">Description</div>\n <div class=\"detail-value\">{{ task.description }}</div>\n </div>\n\n <div v-if=\"task.notes\"\n style=\"margin: 15px 0; padding: 10px; background: white; border-radius: 5px;\">\n <div class=\"detail-label\">Notes</div>\n <div class=\"detail-value\">{{ task.notes }}</div>\n </div>\n\n <div v-if=\"task.checklistProgress && task.checklistProgress.length > 0\" class=\"checklist-progress\">\n <div class=\"detail-label\">Checklist Progress</div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" :style=\"{ width: getChecklistProgress(task) + '%' }\"></div>\n </div>\n <div style=\"font-size: 0.9em; color: #666; margin-top: 5px;\">\n {{ getCompletedChecklistItems(task) }} of {{ task.checklistProgress.length }} items\n completed\n ({{ getChecklistProgress(task) }}%)\n </div>\n <div class=\"checklist-items\">\n <div v-for=\"(item, index) in task.checklistProgress\" :key=\"index\" class=\"checklist-item\">\n <span class=\"checklist-icon\">{{ item.completed ? '✅' : '⭕' }}</span>\n <span>{{ item.text || 'Checklist Item ' + (index + 1) }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">📋 Recommendations</div>\n <div class=\"info-box\">\n <ul>\n <li v-for=\"recommendation in generateRecommendations()\" :key=\"recommendation\">\n {{ recommendation }}\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"signature-section\">\n <div class=\"signature-box\">\n <div><strong>Report Generated By</strong></div>\n <div style=\"margin-top: 10px; color: #666;\">OceanHelm Maintenance System</div>\n </div>\n <div class=\"signature-box\">\n <div><strong>Date</strong></div>\n <div style=\"margin-top: 10px; color: #666;\">{{ reportDate }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'OceanHelmMaintenance',\n props: {\n vesselInfo: {\n type: Object,\n required: true\n },\n tasks: {\n type: Array,\n default: () => []\n },\n vesselCrew: {\n type: Array,\n default: () => []\n },\n companyInfo: {\n type: Object,\n default: () => ({})\n },\n userProfile: {\n type: Object,\n required: true\n }\n },\n emits: [\n 'dashboard-navigate',\n 'load-checklist',\n 'save-schedule',\n 'update-task',\n 'upload-file',\n 'delete-evidence',\n 'access-denied',\n 'show-message',\n 'generate-checklist'\n ],\n data() {\n return {\n ready: true,\n isSaving: false,\n after: null,\n lastSection: '',\n currentTask: '',\n imgText: 'Choose file to upload',\n fileText: 'Drag and drop files here or',\n fileattachments: {},\n refreshKey: 0,\n activeSection: 'inventory',\n sections: [\n { id: 'schedule', name: 'Schedule', icon: '📅' },\n { id: 'inventory', name: 'All Maintenance', icon: '♻️' },\n {\n id: 'dashboard', \n name: 'Dashboard', \n icon: '☰', \n onClick: () => this.$emit('dashboard-navigate')\n }\n ],\n activeFilter: 'all',\n searchQuery: '',\n checklists: [],\n isLoading: false,\n form: {\n taskName: '',\n description: '',\n maintenanceType: '',\n component: '',\n priority: '',\n dueDate: '',\n estimatedHours: null,\n assignedTo: '',\n recurrence: '',\n lastPerformed: '',\n nextDue: '',\n notifyEmail: true,\n notifySms: true,\n reminderDays: '1',\n estimatedDuration: null,\n notes: '',\n status: 'Soon',\n email: '',\n remainingDays: null,\n attachments: {}\n },\n maintenanceTasks: [],\n showReport: false,\n reportDate: new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n }),\n reportId: 'MT-' + Math.random().toString(36).substr(2, 9).toUpperCase(),\n };\n },\n watch: {\n 'form.lastPerformed': 'calculateNextDue',\n 'form.recurrence': 'calculateNextDue',\n 'form.nextDue': function (newDate) {\n this.calculateRemainingDays();\n }\n },\n computed: {\n filteredTasks() {\n let result = [...this.tasks];\n if (this.activeFilter === 'all') {\n result = result.filter(task => task.status === 'Overdue' || task.status === 'Soon' || task.status === 'Completed');\n }\n else if (this.activeFilter === 'due') {\n result = result.filter(task => task.status === 'Overdue' || task.status === 'Soon');\n } else if (this.activeFilter === 'completed') {\n result = result.filter(task => task.status === 'Completed');\n }\n\n if (this.searchQuery) {\n const query = this.searchQuery.toLowerCase();\n result = result.filter(task =>\n task.component.toLowerCase().includes(query) ||\n task.taskName.toLowerCase().includes(query) ||\n task.assignedTo.toLowerCase().includes(query)\n );\n }\n\n return result;\n },\n completedCount() {\n return this.checklists.filter(item => item.completed);\n },\n progress() {\n return Math.round((this.completedCount.length / this.checklists.length) * 100);\n },\n checklistButtonLabel() {\n return this.lastSection === 'schedule' ? 'Approve Maintenance' : 'Save Checklist';\n },\n showAddTaskButton() {\n return this.checklistButtonLabel !== 'Save Checklist';\n },\n totalEstimatedHours() {\n return this.maintenanceTasks.reduce((total, task) => total + (task.estimatedHours || 0), 0);\n },\n },\n methods: {\n grantAccess(vessel) {\n const profile = this.userProfile;\n return profile.role === 'owner' || \n profile.role === 'staff' || \n (profile.role === 'captain' && profile.vessel === vessel);\n },\n deepAccess() {\n const profile = this.userProfile;\n if (profile.role === 'owner' || profile.role === 'captain') {\n return true;\n } else {\n this.$emit('access-denied', 'You do not have access to do this');\n return false;\n }\n },\n deleteTask(taskId) {\n this.checklists = this.checklists.filter(checklist => checklist.id !== taskId);\n },\n addTask(event) {\n if (event) event.preventDefault();\n \n this.$emit('show-message', {\n type: 'prompt',\n title: 'Add New Task',\n message: 'Enter the task details',\n callback: (result) => {\n if (result) {\n const newTask = {\n id: Date.now(),\n text: result,\n completed: false\n };\n this.checklists.push(newTask);\n }\n }\n });\n },\n setFilter(filter) {\n this.activeFilter = filter;\n },\n loadChecklist(taskComponent) {\n this.isLoading = true;\n this.$emit('generate-checklist', {\n component: taskComponent,\n callback: (checklist) => {\n this.checklists = checklist.map(item => ({\n ...item,\n completed: false\n }));\n this.isLoading = false;\n }\n });\n },\n showMaintenance(taskComponent) {\n if (this.deepAccess()) {\n const task = this.tasks.find(t => t.component === taskComponent);\n\n if (task && task.checklistProgress) {\n this.checklists = [...task.checklistProgress];\n } else {\n this.loadChecklist(taskComponent);\n }\n\n this.after = task?.after;\n this.currentTask = taskComponent;\n this.lastSection = 'inventory';\n this.activeSection = 'maintenance';\n }\n },\n printMaintenance(taskComponent) {\n const task = this.tasks.find(t => t.component === taskComponent);\n this.maintenanceTasks = [task];\n this.loadMaintenanceData();\n\n this.showReport = true;\n\n this.$nextTick(() => {\n setTimeout(() => {\n window.print();\n this.showReport = false;\n }, 100);\n });\n },\n switchSchedule() {\n if (this.deepAccess()) {\n this.activeSection = 'schedule';\n }\n },\n handleFiles(event) {\n this.imgText = event.target.files[0].name;\n this.form.attachments = {\n file: event.target.files[0]\n };\n },\n handleImg(event) {\n this.fileText = event.target.files[0].name;\n this.fileattachments = {\n file: event.target.files[0]\n };\n },\n validateForm() {\n const requiredFields = [\n 'taskName',\n 'description',\n 'maintenanceType',\n 'component',\n 'priority',\n 'estimatedHours',\n 'recurrence',\n 'lastPerformed',\n 'assignedTo'\n ];\n\n for (const field of requiredFields) {\n if (!this.form[field]) {\n this.$emit('show-message', {\n type: 'error',\n title: 'Missing info',\n message: `Please fill in the required field: ${field}`\n });\n return false;\n }\n }\n\n return true;\n },\n handleSectionClick(section) {\n this.activeSection = section.id;\n if (typeof section.onClick === 'function') {\n section.onClick();\n }\n },\n calculateNextDue() {\n const date = this.form.lastPerformed ? new Date(this.form.lastPerformed) : null;\n const recurrence = this.form.recurrence;\n\n if (!date || !recurrence) return;\n\n let nextDate = new Date(date);\n\n switch (recurrence) {\n case 'daily':\n nextDate.setDate(nextDate.getDate() + 1);\n break;\n case 'weekly':\n nextDate.setDate(nextDate.getDate() + 7);\n break;\n case 'monthly':\n nextDate.setMonth(nextDate.getMonth() + 1);\n break;\n case 'quarterly':\n nextDate.setMonth(nextDate.getMonth() + 3);\n break;\n case 'semi-annual':\n nextDate.setMonth(nextDate.getMonth() + 6);\n break;\n case 'annual':\n nextDate.setFullYear(nextDate.getFullYear() + 1);\n break;\n case 'once':\n case 'custom':\n return;\n }\n\n this.form.nextDue = nextDate.toISOString().split('T')[0];\n },\n calculateRemainingDays() {\n if (!this.form.nextDue) {\n this.form.remainingDays = null;\n return;\n }\n\n const today = new Date();\n const nextDueDate = new Date(this.form.nextDue);\n\n today.setHours(0, 0, 0, 0);\n nextDueDate.setHours(0, 0, 0, 0);\n\n const diffTime = nextDueDate - today;\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n this.form.remainingDays = `${diffDays} Days`;\n },\n async saveSchedule() {\n this.isSaving = true;\n \n if (!this.validateForm()) {\n this.isSaving = false;\n return;\n }\n\n const taskData = { ...this.form };\n\n if (this.form.component === 'Other' && this.form.customComponent) {\n taskData.component = this.form.customComponent;\n }\n\n taskData.email = this.companyInfo.email;\n\n // Check for duplicate component\n const hasDuplicateComponent = this.tasks.some(task => task.component === taskData.component);\n\n if (hasDuplicateComponent) {\n this.$emit('show-message', {\n type: 'error',\n title: 'Duplicate Component',\n message: `A task with the component \"${taskData.component}\" already exists in maintenance`\n });\n this.isSaving = false;\n return;\n }\n\n delete taskData.customComponent;\n\n this.$emit('save-schedule', {\n taskData,\n file: taskData.attachments.file,\n callback: (success) => {\n this.isSaving = false;\n if (success) {\n this.loadChecklist(taskData.component);\n this.lastSection = 'schedule';\n this.currentTask = taskData.component;\n this.resetForm();\n this.activeSection = 'maintenance';\n }\n }\n });\n },\n resetForm() {\n this.form = {\n taskName: '',\n description: '',\n maintenanceType: '',\n component: '',\n priority: '',\n dueDate: '',\n estimatedHours: null,\n assignedTo: '',\n recurrence: '',\n lastPerformed: '',\n nextDue: '',\n notifyEmail: true,\n notifySms: true,\n reminderDays: '1',\n estimatedDuration: null,\n notes: '',\n status: 'Soon',\n remainingDays: null,\n attachments: {}\n };\n },\n toggleTask(task) {\n task.completed = !task.completed;\n },\n async resetTasks() {\n const allCompleted = this.checklists.every(item => item.completed);\n const status = allCompleted ? 'Completed' : 'Soon';\n const updateData = {\n checklistProgress: [...this.checklists],\n status,\n component: this.currentTask,\n after: this.after\n };\n\n this.$emit('update-task', {\n updateData,\n file: this.fileattachments.file,\n tasks: this.tasks,\n callback: (success, updatedAfter) => {\n if (success) {\n if (updatedAfter) {\n this.after = updatedAfter;\n }\n this.fileattachments = {};\n this.fileText = 'Drag and drop files here or';\n this.refreshKey += 1;\n this.activeSection = 'inventory';\n }\n }\n });\n },\n loadMaintenanceData() {\n this.reportId = 'MT-' + Math.random().toString(36).substr(2, 9).toUpperCase();\n this.reportDate = new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n },\n formatDate(dateString) {\n if (!dateString) return 'N/A';\n return new Date(dateString).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n },\n getTaskStatusClass(task) {\n if (task.status === 'Completed') return 'completed';\n if (task.status === 'Overdue') return 'overdue';\n if (task.status === 'In Progress') return 'in-progress';\n return 'pending';\n },\n getChecklistProgress(task) {\n if (!task.checklistProgress || task.checklistProgress.length === 0) return 0;\n const completed = task.checklistProgress.filter(item => item.completed).length;\n return Math.round((completed / task.checklistProgress.length) * 100);\n },\n getCompletedChecklistItems(task) {\n if (!task.checklistProgress) return 0;\n return task.checklistProgress.filter(item => item.completed).length;\n },\n generateRecommendations() {\n return [\n 'Maintain regular communication with assigned technicians',\n 'Ensure all safety protocols are followed during maintenance activities',\n 'Update task progress and notes in real-time for accurate reporting'\n ];\n },\n deleteEvidence() {\n this.$emit('delete-evidence', {\n currentTask: this.currentTask,\n callback: (success) => {\n if (success) {\n this.after = null;\n this.fileText = 'Drag and drop files here or';\n this.fileattachments = {};\n this.refreshKey += 1;\n }\n }\n });\n }\n }\n};\n</script>\n<!--\n<style>\n.progress-container {\n margin-bottom: 20px;\n}\n\n.progress-bar {\n background-color: #e9ecef;\n border-radius: 4px;\n height: 10px;\n margin-top: 8px;\n}\n\n.progress-fill {\n background-color: #00a8e8;\n height: 100%;\n border-radius: 4px;\n transition: width 0.3s ease;\n}\n\n.checklist {\n list-style-type: none;\n padding: 0;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n padding: 10px 0;\n border-bottom: 1px solid #eee;\n cursor: pointer;\n}\n\n.checkbox {\n margin-right: 15px;\n width: 20px;\n height: 20px;\n border: 2px solid #00a8e8;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.checkbox.checked {\n background-color: #00a8e8;\n color: white;\n}\n\n.task-text {\n flex-grow: 1;\n}\n\n.task-text.completed {\n text-decoration: line-through;\n color: #6c757d;\n}\n\n.status {\n margin-top: 20px;\n font-weight: bold;\n text-align: center;\n}\n\n.reset-button {\n background-color: #005792;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n margin-top: 20px;\n font-weight: bold;\n}\n\n.btn-outline-custom {\n color: #005792;\n /* your custom text color */\n border: 2px solid #005792;\n /* your custom border color */\n background-color: transparent;\n padding: 8px 16px;\n border-radius: 4px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.3s, color 0.3s;\n}\n\n.btn-outline-custom:hover {\n background-color: #005792;\n /* custom hover background */\n color: white;\n /* text color on hover */\n}\n\n.reset-button:hover {\n background-color: #003d5b;\n}\n\nheader {\n background-color: var(--maitprimary);\n color: white;\n padding: 1rem;\n text-align: center;\n border-radius: 5px 5px 0 0;\n}\n\n/* \n*/\n\n.content {\n background-color: white;\n padding: 20px;\n border-radius: 0 0 5px 5px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n\n.form-section {\n display: none;\n animation: fadeIn 0.5s;\n}\n\n.form-section.active {\n display: block;\n}\n\n.form-row {\n margin-bottom: 15px;\n}\n\n.form-group {\n margin-bottom: 20px;\n}\n\nlabel {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n color: var(--dark);\n}\n\ninput,\nselect,\ntextarea {\n width: 100%;\n padding: 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 16px;\n}\n\n.input-group {\n display: flex;\n gap: 10px;\n}\n\n.input-group>div {\n flex: 1;\n}\n\ntextarea {\n height: 120px;\n resize: vertical;\n}\n\n/* \n.btn {\n padding: 10px 20px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 16px;\n font-weight: bold;\n transition: background-color 0.3s;\n}*/\n\n.btn-primary {\n background-color: var(--maitprimary);\n color: white;\n}\n\n.btn-primary:hover {\n background-color: var(--dark);\n}\n\n.btn-success {\n background-color: var(--success);\n color: white;\n}\n\n.btn-success:hover {\n background-color: #219653;\n}\n\n.action-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 20px;\n}\n\n.status-badge {\n display: inline-block;\n padding: 5px 10px;\n border-radius: 15px;\n font-size: 14px;\n font-weight: bold;\n color: white;\n}\n\n.status-pending {\n background-color: var(--warning);\n}\n\n.status-progress {\n background-color: var(--accent);\n}\n\n.status-completed {\n background-color: var(--success);\n}\n\n.attachment-area {\n border: 2px dashed #ddd;\n padding: 20px;\n text-align: center;\n border-radius: 5px;\n margin-bottom: 20px;\n}\n\n.file-input {\n display: none;\n}\n\n.file-label {\n display: inline-block;\n padding: 10px 20px;\n background-color: var(--accent);\n color: white;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n}\n\n.file-label:hover {\n background-color: var(--maitsecondary);\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.form-section h3 {\n margin-top: 30px;\n margin-bottom: 15px;\n color: var(--maitsecondary);\n}\n\n.checkbox-group {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin-top: 10px;\n}\n\n.checkbox-item {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.checkbox-item input {\n width: auto;\n}\n\n.status-badge {\n padding: 0.3em 0.6em;\n border-radius: 4px;\n color: white;\n font-weight: bold;\n font-size: 0.85rem;\n}\n\n.status-action {\n padding: 0.3em 0.6em;\n border-radius: 4px;\n color: white;\n font-weight: bold;\n font-size: 0.85rem;\n background-color: var(--maitprimary);\n}\n\n.status-badge.overdue {\n background-color: red;\n}\n\n.status-badge.soon {\n background-color: orange;\n}\n\n/* Wrapper layout */\n.task-table-wrapper {\n font-family: 'Inter', sans-serif;\n padding: 1rem;\n}\n\n/* Controls section */\n.table-controls {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n flex-wrap: wrap;\n gap: 1rem;\n}\n\n.filters {\n display: flex;\n gap: 0.5rem;\n flex-wrap: wrap;\n}\n\n.filters button,\n.filters input {\n padding: 0.5rem 1rem;\n border-radius: 6px;\n border: 1px solid #ccc;\n background-color: #f5f5f5;\n font-weight: 500;\n cursor: pointer;\n}\n\n.filters button.active {\n background-color: #002f6c;\n color: white;\n}\n\n.filters input {\n border: 1px solid #bbb;\n}\n\n.filter-badge {\n background-color: #eee;\n color: #333;\n}\n\n/* Print and Add buttons */\n.table-controls>div:last-child button {\n padding: 0.5rem 1rem;\n border: 1px solid var(--maitprimary);\n border-radius: 6px;\n background-color: white;\n color: var(--maitprimary);\n ;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.table-controls>div:last-child button:last-child {\n background-color: var(--maitprimary);\n ;\n color: white;\n}\n\n/* Table */\n.task-table {\n width: 100%;\n border-collapse: collapse;\n box-shadow: 0 0 0 1px #ccc;\n}\n\n.task-table thead {\n background-color: var(--maitprimary);\n ;\n color: white;\n}\n\n.task-table th,\n.task-table td {\n padding: 0.75rem;\n text-align: left;\n border-bottom: 1px solid #eee;\n white-space: pre-line;\n /* so \\n works */\n}\n\n.task-table tbody tr:hover {\n background-color: #f9f9f9;\n}\n\n/* Status badges */\n.status-badge {\n padding: 0.3em 0.6em;\n border-radius: 6px;\n font-weight: bold;\n font-size: 0.85rem;\n color: white;\n display: inline-block;\n text-align: center;\n min-width: 90px;\n}\n\n.status-badge.complete {\n background-color: #4dffd0;\n}\n\n.status-badge.soon {\n background-color: #ffa500;\n}\n\n.status-badge.completed {\n background-color: #4caf50;\n}\n\n.delete-btn {\n background: none;\n border: none;\n color: #dc3545;\n cursor: pointer;\n padding: 6px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n opacity: 1;\n margin-left: 8px;\n flex-shrink: 0;\n transform: scale(1.1);\n}\n\n.checklist-item:hover .delete-btn {\n opacity: 1;\n}\n\n.delete-btn:hover {\n background-color: #dc3545;\n color: white;\n transform: scale(1.1);\n}\n\n.delete-btn:active {\n transform: scale(0.95);\n}\n\n.print-only-container {\n text-align: center;\n}\n\n.initial-print-btn {\n background: linear-gradient(135deg, #0066cc, #004499);\n color: white;\n border: none;\n padding: 20px 40px;\n font-size: 1.3em;\n border-radius: 12px;\n cursor: pointer;\n transition: all 0.3s ease;\n box-shadow: 0 6px 20px rgba(0, 102, 204, 0.3);\n display: flex;\n align-items: center;\n gap: 15px;\n margin: 0 auto;\n}\n\n.initial-print-btn:hover {\n background: linear-gradient(135deg, #004499, #003366);\n transform: translateY(-3px);\n box-shadow: 0 8px 25px rgba(0, 102, 204, 0.4);\n}\n\n.initial-print-btn:active {\n transform: translateY(0);\n}\n\n.company-branding {\n margin-bottom: 30px;\n}\n\n.company-logo {\n font-size: 3em;\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 10px;\n}\n\n.company-tagline {\n font-size: 1.1em;\n color: #666;\n}\n\n/* Report Styles - Hidden Initially */\n.report-container {\n display: none;\n max-width: 900px;\n margin: 0 auto;\n background: white;\n padding: 30px;\n border-radius: 10px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n}\n\n.header {\n text-align: center;\n border-bottom: 3px solid #0066cc;\n padding-bottom: 20px;\n margin-bottom: 30px;\n}\n\n.report-logo {\n font-size: 2.5em;\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 10px;\n}\n\n.report-title {\n font-size: 1.8em;\n color: #333;\n margin: 10px 0;\n}\n\n.report-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.info-box {\n background: #f8f9fa;\n padding: 15px;\n border-radius: 8px;\n border-left: 4px solid #0066cc;\n}\n\n.info-box ul li {\n margin-left: 15px;\n}\n\n.info-label {\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 5px;\n}\n\n.section {\n margin-bottom: 30px;\n}\n\n.section-title {\n font-size: 1.3em;\n font-weight: bold;\n color: #0066cc;\n border-bottom: 2px solid #e9ecef;\n padding-bottom: 10px;\n margin-bottom: 15px;\n}\n\n.task-item {\n background: #f8f9fa;\n margin: 15px 0;\n padding: 20px;\n border-radius: 8px;\n border-left: 4px solid #28a745;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n}\n\n.task-item.pending {\n border-left-color: #ffc107;\n}\n\n.task-item.overdue {\n border-left-color: #dc3545;\n}\n\n.task-item.in-progress {\n border-left-color: #17a2b8;\n}\n\n.task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 15px;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.task-title {\n font-size: 1.2em;\n font-weight: bold;\n color: #333;\n}\n\n.task-component {\n font-size: 0.9em;\n color: #666;\n margin-top: 5px;\n}\n\n.status-badge {\n display: inline-block;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 0.8em;\n font-weight: bold;\n text-transform: uppercase;\n}\n\n.status-completed {\n background: #d4edda;\n color: #155724;\n}\n\n.status-pending {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-overdue {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-in-progress {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.task-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin: 15px 0;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n}\n\n.detail-label {\n font-weight: bold;\n font-size: 0.85em;\n color: #0066cc;\n margin-bottom: 3px;\n}\n\n.detail-value {\n font-size: 0.95em;\n color: #333;\n}\n\n.checklist-progress {\n margin-top: 15px;\n}\n\n.progress-bar {\n width: 100%;\n height: 20px;\n background: #e9ecef;\n border-radius: 10px;\n overflow: hidden;\n margin: 10px 0;\n}\n\n.progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #28a745, #20c997);\n transition: width 0.3s ease;\n}\n\n.checklist-items {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 10px;\n margin-top: 10px;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n padding: 8px;\n background: white;\n border-radius: 5px;\n font-size: 0.9em;\n}\n\n.checklist-icon {\n margin-right: 8px;\n font-size: 1.1em;\n}\n\n.summary-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 15px;\n margin: 20px 0;\n}\n\n.summary-card {\n background: white;\n padding: 20px;\n border-radius: 8px;\n text-align: center;\n border: 2px solid #e9ecef;\n}\n\n.summary-number {\n font-size: 2em;\n font-weight: bold;\n color: #0066cc;\n}\n\n.summary-label {\n font-size: 0.9em;\n color: #666;\n margin-top: 5px;\n}\n\n.signature-section {\n margin-top: 40px;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 40px;\n}\n\n.signature-box {\n padding-top: 10px;\n text-align: center;\n}\n\n.maintenance-type {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: bold;\n text-transform: uppercase;\n margin-left: 10px;\n}\n\n.type-corrective {\n background: #fff3cd;\n color: #856404;\n}\n\n.type-preventive {\n background: #d4edda;\n color: #155724;\n}\n\n.type-predictive {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n/* Print Styles */\n@media print {\n body {\n background: white;\n padding: 0;\n display: block;\n }\n\n .print-only-container {\n display: none !important;\n }\n\n .report-container {\n display: block !important;\n box-shadow: none;\n padding: 0;\n margin: 0;\n max-width: none;\n }\n}\n\nnav button {\n background-color: var(--maitsecondary);\n color: white;\n border: none;\n padding: 10px 20px;\n margin: 5px;\n cursor: pointer;\n font-weight: bold;\n border-radius: 3px;\n transition: background-color 0.3s;\n}\n\nnav button:hover,\nnav button.active {\n background-color: var(--maitprimary);\n}\n</style>\n-->","<template>\n <div class=\"activity-logs\">\n <!-- Controls -->\n <div class=\"a-controls\">\n <div class=\"a-search-box\">\n <input type=\"text\" placeholder=\"Search activities, users, or actions...\" :value=\"searchTerm\"\n @input=\"$emit('update:searchTerm', $event.target.value)\" />\n </div>\n <select class=\"filter-select\" :value=\"selectedFilter\"\n @change=\"$emit('update:selectedFilter', $event.target.value)\">\n <option value=\"all\">All Activities</option>\n <option value=\"login\">Login</option>\n <option value=\"logout\">Logout</option>\n <option value=\"create\">Create</option>\n <option value=\"update\">Update</option>\n <option value=\"delete\">Delete</option>\n <option value=\"view\">View</option>\n </select>\n <button class=\"btn btn-primary\" @click=\"$emit('refresh')\">🔄 Refresh</button>\n <button class=\"btn btn-secondary\" @click=\"$emit('download')\">📥 Download Report</button>\n </div>\n\n <!-- Stats -->\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <h3>Total Activities</h3>\n <div class=\"value\">{{ totalActivities }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Today's Activities</h3>\n <div class=\"value\">{{ todayActivities }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Active Users</h3>\n <div class=\"value\">{{ activeUsers }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Important</h3>\n <div class=\"badge-danger\">\n Logs are deleted at the end of every month, please download a copy\n </div>\n </div>\n </div>\n\n <!-- Logs Table -->\n <div class=\"logs-container\">\n <div v-if=\"loading\" class=\"loading\">\n <div class=\"spinner\"></div>\n <p>Loading activity logs...</p>\n </div>\n\n <div v-else-if=\"logs.length === 0\" class=\"no-logs\">\n <h3>No activities found</h3>\n <p>Try adjusting your search or filter criteria</p>\n </div>\n\n <div v-else>\n <table class=\"logs-table\">\n <thead>\n <tr>\n <th>Timestamp</th>\n <th>User Name</th>\n <th>Action</th>\n <th>Details</th>\n <th>Section</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"log in paginatedLogs\" :key=\"log.id\">\n <td>{{ formatDate(log.timestamp) }}</td>\n <td>\n <div>{{ log.user_name }}</div>\n <small style=\"color: gray\">{{ log.email }}</small>\n </td>\n <td>\n <span class=\"activity-badge\" :class=\"getBadgeClass(log.action)\">\n {{ log.action }}\n </span>\n </td>\n <td>\n {{ log.details.status }}\n <div v-for=\"(change, key) in log.details.information\" :key=\"key\">\n <strong>{{ key }}: </strong>\n <small style=\"color: gray\">\n {{ change?.from ?? \"\" }} → {{ change?.to ?? change ?? \"\" }}\n </small>\n </div>\n </td>\n <td>{{ log.table_name }}</td>\n </tr>\n </tbody>\n </table>\n\n <!-- Pagination -->\n <div class=\"pagination\">\n <button @click=\"$emit('change-page', currentPage - 1)\" :disabled=\"currentPage === 1\">\n Previous\n </button>\n <button v-for=\"page in totalPages\" :key=\"page\" @click=\"$emit('change-page', page)\"\n :class=\"{ active: currentPage === page }\">\n {{ page }}\n </button>\n <button @click=\"$emit('change-page', currentPage + 1)\" :disabled=\"currentPage === totalPages\">\n Next\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ActivityLogs\",\n props: {\n loading: Boolean,\n searchTerm: String,\n selectedFilter: String,\n logs: Array,\n paginatedLogs: Array,\n totalActivities: Number,\n todayActivities: Number,\n activeUsers: Number,\n totalPages: Number,\n currentPage: Number,\n },\n emits: [\"update:searchTerm\", \"update:selectedFilter\", \"refresh\", \"download\", \"change-page\"],\n methods: {\n formatDate(timestamp) {\n return new Date(timestamp).toLocaleString();\n },\n getBadgeClass(action) {\n const classes = {\n login: \"badge-login\",\n logout: \"badge-logout\",\n create: \"badge-create\",\n update: \"badge-update\",\n delete: \"badge-delete\",\n view: \"badge-view\",\n };\n return classes[action] || \"badge-view\";\n },\n },\n};\n</script>\n\n<style>\n.a-header {\n background: linear-gradient(135deg, var(--dashprimary-color), var(--dashsecondary-color));\n color: white;\n padding: 2rem 0;\n margin-bottom: 2rem;\n border-radius: 12px;\n box-shadow: 0 10px 30px rgba(52, 153, 64, 0.3);\n}\n\n.a-header h1 {\n font-size: 2.5rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n text-align: center;\n}\n\n.a-header p {\n text-align: center;\n opacity: 0.9;\n font-size: 1.1rem;\n}\n\n.a-controls {\n display: flex;\n gap: 1rem;\n margin-bottom: 2rem;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.a-search-box {\n flex: 1;\n min-width: 250px;\n position: relative;\n}\n\n.a-search-box input {\n width: 100%;\n padding: 12px 16px;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n font-size: 1rem;\n transition: all 0.3s ease;\n}\n\n.a-search-box input:focus {\n outline: none;\n border-color: var(--dashsecondary-color);\n box-shadow: 0 0 0 3px rgba(52, 153, 64, 0.1);\n}\n\n.filter-select {\n padding: 12px 16px;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n font-size: 1rem;\n background: white;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: var(--dashsecondary-color);\n box-shadow: 0 0 0 3px rgba(52, 153, 64, 0.1);\n}\n\n.btn {\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-primary {\n background: var(--primary);\n color: white;\n}\n\n.btn-primary:hover {\n background: var(--primary-dark);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(52, 153, 64, 0.3);\n}\n\n.btn-secondary {\n background: var(--secondary);\n color: var(--dark);\n}\n\n.btn-secondary:hover {\n background: #e6a200;\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(244, 180, 0, 0.3);\n}\n\n.stats-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1.5rem;\n margin-bottom: 2rem;\n}\n\n.stat-card {\n background: white;\n padding: 1.5rem;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n transition: transform 0.3s ease;\n}\n\n.stat-card:hover {\n transform: translateY(-2px);\n}\n\n.stat-card h3 {\n color: var(--gray);\n font-size: 0.9rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 0.5rem;\n}\n\n.stat-card .value {\n font-size: 2rem;\n font-weight: 700;\n color: var(--dashsecondary-color);\n}\n\n.logs-container {\n background: white;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n}\n\n.logs-header {\n background: var(--light);\n padding: 1.5rem;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.logs-header h2 {\n color: var(--dark);\n font-size: 1.3rem;\n font-weight: 600;\n}\n\n.logs-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.logs-table th,\n.logs-table td {\n padding: 1rem;\n text-align: left;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.logs-table th {\n background: var(--light);\n font-weight: 600;\n color: var(--dark);\n font-size: 0.9rem;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.logs-table tr:hover {\n background: #f8f9fa;\n}\n\n.activity-badge {\n padding: 4px 12px;\n border-radius: 20px;\n font-size: 0.8rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.badge-login {\n background: var(--success);\n color: white;\n}\n\n.badge-logout {\n background: var(--gray);\n color: white;\n}\n\n.badge-create {\n background: var(--dashprimary-color);\n color: white;\n}\n\n.badge-update {\n background: var(--warning);\n color: white;\n}\n\n.badge-delete {\n background: var(--danger);\n color: white;\n}\n\n.badge-danger {\n color: var(--danger);\n}\n\n.badge-view {\n background: var(--maitsecondary);\n color: white;\n}\n\n.pagination {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 0.5rem;\n padding: 1.5rem;\n background: var(--light);\n}\n\n.pagination button {\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n background: white;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.pagination button:hover {\n background: var(--primary);\n color: white;\n border-color: var(--primary);\n}\n\n.pagination button.active {\n background: var(--primary);\n color: white;\n border-color: var(--primary);\n}\n\n.pagination button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.no-logs {\n text-align: center;\n padding: 3rem;\n color: var(--gray);\n}\n\n.no-logs h3 {\n font-size: 1.5rem;\n margin-bottom: 1rem;\n}\n\n.loading {\n text-align: center;\n padding: 3rem;\n color: var(--gray);\n}\n\n.spinner {\n border: 3px solid #f3f3f3;\n border-top: 3px solid var(--primary);\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n margin: 0 auto 1rem;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@media (max-width: 768px) {\n .a-controls {\n flex-direction: column;\n align-items: stretch;\n }\n\n .a-search-box {\n min-width: 100%;\n }\n\n .stats-grid {\n grid-template-columns: 1fr;\n }\n\n .logs-table {\n font-size: 0.9rem;\n }\n\n .logs-table th,\n .logs-table td {\n padding: 0.5rem;\n }\n}\n</style>","<template>\n <div class=\"crew-management\">\n <!-- Wave background -->\n <div class=\"wave-bg\" v-if=\"config.showWaveBackground\"></div>\n\n <div class=\"crew-section\">\n <div class=\"crew-section-header\">\n <h4 class=\"crew-subhead\">{{ sectionTitle }}</h4>\n <div class=\"header-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleToggleGuestForm\" v-if=\"canAddCrew\">\n {{ showGuestForm ? 'Cancel' : '+ Check-in Guest' }}\n </button>\n <button class=\"btn btn-primary\" @click=\"handleToggleAddForm\" v-if=\"canAddCrew\">\n {{ showAddForm ? 'Cancel' : '+ Add Crew Member' }}\n </button>\n </div>\n </div>\n\n <!-- Personnel Onboard Summary -->\n <div class=\"personnel-summary\" v-if=\"!showAddForm && !showGuestForm && !showTimesheet\">\n <div class=\"summary-header\">\n <h3><i class=\"bi bi-people-fill\"></i> Personnel Onboard Summary</h3>\n <div class=\"summary-date\">{{ currentDate }}</div>\n </div>\n\n <div class=\"summary-cards\">\n <!-- Total Onboard -->\n <div class=\"summary-card total-card\">\n <div class=\"card-icon\">\n <i class=\"bi bi-people\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ totalOnboard }}</div>\n <div class=\"card-label\">Total Onboard</div>\n </div>\n </div>\n\n <!-- Crew Onboard -->\n <div class=\"summary-card crew-card\">\n <div class=\"card-icon\">\n <i class=\"bi bi-person-badge\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ crewOnboard }}</div>\n <div class=\"card-label\">Crew Onboard</div>\n </div>\n </div>\n\n <!-- Guests Onboard -->\n <div class=\"summary-card guest-card-summary\">\n <div class=\"card-icon\">\n <i class=\"bi bi-person-check\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ guestsOnboard }}</div>\n <div class=\"card-label\">Guests Onboard</div>\n </div>\n </div>\n </div>\n\n <!-- Breakdown by Vessel -->\n <div class=\"vessel-breakdown\" v-if=\"Object.keys(personnelByVessel).length > 0\">\n <h4>Breakdown by Vessel</h4>\n <div class=\"vessel-cards\">\n <div v-for=\"(data, vessel) in personnelByVessel\" :key=\"vessel\" class=\"vessel-card\">\n <div class=\"vessel-name\">{{ vessel }}</div>\n <div class=\"vessel-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Crew:</span>\n <span class=\"stat-value\">{{ data.crew }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Guests:</span>\n <span class=\"stat-value\">{{ data.guests }}</span>\n </div>\n <div class=\"stat-item total-stat\">\n <span class=\"stat-label\">Total:</span>\n <span class=\"stat-value\">{{ data.total }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Search and Filter - Hide when form is shown -->\n <div class=\"search-filter\" v-if=\"!showAddForm && !showGuestForm\">\n <input type=\"text\" placeholder=\"Search crew by name or role...\" v-model=\"searchQuery\" @input=\"handleSearch\">\n <select v-model=\"filterStatus\" @change=\"handleFilter\">\n <option value=\"all\">All Statuses</option>\n <option value=\"available\">Available</option>\n <option value=\"onduty\">On Duty</option>\n <option value=\"onboard\">On Board</option>\n <option value=\"assigned\">Assigned</option>\n <option value=\"unavailable\">Unavailable</option>\n </select>\n <button class=\"btn btn-secondary\" @click=\"showTimesheet = !showTimesheet\">\n <i :class=\"showTimesheet ? 'bi bi-grid-3x3-gap' : 'bi bi-table'\"></i>\n {{ showTimesheet ? 'Show Crew Cards' : 'Show Timesheet' }}\n </button>\n </div>\n\n <!-- Loading State - Hide when form is shown -->\n <div v-if=\"loading && !showAddForm && !showGuestForm\" class=\"loading-state\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading crew...</span>\n </div>\n <p>Loading crew members...</p>\n </div>\n\n <!-- Consolidated Timesheet View - Hide when form is shown -->\n <div v-else-if=\"showTimesheet && !showAddForm && !showGuestForm\" class=\"timesheet-view\">\n <div class=\"timesheet-header\">\n <h3><i class=\"bi bi-table\"></i> Crew Activity Timesheet</h3>\n <div class=\"timesheet-controls\">\n <select v-model=\"timesheetFilter\" @change=\"filterTimesheet\">\n <option value=\"all\">All Activities</option>\n <option value=\"Embarked\">Embarked Only</option>\n <option value=\"Deboarded\">Deboarded Only</option>\n <option value=\"Assigned\">Assigned Only</option>\n <option value=\"Status Changed\">Status Changes Only</option>\n </select>\n <input type=\"text\" v-model=\"timesheetSearch\" placeholder=\"Search timesheet...\"\n class=\"timesheet-search\">\n </div>\n </div>\n\n <div class=\"timesheet-summary\">\n <div class=\"summary-card\">\n <span class=\"summary-label\">Total Entries:</span>\n <span class=\"summary-value\">{{ filteredTimesheetEntries.length }}</span>\n </div>\n <div class=\"summary-card\">\n <span class=\"summary-label\">Crew Members:</span>\n <span class=\"summary-value\">{{ uniqueCrewCount }}</span>\n </div>\n <div class=\"summary-card\">\n <span class=\"summary-label\">Date Range:</span>\n <span class=\"summary-value\">{{ timesheetDateRange }}</span>\n </div>\n </div>\n\n <div v-if=\"filteredTimesheetEntries.length === 0\" class=\"no-results\">\n No timesheet entries found.\n </div>\n\n <div v-else class=\"timesheet-table-container\">\n <table class=\"timesheet-table\">\n <thead>\n <tr>\n <th @click=\"sortTimesheet('timestamp')\">\n Date/Time\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('crewName')\">\n Crew Member\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('role')\">\n Role\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('action')\">\n Action\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th>Vessel</th>\n <th>Duration</th>\n <th>Notes</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"entry in filteredTimesheetEntries\" :key=\"entry.uniqueId\"\n :class=\"getTimesheetRowClass(entry.action)\">\n <td class=\"timestamp-cell\">{{ formatLogDate(entry.timestamp) }}</td>\n <td class=\"crew-name-cell\">\n <strong>{{ entry.crewName }}</strong>\n </td>\n <td class=\"role-cell\">{{ entry.role }}</td>\n <td class=\"action-cell\">\n <span :class=\"['action-badge', getLogActionClass(entry.action)]\">\n <i :class=\"getLogIcon(entry.action)\"></i>\n {{ entry.action }}\n </span>\n </td>\n <td class=\"vessel-cell\">{{ entry.vessel || 'N/A' }}</td>\n <td class=\"duration-cell\">{{ entry.duration ? entry.duration + ' days' : 'N/A' }}</td>\n <td class=\"notes-cell\">{{ entry.notes || '-' }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Crew Grid - Hide when form is shown -->\n <div class=\"crew-grid\" v-else-if=\"filteredCrew.length > 0 && !showAddForm && !showGuestForm\">\n <div v-for=\"member in filteredCrew\" :key=\"member.id\" class=\"crew-card\"\n :class=\"{ 'unavailable': member.status === 'unavailable', 'guest-card': member.role === 'guest' }\">\n <div :class=\"['crew-status-badge', getStatusClass(member.status)]\">\n {{ formatStatus(member.status) }}\n </div>\n\n <div class=\"crew-name\">{{ member.name }}</div>\n <div class=\"crew-role\">{{ member.role === 'guest' ? 'Guest' : member.role }}</div>\n\n <!-- Certifications - Only show for non-guests -->\n <div class=\"crew-certifications\" v-if=\"member.role !== 'guest'\">\n <div v-for=\"cert in getApprovedCertifications(member)\" :key=\"cert.name\" class=\"certification-tag\"\n :class=\"getCertificationClass(cert.expiryDate)\" @click=\"handleViewCertification(cert, member)\">\n {{ cert.name }}\n </div>\n <!-- Optional: Show pending certifications count -->\n <div v-if=\"getPendingCertificationsCount(member) > 0\" class=\"certification-tag text-muted\">\n <i class=\"bi bi-clock-history\"></i> {{ getPendingCertificationsCount(member) }} pending\n </div>\n <i class=\"bi bi-patch-plus-fill icon\" @click=\"handleAddCertification(member)\"\n v-if=\"canEditCrew\"></i>\n </div>\n\n <!-- Crew Details - Different for guests -->\n <div v-if=\"member.role === 'guest'\">\n <div class=\"crew-availability\">\n <strong>Arrival Date:</strong> {{ member.nextShift || 'Not Recorded' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard:</strong> {{ member.onBoard || 'Not Specified' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Days Onboard:</strong> {{ getGuestDaysOnboard(member) }}\n </div>\n </div>\n <div v-else>\n <div class=\"crew-availability\">\n <strong>Embarkation Date:</strong> {{ getEmbarkationDate(member) }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard:</strong> {{ member.onBoard || 'Not Scheduled' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Days Onboard:</strong> {{ getDaysOnboard(member) }}\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"action-buttons\">\n <div v-if=\"member.vessel\" class=\"status-available crew-availability vcard\">\n Vessel: {{ member.vessel }}\n </div>\n <div v-else class=\"status-unavailable crew-availability vcard\">\n Vessel: Unassigned\n </div>\n\n <!-- Guest-specific actions -->\n <button class=\"btn btn-warning\" @click=\"handleCheckoutGuest(member)\"\n v-if=\"member.role === 'guest' && member.status === 'onboard'\">\n Check Out\n </button>\n\n <!-- Crew-specific actions -->\n <template v-if=\"member.role !== 'guest'\">\n <!-- Available: Show Assign Shift button -->\n <button class=\"btn btn-primary\" @click=\"handleAssignShift(member)\"\n v-if=\"canAssignShift && member.status === 'available'\">\n Assign Shift\n </button>\n <!-- On Duty: Show Check In button -->\n <button class=\"btn btn-success\" @click=\"handleCheckinCrew(member)\"\n v-if=\"canDeboardCrew && member.status === 'onduty'\">\n Check In\n </button>\n <!-- Onboard: Show Deboard button -->\n <button class=\"btn btn-warning\" @click=\"handleDeboardCrew(member)\"\n v-if=\"canDeboardCrew && member.status === 'onboard'\">\n Deboard\n </button>\n </template>\n <!-- Unavailable & Assigned: No buttons -->\n </div>\n\n <!-- Crew Log Button and Delete Icon -->\n <div class=\"crew-footer\">\n <div class=\"crew-log-toggle\" v-if=\"member.log && member.log.length > 0\">\n <button class=\"btn btn-link btn-sm log-toggle-btn\" @click=\"toggleCrewLog(member.id)\">\n <i class=\"bi bi-clock-history\"></i> View Log ({{ member.log.length }})\n </button>\n </div>\n <i class=\"bi bi-trash icon delete-icon\" @click=\"handleDeleteCrew(member)\" v-if=\"canDeleteCrew\"></i>\n </div>\n\n <!-- Crew Log Display -->\n <div v-if=\"expandedLogs.includes(member.id)\" class=\"crew-log\">\n <h4>Crew Activity Log</h4>\n <div v-for=\"(entry, index) in member.log\" :key=\"index\" class=\"log-entry\">\n <div class=\"log-date\">{{ formatLogDate(entry.timestamp) }}</div>\n <div class=\"log-action\" :class=\"getLogActionClass(entry.action)\">\n <i :class=\"getLogIcon(entry.action)\"></i>\n {{ entry.action }}\n </div>\n <div class=\"log-details\">\n <span v-if=\"entry.vessel\">Vessel: {{ entry.vessel }}</span>\n <span v-if=\"entry.duration\"> | Duration: {{ entry.duration }} days</span>\n </div>\n <div v-if=\"entry.notes\" class=\"log-notes\">{{ entry.notes }}</div>\n </div>\n </div>\n\n </div>\n </div>\n\n <!-- No Results - Hide when form is shown -->\n <div v-else-if=\"!loading && !showTimesheet && !showAddForm && !showGuestForm\" class=\"no-results\">\n {{ crew.length === 0 ? 'No crew members found.' : 'No crew members found matching your search criteria.' }}\n </div>\n\n <!-- Add Crew Form -->\n <div class=\"add-crew-form\" v-if=\"showAddForm\">\n <h2>Add New Crew Member</h2>\n\n <!-- Basic Information -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-name\">Full Name *</label>\n <input type=\"text\" id=\"crew-name\" v-model=\"newCrew.name\" :class=\"{ 'error': formErrors.name }\">\n <div v-if=\"formErrors.name\" class=\"error-message\">{{ formErrors.name }}</div>\n </div>\n <div class=\"form-group\">\n <label for=\"crew-role\">Role/Position *</label>\n <select id=\"crew-role\" v-model=\"newCrew.role\">\n <option v-for=\"role in availableRoles\" :key=\"role\" :value=\"role\">\n {{ role }}\n </option>\n <option value=\"Other\">Other</option>\n </select>\n <input v-if=\"newCrew.role === 'Other'\" type=\"text\" placeholder=\"Enter custom role\"\n v-model=\"newCrew.customRole\" style=\"margin-top: 8px;\">\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-email\">Email Address *</label>\n <input type=\"email\" id=\"crew-email\" v-model=\"newCrew.email\" :class=\"{ 'error': formErrors.email }\">\n <div v-if=\"formErrors.email\" class=\"error-message\">{{ formErrors.email }}</div>\n </div>\n </div>\n\n <!-- Certifications Section \n <div class=\"certification-section\">\n <h3>Certifications</h3>\n <div v-for=\"(cert, index) in newCrew.certifications\" :key=\"index\" class=\"certification-entry\">\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Certification Name *</label>\n <input type=\"text\" v-model=\"cert.name\" placeholder=\"Enter certification name\">\n </div>\n <div class=\"form-group\">\n <label>Expiry Date *</label>\n <input type=\"date\" v-model=\"cert.expiryDate\">\n </div>\n <div class=\"form-group\">\n <label>Certificate Image *</label>\n <div class=\"image-upload-wrapper\">\n <input type=\"file\" :id=\"'cert-image-' + index\"\n @change=\"handleCertImageUpload($event, index)\" accept=\"image/*,.pdf\"\n class=\"file-input\">\n <label :for=\"'cert-image-' + index\" class=\"file-input-label\">\n <i class=\"bi bi-cloud-upload\"></i>\n {{ cert.imagePreview ? 'Change File' : 'Upload File' }}\n </label>\n <div v-if=\"cert.imagePreview\" class=\"image-preview\">\n <img v-if=\"cert.imageType !== 'pdf'\" :src=\"cert.imagePreview\"\n alt=\"Certificate preview\">\n <div v-else class=\"pdf-preview\">\n <i class=\"bi bi-file-pdf\"></i>\n <span>{{ cert.imageName }}</span>\n </div>\n <button type=\"button\" class=\"btn-remove-image\" @click=\"removeCertImage(index)\">\n <i class=\"bi bi-x-circle\"></i>\n </button>\n </div>\n <small v-if=\"cert.imageName\" class=\"file-name\">{{ cert.imageName }}</small>\n </div>\n </div>\n <div class=\"form-group\" style=\"display: flex; align-items: flex-end;\">\n <button type=\"button\" class=\"btn btn-danger btn-sm\" @click=\"removeCertification(index)\"\n v-if=\"newCrew.certifications.length > 1\">\n Remove\n </button>\n </div>\n </div>\n </div>\n\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" @click=\"addCertificationEntry\">\n + Add More Certification\n </button>\n </div>\n -->\n\n <!-- Notes -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-notes\">Notes</label>\n <textarea id=\"crew-notes\" rows=\"3\" v-model=\"newCrew.notes\"></textarea>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleCancelForm\">Cancel</button>\n <button class=\"btn btn-primary\" @click=\"handleAddCrewMember\">Add Crew Member</button>\n </div>\n </div>\n\n <!-- Guest Check-in Form -->\n <div class=\"add-crew-form\" v-if=\"showGuestForm\">\n <h2>Check-in Guest</h2>\n\n <!-- Basic Information -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-name\">Full Name *</label>\n <input type=\"text\" id=\"guest-name\" v-model=\"newGuest.name\"\n :class=\"{ 'error': guestFormErrors.name }\">\n <div v-if=\"guestFormErrors.name\" class=\"error-message\">{{ guestFormErrors.name }}</div>\n </div>\n <div class=\"form-group\">\n <label for=\"guest-email\">Email Address</label>\n <input type=\"email\" id=\"guest-email\" v-model=\"newGuest.email\">\n </div>\n </div>\n\n <!-- Vessel Selection - Only show when not on a specific vessel page -->\n <div class=\"form-row\" v-if=\"!vesselName\">\n <div class=\"form-group\">\n <label for=\"guest-vessel\">Vessel *</label>\n <select id=\"guest-vessel\" v-model=\"newGuest.vessel\" :class=\"{ 'error': guestFormErrors.vessel }\">\n <option value=\"\">Select a vessel</option>\n <option v-for=\"vessel in availableVessels\" :key=\"vessel\" :value=\"vessel\">\n {{ vessel }}\n </option>\n </select>\n <div v-if=\"guestFormErrors.vessel\" class=\"error-message\">{{ guestFormErrors.vessel }}</div>\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-arrival\">Arrival Date *</label>\n <input type=\"date\" id=\"guest-arrival\" v-model=\"newGuest.arrivalDate\"\n :class=\"{ 'error': guestFormErrors.arrivalDate }\">\n <div v-if=\"guestFormErrors.arrivalDate\" class=\"error-message\">{{ guestFormErrors.arrivalDate }}\n </div>\n </div>\n <div class=\"form-group\">\n <label for=\"guest-expected-days\">Expected Days Onboard *</label>\n <input type=\"number\" id=\"guest-expected-days\" v-model=\"newGuest.expectedDays\" min=\"1\"\n :class=\"{ 'error': guestFormErrors.expectedDays }\">\n <div v-if=\"guestFormErrors.expectedDays\" class=\"error-message\">{{ guestFormErrors.expectedDays }}\n </div>\n </div>\n </div>\n\n <!-- Notes -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-notes\">Notes</label>\n <textarea id=\"guest-notes\" rows=\"3\" v-model=\"newGuest.notes\"\n placeholder=\"Purpose of visit, company affiliation, etc.\"></textarea>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleCancelGuestForm\">Cancel</button>\n <button class=\"btn btn-primary\" @click=\"handleCheckinGuest\">Check-in Guest</button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'CrewManagement',\n\n props: {\n crew: {\n type: Array,\n required: true,\n default: () => []\n },\n vesselName: {\n type: String,\n default: ''\n },\n currentCompanyId: {\n type: String,\n required: true,\n default: ''\n },\n userProfile: {\n type: Object,\n default: () => ({ role: 'viewer' })\n },\n loading: {\n type: Boolean,\n default: false\n },\n availableRoles: {\n type: Array,\n default: () => ['Captain', 'First Officer', 'Engineer', 'Deckhand', 'Mechanic', 'Cook']\n },\n config: {\n type: Object,\n default: () => ({\n showWaveBackground: true,\n enableAdd: true,\n enableEdit: true,\n enableDelete: true,\n enableAssignShift: true,\n enableCertificationManagement: true\n })\n }\n },\n\n emits: [\n 'crew-add',\n 'crew-edit',\n 'crew-delete',\n 'view-pending-certifications',\n 'crew-assign-shift',\n 'crew-deboard',\n 'crew-checkin',\n 'crew-add-certification',\n 'crew-view-certification',\n 'search-changed',\n 'filter-changed',\n 'access-denied',\n 'upload-cert-image',\n 'guest-checkin',\n 'guest-checkout'\n ],\n\n data() {\n return {\n searchQuery: '',\n filterStatus: 'all',\n showAddForm: false,\n showGuestForm: false,\n formErrors: {},\n guestFormErrors: {},\n expandedLogs: [],\n showTimesheet: false,\n timesheetFilter: 'all',\n timesheetSearch: '',\n timesheetSortKey: 'timestamp',\n timesheetSortOrder: 'desc',\n newCrew: {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'available',\n nextShift: '',\n certifications: [{\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n }],\n notes: '',\n email: '',\n onBoard: ''\n },\n newGuest: {\n name: '',\n email: '',\n vessel: '',\n arrivalDate: '',\n expectedDays: '',\n notes: ''\n }\n }\n },\n\n computed: {\n sectionTitle() {\n return this.vesselName ? `Current Crew for ${this.vesselName}` : 'All Fleet Crew'\n },\n\n getApprovedCertifications() {\n return (member) => {\n if (!member.certifications || member.certifications.length === 0) {\n return []\n }\n\n return member.certifications.filter(cert => {\n // If no verifications exist, certificate is not approved by anyone\n if (!cert.verifications || cert.verifications.length === 0) {\n return false\n }\n\n // Find verification for current company\n const companyVerification = cert.verifications.find(\n v => v.companyId === this.currentCompanyId\n )\n\n // Only show if approved by this company\n return companyVerification && companyVerification.status === 'approved'\n })\n }\n },\n\n filteredCrew() {\n return this.crew.filter(member => {\n const matchesSearch = this.searchQuery === '' ||\n member.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||\n member.role.toLowerCase().includes(this.searchQuery.toLowerCase()) ||\n (member.vessel && member.vessel.toLowerCase().includes(this.searchQuery.toLowerCase()))\n\n const matchesStatus = this.filterStatus === 'all' || member.status === this.filterStatus\n\n return matchesSearch && matchesStatus\n })\n },\n\n allTimesheetEntries() {\n const entries = []\n\n this.crew.forEach(member => {\n if (member.log && member.log.length > 0) {\n member.log.forEach((logEntry, index) => {\n entries.push({\n ...logEntry,\n crewName: member.name,\n role: member.role,\n crewId: member.id,\n uniqueId: `${member.id}-${index}`\n })\n })\n }\n })\n\n return entries.sort((a, b) => {\n const dateA = new Date(a.timestamp)\n const dateB = new Date(b.timestamp)\n return this.timesheetSortOrder === 'desc' ? dateB - dateA : dateA - dateB\n })\n },\n\n filteredTimesheetEntries() {\n let filtered = this.allTimesheetEntries\n\n if (this.timesheetFilter !== 'all') {\n filtered = filtered.filter(entry => entry.action === this.timesheetFilter)\n }\n\n if (this.timesheetSearch) {\n const search = this.timesheetSearch.toLowerCase()\n filtered = filtered.filter(entry =>\n entry.crewName.toLowerCase().includes(search) ||\n entry.role.toLowerCase().includes(search) ||\n entry.action.toLowerCase().includes(search) ||\n (entry.vessel && entry.vessel.toLowerCase().includes(search)) ||\n (entry.notes && entry.notes.toLowerCase().includes(search))\n )\n }\n\n return this.sortTimesheetEntries(filtered)\n },\n\n uniqueCrewCount() {\n const uniqueCrewIds = new Set(this.filteredTimesheetEntries.map(e => e.crewId))\n return uniqueCrewIds.size\n },\n\n timesheetDateRange() {\n if (this.filteredTimesheetEntries.length === 0) return 'N/A'\n\n const dates = this.filteredTimesheetEntries.map(e => new Date(e.timestamp))\n const minDate = new Date(Math.min(...dates))\n const maxDate = new Date(Math.max(...dates))\n\n const formatDate = (date) => date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n\n return `${formatDate(minDate)} - ${formatDate(maxDate)}`\n },\n\n canAddCrew() {\n return this.config.enableAdd && this.hasPermission('add')\n },\n\n canEditCrew() {\n return this.config.enableEdit && this.hasPermission('edit')\n },\n\n canDeleteCrew() {\n return this.config.enableDelete && this.hasPermission('delete')\n },\n\n canAssignShift() {\n return this.config.enableAssignShift && this.hasPermission('assign')\n },\n\n canDeboardCrew() {\n return this.config.enableAssignShift && this.hasPermission('assign')\n },\n\n // Current date for display\n currentDate() {\n return new Date().toLocaleDateString('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n })\n },\n\n // Total personnel onboard\n totalOnboard() {\n return this.crew.filter(member => member.status === 'onboard').length\n },\n\n // Crew members onboard (excluding guests)\n crewOnboard() {\n return this.crew.filter(member =>\n member.status === 'onboard' && member.role !== 'guest'\n ).length\n },\n\n // Guests onboard\n guestsOnboard() {\n return this.crew.filter(member =>\n member.status === 'onboard' && member.role === 'guest'\n ).length\n },\n\n // Personnel breakdown by vessel\n personnelByVessel() {\n const breakdown = {}\n\n this.crew.forEach(member => {\n if (member.status === 'onboard' && member.vessel) {\n if (!breakdown[member.vessel]) {\n breakdown[member.vessel] = {\n crew: 0,\n guests: 0,\n total: 0\n }\n }\n\n if (member.role === 'guest') {\n breakdown[member.vessel].guests++\n } else {\n breakdown[member.vessel].crew++\n }\n breakdown[member.vessel].total++\n }\n })\n\n return breakdown\n },\n\n // Get unique vessels from crew data for vessel selector\n availableVessels() {\n const vessels = new Set()\n this.crew.forEach(member => {\n if (member.vessel && member.vessel.trim() !== '') {\n vessels.add(member.vessel)\n }\n })\n return Array.from(vessels).sort()\n }\n },\n\n methods: {\n hasPermission(action) {\n const { role, vessel } = this.userProfile\n const isVessel = vessel === this.vesselName\n\n const permissions = {\n 'owner': ['add', 'edit', 'delete', 'assign', 'view'],\n 'staff': ['add', 'edit', 'assign', 'view'],\n 'captain': ['assign', 'view'],\n 'viewer': ['view']\n }\n\n let rolePermissions = permissions[role] || []\n\n if (role === 'captain' && isVessel) {\n rolePermissions = [...rolePermissions, 'add']\n }\n\n return rolePermissions.includes(action)\n },\n\n /**\n * Get embarkation date based on crew member status\n * Returns N/A if status is not onboard, onduty, or assigned\n * @param {Object} member - The crew member\n * @returns {String} - Embarkation date or 'N/A'\n */\n getEmbarkationDate(member) {\n const validStatuses = ['onboard', 'onduty', 'assigned']\n if (!validStatuses.includes(member.status)) {\n return 'N/A'\n }\n return member.nextShift || 'Not Scheduled'\n },\n\n /**\n * Calculate days onboard from logs\n * Finds the most recent \"Onboard\" action and counts days from that timestamp\n * @param {Object} member - The crew member\n * @returns {String|Number} - Days onboard or 'N/A'\n */\n getDaysOnboard(member) {\n // Only calculate if member is currently onboard\n if (member.status !== 'onboard') {\n return 'N/A'\n }\n\n // Check if logs exist\n if (!member.log || member.log.length === 0) {\n return 'N/A'\n }\n\n // Find the most recent \"Onboard\" action\n // Logs are typically sorted by timestamp, but we'll search from the end to be safe\n let mostRecentOnboard = null\n\n for (let i = member.log.length - 1; i >= 0; i--) {\n if (member.log[i].action === 'Onboard') {\n mostRecentOnboard = member.log[i]\n break\n }\n }\n\n // If no \"Onboard\" action found, return N/A\n if (!mostRecentOnboard || !mostRecentOnboard.timestamp) {\n return 'N/A'\n }\n\n // Calculate days between onboard timestamp and now\n const onboardDate = new Date(mostRecentOnboard.timestamp)\n const today = new Date()\n const diffTime = Math.abs(today - onboardDate)\n const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24))\n\n return diffDays\n },\n\n /**\n * Calculate days onboard for guests from arrival date\n * @param {Object} member - The guest member\n * @returns {String|Number} - Days onboard or 'N/A'\n */\n getGuestDaysOnboard(member) {\n // Check if arrival date (nextShift) exists\n if (!member.nextShift) {\n return 'N/A'\n }\n\n // Only calculate if guest is currently onboard\n if (member.status !== 'onboard') {\n return 'N/A'\n }\n\n // Calculate days between arrival date and now\n const arrivalDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - arrivalDate)\n const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24))\n\n return diffDays\n },\n\n /**\n * Get count of pending certifications for a member\n * @param {Object} member - The crew member\n * @returns {Number} - Count of pending certifications\n */\n getPendingCertificationsCount(member) {\n if (!member.certifications || member.certifications.length === 0) {\n return 0\n }\n\n return member.certifications.filter(cert => {\n if (!cert.verifications || cert.verifications.length === 0) {\n return true // No verifications = pending\n }\n\n const companyVerification = cert.verifications.find(\n v => v.companyId === this.currentCompanyId\n )\n\n // Pending if: no verification OR verification is pending/rejected\n return !companyVerification ||\n companyVerification.status === 'pending'\n }).length\n },\n\n /**\n * Emit event when user clicks on pending certifications\n * This allows parent component to navigate to verification page\n */\n handleViewPendingCertifications(member) {\n this.$emit('view-pending-certifications', {\n memberId: member.id,\n memberName: member.name,\n companyId: this.currentCompanyId\n })\n },\n\n handleToggleAddForm() {\n if (!this.canAddCrew) {\n this.$emit('access-denied', { action: 'add crew', userProfile: this.userProfile })\n return\n }\n this.showAddForm = !this.showAddForm\n if (!this.showAddForm) {\n this.resetForm()\n }\n },\n\n handleToggleGuestForm() {\n if (!this.canAddCrew) {\n this.$emit('access-denied', { action: 'check-in guest', userProfile: this.userProfile })\n return\n }\n this.showGuestForm = !this.showGuestForm\n if (!this.showGuestForm) {\n this.resetGuestForm()\n }\n },\n\n handleCheckinGuest() {\n if (!this.validateGuestForm()) {\n return\n }\n\n const newGuest = {\n name: this.newGuest.name,\n role: 'guest',\n status: 'onboard',\n nextShift: this.newGuest.arrivalDate, // Store arrival date in nextShift\n onBoard: this.newGuest.expectedDays,\n email: this.newGuest.email || '',\n notes: this.newGuest.notes,\n vessel: this.vesselName || this.newGuest.vessel,\n certifications: []\n }\n\n this.$emit('guest-checkin', newGuest)\n this.resetGuestForm()\n this.showGuestForm = false\n },\n\n handleCheckoutGuest(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'check out guest', userProfile: this.userProfile })\n return\n }\n\n let duration = null\n if (member.nextShift) {\n const arrivalDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - arrivalDate)\n duration = Math.ceil(diffTime / (1000 * 60 * 60 * 24))\n }\n\n this.$emit('guest-checkout', { member, duration })\n },\n\n handleCancelGuestForm() {\n this.showGuestForm = false\n this.resetGuestForm()\n },\n\n resetGuestForm() {\n this.newGuest = {\n name: '',\n email: '',\n vessel: '',\n arrivalDate: '',\n expectedDays: '',\n notes: ''\n }\n this.guestFormErrors = {}\n },\n\n validateGuestForm() {\n this.guestFormErrors = {}\n\n if (!this.newGuest.name || this.newGuest.name.trim() === '') {\n this.guestFormErrors.name = 'Guest name is required'\n }\n\n // Require vessel selection if not on a specific vessel page\n if (!this.vesselName && (!this.newGuest.vessel || this.newGuest.vessel.trim() === '')) {\n this.guestFormErrors.vessel = 'Please select a vessel'\n }\n\n if (!this.newGuest.arrivalDate) {\n this.guestFormErrors.arrivalDate = 'Arrival date is required'\n }\n\n if (!this.newGuest.expectedDays || this.newGuest.expectedDays <= 0) {\n this.guestFormErrors.expectedDays = 'Expected days onboard must be at least 1'\n }\n\n if (Object.keys(this.guestFormErrors).length > 0) {\n this.$emit('validation-error', this.guestFormErrors)\n return false\n }\n\n return true\n },\n\n handleSearch() {\n this.$emit('search-changed', this.searchQuery)\n },\n\n handleFilter() {\n this.$emit('filter-changed', this.filterStatus)\n },\n\n filterTimesheet() {\n // Trigger re-computation of filtered entries\n },\n\n sortTimesheet(key) {\n if (this.timesheetSortKey === key) {\n this.timesheetSortOrder = this.timesheetSortOrder === 'asc' ? 'desc' : 'asc'\n } else {\n this.timesheetSortKey = key\n this.timesheetSortOrder = 'asc'\n }\n },\n\n sortTimesheetEntries(entries) {\n const sorted = [...entries]\n\n sorted.sort((a, b) => {\n let valA, valB\n\n switch (this.timesheetSortKey) {\n case 'timestamp':\n valA = new Date(a.timestamp)\n valB = new Date(b.timestamp)\n break\n case 'crewName':\n valA = a.crewName.toLowerCase()\n valB = b.crewName.toLowerCase()\n break\n case 'role':\n valA = a.role.toLowerCase()\n valB = b.role.toLowerCase()\n break\n case 'action':\n valA = a.action.toLowerCase()\n valB = b.action.toLowerCase()\n break\n default:\n return 0\n }\n\n if (valA < valB) return this.timesheetSortOrder === 'asc' ? -1 : 1\n if (valA > valB) return this.timesheetSortOrder === 'asc' ? 1 : -1\n return 0\n })\n\n return sorted\n },\n\n getTimesheetRowClass(action) {\n return `timesheet-row-${action.toLowerCase().replace(/\\s+/g, '-')}`\n },\n\n async handleAddCrewMember() {\n if (!this.validateForm()) {\n return\n }\n\n // Check for incomplete certifications\n const hasIncompleteCert = this.newCrew.certifications.some(cert => {\n const hasName = cert.name.trim() !== ''\n const hasDate = cert.expiryDate !== ''\n const hasImage = cert.imageFile !== null\n\n // If any field is filled but not all, it's incomplete\n return (hasName || hasDate || hasImage) && !(hasName && hasDate && hasImage)\n })\n\n if (hasIncompleteCert) {\n this.$emit('incomplete-certification')\n return\n }\n\n // Filter only complete certifications (all three fields filled)\n const validCertifications = this.newCrew.certifications.filter(cert => {\n return cert.name.trim() !== '' && cert.expiryDate !== '' && cert.imageFile !== null\n })\n\n const finalRole = this.newCrew.role === 'Other' ? this.newCrew.customRole : this.newCrew.role\n\n // Upload all certification images first and get their URLs\n const certificationsWithUrls = await Promise.all(\n validCertifications.map(async (cert, index) => {\n // Emit and wait for the upload to complete\n const uploadResult = await this.uploadCertificationImage(cert.imageFile, this.newCrew.email)\n\n return {\n name: cert.name,\n expiryDate: cert.expiryDate,\n imageName: cert.imageName,\n imageType: cert.imageType,\n imageUrl: uploadResult.publicUrl // Add the public URL here\n }\n })\n )\n\n const newMember = {\n name: this.newCrew.name,\n role: finalRole,\n status: 'unavailable',\n certifications: certificationsWithUrls,\n notes: this.newCrew.notes,\n vessel: this.vesselName,\n email: this.newCrew.email,\n onBoard: this.newCrew.onBoard,\n nextShift: this.newCrew.nextShift\n }\n\n this.$emit('crew-add', newMember)\n this.resetForm()\n this.showAddForm = false\n },\n\n // Add this helper method to handle the upload:\n async uploadCertificationImage(file, email) {\n // Return a promise that resolves when upload completes\n return new Promise((resolve, reject) => {\n this.$emit('upload-cert-image', {\n file,\n email,\n callback: (result) => {\n if (result.error) {\n reject(result.error)\n } else {\n resolve(result)\n }\n }\n })\n })\n },\n\n handleCancelForm() {\n this.showAddForm = false\n this.resetForm()\n },\n\n handleDeleteCrew(member) {\n if (!this.canDeleteCrew) {\n this.$emit('access-denied', { action: 'delete crew', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-delete', member)\n },\n\n handleAssignShift(member) {\n if (!this.canAssignShift) {\n this.$emit('access-denied', { action: 'assign shift', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-assign-shift', member)\n },\n\n handleDeboardCrew(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'deboard crew', userProfile: this.userProfile })\n return\n }\n\n let duration = null\n if (member.nextShift) {\n const embarkDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - embarkDate)\n duration = Math.ceil(diffTime / (1000 * 60 * 60 * 24))\n }\n\n this.$emit('crew-deboard', { member, duration })\n },\n\n handleCheckinCrew(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'check in crew', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-checkin', member)\n },\n\n toggleCrewLog(memberId) {\n const index = this.expandedLogs.indexOf(memberId)\n if (index > -1) {\n this.expandedLogs.splice(index, 1)\n } else {\n this.expandedLogs.push(memberId)\n }\n },\n\n handleAddCertification(member) {\n if (!this.canEditCrew) {\n this.$emit('access-denied', { action: 'add certification', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-add-certification', member)\n },\n\n handleViewCertification(certification, member) {\n this.$emit('crew-view-certification', { certification, member })\n },\n\n resetForm() {\n this.newCrew = {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'Unavailable',\n nextShift: '',\n certifications: [{\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n }],\n notes: '',\n email: '',\n onBoard: ''\n }\n this.formErrors = {}\n },\n\n validateForm() {\n this.formErrors = {}\n\n const requiredFields = {\n name: 'Full Name',\n email: 'Email Address'\n }\n\n Object.keys(requiredFields).forEach(field => {\n if (!this.newCrew[field] || this.newCrew[field].trim() === '') {\n this.formErrors[field] = `${requiredFields[field]} is required`\n }\n })\n\n if (this.newCrew.email && !this.isValidEmail(this.newCrew.email)) {\n this.formErrors.email = 'Please enter a valid email address'\n }\n\n if (this.newCrew.role === 'Other' && (!this.newCrew.customRole || this.newCrew.customRole.trim() === '')) {\n this.formErrors.customRole = 'Custom role is required when \"Other\" is selected'\n }\n\n // Emit validation errors if any exist\n if (Object.keys(this.formErrors).length > 0) {\n this.$emit('validation-error', this.formErrors)\n return false\n }\n\n return true\n },\n\n isValidEmail(email) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n },\n\n addCertificationEntry() {\n this.newCrew.certifications.push({\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n })\n },\n\n removeCertification(index) {\n this.newCrew.certifications.splice(index, 1)\n },\n\n handleCertImageUpload(event, index) {\n const file = event.target.files[0]\n if (!file) return\n\n const cert = this.newCrew.certifications[index]\n cert.imageFile = file\n cert.imageName = file.name\n cert.imageType = file.type.includes('pdf') ? 'pdf' : 'image'\n\n // Create preview for images\n if (cert.imageType === 'image') {\n const reader = new FileReader()\n reader.onload = (e) => {\n cert.imagePreview = e.target.result\n }\n reader.readAsDataURL(file)\n } else {\n cert.imagePreview = 'pdf'\n }\n },\n\n removeCertImage(index) {\n const cert = this.newCrew.certifications[index]\n cert.imageFile = null\n cert.imagePreview = null\n cert.imageName = ''\n cert.imageType = ''\n\n // Clear the file input\n const fileInput = document.getElementById('cert-image-' + index)\n if (fileInput) {\n fileInput.value = ''\n }\n },\n\n formatStatus(status) {\n return status ? status.charAt(0).toUpperCase() + status.slice(1) : ''\n },\n\n getStatusClass(status) {\n const statusMap = {\n 'available': 'status-available',\n 'onduty': 'status-onduty',\n 'onboard': 'status-onboard',\n 'unavailable': 'status-unavailable',\n 'assigned': 'status-assigned'\n }\n return statusMap[status] || ''\n },\n\n getCertificationClass(expiryDate) {\n const status = this.getExpiryStatus(expiryDate)\n const classMap = {\n 'expired': 'text-danger',\n 'expiringSoon': 'text-warning',\n 'valid': 'text-success'\n }\n return classMap[status] || ''\n },\n\n getExpiryStatus(dateStr) {\n if (!dateStr) return 'none'\n\n const expiry = new Date(dateStr)\n const today = new Date()\n const oneMonthFromNow = new Date()\n oneMonthFromNow.setMonth(today.getMonth() + 1)\n\n if (expiry <= today) return 'expired'\n if (expiry <= oneMonthFromNow) return 'expiringSoon'\n return 'valid'\n },\n\n formatLogDate(timestamp) {\n if (!timestamp) return ''\n const date = new Date(timestamp)\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n })\n },\n\n getLogActionClass(action) {\n const actionMap = {\n 'Embarked': 'log-action-embark',\n 'Deboarded': 'log-action-deboard',\n 'Assigned': 'log-action-assign',\n 'Status Changed': 'log-action-status'\n }\n return actionMap[action] || ''\n },\n\n getLogIcon(action) {\n const iconMap = {\n 'Embarked': 'bi bi-box-arrow-in-right',\n 'Deboarded': 'bi bi-box-arrow-left',\n 'Assigned': 'bi bi-calendar-check',\n 'Status Changed': 'bi bi-arrow-repeat'\n }\n return iconMap[action] || 'bi bi-circle-fill'\n }\n }\n}\n</script>\n\n<style>\n.add-crew-form h2 {\n color: #005792;\n}\n\n.crew-section {\n margin-bottom: 30px;\n}\n\n/* Personnel Summary Styles */\n.personnel-summary {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 25px;\n color: white;\n box-shadow: 0 4px 12px rgba(0, 87, 146, 0.2);\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 15px;\n border-bottom: 2px solid rgba(255, 255, 255, 0.3);\n}\n\n.summary-header h3 {\n margin: 0;\n font-size: 1.4em;\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.summary-date {\n font-size: 0.9em;\n opacity: 0.9;\n}\n\n.summary-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin-bottom: 25px;\n}\n\n.summary-card {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n backdrop-filter: blur(10px);\n border-radius: 8px;\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 15px;\n transition: transform 0.2s, background 0.2s;\n}\n\n.summary-card:hover {\n transform: translateY(-3px);\n background: rgba(255, 255, 255, 0.2);\n}\n\n.card-icon {\n font-size: 2.5em;\n opacity: 0.9;\n}\n\n.card-content {\n flex: 1;\n}\n\n.card-value {\n font-size: 2.5em;\n font-weight: bold;\n line-height: 1;\n margin-bottom: 5px;\n}\n\n.card-label {\n font-size: 0.9em;\n opacity: 0.9;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.total-card {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n}\n\n.vessel-breakdown {\n margin-top: 20px;\n}\n\n.vessel-breakdown h4 {\n margin: 0 0 15px 0;\n font-size: 1.1em;\n opacity: 0.95;\n}\n\n.vessel-cards {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 12px;\n}\n\n.vessel-card {\n background: rgba(255, 255, 255, 0.15);\n backdrop-filter: blur(10px);\n border-radius: 6px;\n padding: 15px;\n border-left: 4px solid rgba(255, 255, 255, 0.5);\n}\n\n.vessel-name {\n font-weight: bold;\n font-size: 1.1em;\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n}\n\n.vessel-stats {\n display: flex;\n justify-content: space-between;\n gap: 10px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 3px;\n}\n\n.stat-label {\n font-size: 0.8em;\n opacity: 0.8;\n}\n\n.stat-value {\n font-size: 1.5em;\n font-weight: bold;\n}\n\n.total-stat {\n border-left: 1px solid rgba(255, 255, 255, 0.3);\n padding-left: 10px;\n}\n\n.total-stat .stat-value {\n color: #ffd700;\n}\n\n\n.crew-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n align-items: start;\n}\n\n.crew-card {\n background-color: #f8f9fa;\n border-radius: 6px;\n padding: 15px;\n box-shadow: 0 1px 5px rgba(0, 0, 0, 0.08);\n border-left: 4px solid #00a8e8;\n position: relative;\n}\n\n.crew-card.unavailable {\n border-left-color: #dc3545;\n opacity: 0.8;\n}\n\n.crew-name {\n font-weight: bold;\n font-size: 1.1em;\n margin-bottom: 5px;\n color: #005792;\n}\n\n.crew-role {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 10px;\n}\n\n.crew-certifications,\n.crew-availability {\n font-size: 0.85em;\n margin: 5px 0;\n}\n\n.certification-tag {\n display: inline-block;\n background-color: #e6f7ff;\n color: #005792;\n border-radius: 4px;\n padding: 2px 8px;\n margin-right: 5px;\n margin-bottom: 5px;\n font-size: 0.85em;\n cursor: pointer;\n}\n\n.certification-tag:hover {\n background-color: #d1f0ff;\n}\n\n.crew-status-badge {\n position: absolute;\n top: 15px;\n right: 15px;\n font-size: 0.75em;\n padding: 3px 8px;\n border-radius: 12px;\n font-weight: bold;\n}\n\n.status-available {\n background-color: #d4edda;\n color: #155724;\n}\n\n.status-unavailable {\n background-color: #f8d7da;\n color: #721c24;\n}\n\n.status-assigned {\n background-color: #ffc107;\n color: #212529;\n}\n\n.status-onduty {\n background-color: #cce5ff;\n color: #004085;\n}\n\n.status-onboard {\n background-color: #d1ecf1;\n color: #0c5460;\n}\n\n.action-buttons {\n display: flex;\n justify-content: space-between;\n margin-top: 15px;\n gap: 5px;\n flex-wrap: wrap;\n}\n\n.btn {\n padding: 6px 12px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.9em;\n transition: background-color 0.2s;\n border: none;\n}\n\n.btn-primary {\n background-color: #005792;\n color: white;\n}\n\n.btn-primary:hover {\n background-color: #004675;\n}\n\n.btn-secondary {\n background-color: #e9ecef;\n color: #495057;\n}\n\n.btn-secondary:hover {\n background-color: #dde2e6;\n}\n\n.btn-warning {\n background-color: #ffc107;\n color: #212529;\n}\n\n.btn-warning:hover {\n background-color: #e0a800;\n}\n\n.btn-success {\n background-color: #28a745;\n color: white;\n}\n\n.btn-success:hover {\n background-color: #218838;\n}\n\n.btn-danger {\n background-color: #dc3545;\n color: white;\n}\n\n.btn-danger:hover {\n background-color: #c82333;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: #005792;\n text-decoration: none;\n padding: 4px 8px;\n}\n\n.btn-link:hover {\n text-decoration: underline;\n}\n\n.btn-sm {\n font-size: 0.8em;\n padding: 4px 8px;\n}\n\n.crew-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid #e9ecef;\n}\n\n.crew-log-toggle {\n flex: 1;\n}\n\n.log-toggle-btn {\n text-align: left;\n padding: 0;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.crew-log {\n margin-top: 15px;\n padding: 10px;\n background-color: #ffffff;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.crew-log h4 {\n margin: 0 0 10px 0;\n font-size: 0.9em;\n color: #005792;\n border-bottom: 1px solid #dee2e6;\n padding-bottom: 5px;\n}\n\n.log-entry {\n padding: 8px;\n margin-bottom: 8px;\n border-left: 3px solid #005792;\n background-color: #f8f9fa;\n border-radius: 3px;\n}\n\n.log-entry:last-child {\n margin-bottom: 0;\n}\n\n.log-date {\n font-size: 0.75em;\n color: #6c757d;\n margin-bottom: 3px;\n}\n\n.log-action {\n font-weight: bold;\n font-size: 0.85em;\n margin-bottom: 3px;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.log-action-embark {\n color: #28a745;\n}\n\n.log-action-deboard {\n color: #dc3545;\n}\n\n.log-action-assign {\n color: #007bff;\n}\n\n.log-action-status {\n color: #ffc107;\n}\n\n.log-details {\n font-size: 0.8em;\n color: #495057;\n}\n\n.log-notes {\n font-size: 0.8em;\n color: #6c757d;\n font-style: italic;\n margin-top: 3px;\n}\n\n.search-filter {\n display: flex;\n margin-bottom: 20px;\n gap: 10px;\n align-items: center;\n}\n\n.search-filter input,\n.search-filter select {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n}\n\n.search-filter input {\n flex-grow: 1;\n}\n\n.search-filter select {\n min-width: 150px;\n}\n\n.add-crew-form {\n background-color: #f8f9fa;\n padding: 20px;\n border-radius: 6px;\n margin-top: 30px;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin-bottom: 15px;\n}\n\n.form-group {\n flex: 1;\n min-width: 200px;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n color: #495057;\n}\n\n.text-danger {\n color: red;\n font-weight: bolder;\n}\n\n.text-warning {\n color: orange;\n font-weight: bolder;\n}\n\n.text-success {\n color: green;\n font-weight: bolder;\n}\n\n.icon {\n font-size: 20px;\n cursor: pointer;\n color: #005792;\n}\n\n.icon:hover {\n color: #003d5c;\n}\n\n.delete-icon {\n font-size: 20px;\n cursor: pointer;\n color: #dc3545;\n position: static;\n margin: 0;\n}\n\n.delete-icon:hover {\n color: #c82333;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n width: 100%;\n padding: 8px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n}\n\n.form-group input.error {\n border-color: #dc3545;\n}\n\n.error-message {\n color: #dc3545;\n font-size: 0.85em;\n margin-top: 5px;\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 20px;\n}\n\n.no-results {\n text-align: center;\n padding: 40px 20px;\n color: #6c757d;\n font-size: 1.1em;\n}\n\n.crew-section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 15px;\n}\n\n.crew-section-header h2 {\n color: #005792;\n margin: 0;\n}\n\n.header-actions {\n display: flex;\n gap: 10px;\n}\n\n.guest-card {\n border-left-color: #ffc107 !important;\n background: linear-gradient(135deg, #f8f9fa 0%, #e3f2fd 100%);\n}\n\n.guest-card .crew-role {\n color: #17a2b8;\n font-weight: 600;\n text-transform: uppercase;\n font-size: 0.85em;\n}\n\n.vcard {\n border-radius: 6px;\n padding: 5px;\n}\n\n.loading-state {\n text-align: center;\n padding: 40px 20px;\n}\n\n.spinner-border {\n width: 3rem;\n height: 3rem;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n display: inline-block;\n animation: spinner-border 0.75s linear infinite;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.text-primary {\n color: #005792;\n}\n\n.visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.certification-section {\n margin: 20px 0;\n padding: 15px;\n background-color: #ffffff;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n}\n\n.certification-section h3 {\n color: #005792;\n margin-top: 0;\n margin-bottom: 15px;\n font-size: 1.1em;\n}\n\n.certification-entry {\n margin-bottom: 10px;\n}\n\n/* Image Upload Styles */\n.image-upload-wrapper {\n position: relative;\n}\n\n.file-input {\n display: none;\n}\n\n.file-input-label {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background-color: #005792;\n color: white !important;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.9em;\n transition: background-color 0.2s;\n}\n\n.file-input-label:hover {\n background-color: #004675;\n}\n\n.file-input-label i {\n font-size: 1.1em;\n}\n\n.file-name {\n display: block;\n margin-top: 5px;\n color: #6c757d;\n font-size: 0.85em;\n}\n\n.image-preview {\n margin-top: 10px;\n position: relative;\n display: inline-block;\n}\n\n.image-preview img {\n max-width: 200px;\n max-height: 150px;\n border-radius: 4px;\n border: 2px solid #dee2e6;\n}\n\n.pdf-preview {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 15px;\n background-color: #f8f9fa;\n border: 2px solid #dee2e6;\n border-radius: 4px;\n max-width: 200px;\n}\n\n.pdf-preview i {\n font-size: 2em;\n color: #dc3545;\n}\n\n.pdf-preview span {\n font-size: 0.85em;\n color: #495057;\n word-break: break-word;\n}\n\n.btn-remove-image {\n position: absolute;\n top: -8px;\n right: -8px;\n background-color: #dc3545;\n color: white;\n border: none;\n border-radius: 50%;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 0;\n transition: background-color 0.2s;\n}\n\n.btn-remove-image:hover {\n background-color: #c82333;\n}\n\n.btn-remove-image i {\n font-size: 1em;\n}\n\n/* Timesheet Styles */\n.timesheet-view {\n background-color: #ffffff;\n border-radius: 6px;\n padding: 20px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.timesheet-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 15px;\n border-bottom: 2px solid #005792;\n}\n\n.timesheet-header h3 {\n color: #005792;\n margin: 0;\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.timesheet-controls {\n display: flex;\n gap: 10px;\n}\n\n.timesheet-controls select,\n.timesheet-search {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-size: 0.9em;\n}\n\n.timesheet-search {\n min-width: 250px;\n}\n\n.timesheet-summary {\n display: flex;\n gap: 20px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.summary-card {\n flex: 1;\n min-width: 150px;\n background-color: #f8f9fa;\n padding: 15px;\n border-radius: 6px;\n border-left: 4px solid #005792;\n}\n\n.summary-label {\n display: block;\n font-size: 0.85em;\n color: #6c757d;\n margin-bottom: 5px;\n}\n\n.summary-value {\n display: block;\n font-size: 1.5em;\n font-weight: bold;\n color: #005792;\n}\n\n.timesheet-table-container {\n overflow-x: auto;\n margin-top: 20px;\n}\n\n.timesheet-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9em;\n}\n\n.timesheet-table thead {\n background-color: #005792;\n color: white;\n}\n\n.timesheet-table th {\n padding: 12px 8px;\n text-align: left;\n font-weight: bold;\n cursor: pointer;\n user-select: none;\n}\n\n.timesheet-table th:hover {\n background-color: #004675;\n}\n\n.timesheet-table th i {\n font-size: 0.8em;\n margin-left: 5px;\n}\n\n.timesheet-table tbody tr {\n border-bottom: 1px solid #dee2e6;\n}\n\n.timesheet-table tbody tr:hover {\n background-color: #f8f9fa;\n}\n\n.timesheet-table td {\n padding: 10px 8px;\n}\n\n.timestamp-cell {\n white-space: nowrap;\n color: #495057;\n font-size: 0.85em;\n}\n\n.crew-name-cell strong {\n color: #005792;\n}\n\n.role-cell {\n color: #6c757d;\n}\n\n.action-cell {\n white-space: nowrap;\n}\n\n.action-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 0.85em;\n font-weight: bold;\n}\n\n.vessel-cell {\n color: #495057;\n}\n\n.duration-cell {\n color: #495057;\n font-weight: 500;\n}\n\n.notes-cell {\n color: #6c757d;\n font-style: italic;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.timesheet-row-embarked {\n background-color: #d4edda;\n}\n\n.timesheet-row-deboarded {\n background-color: #f8d7da;\n}\n\n.timesheet-row-assigned {\n background-color: #d1ecf1;\n}\n\n.timesheet-row-status-changed {\n background-color: #fff3cd;\n}\n\n@media (max-width: 768px) {\n .crew-grid {\n grid-template-columns: 1fr;\n }\n\n .search-filter {\n flex-direction: column;\n }\n\n .search-filter input,\n .search-filter select {\n width: 100%;\n }\n\n .timesheet-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 15px;\n }\n\n .timesheet-controls {\n flex-direction: column;\n width: 100%;\n }\n\n .timesheet-controls select,\n .timesheet-search {\n width: 100%;\n }\n\n .timesheet-summary {\n flex-direction: column;\n }\n\n .timesheet-table {\n font-size: 0.8em;\n }\n\n .timesheet-table th,\n .timesheet-table td {\n padding: 8px 4px;\n }\n}\n\n.crew-subhead {\n color: #000;\n}</style>","<template>\n <div class=\"s-container container\">\n <div class=\"header\">\n <h1>OceanHelm Requisition System</h1>\n <p>Streamlined Material Request & Ordering Process</p>\n </div>\n\n <!-- Navigation Tabs -->\n <div class=\"nav-tabs\">\n <button v-for=\"tab in visibleTabs\" :key=\"tab.name\" :class=\"['nav-tab', { active: activeTab === tab.name }]\"\n @click=\"setActiveTab(tab.name)\">\n {{ tab.label }}\n </button>\n </div>\n\n <!-- New Requisition Tab -->\n <div v-if=\"activeTab === 'new-requisition'\" class=\"tab-content active\">\n <form @submit.prevent=\"handleSubmitRequisition\">\n <div class=\"form-grid\">\n <div class=\"form-group\">\n <label>Requestor Name *</label>\n <input type=\"text\" :value=\"userProfile?.full_name\" readonly required class=\"form-control\" />\n </div>\n <div class=\"form-group\">\n <label>Department *</label>\n <select v-model=\"form.department\" required>\n <option value=\"\">Select Department</option>\n <option v-for=\"dept in departments\" :key=\"dept\" :value=\"dept\">{{ dept }}</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Vessel *</label>\n <select v-model=\"form.project\" class=\"form-control\" required>\n <option disabled value=\"\">Select a vessel</option>\n <option v-for=\"v in vessels\" :key=\"v.id\" :value=\"v.name\">\n {{ v.name }}\n </option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Date Needed *</label>\n <input type=\"date\" v-model=\"form.neededDate\" :min=\"today\" required />\n </div>\n </div>\n\n <div class=\"form-group\">\n <label>Business Justification *</label>\n <textarea v-model=\"form.justification\" placeholder=\"Explain why these materials are needed...\"\n required></textarea>\n </div>\n\n <div class=\"items-section\">\n <div class=\"items-header\">\n <h3>Requested Items</h3>\n <button type=\"button\" class=\"add-item-btn\" @click=\"addItem\">+ Add Item</button>\n </div>\n <div>\n <div v-for=\"(item, index) in form.items\" :key=\"index\" class=\"item-row\">\n <div class=\"form-group\">\n <label>Item Code *</label>\n <input type=\"text\" v-model=\"item.id\" required />\n </div>\n <div class=\"form-group\">\n <label>Item Description *</label>\n <input type=\"text\" v-model=\"item.desc\" required />\n </div>\n <div class=\"form-group\">\n <label>Quantity *</label>\n <input type=\"number\" v-model.number=\"item.qty\" min=\"1\" required />\n </div>\n <div class=\"form-group\">\n <label>Unit *</label>\n <select v-model=\"item.unit\" required>\n <option v-for=\"unit in units\" :key=\"unit\" :value=\"unit\">{{ unit }}</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Est. Unit Cost *</label>\n <input type=\"number\" v-model.number=\"item.cost\" step=\"0.01\" min=\"0\" placeholder=\"0.00\" required />\n </div>\n <button type=\"button\" class=\"remove-item-btn\" @click=\"removeItem(index)\">Remove</button>\n </div>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"submit\" class=\"btn btn-primary-req\" :disabled=\"isSubmitting\">\n {{ isSubmitting ? 'Submitting...' : 'Submit Requisition' }}\n </button>\n </div>\n </form>\n </div>\n\n <!-- All Requisitions Tab -->\n <div v-if=\"activeTab === 'all-requisitions'\" class=\"tab-content active\">\n <div class=\"requisition-list\">\n <div v-for=\"req in requisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n <div :class=\"['status-badge', `status-${req.status}`]\">{{ req.status }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in getRequisitionFields(req)\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <div v-if=\"req.status === 'po-created' || req.status === 'delivered'\"\n class=\"form-group comments-section\">\n <button @click=\"handleOpenPO(req.id)\" class=\"add-item-btn comments-section\">\n Print PO\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- My Requisitions Tab -->\n <div v-if=\"activeTab === 'my-requisitions'\" class=\"tab-content active\">\n <div class=\"requisition-list\">\n <div v-for=\"req in myRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n <div :class=\"['status-badge', `status-${req.status}`]\">{{ req.status }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in getRequisitionFields(req)\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <div v-if=\"req.status === 'info-requested'\" class=\"form-group comments-section\">\n <label class=\"detail-label\">Your Response</label>\n <textarea v-model=\"infoResponse\" class=\"response-textarea\"\n placeholder=\"Submit more info...\"></textarea>\n <button @click=\"handleSubmitInfoResponse(req)\" class=\"add-item-btn comments-section\">\n Submit Info\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Pending Approval Tab -->\n <div v-if=\"activeTab === 'approvals'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Department Supervisor Dashboard</h3>\n <div style=\"background: #fef3c7; padding: 15px; border-radius: 10px; border-left: 4px solid #f59e0b;\">\n <strong>Role:</strong> Department Supervisor - Review requests for accuracy, necessity, and budget\n compliance\n </div>\n </div>\n <div class=\"requisition-list\" id=\"approvalsQueue\">\n <div v-for=\"req in reviewRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleApproveRequisition(req.id)\">Approve</button>\n <button type=\"button\" class=\"marginbox btn-reject\"\n @click=\"handleDeclineRequisition(req.id)\">Decline</button>\n <button type=\"button\" class=\"marginbox btn-request\" @click=\"handleInfoRequisition(req.id)\">Request\n Info</button>\n </div>\n </div>\n </div>\n\n <!-- Purchasing Queue Tab -->\n <div v-if=\"activeTab === 'purchasing'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Purchasing Department Dashboard</h3>\n <div style=\"background: #dbeafe; padding: 15px; border-radius: 10px; border-left: 4px solid #3b82f6;\">\n <strong>Role:</strong> Purchasing Team - Convert approved requisitions to Purchase Orders\n </div>\n </div>\n <div class=\"requisition-list\" id=\"purchasingQueue\">\n <div v-for=\"req in poRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleCreatePO(req.id)\">Create PO</button>\n </div>\n </div>\n </div>\n\n <!-- Receiving Tab -->\n <div v-if=\"activeTab === 'receiving'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Receiving & Inventory Dashboard</h3>\n <div style=\"background: #dcfce7; padding: 15px; border-radius: 10px; border-left: 4px solid #10b981;\">\n <strong>Role:</strong> Warehouse Team - Process incoming deliveries and update inventory\n </div>\n </div>\n <div class=\"requisition-list\" id=\"receivingQueue\">\n <div v-for=\"req in awaitingDelivery\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleAcceptDelivery(req.id)\">Accept\n Delivery</button>\n </div>\n </div>\n </div>\n\n <!-- PO Tab -->\n <div v-if=\"activeTab === 'po'\" class=\"tab-content active\">\n <div class=\"po-content\" id=\"po-content\">\n <div class=\"po-header\">\n <div class=\"company-info\">\n <h3>Vendor Information</h3>\n <div class=\"info-row\">\n <span class=\"info-label\">Company:</span>\n <span class=\"info-value\">{{ vendorInfo.company || poDetails.vendorInfo?.company || 'N/A' }} </span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Contact:</span>\n <span class=\"info-value\">{{ vendorInfo.contact || poDetails.vendorInfo?.contact || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Email:</span>\n <span class=\"info-value\">{{ vendorInfo.email || poDetails.vendorInfo?.email || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Phone:</span>\n <span class=\"info-label\">{{ vendorInfo.phone || poDetails.vendorInfo?.phone || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Address:</span>\n <span class=\"info-value\">{{ vendorInfo.address || poDetails.vendorInfo?.address || 'N/A' }}</span>\n </div>\n </div>\n\n <div class=\"company-info\">\n <h3>Purchase Order Details</h3>\n <div class=\"info-row\">\n <span class=\"info-label\">PO Number:</span>\n <span class=\"info-value\">{{ poDetails.id }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Date:</span>\n <span class=\"info-value\">{{ vendorInfo.poDate || poDetails.vendorInfo?.poDate || formatDate(new Date()) }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Requested By:</span>\n <span class=\"info-value\">{{ vendorInfo.poApproved || poDetails.vendorInfo?.poApproved || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Department:</span>\n <span class=\"info-value\">PO-{{ poDetails.department || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Delivery Date:</span>\n <span class=\"info-value\">{{ poDetails.neededDate || 'N/A' }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"items-section\">\n <h2 class=\"section-title\">Order Items</h2>\n <table class=\"items-table\">\n <thead>\n <tr>\n <th>Item #</th>\n <th>Description</th>\n <th>Quantity</th>\n <th>Unit Price</th>\n <th>Total</th>\n <th v-if=\"!isPrinting\">Actions</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(item, index) in poDetails.items || []\" :key=\"index\">\n <td>{{ item.itemNumber || (index + 1) }}</td>\n <td>{{ item.desc }}</td>\n <td>{{ item.qty }}</td>\n <td>\n <span v-if=\"!item.editing\">\n ${{ (item.unitPrice || item.cost || 0).toFixed(2) }}\n <span v-if=\"item.cost !== item.unitPrice && item.unitPrice\" class=\"price-change-indicator\">!</span>\n </span>\n <input v-else v-model.number=\"item.tempPrice\" type=\"number\" step=\"0.01\" min=\"0\"\n class=\"price-input\" :class=\"{ 'price-changed': item.cost !== item.tempPrice }\">\n </td>\n <td>${{ ((item.unitPrice || item.cost || 0) * (item.qty || 0)).toFixed(2) }}</td>\n <td v-if=\"!isPrinting\">\n <button v-if=\"!item.editing\" @click=\"startEdit(index)\" class=\"edit-btn\">\n Edit Price\n </button>\n <div v-else>\n <button @click=\"savePrice(index)\" class=\"save-btn\">Save</button>\n <button @click=\"cancelEdit(index)\" class=\"cancel-btn\">Cancel</button>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div v-for=\"(item, index) in poDetails.items || []\" :key=\"'note-' + index\">\n <div v-if=\"item.justification\" class=\"justification-note\">\n <strong>Price Change Justification (Item {{ item.itemNumber || (index + 1) }}):</strong> {{ item.justification\n }}\n </div>\n </div>\n\n <div class=\"totals\">\n <div class=\"total-row\">\n <span>Subtotal:</span>\n <span>${{ subTotal.toFixed(2) }}</span>\n </div>\n <div class=\"total-row\">\n <span>Tax ({{ vendorInfo.tax || poDetails.vendorInfo?.tax || 0 }}%):</span>\n <span>${{ calculateTax().toFixed(2) }}</span>\n </div>\n <div class=\"total-row\">\n <span>Shipping:</span>\n <span>${{ getOptional(vendorInfo.shipping) }}</span>\n </div>\n <div class=\"total-row grand-total\">\n <span>Grand Total:</span>\n <span>${{ grandTotal.toFixed(2) }}</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Justification Modal -->\n <div v-if=\"showJustificationModal\" class=\"justification-modal\" @click.self=\"closeJustificationModal\">\n <div class=\"modal-content\">\n <h3>Price Change Justification Required</h3>\n <p style=\"margin-bottom: 15px; color: #666;\">\n Please provide a justification for changing the price from\n <strong>${{ currentItem?.cost?.toFixed(2) }}</strong> to\n <strong>${{ currentItem?.tempPrice?.toFixed(2) }}</strong>\n </p>\n <textarea v-model=\"justificationText\" class=\"justification-textarea\"\n placeholder=\"Enter justification for price change...\" required></textarea>\n <div class=\"modal-buttons\">\n <button @click=\"closeJustificationModal\" class=\"cancel-btn\">Cancel</button>\n <button @click=\"confirmPriceChange\" class=\"save-btn\" :disabled=\"!justificationText.trim()\">\n Confirm Change\n </button>\n </div>\n </div>\n </div>\n <button v-if=\"!isPrinting\" type=\"button\" class=\"add-item-btn\" @click=\"handleFinishPO(poDetails.id)\">Approve\n PO</button>\n </div>\n\n <!-- Workflow Guide Tab -->\n <div v-if=\"activeTab === 'workflow'\" class=\"tab-content active\">\n <div class=\"workflow-steps\">\n <div class=\"workflow-step\">\n <div class=\"step-icon completed\">1</div>\n <div class=\"step-title\">Request Submitted</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon active\">2</div>\n <div class=\"step-title\">Department Review</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">3</div>\n <div class=\"step-title\">Management Approval</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">4</div>\n <div class=\"step-title\">Purchase Order Created</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">5</div>\n <div class=\"step-title\">Order Fulfilled</div>\n </div>\n </div>\n\n <div style=\"background: white; padding: 30px; border-radius: 15px; margin-top: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 20px;\">Requisition Workflow Process</h3>\n <div style=\"line-height: 1.8; color: #374151;\">\n <p><strong>Step 1: Request Identification</strong><br>\n Department or individual identifies need for materials, equipment, or services.</p>\n\n <p><strong>Step 2: Requisition Creation</strong><br>\n Complete requisition form with detailed specifications, quantities, and business justification.</p>\n\n <p><strong>Step 3: Department Review</strong><br>\n Department supervisor reviews request for accuracy, necessity, and budget compliance.</p>\n\n <p><strong>Step 4: Management Approval</strong><br>\n Based on cost thresholds, appropriate management level provides approval.</p>\n\n <p><strong>Step 5: Purchase Order Generation</strong><br>\n Purchasing team converts approved requisition into formal Purchase Order (PO).</p>\n\n <p><strong>Step 6: Vendor Processing</strong><br>\n PO sent to vendor, order processed, and delivery scheduled.</p>\n\n <p><strong>Step 7: Receipt & Inventory</strong><br>\n Goods received, inspected, and entered into inventory system.</p>\n </div>\n </div>\n </div>\n </div>\n</template>\n \n<script>\nexport default {\n name: 'RequisitionSystem',\n props: {\n userProfile: {\n type: Object,\n required: true\n },\n userRole: {\n type: String,\n required: true\n },\n requisitions: {\n type: Array,\n default: () => []\n },\n vessels: {\n type: Array,\n default: () => []\n }\n },\n\n emits: [\n 'submit-requisition',\n 'submit-info-response',\n 'approve-requisition',\n 'decline-requisition',\n 'info-requisition',\n 'create-po',\n 'open-po',\n 'finish-po',\n 'accept-delivery'\n ],\n\n data() {\n return {\n activeTab: 'workflow',\n isPrinting: false,\n infoResponse: '',\n isSubmitting: false,\n\n // Tabs with visibility rules\n tabs: [\n { name: 'new-requisition', label: 'New Requisition', roles: ['requisitor'] },\n { name: 'my-requisitions', label: 'My Requisitions', roles: ['requisitor'] },\n { name: 'all-requisitions', label: 'All Requisitions', roles: ['requisitor', 'supervisor', 'captain', 'owner', 'purchaser'] },\n { name: 'approvals', label: 'Pending Approvals', roles: ['owner', 'supervisor'] },\n { name: 'purchasing', label: 'Purchasing Queue', roles: ['purchaser'] },\n { name: 'receiving', label: 'Receiving', roles: ['requisitor'] },\n { name: 'workflow', label: 'Workflow Guide', roles: ['requisitor', 'supervisor', 'owner', 'purchaser', 'captain'] }\n ],\n\n // Form State\n form: {\n requestor: '',\n department: '',\n project: '',\n neededDate: '',\n justification: '',\n items: []\n },\n\n poDetails: {\n editing: false,\n items: []\n },\n vendorInfo: {},\n justificationText: '',\n currentItemIndex: null,\n showJustificationModal: false,\n\n // common fields\n requisitionFields: [\n { label: 'Requestor', value: req => req.requestor },\n { label: 'Department', value: req => req.department },\n { label: 'Project', value: req => req.project || 'N/A' },\n { label: 'Submitted', value: req => req.submittedDate },\n { label: 'Items', value: req => `${req.items?.length || 0} item(s)` }\n ],\n\n // Fields for My Requisitions display\n requisitionFieldsMap: {\n approved: [\n { label: 'Approved By', value: req => req.approvedBy },\n ],\n declined: [\n { label: 'Declined By', value: req => req.declinedBy },\n { label: 'Rejection Reason', value: req => req.rejectionReason },\n ],\n 'info-requested': [\n { label: 'Info Requester', value: req => req.infoRequestedBy },\n { label: 'Requested Info', value: req => req.requestedInfo }\n ]\n },\n\n // Options\n departments: [\n 'Marine Operations', 'Engineering', 'Maintenance',\n 'Safety & Compliance', 'Logistics', 'Administration',\n 'Engine Room'\n ],\n\n priorities: [\n 'Urgent - Same Day',\n 'High - Within 3 Days',\n 'Normal - Within 1 Week',\n 'Low - Within 2 Weeks'\n ],\n\n units: ['Pieces', 'Kilograms', 'Liters', 'Meters', 'Sets', 'Boxes']\n }\n },\n\n computed: {\n today() {\n return new Date().toISOString().split('T')[0];\n },\n\n visibleTabs() {\n return this.tabs.filter(tab => tab.roles.includes(this.userRole));\n },\n\n subTotal() {\n return (this.poDetails.items || []).reduce((sum, item) => {\n const unitPrice = item.unitPrice || item.cost || 0;\n return sum + (unitPrice * (item.qty || 0));\n }, 0);\n },\n\n grandTotal() {\n return this.subTotal + this.calculateTax() + parseFloat(this.getOptional(this.vendorInfo.shipping));\n },\n\n reviewRequisitions() {\n return (this.requisitions || []).filter(r => r.status === 'under-review');\n },\n\n poRequisitions() {\n return (this.requisitions || []).filter(r => r.status === 'approved');\n },\n\n awaitingDelivery() {\n return (this.requisitions || []).filter(r => r.status === 'po-created');\n },\n\n currentItem() {\n return this.currentItemIndex !== null ? this.poDetails.items[this.currentItemIndex] : null;\n },\n\n myRequisitions() {\n const userId = this.userProfile?.id || this.userProfile?.profile_id;\n return (this.requisitions || []).filter(req => req.profile_id == userId);\n }\n },\n\n methods: {\n setActiveTab(tabName) {\n this.activeTab = tabName;\n },\n\n formatDate(dateString) {\n if (!dateString) return 'N/A';\n const date = new Date(dateString);\n return date.toLocaleDateString();\n },\n\n calculateTax() {\n const taxRate = parseFloat(this.vendorInfo.tax || this.poDetails.vendorInfo?.tax || 0);\n return (this.subTotal * taxRate) / 100;\n },\n\n getOptional(value) {\n return typeof value === 'number' ? value.toFixed(2) : (parseFloat(value) || 0).toFixed(2);\n },\n\n getRequisitionFields(req) {\n const statusFields = this.requisitionFieldsMap[req.status] || [];\n return [...(this.requisitionFields || []), ...statusFields];\n },\n\n addItem() {\n this.form.items.push({\n id: '',\n desc: '',\n qty: 1,\n unit: 'Pieces',\n cost: 0\n });\n },\n\n removeItem(index) {\n this.form.items.splice(index, 1);\n },\n\n startEdit(index) {\n this.poDetails.items[index].editing = true;\n this.poDetails.items[index].tempPrice = this.poDetails.items[index].unitPrice || this.poDetails.items[index].cost;\n },\n\n cancelEdit(index) {\n this.poDetails.items[index].editing = false;\n this.poDetails.items[index].tempPrice = this.poDetails.items[index].unitPrice || this.poDetails.items[index].cost;\n },\n\n savePrice(index) {\n const item = this.poDetails.items[index];\n if (item.tempPrice !== item.cost) {\n // Price changed, require justification\n this.currentItemIndex = index;\n this.showJustificationModal = true;\n } else {\n // No change, just save\n item.unitPrice = item.tempPrice;\n item.editing = false;\n }\n },\n\n confirmPriceChange() {\n if (!this.justificationText.trim()) {\n alert('Please provide a justification for the price change.');\n return;\n }\n\n const item = this.poDetails.items[this.currentItemIndex];\n item.unitPrice = item.tempPrice;\n item.cost = item.tempPrice;\n item.justification = this.justificationText.trim();\n item.editing = false;\n\n this.closeJustificationModal();\n },\n\n closeJustificationModal() {\n this.showJustificationModal = false;\n this.currentItemIndex = null;\n this.justificationText = '';\n },\n\n // Event handlers that emit to parent\n handleSubmitRequisition() {\n if (this.form.items.length === 0) {\n alert('Please add at least one item to the requisition.');\n return;\n }\n\n this.isSubmitting = true;\n const requisition = this.collectFormData('under-review');\n this.$emit('submit-requisition', requisition);\n \n setTimeout(() => {\n this.resetForm();\n this.isSubmitting = false;\n }, 1000);\n },\n\n handleSubmitInfoResponse(req) {\n if (!this.infoResponse || this.infoResponse.trim() === '') {\n alert('Please enter a response before submitting.');\n return;\n }\n this.$emit('submit-info-response', { req, response: this.infoResponse });\n this.infoResponse = '';\n },\n\n handleApproveRequisition(id) {\n this.$emit('approve-requisition', id);\n },\n\n handleDeclineRequisition(id) {\n this.$emit('decline-requisition', id);\n },\n\n handleInfoRequisition(id) {\n this.$emit('info-requisition', id);\n },\n\n handleCreatePO(id) {\n this.$emit('create-po', id);\n },\n\n handleOpenPO(id) {\n this.$emit('open-po', id);\n },\n\n handleFinishPO(id) {\n this.$emit('finish-po', id);\n },\n\n handleAcceptDelivery(id) {\n this.$emit('accept-delivery', id);\n },\n\n collectFormData(status) {\n return {\n id: 'REQ-' + Date.now(),\n requestor: this.userProfile?.full_name || 'Unknown',\n department: this.form.department,\n project: this.form.project,\n neededDate: this.form.neededDate,\n justification: this.form.justification,\n items: this.form.items.map(item => ({ ...item })),\n status,\n submittedDate: new Date().toLocaleDateString(),\n profile_id: this.userProfile?.id || this.userProfile?.profile_id\n };\n },\n\n resetForm() {\n this.form = {\n requestor: '',\n department: '',\n project: '',\n neededDate: '',\n justification: '',\n items: []\n };\n // Add initial item row again\n this.addItem();\n },\n\n // Methods for updating PO details from parent\n updatePODetails(details) {\n this.poDetails = { ...details };\n this.getNumber();\n for (let item of this.poDetails.items || []) {\n item.tempPrice = item.cost || 0;\n item.unitPrice = item.unitPrice || item.cost || 0;\n item.subTotal = item.unitPrice * (item.qty || 0);\n }\n },\n\n updateVendorInfo(info) {\n this.vendorInfo = { ...info };\n },\n\n setPrintingMode(isPrinting) {\n this.isPrinting = isPrinting;\n },\n\n getNumber() {\n return (this.poDetails.items || []).map((item, index) => {\n return item.itemNumber = index + 1;\n });\n }\n },\n\n created() {\n // Initialize form with one item row\n this.addItem();\n }\n}\n</script>\n\n<style>\n.s-container {\n max-width: 1200px;\n margin: 0 auto;\n background: rgba(255, 255, 255, 0.95);\n border-radius: 20px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25);\n overflow: hidden;\n backdrop-filter: blur(10px);\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 20px;\n}\n\n.header h1 {\n font-size: 2.5rem;\n margin-bottom: 10px;\n position: relative;\n z-index: 1;\n}\n\n.header p {\n font-size: 1.1rem;\n opacity: 0.9;\n position: relative;\n z-index: 1;\n}\n\n.nav-tabs {\n display: flex;\n background: #f8fafc;\n border-bottom: 2px solid #e2e8f0;\n overflow-x: auto;\n white-space: nowrap;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n}\n\n.nav-tabs::-webkit-scrollbar {\n height: 6px;\n}\n\n.nav-tabs::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 3px;\n}\n\n.nav-tabs::-webkit-scrollbar-track {\n background: transparent;\n}\n\n\n.nav-tab {\n flex: 1;\n padding: 15px 20px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1rem;\n font-weight: 600;\n color: #64748b;\n transition: all 0.3s ease;\n position: relative;\n}\n\n.nav-tab:hover {\n background: #e2e8f0;\n color: #1e40af;\n}\n\n.nav-tab.active {\n color: #1e40af;\n background: white;\n}\n\n.nav-tab.active::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 3px;\n background: #1e40af;\n}\n\n.tab-content {\n display: none;\n padding: 30px;\n animation: fadeIn 0.5s ease-in;\n}\n\n.tab-content.active {\n display: block;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.form-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 25px;\n margin-bottom: 30px;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n}\n\n.form-group label {\n font-weight: 600;\n margin-bottom: 8px;\n color: #374151;\n font-size: 0.95rem;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n padding: 12px 15px;\n border: 2px solid #e5e7eb;\n border-radius: 10px;\n font-size: 1rem;\n transition: all 0.3s ease;\n background: white;\n}\n\n.form-group input:focus,\n.form-group select:focus,\n.form-group textarea:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.form-group textarea {\n min-height: 100px;\n resize: vertical;\n}\n\n.items-section {\n background: #f8fafc;\n border-radius: 15px;\n padding: 25px;\n margin: 25px 0;\n border: 2px solid #e2e8f0;\n}\n\n.items-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n}\n\n.items-header h3 {\n color: #1e40af;\n font-size: 1.3rem;\n}\n\n.add-item-btn {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n border: none;\n padding: 10px 20px;\n border-radius: 8px;\n cursor: pointer;\n font-weight: 600;\n transition: all 0.3s ease;\n box-shadow: 0 4px 15px rgba(16, 185, 129, 0.3);\n}\n\n.add-item-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(16, 185, 129, 0.4);\n}\n\n.item-row {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr auto;\n gap: 15px;\n align-items: end;\n margin-bottom: 15px;\n padding: 15px;\n background: white;\n border-radius: 10px;\n border: 1px solid #e5e7eb;\n transition: all 0.3s ease;\n}\n\n.item-row:hover {\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n}\n\n.marginbox {\n margin: 10px\n}\n\n.item-list {\n list-style: none;\n padding: 0;\n margin: 0.5rem 0;\n}\n\n.item-list li {\n background: #f1f5f9;\n margin-bottom: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: 0.375rem;\n font-size: 0.95rem;\n color: #1e293b;\n display: flex;\n justify-content: space-between;\n align-items: center;\n content: '•';\n color: #3b82f6;\n}\n\n\n.remove-item-btn {\n background: #ef4444;\n color: white;\n border: none;\n padding: 8px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n transition: all 0.3s ease;\n}\n\n.remove-item-btn:hover {\n background: #dc2626;\n transform: scale(1.05);\n}\n\n.approval-actions {\n display: flex;\n gap: 10px;\n margin-top: 15px;\n}\n\n.btn-approve {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-approve:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);\n}\n\n.btn-reject {\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-reject:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);\n}\n\n.btn-request {\n background: linear-gradient(135deg, #ef9a44 0%, #fa920a 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-request:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(240, 162, 52, 0.3);\n}\n\n\n.btn-create-po {\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-create-po:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3);\n}\n\n.btn-mark-delivered {\n background: linear-gradient(135deg, #06b6d4 0%, #0891b2 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-mark-delivered:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(6, 182, 212, 0.3);\n}\n\n.po-info {\n background: #f8fafc;\n padding: 15px;\n border-radius: 8px;\n margin: 10px 0;\n border: 1px solid #e2e8f0;\n}\n\n.po-info h4 {\n color: #1e40af;\n margin-bottom: 10px;\n font-size: 1rem;\n}\n\n.po-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 10px;\n font-size: 0.9rem;\n}\n\n.items-list {\n background: #f8fafc;\n padding: 15px;\n border-radius: 8px;\n margin: 15px 0;\n border: 1px solid #e2e8f0;\n}\n\n.items-list h4 {\n color: #374151;\n margin-bottom: 10px;\n font-size: 1rem;\n}\n\n.item-detail {\n display: flex;\n justify-content: space-between;\n padding: 8px 0;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.item-detail:last-child {\n border-bottom: none;\n}\n\n.comments-section {\n margin-top: 15px;\n}\n\n.comments-section textarea {\n width: 100%;\n min-height: 80px;\n padding: 10px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n font-size: 0.9rem;\n resize: vertical;\n}\n\n.role-badge {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-left: 10px;\n}\n\n.role-supervisor {\n background: #fef3c7;\n color: #92400e;\n}\n\n.role-purchasing {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.role-receiving {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-badge {\n display: inline-block;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 0.85rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-draft {\n background: #fef3c7;\n color: #92400e;\n}\n\n.status-under-review {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.status-approved {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-declined {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-info-requested {\n background: #e8cf12;\n color: #da7212;\n}\n\n.status-po-created {\n background: #e0e7ff;\n color: #4bca38;\n}\n\n.status-pending-supply {\n background: #113fd8;\n color: #4bca38;\n}\n\n.status-delivered {\n background: #f3e8ff;\n color: #7c3aed;\n}\n\n.status-received {\n background: #ecfdf5;\n color: #065f46;\n}\n\n.action-buttons {\n display: flex;\n gap: 15px;\n justify-content: flex-end;\n margin-top: 30px;\n padding-top: 25px;\n border-top: 2px solid #e5e7eb;\n}\n\n.btn-primary-req {\n background: linear-gradient(135deg, #1e40af 0%, #3b82f6 100%);\n color: white;\n box-shadow: 0 4px 15px rgba(30, 64, 175, 0.3);\n padding: 12px 25px;\n border: none;\n border-radius: 10px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.btn-primary-req:hover:not(:disabled) {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(30, 64, 175, 0.4);\n}\n\n.btn-primary-req:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: #6b7280;\n color: white;\n}\n\n.btn-secondary:hover {\n background: #4b5563;\n transform: translateY(-2px);\n}\n\n.requisition-list {\n display: grid;\n gap: 20px;\n}\n\n.requisition-card {\n background: white;\n border-radius: 15px;\n padding: 25px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n border: 1px solid #e5e7eb;\n transition: all 0.3s ease;\n}\n\n.requisition-card:hover {\n transform: translateY(-5px);\n box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);\n}\n\n.requisition-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 15px;\n}\n\n.requisition-id {\n font-size: 1.2rem;\n font-weight: 700;\n color: #1e40af;\n}\n\n.requisition-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin-top: 15px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n}\n\n.detail-label {\n font-size: 0.85rem;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n}\n\n.detail-value {\n font-size: 1rem;\n color: #374151;\n font-weight: 500;\n}\n\n.workflow-steps {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin: 30px 0;\n padding: 20px;\n background: #f8fafc;\n border-radius: 15px;\n border: 2px solid #e2e8f0;\n}\n\n.workflow-step {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n position: relative;\n}\n\n.workflow-step:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 20px;\n right: -50%;\n width: 100%;\n height: 2px;\n background: #e5e7eb;\n z-index: 1;\n}\n\n.step-icon {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: #e5e7eb;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: bold;\n color: #6b7280;\n margin-bottom: 10px;\n position: relative;\n z-index: 2;\n}\n\n.step-icon.active {\n background: #3b82f6;\n color: white;\n}\n\n.step-icon.completed {\n background: #10b981;\n color: white;\n}\n\n.step-title {\n font-size: 0.9rem;\n font-weight: 600;\n color: #374151;\n text-align: center;\n}\n\n@media (max-width: 768px) {\n .form-grid {\n grid-template-columns: 1fr;\n }\n\n .item-row {\n grid-template-columns: 1fr;\n gap: 10px;\n }\n\n .action-buttons {\n flex-direction: column;\n }\n\n .workflow-steps {\n flex-direction: column;\n gap: 20px;\n }\n\n .workflow-step::after {\n display: none;\n }\n}\n\n#content {\n width: 100%;\n min-height: 100vh;\n transition: all 0.3s;\n position: absolute;\n padding: 20px;\n padding-left: 40px;\n}\n\n#content.active {\n margin-left: var(--sidebar-width);\n width: calc(100% - var(--sidebar-width));\n}\n\n.po-content {\n padding: 40px;\n}\n\n.po-header {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 40px;\n margin-bottom: 40px;\n}\n\n.company-info,\n.po-details {\n background: #f8f9fa;\n padding: 25px;\n border-radius: 15px;\n border-left: 5px solid #3498db;\n}\n\n.company-info h3,\n.po-details h3 {\n color: #2c3e50;\n margin-bottom: 15px;\n font-size: 1.3rem;\n}\n\n.info-row {\n margin-bottom: 8px;\n display: flex;\n justify-content: space-between;\n}\n\n.info-label {\n font-weight: 600;\n color: #555;\n}\n\n.info-value {\n color: #2c3e50;\n}\n\n.items-section {\n margin-top: 30px;\n}\n\n.section-title {\n color: #2c3e50;\n font-size: 1.5rem;\n margin-bottom: 20px;\n border-bottom: 2px solid #3498db;\n padding-bottom: 10px;\n}\n\n.items-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 30px;\n background: white;\n border-radius: 10px;\n overflow: hidden;\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n}\n\n.items-table th {\n background: linear-gradient(135deg, #34495e 0%, #2c3e50 100%);\n color: white;\n padding: 15px;\n text-align: left;\n font-weight: 600;\n}\n\n.items-table td {\n padding: 15px;\n border-bottom: 1px solid #eee;\n vertical-align: middle;\n}\n\n.items-table tr:hover {\n background: #f8f9fa;\n transform: translateY(-1px);\n transition: all 0.3s ease;\n}\n\n.price-input {\n padding: 8px 12px;\n border: 2px solid #ddd;\n border-radius: 8px;\n font-size: 14px;\n width: 100px;\n transition: all 0.3s ease;\n}\n\n.price-input:focus {\n outline: none;\n border-color: #3498db;\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\n}\n\n.price-changed {\n background: #fff3cd;\n border-color: #ffc107;\n}\n\n.edit-btn {\n background: #3498db;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n transition: all 0.3s ease;\n}\n\n.edit-btn:hover {\n background: #2980b9;\n transform: translateY(-2px);\n}\n\n.save-btn {\n background: #27ae60;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n margin-right: 5px;\n}\n\n.save-btn:disabled {\n background: #95a5a6;\n cursor: not-allowed;\n}\n\n.cancel-btn {\n background: #e74c3c;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.justification-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.modal-content {\n background: white;\n padding: 30px;\n border-radius: 15px;\n max-width: 500px;\n width: 90%;\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);\n}\n\n.modal-content h3 {\n color: #2c3e50;\n margin-bottom: 20px;\n font-size: 1.3rem;\n}\n\n.justification-textarea {\n width: 100%;\n padding: 15px;\n border: 2px solid #ddd;\n border-radius: 8px;\n font-family: inherit;\n font-size: 14px;\n resize: vertical;\n min-height: 100px;\n}\n\n.justification-textarea:focus {\n outline: none;\n border-color: #3498db;\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\n}\n\n.modal-buttons {\n margin-top: 20px;\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n}\n\n.totals {\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n padding: 25px;\n border-radius: 15px;\n margin-top: 20px;\n}\n\n.total-row {\n display: flex;\n justify-content: space-between;\n margin-bottom: 10px;\n font-size: 1.1rem;\n}\n\n.total-row.grand-total {\n border-top: 2px solid #3498db;\n padding-top: 15px;\n margin-top: 15px;\n font-weight: bold;\n font-size: 1.3rem;\n color: #2c3e50;\n}\n\n.justification-note {\n background: #fff3cd;\n border: 1px solid #ffc107;\n border-radius: 8px;\n padding: 10px;\n margin-top: 10px;\n font-size: 12px;\n color: #856404;\n}\n\n.price-change-indicator {\n background: #dc3545;\n color: white;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: 5px;\n}\n\n@media (max-width: 768px) {\n .po-header {\n grid-template-columns: 1fr;\n gap: 20px;\n }\n\n .items-table {\n font-size: 14px;\n }\n\n .items-table th,\n .items-table td {\n padding: 10px 8px;\n }\n\n .price-input {\n width: 80px;\n }\n}\n</style>","// ===== src/utils/sidebarConfig.js =====\nexport const createSidebarConfig = (options = {}) => {\n return {\n brandName: options.brandName || 'OceanHelm',\n logoIcon: options.logoIcon || 'bi bi-water',\n showLogo: options.showLogo !== false,\n responsive: options.responsive !== false,\n ...options\n }\n}\n\n// Roles that behave like \"owner\" in terms of broad visibility\n// (super-staff gets everything owner sees, minus Activity Log and approvals)\nexport const defaultMenuItems = [\n {\n type: 'link',\n label: 'Home',\n icon: 'bi bi-house',\n roles: ['owner', 'super-staff', 'staff', 'captain'],\n href: '/app/dashboard',\n active: true\n },\n {\n type: 'button',\n label: 'Guide',\n icon: 'bi bi-compass',\n action: 'guide',\n roles: ['crew']\n },\n {\n // Activity Log — intentionally excluded from super-staff\n type: 'link',\n label: 'Activity Log',\n icon: 'bi bi-activity',\n href: '/activity-log',\n roles: ['owner']\n },\n {\n type: 'link',\n label: 'People Manager',\n icon: 'bi bi-person-plus',\n href: '/app/people-manager',\n roles: ['owner', 'super-staff']\n },\n {\n type: 'text',\n label: 'Modules'\n },\n {\n type: 'dropdown',\n label: 'Compliance',\n roles: ['owner', 'staff', 'captain'],\n icon: 'bi bi-list-ul',\n children: [\n { label: 'Vessel Certification', action: 'vessel-cert' },\n {\n label: 'Reports', action: 'reports', roles: ['owner', 'staff', 'captain'],\n categories: ['marine-staff']\n }, // only visible to staff who also have the 'marine-staff' category\n { label: 'Crew Certification', action: 'crew-cert', roles: ['owner', 'staff', 'captain'], categories: ['marine-staff'] },\n { label: 'QHSE Compliance', action: 'qhse', roles: ['owner', 'staff', 'captain'], categories: ['marine-staff'] },\n { label: 'Track Garbage', action: 'garbage', roles: ['owner', 'staff', 'captain'], categories: ['marine-staff'] },\n ]\n },\n {\n // ── HR MODULE ──────────────────────────────────────────────────────────\n // Visible to owner, super-staff, and staff with the 'hr' category.\n // Category-based filtering is handled by the sidebar's permissionChecker.\n type: 'dropdown',\n label: 'HR',\n icon: 'bi bi-people-fill',\n roles: ['owner', 'captain', 'staff'],\n categories: ['hr'], // staff must also have this category\n children: [\n {\n label: 'Attendance',\n action: 'hr-attendance',\n roles: ['owner', 'captain', 'staff'],\n categories: ['hr', 'marine-staff'],\n },\n {\n label: 'Payroll',\n action: 'hr-payroll',\n roles: ['owner', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Appraisals',\n action: 'hr-appraisals',\n roles: ['owner', 'captain', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Leave Management',\n action: 'hr-leave',\n roles: ['owner', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Disciplinary Log',\n action: 'hr-disciplinary',\n roles: ['owner', 'staff'], // owner-only, no category gate needed\n categories: ['hr'],\n },\n ]\n },\n {\n // ── RECRUITMENT MODULE ─────────────────────────────────────────────────\n // Accessible to owner, super-staff, and staff with the 'hr' category.\n type: 'dropdown',\n label: 'Recruitment',\n icon: 'bi bi-person-fill-add',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'], // staff must also have this category\n children: [\n {\n label: 'Manage Recruitment',\n action: 'recruitment-builder',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'],\n }\n ]\n },\n /* ── end HR / RECRUITMENT MODULES ── */\n {\n type: 'button',\n label: 'Maintenance',\n icon: 'bi bi-tools',\n action: 'maintenance',\n roles: ['owner', 'staff', 'captain'],\n categories: ['marine-staff']\n },\n {\n type: 'dropdown',\n label: 'Crew Management',\n icon: 'bi bi-people',\n roles: ['owner','staff', 'captain'],\n children: [\n { label: 'All Crew', action: 'crew-all', roles: ['owner', 'staff'], categories: ['marine-staff'] },\n { label: 'Get Crew by Vessel', action: 'crew-by-vessel', roles: ['owner', 'captain', 'staff'], categories: ['marine-staff'] },\n { label: 'Schedule', action: 'schedule', roles: ['owner', 'captain'] },\n ]\n },\n {\n type: 'dropdown',\n label: 'Inventory Management',\n icon: 'bi bi-clipboard-data',\n roles: ['owner', 'super-staff', 'staff', 'captain'],\n children: [\n { label: 'Parts Inventory', action: 'inventory', roles: ['owner', 'staff', 'captain'], categories: ['controller', 'marine-staff'] },\n { label: 'Bunkering', action: 'fuel', roles: ['owner', 'staff', 'captain'], categories: ['controller', 'marine-staff'] },\n ]\n },\n {\n type: 'link',\n label: 'Requisition Processing',\n icon: 'bi bi-calendar-check',\n href: '/app/requisition',\n roles: ['owner', 'staff', 'captain'],\n categories: ['controller', 'marine-staff', 'requisitor', 'purchaser']\n },\n {\n type: 'button',\n label: 'Voyage Manager',\n icon: 'fas fa-ship',\n action: 'coming-soon',\n roles: ['owner', 'staff', 'captain'],\n categories: ['marine-staff']\n },\n {\n type: 'button',\n label: 'Vessel Log',\n icon: 'bi bi-file-ruled',\n action: 'coming-soon',\n roles: ['owner', 'staff', 'captain'],\n categories: ['marine-staff']\n\n },\n {\n type: 'button',\n label: 'Profile',\n icon: 'bi bi-people',\n action: 'crew-profile',\n roles: ['crew']\n },\n {\n type: 'button',\n label: 'Training',\n icon: 'bi bi-book',\n action: 'crew-training',\n roles: ['crew']\n },\n {\n type: 'button',\n label: 'Settings',\n icon: 'bi bi-gear',\n action: 'settings',\n roles: ['owner', 'super-staff', 'staff']\n },\n {\n type: 'button',\n label: 'Help & Support',\n icon: 'bi bi-question-circle',\n action: 'help',\n }\n]","// ===== src/utils/permissions.js =====\nexport const defaultPermissionChecker = (item, userProfile) => {\n // No role restrictions\n if (!item.roles || item.roles.length === 0) {\n return true\n }\n\n // Check if user role is in allowed roles\n return item.roles.includes(userProfile?.role)\n}","// src/index.js - Library entry point\nimport ConfigurableSidebar from './components/ConfigurableSidebar.vue'\nimport VesselList from './components/VesselList.vue'\nimport DashHead from './components/DashHead.vue' \nimport Reports from './components/Reports.vue' \nimport OceanHelmMaintenance from './components/OceanHelmMaintenance.vue'\nimport ActivityLogs from './components/ActivityLogs.vue'\nimport CrewManagement from './components/CrewManagement.vue'\nimport RequisitionSystem from './components/RequisitionSystem.vue'\n\nimport { createSidebarConfig, defaultMenuItems } from './utils/sidebarConfig'\nimport { defaultPermissionChecker } from './utils/permissions'\n\n// Export main components\nexport { ConfigurableSidebar, VesselList, DashHead, Reports, CrewManagement, ActivityLogs, OceanHelmMaintenance, RequisitionSystem }\n\n// Export utilities\nexport { createSidebarConfig, defaultMenuItems, defaultPermissionChecker }\n\n// Export types for TypeScript users\nexport * from './types'\n\n// Default export for plugin-style usage\nexport default {\n install(app, options = {}) {\n app.component('ConfigurableSidebar', ConfigurableSidebar)\n app.component('VesselLists', VesselList)\n app.component('DashHead', DashHead)\n app.component('Reports', Reports)\n app.component('ActivityLogs', ActivityLogs)\n app.component('CrewManagement', CrewManagement)\n app.component('RequisitionSystem', RequisitionSystem)\n app.component('OceanHelmMaintenance', OceanHelmMaintenance)\n\n // Provide global configuration\n app.provide('sidebarConfig', options)\n }\n}"],"names":["_sfc_main","item","child","i","userRole","_a","userCategories","_b","cat","sidebarToggle","sidebar","content","event","isClickInsideSidebar","isClickOnToggleBtn","_hoisted_2","_hoisted_3","_hoisted_8","_createElementBlock","$options","$props","_openBlock","_hoisted_1","_createElementVNode","_toDisplayString","_Fragment","_renderList","index","$event","_withModifiers","_normalizeClass","_createTextVNode","_withDirectives","subItem","subIndex","_hoisted_9","_vShow","_hoisted_10","_hoisted_11","_renderSlot","_ctx","vessel","status","navigationData","action","date","registrationNumber","now","inputDate","diffMs","diffHours","days","hours","result","role","userVessel","categories","expiry_date","today","diffTime","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_14","_hoisted_15","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_26","_hoisted_27","_hoisted_29","_hoisted_31","$data","_cache","args","_hoisted_12","_hoisted_13","_hoisted_16","_hoisted_25","_hoisted_28","_hoisted_30","_hoisted_33","r","ctx","ref","val","prev","reportId","f","report","type","file","folder","isManual","payload","entityRef","el","key","attachments","imageFiles","reportPdfBytes","err","blob","src","resolve","reject","s","jsPDF","doc","pageW","margin","contentW","y","checkPage","needed","sectionHeading","text","fieldRow","label","value","labelWidth","valLines","hx","participantCount","crewLines","raw","list","colNr","wNr","colName","wName","name","idx","checkQuestions","checkAnswers","q","yes","scenarioText","line","imgFile","dataUrl","props","ratio","iw","ih","e","totalPages","p","labelledBox","minHeight","bodyText","textH","boxH","labelLines","ll","labelH","ty","incLabel","halfW","titleLines","meta","colW","col","row","xo","yo","addSection","heading","allAttachments","zip","safeName","att","bytes","resp","filename","url","a","files","k","sizes","d","_hoisted_17","_hoisted_34","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_53","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_72","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_81","_hoisted_83","_hoisted_84","_hoisted_85","_hoisted_86","_hoisted_87","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_99","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_105","_hoisted_106","_hoisted_107","_hoisted_108","_hoisted_111","_hoisted_114","_hoisted_116","_hoisted_118","_hoisted_121","_hoisted_122","_hoisted_125","_hoisted_126","_hoisted_128","_hoisted_129","_hoisted_130","_hoisted_131","_hoisted_133","_hoisted_134","_hoisted_135","_hoisted_136","_hoisted_137","_hoisted_141","_hoisted_142","_hoisted_143","_hoisted_145","_hoisted_146","_hoisted_147","_hoisted_150","_hoisted_155","_hoisted_159","_hoisted_161","_hoisted_162","_hoisted_163","_hoisted_164","_hoisted_165","_hoisted_166","_hoisted_167","_hoisted_168","_hoisted_170","_hoisted_171","_hoisted_173","_hoisted_178","_hoisted_179","_hoisted_181","_hoisted_183","_hoisted_185","_hoisted_186","_createVNode","_Transition","_hoisted_32","_hoisted_39","_hoisted_40","_hoisted_52","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_64","_hoisted_65","_hoisted_71","_hoisted_74","_hoisted_75","_hoisted_82","_hoisted_90","_hoisted_96","_hoisted_98","_hoisted_104","_hoisted_109","_hoisted_110","_hoisted_112","_hoisted_113","_hoisted_115","x","_hoisted_117","_hoisted_119","_vModelSelect","_hoisted_120","_vModelText","_hoisted_123","_hoisted_124","_hoisted_138","_hoisted_139","_hoisted_140","_hoisted_144","_hoisted_148","_hoisted_149","_hoisted_151","_hoisted_153","_hoisted_154","_hoisted_157","_hoisted_158","_hoisted_160","_hoisted_169","_hoisted_172","_hoisted_174","_hoisted_175","_hoisted_176","_hoisted_177","_hoisted_180","_hoisted_182","_hoisted_188","_hoisted_189","newDate","task","query","total","profile","taskId","checklist","newTask","filter","taskComponent","t","requiredFields","field","section","recurrence","nextDate","nextDueDate","diffDays","taskData","success","updateData","updatedAfter","dateString","completed","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_44","_hoisted_62","_hoisted_63","_hoisted_70","_hoisted_73","_hoisted_80","_hoisted_89","_hoisted_95","_hoisted_97","member","_vModelCheckbox","_hoisted_54","_hoisted_58","_hoisted_88","_normalizeStyle","recommendation","timestamp","log","change","page","cert","companyVerification","v","matchesSearch","matchesStatus","entries","logEntry","b","dateA","dateB","filtered","entry","search","dates","minDate","maxDate","formatDate","breakdown","vessels","isVessel","rolePermissions","mostRecentOnboard","onboardDate","arrivalDate","newGuest","duration","sorted","valA","valB","hasName","hasDate","hasImage","validCertifications","finalRole","certificationsWithUrls","uploadResult","newMember","email","embarkDate","memberId","certification","reader","fileInput","expiryDate","dateStr","expiry","oneMonthFromNow","data","req","tab","sum","unitPrice","userId","tabName","taxRate","statusFields","requisition","id","_c","details","info","isPrinting","_hoisted_127","dept","unit","_d","_e","_f","_g","_h","_i","_k","_j","_m","_l","_hoisted_132","createSidebarConfig","options","defaultMenuItems","defaultPermissionChecker","userProfile","app","ConfigurableSidebar","VesselList","DashHead","Reports","ActivityLogs","CrewManagement","RequisitionSystem","OceanHelmMaintenance"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oceanhelm.umd.js","sources":["../src/components/ConfigurableSidebar.vue","../src/components/VesselList.vue","../src/components/DashHead.vue","../src/components/Reports.vue","../src/components/OceanHelmMaintenance.vue","../src/components/ActivityLogs.vue","../src/components/CrewManagement.vue","../src/components/RequisitionSystem.vue","../src/utils/sidebarConfig.js","../src/utils/permissions.js","../src/index.js"],"sourcesContent":["<template>\n <nav id=\"sidebar\" :class=\"sidebarClasses\">\n <!-- Logo Section -->\n <div class=\"logo d-flex align-items-center left\" v-if=\"showLogo\">\n <span style=\"margin-left: 45px;\">{{ brandName }}</span>\n </div>\n\n <!-- Navigation Items -->\n <ul class=\"list-unstyled components mt-4\">\n <li v-for=\"(item, index) in filteredMenuItems\" :key=\"index\"\n :class=\"{ 'active': item.active, 'dropdown': item.type === 'dropdown' }\" @click=\"handleItemClick(item)\">\n <!-- Regular Link -->\n <a v-if=\"item.type === 'link'\" :href=\"item.href || '#'\" @click.prevent=\"handleNavigation(item)\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n </a>\n\n <!-- Button/Action -->\n <a v-else-if=\"item.type === 'button'\" @click.prevent=\"handleAction(item)\" style=\"cursor: pointer;\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n </a>\n\n <!-- Dropdown -->\n <template v-else-if=\"item.type === 'dropdown'\">\n <a class=\"dropdown-toggle\" @click.prevent=\"toggleDropdown(item)\" style=\"cursor: pointer;\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n <i class=\"\" :class=\"{ open: item.open }\"></i>\n </a>\n\n <ul v-show=\"item.open\" class=\"sidebar-dropdown\">\n <li v-for=\"(subItem, subIndex) in getFilteredChildren(item)\" :key=\"subIndex\">\n <a class=\"dropdown-item\" @click.prevent=\"handleAction(subItem)\">\n {{ subItem.label }}\n </a>\n </li>\n </ul>\n </template>\n\n <!-- Separator -->\n <div v-else-if=\"item.type === 'separator'\" class=\"dropdown-divider\"></div>\n\n <!-- Static Text -->\n <a v-else-if=\"item.type === 'text'\">\n {{ item.label }}\n </a>\n </li>\n </ul>\n\n <!-- Custom Slot for Additional Content -->\n <slot name=\"footer\"></slot>\n </nav>\n</template>\n\n<script>\nexport default {\n name: 'ConfigurableSidebar',\n\n props: {\n // Brand configuration\n brandName: {\n type: String,\n default: 'OceanHelm'\n },\n logoIcon: {\n type: String,\n default: 'bi bi-water'\n },\n showLogo: {\n type: Boolean,\n default: true\n },\n\n // Menu items configuration\n menuItems: {\n type: Array,\n required: true,\n default: () => []\n },\n\n // User profile for role-based filtering\n // Expected shape: { role: 'staff', categories: ['hr', 'purchaser'] }\n userProfile: {\n type: Object,\n default: () => ({})\n },\n\n // Sidebar behavior\n responsive: {\n type: Boolean,\n default: true\n },\n\n // Custom classes\n customClasses: {\n type: String,\n default: ''\n },\n\n // Optional override: provide your own permission function\n // Signature: (item, userProfile) => Boolean\n permissionChecker: {\n type: Function,\n default: null\n }\n },\n\n computed: {\n sidebarClasses() {\n return this.customClasses;\n },\n\n filteredMenuItems() {\n return this.menuItems.filter(item => {\n if (!this.hasPermission(item)) return false;\n\n // For dropdowns, only show if at least one child is permitted\n if (item.type === 'dropdown' && item.children) {\n return item.children.some(child => this.hasPermission(child));\n }\n\n return true;\n });\n }\n },\n\n mounted() {\n if (this.responsive) {\n this.initializeResponsiveBehavior();\n }\n },\n\n methods: {\n toggleDropdown(item) {\n // Accordion behaviour — close others\n this.filteredMenuItems.forEach(i => {\n if (i !== item && i.type === 'dropdown') {\n i.open = false;\n }\n });\n item.open = !item.open;\n },\n\n getFilteredChildren(item) {\n if (!item.children) return [];\n return item.children.filter(child => this.hasPermission(child));\n },\n\n // ─── Permission logic ────────────────────────────────────────────────────\n // Rule summary:\n // 1. Use permissionChecker prop if supplied.\n // 2. No `roles` array on the item → visible to everyone.\n // 3. User's role must be in item.roles.\n // 4. If the item also has a `categories` array AND the user's role is\n // NOT one of the \"elevated\" roles (owner, super-staff), the user must\n // possess at least one of the listed categories.\n // Elevated roles bypass the category gate entirely.\n // ────────────────────────────────────────────────────────────────────────\n hasPermission(item) {\n if (this.permissionChecker) {\n return this.permissionChecker(item, this.userProfile);\n }\n\n const userRole = this.userProfile?.role || '';\n const userCategories = this.userProfile?.categories || [];\n\n // No role restriction — always visible\n if (!item.roles || item.roles.length === 0) return true;\n\n // Role must be listed\n if (!item.roles.includes(userRole)) return false;\n\n // Category gate — only applies when the item declares categories\n // AND the user is not an elevated role that bypasses it\n if (item.categories && item.categories.length > 0) {\n const elevatedRoles = ['owner', 'super-staff'];\n if (!elevatedRoles.includes(userRole)) {\n // Regular staff: must hold at least one of the required categories\n const hasCategory = item.categories.some(cat => userCategories.includes(cat));\n if (!hasCategory) return false;\n }\n // Elevated roles fall through — no category check needed\n }\n\n return true;\n },\n\n // Navigation handling\n handleNavigation(item) {\n this.$emit('navigate', item);\n\n if (item.href && !item.preventDefault) {\n if (item.external) {\n window.open(item.href, '_blank');\n } else {\n this.$router?.push(item.href);\n }\n }\n },\n\n // Action handling\n handleAction(item) {\n this.$emit('action', item);\n },\n\n // Item click handling\n handleItemClick(item) {\n this.$emit('item-click', item);\n },\n\n // Responsive behaviour\n initializeResponsiveBehavior() {\n const sidebarToggle = document.getElementById('sidebarToggle');\n const sidebar = document.getElementById('sidebar');\n const content = document.getElementById('content');\n\n if (!sidebarToggle || !sidebar || !content) return;\n\n if (window.innerWidth >= 768) {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n }\n\n sidebarToggle.addEventListener('click', () => {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n });\n\n document.addEventListener('click', (event) => {\n const isClickInsideSidebar = sidebar.contains(event.target);\n const isClickOnToggleBtn = sidebarToggle.contains(event.target);\n\n if (!isClickInsideSidebar && !isClickOnToggleBtn &&\n window.innerWidth < 768 &&\n sidebar.classList.contains('active')) {\n sidebar.classList.remove('active');\n content.classList.remove('active');\n }\n });\n }\n },\n\n emits: ['navigate', 'action', 'item-click']\n}\n</script>\n\n<style>\n.sidebar-dropdown {\n list-style: none;\n padding-left: 20px;\n margin: 5px 0 10px 0;\n}\n\n.sidebar-dropdown li a {\n display: block;\n padding: 8px 15px;\n font-size: 14px;\n color: #ddd;\n border-radius: 4px;\n transition: background 0.2s ease;\n}\n\n.sidebar-dropdown li a:hover {\n background: rgba(255, 255, 255, 0.1);\n}\n\n.dropdown-arrow {\n float: right;\n transition: transform 0.2s ease;\n}\n\n.dropdown-arrow.open {\n transform: rotate(180deg);\n}\n</style>","<template>\n <!-- Fleet Summary -->\n <div class=\"row mb-3\">\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\" @click=\"filterVessels('Active')\"\n :class=\"{ 'border-primary border-2': activeFilter === 'Active' }\" style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-primary bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-check-circle-fill text-primary fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Active Vessels</h6>\n <h3 class=\"mt-2 mb-0\">{{ activeVesselsCount }}</h3>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\" @click=\"filterVessels('Inactive')\"\n :class=\"{ 'border-secondary border-2': activeFilter === 'Inactive' }\" style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-secondary bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-pause-circle-fill text-secondary fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Inactive</h6>\n <h3 class=\"mt-2 mb-0\">{{ inactiveVesselsCount }}</h3>\n </div>\n </div>\n </div>\n </div>\n <!-- Register New Fleet -->\n <div class=\"col-md-4\" v-if=\"canAddVessel\">\n <div class=\"card border-0 shadow-sm\" @click=\"handleAddVessel\" style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-success bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-patch-plus-fill text-success fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Add New Vessel</h6>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mb-4\">\n <h4 class=\"mb-0\"><i class=\"bi bi-ship me-2\"></i>Registered Vessels</h4>\n <button v-if=\"activeFilter !== 'All'\" class=\"btn btn-sm btn-outline-secondary\" @click=\"clearFilter\">\n <i class=\"bi bi-x-circle me-1\"></i>Clear Filter\n </button>\n </div>\n\n <!-- Filter indicator -->\n <div v-if=\"activeFilter !== 'All'\" class=\"alert alert-info mb-3\" role=\"alert\">\n Showing <strong>{{ activeFilter }}</strong> vessels ({{ filteredVessels.length }})\n </div>\n\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"text-center py-4\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n <p class=\"mt-2\">Loading vessels...</p>\n </div>\n\n <!-- Empty State -->\n <div v-else-if=\"!filteredVessels.length && activeFilter === 'All'\" class=\"alert alert-primary\" role=\"alert\">\n <h4 class=\"alert-heading\">Empty Fleet!</h4>\n <p>You have an empty fleet, you have not added any vessel yet.</p>\n <hr>\n <p class=\"mb-0\">Click on the add vessel button above, to start adding vessels to your fleet</p>\n </div>\n\n <!-- No results for filter -->\n <div v-else-if=\"!filteredVessels.length && activeFilter !== 'All'\" class=\"alert alert-warning\" role=\"alert\">\n <h4 class=\"alert-heading\">No {{ activeFilter }} Vessels</h4>\n <p class=\"mb-0\">There are no {{ activeFilter.toLowerCase() }} vessels in your fleet.</p>\n </div>\n\n <!-- Vessel Cards -->\n <div v-else class=\"row\">\n <div class=\"col-lg-6\" v-for=\"vessel in filteredVessels\" :key=\"vessel.registrationNumber || vessel.id\">\n <div class=\"vessel-card\" @click=\"handleVesselClick(vessel)\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"vessel-icon v-left\">\n <i class=\"fas fa-ship\"></i>\n </div>\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <h5 class=\"card-title mb-0\">{{ vessel.name }}</h5>\n <span :class=\"['vessel-status', statusClass(vessel.status)]\">{{ vessel.status }}</span>\n </div>\n <div class=\"row\">\n <div class=\"col-6\">\n <small class=\"text-muted\">Registration #:</small>\n <p class=\"mb-0\">{{ vessel.registrationNumber }}</p>\n </div>\n\n <div class=\"col-6\" v-if=\"vessel.date\">\n <template v-if=\"vessel.status === 'Active'\">\n <small class=\"text-muted\">Active Duration:</small>\n <p class=\"mb-0\">{{ getDuration(vessel.date, vessel.registrationNumber) }}</p>\n </template>\n <template v-else>\n <small class=\"text-muted\">Inactive Duration:</small>\n <p class=\"mb-0\">{{ getDuration(vessel.date, vessel.registrationNumber) }}</p>\n </template>\n </div>\n\n <div class=\"col-6\" v-else>\n <small class=\"text-muted\">{{ vessel.status }} Duration:</small>\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm mt-1\"\n @click.stop=\"setVesselDate(vessel.registrationNumber)\">\n Set Date\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"action-icon v-left delete\">\n <i class=\"bi bi-trash\" @click.stop=\"handleDeleteVessel(vessel)\"></i>\n </div>\n <button class=\"btn btn-primary\" @click.stop=\"handleToggleStatus(vessel)\">\n {{ vessel.status === 'Active' ? 'Mark Inactive' : 'Mark Active' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'VesselList',\n\n props: {\n // Required props\n vessels: {\n type: Array,\n required: true,\n default: () => []\n },\n userProfile: {\n type: Object,\n required: true,\n default: () => ({ role: 'viewer', vessel: null })\n },\n\n // Optional props\n loading: {\n type: Boolean,\n default: false\n },\n currentRoute: {\n type: String,\n default: 'dashboard' // 'dashboard', 'maintenanceroute', 'crewroute'\n },\n\n // Configuration props\n config: {\n type: Object,\n default: () => ({\n enableAdd: true,\n enableEdit: true,\n enableDelete: true,\n enableStatusToggle: true,\n showCertifications: true\n })\n }\n },\n\n data() {\n return {\n activeFilter: 'All' // 'All', 'Active', or 'Inactive'\n };\n },\n\n emits: [\n 'vessel-add',\n 'vessel-click',\n 'vessel-edit',\n 'vessel-delete',\n 'vessel-toggle-status',\n 'vessel-navigate',\n 'access-denied',\n 'date-change'\n ],\n\n computed: {\n activeVesselsCount() {\n return this.vessels.filter(vessel => vessel.status === \"Active\").length;\n },\n\n inactiveVesselsCount() {\n return this.vessels.filter(vessel => vessel.status === \"Inactive\").length;\n },\n\n filteredVessels() {\n if (this.activeFilter === 'All') {\n return this.vessels;\n }\n return this.vessels.filter(vessel => vessel.status === this.activeFilter);\n },\n\n canAddVessel() {\n return this.config.enableAdd &&\n (this.userProfile.role === 'owner' || this.userProfile.role === 'staff');\n }\n },\n\n methods: {\n // Filter methods\n filterVessels(status) {\n this.activeFilter = status;\n },\n\n clearFilter() {\n this.activeFilter = 'All';\n },\n\n // Event handlers that emit to parent\n handleAddVessel() {\n if (!this.canAddVessel) {\n this.handleAccessDenied('add vessel');\n return;\n }\n this.$emit('vessel-add');\n },\n\n handleVesselClick(vessel) {\n const navigationData = {\n vessel,\n route: this.currentRoute,\n id: vessel.registrationNumber,\n name: vessel.name\n };\n\n if (this.grantAccess(vessel)) {\n if (this.currentRoute === 'dashboard') {\n this.$emit('vessel-click', vessel);\n } else {\n this.$emit('vessel-navigate', navigationData);\n }\n } else {\n this.handleAccessDenied('this protected route');\n }\n },\n\n handleDeleteVessel(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('delete vessel');\n return;\n }\n\n if (!this.config.enableDelete) {\n return;\n }\n\n this.$emit('vessel-delete', vessel);\n },\n\n handleToggleStatus(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('change vessel status');\n return;\n }\n\n if (!this.config.enableStatusToggle) {\n return;\n }\n\n this.$emit('vessel-toggle-status', vessel);\n },\n\n handleEditVessel(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('edit vessel');\n return;\n }\n\n if (!this.config.enableEdit) {\n return;\n }\n\n this.$emit('vessel-edit', vessel);\n },\n\n handleAccessDenied(action) {\n this.$emit('access-denied', { action, userProfile: this.userProfile });\n },\n\n // Utility methods (keep these in component as they're UI-related)\n statusClass(status) {\n const normalized = status?.toLowerCase() || '';\n return `status-${normalized}`;\n },\n\n getDuration(date, registrationNumber) {\n const now = new Date();\n const inputDate = new Date(date);\n\n // difference in milliseconds\n const diffMs = now - inputDate;\n\n if (diffMs < 0) return \"Invalid (future date)\";\n\n // convert to hours\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60));\n\n const days = Math.floor(diffHours / 24);\n const hours = diffHours % 24;\n\n let result = \"\";\n\n if (days > 0) {\n result += `${days} day${days > 1 ? \"s\" : \"\"}`;\n }\n if (hours > 0) {\n result += (result ? \" \" : \"\") + `${hours} hr${hours > 1 ? \"s\" : \"\"}`;\n }\n\n return result || '0 hr'\n },\n\n setVesselDate(registrationNumber) {\n this.$emit('date-change', registrationNumber);\n },\n\n grantAccess(vessel) {\n const { role, vessel: userVessel, categories = [] } = this.userProfile;\n\n const isMarineStaff = categories.includes('marine-staff');\n\n return (\n role === 'owner' ||\n isMarineStaff ||\n (role === 'captain' && userVessel === vessel.name)\n );\n },\n\n getDaysToExpiry(expiry_date) {\n if (!expiry_date) return null;\n\n const today = new Date();\n const expiry = new Date(expiry_date);\n const diffTime = expiry - today;\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n return diffDays;\n },\n\n getExpiryClass(expiry_date) {\n const days = this.getDaysToExpiry(expiry_date);\n if (days === null) return '';\n if (days < 30) return 'cert-critical';\n if (days < 90) return 'cert-warning';\n return '';\n }\n }\n}\n</script>\n\n<style>\n.v-left {\n margin-left: 20px;\n}\n\n.vessel-card {\n background: white;\n border-radius: 10px;\n box-shadow: 0 8px 16px rgba(0, 105, 192, 0.15);\n transition: all 0.3s ease;\n margin-bottom: 20px;\n overflow: hidden;\n border-left: 4px solid var(--accent-color);\n}\n\n.vessel-card:hover {\n transform: translateY(-5px);\n box-shadow: 0 12px 20px rgba(0, 105, 192, 0.2);\n}\n\n.vessel-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 50px;\n height: 50px;\n background-color: #e3f2fd;\n border-radius: 10px;\n color: var(--accent-color);\n font-size: 24px;\n margin-right: 15px;\n}\n\n.black {\n color: black !important;\n}\n\n.action-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border-radius: 20px;\n color: var(--accent-color);\n font-size: 16px;\n margin-right: 15px;\n margin-top: 20px;\n margin-bottom: 10px;\n}\n\n.delete {\n background-color: var(--danger);\n}\n\n.edit {\n background-color: var(--success);\n}\n\n.vessel-status {\n display: inline-block;\n padding: 5px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-active {\n background-color: #e8f5e9;\n color: #2e7d32;\n}\n\n.status-maintenance {\n background-color: #fff8e1;\n color: #f57f17;\n}\n\n.status-inactive {\n background-color: #f5f5f5;\n color: #757575;\n}\n</style>","<template>\n <div class=\"page-header d-flex justify-content-between align-items-center\">\n <h4 style=\"margin-left: 20px;\">{{ name }}</h4>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary me-2\" @click=\"addUser()\" v-if=\"this.userProfile.role == 'owner'\">\n <i class=\"bi bi-bell\"></i>\n <span class=\"badge bg-danger\">1</span>\n </button>\n <button class=\"btn btn-outline-primary\" @click=\"loggedIn()\">\n <i class=\"bi bi-person-circle\"></i>\n </button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'DashHead',\n \n props: {\n name: {\n type: String,\n required: true\n },\n userProfile: {\n type: Object,\n required: true,\n default: () => ({ role: 'viewer', vessel: null })\n }\n },\n\n emits: [\n 'add-user',\n 'logged-in'\n ],\n\n methods: {\n addUser() {\n this.$emit('add-user');\n },\n loggedIn() {\n this.$emit('logged-in');\n }\n }\n}\n</script>\n\n<style>\n.page-header {\n margin-bottom: 30px;\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 15px;\n}\n\n.btn-outline-primary {\n border: 1px solid #0d6efd !important;\n}\n\n.btn-outline-primary:hover {\n background-color: #0d6efd !important;\n border-color: #0d6efd !important;\n color: white !important;\n}\n</style>","<template>\n <div class=\"reports-container\">\n\n <!-- ── Missing Reports Alert Banner ── -->\n <transition name=\"slide-down\">\n <div class=\"missing-banner\" v-if=\"!bannerDismissed && (pendingContext || missingReports.length > 0)\">\n <div class=\"missing-banner-inner\">\n <div class=\"missing-icon\"><i class=\"bi bi-exclamation-triangle-fill\"></i></div>\n <div class=\"missing-content\">\n <strong v-if=\"pendingContext\">\n Action Required — Report for\n <span class=\"ref-chip\">{{ pendingContext.entity_ref }}</span> must be submitted\n </strong>\n <strong v-else>\n {{ missingReports.length }} report{{ missingReports.length > 1 ? 's' : '' }} awaiting\n submission\n </strong>\n <p v-if=\"pendingContext\">{{ pendingContext.title }}</p>\n </div>\n <button class=\"btn btn-warning btn-sm fw-bold\" @click=\"openReportForm('qhse')\">\n <i class=\"bi bi-pencil-square me-1\"></i> Submit Report\n </button>\n <button class=\"btn-dismiss\" @click=\"dismissBanner\" title=\"Dismiss\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n </div>\n </transition>\n\n <!-- ── Page Header ── -->\n <div class=\"page-header d-flex justify-content-between align-items-center\">\n <div>\n <h4 class=\"page-title\">Reports</h4>\n <p class=\"page-subtitle\">Document Management & QHSE Reports</p>\n </div>\n <div class=\"header-actions\">\n <div class=\"btn-group-split\">\n <button class=\"btn btn-outline-primary\" @click=\"openReportForm('qhse')\">\n <i class=\"bi bi-shield-check\"></i> QHSE Report\n </button>\n <button class=\"btn btn-outline-secondary\" @click=\"openReportForm('manual')\">\n <i class=\"bi bi-file-earmark-plus\"></i> Manual Report\n </button>\n <!--\n <button class=\"btn btn-primary\" @click=\"showNewFolderModal = true\">\n <i class=\"bi bi-folder-plus\"></i> New Folder\n </button>\n -->\n </div>\n </div>\n </div>\n\n <!-- ── Tab Navigation ── -->\n <div class=\"tab-nav\">\n <button :class=\"['tab-btn', { active: activeTab === 'all' }]\" @click=\"activeTab = 'all'\">\n All Reports <span class=\"tab-count\">{{ reports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'drill' }]\" @click=\"activeTab = 'drill'\">\n <i class=\"bi bi-people-fill me-1\"></i>Drills\n <span class=\"tab-count drill\">{{ drillReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'incident' }]\" @click=\"activeTab = 'incident'\">\n <i class=\"bi bi-exclamation-octagon-fill me-1\"></i>Incidents\n <span class=\"tab-count incident\">{{ incidentReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'manual' }]\" @click=\"activeTab = 'manual'\">\n <i class=\"bi bi-file-earmark-text me-1\"></i>Manual\n <span class=\"tab-count manual\">{{ manualReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'folders' }]\" @click=\"activeTab = 'folders'\">\n <i class=\"bi bi-folder-fill me-1\"></i>Folders\n <span class=\"tab-count\">{{ reports.length + folders.length }}</span>\n </button>\n </div>\n\n <!-- ── Loading ── -->\n <div v-if=\"isLoading\" class=\"loading-container\">\n <div class=\"spinner\"></div>\n <p>Loading reports…</p>\n </div>\n\n <!-- ════════════════════════════════════════\n REPORTS LIST TABS (all/drill/incident/manual)\n ════════════════════════════════════════ -->\n <div v-if=\"activeTab !== 'folders' && !isLoading\">\n <div class=\"report-cards\" v-if=\"filteredReports.length > 0\">\n <div v-for=\"report in filteredReports\" :key=\"report.id\" :ref=\"'report-' + report.entityRef\"\n :class=\"['report-card', { 'report-card--highlighted': highlightedRef === report.entityRef }]\">\n <div class=\"rc-type-bar\" :class=\"reportTypeClass(report)\"></div>\n <div class=\"rc-badge\" :class=\"reportTypeClass(report)\">{{ reportTypeLabel(report) }}</div>\n\n <div class=\"rc-body\" @click=\"viewReport(report)\">\n <strong class=\"rc-ref\">{{ report.entityRef || report.id?.slice(0, 8).toUpperCase() }}</strong>\n <span class=\"rc-title\">{{ report.title }}</span>\n <span class=\"rc-meta\">\n <i class=\"bi bi-person-fill me-1\"></i>{{ report.submittedBy }}\n · \n <i class=\"bi bi-calendar3 me-1\"></i>{{ formatDate(report.submittedAt) }}\n </span>\n </div>\n\n <div class=\"rc-files\" v-if=\"getFilesForReport(report.id).length > 0\">\n <i class=\"bi bi-paperclip\"></i> {{ getFilesForReport(report.id).length }}\n </div>\n\n <!-- Folder pill: click jumps to the auto-folder -->\n <button class=\"rc-folder-pill\" :class=\"reportTypeClass(report)\" @click.stop=\"jumpToFolder(report)\"\n title=\"View folder\">\n <i class=\"bi bi-folder-fill me-1\"></i>\n {{ report.entityRef || report.title }}\n </button>\n\n <div class=\"rc-actions\">\n <button class=\"rc-btn rc-btn--view\" @click=\"viewReport(report)\" title=\"View\">\n <i class=\"bi bi-eye\"></i>\n </button>\n <button class=\"rc-btn rc-btn--download\" @click=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\" title=\"Download ZIP\">\n <span v-if=\"generatingPdf === report.id\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-file-zip\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"empty-state text-center\" v-if=\"filteredReports.length === 0\">\n <i class=\"bi bi-file-earmark-x\" style=\"font-size:3.5rem;color:#ccc;\"></i>\n <h5 class=\"mt-3 text-muted\">No {{ activeTab === 'all' ? '' : activeTab }} reports yet</h5>\n <p class=\"text-muted\">\n <span v-if=\"activeTab === 'manual'\">Create a manual report using the button above</span>\n <span v-else-if=\"activeTab === 'drill'\">Submit a report after logging a drill</span>\n <span v-else-if=\"activeTab === 'incident'\">Submit a report after logging an incident</span>\n <span v-else>Submit a report or create a folder to get started</span>\n </p>\n </div>\n </div>\n\n <!-- ════════════════════════════════════════\n FOLDERS TAB\n ════════════════════════════════════════ -->\n <div v-if=\"activeTab === 'folders' && !isLoading\">\n\n <!-- ─ Auto-folders ─ -->\n <div v-if=\"reports.length > 0\">\n <div class=\"section-heading\">\n <i class=\"bi bi-folder-symlink-fill text-primary me-1\"></i>\n Report Folders\n <span class=\"section-count\">{{ reports.length }}</span>\n <span class=\"section-hint\">Auto-generated · one per submitted report</span>\n </div>\n\n <div class=\"folders-list\">\n <div v-for=\"report in reports\" :key=\"'af-' + report.id\"\n :ref=\"'folder-' + (report.entityRef || report.id)\"\n :class=\"['auto-folder-card', reportTypeClass(report), { 'is-open': expandedFolders.includes('auto-' + report.id) }]\">\n <div class=\"af-header\" @click=\"toggleFolder('auto-' + report.id)\">\n <div class=\"af-icon-wrap\">\n <i class=\"bi bi-folder-fill af-folder-icon\"\n :class=\"'color--' + reportTypeClass(report)\"></i>\n <span class=\"af-count-badge\">{{ 1 + getFilesForReport(report.id).length }}</span>\n </div>\n <div class=\"af-meta\">\n <span class=\"af-ref\">{{ report.entityRef || report.id?.slice(0, 8).toUpperCase()\n }}</span>\n <span class=\"af-title\">{{ report.title }}</span>\n <div class=\"af-sub\">\n <span class=\"mini-badge\" :class=\"reportTypeClass(report)\">{{ reportTypeLabel(report)\n }}</span>\n <span class=\"text-muted\">{{ formatDate(report.submittedAt) }}</span>\n <span class=\"text-muted\" v-if=\"getFilesForReport(report.id).length\">\n · {{ getFilesForReport(report.id).length }} attachment{{\n getFilesForReport(report.id).length !== 1 ? 's' : '' }}\n </span>\n </div>\n </div>\n <div class=\"af-actions\">\n <button class=\"rc-btn rc-btn--download\" @click.stop=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\" title=\"Download ZIP\">\n <span v-if=\"generatingPdf === report.id\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-file-zip\"></i>\n </button>\n <i class=\"bi chevron-icon\"\n :class=\"expandedFolders.includes('auto-' + report.id) ? 'bi-chevron-up' : 'bi-chevron-down'\"></i>\n </div>\n </div>\n\n <transition name=\"folder-expand\">\n <div class=\"af-contents\" v-if=\"expandedFolders.includes('auto-' + report.id)\">\n\n <div class=\"ffi ffi--report\" @click=\"viewReport(report)\">\n <div class=\"ffi-icon ffi-icon--pdf\"><i class=\"bi bi-file-earmark-pdf-fill\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ safeRef(report) }}_report.pdf</span>\n <span class=\"ffi-sub\">Generated report sheet · click to preview</span>\n </div>\n <div class=\"ffi-acts\">\n <button class=\"rc-btn rc-btn--view\" @click.stop=\"viewReport(report)\"\n title=\"Preview\"><i class=\"bi bi-eye\"></i></button>\n <button class=\"rc-btn rc-btn--download\"\n @click.stop=\"downloadReportPdfOnly(report)\"\n :disabled=\"generatingPdf === report.id + '-pdf'\" title=\"Download PDF only\">\n <span v-if=\"generatingPdf === report.id + '-pdf'\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-download\"></i>\n </button>\n </div>\n </div>\n\n <div v-for=\"f in getFilesForReport(report.id)\" :key=\"f.id\" class=\"ffi\">\n <div class=\"ffi-icon\" :class=\"ffiIconClass(f)\">\n <i class=\"bi\" :class=\"fileIcon(f.type)\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ f.name }}</span>\n <span class=\"ffi-sub\">{{ formatFileSize(f.size) }}</span>\n </div>\n <div class=\"ffi-acts\">\n <a v-if=\"f.publicUrl\" :href=\"f.publicUrl\" target=\"_blank\" rel=\"noopener\"\n class=\"rc-btn rc-btn--view\" title=\"Open\"><i\n class=\"bi bi-box-arrow-up-right\"></i></a>\n </div>\n </div>\n\n <div class=\"ffi-empty\" v-if=\"getFilesForReport(report.id).length === 0\">\n <i class=\"bi bi-paperclip me-1\"></i>No attachments — ZIP will contain the report PDF\n only\n </div>\n\n <div class=\"af-zip-row\">\n <button class=\"btn btn-sm btn-outline-primary\" @click=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\">\n <span v-if=\"generatingPdf === report.id\">\n <span class=\"spinner-xs me-1\"></span>Building ZIP…\n </span>\n <span v-else>\n <i class=\"bi bi-file-zip me-1\"></i>Download all as ZIP\n </span>\n </button>\n <span class=\"af-zip-hint\">\n {{ safeRef(report) }}.zip\n · report PDF{{ getFilesForReport(report.id).length ? ' + ' +\n getFilesForReport(report.id).length + ' file(s)' : '' }}\n </span>\n </div>\n\n </div>\n </transition>\n </div>\n </div>\n </div>\n\n <!-- ─ User folders ─ -->\n <div :class=\"{ 'mt-4': reports.length > 0 }\" v-if=\"folders.length > 0\">\n <div class=\"section-heading\">\n <i class=\"bi bi-folder-plus text-warning me-1\"></i>\n Custom Folders\n <span class=\"section-count\">{{ folders.length }}</span>\n </div>\n\n <div class=\"folders-list\">\n <div v-for=\"folder in folders\" :key=\"'uf-' + folder.id\"\n :class=\"['user-folder-card', { 'is-open': expandedFolders.includes('user-' + folder.id) }]\">\n <div class=\"af-header\" @click=\"toggleFolder('user-' + folder.id)\">\n <div class=\"af-icon-wrap\">\n <i class=\"bi bi-folder-fill af-folder-icon color--user\"></i>\n <span class=\"af-count-badge\" style=\"background:#f0ad4e;color:#664d03;\">{{\n folder.files.length }}</span>\n </div>\n <div class=\"af-meta\">\n <span class=\"af-ref\">{{ folder.name }}</span>\n <span class=\"af-sub\">\n <span class=\"text-muted\">{{ folder.files.length }} file{{ folder.files.length !== 1\n ? 's' : '' }}</span>\n </span>\n </div>\n <div class=\"af-actions\">\n <!-- FIX: opens manual report modal pre-linked to this folder -->\n <button class=\"rc-btn\" style=\"color:#6f42c1;\"\n @click.stop=\"openManualReportForFolder(folder)\" title=\"Add Report / Files\">\n <i class=\"bi bi-file-earmark-plus\"></i>\n </button>\n <button class=\"rc-btn rc-btn--danger\"\n @click.stop=\"$emit('folder-delete-requested', folder.id)\" title=\"Delete\">\n <i class=\"bi bi-trash\"></i>\n </button>\n <i class=\"bi chevron-icon\"\n :class=\"expandedFolders.includes('user-' + folder.id) ? 'bi-chevron-up' : 'bi-chevron-down'\"></i>\n </div>\n </div>\n\n <transition name=\"folder-expand\">\n <div class=\"af-contents\" v-if=\"expandedFolders.includes('user-' + folder.id)\">\n <div v-for=\"file in folder.files\" :key=\"file.id\" class=\"ffi\">\n <div class=\"ffi-icon\" :class=\"ffiIconClass(file)\">\n <i class=\"bi\" :class=\"fileIcon(file.type)\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ file.name }}</span>\n <span class=\"ffi-sub\">{{ formatFileSize(file.size) }}</span>\n </div>\n <div class=\"ffi-acts\">\n <button class=\"rc-btn rc-btn--danger\"\n @click=\"$emit('file-remove-requested', { folderId: folder.id, fileId: file.id })\"\n title=\"Remove\"><i class=\"bi bi-x-circle\"></i></button>\n </div>\n </div>\n\n <div class=\"ffi-empty\" v-if=\"folder.files.length === 0\">\n <i class=\"bi bi-inbox me-1\"></i>Empty folder\n <!-- FIX: opens manual report modal instead of raw file picker -->\n <button class=\"btn btn-sm btn-outline-secondary ms-2\"\n @click=\"openManualReportForFolder(folder)\">\n <i class=\"bi bi-file-earmark-plus me-1\"></i>Add Report\n </button>\n </div>\n </div>\n </transition>\n </div>\n </div>\n </div>\n\n <!-- All empty -->\n <div class=\"empty-state text-center\" v-if=\"reports.length === 0 && folders.length === 0\">\n <i class=\"bi bi-folder2-open\" style=\"font-size:3.5rem;color:#ccc;\"></i>\n <h5 class=\"mt-3 text-muted\">No folders yet</h5>\n <p class=\"text-muted\">Each submitted report auto-creates a folder here. You can also create custom\n folders.</p>\n <button class=\"btn btn-primary mt-2\" @click=\"showNewFolderModal = true\">\n <i class=\"bi bi-folder-plus me-1\"></i> New Folder\n </button>\n </div>\n </div>\n\n <!-- ════════════════════════════════════════\n MODALS\n ════════════════════════════════════════ -->\n\n <!-- New Folder -->\n <div class=\"modal\" :class=\"{ 'show': showNewFolderModal }\" @click.self=\"showNewFolderModal = false\">\n <div class=\"modal-dialog modal-dialog-centered\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\"><i class=\"bi bi-folder-plus me-2\"></i>Create New Folder</h5>\n <button type=\"button\" class=\"btn-close\" @click=\"showNewFolderModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n <label class=\"form-label\">Folder Name</label>\n <input type=\"text\" class=\"form-control\" v-model=\"newFolderName\"\n @keyup.enter=\"requestCreateFolder\" placeholder=\"e.g., Q1 2025 Drills\" />\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\"\n @click=\"showNewFolderModal = false\">Cancel</button>\n <button type=\"button\" class=\"btn btn-primary\" @click=\"requestCreateFolder\"\n :disabled=\"!newFolderName.trim()\">Create Folder</button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Submit Report -->\n <div class=\"modal\" :class=\"{ 'show': showReportModal }\" @click.self=\"closeReportForm\">\n <div class=\"modal-dialog modal-dialog-centered modal-lg\">\n <div class=\"modal-content\">\n <div class=\"modal-header rpt-modal-header\">\n <h5 class=\"modal-title\">\n <i\n :class=\"reportForm.report_type === 'manual' ? 'bi bi-file-earmark-text me-2' : 'bi bi-shield-check me-2'\"></i>\n {{ reportForm.report_type === 'manual' ? 'New Manual Report' : 'Submit QHSE Report' }}\n <!-- Show folder context badge when opened from a folder -->\n <span v-if=\"reportForm.folderName\" class=\"folder-context-badge\">\n <i class=\"bi bi-folder-fill me-1\"></i>{{ reportForm.folderName }}\n </span>\n </h5>\n <div class=\"modal-type-toggle\" v-if=\"!pendingContext && !reportForm.folderId\">\n <button :class=\"['type-toggle-btn', { active: reportForm.report_type === 'qhse' }]\"\n @click=\"reportForm.report_type = 'qhse'\">\n <i class=\"bi bi-shield-check me-1\"></i>QHSE\n </button>\n <button :class=\"['type-toggle-btn', { active: reportForm.report_type === 'manual' }]\"\n @click=\"reportForm.report_type = 'manual'\">\n <i class=\"bi bi-file-earmark-text me-1\"></i>Manual\n </button>\n </div>\n <button type=\"button\" class=\"btn-close btn-close-white\" @click=\"closeReportForm\"></button>\n </div>\n <div class=\"modal-body\">\n\n <!-- QHSE: entity link -->\n <div class=\"rpt-entity-box\" v-if=\"reportForm.report_type === 'qhse'\">\n <label class=\"form-label fw-semibold\"><i class=\"bi bi-link-45deg me-1\"></i>Link to Drill /\n Incident</label>\n <div class=\"prefilled-entity\" v-if=\"reportForm.entity_ref && reportForm.entity_type\">\n <span class=\"entity-chip\" :class=\"reportForm.entity_type\">\n {{ reportForm.entity_type === 'drill' ? 'DRILL' : 'INCIDENT' }}\n </span>\n <strong>{{ reportForm.entity_ref }}</strong>\n <span class=\"text-muted ms-2\">{{ reportForm.entity_label }}</span>\n <button class=\"btn btn-link btn-sm text-danger ms-auto\" @click=\"clearEntityLink\"><i\n class=\"bi bi-x-circle\"></i> Clear</button>\n </div>\n <div v-else>\n <select class=\"form-control\" v-model=\"reportForm.selectedMissing\"\n @change=\"applyMissingSelection\">\n <option value=\"\">— Select a missing report (optional) —</option>\n <optgroup label=\"Missing Drill Reports\">\n <option v-for=\"r in missingReports.filter(x => x.entity_type === 'drill')\"\n :key=\"r.entity_id\" :value=\"JSON.stringify(r)\">\n {{ r.entity_ref }} — {{ r.label }}\n </option>\n </optgroup>\n <optgroup label=\"Missing Incident Reports\">\n <option v-for=\"r in missingReports.filter(x => x.entity_type === 'incident')\"\n :key=\"r.entity_id\" :value=\"JSON.stringify(r)\">\n {{ r.entity_ref }} — {{ r.label }}\n </option>\n </optgroup>\n </select>\n <small class=\"text-muted\">Linking will mark the drill / incident as reported.</small>\n </div>\n </div>\n\n <!-- Manual: category + ref -->\n <div class=\"input-row\" v-if=\"reportForm.report_type === 'manual'\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Report Category</label>\n <select class=\"form-control\" v-model=\"reportForm.manual_category\">\n <option>General</option>\n <option>Maintenance</option>\n <option>Safety Observation</option>\n <option>Environmental</option>\n <option>Audit</option>\n <option>Training</option>\n <option>Other</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Reference Number</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.manual_ref\"\n placeholder=\"e.g. RPT-2025-001\" />\n </div>\n </div>\n\n <!-- Drill-specific hint -->\n <div class=\"crew-hint\" v-if=\"reportForm.entity_type === 'drill'\">\n <i class=\"bi bi-info-circle-fill me-1\"></i>\n <span>\n <strong>Crew list tip:</strong> Start your Findings with\n <code>CREW: Name (Rank), Name (Rank), …</code>\n to generate a named crew participation table in the PDF.\n Otherwise the PDF will show the total count ({{ reportForm.entity_participants || 0 }}\n members) with a note to attach the signed list.\n </span>\n </div>\n\n <!-- Drill checklist — only shown when linked to a drill -->\n <div class=\"drill-checklist-box\" v-if=\"reportForm.entity_type === 'drill'\">\n <div class=\"drill-checklist-title\">\n <i class=\"bi bi-clipboard2-check me-1\"></i>\n Comments Checklist\n <span class=\"checklist-hint\">Tick = YES · unticked = NO in the PDF</span>\n </div>\n <div class=\"checklist-grid\">\n <label v-for=\"(q, idx) in drillChecklistQuestions\" :key=\"idx\"\n :class=\"['checklist-item', { checked: reportForm.drillChecklist[idx] }]\">\n <div class=\"checklist-checkbox\">\n <input type=\"checkbox\" :checked=\"reportForm.drillChecklist[idx]\"\n @change=\"reportForm.drillChecklist[idx] = $event.target.checked\" />\n <span class=\"custom-check\">\n <i class=\"bi\"\n :class=\"reportForm.drillChecklist[idx] ? 'bi-check-lg' : 'bi-x-lg'\"></i>\n </span>\n </div>\n <span class=\"checklist-q\">{{ q }}</span>\n <span class=\"checklist-answer\"\n :class=\"reportForm.drillChecklist[idx] ? 'answer-yes' : 'answer-no'\">\n {{ reportForm.drillChecklist[idx] ? 'YES' : 'NO' }}\n </span>\n </label>\n </div>\n </div>\n\n <!-- Common fields -->\n <div class=\"input-row mt-3\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Report Title *</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.title\"\n :placeholder=\"reportForm.entity_ref ? `Report — ${reportForm.entity_ref}` : 'Enter report title'\" />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Submitted By *</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.submittedBy\"\n placeholder=\"Your name\" />\n </div>\n </div>\n <div class=\"input-row\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Date</label>\n <input type=\"date\" class=\"form-control\" v-model=\"reportForm.date\" />\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">\n {{ reportForm.entity_type === 'incident' ? 'Description of Event (Findings) *' :\n 'Findings / Summary *' }}\n <span class=\"form-hint\" v-if=\"reportForm.entity_type === 'incident'\">Pre-filled from\n incident objective — edit as needed</span>\n </label>\n <textarea class=\"form-control\" rows=\"4\" v-model=\"reportForm.findings\" :placeholder=\"reportForm.entity_type === 'drill'\n ? 'CREW: John Smith (Master), Jane Doe (Chief Officer), …\\n\\nThen describe the drill scenario and findings…'\n : reportForm.entity_type === 'incident'\n ? 'Describe what happened, when, and where…'\n : 'Describe findings, observations, and outcomes…'\">\n </textarea>\n </div>\n\n <!-- Incident-specific structured fields -->\n <template v-if=\"reportForm.entity_type === 'incident'\">\n <div class=\"incident-fields-box\">\n <div class=\"incident-fields-title\">\n <i class=\"bi bi-layout-text-window-reverse me-1\"></i>\n Incident Report Fields\n <span class=\"checklist-hint\">These map directly to the PDF sections</span>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Possible Consequences</label>\n <div class=\"field-hint\">e.g. Personal injury, damage, collision, grounding, fire,\n pollution</div>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_consequences\"\n placeholder=\"Describe possible consequences…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Relevant Factors / Conditions Surrounding the\n Event</label>\n <div class=\"field-hint\">e.g. weather, lighting, fatigue, time pressure</div>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_factors\"\n placeholder=\"Describe relevant factors and conditions…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Immediate Action Taken</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_immediate_action\"\n placeholder=\"What was done immediately after the event?\"></textarea>\n </div>\n <div class=\"input-row\" style=\"margin-bottom:0;\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Direct Cause</label>\n <div class=\"field-hint\">e.g. failure to follow procedures, defective equipment\n </div>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.inc_direct_cause\"\n placeholder=\"Direct cause of the event…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Root Cause</label>\n <div class=\"field-hint\">e.g. lack of training, management factors</div>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.inc_root_cause\"\n placeholder=\"Root / underlying cause…\"></textarea>\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Action Taken to Avoid Re-occurrence</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.correctiveActions\"\n placeholder=\"Corrective actions and preventive measures…\"></textarea>\n </div>\n <div class=\"form-group\" style=\"margin-bottom:0;\">\n <label class=\"form-label fw-semibold\">Any Other Remarks</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_remarks\"\n placeholder=\"Additional remarks…\"></textarea>\n </div>\n </div>\n </template>\n\n <!-- Non-incident: standard corrective actions -->\n <template v-else>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Corrective Actions</label>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.correctiveActions\"\n placeholder=\"List any corrective actions required or taken…\"></textarea>\n </div>\n </template>\n\n <!-- Attachments -->\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">\n Attach Files\n <span class=\"form-hint\">Images embed in PDF · all files go into the ZIP</span>\n </label>\n <div class=\"file-drop-zone\" @click=\"$refs.reportFileInput.click()\" @dragover.prevent\n @drop.prevent=\"handleReportFileDrop\">\n <i class=\"bi bi-cloud-upload\" style=\"font-size:2rem;color:#6c757d;\"></i>\n <p class=\"mb-0 mt-2 text-muted\">Click or drag files here (PNG, JPG, PDF…)</p>\n <div class=\"attached-files\" v-if=\"reportForm.files.length > 0\">\n <span class=\"attached-chip\" v-for=\"(f, i) in reportForm.files\" :key=\"i\">\n <i class=\"bi me-1\" :class=\"fileIcon(f.type)\"></i>{{ f.name }}\n <button @click.stop=\"removeReportFile(i)\"><i class=\"bi bi-x\"></i></button>\n </span>\n </div>\n </div>\n <input ref=\"reportFileInput\" type=\"file\" multiple style=\"display:none\"\n @change=\"handleReportFileAttach\" />\n </div>\n\n <!-- ZIP preview -->\n <div class=\"zip-hint\" v-if=\"reportForm.title || reportForm.files.length > 0\">\n <i class=\"bi bi-file-zip me-1\"></i>\n Download will produce <strong>{{ zipName }}.zip</strong>\n containing the report PDF\n <span v-if=\"reportForm.files.length\"> + {{ reportForm.files.length }} attachment{{\n reportForm.files.length !== 1 ?\n 's' : '' }}</span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" @click=\"closeReportForm\">Cancel</button>\n <button type=\"button\" class=\"btn btn-success\" @click=\"requestSubmitReport\"\n :disabled=\"isSubmitting || !reportForm.title || !reportForm.submittedBy || !reportForm.findings\">\n <span v-if=\"isSubmitting\"><span class=\"spinner-sm\"></span> Submitting…</span>\n <span v-else><i class=\"bi bi-check-circle me-1\"></i>Submit Report</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Report Viewer -->\n <div class=\"modal\" :class=\"{ 'show': showViewModal }\" @click.self=\"closeViewer\">\n <div class=\"modal-dialog modal-dialog-centered modal-lg\">\n <div class=\"modal-content\" v-if=\"viewingReport\">\n <div class=\"modal-header rpt-modal-header\">\n <div class=\"d-flex align-items-center gap-2\">\n <span class=\"entity-chip me-2\" :class=\"reportTypeClass(viewingReport)\">{{\n reportTypeLabel(viewingReport) }}</span>\n <strong style=\"color:#fff\">{{ viewingReport.title }}</strong>\n </div>\n <button type=\"button\" class=\"btn-close btn-close-white\" @click=\"closeViewer\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"view-grid\">\n <div class=\"view-item\"><label>Reference</label><span class=\"ref-mono\">{{\n viewingReport.entityRef ||\n '—' }}</span></div>\n <div class=\"view-item\"><label>Type</label><span>{{ reportTypeLabel(viewingReport) }}</span>\n </div>\n <div class=\"view-item\" v-if=\"viewingReport.manualCategory\"><label>Category</label><span>{{\n viewingReport.manualCategory }}</span></div>\n <div class=\"view-item\"><label>Submitted By</label><span>{{ viewingReport.submittedBy\n }}</span></div>\n <div class=\"view-item\"><label>Date</label><span>{{ viewingReport.date }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.vessel\"><label>Vessel / Location</label><span>{{\n viewingReport.vessel }}</span></div>\n <div class=\"view-item\"><label>Submitted At</label><span>{{\n formatDate(viewingReport.submittedAt)\n }}</span></div>\n <!-- Drill-specific meta -->\n <div class=\"view-item\" v-if=\"viewingReport.entity_subtype\"><label>Drill Type</label><span>{{\n viewingReport.entity_subtype }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_creator\"><label>Drill\n Master</label><span>{{\n viewingReport.entity_creator }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_duration\"><label>Duration</label><span>{{\n viewingReport.entity_duration }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_participants\">\n <label>Participants</label><span>{{\n viewingReport.entity_participants }}</span></div>\n </div>\n <div class=\"view-section\">\n <label>Findings / Summary</label>\n <div class=\"view-text\">{{ viewingReport.findings }}</div>\n </div>\n <div class=\"view-section\" v-if=\"viewingReport.correctiveActions\">\n <label>Corrective Actions</label>\n <div class=\"view-text\">{{ viewingReport.correctiveActions }}</div>\n </div>\n <div class=\"view-section\" v-if=\"getFilesForReport(viewingReport.id).length > 0\">\n <label>Attachments</label>\n <div class=\"attached-files mt-1\">\n <a v-for=\"f in getFilesForReport(viewingReport.id)\" :key=\"f.id\" :href=\"f.publicUrl\"\n target=\"_blank\" rel=\"noopener\" class=\"attached-chip attached-chip--link\">\n <i class=\"bi me-1\" :class=\"fileIcon(f.type)\"></i>{{ f.name }}\n <small class=\"text-muted ms-1\">({{ formatFileSize(f.size) }})</small>\n <i class=\"bi bi-box-arrow-up-right ms-1\" style=\"font-size:10px;\"></i>\n </a>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-danger btn-sm me-auto\" @click=\"requestDeleteReport(viewingReport.id)\">\n <i class=\"bi bi-trash\"></i> Delete\n </button>\n <button class=\"btn btn-secondary\" @click=\"closeViewer\">Close</button>\n <button class=\"btn btn-primary\" @click=\"downloadReport(viewingReport)\"\n :disabled=\"generatingPdf === viewingReport.id\">\n <span v-if=\"generatingPdf === viewingReport.id\"><span class=\"spinner-sm\"></span> Building\n ZIP…</span>\n <span v-else><i class=\"bi bi-file-zip me-1\"></i>Download ZIP</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Hidden file input for user folders (kept for legacy, no longer primary path) -->\n <input ref=\"fileInput\" type=\"file\" multiple style=\"display:none;\" @change=\"handleFileSelection\" />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'Reports',\n\n props: {\n reports: { type: Array, default: () => [] },\n reportFiles: { type: Array, default: () => [] },\n folders: { type: Array, default: () => [] },\n isLoading: { type: Boolean, default: false },\n isSubmitting: { type: Boolean, default: false },\n pendingContext: { type: Object, default: null },\n missingReports: { type: Array, default: () => [] },\n highlightRef: { type: String, default: null },\n },\n\n emits: [\n 'report-submit-requested',\n 'report-delete-requested',\n 'folder-create-requested',\n 'files-add-requested',\n 'file-remove-requested',\n 'folder-delete-requested',\n 'report-viewed',\n ],\n\n data() {\n return {\n activeTab: 'all',\n showNewFolderModal: false,\n newFolderName: '',\n selectedFolder: null,\n expandedFolders: [],\n\n showReportModal: false,\n showViewModal: false,\n viewingReport: null,\n highlightedRef: null,\n bannerDismissed: false,\n generatingPdf: null,\n\n drillChecklistQuestions: [\n 'Is the reaction of crew members satisfactory?',\n 'Is the equipment functioning properly?',\n 'Is the crew properly trained and ready?',\n 'Was debriefing conducted on completion of drill?',\n 'Is time log of various activities marked on checklist?',\n ],\n\n reportForm: this.emptyForm(),\n };\n },\n\n computed: {\n drillReports() { return this.reports.filter(r => r.entityType === 'drill'); },\n incidentReports() { return this.reports.filter(r => r.entityType === 'incident'); },\n manualReports() {\n return this.reports.filter(r =>\n r.entityType === 'manual' ||\n (!r.entityType && !r.entityRef?.startsWith('DRILL') && !r.entityRef?.startsWith('INC'))\n );\n },\n filteredReports() {\n switch (this.activeTab) {\n case 'drill': return this.drillReports;\n case 'incident': return this.incidentReports;\n case 'manual': return this.manualReports;\n default: return this.reports;\n }\n },\n zipName() {\n const ref = this.reportForm.entity_ref || this.reportForm.manual_ref || this.reportForm.title;\n return (ref || 'report').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 50);\n },\n },\n\n watch: {\n pendingContext: {\n immediate: true,\n handler(ctx) {\n if (ctx) {\n this.reportForm.entity_type = ctx.entity_type;\n this.reportForm.entity_id = ctx.entity_id;\n this.reportForm.entity_ref = ctx.entity_ref;\n this.reportForm.entity_label = ctx.title;\n this.reportForm.title = ctx.title || `Report — ${ctx.entity_ref}`;\n this.reportForm.report_type = 'qhse';\n this.reportForm.entity_creator = ctx.entity_creator;\n this.reportForm.entity_objectives = ctx.entity_objectives;\n this.reportForm.entity_subtype = ctx.entity_subtype;\n this.reportForm.entity_duration = ctx.entity_duration;\n this.reportForm.entity_participants = ctx.entity_participants;\n if (ctx.entity_type === 'incident' && ctx.entity_objectives) {\n this.reportForm.findings = ctx.entity_objectives;\n }\n }\n },\n },\n highlightRef: {\n immediate: true,\n handler(ref) {\n if (ref) {\n this.highlightedRef = ref;\n this.$nextTick(() => this.scrollToReport(ref));\n }\n },\n },\n isSubmitting(val, prev) {\n if (prev === true && val === false) {\n this.showReportModal = false;\n this.resetForm();\n }\n },\n },\n\n methods: {\n\n // ─── Helpers ────────────────────────────────────────────────────────────\n\n emptyForm() {\n return {\n report_type: 'qhse', manual_category: 'General', manual_ref: '',\n title: '', submittedBy: '', vessel: '', folderId: '', folderName: '',\n date: new Date().toISOString().split('T')[0],\n findings: '', correctiveActions: '', files: [],\n entity_type: '', entity_id: '', entity_ref: '', entity_label: '',\n entity_creator: '', entity_objectives: '', entity_subtype: '',\n entity_duration: '', entity_participants: null,\n selectedMissing: '',\n drillChecklist: [true, true, true, true, true],\n inc_consequences: '',\n inc_factors: '',\n inc_immediate_action: '',\n inc_direct_cause: '',\n inc_root_cause: '',\n inc_remarks: '',\n };\n },\n\n getFilesForReport(reportId) {\n return this.reportFiles.filter(f => f.report_id === reportId || f.reportId === reportId);\n },\n\n safeRef(report) {\n return (report.entityRef || report.title || 'report').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 60);\n },\n\n reportTypeClass(report) {\n const t = report?.entityType || report?.entity_type;\n if (t === 'drill') return 'drill';\n if (t === 'incident') return 'incident';\n return 'manual';\n },\n\n reportTypeLabel(report) {\n const t = report?.entityType || report?.entity_type;\n if (t === 'drill') return 'DRILL';\n if (t === 'incident') return 'INCIDENT';\n const cat = report?.manualCategory || report?.manual_category;\n return cat ? cat.toUpperCase() : 'MANUAL';\n },\n\n fileIcon(type) {\n if (!type) return 'bi-file-earmark';\n if (type.startsWith('image/')) return 'bi-file-earmark-image';\n if (type === 'application/pdf') return 'bi-file-earmark-pdf-fill';\n if (type.includes('word')) return 'bi-file-earmark-word';\n if (type.includes('sheet') || type.includes('excel')) return 'bi-file-earmark-excel';\n return 'bi-file-earmark';\n },\n\n ffiIconClass(file) {\n const t = file?.type || '';\n if (t.startsWith('image/')) return 'ffi-icon--img';\n if (t === 'application/pdf') return 'ffi-icon--pdf';\n return 'ffi-icon--generic';\n },\n\n // ─── Banner ─────────────────────────────────────────────────────────────\n dismissBanner() { this.bannerDismissed = true; },\n\n // ─── Report form ─────────────────────────────────────────────────────────\n\n openReportForm(type = 'qhse') {\n this.reportForm = this.emptyForm();\n this.reportForm.report_type = type;\n if (type === 'qhse' && this.pendingContext) {\n this.reportForm.entity_creator = this.pendingContext.entity_creator;\n this.reportForm.entity_objectives = this.pendingContext.entity_objectives;\n this.reportForm.entity_subtype = this.pendingContext.entity_subtype;\n this.reportForm.entity_duration = this.pendingContext.entity_duration;\n this.reportForm.entity_participants = this.pendingContext.entity_participants;\n this.reportForm.entity_type = this.pendingContext.entity_type;\n this.reportForm.entity_id = this.pendingContext.entity_id;\n this.reportForm.entity_ref = this.pendingContext.entity_ref;\n this.reportForm.entity_label = this.pendingContext.title;\n this.reportForm.title = this.pendingContext.title || `Report — ${this.pendingContext.entity_ref}`;\n if (this.pendingContext.entity_type === 'incident' && this.pendingContext.entity_objectives) {\n this.reportForm.findings = this.pendingContext.entity_objectives;\n }\n }\n this.showReportModal = true;\n },\n\n // ─── FIX: Open manual report modal pre-linked to a custom folder ─────────\n openManualReportForFolder(folder) {\n this.reportForm = this.emptyForm();\n this.reportForm.report_type = 'manual';\n this.reportForm.folderId = folder.id;\n this.reportForm.folderName = folder.name;\n this.showReportModal = true;\n },\n\n closeReportForm() { this.showReportModal = false; },\n\n clearEntityLink() {\n Object.assign(this.reportForm, {\n entity_type: '', entity_id: '', entity_ref: '', entity_label: '',\n entity_creator: '', entity_objectives: '', entity_subtype: '',\n entity_duration: '', entity_participants: null, selectedMissing: '',\n });\n },\n\n applyMissingSelection() {\n if (!this.reportForm.selectedMissing) return;\n const r = JSON.parse(this.reportForm.selectedMissing);\n this.reportForm.entity_type = r.entity_type;\n this.reportForm.entity_id = r.entity_id;\n this.reportForm.entity_ref = r.entity_ref;\n this.reportForm.entity_label = r.label;\n this.reportForm.entity_creator = r.entity_creator || '';\n this.reportForm.entity_objectives = r.entity_objectives || '';\n this.reportForm.entity_subtype = r.entity_subtype || '';\n this.reportForm.entity_duration = r.entity_duration || '';\n this.reportForm.entity_participants = r.entity_participants || null;\n if (!this.reportForm.title) this.reportForm.title = `Report — ${r.entity_ref}`;\n if (r.entity_type === 'incident' && r.entity_objectives && !this.reportForm.findings) {\n this.reportForm.findings = r.entity_objectives;\n }\n },\n\n requestSubmitReport() {\n if (!this.reportForm.title || !this.reportForm.submittedBy || !this.reportForm.findings) return;\n\n const isManual = this.reportForm.report_type === 'manual';\n\n // ── FIX: never send entity_id for manual reports ──────────────────────\n // The DB column has gen_random_uuid() as default, so omitting it\n // (or sending undefined) lets Postgres generate it automatically.\n // Sending null explicitly triggers the NOT NULL constraint violation.\n const payload = {\n entity_type: isManual ? 'manual' : (this.reportForm.entity_type || null),\n entity_ref: isManual\n ? (this.reportForm.manual_ref || null)\n : (this.reportForm.entity_ref || null),\n title: this.reportForm.title,\n submittedBy: this.reportForm.submittedBy,\n vessel: this.reportForm.vessel || null,\n date: this.reportForm.date,\n findings: this.reportForm.findings,\n correctiveActions: this.reportForm.correctiveActions || null,\n folderId: this.reportForm.folderId || null,\n folderName: this.reportForm.folderName || null,\n manual_category: isManual ? this.reportForm.manual_category : null,\n files: this.reportForm.files,\n entity_subtype: this.reportForm.entity_subtype || null,\n entity_creator: this.reportForm.entity_creator || null,\n entity_objectives: this.reportForm.entity_objectives || null,\n entity_duration: this.reportForm.entity_duration || null,\n entity_participants: this.reportForm.entity_participants || null,\n drill_checklist: [...this.reportForm.drillChecklist],\n inc_consequences: this.reportForm.inc_consequences || null,\n inc_factors: this.reportForm.inc_factors || null,\n inc_immediate_action:this.reportForm.inc_immediate_action || null,\n inc_direct_cause: this.reportForm.inc_direct_cause || null,\n inc_root_cause: this.reportForm.inc_root_cause || null,\n inc_remarks: this.reportForm.inc_remarks || null,\n };\n\n // Only include entity_id when it's a real linked entity (drill/incident)\n // For manual reports we omit the key entirely so the DB default fires\n if (!isManual && this.reportForm.entity_id) {\n payload.entity_id = this.reportForm.entity_id;\n }\n\n this.$emit('report-submit-requested', payload);\n },\n\n resetForm() { this.reportForm = this.emptyForm(); },\n\n highlightReport(entityRef) {\n this.highlightedRef = entityRef;\n this.$nextTick(() => this.scrollToReport(entityRef));\n setTimeout(() => { this.highlightedRef = null; }, 3000);\n },\n\n // ─── View ────────────────────────────────────────────────────────────────\n\n viewReport(report) {\n this.viewingReport = report;\n this.showViewModal = true;\n this.$emit('report-viewed', report);\n },\n\n closeViewer() {\n this.showViewModal = false;\n this.viewingReport = null;\n },\n\n requestDeleteReport(reportId) {\n this.closeViewer();\n this.$emit('report-delete-requested', reportId);\n },\n\n scrollToReport(ref) {\n this.$nextTick(() => {\n const el = this.$refs['report-' + ref];\n if (el) (Array.isArray(el) ? el[0] : el)?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n },\n\n jumpToFolder(report) {\n this.activeTab = 'folders';\n const key = 'auto-' + report.id;\n if (!this.expandedFolders.includes(key)) this.expandedFolders.push(key);\n this.$nextTick(() => {\n const ref = report.entityRef || report.id;\n const el = this.$refs['folder-' + ref];\n if (el) (Array.isArray(el) ? el[0] : el)?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n },\n\n // ─── Download ────────────────────────────────────────────────────────────\n\n async downloadReport(report) {\n this.generatingPdf = report.id;\n try {\n await this._loadLibraries();\n const attachments = this.getFilesForReport(report.id);\n const imageFiles = attachments.filter(f => f.type?.startsWith('image/'));\n const reportPdfBytes = await this._buildReportPdf(report, imageFiles);\n await this._buildAndDownloadZip(report, reportPdfBytes, attachments);\n } catch (err) {\n console.error('ZIP generation failed:', err);\n alert('Failed to generate download: ' + err.message);\n } finally {\n this.generatingPdf = null;\n }\n },\n\n async downloadReportPdfOnly(report) {\n this.generatingPdf = report.id + '-pdf';\n try {\n await this._loadLibraries();\n const imageFiles = this.getFilesForReport(report.id).filter(f => f.type?.startsWith('image/'));\n const reportPdfBytes = await this._buildReportPdf(report, imageFiles);\n const blob = new Blob([reportPdfBytes], { type: 'application/pdf' });\n this._triggerDownload(blob, `${this.safeRef(report)}_report.pdf`);\n } catch (err) {\n alert('Failed to generate PDF: ' + err.message);\n } finally {\n this.generatingPdf = null;\n }\n },\n\n async _loadLibraries() {\n if (!window.jspdf) await this._loadScript('https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js');\n if (!window.JSZip) await this._loadScript('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js');\n },\n\n _loadScript(src) {\n return new Promise((resolve, reject) => {\n if (document.querySelector(`script[src=\"${src}\"]`)) { resolve(); return; }\n const s = document.createElement('script');\n s.src = src; s.onload = resolve; s.onerror = reject;\n document.head.appendChild(s);\n });\n },\n\n // ─── PDF router ──────────────────────────────────────────────────────────\n\n async _buildReportPdf(report, imageFiles = []) {\n const type = report.entityType || report.entity_type;\n if (type === 'drill') return this._buildDrillPdf(report, imageFiles);\n if (type === 'incident') return this._buildIncidentPdf(report, imageFiles);\n return this._buildManualPdf(report, imageFiles);\n },\n\n // ─── DRILL PDF ───────────────────────────────────────────────────────────\n\n async _buildDrillPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const pageW = 210, margin = 15, contentW = pageW - margin * 2;\n let y = 0;\n\n const checkPage = (needed = 10) => {\n if (y + needed > 275) { doc.addPage(); y = 20; }\n };\n\n const sectionHeading = (text) => {\n checkPage(12);\n doc.setFillColor(26, 54, 107);\n doc.rect(margin, y, contentW, 7, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(8.5);\n doc.setFont('helvetica', 'bold');\n doc.text(text.toUpperCase(), margin + 3, y + 5);\n y += 10;\n doc.setTextColor(30, 30, 30);\n };\n\n const fieldRow = (label, value, labelWidth = 68) => {\n checkPage(7);\n doc.setFontSize(9);\n doc.setFont('helvetica', 'bold');\n doc.setTextColor(80, 90, 110);\n doc.text(label, margin + 2, y);\n doc.setFont('helvetica', 'normal');\n doc.setTextColor(20, 20, 20);\n doc.text(':', margin + labelWidth - 6, y);\n const valLines = doc.splitTextToSize(String(value || '—'), contentW - labelWidth - 4);\n doc.text(valLines, margin + labelWidth, y);\n y += Math.max(valLines.length * 5, 5) + 2;\n };\n\n // ── Header band ──────────────────────────────────────────────────────\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 0, pageW, 24, 'F');\n doc.setDrawColor(255, 200, 50);\n doc.setLineWidth(1.2);\n doc.line(margin, 23.4, pageW - margin, 23.4);\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(14);\n doc.setFont('helvetica', 'bold');\n doc.text('EMERGENCY DRILL REPORT', pageW / 2, 10, { align: 'center' });\n doc.setFontSize(8);\n doc.setFont('helvetica', 'normal');\n doc.setTextColor(200, 215, 240);\n doc.text('Quality, Health, Safety & Environment Management System', pageW / 2, 17, { align: 'center' });\n y = 30;\n\n if (report.entityRef) {\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(pageW - margin - 44, 26, 44, 8, 2, 2, 'F');\n doc.setTextColor(26, 54, 107);\n doc.setFontSize(8);\n doc.setFont('helvetica', 'bold');\n doc.text(report.entityRef, pageW - margin - 2, 31, { align: 'right' });\n doc.setTextColor(30, 30, 30);\n }\n\n // ── Vessel / Drill kind grid ──────────────────────────────────────────\n doc.setDrawColor(180, 190, 210);\n doc.setLineWidth(0.4);\n doc.rect(margin, y, contentW, 28, 'S');\n doc.line(margin + contentW / 2, y, margin + contentW / 2, y + 28);\n doc.line(margin, y + 14, margin + contentW / 2, y + 14);\n\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('VESSEL:', margin + 3, y + 6);\n doc.setFont('helvetica', 'bold'); doc.setTextColor(20, 20, 20); doc.setFontSize(10);\n doc.text(String(report.vessel || '—').toUpperCase(), margin + 22, y + 6);\n\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('DATE / PLACE:', margin + 3, y + 20);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(`${report.date || '—'} / ${report.vessel || '—'}`, margin + 33, y + 20);\n\n const hx = margin + contentW / 2 + 3;\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('KIND OF DRILL:', hx, y + 6);\n doc.setFontSize(11); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text(String(report.entity_subtype || '—').toUpperCase(), hx, y + 16);\n doc.setFontSize(7.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(120, 120, 120);\n doc.text('RELEVANT IMAGES/NOTES ARE ATTACHED', hx, y + 23);\n\n y += 32;\n\n // ── Drill details ─────────────────────────────────────────────────────\n sectionHeading('Drill Details');\n fieldRow('Drill Master / Conducted By', report.entity_creator);\n fieldRow('Duration', report.entity_duration);\n fieldRow('Objectives', report.entity_objectives);\n fieldRow('Submitted By', report.submittedBy);\n fieldRow('Submitted At', this.formatDate(report.submittedAt));\n y += 2;\n\n // ── Crew participation table ──────────────────────────────────────────\n const participantCount = report.entity_participants || 0;\n sectionHeading(`Crew Participation — ${participantCount} member${participantCount !== 1 ? 's' : ''} participated`);\n\n const crewLines = (() => {\n const raw = (report.findings || '').trim();\n if (/^CREW:/i.test(raw)) {\n const crewSection = raw.replace(/^CREW:\\s*/i, '').split(/\\n\\n/)[0];\n return crewSection.split(/[\\n,]+/).map(s => s.trim()).filter(Boolean);\n }\n const list = [];\n if (report.entity_creator) list.push(`${report.entity_creator} (Drill Master)`);\n if (report.submittedBy && report.submittedBy !== report.entity_creator)\n list.push(`${report.submittedBy} (Reporter)`);\n return list;\n })();\n\n checkPage(14);\n const colNr = margin, wNr = 12;\n const colName = margin + wNr, wName = contentW - wNr;\n\n doc.setFillColor(235, 240, 250);\n doc.rect(colNr, y, contentW, 7, 'F');\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text('NO.', colNr + 2, y + 5);\n doc.text('NAME / RANK', colName + 2, y + 5);\n y += 8;\n\n if (crewLines.length > 0) {\n crewLines.forEach((name, idx) => {\n checkPage(7);\n if (idx % 2 === 0) {\n doc.setFillColor(249, 250, 252);\n doc.rect(colNr, y - 1, contentW, 7, 'F');\n }\n doc.setFontSize(8.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n doc.text(String(idx + 1), colNr + 2, y + 4);\n doc.text(doc.splitTextToSize(name, wName - 4)[0], colName + 2, y + 4);\n y += 7;\n });\n } else {\n checkPage(8);\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(150, 150, 150);\n doc.text(\n `${participantCount} crew members participated — attach signed crew list with participants' signatures`,\n colName + 2, y + 4\n );\n y += 8;\n }\n y += 4;\n\n // ── Comments checklist ────────────────────────────────────────────────\n sectionHeading('Comments');\n const checkQuestions = [\n 'Is the reaction of crew members satisfactory?',\n 'Is the equipment functioning properly?',\n 'Is the crew properly trained and ready?',\n 'Was debriefing conducted on completion of drill?',\n 'Is time log of various activities marked on checklist?',\n ];\n const checkAnswers = (() => {\n const raw = report.drill_checklist || report.drillChecklist;\n if (Array.isArray(raw)) return raw;\n try { return JSON.parse(raw); } catch { return [true, true, true, true, true]; }\n })();\n checkQuestions.forEach((q, idx) => {\n checkPage(9);\n const yes = checkAnswers[idx] !== false;\n doc.setFontSize(8.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n doc.text(`${idx + 1}. ${q}`, margin + 3, y + 5);\n if (yes) {\n doc.setFillColor(212, 237, 218);\n doc.roundedRect(pageW - margin - 18, y + 1, 18, 6, 2, 2, 'F');\n doc.setTextColor(21, 87, 36); doc.setFont('helvetica', 'bold'); doc.setFontSize(7.5);\n doc.text('YES', pageW - margin - 9, y + 5.5, { align: 'center' });\n } else {\n doc.setFillColor(248, 215, 218);\n doc.roundedRect(pageW - margin - 18, y + 1, 18, 6, 2, 2, 'F');\n doc.setTextColor(114, 28, 36); doc.setFont('helvetica', 'bold'); doc.setFontSize(7.5);\n doc.text('NO', pageW - margin - 9, y + 5.5, { align: 'center' });\n }\n y += 9;\n });\n y += 3;\n\n // ── Drill scenario / findings ─────────────────────────────────────────\n const scenarioText = (() => {\n const raw = (report.findings || '').trim();\n if (/^CREW:/i.test(raw)) {\n const parts = raw.split(/\\n\\n+/);\n return parts.slice(1).join('\\n\\n').trim();\n }\n return raw;\n })();\n\n if (scenarioText) {\n sectionHeading('Drill Scenario & Findings');\n checkPage(10);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n const lines = doc.splitTextToSize(scenarioText, contentW - 6);\n lines.forEach(line => {\n checkPage(6);\n doc.text(line, margin + 3, y);\n y += 5.5;\n });\n y += 4;\n }\n\n // ── Corrective actions ────────────────────────────────────────────────\n if (report.correctiveActions) {\n sectionHeading('Suggestions for Improvement & Corrective Actions');\n checkPage(10);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n const lines = doc.splitTextToSize(report.correctiveActions, contentW - 6);\n lines.forEach(line => {\n checkPage(6);\n doc.text(line, margin + 3, y);\n y += 5.5;\n });\n y += 4;\n }\n\n // ── Remarks box ───────────────────────────────────────────────────────\n checkPage(22);\n sectionHeading('Remarks');\n doc.setDrawColor(180, 190, 210); doc.setLineWidth(0.3);\n doc.rect(margin, y, contentW, 16, 'S');\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(140, 140, 140);\n doc.text('Drill carried out satisfactorily.', margin + 3, y + 8);\n y += 20;\n\n // ── Embedded images ───────────────────────────────────────────────────\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n checkPage(30);\n sectionHeading('Attachment: ' + imgFile.name);\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n checkPage(ih + 5);\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n // ── Footer ────────────────────────────────────────────────────────────\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(7.5); doc.setFont('helvetica', 'normal');\n doc.text(`Emergency Drill Report · Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── INCIDENT PDF ────────────────────────────────────────────────────────\n\n async _buildIncidentPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const pageW = 210, margin = 15, contentW = pageW - margin * 2;\n let y = 0;\n\n const checkPage = (needed = 10) => {\n if (y + needed > 275) { doc.addPage(); y = 20; }\n };\n\n const labelledBox = (label, text, minHeight = 18) => {\n const bodyText = text ? doc.splitTextToSize(String(text), contentW - 6) : [];\n const textH = bodyText.length * 5.5;\n const boxH = Math.max(minHeight, textH + 14);\n checkPage(boxH + 4);\n\n doc.setDrawColor(140, 150, 165);\n doc.setLineWidth(0.35);\n doc.rect(margin, y, contentW, boxH, 'S');\n\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(70, 80, 100);\n const labelLines = doc.splitTextToSize(label.toUpperCase(), contentW - 6);\n labelLines.forEach((ll, i) => doc.text(ll, margin + 3, y + 5 + i * 4));\n const labelH = labelLines.length * 4 + 2;\n\n doc.setDrawColor(200, 208, 220); doc.setLineWidth(0.2);\n doc.line(margin + 1, y + labelH + 2, margin + contentW - 1, y + labelH + 2);\n\n if (bodyText.length > 0) {\n doc.setFontSize(9.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n let ty = y + labelH + 7;\n bodyText.forEach(line => { doc.text(line, margin + 3, ty); ty += 5.5; });\n }\n\n y += boxH + 3;\n };\n\n // ── Header ────────────────────────────────────────────────────────────\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 0, pageW, 16, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(12); doc.setFont('helvetica', 'bold');\n const incLabel = (report.entity_subtype || report.entityType || 'INCIDENT').toUpperCase() + ' REPORT';\n doc.text(incLabel, margin, 10);\n doc.setFontSize(7.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(200, 215, 240);\n doc.text(`Ref: ${report.entityRef || '—'}`, pageW - margin, 8, { align: 'right' });\n doc.text(`Date: ${report.date || '—'}`, pageW - margin, 13, { align: 'right' });\n y = 20;\n\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('FORM NUMBER:', margin, y + 4);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(report.entityRef || '—', margin + 30, y + 4);\n doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('SUBMITTED BY:', pageW / 2, y + 4);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(report.submittedBy || '—', pageW / 2 + 28, y + 4);\n y += 10;\n\n const halfW = (contentW - 2) / 2;\n doc.setDrawColor(140, 150, 165); doc.setLineWidth(0.35);\n doc.rect(margin, y, halfW, 14, 'S');\n doc.rect(margin + halfW + 2, y, halfW, 14, 'S');\n\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('VESSEL NAME', margin + 3, y + 5);\n doc.text('SEVERITY / TYPE', margin + halfW + 5, y + 5);\n doc.setFontSize(10); doc.setFont('helvetica', 'bold'); doc.setTextColor(20, 20, 20);\n doc.text(String(report.vessel || '—'), margin + 3, y + 12);\n doc.text(\n `${report.entity_subtype || '—'} · ${report.severity || report.entity_subtype || '—'}`,\n margin + halfW + 5, y + 12\n );\n y += 18;\n\n doc.setDrawColor(140, 150, 165); doc.setLineWidth(0.35);\n doc.rect(margin, y, halfW, 10, 'S');\n doc.rect(margin + halfW + 2, y, halfW, 10, 'S');\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('MANAGEMENT OFFICE', margin + 3, y + 4);\n doc.text('DATE', margin + halfW + 5, y + 4);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text('—', margin + 3, y + 9);\n doc.text(report.date || '—', margin + halfW + 5, y + 9);\n y += 14;\n\n labelledBox('Description of Event', report.findings, 24);\n labelledBox(\n 'Possible Consequences\\n(e.g. Personal injury, damage, collision, grounding, fire, pollution etc.)',\n report.inc_consequences || null, 18\n );\n labelledBox(\n 'Relevant Factors / Conditions Surrounding the Event\\n(e.g. weather, lighting etc.)',\n report.inc_factors || null, 18\n );\n labelledBox('Immediate Action Taken', report.inc_immediate_action || null, 16);\n labelledBox(\n 'Direct Cause\\n(e.g. failure to follow procedures, inadequate or defective equipment etc.)',\n report.inc_direct_cause || null, 18\n );\n labelledBox(\n 'Root Cause\\n(e.g. lack of training, personal factors, job factors, control management factors, instructions not clear etc.)',\n report.inc_root_cause || null, 18\n );\n labelledBox('Action Taken on Board to Avoid Re-occurrence', report.correctiveActions || null, 18);\n labelledBox('Any Other Remarks', report.inc_remarks || null, 16);\n\n // ── Embedded images ───────────────────────────────────────────────────\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n checkPage(30);\n doc.setFillColor(235, 240, 250);\n doc.rect(margin, y, contentW, 7, 'F');\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text('ATTACHMENT: ' + imgFile.name, margin + 3, y + 5);\n y += 10;\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n checkPage(ih + 5);\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n checkPage(14);\n y += 4;\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(100, 110, 130);\n doc.text('Closed out on board / Office support required (delete as applicable)', margin, y);\n y += 8;\n\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(7.5); doc.setFont('helvetica', 'normal');\n doc.text(`Incident Report · Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── MANUAL PDF ──────────────────────────────────────────────────────────\n\n async _buildManualPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const margin = 18, pageW = 210, contentW = pageW - margin * 2;\n let y = 0;\n\n doc.setFillColor(30, 60, 114);\n doc.rect(0, 0, pageW, 28, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(16); doc.setFont('helvetica', 'bold');\n doc.text('QHSE REPORT', margin, 11);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal');\n doc.text(this.reportTypeLabel(report), margin, 18);\n if (report.entityRef) {\n doc.setFontSize(10); doc.setFont('helvetica', 'bold');\n doc.text(report.entityRef, pageW - margin, 18, { align: 'right' });\n }\n y = 36;\n\n doc.setTextColor(30, 60, 114); doc.setFontSize(13); doc.setFont('helvetica', 'bold');\n const titleLines = doc.splitTextToSize(report.title, contentW);\n doc.text(titleLines, margin, y);\n y += titleLines.length * 6 + 4;\n\n doc.setDrawColor(200, 210, 230); doc.line(margin, y, pageW - margin, y); y += 6;\n\n const meta = [\n ['Submitted By', report.submittedBy || '—'],\n ['Date', report.date || '—'],\n ['Vessel / Location', report.vessel || '—'],\n ['Submitted At', this.formatDate(report.submittedAt)],\n ];\n if (report.manualCategory) meta.splice(2, 0, ['Category', report.manualCategory]);\n\n const colW = contentW / 2;\n meta.forEach((item, idx) => {\n const col = idx % 2, row = Math.floor(idx / 2);\n const xo = margin + col * colW, yo = y + row * 10;\n doc.setFontSize(9); doc.setFont('helvetica', 'bold'); doc.setTextColor(100, 120, 160);\n doc.text(item[0].toUpperCase(), xo, yo);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(40, 40, 40);\n doc.text(String(item[1]), xo, yo + 4.5);\n });\n y += Math.ceil(meta.length / 2) * 10 + 6;\n\n const addSection = (heading, text) => {\n if (!text) return;\n if (y > 250) { doc.addPage(); y = 20; }\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(margin, y, contentW, 7, 1, 1, 'F');\n doc.setFont('helvetica', 'bold'); doc.setFontSize(9); doc.setTextColor(30, 60, 114);\n doc.text(heading.toUpperCase(), margin + 3, y + 5); y += 10;\n doc.setFont('helvetica', 'normal'); doc.setFontSize(10); doc.setTextColor(40, 40, 40);\n doc.splitTextToSize(text, contentW).forEach(line => {\n if (y > 272) { doc.addPage(); y = 20; }\n doc.text(line, margin, y); y += 5.5;\n });\n y += 4;\n };\n addSection('Findings / Summary', report.findings);\n addSection('Corrective Actions', report.correctiveActions);\n\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n if (y > 220) { doc.addPage(); y = 20; }\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(margin, y, contentW, 7, 1, 1, 'F');\n doc.setFont('helvetica', 'bold'); doc.setFontSize(9); doc.setTextColor(30, 60, 114);\n doc.text('ATTACHMENT: ' + imgFile.name, margin + 3, y + 5); y += 10;\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n if (y + ih > 272) { doc.addPage(); y = 20; }\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(30, 60, 114); doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(8); doc.setFont('helvetica', 'normal');\n doc.text(`Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── ZIP builder ─────────────────────────────────────────────────────────\n\n async _buildAndDownloadZip(report, reportPdfBytes, allAttachments) {\n const zip = new window.JSZip();\n const safeName = this.safeRef(report);\n const folder = zip.folder(safeName);\n\n folder.file(`${safeName}_report.pdf`, reportPdfBytes);\n\n for (const att of allAttachments) {\n try {\n let bytes;\n if (att.file instanceof File) {\n bytes = await att.file.arrayBuffer();\n } else if (att.publicUrl) {\n const resp = await fetch(att.publicUrl);\n if (!resp.ok) throw new Error(`HTTP ${resp.status}`);\n bytes = await resp.arrayBuffer();\n }\n if (bytes) folder.file(att.name, bytes);\n } catch (e) {\n console.warn(`Could not add ${att.name} to ZIP:`, e);\n }\n }\n\n const blob = await zip.generateAsync({\n type: 'blob',\n compression: 'DEFLATE',\n compressionOptions: { level: 6 },\n });\n this._triggerDownload(blob, `${safeName}.zip`);\n },\n\n _triggerDownload(blob, filename) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url; a.download = filename;\n document.body.appendChild(a); a.click(); document.body.removeChild(a);\n setTimeout(() => URL.revokeObjectURL(url), 5000);\n },\n\n _fileToDataUrl(file) {\n return new Promise((resolve, reject) => {\n const r = new FileReader();\n r.onload = () => resolve(r.result); r.onerror = reject;\n r.readAsDataURL(file);\n });\n },\n\n async _fetchImageAsDataUrl(url) {\n try {\n const resp = await fetch(url);\n return this._fileToDataUrl(await resp.blob());\n } catch { return null; }\n },\n\n // ─── File input (report form) ─────────────────────────────────────────────\n handleReportFileAttach(e) { this.reportForm.files.push(...Array.from(e.target.files)); e.target.value = ''; },\n handleReportFileDrop(e) { this.reportForm.files.push(...Array.from(e.dataTransfer.files)); },\n removeReportFile(i) { this.reportForm.files.splice(i, 1); },\n\n // ─── User-folder UI ───────────────────────────────────────────────────────\n requestCreateFolder() {\n if (!this.newFolderName.trim()) return;\n this.$emit('folder-create-requested', this.newFolderName.trim());\n this.newFolderName = '';\n this.showNewFolderModal = false;\n this.activeTab = 'folders';\n },\n\n // Legacy raw file picker — kept in case parent still uses files-add-requested directly\n selectFolder(folder) { this.selectedFolder = folder; this.$refs.fileInput.click(); },\n\n handleFileSelection(event) {\n const files = Array.from(event.target.files);\n if (!this.selectedFolder || files.length === 0) return;\n this.$emit('files-add-requested', {\n folderId: this.selectedFolder.id,\n files: files.map(file => ({\n id: Date.now() + Math.random(),\n name: file.name,\n size: file.size,\n type: file.type,\n file,\n addedAt: new Date(),\n })),\n });\n event.target.value = ''; this.selectedFolder = null;\n },\n\n toggleFolder(key) {\n const i = this.expandedFolders.indexOf(key);\n if (i > -1) this.expandedFolders.splice(i, 1); else this.expandedFolders.push(key);\n },\n\n // ─── Formatters ───────────────────────────────────────────────────────────\n formatFileSize(bytes) {\n if (!bytes) return '0 B';\n const k = 1024, sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\n },\n formatDate(d) {\n return d ? new Date(d).toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }) : '—';\n },\n },\n};\n</script>\n\n<style scoped>\n/* ─── Base ─── */\n.reports-container {\n padding: 24px;\n}\n\n/* ─── Banner ─── */\n.missing-banner {\n background: linear-gradient(135deg, #fff3cd, #ffe8a1);\n border: 1.5px solid #f0ad4e;\n border-radius: 10px;\n margin-bottom: 22px;\n overflow: hidden;\n}\n\n.missing-banner-inner {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 18px;\n flex-wrap: wrap;\n}\n\n.missing-icon {\n font-size: 22px;\n color: #856404;\n flex-shrink: 0;\n}\n\n.missing-content {\n flex: 1;\n min-width: 0;\n}\n\n.missing-content strong {\n font-size: 14px;\n color: #664d03;\n display: block;\n}\n\n.missing-content p {\n margin: 2px 0 0;\n font-size: 12px;\n color: #856404;\n}\n\n.ref-chip {\n background: #856404;\n color: #fff;\n border-radius: 4px;\n padding: 1px 8px;\n font-family: monospace;\n font-size: 12px;\n font-weight: 700;\n}\n\n.btn-dismiss {\n background: none;\n border: none;\n color: #856404;\n cursor: pointer;\n font-size: 15px;\n padding: 4px 6px;\n border-radius: 4px;\n transition: background .15s;\n}\n\n.btn-dismiss:hover {\n background: rgba(0, 0, 0, .08);\n}\n\n.slide-down-enter-active,\n.slide-down-leave-active {\n transition: all .25s;\n}\n\n.slide-down-enter-from,\n.slide-down-leave-to {\n opacity: 0;\n transform: translateY(-12px);\n}\n\n/* ─── Page Header ─── */\n.page-header {\n margin-bottom: 18px;\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 16px;\n}\n\n.page-title {\n font-size: 22px;\n font-weight: 700;\n color: #1e3c72;\n margin: 0;\n}\n\n.page-subtitle {\n font-size: 13px;\n color: #6c757d;\n margin: 2px 0 0;\n}\n\n.btn-group-split {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n/* ─── Tabs ─── */\n.tab-nav {\n display: flex;\n gap: 4px;\n margin-bottom: 20px;\n border-bottom: 2px solid #e9ecef;\n overflow-x: auto;\n}\n\n.tab-btn {\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n padding: 9px 16px;\n font-size: 13px;\n font-weight: 600;\n color: #6c757d;\n cursor: pointer;\n white-space: nowrap;\n margin-bottom: -2px;\n transition: all .2s;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.tab-btn:hover {\n color: #2a5298;\n}\n\n.tab-btn.active {\n color: #2a5298;\n border-bottom-color: #2a5298;\n}\n\n.tab-count {\n font-size: 10px;\n background: #e9ecef;\n color: #495057;\n border-radius: 10px;\n padding: 1px 7px;\n font-weight: 700;\n}\n\n.tab-count.drill {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.tab-count.incident {\n background: #f8d7da;\n color: #721c24;\n}\n\n.tab-count.manual {\n background: #e2e3f0;\n color: #383d72;\n}\n\n/* ─── Report Cards ─── */\n.report-cards {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-bottom: 24px;\n}\n\n.report-card {\n display: flex;\n align-items: center;\n gap: 12px;\n background: #fff;\n border: 1.5px solid #e9ecef;\n border-radius: 10px;\n padding: 12px 16px;\n transition: all .2s;\n position: relative;\n overflow: hidden;\n}\n\n.report-card:hover {\n border-color: #2a5298;\n box-shadow: 0 2px 10px rgba(42, 82, 152, .1);\n}\n\n.report-card--highlighted {\n border-color: #f0ad4e !important;\n background: #fffbf0 !important;\n box-shadow: 0 0 0 3px rgba(240, 173, 78, .25) !important;\n animation: flash-highlight 1.5s ease;\n}\n\n@keyframes flash-highlight {\n 0%, 100% { background: #fffbf0 }\n 50% { background: #fff3cd }\n}\n\n.rc-type-bar {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n}\n\n.rc-type-bar.drill { background: #17a2b8; }\n.rc-type-bar.incident { background: #dc3545; }\n.rc-type-bar.manual { background: #6f42c1; }\n\n.rc-badge {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.rc-badge.drill { background: #d1ecf1; color: #0c5460; }\n.rc-badge.incident { background: #f8d7da; color: #721c24; }\n.rc-badge.manual { background: #ede9f6; color: #383d72; }\n\n.rc-body {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n}\n\n.rc-ref {\n font-family: monospace;\n font-size: 12px;\n color: #2a5298;\n font-weight: 700;\n}\n\n.rc-title {\n font-size: 14px;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.rc-meta {\n font-size: 11px;\n color: #6c757d;\n margin-top: 2px;\n}\n\n.rc-files {\n font-size: 11px;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.rc-folder-pill {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 700;\n padding: 3px 10px;\n border-radius: 12px;\n cursor: pointer;\n border: 1.5px solid;\n transition: all .18s;\n white-space: nowrap;\n flex-shrink: 0;\n max-width: 170px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.rc-folder-pill.drill { background: #e8f7fa; border-color: #17a2b8; color: #0c5460; }\n.rc-folder-pill.incident { background: #fce8ea; border-color: #dc3545; color: #721c24; }\n.rc-folder-pill.manual { background: #f0ebfa; border-color: #6f42c1; color: #383d72; }\n.rc-folder-pill:hover { filter: brightness(.92); }\n\n.rc-actions {\n display: flex;\n gap: 5px;\n flex-shrink: 0;\n}\n\n.rc-btn {\n width: 30px;\n height: 30px;\n border: 1.5px solid #dee2e6;\n border-radius: 6px;\n background: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n transition: all .18s;\n text-decoration: none;\n color: #495057;\n}\n\n.rc-btn:disabled { opacity: .5; cursor: not-allowed; }\n.rc-btn--view:hover:not(:disabled) { background: #2a5298; color: #fff; border-color: #2a5298; }\n.rc-btn--download { color: #28a745; }\n.rc-btn--download:hover:not(:disabled) { background: #28a745; color: #fff; border-color: #28a745; }\n.rc-btn--danger { color: #dc3545; }\n.rc-btn--danger:hover:not(:disabled) { background: #dc3545; color: #fff; border-color: #dc3545; }\n\n/* ─── Folder context badge in modal header ─── */\n.folder-context-badge {\n display: inline-flex;\n align-items: center;\n font-size: 11px;\n font-weight: 600;\n background: rgba(255, 255, 255, .2);\n border: 1px solid rgba(255, 255, 255, .35);\n border-radius: 12px;\n padding: 2px 10px;\n margin-left: 10px;\n color: rgba(255, 255, 255, .9);\n}\n\n/* ─── Crew hint ─── */\n.crew-hint {\n background: #eef7ff;\n border: 1px solid #b8deff;\n border-radius: 7px;\n padding: 10px 14px;\n font-size: 12px;\n color: #0c5460;\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.crew-hint code {\n background: #d1ecf1;\n border-radius: 3px;\n padding: 1px 5px;\n font-size: 11px;\n color: #0c5460;\n}\n\n/* ─── Section Heading ─── */\n.section-heading {\n display: flex;\n align-items: center;\n font-size: 13px;\n font-weight: 700;\n color: #495057;\n margin-bottom: 12px;\n gap: 5px;\n}\n\n.section-count {\n background: #e9ecef;\n color: #495057;\n font-size: 10px;\n font-weight: 700;\n border-radius: 10px;\n padding: 1px 8px;\n}\n\n.section-hint {\n font-size: 11px;\n font-weight: 400;\n color: #adb5bd;\n margin-left: 2px;\n}\n\n/* ─── Folders list ─── */\n.folders-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.auto-folder-card {\n border: 1.5px solid #e9ecef;\n border-radius: 12px;\n background: #fff;\n overflow: hidden;\n transition: border-color .18s;\n}\n\n.auto-folder-card.drill { border-left: 4px solid #17a2b8; }\n.auto-folder-card.incident { border-left: 4px solid #dc3545; }\n.auto-folder-card.manual { border-left: 4px solid #6f42c1; }\n\n.auto-folder-card:hover,\n.auto-folder-card.is-open { border-color: #adb5bd; }\n\n.user-folder-card {\n border: 1.5px solid #e9ecef;\n border-left: 4px solid #f0ad4e;\n border-radius: 12px;\n background: #fff;\n overflow: hidden;\n transition: border-color .18s;\n}\n\n.user-folder-card:hover,\n.user-folder-card.is-open { border-color: #adb5bd; }\n\n.af-header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 18px;\n cursor: pointer;\n user-select: none;\n transition: background .15s;\n}\n\n.af-header:hover { background: #f8f9fa; }\n\n.af-icon-wrap {\n position: relative;\n flex-shrink: 0;\n}\n\n.af-folder-icon { font-size: 2.1rem; }\n\n.color--drill { color: #17a2b8; }\n.color--incident { color: #dc3545; }\n.color--manual { color: #6f42c1; }\n.color--user { color: #f0ad4e; }\n\n.af-count-badge {\n position: absolute;\n top: -5px;\n right: -8px;\n background: #2a5298;\n color: #fff;\n font-size: 9px;\n font-weight: 700;\n border-radius: 10px;\n padding: 1px 6px;\n min-width: 18px;\n text-align: center;\n line-height: 16px;\n}\n\n.af-meta {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.af-ref {\n font-family: monospace;\n font-size: 13px;\n font-weight: 700;\n color: #2a5298;\n}\n\n.af-title {\n font-size: 13px;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.af-sub {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-top: 1px;\n}\n\n.af-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.chevron-icon {\n font-size: .85rem;\n color: #6c757d;\n}\n\n.af-contents {\n border-top: 1px solid #e9ecef;\n padding: 12px 16px;\n background: #fafbff;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.folder-expand-enter-active,\n.folder-expand-leave-active {\n transition: all .2s ease;\n overflow: hidden;\n}\n\n.folder-expand-enter-from,\n.folder-expand-leave-to {\n opacity: 0;\n max-height: 0 !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.ffi {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 9px 12px;\n background: #fff;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: border-color .15s;\n}\n\n.ffi:hover { border-color: #adb5bd; }\n\n.ffi--report {\n border-color: #c5d0ee;\n background: #f5f7ff;\n cursor: pointer;\n}\n\n.ffi--report:hover { border-color: #2a5298; }\n\n.ffi-icon {\n width: 34px;\n height: 34px;\n border-radius: 7px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2rem;\n flex-shrink: 0;\n}\n\n.ffi-icon--pdf { background: #ffeaea; color: #dc3545; }\n.ffi-icon--img { background: #e8f5e9; color: #28a745; }\n.ffi-icon--generic { background: #e9ecef; color: #6c757d; }\n\n.ffi-meta {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.ffi-name {\n font-size: 13px;\n font-weight: 600;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ffi-sub { font-size: 11px; color: #6c757d; }\n\n.ffi-acts {\n display: flex;\n gap: 5px;\n flex-shrink: 0;\n}\n\n.ffi-empty {\n padding: 8px 2px;\n font-size: 12px;\n color: #6c757d;\n display: flex;\n align-items: center;\n}\n\n.af-zip-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 8px;\n border-top: 1px dashed #dee2e6;\n margin-top: 2px;\n}\n\n.af-zip-hint {\n font-size: 11px;\n color: #6c757d;\n font-family: monospace;\n}\n\n.mini-badge {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.mini-badge.drill { background: #d1ecf1; color: #0c5460; }\n.mini-badge.incident { background: #f8d7da; color: #721c24; }\n.mini-badge.manual { background: #ede9f6; color: #383d72; }\n\n/* ─── Modals ─── */\n.modal {\n display: none;\n position: fixed;\n z-index: 1050;\n inset: 0;\n background: rgba(0, 0, 0, .5);\n align-items: center;\n justify-content: center;\n}\n\n.modal.show { display: flex; }\n\n.modal-dialog {\n max-width: 500px;\n width: 95%;\n margin: 1.5rem auto;\n}\n\n.modal-dialog.modal-lg { max-width: 780px; }\n\n.modal-content {\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 10px 40px rgba(0, 0, 0, .25);\n overflow: hidden;\n}\n\n.modal-header {\n padding: 16px 22px;\n border-bottom: 1px solid #dee2e6;\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 10px;\n}\n\n.modal-body {\n padding: 22px;\n max-height: 70vh;\n overflow-y: auto;\n}\n\n.modal-footer {\n padding: 14px 22px;\n border-top: 1px solid #dee2e6;\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n align-items: center;\n}\n\n.rpt-modal-header {\n background: linear-gradient(135deg, #1e3c72, #2a5298);\n color: #fff;\n}\n\n.modal-type-toggle {\n display: flex;\n background: rgba(255, 255, 255, .15);\n border-radius: 6px;\n padding: 3px;\n gap: 2px;\n margin-left: auto;\n margin-right: 10px;\n}\n\n.type-toggle-btn {\n background: transparent;\n border: none;\n color: rgba(255, 255, 255, .7);\n font-size: 12px;\n font-weight: 600;\n padding: 4px 12px;\n border-radius: 4px;\n cursor: pointer;\n transition: all .2s;\n}\n\n.type-toggle-btn.active { background: #fff; color: #2a5298; }\n.type-toggle-btn:hover:not(.active) { color: #fff; background: rgba(255, 255, 255, .2); }\n\n.btn-close {\n background: transparent;\n border: none;\n font-size: 1.4rem;\n cursor: pointer;\n opacity: .6;\n color: inherit;\n}\n\n.btn-close:hover { opacity: 1; }\n\n/* ─── Report Form ─── */\n.rpt-entity-box {\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n padding: 14px 16px;\n margin-bottom: 4px;\n}\n\n.prefilled-entity {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.entity-chip {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.entity-chip.drill { background: #d1ecf1; color: #0c5460; }\n.entity-chip.incident { background: #f8d7da; color: #721c24; }\n.entity-chip.manual { background: #ede9f6; color: #383d72; }\n\n.input-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 14px;\n margin-bottom: 14px;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n margin-bottom: 14px;\n}\n\n.form-label {\n font-size: 13px;\n margin-bottom: 5px;\n color: #495057;\n}\n\n.form-hint {\n font-size: 10px;\n font-weight: 400;\n color: #adb5bd;\n margin-left: 8px;\n}\n\n.form-control {\n padding: 9px 12px;\n border: 1px solid #ced4da;\n border-radius: 6px;\n font-size: 14px;\n transition: border-color .2s;\n width: 100%;\n box-sizing: border-box;\n}\n\n.form-control:focus {\n outline: none;\n border-color: #2a5298;\n box-shadow: 0 0 0 3px rgba(42, 82, 152, .1);\n}\n\ntextarea.form-control { resize: vertical; min-height: 80px; }\nselect.form-control { cursor: pointer; }\n\n.file-drop-zone {\n border: 2px dashed #ced4da;\n border-radius: 8px;\n padding: 18px;\n text-align: center;\n cursor: pointer;\n transition: border-color .2s;\n min-height: 80px;\n}\n\n.file-drop-zone:hover { border-color: #2a5298; }\n\n.attached-files {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 10px;\n justify-content: center;\n}\n\n.attached-chip {\n background: #e9ecef;\n border-radius: 5px;\n padding: 3px 10px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.attached-chip--link {\n text-decoration: none;\n color: #2a5298;\n background: #eef2ff;\n border: 1px solid #c5d0ee;\n transition: background .15s;\n}\n\n.attached-chip--link:hover { background: #dce4f8; }\n\n.attached-chip button {\n background: none;\n border: none;\n cursor: pointer;\n color: #dc3545;\n padding: 0;\n font-size: 11px;\n}\n\n.zip-hint {\n background: #eef2ff;\n border: 1px solid #c5d0ee;\n border-radius: 7px;\n padding: 8px 14px;\n font-size: 12px;\n color: #2a5298;\n display: flex;\n align-items: center;\n margin-top: -6px;\n}\n\n/* ─── Report Viewer ─── */\n.view-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 14px;\n margin-bottom: 20px;\n}\n\n.view-item { display: flex; flex-direction: column; gap: 3px; }\n\n.view-item label {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: .05em;\n color: #6c757d;\n}\n\n.view-item span { font-size: 14px; color: #212529; }\n\n.ref-mono {\n font-family: monospace;\n font-size: 13px;\n color: #2a5298;\n font-weight: 700;\n}\n\n.view-section { margin-bottom: 18px; }\n\n.view-section label {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: .05em;\n color: #6c757d;\n display: block;\n margin-bottom: 6px;\n}\n\n.view-text {\n background: #f8f9fa;\n border-radius: 6px;\n padding: 12px 14px;\n font-size: 14px;\n line-height: 1.6;\n color: #212529;\n white-space: pre-wrap;\n}\n\n/* ─── Buttons ─── */\n.btn {\n padding: 9px 18px;\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all .2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.btn:disabled { opacity: .6; cursor: not-allowed; }\n.btn-primary { background: #2a5298; color: #fff; }\n.btn-primary:hover:not(:disabled) { background: #1e3c72; }\n.btn-success { background: #28a745; color: #fff; }\n.btn-success:hover:not(:disabled) { background: #218838; }\n.btn-secondary { background: #6c757d; color: #fff; }\n.btn-secondary:hover:not(:disabled) { background: #5a6268; }\n.btn-danger { background: #dc3545; color: #fff; }\n.btn-danger:hover:not(:disabled) { background: #c82333; }\n.btn-warning { background: #f0ad4e; color: #664d03; }\n.btn-warning:hover { background: #e0972e; }\n.btn-outline-primary { background: transparent; border: 1.5px solid #2a5298; color: #2a5298; }\n.btn-outline-primary:hover:not(:disabled) { background: #2a5298; color: #fff; }\n.btn-outline-secondary { background: transparent; border: 1.5px solid #6c757d; color: #6c757d; }\n.btn-outline-secondary:hover:not(:disabled) { background: #6c757d; color: #fff; }\n.btn-link { background: none; border: none; padding: 0; font-size: 13px; text-decoration: none; cursor: pointer; }\n.btn-sm { padding: 5px 12px; font-size: 12px; }\n\n/* ─── Loading / Spinners ─── */\n.loading-container { display: flex; flex-direction: column; align-items: center; padding: 40px 20px; }\n\n.spinner {\n border: 4px solid #f3f3f3;\n border-top: 4px solid #2a5298;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n margin-bottom: 14px;\n}\n\n.spinner-sm {\n display: inline-block;\n width: 14px;\n height: 14px;\n border: 2px solid rgba(255, 255, 255, .4);\n border-top-color: #fff;\n border-radius: 50%;\n animation: spin .7s linear infinite;\n}\n\n.spinner-xs {\n display: inline-block;\n width: 11px;\n height: 11px;\n border: 2px solid rgba(0, 0, 0, .15);\n border-top-color: #333;\n border-radius: 50%;\n animation: spin .7s linear infinite;\n}\n\n@keyframes spin { to { transform: rotate(360deg); } }\n\n/* ─── Utilities ─── */\n.fw-bold { font-weight: 700; }\n.fw-semibold { font-weight: 600; }\n.me-1 { margin-right: 4px; }\n.me-2 { margin-right: 8px; }\n.me-auto { margin-right: auto; }\n.ms-1 { margin-left: 4px; }\n.ms-2 { margin-left: 8px; }\n.mt-2 { margin-top: 8px; }\n.mt-3 { margin-top: 16px; }\n.mt-4 { margin-top: 24px; }\n.mb-0 { margin-bottom: 0; }\n.text-muted { color: #6c757d !important; }\n.text-danger { color: #dc3545 !important; }\n.text-success { color: #28a745 !important; }\n.text-primary { color: #2a5298 !important; }\n.text-warning { color: #f0ad4e !important; }\n.d-flex { display: flex; }\n.gap-2 { gap: 8px; }\n.justify-content-between { justify-content: space-between; }\n.text-center { text-align: center; }\n.empty-state { padding: 60px 20px; }\n\n/* ─── Incident Fields Box ─── */\n.incident-fields-box {\n background: #fff8f5;\n border: 1.5px solid #f5d0c0;\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 14px;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n\n.incident-fields-title {\n font-size: 13px;\n font-weight: 700;\n color: #7b2d1a;\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.field-hint { font-size: 11px; color: #adb5bd; margin-bottom: 4px; margin-top: -2px; }\n\n/* ─── Drill Checklist ─── */\n.drill-checklist-box {\n background: #f8faff;\n border: 1.5px solid #d0daf0;\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 14px;\n}\n\n.drill-checklist-title {\n font-size: 13px;\n font-weight: 700;\n color: #1e3c72;\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.checklist-hint { font-size: 11px; font-weight: 400; color: #adb5bd; margin-left: 4px; }\n\n.checklist-grid { display: flex; flex-direction: column; gap: 6px; }\n\n.checklist-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n border-radius: 7px;\n border: 1.5px solid #e2e8f0;\n background: #fff;\n cursor: pointer;\n transition: all .18s;\n user-select: none;\n}\n\n.checklist-item:hover { border-color: #2a5298; background: #f5f8ff; }\n.checklist-item.checked { border-color: #28a745; background: #f0fff4; }\n\n.checklist-checkbox input[type=\"checkbox\"] { display: none; }\n\n.custom-check {\n width: 22px;\n height: 22px;\n border-radius: 5px;\n border: 2px solid #ced4da;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 12px;\n transition: all .18s;\n}\n\n.checklist-item.checked .custom-check { background: #28a745; border-color: #28a745; color: #fff; }\n.checklist-item:not(.checked) .custom-check { background: #fff8f8; border-color: #dc3545; color: #dc3545; }\n\n.checklist-q { flex: 1; font-size: 13px; color: #212529; }\n\n.checklist-answer {\n font-size: 10px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 4px;\n flex-shrink: 0;\n}\n\n.answer-yes { background: #d4edda; color: #155724; }\n.answer-no { background: #f8d7da; color: #721c24; }\n\n@media (max-width: 640px) {\n .input-row { grid-template-columns: 1fr; }\n .btn-group-split { gap: 5px; }\n .btn { padding: 8px 12px; font-size: 12px; }\n .tab-btn { padding: 8px 10px; font-size: 12px; }\n .modal-type-toggle { display: none; }\n .rc-folder-pill { display: none; }\n .af-header { padding: 12px 14px; gap: 10px; }\n}\n</style>","<template>\n <div v-if=\"ready\">\n <div>\n <nav v-show=\"!showReport\">\n <button v-for=\"section in sections\" :key=\"section.id\" class=\"nav-btn\"\n :class=\"{ active: activeSection === section.id }\" @click=\"handleSectionClick(section)\">\n {{ section.icon }} {{ section.name }}\n </button>\n </nav>\n \n <div class=\"content\" v-show=\"!showReport\">\n <!-- Maintenance Tasks Form -->\n <section :class=\"['form-section', { active: activeSection === 'maintenance' }]\"\n v-show=\"activeSection === 'maintenance'\">\n <h2>🛠️ Maintenance Tasks</h2>\n <!-- Loading indicator -->\n <div class=\"loading-container\" v-if=\"isLoading\">\n <div class=\"loading-spinner\"></div>\n <p>Loading checklist...</p>\n </div>\n <form v-if=\"!isLoading\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h1>Maintenance Checklist</h1>\n <button v-if=\"showAddTaskButton\" class=\"btn btn-outline-custom\" @click.prevent=\"addTask()\">\n Manually Add Task\n <i class=\"fas fa-plus\"></i>\n </button>\n </div>\n\n <div class=\"progress-container\">\n <div class=\"progress-info\">\n Progress: {{ progress }}% ({{ completedCount.length }}/{{ checklists.length }})\n </div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" :style=\"{ width: progress + '%' }\"></div>\n </div>\n </div>\n\n <ul class=\"checklist\">\n <li v-for=\"checklist in checklists\" :key=\"checklist.id\" class=\"checklist-item\">\n <div class=\"checkbox\" :class=\"{ 'checked': checklist.completed }\"\n @click=\"toggleTask(checklist)\">\n <span v-if=\"checklist.completed\">✓</span>\n </div>\n <span class=\"task-text\" :class=\"{ 'completed': checklist.completed }\"\n @click=\"toggleTask(checklist)\">\n {{ checklist.text }}\n </span>\n <button v-if=\"showAddTaskButton\" class=\"delete-btn\" @click=\"deleteTask(checklist.id)\"\n title=\"Delete task\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path\n d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\">\n </path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </li>\n </ul>\n\n <div v-if=\"after\">\n <label>Upload Image Evidence</label>\n <ul class=\"checklist\">\n <li class=\"checklist-item\">\n <span class=\"task-text\">\n Image Evidence Already Uploaded\n </span>\n <button type=\"button\" class=\"delete-btn\" @click=\"deleteEvidence()\"\n title=\"Delete Image\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path\n d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\">\n </path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </li>\n </ul>\n </div>\n\n <div class=\"form-group\" v-else :key=\"refreshKey || 'default'\">\n <label>Upload Image Evidence</label>\n <p>You can only upload one image evidence here.</p>\n <div class=\"attachment-area\">\n <p>{{ fileText }}</p>\n <input type=\"file\" id=\"evidence-files\" class=\"file-input\" @change=\"handleImg\">\n <label for=\"evidence-files\" class=\"file-label\">Browse Files</label>\n </div>\n </div>\n\n <div class=\"status\" v-if=\"completedCount === checklists.length\">\n All tasks completed! ✅\n </div>\n\n <button class=\"reset-button\" @click.prevent=\"resetTasks\">{{ checklistButtonLabel }}</button>\n </div>\n </form>\n </section>\n\n <!-- Maintenance Schedule Form -->\n <section :class=\"['form-section', { active: activeSection === 'schedule' }]\"\n v-show=\"activeSection === 'schedule'\">\n <h2>📅 Maintenance Schedule</h2>\n <form>\n <div class=\"form-group\">\n <label for=\"task-name\">Task Name</label>\n <input type=\"text\" id=\"task-name\" v-model=\"form.taskName\" required>\n </div>\n\n <div class=\"form-group\">\n <label for=\"task-description\">Description</label>\n <textarea id=\"task-description\" v-model=\"form.description\" required></textarea>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"maintenance-type\">Maintenance Type</label>\n <select id=\"maintenance-type\" v-model=\"form.maintenanceType\" required>\n <option value=\"\">-- Select Type --</option>\n <option value=\"preventive\">Preventive</option>\n <option value=\"corrective\">Corrective</option>\n <option value=\"predictive\">Predictive</option>\n <option value=\"condition\">Condition-Based</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label for=\"component\">Component/System</label>\n <select id=\"component\" v-model=\"form.component\" required>\n <option value=\"\">-- Select Component --</option>\n <option value=\"engine\">Engine</option>\n <option value=\"hull\">Hull</option>\n <option value=\"electronics\">Electronics</option>\n <option value=\"deck\">Deck Machinery</option>\n <option value=\"plumbing\">Plumbing</option>\n <option value=\"electrical\">Electrical</option>\n <option value=\"hvac\">HVAC</option>\n <option value=\"safety\">Safety Systems</option>\n <option value=\"Other\">Other</option>\n </select>\n <input v-if=\"form.component === 'Other'\" type=\"text\"\n placeholder=\"Enter custom component/system\" v-model=\"form.customComponent\"\n style=\"margin-top: 8px;\">\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"priority\">Priority</label>\n <select id=\"priority\" v-model=\"form.priority\" required>\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"critical\">Critical</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label for=\"status\">Status</label>\n <input type=\"text\" id=\"status\" v-model=\"form.status\" readonly>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"estimated-hours\">Estimated Hours</label>\n <input type=\"number\" id=\"estimated-hours\" v-model=\"form.estimatedHours\" min=\"0\" step=\"0.5\">\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"assigned-to\">Assigned To</label>\n <select id=\"assigned-to\" v-model=\"form.assignedTo\">\n <option value=\"\">-- Select Personnel --</option>\n <option v-for=\"member in vesselCrew\" :key=\"member.id\"\n :value=\"`${member.name} - ${member.role}`\">\n {{ member.name }} - {{ member.role }}\n </option>\n </select>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"recurrence-type\">Recurrence</label>\n <select id=\"recurrence-type\" v-model=\"form.recurrence\" required>\n <option value=\"once\">One-time</option>\n <option value=\"daily\">Daily</option>\n <option value=\"weekly\">Weekly</option>\n <option value=\"monthly\">Monthly</option>\n <option value=\"quarterly\">Quarterly</option>\n <option value=\"semi-annual\">Semi-annually</option>\n <option value=\"annual\">Annually</option>\n <option value=\"custom\">Custom Interval</option>\n </select>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"last-performed\">Last Performed Date</label>\n <input type=\"date\" id=\"last-performed\" v-model=\"form.lastPerformed\">\n </div>\n\n <div class=\"form-group\">\n <label for=\"next-due\">Due Date</label>\n <input type=\"date\" id=\"next-due\" v-model=\"form.nextDue\" required>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label>Notifications</label>\n <div class=\"checkbox-group\">\n <div class=\"checkbox-item\">\n <input type=\"checkbox\" id=\"notify-email\" v-model=\"form.notifyEmail\">\n <label for=\"notify-email\">Email Notification</label>\n </div>\n <div class=\"checkbox-item\">\n <input type=\"checkbox\" id=\"notify-sms\" v-model=\"form.notifySms\">\n <label for=\"notify-sms\">SMS Notification</label>\n </div>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"reminder-days\">Reminder (Days Before)</label>\n <select id=\"reminder-days\" v-model=\"form.reminderDays\">\n <option value=\"1\">1 day</option>\n <option value=\"3\">3 days</option>\n <option value=\"7\">1 week</option>\n <option value=\"14\">2 weeks</option>\n <option value=\"30\">1 month</option>\n </select>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"schedule-notes\">Notes</label>\n <textarea id=\"schedule-notes\" v-model=\"form.notes\"></textarea>\n </div>\n\n <div class=\"form-group\">\n <label>Attachments</label>\n <div class=\"attachment-area\">\n <p>{{ imgText }}</p>\n <input type=\"file\" id=\"maintenance-files\" class=\"file-input\" @change=\"handleFiles\" multiple>\n <label for=\"maintenance-files\" class=\"file-label\">Browse Files</label>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn btn-primary\" @click.prevent=\"saveSchedule\"\n :disabled=\"isSaving\">\n {{ isSaving ? 'Saving...' : 'Save Schedule' }}\n </button>\n </div>\n </form>\n </section>\n\n <!-- Inventory Form -->\n <section :class=\"['form-section', { active: activeSection === 'inventory' }]\"\n v-show=\"activeSection === 'inventory'\">\n <h2>All Maintenance</h2>\n <div class=\"task-table-wrapper\">\n <!-- Filters and Controls -->\n <div class=\"table-controls\">\n <div class=\"filters\">\n <button :class=\"{ active: activeFilter === 'due' }\" @click=\"setFilter('due')\">Due</button>\n <button :class=\"{ active: activeFilter === 'all' }\" @click=\"setFilter('all')\">All</button>\n <button :class=\"{ active: activeFilter === 'completed' }\"\n @click=\"setFilter('completed')\">Completed</button>\n <input type=\"text\" v-model=\"searchQuery\" placeholder=\"Search...\" />\n </div>\n </div>\n\n <!-- Task Table -->\n <table class=\"task-table\">\n <thead>\n <tr>\n <th>Equipment</th>\n <th>Task Name</th>\n <th>Assigned To</th>\n <th>Intervals</th>\n <th>Remaining</th>\n <th>Next Due</th>\n <th>Status</th>\n <th>Action</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"task in filteredTasks\" :key=\"task.id\">\n <td>{{ task.component }}</td>\n <td>{{ task.taskName }}</td>\n <td>{{ task.assignedTo }}</td>\n <td>{{ task.recurrence }}</td>\n <td>{{ task.remainingDays }}</td>\n <td>{{ task.nextDue }}</td>\n <td>\n <span :class=\"['status-badge', task.status.toLowerCase().replace(' ', '-')]\">\n {{ task.status }}\n </span>\n </td>\n <td>\n <button @click=\"printMaintenance(task.component)\" v-if=\"task.status === 'Completed'\"\n class=\"status-action\">Print</button>\n <button @click=\"showMaintenance(task.component)\" v-else\n class=\"status-action\">Start</button>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Empty schedule -->\n <div v-if=\"!tasks.length\">\n <div class=\"alert alert-primary\" role=\"alert\">\n <h4 class=\"alert-heading\">Such Empty!!!</h4>\n <p>You have no maintenance, because you have not scheduled any for this ship.</p>\n <hr>\n <p class=\"mb-0\">Navigate to the schedule tab, to start scheduling. Or click on this button\n to\n <button type=\"button\" class=\"btn btn-primary\"\n @click=\"switchSchedule()\">Schedule</button>\n </p>\n </div>\n </div>\n </div>\n </section>\n </div>\n\n <div class=\"report-container\" ref=\"reportContainer\" v-show=\"showReport\">\n <div class=\"header\">\n <div class=\"report-title\">MAINTENANCE TASK REPORT</div>\n </div>\n\n <div class=\"report-info\">\n <div class=\"info-box\">\n <div class=\"info-label\">Report Generated:</div>\n <div>{{ reportDate }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Report ID:</div>\n <div>{{ reportId }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Total Tasks:</div>\n <div>{{ maintenanceTasks.length }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Generated By:</div>\n <div>OceanHelm System</div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">📊 Task Summary</div>\n <div class=\"summary-grid\">\n <div class=\"summary-card\">\n <div class=\"summary-number\">1</div>\n <div class=\"summary-label\">Completed</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">0</div>\n <div class=\"summary-label\">Pending</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">0</div>\n <div class=\"summary-label\">Overdue</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">{{ totalEstimatedHours }}</div>\n <div class=\"summary-label\">Total Hours</div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">🔧 Maintenance Tasks</div>\n <div v-for=\"task in maintenanceTasks\" :key=\"task.taskName\"\n :class=\"['task-item', getTaskStatusClass(task)]\">\n\n <div class=\"task-header\">\n <div>\n <div class=\"task-title\">\n {{ task.taskName }}\n <span :class=\"['maintenance-type', 'type-' + task.maintenanceType]\">\n {{ task.maintenanceType }}\n </span>\n </div>\n <div class=\"task-component\">Component: {{ task.component }}</div>\n </div>\n <span :class=\"['status-badge', 'status-' + task.status.toLowerCase().replace(' ', '-')]\">\n {{ task.status }}\n </span>\n </div>\n\n <div class=\"task-details\">\n <div class=\"detail-item\">\n <div class=\"detail-label\">Assigned To</div>\n <div class=\"detail-value\">{{ task.assignedTo }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Estimated Hours</div>\n <div class=\"detail-value\">{{ task.estimatedHours }} hours</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Last Performed</div>\n <div class=\"detail-value\">{{ formatDate(task.lastPerformed) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Next Due</div>\n <div class=\"detail-value\">{{ formatDate(task.nextDue) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Recurrence</div>\n <div class=\"detail-value\">{{ task.recurrence }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Remaining Days</div>\n <div class=\"detail-value\">{{ task.remainingDays }} days</div>\n </div>\n </div>\n\n <div v-if=\"task.description\"\n style=\"margin: 15px 0; padding: 10px; background: white; border-radius: 5px;\">\n <div class=\"detail-label\">Description</div>\n <div class=\"detail-value\">{{ task.description }}</div>\n </div>\n\n <div v-if=\"task.notes\"\n style=\"margin: 15px 0; padding: 10px; background: white; border-radius: 5px;\">\n <div class=\"detail-label\">Notes</div>\n <div class=\"detail-value\">{{ task.notes }}</div>\n </div>\n\n <div v-if=\"task.checklistProgress && task.checklistProgress.length > 0\" class=\"checklist-progress\">\n <div class=\"detail-label\">Checklist Progress</div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" :style=\"{ width: getChecklistProgress(task) + '%' }\"></div>\n </div>\n <div style=\"font-size: 0.9em; color: #666; margin-top: 5px;\">\n {{ getCompletedChecklistItems(task) }} of {{ task.checklistProgress.length }} items\n completed\n ({{ getChecklistProgress(task) }}%)\n </div>\n <div class=\"checklist-items\">\n <div v-for=\"(item, index) in task.checklistProgress\" :key=\"index\" class=\"checklist-item\">\n <span class=\"checklist-icon\">{{ item.completed ? '✅' : '⭕' }}</span>\n <span>{{ item.text || 'Checklist Item ' + (index + 1) }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">📋 Recommendations</div>\n <div class=\"info-box\">\n <ul>\n <li v-for=\"recommendation in generateRecommendations()\" :key=\"recommendation\">\n {{ recommendation }}\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"signature-section\">\n <div class=\"signature-box\">\n <div><strong>Report Generated By</strong></div>\n <div style=\"margin-top: 10px; color: #666;\">OceanHelm Maintenance System</div>\n </div>\n <div class=\"signature-box\">\n <div><strong>Date</strong></div>\n <div style=\"margin-top: 10px; color: #666;\">{{ reportDate }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'OceanHelmMaintenance',\n props: {\n vesselInfo: {\n type: Object,\n required: true\n },\n tasks: {\n type: Array,\n default: () => []\n },\n vesselCrew: {\n type: Array,\n default: () => []\n },\n companyInfo: {\n type: Object,\n default: () => ({})\n },\n userProfile: {\n type: Object,\n required: true\n }\n },\n emits: [\n 'dashboard-navigate',\n 'load-checklist',\n 'save-schedule',\n 'update-task',\n 'upload-file',\n 'delete-evidence',\n 'access-denied',\n 'show-message',\n 'generate-checklist'\n ],\n data() {\n return {\n ready: true,\n isSaving: false,\n after: null,\n lastSection: '',\n currentTask: '',\n imgText: 'Choose file to upload',\n fileText: 'Drag and drop files here or',\n fileattachments: {},\n refreshKey: 0,\n activeSection: 'inventory',\n sections: [\n { id: 'schedule', name: 'Schedule', icon: '📅' },\n { id: 'inventory', name: 'All Maintenance', icon: '♻️' },\n {\n id: 'dashboard', \n name: 'Dashboard', \n icon: '☰', \n onClick: () => this.$emit('dashboard-navigate')\n }\n ],\n activeFilter: 'all',\n searchQuery: '',\n checklists: [],\n isLoading: false,\n form: {\n taskName: '',\n description: '',\n maintenanceType: '',\n component: '',\n priority: '',\n dueDate: '',\n estimatedHours: null,\n assignedTo: '',\n recurrence: '',\n lastPerformed: '',\n nextDue: '',\n notifyEmail: true,\n notifySms: true,\n reminderDays: '1',\n estimatedDuration: null,\n notes: '',\n status: 'Soon',\n email: '',\n remainingDays: null,\n attachments: {}\n },\n maintenanceTasks: [],\n showReport: false,\n reportDate: new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n }),\n reportId: 'MT-' + Math.random().toString(36).substr(2, 9).toUpperCase(),\n };\n },\n watch: {\n 'form.lastPerformed': 'calculateNextDue',\n 'form.recurrence': 'calculateNextDue',\n 'form.nextDue': function (newDate) {\n this.calculateRemainingDays();\n }\n },\n computed: {\n filteredTasks() {\n let result = [...this.tasks];\n if (this.activeFilter === 'all') {\n result = result.filter(task => task.status === 'Overdue' || task.status === 'Soon' || task.status === 'Completed');\n }\n else if (this.activeFilter === 'due') {\n result = result.filter(task => task.status === 'Overdue' || task.status === 'Soon');\n } else if (this.activeFilter === 'completed') {\n result = result.filter(task => task.status === 'Completed');\n }\n\n if (this.searchQuery) {\n const query = this.searchQuery.toLowerCase();\n result = result.filter(task =>\n task.component.toLowerCase().includes(query) ||\n task.taskName.toLowerCase().includes(query) ||\n task.assignedTo.toLowerCase().includes(query)\n );\n }\n\n return result;\n },\n completedCount() {\n return this.checklists.filter(item => item.completed);\n },\n progress() {\n return Math.round((this.completedCount.length / this.checklists.length) * 100);\n },\n checklistButtonLabel() {\n return this.lastSection === 'schedule' ? 'Approve Maintenance' : 'Save Checklist';\n },\n showAddTaskButton() {\n return this.checklistButtonLabel !== 'Save Checklist';\n },\n totalEstimatedHours() {\n return this.maintenanceTasks.reduce((total, task) => total + (task.estimatedHours || 0), 0);\n },\n },\n methods: {\n grantAccess(vessel) {\n const profile = this.userProfile;\n return profile.role === 'owner' || \n profile.role === 'staff' || \n (profile.role === 'captain' && profile.vessel === vessel);\n },\n deepAccess() {\n const profile = this.userProfile;\n if (profile.role === 'owner' || profile.role === 'captain') {\n return true;\n } else {\n this.$emit('access-denied', 'You do not have access to do this');\n return false;\n }\n },\n deleteTask(taskId) {\n this.checklists = this.checklists.filter(checklist => checklist.id !== taskId);\n },\n addTask(event) {\n if (event) event.preventDefault();\n \n this.$emit('show-message', {\n type: 'prompt',\n title: 'Add New Task',\n message: 'Enter the task details',\n callback: (result) => {\n if (result) {\n const newTask = {\n id: Date.now(),\n text: result,\n completed: false\n };\n this.checklists.push(newTask);\n }\n }\n });\n },\n setFilter(filter) {\n this.activeFilter = filter;\n },\n loadChecklist(taskComponent) {\n this.isLoading = true;\n this.$emit('generate-checklist', {\n component: taskComponent,\n callback: (checklist) => {\n this.checklists = checklist.map(item => ({\n ...item,\n completed: false\n }));\n this.isLoading = false;\n }\n });\n },\n showMaintenance(taskComponent) {\n if (this.deepAccess()) {\n const task = this.tasks.find(t => t.component === taskComponent);\n\n if (task && task.checklistProgress) {\n this.checklists = [...task.checklistProgress];\n } else {\n this.loadChecklist(taskComponent);\n }\n\n this.after = task?.after;\n this.currentTask = taskComponent;\n this.lastSection = 'inventory';\n this.activeSection = 'maintenance';\n }\n },\n printMaintenance(taskComponent) {\n const task = this.tasks.find(t => t.component === taskComponent);\n this.maintenanceTasks = [task];\n this.loadMaintenanceData();\n\n this.showReport = true;\n\n this.$nextTick(() => {\n setTimeout(() => {\n window.print();\n this.showReport = false;\n }, 100);\n });\n },\n switchSchedule() {\n if (this.deepAccess()) {\n this.activeSection = 'schedule';\n }\n },\n handleFiles(event) {\n this.imgText = event.target.files[0].name;\n this.form.attachments = {\n file: event.target.files[0]\n };\n },\n handleImg(event) {\n this.fileText = event.target.files[0].name;\n this.fileattachments = {\n file: event.target.files[0]\n };\n },\n validateForm() {\n const requiredFields = [\n 'taskName',\n 'description',\n 'maintenanceType',\n 'component',\n 'priority',\n 'estimatedHours',\n 'recurrence',\n 'lastPerformed',\n 'assignedTo'\n ];\n\n for (const field of requiredFields) {\n if (!this.form[field]) {\n this.$emit('show-message', {\n type: 'error',\n title: 'Missing info',\n message: `Please fill in the required field: ${field}`\n });\n return false;\n }\n }\n\n return true;\n },\n handleSectionClick(section) {\n this.activeSection = section.id;\n if (typeof section.onClick === 'function') {\n section.onClick();\n }\n },\n calculateNextDue() {\n const date = this.form.lastPerformed ? new Date(this.form.lastPerformed) : null;\n const recurrence = this.form.recurrence;\n\n if (!date || !recurrence) return;\n\n let nextDate = new Date(date);\n\n switch (recurrence) {\n case 'daily':\n nextDate.setDate(nextDate.getDate() + 1);\n break;\n case 'weekly':\n nextDate.setDate(nextDate.getDate() + 7);\n break;\n case 'monthly':\n nextDate.setMonth(nextDate.getMonth() + 1);\n break;\n case 'quarterly':\n nextDate.setMonth(nextDate.getMonth() + 3);\n break;\n case 'semi-annual':\n nextDate.setMonth(nextDate.getMonth() + 6);\n break;\n case 'annual':\n nextDate.setFullYear(nextDate.getFullYear() + 1);\n break;\n case 'once':\n case 'custom':\n return;\n }\n\n this.form.nextDue = nextDate.toISOString().split('T')[0];\n },\n calculateRemainingDays() {\n if (!this.form.nextDue) {\n this.form.remainingDays = null;\n return;\n }\n\n const today = new Date();\n const nextDueDate = new Date(this.form.nextDue);\n\n today.setHours(0, 0, 0, 0);\n nextDueDate.setHours(0, 0, 0, 0);\n\n const diffTime = nextDueDate - today;\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n this.form.remainingDays = `${diffDays} Days`;\n },\n async saveSchedule() {\n this.isSaving = true;\n \n if (!this.validateForm()) {\n this.isSaving = false;\n return;\n }\n\n const taskData = { ...this.form };\n\n if (this.form.component === 'Other' && this.form.customComponent) {\n taskData.component = this.form.customComponent;\n }\n\n taskData.email = this.companyInfo.email;\n\n // Check for duplicate component\n const hasDuplicateComponent = this.tasks.some(task => task.component === taskData.component);\n\n if (hasDuplicateComponent) {\n this.$emit('show-message', {\n type: 'error',\n title: 'Duplicate Component',\n message: `A task with the component \"${taskData.component}\" already exists in maintenance`\n });\n this.isSaving = false;\n return;\n }\n\n delete taskData.customComponent;\n\n this.$emit('save-schedule', {\n taskData,\n file: taskData.attachments.file,\n callback: (success) => {\n this.isSaving = false;\n if (success) {\n this.loadChecklist(taskData.component);\n this.lastSection = 'schedule';\n this.currentTask = taskData.component;\n this.resetForm();\n this.activeSection = 'maintenance';\n }\n }\n });\n },\n resetForm() {\n this.form = {\n taskName: '',\n description: '',\n maintenanceType: '',\n component: '',\n priority: '',\n dueDate: '',\n estimatedHours: null,\n assignedTo: '',\n recurrence: '',\n lastPerformed: '',\n nextDue: '',\n notifyEmail: true,\n notifySms: true,\n reminderDays: '1',\n estimatedDuration: null,\n notes: '',\n status: 'Soon',\n remainingDays: null,\n attachments: {}\n };\n },\n toggleTask(task) {\n task.completed = !task.completed;\n },\n async resetTasks() {\n const allCompleted = this.checklists.every(item => item.completed);\n const status = allCompleted ? 'Completed' : 'Soon';\n const updateData = {\n checklistProgress: [...this.checklists],\n status,\n component: this.currentTask,\n after: this.after\n };\n\n this.$emit('update-task', {\n updateData,\n file: this.fileattachments.file,\n tasks: this.tasks,\n callback: (success, updatedAfter) => {\n if (success) {\n if (updatedAfter) {\n this.after = updatedAfter;\n }\n this.fileattachments = {};\n this.fileText = 'Drag and drop files here or';\n this.refreshKey += 1;\n this.activeSection = 'inventory';\n }\n }\n });\n },\n loadMaintenanceData() {\n this.reportId = 'MT-' + Math.random().toString(36).substr(2, 9).toUpperCase();\n this.reportDate = new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n },\n formatDate(dateString) {\n if (!dateString) return 'N/A';\n return new Date(dateString).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n },\n getTaskStatusClass(task) {\n if (task.status === 'Completed') return 'completed';\n if (task.status === 'Overdue') return 'overdue';\n if (task.status === 'In Progress') return 'in-progress';\n return 'pending';\n },\n getChecklistProgress(task) {\n if (!task.checklistProgress || task.checklistProgress.length === 0) return 0;\n const completed = task.checklistProgress.filter(item => item.completed).length;\n return Math.round((completed / task.checklistProgress.length) * 100);\n },\n getCompletedChecklistItems(task) {\n if (!task.checklistProgress) return 0;\n return task.checklistProgress.filter(item => item.completed).length;\n },\n generateRecommendations() {\n return [\n 'Maintain regular communication with assigned technicians',\n 'Ensure all safety protocols are followed during maintenance activities',\n 'Update task progress and notes in real-time for accurate reporting'\n ];\n },\n deleteEvidence() {\n this.$emit('delete-evidence', {\n currentTask: this.currentTask,\n callback: (success) => {\n if (success) {\n this.after = null;\n this.fileText = 'Drag and drop files here or';\n this.fileattachments = {};\n this.refreshKey += 1;\n }\n }\n });\n }\n }\n};\n</script>\n<!--\n<style>\n.progress-container {\n margin-bottom: 20px;\n}\n\n.progress-bar {\n background-color: #e9ecef;\n border-radius: 4px;\n height: 10px;\n margin-top: 8px;\n}\n\n.progress-fill {\n background-color: #00a8e8;\n height: 100%;\n border-radius: 4px;\n transition: width 0.3s ease;\n}\n\n.checklist {\n list-style-type: none;\n padding: 0;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n padding: 10px 0;\n border-bottom: 1px solid #eee;\n cursor: pointer;\n}\n\n.checkbox {\n margin-right: 15px;\n width: 20px;\n height: 20px;\n border: 2px solid #00a8e8;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.checkbox.checked {\n background-color: #00a8e8;\n color: white;\n}\n\n.task-text {\n flex-grow: 1;\n}\n\n.task-text.completed {\n text-decoration: line-through;\n color: #6c757d;\n}\n\n.status {\n margin-top: 20px;\n font-weight: bold;\n text-align: center;\n}\n\n.reset-button {\n background-color: #005792;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n margin-top: 20px;\n font-weight: bold;\n}\n\n.btn-outline-custom {\n color: #005792;\n /* your custom text color */\n border: 2px solid #005792;\n /* your custom border color */\n background-color: transparent;\n padding: 8px 16px;\n border-radius: 4px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.3s, color 0.3s;\n}\n\n.btn-outline-custom:hover {\n background-color: #005792;\n /* custom hover background */\n color: white;\n /* text color on hover */\n}\n\n.reset-button:hover {\n background-color: #003d5b;\n}\n\nheader {\n background-color: var(--maitprimary);\n color: white;\n padding: 1rem;\n text-align: center;\n border-radius: 5px 5px 0 0;\n}\n\n/* \n*/\n\n.content {\n background-color: white;\n padding: 20px;\n border-radius: 0 0 5px 5px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n\n.form-section {\n display: none;\n animation: fadeIn 0.5s;\n}\n\n.form-section.active {\n display: block;\n}\n\n.form-row {\n margin-bottom: 15px;\n}\n\n.form-group {\n margin-bottom: 20px;\n}\n\nlabel {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n color: var(--dark);\n}\n\ninput,\nselect,\ntextarea {\n width: 100%;\n padding: 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 16px;\n}\n\n.input-group {\n display: flex;\n gap: 10px;\n}\n\n.input-group>div {\n flex: 1;\n}\n\ntextarea {\n height: 120px;\n resize: vertical;\n}\n\n/* \n.btn {\n padding: 10px 20px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 16px;\n font-weight: bold;\n transition: background-color 0.3s;\n}*/\n\n.btn-primary {\n background-color: var(--maitprimary);\n color: white;\n}\n\n.btn-primary:hover {\n background-color: var(--dark);\n}\n\n.btn-success {\n background-color: var(--success);\n color: white;\n}\n\n.btn-success:hover {\n background-color: #219653;\n}\n\n.action-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 20px;\n}\n\n.status-badge {\n display: inline-block;\n padding: 5px 10px;\n border-radius: 15px;\n font-size: 14px;\n font-weight: bold;\n color: white;\n}\n\n.status-pending {\n background-color: var(--warning);\n}\n\n.status-progress {\n background-color: var(--accent);\n}\n\n.status-completed {\n background-color: var(--success);\n}\n\n.attachment-area {\n border: 2px dashed #ddd;\n padding: 20px;\n text-align: center;\n border-radius: 5px;\n margin-bottom: 20px;\n}\n\n.file-input {\n display: none;\n}\n\n.file-label {\n display: inline-block;\n padding: 10px 20px;\n background-color: var(--accent);\n color: white;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n}\n\n.file-label:hover {\n background-color: var(--maitsecondary);\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.form-section h3 {\n margin-top: 30px;\n margin-bottom: 15px;\n color: var(--maitsecondary);\n}\n\n.checkbox-group {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin-top: 10px;\n}\n\n.checkbox-item {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.checkbox-item input {\n width: auto;\n}\n\n.status-badge {\n padding: 0.3em 0.6em;\n border-radius: 4px;\n color: white;\n font-weight: bold;\n font-size: 0.85rem;\n}\n\n.status-action {\n padding: 0.3em 0.6em;\n border-radius: 4px;\n color: white;\n font-weight: bold;\n font-size: 0.85rem;\n background-color: var(--maitprimary);\n}\n\n.status-badge.overdue {\n background-color: red;\n}\n\n.status-badge.soon {\n background-color: orange;\n}\n\n/* Wrapper layout */\n.task-table-wrapper {\n font-family: 'Inter', sans-serif;\n padding: 1rem;\n}\n\n/* Controls section */\n.table-controls {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n flex-wrap: wrap;\n gap: 1rem;\n}\n\n.filters {\n display: flex;\n gap: 0.5rem;\n flex-wrap: wrap;\n}\n\n.filters button,\n.filters input {\n padding: 0.5rem 1rem;\n border-radius: 6px;\n border: 1px solid #ccc;\n background-color: #f5f5f5;\n font-weight: 500;\n cursor: pointer;\n}\n\n.filters button.active {\n background-color: #002f6c;\n color: white;\n}\n\n.filters input {\n border: 1px solid #bbb;\n}\n\n.filter-badge {\n background-color: #eee;\n color: #333;\n}\n\n/* Print and Add buttons */\n.table-controls>div:last-child button {\n padding: 0.5rem 1rem;\n border: 1px solid var(--maitprimary);\n border-radius: 6px;\n background-color: white;\n color: var(--maitprimary);\n ;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.table-controls>div:last-child button:last-child {\n background-color: var(--maitprimary);\n ;\n color: white;\n}\n\n/* Table */\n.task-table {\n width: 100%;\n border-collapse: collapse;\n box-shadow: 0 0 0 1px #ccc;\n}\n\n.task-table thead {\n background-color: var(--maitprimary);\n ;\n color: white;\n}\n\n.task-table th,\n.task-table td {\n padding: 0.75rem;\n text-align: left;\n border-bottom: 1px solid #eee;\n white-space: pre-line;\n /* so \\n works */\n}\n\n.task-table tbody tr:hover {\n background-color: #f9f9f9;\n}\n\n/* Status badges */\n.status-badge {\n padding: 0.3em 0.6em;\n border-radius: 6px;\n font-weight: bold;\n font-size: 0.85rem;\n color: white;\n display: inline-block;\n text-align: center;\n min-width: 90px;\n}\n\n.status-badge.complete {\n background-color: #4dffd0;\n}\n\n.status-badge.soon {\n background-color: #ffa500;\n}\n\n.status-badge.completed {\n background-color: #4caf50;\n}\n\n.delete-btn {\n background: none;\n border: none;\n color: #dc3545;\n cursor: pointer;\n padding: 6px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n opacity: 1;\n margin-left: 8px;\n flex-shrink: 0;\n transform: scale(1.1);\n}\n\n.checklist-item:hover .delete-btn {\n opacity: 1;\n}\n\n.delete-btn:hover {\n background-color: #dc3545;\n color: white;\n transform: scale(1.1);\n}\n\n.delete-btn:active {\n transform: scale(0.95);\n}\n\n.print-only-container {\n text-align: center;\n}\n\n.initial-print-btn {\n background: linear-gradient(135deg, #0066cc, #004499);\n color: white;\n border: none;\n padding: 20px 40px;\n font-size: 1.3em;\n border-radius: 12px;\n cursor: pointer;\n transition: all 0.3s ease;\n box-shadow: 0 6px 20px rgba(0, 102, 204, 0.3);\n display: flex;\n align-items: center;\n gap: 15px;\n margin: 0 auto;\n}\n\n.initial-print-btn:hover {\n background: linear-gradient(135deg, #004499, #003366);\n transform: translateY(-3px);\n box-shadow: 0 8px 25px rgba(0, 102, 204, 0.4);\n}\n\n.initial-print-btn:active {\n transform: translateY(0);\n}\n\n.company-branding {\n margin-bottom: 30px;\n}\n\n.company-logo {\n font-size: 3em;\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 10px;\n}\n\n.company-tagline {\n font-size: 1.1em;\n color: #666;\n}\n\n/* Report Styles - Hidden Initially */\n.report-container {\n display: none;\n max-width: 900px;\n margin: 0 auto;\n background: white;\n padding: 30px;\n border-radius: 10px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n}\n\n.header {\n text-align: center;\n border-bottom: 3px solid #0066cc;\n padding-bottom: 20px;\n margin-bottom: 30px;\n}\n\n.report-logo {\n font-size: 2.5em;\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 10px;\n}\n\n.report-title {\n font-size: 1.8em;\n color: #333;\n margin: 10px 0;\n}\n\n.report-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.info-box {\n background: #f8f9fa;\n padding: 15px;\n border-radius: 8px;\n border-left: 4px solid #0066cc;\n}\n\n.info-box ul li {\n margin-left: 15px;\n}\n\n.info-label {\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 5px;\n}\n\n.section {\n margin-bottom: 30px;\n}\n\n.section-title {\n font-size: 1.3em;\n font-weight: bold;\n color: #0066cc;\n border-bottom: 2px solid #e9ecef;\n padding-bottom: 10px;\n margin-bottom: 15px;\n}\n\n.task-item {\n background: #f8f9fa;\n margin: 15px 0;\n padding: 20px;\n border-radius: 8px;\n border-left: 4px solid #28a745;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n}\n\n.task-item.pending {\n border-left-color: #ffc107;\n}\n\n.task-item.overdue {\n border-left-color: #dc3545;\n}\n\n.task-item.in-progress {\n border-left-color: #17a2b8;\n}\n\n.task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 15px;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.task-title {\n font-size: 1.2em;\n font-weight: bold;\n color: #333;\n}\n\n.task-component {\n font-size: 0.9em;\n color: #666;\n margin-top: 5px;\n}\n\n.status-badge {\n display: inline-block;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 0.8em;\n font-weight: bold;\n text-transform: uppercase;\n}\n\n.status-completed {\n background: #d4edda;\n color: #155724;\n}\n\n.status-pending {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-overdue {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-in-progress {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.task-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin: 15px 0;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n}\n\n.detail-label {\n font-weight: bold;\n font-size: 0.85em;\n color: #0066cc;\n margin-bottom: 3px;\n}\n\n.detail-value {\n font-size: 0.95em;\n color: #333;\n}\n\n.checklist-progress {\n margin-top: 15px;\n}\n\n.progress-bar {\n width: 100%;\n height: 20px;\n background: #e9ecef;\n border-radius: 10px;\n overflow: hidden;\n margin: 10px 0;\n}\n\n.progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #28a745, #20c997);\n transition: width 0.3s ease;\n}\n\n.checklist-items {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 10px;\n margin-top: 10px;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n padding: 8px;\n background: white;\n border-radius: 5px;\n font-size: 0.9em;\n}\n\n.checklist-icon {\n margin-right: 8px;\n font-size: 1.1em;\n}\n\n.summary-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 15px;\n margin: 20px 0;\n}\n\n.summary-card {\n background: white;\n padding: 20px;\n border-radius: 8px;\n text-align: center;\n border: 2px solid #e9ecef;\n}\n\n.summary-number {\n font-size: 2em;\n font-weight: bold;\n color: #0066cc;\n}\n\n.summary-label {\n font-size: 0.9em;\n color: #666;\n margin-top: 5px;\n}\n\n.signature-section {\n margin-top: 40px;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 40px;\n}\n\n.signature-box {\n padding-top: 10px;\n text-align: center;\n}\n\n.maintenance-type {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: bold;\n text-transform: uppercase;\n margin-left: 10px;\n}\n\n.type-corrective {\n background: #fff3cd;\n color: #856404;\n}\n\n.type-preventive {\n background: #d4edda;\n color: #155724;\n}\n\n.type-predictive {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n/* Print Styles */\n@media print {\n body {\n background: white;\n padding: 0;\n display: block;\n }\n\n .print-only-container {\n display: none !important;\n }\n\n .report-container {\n display: block !important;\n box-shadow: none;\n padding: 0;\n margin: 0;\n max-width: none;\n }\n}\n\nnav button {\n background-color: var(--maitsecondary);\n color: white;\n border: none;\n padding: 10px 20px;\n margin: 5px;\n cursor: pointer;\n font-weight: bold;\n border-radius: 3px;\n transition: background-color 0.3s;\n}\n\nnav button:hover,\nnav button.active {\n background-color: var(--maitprimary);\n}\n</style>\n-->","<template>\n <div class=\"activity-logs\">\n <!-- Controls -->\n <div class=\"a-controls\">\n <div class=\"a-search-box\">\n <input type=\"text\" placeholder=\"Search activities, users, or actions...\" :value=\"searchTerm\"\n @input=\"$emit('update:searchTerm', $event.target.value)\" />\n </div>\n <select class=\"filter-select\" :value=\"selectedFilter\"\n @change=\"$emit('update:selectedFilter', $event.target.value)\">\n <option value=\"all\">All Activities</option>\n <option value=\"login\">Login</option>\n <option value=\"logout\">Logout</option>\n <option value=\"create\">Create</option>\n <option value=\"update\">Update</option>\n <option value=\"delete\">Delete</option>\n <option value=\"view\">View</option>\n </select>\n <button class=\"btn btn-primary\" @click=\"$emit('refresh')\">🔄 Refresh</button>\n <button class=\"btn btn-secondary\" @click=\"$emit('download')\">📥 Download Report</button>\n </div>\n\n <!-- Stats -->\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <h3>Total Activities</h3>\n <div class=\"value\">{{ totalActivities }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Today's Activities</h3>\n <div class=\"value\">{{ todayActivities }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Active Users</h3>\n <div class=\"value\">{{ activeUsers }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Important</h3>\n <div class=\"badge-danger\">\n Logs are deleted at the end of every month, please download a copy\n </div>\n </div>\n </div>\n\n <!-- Logs Table -->\n <div class=\"logs-container\">\n <div v-if=\"loading\" class=\"loading\">\n <div class=\"spinner\"></div>\n <p>Loading activity logs...</p>\n </div>\n\n <div v-else-if=\"logs.length === 0\" class=\"no-logs\">\n <h3>No activities found</h3>\n <p>Try adjusting your search or filter criteria</p>\n </div>\n\n <div v-else>\n <table class=\"logs-table\">\n <thead>\n <tr>\n <th>Timestamp</th>\n <th>User Name</th>\n <th>Action</th>\n <th>Details</th>\n <th>Section</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"log in paginatedLogs\" :key=\"log.id\">\n <td>{{ formatDate(log.timestamp) }}</td>\n <td>\n <div>{{ log.user_name }}</div>\n <small style=\"color: gray\">{{ log.email }}</small>\n </td>\n <td>\n <span class=\"activity-badge\" :class=\"getBadgeClass(log.action)\">\n {{ log.action }}\n </span>\n </td>\n <td>\n {{ log.details.status }}\n <div v-for=\"(change, key) in log.details.information\" :key=\"key\">\n <strong>{{ key }}: </strong>\n <small style=\"color: gray\">\n {{ change?.from ?? \"\" }} → {{ change?.to ?? change ?? \"\" }}\n </small>\n </div>\n </td>\n <td>{{ log.table_name }}</td>\n </tr>\n </tbody>\n </table>\n\n <!-- Pagination -->\n <div class=\"pagination\">\n <button @click=\"$emit('change-page', currentPage - 1)\" :disabled=\"currentPage === 1\">\n Previous\n </button>\n <button v-for=\"page in totalPages\" :key=\"page\" @click=\"$emit('change-page', page)\"\n :class=\"{ active: currentPage === page }\">\n {{ page }}\n </button>\n <button @click=\"$emit('change-page', currentPage + 1)\" :disabled=\"currentPage === totalPages\">\n Next\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ActivityLogs\",\n props: {\n loading: Boolean,\n searchTerm: String,\n selectedFilter: String,\n logs: Array,\n paginatedLogs: Array,\n totalActivities: Number,\n todayActivities: Number,\n activeUsers: Number,\n totalPages: Number,\n currentPage: Number,\n },\n emits: [\"update:searchTerm\", \"update:selectedFilter\", \"refresh\", \"download\", \"change-page\"],\n methods: {\n formatDate(timestamp) {\n return new Date(timestamp).toLocaleString();\n },\n getBadgeClass(action) {\n const classes = {\n login: \"badge-login\",\n logout: \"badge-logout\",\n create: \"badge-create\",\n update: \"badge-update\",\n delete: \"badge-delete\",\n view: \"badge-view\",\n };\n return classes[action] || \"badge-view\";\n },\n },\n};\n</script>\n\n<style>\n.a-header {\n background: linear-gradient(135deg, var(--dashprimary-color), var(--dashsecondary-color));\n color: white;\n padding: 2rem 0;\n margin-bottom: 2rem;\n border-radius: 12px;\n box-shadow: 0 10px 30px rgba(52, 153, 64, 0.3);\n}\n\n.a-header h1 {\n font-size: 2.5rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n text-align: center;\n}\n\n.a-header p {\n text-align: center;\n opacity: 0.9;\n font-size: 1.1rem;\n}\n\n.a-controls {\n display: flex;\n gap: 1rem;\n margin-bottom: 2rem;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.a-search-box {\n flex: 1;\n min-width: 250px;\n position: relative;\n}\n\n.a-search-box input {\n width: 100%;\n padding: 12px 16px;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n font-size: 1rem;\n transition: all 0.3s ease;\n}\n\n.a-search-box input:focus {\n outline: none;\n border-color: var(--dashsecondary-color);\n box-shadow: 0 0 0 3px rgba(52, 153, 64, 0.1);\n}\n\n.filter-select {\n padding: 12px 16px;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n font-size: 1rem;\n background: white;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: var(--dashsecondary-color);\n box-shadow: 0 0 0 3px rgba(52, 153, 64, 0.1);\n}\n\n.btn {\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-primary {\n background: var(--primary);\n color: white;\n}\n\n.btn-primary:hover {\n background: var(--primary-dark);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(52, 153, 64, 0.3);\n}\n\n.btn-secondary {\n background: var(--secondary);\n color: var(--dark);\n}\n\n.btn-secondary:hover {\n background: #e6a200;\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(244, 180, 0, 0.3);\n}\n\n.stats-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1.5rem;\n margin-bottom: 2rem;\n}\n\n.stat-card {\n background: white;\n padding: 1.5rem;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n transition: transform 0.3s ease;\n}\n\n.stat-card:hover {\n transform: translateY(-2px);\n}\n\n.stat-card h3 {\n color: var(--gray);\n font-size: 0.9rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 0.5rem;\n}\n\n.stat-card .value {\n font-size: 2rem;\n font-weight: 700;\n color: var(--dashsecondary-color);\n}\n\n.logs-container {\n background: white;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n}\n\n.logs-header {\n background: var(--light);\n padding: 1.5rem;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.logs-header h2 {\n color: var(--dark);\n font-size: 1.3rem;\n font-weight: 600;\n}\n\n.logs-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.logs-table th,\n.logs-table td {\n padding: 1rem;\n text-align: left;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.logs-table th {\n background: var(--light);\n font-weight: 600;\n color: var(--dark);\n font-size: 0.9rem;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.logs-table tr:hover {\n background: #f8f9fa;\n}\n\n.activity-badge {\n padding: 4px 12px;\n border-radius: 20px;\n font-size: 0.8rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.badge-login {\n background: var(--success);\n color: white;\n}\n\n.badge-logout {\n background: var(--gray);\n color: white;\n}\n\n.badge-create {\n background: var(--dashprimary-color);\n color: white;\n}\n\n.badge-update {\n background: var(--warning);\n color: white;\n}\n\n.badge-delete {\n background: var(--danger);\n color: white;\n}\n\n.badge-danger {\n color: var(--danger);\n}\n\n.badge-view {\n background: var(--maitsecondary);\n color: white;\n}\n\n.pagination {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 0.5rem;\n padding: 1.5rem;\n background: var(--light);\n}\n\n.pagination button {\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n background: white;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.pagination button:hover {\n background: var(--primary);\n color: white;\n border-color: var(--primary);\n}\n\n.pagination button.active {\n background: var(--primary);\n color: white;\n border-color: var(--primary);\n}\n\n.pagination button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.no-logs {\n text-align: center;\n padding: 3rem;\n color: var(--gray);\n}\n\n.no-logs h3 {\n font-size: 1.5rem;\n margin-bottom: 1rem;\n}\n\n.loading {\n text-align: center;\n padding: 3rem;\n color: var(--gray);\n}\n\n.spinner {\n border: 3px solid #f3f3f3;\n border-top: 3px solid var(--primary);\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n margin: 0 auto 1rem;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@media (max-width: 768px) {\n .a-controls {\n flex-direction: column;\n align-items: stretch;\n }\n\n .a-search-box {\n min-width: 100%;\n }\n\n .stats-grid {\n grid-template-columns: 1fr;\n }\n\n .logs-table {\n font-size: 0.9rem;\n }\n\n .logs-table th,\n .logs-table td {\n padding: 0.5rem;\n }\n}\n</style>","<template>\n <div class=\"crew-management\">\n <!-- Wave background -->\n <div class=\"wave-bg\" v-if=\"config.showWaveBackground\"></div>\n\n <div class=\"crew-section\">\n <div class=\"crew-section-header\">\n <h4 class=\"crew-subhead\">{{ sectionTitle }}</h4>\n <div class=\"header-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleToggleGuestForm\" v-if=\"canAddCrew\">\n {{ showGuestForm ? 'Cancel' : '+ Check-in Guest' }}\n </button>\n <button class=\"btn btn-primary\" @click=\"handleToggleAddForm\" v-if=\"canAddCrew\">\n {{ showAddForm ? 'Cancel' : '+ Add Crew Member' }}\n </button>\n </div>\n </div>\n\n <!-- Personnel Onboard Summary -->\n <div class=\"personnel-summary\" v-if=\"!showAddForm && !showGuestForm && !showTimesheet\">\n <div class=\"summary-header\">\n <h3><i class=\"bi bi-people-fill\"></i> Personnel Onboard Summary</h3>\n <div class=\"summary-date\">{{ currentDate }}</div>\n </div>\n\n <div class=\"summary-cards\">\n <!-- Total Onboard -->\n <div class=\"summary-card total-card\">\n <div class=\"card-icon\">\n <i class=\"bi bi-people\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ totalOnboard }}</div>\n <div class=\"card-label\">Total Onboard</div>\n </div>\n </div>\n\n <!-- Crew Onboard -->\n <div class=\"summary-card crew-card\">\n <div class=\"card-icon\">\n <i class=\"bi bi-person-badge\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ crewOnboard }}</div>\n <div class=\"card-label\">Crew Onboard</div>\n </div>\n </div>\n\n <!-- Guests Onboard -->\n <div class=\"summary-card guest-card-summary\">\n <div class=\"card-icon\">\n <i class=\"bi bi-person-check\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ guestsOnboard }}</div>\n <div class=\"card-label\">Guests Onboard</div>\n </div>\n </div>\n </div>\n\n <!-- Breakdown by Vessel -->\n <div class=\"vessel-breakdown\" v-if=\"Object.keys(personnelByVessel).length > 0\">\n <h4>Breakdown by Vessel</h4>\n <div class=\"vessel-cards\">\n <div v-for=\"(data, vessel) in personnelByVessel\" :key=\"vessel\" class=\"vessel-card\">\n <div class=\"vessel-name\">{{ vessel }}</div>\n <div class=\"vessel-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Crew:</span>\n <span class=\"stat-value\">{{ data.crew }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Guests:</span>\n <span class=\"stat-value\">{{ data.guests }}</span>\n </div>\n <div class=\"stat-item total-stat\">\n <span class=\"stat-label\">Total:</span>\n <span class=\"stat-value\">{{ data.total }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Search and Filter - Hide when form is shown -->\n <div class=\"search-filter\" v-if=\"!showAddForm && !showGuestForm\">\n <input type=\"text\" placeholder=\"Search crew by name or role...\" v-model=\"searchQuery\" @input=\"handleSearch\">\n <select v-model=\"filterStatus\" @change=\"handleFilter\">\n <option value=\"all\">All Statuses</option>\n <option value=\"available\">Available</option>\n <option value=\"onduty\">On Duty</option>\n <option value=\"onboard\">On Board</option>\n <option value=\"assigned\">Assigned</option>\n <option value=\"unavailable\">Unavailable</option>\n </select>\n <button class=\"btn btn-secondary\" @click=\"showTimesheet = !showTimesheet\">\n <i :class=\"showTimesheet ? 'bi bi-grid-3x3-gap' : 'bi bi-table'\"></i>\n {{ showTimesheet ? 'Show Crew Cards' : 'Show Timesheet' }}\n </button>\n </div>\n\n <!-- Loading State - Hide when form is shown -->\n <div v-if=\"loading && !showAddForm && !showGuestForm\" class=\"loading-state\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading crew...</span>\n </div>\n <p>Loading crew members...</p>\n </div>\n\n <!-- Consolidated Timesheet View - Hide when form is shown -->\n <div v-else-if=\"showTimesheet && !showAddForm && !showGuestForm\" class=\"timesheet-view\">\n <div class=\"timesheet-header\">\n <h3><i class=\"bi bi-table\"></i> Crew Activity Timesheet</h3>\n <div class=\"timesheet-controls\">\n <select v-model=\"timesheetFilter\" @change=\"filterTimesheet\">\n <option value=\"all\">All Activities</option>\n <option value=\"Embarked\">Embarked Only</option>\n <option value=\"Deboarded\">Deboarded Only</option>\n <option value=\"Assigned\">Assigned Only</option>\n <option value=\"Status Changed\">Status Changes Only</option>\n </select>\n <input type=\"text\" v-model=\"timesheetSearch\" placeholder=\"Search timesheet...\"\n class=\"timesheet-search\">\n </div>\n </div>\n\n <div class=\"timesheet-summary\">\n <div class=\"summary-card\">\n <span class=\"summary-label\">Total Entries:</span>\n <span class=\"summary-value\">{{ filteredTimesheetEntries.length }}</span>\n </div>\n <div class=\"summary-card\">\n <span class=\"summary-label\">Crew Members:</span>\n <span class=\"summary-value\">{{ uniqueCrewCount }}</span>\n </div>\n <div class=\"summary-card\">\n <span class=\"summary-label\">Date Range:</span>\n <span class=\"summary-value\">{{ timesheetDateRange }}</span>\n </div>\n </div>\n\n <div v-if=\"filteredTimesheetEntries.length === 0\" class=\"no-results\">\n No timesheet entries found.\n </div>\n\n <div v-else class=\"timesheet-table-container\">\n <table class=\"timesheet-table\">\n <thead>\n <tr>\n <th @click=\"sortTimesheet('timestamp')\">\n Date/Time\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('crewName')\">\n Crew Member\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('role')\">\n Role\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('action')\">\n Action\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th>Vessel</th>\n <th>Duration</th>\n <th>Notes</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"entry in filteredTimesheetEntries\" :key=\"entry.uniqueId\"\n :class=\"getTimesheetRowClass(entry.action)\">\n <td class=\"timestamp-cell\">{{ formatLogDate(entry.timestamp) }}</td>\n <td class=\"crew-name-cell\">\n <strong>{{ entry.crewName }}</strong>\n </td>\n <td class=\"role-cell\">{{ entry.role }}</td>\n <td class=\"action-cell\">\n <span :class=\"['action-badge', getLogActionClass(entry.action)]\">\n <i :class=\"getLogIcon(entry.action)\"></i>\n {{ entry.action }}\n </span>\n </td>\n <td class=\"vessel-cell\">{{ entry.vessel || 'N/A' }}</td>\n <td class=\"duration-cell\">{{ entry.duration ? entry.duration + ' days' : 'N/A' }}</td>\n <td class=\"notes-cell\">{{ entry.notes || '-' }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Crew Grid - Hide when form is shown -->\n <div class=\"crew-grid\" v-else-if=\"filteredCrew.length > 0 && !showAddForm && !showGuestForm\">\n <div v-for=\"member in filteredCrew\" :key=\"member.id\" class=\"crew-card\"\n :class=\"{ 'unavailable': member.status === 'unavailable', 'guest-card': member.role === 'guest' }\">\n <div :class=\"['crew-status-badge', getStatusClass(member.status)]\">\n {{ formatStatus(member.status) }}\n </div>\n\n <div class=\"crew-name\">{{ member.name }}</div>\n <div class=\"crew-role\">{{ member.role === 'guest' ? 'Guest' : member.role }}</div>\n\n <!-- Certifications - Only show for non-guests -->\n <div class=\"crew-certifications\" v-if=\"member.role !== 'guest'\">\n <div v-for=\"cert in getApprovedCertifications(member)\" :key=\"cert.name\" class=\"certification-tag\"\n :class=\"getCertificationClass(cert.expiryDate)\" @click=\"handleViewCertification(cert, member)\">\n {{ cert.name }}\n </div>\n <!-- Optional: Show pending certifications count -->\n <div v-if=\"getPendingCertificationsCount(member) > 0\" class=\"certification-tag text-muted\">\n <i class=\"bi bi-clock-history\"></i> {{ getPendingCertificationsCount(member) }} pending\n </div>\n <i class=\"bi bi-patch-plus-fill icon\" @click=\"handleAddCertification(member)\"\n v-if=\"canEditCrew\"></i>\n </div>\n\n <!-- Crew Details - Different for guests -->\n <div v-if=\"member.role === 'guest'\">\n <div class=\"crew-availability\">\n <strong>Arrival Date:</strong> {{ member.nextShift || 'Not Recorded' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard:</strong> {{ member.onBoard || 'Not Specified' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Days Onboard:</strong> {{ getGuestDaysOnboard(member) }}\n </div>\n </div>\n <div v-else>\n <div class=\"crew-availability\">\n <strong>Embarkation Date:</strong> {{ getEmbarkationDate(member) }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard:</strong> {{ member.onBoard || 'Not Scheduled' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Days Onboard:</strong> {{ getDaysOnboard(member) }}\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"action-buttons\">\n <div v-if=\"member.vessel\" class=\"status-available crew-availability vcard\">\n Vessel: {{ member.vessel }}\n </div>\n <div v-else class=\"status-unavailable crew-availability vcard\">\n Vessel: Unassigned\n </div>\n\n <!-- Guest-specific actions -->\n <button class=\"btn btn-warning\" @click=\"handleCheckoutGuest(member)\"\n v-if=\"member.role === 'guest' && member.status === 'onboard'\">\n Check Out\n </button>\n\n <!-- Crew-specific actions -->\n <template v-if=\"member.role !== 'guest'\">\n <!-- Available: Show Assign Shift button -->\n <button class=\"btn btn-primary\" @click=\"handleAssignShift(member)\"\n v-if=\"canAssignShift && member.status === 'available'\">\n Assign Shift\n </button>\n <!-- On Duty: Show Check In button -->\n <button class=\"btn btn-success\" @click=\"handleCheckinCrew(member)\"\n v-if=\"canDeboardCrew && member.status === 'onduty'\">\n Check In\n </button>\n <!-- Onboard: Show Deboard button -->\n <button class=\"btn btn-warning\" @click=\"handleDeboardCrew(member)\"\n v-if=\"canDeboardCrew && member.status === 'onboard'\">\n Deboard\n </button>\n </template>\n <!-- Unavailable & Assigned: No buttons -->\n </div>\n\n <!-- Crew Log Button and Delete Icon -->\n <div class=\"crew-footer\">\n <div class=\"crew-log-toggle\" v-if=\"member.log && member.log.length > 0\">\n <button class=\"btn btn-link btn-sm log-toggle-btn\" @click=\"toggleCrewLog(member.id)\">\n <i class=\"bi bi-clock-history\"></i> View Log ({{ member.log.length }})\n </button>\n </div>\n <i class=\"bi bi-trash icon delete-icon\" @click=\"handleDeleteCrew(member)\" v-if=\"canDeleteCrew\"></i>\n </div>\n\n <!-- Crew Log Display -->\n <div v-if=\"expandedLogs.includes(member.id)\" class=\"crew-log\">\n <h4>Crew Activity Log</h4>\n <div v-for=\"(entry, index) in member.log\" :key=\"index\" class=\"log-entry\">\n <div class=\"log-date\">{{ formatLogDate(entry.timestamp) }}</div>\n <div class=\"log-action\" :class=\"getLogActionClass(entry.action)\">\n <i :class=\"getLogIcon(entry.action)\"></i>\n {{ entry.action }}\n </div>\n <div class=\"log-details\">\n <span v-if=\"entry.vessel\">Vessel: {{ entry.vessel }}</span>\n <span v-if=\"entry.duration\"> | Duration: {{ entry.duration }} days</span>\n </div>\n <div v-if=\"entry.notes\" class=\"log-notes\">{{ entry.notes }}</div>\n </div>\n </div>\n\n </div>\n </div>\n\n <!-- No Results - Hide when form is shown -->\n <div v-else-if=\"!loading && !showTimesheet && !showAddForm && !showGuestForm\" class=\"no-results\">\n {{ crew.length === 0 ? 'No crew members found.' : 'No crew members found matching your search criteria.' }}\n </div>\n\n <!-- Add Crew Form -->\n <div class=\"add-crew-form\" v-if=\"showAddForm\">\n <h2>Add New Crew Member</h2>\n\n <!-- Basic Information -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-name\">Full Name *</label>\n <input type=\"text\" id=\"crew-name\" v-model=\"newCrew.name\" :class=\"{ 'error': formErrors.name }\">\n <div v-if=\"formErrors.name\" class=\"error-message\">{{ formErrors.name }}</div>\n </div>\n <div class=\"form-group\">\n <label for=\"crew-role\">Role/Position *</label>\n <select id=\"crew-role\" v-model=\"newCrew.role\">\n <option v-for=\"role in availableRoles\" :key=\"role\" :value=\"role\">\n {{ role }}\n </option>\n <option value=\"Other\">Other</option>\n </select>\n <input v-if=\"newCrew.role === 'Other'\" type=\"text\" placeholder=\"Enter custom role\"\n v-model=\"newCrew.customRole\" style=\"margin-top: 8px;\">\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-email\">Email Address *</label>\n <input type=\"email\" id=\"crew-email\" v-model=\"newCrew.email\" :class=\"{ 'error': formErrors.email }\">\n <div v-if=\"formErrors.email\" class=\"error-message\">{{ formErrors.email }}</div>\n </div>\n </div>\n\n <!-- Certifications Section \n <div class=\"certification-section\">\n <h3>Certifications</h3>\n <div v-for=\"(cert, index) in newCrew.certifications\" :key=\"index\" class=\"certification-entry\">\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Certification Name *</label>\n <input type=\"text\" v-model=\"cert.name\" placeholder=\"Enter certification name\">\n </div>\n <div class=\"form-group\">\n <label>Expiry Date *</label>\n <input type=\"date\" v-model=\"cert.expiryDate\">\n </div>\n <div class=\"form-group\">\n <label>Certificate Image *</label>\n <div class=\"image-upload-wrapper\">\n <input type=\"file\" :id=\"'cert-image-' + index\"\n @change=\"handleCertImageUpload($event, index)\" accept=\"image/*,.pdf\"\n class=\"file-input\">\n <label :for=\"'cert-image-' + index\" class=\"file-input-label\">\n <i class=\"bi bi-cloud-upload\"></i>\n {{ cert.imagePreview ? 'Change File' : 'Upload File' }}\n </label>\n <div v-if=\"cert.imagePreview\" class=\"image-preview\">\n <img v-if=\"cert.imageType !== 'pdf'\" :src=\"cert.imagePreview\"\n alt=\"Certificate preview\">\n <div v-else class=\"pdf-preview\">\n <i class=\"bi bi-file-pdf\"></i>\n <span>{{ cert.imageName }}</span>\n </div>\n <button type=\"button\" class=\"btn-remove-image\" @click=\"removeCertImage(index)\">\n <i class=\"bi bi-x-circle\"></i>\n </button>\n </div>\n <small v-if=\"cert.imageName\" class=\"file-name\">{{ cert.imageName }}</small>\n </div>\n </div>\n <div class=\"form-group\" style=\"display: flex; align-items: flex-end;\">\n <button type=\"button\" class=\"btn btn-danger btn-sm\" @click=\"removeCertification(index)\"\n v-if=\"newCrew.certifications.length > 1\">\n Remove\n </button>\n </div>\n </div>\n </div>\n\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" @click=\"addCertificationEntry\">\n + Add More Certification\n </button>\n </div>\n -->\n\n <!-- Notes -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-notes\">Notes</label>\n <textarea id=\"crew-notes\" rows=\"3\" v-model=\"newCrew.notes\"></textarea>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleCancelForm\">Cancel</button>\n <button class=\"btn btn-primary\" @click=\"handleAddCrewMember\">Add Crew Member</button>\n </div>\n </div>\n\n <!-- Guest Check-in Form -->\n <div class=\"add-crew-form\" v-if=\"showGuestForm\">\n <h2>Check-in Guest</h2>\n\n <!-- Basic Information -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-name\">Full Name *</label>\n <input type=\"text\" id=\"guest-name\" v-model=\"newGuest.name\"\n :class=\"{ 'error': guestFormErrors.name }\">\n <div v-if=\"guestFormErrors.name\" class=\"error-message\">{{ guestFormErrors.name }}</div>\n </div>\n <div class=\"form-group\">\n <label for=\"guest-email\">Email Address</label>\n <input type=\"email\" id=\"guest-email\" v-model=\"newGuest.email\">\n </div>\n </div>\n\n <!-- Vessel Selection - Only show when not on a specific vessel page -->\n <div class=\"form-row\" v-if=\"!vesselName\">\n <div class=\"form-group\">\n <label for=\"guest-vessel\">Vessel *</label>\n <select id=\"guest-vessel\" v-model=\"newGuest.vessel\" :class=\"{ 'error': guestFormErrors.vessel }\">\n <option value=\"\">Select a vessel</option>\n <option v-for=\"vessel in availableVessels\" :key=\"vessel\" :value=\"vessel\">\n {{ vessel }}\n </option>\n </select>\n <div v-if=\"guestFormErrors.vessel\" class=\"error-message\">{{ guestFormErrors.vessel }}</div>\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-arrival\">Arrival Date *</label>\n <input type=\"date\" id=\"guest-arrival\" v-model=\"newGuest.arrivalDate\"\n :class=\"{ 'error': guestFormErrors.arrivalDate }\">\n <div v-if=\"guestFormErrors.arrivalDate\" class=\"error-message\">{{ guestFormErrors.arrivalDate }}\n </div>\n </div>\n <div class=\"form-group\">\n <label for=\"guest-expected-days\">Expected Days Onboard *</label>\n <input type=\"number\" id=\"guest-expected-days\" v-model=\"newGuest.expectedDays\" min=\"1\"\n :class=\"{ 'error': guestFormErrors.expectedDays }\">\n <div v-if=\"guestFormErrors.expectedDays\" class=\"error-message\">{{ guestFormErrors.expectedDays }}\n </div>\n </div>\n </div>\n\n <!-- Notes -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-notes\">Notes</label>\n <textarea id=\"guest-notes\" rows=\"3\" v-model=\"newGuest.notes\"\n placeholder=\"Purpose of visit, company affiliation, etc.\"></textarea>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleCancelGuestForm\">Cancel</button>\n <button class=\"btn btn-primary\" @click=\"handleCheckinGuest\">Check-in Guest</button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'CrewManagement',\n\n props: {\n crew: {\n type: Array,\n required: true,\n default: () => []\n },\n vesselName: {\n type: String,\n default: ''\n },\n currentCompanyId: {\n type: String,\n required: true,\n default: ''\n },\n userProfile: {\n type: Object,\n default: () => ({ role: 'viewer' })\n },\n loading: {\n type: Boolean,\n default: false\n },\n availableRoles: {\n type: Array,\n default: () => ['Captain', 'First Officer', 'Engineer', 'Deckhand', 'Mechanic', 'Cook']\n },\n config: {\n type: Object,\n default: () => ({\n showWaveBackground: true,\n enableAdd: true,\n enableEdit: true,\n enableDelete: true,\n enableAssignShift: true,\n enableCertificationManagement: true\n })\n }\n },\n\n emits: [\n 'crew-add',\n 'crew-edit',\n 'crew-delete',\n 'view-pending-certifications',\n 'crew-assign-shift',\n 'crew-deboard',\n 'crew-checkin',\n 'crew-add-certification',\n 'crew-view-certification',\n 'search-changed',\n 'filter-changed',\n 'access-denied',\n 'upload-cert-image',\n 'guest-checkin',\n 'guest-checkout'\n ],\n\n data() {\n return {\n searchQuery: '',\n filterStatus: 'all',\n showAddForm: false,\n showGuestForm: false,\n formErrors: {},\n guestFormErrors: {},\n expandedLogs: [],\n showTimesheet: false,\n timesheetFilter: 'all',\n timesheetSearch: '',\n timesheetSortKey: 'timestamp',\n timesheetSortOrder: 'desc',\n newCrew: {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'available',\n nextShift: '',\n certifications: [{\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n }],\n notes: '',\n email: '',\n onBoard: ''\n },\n newGuest: {\n name: '',\n email: '',\n vessel: '',\n arrivalDate: '',\n expectedDays: '',\n notes: ''\n }\n }\n },\n\n computed: {\n sectionTitle() {\n return this.vesselName ? `Current Crew for ${this.vesselName}` : 'All Fleet Crew'\n },\n\n getApprovedCertifications() {\n return (member) => {\n if (!member.certifications || member.certifications.length === 0) {\n return []\n }\n\n return member.certifications.filter(cert => {\n // If no verifications exist, certificate is not approved by anyone\n if (!cert.verifications || cert.verifications.length === 0) {\n return false\n }\n\n // Find verification for current company\n const companyVerification = cert.verifications.find(\n v => v.companyId === this.currentCompanyId\n )\n\n // Only show if approved by this company\n return companyVerification && companyVerification.status === 'approved'\n })\n }\n },\n\n filteredCrew() {\n return this.crew.filter(member => {\n const matchesSearch = this.searchQuery === '' ||\n member.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||\n member.role.toLowerCase().includes(this.searchQuery.toLowerCase()) ||\n (member.vessel && member.vessel.toLowerCase().includes(this.searchQuery.toLowerCase()))\n\n const matchesStatus = this.filterStatus === 'all' || member.status === this.filterStatus\n\n return matchesSearch && matchesStatus\n })\n },\n\n allTimesheetEntries() {\n const entries = []\n\n this.crew.forEach(member => {\n if (member.log && member.log.length > 0) {\n member.log.forEach((logEntry, index) => {\n entries.push({\n ...logEntry,\n crewName: member.name,\n role: member.role,\n crewId: member.id,\n uniqueId: `${member.id}-${index}`\n })\n })\n }\n })\n\n return entries.sort((a, b) => {\n const dateA = new Date(a.timestamp)\n const dateB = new Date(b.timestamp)\n return this.timesheetSortOrder === 'desc' ? dateB - dateA : dateA - dateB\n })\n },\n\n filteredTimesheetEntries() {\n let filtered = this.allTimesheetEntries\n\n if (this.timesheetFilter !== 'all') {\n filtered = filtered.filter(entry => entry.action === this.timesheetFilter)\n }\n\n if (this.timesheetSearch) {\n const search = this.timesheetSearch.toLowerCase()\n filtered = filtered.filter(entry =>\n entry.crewName.toLowerCase().includes(search) ||\n entry.role.toLowerCase().includes(search) ||\n entry.action.toLowerCase().includes(search) ||\n (entry.vessel && entry.vessel.toLowerCase().includes(search)) ||\n (entry.notes && entry.notes.toLowerCase().includes(search))\n )\n }\n\n return this.sortTimesheetEntries(filtered)\n },\n\n uniqueCrewCount() {\n const uniqueCrewIds = new Set(this.filteredTimesheetEntries.map(e => e.crewId))\n return uniqueCrewIds.size\n },\n\n timesheetDateRange() {\n if (this.filteredTimesheetEntries.length === 0) return 'N/A'\n\n const dates = this.filteredTimesheetEntries.map(e => new Date(e.timestamp))\n const minDate = new Date(Math.min(...dates))\n const maxDate = new Date(Math.max(...dates))\n\n const formatDate = (date) => date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n\n return `${formatDate(minDate)} - ${formatDate(maxDate)}`\n },\n\n canAddCrew() {\n return this.config.enableAdd && this.hasPermission('add')\n },\n\n canEditCrew() {\n return this.config.enableEdit && this.hasPermission('edit')\n },\n\n canDeleteCrew() {\n return this.config.enableDelete && this.hasPermission('delete')\n },\n\n canAssignShift() {\n return this.config.enableAssignShift && this.hasPermission('assign')\n },\n\n canDeboardCrew() {\n return this.config.enableAssignShift && this.hasPermission('assign')\n },\n\n // Current date for display\n currentDate() {\n return new Date().toLocaleDateString('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n })\n },\n\n // Total personnel onboard\n totalOnboard() {\n return this.crew.filter(member => member.status === 'onboard').length\n },\n\n // Crew members onboard (excluding guests)\n crewOnboard() {\n return this.crew.filter(member =>\n member.status === 'onboard' && member.role !== 'guest'\n ).length\n },\n\n // Guests onboard\n guestsOnboard() {\n return this.crew.filter(member =>\n member.status === 'onboard' && member.role === 'guest'\n ).length\n },\n\n // Personnel breakdown by vessel\n personnelByVessel() {\n const breakdown = {}\n\n this.crew.forEach(member => {\n if (member.status === 'onboard' && member.vessel) {\n if (!breakdown[member.vessel]) {\n breakdown[member.vessel] = {\n crew: 0,\n guests: 0,\n total: 0\n }\n }\n\n if (member.role === 'guest') {\n breakdown[member.vessel].guests++\n } else {\n breakdown[member.vessel].crew++\n }\n breakdown[member.vessel].total++\n }\n })\n\n return breakdown\n },\n\n // Get unique vessels from crew data for vessel selector\n availableVessels() {\n const vessels = new Set()\n this.crew.forEach(member => {\n if (member.vessel && member.vessel.trim() !== '') {\n vessels.add(member.vessel)\n }\n })\n return Array.from(vessels).sort()\n }\n },\n\n methods: {\n hasPermission(action) {\n const { role, vessel } = this.userProfile\n const isVessel = vessel === this.vesselName\n\n const permissions = {\n 'owner': ['add', 'edit', 'delete', 'assign', 'view'],\n 'staff': ['add', 'edit', 'assign', 'view'],\n 'captain': ['assign', 'view'],\n 'viewer': ['view']\n }\n\n let rolePermissions = permissions[role] || []\n\n if (role === 'captain' && isVessel) {\n rolePermissions = [...rolePermissions, 'add']\n }\n\n return rolePermissions.includes(action)\n },\n\n /**\n * Get embarkation date based on crew member status\n * Returns N/A if status is not onboard, onduty, or assigned\n * @param {Object} member - The crew member\n * @returns {String} - Embarkation date or 'N/A'\n */\n getEmbarkationDate(member) {\n const validStatuses = ['onboard', 'onduty', 'assigned']\n if (!validStatuses.includes(member.status)) {\n return 'N/A'\n }\n return member.nextShift || 'Not Scheduled'\n },\n\n /**\n * Calculate days onboard from logs\n * Finds the most recent \"Onboard\" action and counts days from that timestamp\n * @param {Object} member - The crew member\n * @returns {String|Number} - Days onboard or 'N/A'\n */\n getDaysOnboard(member) {\n // Only calculate if member is currently onboard\n if (member.status !== 'onboard') {\n return 'N/A'\n }\n\n // Check if logs exist\n if (!member.log || member.log.length === 0) {\n return 'N/A'\n }\n\n // Find the most recent \"Onboard\" action\n // Logs are typically sorted by timestamp, but we'll search from the end to be safe\n let mostRecentOnboard = null\n\n for (let i = member.log.length - 1; i >= 0; i--) {\n if (member.log[i].action === 'Onboard') {\n mostRecentOnboard = member.log[i]\n break\n }\n }\n\n // If no \"Onboard\" action found, return N/A\n if (!mostRecentOnboard || !mostRecentOnboard.timestamp) {\n return 'N/A'\n }\n\n // Calculate days between onboard timestamp and now\n const onboardDate = new Date(mostRecentOnboard.timestamp)\n const today = new Date()\n const diffTime = Math.abs(today - onboardDate)\n const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24))\n\n return diffDays\n },\n\n /**\n * Calculate days onboard for guests from arrival date\n * @param {Object} member - The guest member\n * @returns {String|Number} - Days onboard or 'N/A'\n */\n getGuestDaysOnboard(member) {\n // Check if arrival date (nextShift) exists\n if (!member.nextShift) {\n return 'N/A'\n }\n\n // Only calculate if guest is currently onboard\n if (member.status !== 'onboard') {\n return 'N/A'\n }\n\n // Calculate days between arrival date and now\n const arrivalDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - arrivalDate)\n const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24))\n\n return diffDays\n },\n\n /**\n * Get count of pending certifications for a member\n * @param {Object} member - The crew member\n * @returns {Number} - Count of pending certifications\n */\n getPendingCertificationsCount(member) {\n if (!member.certifications || member.certifications.length === 0) {\n return 0\n }\n\n return member.certifications.filter(cert => {\n if (!cert.verifications || cert.verifications.length === 0) {\n return true // No verifications = pending\n }\n\n const companyVerification = cert.verifications.find(\n v => v.companyId === this.currentCompanyId\n )\n\n // Pending if: no verification OR verification is pending/rejected\n return !companyVerification ||\n companyVerification.status === 'pending'\n }).length\n },\n\n /**\n * Emit event when user clicks on pending certifications\n * This allows parent component to navigate to verification page\n */\n handleViewPendingCertifications(member) {\n this.$emit('view-pending-certifications', {\n memberId: member.id,\n memberName: member.name,\n companyId: this.currentCompanyId\n })\n },\n\n handleToggleAddForm() {\n if (!this.canAddCrew) {\n this.$emit('access-denied', { action: 'add crew', userProfile: this.userProfile })\n return\n }\n this.showAddForm = !this.showAddForm\n if (!this.showAddForm) {\n this.resetForm()\n }\n },\n\n handleToggleGuestForm() {\n if (!this.canAddCrew) {\n this.$emit('access-denied', { action: 'check-in guest', userProfile: this.userProfile })\n return\n }\n this.showGuestForm = !this.showGuestForm\n if (!this.showGuestForm) {\n this.resetGuestForm()\n }\n },\n\n handleCheckinGuest() {\n if (!this.validateGuestForm()) {\n return\n }\n\n const newGuest = {\n name: this.newGuest.name,\n role: 'guest',\n status: 'onboard',\n nextShift: this.newGuest.arrivalDate, // Store arrival date in nextShift\n onBoard: this.newGuest.expectedDays,\n email: this.newGuest.email || '',\n notes: this.newGuest.notes,\n vessel: this.vesselName || this.newGuest.vessel,\n certifications: []\n }\n\n this.$emit('guest-checkin', newGuest)\n this.resetGuestForm()\n this.showGuestForm = false\n },\n\n handleCheckoutGuest(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'check out guest', userProfile: this.userProfile })\n return\n }\n\n let duration = null\n if (member.nextShift) {\n const arrivalDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - arrivalDate)\n duration = Math.ceil(diffTime / (1000 * 60 * 60 * 24))\n }\n\n this.$emit('guest-checkout', { member, duration })\n },\n\n handleCancelGuestForm() {\n this.showGuestForm = false\n this.resetGuestForm()\n },\n\n resetGuestForm() {\n this.newGuest = {\n name: '',\n email: '',\n vessel: '',\n arrivalDate: '',\n expectedDays: '',\n notes: ''\n }\n this.guestFormErrors = {}\n },\n\n validateGuestForm() {\n this.guestFormErrors = {}\n\n if (!this.newGuest.name || this.newGuest.name.trim() === '') {\n this.guestFormErrors.name = 'Guest name is required'\n }\n\n // Require vessel selection if not on a specific vessel page\n if (!this.vesselName && (!this.newGuest.vessel || this.newGuest.vessel.trim() === '')) {\n this.guestFormErrors.vessel = 'Please select a vessel'\n }\n\n if (!this.newGuest.arrivalDate) {\n this.guestFormErrors.arrivalDate = 'Arrival date is required'\n }\n\n if (!this.newGuest.expectedDays || this.newGuest.expectedDays <= 0) {\n this.guestFormErrors.expectedDays = 'Expected days onboard must be at least 1'\n }\n\n if (Object.keys(this.guestFormErrors).length > 0) {\n this.$emit('validation-error', this.guestFormErrors)\n return false\n }\n\n return true\n },\n\n handleSearch() {\n this.$emit('search-changed', this.searchQuery)\n },\n\n handleFilter() {\n this.$emit('filter-changed', this.filterStatus)\n },\n\n filterTimesheet() {\n // Trigger re-computation of filtered entries\n },\n\n sortTimesheet(key) {\n if (this.timesheetSortKey === key) {\n this.timesheetSortOrder = this.timesheetSortOrder === 'asc' ? 'desc' : 'asc'\n } else {\n this.timesheetSortKey = key\n this.timesheetSortOrder = 'asc'\n }\n },\n\n sortTimesheetEntries(entries) {\n const sorted = [...entries]\n\n sorted.sort((a, b) => {\n let valA, valB\n\n switch (this.timesheetSortKey) {\n case 'timestamp':\n valA = new Date(a.timestamp)\n valB = new Date(b.timestamp)\n break\n case 'crewName':\n valA = a.crewName.toLowerCase()\n valB = b.crewName.toLowerCase()\n break\n case 'role':\n valA = a.role.toLowerCase()\n valB = b.role.toLowerCase()\n break\n case 'action':\n valA = a.action.toLowerCase()\n valB = b.action.toLowerCase()\n break\n default:\n return 0\n }\n\n if (valA < valB) return this.timesheetSortOrder === 'asc' ? -1 : 1\n if (valA > valB) return this.timesheetSortOrder === 'asc' ? 1 : -1\n return 0\n })\n\n return sorted\n },\n\n getTimesheetRowClass(action) {\n return `timesheet-row-${action.toLowerCase().replace(/\\s+/g, '-')}`\n },\n\n async handleAddCrewMember() {\n if (!this.validateForm()) {\n return\n }\n\n // Check for incomplete certifications\n const hasIncompleteCert = this.newCrew.certifications.some(cert => {\n const hasName = cert.name.trim() !== ''\n const hasDate = cert.expiryDate !== ''\n const hasImage = cert.imageFile !== null\n\n // If any field is filled but not all, it's incomplete\n return (hasName || hasDate || hasImage) && !(hasName && hasDate && hasImage)\n })\n\n if (hasIncompleteCert) {\n this.$emit('incomplete-certification')\n return\n }\n\n // Filter only complete certifications (all three fields filled)\n const validCertifications = this.newCrew.certifications.filter(cert => {\n return cert.name.trim() !== '' && cert.expiryDate !== '' && cert.imageFile !== null\n })\n\n const finalRole = this.newCrew.role === 'Other' ? this.newCrew.customRole : this.newCrew.role\n\n // Upload all certification images first and get their URLs\n const certificationsWithUrls = await Promise.all(\n validCertifications.map(async (cert, index) => {\n // Emit and wait for the upload to complete\n const uploadResult = await this.uploadCertificationImage(cert.imageFile, this.newCrew.email)\n\n return {\n name: cert.name,\n expiryDate: cert.expiryDate,\n imageName: cert.imageName,\n imageType: cert.imageType,\n imageUrl: uploadResult.publicUrl // Add the public URL here\n }\n })\n )\n\n const newMember = {\n name: this.newCrew.name,\n role: finalRole,\n status: 'unavailable',\n certifications: certificationsWithUrls,\n notes: this.newCrew.notes,\n vessel: this.vesselName,\n email: this.newCrew.email,\n onBoard: this.newCrew.onBoard,\n nextShift: this.newCrew.nextShift\n }\n\n this.$emit('crew-add', newMember)\n this.resetForm()\n this.showAddForm = false\n },\n\n // Add this helper method to handle the upload:\n async uploadCertificationImage(file, email) {\n // Return a promise that resolves when upload completes\n return new Promise((resolve, reject) => {\n this.$emit('upload-cert-image', {\n file,\n email,\n callback: (result) => {\n if (result.error) {\n reject(result.error)\n } else {\n resolve(result)\n }\n }\n })\n })\n },\n\n handleCancelForm() {\n this.showAddForm = false\n this.resetForm()\n },\n\n handleDeleteCrew(member) {\n if (!this.canDeleteCrew) {\n this.$emit('access-denied', { action: 'delete crew', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-delete', member)\n },\n\n handleAssignShift(member) {\n if (!this.canAssignShift) {\n this.$emit('access-denied', { action: 'assign shift', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-assign-shift', member)\n },\n\n handleDeboardCrew(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'deboard crew', userProfile: this.userProfile })\n return\n }\n\n let duration = null\n if (member.nextShift) {\n const embarkDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - embarkDate)\n duration = Math.ceil(diffTime / (1000 * 60 * 60 * 24))\n }\n\n this.$emit('crew-deboard', { member, duration })\n },\n\n handleCheckinCrew(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'check in crew', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-checkin', member)\n },\n\n toggleCrewLog(memberId) {\n const index = this.expandedLogs.indexOf(memberId)\n if (index > -1) {\n this.expandedLogs.splice(index, 1)\n } else {\n this.expandedLogs.push(memberId)\n }\n },\n\n handleAddCertification(member) {\n if (!this.canEditCrew) {\n this.$emit('access-denied', { action: 'add certification', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-add-certification', member)\n },\n\n handleViewCertification(certification, member) {\n this.$emit('crew-view-certification', { certification, member })\n },\n\n resetForm() {\n this.newCrew = {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'Unavailable',\n nextShift: '',\n certifications: [{\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n }],\n notes: '',\n email: '',\n onBoard: ''\n }\n this.formErrors = {}\n },\n\n validateForm() {\n this.formErrors = {}\n\n const requiredFields = {\n name: 'Full Name',\n email: 'Email Address'\n }\n\n Object.keys(requiredFields).forEach(field => {\n if (!this.newCrew[field] || this.newCrew[field].trim() === '') {\n this.formErrors[field] = `${requiredFields[field]} is required`\n }\n })\n\n if (this.newCrew.email && !this.isValidEmail(this.newCrew.email)) {\n this.formErrors.email = 'Please enter a valid email address'\n }\n\n if (this.newCrew.role === 'Other' && (!this.newCrew.customRole || this.newCrew.customRole.trim() === '')) {\n this.formErrors.customRole = 'Custom role is required when \"Other\" is selected'\n }\n\n // Emit validation errors if any exist\n if (Object.keys(this.formErrors).length > 0) {\n this.$emit('validation-error', this.formErrors)\n return false\n }\n\n return true\n },\n\n isValidEmail(email) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n },\n\n addCertificationEntry() {\n this.newCrew.certifications.push({\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n })\n },\n\n removeCertification(index) {\n this.newCrew.certifications.splice(index, 1)\n },\n\n handleCertImageUpload(event, index) {\n const file = event.target.files[0]\n if (!file) return\n\n const cert = this.newCrew.certifications[index]\n cert.imageFile = file\n cert.imageName = file.name\n cert.imageType = file.type.includes('pdf') ? 'pdf' : 'image'\n\n // Create preview for images\n if (cert.imageType === 'image') {\n const reader = new FileReader()\n reader.onload = (e) => {\n cert.imagePreview = e.target.result\n }\n reader.readAsDataURL(file)\n } else {\n cert.imagePreview = 'pdf'\n }\n },\n\n removeCertImage(index) {\n const cert = this.newCrew.certifications[index]\n cert.imageFile = null\n cert.imagePreview = null\n cert.imageName = ''\n cert.imageType = ''\n\n // Clear the file input\n const fileInput = document.getElementById('cert-image-' + index)\n if (fileInput) {\n fileInput.value = ''\n }\n },\n\n formatStatus(status) {\n return status ? status.charAt(0).toUpperCase() + status.slice(1) : ''\n },\n\n getStatusClass(status) {\n const statusMap = {\n 'available': 'status-available',\n 'onduty': 'status-onduty',\n 'onboard': 'status-onboard',\n 'unavailable': 'status-unavailable',\n 'assigned': 'status-assigned'\n }\n return statusMap[status] || ''\n },\n\n getCertificationClass(expiryDate) {\n const status = this.getExpiryStatus(expiryDate)\n const classMap = {\n 'expired': 'text-danger',\n 'expiringSoon': 'text-warning',\n 'valid': 'text-success'\n }\n return classMap[status] || ''\n },\n\n getExpiryStatus(dateStr) {\n if (!dateStr) return 'none'\n\n const expiry = new Date(dateStr)\n const today = new Date()\n const oneMonthFromNow = new Date()\n oneMonthFromNow.setMonth(today.getMonth() + 1)\n\n if (expiry <= today) return 'expired'\n if (expiry <= oneMonthFromNow) return 'expiringSoon'\n return 'valid'\n },\n\n formatLogDate(timestamp) {\n if (!timestamp) return ''\n const date = new Date(timestamp)\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n })\n },\n\n getLogActionClass(action) {\n const actionMap = {\n 'Embarked': 'log-action-embark',\n 'Deboarded': 'log-action-deboard',\n 'Assigned': 'log-action-assign',\n 'Status Changed': 'log-action-status'\n }\n return actionMap[action] || ''\n },\n\n getLogIcon(action) {\n const iconMap = {\n 'Embarked': 'bi bi-box-arrow-in-right',\n 'Deboarded': 'bi bi-box-arrow-left',\n 'Assigned': 'bi bi-calendar-check',\n 'Status Changed': 'bi bi-arrow-repeat'\n }\n return iconMap[action] || 'bi bi-circle-fill'\n }\n }\n}\n</script>\n\n<style>\n.add-crew-form h2 {\n color: #005792;\n}\n\n.crew-section {\n margin-bottom: 30px;\n}\n\n/* Personnel Summary Styles */\n.personnel-summary {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 25px;\n color: white;\n box-shadow: 0 4px 12px rgba(0, 87, 146, 0.2);\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 15px;\n border-bottom: 2px solid rgba(255, 255, 255, 0.3);\n}\n\n.summary-header h3 {\n margin: 0;\n font-size: 1.4em;\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.summary-date {\n font-size: 0.9em;\n opacity: 0.9;\n}\n\n.summary-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin-bottom: 25px;\n}\n\n.summary-card {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n backdrop-filter: blur(10px);\n border-radius: 8px;\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 15px;\n transition: transform 0.2s, background 0.2s;\n}\n\n.summary-card:hover {\n transform: translateY(-3px);\n background: rgba(255, 255, 255, 0.2);\n}\n\n.card-icon {\n font-size: 2.5em;\n opacity: 0.9;\n}\n\n.card-content {\n flex: 1;\n}\n\n.card-value {\n font-size: 2.5em;\n font-weight: bold;\n line-height: 1;\n margin-bottom: 5px;\n}\n\n.card-label {\n font-size: 0.9em;\n opacity: 0.9;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.total-card {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n}\n\n.vessel-breakdown {\n margin-top: 20px;\n}\n\n.vessel-breakdown h4 {\n margin: 0 0 15px 0;\n font-size: 1.1em;\n opacity: 0.95;\n}\n\n.vessel-cards {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 12px;\n}\n\n.vessel-card {\n background: rgba(255, 255, 255, 0.15);\n backdrop-filter: blur(10px);\n border-radius: 6px;\n padding: 15px;\n border-left: 4px solid rgba(255, 255, 255, 0.5);\n}\n\n.vessel-name {\n font-weight: bold;\n font-size: 1.1em;\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n}\n\n.vessel-stats {\n display: flex;\n justify-content: space-between;\n gap: 10px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 3px;\n}\n\n.stat-label {\n font-size: 0.8em;\n opacity: 0.8;\n}\n\n.stat-value {\n font-size: 1.5em;\n font-weight: bold;\n}\n\n.total-stat {\n border-left: 1px solid rgba(255, 255, 255, 0.3);\n padding-left: 10px;\n}\n\n.total-stat .stat-value {\n color: #ffd700;\n}\n\n\n.crew-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n align-items: start;\n}\n\n.crew-card {\n background-color: #f8f9fa;\n border-radius: 6px;\n padding: 15px;\n box-shadow: 0 1px 5px rgba(0, 0, 0, 0.08);\n border-left: 4px solid #00a8e8;\n position: relative;\n}\n\n.crew-card.unavailable {\n border-left-color: #dc3545;\n opacity: 0.8;\n}\n\n.crew-name {\n font-weight: bold;\n font-size: 1.1em;\n margin-bottom: 5px;\n color: #005792;\n}\n\n.crew-role {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 10px;\n}\n\n.crew-certifications,\n.crew-availability {\n font-size: 0.85em;\n margin: 5px 0;\n}\n\n.certification-tag {\n display: inline-block;\n background-color: #e6f7ff;\n color: #005792;\n border-radius: 4px;\n padding: 2px 8px;\n margin-right: 5px;\n margin-bottom: 5px;\n font-size: 0.85em;\n cursor: pointer;\n}\n\n.certification-tag:hover {\n background-color: #d1f0ff;\n}\n\n.crew-status-badge {\n position: absolute;\n top: 15px;\n right: 15px;\n font-size: 0.75em;\n padding: 3px 8px;\n border-radius: 12px;\n font-weight: bold;\n}\n\n.status-available {\n background-color: #d4edda;\n color: #155724;\n}\n\n.status-unavailable {\n background-color: #f8d7da;\n color: #721c24;\n}\n\n.status-assigned {\n background-color: #ffc107;\n color: #212529;\n}\n\n.status-onduty {\n background-color: #cce5ff;\n color: #004085;\n}\n\n.status-onboard {\n background-color: #d1ecf1;\n color: #0c5460;\n}\n\n.action-buttons {\n display: flex;\n justify-content: space-between;\n margin-top: 15px;\n gap: 5px;\n flex-wrap: wrap;\n}\n\n.btn {\n padding: 6px 12px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.9em;\n transition: background-color 0.2s;\n border: none;\n}\n\n.btn-primary {\n background-color: #005792;\n color: white;\n}\n\n.btn-primary:hover {\n background-color: #004675;\n}\n\n.btn-secondary {\n background-color: #e9ecef;\n color: #495057;\n}\n\n.btn-secondary:hover {\n background-color: #dde2e6;\n}\n\n.btn-warning {\n background-color: #ffc107;\n color: #212529;\n}\n\n.btn-warning:hover {\n background-color: #e0a800;\n}\n\n.btn-success {\n background-color: #28a745;\n color: white;\n}\n\n.btn-success:hover {\n background-color: #218838;\n}\n\n.btn-danger {\n background-color: #dc3545;\n color: white;\n}\n\n.btn-danger:hover {\n background-color: #c82333;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: #005792;\n text-decoration: none;\n padding: 4px 8px;\n}\n\n.btn-link:hover {\n text-decoration: underline;\n}\n\n.btn-sm {\n font-size: 0.8em;\n padding: 4px 8px;\n}\n\n.crew-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid #e9ecef;\n}\n\n.crew-log-toggle {\n flex: 1;\n}\n\n.log-toggle-btn {\n text-align: left;\n padding: 0;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.crew-log {\n margin-top: 15px;\n padding: 10px;\n background-color: #ffffff;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.crew-log h4 {\n margin: 0 0 10px 0;\n font-size: 0.9em;\n color: #005792;\n border-bottom: 1px solid #dee2e6;\n padding-bottom: 5px;\n}\n\n.log-entry {\n padding: 8px;\n margin-bottom: 8px;\n border-left: 3px solid #005792;\n background-color: #f8f9fa;\n border-radius: 3px;\n}\n\n.log-entry:last-child {\n margin-bottom: 0;\n}\n\n.log-date {\n font-size: 0.75em;\n color: #6c757d;\n margin-bottom: 3px;\n}\n\n.log-action {\n font-weight: bold;\n font-size: 0.85em;\n margin-bottom: 3px;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.log-action-embark {\n color: #28a745;\n}\n\n.log-action-deboard {\n color: #dc3545;\n}\n\n.log-action-assign {\n color: #007bff;\n}\n\n.log-action-status {\n color: #ffc107;\n}\n\n.log-details {\n font-size: 0.8em;\n color: #495057;\n}\n\n.log-notes {\n font-size: 0.8em;\n color: #6c757d;\n font-style: italic;\n margin-top: 3px;\n}\n\n.search-filter {\n display: flex;\n margin-bottom: 20px;\n gap: 10px;\n align-items: center;\n}\n\n.search-filter input,\n.search-filter select {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n}\n\n.search-filter input {\n flex-grow: 1;\n}\n\n.search-filter select {\n min-width: 150px;\n}\n\n.add-crew-form {\n background-color: #f8f9fa;\n padding: 20px;\n border-radius: 6px;\n margin-top: 30px;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin-bottom: 15px;\n}\n\n.form-group {\n flex: 1;\n min-width: 200px;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n color: #495057;\n}\n\n.text-danger {\n color: red;\n font-weight: bolder;\n}\n\n.text-warning {\n color: orange;\n font-weight: bolder;\n}\n\n.text-success {\n color: green;\n font-weight: bolder;\n}\n\n.icon {\n font-size: 20px;\n cursor: pointer;\n color: #005792;\n}\n\n.icon:hover {\n color: #003d5c;\n}\n\n.delete-icon {\n font-size: 20px;\n cursor: pointer;\n color: #dc3545;\n position: static;\n margin: 0;\n}\n\n.delete-icon:hover {\n color: #c82333;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n width: 100%;\n padding: 8px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n}\n\n.form-group input.error {\n border-color: #dc3545;\n}\n\n.error-message {\n color: #dc3545;\n font-size: 0.85em;\n margin-top: 5px;\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 20px;\n}\n\n.no-results {\n text-align: center;\n padding: 40px 20px;\n color: #6c757d;\n font-size: 1.1em;\n}\n\n.crew-section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 15px;\n}\n\n.crew-section-header h2 {\n color: #005792;\n margin: 0;\n}\n\n.header-actions {\n display: flex;\n gap: 10px;\n}\n\n.guest-card {\n border-left-color: #ffc107 !important;\n background: linear-gradient(135deg, #f8f9fa 0%, #e3f2fd 100%);\n}\n\n.guest-card .crew-role {\n color: #17a2b8;\n font-weight: 600;\n text-transform: uppercase;\n font-size: 0.85em;\n}\n\n.vcard {\n border-radius: 6px;\n padding: 5px;\n}\n\n.loading-state {\n text-align: center;\n padding: 40px 20px;\n}\n\n.spinner-border {\n width: 3rem;\n height: 3rem;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n display: inline-block;\n animation: spinner-border 0.75s linear infinite;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.text-primary {\n color: #005792;\n}\n\n.visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.certification-section {\n margin: 20px 0;\n padding: 15px;\n background-color: #ffffff;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n}\n\n.certification-section h3 {\n color: #005792;\n margin-top: 0;\n margin-bottom: 15px;\n font-size: 1.1em;\n}\n\n.certification-entry {\n margin-bottom: 10px;\n}\n\n/* Image Upload Styles */\n.image-upload-wrapper {\n position: relative;\n}\n\n.file-input {\n display: none;\n}\n\n.file-input-label {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background-color: #005792;\n color: white !important;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.9em;\n transition: background-color 0.2s;\n}\n\n.file-input-label:hover {\n background-color: #004675;\n}\n\n.file-input-label i {\n font-size: 1.1em;\n}\n\n.file-name {\n display: block;\n margin-top: 5px;\n color: #6c757d;\n font-size: 0.85em;\n}\n\n.image-preview {\n margin-top: 10px;\n position: relative;\n display: inline-block;\n}\n\n.image-preview img {\n max-width: 200px;\n max-height: 150px;\n border-radius: 4px;\n border: 2px solid #dee2e6;\n}\n\n.pdf-preview {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 15px;\n background-color: #f8f9fa;\n border: 2px solid #dee2e6;\n border-radius: 4px;\n max-width: 200px;\n}\n\n.pdf-preview i {\n font-size: 2em;\n color: #dc3545;\n}\n\n.pdf-preview span {\n font-size: 0.85em;\n color: #495057;\n word-break: break-word;\n}\n\n.btn-remove-image {\n position: absolute;\n top: -8px;\n right: -8px;\n background-color: #dc3545;\n color: white;\n border: none;\n border-radius: 50%;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 0;\n transition: background-color 0.2s;\n}\n\n.btn-remove-image:hover {\n background-color: #c82333;\n}\n\n.btn-remove-image i {\n font-size: 1em;\n}\n\n/* Timesheet Styles */\n.timesheet-view {\n background-color: #ffffff;\n border-radius: 6px;\n padding: 20px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.timesheet-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 15px;\n border-bottom: 2px solid #005792;\n}\n\n.timesheet-header h3 {\n color: #005792;\n margin: 0;\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.timesheet-controls {\n display: flex;\n gap: 10px;\n}\n\n.timesheet-controls select,\n.timesheet-search {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-size: 0.9em;\n}\n\n.timesheet-search {\n min-width: 250px;\n}\n\n.timesheet-summary {\n display: flex;\n gap: 20px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.summary-card {\n flex: 1;\n min-width: 150px;\n background-color: #f8f9fa;\n padding: 15px;\n border-radius: 6px;\n border-left: 4px solid #005792;\n}\n\n.summary-label {\n display: block;\n font-size: 0.85em;\n color: #6c757d;\n margin-bottom: 5px;\n}\n\n.summary-value {\n display: block;\n font-size: 1.5em;\n font-weight: bold;\n color: #005792;\n}\n\n.timesheet-table-container {\n overflow-x: auto;\n margin-top: 20px;\n}\n\n.timesheet-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9em;\n}\n\n.timesheet-table thead {\n background-color: #005792;\n color: white;\n}\n\n.timesheet-table th {\n padding: 12px 8px;\n text-align: left;\n font-weight: bold;\n cursor: pointer;\n user-select: none;\n}\n\n.timesheet-table th:hover {\n background-color: #004675;\n}\n\n.timesheet-table th i {\n font-size: 0.8em;\n margin-left: 5px;\n}\n\n.timesheet-table tbody tr {\n border-bottom: 1px solid #dee2e6;\n}\n\n.timesheet-table tbody tr:hover {\n background-color: #f8f9fa;\n}\n\n.timesheet-table td {\n padding: 10px 8px;\n}\n\n.timestamp-cell {\n white-space: nowrap;\n color: #495057;\n font-size: 0.85em;\n}\n\n.crew-name-cell strong {\n color: #005792;\n}\n\n.role-cell {\n color: #6c757d;\n}\n\n.action-cell {\n white-space: nowrap;\n}\n\n.action-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 0.85em;\n font-weight: bold;\n}\n\n.vessel-cell {\n color: #495057;\n}\n\n.duration-cell {\n color: #495057;\n font-weight: 500;\n}\n\n.notes-cell {\n color: #6c757d;\n font-style: italic;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.timesheet-row-embarked {\n background-color: #d4edda;\n}\n\n.timesheet-row-deboarded {\n background-color: #f8d7da;\n}\n\n.timesheet-row-assigned {\n background-color: #d1ecf1;\n}\n\n.timesheet-row-status-changed {\n background-color: #fff3cd;\n}\n\n@media (max-width: 768px) {\n .crew-grid {\n grid-template-columns: 1fr;\n }\n\n .search-filter {\n flex-direction: column;\n }\n\n .search-filter input,\n .search-filter select {\n width: 100%;\n }\n\n .timesheet-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 15px;\n }\n\n .timesheet-controls {\n flex-direction: column;\n width: 100%;\n }\n\n .timesheet-controls select,\n .timesheet-search {\n width: 100%;\n }\n\n .timesheet-summary {\n flex-direction: column;\n }\n\n .timesheet-table {\n font-size: 0.8em;\n }\n\n .timesheet-table th,\n .timesheet-table td {\n padding: 8px 4px;\n }\n}\n\n.crew-subhead {\n color: #000;\n}</style>","<template>\n <div class=\"s-container container\">\n <div class=\"header\">\n <h1>OceanHelm Requisition System</h1>\n <p>Streamlined Material Request & Ordering Process</p>\n </div>\n\n <!-- Navigation Tabs -->\n <div class=\"nav-tabs\">\n <button v-for=\"tab in visibleTabs\" :key=\"tab.name\" :class=\"['nav-tab', { active: activeTab === tab.name }]\"\n @click=\"setActiveTab(tab.name)\">\n {{ tab.label }}\n </button>\n </div>\n\n <!-- New Requisition Tab -->\n <div v-if=\"activeTab === 'new-requisition'\" class=\"tab-content active\">\n <form @submit.prevent=\"handleSubmitRequisition\">\n <div class=\"form-grid\">\n <div class=\"form-group\">\n <label>Requestor Name *</label>\n <input type=\"text\" :value=\"userProfile?.full_name\" readonly required class=\"form-control\" />\n </div>\n <div class=\"form-group\">\n <label>Department *</label>\n <select v-model=\"form.department\" required>\n <option value=\"\">Select Department</option>\n <option v-for=\"dept in departments\" :key=\"dept\" :value=\"dept\">{{ dept }}</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Vessel *</label>\n <select v-model=\"form.project\" class=\"form-control\" required>\n <option disabled value=\"\">Select a vessel</option>\n <option v-for=\"v in vessels\" :key=\"v.id\" :value=\"v.name\">\n {{ v.name }}\n </option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Date Needed *</label>\n <input type=\"date\" v-model=\"form.neededDate\" :min=\"today\" required />\n </div>\n </div>\n\n <div class=\"form-group\">\n <label>Business Justification *</label>\n <textarea v-model=\"form.justification\" placeholder=\"Explain why these materials are needed...\"\n required></textarea>\n </div>\n\n <div class=\"items-section\">\n <div class=\"items-header\">\n <h3>Requested Items</h3>\n <button type=\"button\" class=\"add-item-btn\" @click=\"addItem\">+ Add Item</button>\n </div>\n <div>\n <div v-for=\"(item, index) in form.items\" :key=\"index\" class=\"item-row\">\n <div class=\"form-group\">\n <label>Item Code *</label>\n <input type=\"text\" v-model=\"item.id\" required />\n </div>\n <div class=\"form-group\">\n <label>Item Description *</label>\n <input type=\"text\" v-model=\"item.desc\" required />\n </div>\n <div class=\"form-group\">\n <label>Quantity *</label>\n <input type=\"number\" v-model.number=\"item.qty\" min=\"1\" required />\n </div>\n <div class=\"form-group\">\n <label>Unit *</label>\n <select v-model=\"item.unit\" required>\n <option v-for=\"unit in units\" :key=\"unit\" :value=\"unit\">{{ unit }}</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Est. Unit Cost *</label>\n <input type=\"number\" v-model.number=\"item.cost\" step=\"0.01\" min=\"0\" placeholder=\"0.00\" required />\n </div>\n <button type=\"button\" class=\"remove-item-btn\" @click=\"removeItem(index)\">Remove</button>\n </div>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"submit\" class=\"btn btn-primary-req\" :disabled=\"isSubmitting\">\n {{ isSubmitting ? 'Submitting...' : 'Submit Requisition' }}\n </button>\n </div>\n </form>\n </div>\n\n <!-- All Requisitions Tab -->\n <div v-if=\"activeTab === 'all-requisitions'\" class=\"tab-content active\">\n <div class=\"requisition-list\">\n <div v-for=\"req in requisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n <div :class=\"['status-badge', `status-${req.status}`]\">{{ req.status }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in getRequisitionFields(req)\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <div v-if=\"req.status === 'po-created' || req.status === 'delivered'\"\n class=\"form-group comments-section\">\n <button @click=\"handleOpenPO(req.id)\" class=\"add-item-btn comments-section\">\n Print PO\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- My Requisitions Tab -->\n <div v-if=\"activeTab === 'my-requisitions'\" class=\"tab-content active\">\n <div class=\"requisition-list\">\n <div v-for=\"req in myRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n <div :class=\"['status-badge', `status-${req.status}`]\">{{ req.status }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in getRequisitionFields(req)\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <div v-if=\"req.status === 'info-requested'\" class=\"form-group comments-section\">\n <label class=\"detail-label\">Your Response</label>\n <textarea v-model=\"infoResponse\" class=\"response-textarea\"\n placeholder=\"Submit more info...\"></textarea>\n <button @click=\"handleSubmitInfoResponse(req)\" class=\"add-item-btn comments-section\">\n Submit Info\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Pending Approval Tab -->\n <div v-if=\"activeTab === 'approvals'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Department Supervisor Dashboard</h3>\n <div style=\"background: #fef3c7; padding: 15px; border-radius: 10px; border-left: 4px solid #f59e0b;\">\n <strong>Role:</strong> Department Supervisor - Review requests for accuracy, necessity, and budget\n compliance\n </div>\n </div>\n <div class=\"requisition-list\" id=\"approvalsQueue\">\n <div v-for=\"req in reviewRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleApproveRequisition(req.id)\">Approve</button>\n <button type=\"button\" class=\"marginbox btn-reject\"\n @click=\"handleDeclineRequisition(req.id)\">Decline</button>\n <button type=\"button\" class=\"marginbox btn-request\" @click=\"handleInfoRequisition(req.id)\">Request\n Info</button>\n </div>\n </div>\n </div>\n\n <!-- Purchasing Queue Tab -->\n <div v-if=\"activeTab === 'purchasing'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Purchasing Department Dashboard</h3>\n <div style=\"background: #dbeafe; padding: 15px; border-radius: 10px; border-left: 4px solid #3b82f6;\">\n <strong>Role:</strong> Purchasing Team - Convert approved requisitions to Purchase Orders\n </div>\n </div>\n <div class=\"requisition-list\" id=\"purchasingQueue\">\n <div v-for=\"req in poRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleCreatePO(req.id)\">Create PO</button>\n </div>\n </div>\n </div>\n\n <!-- Receiving Tab -->\n <div v-if=\"activeTab === 'receiving'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Receiving & Inventory Dashboard</h3>\n <div style=\"background: #dcfce7; padding: 15px; border-radius: 10px; border-left: 4px solid #10b981;\">\n <strong>Role:</strong> Warehouse Team - Process incoming deliveries and update inventory\n </div>\n </div>\n <div class=\"requisition-list\" id=\"receivingQueue\">\n <div v-for=\"req in awaitingDelivery\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleAcceptDelivery(req.id)\">Accept\n Delivery</button>\n </div>\n </div>\n </div>\n\n <!-- PO Tab -->\n <div v-if=\"activeTab === 'po'\" class=\"tab-content active\">\n <div class=\"po-content\" id=\"po-content\">\n <div class=\"po-header\">\n <div class=\"company-info\">\n <h3>Vendor Information</h3>\n <div class=\"info-row\">\n <span class=\"info-label\">Company:</span>\n <span class=\"info-value\">{{ vendorInfo.company || poDetails.vendorInfo?.company || 'N/A' }} </span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Contact:</span>\n <span class=\"info-value\">{{ vendorInfo.contact || poDetails.vendorInfo?.contact || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Email:</span>\n <span class=\"info-value\">{{ vendorInfo.email || poDetails.vendorInfo?.email || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Phone:</span>\n <span class=\"info-label\">{{ vendorInfo.phone || poDetails.vendorInfo?.phone || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Address:</span>\n <span class=\"info-value\">{{ vendorInfo.address || poDetails.vendorInfo?.address || 'N/A' }}</span>\n </div>\n </div>\n\n <div class=\"company-info\">\n <h3>Purchase Order Details</h3>\n <div class=\"info-row\">\n <span class=\"info-label\">PO Number:</span>\n <span class=\"info-value\">{{ poDetails.id }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Date:</span>\n <span class=\"info-value\">{{ vendorInfo.poDate || poDetails.vendorInfo?.poDate || formatDate(new Date()) }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Requested By:</span>\n <span class=\"info-value\">{{ vendorInfo.poApproved || poDetails.vendorInfo?.poApproved || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Department:</span>\n <span class=\"info-value\">PO-{{ poDetails.department || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Delivery Date:</span>\n <span class=\"info-value\">{{ poDetails.neededDate || 'N/A' }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"items-section\">\n <h2 class=\"section-title\">Order Items</h2>\n <table class=\"items-table\">\n <thead>\n <tr>\n <th>Item #</th>\n <th>Description</th>\n <th>Quantity</th>\n <th>Unit Price</th>\n <th>Total</th>\n <th v-if=\"!isPrinting\">Actions</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(item, index) in poDetails.items || []\" :key=\"index\">\n <td>{{ item.itemNumber || (index + 1) }}</td>\n <td>{{ item.desc }}</td>\n <td>{{ item.qty }}</td>\n <td>\n <span v-if=\"!item.editing\">\n ${{ (item.unitPrice || item.cost || 0).toFixed(2) }}\n <span v-if=\"item.cost !== item.unitPrice && item.unitPrice\" class=\"price-change-indicator\">!</span>\n </span>\n <input v-else v-model.number=\"item.tempPrice\" type=\"number\" step=\"0.01\" min=\"0\"\n class=\"price-input\" :class=\"{ 'price-changed': item.cost !== item.tempPrice }\">\n </td>\n <td>${{ ((item.unitPrice || item.cost || 0) * (item.qty || 0)).toFixed(2) }}</td>\n <td v-if=\"!isPrinting\">\n <button v-if=\"!item.editing\" @click=\"startEdit(index)\" class=\"edit-btn\">\n Edit Price\n </button>\n <div v-else>\n <button @click=\"savePrice(index)\" class=\"save-btn\">Save</button>\n <button @click=\"cancelEdit(index)\" class=\"cancel-btn\">Cancel</button>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div v-for=\"(item, index) in poDetails.items || []\" :key=\"'note-' + index\">\n <div v-if=\"item.justification\" class=\"justification-note\">\n <strong>Price Change Justification (Item {{ item.itemNumber || (index + 1) }}):</strong> {{ item.justification\n }}\n </div>\n </div>\n\n <div class=\"totals\">\n <div class=\"total-row\">\n <span>Subtotal:</span>\n <span>${{ subTotal.toFixed(2) }}</span>\n </div>\n <div class=\"total-row\">\n <span>Tax ({{ vendorInfo.tax || poDetails.vendorInfo?.tax || 0 }}%):</span>\n <span>${{ calculateTax().toFixed(2) }}</span>\n </div>\n <div class=\"total-row\">\n <span>Shipping:</span>\n <span>${{ getOptional(vendorInfo.shipping) }}</span>\n </div>\n <div class=\"total-row grand-total\">\n <span>Grand Total:</span>\n <span>${{ grandTotal.toFixed(2) }}</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Justification Modal -->\n <div v-if=\"showJustificationModal\" class=\"justification-modal\" @click.self=\"closeJustificationModal\">\n <div class=\"modal-content\">\n <h3>Price Change Justification Required</h3>\n <p style=\"margin-bottom: 15px; color: #666;\">\n Please provide a justification for changing the price from\n <strong>${{ currentItem?.cost?.toFixed(2) }}</strong> to\n <strong>${{ currentItem?.tempPrice?.toFixed(2) }}</strong>\n </p>\n <textarea v-model=\"justificationText\" class=\"justification-textarea\"\n placeholder=\"Enter justification for price change...\" required></textarea>\n <div class=\"modal-buttons\">\n <button @click=\"closeJustificationModal\" class=\"cancel-btn\">Cancel</button>\n <button @click=\"confirmPriceChange\" class=\"save-btn\" :disabled=\"!justificationText.trim()\">\n Confirm Change\n </button>\n </div>\n </div>\n </div>\n <button v-if=\"!isPrinting\" type=\"button\" class=\"add-item-btn\" @click=\"handleFinishPO(poDetails.id)\">Approve\n PO</button>\n </div>\n\n <!-- Workflow Guide Tab -->\n <div v-if=\"activeTab === 'workflow'\" class=\"tab-content active\">\n <div class=\"workflow-steps\">\n <div class=\"workflow-step\">\n <div class=\"step-icon completed\">1</div>\n <div class=\"step-title\">Request Submitted</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon active\">2</div>\n <div class=\"step-title\">Department Review</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">3</div>\n <div class=\"step-title\">Management Approval</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">4</div>\n <div class=\"step-title\">Purchase Order Created</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">5</div>\n <div class=\"step-title\">Order Fulfilled</div>\n </div>\n </div>\n\n <div style=\"background: white; padding: 30px; border-radius: 15px; margin-top: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 20px;\">Requisition Workflow Process</h3>\n <div style=\"line-height: 1.8; color: #374151;\">\n <p><strong>Step 1: Request Identification</strong><br>\n Department or individual identifies need for materials, equipment, or services.</p>\n\n <p><strong>Step 2: Requisition Creation</strong><br>\n Complete requisition form with detailed specifications, quantities, and business justification.</p>\n\n <p><strong>Step 3: Department Review</strong><br>\n Department supervisor reviews request for accuracy, necessity, and budget compliance.</p>\n\n <p><strong>Step 4: Management Approval</strong><br>\n Based on cost thresholds, appropriate management level provides approval.</p>\n\n <p><strong>Step 5: Purchase Order Generation</strong><br>\n Purchasing team converts approved requisition into formal Purchase Order (PO).</p>\n\n <p><strong>Step 6: Vendor Processing</strong><br>\n PO sent to vendor, order processed, and delivery scheduled.</p>\n\n <p><strong>Step 7: Receipt & Inventory</strong><br>\n Goods received, inspected, and entered into inventory system.</p>\n </div>\n </div>\n </div>\n </div>\n</template>\n \n<script>\nexport default {\n name: 'RequisitionSystem',\n props: {\n userProfile: {\n type: Object,\n required: true\n },\n userRole: {\n type: String,\n required: true\n },\n requisitions: {\n type: Array,\n default: () => []\n },\n vessels: {\n type: Array,\n default: () => []\n }\n },\n\n emits: [\n 'submit-requisition',\n 'submit-info-response',\n 'approve-requisition',\n 'decline-requisition',\n 'info-requisition',\n 'create-po',\n 'open-po',\n 'finish-po',\n 'accept-delivery'\n ],\n\n data() {\n return {\n activeTab: 'workflow',\n isPrinting: false,\n infoResponse: '',\n isSubmitting: false,\n\n // Tabs with visibility rules\n tabs: [\n { name: 'new-requisition', label: 'New Requisition', roles: ['requisitor'] },\n { name: 'my-requisitions', label: 'My Requisitions', roles: ['requisitor'] },\n { name: 'all-requisitions', label: 'All Requisitions', roles: ['requisitor', 'supervisor', 'captain', 'owner', 'purchaser'] },\n { name: 'approvals', label: 'Pending Approvals', roles: ['owner', 'supervisor'] },\n { name: 'purchasing', label: 'Purchasing Queue', roles: ['purchaser'] },\n { name: 'receiving', label: 'Receiving', roles: ['requisitor'] },\n { name: 'workflow', label: 'Workflow Guide', roles: ['requisitor', 'supervisor', 'owner', 'purchaser', 'captain'] }\n ],\n\n // Form State\n form: {\n requestor: '',\n department: '',\n project: '',\n neededDate: '',\n justification: '',\n items: []\n },\n\n poDetails: {\n editing: false,\n items: []\n },\n vendorInfo: {},\n justificationText: '',\n currentItemIndex: null,\n showJustificationModal: false,\n\n // common fields\n requisitionFields: [\n { label: 'Requestor', value: req => req.requestor },\n { label: 'Department', value: req => req.department },\n { label: 'Project', value: req => req.project || 'N/A' },\n { label: 'Submitted', value: req => req.submittedDate },\n { label: 'Items', value: req => `${req.items?.length || 0} item(s)` }\n ],\n\n // Fields for My Requisitions display\n requisitionFieldsMap: {\n approved: [\n { label: 'Approved By', value: req => req.approvedBy },\n ],\n declined: [\n { label: 'Declined By', value: req => req.declinedBy },\n { label: 'Rejection Reason', value: req => req.rejectionReason },\n ],\n 'info-requested': [\n { label: 'Info Requester', value: req => req.infoRequestedBy },\n { label: 'Requested Info', value: req => req.requestedInfo }\n ]\n },\n\n // Options\n departments: [\n 'Marine Operations', 'Engineering', 'Maintenance',\n 'Safety & Compliance', 'Logistics', 'Administration',\n 'Engine Room'\n ],\n\n priorities: [\n 'Urgent - Same Day',\n 'High - Within 3 Days',\n 'Normal - Within 1 Week',\n 'Low - Within 2 Weeks'\n ],\n\n units: ['Pieces', 'Kilograms', 'Liters', 'Meters', 'Sets', 'Boxes']\n }\n },\n\n computed: {\n today() {\n return new Date().toISOString().split('T')[0];\n },\n\n visibleTabs() {\n return this.tabs.filter(tab => tab.roles.includes(this.userRole));\n },\n\n subTotal() {\n return (this.poDetails.items || []).reduce((sum, item) => {\n const unitPrice = item.unitPrice || item.cost || 0;\n return sum + (unitPrice * (item.qty || 0));\n }, 0);\n },\n\n grandTotal() {\n return this.subTotal + this.calculateTax() + parseFloat(this.getOptional(this.vendorInfo.shipping));\n },\n\n reviewRequisitions() {\n return (this.requisitions || []).filter(r => r.status === 'under-review');\n },\n\n poRequisitions() {\n return (this.requisitions || []).filter(r => r.status === 'approved');\n },\n\n awaitingDelivery() {\n return (this.requisitions || []).filter(r => r.status === 'po-created');\n },\n\n currentItem() {\n return this.currentItemIndex !== null ? this.poDetails.items[this.currentItemIndex] : null;\n },\n\n myRequisitions() {\n const userId = this.userProfile?.id || this.userProfile?.profile_id;\n return (this.requisitions || []).filter(req => req.profile_id == userId);\n }\n },\n\n methods: {\n setActiveTab(tabName) {\n this.activeTab = tabName;\n },\n\n formatDate(dateString) {\n if (!dateString) return 'N/A';\n const date = new Date(dateString);\n return date.toLocaleDateString();\n },\n\n calculateTax() {\n const taxRate = parseFloat(this.vendorInfo.tax || this.poDetails.vendorInfo?.tax || 0);\n return (this.subTotal * taxRate) / 100;\n },\n\n getOptional(value) {\n return typeof value === 'number' ? value.toFixed(2) : (parseFloat(value) || 0).toFixed(2);\n },\n\n getRequisitionFields(req) {\n const statusFields = this.requisitionFieldsMap[req.status] || [];\n return [...(this.requisitionFields || []), ...statusFields];\n },\n\n addItem() {\n this.form.items.push({\n id: '',\n desc: '',\n qty: 1,\n unit: 'Pieces',\n cost: 0\n });\n },\n\n removeItem(index) {\n this.form.items.splice(index, 1);\n },\n\n startEdit(index) {\n this.poDetails.items[index].editing = true;\n this.poDetails.items[index].tempPrice = this.poDetails.items[index].unitPrice || this.poDetails.items[index].cost;\n },\n\n cancelEdit(index) {\n this.poDetails.items[index].editing = false;\n this.poDetails.items[index].tempPrice = this.poDetails.items[index].unitPrice || this.poDetails.items[index].cost;\n },\n\n savePrice(index) {\n const item = this.poDetails.items[index];\n if (item.tempPrice !== item.cost) {\n // Price changed, require justification\n this.currentItemIndex = index;\n this.showJustificationModal = true;\n } else {\n // No change, just save\n item.unitPrice = item.tempPrice;\n item.editing = false;\n }\n },\n\n confirmPriceChange() {\n if (!this.justificationText.trim()) {\n alert('Please provide a justification for the price change.');\n return;\n }\n\n const item = this.poDetails.items[this.currentItemIndex];\n item.unitPrice = item.tempPrice;\n item.cost = item.tempPrice;\n item.justification = this.justificationText.trim();\n item.editing = false;\n\n this.closeJustificationModal();\n },\n\n closeJustificationModal() {\n this.showJustificationModal = false;\n this.currentItemIndex = null;\n this.justificationText = '';\n },\n\n // Event handlers that emit to parent\n handleSubmitRequisition() {\n if (this.form.items.length === 0) {\n alert('Please add at least one item to the requisition.');\n return;\n }\n\n this.isSubmitting = true;\n const requisition = this.collectFormData('under-review');\n this.$emit('submit-requisition', requisition);\n \n setTimeout(() => {\n this.resetForm();\n this.isSubmitting = false;\n }, 1000);\n },\n\n handleSubmitInfoResponse(req) {\n if (!this.infoResponse || this.infoResponse.trim() === '') {\n alert('Please enter a response before submitting.');\n return;\n }\n this.$emit('submit-info-response', { req, response: this.infoResponse });\n this.infoResponse = '';\n },\n\n handleApproveRequisition(id) {\n this.$emit('approve-requisition', id);\n },\n\n handleDeclineRequisition(id) {\n this.$emit('decline-requisition', id);\n },\n\n handleInfoRequisition(id) {\n this.$emit('info-requisition', id);\n },\n\n handleCreatePO(id) {\n this.$emit('create-po', id);\n },\n\n handleOpenPO(id) {\n this.$emit('open-po', id);\n },\n\n handleFinishPO(id) {\n this.$emit('finish-po', id);\n },\n\n handleAcceptDelivery(id) {\n this.$emit('accept-delivery', id);\n },\n\n collectFormData(status) {\n return {\n id: 'REQ-' + Date.now(),\n requestor: this.userProfile?.full_name || 'Unknown',\n department: this.form.department,\n project: this.form.project,\n neededDate: this.form.neededDate,\n justification: this.form.justification,\n items: this.form.items.map(item => ({ ...item })),\n status,\n submittedDate: new Date().toLocaleDateString(),\n profile_id: this.userProfile?.id || this.userProfile?.profile_id\n };\n },\n\n resetForm() {\n this.form = {\n requestor: '',\n department: '',\n project: '',\n neededDate: '',\n justification: '',\n items: []\n };\n // Add initial item row again\n this.addItem();\n },\n\n // Methods for updating PO details from parent\n updatePODetails(details) {\n this.poDetails = { ...details };\n this.getNumber();\n for (let item of this.poDetails.items || []) {\n item.tempPrice = item.cost || 0;\n item.unitPrice = item.unitPrice || item.cost || 0;\n item.subTotal = item.unitPrice * (item.qty || 0);\n }\n },\n\n updateVendorInfo(info) {\n this.vendorInfo = { ...info };\n },\n\n setPrintingMode(isPrinting) {\n this.isPrinting = isPrinting;\n },\n\n getNumber() {\n return (this.poDetails.items || []).map((item, index) => {\n return item.itemNumber = index + 1;\n });\n }\n },\n\n created() {\n // Initialize form with one item row\n this.addItem();\n }\n}\n</script>\n\n<style>\n.s-container {\n max-width: 1200px;\n margin: 0 auto;\n background: rgba(255, 255, 255, 0.95);\n border-radius: 20px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25);\n overflow: hidden;\n backdrop-filter: blur(10px);\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 20px;\n}\n\n.header h1 {\n font-size: 2.5rem;\n margin-bottom: 10px;\n position: relative;\n z-index: 1;\n}\n\n.header p {\n font-size: 1.1rem;\n opacity: 0.9;\n position: relative;\n z-index: 1;\n}\n\n.nav-tabs {\n display: flex;\n background: #f8fafc;\n border-bottom: 2px solid #e2e8f0;\n overflow-x: auto;\n white-space: nowrap;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n}\n\n.nav-tabs::-webkit-scrollbar {\n height: 6px;\n}\n\n.nav-tabs::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 3px;\n}\n\n.nav-tabs::-webkit-scrollbar-track {\n background: transparent;\n}\n\n\n.nav-tab {\n flex: 1;\n padding: 15px 20px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1rem;\n font-weight: 600;\n color: #64748b;\n transition: all 0.3s ease;\n position: relative;\n}\n\n.nav-tab:hover {\n background: #e2e8f0;\n color: #1e40af;\n}\n\n.nav-tab.active {\n color: #1e40af;\n background: white;\n}\n\n.nav-tab.active::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 3px;\n background: #1e40af;\n}\n\n.tab-content {\n display: none;\n padding: 30px;\n animation: fadeIn 0.5s ease-in;\n}\n\n.tab-content.active {\n display: block;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.form-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 25px;\n margin-bottom: 30px;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n}\n\n.form-group label {\n font-weight: 600;\n margin-bottom: 8px;\n color: #374151;\n font-size: 0.95rem;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n padding: 12px 15px;\n border: 2px solid #e5e7eb;\n border-radius: 10px;\n font-size: 1rem;\n transition: all 0.3s ease;\n background: white;\n}\n\n.form-group input:focus,\n.form-group select:focus,\n.form-group textarea:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.form-group textarea {\n min-height: 100px;\n resize: vertical;\n}\n\n.items-section {\n background: #f8fafc;\n border-radius: 15px;\n padding: 25px;\n margin: 25px 0;\n border: 2px solid #e2e8f0;\n}\n\n.items-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n}\n\n.items-header h3 {\n color: #1e40af;\n font-size: 1.3rem;\n}\n\n.add-item-btn {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n border: none;\n padding: 10px 20px;\n border-radius: 8px;\n cursor: pointer;\n font-weight: 600;\n transition: all 0.3s ease;\n box-shadow: 0 4px 15px rgba(16, 185, 129, 0.3);\n}\n\n.add-item-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(16, 185, 129, 0.4);\n}\n\n.item-row {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr auto;\n gap: 15px;\n align-items: end;\n margin-bottom: 15px;\n padding: 15px;\n background: white;\n border-radius: 10px;\n border: 1px solid #e5e7eb;\n transition: all 0.3s ease;\n}\n\n.item-row:hover {\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n}\n\n.marginbox {\n margin: 10px\n}\n\n.item-list {\n list-style: none;\n padding: 0;\n margin: 0.5rem 0;\n}\n\n.item-list li {\n background: #f1f5f9;\n margin-bottom: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: 0.375rem;\n font-size: 0.95rem;\n color: #1e293b;\n display: flex;\n justify-content: space-between;\n align-items: center;\n content: '•';\n color: #3b82f6;\n}\n\n\n.remove-item-btn {\n background: #ef4444;\n color: white;\n border: none;\n padding: 8px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n transition: all 0.3s ease;\n}\n\n.remove-item-btn:hover {\n background: #dc2626;\n transform: scale(1.05);\n}\n\n.approval-actions {\n display: flex;\n gap: 10px;\n margin-top: 15px;\n}\n\n.btn-approve {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-approve:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);\n}\n\n.btn-reject {\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-reject:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);\n}\n\n.btn-request {\n background: linear-gradient(135deg, #ef9a44 0%, #fa920a 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-request:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(240, 162, 52, 0.3);\n}\n\n\n.btn-create-po {\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-create-po:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3);\n}\n\n.btn-mark-delivered {\n background: linear-gradient(135deg, #06b6d4 0%, #0891b2 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-mark-delivered:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(6, 182, 212, 0.3);\n}\n\n.po-info {\n background: #f8fafc;\n padding: 15px;\n border-radius: 8px;\n margin: 10px 0;\n border: 1px solid #e2e8f0;\n}\n\n.po-info h4 {\n color: #1e40af;\n margin-bottom: 10px;\n font-size: 1rem;\n}\n\n.po-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 10px;\n font-size: 0.9rem;\n}\n\n.items-list {\n background: #f8fafc;\n padding: 15px;\n border-radius: 8px;\n margin: 15px 0;\n border: 1px solid #e2e8f0;\n}\n\n.items-list h4 {\n color: #374151;\n margin-bottom: 10px;\n font-size: 1rem;\n}\n\n.item-detail {\n display: flex;\n justify-content: space-between;\n padding: 8px 0;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.item-detail:last-child {\n border-bottom: none;\n}\n\n.comments-section {\n margin-top: 15px;\n}\n\n.comments-section textarea {\n width: 100%;\n min-height: 80px;\n padding: 10px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n font-size: 0.9rem;\n resize: vertical;\n}\n\n.role-badge {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-left: 10px;\n}\n\n.role-supervisor {\n background: #fef3c7;\n color: #92400e;\n}\n\n.role-purchasing {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.role-receiving {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-badge {\n display: inline-block;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 0.85rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-draft {\n background: #fef3c7;\n color: #92400e;\n}\n\n.status-under-review {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.status-approved {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-declined {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-info-requested {\n background: #e8cf12;\n color: #da7212;\n}\n\n.status-po-created {\n background: #e0e7ff;\n color: #4bca38;\n}\n\n.status-pending-supply {\n background: #113fd8;\n color: #4bca38;\n}\n\n.status-delivered {\n background: #f3e8ff;\n color: #7c3aed;\n}\n\n.status-received {\n background: #ecfdf5;\n color: #065f46;\n}\n\n.action-buttons {\n display: flex;\n gap: 15px;\n justify-content: flex-end;\n margin-top: 30px;\n padding-top: 25px;\n border-top: 2px solid #e5e7eb;\n}\n\n.btn-primary-req {\n background: linear-gradient(135deg, #1e40af 0%, #3b82f6 100%);\n color: white;\n box-shadow: 0 4px 15px rgba(30, 64, 175, 0.3);\n padding: 12px 25px;\n border: none;\n border-radius: 10px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.btn-primary-req:hover:not(:disabled) {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(30, 64, 175, 0.4);\n}\n\n.btn-primary-req:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: #6b7280;\n color: white;\n}\n\n.btn-secondary:hover {\n background: #4b5563;\n transform: translateY(-2px);\n}\n\n.requisition-list {\n display: grid;\n gap: 20px;\n}\n\n.requisition-card {\n background: white;\n border-radius: 15px;\n padding: 25px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n border: 1px solid #e5e7eb;\n transition: all 0.3s ease;\n}\n\n.requisition-card:hover {\n transform: translateY(-5px);\n box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);\n}\n\n.requisition-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 15px;\n}\n\n.requisition-id {\n font-size: 1.2rem;\n font-weight: 700;\n color: #1e40af;\n}\n\n.requisition-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin-top: 15px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n}\n\n.detail-label {\n font-size: 0.85rem;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n}\n\n.detail-value {\n font-size: 1rem;\n color: #374151;\n font-weight: 500;\n}\n\n.workflow-steps {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin: 30px 0;\n padding: 20px;\n background: #f8fafc;\n border-radius: 15px;\n border: 2px solid #e2e8f0;\n}\n\n.workflow-step {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n position: relative;\n}\n\n.workflow-step:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 20px;\n right: -50%;\n width: 100%;\n height: 2px;\n background: #e5e7eb;\n z-index: 1;\n}\n\n.step-icon {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: #e5e7eb;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: bold;\n color: #6b7280;\n margin-bottom: 10px;\n position: relative;\n z-index: 2;\n}\n\n.step-icon.active {\n background: #3b82f6;\n color: white;\n}\n\n.step-icon.completed {\n background: #10b981;\n color: white;\n}\n\n.step-title {\n font-size: 0.9rem;\n font-weight: 600;\n color: #374151;\n text-align: center;\n}\n\n@media (max-width: 768px) {\n .form-grid {\n grid-template-columns: 1fr;\n }\n\n .item-row {\n grid-template-columns: 1fr;\n gap: 10px;\n }\n\n .action-buttons {\n flex-direction: column;\n }\n\n .workflow-steps {\n flex-direction: column;\n gap: 20px;\n }\n\n .workflow-step::after {\n display: none;\n }\n}\n\n#content {\n width: 100%;\n min-height: 100vh;\n transition: all 0.3s;\n position: absolute;\n padding: 20px;\n padding-left: 40px;\n}\n\n#content.active {\n margin-left: var(--sidebar-width);\n width: calc(100% - var(--sidebar-width));\n}\n\n.po-content {\n padding: 40px;\n}\n\n.po-header {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 40px;\n margin-bottom: 40px;\n}\n\n.company-info,\n.po-details {\n background: #f8f9fa;\n padding: 25px;\n border-radius: 15px;\n border-left: 5px solid #3498db;\n}\n\n.company-info h3,\n.po-details h3 {\n color: #2c3e50;\n margin-bottom: 15px;\n font-size: 1.3rem;\n}\n\n.info-row {\n margin-bottom: 8px;\n display: flex;\n justify-content: space-between;\n}\n\n.info-label {\n font-weight: 600;\n color: #555;\n}\n\n.info-value {\n color: #2c3e50;\n}\n\n.items-section {\n margin-top: 30px;\n}\n\n.section-title {\n color: #2c3e50;\n font-size: 1.5rem;\n margin-bottom: 20px;\n border-bottom: 2px solid #3498db;\n padding-bottom: 10px;\n}\n\n.items-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 30px;\n background: white;\n border-radius: 10px;\n overflow: hidden;\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n}\n\n.items-table th {\n background: linear-gradient(135deg, #34495e 0%, #2c3e50 100%);\n color: white;\n padding: 15px;\n text-align: left;\n font-weight: 600;\n}\n\n.items-table td {\n padding: 15px;\n border-bottom: 1px solid #eee;\n vertical-align: middle;\n}\n\n.items-table tr:hover {\n background: #f8f9fa;\n transform: translateY(-1px);\n transition: all 0.3s ease;\n}\n\n.price-input {\n padding: 8px 12px;\n border: 2px solid #ddd;\n border-radius: 8px;\n font-size: 14px;\n width: 100px;\n transition: all 0.3s ease;\n}\n\n.price-input:focus {\n outline: none;\n border-color: #3498db;\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\n}\n\n.price-changed {\n background: #fff3cd;\n border-color: #ffc107;\n}\n\n.edit-btn {\n background: #3498db;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n transition: all 0.3s ease;\n}\n\n.edit-btn:hover {\n background: #2980b9;\n transform: translateY(-2px);\n}\n\n.save-btn {\n background: #27ae60;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n margin-right: 5px;\n}\n\n.save-btn:disabled {\n background: #95a5a6;\n cursor: not-allowed;\n}\n\n.cancel-btn {\n background: #e74c3c;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.justification-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.modal-content {\n background: white;\n padding: 30px;\n border-radius: 15px;\n max-width: 500px;\n width: 90%;\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);\n}\n\n.modal-content h3 {\n color: #2c3e50;\n margin-bottom: 20px;\n font-size: 1.3rem;\n}\n\n.justification-textarea {\n width: 100%;\n padding: 15px;\n border: 2px solid #ddd;\n border-radius: 8px;\n font-family: inherit;\n font-size: 14px;\n resize: vertical;\n min-height: 100px;\n}\n\n.justification-textarea:focus {\n outline: none;\n border-color: #3498db;\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\n}\n\n.modal-buttons {\n margin-top: 20px;\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n}\n\n.totals {\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n padding: 25px;\n border-radius: 15px;\n margin-top: 20px;\n}\n\n.total-row {\n display: flex;\n justify-content: space-between;\n margin-bottom: 10px;\n font-size: 1.1rem;\n}\n\n.total-row.grand-total {\n border-top: 2px solid #3498db;\n padding-top: 15px;\n margin-top: 15px;\n font-weight: bold;\n font-size: 1.3rem;\n color: #2c3e50;\n}\n\n.justification-note {\n background: #fff3cd;\n border: 1px solid #ffc107;\n border-radius: 8px;\n padding: 10px;\n margin-top: 10px;\n font-size: 12px;\n color: #856404;\n}\n\n.price-change-indicator {\n background: #dc3545;\n color: white;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: 5px;\n}\n\n@media (max-width: 768px) {\n .po-header {\n grid-template-columns: 1fr;\n gap: 20px;\n }\n\n .items-table {\n font-size: 14px;\n }\n\n .items-table th,\n .items-table td {\n padding: 10px 8px;\n }\n\n .price-input {\n width: 80px;\n }\n}\n</style>","// ===== src/utils/sidebarConfig.js =====\nexport const createSidebarConfig = (options = {}) => {\n return {\n brandName: options.brandName || 'OceanHelm',\n logoIcon: options.logoIcon || 'bi bi-water',\n showLogo: options.showLogo !== false,\n responsive: options.responsive !== false,\n ...options\n }\n}\n\n// Roles that behave like \"owner\" in terms of broad visibility\n// (super-staff gets everything owner sees, minus Activity Log and approvals)\nexport const defaultMenuItems = [\n {\n type: 'link',\n label: 'Home',\n icon: 'bi bi-house',\n roles: ['owner', 'super-staff', 'staff', 'captain'],\n href: '/app/dashboard',\n active: true\n },\n {\n type: 'button',\n label: 'Guide',\n icon: 'bi bi-compass',\n action: 'guide',\n roles: ['crew']\n },\n {\n // Activity Log — intentionally excluded from super-staff\n type: 'link',\n label: 'Activity Log',\n icon: 'bi bi-activity',\n href: '/activity-log',\n roles: ['owner']\n },\n {\n type: 'link',\n label: 'People Manager',\n icon: 'bi bi-person-plus',\n href: '/app/people-manager',\n roles: ['owner', 'super-staff']\n },\n {\n type: 'text',\n label: 'Modules'\n },\n {\n type: 'dropdown',\n label: 'Compliance',\n roles: ['owner', 'staff', 'captain'],\n icon: 'bi bi-list-ul',\n children: [\n { label: 'Vessel Certification', action: 'vessel-cert' },\n {\n label: 'Reports', action: 'reports', roles: ['owner', 'staff', 'captain'],\n categories: ['marine-staff']\n }, // only visible to staff who also have the 'marine-staff' category\n { label: 'Crew Certification', action: 'crew-cert', roles: ['owner', 'staff', 'captain'], categories: ['marine-staff'] },\n { label: 'QHSE Compliance', action: 'qhse', roles: ['owner', 'staff', 'captain'], categories: ['marine-staff'] },\n { label: 'Track Garbage', action: 'garbage', roles: ['owner', 'staff', 'captain'], categories: ['marine-staff'] },\n ]\n },\n {\n // ── HR MODULE ──────────────────────────────────────────────────────────\n // Visible to owner, super-staff, and staff with the 'hr' category.\n // Category-based filtering is handled by the sidebar's permissionChecker.\n type: 'dropdown',\n label: 'HR',\n icon: 'bi bi-people-fill',\n roles: ['owner', 'captain', 'staff'],\n categories: ['hr'], // staff must also have this category\n children: [\n {\n label: 'Attendance',\n action: 'hr-attendance',\n roles: ['owner', 'captain', 'staff'],\n categories: ['hr', 'marine-staff'],\n },\n {\n label: 'Payroll',\n action: 'hr-payroll',\n roles: ['owner', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Appraisals',\n action: 'hr-appraisals',\n roles: ['owner', 'captain', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Leave Management',\n action: 'hr-leave',\n roles: ['owner', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Disciplinary Log',\n action: 'hr-disciplinary',\n roles: ['owner', 'staff'], // owner-only, no category gate needed\n categories: ['hr'],\n },\n ]\n },\n {\n // ── RECRUITMENT MODULE ─────────────────────────────────────────────────\n // Accessible to owner, super-staff, and staff with the 'hr' category.\n type: 'dropdown',\n label: 'Recruitment',\n icon: 'bi bi-person-fill-add',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'], // staff must also have this category\n children: [\n {\n label: 'Manage Recruitment',\n action: 'recruitment-builder',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'],\n }\n ]\n },\n /* ── end HR / RECRUITMENT MODULES ── */\n {\n type: 'button',\n label: 'Maintenance',\n icon: 'bi bi-tools',\n action: 'maintenance',\n roles: ['owner', 'staff', 'captain'],\n categories: ['marine-staff']\n },\n {\n type: 'dropdown',\n label: 'Crew Management',\n icon: 'bi bi-people',\n roles: ['owner','staff', 'captain'],\n children: [\n { label: 'All Crew', action: 'crew-all', roles: ['owner', 'staff'], categories: ['marine-staff'] },\n { label: 'Get Crew by Vessel', action: 'crew-by-vessel', roles: ['owner', 'captain', 'staff'], categories: ['marine-staff'] },\n { label: 'Schedule', action: 'schedule', roles: ['owner', 'captain'] },\n ]\n },\n {\n type: 'dropdown',\n label: 'Inventory Management',\n icon: 'bi bi-clipboard-data',\n roles: ['owner', 'super-staff', 'staff', 'captain'],\n children: [\n { label: 'Parts Inventory', action: 'inventory', roles: ['owner', 'staff', 'captain'], categories: ['controller', 'marine-staff'] },\n { label: 'Bunkering', action: 'fuel', roles: ['owner', 'staff', 'captain'], categories: ['controller', 'marine-staff'] },\n ]\n },\n {\n type: 'link',\n label: 'Requisition Processing',\n icon: 'bi bi-calendar-check',\n href: '/app/requisition',\n roles: ['owner', 'staff', 'captain'],\n categories: ['controller', 'marine-staff', 'requisitor', 'purchaser']\n },\n {\n type: 'button',\n label: 'Voyage Manager',\n icon: 'fas fa-ship',\n action: 'coming-soon',\n roles: ['owner', 'staff', 'captain'],\n categories: ['marine-staff']\n },\n {\n type: 'button',\n label: 'Vessel Log',\n icon: 'bi bi-file-ruled',\n action: 'coming-soon',\n roles: ['owner', 'staff', 'captain'],\n categories: ['marine-staff']\n\n },\n {\n type: 'button',\n label: 'Profile',\n icon: 'bi bi-people',\n action: 'crew-profile',\n roles: ['crew']\n },\n {\n type: 'button',\n label: 'Training',\n icon: 'bi bi-book',\n action: 'crew-training',\n roles: ['crew']\n },\n {\n type: 'button',\n label: 'Settings',\n icon: 'bi bi-gear',\n action: 'settings',\n roles: ['owner', 'super-staff', 'staff']\n },\n {\n type: 'button',\n label: 'Help & Support',\n icon: 'bi bi-question-circle',\n action: 'help',\n }\n]","// ===== src/utils/permissions.js =====\nexport const defaultPermissionChecker = (item, userProfile) => {\n // No role restrictions\n if (!item.roles || item.roles.length === 0) {\n return true\n }\n\n // Check if user role is in allowed roles\n return item.roles.includes(userProfile?.role)\n}","// src/index.js - Library entry point\nimport ConfigurableSidebar from './components/ConfigurableSidebar.vue'\nimport VesselList from './components/VesselList.vue'\nimport DashHead from './components/DashHead.vue' \nimport Reports from './components/Reports.vue' \nimport OceanHelmMaintenance from './components/OceanHelmMaintenance.vue'\nimport ActivityLogs from './components/ActivityLogs.vue'\nimport CrewManagement from './components/CrewManagement.vue'\nimport RequisitionSystem from './components/RequisitionSystem.vue'\n\nimport { createSidebarConfig, defaultMenuItems } from './utils/sidebarConfig'\nimport { defaultPermissionChecker } from './utils/permissions'\n\n// Export main components\nexport { ConfigurableSidebar, VesselList, DashHead, Reports, CrewManagement, ActivityLogs, OceanHelmMaintenance, RequisitionSystem }\n\n// Export utilities\nexport { createSidebarConfig, defaultMenuItems, defaultPermissionChecker }\n\n// Export types for TypeScript users\nexport * from './types'\n\n// Default export for plugin-style usage\nexport default {\n install(app, options = {}) {\n app.component('ConfigurableSidebar', ConfigurableSidebar)\n app.component('VesselLists', VesselList)\n app.component('DashHead', DashHead)\n app.component('Reports', Reports)\n app.component('ActivityLogs', ActivityLogs)\n app.component('CrewManagement', CrewManagement)\n app.component('RequisitionSystem', RequisitionSystem)\n app.component('OceanHelmMaintenance', OceanHelmMaintenance)\n\n // Provide global configuration\n app.provide('sidebarConfig', options)\n }\n}"],"names":["_sfc_main","item","child","i","userRole","_a","userCategories","_b","cat","sidebarToggle","sidebar","content","event","isClickInsideSidebar","isClickOnToggleBtn","_hoisted_2","_hoisted_3","_hoisted_8","_createElementBlock","$options","$props","_openBlock","_hoisted_1","_createElementVNode","_toDisplayString","_Fragment","_renderList","index","$event","_withModifiers","_normalizeClass","_createTextVNode","_withDirectives","subItem","subIndex","_hoisted_9","_vShow","_hoisted_10","_hoisted_11","_renderSlot","_ctx","vessel","status","navigationData","action","date","registrationNumber","now","inputDate","diffMs","diffHours","days","hours","result","role","userVessel","categories","isMarineStaff","expiry_date","today","diffTime","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_14","_hoisted_15","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_26","_hoisted_27","_hoisted_29","_hoisted_31","$data","_cache","args","_hoisted_12","_hoisted_13","_hoisted_16","_hoisted_25","_hoisted_28","_hoisted_30","_hoisted_33","r","ctx","ref","val","prev","reportId","f","report","type","file","folder","isManual","payload","entityRef","el","key","attachments","imageFiles","reportPdfBytes","err","blob","src","resolve","reject","s","jsPDF","doc","pageW","margin","contentW","y","checkPage","needed","sectionHeading","text","fieldRow","label","value","labelWidth","valLines","hx","participantCount","crewLines","raw","list","colNr","wNr","colName","wName","name","idx","checkQuestions","checkAnswers","q","yes","scenarioText","line","imgFile","dataUrl","props","ratio","iw","ih","e","totalPages","p","labelledBox","minHeight","bodyText","textH","boxH","labelLines","ll","labelH","ty","incLabel","halfW","titleLines","meta","colW","col","row","xo","yo","addSection","heading","allAttachments","zip","safeName","att","bytes","resp","filename","url","a","files","k","sizes","d","_hoisted_17","_hoisted_34","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_53","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_72","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_81","_hoisted_83","_hoisted_84","_hoisted_85","_hoisted_86","_hoisted_87","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_99","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_105","_hoisted_106","_hoisted_107","_hoisted_108","_hoisted_111","_hoisted_114","_hoisted_116","_hoisted_118","_hoisted_121","_hoisted_122","_hoisted_125","_hoisted_126","_hoisted_128","_hoisted_129","_hoisted_130","_hoisted_131","_hoisted_133","_hoisted_134","_hoisted_135","_hoisted_136","_hoisted_137","_hoisted_141","_hoisted_142","_hoisted_143","_hoisted_145","_hoisted_146","_hoisted_147","_hoisted_150","_hoisted_155","_hoisted_159","_hoisted_161","_hoisted_162","_hoisted_163","_hoisted_164","_hoisted_165","_hoisted_166","_hoisted_167","_hoisted_168","_hoisted_170","_hoisted_171","_hoisted_173","_hoisted_178","_hoisted_179","_hoisted_181","_hoisted_183","_hoisted_185","_hoisted_186","_createVNode","_Transition","_hoisted_32","_hoisted_39","_hoisted_40","_hoisted_52","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_64","_hoisted_65","_hoisted_71","_hoisted_74","_hoisted_75","_hoisted_82","_hoisted_90","_hoisted_96","_hoisted_98","_hoisted_104","_hoisted_109","_hoisted_110","_hoisted_112","_hoisted_113","_hoisted_115","x","_hoisted_117","_hoisted_119","_vModelSelect","_hoisted_120","_vModelText","_hoisted_123","_hoisted_124","_hoisted_138","_hoisted_139","_hoisted_140","_hoisted_144","_hoisted_148","_hoisted_149","_hoisted_151","_hoisted_153","_hoisted_154","_hoisted_157","_hoisted_158","_hoisted_160","_hoisted_169","_hoisted_172","_hoisted_174","_hoisted_175","_hoisted_176","_hoisted_177","_hoisted_180","_hoisted_182","_hoisted_188","_hoisted_189","newDate","task","query","total","profile","taskId","checklist","newTask","filter","taskComponent","t","requiredFields","field","section","recurrence","nextDate","nextDueDate","diffDays","taskData","success","updateData","updatedAfter","dateString","completed","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_44","_hoisted_62","_hoisted_63","_hoisted_70","_hoisted_73","_hoisted_80","_hoisted_89","_hoisted_95","_hoisted_97","member","_vModelCheckbox","_hoisted_54","_hoisted_58","_hoisted_88","_normalizeStyle","recommendation","timestamp","log","change","page","cert","companyVerification","v","matchesSearch","matchesStatus","entries","logEntry","b","dateA","dateB","filtered","entry","search","dates","minDate","maxDate","formatDate","breakdown","vessels","isVessel","rolePermissions","mostRecentOnboard","onboardDate","arrivalDate","newGuest","duration","sorted","valA","valB","hasName","hasDate","hasImage","validCertifications","finalRole","certificationsWithUrls","uploadResult","newMember","email","embarkDate","memberId","certification","reader","fileInput","expiryDate","dateStr","expiry","oneMonthFromNow","data","req","tab","sum","unitPrice","userId","tabName","taxRate","statusFields","requisition","id","_c","details","info","isPrinting","_hoisted_127","dept","unit","_d","_e","_f","_g","_h","_i","_k","_j","_m","_l","_hoisted_132","createSidebarConfig","options","defaultMenuItems","defaultPermissionChecker","userProfile","app","ConfigurableSidebar","VesselList","DashHead","Reports","ActivityLogs","CrewManagement","RequisitionSystem","OceanHelmMaintenance"],"mappings":"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"}
|