参考文档:https://www.jianshu.com/p/aeb77cb3e9aa
项目中有个场景,同一页面的不同Form中的两个日期函数需要进行校验,因为是不同的字段校验,所以校验函数需要传入不同的字段。下面是解决方法:
校验函数
export function startDateValidator(rule, value, callback, endDate) {
if (!value) {
callback(new Error('起始日期不能为空!'))
} else {
// 如果结束日期没选,cb
if (!endDate) {
callback()
} else {
// 结束日期有,进行判断
const flag = new Date(endDate).getTime() >= new Date(value).getTime()
if (flag) {
// 如果起始在结束之前
callback()
} else {
callback(new Error('起始日期不能在结束日期之后!'))
}
}
}
}
export function endDateValidator(rule, value, callback, startDate) {
if (!value) {
callback(new Error('结束日期不能为空!'))
} else {
if (!startDate) {
callback()
} else {
// 起始日期有
const flag = new Date(value).getTime() >= new Date(startDate).getTime()
if (flag) {
callback()
} else {
callback(new Error('结束日期不能在起始日期之前!'))
}
}
}
}
rules中:
form1
startDate: [{ required: true, validator: (rule, value, callback) => {
startDateValidator(rule, value, callback, this.form1.endDate)
}, trigger: ['blur', 'change'] }],
endDate: [{ required: true, validator: (rule, value, callback) => {
endDateValidator(rule, value, callback, this.form1.startDate)
}, trigger: ['blur', 'change'] }]
form2
startDate: [{ required: true, validator: (rule, value, callback) => {
startDateValidator(rule, value, callback, this.form2.endDate)
}, trigger: ['blur', 'change'] }],
endDate: [{ required: true, validator: (rule, value, callback) => {
endDateValidator(rule, value, callback, this.form2.startDate)
}, trigger: ['blur', 'change'] }]