@cainiaofe/cn-ui-m
Version:
201 lines (200 loc) • 7.61 kB
JavaScript
import { __spreadArray } from "tslib";
import { dayjs } from "../../../utils/dayjs";
var precisionRankRecord = {
year: 0,
month: 1,
day: 2,
hour: 3,
minute: 4,
second: 5,
};
var localeMonthsShort = dayjs.monthsShort();
export function defaultRenderLabel(type, data) {
switch (type) {
case 'minute':
case 'second':
case 'hour':
return "0".concat(data.toString()).slice(-2);
default:
return data.toString();
}
}
export function defaultI18nRenderLabel(type, data) {
var renderMonth = function () {
return localeMonthsShort[data - 1];
};
switch (type) {
case 'minute':
case 'second':
case 'hour':
return "0".concat(data.toString()).slice(-2);
case 'month':
return renderMonth();
default:
return data.toString();
}
}
export function generateDatePickerColumns(selected, min, max, precision, renderLabel, filter) {
var ret = [];
var minYear = min.getFullYear();
var minMonth = min.getMonth() + 1;
var minDay = min.getDate();
var minHour = min.getHours();
var minMinute = min.getMinutes();
var minSecond = min.getSeconds();
var maxYear = max.getFullYear();
var maxMonth = max.getMonth() + 1;
var maxDay = max.getDate();
var maxHour = max.getHours();
var maxMinute = max.getMinutes();
var maxSecond = max.getSeconds();
var rank = precisionRankRecord[precision];
var selectedYear = parseInt(selected[0], 10);
var firstDayInSelectedMonth = dayjs(convertStringArrayToDate([selected[0], selected[1], '1']));
var selectedMonth = parseInt(selected[1], 10);
var selectedDay = parseInt(selected[2], 10);
var selectedHour = parseInt(selected[3], 10);
var selectedMinute = parseInt(selected[4], 10);
var isInMinYear = selectedYear === minYear;
var isInMaxYear = selectedYear === maxYear;
var isInMinMonth = isInMinYear && selectedMonth === minMonth;
var isInMaxMonth = isInMaxYear && selectedMonth === maxMonth;
var isInMinDay = isInMinMonth && selectedDay === minDay;
var isInMaxDay = isInMaxMonth && selectedDay === maxDay;
var isInMinHour = isInMinDay && selectedHour === minHour;
var isInMaxHour = isInMaxDay && selectedHour === maxHour;
var isInMinMinute = isInMinHour && selectedMinute === minMinute;
var isInMaxMinute = isInMaxHour && selectedMinute === maxMinute;
var generateColumn = function (from, to, precision2) {
var column = [];
for (var i = from; i <= to; i++) {
column.push(i);
}
var prefix = selected.slice(0, precisionRankRecord[precision2]);
var currentFilter = filter === null || filter === void 0 ? void 0 : filter[precision2];
if (currentFilter && typeof currentFilter === 'function') {
column = column.filter(function (i) {
return currentFilter(i, {
get date() {
var stringArray = __spreadArray(__spreadArray([], prefix, true), [i.toString()], false);
return convertStringArrayToDate(stringArray);
},
});
});
}
return column;
};
if (rank >= precisionRankRecord.year || precision === 'quarter') {
var lower = minYear;
var upper = maxYear;
var years = generateColumn(lower, upper, 'year');
ret.push(years.map(function (v) {
return {
label: renderLabel('year', v),
value: v.toString(),
};
}));
}
// 季度需要单独处理
if (precision === 'quarter') {
ret.push([1, 2, 3, 4].map(function (v) {
return {
label: renderLabel('quarter', "Q".concat(v)),
value: v.toString(),
};
}));
return ret;
}
if (rank >= precisionRankRecord.month) {
var lower = isInMinYear ? minMonth : 1;
var upper = isInMaxYear ? maxMonth : 12;
var months = generateColumn(lower, upper, 'month');
ret.push(months.map(function (v) {
return {
label: renderLabel('month', v),
value: v.toString(),
};
}));
}
if (rank >= precisionRankRecord.day) {
var lower = isInMinMonth ? minDay : 1;
var upper = isInMaxMonth ? maxDay : firstDayInSelectedMonth.daysInMonth();
var days = generateColumn(lower, upper, 'day');
ret.push(days.map(function (v) {
return {
label: renderLabel('day', v),
value: v.toString(),
};
}));
}
if (rank >= precisionRankRecord.hour) {
var lower = isInMinDay ? minHour : 0;
var upper = isInMaxDay ? maxHour : 23;
var hours = generateColumn(lower, upper, 'hour');
ret.push(hours.map(function (v) {
return {
label: renderLabel('hour', v),
value: v.toString(),
};
}));
}
if (rank >= precisionRankRecord.minute) {
var lower = isInMinHour ? minMinute : 0;
var upper = isInMaxHour ? maxMinute : 59;
var minutes = generateColumn(lower, upper, 'minute');
ret.push(minutes.map(function (v) {
return {
label: renderLabel('minute', v),
value: v.toString(),
};
}));
}
if (rank >= precisionRankRecord.second) {
var lower = isInMinMinute ? minSecond : 0;
var upper = isInMaxMinute ? maxSecond : 59;
var seconds = generateColumn(lower, upper, 'second');
ret.push(seconds.map(function (v) {
return {
label: renderLabel('second', v),
value: v.toString(),
};
}));
}
return ret;
}
export function convertDateToStringArray(date) {
if (!date)
return [];
return [
date.getFullYear().toString(),
(date.getMonth() + 1).toString(),
date.getDate().toString(),
date.getHours().toString(),
date.getMinutes().toString(),
date.getSeconds().toString(),
];
}
export function convertQuarterDateToStringArray(date) {
if (!date)
return [];
var quarter = Math.floor(date.getMonth() / 3) + 1;
return [date.getFullYear().toString(), quarter.toString()];
}
export function convertStringArrayToDate(value) {
var _a, _b, _c, _d, _e, _f;
var yearString = (_a = value[0]) !== null && _a !== void 0 ? _a : '1900';
var monthString = (_b = value[1]) !== null && _b !== void 0 ? _b : '1';
var dateString = (_c = value[2]) !== null && _c !== void 0 ? _c : '1';
var hourString = (_d = value[3]) !== null && _d !== void 0 ? _d : '0';
var minuteString = (_e = value[4]) !== null && _e !== void 0 ? _e : '0';
var secondString = (_f = value[5]) !== null && _f !== void 0 ? _f : '0';
return new Date(parseInt(yearString, 10), parseInt(monthString, 10) - 1, parseInt(dateString, 10), parseInt(hourString, 10), parseInt(minuteString, 10), parseInt(secondString, 10));
}
export function convertQuarterArrayToDate(value) {
var _a, _b;
var yearString = (_a = value[0]) !== null && _a !== void 0 ? _a : '1900';
var quarterString = (_b = value[1]) !== null && _b !== void 0 ? _b : '1';
var month = (parseInt(quarterString, 10) - 1) * 3; // 计算季度对应的月份
var date = new Date(parseInt(yearString, 10), month, 1); // 使用年份和月份创建 Date 对象
return date;
}