This commit is contained in:
Matej Glasnák committed 2023-01-12 14:45:18 +01:00
1 parent 79f563a82d
commit d46a9151fc
25 files changed
+102 -162

No files matched your search

@@ -79,6 +79,7 @@ export default {
}, },
async created() { async created() {
// Kravarik: Toto negetuj takto ale cez ...mapGetters z auth store
try { try {
this.user = await this.$axios.get_auth_data('v1/auth/info') this.user = await this.$axios.get_auth_data('v1/auth/info')
} catch (error) { } catch (error) {
@@ -93,6 +94,7 @@ export default {
this.$router.push('/') this.$router.push('/')
this.$toast.success('Boli ste odhlásený') this.$toast.success('Boli ste odhlásený')
} catch (error) { } catch (error) {
// Kravarik: Do toastu posielaj len error, on si to vo vnutri vyparsuje (ak ne tak to treba dokodit v toaste)
this.$toast.error(error.data.error) this.$toast.error(error.data.error)
} }
}, },
@@ -1,93 +0,0 @@
.auth-card {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 16px;
padding: 30px;
width: 100%;
max-width: 486px;
margin: auto;
}
.auth-card img {
position: absolute;
right: 60px;
bottom: 188px;
cursor: pointer;
}
.auth-card .button {
color: white !important;
}
.auth-card .v-field {
border-bottom: 1px solid rgba(0, 0, 0, 0);
}
.auth-card .error .v-field {
border-bottom: 1px solid red;
}
@media screen and (max-width: 904px) {
.auth-card {
position: relative;
padding: 0;
border: none;
top: 0;
left: 0;
transform: translate(0, 0);
}
.auth-card h1 {
font-size: 19px;
}
.auth-card p {
font-size: 15px;
}
.auth-card .v-icon {
position: absolute !important;
right: 15px;
}
}
.v-field--variant-solo {
box-shadow: none !important;
border: 1px solid rgba(0, 0, 0, 0.1) !important;
}
.auth-card .error .v-field {
border: 0.5px solid red !important;
}
.error .v-field {
border: 0.5px solid red !important;
}
.error .dp__input {
border: 0.5px solid red !important;
}
.v-input__append {
margin: 0 !important;
}
.v-input__append .v-icon {
position: absolute !important;
right: 45px;
}
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
}
.error-message {
position: absolute;
top: 50%;
left: 30px;
color: red;
opacity: 0.8;
}
.v-select .v-field--variant-solo {
border: none !important;
}
.v-messages__message {
color: red !important;
}/*# sourceMappingURL=auth.theme.css.map */
@@ -1 +0,0 @@
{"version":3,"sources":["auth.theme.sass","auth.theme.css"],"names":[],"mappings":"AAAA;EACC,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;EACA,oCAAA;EACA,mBAAA;EACA,aAAA;EACA,WAAA;EACA,gBAAA;EACA,YAAA;ACCD;ADCC;EACC,kBAAA;EACA,WAAA;EACA,aAAA;EACA,eAAA;ACCF;ADCC;EACC,uBAAA;ACCF;ADCC;EACC,yCAAA;ACCF;ADCC;EACC,4BAAA;ACCF;;ADCA;EACC;IACC,kBAAA;IACA,UAAA;IACA,YAAA;IACA,MAAA;IACA,OAAA;IACA,0BAAA;ECEA;EDAA;IACC,eAAA;ECED;EDAA;IACC,eAAA;ECED;EDAA;IACC,6BAAA;IACA,WAAA;ECED;AACF;ADDA;EACC,2BAAA;EACA,+CAAA;ACGD;;ADDA;EACC,kCAAA;ACID;;ADFA;EACC,kCAAA;ACKD;;ADHA;EACC,kCAAA;ACMD;;ADJA;EACC,oBAAA;ACOD;ADLC;EACC,6BAAA;EACA,WAAA;ACOF;;ADLA;;EAEC,wBAAA;ACQD;;ADNA;EACC,kBAAA;EACA,QAAA;EACA,UAAA;EACA,UAAA;EACA,YAAA;ACSD;;ADPA;EACC,uBAAA;ACUD;;ADRA;EACC,qBAAA;ACWD","file":"auth.theme.css"}
@@ -40,6 +40,7 @@ export default {
await this.$axios.post_data('v1/auth/forgot', this.form) await this.$axios.post_data('v1/auth/forgot', this.form)
this.$router.push({ name: 'Reset password' }) this.$router.push({ name: 'Reset password' })
} catch (error) { } catch (error) {
// Kravarik: Error upravit
this.$toast.error(error.data.error) this.$toast.error(error.data.error)
} }
} }
@@ -44,6 +44,7 @@ export default {
await this.$axios.post_data('v1/auth/login', this.form) await this.$axios.post_data('v1/auth/login', this.form)
this.$router.push({ name: 'Overview - Ongoing tasks'}) this.$router.push({ name: 'Overview - Ongoing tasks'})
} catch (error) { } catch (error) {
// Kravarik: Error upravit
this.$toast.error(error.data.error) this.$toast.error(error.data.error)
} }
} }
@@ -49,6 +49,7 @@ export default {
await this.$axios.post_data('v1/auth/reset', this.form) await this.$axios.post_data('v1/auth/reset', this.form)
this.$router.push({ name: 'Login' }) this.$router.push({ name: 'Login' })
} catch (error) { } catch (error) {
// Kravarik: Error upravit
this.$toast.error(error.data.error) this.$toast.error(error.data.error)
} }
} }
@@ -1,25 +1,30 @@
<template> <template>
<div id="calendar" class="mb-12"> <div id="calendar" class="mb-12">
<FullCalendar ref="fullCalendar" :options="calendarOptions"/> <V-full-calendar ref="fullCalendar" :options="calendarOptions" />
<Z-master-task-modal ref="z-master-task-modal" /> <Z-master-task-modal ref="z-master-task-modal" />
</div> </div>
</template> </template>
<script> <script>
import FullCalendar from '@fullcalendar/vue3' import VFullCalendar from '@fullcalendar/vue3'
import dayGridPlugin from '@fullcalendar/daygrid' import dayGridPlugin from '@fullcalendar/daygrid'
import ZMasterTaskModal from '@/plugins/tm@modal/master-task/z-master-task-modal.vue' import ZMasterTaskModal from '@/plugins/tm@modal/master-task/z-master-task-modal.vue'
export default { export default {
components: { components: {
FullCalendar, VFullCalendar,
ZMasterTaskModal ZMasterTaskModal
}, },
// Kravarik: Prepisat propy na objektovy zapis
props: ['events', 'month'], props: ['events', 'month'],
methods: { methods: {
editTask(masterTask, editMode) { editTask(masterTask, editMode) {
this.$refs['z-master-task-modal'].create(masterTask, editMode) this.$refs['z-master-task-modal'].create(masterTask, editMode)
} }
}, },
// Kravarik: Comuted ma byt za data hned
computed: { computed: {
calendarOptions() { calendarOptions() {
return { return {
@@ -31,25 +36,28 @@ export default {
firstDay: 1, firstDay: 1,
dayHeaderClassNames: ['w-day-header'], dayHeaderClassNames: ['w-day-header'],
events: this.events, events: this.events,
// Kravarik: Skus toto prepisat na arrow function ako je v eventClick
eventContent: function (eventInfo) { eventContent: function (eventInfo) {
return { html: eventInfo.event.extendedProps.title_html } return { html: eventInfo.event.extendedProps.title_html }
}, },
eventClick: (info) => { eventClick: (info) => {
console.log(info.event._def)
// alert(JSON.stringify(info.event._def))
this.editTask(info.event._def.publicId, false) this.editTask(info.event._def.publicId, false)
} }
} }
} }
}, },
// Kravarik: Toto nechat na konci
watch: { watch: {
month(selectedMonth) { month(selectedMonth) {
const currentYear = (new Date()).getFullYear() const currentYear = new Date().getFullYear()
this.$refs.fullCalendar?.getApi().gotoDate(new Date(currentYear, selectedMonth, 1)) this.$refs.fullCalendar?.getApi().gotoDate(new Date(currentYear, selectedMonth, 1))
} }
}, },
// Kravarik: Posunut nad methods
mounted() { mounted() {
const currentYear = (new Date()).getFullYear() const currentYear = new Date().getFullYear()
this.calendarOptions.events = this.events this.calendarOptions.events = this.events
this.$refs.fullCalendar?.getApi().gotoDate(new Date(currentYear, this.month, 1)) this.$refs.fullCalendar?.getApi().gotoDate(new Date(currentYear, this.month, 1))
} }
@@ -1,44 +1,16 @@
<template> <template>
<v-row class="px-10 py-8 subheader"> <v-row class="px-10 py-8 subheader">
<v-select <v-select v-model="filter.selectedProject" class="subheader-input" :items="projects" label="Projekt" variant="outlined"></v-select>
v-model="filter.selectedProject"
class="subheader-input"
:items="projects"
label="Projekt"
variant="outlined"
></v-select>
<v-select <v-select v-model="filter.selectedTeam" class="subheader-input" :items="teams" label="Tím" variant="outlined"></v-select>
v-model="filter.selectedTeam"
class="subheader-input"
:items="teams"
label="Tím"
variant="outlined"
></v-select>
<v-select <v-select v-model="filter.selectedEmployee" class="subheader-input" :items="employees" label="Zamestnanec" variant="outlined"></v-select>
v-model="filter.selectedEmployee"
class="subheader-input"
:items="employees"
label="Zamestnanec"
variant="outlined"
></v-select>
<v-select <v-select v-model="filter.selectedMonth" class="subheader-input" :items="months" label="Mesiac" variant="outlined"></v-select>
v-model="filter.selectedMonth"
class="subheader-input"
:items="months"
label="Mesiac"
variant="outlined"
></v-select>
<div class="subheader-input switch"> <div class="subheader-input switch">
<p class="switch-label">Zobraziť ukončené</p> <p class="switch-label">Zobraziť ukončené</p>
<v-switch <v-switch v-model="filter.showFinishedTasks" color="#6200EE" hide-details></v-switch>
v-model="filter.showFinishedTasks"
color="#6200EE"
hide-details
></v-switch>
</div> </div>
</v-row> </v-row>
</template> </template>
@@ -59,19 +31,24 @@ export default {
{ title: 'September', value: 8 }, { title: 'September', value: 8 },
{ title: 'Október', value: 9 }, { title: 'Október', value: 9 },
{ title: 'November', value: 10 }, { title: 'November', value: 10 },
{ title: 'December', value: 11 }, { title: 'December', value: 11 }
], ],
filter: { filter: {
selectedProject: null, selectedProject: null,
selectedTeam: null, selectedTeam: null,
selectedEmployee: null, selectedEmployee: null,
selectedMonth: (new Date()).getMonth(), selectedMonth: new Date().getMonth(),
showFinishedTasks: false showFinishedTasks: false
} }
} }
}, },
// Kravarik: Props hodit nad data
props: ['projects', 'teams', 'employees'], props: ['projects', 'teams', 'employees'],
// Kravarik: Emits ma byt uplne prve
emits: ['filterChanged'], emits: ['filterChanged'],
watch: { watch: {
filter: { filter: {
handler() { handler() {
@@ -83,7 +60,7 @@ export default {
} }
</script> </script>
<style lang="sass" scoped> <style lang="sass" scoped>
// TODO: zjednotit styly ikon v globalnom sass subore // Kravarik: TODO zjednotit styly ikon v globalnom sass subore
// TODO: ↓ // TODO: ↓
.subheader .subheader
max-width: 100% max-width: 100%
@@ -1,5 +1,6 @@
<template> <template>
<div> <div>
<!-- Kravarik: Dat velke A -->
<a-project-filter :projects="projects" @filterChanged="onFilterChanged"></a-project-filter> <a-project-filter :projects="projects" @filterChanged="onFilterChanged"></a-project-filter>
<a-project-calendar :events="filteredEvents" :month="filter.selectedMonth"></a-project-calendar> <a-project-calendar :events="filteredEvents" :month="filter.selectedMonth"></a-project-calendar>
</div> </div>
@@ -16,13 +17,15 @@ export default {
}, },
data() { data() {
return { return {
// Kravarik: Toto premenuj na nejaky filterSettings alebo co to je
filter: { filter: {
selectedEmployee: null, selectedEmployee: null,
selectedMonth: (new Date()).getMonth(), selectedMonth: new Date().getMonth(),
selectedProject: null, selectedProject: null,
selectedTeam: null, selectedTeam: null,
showFinishedTasks: false showFinishedTasks: false
}, },
// Kravarik: Toto je preco hardcodenute?
projects: ['Projekt1', 'Projekt2', 'Projekt3', 'Projekt4'], projects: ['Projekt1', 'Projekt2', 'Projekt3', 'Projekt4'],
selectedProject: null, selectedProject: null,
events: [], events: [],
@@ -30,8 +33,11 @@ export default {
} }
}, },
async created() { async created() {
// Kravarik: Toto preco nieje v trycatch?
const events = await this.$axios.get_auth_data('v1/overview/projects') const events = await this.$axios.get_auth_data('v1/overview/projects')
this.events = events.map(item => ({
// Kravarik: Nemusis nahodou z map returnovat? Ci ked {} obalis to () tak nemusis potom?
this.events = events.map((item) => ({
id: item.id, id: item.id,
title: `${item.project_code} - ${item.name}`, title: `${item.project_code} - ${item.name}`,
title_html: `${item.project_code} - <b>${item.name}</b>`, title_html: `${item.project_code} - <b>${item.name}</b>`,
@@ -42,13 +48,13 @@ export default {
backgroundColor: item.color, backgroundColor: item.color,
borderColor: item.color borderColor: item.color
})) }))
this.filteredEvents = this.events.filter(item => !item.is_finished) this.filteredEvents = this.events.filter((item) => !item.is_finished)
}, },
methods: { methods: {
// TODO: prepojit filtrovanie na BE // Kravarik: TODO prepojit filtrovanie na BE
onFilterChanged(filterValues) { onFilterChanged(filterValues) {
this.filter = filterValues this.filter = filterValues
this.filteredEvents = this.events.filter(item => this.filter.showFinishedTasks || item.is_finished == false) this.filteredEvents = this.events.filter((item) => this.filter.showFinishedTasks || item.is_finished == false)
} }
} }
} }
@@ -42,17 +42,24 @@ export default {
data() { data() {
return { return {
// Kaluza: Napojit na BE
employees: ['Foo', 'Bar', 'Fizz', 'Buzz'], employees: ['Foo', 'Bar', 'Fizz', 'Buzz'],
// Kaluza: Toto je preco hardcoded
selectedDate: "13.11.2022 - 17.11.2022", selectedDate: "13.11.2022 - 17.11.2022",
// Kaluza: Napojit funkcnost
selectedEmployee: 'Bar', selectedEmployee: 'Bar',
date: new Date() date: new Date()
} }
}, },
created() { created() {
// Kaluza: getWeek pouzivas iba v js a nevolas ho z html a je to pomocna funkcia, takze ju nazvi _getWeek
this.getWeek() this.getWeek()
}, },
// Kaluza: Computed ma byt hned za data
computed: { computed: {
time() { time() {
return this.unscheduledTime return this.unscheduledTime
@@ -83,12 +83,15 @@
</Vue-cal> </Vue-cal>
<Z-sub-task-modal ref="z-sub-task-modal" /> <Z-sub-task-modal ref="z-sub-task-modal" />
<!-- Kravarik: Prerobit modaly na novy sposob -->
<Z-complete-task-modal v-if="showCompleteModal" :visible="showCompleteModal ? true : false" :task="showCompleteModal.task" @completeTask="completeTask" @close="showCompleteModal = null" /> <Z-complete-task-modal v-if="showCompleteModal" :visible="showCompleteModal ? true : false" :task="showCompleteModal.task" @completeTask="completeTask" @close="showCompleteModal = null" />
<Z-delete-task-modal v-if="showDeleteModal" :visible="showDeleteModal ? true : false" :task="showDeleteModal.task" @deleteTask="deleteTask" @close="showDeleteModal = null" /> <Z-delete-task-modal v-if="showDeleteModal" :visible="showDeleteModal ? true : false" :task="showDeleteModal.task" @deleteTask="deleteTask" @close="showDeleteModal = null" />
</div> </div>
</template> </template>
<script> <script>
// Kaluza: Cely tento komponent presun do tm@dashboard/_components/z-timeline.vue
import ZCompleteTaskModal from '@/plugins/tm@modal/task/z-complete-task-modal.vue' import ZCompleteTaskModal from '@/plugins/tm@modal/task/z-complete-task-modal.vue'
import ZDeleteTaskModal from '@/plugins/tm@modal/task/z-delete-task-modal.vue' import ZDeleteTaskModal from '@/plugins/tm@modal/task/z-delete-task-modal.vue'
import ZSubTaskModal from '@/plugins/tm@modal/sub-task/z-sub-task-modal.vue' import ZSubTaskModal from '@/plugins/tm@modal/sub-task/z-sub-task-modal.vue'
@@ -142,12 +145,10 @@ export default {
} }
}, },
mounted() {
// console.log(this.calData.tasks)
},
methods: { methods: {
weekChanged() { weekChanged() {
// Kaluza: Skus tieto document.getElementBy... prerobit na this.$el.getElement ...
// Je za tym viacero problemov ktore by to mohlo sposobit, v tejto appke asi ne ale nech si drzime best practices
const scrollContainer = document.getElementsByClassName('vuecal__scrollable-body')[0] const scrollContainer = document.getElementsByClassName('vuecal__scrollable-body')[0]
scrollContainer.scrollLeft = 0 scrollContainer.scrollLeft = 0
}, },
@@ -162,7 +163,9 @@ export default {
}, },
correctMargins() { correctMargins() {
if (!document.getElementsByClassName('vuecal__split-days-headers').length) return if (!document.getElementsByClassName('vuecal__split-days-headers').length)
return
const heightOfDayHeader = document.getElementsByClassName('vuecal__split-days-headers')[0].clientHeight const heightOfDayHeader = document.getElementsByClassName('vuecal__split-days-headers')[0].clientHeight
document.getElementsByClassName('vuecal__time-column')[0].style.marginTop = `${heightOfDayHeader}px` document.getElementsByClassName('vuecal__time-column')[0].style.marginTop = `${heightOfDayHeader}px`
document.getElementsByClassName('vuecal__cells-body')[0].style.marginTop = `${heightOfDayHeader}px` document.getElementsByClassName('vuecal__cells-body')[0].style.marginTop = `${heightOfDayHeader}px`
@@ -6,6 +6,7 @@
<Z-timeline :calData="timelineData" :calConfig="config" :splits="splitDays" @eventMoved="onEventMoved" @completeTask="completeTask" @reopenTask="reopenTask" @deleteTask="deleteTask" /> <Z-timeline :calData="timelineData" :calConfig="config" :splits="splitDays" @eventMoved="onEventMoved" @completeTask="completeTask" @reopenTask="reopenTask" @deleteTask="deleteTask" />
</W-loadable> </W-loadable>
<!-- Kaluza: Toto vyhodit a pouzit w toast -->
<v-snackbar <v-snackbar
v-model="errorToast" v-model="errorToast"
:timeout="2000" :timeout="2000"
@@ -32,8 +33,11 @@ export default {
data() { data() {
return { return {
timelineData: null, timelineData: null,
// Kaluza: Vyhodit tieto toast veci
errorToast: false, errorToast: false,
errorToastMessage: "Nepodarilo sa nacitat data!", errorToastMessage: "Nepodarilo sa nacitat data!",
dataLoaded: false, dataLoaded: false,
splitDays: [], splitDays: [],
unscheduledTime: 0, unscheduledTime: 0,
@@ -53,12 +57,14 @@ export default {
this.generateSplits(week.firstDay) this.generateSplits(week.firstDay)
this.generateNonWorkingHours(week.firstDay) this.generateNonWorkingHours(week.firstDay)
} catch(error) { } catch(error) {
// Kaluza: Ked to davas do w loadable tak nepouzi toast a iba daj this.timeineData = {error} a loadable ho parsne a zobrazi
this.timelineData = {} this.timelineData = {}
console.error(error) console.error(error)
this.triggerToast("Nepodarilo sa nacitat data!") this.triggerToast("Nepodarilo sa nacitat data!")
} }
}, },
// Kaluza: Toto prosimta premenuj lebo neviem vobec co znamena splits
generateSplits(date) { generateSplits(date) {
this.splitDays = [] this.splitDays = []
for (let i = 0; i < 7; i++) { for (let i = 0; i < 7; i++) {
@@ -72,6 +78,7 @@ export default {
} }
}, },
// Kaluza: Toto nazvi nejako inak aby bolo viac jasne ze z coho to preformatovava na co
formatData(date) { formatData(date) {
// format events // format events
this.timelineData.tasks.forEach(event => { this.timelineData.tasks.forEach(event => {
@@ -130,11 +137,13 @@ export default {
this.timelineData.tasks.push(...nonWorkingHours) this.timelineData.tasks.push(...nonWorkingHours)
}, },
// Kaluza: Vyhodit
triggerToast(message) { triggerToast(message) {
this.errorToastMessage = message this.errorToastMessage = message
this.errorToast = true this.errorToast = true
}, },
// Kaluza: Vyhodit ak sa nepouzije
async onEventMoved(event) { async onEventMoved(event) {
console.log("drag", event) console.log("drag", event)
// try { // try {
@@ -153,6 +162,13 @@ export default {
}, },
completeTask(id) { completeTask(id) {
// Kaluza: Tu pridaj request na BE, nepouzi filter ale find a sprav to takto
// 1. const task = this.timelineData.tasks.find(task => task.id == id)
// 2. task.completed = true
// 3. V tryCatch zavolaj request na BE
// 4. Ak to spadne do catchu tak daj task.completed = false a pod tym daj this.$toast.error(error)
// A AKO NAD TYM ROZMYSLAM completeTask A reopenTask MOZES SPOJIT DO JEDNEJ A VZDY LEN DAS task.completed = !task.completed
this.timelineData.tasks.filter(task => { this.timelineData.tasks.filter(task => {
if (task.id == id) { if (task.id == id) {
task.completed = true task.completed = true
@@ -161,6 +177,7 @@ export default {
}, },
reopenTask(id) { reopenTask(id) {
// Kaluza: Toto rovnakym sposobom ako complete task
this.timelineData.tasks.filter(task => { this.timelineData.tasks.filter(task => {
if (task.id == id) { if (task.id == id) {
task.completed = false task.completed = false
@@ -169,6 +186,7 @@ export default {
}, },
deleteTask(id) { deleteTask(id) {
// Kaluza: Toto rovnako ako complete a reopen
this.timelineData.tasks.splice(this.timelineData.tasks.findIndex(item => item.id === id), 1) this.timelineData.tasks.splice(this.timelineData.tasks.findIndex(item => item.id === id), 1)
} }
} }
@@ -42,6 +42,7 @@ export default {
data() { data() {
return { return {
// Kaluza: Napojit funkcionalitu
employees: ['Foo', 'Bar', 'Fizz', 'Buzz'], employees: ['Foo', 'Bar', 'Fizz', 'Buzz'],
selectedDate: new Date(), selectedDate: new Date(),
day: new Date(), day: new Date(),
@@ -6,6 +6,7 @@
<Z-timeline :calData="timelineData" :calConfig="config" :splits="splitDays" @eventMoved="onEventMoved" @completeTask="completeTask" @reopenTask="reopenTask" @deleteTask="deleteTask" /> <Z-timeline :calData="timelineData" :calConfig="config" :splits="splitDays" @eventMoved="onEventMoved" @completeTask="completeTask" @reopenTask="reopenTask" @deleteTask="deleteTask" />
</W-loadable> </W-loadable>
<!-- Kaluza: vyhodit toto a nahradit za wToast -->
<v-snackbar <v-snackbar
v-model="errorToast" v-model="errorToast"
:timeout="2000" :timeout="2000"
@@ -54,6 +55,7 @@ export default {
this.formatData() this.formatData()
this.generateNonWorkingHours(date) this.generateNonWorkingHours(date)
} catch(error) { } catch(error) {
// Kaluza: Upravit podla feedbacku v tasks.modal
this.timelineData = {} this.timelineData = {}
console.error(error) console.error(error)
this.triggerToast("Nepodarilo sa nacitat data!") this.triggerToast("Nepodarilo sa nacitat data!")
@@ -74,6 +76,7 @@ export default {
} }
}, },
// Kaluza: Upravit podla feedbacku v tasks.modal
formatData() { formatData() {
this.timelineData.tasks = [] this.timelineData.tasks = []
this.unscheduledTime = 0 this.unscheduledTime = 0
@@ -129,11 +132,13 @@ export default {
this.timelineData.tasks.push(...nonWorkingHours) this.timelineData.tasks.push(...nonWorkingHours)
}, },
// Kaluza: Upravit podla feedbacku v tasks.modal
triggerToast(message) { triggerToast(message) {
this.errorToastMessage = message this.errorToastMessage = message
this.errorToast = true this.errorToast = true
}, },
// Kaluza: Upravit podla feedbacku v tasks.modal
async onEventMoved(event) { async onEventMoved(event) {
console.log("drag", event) console.log("drag", event)
// try { // try {
@@ -151,6 +156,7 @@ export default {
// } // }
}, },
// Kaluza: Upravit podla feedbacku v tasks.modal
completeTask(id) { completeTask(id) {
this.timelineData.tasks.filter(task => { this.timelineData.tasks.filter(task => {
if (task.id == id) { if (task.id == id) {
@@ -159,6 +165,7 @@ export default {
}) })
}, },
// Kaluza: Upravit podla feedbacku v tasks.modal
reopenTask(id) { reopenTask(id) {
this.timelineData.tasks.filter(task => { this.timelineData.tasks.filter(task => {
if (task.id == id) { if (task.id == id) {
@@ -353,6 +353,7 @@ export default {
// this.masterTask = await this.$axios.get_auth_data(`v1/master-task/${this.masterTaksId}`) // this.masterTask = await this.$axios.get_auth_data(`v1/master-task/${this.masterTaksId}`)
// this.selectedTeam = `${this.masterTask.team.name} - ${this.masterTask.team.id}`) // this.selectedTeam = `${this.masterTask.team.name} - ${this.masterTask.team.id}`)
} catch (error) { } catch (error) {
// Kravarik: Pridaj toast
console.log(error) console.log(error)
} }
}, },
@@ -404,7 +405,6 @@ export default {
async _load(masterTaskId) { async _load(masterTaskId) {
try { try {
this.masterTask = await this.$axios.get_auth_data(`v1/master-tasks/${masterTaskId}`) this.masterTask = await this.$axios.get_auth_data(`v1/master-tasks/${masterTaskId}`)
console.log(this.masterTask)
} catch (error) { } catch (error) {
this.$toast.error(error) this.$toast.error(error)
} }
@@ -345,6 +345,7 @@ export default {
this.masterTasks = await this.$axios.get_auth_data('v1/master-tasks') this.masterTasks = await this.$axios.get_auth_data('v1/master-tasks')
this.employees = await this.$axios.get_auth_data('v1/employees') this.employees = await this.$axios.get_auth_data('v1/employees')
} catch (error) { } catch (error) {
// Kravarik: Pridaj toast
console.log(error) console.log(error)
} }
}, },
@@ -104,20 +104,6 @@ export default {
}, },
methods: { methods: {
async create(team = null) {
if (team) {
this.team = team
await this._load()
} else {
this.team = {
name: '',
employees: []
}
}
this.visible = true
},
async save() { async save() {
if (!(await this.v$.$validate())) if (!(await this.v$.$validate()))
return return
@@ -33,6 +33,7 @@ export default {
try { try {
this.employees = await this.$axios.get_auth_data('v1/employees') this.employees = await this.$axios.get_auth_data('v1/employees')
} catch (error) { } catch (error) {
// Kravarik: Pridaj toast
console.log(error) console.log(error)
} }
}, },
@@ -21,6 +21,7 @@
<img class="pencil-icon" :src="require('@/plugins/tm@overview/_img/pencil-icon.svg')" alt="pencil-icon" :style="{opacity: 0.3}"/> <img class="pencil-icon" :src="require('@/plugins/tm@overview/_img/pencil-icon.svg')" alt="pencil-icon" :style="{opacity: 0.3}"/>
<img class="trash-icon" :src="require('@/plugins/tm@overview/_img/trash-icon.svg')" alt="trash-icon" @click.stop="showDeleteModal = { task }" /> <img class="trash-icon" :src="require('@/plugins/tm@overview/_img/trash-icon.svg')" alt="trash-icon" @click.stop="showDeleteModal = { task }" />
<!-- Kravarik: Aj tento modal prerob novym sposobom -->
<Z-delete-task-modal v-if="showDeleteModal" :visible="showDeleteModal ? true : false" :task="showDeleteModal.task" @close="showDeleteModal = null" /> <Z-delete-task-modal v-if="showDeleteModal" :visible="showDeleteModal ? true : false" :task="showDeleteModal.task" @close="showDeleteModal = null" />
</div> </div>
</td> </td>
@@ -38,12 +38,15 @@ export default {
this.ongoingTasks = await this.$axios.get_auth_data('v1/overview/ongoing-tasks') this.ongoingTasks = await this.$axios.get_auth_data('v1/overview/ongoing-tasks')
this.filterOngoingTasks() this.filterOngoingTasks()
} catch (error) { } catch (error) {
// Kravarik: ked to je takto ze idu data do w-loadable tak musis dat this.ongoingTasks = {error}
// Ten toast vyhod a to kde nastavujes error musis dat do {} ako v riadku hore lebo ono to pozera if (content.error)
this.ongoingTasks = error this.ongoingTasks = error
this.$toast.error(error) this.$toast.error(error)
} }
}, },
methods: { methods: {
// Kravarik: Toto sprav cez computed. A bude tam ze if (!searchQuerry) return this.ongoing tasks. Else to prefiltrujes
filterOngoingTasks(searchQuery) { filterOngoingTasks(searchQuery) {
if(!searchQuery) return this.filteredOngoingTasks = this.ongoingTasks if(!searchQuery) return this.filteredOngoingTasks = this.ongoingTasks
this.filteredOngoingTasks = this.ongoingTasks.filter((task) => { this.filteredOngoingTasks = this.ongoingTasks.filter((task) => {
@@ -19,6 +19,7 @@
<img class="pencil-icon" :src="require('@/plugins/tm@overview/_img/pencil-icon.svg')" alt="pencil-icon" :style="{opacity: 0.3}"> <img class="pencil-icon" :src="require('@/plugins/tm@overview/_img/pencil-icon.svg')" alt="pencil-icon" :style="{opacity: 0.3}">
<img class="trash-icon" :src="require('@/plugins/tm@overview/_img/trash-icon.svg')" alt="trash-icon" @click.stop="showDeleteModal = { task }"> <img class="trash-icon" :src="require('@/plugins/tm@overview/_img/trash-icon.svg')" alt="trash-icon" @click.stop="showDeleteModal = { task }">
<!-- Kravarik: Aj tento modal prerob novym sposobom -->
<Z-delete-task-modal v-if="showDeleteModal" :visible="showDeleteModal ? true : false" :task="showDeleteModal.task" @close="showDeleteModal = null" /> <Z-delete-task-modal v-if="showDeleteModal" :visible="showDeleteModal ? true : false" :task="showDeleteModal.task" @close="showDeleteModal = null" />
</div> </div>
</td> </td>
@@ -38,12 +38,15 @@ export default {
this.unscheduledTasks = await this.$axios.get_auth_data('v1/overview/unscheduled-tasks') this.unscheduledTasks = await this.$axios.get_auth_data('v1/overview/unscheduled-tasks')
this.filterUnscheduledTasks() this.filterUnscheduledTasks()
} catch (error) { } catch (error) {
// Kravarik: ked to je takto ze idu data do w-loadable tak musis dat this.ongoingTasks = {error}
// Ten toast vyhod a to kde nastavujes error musis dat do {} ako v riadku hore lebo ono to pozera if (content.error)
this.unscheduledTasks = error this.unscheduledTasks = error
this.$toast.error(error) this.$toast.error(error)
} }
}, },
methods: { methods: {
// Kravarik: Toto sprav cez computed. A bude tam ze if (!searchQuerry) return this.unscheduled tasks. Else to prefiltrujes
filterUnscheduledTasks(searchQuery) { filterUnscheduledTasks(searchQuery) {
if(!searchQuery) return this.filteredUnscheduledTasks = this.unscheduledTasks if(!searchQuery) return this.filteredUnscheduledTasks = this.unscheduledTasks
this.filteredUnscheduledTasks = this.unscheduledTasks.filter((task) => { this.filteredUnscheduledTasks = this.unscheduledTasks.filter((task) => {
@@ -22,6 +22,7 @@
</v-table> </v-table>
<Z-team-modal ref="z-team-modal" /> <Z-team-modal ref="z-team-modal" />
<!-- Kravarik: Aj tento modal prerob novym sposobom -->
<Z-delete-team-modal v-if="deleteModal" :visible="deleteModal ? true : false" :team="deleteModal.team" @close="(deleteModal = null)" /> <Z-delete-team-modal v-if="deleteModal" :visible="deleteModal ? true : false" :team="deleteModal.team" @close="(deleteModal = null)" />
</div> </div>
</template> </template>
@@ -22,6 +22,8 @@ export default {
try { try {
this.teams = await this.$axios.get_auth_data('v1/teams') this.teams = await this.$axios.get_auth_data('v1/teams')
} catch (error) { } catch (error) {
// Kravarik: ked to je takto ze idu data do w-loadable tak musis dat this.ongoingTasks = {error}
// Ten toast vyhod a to kde nastavujes error musis dat do {} ako v riadku hore lebo ono to pozera if (content.error)
this.teams = {error: error.data.error} this.teams = {error: error.data.error}
this.$toast.error(error.data.error) this.$toast.error(error.data.error)
} }
@@ -86,6 +86,7 @@ export default {
created() { created() {
// TEMP // TEMP
// Kravarik: Vyhodit
this.$store.dispatch('auth/login', { this.$store.dispatch('auth/login', {
email: 'xx@asdasd.asd', email: 'xx@asdasd.asd',
password: 'sdfsdfsdf' password: 'sdfsdfsdf'
@@ -108,8 +109,10 @@ export default {
if (!(await this.v$.$validate())) return if (!(await this.v$.$validate())) return
try { try {
await this.$store.dispatch('wAuth/updateUserInfo', this.user) await this.$store.dispatch('wAuth/updateUserInfo', this.user)
this.$toast.success('Profil bol úspešne zmenený') this.$toast.success('Profil bol úspešne zmenený')
} catch (error) { } catch (error) {
// Kravarik: Posli iba errror
this.$toast.error(error.response.data.error) this.$toast.error(error.response.data.error)
} }
}, },