自选日历,限制选择天数

自选日历,限制选择天数

效果图

<template>
    <div class="dateDemo">
      <mt-navbar v-model="selected">
        <mt-tab-item v-for="(item,index) in cities" :id="index">{{item.month}}</mt-tab-item>
      </mt-navbar>
      <ul class="clearfix dateList">
        <li class="fl">星期日</li>
        <li class="fl">星期一</li>
        <li class="fl">星期二</li>
        <li class="fl">星期三</li>
        <li class="fl">星期四</li>
        <li class="fl">星期五</li>
        <li class="fl">星期六</li>
      </ul>
      <mt-tab-container v-model="selected">
        <mt-tab-container-item v-for="(item,index) in cities" :id="index">
          <ul class="clearfix">
            <li class="boxOutter fl" v-for="dayNum in item.day_list">
              <input v-if="dayNum.status == 1" type="checkbox" :value="item.month+ '-'+dayNum.day" v-model="dateSelect" :id="item.month+ '-'+dayNum.day"/><label :for="item.month+ '-'+dayNum.day" :class="[(dayNum.status == 0) ? 'disable' : '']" @click="checkDate(dayNum)">{{(dayNum.day == 0) ? '' : dayNum.day}}</label>
            </li>
          </ul>
        </mt-tab-container-item>
      </mt-tab-container>
    </div>
</template>

