手写排班日历

手写排班日历:

效果图:

在这里插入图片描述

vue代码如下:

<template><div class="YSPB"><div class="title">排班日历</div><div class="banner"><span class='iconfont icon-youjiantou ' @click="nextMounth('l')">{{ "{" }}</span><span>{{ y }}{{ m }}</span><span class='iconfont icon-youjiantou' @click="nextMounth('r')">{{ "}" }}</span></div><div class="cander" v-show="show"><div class="week"><span class='box' style='color:#ff0000a1;'></span><span class='box'></span><span class='box'></span><span class='box'></span><span class='box'></span><span class='box'></span><span class='box' style='color:#ff0000a1;'></span></div><div class="days"><div class="days1" v-for="(obj, i) in dateList" :key="i"><div :class="['txt',obj.day == today ? (obj.bool ? 'sel' : '') : '',obj.bool ? '' : 'old',obj.isWork == '上午' ? 'shangwuColor' : obj.isWork == '下午' ? 'xiawuColor' : obj.isWork == '全天' ? 'quantianColor' : '',obj.label == '左' ? 'Color_l' : obj.label == '中' ? 'Color_z' : obj.label == '右' ? 'Color_r' : '']"@click='selClick(obj.day, obj.bool, obj)'><span v-if="obj.isWork == '上午'" class="t1">{{ obj.day }}</span><span v-if="obj.isWork == '上午'" class="t2">{{ obj.lunar }}</span><!-- <div :class="['t3', obj.isWork == '上午' ? 't4' : '']" v-show="(obj.day != today) && obj.bool && obj.isWork == '上午'">上午</div> --><span v-if="obj.isWork == '下午'" class="t1">{{ obj.day }}</span><span v-if="obj.isWork == '下午'" class="t2">{{ obj.lunar }}</span><!-- <div :class="['t3', obj.isWork == '下午' ? 't4' : '']" v-show="(obj.day != today) && obj.bool && obj.isWork == '下午'">下午</div> --><span v-if="obj.isWork == '全天'" class="t1">{{ obj.day }}</span><span v-if="obj.isWork == '全天'" class="t2">{{ obj.lunar }}</span><!-- <div :class="['t3', obj.isWork == '全天' ? 't4' : '']" v-show="(obj.day != today) && obj.bool && obj.isWork == '全天'">全天</div> --><span v-if="!obj.isWork" class="t1">{{ obj.day }}</span><span v-if="!obj.isWork" class="t2">{{ obj.lunar }}</span><div :class="['t3']" v-show="(obj.day != today) && obj.bool && !obj.isWork"></div></div></div></div></div><div class="bot">注意:所有排班不可自行更改,如需更改排班,请联系医院管理人员进行更改</div><div class="forterColor"><div class="forterColor1"><div class="shangwuColor_qiu"></div> <span>上午班</span></div><div class="forterColor1"><div class="xiawuColor_qiu"></div><span>下午班</span></div><div class="forterColor1"><div class="quantianColor_qiu"></div><span>全天班</span></div></div></div>
</template>
<script>
export default {name: "cu-divClick",props: {list: {type: Array,default: () => []},clickAction: {type: Number,default: 3}},data() {return {show: true,dateList: [],today: new Date().getDate(),y: new Date().getFullYear(),m: new Date().getMonth() + 1,pbList: [], //排班列表};},mounted() {this.dateList = this.getTime()this.pbList = [{"doctorCode": "10015","doctorName": "韩辰份","resourcesDate": "2024-09-02","timeType": "全天"},{"doctorCode": "10015","doctorName": "韩辰份","resourcesDate": "2024-09-03","timeType": "全天"},{"doctorCode": "10015","doctorName": "韩辰份","resourcesDate": "2024-09-15","timeType": "上午"},{"doctorCode": "10015","doctorName": "韩辰份","resourcesDate": "2024-09-16","timeType": "上午"},{"doctorCode": "10015","doctorName": "韩辰份","resourcesDate": "2024-09-17","timeType": "上午"},{"doctorCode": "10015","doctorName": "韩辰份","resourcesDate": "2024-09-18","timeType": "下午"},{"doctorCode": "10015","doctorName": "韩辰份","resourcesDate": "2024-09-26","timeType": "全天"},{"doctorCode": "10015","doctorName": "韩辰份","resourcesDate": "2024-09-27","timeType": "全天"},];this.pbList = this.labelArray(this.pbList);console.log("this.pbList:", this.pbList)this.isWork()},watch: {dateList: {handler(newval) {this.isWork()},deep: true,immediate: true}},methods: {isWork() {this.show = falsethis.dateList.forEach(val => {this.pbList.forEach(item => {const date = this.y + '-' + this.m + '-' + val.dayif (val.timeDate == item.resourcesDate && item.timeType == "上午") {val.isWork = "上午"console.log(date + val.isWork)val.label = item.label} else if (val.timeDate == item.resourcesDate && item.timeType == "下午") {val.isWork = "下午"console.log(date + val.isWork)val.label = item.label} else if (val.timeDate == item.resourcesDate && item.timeType == "全天") {val.isWork = "全天"console.log(date + val.isWork)val.label = item.label}})})this.show = true},areConsecutiveDates(date1, date2) {let d1 = new Date(date1);let d2 = new Date(date2);let oneDay = 24 * 60 * 60 * 1000;return Math.round((d2 - d1) / oneDay) === 1;},labelArray(arr) {let result = [];let i = 0;while (i < arr.length) {let start = i;let end = i;while (end + 1 < arr.length && arr[end].timeType === arr[end + 1].timeType && this.areConsecutiveDates(arr[end].resourcesDate, arr[end + 1].resourcesDate)) {end++;}if (start === end) {result.push(arr[start]);} else {result.push({ ...arr[start], label: '左' });// 上午/下午/全天-左边元素for (let j = start + 1; j < end; j++) {result.push({ ...arr[j], label: '中' });// 上午/下午/全天-中间元素}result.push({ ...arr[end], label: '右' });// 上午/下午/全天-右边元素}i = end + 1;}return result;},/* 日历 ----------------------------------*/// 选中日期selClick(day, flag, obj) {console.log(obj)if (!flag) returnthis.today = day},//获取当月天数getMounthNum(m) {let days = 0if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {days = 31} else if (m == 4 || m == 6 || m == 9 || m == 11) {days = 30} else if (m == 2) {if ((this.y % 4 == 0 && this.y % 100 != 0) || (this.y % 400 == 0)) {days = 29} else {days = 28}}return days},//获取当月每一天对应周几getTime() {const date = new Date(this.y + '/' + this.m + '/' + '1')const arr = []const start = date.getDay()const end = new Date(this.y + '/' + this.m + '/' + this.getMounthNum(this.m)).getDay()for (let i = 1 - start; i <= this.getMounthNum(this.m) + 6 - end; i++) {let day = '',week = '',lunar = '',bool = true,m = '',y = this.y,today = this.today;if (i < 1) {m = this.m - 1if (m < 1) {y--m = 12}day = this.getMounthNum(m) + i} else if (i >= 1 && i <= this.getMounthNum(this.m)) {m = this.mday = i} else if (i > this.getMounthNum(this.m)) {m = this.m + 1if (m > 12) {y++m = 1}day = i - this.getMounthNum(this.m)}week = this.setWeek(new Date(y + '/' + m + '/' + day).getDay())day = day >= 10 ? day.toString() : '0' + dayconst ary = this.$cu.test.getLunar(new Date(y + '/' + m + '/' + day))if (day < this.today || i < 1 || i > this.getMounthNum(this.m)) {bool = false}console.log("y")m = m >= 10 ? m.toString() : '0' + mlet timeDate = y + "-" + m + "-" + dayarr.push({day,week,lunar: ary[1],nl: ary[0],bool,timeDate})}return arr},setWeek(val) {switch (val) {case 0:val = '周日'break;case 1:val = '周一'break;case 2:val = '周二'break;case 3:val = '周三'break;case 4:val = '周四'break;case 5:val = '周五'break;case 6:val = '周六'break;}return val},// 下一月或上一月nextMounth(val) {if (this.y == new Date().getFullYear() && this.m == new Date().getMonth() + 1 && val == 'l') returnthis.show = falseif (val == 'l') {this.m--if (this.m < 1) {this.y--this.m = 12}} else if (val == 'r') {this.m++if (this.m > 12) {this.y++this.m = 1}}if (this.m != new Date().getMonth() + 1) {this.today = null} else {this.today = new Date().getDate()}this.dateList = this.getTime()this.show = true}/* 日历 ----------------------------------*/}
};
</script><style lang="less" scoped>
.YSPB {width: 100%;height: 100%;background-color: #f8f8f8;.title {// line-height: 110px;text-align: center;background-color: #fff;font-size: 24px;font-weight: bold;color: #000000;border-bottom: 1px solid #ddd;padding: 10px 0px;}.banner {display: flex;align-items: center;// line-height: 110px;text-align: center;background-color: #fff;font-size: 24px;font-weight: bold;padding: 20px 0px;.iconfont {flex: 1;color: #999;cursor: pointer;-moz-user-select: none;/*mozilar*/-webkit-user-select: none;/*webkit*/-ms-user-select: none;/*IE*/user-select: none;}.right {display: inline-block;transform: rotate(180deg);}span {display: inline-block;margin: 0 30px;color: #000;}}.cander {background-color: #fff;padding: 0 27px 50px;.week {height: 62px;border-radius: 31px;background-color: #f0f0f0;display: flex;.box {/* 每个项占宽度的 14% */width: 14.285714285714286%;font-size: 20px;display: flex;align-items: center;justify-content: center;}}.days {width: 100%;margin-top: 30px;display: flex;flex-wrap: wrap;.days1 {padding-top: 30px;/* 每个项占宽度的 14% */width: 14.285714285714286%;display: flex;align-items: center;justify-content: center;.txt {padding: 10px 14px;position: relative;text-align: center;color: #000;display: flex;flex-direction: column;align-items: center;justify-content: center;.t1 {display: inline-block;font-size: 20px;color: #333;line-height: 20px;}.t2 {display: block;font-size: 12px;color: #666;line-height: 12px;}.t3 {position: absolute;top: 0;right: 0;color: #00AF46;font-size: 12px;}.t4 {color: #F8764E;}}/* 设置每一行的第一位和第七位的文字颜色为红色 */.old {opacity: 0.5;/* 淡化子元素背景色 */.t1,.t2 {color: #b3b3b3;}}}.days1:nth-child(7n + 1),.days1:nth-child(7n) {.txt {span {color: #ff0000a1;}}}}}.forterColor1 {display: flex;align-items: center;span {margin-left: 10px;}}
}.sel {border-radius: 50%;border: 1px solid #dddddd;}.shangwuColor_qiu {margin-top: 4px;width: 18px;height: 18px;background-color: #ed4014;border-radius: 50%;
}.xiawuColor_qiu {margin-top: 4px;width: 18px;height: 18px;background-color: #19be6b;border-radius: 50%;
}.quantianColor_qiu {margin-top: 4px;width: 18px;height: 18px;background-color: #2d8cf0;border-radius: 50%;
}.bot {padding: 10px 30px;font-size: 16px;color: #999;// line-height: 34px;text-align: justify;
}.forterColor {display: flex;align-items: center;justify-content: space-between;padding: 10px 30px;font-size: 16px;
}.shangwuColor {margin-top: 4px;background-color: #ed4014;border-radius: 50%;.t1,.t2 {color: #fff !important;}
}.xiawuColor {margin-top: 4px;background-color: #19be6b;border-radius: 50%;.t1,.t2 {color: #fff !important;}
}.quantianColor {margin-top: 4px;background-color: #2d8cf0;border-radius: 50%;.t1,.t2 {color: #fff !important;}
}.Color_l {border-radius: 140px 0 0 140px;width: 100% !important;
}.Color_z {border-radius: 0 0 0 0;width: 100% !important;
}// .Color_z::before {
//   content: "";
//   position: absolute;
//   top: 0;
//   left: 0;
//   width: 100%;
//   height: 100%;
//   background-color: rgba(0, 0, 0, 0.1);
//   /* 半透明覆盖层 */
//   z-index: 1;
// }.Color_r {border-radius: 0 140px 140px 0;width: 100% !important;
}.t1 {font-weight: bold;font-size: 20px !important;
}.t2 {font-size: 12px !important;
}</style>

学习内容:

提示:这里可以添加要学的内容

例如:

  1. 搭建 Java 开发环境
  2. 掌握 Java 基本语法
  3. 掌握条件语句
  4. 掌握循环语句

学习时间:

提示:这里可以添加计划学习的时间

例如:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习产出:

提示:这里统计学习计划的总量

例如:

  • 技术笔记 2 遍
  • CSDN 技术博客 3 篇
  • 习的 vlog 视频 1 个

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jmeter设置全局token

1、创建setup线程&#xff0c;获取token的接口在所有线程中优先执行&#xff0c;确保后续线程可以拿到token 2、添加配置原件-Http信息头管理器&#xff0c;添加取样器-http请求 配置好接口路径&#xff0c;端口&#xff0c;前端传参数据&#xff0c;调试一下&#xff0c;保证获…

影刀RPA实战:自动化同步商品库存至各大电商平台(二)

在当今的电商世界中&#xff0c;多平台运营已成为常态。商家需要在多个电商平台上维护商品库存的一致性&#xff0c;以确保顾客体验的流畅性和库存管理的高效性。运营人员每天面临的问题&#xff0c;就是把公司的商品库存数据&#xff0c;间断性的同步到电商平台上&#xff0c;…

简单比较 http https http2,我们要如何把http升级为https

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 什么是HTTP 超文本传输​​协议&#xff08;HTTP&#xff09;是用于传输诸如HTML的超媒体文档的应用层协议。它被设计用于Web浏览器和Web服务器之间的通信&#xff0c;但它也…

C# 通过拖控件移动窗体

目录 引言一、通过控件事件移动窗体1、创建窗体界面2、添加控件事件3、添加代码 二、通过windowsAPI移动窗体1、 构建窗体和添加事件2、代码展示 三、其它方式 引言 在C#Form窗体设计中&#xff0c;如果我们不需要使用默认边框设计自己个性化的窗体&#xff08;FromBorderStyl…

2.关于Cloud各种组件的停更/升级/替换

目前主流的cloud组件 备注&#xff1a;黑色部分是springcloud社区原版&#xff0c;红色的是SpringCloud Alibaba。 服务注册与发现 Consul Alibaba Nacos 服务调用和负载均衡 LoadBalancer OpenFeign 分布式事务 Alibaba Seata 服务熔断和降级 Circuit Breaker Alibaba Sentine…

Golang使用ReverseProxy实现反向代理

目录 1.源码结构体 2.官方单机示例 3.使用示例 4.简单的http服务&#xff08;用于测试&#xff09; 1.源码结构体 type ReverseProxy struct {// Rewrite 必须是一个函数&#xff0c;用于将请求修改为要使用 Transport 发送的新请求。然后&#xff0c;其响应将原封不动地…

微软数据库的SQL注入漏洞解析——Microsoft Access、SQLServer与SQL注入防御

说明:本文仅是用于学习分析自己搭建的SQL漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 。…

Numba加速计算:最近邻插值(CPU+ GPU + Z轴切块 + XYZ轴切块 + 多线程)

文章目录 最近邻插值&#xff08;加速方法&#xff09;&#xff08;1&#xff09;scipy.ndimage.zoom&#xff08;2&#xff09;Numba-CPU加速&#xff08;3&#xff09;Numba-GPU加速&#xff08;4&#xff09;Numba-CPU加速&#xff08;Z轴切块&#xff09;&#xff08;5&…

分类预测|基于贝叶斯优化长短期记忆网络的数据分类预测Matlab程序 多特征输入多类别输出 BO-LSTM 附赠预测新数据

分类预测|基于贝叶斯优化长短期记忆网络的数据分类预测Matlab程序 多特征输入多类别输出 BO-LSTM 附赠预测新数据 文章目录 一、基本原理BO-LSTM分类预测原理和流程总结 二、实验结果三、核心代码四、代码获取五、总结 分类预测|基于贝叶斯优化长短期记忆网络的数据分类预测Mat…

利用zabbix监控ogg进程(Windows平台)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

QT:音视频播放器

目录 一.播放器设计 二.需要使用的控件 三.选择视频 四.播放视频 五.暂停视频 六.关闭视频 七.播放状态设置 八.切换视频(上一首) 九.切换视频(下一首) 十.设置视频滑块 十一.更新滑块显示 十二.实现效果 十三.代码设计 1.mainwindow.h 2.mainwindow.cpp 一.播放…

Windows上安装RabbitMQ

rabbitmq是干嘛的我就不介绍了&#xff0c;直接开始安装教程。 搭建成功演示图 下载安装包 https://pan.baidu.com/s/1ZlCFxh9Q00ynSU3ZCpTC9Q?pwdry51​pan.baidu.com/s/1ZlCFxh9Q00ynSU3ZCpTC9Q?pwdry51 下载完后有两个包(erlang和rabbitmq) 先安装otp_win64_24.1.7.exe…

wifiip地址可以随便改吗?wifi的ip地址怎么改变

对于普通用户来说&#xff0c;WiFi IP地址的管理和修改往往显得神秘而复杂。本文旨在深入探讨WiFi IP地址是否可以随意更改&#xff0c;以及如何正确地改变WiFi的IP地址。虎观代理小二将详细解释WiFi IP地址的基本概念、作用以及更改时需要注意的事项&#xff0c;帮助用户更好地…

使用ShardingSphere实现MySql的分库分表

目录 一 什么是ShardingSphere分库分表 二 代码实现 1.导入相关依赖 2.配置相关参数 3.创建学生类以及mapper接口 4.实现 StandardShardingAlgorithm接口自定义分片算法 唐洋洋我知道你在看!!!嘿嘿 一 什么是ShardingSphere分库分表 我们平时在设计数据库的时候&#xf…

2-92 基于matlab的KPCA的TE过程的故障监测

基于matlab的KPCA的TE过程的故障监测&#xff0c;利用核主元分析法(KPCA)来进行故障检测的思想,将输入空间中复杂的非线性问题转化为特征空间中的线性问题&#xff0c;计算步骤&#xff1a;&#xff08;1&#xff09; 选择监控变量&#xff0c;收集正常工况下的各变量的样本&am…

移动订货小程序哪个好 批发订货系统源码哪个好

订货小程序就是依托微信小程序的订货系统&#xff0c;微信小程序订货系统相较于其他终端的订货方式&#xff0c;能够更快进入商城&#xff0c;对经销商而言更为方便。今天&#xff0c;我们一起盘点三个主流的移动订货小程序&#xff0c;看看哪个移动订货小程序好。 第一、核货宝…

无线麦克风哪款好用,手机领夹麦克风哪个牌子好,麦克风推荐

随着短视频与直播行业的蓬勃发展&#xff0c;无线领夹麦克风市场迎来了前所未有的繁荣。品牌如罗德、大疆、西圣等麦克风品牌凭借卓越的技术实力与品牌影响力占据了市场的主导地位&#xff0c;其中西圣更是凭借其高性价比和用户口碑&#xff0c;稳居行业口碑品牌前列。但在这光…

线性规划及其MATLAB实现

目录 线性规划及其MATLAB实现 引言 线性规划的基本模型 线性规划求解方法 MATLAB中的线性规划求解 MATLAB线性规划应用实例 1. 生产计划问题 模型建立&#xff1a; 2. 运输问题 2. 运输问题 MATLAB实现&#xff1a; 线性规划在实际中的应用 结论 线性规划及其MATLA…

路基边坡自动化监测解决方案

物联网云平台 平台登录--用户登录 输入网址&#xff1a;http://yun.sj2000.org.cn&#xff0c;进入系统登录界面&#xff0c;输入用户名及密码后进入系统平台。 设备详情--设备概览 登录系统平台后&#xff0c;用户可在界面左侧看到系统项目栏和子项目选项&#xff0c;登陆的…

LSS可视化分析

1 完整 2 去掉plt.imshow(img_show) 3 去掉plt.axis(‘off’) 4 去掉plt.annotate(cams_text[img_id].replace(‘_’, ’ ), (0.01, 0.92), xycoords=‘axes fraction’)