DateTimePicker: enable default-time attribute in date picker (#10321)

pull/10503/head
RickMacTurk 2018-04-01 22:55:49 -05:00 committed by 杨奕
parent cdb7a34136
commit 528bce4479
5 changed files with 68 additions and 30 deletions

View File

@ -53,10 +53,11 @@
}, },
value1: '', value1: '',
value2: '', value2: '',
value3: new Date(), value3: '',
value4: '', value4: new Date(),
value5: '', value5: '',
value6: '' value6: '',
value7: ''
}; };
} }
}; };
@ -117,6 +118,15 @@ DateTimePicker is derived from DatePicker and TimePicker. For a more detailed ex
:picker-options="pickerOptions1"> :picker-options="pickerOptions1">
</el-date-picker> </el-date-picker>
</div> </div>
<div class="block">
<span class="demonstration">With default time</span>
<el-date-picker
v-model="value3"
type="datetime"
placeholder="Select date and time"
default-time="12:00:00">
</el-date-picker>
</div>
</template> </template>
<script> <script>
@ -146,7 +156,8 @@ DateTimePicker is derived from DatePicker and TimePicker. For a more detailed ex
}] }]
}, },
value1: '', value1: '',
value2: '' value2: '',
value3: ''
}; };
} }
}; };
@ -163,7 +174,7 @@ DateTimePicker is derived from DatePicker and TimePicker. For a more detailed ex
<div class="block"> <div class="block">
<span class="demonstration">Default</span> <span class="demonstration">Default</span>
<el-date-picker <el-date-picker
v-model="value3" v-model="value4"
type="datetimerange" type="datetimerange"
range-separator="To" range-separator="To"
start-placeholder="Start date" start-placeholder="Start date"
@ -173,7 +184,7 @@ DateTimePicker is derived from DatePicker and TimePicker. For a more detailed ex
<div class="block"> <div class="block">
<span class="demonstration">With shortcuts</span> <span class="demonstration">With shortcuts</span>
<el-date-picker <el-date-picker
v-model="value4" v-model="value5"
type="datetimerange" type="datetimerange"
:picker-options="pickerOptions2" :picker-options="pickerOptions2"
range-separator="To" range-separator="To"
@ -215,8 +226,8 @@ DateTimePicker is derived from DatePicker and TimePicker. For a more detailed ex
} }
}] }]
}, },
value3: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)], value4: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)],
value4: '' value5: ''
}; };
} }
}; };
@ -232,7 +243,7 @@ DateTimePicker is derived from DatePicker and TimePicker. For a more detailed ex
<div class="block"> <div class="block">
<span class="demonstration">Start date time 12:00:00</span> <span class="demonstration">Start date time 12:00:00</span>
<el-date-picker <el-date-picker
v-model="value5" v-model="value6"
type="datetimerange" type="datetimerange"
start-placeholder="Start Date" start-placeholder="Start Date"
end-placeholder="End Date" end-placeholder="End Date"
@ -242,7 +253,7 @@ DateTimePicker is derived from DatePicker and TimePicker. For a more detailed ex
<div class="block"> <div class="block">
<span class="demonstration">Start date time 12:00:00, end date time 08:00:00</span> <span class="demonstration">Start date time 12:00:00, end date time 08:00:00</span>
<el-date-picker <el-date-picker
v-model="value6" v-model="value7"
type="datetimerange" type="datetimerange"
align="right" align="right"
start-placeholder="Start Date" start-placeholder="Start Date"
@ -256,8 +267,8 @@ DateTimePicker is derived from DatePicker and TimePicker. For a more detailed ex
export default { export default {
data() { data() {
return { return {
value5: '', value6: '',
value6: '' value7: ''
}; };
} }
}; };

View File

