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 '开始/结束'; | |
|                 } | |
|             } | |
|         }, | |
|     }, | |
| });
 | |
| 
 |