Files
app/src/components/flights/form/FlightFormBasic.vue
T

102 lines
2.9 KiB
Vue

<script setup>
import {onMounted, reactive, ref, watch} from "vue";
import FormWrapper from "components/FormWrapper.vue";
import {setDefaultData} from "src/composables/form/formHandling";
import DatetimePicker from "components/inputs/DatetimePicker.vue";
import AirportLocationInput from "components/inputs/AirportLocationInput.vue";
const props = defineProps({
aircrafts: {
type: Array,
required: true
},
airports: {
type: Array,
required: true
},
flight: {
type: Object,
required: false
}
}
)
const formData = reactive({
aircraftId: 43,
takeoffAirportId: null,
landingAirportId: null,
takeoffDatetime: null,
landingDatetime: null,
landings: 1,
solo: true,
name: "",
description: ""
})
const recalculateDuration = (data) => {
const diff = data.landingDatetime - data.takeoffDatetime;
data.durationTotal = diff / 1000 / 60;
}
watch(() => [formData.takeoffDatetime, formData.landingDatetime], () => recalculateDuration(formData))
const rules = {};
const isMounted = ref(false);
// tohle je blby ohack kvuli tomu, ze DatetimeInput se renderuje jeste pred mounted a do props nedostane hodnotu
// modelu. A neumi se s tim smirit...
onMounted(() => {
if (props.flight) {
setDefaultData(formData, props.flight);
}
isMounted.value = true;
});
</script>
<template>
<FormWrapper v-model="formData" v-if="isMounted">
<div class="row">
<div class="col">
<q-select
v-model="formData.aircraftId"
option-label="callSign"
option-value="id"
emit-value
map-options
:rules="rules.aircraft"
:options="aircrafts"
label="Letadlo"
>
<template #prepend>
<q-icon name="flight" />
</template>
</q-select>
</div>
</div>
<template v-if="formData.aircraftId">
<div class="row">
<div class="col col-12 col-md-6">
<h3>Vzlet</h3>
<DatetimePicker v-model="formData.takeoffDatetime" label="Datum a čas vzletu: "/>
<AirportLocationInput v-model="formData.takeoffAirportId" :airports="airports" label="Letiště vzletu" takeoff/>
</div>
<div class="col col-12 col-md-6" v-if="!!formData.takeoffDatetime && !!formData.takeoffAirportId">
<h3>Přistání</h3>
<DatetimePicker v-model="formData.landingDatetime" label="Datum a čas přistání"/>
<AirportLocationInput v-model="formData.landingAirportId" :airports="airports" label="Letiště přistání" landing/>
</div>
</div>
<div class="row" v-if="formData.landingAirportId">
<div class="col">
<q-checkbox v-model="formData.solo" label="Solo?"/>
</div>
<div class="col">
<q-input v-model.number="formData.landings" label="Počet přistání" type="number" min="1"/>
</div>
</div>
</template>
</FormWrapper>
</template>