vue日历组件

1.WeekCalendar.vue

<template>
  <div class="yh-week-calendar">
    <div class="yh-calendar-item">
      <div style="text-align:center;font-weight:bold">{{days[0].dateObj.getMonth() + 1}}月</div>
      <div>
        <yh-button @click="onPrev" class="yh-icon" style="color:#999">〈</yh-button>
      </div>
    </div>
    <div
      class="yh-calendar-item"
      v-for="(item, index) in days"
      :class="{'yh-select':selected == index}"
      :key="item.dateStr"
      @click="onSelect(index, $event)"
    >
      <div style="padding-top:8px;">{{weekNames[index]}}</div>
      <div
        :class="{'yh-today':item.today, 'yh-highlight':item.highlight}"
        class="yh-date-icon"
      >{{item.date}}</div>
    </div>
    <div class="yh-calendar-item">
      <div>
        <yh-button @click="onNext" class="yh-icon" style="color:#999">〉</yh-button>
      </div>
    </div>
  </div>
</template>
<script>
import yhbutton from "./Button";
function _format_date(date) {
  var d = date.getDate();
  var m = date.getMonth() + 1;
  var y = date.getFullYear();
  return "" + y + "-" + (m <= 9 ? "0" + m : m) + "-" + (d <= 9 ? "0" + d : d);
}

function _diff(date, days) {
  return new Date(date.getTime() + days * 24 * 60 * 60 * 1000);
}

function _same_day(d1, d2) {
  return (
    d1.getYear() == d2.getYear() &&
    d1.getMonth() == d2.getMonth() &&
    d1.getDate() == d2.getDate()
  );
}

function _week_days(date) {
  var arr = [];
  var day = date.getDay();
  var today = new Date();
  for (var i = 0; i < 7; ++i) {
    var e = {};
    var obj = day == i ? date : _diff(date, i - day);
    e.today = _same_day(obj, today);
    e.date = obj.getDate();
    e.dateStr = _format_date(obj);
    e.dateObj = obj;
    arr.push(e);
  }
  return arr;
}

export default {
  name: "WeenCalendar",
  data() {
    return {
      weekNames: ["日", "一", "二", "三", "四", "五", "六"],
      days: [],
      selected: -1,
      highlights: {}
    };
  },
  props: [],
  created() {
    this.days = _week_days(new Date());
    var vm = this;
    this.$on("change", function() {
      vm.updateHighlights();
    });
  },
  methods: {
    onPrev() {
      var d = this.days[0].dateObj;
      this.days = _week_days(_diff(d, -1));
      this.selected = -1;
      this.$emit("change", this.range());
    },
    onNext() {
      var d = this.days[6].dateObj;
      this.days = _week_days(_diff(d, 1));
      this.selected = -1;
      this.$emit("change", this.range());
    },
    updateHighlights() {
      var days = this.highlights;
      var empty = days == undefined || days.length == 0;
      var list = this.days;
      var vm = this;
      list.forEach(function(e) {
        var h = empty ? false : days.indexOf(e.dateStr) >= 0;
        vm.$set(e, "highlight", h);
      });
    },
    setHighlights(days) {
      this.highlights = days;
      this.updateHighlights();
    },
    onSelect(index, e) {
      e.preventDefault();
      e.stopPropagation();
      if (index !== this.selected) {
        this.selected = index;
        var d = this.days[index];
        this.$emit("select", { date: d.dateStr, today: true, index: index });
      }
    },
    range() {
      var days = this.days;
      return {
        begin: days[0].dateStr,
        end: days[6].dateStr
      };
    }
  },
  components: {
    "yh-button": yhbutton
  }
};
</script>
<style scoped>
</style>

2.WeekCalendarDemo.vue

<template>
  <div class="yh-page">
    <h1>日历演示</h1>
    <div class="desc">Demo源代码:
      <code>/examples/components/modules/WeekCalendarDemo.vue</code>
    </div>
    <div class="yh-desc yh-block">
      <yh-week-calendar ref="cal" @select="onSelect" @change="onChange" class="WeekCalendar"></yh-week-calendar>
      <div>
        <ul>
          <li>范围:{{begin}} ~ {{end}}</li>
          <li>选中日期:{{date}}</li>
        </ul>
      </div>
    </div>
  </div>
</template>
<script>
import weekcalendar from "../comcompont/WeekCalendar";
export default {
  name: "WeekCalendarDemo",
  data() {
    return {
      date: "",
      begin: "",
      end: ""
    };
  },
  methods: {
    onSelect(date) {
      this.date = date.date;
    },
    onChange(r) {
      this.begin = r.begin;
      this.end = r.end;
    }
  },
  mounted() {
    var r = this.$refs.cal.range();
    this.begin = r.begin;
    this.end = r.end;
    this.$refs.cal.setHighlights(["2018-10-31", "2018-11-02"]);
  },
  components: {
    "yh-week-calendar": weekcalendar
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scope>
.WeekCalendar{
	width: 100%;
}
</style>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我很抱歉,但是我无法直接通过引用内容查看具体的图片和代码。然而,根据你提供的引用信息,我可以告诉你关于vue日历自定义组件的一些信息。 根据引用,这个组件目录可以提供给你一些关于vue日历自定义组件的相关代码和文件。 根据引用,这个vue日历组件支持农历和假期展示,并且可以自定义可选择的日期范围。 根据引用,在组件中使用这个vue日历组件,你需要在main.js中引入它。组件默认情况下会显示一个自定义的左侧icon。某一个日期可以出现选中状态,也可以使用圆点模式来表示选中状态。你可以通过传递一个包含active属性的数组对象来自定义某一天的数据。 总的来说,这个vue日历自定义组件提供了一些可定制化的功能,包括农历展示、假期展示以及可选择日期范围等。你可以根据你的需求在组件中进行相应的配置和使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue自定义日历组件](https://blog.csdn.net/weixin_38644883/article/details/88067612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [vue日历组件,支持农历以及假期展示,可以自定义可选择日期范围](https://download.csdn.net/download/qq_29597215/86267518)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值