<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: 100%"> <template #header> <div class="card-header"> <span>Your Offer Information</span> </div> </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="5"> <el-input v-model="ruleForm.zipCode" placeholder="24061.." /> </el-col> </el-form-item> <el-col :span="24"> <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-col> <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 label="Space Available for Offering?"> <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="7"> <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="7"> <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="4"> <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="16" ><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> </el-card> </el-col> <el-col :span="4"> <el-card style="width: 100%" ><template #header> <div class="card-header"> <span>Match Request</span> </div> </template> </el-card></el-col > <el-col :span="4"></el-col> </el-row> </template> <script lang="ts" setup> import { reactive, ref } from "vue"; import type { FormInstance, FormRules } from "element-plus"; import { OfferFormModel } from "@/models/OfferFormModel"; import * as OfferPageService from "@/services/OfferPageService"; // Form verification relate field const formSize = ref("default"); const ruleFormRef = ref<FormInstance>(); 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", }, ], }); // TODO: uncomment it when API connection ready const userId = -1; //const ruleForm = reactive(OfferPageService.getUserOfferInfoFromServer(-1)); const ruleForm = reactive(new OfferFormModel()); const submitForm = async (formEl: FormInstance | undefined) => { if (!formEl) return; await formEl.validate((valid, fields) => { if (valid) { let result = OfferPageService.createNewUserOffer(userId, ruleForm); // TODO: Check the return result console.log("submit!"); } else { console.log("error submit!", fields); } console.log(ruleForm); }); }; const updateFrom = async (formEl: FormInstance | undefined) => { if (!formEl) return; await formEl.validate((valid, fields) => { if (valid) { let result = OfferPageService.updateOffer(userId, ruleForm); // TODO: Check the return result console.log("update submit!"); } else { console.log("error submit!", fields); } console.log(ruleForm); }); }; const deleteFrom = () => { // TODO: Check the return result let result = OfferPageService.deleteOffer(userId, ruleForm.offerId); console.log("Record deleted"); }; 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>