vue价格日历demo 实例

<template>
  <div class="">
    <div class="datePickerContainer">
      <el-input  prefix-icon="el-icon-date" v-model="chooseedDay" size="mini" v-popover:dateList placeholder="请选择日期">
      <!--<i @click.native=" chooseedDay = ''" slot="suffix" class="el-input__icon el-icon-circle-close-outline"></i> -->
      </el-input>
      <el-popover v-loading="loadingPopDataList" popper-class="popover" width="546" ref="dateList" placement="bottom-start" trigger="click" :open-delay="300" @show="whenPopoverShow" v-model="showPop">
        <el-container class="container">
          <el-header class="header">
            <el-row>
              <el-col @click.native="returnToday" class="returnToday" style="width: 100px;cursor:pointer;">回到今天</el-col>
              <el-col style="width: 60px;">日</el-col>
              <el-col style="width: 60px;">一</el-col>
              <el-col style="width: 60px;">二</el-col>
              <el-col style="width: 60px;">三</el-col>
              <el-col style="width: 60px;">四</el-col>
              <el-col style="width: 60px;">五</el-col>
              <el-col style="width: 60px;">六</el-col>
            </el-row>
          </el-header>

          <el-container>
            <el-aside class="aside" width="100px">
              <el-row class="flex-align-center">
                <el-col :span="24"><img @click="getLastMonth" src="../../../../assets/images/top_arrow.svg" alt=""></el-col>
              </el-row>
              <el-row class="flex-align-center">
                <el-col :span="24"><span>{{dateObj.thisYear + '年' + dateObj.thisMonth + '月'}}</span></el-col>
              </el-row>
              <el-row class="flex-align-center">
                <el-col :span="24"><img  @click="getNextMonth" src="../../../../assets/images/bottom-arrow.svg" alt=""></el-col>
              </el-row>
            </el-aside>

            <el-main class="main">
              <el-row>
                <el-col v-if="pioneerDateSequenceInWeek > 0" class="whenHover" style="width: 60px"></el-col>
                <el-col v-if="pioneerDateSequenceInWeek > 1" class="whenHover" style="width: 60px"></el-col>
                <el-col v-if="pioneerDateSequenceInWeek > 2" class="whenHover" style="width: 60px"></el-col>
                <el-col v-if="pioneerDateSequenceInWeek > 3" class="whenHover" style="width: 60px"></el-col>
                <el-col v-if="pioneerDateSequenceInWeek > 4" class="whenHover" style="width: 60px"></el-col>
                <el-col v-if="pioneerDateSequenceInWeek > 5" class="whenHover" style="width: 60px"></el-col>

                <el-col :class="{ activeColor: day.day == dateObj.thisDate ? true :false }" @click.native="pickThisDay(day, index)" :key="index" v-for="(day, index) in data" style="width: 60px;">
                  <span>{{day.day}}</span>
                  <span>¥{{day.price}}</span>
                </el-col>

                <!--<el-col v-if="remainder > 0" class="whenHover" style="width: 60px"></el-col>-->
                <!--<el-col v-if="remainder > 1"class="whenHover" style="width: 60px"></el-col>-->
                <!--<el-col v-if="remainder > 2"class="whenHover" style="width: 60px"></el-col>-->
                <!--<el-col v-if="remainder > 3"class="whenHover" style="width: 60px"></el-col>-->
                <!--<el-col v-if="remainder > 4"class="whenHover" style="width: 60px"></el-col>-->
              </el-row>
            </el-main>
          </el-container>

        </el-container>
      </el-popover>
    </div>

  </div>
</template>

