UNPKG

jimu-mobile

Version:

积木组件库助力移动端开发

416 lines (365 loc) 14.1 kB
'use strict'; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _class, _temp; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _picker = require('../picker/picker.js'); var _picker2 = _interopRequireDefault(_picker); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var TimeDefaultPicker = (_temp = _class = function (_Component) { _inherits(TimeDefaultPicker, _Component); function TimeDefaultPicker() { _classCallCheck(this, TimeDefaultPicker); return _possibleConstructorReturn(this, (TimeDefaultPicker.__proto__ || Object.getPrototypeOf(TimeDefaultPicker)).call(this)); } _createClass(TimeDefaultPicker, [{ key: 'componentWillMount', value: function componentWillMount() { this.setInitState(); } }, { key: 'setInitState', value: function setInitState() { var _props = this.props, value = _props.value, open = _props.open, len = _props.len, format = _props.format, isShowNowText = _props.isShowNowText, dates = this.setDateFormat(new Date(), 'yyyy/MM/dd hh:mm'), mopt = [], nValue = value, hopt = this._setInitHour(dates.datelist.h, true), dopt = this._setInitData(dates.fmt, len); if (isShowNowText) { mopt = ['']; } else { mopt = this._setInitMinutes(dates.datelist.m); nValue = [dopt[0], hopt[0], mopt[0]]; } // 设置默认显示参数 this.setState({ startData: dates.fmt, value: nValue, // 默认数值 开始时间 、 结束时间 options: [dopt, hopt, mopt], // 初始数值 open: open }); } // 设置初始日期展示 }, { key: '_setInitData', value: function _setInitData(startDate, len) { var self = this, _props2 = this.props, scale = _props2.scale, format = _props2.format, delay = _props2.delay, optOneArr = _props2.optOneArr, timestamp = new Date(startDate).getTime(), dataArr = []; this.isCrossDay = false; // 获取全部日期相关 this.allData = []; // 判断是否跨天 var delayD = this.setDateFormat(new Date(), 'yyyy/MM/dd').datelist.d; var nowD = this.setDateFormat(new Date(), 'yyyy/MM/dd', { isDelay: false }).datelist.d; if (delayD != nowD) { this.isCrossDay = true; } for (var i = 0; i < len; i++) { var tamp = timestamp + 24 * 60 * 60 * 1000 * i + 60 * 1000 * delay + 60 * 1000 * scale; if (this.isCrossDay) { // 跨天 if (i < optOneArr.length - 1) { dataArr.push(optOneArr[i + 1]); } else { dataArr.push(self.setDateFormat(new Date(parseInt(tamp)), format[0]).fmt); } } else { if (i < optOneArr.length) { dataArr.push(optOneArr[i]); } else { dataArr.push(self.setDateFormat(new Date(parseInt(tamp)), format[0]).fmt); } } this.allData.push(self.setDateFormat(new Date(parseInt(tamp)), 'yyyy/MM/dd').fmt); // 判断是否跨天 } return dataArr; } // 设置初始小时展示 isOnday 是否当天 }, { key: '_setInitHour', value: function _setInitHour(hour, isOnday) { var _props3 = this.props, format = _props3.format, scale = _props3.scale, nowText = _props3.nowText, isShowNowText = _props3.isShowNowText, delay = _props3.delay, hourArr = [], dates = this.setDateFormat(new Date(), 'yyyy/MM/dd hh:mm'), gethour = isOnday ? dates.datelist.h : hour; if (isOnday && isShowNowText) { hourArr = [nowText]; } for (var i = gethour; i < 24; i++) { hourArr.push(i + format[1]); } return hourArr; } // 设置分钟展示 }, { key: '_setInitMinutes', value: function _setInitMinutes(minutes) { var _props4 = this.props, scale = _props4.scale, format = _props4.format, minutesArr = []; for (var i = 0; i < 60; i++) { // minutesArr.push(i + format[1]) if (!(i % scale)) { var setMinutes = minutes + scale >= 60 ? 0 : minutes; if (setMinutes <= i) { if (i < 10) { i = '0' + i; } minutesArr.push(i + format[2]); } } } return minutesArr; } // 设置delay 以后时间 日期格式化 yyyy-MM-dd hh:mm ; yyyy/MM/dd hh:mm }, { key: 'setDateFormat', value: function setDateFormat(nowdate, fmt) { var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, _ref$isDelay = _ref.isDelay, isDelay = _ref$isDelay === undefined ? true : _ref$isDelay; var _props5 = this.props, delay = _props5.delay, scale = _props5.scale, deleytamp = isDelay ? new Date(nowdate).getTime() + 60 * 1000 * delay : new Date(nowdate).getTime(), date = new Date(parseInt(deleytamp)), o = { 'M+': date.getMonth() + 1, // 月份 'd+': date.getDate(), // 日 'h+': date.getHours(), // 小时 'm+': date.getMinutes(), // 分 's+': date.getSeconds() // 秒 }; // 判断当前 delay 时间大于分钟最大刻度展示,小时+1 if (isDelay && date.getMinutes() + scale >= 60) { deleytamp = new Date(nowdate).getTime() + 60 * 1000 * delay + 60 * 1000 * scale; date = new Date(parseInt(deleytamp)); o = { 'M+': date.getMonth() + 1, // 月份 'd+': date.getDate(), // 日 'h+': date.getHours(), // 小时 'm+': date.getMinutes(), // 分 's+': date.getSeconds() // 秒 }; } if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, ('' + date.getFullYear()).substr(4 - RegExp.$1.length)); for (var k in o) { if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)); } return { fmt: fmt, datelist: { y: date.getFullYear(), M: date.getMonth() + 1, d: date.getDate(), h: date.getHours(), m: date.getMinutes() >= 10 ? date.getMinutes() : '0' + date.getMinutes() } }; } }, { key: 'onClickAway', value: function onClickAway() { var _props6 = this.props, optOneArr = _props6.optOneArr, format = _props6.format, nowText = _props6.nowText, isShowNowText = _props6.isShowNowText, _state = this.state, value = _state.value, options = _state.options, dates = this.setDateFormat(new Date(), 'yyyy/MM/dd hh:mm', { isDelay: false }), timestamp = new Date().getTime(), ondate = value[0], onhour = value[1], onminute = value[2], setValArr = value, len = options[0].length, dataString = '', fmt = void 0, setdataformat = void 0; for (var i = 0; i < len; i++) { var tamp = timestamp + 24 * 60 * 60 * 1000 * i; if (this.isCrossDay) { // 跨天 if (options[0][i] === ondate) { if (i < optOneArr.length) { dataString += this.setDateFormat(new Date(parseInt(tamp)), 'yyyy/MM/dd').fmt; } else { dataString += this.allData[i]; } } } else { if (options[0][i] === ondate) { if (i < optOneArr.length) { dataString += this.setDateFormat(new Date(parseInt(tamp)), 'yyyy/MM/dd').fmt; } else { dataString += this.allData[i]; } } } } if (onhour === nowText && isShowNowText) { onhour = dates.datelist.h + format[1]; onminute = dates.datelist.m + format[2]; setValArr[2] = dates.datelist.m + format[2]; dataString = ''; fmt = new Date().getTime(); setdataformat = new Date(); } else { dataString += ' ' + onhour.split(format[1])[0] + ':' + onminute.split(format[2])[0]; fmt = new Date(dataString).getTime(); setdataformat = new Date(dataString); } this.props.pickerAway && this.props.pickerAway([ondate, onhour, onminute], this.refs.pickertime, setValArr, { fmt: fmt, data: this.setDateFormat(setdataformat, 'yyyy/MM/dd hh:mm', { isDelay: false }).fmt }); } }, { key: 'onChange', value: function onChange(val, text, listIndex) { var _state2 = this.state, options = _state2.options, value = _state2.value, _props7 = this.props, format = _props7.format, optOneArr = _props7.optOneArr, nowText = _props7.nowText, isShowNowText = _props7.isShowNowText, days = options[0], hours = options[1], minutes = options[2], setHours = hours, setMinutes = minutes, dates = this.setDateFormat(new Date(), 'yyyy/MM/dd hh:mm'), onDay = value[0], onHours = value[1], onMinutes = value[2]; // 日期更改时 if (listIndex === 0) { if (val === days[0]) { setMinutes = []; setHours = this._setInitHour(dates.datelist.h, true); if (isShowNowText) { onHours = nowText; onMinutes = ''; } else { onHours = setHours[0]; setMinutes = this._setInitMinutes(dates.datelist.m); onMinutes = setMinutes[0]; } } else { setHours = this._setInitHour(0, false); setMinutes = this._setInitMinutes(0); onHours = '0' + format[1]; onMinutes = '00' + format[2]; } onDay = val; } // 小时修改时 if (listIndex === 1) { if (onDay === optOneArr[0] && val === nowText) { setMinutes = []; onMinutes = ''; } else if (onDay === optOneArr[0] && val === dates.datelist.h + format[1]) { setMinutes = this._setInitMinutes(dates.datelist.m); onMinutes = this._setInitMinutes(dates.datelist.m)[0]; } else { onMinutes = '00' + format[2]; setMinutes = this._setInitMinutes(0); } onHours = val; } if (listIndex === 2) { onMinutes = val; } this.setState({ value: [onDay, onHours, onMinutes], options: [days, setHours, setMinutes] }); } }, { key: 'onCancel', value: function onCancel() { var pickerCancel = this.props.pickerCancel; pickerCancel && pickerCancel(); } }, { key: 'render', value: function render() { var textvalue = this.props.textvalue; return _react2.default.createElement( 'div', { className: 'dataPicker' }, _react2.default.createElement( 'div', { className: 'pickertime', onClick: this._onClick.bind(this), ref: 'pickertime' }, textvalue ), _react2.default.createElement(_picker2.default, { ref: 'date_picker', value: this.state.value, options: this.state.options, onChange: this.onChange.bind(this), onClickAway: this.onClickAway.bind(this), open: this.state.open, onClickCancel: this.onCancel.bind(this) }) ); } }, { key: '_onClick', value: function _onClick() { this.refs.date_picker.show(); } }, { key: 'show', value: function show() { this.refs.date_picker.show(); } }]); return TimeDefaultPicker; }(_react.Component), _class.propTypes = { open: _propTypes2.default.bool, pickerAway: _propTypes2.default.func, len: _propTypes2.default.number }, _class.defaultProps = { textvalue: '时间组件按钮', pickerAway: function pickerAway() {}, pickerCancel: function pickerCancel() {}, open: false, len: 7, // 展示天数 format: ['M月d日', '点', '分'], delay: 15, // 与当前时间推迟()分钟后,开始计时 value: ['今天', '现在', ' '], // 默认数值 optOneArr: ['今天', '明天', '后天'], // 第一栏默认名称 nowText: '现在', isShowNowText: false, scale: 10 // 分钟刻度 }, _temp); module.exports = TimeDefaultPicker;