2018-03-19 02:16:27 +00:00
|
|
|
|
2018-03-19 02:25:42 +00:00
|
|
|
import PropTypes from '../../_util/vue-types'
|
|
|
|
import BaseMixin from '../../_util/BaseMixin'
|
|
|
|
import KeyCode from '../../_util/KeyCode'
|
2018-03-10 14:10:13 +00:00
|
|
|
import CalendarHeader from './calendar/CalendarHeader'
|
|
|
|
import CalendarFooter from './calendar/CalendarFooter'
|
|
|
|
import CalendarMixin from './mixin/CalendarMixin'
|
|
|
|
import CommonMixin from './mixin/CommonMixin'
|
2018-03-12 14:13:59 +00:00
|
|
|
import enUs from './locale/en_US'
|
2018-03-10 14:10:13 +00:00
|
|
|
const MonthCalendar = {
|
|
|
|
props: {
|
2018-03-12 14:13:59 +00:00
|
|
|
locale: PropTypes.object.def(enUs),
|
2018-03-17 13:38:29 +00:00
|
|
|
format: PropTypes.string,
|
2018-03-12 14:13:59 +00:00
|
|
|
visible: PropTypes.bool.def(true),
|
|
|
|
prefixCls: PropTypes.string.def('rc-calendar'),
|
2018-03-10 14:10:13 +00:00
|
|
|
monthCellRender: PropTypes.func,
|
|
|
|
dateCellRender: PropTypes.func,
|
2018-03-12 14:13:59 +00:00
|
|
|
disabledDate: PropTypes.func,
|
|
|
|
monthCellContentRender: PropTypes.func,
|
|
|
|
renderFooter: PropTypes.func.def(() => null),
|
|
|
|
renderSidebar: PropTypes.func.def(() => null),
|
2018-03-10 14:10:13 +00:00
|
|
|
},
|
|
|
|
mixins: [BaseMixin, CommonMixin, CalendarMixin],
|
|
|
|
|
|
|
|
data () {
|
|
|
|
return { mode: 'month' }
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
onKeyDown (event) {
|
|
|
|
const keyCode = event.keyCode
|
|
|
|
const ctrlKey = event.ctrlKey || event.metaKey
|
|
|
|
const stateValue = this.sValue
|
|
|
|
const { disabledDate } = this
|
|
|
|
let value = stateValue
|
|
|
|
switch (keyCode) {
|
|
|
|
case KeyCode.DOWN:
|
|
|
|
value = stateValue.clone()
|
|
|
|
value.add(3, 'months')
|
|
|
|
break
|
|
|
|
case KeyCode.UP:
|
|
|
|
value = stateValue.clone()
|
|
|
|
value.add(-3, 'months')
|
|
|
|
break
|
|
|
|
case KeyCode.LEFT:
|
|
|
|
value = stateValue.clone()
|
|
|
|
if (ctrlKey) {
|
|
|
|
value.add(-1, 'years')
|
|
|
|
} else {
|
|
|
|
value.add(-1, 'months')
|
|
|
|
}
|
|
|
|
break
|
|
|
|
case KeyCode.RIGHT:
|
|
|
|
value = stateValue.clone()
|
|
|
|
if (ctrlKey) {
|
|
|
|
value.add(1, 'years')
|
|
|
|
} else {
|
|
|
|
value.add(1, 'months')
|
|
|
|
}
|
|
|
|
break
|
|
|
|
case KeyCode.ENTER:
|
|
|
|
if (!disabledDate || !disabledDate(stateValue)) {
|
|
|
|
this.onSelect(stateValue)
|
|
|
|
}
|
|
|
|
event.preventDefault()
|
|
|
|
return 1
|
|
|
|
default:
|
|
|
|
return undefined
|
|
|
|
}
|
|
|
|
if (value !== stateValue) {
|
|
|
|
this.setValue(value)
|
|
|
|
event.preventDefault()
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
handlePanelChange (_, mode) {
|
|
|
|
if (mode !== 'date') {
|
|
|
|
this.setState({ mode })
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
render () {
|
2018-03-17 13:38:29 +00:00
|
|
|
const { mode, sValue: value, $props: props, $scopedSlots } = this
|
|
|
|
const { prefixCls, locale, disabledDate } = props
|
|
|
|
const monthCellRender = this.monthCellRender || $scopedSlots.monthCellRender
|
|
|
|
const monthCellContentRender = this.monthCellContentRender || $scopedSlots.monthCellContentRender
|
|
|
|
const renderFooter = this.renderFooter || $scopedSlots.renderFooter
|
2018-03-10 14:10:13 +00:00
|
|
|
const children = (
|
2018-03-12 14:13:59 +00:00
|
|
|
<div class={`${prefixCls}-month-calendar-content`}>
|
|
|
|
<div class={`${prefixCls}-month-header-wrap`}>
|
2018-03-10 14:10:13 +00:00
|
|
|
<CalendarHeader
|
2018-03-12 14:13:59 +00:00
|
|
|
prefixCls={prefixCls}
|
2018-03-10 14:10:13 +00:00
|
|
|
mode={mode}
|
|
|
|
value={value}
|
2018-03-12 14:13:59 +00:00
|
|
|
locale={locale}
|
|
|
|
disabledMonth={disabledDate}
|
|
|
|
monthCellRender={monthCellRender}
|
|
|
|
monthCellContentRender={monthCellContentRender}
|
2018-03-10 14:10:13 +00:00
|
|
|
onMonthSelect={this.onSelect}
|
|
|
|
onValueChange={this.setValue}
|
|
|
|
onPanelChange={this.handlePanelChange}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
<CalendarFooter
|
2018-03-12 14:13:59 +00:00
|
|
|
prefixCls={prefixCls}
|
|
|
|
renderFooter={renderFooter}
|
2018-03-10 14:10:13 +00:00
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
)
|
|
|
|
return this.renderRoot({
|
|
|
|
class: `${props.prefixCls}-month-calendar`,
|
|
|
|
children,
|
|
|
|
})
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
export default MonthCalendar
|
2018-03-19 02:16:27 +00:00
|
|
|
|