vue实现价格日历效果

本文实例为大家分享了vue实现价格日历效果的具体代码,供大家参考,具体内容如下

1、效果图

2、下载全局安装:npm install ele-calendar

3、在components下新建文件calendar.vue,内容:

<template>
  <div style="width:600px">
    <ele-calendar
      :render-content="renderContent"
      :data="datedef"
      :prop="prop"
      :disabledDate="disabledDate"
      :effectiveTimeLimit="effectiveTimeLimit"
      :defaultValue="defaultValue"
    >
    </ele-calendar>
  </div>
</template>

<script>
import eleCalendar from 'ele-calendar'
import 'ele-calendar/dist/vue-calendar.css'
export default {
  props: {
    datedef: {
      type: Array,
      default: () => {
        return []
      }
    },
    defaultPrice: {
      type: String,
      default: () => {
        return ''
      }
    },
    effectiveTimeLimit: {
      type: String,
      default: () => {
        return ''
      }
    },
    defaultValue: {
      type: Date,
      default: () => {
        return new Date()
      }
    }
  },
  data () {
    const self = this
    return {
      prop: 'date', // 对应日期字段名
      disabledDate: date => {
        return (
          date.valueOf() < new Date().valueOf() - 1 * 24 * 60 * 60 * 1000 ||
          date.valueOf() > new Date(self.effectiveTimeLimit).valueOf()
        )
      }
    }
  },
  components: {
    eleCalendar
  },
  methods: {
    //  JSX语法
    renderContent (h, parmas) {
      const self = this
      const loop = data => {
        return (
          <div class={data.defvalue.value ? 'active' : ''}>
            <div>{data.defvalue.text}</div>
            <div>
              ¥
            <i-input
              value={
                data.defvalue.value.content
                  ? data.defvalue.value.content
                  : self.defaultPrice
              }
              on-on-blur={event =>
                self.handleChange(
                  event,
                  data.defvalue.value
                    ? data.defvalue.value.date
                    : self.handleDate(data.defdate)
                )
              }
              disabled={
                data.defvalue.value
                  ? new Date(data.defvalue.value.date).valueOf() <
                        new Date().valueOf() - 1 * 24 * 60 * 60 * 1000 ||
                      new Date(data.defvalue.value.date).valueOf() >
                        new Date(self.effectiveTimeLimit).valueOf()
                  : data.defdate.valueOf() <
                        new Date().valueOf() - 1 * 24 * 60 * 60 * 1000 ||
                      data.defdate.valueOf() >
                        new Date(self.effectiveTimeLimit).valueOf()
              }
              key={
                data.defvalue.value
                  ? data.defvalue.value.date
                  : self.handleDate(data.defdate)
              }
            />
            </div>
          </div>
        )
      }
      return <div style='min-height:60px;'>{loop(parmas)}</div>
    },
    handleChange (event, date) {
      console.log(event, date, 'dddddd')
      const self = this
      const index = self.datedef.findIndex(item => {
        return item.date === date
      })
      if (isNaN(event.target.value)) {
        self.$Message.error('请输入正确的价格')
        event.target.value = self.defaultPrice
        return
      }
      if (event.target.value && index === -1) {
        if (event.target.value === self.defaultPrice) {
          return
        }
        self.datedef.push({
          date,
          content: event.target.value,
          cid: null
        })
        console.log('self.datedef', self.datedef)
        this.$emit('aaa', self.datedef)
      } else if (event.target.value && index !== -1) {
        if (event.target.value === self.defaultPrice) {
          self.datedef.splice(index, 1)
          return
        }
        const selectItem = self.datedef[index]
        selectItem.content = event.target.value
        self.datedef.splice(index, 1, selectItem)
      } else if (!event.target.value && index !== -1) {
        self.datedef.splice(index, 1)
      } else {
        event.target.value = self.defaultPrice
      }
    },
    handleDate (date) {
      const year = date.getFullYear()
      let month = date.getMonth() + 1
      month = month >= 10 ? month : '0' + month
      let idate = date.getDate()
      idate = idate >= 10 ? idate : '0' + idate
      return `${year}-${month}-${idate}`
    }
  }
}
</script>

<style lang="scss">
.el-picker-panel-calendar.el-date-picker-calendar.el-popper {
  box-shadow: none;
}
.el-date-table-calendar td > div > div {
  border: 1px solid #aaa;
  color: #fff;
  margin: 5px;
  & > div:first-child {
    background-color: #aaa;
  }
  & > div:nth-child(2) {
    padding: 5px;
    color: #000;
    .ivu-input-wrapper {
      width: 80%;
    }
  }
  &.active {
    border: 1px solid #2ab561;
    & > div:first-child {
      background-color: #2ab561;
    }
    & > div:nth-child(2) {
      padding: 5px;
      color: #000;
      .ivu-input-wrapper {
        width: 80%;
      }
    }
  }
}
// 这段如果放开的话当天之前的所有框置灰
// .el-date-table-calendar td.disabled > div > div {
//   border: 1px solid #aaa;
//   color: #fff;
//   margin: 5px;
//   & > div:first-child {
//     background-color: #aaa;
//   }
//   & > div:nth-child(2) {
//     padding: 5px;
//     color: #000;
//     .ivu-input-wrapper {
//       width: 80%;
//     }
//   }
// }
.el-date-table-calendar td.available:hover {
  color: #000;
}
.el-date-table-calendar td.available.today {
  color: #000;
  font-weight: normal;
}
.el-date-table-calendar tr td.current.available:not(.disabled) {
  background-color: #fff;
}
</style>

