概述
表单使用的是uview,利用u-form元素的rules属性为表单model对象设置校验,实现表单通用校验功能,避免重复开发。
效果图
表单样式根据自己的需求设置,在这里不在展示样式代码
具体实现
第一步:正则校验封装集合(这里只展示其中某一个)
// 路径 /utils/validateForm.js
// 不能为空
const noEmpty = (rule, value, callback) => {
if (value==='') {
return callback(new Error('该项不能为空'))
} else {
callback()
}
}
export default {
noEmpty: [{ required: true, validator: noEmpty, trigger: 'blur' }]
}
第二步:兼容微信小程序
// 路径 /mixins/validateForm.js
export default{
onReady() {
//如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
this.$refs.form.setRules(this.sugonFormRules)
}
}
第三步:使用场景
// html lb-picker是时间、下拉、级联选择的插件,如果有需要可以自行了解使用
<view class="sugon-form sugon-card">
<u--form ref="form" :model="sugonForm" :rules="sugonFormRules">
<u-form-item label="姓名:" prop="name">
<u--input v-model="sugonForm.name" placeholder="请输入"></u--input>
</u-form-item>
<u-form-item label="会议室" prop="meetHome">
<lb-picker :list="[]" mode="selector" :props="meetHomeProps" v-model="sugonForm.meetHome" ref="picker">
<u--input :readonly="true" v-model="sugonForm.meetHome"></u--input>
</lb-picker>
</u-form-item>
</u--form>
<view @click="handleSubmit">提交</view>
</view>
// js
/** 单校验需要引入start **/
import validate from '@/utils/validateForm.js'
import commonRules from '@/mixins/validateForm.js'
/** end **/
export default {
mixins:[commonRules,userPermission],
data() {
return {
// 表单start
sugonForm:{
name:'',
meetHome:''
},
sugonFormRules:{
name:validate.noEmpty,
meetHome:validate.noEmpty
},
}
},
methods: {
// 提交
handleSubmit(){
this.$refs.form.validate().then(res=>{
console.log(res)
}).catch(error=>{
console.log(error)
})
}
}
}