手写月课表

农历插件:chinese-lunar-calendar - npm,这个插件可以计算农历日期和节气等

安装:

npm install --save chinese-lunar-calendar

使用: 

  import { getLunar } from 'chinese-lunar-calendar';

  let res = getLunar(years, months, day)

/*输出
{ 
  lunarMonth: 12,   //农历月份
  lunarDate: 17,    //农历日期
  isLeap: false,    //是否闰月
  solarTerm: null,  //节气,null代表没有
  lunarYear: '庚午年', //农历年份,年以正月初一开始
  zodiac: '马',     //生肖,生肖以正月初一开始
  dateStr: '腊月十七' //农历中文
}
*/

月历代码,此处只添加了放假的节假日所以没有引入插件,如果你想显示左右假日建议引入插件,像我这样手写有些费力,还有就是关于国家法定假日的显示,目前使用了一个github的博主的json文件,直接放进来的,需要每年在国家国务院更新今年法定假日后手动更新一下json文件,

github地址:GitHub - NateScarlet/holiday-cn: 📅🇨🇳中国法定节假日数据 自动每日抓取国务院公告

<template>
  <div class="timetable h100">
    <div class="timetable-b w100">
      <table class="timetable-content w100">
        <thead>
          <tr>
            <th>周一</th>
            <th>周二</th>
            <th>周三</th>
            <th>周四</th>
            <th>周五</th>
            <th>周六</th>
            <th>周日</th>
          </tr>
        </thead>
        <tbody>
          <tr v-for="(item, index) in showDateArr" :key="index">
            <td v-for="(att, j) in item.record.date" :key="j">
              <!-- 日期 -->
              <div class="daycss">
                <div>{{ att.day }}</div>
                <div>{{ att.lunarCalendar?.dateStr }}</div>
                <div>{{ att.lunarCalendar?.solarTerm }}</div>
                <div v-if="att.isOffDay">
                  <div
                    class="label"
                    style="background-color: #4e5877"
                    v-if="att.isOffDay === 'false'"
                    >班</div
                  >
                  <div class="label" v-if="att.isOffDay === 'true'">休</div>
                </div>
              </div>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
</template>

