年份范围选择器

9 篇文章 0 订阅
2 篇文章 0 订阅

实现效果

年份范围选择器实现效果

年份范围选择器组件

  由于element官方的DatePicker日期选择器的type没有yearrange

<template>
  <div class="picker-year">
    <el-form :inline="true" ref="year-range-picker" :model="formData" :rules="rules">
      <el-form-item prop="yearStart">
        <el-date-picker
          v-model="formData.yearStart"
          value-format="yyyy"
          format="yyyy 年"
          @change="onDateChange"
          :picker-options="pickerOptionsStart"
          :placeholder="startPlaceholder"
          type="year">
        </el-date-picker>
      </el-form-item>
      <span class="range-word">-</span>
      <el-form-item prop="yearEnd">
        <el-date-picker
          v-model="formData.yearEnd"
          value-format="yyyy"
          format="yyyy 年"
          @change="onDateChange"
          :picker-options="pickerOptionsEnd"
          :placeholder="endPlaceholder"
          type="year">
        </el-date-picker>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  name: "YearRangePicker",
  data() {
    return {
      formData: {
        yearStart: '',
        yearEnd: '',
      },
      rules: {
        yearStart: [
          {required: true, message: '请选择开始年份', trigger: 'change'}
        ],
        yearEnd: [
          {required: true, message: '请选择结束年份', trigger: 'change'}
        ],
      },
      pickerOptionsStart: {
        disabledDate: (date) => {
          if(this.formData.yearEnd) {
            return Date.parse(date) > new Date().setFullYear(this.formData.yearEnd) || Date.parse(date) > new Date().getTime()
          } else {
            return Date.parse(date) > new Date().getTime()
          }
          
        },
      },
      pickerOptionsEnd: {
        disabledDate: (date) => {
          return Date.parse(date) <= new Date().setFullYear(this.formData.yearStart) || Date.parse(date) > new Date().getTime()
        },
      }
    }
  },
  props: {
    value: {
      type: Array,
      default: []
    },
    startPlaceholder: {
      type: String,
      default: '开始年份'
    },
    endPlaceholder: {
      type: String,
      default: '结束年份'
    }
  },
  mounted() {
    if (this.value && this.value.length>1) {
      this.formData.yearStart = String(this.value[0]);
      this.formData.yearEnd = String(this.value[1]);
    }
  },
  methods: {
    onDateChange(value) {
      if (!value) {
        this.formData = {
          yearStart: '',
          yearEnd: ''
        }
      }
      this.$refs["year-range-picker"].validate((valid) => {
        if (valid) {
          this.$emit('change', [Number(this.formData.yearStart), Number(this.formData.yearEnd)])
          this.$emit('input', [Number(this.formData.yearStart), Number(this.formData.yearEnd)])
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    }
  },
}
</script>

<style scoped>
.picker-year {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: flex-start;
  width: 100%;
}

.range-word {
  margin-right: 10px;
}
</style>

引用

import YearRangePicker from './YearRangePicker.vue'

components: {
	YearRangePicker,
},

data() {
	return {
		yearRange: [2021, 2022],
	}
)

<year-range-picker
	v-model="yearRange"
	>
</year-range-picker>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值