oceanhelm 0.0.9 → 0.0.11
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.
- package/dist/oceanhelm.es.js +1577 -876
- package/dist/oceanhelm.es.js.map +1 -1
- package/dist/oceanhelm.umd.js +1 -1
- package/dist/oceanhelm.umd.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/components/ConfigurableSidebar.vue +1 -2
- package/src/components/CrewManagement.vue +1060 -54
- package/src/components/DashHead.vue +10 -0
- package/src/components/Reports.vue +612 -0
- package/src/index.js +3 -1
- package/src/utils/sidebarConfig.js +45 -13
package/dist/oceanhelm.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oceanhelm.es.js","sources":["../src/components/ConfigurableSidebar.vue","../src/components/VesselList.vue","../src/components/DashHead.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 <i :class=\"logoIcon\" class=\"me-2\"></i>\n <span>{{ 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\" type=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuLink\">\n <a v-for=\"(subItem, subIndex) in getFilteredChildren(item)\" :key=\"subIndex\" class=\"dropdown-item black\"\n @click.prevent=\"handleAction(subItem)\" style=\"cursor: pointer;\">\n {{ subItem.label }}\n </a>\n </div>\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 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 // Permission checker function\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 // Check if the item itself has permission\n if (!this.hasPermission(item)) {\n return false;\n }\n\n // For dropdown items, check if any children have permission\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 // Get filtered children for dropdown items\n getFilteredChildren(item) {\n if (!item.children) return [];\n return item.children.filter(child => this.hasPermission(child));\n },\n\n // Permission checking\n hasPermission(item) {\n // Use custom permission checker if provided\n if (this.permissionChecker) {\n return this.permissionChecker(item, this.userProfile);\n }\n\n // Default role-based checking\n if (!item.roles || item.roles.length === 0) {\n return true; // No role restriction\n }\n\n return item.roles.includes(this.userProfile.role);\n },\n\n // Navigation handling\n handleNavigation(item) {\n this.$emit('navigate', item);\n\n // Default behavior if no custom handler\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 if (item.type === 'dropdown') {\n // Handle dropdown specific logic if needed\n }\n },\n\n // Responsive behavior\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 // Initial state for desktop\n if (window.innerWidth >= 768) {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n }\n\n // Toggle functionality\n sidebarToggle.addEventListener('click', () => {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n });\n\n // Close sidebar on outside click (mobile)\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>","<template>\n <!-- Fleet Summary -->\n <div class=\"row mb-3\">\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\" \n @click=\"filterVessels('Active')\"\n :class=\"{ 'border-primary border-2': activeFilter === 'Active' }\"\n 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\"\n @click=\"filterVessels('Inactive')\"\n :class=\"{ 'border-secondary border-2': activeFilter === 'Inactive' }\"\n 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 \n v-if=\"activeFilter !== 'All'\" \n class=\"btn btn-sm btn-outline-secondary\"\n @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 } = this.userProfile;\n\n return role === 'owner' ||\n role === 'staff' ||\n (role === 'captain' && userVessel === vessel.name);\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</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\n type=\"text\"\n placeholder=\"Search activities, users, or actions...\"\n :value=\"searchTerm\"\n @input=\"$emit('update:searchTerm', $event.target.value)\"\n />\n </div>\n <select\n class=\"filter-select\"\n :value=\"selectedFilter\"\n @change=\"$emit('update:selectedFilter', $event.target.value)\"\n >\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\n v-for=\"page in totalPages\"\n :key=\"page\"\n @click=\"$emit('change-page', page)\"\n :class=\"{ active: currentPage === page }\"\n >\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>\n export 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 <h2>{{ sectionTitle }}</h2>\n <button class=\"btn btn-primary\" @click=\"handleToggleAddForm\" v-if=\"canAddCrew\">\n {{ showAddForm ? 'Cancel' : '+ Add Crew Member' }}\n </button>\n </div>\n\n <!-- Search and Filter -->\n <div class=\"search-filter\">\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=\"unavailable\">Unavailable</option>\n </select>\n </div>\n\n <!-- Loading State -->\n <div v-if=\"loading\" 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 <!-- Crew Grid -->\n <div class=\"crew-grid\" v-else-if=\"filteredCrew.length > 0\">\n <div v-for=\"member in filteredCrew\" :key=\"member.id\" class=\"crew-card\"\n :class=\"{ 'unavailable': member.status === 'unavailable' }\">\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 }}</div>\n\n <!-- Certifications -->\n <div class=\"crew-certifications\">\n <div v-for=\"cert in member.certifications\" :key=\"cert.name\" class=\"certification-tag\"\n :class=\"getCertificationClass(cert.expiryDate)\" @click=\"handleViewCertification(cert, member)\">\n {{ cert.name }}\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 -->\n <div class=\"crew-availability\">\n <strong>Embarkation Date:</strong> {{ member.nextShift || 'Not Scheduled' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard (in days):</strong> {{ member.onBoard || 'Not Scheduled' }}\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 <button class=\"btn btn-primary\" @click=\"handleAssignShift(member)\" v-if=\"canAssignShift\">\n Assign Shift\n </button>\n </div>\n\n <!-- Delete Button -->\n <i class=\"bi bi-trash icon delete-icon\" @click=\"handleDeleteCrew(member)\" v-if=\"canDeleteCrew\"></i>\n </div>\n </div>\n\n <!-- No Results -->\n <div v-else-if=\"!loading\" 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-status\">Status *</label>\n <select id=\"crew-status\" v-model=\"newCrew.status\">\n <option value=\"available\">Available</option>\n <option value=\"onduty\">On Duty</option>\n <option value=\"unavailable\">Unavailable</option>\n </select>\n </div>\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 <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 <!-- 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 </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'CrewManagement',\n\n props: {\n // Required props\n crew: {\n type: Array,\n required: true,\n default: () => []\n },\n vesselName: {\n type: String,\n default: ''\n },\n userProfile: {\n type: Object,\n default: () => ({ role: 'viewer' })\n },\n\n // Optional props\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\n // Configuration props\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 'crew-assign-shift',\n 'crew-add-certification',\n 'crew-view-certification',\n 'search-changed',\n 'filter-changed',\n 'access-denied'\n ],\n\n data() {\n return {\n searchQuery: '',\n filterStatus: 'all',\n showAddForm: false,\n formErrors: {},\n newCrew: {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'available',\n nextShift: '',\n certifications: [{ name: '', expiryDate: '' }],\n notes: '',\n email: '',\n onBoard: ''\n }\n }\n },\n\n computed: {\n sectionTitle() {\n return this.vesselName ? `Current Crew for ${this.vesselName}` : 'All Fleet Crew'\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 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\n methods: {\n // Permission checking\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'], // default for captain\n 'viewer': ['view']\n }\n\n let rolePermissions = permissions[role] || []\n\n // Special case: captain + isVessel = true\n if (role === 'captain' && isVessel) {\n rolePermissions = [...rolePermissions, 'add']\n }\n\n return rolePermissions.includes(action)\n },\n\n // Event handlers\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 handleSearch() {\n this.$emit('search-changed', this.searchQuery)\n },\n\n handleFilter() {\n this.$emit('filter-changed', this.filterStatus)\n },\n\n handleAddCrewMember() {\n if (!this.validateForm()) {\n return\n }\n\n const validCertifications = this.newCrew.certifications.filter(cert =>\n cert.name.trim() !== '' && cert.expiryDate !== ''\n )\n\n const finalRole = this.newCrew.role === 'Other' ? this.newCrew.customRole : this.newCrew.role\n\n const newMember = {\n name: this.newCrew.name,\n role: finalRole,\n status: this.newCrew.status,\n certifications: validCertifications,\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 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 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 // Form management\n resetForm() {\n this.newCrew = {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'available',\n nextShift: '',\n certifications: [{ name: '', expiryDate: '' }],\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 // Check required fields\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 // Validate email format\n if (this.newCrew.email && !this.isValidEmail(this.newCrew.email)) {\n this.formErrors.email = 'Please enter a valid email address'\n }\n\n // Validate custom role\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 return Object.keys(this.formErrors).length === 0\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({ name: '', expiryDate: '' })\n },\n\n removeCertification(index) {\n this.newCrew.certifications.splice(index, 1)\n },\n\n // Utility methods\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 'unavailable': 'status-unavailable'\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}\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.crew-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\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}\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-onduty {\n background-color: #cce5ff;\n color: #004085;\n}\n\n.action-buttons {\n display: flex;\n justify-content: space-between;\n margin-top: 15px;\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}\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.search-filter {\n display: flex;\n margin-bottom: 20px;\n gap: 10px;\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 width: 30%;\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}\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-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: 20px;\n color: #6c757d;\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.vcard {\n border-radius: 6px;\n padding: 5px;\n}\n\n#content.active {\n margin-left: var(--sidebar-width);\n width: calc(100% - var(--sidebar-width));\n}\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\" 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\" 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\">Submit Requisition</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 }} </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 }}</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 }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Phone:</span>\n <span class=\"info-value\">{{ vendorInfo.phone || poDetails.vendorInfo?.phone }}</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 }}</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 }}</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 }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Department:</span>\n <span class=\"info-value\">PO-{{ poDetails.department }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Delivery Date:</span>\n <span class=\"info-value\">{{ poDetails.neededDate }}</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 }}</td>\n <td>{{ item.desc }}</td>\n <td>{{ item.qty }}</td>\n <td>\n <span v-if=\"!item.editing\">\n ${{ item.cost.toFixed(2) }}\n <span v-if=\"item.cost !== item.unitPrice\" class=\"price-change-indicator\">!</span>\n </span>\n <input v-else v-model.number=\"item.tempPrice\" type=\"number\" step=\"0.01\"\n class=\"price-input\" :class=\"{ 'price-changed': item.cost !== item.tempPrice }\">\n </td>\n <td>${{ (item.unitPrice * item.qty).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 }}):</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 (%):</span>\n <span>${{ getOptional(vendorInfo.tax) }}</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>${{ (subTotal + getOptional(vendorInfo.tax) + getOptional(vendorInfo.shipping)).toFixed(2)\n }}</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\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} 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 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 return sum + (item.unitPrice * item.qty);\n }, 0);\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 getOptional(value) {\n return typeof value === 'number' ? value.toFixed(2) : '0.00';\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;\n },\n\n cancelEdit(index) {\n this.poDetails.items[index].editing = false;\n this.poDetails.items[index].tempPrice = this.poDetails.items[index].unitPrice;\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 const requisition = this.collectFormData('under-review');\n this.$emit('submit-requisition', requisition);\n this.resetForm();\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,\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;\n item.unitPrice = item.cost;\n item.subTotal = item.unitPrice * item.qty;\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 /* enable horizontal scroll */\n white-space: nowrap;\n /* prevent wrapping */\n -webkit-overflow-scrolling: touch;\n /* smooth scrolling on mobile */\n scrollbar-width: thin;\n /* optional: thinner scrollbar in Firefox */\n}\n\n/* Optional: style the scrollbar (Webkit browsers only) */\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 /* Light blue-gray background */\n margin-bottom: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: 0.375rem;\n /* Rounded corners */\n font-size: 0.95rem;\n color: #1e293b;\n /* Dark text */\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 {\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 min-width: 120px;\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}\n\n.btn-primary-req:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(30, 64, 175, 0.4);\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.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\nexport const defaultMenuItems = [\n {\n type: 'link',\n label: 'Home',\n icon: 'bi bi-speedometer2',\n href: '/app/dashboard',\n active: true\n },\n {\n type: 'link',\n label: 'Activity Log',\n icon: 'bi bi-activity',\n href: '/activity-log',\n roles: ['owner'] // Role-based visibility\n },\n {\n type: 'text',\n label: 'Modules'\n },\n {\n type: 'dropdown',\n label: 'Compliance',\n icon: 'bi bi-list-ul',\n children: [\n {\n label: 'Vessel Certification',\n action: 'vessel-cert',\n },\n {\n type: 'separator'\n },\n {\n label: 'Crew Certification',\n action: 'crew-cert'\n },\n {\n type: 'separator'\n },\n {\n label: 'Reports',\n action: 'reports'\n },\n ]\n },\n /* \n {\n type: 'link',\n label: 'Business Intelligence',\n icon: 'bi bi-graph-up-arrow',\n href: '/app/analytics'\n },\n */\n {\n type: 'button',\n label: 'Maintenance',\n icon: 'bi bi-tools',\n action: 'maintenance'\n },\n {\n type: 'dropdown',\n label: 'Crew Management',\n icon: 'bi bi-people',\n children: [\n {\n label: 'All Crew',\n action: 'crew-all',\n roles: ['owner', 'staff']\n },\n {\n type: 'separator'\n },\n {\n label: 'Get Crew by Vessel',\n action: 'crew-by-vessel'\n }\n ]\n },\n {\n type: 'link',\n label: 'Inventory Management',\n icon: 'bi bi-clipboard-data',\n href: '/app/inventory'\n },\n {\n type: 'link',\n label: 'Requisition Processing',\n icon: 'bi bi-calendar-check',\n href: '/app/requisition'\n },\n {\n type: 'button',\n label: 'Voyage Manager',\n icon: 'fas fa-ship',\n action: 'coming-soon'\n },\n {\n type: 'button',\n label: 'Vessel Log',\n icon: 'bi bi-file-ruled',\n action: 'vessel-log'\n },\n {\n type: 'button',\n label: 'Settings',\n icon: 'bi bi-gear',\n action: 'settings',\n roles: ['owner', '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 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, 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('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","_a","sidebarToggle","sidebar","content","event","isClickInsideSidebar","isClickOnToggleBtn","_hoisted_2","_createElementBlock","$options","$props","_openBlock","_hoisted_1","_createElementVNode","_normalizeClass","_Fragment","_renderList","index","$event","_withModifiers","_toDisplayString","_hoisted_6","_hoisted_7","subItem","subIndex","_hoisted_8","_hoisted_9","_hoisted_10","_renderSlot","_ctx","vessel","status","navigationData","action","date","registrationNumber","now","inputDate","diffMs","diffHours","days","hours","result","role","userVessel","expiry_date","today","diffTime","_hoisted_3","_hoisted_4","_hoisted_5","_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","_createTextVNode","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_16","_hoisted_25","_hoisted_28","_hoisted_30","_hoisted_33","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_17","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_57","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_82","_hoisted_83","_hoisted_85","_hoisted_87","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_95","_hoisted_96","_hoisted_97","_withDirectives","_vModelText","_vModelSelect","member","_hoisted_32","_vModelCheckbox","_hoisted_48","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_58","_hoisted_84","_hoisted_86","_hoisted_88","_normalizeStyle","recommendation","timestamp","log","change","key","page","matchesSearch","matchesStatus","isVessel","rolePermissions","validCertifications","cert","finalRole","newMember","certification","email","expiryDate","dateStr","expiry","oneMonthFromNow","req","tab","sum","r","userId","tabName","value","statusFields","requisition","id","details","info","isPrinting","_hoisted_98","_hoisted_99","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_104","_hoisted_105","_hoisted_106","_hoisted_107","_hoisted_108","_hoisted_109","_hoisted_110","_hoisted_121","_hoisted_122","_hoisted_123","_hoisted_124","_hoisted_125","_hoisted_126","_hoisted_127","_hoisted_128","dept","v","unit","_b","_c","_d","_e","_f","_g","_hoisted_112","_hoisted_113","_hoisted_115","_hoisted_117","_hoisted_118","_hoisted_119","_hoisted_116","_hoisted_120","_i","_h","_k","_j","_hoisted_129","_hoisted_130","createSidebarConfig","options","defaultMenuItems","defaultPermissionChecker","userProfile","app","ConfigurableSidebar","VesselList","DashHead","ActivityLogs","CrewManagement","RequisitionSystem","OceanHelmMaintenance"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oceanhelm.es.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\" type=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuLink\">\n <a v-for=\"(subItem, subIndex) in getFilteredChildren(item)\" :key=\"subIndex\" class=\"dropdown-item black\"\n @click.prevent=\"handleAction(subItem)\" style=\"cursor: pointer;\">\n {{ subItem.label }}\n </a>\n </div>\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 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 // Permission checker function\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 // Check if the item itself has permission\n if (!this.hasPermission(item)) {\n return false;\n }\n\n // For dropdown items, check if any children have permission\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 // Get filtered children for dropdown items\n getFilteredChildren(item) {\n if (!item.children) return [];\n return item.children.filter(child => this.hasPermission(child));\n },\n\n // Permission checking\n hasPermission(item) {\n // Use custom permission checker if provided\n if (this.permissionChecker) {\n return this.permissionChecker(item, this.userProfile);\n }\n\n // Default role-based checking\n if (!item.roles || item.roles.length === 0) {\n return true; // No role restriction\n }\n\n return item.roles.includes(this.userProfile.role);\n },\n\n // Navigation handling\n handleNavigation(item) {\n this.$emit('navigate', item);\n\n // Default behavior if no custom handler\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 if (item.type === 'dropdown') {\n // Handle dropdown specific logic if needed\n }\n },\n\n // Responsive behavior\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 // Initial state for desktop\n if (window.innerWidth >= 768) {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n }\n\n // Toggle functionality\n sidebarToggle.addEventListener('click', () => {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n });\n\n // Close sidebar on outside click (mobile)\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>","<template>\n <!-- Fleet Summary -->\n <div class=\"row mb-3\">\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\" \n @click=\"filterVessels('Active')\"\n :class=\"{ 'border-primary border-2': activeFilter === 'Active' }\"\n 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\"\n @click=\"filterVessels('Inactive')\"\n :class=\"{ 'border-secondary border-2': activeFilter === 'Inactive' }\"\n 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 \n v-if=\"activeFilter !== 'All'\" \n class=\"btn btn-sm btn-outline-secondary\"\n @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 } = this.userProfile;\n\n return role === 'owner' ||\n role === 'staff' ||\n (role === 'captain' && userVessel === vessel.name);\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 <div class=\"page-header d-flex justify-content-between align-items-center\">\n <h4 style=\"margin-left: 20px;\">Reports</h4>\n <div class=\"d-flex\">\n <button class=\"btn btn-primary\" @click=\"showNewFolderModal = true\">\n <i class=\"bi bi-folder-plus\"></i> New Folder\n </button>\n </div>\n </div>\n\n <!-- Folders List -->\n <div class=\"folders-section\" v-if=\"folders.length > 0\">\n <div class=\"folder-card\" \n v-for=\"folder in folders\" \n :key=\"folder.id\"\n @mouseenter=\"showPreview(folder.id)\"\n @mouseleave=\"hidePreview\">\n <div class=\"folder-content\" @click=\"toggleFolder(folder.id)\">\n <i class=\"bi bi-folder-fill text-warning\" style=\"font-size: 2.5rem;\"></i>\n <div class=\"folder-name\">{{ folder.name }}</div>\n <small class=\"text-muted\">{{ folder.files.length }} file(s)</small>\n </div>\n \n <div class=\"folder-actions-overlay\">\n <button class=\"btn btn-sm btn-icon\" @click.stop=\"selectFolder(folder)\" title=\"Add Files\">\n <i class=\"bi bi-file-earmark-plus\"></i>\n </button>\n <button class=\"btn btn-sm btn-icon\" @click.stop=\"deleteFolder(folder.id)\" title=\"Delete Folder\">\n <i class=\"bi bi-trash\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Empty State -->\n <div class=\"empty-state text-center\" v-else>\n <i class=\"bi bi-folder2-open\" style=\"font-size: 4rem; color: #ccc;\"></i>\n <h5 class=\"mt-3 text-muted\">No folders yet</h5>\n <p class=\"text-muted\">Create a folder to start organizing your reports</p> \n </div>\n\n <!-- Expanded Folder Modal (Click to Open) -->\n <div class=\"folder-modal-overlay\" v-if=\"expandedFolders.length > 0\" @click=\"closeAllFolders\">\n <div class=\"folder-expanded\" @click.stop>\n <div class=\"expanded-header\">\n <strong>{{ getExpandedFolder().name }}</strong>\n <button class=\"btn btn-sm btn-close-expanded\" @click=\"closeAllFolders\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n \n <div class=\"files-list\" v-if=\"getExpandedFolder().files.length > 0\">\n <div class=\"file-item d-flex justify-content-between align-items-center\" \n v-for=\"file in getExpandedFolder().files\" :key=\"file.id\">\n <div class=\"file-info d-flex align-items-center\">\n <i class=\"bi bi-file-earmark-text me-2\"></i>\n <span>{{ file.name }}</span>\n <small class=\"text-muted ms-2\">({{ formatFileSize(file.size) }})</small>\n </div>\n <button class=\"btn btn-sm btn-outline-danger\" @click=\"removeFile(getExpandedFolder().id, file.id)\">\n <i class=\"bi bi-x-circle\"></i>\n </button>\n </div>\n </div>\n <div v-else class=\"empty-folder-message\">\n <i class=\"bi bi-inbox\"></i>\n <p>No files in this folder</p>\n <button class=\"btn btn-sm btn-primary\" @click=\"selectFolder(getExpandedFolder())\">\n <i class=\"bi bi-file-earmark-plus\"></i> Add Files\n </button>\n </div>\n </div>\n </div>\n\n <!-- New Folder Modal -->\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\">Create New Folder</h5>\n <button type=\"button\" class=\"btn-close\" @click=\"showNewFolderModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"mb-3\">\n <label class=\"form-label\">Folder Name</label>\n <input \n type=\"text\" \n class=\"form-control\" \n v-model=\"newFolderName\"\n @keyup.enter=\"createFolder\"\n placeholder=\"Enter folder name\"\n />\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" @click=\"showNewFolderModal = false\">Cancel</button>\n <button type=\"button\" class=\"btn btn-primary\" @click=\"createFolder\" :disabled=\"!newFolderName.trim()\">\n Create Folder\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- File Input (Hidden) -->\n <input \n ref=\"fileInput\" \n type=\"file\" \n multiple \n style=\"display: none;\" \n @change=\"handleFileSelection\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'Reports',\n \n data() {\n return {\n folders: [],\n showNewFolderModal: false,\n newFolderName: '',\n selectedFolder: null,\n expandedFolders: [],\n previewFolder: null\n }\n },\n\n emits: [\n 'folder-created',\n 'files-added',\n 'file-removed',\n 'folder-deleted',\n 'data-updated'\n ],\n\n methods: {\n createFolder() {\n if (!this.newFolderName.trim()) return;\n\n const newFolder = {\n id: Date.now(),\n name: this.newFolderName.trim(),\n files: [],\n createdAt: new Date()\n };\n\n this.folders.push(newFolder);\n this.$emit('folder-created', newFolder);\n this.$emit('data-updated', { folders: this.folders, allFiles: this.getAllFilesData() });\n \n this.newFolderName = '';\n this.showNewFolderModal = false;\n },\n\n selectFolder(folder) {\n this.selectedFolder = folder;\n this.$refs.fileInput.click();\n },\n\n handleFileSelection(event) {\n const files = Array.from(event.target.files);\n \n if (!this.selectedFolder || files.length === 0) return;\n\n const newFiles = files.map(file => ({\n id: Date.now() + Math.random(),\n name: file.name,\n size: file.size,\n type: file.type,\n file: file,\n addedAt: new Date()\n }));\n\n this.selectedFolder.files.push(...newFiles);\n \n this.$emit('files-added', {\n folderId: this.selectedFolder.id,\n files: newFiles\n });\n this.$emit('data-updated', { folders: this.folders, allFiles: this.getAllFilesData() });\n\n // Reset file input\n event.target.value = '';\n this.selectedFolder = null;\n },\n\n removeFile(folderId, fileId) {\n const folder = this.folders.find(f => f.id === folderId);\n if (folder) {\n const fileIndex = folder.files.findIndex(f => f.id === fileId);\n if (fileIndex > -1) {\n const removedFile = folder.files.splice(fileIndex, 1)[0];\n this.$emit('file-removed', {\n folderId,\n file: removedFile\n });\n this.$emit('data-updated', { folders: this.folders, allFiles: this.getAllFilesData() });\n }\n }\n },\n\n deleteFolder(folderId) {\n if (confirm('Are you sure you want to delete this folder and all its files?')) {\n const folderIndex = this.folders.findIndex(f => f.id === folderId);\n if (folderIndex > -1) {\n const deletedFolder = this.folders.splice(folderIndex, 1)[0];\n this.$emit('folder-deleted', deletedFolder);\n this.$emit('data-updated', { folders: this.folders, allFiles: this.getAllFilesData() });\n }\n }\n },\n\n formatFileSize(bytes) {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', '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\n getAllFilesData() {\n return this.folders.flatMap(folder => \n folder.files.map(file => ({\n ...file,\n folderName: folder.name,\n folderId: folder.id\n }))\n );\n },\n\n toggleFolder(folderId) {\n const index = this.expandedFolders.indexOf(folderId);\n if (index > -1) {\n this.expandedFolders.splice(index, 1);\n } else {\n this.expandedFolders = [folderId]; // Only one folder expanded at a time\n }\n },\n\n closeAllFolders() {\n this.expandedFolders = [];\n },\n\n getExpandedFolder() {\n if (this.expandedFolders.length > 0) {\n return this.folders.find(f => f.id === this.expandedFolders[0]) || { files: [], name: '' };\n }\n return { files: [], name: '' };\n },\n\n showPreview(folderId) {\n this.previewFolder = folderId;\n },\n\n hidePreview() {\n this.previewFolder = null;\n }\n }\n}\n</script>\n\n<style scoped>\n.reports-container {\n padding: 20px;\n}\n\n.page-header {\n margin-bottom: 30px;\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 15px;\n}\n\n.folders-section {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 20px;\n padding: 10px;\n}\n\n@media (max-width: 768px) {\n .folders-section {\n grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));\n gap: 15px;\n }\n}\n\n@media (min-width: 1400px) {\n .folders-section {\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n }\n}\n\n.folder-card {\n position: relative;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n padding: 15px;\n background-color: #fff;\n transition: all 0.2s;\n cursor: pointer;\n aspect-ratio: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.folder-card:hover {\n border-color: #0d6efd;\n box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n transform: translateY(-2px);\n}\n\n/* Hover Preview Popup */\n.folder-preview {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: white;\n border: 2px solid #0d6efd;\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.15);\n padding: 0;\n z-index: 100;\n min-width: 280px;\n max-width: 320px;\n pointer-events: none;\n}\n\n.preview-header {\n background: #f8f9fa;\n padding: 12px 15px;\n border-bottom: 1px solid #e0e0e0;\n border-radius: 6px 6px 0 0;\n}\n\n.preview-header strong {\n font-size: 0.95rem;\n color: #333;\n}\n\n.preview-content {\n padding: 10px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.preview-file {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n font-size: 0.85rem;\n color: #495057;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.preview-file:last-child {\n border-bottom: none;\n}\n\n.preview-file i {\n color: #6c757d;\n font-size: 0.9rem;\n}\n\n.preview-file span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.preview-more {\n text-align: center;\n padding: 8px;\n font-size: 0.8rem;\n color: #6c757d;\n font-style: italic;\n}\n\n.preview-empty {\n padding: 30px 20px;\n text-align: center;\n color: #adb5bd;\n}\n\n.preview-empty i {\n font-size: 2rem;\n display: block;\n margin-bottom: 8px;\n}\n\n.folder-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n height: 100%;\n}\n\n.folder-name {\n margin-top: 10px;\n font-weight: 600;\n font-size: 0.9rem;\n word-break: break-word;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.folder-actions-overlay {\n position: absolute;\n top: 5px;\n right: 5px;\n display: flex;\n gap: 5px;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.folder-card:hover .folder-actions-overlay {\n opacity: 1;\n}\n\n.btn-icon {\n width: 28px;\n height: 28px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n}\n\n.btn-icon:hover {\n background: #f8f9fa;\n border-color: #0d6efd;\n}\n\n.btn-icon i {\n font-size: 0.85rem;\n}\n\n/* Expanded Folder Modal (Click to Open) */\n.folder-modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0,0,0,0.5);\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.folder-expanded {\n background: white;\n border-radius: 12px;\n box-shadow: 0 10px 40px rgba(0,0,0,0.3);\n width: 90%;\n max-width: 700px;\n max-height: 80vh;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.expanded-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 20px 25px;\n border-bottom: 2px solid #f0f0f0;\n background: #f8f9fa;\n}\n\n.expanded-header strong {\n font-size: 1.3rem;\n color: #333;\n}\n\n.btn-close-expanded {\n background: transparent;\n border: none;\n font-size: 1.2rem;\n cursor: pointer;\n padding: 5px 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color 0.2s;\n}\n\n.btn-close-expanded:hover {\n color: #dc3545;\n}\n\n.files-list {\n padding: 20px;\n max-height: 60vh;\n overflow-y: auto;\n}\n\n.file-item {\n padding: 12px;\n background-color: #f8f9fa;\n border-radius: 4px;\n margin-bottom: 8px;\n}\n\n.file-item:last-child {\n margin-bottom: 0;\n}\n\n.empty-folder-message {\n padding: 40px 20px;\n text-align: center;\n color: #6c757d;\n}\n\n.empty-folder-message i {\n font-size: 3rem;\n color: #dee2e6;\n}\n\n.empty-folder-message p {\n margin: 15px 0;\n}\n\n.empty-state {\n padding: 60px 20px;\n}\n\n/* Modal Styles */\n.modal {\n display: none;\n position: fixed;\n z-index: 1050;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n background-color: rgba(0,0,0,0.5);\n align-items: center;\n justify-content: center;\n}\n\n.modal.show {\n display: flex;\n}\n\n.modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n}\n\n.modal-content {\n background-color: #fff;\n border-radius: 8px;\n box-shadow: 0 5px 15px rgba(0,0,0,0.3);\n}\n\n.modal-header {\n padding: 1rem;\n border-bottom: 1px solid #dee2e6;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.modal-body {\n padding: 1rem;\n}\n\n.modal-footer {\n padding: 1rem;\n border-top: 1px solid #dee2e6;\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n}\n\n.btn-close {\n background: transparent;\n border: none;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n opacity: 0.5;\n cursor: pointer;\n}\n\n.btn-close:hover {\n opacity: 0.75;\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\n type=\"text\"\n placeholder=\"Search activities, users, or actions...\"\n :value=\"searchTerm\"\n @input=\"$emit('update:searchTerm', $event.target.value)\"\n />\n </div>\n <select\n class=\"filter-select\"\n :value=\"selectedFilter\"\n @change=\"$emit('update:selectedFilter', $event.target.value)\"\n >\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\n v-for=\"page in totalPages\"\n :key=\"page\"\n @click=\"$emit('change-page', page)\"\n :class=\"{ active: currentPage === page }\"\n >\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>\n export 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 <button class=\"btn btn-primary\" @click=\"handleToggleAddForm\" v-if=\"canAddCrew\">\n {{ showAddForm ? 'Cancel' : '+ Add Crew Member' }}\n </button>\n </div>\n\n <!-- Search and Filter - Hide when form is shown -->\n <div class=\"search-filter\" v-if=\"!showAddForm\">\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\" 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\" 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\">\n <div v-for=\"member in filteredCrew\" :key=\"member.id\" class=\"crew-card\"\n :class=\"{ 'unavailable': member.status === 'unavailable' }\">\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 }}</div>\n\n <!-- Certifications -->\n <div class=\"crew-certifications\">\n <div v-for=\"cert in member.certifications\" :key=\"cert.name\" class=\"certification-tag\"\n :class=\"getCertificationClass(cert.expiryDate)\" @click=\"handleViewCertification(cert, member)\">\n {{ cert.name }}\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 -->\n <div class=\"crew-availability\">\n <strong>Embarkation Date:</strong> {{ member.nextShift || 'Not Scheduled' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard (in days):</strong> {{ member.onBoard || 'Not Scheduled' }}\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 <!-- 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 <!-- 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\" 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 <!-- 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 </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 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 '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 ],\n\n data() {\n return {\n searchQuery: '',\n filterStatus: 'all',\n showAddForm: false,\n formErrors: {},\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 }\n },\n\n computed: {\n sectionTitle() {\n return this.vesselName ? `Current Crew for ${this.vesselName}` : 'All Fleet Crew'\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\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 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 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.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.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}\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\" 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\" 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\">Submit Requisition</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 }} </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 }}</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 }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Phone:</span>\n <span class=\"info-value\">{{ vendorInfo.phone || poDetails.vendorInfo?.phone }}</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 }}</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 }}</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 }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Department:</span>\n <span class=\"info-value\">PO-{{ poDetails.department }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Delivery Date:</span>\n <span class=\"info-value\">{{ poDetails.neededDate }}</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 }}</td>\n <td>{{ item.desc }}</td>\n <td>{{ item.qty }}</td>\n <td>\n <span v-if=\"!item.editing\">\n ${{ item.cost.toFixed(2) }}\n <span v-if=\"item.cost !== item.unitPrice\" class=\"price-change-indicator\">!</span>\n </span>\n <input v-else v-model.number=\"item.tempPrice\" type=\"number\" step=\"0.01\"\n class=\"price-input\" :class=\"{ 'price-changed': item.cost !== item.tempPrice }\">\n </td>\n <td>${{ (item.unitPrice * item.qty).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 }}):</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 (%):</span>\n <span>${{ getOptional(vendorInfo.tax) }}</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>${{ (subTotal + getOptional(vendorInfo.tax) + getOptional(vendorInfo.shipping)).toFixed(2)\n }}</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\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} 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 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 return sum + (item.unitPrice * item.qty);\n }, 0);\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 getOptional(value) {\n return typeof value === 'number' ? value.toFixed(2) : '0.00';\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;\n },\n\n cancelEdit(index) {\n this.poDetails.items[index].editing = false;\n this.poDetails.items[index].tempPrice = this.poDetails.items[index].unitPrice;\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 const requisition = this.collectFormData('under-review');\n this.$emit('submit-requisition', requisition);\n this.resetForm();\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,\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;\n item.unitPrice = item.cost;\n item.subTotal = item.unitPrice * item.qty;\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 /* enable horizontal scroll */\n white-space: nowrap;\n /* prevent wrapping */\n -webkit-overflow-scrolling: touch;\n /* smooth scrolling on mobile */\n scrollbar-width: thin;\n /* optional: thinner scrollbar in Firefox */\n}\n\n/* Optional: style the scrollbar (Webkit browsers only) */\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 /* Light blue-gray background */\n margin-bottom: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: 0.375rem;\n /* Rounded corners */\n font-size: 0.95rem;\n color: #1e293b;\n /* Dark text */\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 {\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 min-width: 120px;\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}\n\n.btn-primary-req:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(30, 64, 175, 0.4);\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.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\nexport const defaultMenuItems = [\n {\n type: 'link',\n label: 'Home',\n icon: 'bi bi-speedometer2',\n roles: ['owner', '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 {\n type: 'link',\n label: 'Activity Log',\n icon: 'bi bi-activity',\n href: '/activity-log',\n roles: ['owner'] // Role-based visibility\n },\n {\n type: 'link',\n label: 'People Manager',\n icon: 'bi bi-person-plus',\n href: '/app/people-manager',\n roles: ['owner'] // Role-based visibility\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 {\n label: 'Vessel Certification',\n action: 'vessel-cert',\n },\n {\n type: 'separator'\n },\n {\n label: 'Reports',\n action: 'reports'\n },\n ]\n },\n /* \n {\n type: 'link',\n label: 'Business Intelligence',\n icon: 'bi bi-graph-up-arrow',\n href: '/app/analytics'\n },\n */\n {\n type: 'button',\n label: 'Maintenance',\n icon: 'bi bi-tools',\n action: 'maintenance',\n roles: ['owner', 'staff', 'captain']\n },\n {\n type: 'dropdown',\n label: 'Crew Management',\n icon: 'bi bi-people',\n roles: ['owner', 'staff', 'captain'],\n children: [\n {\n label: 'All Crew',\n action: 'crew-all',\n roles: ['owner', 'staff']\n },\n {\n type: 'separator'\n },\n {\n label: 'Get Crew by Vessel',\n action: 'crew-by-vessel'\n }\n ]\n },\n {\n type: 'link',\n label: 'Inventory Management',\n icon: 'bi bi-clipboard-data',\n href: '/app/inventory',\n roles: ['owner', 'staff', 'captain']\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 },\n {\n type: 'button',\n label: 'Voyage Manager',\n icon: 'fas fa-ship',\n action: 'coming-soon',\n roles: ['owner', 'staff', 'captain']\n\n },\n {\n type: 'button',\n label: 'Vessel Log',\n icon: 'bi bi-file-ruled',\n action: 'vessel-log',\n roles: ['owner', 'staff', 'captain']\n },\n {\n type: 'button',\n label: 'Settings',\n icon: 'bi bi-gear',\n action: 'settings',\n roles: ['owner', 'staff']\n },\n {\n type: 'button',\n label: 'Profile',\n icon: 'bi bi-people',\n action: 'crew-profile',\n // roles: ['crew']\n\n },\n {\n type: 'button',\n label: 'Schedule',\n icon: 'bi bi-card-checklist',\n action: 'schedule',\n // roles: ['crew']\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","_a","sidebarToggle","sidebar","content","event","isClickInsideSidebar","isClickOnToggleBtn","_hoisted_2","_hoisted_3","_createElementBlock","$options","$props","_openBlock","_hoisted_1","_createElementVNode","_toDisplayString","_Fragment","_renderList","index","$event","_withModifiers","_normalizeClass","_hoisted_7","_hoisted_8","subItem","subIndex","_hoisted_9","_hoisted_10","_hoisted_11","_renderSlot","_ctx","vessel","status","navigationData","action","date","registrationNumber","now","inputDate","diffMs","diffHours","days","hours","result","role","userVessel","expiry_date","today","diffTime","_hoisted_4","_hoisted_5","_hoisted_6","_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","_createTextVNode","_hoisted_12","_hoisted_13","_hoisted_16","_hoisted_25","_hoisted_28","_hoisted_30","_hoisted_33","newFolder","folder","files","newFiles","file","folderId","fileId","f","fileIndex","removedFile","folderIndex","deletedFolder","bytes","k","sizes","i","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_17","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_57","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_82","_hoisted_83","_hoisted_85","_hoisted_87","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_95","_hoisted_96","_hoisted_97","_withDirectives","_vModelText","_vModelSelect","member","_hoisted_32","_vModelCheckbox","_hoisted_48","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_58","_hoisted_84","_hoisted_86","_hoisted_88","_normalizeStyle","recommendation","timestamp","log","change","key","page","matchesSearch","matchesStatus","entries","logEntry","a","b","dateA","dateB","filtered","entry","search","dates","e","minDate","maxDate","formatDate","isVessel","rolePermissions","sorted","valA","valB","cert","hasName","hasDate","hasImage","validCertifications","finalRole","certificationsWithUrls","uploadResult","newMember","email","resolve","reject","duration","embarkDate","memberId","certification","reader","fileInput","expiryDate","dateStr","expiry","oneMonthFromNow","req","tab","sum","r","userId","tabName","value","statusFields","requisition","id","details","info","isPrinting","_hoisted_98","_hoisted_99","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_104","_hoisted_105","_hoisted_106","_hoisted_107","_hoisted_108","_hoisted_109","_hoisted_110","_hoisted_121","_hoisted_122","_hoisted_123","_hoisted_124","_hoisted_125","_hoisted_126","_hoisted_127","_hoisted_128","dept","v","unit","_b","_c","_d","_e","_f","_g","_hoisted_112","_hoisted_113","_hoisted_115","_hoisted_117","_hoisted_118","_hoisted_119","_hoisted_116","_hoisted_120","_i","_h","_k","_j","_hoisted_129","_hoisted_130","createSidebarConfig","options","defaultMenuItems","defaultPermissionChecker","userProfile","app","ConfigurableSidebar","VesselList","DashHead","Reports","ActivityLogs","CrewManagement","RequisitionSystem","OceanHelmMaintenance"],"mappings":"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"}
|