UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

241 lines (240 loc) 9.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { calculateDateBoundary: function() { return calculateDateBoundary; }, formatPickerOption: function() { return formatPickerOption; }, formatValue: function() { return formatValue; }, generateDatePickerRanges: function() { return generateDatePickerRanges; }, generatePickerColumnWithCallback: function() { return generatePickerColumnWithCallback; }, getDatePartValue: function() { return getDatePartValue; }, getLastDayOfMonth: function() { return getLastDayOfMonth; }, handlePickerValueChange: function() { return handlePickerValueChange; } }); var _define_property = require("@swc/helpers/_/_define_property"); var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array"); var _padzero = require("../../utils/pad-zero"); var _isdate = require("../../utils/is-date"); function getLastDayOfMonth(year, month) { return new Date(year, month, 0).getDate(); } var calculateDateBoundary = function calculateDateBoundary(type, value, startDate, endDate) { var boundary = type === 'min' ? startDate : endDate; var year = boundary.getFullYear(); var isMax = type === 'max'; var month = isMax ? 12 : 1; var date = isMax ? getLastDayOfMonth(value.getFullYear(), value.getMonth() + 1) : 1; var hour = isMax ? 23 : 0; var minute = isMax ? 59 : 0; if (value.getFullYear() === year) { month = boundary.getMonth() + 1; if (value.getMonth() + 1 === month) { date = boundary.getDate(); if (value.getDate() === date) { hour = boundary.getHours(); if (value.getHours() === hour) { minute = boundary.getMinutes(); } } } } var _obj; // 返回边界值的对象 return _obj = {}, (0, _define_property._)(_obj, "".concat(type, "Year"), year), (0, _define_property._)(_obj, "".concat(type, "Month"), month), (0, _define_property._)(_obj, "".concat(type, "Date"), date), (0, _define_property._)(_obj, "".concat(type, "Hour"), hour), (0, _define_property._)(_obj, "".concat(type, "Minute"), minute), (0, _define_property._)(_obj, "".concat(type, "Seconds"), minute), _obj; }; var generateDatePickerRanges = function generateDatePickerRanges(type, selectedDate, startDate, endDate) { var selected = new Date(selectedDate); if (!selected) return []; // 获取最大和最小边界值 var _calculateDateBoundary = calculateDateBoundary('max', selected, startDate, endDate), maxYear = _calculateDateBoundary.maxYear, maxDate = _calculateDateBoundary.maxDate, maxMonth = _calculateDateBoundary.maxMonth, maxHour = _calculateDateBoundary.maxHour, maxMinute = _calculateDateBoundary.maxMinute, maxSeconds = _calculateDateBoundary.maxSeconds; var _calculateDateBoundary1 = calculateDateBoundary('min', selected, startDate, endDate), minYear = _calculateDateBoundary1.minYear, minDate = _calculateDateBoundary1.minDate, minMonth = _calculateDateBoundary1.minMonth, minHour = _calculateDateBoundary1.minHour, minMinute = _calculateDateBoundary1.minMinute, minSeconds = _calculateDateBoundary1.minSeconds; var fullRanges = [ { type: 'year', range: [ minYear, maxYear ] }, { type: 'month', range: [ minMonth, maxMonth ] }, { type: 'day', range: [ minDate, maxDate ] }, { type: 'hour', range: [ minHour, maxHour ] }, { type: 'minute', range: [ minMinute, maxMinute ] }, { type: 'seconds', range: [ minSeconds, maxSeconds ] } ]; // 根据类型返回对应的范围配置 switch(type.toLocaleLowerCase()){ case 'date': return fullRanges.slice(0, 3); case 'datetime': return fullRanges.slice(0, 5); case 'time': return fullRanges.slice(3, 6); case 'year-month': return fullRanges.slice(0, 2); case 'hour-minutes': return fullRanges.slice(3, 5); case 'month-day': return fullRanges.slice(1, 3); case 'datehour': return fullRanges.slice(0, 4); default: return fullRanges; } }; var getDatePartValue = function getDatePartValue(type, selectedDate) { var date = new Date(selectedDate); if (!selectedDate) return 0; switch(type){ case 'year': return date.getFullYear(); case 'month': return date.getMonth() + 1; case 'day': return date.getDate(); case 'hour': return date.getHours(); case 'minute': return date.getMinutes(); case 'seconds': return date.getSeconds(); default: return 0; } }; var generatePickerColumnWithCallback = function generatePickerColumnWithCallback(min, max, currentValue, type, minuteStep, callback, showChinese, zhCNType, formatter) { var currentMin = min; var options = []; var selectedIndex = 0; // 遍历从最小值到最大值的范围 while(currentMin <= max){ // 将当前值格式化为 PickerOption 并添加到数组中 options.push(formatPickerOption(type, currentMin, showChinese, zhCNType, formatter)); // 根据类型决定步长:如果是分钟,使用 minuteStep,否则步长为 1 if (type === 'minute') { currentMin += minuteStep; } else { currentMin++; } // 如果当前值小于等于选中的值,更新选中索引 if (currentMin <= Number(currentValue)) { selectedIndex++; } } callback(selectedIndex, options); return options; }; var formatPickerOption = function formatPickerOption(type, value, showChinese, zhCNType, formatter) { if (formatter) { return formatter(type, { label: (0, _padzero.padZero)(value, 2), value: (0, _padzero.padZero)(value, 2) }); } var paddedValue = (0, _padzero.padZero)(value, 2); var chineseText = showChinese ? zhCNType[type] : ''; return { label: paddedValue + chineseText, value: paddedValue }; }; var formatValue = function formatValue(value, startDate, endDate) { if (!value || value && !(0, _isdate.isDate)(value)) { value = startDate; } return Math.min(Math.max(value.getTime(), startDate.getTime()), endDate.getTime()); }; var handlePickerValueChange = function handlePickerValueChange(selectedOptions, selectedValue, index, type, defaultDate, handleDateComparison) { var rangeType = type.toLocaleLowerCase(); if ([ 'date', 'datetime', 'datehour', 'month-day', 'year-month' ].includes(rangeType)) { var formattedDate = []; selectedValue.forEach(function(item) { formattedDate.push(item); }); if (rangeType === 'month-day' && formattedDate.length < 3) { formattedDate.unshift(new Date(defaultDate).getFullYear()); } if (rangeType === 'year-month' && formattedDate.length < 3) { formattedDate.push(new Date(defaultDate).getDate()); } var year = Number(formattedDate[0]); var month = Number(formattedDate[1]) - 1; var day = Math.min(Number(formattedDate[2]), getLastDayOfMonth(year, month + 1)); var date = null; if (rangeType === 'date' || rangeType === 'month-day' || rangeType === 'year-month') { date = new Date(year, month, day); } else if (rangeType === 'datetime') { date = new Date(year, month, day, Number(formattedDate[3]), Number(formattedDate[4])); } else if (rangeType === 'datehour') { date = new Date(year, month, day, Number(formattedDate[3])); } handleDateComparison(date, selectedOptions, index); } else { var _selectedValue = (0, _sliced_to_array._)(selectedValue, 3), hour = _selectedValue[0], minute = _selectedValue[1], seconds = _selectedValue[2]; var currentDate = new Date(defaultDate); var year1 = currentDate.getFullYear(); var month1 = currentDate.getMonth(); var day1 = currentDate.getDate(); var date1 = new Date(year1, month1, day1, Number(hour), Number(minute), rangeType === 'time' ? Number(seconds) : 0); handleDateComparison(date1, selectedOptions, index); } };