zoukankan      html  css  js  c++  java
  • vue初学实践之路——vue简单日历组件(3)

    这一篇我们来实现管理员修改每一天剩余数量的功能。

    <div id="calendar">
    
    
        <div id="left">
            <span> 要修改的日期  </span>
    
            <li v-for="d in checkedDays">{{ d }} </li>
    
            <div v-if="checkedDays.length!=0">
    
                <label for="checkedCount">要修改的天数</label>
    
                <input id="checkedCount" v-model="checkedCount" >
                <button  >确定修改</button>
            </div>
        </div>
    
        <div id="right">
    
            <!-- 年份 月份 -->
            <div class="month">
                <ul>
                    <li class="arrow" @click="pickPre(currentYear,currentMonth)"></li>
                    <li class="year-month" @click="pickYear(currentYear,currentMonth)">
                        <span class="choose-year">{{ currentYear }}</span>
                        <span class="choose-month">{{ currentMonth }}月</span>
                    </li>
                    <li class="arrow" @click="pickNext(currentYear,currentMonth)"></li>
                </ul>
            </div>
            <!-- 星期 -->
            <ul class="weekdays">
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li style="color:red"></li>
                <li style="color:red"></li>
            </ul>
            <!-- 日期 -->
            <ul class="days">
    
                <li  v-for="dayobject in days" style="height: 80px;" >
                    <!--本月-->
                    <!--如果不是本月  改变类名加灰色-->
    
                    <span v-if="dayobject.day.getMonth()+1 != currentMonth" class="other-month">{{ dayobject.day.getDate() }}</span>
    
                    <!--如果是本月  还需要判断是不是这一天-->
                    <span v-else>
                  <!--今天-->
                        <span v-if="dayobject.day.getFullYear() == new Date().getFullYear() && dayobject.day.getMonth() == new Date().getMonth() && dayobject.day.getDate() == new Date().getDate()" class="active">{{ dayobject.day.getDate() }}</span>
                        <span v-else>{{ dayobject.day.getDate() }}
    
                        </span>
                    </span>
    
                   <p v-if="dayobject.day.getFullYear() == new Date().getFullYear() && dayobject.day.getMonth() == new Date().getMonth() && dayobject.day.getDate()>=new Date().getDate()">
    
                       <input type="checkbox" :id="(dayobject.day.getMonth()+1)+'-'+dayobject.day.getDate()" :value="(dayobject.day.getMonth()+1)+'-'+dayobject.day.getDate()" v-model="checkedDays" >
    
                   </p>
    
    
                    <div v-if="leftobj[dayobject.index]">
    
    
                        <!--
                        <button @click="leftobj[dayobject.value]=true" v-if="leftobj[dayobject.index].value===false">
    
    
                            修改</button>
                        <button @click="leftobj[dayobject.value]=false" v-else-if="leftobj[dayobject.index].value===true">
    
    
                            确定</button>
    
                            -->
                    </div>
    
                </li>
            </ul>
        </div> <!--right-->
    </div>
    <script>
        var myVue=new Vue({
            el: '#calendar',
            data: {
                currentDay: 1,
                currentMonth: 1,
                currentYear: 1970,
                currentWeek: 1,
                days: [],
                leftobj:[    //存放剩余数量
                    {count:1,value:false},
                    {count:2,value:false},
                    {count:3,value:false},
                    {count:4,value:false},
                    {count:5,value:false},
                ],
                checkedDays:[],
                checkedCount:20,
    
            },
            created: function() {
                this.initData(null);
            },
    
            methods: {
    
                getleft:function () {
                    return this.left++
                },
                cutleft:function (day) {
                    // this.leftArray[day.index]-=1;
                    if(this.leftobj[day.index].count>=1)
                        this.leftobj[day.index].count--;
                    else
                        alert('已经没有位置了')
                },
                initleftcount:function()
                {
                    //每次初始化需要更新数量
                    for(var i=0;i<4;i++)
                    {
                        this.leftobj[i].count=i+3;
                    }
                },
                initData: function(cur) {
                    var leftcount=0;
                    var date;
                    var index=0;
                    //this.initleftcount();
                    //有两种方案  一种是每次翻页 ajax获取数据初始化   http请求过多会导致资源浪费
                    // 一种是每次请求 ajax获取数据初始化    数据更新过慢会导致缺少实时性
                    //还可以setTimeout 定时请求更新数据  实现数据刷新(可能会更好)
    
    
                    if (cur) {
                        date = new Date(cur);
                    } else {
                        var now=new Date();
                        var d = new Date(this.formatDate(now.getFullYear() , now.getMonth() , 1));
                        d.setDate(35);
                        date = new Date(this.formatDate(d.getFullYear(),d.getMonth() + 1,1));
                    }
                    this.currentDay = date.getDate();
                    console.log(this.currentDay);
                    this.currentYear = date.getFullYear();
                    this.currentMonth = date.getMonth() + 1;
    
                    this.currentWeek = date.getDay(); // 1...6,0
                    if (this.currentWeek == 0) {
                        this.currentWeek = 7;
                    }
                    var str = this.formatDate(this.currentYear , this.currentMonth, this.currentDay);
                    console.log("today:" + str + "," + this.currentWeek);
                    this.days.length = 0;
                    // 今天是周日,放在第一行第7个位置,前面6个
                    //初始化本周
                    for (var i = this.currentWeek - 1; i >= 0; i--) {
                        var d = new Date(str);
                        d.setDate(d.getDate() - i);
                        console.log("y:" + d.getDate());
    
                        var dayobject={};
                        dayobject.day=d;
                        var now=new Date();
                        if(d.getDate()===(now.getDate())&&d.getMonth()===now.getMonth()&&d.getFullYear()===now.getFullYear())
                        {
                            dayobject.index=index++;
                        }
                        else  if(index!=0&&index<3)
                            dayobject.index=index++;
    
                        this.days.push(dayobject);
    
    
                    }
                    //其他周
                    for (var i = 1; i <= 35 - this.currentWeek; i++) {
                        var d = new Date(str);
                        d.setDate(d.getDate() + i);
                        var dayobject={};
                        dayobject.day=d;
                        var now=new Date();
                        if(d.getDate()===(now.getDate())&&d.getMonth()===now.getMonth()&&d.getFullYear()===now.getFullYear())
                        {
                            dayobject.index=index++;
                        }
    
                        else if(index!=0&&index<3)
                            dayobject.index=index++;
                        this.days.push(dayobject);
                    }
    
                },
                pickPre: function(year, month) {
    
                    // setDate(0); 上月最后一天
                    // setDate(-1); 上月倒数第二天
                    // setDate(dx) 参数dx为 上月最后一天的前后dx天
                    var d = new Date(this.formatDate(year , month , 1));
                    d.setDate(0);
                    this.initData(this.formatDate(d.getFullYear(),d.getMonth() + 1,1));
                },
                pickNext: function(year, month) {
                    var d = new Date(this.formatDate(year , month , 1));
                    d.setDate(35);
                    this.initData(this.formatDate(d.getFullYear(),d.getMonth() + 1,1));
                },
                pickYear: function(year, month) {
                    alert(year + "," + month);
                },
    
                // 返回 类似 2016-01-02 格式的字符串
                formatDate: function(year,month,day){
                    var y = year;
                    var m = month;
                    if(m<10) m = "0" + m;
                    var d = day;
                    if(d<10) d = "0" + d;
                    return y+"-"+m+"-"+d
                },
    
    
            },
        });
    
    </script>

     

    我们在data中加入了checkedDays数组,用来存放我们所选定的日期,因为我们不需要修改checkDays数组中的值,所以不使用对象数组的方式。

    checkedCount为默认修改20天的剩余数量。

    页面效果为:

    这样我们就实现了管理员修改日期的功能,剩下所做的就是与服务器交互的过程了。

    到这里日历预定组件的功能就算完成了。

    将这个小组件做完,我们的vue基础知识已经不错了。

    github此项目地址:https://github.com/herozhou/vue-order-calendar

  • 相关阅读:
    网络芯片应用:GPS公交车行驶记录仪
    “黑暗潜伏者” -- 手机病毒新型攻击方式
    Android导入工程提示Invalid project description
    设计模式_代理模式
    el简略说明与11个隐含对象
    jsp九大内置对象
    js全局函数
    python基础:multiprocessing的使用
    pgAdmin III 使用图解
    windows下简单安装postgres
  • 原文地址:https://www.cnblogs.com/herozhou/p/7018993.html
Copyright © 2011-2022 走看看