vue中datepicker的使用教程实例代码详解
写这个文章主要是记录下用法,官网已经说的很详细了
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的使用教程实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
赞 (0)