oceanhelm 0.0.9 → 0.0.10
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 +1218 -817
- 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 +995 -40
- package/src/utils/sidebarConfig.js +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oceanhelm.umd.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.umd.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 <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</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=\"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 <button class=\"btn btn-primary\" @click=\"handleAssignShift(member)\"\n v-if=\"canAssignShift && member.status !== 'onduty'\">\n Assign Shift\n </button>\n <button class=\"btn btn-warning\" @click=\"handleDeboardCrew(member)\"\n v-if=\"canDeboardCrew && member.status === 'onduty'\">\n Deboard\n </button>\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-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 <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-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 const validCertifications = this.newCrew.certifications.filter(cert =>\n cert.name.trim() !== '' && cert.expiryDate !== '' && cert.imageFile !== null\n )\n\n if (validCertifications.length === 0) {\n alert('Please add at least one complete certification with name, expiry date, and image.')\n return\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: this.newCrew.status,\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 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: '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 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 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({\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 '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 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-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 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-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.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 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: '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 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","_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","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","e","dates","minDate","maxDate","formatDate","isVessel","rolePermissions","sorted","valA","valB","validCertifications","cert","finalRole","certificationsWithUrls","uploadResult","newMember","file","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","ActivityLogs","CrewManagement","RequisitionSystem","OceanHelmMaintenance"],"mappings":"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"}
|