当前位置:首页 > VUE

vue实现值班日历

2026-01-20 20:50:05VUE

Vue 实现值班日历的方法

使用 FullCalendar 插件

FullCalendar 是一个功能强大的日历插件,支持 Vue 集成。安装依赖:

npm install @fullcalendar/vue @fullcalendar/core @fullcalendar/daygrid

在 Vue 组件中引入并使用:

<template>
  <FullCalendar :options="calendarOptions" />
</template>

<script>
import FullCalendar from '@fullcalendar/vue'
import dayGridPlugin from '@fullcalendar/daygrid'

export default {
  components: { FullCalendar },
  data() {
    return {
      calendarOptions: {
        plugins: [dayGridPlugin],
        initialView: 'dayGridMonth',
        events: [
          { title: '张三值班', start: '2023-10-01' },
          { title: '李四值班', start: '2023-10-02' }
        ]
      }
    }
  }
}
</script>

自定义实现日历组件

创建一个基础的日历组件,通过计算日期数组渲染日历格子:

<template>
  <div class="calendar">
    <div class="header">
      <button @click="prevMonth">上个月</button>
      <h3>{{ currentYear }}年{{ currentMonth + 1 }}月</h3>
      <button @click="nextMonth">下个月</button>
    </div>
    <div class="days">
      <div v-for="day in dayNames" :key="day" class="day-name">{{ day }}</div>
    </div>
    <div class="dates">
      <div 
        v-for="date in dates" 
        :key="date.date"
        :class="['date', { 'other-month': !date.isCurrentMonth }]"
      >
        {{ date.date.getDate() }}
        <div v-if="getDuty(date.date)" class="duty">
          {{ getDuty(date.date) }}
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentYear: new Date().getFullYear(),
      currentMonth: new Date().getMonth(),
      dayNames: ['日', '一', '二', '三', '四', '五', '六'],
      dutyData: {
        '2023-10-01': '张三',
        '2023-10-02': '李四'
      }
    }
  },
  computed: {
    dates() {
      // 计算当前月所有日期(包括前后月的补位)
    }
  },
  methods: {
    getDuty(date) {
      const key = date.toISOString().split('T')[0]
      return this.dutyData[key]
    }
  }
}
</script>

使用 Vuetify 的 v-calendar

如果项目使用 Vuetify,可以直接使用其内置的日历组件:

vue实现值班日历

<template>
  <v-calendar
    :events="events"
    type="month"
  ></v-calendar>
</template>

<script>
export default {
  data() {
    return {
      events: [
        {
          name: '张三值班',
          start: '2023-10-01',
          color: 'blue'
        }
      ]
    }
  }
}
</script>

关键实现点

  1. 日期计算:生成当前月所有日期数组,处理跨月显示
  2. 值班数据绑定:将值班人员数据与特定日期关联
  3. 交互功能:支持月份切换、值班信息编辑等操作
  4. 样式定制:根据需求调整日历的外观样式

可以根据项目需求选择合适的方法,FullCalendar 功能最全面但体积较大,自定义实现更轻量但需要处理更多细节。

标签: 日历vue
分享给朋友:

相关文章

vue实现添加用户

vue实现添加用户

Vue 实现添加用户功能 数据绑定与表单设计 在 Vue 中实现添加用户功能,首先需要设计一个表单,用于收集用户输入的数据。通过 v-model 实现双向数据绑定,确保表单数据与 Vue 实例中的数据…

vue评分实现

vue评分实现

Vue 评分组件实现方法 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 引入并注册组件: import Vue from '…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model="…

vue实现类别

vue实现类别

Vue 实现类别的几种方法 在 Vue 中实现类别功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-bind:class 动态绑定类名 通过对象语法或数组语法动态绑定类名,根据条件添加或移…

实现.vue文件

实现.vue文件

创建.vue文件的基本结构 一个标准的.vue文件包含三个部分:模板(template)、脚本(script)和样式(style)。这种结构允许开发者在一个文件中管理组件的HTML、JavaScrip…

vue翻页实现

vue翻页实现

Vue翻页实现方法 基础分页组件实现 使用v-for和计算属性实现基础分页逻辑: <template> <div> <ul> <li…