2022-09-08 15:06:44 -04:00

579 lines
29 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script>
import Layout from "../../layouts/main";
import PageHeader from "../../components/page-header";
import {
required,
email,
minLength,
sameAs,
maxLength,
minValue,
maxValue,
numeric,
url,
alphaNum
} from "vuelidate/lib/validators";
/**
* Form validation component
*/
export default {
components: {
Layout,
PageHeader
},
data() {
return {
title: "Form Validation",
items: [{
text: "Forms",
href: "/"
},
{
text: "Validation",
active: true
}
],
form: {
fname: "",
lname: "",
city: "",
state: "",
zipcode: ""
},
tooltipform: {
fname: "",
lname: "",
username: "",
city: "",
state: ""
},
range: {
minlen: "",
maxlength: "",
between: "",
minval: "",
maxval: "",
rangeval: "",
expr: ""
},
typeform: {
name: "",
password: "",
confirmPassword: "",
email: "",
url: "",
digit: "",
number: "",
alphanum: "",
textarea: ""
},
submitted: false,
submitform: false,
submit: false,
typesubmit: false
};
},
validations: {
form: {
fname: {
required
},
lname: {
required
},
city: {
required
},
state: {
required
},
zipcode: {
required
}
},
tooltipform: {
fname: {
required
},
lname: {
required
},
username: {
required
},
city: {
required
},
state: {
required
}
},
range: {
minlen: {
required,
minLength: minLength(6)
},
maxlength: {
required,
maxLength: maxLength(6)
},
between: {
required,
minLength: minLength(5),
maxLength: maxLength(10)
},
minval: {
required,
minValue: minValue(6)
},
maxval: {
required,
maxValue: maxValue(6)
},
rangeval: {
required,
minValue: minValue(6),
maxValue: maxValue(100)
},
expr: {
required
}
},
typeform: {
name: {
required
},
password: {
required,
minLength: minLength(6)
},
confirmPassword: {
required,
sameAsPassword: sameAs("password")
},
email: {
required,
email
},
url: {
required,
url
},
digit: {
required,
numeric
},
number: {
required,
numeric
},
alphanum: {
required,
alphaNum
},
textarea: {
required
}
}
},
methods: {
// eslint-disable-next-line no-unused-vars
formSubmit(e) {
this.submitted = true;
// stop here if form is invalid
this.$v.$touch();
},
tooltipForm() {
this.submitform = true;
this.$v.$touch();
},
/**
* Range validation form submit
*/
// eslint-disable-next-line no-unused-vars
rangeform(e) {
this.submit = true;
// stop here if form is invalid
this.$v.$touch();
},
/**
* Validation type submit
*/
// eslint-disable-next-line no-unused-vars
typeForm(e) {
this.typesubmit = true;
// stop here if form is invalid
this.$v.$touch();
}
}
};
</script>
<template>
<Layout>
<PageHeader :title="title" :items="items" />
<div class="row">
<div class="col-lg-6">
<div class="card">
<div class="card-body">
<h4 class="card-title">Bootstrap Validation - Normal</h4>
<p class="card-title-desc">Provide valuable, actionable feedback to your users with HTML5 form validationavailable in all our supported browsers.</p>
<form class="needs-validation" @submit.prevent="formSubmit">
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="validationCustom01">First name</label>
<input id="validationCustom01" v-model="form.fname" type="text" class="form-control" placeholder="First name" value="Mark" :class="{ 'is-invalid': submitted && $v.form.fname.$error }" />
<div v-if="submitted && $v.form.fname.$error" class="invalid-feedback">
<span v-if="!$v.form.fname.required">This value is required.</span>
</div>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label for="validationCustom02">Last name</label>
<input id="validationCustom02" v-model="form.lname" type="text" class="form-control" placeholder="Last name" value="Otto" :class="{ 'is-invalid': submitted && $v.form.lname.$error }" />
<div v-if="submitted && $v.form.lname.$error" class="invalid-feedback">
<span v-if="!$v.form.lname.required">This value is required.</span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="mb-3">
<label for="validationCustom03">City</label>
<input id="validationCustom03" v-model="form.city" type="text" class="form-control" placeholder="City" :class="{ 'is-invalid': submitted && $v.form.city.$error }" />
<div v-if="submitted && $v.form.city.$error" class="invalid-feedback">
<span v-if="!$v.form.city.required">This value is required.</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-3">
<label for="validationCustom04">State</label>
<input id="validationCustom04" v-model="form.state" type="text" class="form-control" placeholder="State" :class="{ 'is-invalid': submitted && $v.form.state.$error }" />
<div v-if="submitted && $v.form.state.$error" class="invalid-feedback">
<span v-if="!$v.form.state.required">This value is required.</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-3">
<label for="validationCustom05">Zip</label>
<input id="validationCustom05" v-model="form.zipcode" type="text" class="form-control" placeholder="Zip" :class="{ 'is-invalid': submitted && $v.form.zipcode.$error }" />
<div v-if="submitted && $v.form.zipcode.$error" class="invalid-feedback">
<span v-if="!$v.form.zipcode.required">This value is required.</span>
</div>
</div>
</div>
</div>
<div class="form-check mb-3">
<input
class="form-check-input"
type="checkbox"
value=""
id="invalidCheck"
required=""
/>
<label class="form-check-label" for="invalidCheck">
Agree to terms and conditions
</label>
<div class="invalid-feedback">
You must agree before submitting.
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
</div>
</div>
<!-- end card -->
</div>
<!-- end col -->
<div class="col-lg-6">
<div class="card">
<div class="card-body">
<h4 class="card-title">Bootstrap Validation (Tooltips)</h4>
<p class="card-title-desc">
If your form layout allows it, you can swap the
<code>.{valid|invalid}-feedback</code> classes for
<code>.{valid|invalid}-tooltip</code> classes to display validation feedback in a styled tooltip.
</p>
<form class="needs-validation" @submit.prevent="tooltipForm">
<div class="row">
<div class="col-md-4">
<div class="mb-3 position-relative">
<label for="validationTooltip01">First name</label>
<input id="validationTooltip01" v-model="tooltipform.fname" type="text" class="form-control" placeholder="First name" value="Mark" :class="{ 'is-invalid': submitform && $v.tooltipform.fname.$error }" />
<div v-if="submitform && $v.tooltipform.fname.$error" class="invalid-tooltip">
<span v-if="!$v.tooltipform.fname.required">Please provide valid First name.</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-3 position-relative">
<label for="validationTooltip02">Last name</label>
<input id="validationTooltip02" v-model="tooltipform.lname" type="text" class="form-control" placeholder="Last name" value="Otto" :class="{ 'is-invalid': submitform && $v.tooltipform.lname.$error }" />
<div v-if="submitform && $v.tooltipform.lname.$error" class="invalid-tooltip">
<span v-if="!$v.tooltipform.lname.required">Please provide valid Last name.</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-3 position-relative">
<label for="validationTooltipUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<span id="validationTooltipUsernamePrepend" class="input-group-text">@</span>
</div>
<input id="validationTooltipUsername" v-model="tooltipform.username" type="text" class="form-control" placeholder="Username" aria-describedby="validationTooltipUsernamePrepend" :class="{ 'is-invalid': submitform && $v.tooltipform.username.$error }" />
<div v-if="submitform && $v.tooltipform.username.$error" class="invalid-tooltip">
<span v-if="!$v.tooltipform.username.required">Please choose a unique and valid username.</span>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3 position-relative">
<label for="validationTooltip03">City</label>
<input id="validationTooltip03" v-model="tooltipform.city" type="text" class="form-control" placeholder="City" :class="{ 'is-invalid': submitform && $v.tooltipform.city.$error }" />
<div v-if="submitform && $v.tooltipform.city.$error" class="invalid-tooltip">
<span v-if="!$v.tooltipform.city.required">Please provide a valid city.</span>
</div>
</div>
</div>
<div class="col-md-6">
<div class="mb-3 position-relative">
<label for="validationTooltip04">State</label>
<input id="validationTooltip04" v-model="tooltipform.state" type="text" class="form-control" placeholder="State" :class="{ 'is-invalid': submitform && $v.tooltipform.state.$error }" />
<div v-if="submitform && $v.tooltipform.state.$error" class="invalid-tooltip">
<span v-if="!$v.tooltipform.state.required">Please provide a valid state.</span>
</div>
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
</div>
</div>
<!-- end card -->
</div>
<!-- end col -->
</div>
<!-- end row -->
<div class="row">
<div class="col-lg-6">
<div class="card">
<div class="card-body">
<h4 class="card-title">Validation type</h4>
<p class="card-title-desc">
Parsley is a javascript form validation
library. It helps you provide your users with feedback on their form
submission before sending it to your server.
</p>
<form action="#" @submit.prevent="typeForm">
<div class="mb-3">
<label>Required</label>
<input v-model="typeform.name" type="text" class="form-control" placeholder="Type something" name="name" :class="{ 'is-invalid': typesubmit && $v.typeform.name.$error }" />
<div v-if="typesubmit && $v.typeform.name.$error" class="invalid-feedback">
<span v-if="!$v.typeform.name.required">This value is required.</span>
</div>
</div>
<div class="mb-3">
<label>Equal To</label>
<div>
<input v-model="typeform.password" type="password" name="password" class="form-control" :class="{ 'is-invalid': typesubmit && $v.typeform.password.$error }" placeholder="Password" />
<div v-if="typesubmit && $v.typeform.password.$error" class="invalid-feedback">
<span v-if="!$v.typeform.password.required">This value is required.</span>
<span v-if="!$v.typeform.password.minLength">Password must be at least 6 characters.</span>
</div>
</div>
<div class="mt-2">
<input v-model="typeform.confirmPassword" type="password" name="confirmPassword" class="form-control" :class="{ 'is-invalid': typesubmit && $v.typeform.confirmPassword.$error }" placeholder="Re-Type Password" />
<div v-if="typesubmit && $v.typeform.confirmPassword.$error" class="invalid-feedback">
<span v-if="!$v.typeform.confirmPassword.required">This value is required.</span>
<span v-else-if="!$v.typeform.confirmPassword.sameAsPassword">This value should be the same.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>E-Mail</label>
<div>
<input v-model="typeform.email" type="email" name="email" class="form-control" :class="{ 'is-invalid': typesubmit && $v.typeform.email.$error }" placeholder="Enter a valid e-mail" />
<div v-if="typesubmit && $v.typeform.email.$error" class="invalid-feedback">
<span v-if="!$v.typeform.email.required">This value is required.</span>
<span v-if="!$v.typeform.email.email">This value should be a valid email.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>URL</label>
<div>
<input v-model="typeform.url" type="url" name="url" class="form-control" placeholder="URL" :class="{ 'is-invalid': typesubmit && $v.typeform.url.$error }" />
<div v-if="typesubmit && $v.typeform.url.$error" class="invalid-feedback">
<span v-if="!$v.typeform.url.required">This value is required.</span>
<span v-if="!$v.typeform.url.url">This value should be a valid url.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>Digits</label>
<div>
<input v-model="typeform.digit" type="text" name="digit" class="form-control" :class="{ 'is-invalid': typesubmit && $v.typeform.digit.$error }" placeholder="Enter only digits" />
<div v-if="typesubmit && $v.typeform.digit.$error" class="invalid-feedback">
<span v-if="!$v.typeform.digit.required">This value is required.</span>
<span v-if="!$v.typeform.digit.numeric">This value should be digits.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>Number</label>
<div>
<input v-model="typeform.number" type="text" name="number" class="form-control" :class="{ 'is-invalid': typesubmit && $v.typeform.number.$error }" placeholder="Enter only numbers" />
<div v-if="typesubmit && $v.typeform.number.$error" class="invalid-feedback">
<span v-if="!$v.typeform.number.required">This value is required.</span>
<span v-if="!$v.typeform.number.numeric">This value should be a valid number.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>Alphanumeric</label>
<div>
<input v-model="typeform.alphanum" type="text" name="alphanum" class="form-control" :class="{ 'is-invalid': typesubmit && $v.typeform.alphanum.$error }" placeholder="Enter alphanumeric value" />
<div v-if="typesubmit && $v.typeform.alphanum.$error" class="invalid-feedback">
<span v-if="!$v.typeform.alphanum.required">This value is required.</span>
<span v-if="!$v.typeform.alphanum.alphaNum">This value should be alphanumeric.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>Textarea</label>
<div>
<textarea v-model="typeform.textarea" class="form-control" name="textarea" :class="{ 'is-invalid': typesubmit && $v.typeform.textarea.$error }" rows="5"></textarea>
<div v-if="typesubmit && $v.typeform.textarea.$error" class="invalid-feedback">
<span v-if="!$v.typeform.textarea.required">This value is required.</span>
</div>
</div>
</div>
<div class="mb-3 mb-0">
<div>
<button type="submit" class="btn btn-primary">Submit</button>
<button type="reset" class="btn btn-secondary m-l-5 ml-1">Cancel</button>
</div>
</div>
</form>
</div>
</div>
<!-- end card -->
</div>
<!-- end col-->
<div class="col-lg-6">
<div class="card">
<div class="card-body">
<h4 class="card-title">Range validation</h4>
<p class="card-title-desc">
Parsley is a javascript form validation
library. It helps you provide your users with feedback on their form
submission before sending it to your server.
</p>
<form action="#" @submit.prevent="rangeform">
<div class="mb-3">
<label>Min Length</label>
<div>
<input v-model="range.minlen" type="text" name="minlen" class="form-control" :class="{ 'is-invalid': submit && $v.range.minlen.$error }" placeholder="Min 6 chars." />
<div v-if="submit && $v.range.minlen.$error" class="invalid-feedback">
<span v-if="!$v.range.minlen.required">This value is required.</span>
<span v-if="!$v.range.minlen.minLength">This value is too short. It should have 6 characters or more.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>Max Length</label>
<div>
<input v-model="range.maxlength" type="text" class="form-control" name="maxlength" :class="{ 'is-invalid': submit && $v.range.maxlength.$error }" placeholder="Max 6 chars." />
<div v-if="submit && $v.range.maxlength.$error" class="invalid-feedback">
<span v-if="!$v.range.maxlength.required">This value is required.</span>
<span v-if="!$v.range.maxlength.maxLength">This value is too long. It should have 6 characters or fewer.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>Range Length</label>
<div>
<input v-model="range.between" type="text" class="form-control" name="between" :class="{ 'is-invalid': submit && $v.range.between.$error }" placeholder="Text between 5 - 10 chars length" />
<div v-if="submit && $v.range.between.$error" class="invalid-feedback">
<span v-if="!$v.range.between.required">This value is required.</span>
<span v-if="!$v.range.between.maxLength">This value length is invalid. It should be between 5 and 10 characters long.</span>
<span v-if="!$v.range.between.minLength">This value length is invalid. It should be between 5 and 10 characters long.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>Min Value</label>
<div>
<input v-model="range.minval" type="text" name="minval" class="form-control" :class="{ 'is-invalid': submit && $v.range.minval.$error }" placeholder="Min value is 6" />
<div v-if="submit && $v.range.minval.$error" class="invalid-feedback">
<span v-if="!$v.range.minval.required">This value is required.</span>
<span v-if="!$v.range.minval.minValue">This value should be greater than or equal to 6.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>Max Value</label>
<div>
<input v-model="range.maxval" type="text" class="form-control" name="maxval" :class="{ 'is-invalid': submit && $v.range.maxval.$error }" placeholder="Max value is 6" />
<div v-if="submit && $v.range.maxval.$error" class="invalid-feedback">
<span v-if="!$v.range.maxval.required">This value is required.</span>
<span v-if="!$v.range.maxval.maxValue">This value should be lower than or equal to 6.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>Range Value</label>
<div>
<input v-model="range.rangeval" type="text" class="form-control" name="rangeval" :class="{ 'is-invalid': submit && $v.range.rangeval.$error }" placeholder="Number between 6 - 100" />
<div v-if="submit && $v.range.rangeval.$error" class="invalid-feedback">
<span v-if="!$v.range.rangeval.required">This value is required.</span>
<span v-if="!$v.range.rangeval.minValue">This value should be between 6 and 100.</span>
<span v-if="!$v.range.rangeval.maxValue">This value should be between 6 and 100.</span>
</div>
</div>
</div>
<div class="mb-3">
<label>Regular Exp</label>
<div>
<input v-model="range.expr" type="text" class="form-control" name="expr" :class="{ 'is-invalid': submit && $v.range.expr.$error }" placeholder="Hex. Color" />
<div v-if="submit && $v.range.expr.$error" class="invalid-feedback">
<span v-if="!$v.range.expr.required">This value is required.</span>
</div>
</div>
</div>
<div class="mb-3 mb-0">
<div>
<button type="submit" class="btn btn-primary">Submit</button>
<button type="reset" class="btn btn-secondary m-l-5 ml-1">Cancel</button>
</div>
</div>
</form>
</div>
</div>
<!-- end card -->
</div>
<!-- end col -->
</div>
<!-- end row -->
</Layout>
</template>