Vue进阶(幺柒叁):表单元素日期校验_vue中datetime校验

文章目录

一、前言

本文主要讲解基于element-ui datetimepicker实现日期时间,在表单校验中的校验逻辑及实现方法。

注:在表单检验时间组件时,应在检验中增加type: 'date',否则会提示检验对象错误问题。

二、Demo

vue部分

<!--开始/结束日期,时间-->
<template>
 <el-row style="margin-top: 13px;">
  <el-col :span="12">
    <!--开始日期,时间-->
    <el-form-item label="开始日期,时间" prop="start">
      <el-date-picker
        ref="start"
        v-model="eventFormModel.start"
        type="datetime"
        placeholder="请选择日期时间"
        align="right"
        :picker-options="pickerOptions1">
      </el-date-picker>
    </el-form-item>
  </el-col>
  <el-col :span="12">
    <!--结束日期,时间-->
    <el-form-item label="结束日期,时间" prop="end">
      <el-date-picker
        ref="end"
        v-model="eventFormModel.end"
        type="datetime"
        placeholder="请选择日期时间"
        align="right"
        :picker-options="pickerOptions2">
      </el-date-picker>
    </el-form-item>
  </el-col>
 </el-row>
</template>

js部分

import Validator from '@/utils/validate.js'
data() {
	return {
		 // 开始时间
	       pickerOptions1: {
	         shortcuts: [
	           {
	             text: '今天',
	             onClick (picker) {
	               picker.$emit('pick', new Date())
	             }
	           },
	           {
	             text: '明天',
	             onClick (picker) {
	               const date = new Date()
	               date.setTime(date.getTime() + 3600 \* 1000 \* 24)
	               picker.$emit('pick', date)
	             }
	           },
	           {
	             text: '后天',
	             onClick (picker) {
	               const date = new Date()
	               date.setTime(date.getTime() + 3600 \* 1000 \* 24 \* 2)
	               picker.$emit('pick', date)
	             }
	           },
	           {
	             text: '一周后',
	             onClick (picker) {
	               const date = new Date()
	               date.setTime(date.getTime() + 3600 \* 1000 \* 24 \* 7)
	               picker.$emit('pick', date)
	             }
	           }]
	       },
	       // 结束时间
	       pickerOptions2: {
	         shortcuts: [
	           {
	             text: '今天',
	             onClick (picker) {
	               picker.$emit('pick', new Date())
	             }
	           },
	           {
	             text: '明天',
	             onClick (picker) {
	               const date = new Date()
	               date.setTime(date.getTime() + 3600 \* 1000 \* 24)
	               picker.$emit('pick', date)
	             }
	           },
	           {
	             text: '后天',
	             onClick (picker) {
	               const date = new Date()
	               date.setTime(date.getTime() + 3600 \* 1000 \* 24 \* 2)
	               picker.$emit('pick', date)
	             }
	           },
	           {
	             text: '一周后',
	             onClick (picker) {
	               const date = new Date()
	               date.setTime(date.getTime() + 3600 \* 1000 \* 24 \* 7)
	               picker.$emit('pick', date)
	             }
	           }]
	       },
	         start: [
	           { type: 'date', required: true, message: '请选择开始日期、时间', trigger: 'blur' },
	           {validator: Validator.validateStartDate(this, 'end', 'eventFormModel'), trigger: 'blur, change'}
	         ],
	         end: [
	           { type: 'date', required: true, message: '请选择结束日期、时间', trigger: 'blur' },
	           {validator: Validator.validateEndDate(this, 'start', 'eventFormModel', this.$t('flowMonitor.message.limitDate')), trigger: 'blur, change'}
	         ]
	}
}

校验逻辑validate.js

  /\*
 \* 日期前一个输入框校验
 \*/
  validateStartDate (currentPage, otherDateName, formName) {
    return (rule, value, callback) => {
      if (currentPage.$refs[otherDateName] !== undefined && currentPage.$refs[otherDateName].value !== '' && currentPage.$refs[otherDateName].value !== undefined) {
        if (value === '' || value === undefined) {
// 有结束时间
          currentPage.validateFlag = !currentPage.validateFlag
          if (!currentPage.validateFlag) {
            currentPage.$refs[formName].validateField(otherDateName)
          }
          callback()
        } else {
          currentPage.$refs[formName].validateField(otherDateName)
          callback()
        }
      } else {
        if (value !== '' && value !== undefined) {
          currentPage.$refs[formName].validateField(otherDateName)
        } else {
          currentPage.validateFlag = !currentPage.validateFlag
          if (!currentPage.validateFlag) {
            currentPage.$refs[formName].validateField(otherDateName)


### 最后

**一个好的心态和一个坚持的心很重要**,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。



**分享一些前端面试题以及学习路线给大家**

![](https://img-blog.csdnimg.cn/img_convert/69d69c35ff7e5e1443503ed7290657cc.webp?x-oss-process=image/format,png)

### 最后

**一个好的心态和一个坚持的心很重要**,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。



**分享一些前端面试题以及学习路线给大家**

[外链图片转存中...(img-fjnIl2sR-1718562590559)]

![](https://img-blog.csdnimg.cn/img_convert/e9fd810fd76a3cfd78fa871792ac24a9.webp?x-oss-process=image/format,png)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值