feat: update date-picker
parent
103293aa8f
commit
300fc9a2bc
|
@ -5,6 +5,7 @@ import classNames from 'classnames';
|
||||||
import shallowequal from 'shallowequal';
|
import shallowequal from 'shallowequal';
|
||||||
import Icon from '../icon';
|
import Icon from '../icon';
|
||||||
import Tag from '../tag';
|
import Tag from '../tag';
|
||||||
|
import { ConfigConsumerProps } from '../config-provider';
|
||||||
import interopDefault from '../_util/interopDefault';
|
import interopDefault from '../_util/interopDefault';
|
||||||
import { RangePickerProps } from './interface';
|
import { RangePickerProps } from './interface';
|
||||||
import {
|
import {
|
||||||
|
@ -73,11 +74,12 @@ export default {
|
||||||
event: 'change',
|
event: 'change',
|
||||||
},
|
},
|
||||||
props: initDefaultProps(RangePickerProps(), {
|
props: initDefaultProps(RangePickerProps(), {
|
||||||
prefixCls: 'ant-calendar',
|
|
||||||
tagPrefixCls: 'ant-tag',
|
|
||||||
allowClear: true,
|
allowClear: true,
|
||||||
showToday: false,
|
showToday: false,
|
||||||
}),
|
}),
|
||||||
|
inject: {
|
||||||
|
configProvider: { default: () => ({}) },
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
const value = this.value || this.defaultValue || [];
|
const value = this.value || this.defaultValue || [];
|
||||||
const [start, end] = value;
|
const [start, end] = value;
|
||||||
|
@ -109,13 +111,24 @@ export default {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
this.setState(state);
|
this.setState(state);
|
||||||
|
this.prevState = {...this.$data, ...state};
|
||||||
},
|
},
|
||||||
open(val) {
|
open(val) {
|
||||||
this.setState({
|
const state = { sOpen: val};
|
||||||
sOpen: val,
|
this.setState(state);
|
||||||
});
|
this.prevState = {...this.$data, ...state};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
this.prevState = {...this.$data};
|
||||||
|
},
|
||||||
|
updated() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if(!hasProp(this, 'open') && this.prevState.sOpen && !this.sOpen) {
|
||||||
|
this.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
clearSelection(e) {
|
clearSelection(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
@ -148,10 +161,6 @@ export default {
|
||||||
this.clearHoverValue();
|
this.clearHoverValue();
|
||||||
}
|
}
|
||||||
this.$emit('openChange', open);
|
this.$emit('openChange', open);
|
||||||
|
|
||||||
if (!open) {
|
|
||||||
this.focus();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
handleShowDateChange(showDate) {
|
handleShowDateChange(showDate) {
|
||||||
|
@ -212,7 +221,8 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
renderFooter(...args) {
|
renderFooter(...args) {
|
||||||
const { prefixCls, ranges, $scopedSlots, $slots, tagPrefixCls } = this;
|
const { ranges, $scopedSlots, $slots } = this;
|
||||||
|
const { _prefixCls: prefixCls, _tagPrefixCls: tagPrefixCls } = this;
|
||||||
const renderExtraFooter =
|
const renderExtraFooter =
|
||||||
this.renderExtraFooter || $scopedSlots.renderExtraFooter || $slots.renderExtraFooter;
|
this.renderExtraFooter || $scopedSlots.renderExtraFooter || $slots.renderExtraFooter;
|
||||||
if (!ranges && !renderExtraFooter) {
|
if (!ranges && !renderExtraFooter) {
|
||||||
|
@ -268,7 +278,8 @@ export default {
|
||||||
panelChange = noop,
|
panelChange = noop,
|
||||||
} = $listeners;
|
} = $listeners;
|
||||||
const {
|
const {
|
||||||
prefixCls,
|
prefixCls: customizePrefixCls,
|
||||||
|
tagPrefixCls: customizeTagPrefixCls,
|
||||||
popupStyle,
|
popupStyle,
|
||||||
disabledDate,
|
disabledDate,
|
||||||
disabledTime,
|
disabledTime,
|
||||||
|
@ -279,6 +290,12 @@ export default {
|
||||||
localeCode,
|
localeCode,
|
||||||
format,
|
format,
|
||||||
} = props;
|
} = props;
|
||||||
|
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
|
||||||
|
const prefixCls = getPrefixCls('calendar', customizePrefixCls);
|
||||||
|
const tagPrefixCls = getPrefixCls('tag', customizeTagPrefixCls);
|
||||||
|
this._prefixCls = prefixCls;
|
||||||
|
this._tagPrefixCls = tagPrefixCls;
|
||||||
|
|
||||||
const dateRender = props.dateRender || $scopedSlots.dateRender;
|
const dateRender = props.dateRender || $scopedSlots.dateRender;
|
||||||
fixLocale(value, localeCode);
|
fixLocale(value, localeCode);
|
||||||
fixLocale(showDate, localeCode);
|
fixLocale(showDate, localeCode);
|
||||||
|
|
|
@ -2,6 +2,7 @@ import * as moment from 'moment';
|
||||||
import Calendar from '../vc-calendar';
|
import Calendar from '../vc-calendar';
|
||||||
import VcDatePicker from '../vc-calendar/src/Picker';
|
import VcDatePicker from '../vc-calendar/src/Picker';
|
||||||
import Icon from '../icon';
|
import Icon from '../icon';
|
||||||
|
import { ConfigConsumerProps } from '../config-provider';
|
||||||
import {
|
import {
|
||||||
hasProp,
|
hasProp,
|
||||||
getOptionProps,
|
getOptionProps,
|
||||||
|
@ -36,6 +37,9 @@ export default {
|
||||||
format: 'gggg-wo',
|
format: 'gggg-wo',
|
||||||
allowClear: true,
|
allowClear: true,
|
||||||
}),
|
}),
|
||||||
|
inject: {
|
||||||
|
configProvider: { default: () => ({}) },
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
const value = this.value || this.defaultValue;
|
const value = this.value || this.defaultValue;
|
||||||
if (value && !interopDefault(moment).isMoment(value)) {
|
if (value && !interopDefault(moment).isMoment(value)) {
|
||||||
|
@ -50,17 +54,32 @@ export default {
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
value(val) {
|
value(val) {
|
||||||
this.setState({ _value: val });
|
const state = { _value: val };
|
||||||
|
this.setState(state);
|
||||||
|
this.prevState = {...this.$data, ...state};
|
||||||
},
|
},
|
||||||
open(val) {
|
open(val) {
|
||||||
this.setState({ _open: val });
|
const state = { _open: val };
|
||||||
|
this.setState(state);
|
||||||
|
this.prevState = {...this.$data, ...state};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
this.prevState = {...this.$data};
|
||||||
|
},
|
||||||
|
updated() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if(!hasProp(this, 'open') && this.prevState._open && !this._open) {
|
||||||
|
this.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
weekDateRender(current) {
|
weekDateRender(current) {
|
||||||
const selectedValue = this.$data._value;
|
const selectedValue = this.$data._value;
|
||||||
const { prefixCls } = this;
|
const { _prefixCls: prefixCls, $scopedSlots } = this;
|
||||||
|
const dateRender = this.dateRender || $scopedSlots.dateRender;
|
||||||
|
const dateNode = dateRender ? dateRender(current) : current.date();
|
||||||
if (
|
if (
|
||||||
selectedValue &&
|
selectedValue &&
|
||||||
current.year() === selectedValue.year() &&
|
current.year() === selectedValue.year() &&
|
||||||
|
@ -68,11 +87,11 @@ export default {
|
||||||
) {
|
) {
|
||||||
return (
|
return (
|
||||||
<div class={`${prefixCls}-selected-day`}>
|
<div class={`${prefixCls}-selected-day`}>
|
||||||
<div class={`${prefixCls}-date`}>{current.date()}</div>
|
<div class={`${prefixCls}-date`}>{dateNode}</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return <div class={`${prefixCls}-date`}>{current.date()}</div>;
|
return <div class={`${prefixCls}-date`}>{dateNode}</div>;
|
||||||
},
|
},
|
||||||
handleChange(value) {
|
handleChange(value) {
|
||||||
if (!hasProp(this, 'value')) {
|
if (!hasProp(this, 'value')) {
|
||||||
|
@ -85,17 +104,19 @@ export default {
|
||||||
this.setState({ _open: open });
|
this.setState({ _open: open });
|
||||||
}
|
}
|
||||||
this.$emit('openChange', open);
|
this.$emit('openChange', open);
|
||||||
|
|
||||||
if (!open) {
|
|
||||||
this.focus();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
clearSelection(e) {
|
clearSelection(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
this.handleChange(null);
|
this.handleChange(null);
|
||||||
},
|
},
|
||||||
|
renderFooter(...args) {
|
||||||
|
const {_prefixCls: prefixCls, $scopedSlots} = this;
|
||||||
|
const renderExtraFooter = this.renderExtraFooter || $scopedSlots.renderExtraFooter;
|
||||||
|
return renderExtraFooter ? (
|
||||||
|
<div class={`${prefixCls}-footer-extra`}>{renderExtraFooter(...args)}</div>
|
||||||
|
) : null;
|
||||||
|
},
|
||||||
focus() {
|
focus() {
|
||||||
this.$refs.input.focus();
|
this.$refs.input.focus();
|
||||||
},
|
},
|
||||||
|
@ -110,7 +131,7 @@ export default {
|
||||||
let suffixIcon = getComponentFromProp(this, 'suffixIcon');
|
let suffixIcon = getComponentFromProp(this, 'suffixIcon');
|
||||||
suffixIcon = Array.isArray(suffixIcon) ? suffixIcon[0] : suffixIcon;
|
suffixIcon = Array.isArray(suffixIcon) ? suffixIcon[0] : suffixIcon;
|
||||||
const {
|
const {
|
||||||
prefixCls,
|
prefixCls: customizePrefixCls,
|
||||||
disabled,
|
disabled,
|
||||||
pickerClass,
|
pickerClass,
|
||||||
popupStyle,
|
popupStyle,
|
||||||
|
@ -124,6 +145,11 @@ export default {
|
||||||
$listeners,
|
$listeners,
|
||||||
$scopedSlots,
|
$scopedSlots,
|
||||||
} = this;
|
} = this;
|
||||||
|
|
||||||
|
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
|
||||||
|
const prefixCls = getPrefixCls('calendar', customizePrefixCls);
|
||||||
|
this._prefixCls = prefixCls;
|
||||||
|
|
||||||
const { _value: pickerValue, _open: open } = $data;
|
const { _value: pickerValue, _open: open } = $data;
|
||||||
const { focus = noop, blur = noop } = $listeners;
|
const { focus = noop, blur = noop } = $listeners;
|
||||||
|
|
||||||
|
@ -143,6 +169,7 @@ export default {
|
||||||
showDateInput={false}
|
showDateInput={false}
|
||||||
showToday={false}
|
showToday={false}
|
||||||
disabledDate={disabledDate}
|
disabledDate={disabledDate}
|
||||||
|
renderFooter={this.renderFooter}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
const clearIcon =
|
const clearIcon =
|
||||||
|
|
|
@ -4,6 +4,7 @@ import MonthCalendar from '../vc-calendar/src/MonthCalendar';
|
||||||
import VcDatePicker from '../vc-calendar/src/Picker';
|
import VcDatePicker from '../vc-calendar/src/Picker';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import Icon from '../icon';
|
import Icon from '../icon';
|
||||||
|
import { ConfigConsumerProps } from '../config-provider';
|
||||||
import interopDefault from '../_util/interopDefault';
|
import interopDefault from '../_util/interopDefault';
|
||||||
import BaseMixin from '../_util/BaseMixin';
|
import BaseMixin from '../_util/BaseMixin';
|
||||||
import {
|
import {
|
||||||
|
@ -23,15 +24,7 @@ import { cloneElement } from '../_util/vnode';
|
||||||
function noop() {}
|
function noop() {}
|
||||||
export default function createPicker(TheCalendar, props) {
|
export default function createPicker(TheCalendar, props) {
|
||||||
return {
|
return {
|
||||||
// static defaultProps = {
|
|
||||||
// prefixCls: 'ant-calendar',
|
|
||||||
// allowClear: true,
|
|
||||||
// showToday: true,
|
|
||||||
// };
|
|
||||||
|
|
||||||
// private input: any;
|
|
||||||
props: initDefaultProps(props, {
|
props: initDefaultProps(props, {
|
||||||
prefixCls: 'ant-calendar',
|
|
||||||
allowClear: true,
|
allowClear: true,
|
||||||
showToday: true,
|
showToday: true,
|
||||||
}),
|
}),
|
||||||
|
@ -40,6 +33,9 @@ export default function createPicker(TheCalendar, props) {
|
||||||
prop: 'value',
|
prop: 'value',
|
||||||
event: 'change',
|
event: 'change',
|
||||||
},
|
},
|
||||||
|
inject: {
|
||||||
|
configProvider: { default: () => ({}) },
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
const value = this.value || this.defaultValue;
|
const value = this.value || this.defaultValue;
|
||||||
if (value && !interopDefault(moment).isMoment(value)) {
|
if (value && !interopDefault(moment).isMoment(value)) {
|
||||||
|
@ -62,6 +58,7 @@ export default function createPicker(TheCalendar, props) {
|
||||||
state.showDate = props.value;
|
state.showDate = props.value;
|
||||||
}
|
}
|
||||||
this.setState(state);
|
this.setState(state);
|
||||||
|
this.prevState = {...this.$data, ...state};
|
||||||
},
|
},
|
||||||
value(val) {
|
value(val) {
|
||||||
const state = {};
|
const state = {};
|
||||||
|
@ -70,11 +67,23 @@ export default function createPicker(TheCalendar, props) {
|
||||||
state.showDate = val;
|
state.showDate = val;
|
||||||
}
|
}
|
||||||
this.setState(state);
|
this.setState(state);
|
||||||
|
this.prevState = {...this.$data, ...state};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
this.prevState = {...this.$data};
|
||||||
|
},
|
||||||
|
updated() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if(!hasProp(this, 'open') && this.prevState._open && !this._open) {
|
||||||
|
this.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
renderFooter(...args) {
|
renderFooter(...args) {
|
||||||
const { prefixCls, $scopedSlots, $slots } = this;
|
const { $scopedSlots, $slots } = this;
|
||||||
|
const { _prefixCls: prefixCls } = this;
|
||||||
const renderExtraFooter =
|
const renderExtraFooter =
|
||||||
this.renderExtraFooter || $scopedSlots.renderExtraFooter || $slots.renderExtraFooter;
|
this.renderExtraFooter || $scopedSlots.renderExtraFooter || $slots.renderExtraFooter;
|
||||||
return renderExtraFooter ? (
|
return renderExtraFooter ? (
|
||||||
|
@ -111,9 +120,6 @@ export default function createPicker(TheCalendar, props) {
|
||||||
this.setState({ _open: open });
|
this.setState({ _open: open });
|
||||||
}
|
}
|
||||||
this.$emit('openChange', open);
|
this.$emit('openChange', open);
|
||||||
if (!open) {
|
|
||||||
this.focus();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
focus() {
|
focus() {
|
||||||
this.$refs.input.focus();
|
this.$refs.input.focus();
|
||||||
|
@ -137,7 +143,12 @@ export default function createPicker(TheCalendar, props) {
|
||||||
suffixIcon = Array.isArray(suffixIcon) ? suffixIcon[0] : suffixIcon;
|
suffixIcon = Array.isArray(suffixIcon) ? suffixIcon[0] : suffixIcon;
|
||||||
const { panelChange = noop, focus = noop, blur = noop, ok = noop } = $listeners;
|
const { panelChange = noop, focus = noop, blur = noop, ok = noop } = $listeners;
|
||||||
const props = getOptionProps(this);
|
const props = getOptionProps(this);
|
||||||
const { prefixCls, locale, localeCode } = props;
|
|
||||||
|
const { prefixCls: customizePrefixCls, locale, localeCode } = props;
|
||||||
|
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
|
||||||
|
const prefixCls = getPrefixCls('calendar', customizePrefixCls);
|
||||||
|
this._prefixCls = prefixCls;
|
||||||
|
|
||||||
const dateRender = props.dateRender || $scopedSlots.dateRender;
|
const dateRender = props.dateRender || $scopedSlots.dateRender;
|
||||||
const monthCellContentRender =
|
const monthCellContentRender =
|
||||||
props.monthCellContentRender || $scopedSlots.monthCellContentRender;
|
props.monthCellContentRender || $scopedSlots.monthCellContentRender;
|
||||||
|
|
|
@ -25,6 +25,7 @@ Determing which panel to show with `mode` and `onPanelChange`.
|
||||||
:value="value"
|
:value="value"
|
||||||
:mode="mode2"
|
:mode="mode2"
|
||||||
@panelChange="handlePanelChange2"
|
@panelChange="handlePanelChange2"
|
||||||
|
@change="handleChange"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -43,7 +44,9 @@ export default {
|
||||||
this.mode1 = 'time'
|
this.mode1 = 'time'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
handleChange(value){
|
||||||
|
this.value = value
|
||||||
|
},
|
||||||
handlePanelChange1(value, mode) {
|
handlePanelChange1(value, mode) {
|
||||||
this.mode1 = mode
|
this.mode1 = mode
|
||||||
},
|
},
|
||||||
|
|
|
@ -14,7 +14,6 @@ This property provide an additional time selection. When `showTime` is an Object
|
||||||
<div>
|
<div>
|
||||||
<a-date-picker
|
<a-date-picker
|
||||||
showTime
|
showTime
|
||||||
format="YYYY-MM-DD HH:mm:ss"
|
|
||||||
placeholder="Select Time"
|
placeholder="Select Time"
|
||||||
@change="onChange"
|
@change="onChange"
|
||||||
@ok="onOk"
|
@ok="onOk"
|
||||||
|
|
|
@ -32,6 +32,7 @@ The following APIs are shared by DatePicker, MonthPicker, RangePicker, WeekPicke
|
||||||
| disabledDate | specify the date that cannot be selected | (currentDate: moment) => boolean | - |
|
| disabledDate | specify the date that cannot be selected | (currentDate: moment) => boolean | - |
|
||||||
| getCalendarContainer | to set the container of the floating layer, while the default is to create a `div` element in `body` | function(trigger) | - |
|
| getCalendarContainer | to set the container of the floating layer, while the default is to create a `div` element in `body` | function(trigger) | - |
|
||||||
| locale | localization configuration | object | [default](https://github.com/vueComponent/ant-design-vue/blob/master/components/date-picker/locale/example.json) |
|
| locale | localization configuration | object | [default](https://github.com/vueComponent/ant-design-vue/blob/master/components/date-picker/locale/example.json) |
|
||||||
|
| mode | picker panel mode | `time|date|month|year` | 'date' |
|
||||||
| open | open state of picker | boolean | - |
|
| open | open state of picker | boolean | - |
|
||||||
| placeholder | placeholder of date input | string\|RangePicker\[] | - |
|
| placeholder | placeholder of date input | string\|RangePicker\[] | - |
|
||||||
| popupStyle | to customize the style of the popup calendar | object | {} |
|
| popupStyle | to customize the style of the popup calendar | object | {} |
|
||||||
|
@ -61,7 +62,7 @@ The following APIs are shared by DatePicker, MonthPicker, RangePicker, WeekPicke
|
||||||
| defaultPickerValue | to set default picker date | [moment](http://momentjs.com/) | - |
|
| defaultPickerValue | to set default picker date | [moment](http://momentjs.com/) | - |
|
||||||
| disabledTime | to specify the time that cannot be selected | function(date) | - |
|
| disabledTime | to specify the time that cannot be selected | function(date) | - |
|
||||||
| format | to set the date format, refer to [moment.js](http://momentjs.com/) | string | "YYYY-MM-DD" |
|
| format | to set the date format, refer to [moment.js](http://momentjs.com/) | string | "YYYY-MM-DD" |
|
||||||
| renderExtraFooter | render extra footer in panel by setting a scoped slot | slot="renderExtraFooter" | - |
|
| renderExtraFooter | render extra footer in panel by setting a scoped slot | slot="renderExtraFooter" slot-scope="mode" | - |
|
||||||
| showTime | to provide an additional time selection | object\|boolean | [TimePicker Options](/components/time-picker/#API) |
|
| showTime | to provide an additional time selection | object\|boolean | [TimePicker Options](/components/time-picker/#API) |
|
||||||
| showTime.defaultValue | to set default time of selected date | [moment](http://momentjs.com/) | moment() |
|
| showTime.defaultValue | to set default time of selected date | [moment](http://momentjs.com/) | moment() |
|
||||||
| showToday | whether to show "Today" button | boolean | true |
|
| showToday | whether to show "Today" button | boolean | true |
|
||||||
|
@ -82,7 +83,7 @@ The following APIs are shared by DatePicker, MonthPicker, RangePicker, WeekPicke
|
||||||
| defaultPickerValue | to set default picker date | [moment](http://momentjs.com/) | - |
|
| defaultPickerValue | to set default picker date | [moment](http://momentjs.com/) | - |
|
||||||
| format | to set the date format. When an array is provided, all values are used for parsing and first value for display. refer to [moment.js](http://momentjs.com/) | string \| string[] | "YYYY-MM" |
|
| format | to set the date format. When an array is provided, all values are used for parsing and first value for display. refer to [moment.js](http://momentjs.com/) | string \| string[] | "YYYY-MM" |
|
||||||
| monthCellContentRender | Custom month cell content render method by setting a scoped slot | slot="monthCellContentRender" slot-scope="date, locale" | - |
|
| monthCellContentRender | Custom month cell content render method by setting a scoped slot | slot="monthCellContentRender" slot-scope="date, locale" | - |
|
||||||
| renderExtraFooter | render extra footer in panel by setting a scoped slot | slot="renderExtraFooter" | - |
|
| renderExtraFooter | render extra footer in panel by setting a scoped slot | slot="renderExtraFooter" slot-scope="mode" | - |
|
||||||
| value(v-model) | to set date | [moment](http://momentjs.com/) | - |
|
| value(v-model) | to set date | [moment](http://momentjs.com/) | - |
|
||||||
|
|
||||||
### MonthPicker Events
|
### MonthPicker Events
|
||||||
|
@ -98,6 +99,7 @@ The following APIs are shared by DatePicker, MonthPicker, RangePicker, WeekPicke
|
||||||
| defaultPickerValue | to set default picker date | [moment](http://momentjs.com/) | - |
|
| defaultPickerValue | to set default picker date | [moment](http://momentjs.com/) | - |
|
||||||
| format | to set the date format, refer to [moment.js](http://momentjs.com/) | string | "YYYY-wo" |
|
| format | to set the date format, refer to [moment.js](http://momentjs.com/) | string | "YYYY-wo" |
|
||||||
| value(v-model) | to set date | [moment](http://momentjs.com/) | - |
|
| value(v-model) | to set date | [moment](http://momentjs.com/) | - |
|
||||||
|
| renderExtraFooter | render extra footer in panel by setting a scoped slot | slot="renderExtraFooter" slot-scope="mode" | - |
|
||||||
|
|
||||||
### WeekPicker Events
|
### WeekPicker Events
|
||||||
| Events Name | Description | Arguments |
|
| Events Name | Description | Arguments |
|
||||||
|
@ -113,7 +115,7 @@ The following APIs are shared by DatePicker, MonthPicker, RangePicker, WeekPicke
|
||||||
| disabledTime | to specify the time that cannot be selected | function(dates: \[moment, moment\], partial: `'start'|'end'`) | - |
|
| disabledTime | to specify the time that cannot be selected | function(dates: \[moment, moment\], partial: `'start'|'end'`) | - |
|
||||||
| format | to set the date format | string | "YYYY-MM-DD HH:mm:ss" |
|
| format | to set the date format | string | "YYYY-MM-DD HH:mm:ss" |
|
||||||
| ranges | preseted ranges for quick selection | { \[range: string]: [moment](http://momentjs.com/)\[] } \| { \[range: string]: () => [moment](http://momentjs.com/)\[] } | - |
|
| ranges | preseted ranges for quick selection | { \[range: string]: [moment](http://momentjs.com/)\[] } \| { \[range: string]: () => [moment](http://momentjs.com/)\[] } | - |
|
||||||
| renderExtraFooter | render extra footer in panel by setting a scoped slot| slot="renderExtraFooter" | - |
|
| renderExtraFooter | render extra footer in panel by setting a scoped slot| slot="renderExtraFooter" slot-scope="mode" | - |
|
||||||
| showTime | to provide an additional time selection | object\|boolean | [TimePicker Options](/components/time-picker/#API) |
|
| showTime | to provide an additional time selection | object\|boolean | [TimePicker Options](/components/time-picker/#API) |
|
||||||
| showTime.defaultValue | to set default time of selected date, [demo](https://ant.design/components/date-picker/#components-date-picker-demo-disabled-date) | [moment](http://momentjs.com/)\[] | \[moment(), moment()] |
|
| showTime.defaultValue | to set default time of selected date, [demo](https://ant.design/components/date-picker/#components-date-picker-demo-disabled-date) | [moment](http://momentjs.com/)\[] | \[moment(), moment()] |
|
||||||
| value(v-model) | to set date | \[[moment](http://momentjs.com/), [moment](http://momentjs.com/)] | - |
|
| value(v-model) | to set date | \[[moment](http://momentjs.com/), [moment](http://momentjs.com/)] | - |
|
||||||
|
|
|
@ -9,18 +9,19 @@ import { DatePickerProps, MonthPickerProps, WeekPickerProps, RangePickerProps }
|
||||||
const DatePicker = wrapPicker(
|
const DatePicker = wrapPicker(
|
||||||
{ ...createPicker(VcCalendar, DatePickerProps()), name: 'ADatePicker' },
|
{ ...createPicker(VcCalendar, DatePickerProps()), name: 'ADatePicker' },
|
||||||
DatePickerProps(),
|
DatePickerProps(),
|
||||||
|
'date'
|
||||||
);
|
);
|
||||||
|
|
||||||
const MonthPicker = wrapPicker(
|
const MonthPicker = wrapPicker(
|
||||||
{ ...createPicker(MonthCalendar, MonthPickerProps()), name: 'AMonthPicker' },
|
{ ...createPicker(MonthCalendar, MonthPickerProps()), name: 'AMonthPicker' },
|
||||||
MonthPickerProps(),
|
MonthPickerProps(),
|
||||||
'YYYY-MM',
|
'month',
|
||||||
);
|
);
|
||||||
|
|
||||||
Object.assign(DatePicker, {
|
Object.assign(DatePicker, {
|
||||||
RangePicker: wrapPicker(RangePicker, RangePickerProps()),
|
RangePicker: wrapPicker(RangePicker, RangePickerProps(), 'date'),
|
||||||
MonthPicker,
|
MonthPicker,
|
||||||
WeekPicker: wrapPicker(WeekPicker, WeekPickerProps(), 'gggg-wo'),
|
WeekPicker: wrapPicker(WeekPicker, WeekPickerProps(), 'week'),
|
||||||
});
|
});
|
||||||
|
|
||||||
/* istanbul ignore next */
|
/* istanbul ignore next */
|
||||||
|
|
|
@ -61,7 +61,8 @@ moment.locale('zh-cn');
|
||||||
| defaultPickerValue | 默认面板日期 | [moment](http://momentjs.com/) | 无 |
|
| defaultPickerValue | 默认面板日期 | [moment](http://momentjs.com/) | 无 |
|
||||||
| disabledTime | 不可选择的时间 | function(date) | 无 |
|
| disabledTime | 不可选择的时间 | function(date) | 无 |
|
||||||
| format | 设置日期格式,为数组时支持多格式匹配,展示以第一个为准。配置参考 [moment.js](http://momentjs.com/) | string \| string[] | "YYYY-MM-DD" |
|
| format | 设置日期格式,为数组时支持多格式匹配,展示以第一个为准。配置参考 [moment.js](http://momentjs.com/) | string \| string[] | "YYYY-MM-DD" |
|
||||||
| renderExtraFooter | 在面板中添加额外的页脚 | slot="renderExtraFooter" | - |
|
| mode | 日期面板的状态 | `time|date|month|year` | 'date' |
|
||||||
|
| renderExtraFooter | 在面板中添加额外的页脚 | slot="renderExtraFooter" slot-scope="mode" | - |
|
||||||
| showTime | 增加时间选择功能 | Object\|boolean | [TimePicker Options](/components/time-picker-cn/#API) |
|
| showTime | 增加时间选择功能 | Object\|boolean | [TimePicker Options](/components/time-picker-cn/#API) |
|
||||||
| showTime.defaultValue | 设置用户选择日期时默认的时分秒 | [moment](http://momentjs.com/) | moment() |
|
| showTime.defaultValue | 设置用户选择日期时默认的时分秒 | [moment](http://momentjs.com/) | moment() |
|
||||||
| showToday | 是否展示“今天”按钮 | boolean | true |
|
| showToday | 是否展示“今天”按钮 | boolean | true |
|
||||||
|
@ -82,7 +83,7 @@ moment.locale('zh-cn');
|
||||||
| defaultPickerValue | 默认面板日期 | [moment](http://momentjs.com/) | 无 |
|
| defaultPickerValue | 默认面板日期 | [moment](http://momentjs.com/) | 无 |
|
||||||
| format | 展示的日期格式,配置参考 [moment.js](http://momentjs.com/) | string | "YYYY-MM" |
|
| format | 展示的日期格式,配置参考 [moment.js](http://momentjs.com/) | string | "YYYY-MM" |
|
||||||
| monthCellContentRender | 自定义的月份内容渲染方法 | slot="monthCellContentRender" slot-scope="date, locale" | - |
|
| monthCellContentRender | 自定义的月份内容渲染方法 | slot="monthCellContentRender" slot-scope="date, locale" | - |
|
||||||
| renderExtraFooter | 在面板中添加额外的页脚 | slot="renderExtraFooter" | - |
|
| renderExtraFooter | 在面板中添加额外的页脚 | slot="renderExtraFooter" slot-scope="mode" | - |
|
||||||
| value(v-model) | 日期 | [moment](http://momentjs.com/) | 无 |
|
| value(v-model) | 日期 | [moment](http://momentjs.com/) | 无 |
|
||||||
|
|
||||||
### MonthPicker事件
|
### MonthPicker事件
|
||||||
|
@ -99,6 +100,7 @@ moment.locale('zh-cn');
|
||||||
| defaultPickerValue | 默认面板日期 | [moment](http://momentjs.com/) | 无 |
|
| defaultPickerValue | 默认面板日期 | [moment](http://momentjs.com/) | 无 |
|
||||||
| format | 展示的日期格式,配置参考 [moment.js](http://momentjs.com/) | string | "YYYY-wo" |
|
| format | 展示的日期格式,配置参考 [moment.js](http://momentjs.com/) | string | "YYYY-wo" |
|
||||||
| value(v-model) | 日期 | [moment](http://momentjs.com/) | - |
|
| value(v-model) | 日期 | [moment](http://momentjs.com/) | - |
|
||||||
|
| renderExtraFooter | 在面板中添加额外的页脚 | slot="renderExtraFooter" slot-scope="mode" | - |
|
||||||
|
|
||||||
### WeekPicker事件
|
### WeekPicker事件
|
||||||
|
|
||||||
|
@ -115,7 +117,7 @@ moment.locale('zh-cn');
|
||||||
| disabledTime | 不可选择的时间 | function(dates: \[moment, moment\], partial: `'start'|'end'`) | 无 |
|
| disabledTime | 不可选择的时间 | function(dates: \[moment, moment\], partial: `'start'|'end'`) | 无 |
|
||||||
| format | 展示的日期格式 | string | "YYYY-MM-DD HH:mm:ss" |
|
| format | 展示的日期格式 | string | "YYYY-MM-DD HH:mm:ss" |
|
||||||
| ranges | 预设时间范围快捷选择 | { \[range: string]: [moment](http://momentjs.com/)\[] } \| { \[range: string]: () => [moment](http://momentjs.com/)\[] } | 无 |
|
| ranges | 预设时间范围快捷选择 | { \[range: string]: [moment](http://momentjs.com/)\[] } \| { \[range: string]: () => [moment](http://momentjs.com/)\[] } | 无 |
|
||||||
| renderExtraFooter | 在面板中添加额外的页脚 | slot="renderExtraFooter" | - |
|
| renderExtraFooter | 在面板中添加额外的页脚 | slot="renderExtraFooter" slot-scope="mode" | - |
|
||||||
| showTime | 增加时间选择功能 | Object\|boolean | [TimePicker Options](/components/time-picker-cn/#API) |
|
| showTime | 增加时间选择功能 | Object\|boolean | [TimePicker Options](/components/time-picker-cn/#API) |
|
||||||
| showTime.defaultValue | 设置用户选择日期时默认的时分秒 | [moment](http://momentjs.com/)\[] | \[moment(), moment()] |
|
| showTime.defaultValue | 设置用户选择日期时默认的时分秒 | [moment](http://momentjs.com/)\[] | \[moment(), moment()] |
|
||||||
| value(v-model) | 日期 | [moment](http://momentjs.com/)\[] | 无 |
|
| value(v-model) | 日期 | [moment](http://momentjs.com/)\[] | 无 |
|
||||||
|
|
|
@ -53,6 +53,7 @@ export const DatePickerProps = () => ({
|
||||||
// onOpenChange?: (status: bool) => void;
|
// onOpenChange?: (status: bool) => void;
|
||||||
// onOk?: (selectedTime: moment.Moment) => void;
|
// onOk?: (selectedTime: moment.Moment) => void;
|
||||||
placeholder: PropTypes.string,
|
placeholder: PropTypes.string,
|
||||||
|
mode: PropTypes.oneOf(['time', 'date', 'month', 'year']),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const MonthPickerProps = () => ({
|
export const MonthPickerProps = () => ({
|
||||||
|
|
|
@ -31,9 +31,5 @@
|
||||||
},
|
},
|
||||||
"timePickerLocale": {
|
"timePickerLocale": {
|
||||||
"placeholder": "Select time"
|
"placeholder": "Select time"
|
||||||
},
|
}
|
||||||
"dateFormat": "YYYY-MM-DD",
|
|
||||||
"dateTimeFormat": "YYYY-MM-DD HH:mm:ss",
|
|
||||||
"weekFormat": "YYYY-wo",
|
|
||||||
"monthFormat": "YYYY-MM"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,21 @@ import LocaleReceiver from '../locale-provider/LocaleReceiver';
|
||||||
import { generateShowHourMinuteSecond } from '../time-picker';
|
import { generateShowHourMinuteSecond } from '../time-picker';
|
||||||
import enUS from './locale/en_US';
|
import enUS from './locale/en_US';
|
||||||
import { getOptionProps, initDefaultProps } from '../_util/props-util';
|
import { getOptionProps, initDefaultProps } from '../_util/props-util';
|
||||||
|
import { ConfigConsumerProps } from '../config-provider';
|
||||||
|
|
||||||
|
const DEFAULT_FORMAT = {
|
||||||
|
date: 'YYYY-MM-DD',
|
||||||
|
dateTime: 'YYYY-MM-DD HH:mm:ss',
|
||||||
|
week: 'gggg-wo',
|
||||||
|
month: 'YYYY-MM',
|
||||||
|
};
|
||||||
|
|
||||||
|
const LOCALE_FORMAT_MAPPING = {
|
||||||
|
date: 'dateFormat',
|
||||||
|
dateTime: 'dateTimeFormat',
|
||||||
|
week: 'weekFormat',
|
||||||
|
month: 'monthFormat',
|
||||||
|
};
|
||||||
|
|
||||||
function getColumns({ showHour, showMinute, showSecond, use12Hours }) {
|
function getColumns({ showHour, showMinute, showSecond, use12Hours }) {
|
||||||
let column = 0;
|
let column = 0;
|
||||||
|
@ -22,22 +37,21 @@ function getColumns({ showHour, showMinute, showSecond, use12Hours }) {
|
||||||
return column;
|
return column;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function wrapPicker(Picker, props, defaultFormat) {
|
export default function wrapPicker(Picker, props, pickerType) {
|
||||||
return {
|
return {
|
||||||
name: Picker.name,
|
name: Picker.name,
|
||||||
props: initDefaultProps(props, {
|
props: initDefaultProps(props, {
|
||||||
format: defaultFormat || 'YYYY-MM-DD',
|
|
||||||
transitionName: 'slide-up',
|
transitionName: 'slide-up',
|
||||||
popupStyle: {},
|
popupStyle: {},
|
||||||
locale: {},
|
locale: {},
|
||||||
prefixCls: 'ant-calendar',
|
|
||||||
inputPrefixCls: 'ant-input',
|
|
||||||
}),
|
}),
|
||||||
model: {
|
model: {
|
||||||
prop: 'value',
|
prop: 'value',
|
||||||
event: 'change',
|
event: 'change',
|
||||||
},
|
},
|
||||||
|
inject: {
|
||||||
|
configProvider: { default: () => ({}) },
|
||||||
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
const { autoFocus, disabled } = this;
|
const { autoFocus, disabled } = this;
|
||||||
if (autoFocus && !disabled) {
|
if (autoFocus && !disabled) {
|
||||||
|
@ -89,7 +103,24 @@ export default function wrapPicker(Picker, props, defaultFormat) {
|
||||||
|
|
||||||
renderPicker(locale, localeCode) {
|
renderPicker(locale, localeCode) {
|
||||||
const props = getOptionProps(this);
|
const props = getOptionProps(this);
|
||||||
const { prefixCls, inputPrefixCls, size, showTime, disabled } = props;
|
const {
|
||||||
|
prefixCls: customizePrefixCls,
|
||||||
|
inputPrefixCls: customizeInputPrefixCls,
|
||||||
|
size,
|
||||||
|
showTime,
|
||||||
|
disabled,
|
||||||
|
format,
|
||||||
|
} = props;
|
||||||
|
const mergedPickerType = showTime ? `${pickerType}Time` : pickerType;
|
||||||
|
const mergedFormat =
|
||||||
|
format ||
|
||||||
|
locale[LOCALE_FORMAT_MAPPING[mergedPickerType]] ||
|
||||||
|
DEFAULT_FORMAT[mergedPickerType];
|
||||||
|
|
||||||
|
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
|
||||||
|
const prefixCls = getPrefixCls('calendar', customizePrefixCls);
|
||||||
|
const inputPrefixCls = getPrefixCls('input', customizeInputPrefixCls);
|
||||||
|
|
||||||
const pickerClass = classNames(`${prefixCls}-picker`, {
|
const pickerClass = classNames(`${prefixCls}-picker`, {
|
||||||
[`${prefixCls}-picker-${size}`]: !!size,
|
[`${prefixCls}-picker-${size}`]: !!size,
|
||||||
});
|
});
|
||||||
|
@ -121,6 +152,7 @@ export default function wrapPicker(Picker, props, defaultFormat) {
|
||||||
const pickerProps = {
|
const pickerProps = {
|
||||||
props: {
|
props: {
|
||||||
...props,
|
...props,
|
||||||
|
format: mergedFormat,
|
||||||
pickerClass,
|
pickerClass,
|
||||||
pickerInputClass,
|
pickerInputClass,
|
||||||
locale,
|
locale,
|
||||||
|
|
|
@ -23,7 +23,7 @@ export default {
|
||||||
for (let i = 0; i < 3; i += 1) {
|
for (let i = 0; i < 3; i += 1) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.$confirm({
|
this.$confirm({
|
||||||
content: ( // JSX support
|
content: (
|
||||||
<Button onClick={this.destroyAll}>
|
<Button onClick={this.destroyAll}>
|
||||||
Click to destroy all
|
Click to destroy all
|
||||||
</Button>
|
</Button>
|
||||||
|
|
Loading…
Reference in New Issue