const month = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
    day = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'],
    getTime = require("../../utils/getTime");
Component({
    /**
     * 组件的属性列表
     */
    properties: {
        startDate: {
            type: String,
            value: "2022-02-08"
        },
        endDate: {
            type: String,
            value: getTime.formatTime(new Date(), '-').split(' ')[0]
        },
        getDate: {
            type: Function
        }
    },

    /**
     * 组件的初始数据
     */
    data: {
        value: [9, 3, 3]
    },
    lifetimes: {
        ready() {
            let end = this.data.endDate.split('-')[0];
            let years = [];
            //从开始到结束 渲染年数
            for (let start = this.data.startDate.split('-')[0] - 0; start <= end; start++) {
                years.push(start)
            };
            this.setData({
                years
            });
            //开始处理
            this.handleChange(this.data.startDate)
        }
    },
    /**
     * 组件的方法列表
     */
    methods: {
        /* 处理日期改变 */
        handleChange(date) {
            let arr = date.split('-'),
                start = this.data.startDate.split('-'),
                end = this.data.endDate.split('-');
            let m = arr[1] - 0;
            //选择年==开始年 删除未开始的月
            this.setData({
                months: (arr[0] == start[0]) ? month.slice(start[1] - 1) : month
            })
            if (arr[0] == start[0]) {
                //选择年==开始年&&开始年月==选择年月 删除未开始日
                this.handleDays(arr[0], m, (m == start[1] - 0) ? start[2] - 0 : 0);
            } else if (arr[0] == end[0]) {
                //选择年==结束年  删除多余月
                let ms = JSON.parse(JSON.stringify(month))
                this.setData({
                    months: ms.slice(0, end[1] - 0)
                })
                this.handleDays(arr[0], m, 0);
            } else {
                //其他年份处理日
                this.handleDays(arr[0], m, 0);
            }
        },
        /* 处理日 */
        handleDays(y, m, d) {
            let arr1 = [1, 3, 5, 7, 8, 10, 12],
                days = JSON.parse(JSON.stringify(day)),
                end = this.data.endDate.split('-');
            if (m == 2) {
                //二月份的话判断是否为闰年
                days = (y % 4 == 0) ? days.slice(0, 29) : days.slice(0, 28)
            } else {
                //其他月份判断有无31日
                (arr1.includes(m)) ? '' : days.pop();
            };
            if (y == end[0] && m == end[1]) {
                days = days.slice(0, end[2] - 0)
            }
            //如果是开始年传递过来 会裁剪掉多余的日
            this.setData({
                days: (d == 0) ? days : days.slice(d - 1)
            });
        },
        pickerChange({
            detail
        }) {
            let arr = detail.value;
            this.handleChange(`${this.data.years[arr[0]]}-${this.data.months[arr[1]]}-${this.data.days[arr[2]]}`)
            this.triggerEvent("getDate", `${this.data.years[arr[0]]}-${this.data.months[arr[1]]}-${this.data.days[arr[2]]}`);
        },
    }
})