<script setup>
  import { ref } from 'vue';
  import { getLunar } from 'chinese-lunar-calendar';
  import HolidaysJson from './date.json';
  //  当前年
  let years = ref(0);
  //  当前月
  let months = ref(0);
  //  当前天
  let days = ref(0);
  //  本月第一天周几
  let monthDatOne = ref(0);
  // 这个月的总天数
  let alldays = ref(0);
  // 显示格式月份日期
  let showDateArr = ref([]);
  // 添加法定节假日+放假与上班休&班
  const legalHolidaysFn = (data) => {
    // 添加法定节假日
    data.forEach((item) => {
      item.record.date.forEach((att) => {
        if (typeof att == 'object') {
          // 添加休&班
          HolidaysJson.days.forEach((ak) => {
            if (
              ak.date.split('-')[0] == years.value &&
              ak.date.split('-')[1] == months.value &&
              att.day == ak.date.split('-')[2]
            ) {
              att.isOffDay = ak.isOffDay.toString();
            }
          });
          // ----添加节日
          // 1月1日元旦
          if (months.value == 1) {
            if (att.day == 1) {
              att.lunarCalendar.solarTerm = '元旦';
            }
          }
          // 4月5日清明节
          if (months.value == 4) {
            if (att.day == 5) {
              att.lunarCalendar.solarTerm = '清明节';
            }
          }
          // 五月一日劳动节
          if (months.value == 5) {
            if (att.day == 1) {
              att.lunarCalendar.solarTerm = '劳动节';
            }
          }
          // 十月一日国庆节
          if (months.value == 10) {
            if (att.day == 1) {
              att.lunarCalendar.solarTerm = '国庆节';
            }
          }
          // 农历正月初一春节
          if (att.lunarCalendar.dateStr == '正月初一') {
            att.lunarCalendar.solarTerm = '春节';
          }
          //农历正月初五-端午节
          if (att.lunarCalendar.dateStr == '五月初五') {
            att.lunarCalendar.solarTerm = '端午节';
          }
          // 农历八月十五-中秋节
          if (att.lunarCalendar.dateStr == '八月十五') {
            att.lunarCalendar.solarTerm = '中秋节';
          }
        }
      });
    });
    return data;
  };
  //  初始化函数
  const initFn = async () => {
    // 建一个空壳装数据
    let data = [];
    // 拿到当前年月日
    let date = new Date();
    years.value = date.getFullYear();
    months.value = date.getMonth() + 1;
    days.value = date.getDate();
    // 本月总天数
    alldays.value = new Date(years.value, months.value, 0).getDate();
    // 拼接这年这月的第一天字符串--为了获得第一天是周几
    let str = years.value  + '-' + months.value + '-01';
    let monthOnce = new Date(str);
    // 第一天周几
    monthDatOne.value = monthOnce.getDay();
    // 给空壳创建初始数据结构
    for (let i = 0; i < 6; i++) {
      data.push({
        record: {
          date: [],
        },
      });
    }
    // 用来确认只循环一变
    let num = 0;
    // 向初始结构里加数据
    for (let i = 0; i < data.length; i++) {
      for (let k = 1; k <= alldays.value; k++) {
        num += 1;
        // 把上一个月填上
        if (i == 0 && data[0].record.date.length == 0) {
          for (let t = 0; t < monthDatOne.value; t++) {
            if (t + 1 < monthDatOne.value && data[i]?.record.date.length <= 7) {
              data[i]?.record.date.push(' ');
            }
          }
        }
        // 确保只循环一变总天数
        if (num <= alldays.value) {
          if (data[i]?.record.date.length < 7) {
            // 填充数据
            data[i]?.record.date.push({
              day: k, //日期
              lunarCalendar: getLunar(years.value, months.value, k), //利用差价拿到农历和节气等
            });
          } else {
            data[i + 1]?.record.date.push({
              day: k,
              lunarCalendar: getLunar(years.value, months.value, k),
            });
            i++;
          }
        }
      }
    }
    // 处理好的数据结构赋值
    showDateArr.value = legalHolidaysFn(data);
  };
  initFn();
</script>

<style scoped lang="scss">
  .h100 {
    height: 75vh;
  }
  .timetable {
    background-color: #f1f7ff;
    .w100 {
      width: 100% !important;
    }

    .timetable-b {
      height: 100vh;
      height: 100%;
      background-color: #fff;
      overflow: auto;
      .timetable-content {
        height: 100%;
        table-layout: fixed;
        border-collapse: collapse; //设置表格的边框是否被合并为一个单一的边框
        text-align: center;
        color: #333333;
        font-weight: 400;
        font-size: 17px;

        thead {
          height: 100px;

          th {
            border: 2px solid rgba(27, 100, 240, 0.1);
          }
        }
        tbody {
          height: calc(100% - 2px) / 7;

          td {
            padding: 10px;
            border: 2px solid rgba(27, 100, 240, 0.1);
            .dmsjandjs-b {
              display: flex;
              flex-direction: column;
              justify-content: center;
            }
          }
        }
      }
    }
  }
  .daycss {
    display: flex;
    font-size: 14px;
    justify-content: flex-start;
    div {
      margin-right: 10px;
    }
    .label {
      width: 20px;
      height: 20px;
      text-align: center;
      background-color: #eb3333;
      color: #fff;
      border-radius: 50%;
    }
  }
  .classCss {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    text-align: left;
    font-size: 14px;
  }
  /* 整个滚动条 */
  ::-webkit-scrollbar {
    width: 10px; /* 滚动条的宽度 */
    height: 10px; /* 滚动条的高度,对水平滚动条有效 */
    background-color: #fff; /* 滚动条的背景颜色 */
  }

  /* 滚动条轨道 */
  ::-webkit-scrollbar-track {
    border-radius: 10px;
    background: #fff; /* 轨道的背景颜色 */
  }

  /* 滚动条滑块 */
  ::-webkit-scrollbar-thumb {
    border-radius: 10px;
    background-color: #c1c1c1; /* 滑块的背景颜色 */
    border: 3px solid #fff; /* 滑块的边框和轨道相同的颜色,可以制造“边距”的效果 */
  }

  /* 滚动条滑块:悬停效果 */
  ::-webkit-scrollbar-thumb:hover {
    background-color: #a8a8a8; /* 滑块的悬停颜色 */
  }

  /* 滚动条滑块:激活时的效果 */
  ::-webkit-scrollbar-thumb:active {
    background-color: #888888; /* 滑块的激活颜色 */
  }

  /* 滚动条按钮(上下箭头) */
  ::-webkit-scrollbar-button {
    display: none; /* 通常情况下不显示滚动条按钮 */
  }
  .classcountcss {
    color: #000;
    margin: 3px 10px;
  }
