2021-02-05 23:07:58 +00:00
|
|
|
<template>
|
|
|
|
<q-card
|
2021-03-18 16:23:57 +00:00
|
|
|
class="background: radial-gradient(circle, #35a2ff 0%, #014a88 100%) justify-start content-center items-center rounded-borders border-primary shadow-5 q-mb-xs"
|
2021-02-05 23:07:58 +00:00
|
|
|
bordered
|
|
|
|
>
|
2021-02-07 19:16:21 +00:00
|
|
|
<header class="text-primary q-px-xs">
|
|
|
|
<div class="col text-weight-bolder ellipsis">
|
|
|
|
{{ event.type.name }}
|
|
|
|
</div>
|
2021-02-05 23:07:58 +00:00
|
|
|
|
2021-03-18 16:23:57 +00:00
|
|
|
<div v-if="event.description" class="col text-weight-medium" style="font-size: 10px">
|
2021-02-07 19:16:21 +00:00
|
|
|
Info
|
|
|
|
{{ event.description }}
|
|
|
|
</div>
|
|
|
|
</header>
|
2021-02-05 23:07:58 +00:00
|
|
|
|
2021-02-04 23:07:51 +00:00
|
|
|
<div v-for="(job, index) in event.jobs" :key="index">
|
2021-02-05 23:07:58 +00:00
|
|
|
<q-separator style="justify-start content-center" />
|
2021-03-19 17:33:57 +00:00
|
|
|
<div class="text-weight-medium q-px-xs">
|
|
|
|
{{ asHour(job.start) }} <template v-if="job.end">- {{ asHour(job.end) }}</template>
|
|
|
|
</div>
|
2021-02-07 19:16:21 +00:00
|
|
|
<div class="q-px-xs">
|
2021-02-05 23:07:58 +00:00
|
|
|
{{ job.type.name }}
|
|
|
|
</div>
|
2021-02-07 19:16:21 +00:00
|
|
|
<div class="col-auto q-px-xs" style="font-size: 10px">
|
2021-02-05 23:07:58 +00:00
|
|
|
{{ job.comment }}
|
|
|
|
</div>
|
|
|
|
<div>
|
|
|
|
<q-select
|
2021-02-04 23:07:51 +00:00
|
|
|
:key="refreshKey"
|
2021-02-07 19:16:21 +00:00
|
|
|
v-model="job.services"
|
2021-02-04 23:07:51 +00:00
|
|
|
filled
|
2021-03-18 16:23:57 +00:00
|
|
|
:option-label="(opt) => userDisplay(opt)"
|
2021-02-05 23:07:58 +00:00
|
|
|
multiple
|
2021-02-07 19:16:21 +00:00
|
|
|
disable
|
2021-02-05 23:07:58 +00:00
|
|
|
use-chips
|
|
|
|
stack-label
|
|
|
|
label="Dienste"
|
2021-02-07 19:16:21 +00:00
|
|
|
class="col-auto q-px-xs"
|
2021-03-18 16:23:57 +00:00
|
|
|
style="font-size: 6px"
|
2021-02-05 23:07:58 +00:00
|
|
|
counter
|
|
|
|
:max-values="job.required_services"
|
|
|
|
>
|
|
|
|
</q-select>
|
2021-02-07 19:16:21 +00:00
|
|
|
<div class="row col-12 justify-end">
|
|
|
|
<q-btn v-if="false" />
|
|
|
|
<q-btn
|
|
|
|
v-if="!isUserEnrolled(job) && !jobFull(job)"
|
2021-02-04 23:07:51 +00:00
|
|
|
:key="refreshKey"
|
2021-02-07 19:16:21 +00:00
|
|
|
flat
|
|
|
|
color="primary"
|
|
|
|
label="Eintragen"
|
|
|
|
@click="enrollForJob(job)"
|
|
|
|
/>
|
|
|
|
<q-btn
|
|
|
|
v-if="isUserEnrolled(job)"
|
2021-02-04 23:07:51 +00:00
|
|
|
:key="refreshKey"
|
2021-02-07 19:16:21 +00:00
|
|
|
flat
|
|
|
|
color="negative"
|
|
|
|
label="Austragen"
|
|
|
|
@click="signOutFromJob(job)"
|
|
|
|
/>
|
|
|
|
</div>
|
2021-02-05 23:07:58 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</q-card>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script lang="ts">
|
2021-02-07 19:16:21 +00:00
|
|
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
2021-02-04 23:07:51 +00:00
|
|
|
import { defineComponent, ref, onBeforeMount, PropType } from 'vue';
|
|
|
|
import { useRouter } from 'vue-router';
|
2021-03-19 17:33:57 +00:00
|
|
|
import { Notify } from 'quasar';
|
2021-02-10 16:37:43 +00:00
|
|
|
import { asHour } from 'src/utils/datetime';
|
|
|
|
import { useUserStore } from 'src/plugins/user/store';
|
|
|
|
import { useMainStore } from 'src/store';
|
|
|
|
import { useScheduleStore } from 'src/plugins/schedule/store';
|
2021-02-05 23:07:58 +00:00
|
|
|
|
|
|
|
export default defineComponent({
|
|
|
|
name: 'Eventslot',
|
|
|
|
components: {},
|
2021-02-04 23:07:51 +00:00
|
|
|
props: {
|
|
|
|
event: {
|
|
|
|
required: true,
|
|
|
|
type: Object as PropType<FG.Event>,
|
|
|
|
},
|
|
|
|
},
|
2021-02-05 23:07:58 +00:00
|
|
|
|
2021-02-04 23:07:51 +00:00
|
|
|
setup(props) {
|
2021-02-10 16:37:43 +00:00
|
|
|
const store = useScheduleStore();
|
|
|
|
const mainStore = useMainStore();
|
|
|
|
const userStore = useUserStore();
|
2021-02-04 23:07:51 +00:00
|
|
|
const router = useRouter();
|
2021-02-05 23:07:58 +00:00
|
|
|
const availableUsers = null;
|
2021-02-04 23:07:51 +00:00
|
|
|
const refreshKey = ref<number>(0);
|
2021-02-05 23:07:58 +00:00
|
|
|
|
2021-02-10 16:37:43 +00:00
|
|
|
onBeforeMount(async () => userStore.getUsers());
|
|
|
|
|
2021-02-07 19:16:21 +00:00
|
|
|
function refresh() {
|
2021-02-04 23:07:51 +00:00
|
|
|
router.go(0);
|
2021-02-07 19:16:21 +00:00
|
|
|
refreshKey.value += 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
function isUserEnrolled(job: FG.Job) {
|
|
|
|
return (
|
2021-02-10 16:37:43 +00:00
|
|
|
job.services.findIndex((service) => service.userid == mainStore.currentUser.userid) >= 0
|
2021-02-07 19:16:21 +00:00
|
|
|
);
|
|
|
|
}
|
2021-02-10 16:37:43 +00:00
|
|
|
|
2021-02-07 19:16:21 +00:00
|
|
|
function jobFull(job: FG.Job) {
|
|
|
|
return job.services.length >= job.required_services;
|
|
|
|
}
|
2021-02-10 16:37:43 +00:00
|
|
|
|
2021-02-07 19:16:21 +00:00
|
|
|
function userDisplay(userid: string) {
|
2021-02-10 16:37:43 +00:00
|
|
|
return userStore.users.find((user) => (user.userid = userid))?.display_name;
|
2021-02-07 19:16:21 +00:00
|
|
|
}
|
|
|
|
|
2021-02-10 16:37:43 +00:00
|
|
|
async function enrollForJob(job: FG.Job) {
|
|
|
|
const newService: FG.Service = {
|
|
|
|
userid: mainStore.currentUser.userid,
|
|
|
|
value: 1,
|
|
|
|
};
|
|
|
|
try {
|
|
|
|
await store.updateEvent(props.event.id, job.id, { user: newService });
|
|
|
|
} catch (error) {
|
|
|
|
console.warn(error);
|
|
|
|
Notify.create({
|
|
|
|
group: false,
|
|
|
|
type: 'negative',
|
|
|
|
message: 'Fehler beim Eintragen als Dienst',
|
|
|
|
timeout: 10000,
|
|
|
|
progress: true,
|
|
|
|
actions: [{ icon: 'mdi-close', color: 'white' }],
|
2021-02-07 19:16:21 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
refresh();
|
|
|
|
}
|
2021-02-10 16:37:43 +00:00
|
|
|
async function signOutFromJob(job: FG.Job) {
|
|
|
|
const newService: FG.Service = {
|
|
|
|
userid: mainStore.currentUser.userid,
|
|
|
|
value: -1,
|
|
|
|
};
|
|
|
|
try {
|
|
|
|
await store.updateEvent(props.event.id, job.id, { user: newService });
|
|
|
|
} catch (error) {
|
|
|
|
console.warn(error);
|
|
|
|
Notify.create({
|
|
|
|
group: false,
|
|
|
|
type: 'negative',
|
|
|
|
message: 'Fehler beim Austragen als Dienst',
|
|
|
|
timeout: 10000,
|
|
|
|
progress: true,
|
|
|
|
actions: [{ icon: 'mdi-close', color: 'white' }],
|
2021-02-07 19:16:21 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
refresh();
|
|
|
|
}
|
|
|
|
|
2021-02-05 23:07:58 +00:00
|
|
|
return {
|
|
|
|
refreshKey,
|
2021-02-07 19:16:21 +00:00
|
|
|
availableUsers,
|
|
|
|
enrollForJob,
|
|
|
|
isUserEnrolled,
|
|
|
|
signOutFromJob,
|
|
|
|
jobFull,
|
|
|
|
userDisplay,
|
2021-03-18 16:23:57 +00:00
|
|
|
refresh,
|
2021-02-04 23:07:51 +00:00
|
|
|
asHour,
|
2021-02-05 23:07:58 +00:00
|
|
|
};
|
2021-03-18 16:23:57 +00:00
|
|
|
},
|
2021-02-05 23:07:58 +00:00
|
|
|
});
|
|
|
|
</script>
|
|
|
|
|
2021-02-07 19:16:21 +00:00
|
|
|
<style scoped></style>
|