因为后台管理系统中经常会用到DatePicker 来作为常规查询条件中的时间范围,录入单据的创建时间范围,为了追加默认选项和一些常规配置例如:defalutTime来保证查询的时间范围是可以到指定日期之内的,快捷时间范围选项(一周内/一个月/三个月/半年/一年)等,为了将这些相关默认选项进行封装,将DatePicker组件进行默认封装,后续相关程序就可以大量减少代码。
封装如下:
<template>
<el-date-picker
v-model="timevalue1"
:picker-options="pickerOptions"
type="daterange"
placeholder="选择日期时间"
align="right"
@change="changeTime"/>
</template>
<script>
export default {
name: 'd2DateTimePicker',
model: {
prop: 'timevalue',
event: 'change'
},
props: {
timevalue: {
type: Array,
required: true,
default: () => {
return []
}
}
},
data() {
return {
timevalue1: [new Date(), new Date(2021, 10, 11)],
pickerOptions: {
shortcuts: [{
text: '最近一周',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
picker.$emit('pick', [start, end])
}
}, {
text: '最近一个月',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
picker.$emit('pick', [start, end])
}
}, {
text: '最近三个月',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
picker.$emit('pick', [start, end])
}
}]
}
}
},
watch: {
timevalue: {
immediate: true,
// console.log(val, 'time')
handler(val) {
if (val.length > 0) {
this.timevalue1 = val
}
this.$emit('change', val)
}
},
timevalue1: {
immediate: true,
// console.log(val, 'time')
handler(newVal) {
this.$emit('change', newVal)
}
}
},
methods: {
changeTime(val) {
// var oval = this.moment(val).format('YYYY-MM-DD HH:mm:ss')
// console.log(val)
this.$emit('change', val)
}
}
}
</script>
外部使用示例:
<d2-date-time-picker v-model="searchDateRange" />
import d2DateTimePicker from './d2DateTimePicker'
export default {
name: 'HelloWorld',
components: {
d2DateTimePicker
},
data() {
return {
searchDateRange: [],
}
},