jiaqingjiayi-xiaochengxu/甲情_甲意/miniprogram/node_modules/antd-mini/less/Calendar/manager.js
2024-11-10 15:01:22 +08:00

326 lines
13 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ECalendarSelectMode = void 0;
var tslib_1 = require("tslib");
var dayjs_1 = tslib_1.__importDefault(require("dayjs"));
var calendar_1 = tslib_1.__importDefault(require("./calendar"));
var ECalendarSelectMode;
(function (ECalendarSelectMode) {
ECalendarSelectMode["single"] = "single";
ECalendarSelectMode["range"] = "range";
})(ECalendarSelectMode = exports.ECalendarSelectMode || (exports.ECalendarSelectMode = {}));
var Calendar = /** @class */ (function () {
function Calendar(params) {
var min = params.min, max = params.max, _a = params.disableDates, disableDates = _a === void 0 ? [] : _a, selectionMode = params.selectionMode, customDateList = params.customDateList, defaultValue = params.defaultValue, defaultRange = params.defaultRange, showlunar = params.showlunar;
if (!min || !max) {
min = (0, dayjs_1.default)().date(1).format("YYYY-MM-DD");
max = (0, dayjs_1.default)().add(1, 'M').date(1).subtract(1, 'd').format("YYYY-MM-DD");
}
this.showlunar = showlunar;
this.calendarList = [];
this.customDateList = customDateList;
this.showToday = true;
this.selectionMode = selectionMode;
// 范围开始
this.min = min;
// 范围结束
this.max = max;
// 禁止日期列表
this.disableDates = disableDates;
this.selectEndDate = null;
this.selectStartDate = null;
this.selectDateList = [];
if (selectionMode === ECalendarSelectMode.range && (defaultRange === null || defaultRange === void 0 ? void 0 : defaultRange.length) === 2) {
this.selectStartDate = (0, dayjs_1.default)(defaultRange[0]);
this.selectEndDate = (0, dayjs_1.default)(defaultRange[1]);
this.selectDateList = this.getSelectDateList(defaultRange[0], defaultRange[1]);
}
else if (selectionMode === ECalendarSelectMode.single && defaultValue) {
this.selectStartDate = (0, dayjs_1.default)(defaultValue);
}
}
Calendar.prototype.updateStartEndDate = function (start, end) {
if (!start || !end)
return;
this.min = start;
this.max = end;
};
Calendar.prototype.updateSelectDate = function (start, end) {
this.selectStartDate = start;
this.selectEndDate = end;
this.selectDateList = this.getSelectDateList(start, end);
};
Calendar.prototype.updateDisableDates = function (dates) {
this.disableDates = dates;
};
Calendar.prototype.updateCustomDateList = function (dates) {
this.customDateList = dates;
};
Calendar.prototype.getSelectDateList = function (start, end) {
if (!start || !end) {
return [];
}
var list = this.getRangeAllDates(start, end);
return list;
};
/**
* 获取日期范围内所有日期
* @param {Object} begin
* @param {Object} end
*/
Calendar.prototype.getRangeAllDates = function (begin, end) {
begin = (0, dayjs_1.default)(begin, "YYYY-MM-DD");
end = (0, dayjs_1.default)(end, "YYYY-MM-DD");
var dates = [];
while (!(0, dayjs_1.default)(begin).isAfter(end, 'dates')) {
dates.push(begin.format("YYYY-MM-DD"));
begin = begin.add(1, 'day');
}
return dates;
};
Calendar.prototype.calculateCalendarList = function () {
var _a = this, min = _a.min, max = _a.max;
var calendarList = [];
var posDateStr = (0, dayjs_1.default)(min).format('YYYY-MM-01');
while (!(0, dayjs_1.default)(posDateStr).isAfter((0, dayjs_1.default)(max), 'dates')) {
this.setDate(posDateStr);
var entry = {
monthStartDate: (0, dayjs_1.default)(posDateStr).format('YYYY-MM-01'),
monthDisplay: (0, dayjs_1.default)(posDateStr).format('YYYY年MM月'),
weeks: this._getWeekList(posDateStr).weeks,
};
calendarList.push(entry);
posDateStr = (0, dayjs_1.default)(posDateStr)
.add(1, 'month')
.format('YYYY-MM-01');
}
this.calendarList = calendarList;
};
/**
* 设置日期
* @param {Object} date
*/
Calendar.prototype.setDate = function (date) {
this._getWeekList(date);
};
Calendar.prototype.getDateInfo = function (date, days, str) {
if (days === void 0) { days = 0; }
if (str === void 0) { str = 'day'; }
if (!date) {
date = new Date();
}
if (typeof date !== 'object') {
date = date.replace(/-/g, '/');
}
var dd = new Date(date);
switch (str) {
case 'day':
dd.setDate(dd.getDate() + days); // 获取days天后的日期
break;
case 'month':
if (dd.getDate() === 31) {
dd.setDate(dd.getDate() + days);
}
else {
dd.setMonth(dd.getMonth() + days); // 获取days天后的日期
}
break;
case 'year':
dd.setFullYear(dd.getFullYear() + days); // 获取days天后的日期
break;
}
var y = dd.getFullYear();
var m = dd.getMonth() + 1 < 10 ? "0".concat(dd.getMonth() + 1) : dd.getMonth() + 1; // 获取当前月份的日期不足10补0
var d = dd.getDate() < 10 ? "0".concat(dd.getDate()) : dd.getDate(); // 获取当前几号不足10补0
return {
fullDate: "".concat(y, "-").concat(m, "-").concat(d),
year: y,
month: m,
date: d,
day: dd.getDay()
};
};
Calendar.prototype._getWeekList = function (date) {
var displayInfo = this.getDateInfo(date);
var year = displayInfo.year, month = displayInfo.month;
var firstDay = new Date(+year, +month - 1, 0).getDay();
var curMonthDays = new Date(+year, +month, 0).getDate();
var dates = {
lastMonthDays: this._getLastMonthDays(firstDay, displayInfo),
currentMonthDays: this._currentMonthDays(curMonthDays, displayInfo),
nextMonthDays: [],
weeks: []
};
var calender = [];
var surplus = (dates.lastMonthDays.length + dates.currentMonthDays.length) % 7;
if (surplus) {
surplus = 7 - surplus;
}
dates.nextMonthDays = this._getNextMonthDays(surplus, displayInfo);
calender = calender.concat(dates.lastMonthDays, dates.currentMonthDays, dates.nextMonthDays);
var weeks = [];
// 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天
for (var i = 0; i < calender.length; i++) {
if (i % 7 === 0) {
weeks[parseInt("".concat(i / 7))] = new Array(7);
}
weeks[parseInt("".concat(i / 7))][i % 7] = calender[i];
}
weeks.forEach(function (week) {
week.forEach(function (item, i) {
if (item.isRangeStart || item.isRangeEnd) {
item.showBorderRadiusLeft = true;
item.showBorderRadiusRight = true;
return;
}
if (i == 0 && item.isRangeArea) {
item.showBorderRadiusLeft = true;
}
else if (i == week.length - 1) {
item.showBorderRadiusRight = true;
}
});
});
return {
calender: calender,
weeks: weeks,
displayMonth: date
};
};
/**
* 获取上月剩余天数
*/
Calendar.prototype._getLastMonthDays = function (firstDay, full) {
var dateArr = [];
for (var i = firstDay; i > 0; i--) {
var posDate = new Date(full.year, full.month - 1, -i + 1);
var dateValue = posDate.getDate();
var dayValue = posDate.getDay();
dateArr.push({
year: full.year,
date: dateValue,
month: full.month - 1,
day: dayValue,
lunar: this.getlunar(full.year, full.month - 1, dateValue),
disable: true,
hide: true
});
}
return dateArr;
};
/**
* 计算阴历日期显示
*/
Calendar.prototype.getlunar = function (year, month, date) {
return calendar_1.default.solar2lunar(year, month, date);
};
/**
* 获取本月天数
*/
Calendar.prototype._currentMonthDays = function (daycount, full) {
var _this = this;
var _a;
var dateArr = [];
var nowFullDate = this.getDateInfo(undefined).fullDate;
var _loop_1 = function (i) {
var posDate = "".concat(full.year, "-").concat(full.month < 10 ? full.month : full.month, "-").concat(i < 10 ? '0' + i : i);
// 是否今天
var isToday = nowFullDate === posDate;
// 日期禁用
var beforeStartDate = this_1.min ? (0, dayjs_1.default)(posDate).isBefore(this_1.min, 'dates') : false;
var afterEndDate = this_1.max ? (0, dayjs_1.default)(posDate).isAfter(this_1.max, 'dates') : false;
var selectDateList = this_1.selectDateList;
var selectIndex = -1;
var checked = false;
var isRangeStart = false;
var isRangeEnd = false;
if (selectDateList && selectDateList.length > 0) {
selectIndex = selectDateList.findIndex(function (item) {
return _this.dateEqual(item, posDate);
});
}
if (selectIndex !== -1) {
checked = true;
}
if (selectDateList.length > 0) {
if (selectIndex === 0) {
isRangeStart = true;
}
if (selectIndex === selectDateList.length - 1) {
isRangeEnd = true;
}
}
else if (this_1.dateEqual(this_1.selectStartDate, posDate)) {
isRangeStart = true;
}
// 判断日期是否在禁用日期列表中
var disabled = this_1.disableDates.find(function (item) {
return _this.dateEqual(item, posDate);
});
var data = {
fullDate: posDate,
year: full.year,
day: (0, dayjs_1.default)(posDate).day(),
date: i,
month: full.month,
lunar: this_1.showlunar && this_1.getlunar(full.year, full.month, i),
disable: beforeStartDate || afterEndDate || !!disabled,
hide: false,
isToday: isToday,
isRangeArea: this_1.selectionMode === ECalendarSelectMode.range ? checked : false,
isRangeStart: isRangeStart,
isRangeEnd: isRangeEnd,
isSingleSelect: this_1.selectionMode === ECalendarSelectMode.single && isRangeStart,
showToday: false,
tag: null
};
// if (dayjs(posDate).isBefore(nowFullDate)) {
// data.disable = true
// }
if (isToday) {
data.showToday = this_1.showToday;
}
var tagItem = (_a = this_1.customDateList) === null || _a === void 0 ? void 0 : _a.find(function (item) {
return (0, dayjs_1.default)(item.date).format('YYYY-MM-DD') === posDate;
});
if (tagItem) {
data.tag = tagItem;
}
dateArr.push(data);
};
var this_1 = this;
for (var i = 1; i <= daycount; i++) {
_loop_1(i);
}
return dateArr;
};
/**
* 比较时间是否相等
*/
Calendar.prototype.dateEqual = function (before, after) {
before = (0, dayjs_1.default)(before, "YYYY-MM-DD");
after = (0, dayjs_1.default)(after, "YYYY-MM-DD");
return before.isSame(after, 'dates');
};
/**
* 获取下月天数
*/
Calendar.prototype._getNextMonthDays = function (surplus, full) {
var dateArr = [];
for (var i = 1; i < surplus + 1; i++) {
var month = Number(full.month) + 1;
var posDate = (0, dayjs_1.default)("".concat(full.year, "-").concat(month, "-").concat(i));
dateArr.push({
date: i,
day: posDate.day(),
month: month,
lunar: this.getlunar(full.year, Number(full.month) + 1, i),
disable: true,
hide: true
});
}
return dateArr;
};
return Calendar;
}());
exports.default = Calendar;