mirror of
https://bitbucket.org/studiotem/jandl-taskmanager-app.git
synced 2026-10-21 06:20:21 +00:00
Merge branch 'feature/office365' of bitbucket.org:studiotem/jandl-taskmanager-app into feature/office365
This commit is contained in:
commit
2037c556cd
10 files changed
+72
-44
No files matched your search
@@ -137,8 +137,8 @@ export default {
|
|||||||
this.$store.dispatch('tm/reloadMastertasks')
|
this.$store.dispatch('tm/reloadMastertasks')
|
||||||
})
|
})
|
||||||
|
|
||||||
this.$events.on('show-unable-to-edit-office-task-modal', ({ subtask }) => {
|
this.$events.on('show-unable-to-edit-office-task-modal', ({ mode }) => {
|
||||||
this.$refs['z-unable-to-edit-office-task-modal'].showModal({ subtask })
|
this.$refs['z-unable-to-edit-office-task-modal'].showModal({ mode })
|
||||||
})
|
})
|
||||||
|
|
||||||
this._showModalsAfterInicialization()
|
this._showModalsAfterInicialization()
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<v-tooltip :text="event.blocker?.approved ? 'Schválený' : 'Neschválený'" location="bottom">
|
<v-tooltip :text="event.blocker?.approved ? 'Schválený' : 'Neschválený'" location="bottom">
|
||||||
<template v-slot:activator="{ props }">
|
<template v-slot:activator="{ props }">
|
||||||
<div v-bind="props">
|
<div v-bind="props">
|
||||||
<h3>{{ props.event.blocker?.approved ? props.event.blocker.name : props.event.blocker.name + '*' }}</h3>
|
<h3>{{ props.event?.blocker?.approved ? props.event?.blocker?.name : props.event?.blocker?.name + '*' }}</h3>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</v-tooltip>
|
</v-tooltip>
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
|
|
||||||
<div class="event__footer d-flex">
|
<div class="event__footer d-flex">
|
||||||
<template v-if="isOfficeEvent">
|
<template v-if="isOfficeEvent">
|
||||||
<v-btn rounded class="event__footer__button me-2" @click.stop="editOfficeEvent"><img :src="eye" alt="" /></v-btn>
|
<v-btn rounded class="event__footer__button me-2" @click.stop="emits('edit-task', props.event)"><img :src="eye" alt="" /></v-btn>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-else-if="event.type == 'adhoc'">
|
<template v-else-if="event.type == 'adhoc'">
|
||||||
@@ -105,18 +105,13 @@ const subtaskCssClass: ComputedRef<string> = computed(() => {
|
|||||||
if (eventLength.value <= 9000000) classes.push('short-event')
|
if (eventLength.value <= 9000000) classes.push('short-event')
|
||||||
if (eventLength.value <= 5400000) classes.push('mini-event')
|
if (eventLength.value <= 5400000) classes.push('mini-event')
|
||||||
if (eventLength.value <= 3600000) classes.push('micro-event')
|
if (eventLength.value <= 3600000) classes.push('micro-event')
|
||||||
if (!props.event.blocker?.approved && props.event.isBlocker) classes.push('not-approved')
|
if (!props.event?.blocker?.approved && props.event?.isBlocker) classes.push('not-approved')
|
||||||
return classes.join(' ')
|
return classes.join(' ')
|
||||||
})
|
})
|
||||||
|
|
||||||
const isOfficeEvent: ComputedRef<boolean> = computed(() => {
|
const isOfficeEvent: ComputedRef<boolean> = computed(() => {
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
const editOfficeEvent = () => {
|
|
||||||
const eventBus = instance?.appContext.config.globalProperties.$events
|
|
||||||
eventBus.emit('show-unable-to-edit-office-task-modal', props.event)
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass" scoped>
|
<style lang="sass" scoped>
|
||||||
|
|||||||
@@ -79,18 +79,11 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
openTaskModal(subtask) {
|
openTaskModal(subtask) {
|
||||||
// TODO office365: Only for office365 events
|
this.$events.emit('show-subtask-modal', { subtask, editMode: false })
|
||||||
return this.editOfficeEvent(subtask)
|
|
||||||
|
|
||||||
// this.$events.emit('show-subtask-modal', { subtask, editMode: false })
|
|
||||||
},
|
},
|
||||||
|
|
||||||
async clickCompleteTask(subtask) {
|
async clickCompleteTask(subtask) {
|
||||||
this.$events.emit('show-complete-task-modal', { subtask })
|
this.$events.emit('show-complete-task-modal', { subtask })
|
||||||
},
|
|
||||||
|
|
||||||
editOfficeEvent(subtask) {
|
|
||||||
this.$events.emit('show-unable-to-edit-office-task-modal', { subtask })
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
:class="{ error: v$.mastertask._deadline_time.$errors.length }" :hint="v$.mastertask._deadline_time.$errors ? errorUtils.parseErrors(v$.mastertask._deadline_time.$errors) : null" />
|
:class="{ error: v$.mastertask._deadline_time.$errors.length }" :hint="v$.mastertask._deadline_time.$errors ? errorUtils.parseErrors(v$.mastertask._deadline_time.$errors) : null" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<v-text-field v-model="mastertask.estimated_duration" @focus="onInputFocus" class="modal-input" variant="solo" type="number" label="Nacenené hodiny"></v-text-field>
|
||||||
|
|
||||||
<v-text-field v-model="mastertask.duration" @focus="onInputFocus" class="modal-input" variant="solo" type="number" :label="`${mastertask.duration} h`" :disabled="true"></v-text-field>
|
<v-text-field v-model="mastertask.duration" @focus="onInputFocus" class="modal-input" variant="solo" type="number" :label="`${mastertask.duration} h`" :disabled="true"></v-text-field>
|
||||||
|
|
||||||
<v-select v-model="mastertask.team_id" @focus="onInputFocus" class="modal-input border-select" :class="{error: v$.mastertask.employees.$errors.length}" label="Tím" variant="solo" :items="teams" item-value="id" item-title="name" :disabled="!!mastertask.id" :clearable="true" />
|
<v-select v-model="mastertask.team_id" @focus="onInputFocus" class="modal-input border-select" :class="{error: v$.mastertask.employees.$errors.length}" label="Tím" variant="solo" :items="teams" item-value="id" item-title="name" :disabled="!!mastertask.id" :clearable="true" />
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<template>
|
||||||
|
<v-row no-gutters class="align-center">
|
||||||
|
<v-col cols="5">
|
||||||
|
<v-sheet class="py-3">
|
||||||
|
<div class="d-flex align-center">
|
||||||
|
<v-icon icon="mdi-clock-time-three-outline" size="large"></v-icon>
|
||||||
|
<p class="mx-3">Nacenené hodiny</p>
|
||||||
|
</div>
|
||||||
|
</v-sheet>
|
||||||
|
</v-col>
|
||||||
|
<v-col cols="7">
|
||||||
|
<v-sheet class="py-3">
|
||||||
|
<p>{{ hours || 0 }} h</p>
|
||||||
|
</v-sheet>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
hours: {
|
||||||
|
type: [Number, undefined]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
<A-task-timeblocks :timeblocks="subtask.timeblocks" :subtask="subtask" @update-subtask="$emit('update-subtask', $event)" />
|
<A-task-timeblocks :timeblocks="subtask.timeblocks" :subtask="subtask" @update-subtask="$emit('update-subtask', $event)" />
|
||||||
<Z-created-by :employee-id="subtask.created_by" />
|
<Z-created-by :employee-id="subtask.created_by" />
|
||||||
<A-task-assigned-employee :employee="subtask._employee" />
|
<A-task-assigned-employee :employee="subtask._employee" />
|
||||||
|
<A-task-estimated-duration :hours="subtask.estimated_duration" />
|
||||||
<A-task-planned-time :hours="subtask.duration" />
|
<A-task-planned-time :hours="subtask.duration" />
|
||||||
<A-task-remaining-time :hours="subtask.duration - subtask.spent_time" />
|
<A-task-remaining-time :hours="subtask.duration - subtask.spent_time" />
|
||||||
<A-task-spent-time :hours="subtask.spent_time" :subtask="subtask" />
|
<A-task-spent-time :hours="subtask.spent_time" :subtask="subtask" />
|
||||||
@@ -23,6 +24,7 @@ import ATaskSpentTime from './_components/a-task-spent-time.vue'
|
|||||||
import ATaskRemainingTime from './_components/a-task-remaining-time.vue'
|
import ATaskRemainingTime from './_components/a-task-remaining-time.vue'
|
||||||
import ATaskDeadline from './_components/a-task-deadline.vue'
|
import ATaskDeadline from './_components/a-task-deadline.vue'
|
||||||
import ATaskDescription from './_components/a-task-description.vue'
|
import ATaskDescription from './_components/a-task-description.vue'
|
||||||
|
import ATaskEstimatedDuration from './_components/a-task-estimated-duration.vue'
|
||||||
import ZFiles from '@/plugins/tm@modal/_components/read-only/z-files.vue'
|
import ZFiles from '@/plugins/tm@modal/_components/read-only/z-files.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -39,9 +41,10 @@ export default {
|
|||||||
ATaskSpentTime,
|
ATaskSpentTime,
|
||||||
ATaskRemainingTime,
|
ATaskRemainingTime,
|
||||||
ATaskDescription,
|
ATaskDescription,
|
||||||
ATaskDeadline
|
ATaskDeadline,
|
||||||
|
ATaskEstimatedDuration
|
||||||
},
|
},
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
subtask: {
|
subtask: {
|
||||||
type: Object,
|
type: Object,
|
||||||
|
|||||||
@@ -109,7 +109,7 @@
|
|||||||
<div class="d-flex justify-space-between align-center modal-header border-bottom pb-4">
|
<div class="d-flex justify-space-between align-center modal-header border-bottom pb-4">
|
||||||
<h1>{{ subtask.title }}</h1>
|
<h1>{{ subtask.title }}</h1>
|
||||||
<div class="d-flex justify-start">
|
<div class="d-flex justify-start">
|
||||||
<img class="icon" :src="require('@/plugins/app/_img/icons/pencil.svg')" alt="pencil-icon" @click.stop="editMode = !editMode" />
|
<img class="icon" :src="require('@/plugins/app/_img/icons/pencil.svg')" alt="pencil-icon" @click.stop="toggleEditMode" />
|
||||||
<img class="icon trash" :src="require('@/plugins/app/_img/icons/bin.svg')" alt="trash-icon" @click.stop="openDeleteTaskModal(subtask)" />
|
<img class="icon trash" :src="require('@/plugins/app/_img/icons/bin.svg')" alt="trash-icon" @click.stop="openDeleteTaskModal(subtask)" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -239,6 +239,14 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
toggleEditMode() {
|
||||||
|
// TODO office365: Only for office365 events
|
||||||
|
return this.$events.emit('show-unable-to-edit-office-task-modal', { mode: 'edit' })
|
||||||
|
|
||||||
|
|
||||||
|
// this.editMode = !this.editMode
|
||||||
|
},
|
||||||
|
|
||||||
openDatepicker(ref) {
|
openDatepicker(ref) {
|
||||||
this.$refs[ref].openMenu()
|
this.$refs[ref].openMenu()
|
||||||
},
|
},
|
||||||
@@ -385,7 +393,9 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
openDeleteTaskModal(subtask) {
|
openDeleteTaskModal(subtask) {
|
||||||
this.$events.emit('show-delete-task-modal', { subtask })
|
// TODO office365: Only for office365 events
|
||||||
|
this.$events.emit('show-unable-to-edit-office-task-modal', { mode: 'delete' })
|
||||||
|
// this.$events.emit('show-delete-task-modal', { subtask })
|
||||||
},
|
},
|
||||||
|
|
||||||
showCompleteTaskModal() {
|
showCompleteTaskModal() {
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
<v-dialog v-model="visible" max-width="750" persistent>
|
<v-dialog v-model="visible" max-width="750" persistent>
|
||||||
<v-card>
|
<v-card>
|
||||||
<div class="d-flex justify-space-between align-center">
|
<div class="d-flex justify-space-between align-center">
|
||||||
<h1>Sub Task zosynchronizovaný z Office365 sa nedá upravovat. Upravte ho vo svojom kalendári a pockajte
|
<h1 v-if="mode === 'edit'">Sub Task zosynchronizovaný z Office365 sa nedá upravovat. Upravte ho vo svojom kalendári a pockajte na zosynchronizovanie s Task Managerom</h1>
|
||||||
na zosynchronizovanie s Task Managerom</h1>
|
<h1 v-else-if="mode === 'delete'">Sub Task zosynchronizovaný z Office365 sa nedá zmazať. Zmažte ho vo svojom kalendári a pockajte na zosynchronizovanie s Task Managerom</h1>
|
||||||
|
|
||||||
<v-icon
|
<v-icon
|
||||||
@click.stop="closeModal()"
|
@click.stop="closeModal()"
|
||||||
icon="mdi-close"
|
icon="mdi-close"
|
||||||
size="large"
|
size="large"
|
||||||
@@ -22,6 +22,13 @@ export default {
|
|||||||
mixins: [ modalMixin ],
|
mixins: [ modalMixin ],
|
||||||
emits: ['close', 'on-subtask-edited'],
|
emits: ['close', 'on-subtask-edited'],
|
||||||
|
|
||||||
|
props: {
|
||||||
|
mode: {
|
||||||
|
type: String,
|
||||||
|
default: 'edit' // edit or delete
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
<div class="d-flex justify-start align-center">
|
<div class="d-flex justify-start align-center">
|
||||||
<!-- TODO office365: Only for office365 events -->
|
<!-- TODO office365: Only for office365 events -->
|
||||||
<template v-if="true">
|
<template v-if="true">
|
||||||
<img class="pencil-icon" :src="eye" @click.stop="editOfficeEvent(subtask)">
|
<img class="pencil-icon" :src="eye" @click.stop="editTask(subtask, false)">
|
||||||
<img class="office-icon" :src="office365" />
|
<img class="office-icon" :src="office365" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -75,14 +75,14 @@ export default {
|
|||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
editTask(subtask, editMode = false) {
|
editTask(subtask, editMode = false) {
|
||||||
// TODO office365: Only for office365 events
|
this.$events.emit('show-subtask-modal', {subtask, editMode})
|
||||||
return this.editOfficeEvent(subtask)
|
|
||||||
|
|
||||||
// this.$events.emit('show-subtask-modal', {subtask, editMode})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
deleteTask(subtask) {
|
deleteTask(subtask) {
|
||||||
this.$events.emit('show-delete-task-modal', {subtask})
|
// TODO office365: Only for office365 events
|
||||||
|
this.$events.emit('show-unable-to-edit-office-task-modal', { mode: 'delete' })
|
||||||
|
|
||||||
|
// this.$events.emit('show-delete-task-modal', {subtask})
|
||||||
},
|
},
|
||||||
|
|
||||||
getDeadline(subtask) {
|
getDeadline(subtask) {
|
||||||
@@ -111,10 +111,6 @@ export default {
|
|||||||
const timeblockDeadline = this.getSelectedTimeblockDeadline(subtask.timeblocks)
|
const timeblockDeadline = this.getSelectedTimeblockDeadline(subtask.timeblocks)
|
||||||
|
|
||||||
return timeblockDeadline !== '' ? timeblockDeadline : 'Žiadny termín'
|
return timeblockDeadline !== '' ? timeblockDeadline : 'Žiadny termín'
|
||||||
},
|
|
||||||
|
|
||||||
editOfficeEvent(subtask) {
|
|
||||||
this.$events.emit('show-unable-to-edit-office-task-modal', { subtask })
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,14 +69,13 @@ export default {
|
|||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
editTask(subtask, editMode) {
|
editTask(subtask, editMode) {
|
||||||
// TODO office365: Only for office365 events
|
this.$events.emit('show-subtask-modal', {subtask, editMode})
|
||||||
return this.editOfficeEvent(subtask)
|
|
||||||
|
|
||||||
// this.$events.emit('show-subtask-modal', {subtask, editMode})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
deleteTask(subtask) {
|
deleteTask(subtask) {
|
||||||
this.$events.emit('show-delete-task-modal', {subtask})
|
// TODO office365: Only for office365 events
|
||||||
|
this.$events.emit('show-unable-to-edit-office-task-modal', { mode: 'delete' })
|
||||||
|
// this.$events.emit('show-delete-task-modal', {subtask})
|
||||||
},
|
},
|
||||||
|
|
||||||
getDeadline(subtask) {
|
getDeadline(subtask) {
|
||||||
@@ -84,10 +83,6 @@ export default {
|
|||||||
return moment(subtask.deadline).format('DD.MM.yyyy')
|
return moment(subtask.deadline).format('DD.MM.yyyy')
|
||||||
|
|
||||||
return moment(subtask.master_task_deadline).format('DD.MM.yyyy')
|
return moment(subtask.master_task_deadline).format('DD.MM.yyyy')
|
||||||
},
|
|
||||||
|
|
||||||
editOfficeEvent(subtask) {
|
|
||||||
this.$events.emit('show-unable-to-edit-office-task-modal', { subtask })
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user