105 lines
2.6 KiB
Vue
105 lines
2.6 KiB
Vue
|
|
<template>
|
|||
|
|
<!-- 日 月 年 时间选择控件封装 -->
|
|||
|
|
<div class="datetimepicker">
|
|||
|
|
<el-select v-model="selectType" @change="dateTypeSelectChange" placeholder="请选择" style="width:65px;">
|
|||
|
|
<el-option label="日" value="1"></el-option>
|
|||
|
|
<el-option label="月" value="2"></el-option>
|
|||
|
|
<el-option label="年" value="3"></el-option>
|
|||
|
|
</el-select>
|
|||
|
|
|
|||
|
|
<el-date-picker
|
|||
|
|
v-if="selectType === '1'"
|
|||
|
|
format="yyyy-MM-dd"
|
|||
|
|
value-format="yyyy-MM-dd"
|
|||
|
|
v-model="listQuery.day"
|
|||
|
|
@change="dayChange"
|
|||
|
|
type="date"
|
|||
|
|
placeholder="选择日"
|
|||
|
|
></el-date-picker>
|
|||
|
|
|
|||
|
|
<el-date-picker
|
|||
|
|
v-if="selectType === '2'"
|
|||
|
|
v-model="listQuery.month"
|
|||
|
|
type="month"
|
|||
|
|
format="yyyy-MM"
|
|||
|
|
value-format="yyyy-MM"
|
|||
|
|
:editable="false"
|
|||
|
|
@change="monthChange"
|
|||
|
|
placeholder="选择月"
|
|||
|
|
></el-date-picker>
|
|||
|
|
|
|||
|
|
<el-date-picker
|
|||
|
|
v-if="selectType === '3'"
|
|||
|
|
v-model="listQuery.year"
|
|||
|
|
type="year"
|
|||
|
|
format="yyyy"
|
|||
|
|
value-format="yyyy"
|
|||
|
|
:editable="false"
|
|||
|
|
@change="yearChange"
|
|||
|
|
placeholder="选择年"
|
|||
|
|
></el-date-picker>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
export default {
|
|||
|
|
name: "CustomDatePicker",
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
selectType: '1', // 时间选择器当前的日期单位
|
|||
|
|
listQuery: { // 绑定事件选择器当前的value
|
|||
|
|
day: '',
|
|||
|
|
month: '',
|
|||
|
|
year: ''
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
props: {
|
|||
|
|
value: String
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
dateTypeSelectChange(val) {
|
|||
|
|
this.selectType = val
|
|||
|
|
this.listQuery.day = ''
|
|||
|
|
this.listQuery.month = ''
|
|||
|
|
this.listQuery.year = ''
|
|||
|
|
this.$emit('input', '')
|
|||
|
|
this.$emit('datetimeChange', '')
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
dayChange(val) {
|
|||
|
|
val = val || ''
|
|||
|
|
// 通信方式一
|
|||
|
|
// 父组件通过v-model传递值给子组件时,会自动传递一个value的prop属性,在子组件中通过this.$emit('input',val)自动修改父组件中v-model绑定的值
|
|||
|
|
this.$emit('input', val)
|
|||
|
|
// 通信方式二:子组件中的日期改变时,触发父组件中绑定的datetimeChange自定义事件
|
|||
|
|
this.$emit('datetimeChange', val)
|
|||
|
|
},
|
|||
|
|
monthChange(val) {
|
|||
|
|
val = val || ''
|
|||
|
|
this.$emit('input', val)
|
|||
|
|
this.$emit('datetimeChange', val)
|
|||
|
|
},
|
|||
|
|
yearChange(val) {
|
|||
|
|
val = val || ''
|
|||
|
|
this.$emit('input', val)
|
|||
|
|
this.$emit('datetimeChange', val)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.datetimepicker {
|
|||
|
|
width: 300px;
|
|||
|
|
.el-select .el-input__inner {
|
|||
|
|
border-radius: 4px 0 0 4px;
|
|||
|
|
}
|
|||
|
|
.el-date-editor .el-input__inner {
|
|||
|
|
border-left: none;
|
|||
|
|
border-radius: 0 4px 4px 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|
|||
|
|
|