import { PropTypes } from 'react'; import * as React from 'react'; import GregorianCalendar from 'gregorian-calendar'; import defaultLocale from './locale/zh_CN'; import FullCalendar from 'rc-calendar/lib/FullCalendar'; import { PREFIX_CLS } from './Constants'; import Header from './Header'; import assign from 'object-assign'; function noop() { return null; } function zerofixed(v) { if (v < 10) { return `0${v}`; } return `${v}`; } export default class Calendar extends React.Component { static defaultProps = { monthCellRender: noop, dateCellRender: noop, locale: {}, fullscreen: true, prefixCls: PREFIX_CLS, onPanelChange: noop, mode: 'month', }; static propTypes = { monthCellRender: PropTypes.func, dateCellRender: PropTypes.func, fullscreen: PropTypes.bool, locale: PropTypes.object, prefixCls: PropTypes.string, className: PropTypes.string, style: PropTypes.object, onPanelChange: PropTypes.func, value: PropTypes.instanceOf(Date), }; static contextTypes = { antLocale: PropTypes.object, }; constructor(props) { super(props); this.state = { value: this.parseDateFromValue(props.value || new Date()), mode: props.mode, }; } parseDateFromValue(value) { const date = new GregorianCalendar(this.getLocale()); date.setTime(+value); return date; } componentWillReceiveProps(nextProps) { if ('value' in nextProps) { this.setState({ value: this.parseDateFromValue(nextProps.value), }); } } getLocale = () => { const props = this.props; let locale = defaultLocale; const context = this.context; if (context && context.antLocale && context.antLocale.Calendar) { locale = context.antLocale.Calendar; } // 统一合并为完整的 Locale const result = assign({}, locale, props.locale); result.lang = assign({}, locale.lang, props.locale.lang); return result; } monthCellRender = (value, locale) => { const prefixCls = this.props.prefixCls; const month = value.getMonth(); return (