首页 > 编程 > JavaScript > 正文

vue中datepicker的使用教程实例代码详解

2019-11-19 11:12:53
字体:
来源:转载
供稿:网友

写这个文章主要是记录下用法,官网已经说的很详细了

npm install vue-datepicker --save

html代码

<myDatepicker :date="startTime" :option="multiOption" :limit="limit"></myDatepicker><myDatepicker :date="endtime" :option="timeoption" :limit="limit"></myDatepicker>

js代码

<script>import myDatepicker from 'vue-datepicker'export default { name: 'PillDetail', components:{  myDatepicker }, data () {  return {   startTime: { // 相当于变量     time: ''    },    endtime: {  // 相当于变量     time: ''    },    timeoption: {     type: 'min', // day , multi-day     week: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],     month: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],     format: 'YYYY-M-D HH:mm', // YYYY-MM-DD 日期     inputStyle: {    // input 样式      'display': 'inline-block',      'padding': '6px',      'line-height': '22px',      'width':'160px',      'font-size': '16px',      'border': '2px solid #fff',      'box-shadow': '0 1px 3px 0 rgba(0, 0, 0, 0.2)',      'border-radius': '2px',      'color': '#5F5F5F',      'margin':'0'     },     color: {  // 字体颜色      header: '#35acff', // 头部      headerText: '#fff', // 头部文案      },     buttons: {  // button 文案      ok: '确定',      cancel: '取消'     },     overlayOpacity: 0.5, // 遮罩透明度     placeholder: '请选时间', // 提示日期     dismissible: true // 默认true 待定   },        multiOption: {     type: 'min',     week: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],     month: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],     format:"YYYY-M-D HH:mm",     inputStyle: {      'display': 'inline-block',      'padding': '6px',      'line-height': '22px',      'width':'160px',      'font-size': '16px',      'border': '2px solid #fff',      'box-shadow': '0 1px 3px 0 rgba(0, 0, 0, 0.2)',      'border-radius': '2px',      'color': '#5F5F5F',      'margin':'0'     },     color: {  // 字体颜色      header: '#35acff', // 头部      headerText: '#fff', // 头部文案      },     buttons: {  // button 文案      ok: '确定',      cancel: '取消'     },     placeholder: '请选时间',     dismissible: true   },    limit: [{     type: 'weekday',     available: [1, 2, 3, 4, 5,6,0]   },   {     type: 'fromto',     from: '2016-02-01',     to: '2050-02-20'   }]  } }, methods: {   }}</script>

设置前一天和后一天的时间,我的实现是通过watch来监听startTime的值,发现变化后,对当前日期和选择的日期进行对比,超过未来时间就不进行变更,而计算后一天或前一天,只需让当前时间进行加或减一天的时间即可

这里写图片描述

参考代码:

<template> <div class="menu-container">  <Header :title="title" :xian="xian" :name="name" :food="food"></Header>  <div class="box">    <div class="timeselectbox">      <li class="daybefore" @click="getYesterday(startTime.time)">        < 前一天      </li>      <li class="dateselect">        <myDatepicker :date="startTime" :option="multiOption" :limit="limit"></myDatepicker>        <!-- 2018-04-05 -->      </li>      <li class="nextday" @click="getTomorrow(startTime.time)">        后一天 >      </li>    </div>    <div class="databox">      <div class="allsale" style="border-right:1px solid white">        <p class="p-top">总金额(元)</p>        <p class="p-bott">{{statistics.amount}}</p>      </div>      <div class="eff">        <p class="p-top">总数量(张)</p>        <p class="p-bott">{{statistics.sum}}</p>      </div>    </div>    <div class="paydetail">      <li @click="countvouchertype({       use_date:startTime.time,       ticket_type:1,       active:'koubei'      })" :class="{active:active.koubei}"><span>口碑券:</span>{{statistics.koubei}}笔</li>      <li @click="countvouchertype({       use_date:startTime.time,       ticket_type:2,       active:'meituan'      })" :class="{active:active.meituan}"><span>美团券:</span>{{statistics.meituan}}笔</li>      <li @click="countvouchertype({       use_date:startTime.time,       ticket_type:3,       active:'nuomi'      })" :class="{active:active.nuomi}"><span>糯米券:</span>{{statistics.nuomi}}笔</li>    </div>    <div class="allsale_price">      总金额:¥{{checkCouponList.amount}}    </div>    <div class="table">      <table class="table_data">        <tr class="describe">          <th></th>          <th>券码</th>          <th>类型</th>          <th>状态</th>          <th>金额</th>        </tr>        <tr @click="topath({         name:'/checkCouponInfo',         item:item        })" v-for="(item,index) in checkCouponList.data">          <td></td>          <td>{{item.ticket_code}}</td>          <td>{{item.ticket_type}}</td>          <td class="status" :class="item.active == 't' ? 'status-active' : ''">{{item.active == 't' ? '成功' : '失败'}}</td>          <td>¥{{item.amount}}<b class="right_j"></b></td>        </tr>      </table>    </div>  </div> </div></template><script type="text/javascript"> import Header from '../Mast/Header' import myDatepicker from 'vue-datepicker' export default{  name:'CertificateDetail',  data () {  return {    title:'验券明细',    xian:false,    name:'launcher',    food:true,    active:{      koubei:true,      meituan:false,      nuomi:false,    },    checkCouponList:{     data:[]    },    statistics:{},    startTime: {     time: ''    },    multiOption: {     type: 'day',     week: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],     month: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],     format:"YYYY-MM-DD",     inputStyle: {      'display': 'inline-block',      'height':'35px',      'line-height': '35px',      'width':'141px',      'font-size': '16px',      'border': 'none',      'color': '#5F5F5F',      'margin':'0',      'text-align':'center'     },     color: {    // 字体颜色      header: '#ff5534', // 头部      headerText: '#fff', // 头部文案     },     buttons: {    // button 文案      ok: '确定',      cancel: '取消'     },     placeholder: '请选时间',     dismissible: true    },    limit: [{     type: 'weekday',     available: [1, 2, 3, 4, 5,6,0]    },    {     type: 'fromto',     from: '2016-02-01',     to: '2050-02-20'    }]   }  },  methods:{   topath: function (params) {     this.$store.state.cashtime1 = this.startTime.time;    if(params['name'] == '/checkCouponInfo'){     this.$store.commit('couponInfo',params['item']);    }    this.$router.push({'path':params['name']});   },   getYesterday: function (time) {    let yesterday = new Date(time);    yesterday.setTime(yesterday.getTime() - 24 * 60 * 60 * 1000);    let reduce = '-';    this.startTime.time = yesterday.getFullYear() + reduce + this.addZero(yesterday.getMonth() + 1) + reduce + this.addZero(yesterday.getDate());   },   getTomorrow: function (time) {    let tomorrow = new Date(time);    let nowDate = this.getNowFormatDate();    tomorrow.setTime(tomorrow.getTime() + 24 * 60 * 60 * 1000);    let reduce = '-';    let year = tomorrow.getFullYear() + reduce + this.addZero(tomorrow.getMonth() + 1) + reduce + this.addZero(tomorrow.getDate());    let t_timestamp = Math.round(new Date(year) / 1000);    let n_timestamp = Math.round(new Date(nowDate) / 1000);    if(t_timestamp > n_timestamp){     return mui.toast('不能超过今天');    }else{     this.startTime.time = year;    }   },   getNowFormatDate: function () {    let date = new Date();    let reduce = "-";    let currentdate = date.getFullYear() + reduce + this.addZero(date.getMonth() + 1) + reduce + this.addZero(date.getDate());    return currentdate;   },   addZero: function (time) {    if (time >= 1 && time <= 9) {      time = "0" + time;    }    return time;   },   countvouchertype: function (params) {    // 设置选项卡    for(let key in this.active){     if(params['active'] == key){      this.active[key] = true;     }else{      this.active[key] = false;     }    }    this.$store.state.mastloadding = true;    console.dir(params);    this.API.countvouchertype(params).then((response) => {           this.checkCouponList = response;      console.dir(this.checkCouponList);      this.$store.state.mastloadding = false;    }, (response) => {      this.$store.state.mastloadding = false;      mui.toast('网络错误');    });   },   countvoucherinfo: function (params) {    this.API.countvoucherinfo(params).then((response) => {      console.dir(response);      this.statistics = response;    }, (response) => {      mui.toast('网络错误');    });   }  },  components:{   Header,   myDatepicker  },  mounted(){    this.startTime.time = this.$store.state.cashtime1 ? this.$store.state.cashtime1 : this.getNowFormatDate();   // this.startTime.time = this.getNowFormatDate();  },  watch: {   startTime: {     handler(newValue, oldValue) {       console.log(newValue);       let newTimestamp = Math.round(new Date(newValue .time) / 1000);       let oldTimestamp = Math.round(new Date(this.getNowFormatDate()) / 1000);       if(newTimestamp > oldTimestamp){        this.startTime.time = this.getNowFormatDate();        mui.toast('不能超过今天');       }else{        let active = '';        let ticket_type = 1;        for(let key in this.active){         if(this.active[key]){          active = key          if(key=='meituan'){           ticket_type = 2          }          if(key == 'nuomi')          {           ticket_type = 3          }         }        }        this.countvoucherinfo({         use_date:this.startTime.time        });        this.countvouchertype({         use_date:this.startTime.time,         ticket_type:ticket_type,         active:active        });       }            },     deep:true   }  } }</script><style type="text/css" scoped> .menu-container{  background:#fff; } .box{  width:100%;  margin-top:45px;  background:#fff; } .timeselectbox{  height:60px;  background:#edeeef; } .timeselectbox li{  list-style: none;  float:left;  height:35px;  line-height:35px;  margin-top:10px;  color:black; } .daybefore{  width:28%;  padding-left:10px;  font-size:13.5px; } .dateselect{  border-radius: 3px;  background:#fff;  width:44%;  text-align:center; } .nextday{  text-align: right;  width:28%;  padding-right:10px;  font-size:13.5px; } .databox{  height:115px;  background:#ff5534; } .databox div{  float:left;  height:80px;  margin-top:17.5px;  text-align:center; } .allsale{  width:50%; } .databox p{  color:white; } .p-top{  color:#eaebec;  margin-top:15px; } .p-bott{  font-size:18px;  margin-top:5px;  font-weight: bold; } .eff{  width:49.7%;  border-left:1px solid #cccccc96; } .paydetail{  height:52px;  background:white;  width:100%; } .paydetail li{  display: inline-block;  float:left;  width:33.3%;  font-size:12px;  text-align:center;  height:100%;  line-height: 50px;  overflow: hidden; } .line{  display: block;   margin-left: 32px;   width: 25%;   border: 1px solid #40AAEB; } .active{  color:#ff5534;  border-bottom:1px solid #ff5534; } .allsale_price{  height:40px;  background:#f4f4f4;  text-align: center;  line-height: 40px;  font-size: 12px; } .table{  width:100%; } .table_data{  width:100%; } .table_data th{  height:30px;  font-size:15px; } .describe{  border-bottom:1px solid #f4f4f4; } .describe th:nth-child(1){  width:5%;  /*text-align: left;*/ } .describe th:nth-child(2){  text-align: left; } .table_data tr{  width:100%; } .table_data tr td{  text-align:center;  height:30px;  line-height: 30px;  font-size:13px;  position:relative; } .table_data tr td:nth-child(1){  width:3%; } .table_data tr td:nth-child(2){  text-align: left; } .status{  color:red; } .status-active{  color:green; } .right_j{  /*background:url('/static/img/scancode_right.png') no-repeat;*/  background-size:9px !important;  display: inline-block;  position:absolute;  width:15px;  height:15px;  line-height: 30px;  font-size:18px;  right:5px;  top:5px; }</style>

总结

以上所述是小编给大家介绍的vue中datepicker的使用教程实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表