手写月课表

news2024/9/20 10:42:44

农历插件: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 = date.getFullYear() + '-' + 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
        }
    ]}

最终效果展示:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4大利好因素释放顺风车市场潜力,嘀嗒出行即将登陆港交所

经历了十多年发展&#xff0c;共享出行行业即将迎来第一个上市公司——专注顺风车和智慧出租车的嘀嗒出行。 近日&#xff0c;嘀嗒出行通过了港交所聆讯&#xff0c;根据招股书&#xff0c;嘀嗒出行2023年顺风车搭乘次数和交易额分别为约1.3亿次和86亿元&#xff0c;同比分别增…

无监督医学图像翻译与对抗扩散模型| 文献速递-深度学习结合医疗影像疾病诊断与病灶分割

Title 题目 Unsupervised Medical Image Translation With Adversarial Diffusion Models 无监督医学图像翻译与对抗扩散模型 01 文献速递介绍 多模态成像对于全面评估人体解剖结构和功能至关重要[1]。通过各自模态捕获的互补组织信息&#xff0c;有助于提高诊断准确性并改…

安装免费版的jfrog artifactory oss

1、下载 软件&#xff0c;本案例安装的是 jfrog-artifactory-oss-7.59.11-linux.tar.gz https://releases.jfrog.io/artifactory/bintray-artifactory/org/artifactory/oss/jfrog-artifactory-oss/ 2、解压下载下来的压缩包 tar zxf jfrog-artifactory-oss-7.59.11-linux.tar…

护眼台灯选购:台灯怎么选对眼睛好?

如今孩子们的学习压力越来越大&#xff0c;熬夜学习已成常态&#xff0c;视力问题也日益凸显。尽管没有详细的地域数据&#xff0c;但整体而言&#xff0c;中国青少年的近视率已经高居世界第一位&#xff0c;且不同地区的近视率可能存在一定的差异。眼睛健康愈发受到关注&#…

探索数据分析无限潜能:vividime Desktop助力企业智能决策

在数字化浪潮席卷全球的今天&#xff0c;数据已经成为企业最宝贵的资产之一。通过对海量数据的深度挖掘和分析&#xff0c;企业能够洞察市场趋势、优化运营流程、提升用户体验&#xff0c;从而在激烈的市场竞争中脱颖而出。永洪科技的vividime Desktop作为一款功能强大、操作简…

Survival Animations

一套生存游戏的动画集,包括采集、建造、捕鱼、剥皮/鞣制、篝火等更多内容。 总动画数:89 建造/制作 30 篝火 28 饮水 3 水壶 3 觅食 2 治疗 3 空闲 1 原始捕鱼 7 剥皮 1 矛捕鱼 4 伐木 5 下载:​​Unity资源商店链接资源下载链接 效果图:

docker容器内部网络不通,宿主机有网

在docker容器中能ping www.baidu.com 但是curl www.baidu.com没有反应。 最终排查看到是mtu设置的问题。 MTU&#xff08; Maximum Transmission Unit&#xff0c;最大传输单位&#xff09;,用来设置描述网络接口的最大传输量&#xff0c;需要注意的是&#xff0c;每个网络接…

【桌面运维 1.0】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、Windows系统安装 卡在 网络连接怎么办 1、Windows系统安装 卡在 网络连接怎么办 关键步骤 &#xff1a; shift F10&#xff0c;调出运行框&#xff0c;输入以下…

边缘微型AI的宿主?—— RISC-V芯片

一、RISC-V技术 RISC-V&#xff08;发音为 "risk-five"&#xff09;是一种基于精简指令集计算&#xff08;RISC&#xff09;原则的开放源代码指令集架构&#xff08;ISA&#xff09;。它由加州大学伯克利分校在2010年首次发布&#xff0c;并迅速获得了全球学术界和工…

从粉丝基础到带货数据:全方位解读TikTok带货达人的选择之道

