支持全年全月选择
<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) }
原文:https://www.cnblogs.com/ronle/p/14791128.html