2021-01-27 23:55:17 +00:00
|
|
|
<template>
|
|
|
|
<q-card-section class="fit row justify-start content-center items-center">
|
|
|
|
<q-card-section class="fit row justify-start content-center items-center">
|
|
|
|
<IsoDateInput
|
|
|
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
|
|
|
:value="job.start"
|
|
|
|
label="Beginn"
|
|
|
|
type="datetime"
|
|
|
|
:rules="[noValidDate, notEmpty]"
|
2021-02-01 23:48:33 +00:00
|
|
|
@input="setStart"
|
2021-01-27 23:55:17 +00:00
|
|
|
/>
|
|
|
|
<IsoDateInput
|
|
|
|
ref="bla"
|
|
|
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
|
|
|
:value="job.end"
|
|
|
|
label="Ende"
|
|
|
|
type="datetime"
|
|
|
|
:rules="[noValidDate, isAfterDate, notEmpty]"
|
2021-02-01 23:48:33 +00:00
|
|
|
@input="setEnd"
|
2021-01-27 23:55:17 +00:00
|
|
|
/>
|
|
|
|
</q-card-section>
|
2021-03-18 16:23:57 +00:00
|
|
|
<q-card-section class="row fit justify-start content-center items-center">
|
2021-01-27 23:55:17 +00:00
|
|
|
<q-select
|
2021-02-05 23:07:58 +00:00
|
|
|
:key="refreshKey"
|
2021-01-27 23:55:17 +00:00
|
|
|
filled
|
|
|
|
use-input
|
|
|
|
label="Dienstart"
|
|
|
|
input-debounce="0"
|
|
|
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
|
|
|
:value="job.type"
|
|
|
|
:options="jobtypes"
|
|
|
|
option-label="name"
|
|
|
|
option-value="name"
|
|
|
|
map-options
|
|
|
|
clearable
|
|
|
|
:rules="[notEmpty]"
|
2021-02-01 23:48:33 +00:00
|
|
|
@input="setJobType"
|
2021-01-27 23:55:17 +00:00
|
|
|
/>
|
|
|
|
<q-input
|
|
|
|
filled
|
|
|
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
|
|
|
label="Dienstanzahl"
|
|
|
|
type="number"
|
|
|
|
:value="job.required_services"
|
|
|
|
:rules="[notEmpty]"
|
2021-02-01 23:48:33 +00:00
|
|
|
@input="setRequired"
|
2021-01-27 23:55:17 +00:00
|
|
|
/>
|
|
|
|
</q-card-section>
|
|
|
|
<q-card-section class="fit row justify-start content-center items-center">
|
|
|
|
<q-input
|
|
|
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
|
|
|
label="Beschreibung"
|
|
|
|
type="textarea"
|
|
|
|
:value="job.comment"
|
|
|
|
filled
|
|
|
|
:rules="[notEmpty]"
|
2021-02-01 23:48:33 +00:00
|
|
|
@input="setComment"
|
2021-01-27 23:55:17 +00:00
|
|
|
/>
|
|
|
|
</q-card-section>
|
2021-02-01 23:48:33 +00:00
|
|
|
<q-btn label="Schicht löschen" color="negative" :disabled="jobCanDelete" @click="removeJob" />
|
2021-01-27 23:55:17 +00:00
|
|
|
</q-card-section>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script lang="ts">
|
|
|
|
import IsoDateInput from 'src/components/utils/IsoDateInput.vue';
|
2021-02-10 16:37:43 +00:00
|
|
|
import { defineComponent, computed, ref, onBeforeMount, PropType } from 'vue';
|
|
|
|
import { useScheduleStore } from '../../store';
|
2021-01-27 23:55:17 +00:00
|
|
|
import { date } from 'quasar';
|
2021-01-31 21:21:49 +00:00
|
|
|
|
2021-01-27 23:55:17 +00:00
|
|
|
export default defineComponent({
|
|
|
|
name: 'Job',
|
|
|
|
components: { IsoDateInput },
|
|
|
|
props: {
|
|
|
|
job: {
|
2021-03-18 16:23:57 +00:00
|
|
|
required: true,
|
2021-01-31 21:21:49 +00:00
|
|
|
type: Object as PropType<FG.Job>,
|
2021-01-27 23:55:17 +00:00
|
|
|
},
|
2021-01-31 21:21:49 +00:00
|
|
|
jobCanDelete: Boolean,
|
|
|
|
},
|
|
|
|
emits: {
|
|
|
|
'set-start': (d: Date) => !!d,
|
|
|
|
'remove-job': () => true,
|
|
|
|
'set-end': (d: Date) => !!d,
|
|
|
|
'set-comment': (c: string) => !!c,
|
|
|
|
'set-job-type': (jt: FG.JobType) => !!jt,
|
|
|
|
'set-required': (r: number) => isFinite(r),
|
2021-01-27 23:55:17 +00:00
|
|
|
},
|
2021-01-31 21:01:38 +00:00
|
|
|
setup(props, { emit }) {
|
2021-02-10 16:37:43 +00:00
|
|
|
const store = useScheduleStore();
|
|
|
|
|
|
|
|
onBeforeMount(() => store.getJobTypes());
|
|
|
|
|
|
|
|
const jobtypes = computed(() => store.jobTypes);
|
|
|
|
const refreshKey = ref<number>(0);
|
2021-01-31 21:01:38 +00:00
|
|
|
|
2021-01-27 23:55:17 +00:00
|
|
|
function setStart(value: Date) {
|
2021-01-31 21:21:49 +00:00
|
|
|
emit('set-start', value);
|
2021-01-27 23:55:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function setEnd(value: Date) {
|
2021-01-31 21:21:49 +00:00
|
|
|
emit('set-end', value);
|
2021-01-27 23:55:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function setComment(value: string) {
|
2021-01-31 21:21:49 +00:00
|
|
|
emit('set-comment', value);
|
2021-01-27 23:55:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function setJobType(value: FG.JobType) {
|
2021-01-31 21:21:49 +00:00
|
|
|
emit('set-job-type', value);
|
2021-01-27 23:55:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function setRequired(value: number) {
|
2021-01-31 21:21:49 +00:00
|
|
|
emit('set-required', value);
|
2021-01-27 23:55:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function removeJob() {
|
2021-01-29 13:06:25 +00:00
|
|
|
emit('remove-job');
|
2021-01-27 23:55:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function notEmpty(val: string) {
|
|
|
|
return !!val || 'Feld darf nicht leer sein!';
|
|
|
|
}
|
|
|
|
function noValidDate(val: string) {
|
|
|
|
console.log(val);
|
|
|
|
return !!date.isValid(val) || 'Datum/Zeit muss gesetzt sein!';
|
|
|
|
}
|
|
|
|
|
|
|
|
function isAfterDate(val: Date) {
|
2021-01-31 21:21:49 +00:00
|
|
|
console.log('isAfterDate', props.job.start, val);
|
|
|
|
return props.job.start < new Date(val) || 'Ende muss hinter dem Start liegen';
|
2021-01-27 23:55:17 +00:00
|
|
|
}
|
|
|
|
|
2021-02-05 23:07:58 +00:00
|
|
|
function refresh() {
|
|
|
|
refreshKey.value += 1;
|
|
|
|
}
|
|
|
|
|
2021-01-27 23:55:17 +00:00
|
|
|
return {
|
|
|
|
jobtypes,
|
|
|
|
setStart,
|
|
|
|
setEnd,
|
|
|
|
setComment,
|
|
|
|
setJobType,
|
|
|
|
setRequired,
|
|
|
|
removeJob,
|
|
|
|
notEmpty,
|
|
|
|
noValidDate,
|
2021-02-05 23:07:58 +00:00
|
|
|
isAfterDate,
|
2021-03-18 16:23:57 +00:00
|
|
|
refreshKey,
|
2021-01-27 23:55:17 +00:00
|
|
|
};
|
2021-03-18 16:23:57 +00:00
|
|
|
},
|
2021-01-27 23:55:17 +00:00
|
|
|
});
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style></style>
|