210 lines
5.6 KiB
JavaScript
210 lines
5.6 KiB
JavaScript
import DateTimePicker from '../dateTimePicker/index.vue';
|
||
import DateUtil from '../dateTimePicker/dateUtil';
|
||
import { DATE_TYPES } from '../dateTimePicker/constant';
|
||
|
||
export default {
|
||
components: {
|
||
DateTimePicker
|
||
},
|
||
data() {
|
||
return {
|
||
showStartDatePicker: false,
|
||
showEndDatePicker: false,
|
||
startDate: '',
|
||
endDate: '',
|
||
activeDate: 'startDate' // 正在处理哪一个日期值,startDate/endDate
|
||
};
|
||
},
|
||
props: {
|
||
// 日期筛选模式,1:年月日(默认),2:年月,3:年,4:年月日时分秒,5:时分秒,6:时分
|
||
mode: {
|
||
type: Number,
|
||
default: DATE_TYPES.YMD
|
||
},
|
||
// 默认开始日期
|
||
defaultStartDate: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
// 默认结束日期
|
||
defaultEndDate: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
// 可选的最小日期
|
||
minDate: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
// 可选的最大日期
|
||
maxDate: {
|
||
type: String,
|
||
default: ''
|
||
}
|
||
},
|
||
watch: {
|
||
mode() {
|
||
// 筛选模式更换时清空一下数据
|
||
this.resetData();
|
||
},
|
||
startDate() {
|
||
this.$emit('onChange', {
|
||
startDate: this.startDate,
|
||
endDate: this.endDate
|
||
});
|
||
},
|
||
endDate() {
|
||
this.$emit('onChange', {
|
||
startDate: this.startDate,
|
||
endDate: this.endDate
|
||
});
|
||
},
|
||
defaultStartDate: {
|
||
handler(defaultStartDate) {
|
||
if (!defaultStartDate) {
|
||
return;
|
||
}
|
||
|
||
if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) {
|
||
console.error('时分秒/时分模式不支持设置默认开始时间');
|
||
return;
|
||
}
|
||
|
||
if (DateUtil.isBefore(defaultStartDate, this.minDate)) {
|
||
console.warn(
|
||
`默认开始日期不可小于最小可选日期,已把默认开始日期设为最小可选日期。默认开始日期:${defaultStartDate},最小可选日期:${this.minDate}`
|
||
);
|
||
this.startDate = this.getModeFormatDateString(this.minDate);
|
||
} else {
|
||
this.startDate = this.getModeFormatDateString(defaultStartDate);
|
||
}
|
||
},
|
||
immediate: true
|
||
},
|
||
defaultEndDate: {
|
||
handler(defaultEndDate) {
|
||
if (!defaultEndDate) {
|
||
return;
|
||
}
|
||
|
||
if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) {
|
||
console.error('时分秒/时分模式不支持设置默认结束时间');
|
||
return;
|
||
}
|
||
|
||
if (DateUtil.isAfter(defaultEndDate, this.maxDate)) {
|
||
console.warn(
|
||
`默认结束日期不可大于最大可选日期,已把默认结束日期设为最大可选日期。默认结束日期:${defaultEndDate},最大可选日期:${this.maxDate}`
|
||
);
|
||
this.endDate = this.getModeFormatDateString(this.maxDate);
|
||
} else {
|
||
this.endDate = this.getModeFormatDateString(defaultEndDate);
|
||
}
|
||
},
|
||
immediate: true
|
||
},
|
||
minDate(val) {
|
||
if ((val && this.mode == DATE_TYPES.HMS) || this.mode == DATE_TYPES.HM) {
|
||
console.error('时分秒/时分模式不支持设置最小可选时间');
|
||
return;
|
||
}
|
||
},
|
||
maxDate(val) {
|
||
if ((val && this.mode == DATE_TYPES.HMS) || this.mode == DATE_TYPES.HM) {
|
||
console.error('时分秒/时分模式不支持设置最大可选时间');
|
||
return;
|
||
}
|
||
}
|
||
},
|
||
methods: {
|
||
onTapStartDate() {
|
||
this.showEndDatePicker = false;
|
||
if (!this.startDate) {
|
||
this.startDate = this.getModeFormatDateString(new Date());
|
||
}
|
||
this.activeDate = 'startDate';
|
||
this.showStartDatePicker = true;
|
||
},
|
||
onTapEndDate() {
|
||
this.showStartDatePicker = false;
|
||
if (!this.endDate) {
|
||
this.endDate = this.startDate;
|
||
}
|
||
this.activeDate = 'endDate';
|
||
this.showEndDatePicker = true;
|
||
},
|
||
onChangeStartDate(date) {
|
||
this.startDate = date;
|
||
},
|
||
onChangeEndDate(date) {
|
||
this.endDate = date;
|
||
},
|
||
validateInput() {
|
||
if (!this.startDate) {
|
||
uni.showToast({
|
||
title: '请选择开始时间',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
} else if (!this.endDate) {
|
||
uni.showToast({
|
||
title: '请选择结束时间',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
} else if (DateUtil.isAfter(this.startDate, this.endDate)) {
|
||
uni.showToast({
|
||
title: '结束时间不能小于开始时间',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
return true;
|
||
},
|
||
onCancel() {
|
||
this.resetData();
|
||
},
|
||
onConfirm() {
|
||
if (this.validateInput()) {
|
||
this.$emit('onSubmit', {
|
||
startDate: this.startDate,
|
||
endDate: this.endDate
|
||
});
|
||
this.showStartDatePicker = false;
|
||
this.showEndDatePicker = false;
|
||
}
|
||
},
|
||
resetData() {
|
||
this.startDate = '';
|
||
this.endDate = '';
|
||
this.activeDate = 'startDate';
|
||
this.showStartDatePicker = false;
|
||
this.showEndDatePicker = false;
|
||
},
|
||
// 返回对应日期模式的时间字符串
|
||
getModeFormatDateString(date) {
|
||
let fmt = 'YYYY-MM-DD';
|
||
switch (this.mode) {
|
||
case DATE_TYPES.YM:
|
||
fmt = 'YYYY-MM';
|
||
break;
|
||
case DATE_TYPES.Y:
|
||
fmt = 'YYYY';
|
||
break;
|
||
case DATE_TYPES['YMD-HMS']:
|
||
fmt = 'YYYY-MM-DD HH:mm:ss';
|
||
break;
|
||
case DATE_TYPES.HMS:
|
||
fmt = 'HH:mm:ss';
|
||
break;
|
||
case DATE_TYPES.HM:
|
||
fmt = 'HH:mm';
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
return DateUtil.formatDate(date, fmt);
|
||
}
|
||
}
|
||
};
|