本组件二次封装iview的DatePicker,可以在全局安装了Iview的项目或者局部引入了DatePicker的页面中自由使用。
目录
效果展示
从左到右分别是:属性名、时间选择器
功能描述
- 属性名和初始时间段均可由父组件传参到子组件
- 点击“确定”按钮,时间确定,点击“清空”按钮时间清空
- 左侧有快捷时间段选项,“上个月”/“本月”/“上周”等
结构代码
<template>
<div class="a-check">
<Row>
<Col flex="110px">
<span class="c-fix-title wt">{
{ attr_name }}</span>
</Col>
<!-- 时间 -->
<Col flex="auto">
<date-pick type="daterange" :value="datetime" :options="datetimeOption" confirm :clearable="false" :editable="false" split-panels :transfer="false" @on-change="handleDatetime" @on-ok="confirmDatetime" @on-clear="day_clear" @on-clear-shortcut="clearShortCut" placement="bottom-start" placeholder="请选择查询日期范围" style="width: 200px" />
</Col>
</Row>
<Divider />
</div>
</template>
- datetime:为绑定的时间段
逻辑代码
components: {
DatePick
},
data () {
return {
datetime: deepCopy(this.initDate),
comDate: deepCopy(this.initDate),
datetimeOption: {
shortcuts,
disabledDate (date) {
return date && date.valueOf() > Date.now()
}
}
}
},
props: {
attr_name: {
type: String,
default () {
return '属性名'
}
},
initDate: {
type: Array,
default () {
return ['', '']
}
}
},
methods: {
// 日期选择器
handleDatetime (val) {
this.datetime = val
},
confirmDatetime () {
this.comDate = JSON.parse(JSON.stringify(this.datetime))
this.$emit('getData', this.comDate, this.attr_name)
},
day_clear () {
this.datetime = ['', '']
this.comDate = JSON.parse(JSON.stringify(this.datetime))
this.$emit('getData', this.comDate, this.attr_name)
},
clearShortCut () {
const shortCut = document.querySelectorAll('.ivu-picker-panel-shortcut')
const len = shortCut.length
for (let i = 0; i < len; i++) {
shortCut[i].style.background = 'none'
}
}
},
created () {
setTimeout(() => {
this.datetime = deepCopy(this.initDate)
this.comDate = deepCopy(this.initDate)
this.confirmDatetime()
}, 1000)
}
- comDate:确认后经处理的时间段数据
- confirmDatetime:确认事件处理
- day_clear:时间段清空事件
- initDate:初始时间段赋值
组件应用
<aTime attr_name="生日" :initDate="init_pBirth" @getData="time_get" />
import aTime from '@/components/attr-check/a-time'
components: {
aTime
}
data () {
return {
init_pBirth: ['', '']
}
}
- import引入——>组件注册——>使用
- 父——>子传参:attr_name属性名、initDate时间段初始值
事件钩子
// 拿到用户选中的时间段数据
time_get (date, attr_name) {
var content
var obj = {
beginTime: '',
endTime: ''
}
if (date[0] === '' && date[1] === '') {
content = '不限'
} else {
content = date[0] + '至' + date[1]
obj = {
beginTime: date[0],
endTime: date[1]
}
}
this.previewAttr.some((item) => {
if (item.attr_name === attr_name + ':') {
item.attr_content = content
}
})
switch (attr_name) {
case '生日':
this.groupObj.pfinfo_attr.p_birth = obj
break
}
}
- time_get :拿到用户选中的时间段数据
github
完整代码:点击这里