手写排班日历
手写排班日历:
效果图:

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>
学习内容:
提示:这里可以添加要学的内容
例如:
- 搭建 Java 开发环境
- 掌握 Java 基本语法
- 掌握条件语句
- 掌握循环语句
学习时间:
提示:这里可以添加计划学习的时间
例如:
- 周一至周五晚上 7 点—晚上9点
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点
学习产出:
提示:这里统计学习计划的总量
例如:
- 技术笔记 2 遍
- CSDN 技术博客 3 篇
- 习的 vlog 视频 1 个
相关文章:
手写排班日历
手写排班日历: 效果图: vue代码如下: <template><div class"YSPB"><div class"title">排班日历</div><div class"banner"><span classiconfont icon-youjiantou click&qu…...
SpringBoot多数据源配置
1、添加依赖 <!-- 数据库驱动 --><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java.version}</version><scope>runtime</sco…...
影响画布微信小程序canvas及skyline和webview用户界面布局的关键流程
影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 目录 影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 一、微信小程序canvas开发流程 1.1、官方指南 1.2、客制化开发 第一步:在 WXML 中添加 canvas 组件 第二步&…...
MATLAB图像处理
MATLAB图像处理 MATLAB,作为美国MathWorks公司出品的商业数学软件,以其强大的矩阵运算能力和丰富的函数库,在图像处理领域得到了广泛的应用。MATLAB不仅提供了基础的图像处理功能,还通过图像处理工具箱(Image Process…...
【编程底层思考】性能监控和优化:JVM参数调优,诊断工具的使用等。JVM 调优和线上问题排查实战经验总结
JVM性能监控和优化是确保Java应用程序高效运行的关键环节。以下是一些JVM性能监控和优化的方法,以及使用诊断工具和实战经验的总结: 一、JVM参数调优: 堆大小设置 : - Xms:设置JVM启动时的初始堆大小。 - -Xmx:设置J…...
数据库的实施过程分析
在完成了数据库的逻辑结构设计和物理结构设计后,下一步就是将设计成果转化为现实,这一步骤被称为数据库的实施。数据库实施是数据库开发过程中至关重要的一环,它标志着从设计阶段向实际应用的过渡。本文将为你详细讲解数据库实施的各个关键步…...
【Kubernetes】常见面试题汇总(十二)
目录 36.简述 Kubernetes 的负载均衡器? 37.简述 Kubernetes 各模块如何与 APl Server 通信? 38.简述 Kubernetes Scheduler 作用及实现原理? 36.简述 Kubernetes 的负载均衡器? (1)负载均衡器是暴露服务…...
基于SpringBoot+Vue+MySQL的美术馆管理系统
系统展示 用户前台界面 管理员后台界面 系统背景 随着文化艺术产业的蓬勃发展,美术馆作为展示与传播艺术的重要场所,其管理工作变得日益复杂。为了提升美术馆的运营效率、优化参观体验并加强艺术品管理,我们开发了基于SpringBootVueMySQL的美…...
golang面试
算法: 1.提取二进制位最右边的 r i & (~i 1) 2.树上两个节点最远距离,先考虑头结点参与不参与。 3.暴力递归改dp。 1.确定暴力递归方式。 2.改记忆化搜索 3.严格表方式: 分析可变参数变化范围,参数数量决定表维度、 …...
基于"WT2605C的智能血压计:AI对话引领个性化健康管理新时代,健康守护随时在线
在当今快节奏的生活中,健康管理已成为我们日常不可或缺的一部分。随着科技的进步,智能设备正逐步融入我们的日常生活,为健康管理带来前所未有的便捷与智能化。今天,让我们共同探索WT2605C AI在线方案如何在血压计中发挥革命性作用…...
redis高级教程
一 关系型数据库和 NoSQL 数据库 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 关系型数据库 ,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 D…...
prfm命令初探
1. 前言 在查看一段neon代码时,发现有如下片段,为使用汇编进行数据预取操作。这是一个新的知识点,记录一下学习过程。 __asm__ volatile("prfm pldl2keep,[%0, #8192] \n""prfm pldl1keep,[%0, #1024] \n":"r"…...
AI大模型需要学什么?怎么学?从零基础入门大模型(保姆级),从这开始出发!
一.初聊大模型 1.为什么要学习大模型? 在学习大模型之前,你不必担心自己缺乏相关知识或认为这太难。我坚信,只要你有学习的意愿并付出努力,你就能够掌握大模型,并能够用它们完成许多有意义的事情。在这个快速变化的时代…...
python自述3
Python 条件控制 if语句的一般形式如下所示: if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3 Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。 注意: 1、每个条件后面要使用冒号 :,表…...
Redis常见的数据结构
Redis底层的数据结构是Redis高效存储和操作数据的基础,Redis提供了五种基本的数据类型,每种类型在底层都有对应的数据结构来实现。这五种数据类型分别是:字符串(String)、哈希(Hash)、列表(List…...
批量插入insert到SQLServer数据库,BigDecimal精度丢失解决办法,不动代码,从驱动层面解决
概述 相信很多人都遇到过,使用sql server数据库,批量插入数据时,BigDecimal类型出现丢失精度的问题,网上也有很多人给出过解决方案,但一般都要修改应用代码,不推荐。 丢失精度的本质是官方的驱动有BUG造成…...
随手记:uniapp小程序登录方式和小程序使用验证码登录
小程序登录方式: 方式一:小程序授权登录 通过uni.login获取 临时登录凭证code,向后端换取token。 <u-button type"primary" shape"circle" click"login">登 录</u-button>login() {uni.login({p…...
【Hadoop|HDFS篇】DataNode概述
1. DataNode的工作机制 1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。 2)DataNode启动后向NameNod…...
Vue2 VueRouter学习笔记
VueRouter 官方文档 版本对应 vue2:3.x.x vue3:4.x.x 路由:访问路径与vue组件(页面)之间的映射关系 VueRouter:Vue官方提供的插件,本质上是一个 JavaScript 库,用于在 Vue.js 应用…...
3D培训大师,化工企业安全教育与应急演练的新助力
化工企业的生产安全培训,作为保障员工生命安全与企业稳定运营的基石,其重要性不言而喻。传统的培训方式内容僵化、形式单一缺乏互动、效果难以评估,越来越不适应化工企业的实际需求。因此,探索和应用更为高效、创新的培训工具&…...
云效Codeup代码评审功能深度体验:如何用它提升团队代码质量(附真实项目案例)
云效Codeup代码评审实战指南:从规范制定到CI/CD集成 在当今快节奏的软件开发环境中,代码质量直接决定了产品的稳定性和可维护性。作为技术负责人,我经历过无数次因代码质量问题导致的深夜加班和紧急修复。直到团队开始系统化使用云效Codeup的…...
3大维度解析Awesome Claude Skills:重新定义AI效率边界
3大维度解析Awesome Claude Skills:重新定义AI效率边界 【免费下载链接】awesome-claude-skills A curated list of awesome Claude Skills, resources, and tools for customizing Claude AI workflows 项目地址: https://gitcode.com/GitHub_Trending/aw/awesom…...
技术小白AI入门避坑指南:避开4大雷区,高效进阶不走弯路
技术小白AI入门避坑指南:避开4大雷区,高效进阶不走弯路 前言:作为技术小白,入门AI的路上,最可怕的不是“基础薄弱”,而是“走偏方向”——明明付出了时间和精力,却因为踩中误区,要么…...
【2026年阿里巴巴春招- 3月28日-算法岗-第二题- 隐式素数计算】(题目+思路+JavaC++Python解析+在线测试)
题目内容 我们称一个正整数为隐式素数,如果它不同的正因子的个数是一个素数。给定一个闭区间$ [l,r]$,请计算该区间内隐式素数的个数 输入描述 每个测试文件均包含多组测试数据。第一行输入一个整数$ T (1 ≤ T ≤ 10^4)$,代表数据组数,每组测试数据描述如下: 在一行上…...
Navicat Mac版试用期解除解决方案:3种方法实现永久试用
Navicat Mac版试用期解除解决方案:3种方法实现永久试用 【免费下载链接】navicat_reset_mac navicat16 mac版无限重置试用期脚本 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 问题引入:Navicat试用期限制的技术破解需求 对于…...
【具身智能实战】从零部署LeRobot-ALOHA:仿真环境搭建、机械臂标定与GPU高效训练避坑指南
1. 环境准备与基础配置 第一次接触LeRobot-ALOHA项目时,最头疼的就是环境配置。这个开源项目依赖的库版本非常新,和很多现有环境存在兼容性问题。我花了三天时间反复折腾,总结出一套稳定可靠的配置方案。 首先需要准备Ubuntu 20.04或22.04系统…...
帧差法实战避坑:为什么你的运动检测总是有‘鬼影’?三帧差法参数调优全解析
帧差法实战避坑:为什么你的运动检测总是有‘鬼影’?三帧差法参数调优全解析 当你第一次尝试用帧差法实现运动检测时,那种兴奋感可能很快就会被现实浇灭——屏幕上那些模糊的拖影、闪烁的噪点,还有那些明明没有物体移动却不断跳动的…...
一、Cisco(静态端口映射实战:从零搭建外网可访问的多服务内网环境)
1. 环境准备与拓扑设计 第一次接触端口映射时,我也被那些专业术语搞得晕头转向。直到自己动手在Cisco Packet Tracer里搭了一套环境,才发现原来原理这么简单。这次我们就用最基础的设备,还原企业里常见的多服务发布场景。 实验设备清单就像搭…...
Ext2Read:Windows用户如何轻松读取Linux分区文件
Ext2Read:Windows用户如何轻松读取Linux分区文件 【免费下载链接】ext2read A Windows Application to read and copy Ext2/Ext3/Ext4 (With LVM) Partitions from Windows. 项目地址: https://gitcode.com/gh_mirrors/ex/ext2read 你是否遇到过这样的情况&a…...
智能配置黑苹果终极指南:OpCore Simplify一键生成OpenCore EFI完整教程
智能配置黑苹果终极指南:OpCore Simplify一键生成OpenCore EFI完整教程 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为繁琐的黑苹果…...