@ -190,6 +190,7 @@
isDate, isDate,
modifyDate, modifyDate,
modifyTime, modifyTime,
modifyWithDefaultTime,
prevYear, prevYear,
nextYear, nextYear,
prevMonth, prevMonth,
@ -218,19 +219,6 @@
} }
}; };
const modifyWithGivenTime = (date, time) => {
if (date == null || time == null) {
return date;
}
time = parseDate(time, 'HH:mm:ss');
return modifyTime(
date,
time.getHours(),
time.getMinutes(),
time.getSeconds()
);
};
export default { export default {
mixins: [Locale], mixins: [Locale],
@ -510,8 +498,8 @@
handleRangePick(val, close = true) { handleRangePick(val, close = true) {
const defaultTime = this.defaultTime || []; const defaultTime = this.defaultTime || [];
const minDate = modifyWithGivenTime(val.minDate, defaultTime[0]); const minDate = modifyWithDefaultTime(val.minDate, defaultTime[0]);
const maxDate = modifyWithGivenTime(val.maxDate, defaultTime[1]); const maxDate = modifyWithDefaultTime(val.maxDate, defaultTime[1]);
if (this.maxDate === maxDate && this.minDate === minDate) { if (this.maxDate === maxDate && this.minDate === minDate) {
return; return;

View File

@ -147,6 +147,7 @@
isDate, isDate,
modifyDate, modifyDate,
modifyTime, modifyTime,
modifyWithDefaultTime,
clearMilliseconds, clearMilliseconds,
clearTime, clearTime,
prevYear, prevYear,
@ -293,7 +294,7 @@
handleTimePick(value, visible, first) { handleTimePick(value, visible, first) {
if (isDate(value)) { if (isDate(value)) {
const newDate = modifyTime(this.date, value.getHours(), value.getMinutes(), value.getSeconds()); const newDate = this.value ? modifyTime(this.date, value.getHours(), value.getMinutes(), value.getSeconds()) : modifyWithDefaultTime(value, this.defaultTime);
this.date = newDate; this.date = newDate;
this.emit(this.date, true); this.emit(this.date, true);
} else { } else {
@ -318,7 +319,7 @@
handleDatePick(value) { handleDatePick(value) {
if (this.selectionMode === 'day') { if (this.selectionMode === 'day') {
this.date = modifyDate(this.date, value.getFullYear(), value.getMonth(), value.getDate()); this.date = this.value ? modifyDate(this.date, value.getFullYear(), value.getMonth(), value.getDate()) : modifyWithDefaultTime(value, this.defaultTime);
this.emit(this.date, this.showTime); this.emit(this.date, this.showTime);
} else if (this.selectionMode === 'week') { } else if (this.selectionMode === 'week') {
this.emit(value.date); this.emit(value.date);
@ -347,7 +348,8 @@
}, },
confirm() { confirm() {
this.emit(this.date); const date = this.value ? this.date : modifyWithDefaultTime(this.date, this.defaultTime);
this.emit(date);
}, },
resetView() { resetView() {
@ -458,6 +460,7 @@
date: new Date(), date: new Date(),
value: '', value: '',
defaultValue: null, defaultValue: null,
defaultTime: null,
showTime: false, showTime: false,
selectionMode: 'day', selectionMode: 'day',
shortcuts: '', shortcuts: '',

View File

@ -142,6 +142,14 @@ export const modifyTime = function(date, h, m, s) {
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), h, m, s, date.getMilliseconds()); return new Date(date.getFullYear(), date.getMonth(), date.getDate(), h, m, s, date.getMilliseconds());
}; };
export const modifyWithDefaultTime = (date, time) => {
if (date == null || !time) {
return date;
}
time = parseDate(time, 'HH:mm:ss');
return modifyTime(date, time.getHours(), time.getMinutes(), time.getSeconds());
};
export const clearTime = function(date) { export const clearTime = function(date) {
return new Date(date.getFullYear(), date.getMonth(), date.getDate()); return new Date(date.getFullYear(), date.getMonth(), date.getDate());
}; };

View File

@ -261,6 +261,34 @@ describe('DatePicker', () => {
}, DELAY); }, DELAY);
}); });
it('select datetime with defaultTime', done => {
vm = createVue({
template: `
<el-date-picker ref="compo" type="datetime" v-model="value" default-time="12:00:00"></el-date-picker>
`,
data() {
return {
value: ''
};
}
}, true);
const input = vm.$el.querySelector('input');
input.blur();
input.focus();
setTimeout(_ => {
const picker = vm.$refs.compo.picker;
picker.$el.querySelector('td.available + td.today').click();
setTimeout(_ => {
const date = vm.$refs.compo.picker.date;
expect(date.getHours()).to.equal(12);
expect(date.getMinutes()).to.equal(0);
expect(date.getSeconds()).to.equal(0);
done();
}, DELAY);
}, DELAY);
});
describe('input event', () => { describe('input event', () => {
// mimic standard <select>'s behavior // mimic standard <select>'s behavior
// emit input if and only if value changes // emit input if and only if value changes