- <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
- <el-form-item label="活动名称" prop="name">
- <el-input v-model="ruleForm.name">el-input>
- el-form-item>
- <el-form-item label="活动区域" prop="region">
- <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
- <el-option label="区域一" value="shanghai">el-option>
- <el-option label="区域二" value="beijing">el-option>
- el-select>
- el-form-item>
- <el-form-item label="活动时间" required>
- <el-col :span="11">
- <el-form-item prop="date1">
- <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1" style="width: 100%;">el-date-picker>
- el-form-item>
- el-col>
- <el-col class="line" :span="2">-el-col>
- <el-col :span="11">
- <el-form-item prop="date2">
- <el-time-picker placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;">el-time-picker>
- el-form-item>
- el-col>
- el-form-item>
- <el-form-item label="即时配送" prop="delivery">
- <el-switch v-model="ruleForm.delivery">el-switch>
- el-form-item>
- <el-form-item label="活动性质" prop="type">
- <el-checkbox-group v-model="ruleForm.type">
- <el-checkbox label="美食/餐厅线上活动" name="type">el-checkbox>
- <el-checkbox label="地推活动" name="type">el-checkbox>
- <el-checkbox label="线下主题活动" name="type">el-checkbox>
- <el-checkbox label="单纯品牌曝光" name="type">el-checkbox>
- el-checkbox-group>
- el-form-item>
- <el-form-item label="特殊资源" prop="resource">
- <el-radio-group v-model="ruleForm.resource">
- <el-radio label="线上品牌商赞助">el-radio>
- <el-radio label="线下场地免费">el-radio>
- el-radio-group>
- el-form-item>
- <el-form-item label="活动形式" prop="desc">
- <el-input type="textarea" v-model="ruleForm.desc">el-input>
- el-form-item>
- <el-form-item>
- <el-button type="primary" @click="submitForm('ruleForm')">立即创建el-button>
- <el-button @click="resetForm('ruleForm')">重置el-button>
- el-form-item>
- el-form>
- <script>
- export default {
- data() {
- return {
- ruleForm: {
- name: '',
- region: '',
- date1: '',
- date2: '',
- delivery: false,
- type: [],
- resource: '',
- desc: ''
- },
- rules: {
- name: [
- { required: true, message: '请输入活动名称', trigger: 'blur' },
- { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
- ],
- region: [
- { required: true, message: '请选择活动区域', trigger: 'change' }
- ],
- date1: [
- { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
- ],
- date2: [
- { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
- ],
- type: [
- { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
- ],
- resource: [
- { required: true, message: '请选择活动资源', trigger: 'change' }
- ],
- desc: [
- { required: true, message: '请填写活动形式', trigger: 'blur' }
- ]
- }
- };
- },
- methods: {
- submitForm(formName) {
- this.$refs[formName].validate((valid) => {
- if (valid) {
- alert('submit!');
- } else {
- console.log('error submit!!');
- return false;
- }
- });
- },
- resetForm(formName) {
- this.$refs[formName].resetFields();
- }
- }
- }
- script>

如果想配置更复杂的校验规则,可以参考如下官方案例
- <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
- <el-form-item label="密码" prop="pass">
- <el-input type="password" v-model="ruleForm.pass" autocomplete="off">el-input>
- el-form-item>
- <el-form-item label="确认密码" prop="checkPass">
- <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off">el-input>
- el-form-item>
- <el-form-item label="年龄" prop="age">
- <el-input v-model.number="ruleForm.age">el-input>
- el-form-item>
- <el-form-item>
- <el-button type="primary" @click="submitForm('ruleForm')">提交el-button>
- <el-button @click="resetForm('ruleForm')">重置el-button>
- el-form-item>
- el-form>
- <script>
- export default {
- data() {
- var checkAge = (rule, value, callback) => {
- if (!value) {
- return callback(new Error('年龄不能为空'));
- }
- setTimeout(() => {
- if (!Number.isInteger(value)) {
- callback(new Error('请输入数字值'));
- } else {
- if (value < 18) {
- callback(new Error('必须年满18岁'));
- } else {
- callback();
- }
- }
- }, 1000);
- };
- var validatePass = (rule, value, callback) => {
- if (value === '') {
- callback(new Error('请输入密码'));
- } else {
- if (this.ruleForm.checkPass !== '') {
- this.$refs.ruleForm.validateField('checkPass');
- }
- callback();
- }
- };
- var validatePass2 = (rule, value, callback) => {
- if (value === '') {
- callback(new Error('请再次输入密码'));
- } else if (value !== this.ruleForm.pass) {
- callback(new Error('两次输入密码不一致!'));
- } else {
- callback();
- }
- };
- return {
- ruleForm: {
- pass: '',
- checkPass: '',
- age: ''
- },
- rules: {
- pass: [
- { validator: validatePass, trigger: 'blur' }
- ],
- checkPass: [
- { validator: validatePass2, trigger: 'blur' }
- ],
- age: [
- { validator: checkAge, trigger: 'blur' }
- ]
- }
- };
- },
- methods: {
- submitForm(formName) {
- this.$refs[formName].validate((valid) => {
- if (valid) {
- alert('submit!');
- } else {
- console.log('error submit!!');
- return false;
- }
- });
- },
- resetForm(formName) {
- this.$refs[formName].resetFields();
- }
- }
- }
- script>
自定义校验规则也可以和普通规则混用
- <el-form-item label="用户名" prop="username"
- :rules="[
- {required: true, message: '不能为空', trigger: 'blur'},
- { validator: valid, trigger: 'blur' }
- ]">
- <el-input v-model="form.username" >el-input>
- el-form-item>
- <script>
- import { valid } from '@/utils/validateFun.js'
- export default {
- methods: {
- valid
- }
- }
- script>
- // validateFun.js
- export function valid(rule, value, callback) {
- if (!/\d+/.test(value)) {
- callback(new Error('请输入数字值'));
- }else {
- callback();
- }
- }
比较喜欢这种方式
- <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
- <el-form-item
- prop="email"
- label="邮箱"
- :rules="[
- { required: true, message: '请输入邮箱地址', trigger: 'blur' },
- { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
- ]"
- >
- <el-input v-model="dynamicValidateForm.email">el-input>
- el-form-item>
- el-form>
1、此方法相当于把el-form上的rules属性挪移到了el-form-item上,el-form上的大部分属性都可以在el-form-item上使用
2、如果绑定的form表单为嵌套对象,prop和v-model值仍要保持一致
- <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
- <el-form-item
- prop="userinfo.email"
- label="邮箱"
- :rules="[
- { required: true, message: '请输入邮箱地址', trigger: 'blur' },
- { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
- ]"
- >
- <el-input v-model="dynamicValidateForm.userinfo.email">el-input>
- el-form-item>
- el-form>
3、 rules可以配置多种校验规则,所以它的值可以是数组。校验规则,从第一个开始依次执行,前面的校验通过了,才会执行下一个校验。如果想校验正则表达式,案例如下
- <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
- <el-form-item
- prop="userinfo.email"
- label="邮箱"
- :rules="[
- { required: true, message: '请输入邮箱地址', trigger: 'blur' },
- { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] },
- { pattern: /^\d+\/\d+$/, message: '格式不正确', trigger: 'blur' }
- ]"
- >
- <el-input v-model="dynamicValidateForm.userinfo.email">el-input>
- el-form-item>
- el-form>
4、当元素为select时,trigger可以配置为['blur', 'change'],否则select选值时,校验提示错误信息不消失