<script>
  export default {
    name: 'canleandar',
    components: {},
    mounted() {
    //
    },
    data() {
      return {
        remainder: '', // 尾部空格数
        dateCountsInMonth: '',
        pioneerDateSequenceInWeek: '', // 头部空格数
        chooseedDay: '',
        loadingPopDataList: false,
        showToolTip: false,
        showPop: false,
        loadingPopData: false,
        hotelId: null, // 酒店ID
        data: [
          {
            'day': '1',
            'price': '158'
          },
          {
            'day': '2',
            'price': '158'
          },
          {
            'day': '3',
            'price': '159'
          },

          {
            'day': '4',
            'price': '158'
          },
          {
            'day': '5',
            'price': '158'
          },
          {
            'day': '6',
            'price': '158'
          },
          {
            'day': '7',
            'price': '158'
          },
          {
            'day': '8',
            'price': '158'
          },
          {
            'day': '9',
            'price': '158'
          },
          {
            'day': '10',
            'price': '158'
          },
          {
            'day': '11',
            'price': '59'
          },
          {
            'day': '12',
            'price': '59'
          },
          {
            'day': '13',
            'price': '59'
          },
          {
            'day': '14',
            'price': '59'
          },
          {
            'day': '15',
            'price': '59'
          },
          {
            'day': '16',
            'price': '59'
          },
          {
            'day': '17',
            'price': '59'
          },
          {
            'day': '18',
            'price': '59'
          },
          {
            'day': '19',
            'price': '59'
          }, {
            'day': '20',
            'price': '59'
          },
          {
            'day': '21',
            'price': '59'
          }, {
            'day': '22',
            'price': '59'
          }, {
            'day': '23',
            'price': '59'
          }, {
            'day': '24',
            'price': '59'
          },
          {
            'day': '25',
            'price': '59'
          },
          {
            'day': '26',
            'price': '59'
          },
          {
            'day': '27',
            'price': '59'
          },
          {
            'day': '28',
            'price': '59'
          },
          {
            'day': '29',
            'price': '59'
          }, {
            'day': '30',
            'price': '59'
          }, {
            'day': '31',
            'price': '59'
          }
        ],
        emptyData: [
          { id: 'mon' }, { id: 'tue' }, { id: 'wed' },
          { id: 'thi' }, { id: 'fri' }, { id: 'sta' }
        ],
        dateObj: { date: new Date(), thisYear: -1, thisMonth: -1, thisWeek: -1, thisDate: '', priceArr: [] }
      }
    },
    methods: {
      pickThisDay(date, index) {
        this.chooseedDay = date.day
      },
      returnToday() {
        this.dateObj.thisYear = this.dateObj.date.getFullYear()
        this.dateObj.thisMonth = this.dateObj.date.getMonth() + 1
        this.dateObj.thisWeek = this.dateObj.date.getDay()
        this.dateObj.thisDate = this.dateObj.date.getDate()
        this.getMonthDayCounts(this.dateObj.thisYear, this.dateObj.thisMonth)
        this.getSequenceInWeek(this.dateObj.thisYear, this.dateObj.thisMonth)
        // console.log(this.dateObj.thisDate)
      },
      whenPopoverShow() {
        this.returnToday()
        this.showToolTip = false
      },
      getLastMonth() {
        let newMonth = this.dateObj.thisMonth
        let newYear = this.dateObj.thisYear
        if (newMonth <= 1) {
          newYear -= 1
          newMonth = 12
          this.dateObj.thisYear = newYear
          this.dateObj.thisMonth = newMonth
          this.getSequenceInWeek(newYear, newMonth)
          this.getMonthDayCounts(this.dateObj.thisYear, this.dateObj.thisMonth)
          this.restEmpty(this.dateCountsInMonth, this.pioneerDateSequenceInWeek)
        } else {
          newMonth -= 1
          this.dateObj.thisMonth = newMonth
          this.getSequenceInWeek(newYear, newMonth)
          this.getMonthDayCounts(this.dateObj.thisYear, this.dateObj.thisMonth)
          this.restEmpty(this.dateCountsInMonth, this.pioneerDateSequenceInWeek)
        }
      },
      getNextMonth() {
        let newMonth = this.dateObj.thisMonth
        let newYear = this.dateObj.thisYear
        if (newMonth >= 12) {
          newYear += 1
          newMonth = 1
          this.dateObj.thisYear = newYear
          this.dateObj.thisMonth = newMonth
          this.getSequenceInWeek(newYear, newMonth)
          this.getMonthDayCounts(this.dateObj.thisYear, this.dateObj.thisMonth)
          this.restEmpty(this.dateCountsInMonth, this.pioneerDateSequenceInWeek)
        } else {
          newMonth += 1
          this.dateObj.thisMonth = newMonth
          this.getSequenceInWeek(newYear, newMonth)
          this.restEmpty(this.dateCountsInMonth, this.pioneerDateSequenceInWeek)
          this.getMonthDayCounts(this.dateObj.thisYear, this.dateObj.thisMonth)
        }
      },
      // 得到一个月的天数
      getMonthDayCounts(year, month) {
        const dateCounts = new Date(year, month, 0).getDate()
        this.dateCountsInMonth = dateCounts
        return dateCounts // 获取当月最后一天日期
      },
      // 得到每月的一号是周几
      getSequenceInWeek(year, month) {
        const date = new Date(year, month - 1, 1)
        const weekday = date.getDay()
        this.pioneerDateSequenceInWeek = weekday
        // console.log(weekday)
        return weekday
      },
      restEmpty(conts, weekyNum) {
        const totalCell = conts + weekyNum
        this.remainder = totalCell % 7
        // console.log(conts)
        // console.log(weekyNum)
        console.log(this.remainder)
      },
      setEmptyDataLen(index) {
        switch (index) {
          case 0:
            console.log(index)
            this.emptyData = []
            break
          case 1:
            this.emptyData = this.emptyData.slice(0, 1)
            break
          case 2:
            this.emptyData = this.emptyData.slice(0, 2)
            break
          case 3:
            this.emptyData = this.emptyData.slice(0, 3)
            break
          case 4:
            this.emptyData = this.emptyData.slice(0, 4)
            break
          case 5:
            this.emptyData = this.emptyData.slice(0, 5)
            break
          case 6:
            this.emptyData = this.emptyData.slice(0, 6)
            break
        }
      }
    }
  }
</script>
<style scoped>
  .datePickerContainer {
    text-align: left;
    margin-top: 50px;
  }

  .datePickerContainer .el-input {
    width: 200px;
  }

  .returnToday:hover {
    color: #333;
  }
  .hasborder{
    border-right: 1px solid #e8e8e8;
  }
  .container .header {
    background: #3296fa;
    color: #ffffff;
    height: 30px !important;
    line-height: 30px;
    padding: 0;
  }

  .container .header .el-row {
    width: 100%;
    height: 100%;
  }

  .container .header .el-row .el-col {
    text-align: center;
    height: 100%;
  }

  .main {
    padding: 0 !important;
    width: 420px !important;
  }

  .main .el-col span {
    display: block;
    line-height: 20px;
    text-align: center;
  }

  .main .el-col {
    min-height: 40px;
    border-right: 1px solid #e8e8e8;
    border-bottom: 1px solid #e8e8e8;
    cursor: pointer;
  }
  .main .whenHover:hover{
    background: #fff!important;
  }
  .main .el-col:hover{
    background: #3296fa;
    color: #fff;
  }
  .main .activeColor{
    background: #3296fa!important;
    color: #ffffff!important;
  }
  .aside {
    min-height: 205px;
    text-align: center;
    border: 1px solid #e8e8e8;
  }
  .aside img {
    cursor: pointer;
    width: 50px;
    height: 40px;
  }
  .aside .el-row {
    height: 33%;
  }

</style>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值