<template> <el-row :gutter="20"> <el-col :span="4"> <div class="grid-content ep-bg-purple" /> </el-col> <el-col :span="12"> <el-card style="width: 160%"> <template #header> <div class="card-header"> <span>Search Flight</span> </div> </template> <el-form ref="ruleFormRef" :model="flightForm" :rules="rules" label-width="auto" :label-position="labelPosition" :size="size" status-icon > <el-form-item label="Departure:" prop="departure"> <el-input v-model="flightForm.departure" placeholder="Please Enter Departure Airport Code" /> </el-form-item> <el-form-item label="Destination:" prop="destination"> <el-input v-model="flightForm.destination" placeholder="Please Enter Arrival Airport Code" /> </el-form-item> <el-form-item label="Date:" required> <el-col :span="11"> <el-form-item prop="date1"> <el-date-picker v-model="flightForm.date1" type="date" label="travel date" placeholder="Please Pick a Travel Date" style="width: 100%" /> </el-form-item> </el-col> <el-col class="text-center" :span="1" style="margin: 0 0.5rem" >-</el-col > <el-col :span="11"> <el-form-item prop="date2"> <el-date-picker v-model="flightForm.date2" label="return dime" placeholder="Please Pick a Return Date" style="width: 100%" /> </el-form-item> </el-col> </el-form-item> <el-form-item :inline="true"> <el-form-item label="Adults:"> <el-input-number v-model="flightForm.numAdults" :min="1" :max="10" @change="handleChange" /> </el-form-item> <el-col class="text-center" :span="1" style="margin: 0 0.5rem" ></el-col> <el-form-item label="Seniors:"> <el-input-number v-model="flightForm.numSeniors" :min="0" :max="10" @change="handleChange" /> </el-form-item> </el-form-item> <el-form-item label="Class:" prop="classOfService"> <el-select v-model="flightForm.classOfService" placeholder="please select your class" style="width: 50%" > <el-option label="First" value="FIRST" /> <el-option label="Business" value="BUSINESS" /> <el-option label="Premium Economy" value="PREMIUM_ECONOMY" /> <el-option label="Economy" value="ECONOMY" /> </el-select> </el-form-item> <el-form-item div="Button"> <el-button type="primary" @click.prevent="submitForm(ruleFormRef)" >Search</el-button > <el-button @click="resetForm(ruleFormRef)">Cancel</el-button> </el-form-item> </el-form> </el-card> </el-col> </el-row> </template> <script lang="ts" setup> import { reactive, ref } from "vue"; import type { FormInstance, FormRules } from "element-plus"; import { FlightFormModel } from "@/models/FlightFormModel"; import * as FlightTicketService from "@/services/FlightTicketService"; const size = ref("large"); const labelPosition = ref("left"); const ruleFormRef = ref<FormInstance>(); let flightForm = ref(new FlightFormModel()); // const flightForm = reactive({ // departure: '', // destination: '', // date1: '', // date2: '', // numAdults: '', // numSeniors:'', // classOfService:'', // }) const rules = reactive<FormRules>({ departure: [ { required: true, message: "Please input airport code", trigger: "blur", }, ], destination: [ { required: true, message: "Please input airport code", trigger: "change", }, ], date1: [ { type: "date", required: true, message: "Please pick a date", trigger: "change", }, ], date2: [ { type: "date", required: true, message: "Please pick a date", trigger: "change", }, ], classOfService: [ { required: true, message: "Please select a class", trigger: "change", }, ], }); const submitForm = async (formEl: FormInstance | undefined) => { if (!formEl) return; await formEl.validate((valid, fields) => { if (valid) { let result = FlightTicketService.createNewFlight(flightForm); // TODO: Check the return result // console.log("Form Data before save in DB: ",flightForm.value); FlightTicketService.createNewFlight(flightForm.value).then((data) => { console.log("Save search flight data: ", data); }); console.log("submit!"); } else { console.log("error submit!", fields); } console.log(flightForm); }); }; const resetForm = (formEl: FormInstance | undefined) => { if (!formEl) return; formEl.resetFields(); }; </script> <style> button { margin-left: 35%; } </style>