业务描述:根据时间条件查询记录,但是数据分表,月类型select选择,默认是当前一个月的数据,如果日期是历史的数据查询,得选择月份类型是3个月,才能组合表查询。
在这里插入图片描述

要求:根据日期变化,设置select的选择值变化。
查了很多,都是 select的值变化后执行的操作,发现一个 设置值的方法,借鉴下,测试可以用,实现如下

直接代码

<template>
  <div class="mod-config">    
    <el-form :inline="true" :model="filters">  
    <el-form-item>
      <el-select v-model="monthType" placeholder="月份类型">
        <el-option
          v-for="item in monthTypeOptions"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        ></el-option>
      </el-select>
    </el-form-item>
    <el-form-item>
      <div class="block">       
        <el-date-picker
          v-model="time1"
          type="date"
          placeholder="选择消费日期"
          format="yyyy-MM-dd"
          value-format="yyyy-MM-dd"         
          :picker-options="this.changeDateSeletmonthType()">
          </el-date-picker>        
      </div>
    </el-form-item> 
    </el-form> 
  </div>
</template>

<script>  
  export default {
    data () {
      return {        
        time1:"",
        monthTypeOptions: [        
        {
          value: "1",
          label: "一个月"          
        },
        {
          value: "2",
          label: "三个月"          
        }
      ],
      monthType: "1", // 选取默认值在里面就可以了,比如:  select:"1"
      }      
    },  
    methods: {  
      //选择日期后,联动变化选择月份类型
      changeDateSeletmonthType(){
        if (!this.time1) {
          this.time1 = ""
          //清空处理,默认选择
          this.monthType = this.monthTypeOptions[0].value;
        }
        if(this.time1!=""){
          //console.log('this.time1 = '+ this.time1)
          var selectDate = new Date(this.time1);
          var y,m;
          y = new Date().getFullYear();
          m = new Date().getMonth();

          //console.log("y="+ y +"m="+ m)

          var nowDate = new Date();
          if(selectDate > nowDate){
            this.$message.error("选择日期不能大于当前日期");
            return false;
          }

          var startDate = new Date();
          startDate.setFullYear(y, m, 1);
          startDate.setHours(0, 0, 0);
          //console.log("startDate="+startDate)
          
          if (selectDate < startDate) {
            //console.log("this.monthType = 2")
            this.monthType = this.monthTypeOptions[1].value;          
          }else{
            this.monthType = this.monthTypeOptions[0].value;
          }        
        }
      },
    },    
  }
</script>

几个说明点:
1、默认选择:monthType: “1”, // 选取默认值在里面就可以了,比如: select:“1”。当然,默认选中好多种写法,自选。
2、日期清空:日期清空后 是null, 不是空字符,会传到后台字符“null”,处理数据带入参数,报错,也是跟踪测试,查询了好久才发现,借鉴解决

 if (!this.time1) {
       this.time1 = ""
  }

3、日期的判断
y = new Date().getFullYear()使用此方法,浏览器都能用, 结果是 2021

4、设置select的值
this.monthType = this.monthTypeOptions[1].value;
monthType 是 v-model=“monthType”
此处,不能直接写 this.monthType = 2,思路也是根据变化赋值,但是显示
在这里插入图片描述

就这个地方困扰了很久, 看到一个设置select选中的方式 this.selectOptions[1].value;
借鉴试试,达到了目的。
当前月日期
在这里插入图片描述
历史月日期
在这里插入图片描述
可能还有好的方法实现,不是专业前端,有需要就想法解决,实现就好。

Logo

Vue社区为您提供最前沿的新闻资讯和知识内容

更多推荐