在 Element Plus 中实现开始日期小于结束日期的验证
html
<template>
<el-form :model="form" :rules="rules" ref="formRef" label-width="100px">
<el-form-item label="开始日期" prop="startDate">
<el-date-picker
v-model="form.startDate"
type="date"
placeholder="选择开始日期"
value-format="YYYY-MM-DD"
:disabled-date="(date) => form.endDate && date > new Date(form.endDate)"
/>
</el-form-item>
<el-form-item label="结束日期" prop="endDate">
<el-date-picker
v-model="form.endDate"
type="date"
placeholder="选择结束日期"
value-format="YYYY-MM-DD"
:disabled-date="(date) => form.startDate && date < new Date(form.startDate)"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</template>
<script setup>
import { ref, reactive } from 'vue'
import { ElMessage } from 'element-plus'
const formRef = ref()
const form = reactive({
startDate: '',
endDate: ''
})
// 自定义验证规则
const validateStartDate = (rule, value, callback) => {
if (!value) {
callback(new Error('请选择开始日期'))
} else if (form.endDate && new Date(value) > new Date(form.endDate)) {
callback(new Error('开始日期不能晚于结束日期'))
} else {
callback()
}
}
const validateEndDate = (rule, value, callback) => {
if (!value) {
callback(new Error('请选择结束日期'))
} else if (form.startDate && new Date(value) < new Date(form.startDate)) {
callback(new Error('结束日期不能早于开始日期'))
} else {
callback()
}
}
const rules = {
startDate: [
{ required: true, validator: validateStartDate, trigger: 'change' }
],
endDate: [
{ required: true, validator: validateEndDate, trigger: 'change' }
]
}
const submitForm = async () => {
if (!formRef.value) return
try {
await formRef.value.validate()
ElMessage.success('验证通过!')
console.log('表单数据:', form)
// 提交逻辑
} catch (error) {
ElMessage.error('请检查表单填写是否正确')
}
}
const resetForm = () => {
if (!formRef.value) return
formRef.value.resetFields()
}
</script>
<style scoped>
.el-date-picker {
width: 100%;
}
</style>