|
|
|
@ -8,144 +8,147 @@
@@ -8,144 +8,147 @@
|
|
|
|
|
:style="tracker.isTimeBox ? 'background: linear-gradient(90deg, grey ' + ((timeBoxTimeLeft(tracker) * 100) / tracker.timeBoxMinutes)+'% , black 100%':''"> |
|
|
|
|
<div class="card-body"> |
|
|
|
|
<div class="card-text"> |
|
|
|
|
<a class="position-absolute" |
|
|
|
|
data-bs-toggle="dropdown" |
|
|
|
|
aria-expanded="false" |
|
|
|
|
title="Neu"> |
|
|
|
|
<i class="fas fa-ellipsis-v"></i> |
|
|
|
|
</a> |
|
|
|
|
<div class="dropdown-menu" aria-labelledby="create-dropdown-menu"> |
|
|
|
|
<span @click="archiveTracker(trackerIndex)" title="Archivieren"> |
|
|
|
|
<i class="fas fa-archive"></i> <small>Archivieren</small> |
|
|
|
|
</span><br/> |
|
|
|
|
|
|
|
|
|
<span @click="openTasksForTracker(tracker)" title="Tasks"> |
|
|
|
|
<i class="fas fa-clipboard -check"></i> <small>Tasks |
|
|
|
|
{{ showOpenTasksForTracker(tracker.tasks) }}</small> |
|
|
|
|
</span><br/> |
|
|
|
|
|
|
|
|
|
<span @click="deleteTracker(trackerIndex)" title="Löschen"> |
|
|
|
|
<i class="fas fa-trash"></i> <small>Löschen</small> |
|
|
|
|
</span> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<input type="text" |
|
|
|
|
v-model="tracker.number" |
|
|
|
|
class="form-control trackingNameField" |
|
|
|
|
@keydown="this.$store.commit('saveTrackers')"/> |
|
|
|
|
|
|
|
|
|
<div class="row"> |
|
|
|
|
<div v-if="tracker.tracking === true"> |
|
|
|
|
<div class="text-danger font-weight-bolder float-end tracker-time-info"> |
|
|
|
|
<div class="spinner-grow spinner-grow-sm" role="status"> |
|
|
|
|
<span class="sr-only">Tracking...</span> |
|
|
|
|
</div> |
|
|
|
|
Tracking |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<template v-if="!tracker.isTimeBox"> |
|
|
|
|
<div v-if="tracker.tracking === true"> |
|
|
|
|
<span class="float-end">{{ getTrackingStartTime(tracker) }}</span> |
|
|
|
|
<span v-if="tracker.tracking === true">Gestartet: </span> |
|
|
|
|
<br/> |
|
|
|
|
<span class="float-end">{{ currentTrackingRunningFor(tracker) }}</span> |
|
|
|
|
<span v-if="tracker.tracking === true">Läuft seit: </span> |
|
|
|
|
<div class="row time-data-container"> |
|
|
|
|
<div v-if="!tracker.tracking"> |
|
|
|
|
<button type="button" |
|
|
|
|
class="btn btn-success rounded-circle position-absolute btn-tracker-state" |
|
|
|
|
@click="startTracking(tracker)"> |
|
|
|
|
<i class="fas fa-play"></i> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div> |
|
|
|
|
<span class="float-end">{{ getTotalTime(tracker) }}</span> |
|
|
|
|
<span class="current-tracker-info">Gesamt: </span> |
|
|
|
|
<div v-else> |
|
|
|
|
<button type="button" |
|
|
|
|
class="btn btn-danger rounded-circle position-absolute btn-tracker-state" |
|
|
|
|
@click="stopTracking(tracker)"> |
|
|
|
|
<i class="fas fa-stop"></i> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<span class="float-end">{{ getTotalTimeToday(tracker) }}</span> |
|
|
|
|
<span class="">Heute: </span> |
|
|
|
|
|
|
|
|
|
<div class="row"> |
|
|
|
|
<div class="col-md-6" v-if="!tracker.tracking"> |
|
|
|
|
<button type="button" class="btn btn-primary tracker-action-button" |
|
|
|
|
@click="startTracking(tracker)"> |
|
|
|
|
<i class="far fa-play-circle"></i> <small>Starten</small> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="col-md-6" v-else> |
|
|
|
|
<button type="button" class="btn btn-danger tracker-action-button" |
|
|
|
|
@click="stopTracking(tracker)"> |
|
|
|
|
<i class="far fa-stop-circle"></i> <small>Stoppen</small> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
<template v-if="!tracker.isTimeBox"> |
|
|
|
|
<template v-if="tracker.tracking === true"> |
|
|
|
|
<div class="col-6 col-sm-3"> |
|
|
|
|
<small class="text-muted">Gestartet </small><br/> |
|
|
|
|
<span>{{ getTrackingStartTime(tracker) }}</span> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="col-md-6"> |
|
|
|
|
<button class="btn btn-warning tracker-action-button" |
|
|
|
|
@click="archiveTracker(trackerIndex)" title="Archivieren"> |
|
|
|
|
<i class="fas fa-archive"></i> <small>Archivieren</small> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
<div class="col-6 col-sm-3"> |
|
|
|
|
<small class="text-muted">Läuft seit </small><br/> |
|
|
|
|
<span>{{ currentTrackingRunningFor(tracker) }}</span> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
<div class="col-md-6"> |
|
|
|
|
<button type="button" class="btn btn-info tracker-action-button" |
|
|
|
|
@click="openTasksForTracker(tracker)" title="Tasks"> |
|
|
|
|
<i class="fas fa-clipboard -check"></i> <small>Tasks |
|
|
|
|
{{ showOpenTasksForTracker(tracker.tasks) }}</small> |
|
|
|
|
</button> |
|
|
|
|
<div class="col-6 col-sm-3"> |
|
|
|
|
<small class="text-muted">Gesamt </small><br/> |
|
|
|
|
<span>{{ getTotalTime(tracker) }}</span> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="col-md-6"> |
|
|
|
|
<button class="btn btn-danger tracker-action-button" |
|
|
|
|
@click="deleteTracker(trackerIndex)" title="Löschen"> |
|
|
|
|
<i class="fas fa-trash"></i> <small>Löschen</small> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
<template v-else> |
|
|
|
|
<div class="row"> |
|
|
|
|
<div v-if="tracker.tracking === true"> |
|
|
|
|
<span class="float-end">{{ getTrackingStartTime(tracker) }}</span> |
|
|
|
|
<span v-if="tracker.tracking === true">Gestartet: </span> |
|
|
|
|
<br/> |
|
|
|
|
<span class="float-end">{{ currentTrackingRunningFor(tracker) }}</span> |
|
|
|
|
<span v-if="tracker.tracking === true">Läuft seit: </span> |
|
|
|
|
<div class="col-6 col-sm-3"> |
|
|
|
|
<small class="text-muted">Heute </small><br/> |
|
|
|
|
<span>{{ getTotalTimeToday(tracker) }}</span> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
<template v-else> |
|
|
|
|
<div class="row"> |
|
|
|
|
<div v-if="tracker.tracking === true"> |
|
|
|
|
<span class="float-end">{{ getTrackingStartTime(tracker) }}</span> |
|
|
|
|
<span v-if="tracker.tracking === true">Gestartet: </span> |
|
|
|
|
<br/> |
|
|
|
|
<span class="float-end">{{ |
|
|
|
|
currentTrackingRunningFor(tracker) |
|
|
|
|
}}</span> |
|
|
|
|
<span v-if="tracker.tracking === true">Läuft seit: </span> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<template v-if="!tracker.timeBoxMinutes"> |
|
|
|
|
<div class="col-12"> |
|
|
|
|
Minuten: |
|
|
|
|
<template v-if="!tracker.timeBoxMinutes"> |
|
|
|
|
<div class="col-12"> |
|
|
|
|
Minuten: |
|
|
|
|
</div> |
|
|
|
|
<div class="col"> |
|
|
|
|
<button type="button" |
|
|
|
|
class="btn btn-secondary tracker-action-button" |
|
|
|
|
@click="startTimeBox(tracker, 15)"> |
|
|
|
|
<i class="far fa-play-circle"></i> 15 |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="col"> |
|
|
|
|
<button type="button" |
|
|
|
|
class="btn btn-secondary tracker-action-button" |
|
|
|
|
@click="startTimeBox(tracker, 30)"> |
|
|
|
|
<i class="far fa-play-circle"></i> 30 |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="col"> |
|
|
|
|
<button type="button" |
|
|
|
|
class="btn btn-secondary tracker-action-button" |
|
|
|
|
@click="startTimeBox(tracker, 60)"> |
|
|
|
|
<i class="far fa-play-circle"></i> 60 |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
<div class="col-12" |
|
|
|
|
v-if="tracker.timeBoxMinutes && timeBoxTimeLeft(tracker) > 0"> |
|
|
|
|
<span class="float-end">{{ |
|
|
|
|
timeBoxTimeLeft(tracker) |
|
|
|
|
}} Minuten</span> |
|
|
|
|
<span>Zeit übrig: </span> |
|
|
|
|
</div> |
|
|
|
|
<div class="col"> |
|
|
|
|
<button type="button" class="btn btn-secondary tracker-action-button" |
|
|
|
|
@click="startTimeBox(tracker, 15)"> |
|
|
|
|
<i class="far fa-play-circle"></i> 15 |
|
|
|
|
</button> |
|
|
|
|
<div class="col-12 text-center" v-if="timeBoxTimeLeft(tracker) <= 0"> |
|
|
|
|
<h5 class="text-danger text-bold">Abgeschlossen</h5> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="col"> |
|
|
|
|
<button type="button" class="btn btn-secondary tracker-action-button" |
|
|
|
|
@click="startTimeBox(tracker, 30)"> |
|
|
|
|
<i class="far fa-play-circle"></i> 30 |
|
|
|
|
<div class="col-md-12" v-if="tracker.tracking"> |
|
|
|
|
<button type="button" class="btn btn-danger tracker-action-button" |
|
|
|
|
@click="stopTracking(tracker)"> |
|
|
|
|
<i class="far fa-stop-circle"></i> <small>Stoppen</small> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="col"> |
|
|
|
|
<button type="button" class="btn btn-secondary tracker-action-button" |
|
|
|
|
@click="startTimeBox(tracker, 60)"> |
|
|
|
|
<i class="far fa-play-circle"></i> 60 |
|
|
|
|
<div class="col-md-12" |
|
|
|
|
v-if="!tracker.tracking && tracker.timeBoxMinutes && timeBoxTimeLeft(tracker) > 0"> |
|
|
|
|
<button type="button" class="btn btn-primary tracker-action-button" |
|
|
|
|
@click="startTracking(tracker)"> |
|
|
|
|
<i class="far fa-play-circle"></i> <small>Starten</small> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
<div class="col-12" |
|
|
|
|
v-if="tracker.timeBoxMinutes && timeBoxTimeLeft(tracker) > 0"> |
|
|
|
|
<span class="float-end">{{ timeBoxTimeLeft(tracker) }} Minuten</span> |
|
|
|
|
<span>Zeit übrig: </span> |
|
|
|
|
</div> |
|
|
|
|
<div class="col-12 text-center" v-if="timeBoxTimeLeft(tracker) <= 0"> |
|
|
|
|
<h5 class="text-danger text-bold">Abgeschlossen</h5> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="col-md-12" v-if="tracker.tracking"> |
|
|
|
|
<button type="button" class="btn btn-danger tracker-action-button" |
|
|
|
|
@click="stopTracking(tracker)"> |
|
|
|
|
<i class="far fa-stop-circle"></i> <small>Stoppen</small> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
<div class="col-md-12" |
|
|
|
|
v-if="!tracker.tracking && tracker.timeBoxMinutes && timeBoxTimeLeft(tracker) > 0"> |
|
|
|
|
<button type="button" class="btn btn-primary tracker-action-button" |
|
|
|
|
@click="startTracking(tracker)"> |
|
|
|
|
<i class="far fa-play-circle"></i> <small>Starten</small> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="col-md-12"> |
|
|
|
|
<button class="btn btn-danger tracker-action-button" |
|
|
|
|
@click="deleteTracker(trackerIndex)" title="Löschen"> |
|
|
|
|
<i class="fas fa-trash"></i> <small>Löschen</small> |
|
|
|
|
</button> |
|
|
|
|
<div class="col-md-12"> |
|
|
|
|
<button class="btn btn-danger tracker-action-button" |
|
|
|
|
@click="deleteTracker(trackerIndex)" title="Löschen"> |
|
|
|
|
<i class="fas fa-trash"></i> <small>Löschen</small> |
|
|
|
|
</button> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
</template> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
@ -164,8 +167,7 @@ import {Offcanvas} from "bootstrap";
@@ -164,8 +167,7 @@ import {Offcanvas} from "bootstrap";
|
|
|
|
|
export default { |
|
|
|
|
name: "Trackers", |
|
|
|
|
data() { |
|
|
|
|
return { |
|
|
|
|
} |
|
|
|
|
return {} |
|
|
|
|
}, |
|
|
|
|
computed: { |
|
|
|
|
trackers() { |
|
|
|
@ -304,7 +306,7 @@ export default {
@@ -304,7 +306,7 @@ export default {
|
|
|
|
|
['<button><i class="fas fa-undo"></i></button>', function (instance, toast) { |
|
|
|
|
instance.hide({ |
|
|
|
|
transitionOut: 'fadeOutUp', |
|
|
|
|
onClosing: function(){ |
|
|
|
|
onClosing: function () { |
|
|
|
|
component.$store.commit('restoreTrashed'); |
|
|
|
|
component.$store.commit('saveTrackers'); |
|
|
|
|
} |
|
|
|
@ -316,7 +318,7 @@ export default {
@@ -316,7 +318,7 @@ export default {
|
|
|
|
|
}, |
|
|
|
|
showOpenTasksForTracker(tasks) { |
|
|
|
|
let count = this.getOpenTasksForTracker(tasks); |
|
|
|
|
return count > 0 ? ' ('+count+' offen)' : ''; |
|
|
|
|
return count > 0 ? ' (' + count + ' offen)' : ''; |
|
|
|
|
}, |
|
|
|
|
getOpenTasksForTracker(tasks) { |
|
|
|
|
if (!tasks) { |
|
|
|
@ -354,14 +356,10 @@ export default {
@@ -354,14 +356,10 @@ export default {
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
<style scoped> |
|
|
|
|
.tracker-time-info { |
|
|
|
|
margin-top: 1em; |
|
|
|
|
clear: both; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.trackingNameField { |
|
|
|
|
max-height: 1em; |
|
|
|
|
margin-bottom: 1px; |
|
|
|
|
width: 80%; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.bg-timebox input { |
|
|
|
@ -372,4 +370,13 @@ export default {
@@ -372,4 +370,13 @@ export default {
|
|
|
|
|
color: lightgray; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.btn-tracker-state { |
|
|
|
|
margin-top: -2em; |
|
|
|
|
right: 1em; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.time-data-container { |
|
|
|
|
padding-top: 2.5em; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
</style> |