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

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培训大师,化工企业安全教育与应急演练的新助力
化工企业的生产安全培训,作为保障员工生命安全与企业稳定运营的基石,其重要性不言而喻。传统的培训方式内容僵化、形式单一缺乏互动、效果难以评估,越来越不适应化工企业的实际需求。因此,探索和应用更为高效、创新的培训工具&…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Selenium 查找页面元素的方式
Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素,以下是主要的定位方式: 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...
2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】
1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...
以太网PHY布局布线指南
1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...
【Vue】scoped+组件通信+props校验
【scoped作用及原理】 【作用】 默认写在组件中style的样式会全局生效, 因此很容易造成多个组件之间的样式冲突问题 故而可以给组件加上scoped 属性, 令样式只作用于当前组件的标签 作用:防止不同vue组件样式污染 【原理】 给组件加上scoped 属性后…...
多模态学习路线(2)——DL基础系列
目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization(RMSNorm) 二、激活函数 1. Sigmoid激活函数(二分类&…...
旋量理论:刚体运动的几何描述与机器人应用
旋量理论为描述刚体在三维空间中的运动提供了强大而优雅的数学框架。与传统的欧拉角或方向余弦矩阵相比,旋量理论通过螺旋运动的概念统一了旋转和平移,在机器人学、计算机图形学和多体动力学领域具有显著优势。这种描述不仅几何直观,而且计算…...