4、页面引入注册

<script>
 import calendar from '../../components/calendar'
 export default {
    components: { calendar}
  }
  data() {
    return {
      effectiveTimeLimit: '',
      ruleForm: {
        price: '',
        configPriceList: []
      }
      },
      rules: {
      }
 }
    }
</script>

5、html

我是写在dialog中的

<el-form-item label="价格设置" prop="calendarPrice">
 <calendar
 :datedef="ruleForm.configPriceList"
 :default-price="ruleForm.price"
 :effectiveTimeLimit="effectiveTimeLimit"
 ></calendar>
</el-form-item>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 微信小程序自定义带价格显示日历效果

    本文实例为大家分享了微信小程序自定义日历效果的具体代码,供大家参考,具体内容如下 JS代码: var Moment = require("../../utils/moment.js"); var DATE_YEAR = new Date().getFullYear(); var DATE_MONTH = new Date().getMonth() + 1; var DATE_DAY = new Date().getDate(); Page({ data: { year: '', mon

  • 基于jquery日历价格、库存等设置插件

    Commodity calendar, price, inventory and other settings of jQuery plug-in 基于jquery的日历价格.库存等设置插件.需要设置的参数(字段)需自定义,详见(demo)使用方法- 源码地址:https://github.com/capricorncd/calendar-price-jquery Create by capricorncd / 2017-06-11 使用方法 <!DOCTYPE html> <html&

  • jQuery web 组件 后台日历价格、库存设置的代码

    /* * yagizaDate 1.0 * * Yagiza * Copyright 2016, MIT License * * IE 8+, Chrome, fireFox */ // * 字段说明 ******************** // buyNumMax 最多购买数 // buyNumMin 最少购买数 // cashback 返现 // price 售价.分销价.分销售价 // priceSettlement 结算价.采购价.分销结算价 // priceMarket 景区挂牌价

  • vue实现价格日历效果

    本文实例为大家分享了vue实现价格日历效果的具体代码,供大家参考,具体内容如下 1.效果图 2.下载全局安装:npm install ele-calendar 3.在components下新建文件calendar.vue,内容: <template> <div style="width:600px"> <ele-calendar :render-content="renderContent" :data="datedef&qu

  • vue实现签到日历效果

    本文实例为大家分享了vue实现签到日历效果的具体代码,供大家参考,具体内容如下 先看看我们的效果图: 一.页面部分: <template>   <div class="test-page">     <div class="top">       <div class="button" v-if="!sign" @click="Sign">         &

  • 使用Vue实现简单日历效果

    使用Vue实现简单的日历,供大家参考,具体内容如下 原理分析: 1.获取当前时间2.显示当前时间3.点击增加和减少月份4.大月和小月的天数 效果演示 初始样式(显示现在的日期时间) 增加一个月 在程序开始之前一定注意: 引入Vue.js架包 代码演示 Body内容 <script type="text/x-template" id="calendar">    <!-- 年份-->        <div id="year&q

  • Vue.js创建Calendar日历效果

    使用 Vue.js 进行数据与视图的绑定,数据更新会让视图自动进行更新,类似 Android 里面的 DataBinding. 实现一个HTML的日历效果. html 部分 <div id="calendar"> <!-- 年份 月份 --> <div class="month"> <ul> <li class="arrow" @click="pickPre(currentYear,

  • vue实现周日历切换效果

    本文实例为大家分享了vue实现周日历切换效果的具体代码,供大家参考,具体内容如下 废话不多说,直接上干货,需要的朋友自取 代码: <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge"

  • 用vue写一个日历

    之前在上家公司做过一个公司人员考勤的东西,里面需要用到日历,当时自己用vue随便写了一个,比较简单,删掉了其他功能的代码,只留下日历,直接看代码 <template> <div class="lookForMonth_wrapper"> <div class="lookForMonth_top"> <div class="selectDate"> <div>{{year}} 年 {{mo

  • Vue.js实现拖放效果的实例

    页面效果如下所示: 代码请看这里,当当当当: html: <template> <div class='drag-content'> <div class='project-content'> <div class='select-item' draggable='true' @dragstart='drag($event)' v-for='pjdt in projectdatas'>{{pjdt.name}}</div> </div>

  • bootstrap vue.js实现tab效果

    本文实例为大家分享了bootstrap vue.js实现tab效果的具体代码,供大家参考,具体内容如下 项目目录结构 Student.js代码 function Student(){ this.baseInfo = { tabStatus : true , name : '张三', sex : 'male' } , this.parentsInfo = { tabStatus : false, fatherName : '张全蛋', motherName : '李铁柱' } , this.stu

  • js实现会跳动的日历效果(完整实例)

    一.简介 编写一个会动的日历,日历上面有年月日,周几,时分秒,效果如下: 年月日,周几,时分秒都会随着系统时间的走动而改变 二.代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scal

随机推荐