| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 | 'use strict';Object.defineProperty(exports, '__esModule', { value: true });var component_1 = require('../../../common/component');var utils_1 = require('../../utils');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 = 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 utils_1.compareDay(item, date) === 0;        });      };      if (isSelected(day)) {        var prevDay = utils_1.getPrevDay(day);        var nextDay = 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 = utils_1.compareDay(day, startDay);      if (!endDay) {        return compareToStart === 0 ? 'start' : '';      }      var compareToEnd = 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 (        utils_1.compareDay(day, minDate) < 0 ||        utils_1.compareDay(day, maxDate) > 0      ) {        return 'disabled';      }      if (type === 'single') {        return 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 '开始/结束';        }      }    },  },});
 |