在如今的数字营销时代&#xff0c;TikTok已成为品牌推广和产品销售的重要平台。通过与合适的TikTok带货达人合作&#xff0c;品牌可以迅速吸引大量的潜在客户&#xff0c;实现销售转化。然而&#xff0c;选择合适的TikTok达人需要慎重考虑多个因素。本文Nox聚星将和大家详细阐述…

再进一步!deepin V23成功适配SpacemiT MUSE™ Box

内容来源&#xff1a;deepin&#xff08;深度&#xff09;社区 deepin作为国内领先的Linux操作系统发行版&#xff0c;一直致力于为用户提供更广泛的硬件支持&#xff0c;并积极投身于蓬勃发展的RISC-V生态建设。自deepin-ports SIG&#xff08;特别兴趣小组&#xff09;成立以…

企业设备管理现状与解决方案

在当今企业运营中&#xff0c;设备管理作为保障生产稳定、提升效率的重要环节&#xff0c;其复杂性和挑战性日益凸显。无论是生产车间、石油化工、物业小区&#xff0c;还是消防器材、建筑施工等领域&#xff0c;都面临着设备故障频发、维修流程繁琐等共性问题。 为了帮助企业…

PostgreSQL源码分析——口令认证

认证机制 对于数据库系统来说&#xff0c;其作为服务端&#xff0c;接受来自客户端的请求。对此&#xff0c;必须有对客户端的认证机制&#xff0c;只有通过身份认证的客户端才可以访问数据库资源&#xff0c;防止非法用户连接数据库。PostgreSQL支持认证方法有很多&#xff1…

商淘云:服装实体店引流会员营销方案

服装零售实体店面临着越来越大的挑战&#xff0c;尤其是在吸引和保持忠诚顾客方面。为了应对这一挑战&#xff0c;制定一套有效的引流会员营销方案显得尤为重要。商淘云将探讨如何通过创新的营销策略和增强的顾客体验&#xff0c;提升实体店的会员数量和销售业绩&#xff0c;从…

酒店会员寄存酒水管理方法,佳易王酒水寄存管理系统一卡管理多个商品操作教程

酒店会员寄存酒水管理方法&#xff0c;佳易王酒水寄存管理系统一卡管理多个商品操作教程 一、前言 以下软件操作教程以&#xff0c;佳易王酒店酒水寄存管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、会员项目设置操作教程 点击 导…

地图上绘制地铁线路

需求背景 不管是之前的pms 地铁还是location都会有需求涉及到地图上绘制地铁线路&#xff0c;来查看当前位置是否靠近地铁口&#xff0c;常规的交互可以看下高德地图&#xff0c;如图所示&#xff1a; 需求分析 不管是高德地图还是百度地图都提供了简易版的地铁线路图&#x…

从零开始! Jupyter Notebook的安装教程

&#x1f680; 从零开始! Jupyter Notebook的安装教程 摘要 &#x1f4c4; Jupyter Notebook 是一个广受欢迎的开源工具&#xff0c;特别适合数据科学和机器学习的开发者使用。本文将详细介绍从零开始安装 Jupyter Notebook 的步骤&#xff0c;包括各种操作系统的安装方法&am…

Fisnar Liquid Control 操作维修手LC Pump Manual Twinmixer Maintenance 中文

Fisnar Liquid Control 操作维修手LC Pump Manual Twinmixer Maintenance 中文

python读取excel中的图片超链接,批量下载到本地

1、代码 import xlrd import requestsread_path C:\\Users\\asus\\Desktop\\大法\\公务员\\国考\\行测\\1-推理判断\\URLs.xlsx bk xlrd.open_workbook(read_path) shxrange range(bk.nsheets) sh bk.sheet_by_name("Sheet2") nrows sh.nrows ncols sh.ncols …

Linux安装kvm虚拟机

kvm是基于内核的虚拟机&#xff0c;为什么要用kvm不用vmware、virtual box… 只有一个原因&#xff0c;它非常快&#xff01;本机使用linux开发也是因为它快&#xff01;linux在老电脑上都能流畅运行&#xff0c;更别说现代电脑&#xff0c;如果你觉得装Linux并没有比win快多少…