vue使用mintui封装日期组件

页面图片 :

  

 

父组件:

  

<template>

    <div class="pickerDemo">

    <h6>第一个的时间:</h6>

        <div class="boxDate">

        <div class="leftDate">当前时间:</div>

        <div class="rightDate">

        <DateModel 

        @returnDate="returnDate1" 

        :date="date1" 

        :maxDate="maxDate1"

        />

        </div>

        </div>

        <h6>第二个的时间:</h6>

        <div class="boxDate">

        <div class="leftDate">当前时间2:</div>

        <div class="rightDate">

        <DateModel 

        @returnDate="returnDate2" 

        :date="date2" 

        :minDate="minDate2" 

        />

        </div>

        </div>

        

    </div>

</template>

 

<script>

 

import DateModel from './DateModel'

export default {

    name: 'date',

    data () {

        return {

        date1:'',

        maxDate1:'',//第一个组件设置最大日期

        date2:'',

        minDate2:"",//第二个 组件设置最小日期

        }

    },

    components: {

    DateModel

    },

    created () {

    },

    mounted () {

    let newDate=new Date();

    

    this.maxDate1=this.dateYMD()

    

    this.date2=this.dateYMD(0,0,28)//默认第二个显示大于第一个一天

    

    this.minDate2=this.dateYMD()

    },

    methods: {

    

    dateYMD(a,b,c){

let yy=parseInt(a) || 0,mm=parseInt(b) || 0,dd=parseInt(c) || 0,date=new Date(),y="",m="",d="";

y=date.getFullYear()+yy+'';

m=date.getMonth()+1+mm+'';

let monthDate=this.mGetDate(y,m);

if(dd<0){

if(date.getDate()<=-dd){

m=m-1+'';

let mDate=this.mGetDate(y,m);

d=date.getDate()+mDate+dd+''

}else{

d=date.getDate()+dd+'';

}

}else{

if(date.getDate()+dd>=monthDate){

m=parseInt(m)+1+'';

let mDate=this.mGetDate(y,m);

d=date.getDate()-mDate+parseInt(dd)+''

}else{

d=date.getDate()+dd+'';

}

}

m=m.length==1?('0'+m):m,

d=d.length==1?('0'+d):d;

return y+'-'+m+'-'+d;

    },

    mGetDate(){

    var date = new Date();

    var year = date.getFullYear();

    var month = date.getMonth()+1;

    var d = new Date(year, month, 0);

    return d.getDate();

},

    

    

    returnDate1(v){

    //第一个日期的回调函数   需要给第二个设置最小值

    this.minDate2=v;

    this.date1=v;

    },

    returnDate2(v){

    //第二个日期选择框的回调函数

    this.maxDate1=v;

    this.date2=v;

    }

    }

}

</script>

 

<style scoped>

.boxDate{

width: 100%;

height: 50px;

line-height: 50px;

border: 1px solid #FF776D;

box-sizing: border-box;

}

.leftDate{

width: 30%;

float: left;

}

.rightDate{

width: 70%;

float: left;

}

</style>

 

子组件:

  

<template>

    <div class="pickerDemo">

        <div class="showTime" @click="selectData">

           {{this.selectedValue}}

        </div>

        <!-- @touchmove.prevent 阻止默认事件,此方法可以在选择时间时阻止页面也跟着滚动。 -->

        <div class="pickerPop" @touchmove.prevent>

            <!-- 年月日时分选择 -->

            <mt-datetime-picker

                lockScroll="true"

                ref="datePicker"

                v-model="dateVal"

                class="myPicker"

                type="date"

                year-format="{value}"

                month-format="{value}"

                date-format="{value}"

                @confirm="dateConfirm()"

                :startDate="minStartDate"

                :endDate="maxEndDate"

                >

            </mt-datetime-picker>

        </div>

    </div>

</template>

 

<script>

export default {

    name: 'date',

    data () {

        return {

            dateVal: '', // 默认是当前日期

            selectedValue: "",

            minStartDate:new Date(),

            maxEndDate:new Date()

        }

    },

    components: {

    

    },

    props:["date","minDate","maxDate"],

    watch:{

date(newval,oldval){

this.selectedValue=newval;

},

minDate(newval,oldval){

if(this.minDate){

    this.minStartDate=new Date(this.minDate.trim().substr(0,10))

    }else{

    this.minStartDate=new Date(newDate.getFullYear()-20+'-01-01');

    }

},

maxDate(newval,oldval){

if(this.maxDate){

    this.maxEndDate=new Date(this.maxDate.trim().substr(0,10))

    }else{

    this.maxEndDate=new Date(newDate.getFullYear()+20+'-12-30');

    }

},

},

    created () {

    },

    mounted () {

    this.start();

    },

  

    methods: {

    start(){

     let newDate=new Date();

   

    if(this.minDate){

    this.minStartDate=new Date(this.minDate.trim().substr(0,10))

    }else{

    this.minStartDate=new Date(newDate.getFullYear()-20+'-01-01');

    }

   

    if(this.maxDate){

    this.maxEndDate=new Date(this.maxDate.trim().substr(0,10))

    }else{

    this.maxEndDate=new Date(newDate.getFullYear()+20+'-12-30');

    }

   

    if(this.date){

    let newStart=this.date.substr(0,10);

    this.selectedValue=newStart;

    }else{

        this.selectedValue=this.dateYMD()

    }

    },

    dateYMD(a,b,c){

let yy=parseInt(a) || 0,mm=parseInt(b) || 0,dd=parseInt(c) || 0,date=new Date(),y="",m="",d="";

y=date.getFullYear()+yy+'';

m=date.getMonth()+1+mm+'';

let monthDate=this.mGetDate(y,m);

if(dd<0){

if(date.getDate()<=-dd){

m=m-1+'';

let mDate=this.mGetDate(y,m);

d=date.getDate()+mDate+dd+''

}else{

d=date.getDate()+dd+'';

}

}else{

if(date.getDate()+dd>=monthDate){

m=parseInt(m)+1+'';

let mDate=this.mGetDate(y,m);

d=date.getDate()-mDate+parseInt(dd)+''

}else{

d=date.getDate()+dd+'';

}

}

m=m.length==1?('0'+m):m,

d=d.length==1?('0'+d):d;

return y+'-'+m+'-'+d;

    },

    mGetDate(){

    var date = new Date();

    var year = date.getFullYear();

    var month = date.getMonth()+1;

    var d = new Date(year, month, 0);

    return d.getDate();

},

    

        selectData () { // 打开时间选择器

        this.start()

            // 如果已经选过日期,则再次打开时间选择器时,日期回显(不需要回显的话可以去掉 这个判断)

            if (this.selectedValue) {

                this.dateVal = this.selectedValue

            } else {

                this.dateVal = new Date()

            }

            this.$refs['datePicker'].open()

            

        },

        dateConfirm (v) { // 时间选择器确定按钮,并把时间转换成我们需要的时间格式

        let y=this.dateVal.getFullYear()+"",

        m=this.dateVal.getMonth()+1+"",

        d=this.dateVal.getDate()+"";

        m=m.length<2?'0'+m:m;

        d=d.length<2?'0'+d:d;

        this.selectedValue=y+'-'+m+'-'+d;

        this.$emit('returnDate',this.selectedValue)

        }

    }

}

</script>

 

<style scoped>

 

</style>

 

posted @ 2019-07-04 11:02  赖_pg前端分享  阅读(983)  评论(0编辑  收藏  举报