vue+elementUI 时间选择器 选择时间时的顺序校验

本文介绍了如何在Vue项目中使用ElementUI时间选择器进行时间顺序校验,确保预计和实际时间的正确顺序。通过监听时间选择器的变动,实时更新后一个时间选择器的可选范围,并在顺序错误时清空后一个时间,以此实现时间的前后顺序校验。

页面如图显示:
在这里插入图片描述
要求:
时间的前后顺序 要有校验

  • 预计aa时间 早于 预计bb时间
  • 实际cc时间 早于 实际dd时间 早于 实际ff时间 早于 实际ee时间

我的想法:
选中第一个时间后,后一个时间选择器的时间选择范围会以前一个时间选择器选中的时间为开始
当修改两个时间中的前一个时间时,选中前一个选择器的时间大于后一个时间选择器选中的时间时,后一个时间选择器清空

代码:

<el-form ref="formInfo" :inline="true" :model="BudgetYearFormal" label-width="130px" :rules="ruleForm" :disabled="disabled">
	<el-form-item label="预计aa时间" prop="expectOnline">
    	<el-date-picker
        	v-model="BudgetYearFormal.expectOnline"
            placeholder="请选择预计aa时间"
            @change="timeChange">
        </el-date-picker>
    </el-form-item>
	<el-form-item label="预计bb时间" prop="expectAcceptance">
		<el-date-picker
			v-model="BudgetYearFormal.expectAcceptance"
            placeholder="请选择预计bb时间"
            :picker-options="expectAcceptanceAfter"
            @change="timeChange">
		</el-date-picker>
	</el-form-item>
	<el-form-item label="实际cc时间" prop="actualProject">
		<el-date-picker
			v-model="BudgetYearFormal.actualProject"
			placeholder="请选择实际cc时间"
            @change="timeChange">
		</el-date-picker>
	</el-form-item>
	<el-form-item label="实际dd时间" prop="actualReview">
		<el-date-picker
			v-model="BudgetYearFormal.actualReview"
			placeholder="请选择实际dd时间"
            :picker-options="actualReviewAfter"
            @change="timeChange">
		</el-date-picker>
	</el-form-item>
	<el-form-item label="实际ee时间" prop="actualOnline">
		<el-date-picker
            v-model="BudgetYearFormal.actualOnline"
            placeholder="请选择实际ee时间"
            :picker-options="actualOnlineAfter"
            @change="timeChange">
		</el-date-picker>
	</el-form-item>
	<el-form-item label="实际ff时间" prop="actualAcceptance">
		<el-date-picker
            v-model="BudgetYearFormal.actualAcceptance"
            placeholder="请选择实际ff时间"
            :picker-options="actualAcceptanceAfter"
            @change="timeChange">
		</el-date-picker>
	</el-form-item>
</el-form>

在data中给表单验证添加规则:

ruleForm: {
	expectOnline: [
    	{required: true, message: '预计aa时间不能为空'}
    ],
    expectAcceptance: [
        {required: true, message: '预计bb时间不能为空'}
    ],
    actualProject: [
        {required: true, message: '实际cc时间不能为空'}
    ],
    actualReview: [
        {required: true, message: '实际dd时间不能为空'}
    ],
    actualOnline: [
        {required: true, message: '实际ee时间不能为空'}
    ],
    actualAcceptance: [
       {required: true, message: '实际ff时间不能为空'}
     ]

时间选择器选择时间范围:

computed: {
    // bb时间
	expectAcceptanceAfter() {
    	const startTimestamp = Date.parse(this.BudgetYearFormal.expectOnline);
    	return {
			disabledDate(time) {
            	return time.getTime() <= startTimestamp;
        	}
    	};
	},
    // dd时间
	actualReviewAfter(){
        const startTimestamp = Date.parse(this.BudgetYearFormal.actualProject);
        return {
        	disabledDate(time) {
				return time.getTime() <= startTimestamp;
        }
        };
    },
      // ee时间
    actualOnlineAfter(){
        let startTimestamp = Date.parse(this.BudgetYearFormal.actualReview);
        if (isNaN(startTimestamp)){
          	startTimestamp = Date.parse(this.BudgetYearFormal.actualProject);
        }
        return {
           disabledDate(time) {
             return time.getTime() <= startTimestamp;
           }
        };
      },
      // ff时间
    actualAcceptanceAfter(){
        let startTimestamp = Date.parse(this.BudgetYearFormal.actualOnline);
        if (isNaN(startTimestamp)){
          	startTimestamp = Date.parse(this.BudgetYearFormal.actualReview);
          	if (isNaN(startTimestamp)){
            	startTimestamp = Date.parse(this.BudgetYearFormal.actualProject);
          	}
        }
        return {
          	disabledDate(time) {
            	return time.getTime() <= startTimestamp;
          	}
        };
      },
    },

当前一个时间改变且前面的时间大于后面的时间时,后一个时间清空:

// 时间选择器值发生变化时判断
timeChange(){
	if (formatDate(this.BudgetYearFormal.expectOnline) >= formatDate(this.BudgetYearFormal.expectAcceptance)) {
		this.BudgetYearFormal.expectAcceptance = '';
    }
    if (formatDate(this.BudgetYearFormal.actualProject) >= formatDate(this.BudgetYearFormal.actualReview)) {
		this.BudgetYearFormal.actualReview = '';
    }
    if (formatDate(this.BudgetYearFormal.actualReview) >= formatDate(this.BudgetYearFormal.actualOnline)) {
		this.BudgetYearFormal.actualOnline = '';
    }
    if (formatDate(this.BudgetYearFormal.actualOnline) >= formatDate(this.BudgetYearFormal.actualAcceptance)) {
		this.BudgetYearFormal.actualAcceptance = '';
    }
},

这样功能轻松就实现出来了

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值