• vue组件--下拉时间框(年月在一个框里)


    可以传入nowdata(当前显示的时间),mindata(最早时间),maxdata(最晚时间),如果不传,默认显示当前时间为今天,最早时间为1970年01月,最晚为2099年12月。

    其中传入的格式必须为字符串形式的年+月,当月份小于10时,需要前面添加0,如‘201701’。

    当选择框改变时会传给父组件一个 changetime 事件,参数为年+月,如‘201711’。

    使用方法:

    <year-month :nowdata="nowdata"  :mindata="mindata" :maxdata="maxdata" @changetime="changeTime"></year-month>

    组件的具体代码为:

     1 Vue.component('year-month',{
     2     props: ['nowdata','mindata','maxdata'],
     3     template: yearMonthDom,
     4     data: function () {
     5         return {
     6             dataList: [],
     7             data: 0,
     8             min_data: '',
     9             max_data: '',
    10             isFirst: true
    11         }
    12     },
    13     created: function () {
    14         var vm = this;
    15 
    16         var now = new Date(),
    17             nowYear = now.getFullYear(),
    18             nowMonth = now.getMonth() + 1;
    19 
    20         vm.min_data = !!vm.mindata ? vm.mindata : '197001';
    21         vm.max_data = !!vm.maxdata ? vm.maxdata : '209012';
    22 
    23         if (vm.nowdata){
    24             if (Number(vm.nowdata) < Number(vm.min_data) || Number(vm.nowdata) > Number(vm.max_data)){
    25                 alert('当前时间不存在选项中');
    26                 return;
    27             }
    28             vm.data = vm.nowdata;
    29         }else {
    30             if (Number(nowYear + '' + nowMonth) < vm.min_data){
    31                 vm.data = vm.min_data;
    32             }else if (Number(nowYear + '' + nowMonth) > vm.max_data){
    33                 vm.data = vm.max_data;
    34             }else {
    35                 vm.data = nowYear + '' + nowMonth;
    36             }
    37         }
    38 
    39         if (Number(vm.min_data) > Number(vm.max_data)){
    40             alert('最小日期不得大于最大日期');
    41             return;
    42         }
    43 
    44         var minYear = Number(vm.min_data.slice(0,4)),//最小年
    45             minMonth = Number(vm.min_data.slice(-2)),//最小月
    46             maxYear = Number(vm.max_data.slice(0,4)),//最大年
    47             maxMonth = Number(vm.max_data.slice(-2)),//最大月
    48             pushYear = minYear;//要加入的年
    49 
    50         while (pushYear <= maxYear){
    51             var maxI = pushYear == maxYear ? maxMonth : 12 ;
    52             var minI = pushYear == minYear ? minMonth : 1 ;//要加入的月
    53             for (var i = 0 ; i <= maxI - minI ; i++){
    54                 var pushMonth = Number(minI + i) < 10  ? '0' + Number(minI + i) : Number(minI + i) + '';//月份小于10的,要改成01的形式
    55                 vm.dataList.push({data: pushYear + '' + pushMonth , year: pushYear, month: pushMonth});
    56             }
    57             pushYear++;
    58         }
    59 
    60     },
    61     methods: {
    62         changeTime: function () {
    63             var vm = this;
    64             vm.$emit('changetime',vm.data);
    65         }
    66     }
    67 })

    使用的页面代码为:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8     <div id="app">
     9         <year-month :nowdata="nowdata"  :mindata="mindata" :maxdata="maxdata" @changetime="changeTime"></year-month>
    10     </div>
    11 </body>
    12 </html>
    13 <script src="js/vue.js"></script>
    14 <script src="js/yearmonthCom.js"></script>
    15 <script>
    16     new Vue({
    17         el: "#app",
    18         data: {
    19             nowdata: '',
    20             mindata: '',
    21             maxdata: ''
    22         },
    23         created: function () {
    24             var vm = this;
    25             var d = new Date(),
    26                 y = d.getFullYear(),
    27                 m = d.getMonth() + 1;
    28             vm.nowdata = y + '' + m;
    29         },
    30         methods: {
    31             changeTime: function (time) {
    32                 console.log(time);
    33             }
    34         }
    35     })
    36 </script>

    最终页面效果为:

  • 相关阅读:
    vim/gvim使用笔记
    WebStorm for Mac (PyCharm)- 破解注册激活版下载
    volatile 关键字
    vue页面在加载的时候闪烁花括号{{}} 解决非工程化项目初始化页面闪动问题
    Element-ui el-table表格 排序图标刷新后不见问题
    与运算(&)、或运算(|)、异或运算(^)
    JS中 二进制与十进制的相互转换
    报告大家好消息,我找到新工作了
    公众号基本配置 token 验证失败,成功解决
    asp.net core 5.0,怎么山寨了koa2?
  • 原文地址:https://www.cnblogs.com/liyuly/p/7884544.html
Copyright © 2020-2023  润新知