el-picker日期选择组件根据条件动态限制选择日期范围

el-picker日期选择组件根据条件动态限制选择日期范围,最近刚好有项目需求要做动态限制日期选择范围,话不多说直接看效果和代码吧!又一个地方需要注意一下:选择日期区间时需要限制到最小时间的前一天去才行,不然最小时间那一天选择不了,最开始这里我设置的是当年的一月一号,这样写的话页面上一月没有被禁用但是选择不会生效。我这里的需求是根据选择年去控制选择单月和月区间的范围。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

        <template>
    <div class="content">
        <div>
              <el-form 
                    ref="scaechDom" 
                    :rules="rules" 
                    :model="scaechDom" 
                    label-suffix=":" 
                    label-width="110px"
                    class="bgd query-form_content"
              >
                   <el-row>
                           <el-col :span="12">
                                  <el-form-item prop="querytype" label="选择类型">
                                        <el-select v-model="scaechDom.querytype" clearable placeholder="请选择类型..." @change="queryTypeChange">
                                               <el-option
                                                    v-for="item in queryTypeList"
                                                    :key="item.value"
                                                    :label="item.label"
                                                    :value="item.value"
                                               >
                                               </el-option>
                                        </el-select>
                                  </el-form-item>
                           </el-col>
                   </el-row>
                   <el-row>
                           <el-col :span="10">
                                  <el-form-item prop="yearData" label="选择年">
                                        <el-date-picker
                                           v-model="scaechDom.yearData"
                                           format="yyyy"
                                           value-format="yyyy"
                                           type="year"
                                           placeholder="选择年..."
                                           :picker-options="startYear"
                                           @change="yearChange"
                                        >
                                        </el-date-picker>
                                  </el-form-item>
                           </el-col>
                   </el-row>
                   <el-row>
                           <el-col :span="10">
                                  <el-form-item prop="monthsData" label="选择月区间">
                                        <el-date-picker
                                           v-model="scaechDom.monthsData"
                                           format="yyyy-MM"
                                           value-format="yyyy-MM"
                                           type="monthrange"
                                           range-separator="至"
                                           start-placeholde="开始月份"
                                           end-placeholde="结束月份"
                                           :picker-options="pickerMonth"
                                        >
                                        </el-date-picker>
                                  </el-form-item>
                           </el-col>
                   </el-row>
                   <el-row>
                           <el-col :span="10">
                                  <el-form-item prop="monthData" label="选择单月">
                                        <el-date-picker
                                           v-model="scaechDom.monthData"
                                           format="yyyy-MM"
                                           value-format="yyyy-MM"
                                           type="month"
                                           placeholder="选择月..."
                                           :picker-options="startmonth"
                                        >
                                        </el-date-picker>
                                  </el-form-item>
                           </el-col>
                   </el-row>
              </el-form>
        </div>
    </div>
</template>
<script>
export default {
    data(){
        return {
            queryTypeList:[
                {label:'科目余额',value:'subjectRemain'},
                {label:'债权债务',value:'claimOwing'}
            ],
            rules:{
                querytype:[
                    {required:true,message:'请选择类型',trigger:'blur'}
                ],
                yearData:[
                    {required:true,message:'请选择年时间',trigger:'blur'}
                ],
                monthData:[
                    {required:true,message:'请选择单月时间',trigger:'blur'}
                ]
            },
            scaechDom:{
                    querytype:'',
                    monthData:'',
                    monthsData:'',
                    yearData:''
            },
            startmonth:{
                disabledDate:time=>{
                     let year=new Date().getFullYear()
                     let nowDate=''
                     let myDate=new Date()
                     let myYear=myDate.getFullYear()
                     let myMonth= new Date().getMonth()+1
                     let myToday=myDate.getDate()
                     myMonth=myMonth>9?myMonth:'0'+myMonth
                     myToday=myToday>9?myToday:'0'+myToday
                     nowDate=myYear+'-'+myMonth+'-'+myToday
                     let start=year+'-'+'01'+'-'+'01'
                     let end=nowDate
                     return time.getTime()<new Date(start).getTime()||time.getTime()>new Date(end).getTime()
                }
            },
            pickerMonth:{
                disabledDate:time=>{
                     let year=new Date().getFullYear()-1
                     let nowDate=''
                     let myDate=new Date()
                     let myYear=myDate.getFullYear()
                     let myMonth= new Date().getMonth()+1
                     let myToday=myDate.getDate()
                     myMonth=myMonth>9?myMonth:'0'+myMonth
                     myToday=myToday>9?myToday:'0'+myToday
                     nowDate=myYear+'-'+myMonth+'-'+myToday
                     let start=year+'-'+'12'+'-'+'31'  
                     let end=nowDate
                     return time.getTime()<new Date(start).getTime()||time.getTime()>new Date(end).getTime()
                }
            },
            startYear:{
                disabledDate:time=>{
                    let year=new Date().getFullYear()
                    return(
                        time.getTime()>new Date(parseInt(year)-parseInt(0)+'-12-31').getTime()
                    )
                }
            },
            exportExcelList:[],
            excelName:'',
            querytypeDisabled:false,
            querytypeLoading:false
        }
    },
    methods:{
        yearChange(val){
                     let year=new Date().getFullYear()
                     let nowDate=''
                     let myDate=new Date()
                     let myYear=myDate.getFullYear()
                     let myMonth= new Date().getMonth()+1
                     let myToday=myDate.getDate()
                     myMonth=myMonth>9?myMonth:'0'+myMonth
                     myToday=myToday>9?myToday:'0'+myToday
                     nowDate=myYear+'-'+myMonth+'-'+myToday
                     if(val<year){
                             this.startmonth={
                                   disabledDate(time){
                                         let start=val+'-'+'01'+'-'+'01'
                                         let end=val+'-'+'12'+'-'+'31'
                                         return time.getTime()<new Date(start).getTime()||time.getTime()>new Date(end).getTime()
                                   }
                             }
                             this.pickerMonth={
                                   disabledDate(time){
                                         let yearVal=val-1
                                         let start=yearVal+'-'+'12'+'-'+'31' // 选择日期区间时需要限制到最小时间的前一天去才行,不然最小时间那一天选择不了,最开始这里我设置的是当年的一月一号,这样写的话页面上一月没有被禁用但是选择不会生效
                                         let end=val+'-'+'12'+'-'+'31' 
                                         return time.getTime()<new Date(start).getTime()||time.getTime()>new Date(end).getTime()
                                   }
                             }
                     }else{
                            this.startmonth={
                                   disabledDate(time){
                                         let start=val+'-'+'01'+'-'+'01'
                                         let end=nowDate
                                         return time.getTime()<new Date(start).getTime()||time.getTime()>new Date(end).getTime()
                                   }
                             }
                             this.pickerMonth={
                                   disabledDate(time){
                                         let yearVal=val-1
                                         let start=yearVal+'-'+'12'+'-'+'31'
                                         let end=nowDate
                                         return time.getTime()<new Date(start).getTime()||time.getTime()>new Date(end).getTime()
                                   }
                             }
                             this.$set(this.scaechDom,'monthData','')
                             this.$set(this.scaechDom,'monthsData','')
                     }
        },
      
    }

}
</script>
<style>
       .content{
            height: 80vh;
            margin-left:30%;
            margin-top:5% ;
       }
    
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码De搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值