## 废话不多说,线上效果图

问题形容:网上找了很久,都找不到elementui的DatePicker 日期选择器能够自定义某年某月的快捷选项,elementui的官网例子都是依据以后月份来做的快捷选项

1、自定义带快捷选项的12个月的办法

<template>    <div class="kingPickerIndex" style="margin: 300px;">        <el-date-picker            :default-value="kingDefaultValue"            popper-class="kingChangePickPanelPaBo"            ref="elPicker"            value-format="yyyy-MM-dd"            format="yyyy-MM-dd"            v-model="date"            align="right"            type="dates"            placeholder="抉择日期"            :picker-options="pickerOptions"        ></el-date-picker>    </div></template><script>export default {    name: 'kingPicker',    data() {        return {            date: null,            kingDefaultValue: '',            pickerOptions: {}        };    },    computed: {        monthList() {            let monthList = [];            for (var i = 1; i < 13; i++) {                monthList.push({                    label: `${i}月`,                    value: i                });            }            return monthList;        }    },    mounted() {        this.initpickerOptions();    },    methods: {        // 初始化picker抉择参数        initpickerOptions() {            let that = this;            this.pickerOptions.shortcuts = [];            // 给date选择器加上12个月的快捷方式            this.monthList.forEach((item, index) => {                this.pickerOptions.shortcuts[index] = {};                this.pickerOptions.shortcuts[index]['text'] = item.label;                this.pickerOptions.shortcuts[index]['onClick'] =(picker)=> {                    // 获取选择器中的年份,                    let curYear = that.$refs['elPicker'].picker.year;                    // 月份则是用户点击哪个月就是哪个月                    let curMonth = item.value;                    // 获取用户抉择某年某月的第一天和最初一天                    let assignMoFiAndAf = that.getAssignMoFiAndAf(curYear, curMonth);                    let curFirstDay = assignMoFiAndAf.kingFirstDay;                    let curLastDay = assignMoFiAndAf.kingLastDay;                    // 获取某年某月的所有日期                    let curDays = that.getAllDate(curFirstDay, curLastDay);                    let newcurDays = [];                    // 设置picker的默认值,解决抉择完某月的快捷方式后,从新关上picker后的显示问题                    that.kingDefaultValue = curDays[0];                    // 设置赋值给picker的工夫值,只有这样能力设置胜利(还有其余方法,请大神指教)                    if (curDays.length > 0) {                        curDays.forEach(item => {                            newcurDays.push(new Date(new Date(item).setHours(0, 0, 0, 0)));                        });                    }                    picker.$emit('pick', newcurDays);                };            });        },        // 获取指定月份的第一天和最初一天        getAssignMoFiAndAf(y, m) {            let firstDay = new Date(y, m - 1, 1);            let lastDay = new Date(y, m, 0);            let kingFirstDay = this.formatDate(firstDay, 'YYYY-MM-dd');            let kingLastDay = this.formatDate(lastDay, 'YYYY-MM-dd');            return {                kingFirstDay,                kingLastDay            };        },        // 格式化日期        formatDate(date, type) {            date = new Date(date);            let myyear = date.getFullYear();            let mymonth = date.getMonth() + 1;            let myweekday = date.getDate();            if (!!type) {                mymonth < 10 ? (mymonth = '0' + mymonth) : mymonth;                myweekday < 10 ? (myweekday = '0' + myweekday) : myweekday;                if (type == 'YYYY-MM-dd') {                    return `${myyear}-${mymonth}-${myweekday}`;                } else {                    return `${myyear}-${mymonth}-${myweekday}`;                }            } else {                return `${mymonth}月${myweekday}日`;            }        },        /*         **获取开始和完结日期两头的所有日期(包含开始和完结日期)         **start:开始日期(yyyy-mm-dd)         **end:完结日期(yyyy-mm-dd)         */        getAllDate(start, end) {            let dateArr = [];            let startArr = start.split('-');            let endArr = end.split('-');            let db = new Date();            db.setUTCFullYear(startArr[0], startArr[1] - 1, startArr[2]);            let de = new Date();            de.setUTCFullYear(endArr[0], endArr[1] - 1, endArr[2]);            let unixDb = db.getTime();            let unixDe = de.getTime();            let stamp;            const oneDay = 24 * 60 * 60 * 1000;            for (stamp = unixDb; stamp <= unixDe; ) {                dateArr.push(this.formatAllDate(new Date(parseInt(stamp))));                stamp = stamp + oneDay;            }            return dateArr;        }    }};</script><style lang="scss">// 解决picker的快捷方式为12个月的时候,前面两个月在面板下面看不到的问题.kingChangePickPanelPaBo {    .el-picker-panel__body-wrapper {        .el-picker-panel__sidebar {            padding-bottom: 50px;        }    }}</style>