yylib-quick-mobile
Version:
yylib-quick-mobile
534 lines (472 loc) • 20.3 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _Help = require('./Help');
var _Help2 = _interopRequireDefault(_Help);
require('./YYCalendarRange.less');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Calendar = function (_React$Component) {
_inherits(Calendar, _React$Component);
function Calendar(props) {
_classCallCheck(this, Calendar);
var _this = _possibleConstructorReturn(this, (Calendar.__proto__ || Object.getPrototypeOf(Calendar)).call(this, props));
_this.state = {
select_year: _Help2.default.getFullYear(props.beginDate),
select_month: _Help2.default.getMonth(props.beginDate),
select_day: 1,
click_day: null,
date_num_array: [],
current_year: _Help2.default.getFullYear(),
current_month: _Help2.default.getMonth(),
current_day: _Help2.default.getDay(),
weekDay: null };
return _this;
}
_createClass(Calendar, [{
key: 'componentDidMount',
value: function componentDidMount() {
if (this.props.endDate) {
this.setState({ endDate: this.props.endDate, beginDate: this.props.beginDate ? this.props.beginDate : new Date() });
} else if (this.props.dayCount) {
var beginSetDate = this.props.beginDate ? this.props.beginDate : new Date();
var beginDate = this.getWorkDay(beginSetDate);
this.setEndDate(beginDate);
}
}
}, {
key: 'setEndDate',
value: function setEndDate(beginDate) {
var _props = this.props,
dayCount = _props.dayCount,
onlyWorkDay = _props.onlyWorkDay;
var endDate = Date.parse(_Help2.default.pattern(beginDate, "yyyy-MM-dd"));
if (!isNaN(parseInt(dayCount))) {
dayCount = parseInt(dayCount);
var count = 0;
for (var index = 0; index < dayCount; index++) {
endDate = this.addOneDay(endDate);
if (onlyWorkDay) {
if (!this.isWeek(endDate)) {
count++;
}
} else {
count++;
}
}
if (count < dayCount) {
for (var index = 0; index < 100; index++) {
endDate = this.addOneDay(endDate);
if (onlyWorkDay) {
if (!this.isWeek(endDate)) {
count++;
}
} else {
count++;
}
if (count == dayCount) {
break;
}
}
}
this.setState({ beginDate: beginDate, endDate: endDate });
}
}
}, {
key: 'getWorkDay',
value: function getWorkDay(date) {
if (this.props.onlyWorkDay && this.isWeek(date)) {
date = this.addOneDay(date);
if (this.isWeek(date)) {
date = this.getWorkDay(date);
}
}
return date;
}
}, {
key: 'addOneDay',
value: function addOneDay(date) {
if (!(date instanceof Date)) {
date = new Date(date);
}
date.setDate(date.getDate() + 1);
return date;
}
}, {
key: '_initMonthDayNumber',
value: function _initMonthDayNumber(year) {
var _date_array = [];
for (var i = 0; i < 12; i++) {
switch (i + 1) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
_date_array.push(31);
break;
case 4:
case 6:
case 9:
case 11:
_date_array.push(30);
break;
case 2:
if (_Help2.default.isLeapYear(year)) {
_date_array.push(29);
} else {
_date_array.push(28);
}
break;
default:
break;
}
}
return _date_array;
}
}, {
key: 'componentWillMount',
value: function componentWillMount() {
var date_num_array = this._initMonthDayNumber(this.state.select_year);
var weekDay = _Help2.default.weekOfMonth(this.getFullDate(this.state.select_year, this.state.select_month + 1, 1));
this.setState({ date_num_array: date_num_array, weekDay: weekDay });
}
}, {
key: 'selectDate',
value: function selectDate(s_day) {
var _this2 = this;
var _state = this.state,
select_year = _state.select_year,
select_month = _state.select_month;
var clickDate = this.getFullDate(select_year, select_month + 1, s_day);
this.setState({
click_day: clickDate
}, function () {
_this2.props.onSelectDate && _this2.props.onSelectDate(clickDate);
});
}
}, {
key: 'previousMonth',
value: function previousMonth() {
var _this3 = this;
var _state2 = this.state,
select_year = _state2.select_year,
select_month = _state2.select_month,
select_day = _state2.select_day,
date_num_array = _state2.date_num_array,
weekDay = _state2.weekDay;
if (select_month === 0) {
select_year = select_year - 1;
select_month = 11;
date_num_array = this._initMonthDayNumber(select_year);
} else {
select_month = select_month - 1;
}
weekDay = _Help2.default.weekOfMonth(new Date(select_year, select_month, select_day));
this.setState({
select_year: select_year,
select_month: select_month,
select_day: select_day,
date_num_array: date_num_array,
weekDay: weekDay
}, function () {
_this3.props.onPreviousMonth && _this3.props.onPreviousMonth(select_year, select_month + 1);
});
}
}, {
key: 'nextMonth',
value: function nextMonth() {
var _this4 = this;
var _state3 = this.state,
select_year = _state3.select_year,
select_month = _state3.select_month,
select_day = _state3.select_day,
date_num_array = _state3.date_num_array,
weekDay = _state3.weekDay;
if (select_month === 11) {
select_year = +select_year + 1;
select_month = 0;
date_num_array = this._initMonthDayNumber(select_year);
} else {
select_month = +select_month + 1;
}
weekDay = _Help2.default.weekOfMonth(new Date(select_year, select_month, select_day));
this.setState({
select_year: select_year,
select_month: select_month,
select_day: select_day,
date_num_array: date_num_array,
weekDay: weekDay
}, function () {
_this4.props.onNextMonth && _this4.props.onNextMonth(select_year, select_month + 1);
});
}
}, {
key: 'getFullDate',
value: function getFullDate(year, month, day) {
if (month == 1) {
month = "12";
}
if ((month + "").length < 2) {
month = "0" + month;
}
if ((day + "").length < 2) {
day = "0" + day;
}
return year + "-" + month + "-" + day;
}
}, {
key: 'compartDate',
value: function compartDate(date1, date2) {
if (date1 && date2) {
if (!(date1 instanceof Date)) {
date1 = new Date(date1);
}
if (!(date2 instanceof Date)) {
date2 = new Date(date2);
}
var year1 = _Help2.default.getFullYear(date1);
var year2 = _Help2.default.getFullYear(date2);
var month1 = _Help2.default.getMonth(date1);
var month2 = _Help2.default.getMonth(date2);
var day1 = _Help2.default.getDay(date1);
var day2 = _Help2.default.getDay(date2);
var fullDate1 = this.getFullDate(year1, month1, day1);
var fullDate2 = this.getFullDate(year2, month2, day2);
return fullDate1 >= fullDate2;
}
}
}, {
key: 'isWeek',
value: function isWeek(date) {
return _Help2.default.weekOfMonth(date) == 0 || _Help2.default.weekOfMonth(date) == 6;
}
}, {
key: 'getPage',
value: function getPage() {
var _state4 = this.state,
endDate = _state4.endDate,
beginDate = _state4.beginDate,
select_year = _state4.select_year,
select_month = _state4.select_month,
select_day = _state4.select_day,
date_num_array = _state4.date_num_array,
weekDay = _state4.weekDay,
click_day = _state4.click_day;
var normal = beginDate && endDate;
console.log("开始日期:" + _Help2.default.pattern(beginDate, "yyyy-MM-dd"));
console.log("结束日期:" + _Help2.default.pattern(endDate, "yyyy-MM-dd"));
var _props2 = this.props,
weekCount = _props2.weekCount,
col_number = _props2.col_number,
tags = _props2.tags,
onlyWorkDay = _props2.onlyWorkDay;
var month_day = date_num_array[select_month];
var all_day = weekCount * col_number;
var n_day = all_day - weekDay - month_day;
var previous_month_days = void 0;
var next_month_days = void 0;
var previous_month = void 0;
var next_month = void 0;
var current_days = [];
var previous_days = [];
var next_days = [];
var total_days = [];
var startDay = 1;
if (weekCount == 5) {
select_day = 1;
}
if (select_month === 0) {
previous_month = 11;
next_month = 1;
} else {
previous_month = select_month - 1;
next_month = select_month + 1;
}
if (select_month === 11) {
next_month = 0;
}
previous_month_days = date_num_array[previous_month];
next_month_days = date_num_array[next_month];
var lastDayCount = 0;
var currentDayCount = 0;
var nextDayCount = 0;
var tempDay = weekDay == 0 ? 7 : weekDay;
lastDayCount = tempDay - select_day > 0 ? tempDay - select_day : 0;
currentDayCount = all_day - lastDayCount;
nextDayCount = all_day - lastDayCount - (month_day - select_day) > 0 ? all_day - lastDayCount - (month_day - select_day) : 0;
if (lastDayCount == 0) {
startDay = select_day - weekDay + 1;
}
for (var i = 0; i < lastDayCount; i++) {
previous_days.unshift(_react2.default.createElement(
'li',
{ className: 'item-gray', key: 'previous' + i },
_react2.default.createElement(
'a',
{ href: 'javascript:void(0)' },
previous_month_days - i
)
));
}
for (var _i = 0; _i < currentDayCount; _i++) {
if (startDay + _i > month_day) break;
var currentDate = this.getFullDate(select_year, select_month + 1, startDay + _i);
var currentText = '';
var currentClassName = '';
currentText = startDay + _i;
if (click_day && _Help2.default.equalDate(currentDate, click_day)) {
currentClassName = 'item-active';
}
if (_Help2.default.equalDate(currentDate, new Date())) {
currentClassName = 'item-current';
}
if (onlyWorkDay && this.isWeek(currentDate)) {
currentClassName = "item-gray";
}
if (normal) {
if (!this.compartDate(currentDate, beginDate) || this.compartDate(currentDate, endDate)) {
currentClassName = "item-gray";
}
}
tags && tags.length && tags.map(function (tagDate) {
if (_Help2.default.equalDate(currentDate, tagDate)) {
currentClassName += ' item-tag';
}
});
current_days.push(_react2.default.createElement(
'li',
{ className: currentClassName, key: 'current' + _i },
_react2.default.createElement(
'a',
{ href: 'javascript:;', onClick: this.selectDate.bind(this, _i + 1) },
currentText
)
));
}
for (var _i2 = 0; _i2 < nextDayCount; _i2++) {
if (_i2 + 1 > next_month_days) break;
next_days.push(_react2.default.createElement(
'li',
{ className: 'item-gray', key: 'next' + _i2 },
_react2.default.createElement(
'a',
{ href: 'javascript:;' },
_i2 + 1
)
));
}
total_days = [].concat(previous_days, current_days, next_days);
var ul_list = [];
if (total_days.length > 0) {
for (var _i3 = 0; _i3 < weekCount; _i3++) {
var li_list = [],
start_index = _i3 * col_number,
end_index = (_i3 + 1) * col_number;
for (var j = start_index; j < end_index; j++) {
li_list.push(total_days[j]);
}
ul_list.push(li_list);
}
}
var currentPage = _react2.default.createElement(
'div',
{ style: { "display": this.props.visible ? "block" : "none" }, className: 'calendar', key: select_year + "-" + select_month + "-" + select_day },
_react2.default.createElement(
'div',
{ className: 'calendar-header' },
_react2.default.createElement('i', { className: 'icon-left', onClick: this.previousMonth.bind(this) }),
_react2.default.createElement(
'span',
{ className: 'calendar-date' },
select_year,
' \u5E74 ',
select_month + 1,
' \u6708'
),
_react2.default.createElement('i', { className: 'icon-right', onClick: this.nextMonth.bind(this) })
),
_react2.default.createElement(
'div',
{ className: 'calendar-body' },
_react2.default.createElement(
'ul',
{ className: 'c-body-head' },
_react2.default.createElement(
'li',
null,
'\u4E00'
),
_react2.default.createElement(
'li',
null,
'\u4E8C'
),
_react2.default.createElement(
'li',
null,
'\u4E09'
),
_react2.default.createElement(
'li',
null,
'\u56DB'
),
_react2.default.createElement(
'li',
null,
'\u4E94'
),
_react2.default.createElement(
'li',
null,
'\u516D'
),
_react2.default.createElement(
'li',
null,
'\u65E5'
)
),
_react2.default.createElement(
'div',
{ className: 'c-body-content' },
ul_list.map(function (u, index) {
return _react2.default.createElement(
'ul',
{ key: 'ul' + index, className: 'content-row' },
u
);
})
)
)
);
return currentPage;
}
}, {
key: 'render',
value: function render() {
return this.getPage(this.state);
}
}]);
return Calendar;
}(_react2.default.Component);
Calendar.defaultProps = {
weekCount: 5,
col_number: 7,
tags: [],
beginDate: null,
endDate: null,
onlyWorkDay: false,
dayCount: 0,
visible: true
};
exports.default = Calendar;