</style>
{
  "days": [
        {
            "name": "元旦",
            "date": "2024-01-01",
            "isOffDay": true
        },
        {
            "name": "春节",
            "date": "2024-02-04",
            "isOffDay": false
        },
        {
            "name": "春节",
            "date": "2024-02-10",
            "isOffDay": true
        },
        {
            "name": "春节",
            "date": "2024-02-11",
            "isOffDay": true
        },
        {
            "name": "春节",
            "date": "2024-02-12",
            "isOffDay": true
        },
        {
            "name": "春节",
            "date": "2024-02-13",
            "isOffDay": true
        },
        {
            "name": "春节",
            "date": "2024-02-14",
            "isOffDay": true
        },
        {
            "name": "春节",
            "date": "2024-02-15",
            "isOffDay": true
        },
        {
            "name": "春节",
            "date": "2024-02-16",
            "isOffDay": true
        },
        {
            "name": "春节",
            "date": "2024-02-17",
            "isOffDay": true
        },
        {
            "name": "春节",
            "date": "2024-02-18",
            "isOffDay": false
        },
        {
            "name": "清明节",
            "date": "2024-04-04",
            "isOffDay": true
        },
        {
            "name": "清明节",
            "date": "2024-04-05",
            "isOffDay": true
        },
        {
            "name": "清明节",
            "date": "2024-04-06",
            "isOffDay": true
        },
        {
            "name": "清明节",
            "date": "2024-04-07",
            "isOffDay": false
        },
        {
            "name": "劳动节",
            "date": "2024-04-28",
            "isOffDay": false
        },
        {
            "name": "劳动节",
            "date": "2024-05-01",
            "isOffDay": true
        },
        {
            "name": "劳动节",
            "date": "2024-05-02",
            "isOffDay": true
        },
        {
            "name": "劳动节",
            "date": "2024-05-03",
            "isOffDay": true
        },
        {
            "name": "劳动节",
            "date": "2024-05-04",
            "isOffDay": true
        },
        {
            "name": "劳动节",
            "date": "2024-05-05",
            "isOffDay": true
        },
        {
            "name": "劳动节",
            "date": "2024-05-11",
            "isOffDay": false
        },
        {
            "name": "端午节",
            "date": "2024-06-10",
            "isOffDay": true
        },
        {
            "name": "中秋节",
            "date": "2024-09-14",
            "isOffDay": false
        },
        {
            "name": "中秋节",
            "date": "2024-09-15",
            "isOffDay": true
        },
        {
            "name": "中秋节",
            "date": "2024-09-16",
            "isOffDay": true
        },
        {
            "name": "中秋节",
            "date": "2024-09-17",
            "isOffDay": true
        },
        {
            "name": "国庆节",
            "date": "2024-09-29",
            "isOffDay": false
        },
        {
            "name": "国庆节",
            "date": "2024-10-01",
            "isOffDay": true
        },
        {
            "name": "国庆节",
            "date": "2024-10-02",
            "isOffDay": true
        },
        {
            "name": "国庆节",
            "date": "2024-10-03",
            "isOffDay": true
        },
        {
            "name": "国庆节",
            "date": "2024-10-04",
            "isOffDay": true
        },
        {
            "name": "国庆节",
            "date": "2024-10-05",
            "isOffDay": true
        },
        {
            "name": "国庆节",
            "date": "2024-10-06",
            "isOffDay": true
        },
        {
            "name": "国庆节",
            "date": "2024-10-07",
            "isOffDay": true
        },
        {
            "name": "国庆节",
            "date": "2024-10-12",
            "isOffDay": false
        }
    ]}

