You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							158 lines
						
					
					
						
							5.3 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							158 lines
						
					
					
						
							5.3 KiB
						
					
					
				
								"use strict";
							 | 
						|
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						|
								var component_1 = require("../../../common/component");
							 | 
						|
								var utils_1 = require("../../utils");
							 | 
						|
								(0, component_1.VantComponent)({
							 | 
						|
								    props: {
							 | 
						|
								        date: {
							 | 
						|
								            type: null,
							 | 
						|
								            observer: 'setDays',
							 | 
						|
								        },
							 | 
						|
								        type: {
							 | 
						|
								            type: String,
							 | 
						|
								            observer: 'setDays',
							 | 
						|
								        },
							 | 
						|
								        color: String,
							 | 
						|
								        minDate: {
							 | 
						|
								            type: null,
							 | 
						|
								            observer: 'setDays',
							 | 
						|
								        },
							 | 
						|
								        maxDate: {
							 | 
						|
								            type: null,
							 | 
						|
								            observer: 'setDays',
							 | 
						|
								        },
							 | 
						|
								        showMark: Boolean,
							 | 
						|
								        rowHeight: null,
							 | 
						|
								        formatter: {
							 | 
						|
								            type: null,
							 | 
						|
								            observer: 'setDays',
							 | 
						|
								        },
							 | 
						|
								        currentDate: {
							 | 
						|
								            type: null,
							 | 
						|
								            observer: 'setDays',
							 | 
						|
								        },
							 | 
						|
								        firstDayOfWeek: {
							 | 
						|
								            type: Number,
							 | 
						|
								            observer: 'setDays',
							 | 
						|
								        },
							 | 
						|
								        allowSameDay: Boolean,
							 | 
						|
								        showSubtitle: Boolean,
							 | 
						|
								        showMonthTitle: Boolean,
							 | 
						|
								    },
							 | 
						|
								    data: {
							 | 
						|
								        visible: true,
							 | 
						|
								        days: [],
							 | 
						|
								    },
							 | 
						|
								    methods: {
							 | 
						|
								        onClick: function (event) {
							 | 
						|
								            var index = event.currentTarget.dataset.index;
							 | 
						|
								            var item = this.data.days[index];
							 | 
						|
								            if (item.type !== 'disabled') {
							 | 
						|
								                this.$emit('click', item);
							 | 
						|
								            }
							 | 
						|
								        },
							 | 
						|
								        setDays: function () {
							 | 
						|
								            var days = [];
							 | 
						|
								            var startDate = new Date(this.data.date);
							 | 
						|
								            var year = startDate.getFullYear();
							 | 
						|
								            var month = startDate.getMonth();
							 | 
						|
								            var totalDay = (0, utils_1.getMonthEndDay)(startDate.getFullYear(), startDate.getMonth() + 1);
							 | 
						|
								            for (var day = 1; day <= totalDay; day++) {
							 | 
						|
								                var date = new Date(year, month, day);
							 | 
						|
								                var type = this.getDayType(date);
							 | 
						|
								                var config = {
							 | 
						|
								                    date: date,
							 | 
						|
								                    type: type,
							 | 
						|
								                    text: day,
							 | 
						|
								                    bottomInfo: this.getBottomInfo(type),
							 | 
						|
								                };
							 | 
						|
								                if (this.data.formatter) {
							 | 
						|
								                    config = this.data.formatter(config);
							 | 
						|
								                }
							 | 
						|
								                days.push(config);
							 | 
						|
								            }
							 | 
						|
								            this.setData({ days: days });
							 | 
						|
								        },
							 | 
						|
								        getMultipleDayType: function (day) {
							 | 
						|
								            var currentDate = this.data.currentDate;
							 | 
						|
								            if (!Array.isArray(currentDate)) {
							 | 
						|
								                return '';
							 | 
						|
								            }
							 | 
						|
								            var isSelected = function (date) {
							 | 
						|
								                return currentDate.some(function (item) { return (0, utils_1.compareDay)(item, date) === 0; });
							 | 
						|
								            };
							 | 
						|
								            if (isSelected(day)) {
							 | 
						|
								                var prevDay = (0, utils_1.getPrevDay)(day);
							 | 
						|
								                var nextDay = (0, utils_1.getNextDay)(day);
							 | 
						|
								                var prevSelected = isSelected(prevDay);
							 | 
						|
								                var nextSelected = isSelected(nextDay);
							 | 
						|
								                if (prevSelected && nextSelected) {
							 | 
						|
								                    return 'multiple-middle';
							 | 
						|
								                }
							 | 
						|
								                if (prevSelected) {
							 | 
						|
								                    return 'end';
							 | 
						|
								                }
							 | 
						|
								                return nextSelected ? 'start' : 'multiple-selected';
							 | 
						|
								            }
							 | 
						|
								            return '';
							 | 
						|
								        },
							 | 
						|
								        getRangeDayType: function (day) {
							 | 
						|
								            var _a = this.data, currentDate = _a.currentDate, allowSameDay = _a.allowSameDay;
							 | 
						|
								            if (!Array.isArray(currentDate)) {
							 | 
						|
								                return '';
							 | 
						|
								            }
							 | 
						|
								            var startDay = currentDate[0], endDay = currentDate[1];
							 | 
						|
								            if (!startDay) {
							 | 
						|
								                return '';
							 | 
						|
								            }
							 | 
						|
								            var compareToStart = (0, utils_1.compareDay)(day, startDay);
							 | 
						|
								            if (!endDay) {
							 | 
						|
								                return compareToStart === 0 ? 'start' : '';
							 | 
						|
								            }
							 | 
						|
								            var compareToEnd = (0, utils_1.compareDay)(day, endDay);
							 | 
						|
								            if (compareToStart === 0 && compareToEnd === 0 && allowSameDay) {
							 | 
						|
								                return 'start-end';
							 | 
						|
								            }
							 | 
						|
								            if (compareToStart === 0) {
							 | 
						|
								                return 'start';
							 | 
						|
								            }
							 | 
						|
								            if (compareToEnd === 0) {
							 | 
						|
								                return 'end';
							 | 
						|
								            }
							 | 
						|
								            if (compareToStart > 0 && compareToEnd < 0) {
							 | 
						|
								                return 'middle';
							 | 
						|
								            }
							 | 
						|
								            return '';
							 | 
						|
								        },
							 | 
						|
								        getDayType: function (day) {
							 | 
						|
								            var _a = this.data, type = _a.type, minDate = _a.minDate, maxDate = _a.maxDate, currentDate = _a.currentDate;
							 | 
						|
								            if ((0, utils_1.compareDay)(day, minDate) < 0 || (0, utils_1.compareDay)(day, maxDate) > 0) {
							 | 
						|
								                return 'disabled';
							 | 
						|
								            }
							 | 
						|
								            if (type === 'single') {
							 | 
						|
								                return (0, utils_1.compareDay)(day, currentDate) === 0 ? 'selected' : '';
							 | 
						|
								            }
							 | 
						|
								            if (type === 'multiple') {
							 | 
						|
								                return this.getMultipleDayType(day);
							 | 
						|
								            }
							 | 
						|
								            /* istanbul ignore else */
							 | 
						|
								            if (type === 'range') {
							 | 
						|
								                return this.getRangeDayType(day);
							 | 
						|
								            }
							 | 
						|
								            return '';
							 | 
						|
								        },
							 | 
						|
								        getBottomInfo: function (type) {
							 | 
						|
								            if (this.data.type === 'range') {
							 | 
						|
								                if (type === 'start') {
							 | 
						|
								                    return '开始';
							 | 
						|
								                }
							 | 
						|
								                if (type === 'end') {
							 | 
						|
								                    return '结束';
							 | 
						|
								                }
							 | 
						|
								                if (type === 'start-end') {
							 | 
						|
								                    return '开始/结束';
							 | 
						|
								                }
							 | 
						|
								            }
							 | 
						|
								        },
							 | 
						|
								    },
							 | 
						|
								});
							 | 
						|
								
							 |