jiaqingjiayi-xiaochengxu/甲情_甲意/miniprogram/node_modules/antd-mini/less/Calendar/manager.js

326 lines
13 KiB
JavaScript
Raw Normal View History

2024-11-10 07:01:22 +00:00
"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;