最终效果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/725817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux基础IO】重定向以及原理分析

我们先来看下面一个情况&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define filename "text.txt"int main(){close(1);//关…

人工智能在【妇科肿瘤】领域的最新进展|顶刊速递·24-06-20

小罗碎碎念 文献主题&#xff1a;人工智能在妇科肿瘤中的最新研究进展 如下图所示&#xff0c;今天的六篇推文中&#xff0c;研究的全部都是妇科疾病&#xff0c;包括&#xff1a; 乳腺癌宫颈癌卵巢癌子宫内膜癌 老板经常对我说&#xff0c;不要只关注自己的研究领域&#xff…

Python | Leetcode Python题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution:def twoSum(self, numbers: List[int], target: int) -> List[int]:low, high 0, len(numbers) - 1while low < high:total numbers[low] numbers[high]if total target:return [low 1, high 1]elif total <…

ml307A模块连接阿里云(详细版)

1、需要的信息 MQTT连接参数、订阅或发布的主题、服务器地址、端口1883 服务器地址&#xff1a; alFMz7jnArW.iot-as-mqtt.cn-shanghai.aliyuncs.com 注&#xff1a;重要的信息阿里云信息大家不要透露&#xff0c;写完笔记会及时删除产品及设备&#xff0c;大家用自己的信息…

(7)摄像机和云台

文章目录 前言 1 云台 2 带有MAVLink接口的摄像机 3 相机控制和地理标签 4 视频质量差的常见修复方法 5 详细主题 前言 Copter、Plane 和 Rover 最多支持 3 轴云台&#xff0c;包括自动瞄准感兴趣区域&#xff08;ROI&#xff09;的相机和自动触发相机快门等先进功能。按…

C#开发-集合使用和技巧(七)分组方法GroupBy的使用

介绍 GroupBy 是 C# 中的一个 LINQ 扩展方法&#xff0c;用于根据指定的键将序列中的元素分组。它可以根据提供的键函数将数据分割成多个组&#xff0c;每组包含具有相同键的元素。 GroupBy也是一个在集合用比较常用的方法&#xff0c;也是比较好用的&#xff0c;适用于对序列…

前端技术栈二(promise模块化编程)

一、promise 1 Promise 基本介绍 传统的 Ajax 异步调用在需要多个操作的时候&#xff0c;会导致多个回调函数嵌套&#xff0c;导致代码不够直观&#xff0c;就是常说的 Callback Hell 为了解决上述的问题&#xff0c;Promise 对象应运而生&#xff0c;在 EMCAScript 2015 当中…

【MySQL连接器(Python)指南】02-MySQL连接器(Python)版本与实现

文章目录 前言MySQL连接器(Python)版本MySQL连接器(Python)实现总结前言 MySQL连接器(Python),用于让Python程序能够访问MySQL数据库。要想让Python应用程序正确高效地使用MySQL数据,就需要深入了解MySQL连接器的特性和使用方法。 MySQL连接器(Python)版本 下表总结了可用的…

java 不可变集合的创建和Stream流的使用

文章目录 一、创建不可变的集合1.1为什么创建不可变的集合1.2 创建List、Set和Map的不可变集合1.2.1 创建List的不可变集合1.2.2 创建Set 的不可变集合1.2.3 创建Map的不可变集合 二、使用集合 的Stream 流2.1 Stream的使用步骤2.2 Stream的方法 三、如何获取Stream 流对象四、…

【PyQt5】python可视化开发:PyQt5介绍,开发环境搭建快速入门

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

shop APP UI

APP和微信小程序不一样&#xff0c; APP的客户端需要两个(一个安卓&#xff0c;一个苹果IOS); APP的服务端需要&#xff08;管理端后台&#xff0c;接口&#xff09;&#xff1b;

qml:导入B站Up主的FluentUI插件

文章目录 文章介绍如何加载1、下载代码2、官方文档和组件介绍 运行FluentUI新建自己的qml项目&#xff0c;并导入FluentUI 文章介绍 up主“会磨刀的小猪”模仿微软Fluent风格写的界面&#xff0c;可以理解为用qt和qml写出的win10/win11风格的界面&#xff0c;比原本的qt风格好…

uni-app 表格tr添加点击事件

首先找到uni.tr这个组件的页面&#xff0c;路径uni_modules/uni-table/components/uni-tr/uni-tr.vue 然后添加点击事件 在你的表格页面就可以添加点击事件了

【Java】已解决java.util.concurrent.TimeoutException异常

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.util.concurrent.TimeoutException异常 一、问题背景 java.util.concurrent.TimeoutException是Java并发编程中常见的一个异常&#xff0c;它通常发生在使用Future或Future…

基于Java的高校校园点餐系统

开头语&#xff1a; 你好&#xff0c;我是计算机专业的学长&#xff0c;如果你对高校校园点餐系统感兴趣或有相关开发需求&#xff0c;欢迎联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;Eclipse、Tomcat 系统展示…

网络校时服务器:铁路对时有妙招

在信息高速发展的今天&#xff0c;铁路作为国家的经济大动脉&#xff0c;与广大市民生活息息相关&#xff0c;担负着运送大流量乘客、保证交通畅通的重任&#xff0c;为了保证列车的正点运行和乘客的行程&#xff0c;对时间精准度的要求是非常严格的。随着我国铁路的发展速度和…

WPF三方UI库全局应用MessageBox样式(.NET6版本)

一、问题场景 使用HandyControl简写HC 作为基础UI组件库时&#xff0c;希望系统中所有的MessageBox 样式都使用HC的MessageBox&#xff0c;常规操作如下&#xff1a; 在对应的xxxx.cs 顶部使用using 指定特定类的命名空间。 using MessageBox HandyControl.Controls.Message…

华为---OSPF多区域配置(二)

9.2 OSPF多区域配置 9.2.1 原理概述 在OSPF单区域中&#xff0c;每台路由器都需要收集其他所有路由器的链路状态信息&#xff0c;如果网络规模不断扩大&#xff0c;链路状态信息也会随之不断增多&#xff0c;这将使得单台路由器上链路状态数据库非常庞大&#xff0c;导致路由…

基于Pytorch框架的深度学习Swin-Transformer神经网络食物分类系统源码

第一步&#xff1a;准备数据 5种鸟类数据&#xff1a;self.class_indict ["苹果派", "猪小排", "果仁蜜饼", "生牛肉薄片", "鞑靼牛肉"] &#xff0c;总共有5000张图片&#xff0c;每个文件夹单独放一种数据 第二步&…

期望28K,5.14日蚂蚁java社招一面(杭州)

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 1、线程池的几个参数&#xff1f; 2、一道关于线程池的代码题目&#xff0c;数据库中存任务&#xff0c;通过一个有10个核心线程和无限队列的线程池…