Vue中的日历组件 Calendar 实现 考勤打卡记录

日历组件 Calendar 可以自定义在页面添加内容。

实现效果图
在这里插入图片描述
在这里插入图片描述

1.由于Calendar没有右上角月份切换的API事件,可以给组件源码添加自定义添加一个事件
在这里插入图片描述
在这里插入图片描述
2.也可以通过自带的input事件来获取日历
在这里插入图片描述
3.vue页面完整代码
注释:this.$m(this.beginTime).format(‘YYYY-MM-DD HH:mm’),是分装的标准时间转化年月日,使用者可通过多种方法自定义处理。

<template>
	<div>
		<!-- 日历组件 -->
		<el-calendar
			:events="tableData"
			:date-format="'yyyy-MM-dd'"
			:time-format="true"
			:time-区间步长="30"
			@date-change="getDateChange"
			style="height:95%;overflow:scroll"
		>
			<template
				slot="dateCell"
				slot-scope="{date, data}"
				>
				<p :class="dateFormatter(date)">
					{{ data.day.split('-').slice(1).join('-') }}
				</p>
				<div v-if="result[$m(date).format('YYYY-MM-DD')] " class="chockIn">
					<p v-if="result[$m(date).format('YYYY-MM-DD')].length >= 2">上班:{{ result[$m(date).format('YYYY-MM-DD')][result[$m(date).format('YYYY-MM-DD')].length-1].checkInTime }}</p> 
					<p v-if="result[$m(date).format('YYYY-MM-DD')].length >= 2" style="margin-top:5px;">下班:{{ result[$m(date).format('YYYY-MM-DD')][0].checkInTime }}</p> 
					<el-popover
						placement="bottom"
						width="540"
						max-width="540"
						trigger="click
						v-if="result[$m(date).format('YYYY-MM-DD')].length > 2"
					>
						<el-table :data="result[$m(date).format('YYYY-MM-DD')]">
							<el-table-column align="center" type="index" width="60" label="序号"></el-table-column>
							<el-table-column prop="clockTime" align="left" label="打卡时间" width="180">
								<template slot-scope="scope">
									{{ $m(scope.row.clockTime).format('YYYY-MM-DD HH:mm') }}
								</template>
							</el-table-column>
							<el-table-column width="300" property="site" label="地址" show-overflow-tooltip></el-table-column>
						</el-table>
						<p class="navMore"  slot="reference">展示更多</p> 
					</el-popover>
				</div>
				<p class="absenceFromDuty" v-if="($m(new Date()).format('YYYY-MM-DD') >= $m(date).format('YYYY-MM-DD'))">
					<span v-if="!result[$m(date).format('YYYY-MM-DD')] || result[$m(date).format('YYYY-MM-DD')].length < 2">{{dateFormatterText(date)}}</span>
				</p> 
			</template> 
		</el-calendar>
  	</div>
</template>

<script>

export default {
	data() {
		return {
			beginTime: '',
            endTime: '',
			newDate:'',
			nowDate:'',
			result:{},
			value: new Date(), // 当前日期
		}
	},
	created(){
		// 获取当前月第一天
		this.beginTime = this.$m().firstDay();
		this.beginTime = this.$m(this.beginTime).format('YYYY-MM-DD HH:mm')
		// 获取当前月最后一天
		this.endTime = this.$m().lastDay();
		this.endTime = this.$m(this.begiendTimenTime).format('YYYY-MM-DD 23:59')
    },
  	methods: {
		// 检查日期是否是周末
		dateFormatterText(date) {
			const dayOfWeek = date.getDay();
			if (dayOfWeek === 0 || dayOfWeek === 6) { // 0 是星期日,6 是星期六
				return ''; 
			}
			return '缺勤';
		},
		// 获取日历数据
		getDateChange(val){
			let date = val.split("-");
			date = date[0] + '-' + date[1];
			//打卡的年月
			if(date){
				// 开始时间
				let firstDay = this.$m(date).firstDay();
				this.beginTime = this.$m(firstDay).format('YYYY-MM-DD HH:mm')
				// 结束时间
				let lastDay = this.$m(date).lastDay();
				this.endTime = this.$m(lastDay).format('YYYY-MM-DD 23:59')
				// 获取每个月发月份下的打卡记录
				this.getClockLogList();
			}
		},
        // 获取打卡记录
		getClockLogList(){
		    // ...调用接口获取每个月的考勤打卡数据,赋值给 this.tableData
            // this.tableData = val;
		},
	}
}
</script>
<style lang="scss" scoped>
	.chockIn{
		margin-top:10px;
	}
	.absenceFromDuty{
		color: #c06817;
		margin-top:10px;
	}
	.navMore{
		margin-top:3px;
		color: #3370ff;
	}
    .weekend-highlight {
        color: #eb3333;
	}
</style>
  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现vue集成高德地图实现考勤打卡,首先需要在vue项目引入高德地图API。接下来,我们可以使用高德地图的地图组件来展示地图,并将地图与用户信息进行关联。 首先,我们需要在项目安装高德地图的JavaScript API,并在项目引入相关的库文件。 在vue组件,我们可以通过创建地图容器元素来展示地图,然后使用高德地图的Map类来初始化地图。可以设置地图的心点、缩放级别、控件等属性。 为了实现考勤打卡功能,我们需要在地图上添加打卡点。可以使用标记(Marker)来表示打卡点,并给每个打卡点添加点击事件。 当用户点击地图上的打卡点时,可以弹出打卡窗口,显示用户的相关信息,例如姓名、工号等。可以通过自定义窗体(InfoWindow)来实现。 另外,为了保证用户只能在指定的区域进行打卡,可以使用高德地图的多边形(Polygon)工具来标记可打卡区域。在每次打卡时,可以使用高德地图的点位检索(PlaceSearch)功能来判断用户当前位置是否在可打卡区域内。 当用户点击打卡按钮时,可以触发相关的逻辑代码,例如获取用户位置信息、判断用户位置是否在可打卡区域内等。根据打卡结果,可以将相关信息保存到数据库,并给用户显示打卡成功或失败的提示。 总结起来,通过vue集成高德地图实现考勤打卡,我们可以使用高德地图的API来展示地图、添加打卡点、设置打卡区域等功能。通过与用户信息和数据库的交互,可以实现考勤打卡的功能需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值