美文网首页
基于element ui 二次封装日期范围选择插件 可传递两个参

基于element ui 二次封装日期范围选择插件 可传递两个参

作者: 啊木木 | 来源:发表于2022-11-01 17:35 被阅读0次

    我们在平常的开发中经常会用到日期范围的插件,根据日期范围查询相应的各种数据,但是这时候后端接口需要的是开始时间和结束时间两个字段,但是element ui 的日期范围插件他返回的是一个数组,我们就需要把数组拆分成两个字段,每次都要拆分,有点浪费工作量,那我们不如直接提取一个公共的插件,二次封装一下,每次传入两个值,对应开始和结束时间,具体方法如下:
    html部分:

    <template>
        <div ref='datetimerange'>
            <el-date-picker 
            v-model="datetime" 
            :disabled="disabled" 
            :clearable="clearable" 
            :type="type" 
            :size="size" 
            :start-placeholder="startText" 
            :end-placeholder="endText" 
            :format="format" 
            :unlink-panels="unlinkPanels" 
            :value-format="valueFormat" 
            :picker-options="pickerOptions" 
            :default-time="['00:00:00','23:59:59']"
            align="center" 
            @change="change">
            </el-date-picker>
        </div>
    </template>
    

    JS部分:

    export default {
        name: 'dateTimeRange',
        props: {
            unlinkPanels: {
                type: Boolean,
                default: true
            },
            clearable: {
                type: Boolean,
                default: true
            },
            shortcutsType: {
                type: String,
                default: 'nearly'  
            }, 
            startTime: {
                type: String,
                default: ''
            },
            type: {
                type: String,
                default: 'daterange'
            },
            endTime: {
                type: String,
                default: ''
            },
            valueFormat: {
                type: String,
                default: 'yyyy-MM-dd'
            },
            format: {
                type: String,
                default: 'yyyy-MM-dd'
            },
            size: {
                type: String,
                default: ''
            },
            disabled: {
                type: Boolean,
                default: false
            }
        },
        data() {
            return {
                datetime: [],
                defaultStartTime: '',
                defaultEndTime: ''
            }
        },
        computed: {
            endText() {
                return '结束时间'
            },
            startText() {
                return '开始时间'
            }
    
    
        },
        watch: {
            startTime(newVal, oldVal) {
                if (newVal) {
                    this.datetime = [newVal, this.endTime]
                } else {
                    this.datetime = ''
                }
            },
            endTime(newVal, oldVal) {
                if (newVal) {
                    this.datetime = [this.startTime, newVal]
                } else {
                    this.datetime = ''
                }
            },
            datetime(newVal, oldVal) {
                if (newVal) {
                    this.updateStartTime(newVal[0])
                    this.updateEndTime(newVal[1])
                } else {
                    this.updateStartTime('')
                    this.updateEndTime('')
                }
            }
        },
    
        mounted() {
            if (this.startTime && this.endTime) { this.datetime = [this.startTime, this.endTime] }
        },
        methods: {
            change (e) {
                if (e) {
                    this.defaultStartTime = e[0]
                    this.defaultEndTime = e[1]
                    this.$emit('change', {
                        startTime: e[0],
                        endTime: e[1]
                    })
                } else {
                    this.defaultStartTime = ""
                    this.defaultEndTime = ""
                    this.$emit('change', {
                        startTime: "",
                        endTime: ""
                    })
                }
    
            },
            updateStartTime(time) {
                this.$emit('update:startTime', time)
                return time
            },
            updateEndTime(time) {
                this.$emit('update:endTime', time)
                return time
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:基于element ui 二次封装日期范围选择插件 可传递两个参

          本文链接:https://www.haomeiwen.com/subject/emtdtdtx.html