前端用vue 后端用java 怎么用代码实现考勤定位打卡功能
考勤定位打卡功能的实现需要涉及前端和后端两部分的代码,以下是一个简单的实现方式:
- 前端部分
使用Vue框架,通过调用浏览器的地理位置API获取当前位置,将位置信息和当前时间发送给后端实现打卡功能。
示例代码:
<template>
<div>
<button @click="punch">打卡</button>
</div>
</template>
<script>
export default {
methods: {
async punch() {
navigator.geolocation.getCurrentPosition(
async (position) => {
const lat = position.coords.latitude
const lng = position.coords.longitude
const time = new Date().toLocaleString()
await this.$axios.post('/punch', { lat, lng, time })
alert('打卡成功')
},
(error) => {
alert('获取位置失败,请检查浏览器是否开启定位服务')
}
)
},
},
}
</script>
- 后端部分
使用Java语言和Spring框架,接收前端发送的位置信息和时间信息,与数据库中的考勤地点进行比对,判断是否在考勤范围内,并将打卡记录保存到数据库中。
示例代码:
@RestController
public class PunchController {
@Autowired
private PunchRepository repository;
@PostMapping("/punch")
public String punch(@RequestBody Map<String, String> data) {
double lat = Double.parseDouble(data.get("lat"));
double lng = Double.parseDouble(data.get("lng"));
String time = data.get("time");
if (isInAttendanceArea(lat, lng)) {
Punch punch = new Punch();
punch.setLat(lat);
punch.setLng(lng);
punch.setTime(time);
repository.save(punch);
return "success";
} else {
return "error";
}
}
private boolean isInAttendanceArea(double lat, double lng) {
// 根据公司考勤地点坐标计算距离,判断是否在考勤范围内
// 省略计算过程
}
}
@Entity
public class Punch {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private double lat;
private double lng;
private String time;
// getter和setter方法省略
}
public interface PunchRepository extends JpaRepository<Punch, Long> {}
以上是一个简单的考勤定位打卡功能实现方式,实际应用中还需要考虑更多细节问题,如安全性、异常处理等
原文地址: https://www.cveoy.top/t/topic/fuDK 著作权归作者所有。请勿转载和采集!