mirror of
https://bitbucket.org/studiotem/jandl-taskmanager-app.git
synced 2026-10-22 14:59:34 +00:00
[Projects] Added filters
This commit is contained in:
1 parent
919b2eebbe
commit
302286bff8
29 files changed
+508
-350
No files matched your search
@@ -44,9 +44,10 @@ export default {
|
||||
},
|
||||
|
||||
mounted() {
|
||||
const currentYear = new Date().getFullYear()
|
||||
const currentYear = new Date().getFullYear()
|
||||
const monthIndex = typeof this.month == 'string' ? parseInt(this.month) - 1 : this.month - 1
|
||||
this.calendarOptions.events = this.events
|
||||
this.$refs.fullCalendar?.getApi().gotoDate(new Date(currentYear, this.month, 1))
|
||||
this.$refs.fullCalendar?.getApi().gotoDate(new Date(currentYear, monthIndex, 1))
|
||||
},
|
||||
|
||||
watch: {
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
<template>
|
||||
<v-row class="px-10 py-8 subheader">
|
||||
<v-select v-model="filter.selectedProject" class="subheader-input" :items="[null, ...projects]" item-title="name" item-value="id" label="Projekt" variant="outlined" />
|
||||
<v-select v-model="filter.projectId" class="subheader-input" :items="[null, ...projects]" item-title="name" item-value="id" label="Projekt" variant="outlined" />
|
||||
|
||||
<v-select v-model="filter.selectedTeam" class="subheader-input" :items="[null, ...teams]" label="Tím" variant="outlined" item-title="name" item-value="id" />
|
||||
<v-select v-model="filter.teamId" class="subheader-input" :items="[null, ...teams]" label="Tím" variant="outlined" item-title="name" item-value="id" />
|
||||
|
||||
<v-select v-model="filter.selectedEmployee" class="subheader-input" :items="[null, ...enrichedEmployees]" label="Zamestnanec" variant="outlined" item-title="_fullName" item-value="id" />
|
||||
<v-select v-model="filter.employeeId" class="subheader-input" :items="[null, ...enrichedEmployees]" label="Zamestnanec" variant="outlined" item-title="_fullName" item-value="id" />
|
||||
|
||||
<v-select v-model="filter.selectedAssignedBy" class="subheader-input" :items="[null, ...enrichedEmployees]" label="Vytvoril" variant="outlined" item-title="_fullName" item-value="id" />
|
||||
<v-select v-model="filter.createdById" class="subheader-input" :items="[null, ...enrichedEmployees]" label="Vytvoril" variant="outlined" item-title="_fullName" item-value="id" />
|
||||
|
||||
<v-select v-model="filter.selectedMonth" class="subheader-input" :items="months" label="Mesiac" variant="outlined" />
|
||||
<v-select v-model="filter.month" class="subheader-input" :items="months" label="Mesiac" variant="outlined" />
|
||||
|
||||
<div class="subheader-input switch">
|
||||
<p class="switch-label">Zobraziť ukončené</p>
|
||||
<v-switch v-model="filter.showFinishedTasks" color="#6200EE" hide-details></v-switch>
|
||||
<v-switch v-model="filter.isFinished" color="#6200EE" hide-details></v-switch>
|
||||
</div>
|
||||
</v-row>
|
||||
</template>
|
||||
@@ -26,31 +26,36 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
months: [
|
||||
{ title: 'Január', value: 0 },
|
||||
{ title: 'Február', value: 1 },
|
||||
{ title: 'Marec', value: 2 },
|
||||
{ title: 'Apríl', value: 3 },
|
||||
{ title: 'Máj', value: 4 },
|
||||
{ title: 'Jún', value: 5 },
|
||||
{ title: 'Júl', value: 6 },
|
||||
{ title: 'August', value: 7 },
|
||||
{ title: 'September', value: 8 },
|
||||
{ title: 'Október', value: 9 },
|
||||
{ title: 'November', value: 10 },
|
||||
{ title: 'December', value: 11 }
|
||||
{ title: 'Január', value: '01' },
|
||||
{ title: 'Február', value: '02' },
|
||||
{ title: 'Marec', value: '03' },
|
||||
{ title: 'Apríl', value: '04' },
|
||||
{ title: 'Máj', value: '05' },
|
||||
{ title: 'Jún', value: '06' },
|
||||
{ title: 'Júl', value: '07' },
|
||||
{ title: 'August', value: '08' },
|
||||
{ title: 'September', value: '09' },
|
||||
{ title: 'Október', value: '10' },
|
||||
{ title: 'November', value: '11' },
|
||||
{ title: 'December', value: '12' }
|
||||
],
|
||||
|
||||
filter: {
|
||||
selectedProject: null,
|
||||
selectedTeam: null,
|
||||
selectedEmployee: null,
|
||||
selectedAssignedBy: null,
|
||||
selectedMonth: new Date().getMonth(),
|
||||
showFinishedTasks: false
|
||||
projectId: null,
|
||||
teamId: null,
|
||||
employeeId: null,
|
||||
createdById: null,
|
||||
month: null,
|
||||
isFinished: false
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
const monthIndex = new Date().getMonth()
|
||||
this.filter.month = monthIndex < 9 ? `0${monthIndex + 1}` : `${monthIndex + 1}`
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters('tm', [
|
||||
'teams',
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
<template>
|
||||
<W-loadable :content="filteredEvents" empty-message="Nepodarilo sa nacitat data!">
|
||||
<A-project-filter @filterChanged="onFilterChanged" />
|
||||
<A-project-calendar :events="filteredEvents" :month="filter.selectedMonth" @open-detail="openMasterTaskModal" />
|
||||
</W-loadable>
|
||||
<div>
|
||||
<A-project-filter v-if="$store.getters['tm/isInitialized']" @filterChanged="onFilterChanged" />
|
||||
|
||||
<W-loadable :content="filteredProjects" emptyMessage="Nenašli sa žiadne vyhovujúce projekty">
|
||||
<A-project-calendar :events="filteredProjects" :month="filter.month" @open-detail="openMasterTaskModal" />
|
||||
</W-loadable>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import AProjectCalendar from './_components/a-project-calendar.vue'
|
||||
import AProjectFilter from './_components/a-project-filter.vue'
|
||||
|
||||
@@ -15,51 +17,20 @@ export default {
|
||||
AProjectCalendar,
|
||||
AProjectFilter
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
selectedProject: null,
|
||||
filter: {
|
||||
selectedMonth: new Date().getMonth()
|
||||
}
|
||||
mastertasks: null,
|
||||
filter: null
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters('tm', [
|
||||
'mastertasks'
|
||||
]),
|
||||
|
||||
filteredEvents() {
|
||||
filteredProjects() {
|
||||
if (!this.mastertasks)
|
||||
return null
|
||||
|
||||
if (this.mastertasks.error)
|
||||
return this.mastertasks
|
||||
|
||||
if (!this.mastertasks.length)
|
||||
return []
|
||||
|
||||
// duplicate all tasks
|
||||
let events = this.mastertasks
|
||||
|
||||
// show/hide finished tasks
|
||||
if (!this.filter.showFinishedTasks)
|
||||
events = events.filter(event => !event.is_finished)
|
||||
|
||||
// filter by project_id
|
||||
if(this.filter.selectedProject)
|
||||
events = events.filter(event => event.project_id == this.filter.selectedProject)
|
||||
|
||||
// filter by team_id
|
||||
if (this.filter.selectedTeam)
|
||||
events = events.filter(event => event.team_id == this.filter.selectedTeam)
|
||||
|
||||
// filter by employee_id
|
||||
if (this.filter.selectedEmployee)
|
||||
events = events.filter(event => event.employees.find(employee => employee.id == this.filter.selectedEmployee))
|
||||
|
||||
// format masterTasks to event format for calendar
|
||||
events = events.map(event => {
|
||||
|
||||
return this.mastertasks.map(event => {
|
||||
return {
|
||||
id: event.id,
|
||||
title: `${event.project_code} - ${event.name}`,
|
||||
@@ -72,30 +43,35 @@ export default {
|
||||
borderColor: event.color
|
||||
}
|
||||
})
|
||||
|
||||
return events
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
// this.$events.on('on-master-task-deleted', (masterTask) => {
|
||||
// this.mastertasks = this.mastertasks.filter(mt => mt.id != masterTask.id)
|
||||
// })
|
||||
|
||||
// this.$events.on('on-master-task-edited', (masterTask) => {
|
||||
// this.mastertasks = this.mastertasks.map(mTask => mTask.id == masterTask.id ? masterTask : mTask)
|
||||
// this._getData()
|
||||
// })
|
||||
},
|
||||
|
||||
methods: {
|
||||
onFilterChanged(filterValues) {
|
||||
this.filter = filterValues
|
||||
async onFilterChanged(filter) {
|
||||
this.mastertasks = null
|
||||
this.filter = filter
|
||||
const urlQueryObject = {}
|
||||
|
||||
if (filter.employeeId) urlQueryObject.employee_id = filter.employeeId
|
||||
if (filter.projectId) urlQueryObject.project_id = filter.projectId
|
||||
if (filter.teamId) urlQueryObject.team_id = filter.teamId
|
||||
if (filter.createdById) urlQueryObject.created_by = filter.createdById
|
||||
if (filter.isFinished) urlQueryObject.is_finished = filter.isFinished ? 1 : 0
|
||||
if (filter.month) urlQueryObject.created_at = filter.month
|
||||
|
||||
const queryParameters = new URLSearchParams(urlQueryObject).toString()
|
||||
|
||||
try {
|
||||
const { mastertasks } = await this.$axios.get_auth(`v1/mastertasks?${queryParameters}`)
|
||||
this.mastertasks = mastertasks
|
||||
} catch (error) {
|
||||
this.$toast.error('Nepodarilo sa nacitat data!')
|
||||
}
|
||||
},
|
||||
|
||||
openMasterTaskModal(masterTaskId) {
|
||||
const masterTask = this.mastertasks.find(masterTask => masterTask.id == masterTaskId)
|
||||
this.$events.emit('show-master-task-modal', {masterTask, editMode: false})
|
||||
openMasterTaskModal(mastertaskId) {
|
||||
const mastertask = this.mastertasks.find(mastertask => mastertask.id == mastertaskId)
|
||||
this.$events.emit('show-master-task-modal', {mastertask, editMode: false})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
import ATaskFilter from './_components/a-tasks-filter.vue'
|
||||
import ZTimeline from '@/plugins/tm@dashboard/_components/z-timeline.vue'
|
||||
import { addDays, subDays } from 'date-fns'
|
||||
import { mapGetters } from 'vuex'
|
||||
import moment from 'moment'
|
||||
import timelineUtils from './_utils/timeline.utils'
|
||||
import tmUtils from '@/plugins/tm@_utils/tm.utils'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -81,21 +79,18 @@ export default {
|
||||
},
|
||||
|
||||
mounted() {
|
||||
|
||||
this.$events.on('on-subtask-edited', (subtask) => {
|
||||
this.subtasks = this.subtasks.map(st => {
|
||||
if (st.id == subtask.id)
|
||||
return subtask
|
||||
|
||||
return st
|
||||
})
|
||||
this.$events.on('on-subtask-edited', () => {
|
||||
this.onFilterChanged(this.filter)
|
||||
})
|
||||
},
|
||||
|
||||
unmounted() {
|
||||
this.$events.off('on-subtask-edited')
|
||||
},
|
||||
|
||||
methods: {
|
||||
async onFilterChanged(filter) {
|
||||
this.filter = filter
|
||||
|
||||
const urlQueryObject = {}
|
||||
|
||||
if (filter.start) urlQueryObject.start = moment(filter.start).format('YYYY-MM-DD')
|
||||
@@ -106,10 +101,11 @@ export default {
|
||||
|
||||
try {
|
||||
const { subtasks } = await this.$axios.get_auth(`v1/subtasks?${queryParameters}`)
|
||||
this.config.scrollHour = this.filter.employee.work_start - 1
|
||||
this.config.scrollHour = this.filter?.employee.work_start - 1
|
||||
this.config.date = this.filter.start
|
||||
this.subtasks = subtasks
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
this.$toast.error('Nepodarilo sa nacitat data!')
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user