mirror of https://github.com/ElemeFE/element
parent
d37e0dbd39
commit
1208ef520c
|
@ -273,16 +273,16 @@
|
||||||
this.minDate = null;
|
this.minDate = null;
|
||||||
this.maxDate = null;
|
this.maxDate = null;
|
||||||
} else if (Array.isArray(newVal)) {
|
} else if (Array.isArray(newVal)) {
|
||||||
this.minDate = toDate(newVal[0]);
|
this.minDate = newVal[0] ? toDate(newVal[0]) : null;
|
||||||
this.maxDate = toDate(newVal[1]);
|
this.maxDate = newVal[1] ? toDate(newVal[1]) : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
handleClear() {
|
handleClear() {
|
||||||
this.minDate = '';
|
this.minDate = null;
|
||||||
this.maxDate = '';
|
this.maxDate = null;
|
||||||
this.handleConfirm();
|
this.handleConfirm();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -183,6 +183,7 @@
|
||||||
methods: {
|
methods: {
|
||||||
handleClear() {
|
handleClear() {
|
||||||
this.date = new Date();
|
this.date = new Date();
|
||||||
|
this.$emit('pick');
|
||||||
},
|
},
|
||||||
|
|
||||||
resetDate() {
|
resetDate() {
|
||||||
|
|
|
@ -127,6 +127,10 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
handleClear() {
|
||||||
|
this.handleCancel();
|
||||||
|
},
|
||||||
|
|
||||||
handleCancel() {
|
handleCancel() {
|
||||||
this.$emit('pick');
|
this.$emit('pick');
|
||||||
},
|
},
|
||||||
|
|
|
@ -81,6 +81,10 @@
|
||||||
if (!item.disabled) {
|
if (!item.disabled) {
|
||||||
this.$emit('pick', item.value);
|
this.$emit('pick', item.value);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
handleClear() {
|
||||||
|
this.$emit('pick');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -100,8 +100,12 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
handleClear() {
|
||||||
|
this.handleCancel();
|
||||||
|
},
|
||||||
|
|
||||||
handleCancel() {
|
handleCancel() {
|
||||||
this.$emit('pick', null);
|
this.$emit('pick');
|
||||||
},
|
},
|
||||||
|
|
||||||
handleChange(date) {
|
handleChange(date) {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
:class="{
|
:class="{
|
||||||
'is-have-trigger': haveTrigger,
|
'is-have-trigger': haveTrigger,
|
||||||
'is-active': pickerVisible,
|
'is-active': pickerVisible,
|
||||||
'is-filled': !!this.value
|
'is-filled': !!this.internalValue
|
||||||
}">
|
}">
|
||||||
|
|
||||||
<input
|
<input
|
||||||
|
@ -22,9 +22,11 @@
|
||||||
v-model.lazy="visualValue" />
|
v-model.lazy="visualValue" />
|
||||||
|
|
||||||
<span
|
<span
|
||||||
@click="pickerVisible = !pickerVisible"
|
@click.stop="handleClickIcon"
|
||||||
class="el-date-editor__trigger el-icon"
|
class="el-date-editor__trigger el-icon"
|
||||||
:class="[triggerClass]"
|
:class="[showClose ? 'el-icon-close' : triggerClass]"
|
||||||
|
@mouseenter="handleMouseEnterIcon"
|
||||||
|
@mouseleave="showClose = false"
|
||||||
v-if="haveTrigger">
|
v-if="haveTrigger">
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
@ -219,7 +221,9 @@ export default {
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
pickerVisible: false
|
pickerVisible: false,
|
||||||
|
showClose: false,
|
||||||
|
internalValue: ''
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -228,15 +232,37 @@ export default {
|
||||||
if (this.readonly || this.disabled) return;
|
if (this.readonly || this.disabled) return;
|
||||||
val ? this.showPicker() : this.hidePicker();
|
val ? this.showPicker() : this.hidePicker();
|
||||||
},
|
},
|
||||||
value(val) {
|
internalValue(val) {
|
||||||
if (!val && this.picker && typeof this.picker.handleClear === 'function') {
|
if (!val && this.picker && typeof this.picker.handleClear === 'function') {
|
||||||
this.picker.handleClear();
|
this.picker.handleClear();
|
||||||
}
|
}
|
||||||
this.dispatch('form-item', 'el.form.change');
|
this.dispatch('form-item', 'el.form.change');
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
immediate: true,
|
||||||
|
handler(val) {
|
||||||
|
this.internalValue = val;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
|
valueIsEmpty() {
|
||||||
|
const val = this.internalValue;
|
||||||
|
if (Array.isArray(val)) {
|
||||||
|
for (let i = 0, j = val.length; i < j; i++) {
|
||||||
|
if (val[i]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (val) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
triggerClass() {
|
triggerClass() {
|
||||||
return this.type.indexOf('time') !== -1 ? 'el-icon-time' : 'el-icon-date';
|
return this.type.indexOf('time') !== -1 ? 'el-icon-time' : 'el-icon-date';
|
||||||
},
|
},
|
||||||
|
@ -262,7 +288,7 @@ export default {
|
||||||
|
|
||||||
visualValue: {
|
visualValue: {
|
||||||
get() {
|
get() {
|
||||||
const value = this.value;
|
const value = this.internalValue;
|
||||||
const formatter = (
|
const formatter = (
|
||||||
TYPE_VALUE_RESOLVER_MAP[this.type] ||
|
TYPE_VALUE_RESOLVER_MAP[this.type] ||
|
||||||
TYPE_VALUE_RESOLVER_MAP['default']
|
TYPE_VALUE_RESOLVER_MAP['default']
|
||||||
|
@ -301,6 +327,20 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
handleMouseEnterIcon() {
|
||||||
|
if (!this.valueIsEmpty) {
|
||||||
|
this.showClose = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
handleClickIcon() {
|
||||||
|
if (this.valueIsEmpty) {
|
||||||
|
this.pickerVisible = !this.pickerVisible;
|
||||||
|
} else {
|
||||||
|
this.internalValue = '';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
handleClose() {
|
handleClose() {
|
||||||
this.pickerVisible = false;
|
this.pickerVisible = false;
|
||||||
},
|
},
|
||||||
|
@ -370,7 +410,7 @@ export default {
|
||||||
|
|
||||||
showPicker() {
|
showPicker() {
|
||||||
if (!this.picker) {
|
if (!this.picker) {
|
||||||
this.panel.defaultValue = this.value;
|
this.panel.defaultValue = this.internalValue;
|
||||||
this.picker = new Vue(this.panel).$mount(document.createElement('div'));
|
this.picker = new Vue(this.panel).$mount(document.createElement('div'));
|
||||||
this.popperElm = this.picker.$el;
|
this.popperElm = this.picker.$el;
|
||||||
this.picker.width = this.$refs.reference.getBoundingClientRect().width;
|
this.picker.width = this.$refs.reference.getBoundingClientRect().width;
|
||||||
|
@ -412,10 +452,7 @@ export default {
|
||||||
this.picker.$on('dodestroy', this.doDestroy);
|
this.picker.$on('dodestroy', this.doDestroy);
|
||||||
this.picker.$on('pick', (date, visible = false) => {
|
this.picker.$on('pick', (date, visible = false) => {
|
||||||
this.$emit('input', date);
|
this.$emit('input', date);
|
||||||
|
this.pickerVisible = this.picker.visible = visible;
|
||||||
if (!visible) {
|
|
||||||
this.pickerVisible = this.picker.visible = !this.picker.visible;
|
|
||||||
}
|
|
||||||
this.picker.resetView && this.picker.resetView();
|
this.picker.resetView && this.picker.resetView();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -431,11 +468,11 @@ export default {
|
||||||
|
|
||||||
this.updatePopper();
|
this.updatePopper();
|
||||||
|
|
||||||
if (this.value instanceof Date) {
|
if (this.internalValue instanceof Date) {
|
||||||
this.picker.date = new Date(this.value.getTime());
|
this.picker.date = new Date(this.internalValue.getTime());
|
||||||
this.picker.resetView && this.picker.resetView();
|
this.picker.resetView && this.picker.resetView();
|
||||||
} else {
|
} else {
|
||||||
this.picker.value = this.value;
|
this.picker.value = this.internalValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
|
|
|
@ -66,6 +66,31 @@ describe('DatePicker', () => {
|
||||||
}, DELAY);
|
}, DELAY);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('clear value', done => {
|
||||||
|
vm = createVue({
|
||||||
|
template: `
|
||||||
|
<el-date-picker v-model="value" ref="compo"></el-date-picker>
|
||||||
|
`,
|
||||||
|
data() {
|
||||||
|
return { value: '' };
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
const input = vm.$el.querySelector('input');
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
setTimeout(_ => {
|
||||||
|
const $el = vm.$refs.compo.picker.$el;
|
||||||
|
$el.querySelector('td.available').click();
|
||||||
|
vm.$nextTick(_ => {
|
||||||
|
vm.$el.querySelector('.el-date-editor__trigger').click();
|
||||||
|
setTimeout(_ => {
|
||||||
|
expect(vm.value).to.empty;
|
||||||
|
done();
|
||||||
|
}, DELAY);
|
||||||
|
});
|
||||||
|
}, DELAY);
|
||||||
|
});
|
||||||
|
|
||||||
it('reset', done => {
|
it('reset', done => {
|
||||||
vm = createVue({
|
vm = createVue({
|
||||||
template: `
|
template: `
|
||||||
|
@ -218,7 +243,6 @@ describe('DatePicker', () => {
|
||||||
it('click now button', done => {
|
it('click now button', done => {
|
||||||
const date = new Date(1999, 10, 10, 10, 10);
|
const date = new Date(1999, 10, 10, 10, 10);
|
||||||
|
|
||||||
vm.picker.date = new Date(date);
|
|
||||||
vm.picker.$el.querySelector('.el-picker-panel__link-btn').click();
|
vm.picker.$el.querySelector('.el-picker-panel__link-btn').click();
|
||||||
setTimeout(_ => {
|
setTimeout(_ => {
|
||||||
expect(vm.picker.date > date).to.true;
|
expect(vm.picker.date > date).to.true;
|
||||||
|
@ -228,14 +252,12 @@ describe('DatePicker', () => {
|
||||||
|
|
||||||
it('click timepicker', done => {
|
it('click timepicker', done => {
|
||||||
const input = vm.picker.$el.querySelectorAll('.el-date-picker__editor-wrap input')[1];
|
const input = vm.picker.$el.querySelectorAll('.el-date-picker__editor-wrap input')[1];
|
||||||
input.blur();
|
triggerEvent(input, 'focus');
|
||||||
input.focus();
|
|
||||||
input.blur();
|
|
||||||
|
|
||||||
setTimeout(_ => {
|
setTimeout(_ => {
|
||||||
expect(vm.picker.$el.querySelector('.el-time-panel')).to.have.deep.property('style.display').to.equal('');
|
expect(vm.picker.$el.querySelector('.el-time-panel')).to.have.deep.property('style.display').to.equal('');
|
||||||
done();
|
done();
|
||||||
}, 400);
|
}, DELAY);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('input timepicker', done => {
|
it('input timepicker', done => {
|
||||||
|
@ -391,7 +413,7 @@ describe('DatePicker', () => {
|
||||||
setTimeout(_ => {
|
setTimeout(_ => {
|
||||||
expect(vm.picker.$el.querySelector('.el-date-range-picker__time-picker-wrap .el-time-panel')).to.have.deep.property('style.display').to.equal('');
|
expect(vm.picker.$el.querySelector('.el-date-range-picker__time-picker-wrap .el-time-panel')).to.have.deep.property('style.display').to.equal('');
|
||||||
done();
|
done();
|
||||||
}, 400);
|
}, DELAY);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('click timepicker in right', done => {
|
it('click timepicker in right', done => {
|
||||||
|
@ -403,7 +425,7 @@ describe('DatePicker', () => {
|
||||||
setTimeout(_ => {
|
setTimeout(_ => {
|
||||||
expect(vm.picker.$el.querySelectorAll('.el-date-range-picker__time-picker-wrap .el-time-panel')[1]).to.have.deep.property('style.display').to.equal('');
|
expect(vm.picker.$el.querySelectorAll('.el-date-range-picker__time-picker-wrap .el-time-panel')[1]).to.have.deep.property('style.display').to.equal('');
|
||||||
done();
|
done();
|
||||||
}, 400);
|
}, DELAY);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('input timepicker', done => {
|
it('input timepicker', done => {
|
||||||
|
|
Loading…
Reference in New Issue