首页 > 其他 > 详细

改造vant日期选择

时间:2021-05-20 22:00:45      阅读:36      评论:0      收藏:0      [点我收藏+]

支持全年全月选择

<template>
  <div>
    <div @click="selectDate" class="dateText">{{ thisDate }}
    </div>

    <van-popup v-model="modelVisible" position="bottom" :style="{ height: ‘40%‘ }"
               @click-overlay="selectDate">
      <van-picker :show-toolbar="true" ref="van_picker" :columns="columns" @confirm="onConfirm" @cancel="selectDate"
                  @change="changeDate"/>
    </van-popup>
  </div>
</template>
<script>
import moment from ‘moment‘

export default {
  props: {
    wholeYear: {
      default: true,
      type: Boolean
    }
  },
  data() {
    return {
      thisDate: moment(new Date()).format(‘YYYY/MM/DD‘),
      modelVisible: false,
      columns: null,
      year: null,
      month: null,
      day: null,
      currentTime: null
    }
  },
  computed: {
    yearPickerData() {
      let minYear = moment(new Date()).format(‘YYYY‘) - 5
      let yearArr = []
      for (let i = 0; i < 10; i++) {
        yearArr.push((minYear + i).toString())
      }
      return yearArr
    },
    monthPickerData() {
      let month = Array.from({length: 12}, (v, k) => (+k + 1).toString())
      for (let i = 0; i < month.length; i++) {
        if (+month[i] < 10) {
          month[i] = ‘0‘ + month[i]
        }
      }
      if (this.wholeYear) {
        month.unshift(‘整年‘)
        return month
      } else {
        return month
      }
    },
    dayPickerData() {
      let day = Array.from({length: this.getDuration(this.month)}, (v, k) => (+k + 1).toString())
      for (let i = 0; i < day.length; i++) {
        if (+day[i] < 10) {
          day[i] = ‘0‘ + day[i]
        }
      }
      if (this.wholeYear) {
        day.unshift(‘整月‘)
        return day
      } else {
        return day
      }
    }
  },
  watch: {
    month(nv, ov) {
      // console.log(nv)
      this.init()
    }
  },
  methods: {
    init() {
      let that = this
      let year = that.yearPickerData
      let month = that.monthPickerData
      let day = that.dayPickerData
      let yearIndex, monthIndex, dayIndex
      let index = sessionStorage.getItem(‘selectArray‘) || ‘‘
      index = index.split(‘,‘)
      if (index.length !== 0) {
        yearIndex = index[0]
        monthIndex = index[1]
        dayIndex = index[2]
        that.columns = [
          {
            values: year,
            className: ‘column1‘,
            defaultIndex: +yearIndex
          },
          {
            values: month,
            className: ‘column2‘,
            defaultIndex: +monthIndex
          },
          {
            values: day,
            className: ‘column3‘,
            defaultIndex: +dayIndex
          }
        ]
        that.$nextTick(() => {
          that.$refs.van_picker.setColumnIndex([2], +dayIndex)
        })
      } else {
        yearIndex = that.yearPickerData.indexOf(moment(new Date()).format(‘YYYY‘))
        monthIndex = that.monthPickerData.indexOf(moment(new Date()).format(‘MM‘))
        dayIndex = that.dayPickerData.indexOf(moment(new Date()).format(‘DD‘))
        that.columns = [
          {
            values: year,
            className: ‘column1‘,
            defaultIndex: yearIndex
          },
          {
            values: month,
            className: ‘column2‘,
            defaultIndex: monthIndex
          },
          {
            values: day,
            className: ‘column3‘,
            defaultIndex: dayIndex
          }
        ]
        that.$nextTick(() => {
          // 获取当前的索引
          // console.log(that.$refs.van_picker.getColumnIndex([2]))
          that.$refs.van_picker.setColumnIndex([2], dayIndex)
          // this.$refs.van_picker.$children.children.defaultIndex = 20
        })
      }
    },
    // 弹出日期选择
    selectDate() {
      this.modelVisible = !this.modelVisible
    },
    // 选项改变时候的值
    changeDate(picker, value, index) {
      // console.log(`当前值:${value}, 当前索引:${index}`)
      let result = value.toString().split(‘,‘)
      // console.log(‘当前被改变的日期数组‘, result)
      this.year = result[0]
      this.month = result[1]
      this.day = result[2]

      // 取序号
      let yearIndex = this.columns[0].values.findIndex(item => {
        return item === result[0]
      })
      let monthIndex = this.columns[1].values.findIndex(item => {
        return item === result[1]
      })
      let dayIndex = this.columns[2].values.findIndex(item => {
        return item === result[2]
      })
      sessionStorage.setItem(‘selectArray‘, [yearIndex, monthIndex, dayIndex])
      this.currentTime = value.join(‘‘)
    },
    // 选取的日期
    onConfirm(values, index) {
      // console.log(‘当前选择的日期数组‘, values)
      sessionStorage.setItem(‘selectArray‘, index)
      this.selectDate()
      this.thisDate = values.join(‘/‘)
      if (this.thisDate.indexOf(‘/整年/整月‘)) {
        this.thisDate = this.thisDate.split(‘/整年/整月‘)[0]
      }
      if (this.thisDate.indexOf(‘/整月‘)) {
        this.thisDate = this.thisDate.split(‘/整月‘)[0]
      }
      this.columns[0].defaultIndex = index[0]
      this.columns[1].defaultIndex = index[1]
      this.columns[2].defaultIndex = index[2]
      // 给父组件传递选中的值
      if (values[1] !== ‘整年‘) {
        this.$emit(‘datePickerData‘, values.join(‘‘))
      } else {
        this.$emit(‘datePickerData‘, values[0])
      }
    },
    // 返回当前月份有多少天
    getDuration(date) {
      let dt = new Date(date)
      dt.setMonth(dt.getMonth() + 1)
      dt.setDate(0)
      return dt.getDate()
    }
  },
  mounted() {
    if (!moment) {
      console.log(‘找不到moment对象,请检查是否引用或者安装依赖包‘)
      return
    }
    let year = this.yearPickerData
    let yearIndex = this.yearPickerData.indexOf(this.thisDate.slice(0, 4))
    let month = this.monthPickerData
    let monthIndex = this.monthPickerData.indexOf(this.thisDate.slice(5, 7))
    let day = this.dayPickerData
    let dayIndex = this.dayPickerData.indexOf(this.thisDate.slice(8, 10))
    this.columns = [
      {
        values: year,
        className: ‘column1‘,
        defaultIndex: yearIndex
      },
      {
        values: month,
        className: ‘column2‘,
        defaultIndex: monthIndex
      },
      {
        values: day,
        className: ‘column3‘,
        defaultIndex: dayIndex
      }
    ]
  }
}
</script>
<style lang="stylus" scoped>
.dateText
  color #FF8900
  font-size 14px
</style>

页面调用

 <date-picker @datePickerData="datePickerData"></date-picker>
    datePickerData(date) {
      if (date.indexOf(‘整月‘)) {
        date = date.split(‘整月‘)[0]
      }
      console.log(date)
    }

 

改造vant日期选择

原文:https://www.cnblogs.com/ronle/p/14791128.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!