element ui 日历空控件添加农历 节气和家假日

背景:
按照客户需求,需要在日历控件上添加农历和节气 ,但是element ui控件中无弄里控件只能引入外部js来完成该功能,
1.引入calendar.js
2.调用方法 显示农历
2.1

// 公历转农历
    solarToLunar (slotDate, slotData) {
      let solarDayArr = slotData.day.split('-')
      let lunarDay = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2])/* global calendar */
      // 农历日期
      let lunarMD = lunarDay.IMonthCn + lunarDay.IDayCn
      if (lunarMD.includes('初一')) {
        // 每月初一 显示当前月 如正月初一 显示"正月"
        lunarMD = lunarMD.substr(0, 2)
      } else {
        // 每月初一以外 不显示当前月 如正月初十 显示"初十"
        lunarMD = lunarMD.slice(2)
      }
      // 公历节日\农历节日\农历节气
      let festAndTerm = []
      festAndTerm.push(lunarDay.festival == null ? '' : ' ' + lunarDay.festival)
      festAndTerm.push(lunarDay.lunarFestival == null ? '' : '' + lunarDay.lunarFestival)
      festAndTerm.push(lunarDay.Term == null ? '' : '' + lunarDay.Term)
      festAndTerm = festAndTerm.join('')
      let result = ''
      if (festAndTerm === '') {
        result = lunarMD
      } else {
        result = festAndTerm
      }
      return result
    },

前端 显示

<template  slot="dateCell" slot-scope="{date, data}">
          <el-row>
            <el-row v-if="date.getMonth() !== value.getMonth()" style="text-align: center">
              <span style="float: left;" v-if="isWeek(date)" class="rest"></span>
              <span style="float: left;" v-if="isNoWeek(date)" class="rest1"></span>
            {{ data.day.split('-').slice(2).join('-') }}
            <div style="float: right;" class="lunar" :class="{ festival : isFestival(date, data) }">{{ solarToLunar(date, data) }} </div>
            </el-row>
            <el-row>
              <el-col :span="2" style="margin-left: 15% ;width: 50%; float: left;" v-if="date.getMonth() === value.getMonth()" :style="{borderRadius: '27px',textAlign: 'center',fontSize: '14px',backgroundColor:'#72bfc3',fontWeight: 'bold',color: isZb(data.day,'9') ? '#109EFF':'black',backgroundColor: isZb(data.day,'9') ? '#9dd3bb':'white'}">
                <span style="float: left;" v-if="isWeek(date)" class="rest"></span>
                <span style="float: left;" v-if="isNoWeek(date)" class="rest1"></span>
               <span style="font-weight: bold; font-size: 16px;"> {{ data.day.split('-').slice(2).join('-') }}</span>
                <div style="float: right;" class="lunar" :class="{ festival : isFestival(date, data) }">{{ solarToLunar(date, data) }} </div></el-col>
            </el-row>
</template>

2.判断是否休假/补班 方法 补班和休假因为每年时间不同 所以从后端获取

 // 是否节假日
    isFestival (slotDate, slotData) {
      let solarDayArr = slotData.day.split('-')
      let lunarDay = calendar.solar2lunar(solarDayArr[0], solarDayArr[1], solarDayArr[2])/* global calendar */
      // 公历节日\农历节日\农历节气
      let festAndTerm = []
      festAndTerm.push(lunarDay.festival == null ? '' : ' ' + lunarDay.festival)
      festAndTerm.push(lunarDay.lunarFestival == null ? '' : '' + lunarDay.lunarFestival)
      festAndTerm.push(lunarDay.Term == null ? '' : '' + lunarDay.Term)
      festAndTerm = festAndTerm.join('')
      return festAndTerm
    },
    // 判断节假日
    isWeek (data) {
      let month = (data.getMonth() + 1).toString().length === 2 ? (data.getMonth() + 1) : ('0' + (data.getMonth() + 1))
      let leaveDay = data.getUTCFullYear() + '-' + month + '-' + data.getDate()
      return this.leaveOptions.includes(leaveDay)
    },
    // 判断补班
    isNoWeek (data) {
      let month = (data.getMonth() + 1).toString().length === 2 ? (data.getMonth() + 1) : ('0' + (data.getMonth() + 1))
      let leaveDay = data.getUTCFullYear() + '-' + month + '-' + data.getDate()
      return this.leaveOptions1.includes(leaveDay)
    },

3效果图:
显示效果

参考大佬文章

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Element UI是一套基于Vue.js的开源UI组件库,它提供了丰富的组件和工具,方便开发者构建现代化的Web应用程序。其Element UI日历组件是用于显示和选择日期的组件。 Element UI日历组件具有以下特点: 1. 支持选择日期、时间、日期范围等不同的模式。 2. 提供了丰富的配置选项,可以自定义日历的外观和行为。 3. 支持国际化,可以根据需要显示不同的语言和日期格式。 4. 提供了丰富的事件和方法,方便开发者与日历进行交互和操作。 要在你的Vue.js项目使用Element UI日历组件,首先需要安装Element UI库,并在你的代码引入和注册日历组件。然后,你可以在需要的地方使用<el-date-picker>标签来创建一个日历实例,并通过配置选项来自定义其行为和外观。 以下是一个使用Element UI日历组件的示例代码: ```html <template> <div> <el-date-picker v-model="selectedDate" type="date" placeholder="选择日期"> </el-date-picker> </div> </template> <script> import { DatePicker } from 'element-ui'; export default { components: { 'el-date-picker': DatePicker }, data() { return { selectedDate: '' }; } }; </script> ``` 在上面的示例,我们使用了<el-date-picker>标签创建了一个日历实例,并通过v-model指令将选的日期绑定到selectedDate变量上。通过type属性,我们指定了日历的模式为日期选择模式。placeholder属性用于设置日历的占位文本。 这只是一个简单的示例,你可以根据自己的需求和Element UI的文档进一步了解和使用日历组件的更多功能和配置选项。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值