237 lines
5.7 KiB
Vue
237 lines
5.7 KiB
Vue
<script>
|
|
/* eslint react/no-multi-comp:0, no-console:0 */
|
|
|
|
import '../assets/index.less'
|
|
import PropTypes from '@/components/_util/vue-types'
|
|
import Calendar from '../'
|
|
import DatePicker from '../src/Picker'
|
|
import zhCN from '../src/locale/zh_CN'
|
|
import enUS from '../src/locale/en_US'
|
|
import '../../vc-time-picker/assets/index.less'
|
|
import TimePickerPanel from '../../vc-time-picker/Panel'
|
|
import BaseMixin from '@/components/_util/BaseMixin'
|
|
|
|
import moment from 'moment'
|
|
import 'moment/locale/zh-cn'
|
|
import 'moment/locale/en-gb'
|
|
|
|
const format = 'YYYY-MM-DD HH:mm:ss'
|
|
const cn = window.location.search.indexOf('cn') !== -1
|
|
|
|
const now = moment()
|
|
if (cn) {
|
|
now.locale('zh-cn').utcOffset(8)
|
|
} else {
|
|
now.locale('en-gb').utcOffset(0)
|
|
}
|
|
|
|
function getFormat (time) {
|
|
return time ? format : 'YYYY-MM-DD'
|
|
}
|
|
|
|
const defaultCalendarValue = now.clone()
|
|
defaultCalendarValue.add(-1, 'month')
|
|
|
|
const timePickerElement = (h) => <TimePickerPanel defaultValue={moment('00:00:00', 'HH:mm:ss')} />
|
|
|
|
function disabledTime (date) {
|
|
console.log('disabledTime', date)
|
|
if (date && (date.date() === 15)) {
|
|
return {
|
|
disabledHours () {
|
|
return [3, 4]
|
|
},
|
|
}
|
|
}
|
|
return {
|
|
disabledHours () {
|
|
return [1, 2]
|
|
},
|
|
}
|
|
}
|
|
|
|
function disabledDate (current) {
|
|
if (!current) {
|
|
// allow empty select
|
|
return false
|
|
}
|
|
const date = moment()
|
|
date.hour(0)
|
|
date.minute(0)
|
|
date.second(0)
|
|
return current.valueOf() < date.valueOf() // can not select days before today
|
|
}
|
|
|
|
const Demo = {
|
|
props: {
|
|
defaultValue: PropTypes.object,
|
|
defaultCalendarValue: PropTypes.object,
|
|
},
|
|
mixins: [BaseMixin],
|
|
data () {
|
|
return {
|
|
showTime: true,
|
|
showDateInput: true,
|
|
disabled: false,
|
|
value: this.defaultValue,
|
|
}
|
|
},
|
|
methods: {
|
|
onChange (value) {
|
|
console.log('DatePicker change: ', (value && value.format(format)))
|
|
this.setState({
|
|
value,
|
|
})
|
|
},
|
|
|
|
onShowTimeChange (e) {
|
|
this.setState({
|
|
showTime: e.target.checked,
|
|
})
|
|
},
|
|
|
|
onShowDateInputChange (e) {
|
|
this.setState({
|
|
showDateInput: e.target.checked,
|
|
})
|
|
},
|
|
|
|
toggleDisabled () {
|
|
this.setState({
|
|
disabled: !this.disabled,
|
|
})
|
|
},
|
|
},
|
|
|
|
render (h) {
|
|
const state = this.$data
|
|
const calendar = (<Calendar
|
|
locale={cn ? zhCN : enUS}
|
|
style={{ zIndex: 1000 }}
|
|
dateInputPlaceholder='please input'
|
|
formatter={getFormat(state.showTime)}
|
|
disabledTime={state.showTime ? disabledTime : null}
|
|
timePicker={state.showTime ? timePickerElement(h) : null}
|
|
defaultValue={this.defaultCalendarValue}
|
|
showDateInput={state.showDateInput}
|
|
disabledDate={disabledDate}
|
|
/>)
|
|
return (<div style={{ width: '400px', margin: '20px' }}>
|
|
<div style={{ marginBottom: '10px' }}>
|
|
<label>
|
|
<input
|
|
type='checkbox'
|
|
checked={state.showTime}
|
|
onChange={this.onShowTimeChange}
|
|
/>
|
|
showTime
|
|
</label>
|
|
|
|
<label>
|
|
<input
|
|
type='checkbox'
|
|
checked={state.showDateInput}
|
|
onChange={this.onShowDateInputChange}
|
|
/>
|
|
showDateInput
|
|
</label>
|
|
|
|
<label>
|
|
<input
|
|
checked={state.disabled}
|
|
onChange={this.toggleDisabled}
|
|
type='checkbox'
|
|
/>
|
|
disabled
|
|
</label>
|
|
</div>
|
|
<div style={{
|
|
boxSizing: 'border-box',
|
|
position: 'relative',
|
|
display: 'block',
|
|
lineHeight: 1.5,
|
|
marginBottom: '22px',
|
|
}}
|
|
>
|
|
<DatePicker
|
|
animation='slide-up'
|
|
disabled={state.disabled}
|
|
calendar={calendar}
|
|
value={state.value}
|
|
onChange={this.onChange}
|
|
scopedSlots={{
|
|
default: ({ value }) => {
|
|
return (
|
|
<span tabIndex='0'>
|
|
<input
|
|
placeholder='please select'
|
|
style={{ width: '250px' }}
|
|
disabled={state.disabled}
|
|
readOnly
|
|
tabIndex='-1'
|
|
class='ant-calendar-picker-input ant-input'
|
|
value={value && value.format(getFormat(state.showTime)) || ''}
|
|
/>
|
|
</span>
|
|
)
|
|
},
|
|
}}
|
|
>
|
|
</DatePicker>
|
|
</div>
|
|
</div>)
|
|
},
|
|
}
|
|
|
|
function onStandaloneSelect (value) {
|
|
console.log('onStandaloneSelect')
|
|
console.log(value && value.format(format))
|
|
}
|
|
|
|
function onStandaloneChange (value) {
|
|
console.log('onStandaloneChange')
|
|
console.log(value && value.format(format))
|
|
}
|
|
|
|
export default {
|
|
render (h) {
|
|
return (
|
|
<div
|
|
style={{
|
|
zIndex: 1000,
|
|
position: 'relative',
|
|
width: '900px',
|
|
margin: '20px auto',
|
|
}}
|
|
>
|
|
<div>
|
|
<div style={{ margin: '10px' }}>
|
|
<Calendar
|
|
showWeekNumber={false}
|
|
locale={cn ? zhCN : enUS}
|
|
defaultValue={now}
|
|
disabledTime={disabledTime}
|
|
showToday
|
|
formatter={getFormat(true)}
|
|
showOk={false}
|
|
timePicker={timePickerElement(h)}
|
|
onChange={onStandaloneChange}
|
|
disabledDate={disabledDate}
|
|
onSelect={onStandaloneSelect}
|
|
/>
|
|
</div>
|
|
<div style={{ float: 'left', width: '300px' }}>
|
|
<Demo defaultValue={now} />
|
|
</div>
|
|
<div style={{ float: 'right', width: '300px' }}>
|
|
<Demo defaultCalendarValue={defaultCalendarValue} />
|
|
</div>
|
|
<div style={{ clear: 'both' }}></div>
|
|
</div>
|
|
</div>
|
|
)
|
|
},
|
|
}
|
|
|
|
</script>
|