<script>
  import { Navbar, TabItem } from 'mint-ui';
  import { MessageBox } from 'mint-ui';

  Vue.component(Navbar.name, Navbar);
  Vue.component(TabItem.name, TabItem);
  const cityOptions = [
    {
      "month": 4,
        "day_list": [
        {
          "day": 1,
          "status": 0
        },
        {
          "day": 2,
          "status": 0
        },
        {
          "day": 3,
          "status": 0
        },
        {
          "day": 4,
          "status": 0
        },
        {
          "day": 5,
          "status": 0
        },
        {
          "day": 6,
          "status": 0
        },
        {
          "day": 7,
          "status": 0
        },
        {
          "day": 8,
          "status": 0
        },
        {
          "day": 9,
          "status": 0
        },
        {
          "day": 10,
          "status": 0
        },
        {
          "day": 11,
          "status": 0
        },
        {
          "day": 12,
          "status": 0
        },
        {
          "day": 13,
          "status": 0
        },
        {
          "day": 14,
          "status": 0
        },
        {
          "day": 15,
          "status": 0
        },
        {
          "day": 16,
          "status": 0
        },
        {
          "day": 17,
          "status": 0
        },
        {
          "day": 18,
          "status": 0
        },
        {
          "day": 19,
          "status": 0
        },
        {
          "day": 20,
          "status": 0
        },
        {
          "day": 21,
          "status": 0
        },
        {
          "day": 22,
          "status": 0
        },
        {
          "day": 23,
          "status": 0
        },
        {
          "day": 24,
          "status": 0
        },
        {
          "day": 25,
          "status": 0
        },
        {
          "day": 26,
          "status": 0
        },
        {
          "day": 27,
          "status": 1
        },
        {
          "day": 28,
          "status": 1
        },
        {
          "day": 29,
          "status": 1
        },
        {
          "day": 30,
          "status": 1
        },
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        }
      ]
    },
   {
      "month": 5,
        "day_list": [
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 1,
          "status": 1
        },
        {
          "day": 2,
          "status": 1
        },
        {
          "day": 3,
          "status": 1
        },
        {
          "day": 4,
          "status": 1
        },
        {
          "day": 5,
          "status": 1
        },
        {
          "day": 6,
          "status": 1
        },
        {
          "day": 7,
          "status": 1
        },
        {
          "day": 8,
          "status": 1
        },
        {
          "day": 9,
          "status": 1
        },
        {
          "day": 10,
          "status": 1
        },
        {
          "day": 11,
          "status": 1
        },
        {
          "day": 12,
          "status": 1
        },
        {
          "day": 13,
          "status": 1
        },
        {
          "day": 14,
          "status": 1
        },
        {
          "day": 15,
          "status": 1
        },
        {
          "day": 16,
          "status": 1
        },
        {
          "day": 17,
          "status": 1
        },
        {
          "day": 18,
          "status": 1
        },
        {
          "day": 19,
          "status": 1
        },
        {
          "day": 20,
          "status": 1
        },
        {
          "day": 21,
          "status": 1
        },
        {
          "day": 22,
          "status": 1
        },
        {
          "day": 23,
          "status": 1
        },
        {
          "day": 24,
          "status": 1
        },
        {
          "day": 25,
          "status": 1
        },
        {
          "day": 26,
          "status": 1
        },
        {
          "day": 27,
          "status": 0
        },
        {
          "day": 28,
          "status": 0
        },
        {
          "day": 29,
          "status": 0
        },
        {
          "day": 30,
          "status": 0
        },
        {
          "day": 31,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        }
      ]
    },
   {
      "month": 6,
        "day_list": [
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 0,
          "status": 0
        },
        {
          "day": 1,
          "status": 1
        },
        {
          "day": 2,
          "status": 1
        },
        {
          "day": 3,
          "status": 1
        },
        {
          "day": 4,
          "status": 1
        },
        {
          "day": 5,
          "status": 1
        },
        {
          "day": 6,
          "status": 1
        },
        {
          "day": 7,
          "status": 1
        },
        {
          "day": 8,
          "status": 1
        },
        {
          "day": 9,
          "status": 1
        },
        {
          "day": 10,
          "status": 1
        },
        {
          "day": 11,
          "status": 1
        },
        {
          "day": 12,
          "status": 1
        },
        {
          "day": 13,
          "status": 1
        },
        {
          "day": 14,
          "status": 1
        },
        {
          "day": 15,
          "status": 1
        },
        {
          "day": 16,
          "status": 1
        },
        {
          "day": 17,
          "status": 1
        },
        {
          "day": 18,
          "status": 1
        },
        {
          "day": 19,
          "status": 1
        },
        {
          "day": 20,
          "status": 1
        },
        {
          "day": 21,
          "status": 1
        },
        {
          "day": 22,
          "status": 1
        },
        {
          "day": 23,
          "status": 1
        },
        {
          "day": 24,
          "status": 1
        },
        {
          "day": 25,
          "status": 1
        },
        {
          "day": 26,
          "status": 1
        },
        {
          "day": 27,
          "status": 1
        },
        {
          "day": 28,
          "status": 1
        },
        {
          "day": 29,
          "status": 1
        },
        {
          "day": 30,
          "status": 0
        }
      ]
    }];
    export default {
      name: "date",
      data () {
        return{
          selected:0,
          dateSelect: [],
          cities: cityOptions
        }
      },
      watch:{
        dateSelect(curVal,oldVal){
          console.log(curVal);
          if(curVal.length>3){
            this.dateSelect.pop();
            MessageBox('提示', '最多只能选择三天');
          }
        },
      },
      created () {

      },
      mounted: function() {

      },
      methods:{
        checkDate:function (item) {
          if(item.status == 0){
            alert("此日期不可选~");
          }
        }
      }
    }
</script>

<style scoped rel="stylesheet/scss" lang="scss">
.dateDemo{
  .dateList{
    li{
      width: calc(100%/7);
      height: 40px;
      text-align: center;
      line-height: 40px;
      border: 1px solid #333333;
    }
  }
  .boxOutter{
    position: relative;
    width: calc((100% - 70px)/7);
    height: 40px;
    margin: 5px;
    label{
      width: 100%;
      height: 40px;
      position: absolute;
      left: 0;
      top: 0;
      display: block;
      font-size: 14px;
      line-height: 40px;
      text-align: center;
      background: #fff;
    }
    input{
      position: absolute;
      left: 0;
      top: 0;
      display: block;
      opacity: 0;
      z-index: 10000;
    }
    input:checked + label{
      background: #f57e23;
    }
    .disable{
      background: #cccccc;
    }
  }

}
</style>