Berücksichtige lokale Datumswerte bei der Berechnung von Abwesenheiten und verbessere die Testabdeckung für Wochenansichten und Arbeitszeiten.
All checks were successful
Deploy production / deploy (push) Successful in 53s
All checks were successful
Deploy production / deploy (push) Successful in 53s
This commit is contained in:
@@ -88,6 +88,8 @@ const fetchStats = async () => {
|
||||
missingBreakMinutes.value = 0
|
||||
}
|
||||
|
||||
updateCurrentlyWorkedTime()
|
||||
updateOpenTime()
|
||||
isReady.value = true
|
||||
}
|
||||
|
||||
@@ -164,7 +166,7 @@ const updateCurrentlyWorkedTime = () => {
|
||||
}
|
||||
|
||||
// Verwende Server-Werte nur, wenn NICHT gearbeitet wird (oder kein laufender Start vorhanden)
|
||||
const shouldUseServerSummary = !workStartTime.value
|
||||
const shouldUseServerSummary = Boolean(serverWorkedTime.value)
|
||||
|
||||
if (shouldUseServerSummary && serverWorkedTime.value && serverTimestamp.value) {
|
||||
// Parse Server-Zeit (HH:MM:SS)
|
||||
@@ -406,11 +408,9 @@ onBeforeUnmount(() => {
|
||||
})
|
||||
|
||||
const displayRows = computed(() => {
|
||||
// Verwende Server-Wert für "Derzeit gearbeitet" wenn verfügbar (zeigt gesamte Tagesarbeitszeit)
|
||||
const workedDisplay = (stats.value?.currentlyWorked && stats.value.currentlyWorked !== '—')
|
||||
? stats.value.currentlyWorked + ' h'
|
||||
: (currentlyWorkedTime.value === '—' ? currentlyWorkedTime.value : currentlyWorkedTime.value + ' h');
|
||||
|
||||
const workedDisplay = currentlyWorkedTime.value === '—'
|
||||
? '—' : currentlyWorkedTime.value + ' h';
|
||||
|
||||
const rows = {
|
||||
'Derzeit gearbeitet': workedDisplay,
|
||||
'Offen': openTime.value === '—' || openTime.value.includes('erreicht') ? openTime.value : openTime.value + ' h',
|
||||
|
||||
@@ -196,6 +196,7 @@ async function createSick() {
|
||||
|
||||
// Liste neu laden
|
||||
await loadSickEntries()
|
||||
window.dispatchEvent(new CustomEvent('worklog-updated'))
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Erstellen des Krankheitseintrags:', error)
|
||||
await alert(`Fehler: ${error.message}`, 'Fehler')
|
||||
@@ -227,6 +228,7 @@ async function deleteSick(id) {
|
||||
}
|
||||
|
||||
await loadSickEntries()
|
||||
window.dispatchEvent(new CustomEvent('worklog-updated'))
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Löschen des Krankheitseintrags:', error)
|
||||
await alert(`Fehler: ${error.message}`, 'Fehler')
|
||||
|
||||
@@ -181,6 +181,7 @@ async function createVacation() {
|
||||
|
||||
resetForm()
|
||||
await loadVacations()
|
||||
window.dispatchEvent(new CustomEvent('worklog-updated'))
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Erstellen des Urlaubseintrags:', error)
|
||||
await alert(`Fehler: ${error.message}`, 'Fehler')
|
||||
@@ -210,6 +211,7 @@ async function deleteVacation(id) {
|
||||
}
|
||||
|
||||
await loadVacations()
|
||||
window.dispatchEvent(new CustomEvent('worklog-updated'))
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Löschen des Urlaubseintrags:', error)
|
||||
await alert(`Fehler: ${error.message}`, 'Fehler')
|
||||
|
||||
@@ -103,8 +103,7 @@
|
||||
<div v-if="block.totalWorkTime" class="total-work-time">
|
||||
{{ block.totalWorkTime }}
|
||||
</div>
|
||||
<!-- Laufende Blöcke haben keine Gesamtarbeitszeit. Der Platzhalter hält
|
||||
die anschließenden Pausensummen auf Höhe der Pausenzeit. -->
|
||||
<!-- Platzhalter für ältere API-Antworten ohne laufende Dauer. -->
|
||||
<div v-else-if="block.pauseTimes && block.pauseTimes.length > 0" class="total-work-time" aria-hidden="true">
|
||||
|
||||
</div>
|
||||
@@ -204,6 +203,7 @@ const authStore = useAuthStore()
|
||||
const loading = ref(true)
|
||||
const weekData = ref(null)
|
||||
const weekOffset = ref(0)
|
||||
let refreshInterval = null
|
||||
|
||||
const weekDays = computed(() => {
|
||||
if (!weekData.value) return []
|
||||
@@ -237,9 +237,9 @@ const formatDate = (dateString) => {
|
||||
})
|
||||
}
|
||||
|
||||
const loadWeekData = async () => {
|
||||
const loadWeekData = async (background = false) => {
|
||||
try {
|
||||
loading.value = true
|
||||
if (!background) loading.value = true
|
||||
|
||||
const response = await fetch(`${API_URL}/week-overview?weekOffset=${weekOffset.value}`, {
|
||||
cache: 'no-store',
|
||||
@@ -381,12 +381,14 @@ const handleWorklogUpdate = () => {
|
||||
|
||||
onMounted(() => {
|
||||
loadWeekData()
|
||||
refreshInterval = setInterval(() => loadWeekData(true), 60000)
|
||||
|
||||
// Event-Listener für Worklog-Updates
|
||||
window.addEventListener('worklog-updated', handleWorklogUpdate)
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
if (refreshInterval) clearInterval(refreshInterval)
|
||||
window.removeEventListener('worklog-updated', handleWorklogUpdate)
|
||||
})
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user