import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import moment from 'moment'
|
|
import './index.scss'
|
|
class QuarterPicker extends Component {
|
static propTpyes = {
|
card: PropTypes.object, // 搜索配置
|
onChange: PropTypes.func
|
}
|
|
state = {
|
year: Math.floor(moment().format('YYYY') / 10) * 10,
|
selectYear: +moment().format('YYYY')
|
}
|
|
UNSAFE_componentWillMount () {
|
const { card } = this.props
|
const { selectYear } = this.state
|
let year = this.state.year
|
|
if (card.initval && card.initval[0]) {
|
let _type = card.initval[0]
|
let _val = parseInt(card.initval[1])
|
|
if (_type === 'year' && _val) {
|
this.setState({selectYear: selectYear - _val})
|
year = Math.floor((selectYear - _val) / 10) * 10
|
}
|
}
|
|
this.setState({
|
yearlist: [
|
[{value: year - 1, type: 'up'}, {value: year, type: ''}, {value: year + 1, type: ''}],
|
[{value: year + 2, type: ''}, {value: year + 3, type: ''}, {value: year + 4, type: ''}],
|
[{value: year + 5, type: ''}, {value: year + 6, type: ''}, {value: year + 7, type: ''}],
|
[{value: year + 8, type: ''}, {value: year + 9, type: ''}, {value: year + 10, type: 'down'}],
|
],
|
year
|
})
|
}
|
|
changeYear = (type) => {
|
let _year = this.state.year
|
|
if (type === 'up') {
|
_year -= 10
|
} else {
|
_year += 10
|
}
|
|
this.setState({
|
year: _year,
|
yearlist: [
|
[{value: _year - 1, type: 'up'}, {value: _year, type: ''}, {value: _year + 1, type: ''}],
|
[{value: _year + 2, type: ''}, {value: _year + 3, type: ''}, {value: _year + 4, type: ''}],
|
[{value: _year + 5, type: ''}, {value: _year + 6, type: ''}, {value: _year + 7, type: ''}],
|
[{value: _year + 8, type: ''}, {value: _year + 9, type: ''}, {value: _year + 10, type: 'down'}],
|
]
|
})
|
}
|
|
selectTargetYear = (item) => {
|
if (item.type) {
|
this.changeYear(item.type)
|
return
|
}
|
|
this.setState({
|
selectYear: item.value
|
})
|
this.props.onChange([item.value + '-01-01', item.value + '-12-31'])
|
}
|
|
render() {
|
const { year, selectYear, yearlist } = this.state
|
|
return (
|
<div className="ant-calendar-picker-container ant-calendar-year-picker">
|
<div className="ant-calendar ant-calendar-month ant-calendar-month-calendar">
|
<div className="ant-calendar-month-calendar-content">
|
<div className="ant-calendar-month-header-wrap">
|
<div className="ant-calendar-header">
|
<div className="ant-calendar-year-panel">
|
<div>
|
<div className="ant-calendar-year-panel-header">
|
<span className="ant-calendar-year-panel-prev-decade-btn" onClick={() => this.changeYear('up')} title="上一年代"></span>
|
<span className="ant-calendar-year-panel-year-select">
|
<span className="ant-calendar-year-panel-decade-select-content">{year + '-' + (year + 9)}</span>
|
</span>
|
<span className="ant-calendar-year-panel-next-decade-btn" onClick={() => this.changeYear('down')} title="下一年代"></span>
|
</div>
|
<div className="ant-calendar-year-panel-body">
|
<table className="ant-calendar-year-panel-table">
|
<tbody className="ant-calendar-year-panel-tbody">
|
{yearlist.map((list, i) => (
|
<tr key={'line' + i}>
|
{list.map(item => (
|
<td key={item.value} title={item.value} className={'ant-calendar-year-panel-cell' + (item.type ? ' ant-calendar-year-panel-last-decade-cell' : '')}>
|
<span onClick={() => this.selectTargetYear(item)} className={'ant-calendar-year-panel-year' + (selectYear === item.value ? ' ant-year-selected' : '')}>{item.value}</span>
|
</td>
|
))}
|
</tr>
|
))}
|
</tbody>
|
</table>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
)
|
}
|
}
|
|
export default QuarterPicker
|