因為后台管理系統中經常會用到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: [],
}
},
