<template> <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="180px" :label-position="'right'" class="demo-ruleForm" :size="formSize" status-icon > <el-form-item label="Located City" prop="_spaceLocateCity"> <el-col :span="8"> <el-input v-model="ruleForm._spaceLocateCity" /> </el-col> </el-form-item> <el-form-item label="Zip Code" prop="_zipCode"> <el-col :span="2"> <el-input v-model="ruleForm._zipCode" placeholder="24061.." /> </el-col> </el-form-item> <el-form-item label="Space Type" prop="_spaceType"> <el-select v-model="ruleForm._spaceType" placeholder="Please select your Space Type" > <el-option label="Apartment (No Roommates)" value="apt-single" /> <el-option label="Apartment (Shared with Roommates)" value="apt-share" /> <el-option label="Townhouse (No Roommates)" value="th-single" /> <el-option label="Townhouse (Shared with Roommates)" value="th-share" /> <el-option label="Single Family House (No Roommates)" value="sfh-single" /> <el-option label="Single Family House (Shared with Roommates)" value="sfh-share" /> <el-option label="Other" value="other" /> </el-select> </el-form-item> <el-form-item label="Other Type" v-if="ruleForm._spaceType === 'other'" :required="ruleForm._spaceType === 'other'" > <el-col :span="8"> <el-input v-model="ruleForm._otherSpaceType" /> </el-col> </el-form-item> <el-form-item> <el-col :span="2"> <el-form-item label="Space Available for Offering?"></el-form-item> </el-col> <el-col :span="3"> </el-col> <el-col :span="2"> <el-form-item prop="_offering"> <el-switch v-model="ruleForm._offering" /> </el-form-item> </el-col> </el-form-item> <el-form-item></el-form-item> <el-form-item label="Time Window" v-if="ruleForm._offering" :required="ruleForm._offering" > <el-col :span="6"> <el-form-item prop="_availableTimeStart"> <el-date-picker v-model="ruleForm._availableTimeStart" type="date" label="Pick a date" placeholder="Pick a date" style="width: 100%" /> </el-form-item> </el-col> <el-col class="text-center" :span="2"> <span class="text-gray-500"> To </span> </el-col> <el-col :span="6"> <el-form-item prop="_availableTimeEnd"> <el-date-picker v-model="ruleForm._availableTimeEnd" label="Pick a time" placeholder="Pick a time" style="width: 100%" /> </el-form-item> </el-col> </el-form-item> <el-form-item label="Max Number of People" :required="ruleForm._offering" v-if="ruleForm._offering" prop="_maxNumberOfPeople" > <el-col :span="2"> <el-input v-model="ruleForm._maxNumberOfPeople" /> </el-col> </el-form-item> <el-form-item></el-form-item> <el-form-item label="Space Details:" prop="_spaceDetails"> <el-col :span="10" ><el-input v-model="ruleForm._spaceDetails" type="textarea" /></el-col> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm(ruleFormRef)" >Create</el-button > <el-button @click="resetForm(ruleFormRef)">Reset</el-button> </el-form-item> </el-form> </template> <script lang="ts" setup> import { reactive, ref } from "vue"; import type { FormInstance, FormRules } from "element-plus"; import { OfferFormModel } from "@/models/OfferFormModel"; const formSize = ref("default"); const ruleFormRef = ref<FormInstance>(); const ruleForm = reactive(new OfferFormModel()); const rules = reactive<FormRules>({ _spaceLocateCity: [ { required: true, message: "Please give your space location", trigger: "blur", }, { min: 0, max: 20, message: "Length should be 0 to 20", trigger: "blur" }, ], _zipCode: [ { required: true, message: "Please give your zip code of your space", trigger: "blur", }, ], _spaceType: [ { required: true, message: "Please select your space type", trigger: "change", }, ], }); const submitForm = async (formEl: FormInstance | undefined) => { if (!formEl) return; await formEl.validate((valid, fields) => { if (valid) { console.log("submit!"); } else { console.log("error submit!", fields); } }); }; const resetForm = (formEl: FormInstance | undefined) => { if (!formEl) return; formEl.resetFields(); }; const options = Array.from({ length: 10000 }).map((_, idx) => ({ value: `${idx + 1}`, label: `${idx + 1}`, })); </script>