UNPKG

vant

Version:

Mobile UI Components built on Vue

261 lines (215 loc) 7.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _utils = require("../utils"); var _date = require("../utils/validate/date"); var _string = require("../utils/format/string"); var _utils2 = require("./utils"); var _shared = require("./shared"); var currentYear = new Date().getFullYear(); var _createNamespace = (0, _utils.createNamespace)('date-picker'), createComponent = _createNamespace[0]; var _default2 = createComponent({ mixins: [_shared.TimePickerMixin], props: (0, _extends2.default)({}, _shared.sharedProps, { type: { type: String, default: 'datetime' }, minDate: { type: Date, default: function _default() { return new Date(currentYear - 10, 0, 1); }, validator: _date.isDate }, maxDate: { type: Date, default: function _default() { return new Date(currentYear + 10, 11, 31); }, validator: _date.isDate } }), watch: { filter: 'updateInnerValue', minDate: 'updateInnerValue', maxDate: 'updateInnerValue', value: function value(val) { val = this.formatValue(val); if (val && val.valueOf() !== this.innerValue.valueOf()) { this.innerValue = val; } } }, computed: { ranges: function ranges() { var _this$getBoundary = this.getBoundary('max', this.innerValue ? this.innerValue : this.minDate), maxYear = _this$getBoundary.maxYear, maxDate = _this$getBoundary.maxDate, maxMonth = _this$getBoundary.maxMonth, maxHour = _this$getBoundary.maxHour, maxMinute = _this$getBoundary.maxMinute; var _this$getBoundary2 = this.getBoundary('min', this.innerValue ? this.innerValue : this.minDate), minYear = _this$getBoundary2.minYear, minDate = _this$getBoundary2.minDate, minMonth = _this$getBoundary2.minMonth, minHour = _this$getBoundary2.minHour, minMinute = _this$getBoundary2.minMinute; var result = [{ 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] }]; switch (this.type) { case 'date': result = result.slice(0, 3); break; case 'year-month': result = result.slice(0, 2); break; case 'month-day': result = result.slice(1, 3); break; case 'datehour': result = result.slice(0, 4); break; } if (this.columnsOrder) { var columnsOrder = this.columnsOrder.concat(result.map(function (column) { return column.type; })); result.sort(function (a, b) { return columnsOrder.indexOf(a.type) - columnsOrder.indexOf(b.type); }); } return result; } }, methods: { formatValue: function formatValue(value) { if (!(0, _date.isDate)(value)) { return null; } value = Math.max(value, this.minDate.getTime()); value = Math.min(value, this.maxDate.getTime()); return new Date(value); }, getBoundary: function getBoundary(type, value) { var _ref; var boundary = this[type + "Date"]; var year = boundary.getFullYear(); var month = 1; var date = 1; var hour = 0; var minute = 0; if (type === 'max') { month = 12; date = (0, _utils2.getMonthEndDay)(value.getFullYear(), value.getMonth() + 1); hour = 23; minute = 59; } 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(); } } } } return _ref = {}, _ref[type + "Year"] = year, _ref[type + "Month"] = month, _ref[type + "Date"] = date, _ref[type + "Hour"] = hour, _ref[type + "Minute"] = minute, _ref; }, updateInnerValue: function updateInnerValue() { var _this = this; var type = this.type; var indexes = this.getPicker().getIndexes(); var getValue = function getValue(type) { var index = 0; _this.originColumns.forEach(function (column, columnIndex) { if (type === column.type) { index = columnIndex; } }); var values = _this.originColumns[index].values; return (0, _utils2.getTrueValue)(values[indexes[index]]); }; var year; var month; var day; if (type === 'month-day') { year = (this.innerValue ? this.innerValue : this.minDate).getFullYear(); month = getValue('month'); day = getValue('day'); } else { year = getValue('year'); month = getValue('month'); day = type === 'year-month' ? 1 : getValue('day'); } var maxDay = (0, _utils2.getMonthEndDay)(year, month); day = day > maxDay ? maxDay : day; var hour = 0; var minute = 0; if (type === 'datehour') { hour = getValue('hour'); } if (type === 'datetime') { hour = getValue('hour'); minute = getValue('minute'); } var value = new Date(year, month - 1, day, hour, minute); this.innerValue = this.formatValue(value); }, onChange: function onChange(picker) { var _this2 = this; this.updateInnerValue(); this.$nextTick(function () { _this2.$nextTick(function () { _this2.$emit('change', picker); }); }); }, updateColumnValue: function updateColumnValue() { var _this3 = this; var value = this.innerValue ? this.innerValue : this.minDate; var formatter = this.formatter; var values = this.originColumns.map(function (column) { switch (column.type) { case 'year': return formatter('year', "" + value.getFullYear()); case 'month': return formatter('month', (0, _string.padZero)(value.getMonth() + 1)); case 'day': return formatter('day', (0, _string.padZero)(value.getDate())); case 'hour': return formatter('hour', (0, _string.padZero)(value.getHours())); case 'minute': return formatter('minute', (0, _string.padZero)(value.getMinutes())); default: // no default return null; } }); this.$nextTick(function () { _this3.getPicker().setValues(values); }); } } }); exports.default = _default2;