import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { DatePicker, Tooltip, Icon } from 'antd'
|
import moment from 'moment'
|
|
import Utils from '@/utils/utils.js'
|
import QuarterPicker from './quarterpicker'
|
import YearPicker from './yearpicker'
|
import './index.scss'
|
|
const { MonthPicker, WeekPicker, RangePicker } = DatePicker
|
|
class DateGroup extends Component {
|
static propTpyes = {
|
config: PropTypes.object,
|
position: PropTypes.number, // 索引,用于控制季度和年的展开方向
|
onChange: PropTypes.func
|
}
|
|
state = {
|
active: '',
|
quarterId: Utils.getuuid(),
|
yearId: Utils.getuuid(),
|
dateRange: '',
|
placement: this.props.position % 4 !== 3 ? 'bottomLeft' : 'bottomRight'
|
}
|
|
UNSAFE_componentWillMount() {
|
const { config } = this.props
|
|
this.setState({
|
active: config.initType,
|
dateRange: config.initval
|
})
|
}
|
|
onChange = (date, type) => {
|
let values = []
|
if (type === 'day') {
|
values = [moment(date).format('YYYY-MM-DD'), moment(date).format('YYYY-MM-DD')]
|
} else if (type === 'week') {
|
values = [moment(date).startOf('week').format('YYYY-MM-DD'), moment(date).endOf('week').format('YYYY-MM-DD')]
|
} else if (type === 'month') {
|
values = [moment(date).startOf('month').format('YYYY-MM-DD'), moment(date).endOf('month').format('YYYY-MM-DD')]
|
} else if (type === 'quarter') {
|
values = date
|
document.getElementById(this.state.quarterId).click()
|
} else if (type === 'year') {
|
values = date
|
document.getElementById(this.state.yearId).click()
|
} else if (type === 'customized') {
|
values = [moment(date[0]).format('YYYY-MM-DD'), moment(date[1]).format('YYYY-MM-DD')]
|
}
|
|
values = values.join(',')
|
|
this.setState({
|
active: type,
|
dateRange: values
|
}, () => {
|
this.props.onChange(values, type)
|
})
|
}
|
|
clearTime = () => {
|
this.setState({
|
active: '',
|
dateRange: ''
|
}, () => {
|
this.props.onChange('', '')
|
})
|
}
|
|
render() {
|
const { config } = this.props
|
const { active, quarterId, yearId, dateRange, placement } = this.state
|
let tabs = {day: '日', week: '周', month: '月', quarter: '季', year: '年', customized: '自定义'}
|
|
return (
|
<div className="table-search-date-group">
|
{config.items.map(tab => {
|
if (tab === 'day') {
|
return (<span key={tab} className={'ant-tag ant-tag-checkable ' + (active === tab ? 'ant-tag-checkable-checked' : '')} >
|
{tabs[tab]}
|
<DatePicker allowClear={false} onChange={(date) => this.onChange(date, tab)} />
|
</span>)
|
} else if (tab === 'week') {
|
return (<span key={tab} className={'ant-tag ant-tag-checkable ' + (active === tab ? 'ant-tag-checkable-checked' : '')} >
|
{tabs[tab]}
|
<WeekPicker dropdownClassName="group-week-picker" allowClear={false} onChange={(date) => this.onChange(date, tab)} />
|
</span>)
|
} else if (tab === 'month') {
|
return (<span key={tab} className={'ant-tag ant-tag-checkable ' + (active === tab ? 'ant-tag-checkable-checked' : '')} >
|
{tabs[tab]}
|
<MonthPicker allowClear={false} onChange={(date) => this.onChange(date, tab)} />
|
</span>)
|
} else if (tab === 'quarter') {
|
return (
|
<Tooltip key={tab} placement={placement} overlayClassName={'quarter-picker-tooltip ' + placement} trigger="click" title={
|
<div>
|
<QuarterPicker card={config} onChange={(date) => this.onChange(date, tab)}/>
|
</div>
|
}>
|
<span id={quarterId} className={'ant-tag ant-tag-quarter ant-tag-checkable ' + (active === tab ? 'ant-tag-checkable-checked' : '')} >
|
{tabs[tab]}
|
</span>
|
</Tooltip>
|
)
|
} else if (tab === 'year') {
|
return (
|
<Tooltip key={tab} placement={placement} overlayClassName={'year-picker-tooltip ' + placement} trigger="click" title={
|
<div>
|
<YearPicker card={config} onChange={(date) => this.onChange(date, tab)}/>
|
</div>
|
}>
|
<span id={yearId} className={'ant-tag ant-tag-quarter ant-tag-checkable ' + (active === tab ? 'ant-tag-checkable-checked' : '')} >
|
{tabs[tab]}
|
</span>
|
</Tooltip>
|
)
|
} else {
|
return (<span key={tab} className={'ant-tag ant-tag-checkable ' + (active === tab ? 'ant-tag-checkable-checked' : '')} >
|
{tabs[tab]}
|
<RangePicker allowClear={false} onChange={(date) => this.onChange(date, tab)} />
|
</span>)
|
}
|
})}
|
|
{dateRange ? <div className="table-search-date-group-value">
|
{dateRange.replace(',', ' ~ ')}
|
<Icon type="close-circle" onClick={this.clearTime} className="ant-calendar-picker-clear" />
|
</div> : null}
|
</div>
|
)
|
}
|
}
|
|
export default DateGroup
|