el-calendar制作考勤显示的一些心得

用el-calendar来显示员工的考勤数据是再好不过的了,我们需要实现以下目标:

1、可以正确显示员工每天的考勤

2、全天打卡、半天打卡、迟到早退等需要在日历控件上以不同的颜色来表示

3、点击el-calendar中的每一天时可以弹出当天打卡的详细时间

网上找了很多资料,最后发现还是用遮罩层实现最方便最美观,CSS高手可以美化下遮罩层,让它上下左右居中,让它显示成一个圆形,我这显示的是个方块。

后台查询某个员工时返回的考勤数据格式如下,

kaoqin:[{"":"01","日期":"2020-04-01 08:13:50;2020-04-01 18:09:11;","结果":"success"},{"":"02","日期":"2020-04-02 07:36:58;2020-04-02 18:06:56;","结果":"success"}]

一、日历控件的显示

1、第三行的CSS主要是让显示的day上下左右居中,以适应用户不同的缩放需求

2、第八行主要是为了让显示的tooltip提示数据换行,看上去更美观

3、10、11、12行是根据判断的条件来显示不同的遮罩层,主要是颜色不同。

 1         <el-calendar v-model="value1"> 
 2             <template slot="dateCell" slot-scope="{date, data}">
 3                 <div style="position:relative;text-align:center;height:100%;align-items:center;display:flex;justify-content: center; ">
 4                     {{data.day.split('-').slice(2)[0]}}
 5                     <div v-for="(item,index) in kaoqin" :key="index+1">
 6                         <div v-if="(item.天).indexOf(data.day)!=-1">
 7                            <el-tooltip placement="top">
 8                                 <div slot="content" v-html="ToHtml(item.日期)"></div>
 9                                 <!-- <el-button :type="item.结果"  style="margin-top:5px;">{{ToJieGuo(item.结果)}}</el-button> -->
10                                 <div class="box-green" v-if="item.结果==='success'"></div>
11                                 <div class="box-yello" v-if="item.结果==='warning'"></div>
12                                 <div class="box-white" v-if="item.结果==='default'"></div>
13                            </el-tooltip>
14                         </div>
15                     </div>
16                 </div>
17             </template>
18         </el-calendar>
1 //把考勤结果转换成html格式的,实现多个数据的换行
2         ToHtml(v){
3             return v.split(';').join("<br/>");
4         },

二、遮罩层的实现,百度的,效果还是非常不错的,有兴趣的可以减化一下写法,我是直接复制了两份。

 1 .box-green{
 2         position:absolute;
 3         top:0;
 4         bottom:0;
 5         left:0;
 6         right:0;
 7         background-color: #67C23A;
 8         opacity:0.6;
 9         padding: 0;
10         border-radius: 5%;
11     }
12 
13     .box-yello{
14         position:absolute;
15         top:0;
16         bottom:0;
17         left:0;
18         right:0;
19         background-color: #E6A23C;
20         opacity:0.6;
21         padding: 0;
22         border-radius: 5%;
23     }
24     .box-white{
25         position:absolute;
26         top:0;
27         bottom:0;
28         left:0;
29         right:0;
30         background-color: #FFFFFF;
31         opacity:0.6;
32         padding: 0;
33         border-radius: 5%;
34     }

三、不同尺寸下的显示效果(没有半天打卡,没有退到早退,都显示的绿色)

原文地址:https://www.cnblogs.com/wjbych/p/13722302.html