Compare commits
No commits in common. "67d844d6e6630fd5b45ae723de89ca74c82edd0c" and "c767d924426bd12fda8d7a1cbcf36edc346d306f" have entirely different histories.
67d844d6e6
...
c767d92442
src
|
@ -52,7 +52,6 @@
|
||||||
class="col-xs-12 col-sm-6 q-pa-sm"
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
||||||
label="Veranstaltungsende"
|
label="Veranstaltungsende"
|
||||||
:rules="[afterStart]"
|
:rules="[afterStart]"
|
||||||
:key="update_time"
|
|
||||||
/>
|
/>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="event.description"
|
v-model="event.description"
|
||||||
|
@ -62,7 +61,7 @@
|
||||||
filled
|
filled
|
||||||
/>
|
/>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
<q-card-section v-if="modelValue === undefined">
|
<q-card-section v-if="event.is_template !== true && modelValue === undefined">
|
||||||
<q-btn-toggle
|
<q-btn-toggle
|
||||||
v-model="recurrent"
|
v-model="recurrent"
|
||||||
spread
|
spread
|
||||||
|
@ -82,7 +81,8 @@
|
||||||
<q-btn color="primary" label="Schicht hinzufügen" @click="addJob()" />
|
<q-btn color="primary" label="Schicht hinzufügen" @click="addJob()" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<template v-for="(job, index) in event.jobs" :key="index + update_time">
|
<template v-for="(job, index) in event.jobs" :key="index">
|
||||||
|
<!--:ref="active === index ? 'activeJob' : undefined"-->
|
||||||
<edit-job-slot
|
<edit-job-slot
|
||||||
ref="activeJob"
|
ref="activeJob"
|
||||||
v-model="event.jobs[index]"
|
v-model="event.jobs[index]"
|
||||||
|
@ -196,17 +196,14 @@ export default defineComponent({
|
||||||
const diff = event.value.start.getTime() - tpl.start.getTime();
|
const diff = event.value.start.getTime() - tpl.start.getTime();
|
||||||
// Adjust end of event and all jobs
|
// Adjust end of event and all jobs
|
||||||
if (event.value.end) event.value.end.setTime(event.value.end.getTime() + diff);
|
if (event.value.end) event.value.end.setTime(event.value.end.getTime() + diff);
|
||||||
event.value.jobs = [];
|
event.value.jobs.forEach((job) => {
|
||||||
tpl.jobs.forEach((job) => {
|
job.start.setTime(job.start.getTime() + diff);
|
||||||
const copied_job: FG.Job = Object.assign({}, job, { id: NaN });
|
if (job.end) job.end.setTime(job.end.getTime() + diff);
|
||||||
copied_job.start.setTime(copied_job.start.getTime() + diff);
|
|
||||||
if (copied_job.end) copied_job.end.setTime(copied_job.end.getTime() + diff);
|
|
||||||
event.value.jobs.push(<Job>copied_job);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function save(is_template = false) {
|
async function save(template = false) {
|
||||||
event.value.is_template = is_template;
|
event.value.is_template = template;
|
||||||
try {
|
try {
|
||||||
await store.addEvent(event.value);
|
await store.addEvent(event.value);
|
||||||
|
|
||||||
|
@ -270,54 +267,7 @@ export default defineComponent({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const computed_start = computed({
|
|
||||||
get: () => event.value?.start,
|
|
||||||
set: (value) => {
|
|
||||||
event.value.start = value;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const computed_end = computed({
|
|
||||||
get: () => event.value?.end,
|
|
||||||
set: (value) => {
|
|
||||||
event.value.end = value;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const update_time = ref(false);
|
|
||||||
|
|
||||||
watch(computed_start, (newValue, oldValue) => {
|
|
||||||
update_time.value = true;
|
|
||||||
const diff = newValue.getTime() - oldValue.getTime();
|
|
||||||
event.value?.jobs.forEach((job) => {
|
|
||||||
job.start.setTime(job.start.getTime() + diff);
|
|
||||||
});
|
|
||||||
computed_end.value?.setTime(computed_end.value?.getTime() + diff);
|
|
||||||
setTimeout(() => {
|
|
||||||
update_time.value = false;
|
|
||||||
}, 0);
|
|
||||||
});
|
|
||||||
|
|
||||||
watch(computed_end, (newValue, oldValue) => {
|
|
||||||
if (newValue && oldValue) {
|
|
||||||
update_time.value = true;
|
|
||||||
if (!newValue || !oldValue) return;
|
|
||||||
const diff = newValue.getTime() - oldValue.getTime();
|
|
||||||
event.value?.jobs.forEach((job) => {
|
|
||||||
if (job.end) job.end.setTime(job.end.getTime() + diff);
|
|
||||||
else job.end = new Date(newValue.getTime());
|
|
||||||
});
|
|
||||||
} else if (newValue && !oldValue) {
|
|
||||||
event.value?.jobs.forEach((job) => {
|
|
||||||
if (!job.end) job.end = new Date(newValue.getTime());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
setTimeout(() => {
|
|
||||||
update_time.value = false;
|
|
||||||
}, 0);
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
update_time,
|
|
||||||
activate,
|
activate,
|
||||||
active,
|
active,
|
||||||
addJob,
|
addJob,
|
||||||
|
|
|
@ -88,10 +88,9 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { ComponentPublicInstance, computed, defineComponent, onBeforeMount, ref, watch } from 'vue';
|
import { ComponentPublicInstance, computed, defineComponent, onBeforeMount, ref } from 'vue';
|
||||||
import { QCalendarAgenda } from '@quasar/quasar-ui-qcalendar';
|
import { QCalendarAgenda } from '@quasar/quasar-ui-qcalendar';
|
||||||
import { date, QDate, QPopupProxy, useQuasar } from 'quasar';
|
import { date, QDate, QPopupProxy, useQuasar } from 'quasar';
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
|
||||||
import { EditableEvent, emptyEvent } from '../../store/models';
|
import { EditableEvent, emptyEvent } from '../../store/models';
|
||||||
import { startOfWeek } from '@flaschengeist/api';
|
import { startOfWeek } from '@flaschengeist/api';
|
||||||
import { useEventStore } from '../../store';
|
import { useEventStore } from '../../store';
|
||||||
|
@ -106,8 +105,6 @@ export default defineComponent({
|
||||||
setup() {
|
setup() {
|
||||||
const store = useEventStore();
|
const store = useEventStore();
|
||||||
const quasar = useQuasar();
|
const quasar = useQuasar();
|
||||||
const route = useRoute();
|
|
||||||
const router = useRouter();
|
|
||||||
|
|
||||||
const datepicker = ref<QDate>();
|
const datepicker = ref<QDate>();
|
||||||
const proxy = ref<QPopupProxy>();
|
const proxy = ref<QPopupProxy>();
|
||||||
|
@ -144,19 +141,6 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
|
|
||||||
onBeforeMount(async () => {
|
onBeforeMount(async () => {
|
||||||
await router.replace({ query: { ...route.query, q_tab: 'agendaView' } });
|
|
||||||
if (!Object.keys(route.query).includes('q_date')) {
|
|
||||||
const q_date = date.formatDate(selectedDate.value, 'YYYY-MM-DD');
|
|
||||||
await router.replace({ query: { ...route.query, q_date } });
|
|
||||||
} else {
|
|
||||||
selectedDate.value = date.extractDate(route.query.q_date as string, 'YYYY-MM-DD');
|
|
||||||
}
|
|
||||||
if (!Object.keys(route.query).includes('q_view')) {
|
|
||||||
const q_view = calendarView.value;
|
|
||||||
await router.replace({ query: { ...route.query, q_view } });
|
|
||||||
} else {
|
|
||||||
calendarView.value = route.query.q_view as string;
|
|
||||||
}
|
|
||||||
await loadAgendas();
|
await loadAgendas();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -187,11 +171,7 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const loading = ref(false);
|
|
||||||
|
|
||||||
async function loadAgendas() {
|
async function loadAgendas() {
|
||||||
if (loading.value) return;
|
|
||||||
loading.value = true;
|
|
||||||
const from =
|
const from =
|
||||||
calendarView.value === 'day' ? selectedDate.value : startOfWeek(selectedDate.value);
|
calendarView.value === 'day' ? selectedDate.value : startOfWeek(selectedDate.value);
|
||||||
const to = date.addToDate(from, { days: calendarView.value === 'day' ? 1 : 7 });
|
const to = date.addToDate(from, { days: calendarView.value === 'day' ? 1 : 7 });
|
||||||
|
@ -204,11 +184,8 @@ export default defineComponent({
|
||||||
if (!events.value[day]) {
|
if (!events.value[day]) {
|
||||||
events.value[day] = [];
|
events.value[day] = [];
|
||||||
}
|
}
|
||||||
const idx = events.value[day].findIndex((e) => e.id === event.id);
|
events.value[day].push(event);
|
||||||
if (idx === -1) events.value[day].push(event);
|
|
||||||
else events.value[day][idx] = event;
|
|
||||||
});
|
});
|
||||||
loading.value = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function addDays(reverse: boolean) {
|
function addDays(reverse: boolean) {
|
||||||
|
@ -241,18 +218,6 @@ export default defineComponent({
|
||||||
return value?.getFullYear() || '-';
|
return value?.getFullYear() || '-';
|
||||||
}
|
}
|
||||||
|
|
||||||
watch(selectedDate, async (newValue) => {
|
|
||||||
const q_date = date.formatDate(newValue, 'YYYY-MM-DD');
|
|
||||||
await router.replace({ query: { ...route.query, q_date } });
|
|
||||||
await loadAgendas();
|
|
||||||
});
|
|
||||||
|
|
||||||
watch(calendarView, async (newValue) => {
|
|
||||||
const q_view = newValue;
|
|
||||||
await router.replace({ query: { ...route.query, q_view } });
|
|
||||||
await loadAgendas();
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
asYear,
|
asYear,
|
||||||
asMonth,
|
asMonth,
|
||||||
|
|
|
@ -44,8 +44,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { computed, defineComponent, ref, onBeforeMount, watch } from 'vue';
|
import { computed, defineComponent, ref } from 'vue';
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
|
||||||
import ManageTypes from '../components/management/ManageTypes.vue';
|
import ManageTypes from '../components/management/ManageTypes.vue';
|
||||||
import EditEvent from '../components/management/EditEvent.vue';
|
import EditEvent from '../components/management/EditEvent.vue';
|
||||||
import { hasPermission } from '@flaschengeist/api';
|
import { hasPermission } from '@flaschengeist/api';
|
||||||
|
@ -71,21 +70,6 @@ export default defineComponent({
|
||||||
: []),
|
: []),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const route = useRoute();
|
|
||||||
const router = useRouter();
|
|
||||||
|
|
||||||
onBeforeMount(async () => {
|
|
||||||
if (
|
|
||||||
(route.query.q_tab && route.query.q_tab === 'create') ||
|
|
||||||
route.query.q_tab === 'jobtypes' ||
|
|
||||||
route.query.q_tab === 'eventtypes'
|
|
||||||
) {
|
|
||||||
tab.value = route.query.q_tab;
|
|
||||||
} else {
|
|
||||||
await router.replace({ query: { q_tab: tab.value } });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const drawer = ref<boolean>(false);
|
const drawer = ref<boolean>(false);
|
||||||
const tab = ref<string>('create');
|
const tab = ref<string>('create');
|
||||||
|
|
||||||
|
@ -98,10 +82,6 @@ export default defineComponent({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(tab, async (val) => {
|
|
||||||
await router.replace({ query: { q_tab: val } });
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
showDrawer,
|
showDrawer,
|
||||||
tab,
|
tab,
|
||||||
|
|
|
@ -43,8 +43,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { computed, defineComponent, ref, onBeforeMount, watch } from 'vue';
|
import { computed, defineComponent, ref, onBeforeMount } from 'vue';
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
|
||||||
import { useQuasar } from 'quasar';
|
import { useQuasar } from 'quasar';
|
||||||
import AgendaView from '../components/overview/AgendaView.vue';
|
import AgendaView from '../components/overview/AgendaView.vue';
|
||||||
import ListView from '../components/overview/ListView.vue';
|
import ListView from '../components/overview/ListView.vue';
|
||||||
|
@ -56,19 +55,8 @@ export default defineComponent({
|
||||||
components: { AgendaView, ListView },
|
components: { AgendaView, ListView },
|
||||||
setup() {
|
setup() {
|
||||||
const store = useEventStore();
|
const store = useEventStore();
|
||||||
const route = useRoute();
|
onBeforeMount(() => {
|
||||||
const router = useRouter();
|
|
||||||
const tab = ref<string>('agendaView');
|
|
||||||
onBeforeMount(async () => {
|
|
||||||
void store.getJobTypes();
|
void store.getJobTypes();
|
||||||
if (
|
|
||||||
Object.keys(route.query).includes('q_tab') &&
|
|
||||||
(route.query.q_tab === 'listView' || route.query.q_tab === 'agendaView')
|
|
||||||
) {
|
|
||||||
tab.value = route.query.q_tab as string;
|
|
||||||
} else {
|
|
||||||
await router.replace({ query: { ...route.query, q_tab: tab.value } });
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
const quasar = useQuasar();
|
const quasar = useQuasar();
|
||||||
|
|
||||||
|
@ -86,10 +74,7 @@ export default defineComponent({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(tab, async (val) => {
|
const tab = ref<string>('agendaView');
|
||||||
console.log(val);
|
|
||||||
await router.replace({ query: { ...route.query, q_tab: val } });
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
showDrawer,
|
showDrawer,
|
||||||
|
|
Loading…
Reference in New Issue