@@ -322,7 +322,8 @@ var render = function() {
322322 date : range [ 0 ] ,
323323 "selected-day" : _vm . realSelectedDay ,
324324 range : range ,
325- "hide-header" : index !== 0
325+ "hide-header" : index !== 0 ,
326+ "first-day-of-week" : _vm . realFirstDayOfWeek
326327 } ,
327328 on : { pick : _vm . pickDay }
328329 } )
@@ -654,13 +655,15 @@ component.options.__file = "packages/calendar/src/date-table.vue"
654655//
655656//
656657//
658+ //
657659
658660
659661
660662
661663
662664
663665var validTypes = [ 'prev-month' , 'today' , 'next-month' ] ;
666+ var weekDays = [ 'Sunday' , 'Monday' , 'Tuesday' , 'Wednesday' , 'Thursday' , 'Friday' , 'Saturday' ] ;
664667var oneDay = 86400000 ;
665668
666669/* harmony default export */ var mainvue_type_script_lang_js_ = ( {
@@ -724,6 +727,16 @@ var oneDay = 86400000;
724727 throw new Error ( 'invalid val' ) ;
725728 }
726729 return val instanceof Date ? val : new Date ( val ) ;
730+ } ,
731+ rangeValidator : function rangeValidator ( date , isStart ) {
732+ var firstDayOfWeek = this . realFirstDayOfWeek ;
733+ var expected = isStart ? firstDayOfWeek : firstDayOfWeek === 0 ? 6 : firstDayOfWeek - 1 ;
734+ var message = ( isStart ? 'start' : 'end' ) + ' of range should be ' + weekDays [ expected ] + '.' ;
735+ if ( date . getDay ( ) !== expected ) {
736+ console . warn ( '[ElementCalendar]' , message , 'Invalid range will be ignored.' ) ;
737+ return false ;
738+ }
739+ return true ;
727740 }
728741 } ,
729742
@@ -785,21 +798,9 @@ var oneDay = 86400000;
785798
786799 var range = this . range ;
787800 if ( ! range ) return [ ] ;
788- var expetedMap = {
789- 0 : {
790- value : 1 ,
791- message : 'start of range should be Monday.'
792- } ,
793- 1 : {
794- value : 0 ,
795- message : 'end of range should be Sunday.'
796- }
797- } ;
798801 range = range . reduce ( function ( prev , val , index ) {
799802 var date = _this . toDate ( val ) ;
800- if ( date . getDay ( ) !== expetedMap [ index ] . value ) {
801- console . warn ( '[ElementCalendar]' , expetedMap [ index ] . message , ' invalid range will be ignored' ) ;
802- } else {
803+ if ( _this . rangeValidator ( date , index === 0 ) ) {
803804 prev = prev . concat ( date ) ;
804805 }
805806 return prev ;
@@ -824,9 +825,20 @@ var oneDay = 86400000;
824825 console . warn ( '[ElementCalendar]start time and end time interval must not exceed two months' ) ;
825826 return [ ] ;
826827 }
828+ // 第一个月的时间范围
827829 data . push ( [ start , lastDay ] ) ;
828- var interval = startDay . getDay ( ) ;
829- interval = interval <= 1 ? Math . abs ( interval - 1 ) : 8 - interval ;
830+ // 下一月的时间范围,需要计算一下该月的第一个周起始日
831+ var firstDayOfWeek = this . realFirstDayOfWeek ;
832+ var nextMontFirstDay = startDay . getDay ( ) ;
833+ var interval = 0 ;
834+ if ( nextMontFirstDay !== firstDayOfWeek ) {
835+ if ( firstDayOfWeek === 0 ) {
836+ interval = 7 - nextMontFirstDay ;
837+ } else {
838+ interval = firstDayOfWeek - nextMontFirstDay ;
839+ interval = interval > 0 ? interval : 7 + interval ;
840+ }
841+ }
830842 startDay = this . toDate ( startDay . getTime ( ) + interval * oneDay ) ;
831843 if ( startDay . getDate ( ) < end . getDate ( ) ) {
832844 data . push ( [ startDay , end ] ) ;
0 commit comments