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