Update WorkorderCompanyPWA.php
This commit is contained in:
@@ -63,6 +63,14 @@
|
||||
|
||||
.fade-enter-active, .fade-leave-active { transition: opacity 0.2s ease-in-out; }
|
||||
.fade-enter-from, .fade-leave-to { opacity: 0; }
|
||||
|
||||
@keyframes spin {
|
||||
from { transform: rotate(0deg); }
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
.spin { animation: spin 1s linear infinite; }
|
||||
|
||||
body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-slate-100">
|
||||
@@ -409,6 +417,12 @@
|
||||
isStandalone.value = window.matchMedia('(display-mode: standalone)').matches;
|
||||
});
|
||||
|
||||
watch(isFcpSelectOpen, (isOpen) => {
|
||||
if (!isOpen) {
|
||||
fcpSearchTerm.value = '';
|
||||
}
|
||||
});
|
||||
|
||||
// Lock body scroll when any modal is open
|
||||
watch([isDetailsPanelOpen, isFcpSelectOpen, uploadModal, problemModal, fullscreenViewer, installModal], ([details, fcp, upload, problem, viewer, install]) => {
|
||||
const isAnyModalOpen = details || fcp || upload.show || problem.show || viewer.show || install.show;
|
||||
@@ -423,7 +437,7 @@
|
||||
isLoading, isDetailsLoading, filteredWorkorders, searchTerm, isDetailsPanelOpen, selectedWorkorder, documentation, tenantConfig,
|
||||
tempAdditionalInfo, isEditingInfo, newJournalEntry, uploadModal, problemModal, isUploading, isChecklistComplete,
|
||||
checklist, fullscreenViewer, missingTasksPopover, translatedDocs, filteredJournals, installModal, isStandalone,
|
||||
selectedFcp, isFcpSelectOpen, fcpOptions, selectedFcpText, fcpSearchTerm, filteredFcpOptions,
|
||||
selectedFcp, isFcpSelectOpen, fcpOptions, selectedFcpText, fcpSearchTerm, filteredFcpOptions, fetchWorkorders,
|
||||
openDetails, closeDetails, getStatusInfo, formatDate, googleMapsLink, startEditInfo, saveAdditionalInfo,
|
||||
handleFileSelect, executeUpload, addJournalEntry, submitProblem, handleCompleteClick, selectFcp
|
||||
};
|
||||
@@ -443,7 +457,7 @@
|
||||
App installieren
|
||||
</button>
|
||||
<button @click="fetchWorkorders" class="p-2 rounded-full hover:bg-slate-100">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-slate-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-slate-600" :class="{'spin': isLoading}" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0011.667 0l3.181-3.183m-4.991-2.695h-4.992v.001M21.015 4.356v4.992m0 0h-4.992m4.992 0l-3.181-3.183a8.25 8.25 0 00-11.667 0L3.985 9.348" />
|
||||
</svg>
|
||||
</button>
|
||||
@@ -626,11 +640,11 @@
|
||||
</transition>
|
||||
|
||||
<transition name="fade">
|
||||
<div v-if="isFcpSelectOpen" class="fixed inset-0 z-30 flex items-center justify-center p-4" @click.self="isFcpSelectOpen = false">
|
||||
<div v-if="isFcpSelectOpen" class="fixed inset-0 z-30 flex items-start justify-center p-4 pt-20" @click.self="isFcpSelectOpen = false">
|
||||
<div class="bg-white rounded-lg p-4 w-full max-w-sm flex flex-col max-h-[80vh]">
|
||||
<div class="flex justify-between items-center mb-2 flex-shrink-0">
|
||||
<h3 class="font-bold text-lg">FCP auswählen</h3>
|
||||
<button @click="isFcpSelectOpen = false" class="p-1 rounded-full hover:bg-slate-100 text-2xl leading-none">×</button>
|
||||
<button @click="isFcpSelectOpen = false" class="flex items-center justify-center h-7 w-7 rounded-full hover:bg-slate-100 text-xl">×</button>
|
||||
</div>
|
||||
<div class="relative mb-2 flex-shrink-0">
|
||||
<input type="text" v-model="fcpSearchTerm" placeholder="FCP suchen..." class="w-full p-2 pl-8 border border-slate-300 rounded-md">
|
||||
@@ -647,22 +661,37 @@
|
||||
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
</li>
|
||||
<li v-if="filteredFcpOptions.length === 0" class="text-sm text-slate-500 p-3">Kein FCP gefunden.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
|
||||
<div v-if="uploadModal.show" class="fixed inset-0 bg-black bg-opacity-50 z-30 flex items-center justify-center p-4">
|
||||
<div class="bg-white rounded-lg p-6 w-full max-w-sm">
|
||||
<h3 class="font-bold text-lg mb-4">Dokumenttyp wählen</h3>
|
||||
<select v-model="uploadModal.documentType" class="w-full p-2 border rounded-md mb-4">
|
||||
<option v-for="type in tenantConfig.documentationTypes" :key="type.value" :value="type.value">{{ type.text }}</option>
|
||||
<option v-if="!tenantConfig.documentationTypes || tenantConfig.documentationTypes.length === 0" value="general">Allgemein</option>
|
||||
</select>
|
||||
<div class="flex justify-end space-x-2">
|
||||
<button @click="uploadModal.show = false" class="px-4 py-2 bg-slate-200 rounded-md">Abbrechen</button>
|
||||
<button @click="executeUpload" :disabled="isUploading" class="px-4 py-2 bg-primary text-white rounded-md disabled:bg-slate-400">{{ isUploading ? 'Lade...' : 'Hochladen' }}</button>
|
||||
<div v-if="uploadModal.show" class="fixed inset-0 bg-black bg-opacity-50 z-30 flex items-start justify-center p-4 pt-20" @click.self="uploadModal.show = false">
|
||||
<div class="bg-white rounded-lg p-4 w-full max-w-sm flex flex-col max-h-[80vh]" @click.stop>
|
||||
<div class="flex justify-between items-center mb-4 flex-shrink-0">
|
||||
<h3 class="font-bold text-lg">Dokumenttyp wählen</h3>
|
||||
<button @click="uploadModal.show = false" class="flex items-center justify-center h-7 w-7 rounded-full hover:bg-slate-100 text-xl">×</button>
|
||||
</div>
|
||||
|
||||
<ul class="flex-grow overflow-y-auto -mr-2 pr-2 space-y-1 mb-4">
|
||||
<li v-for="type in tenantConfig.documentationTypes" :key="type.value" @click="uploadModal.documentType = type.value"
|
||||
class="flex justify-between items-center p-3 rounded-md hover:bg-slate-100 cursor-pointer text-sm font-medium"
|
||||
:class="{'bg-primary/10 text-primary': uploadModal.documentType === type.value}">
|
||||
<span>{{ type.text }}</span>
|
||||
<svg v-if="uploadModal.documentType === type.value" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-primary" viewBox="0 0 20 20" fill="currentColor">
|
||||
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
</li>
|
||||
<li v-if="!tenantConfig.documentationTypes || tenantConfig.documentationTypes.length === 0">
|
||||
<p class="text-sm text-slate-500 p-3">Keine Dokumenttypen konfiguriert.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="flex justify-end space-x-2 mt-auto flex-shrink-0 border-t border-slate-200 pt-3">
|
||||
<button @click="uploadModal.show = false" class="px-4 py-2 bg-slate-200 rounded-md text-sm font-medium">Abbrechen</button>
|
||||
<button @click="executeUpload" :disabled="isUploading" class="px-4 py-2 bg-primary text-white rounded-md disabled:bg-slate-400 text-sm font-medium">{{ isUploading ? 'Lade...' : 'Hochladen' }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user