SpringBoot+Vue3+Uniapp实现PC+APP双端考勤打卡设计:GPS围栏/内网双模打卡、节假日方案、定时预生成——附数据结构和核心源码讲解

SpringBoot+Vue3+Uniapp实现PC+APP双端考勤打卡设计:GPS围栏/内网双模打卡、节假日方案、定时预生成------附数据结构和核心源码讲解

📦 源码1ruoyi-office-vben |📦 源码2ruoyi-office |📦 源码3ruoyi-office

考勤打卡看似简单------上班签到、下班签退,但当你真正着手为企业实现一套考勤系统时,会发现"简单"二字背后隐藏着大量工程决策:总部和分公司的打卡规则不同怎么办?GPS 定位和内网打卡如何共存?法定节假日的调休补班怎么配置?每天几百人打卡的空白记录谁来生成?PC 端和手机端如何统一体验?RuoYi Office 的考勤模块,用 4 张表 + 部门级配置继承 + GPS/内网双模 + XXL-Job 预生成 + PC/APP 双端,交出了一份"轻量但完整"的答卷。

引言:企业考勤系统到底难在哪?

做过企业管理系统的开发者都知道,考勤管理是 HRM 模块中使用频率最高、规则最琐碎的功能:

  • 🏢 多级组织差异化:集团公司的总部、分公司、项目部可能有完全不同的上下班时间、打卡方式、容忍规则
  • 📍 定位方式多样:有的企业用 GPS 位置围栏,有的企业内网部署只需能访问系统就算打卡
  • 🗓️ 节假日复杂:法定节假日的调休、补班每年不同,国庆调休可能周六上班,元旦可能周一补休
  • 异常状态判定:迟到、早退、外勤、加班------每一种状态的判定规则和记录方式都不同
  • 📱 多端打卡:员工可能在 PC 端、手机 APP、小程序上打卡,体验要一致
  • 📊 数据可靠性:每天几百上千人的打卡记录不能丢,即使员工忘打卡也要有据可查

这些需求叠加在一起,让考勤系统成为"看似简单实则处处是坑"的经典模块。

RuoYi Office 的考勤模块基于 Spring Boot 3.5 + Vue3 + Vben Admin + UniApp 技术栈,设计了一套面向中小企业的考勤管理体系。本文从业务场景到技术实现,完整拆解考勤配置、打卡、记录管理的全链路设计。


一、系统设计:考勤模块的整体架构

1.1 模块组成

RuoYi Office 的考勤管理位于 人力资源管理 → 假勤管理 目录下,由四个紧密协作的子模块组成:

模块 菜单路径 功能 面向角色
考勤配置 人力资源管理 → 假勤管理 → 考勤配置 按部门设置打卡规则、工作日、上下班时间、地图选点 HR 管理员
考勤打卡 人力资源管理 → 假勤管理 → 考勤打卡 员工每日签到/签退操作,含 GPS 围栏和内网双模 全体员工
打卡记录 人力资源管理 → 假勤管理 → 打卡记录 管理员查看/编辑/导入/导出全量打卡数据 HR 管理员
节假日方案 考勤配置页内弹窗配置 配置法定节假日的休假/补班日期矩阵 HR 管理员

1.2 核心设计决策

决策点 方案 理由
配置粒度 按部门(非按人) 企业考勤通常按部门统一规则,按人粒度太细
配置继承 递归向上查找父部门 子部门默认用父部门规则,需要时才覆盖
打卡方式 GPS 围栏 + 内网免定位 覆盖外出企业(GPS)和内网部署(免定位)两种场景
记录预生成 XXL-Job 每日定时 保证"缺卡"有据可查,不依赖员工打卡触发
状态判定 前端计算 + 后端记录 前端实时反馈,后端原样存储

二、考勤配置:部门级规则 + 递归继承

2.1 页面布局与功能概览

考勤配置页采用左侧部门树 + 右侧配置表单的经典布局。页面顶部醒目的蓝色提示栏说明了继承规则:"考勤规则优先用自己单位设置的规则,如自己组织没有设置,则使用父级最近的组织所设置的规则。"

▲ 考勤配置页:左侧展示完整的部门组织树(支持搜索),右侧根据选中部门加载对应的考勤配置表单

在左侧部门树中点击任意部门,右侧即刻加载该部门的考勤规则。如果该部门没有独立配置,则自动向上查找最近的父级配置并加载,同时显示一条蓝色提示:"当前部门未设置考勤规则,以下配置继承自上级组织。如需自定义,请修改后点击保存。"

2.2 "不配置即继承"的设计哲学

这是 RuoYi Office 考勤配置的核心设计理念------只要上级部门配置过规则,下级部门就自动继承,无需逐个设置:

  • 总部只需配置一次:集团公司在总部级别设置一套通用规则(如上午 9:00、下午 18:00)
  • 分公司按需覆盖:分公司如果有不同的上下班时间,配置一次即自动生效,不影响其他部门
  • 新部门零配置:新建的部门自动继承上级规则,HR 不需要逐一设置

后端通过递归查找 实现这一机制:先查本部门是否有配置,没有则向上查找父部门,直到找到配置或到达顶级部门。查询结果中通过 inherited 字段标记配置来源,前端据此显示不同的提示信息。

2.3 考勤配置的完整字段

右侧配置表单涵盖了企业考勤所需的各项参数,按功能分为以下几组:

打卡模式与位置设置

配置项 组件类型 说明
打卡模式 RadioGroup 位置打卡 (需 GPS 定位)/ 内网打卡(无需定位,访问系统即打卡)
经度 / 纬度 InputNumber + 天地图 仅位置模式显示,通过天地图组件可视化选点
打卡半径 InputNumber 50~5000 米可调,默认 200 米
允许外勤打卡 Select 仅位置模式生效,超出半径时是否允许标记为"外勤"打卡

工作时间与考核规则

配置项 组件类型 说明
是否考核 Select 开启/关闭考勤考核
工作日设置 Checkbox.Group 周一至周日多选,支持全选/反选,默认周一至周五
应用节假日方案 Select + 配置按钮 下拉选择已启用的节假日方案,也可点击按钮打开方案配置弹窗
上班时间 / 下班时间 TimePicker 默认 09:00 / 18:00

容忍与扣款规则

配置项 组件类型 说明
每月允许迟到天数 InputNumber 每月允许迟到的天数上限
每月允许早退天数 InputNumber 每月允许早退的天数上限
每月允许缺卡次数 InputNumber 每月允许缺卡的次数上限
迟到 / 早退 / 缺卡罚款 InputNumber 对应扣款金额(元),精确到分

2.4 天地图选点

当打卡模式选择"位置打卡"时,配置表单下方会展示一个天地图地图组件,提供可视化的打卡中心选点功能:

  • 点击选点:管理员在地图上直接点击即可设置打卡中心点坐标
  • 地址搜索:在搜索框输入地址名称(如"深圳市南山区科技园"),自动定位到该位置
  • 半径圈可视化 :根据 punchRadius 的值在地图上绘制一个打卡范围圆圈,直观展示有效打卡区域
  • Geocoder 兜底 :当 LocalSearch 搜索无结果时,自动切换到天地图 Geocoder API 进行地理编码查询

天地图是国内官方免费地图服务,相比高德/百度不需要商业授权,特别适合企业内部管理系统使用。


三、PC 端考勤打卡:左列表 + 右卡片

3.1 页面布局

PC 端考勤打卡页是整个考勤模块的员工核心操作页面 。采用独特的左右分栏布局------左侧是个人打卡记录的 VxeTable 表格列表,右侧是固定宽度的"手机风"打卡卡片:

▲ PC端考勤打卡页:左侧展示当前用户近期的打卡记录(日期、星期、签到时间/状态、签退时间/状态、加班标记),右侧为实时打卡卡片

3.2 右侧打卡卡片详解

右侧打卡卡片自上而下包含以下信息区域:

  1. 用户信息栏:显示当前用户姓名和所属部门(如"宇宙源码 · 研发部门")
  2. 上下班时间:展示配置中的上班时间(如 09:00)和下班时间(如 18:00),已打卡的时间段会标注具体签到时间和状态
  3. 打卡圆钮:页面中央的大圆形按钮,显示"上班打卡"或"下班打卡"文字和实时时间
  4. 状态提示区:圆钮下方展示当前打卡模式和位置状态(如"内网打卡模式,无需定位即可打卡"或"已进入打卡范围")

3.3 打卡按钮的六态变色

打卡圆钮不是简单的"能打/不能打"二态------它通过六种渐变色精确传达当前打卡场景,员工无需阅读文字就能理解状态:

场景 按钮样式 渐变色 含义
正常工作日可打卡 蓝色渐变 #6ea1ff → #4080ff 在打卡范围内,正常打卡
非工作日加班打卡 橙色渐变 #ffc069 → #fa8c16 今天不是工作日,将记为加班
不在范围可外勤 紫色渐变 #b37feb → #722ed1 超出 GPS 围栏但允许外勤打卡
不在范围不可打卡 红色渐变 #ff7d7d → #ff4d4f 超出围栏且不允许外勤
今日打卡完成 灰色渐变 #d9d9d9 → #bfbfbf 上下班均已打卡完成
暂无考勤配置 禁用灰色 #e8e8e8 → #d9d9d9 该部门未配置考勤规则

状态提示区也会根据定位情况动态切换六种提示文案------从"暂无考勤配置"到"内网打卡模式"到"正在获取位置"到"已进入打卡范围"到"不在范围,将记录为外勤打卡"到"不在打卡范围内",覆盖所有可能的场景。

3.4 双模打卡的设计思路

RuoYi Office 支持两种打卡模式,通过考勤配置中的 punchMode 字段区分:

模式 punchMode 定位行为 适用场景
位置打卡 1 触发 GPS 定位 → Haversine 公式计算与打卡中心的距离 → 与打卡半径比较 需要确认员工在公司附近的企业
内网打卡 2 不触发定位,系统默认在范围内 内网部署的企业,能访问系统即说明在公司

位置打卡模式 下,前端使用 Haversine 公式计算当前位置与打卡中心的球面距离。如果距离超过配置的打卡半径且允许外勤打卡,按钮变为紫色"外勤打卡"模式;如果不允许外勤则变为红色"不可打卡"状态。

内网打卡模式是 RuoYi Office 的特色设计------许多企业的 OA 系统部署在内网,员工能访问系统本身就证明人在公司,因此完全不需要触发定位。这种模式下打卡按钮始终为蓝色可用状态,大大简化了打卡流程。

3.5 打卡状态的三态设计

每次打卡记录的签到/签退状态使用三态标记

statusFlag 含义 颜色标识 触发条件
0 正常 绿色 签到在上班时间前 / 签退在下班时间后
1 迟到/早退 橙色 签到晚于上班时间 / 签退早于下班时间
2 外勤 紫色 不在 GPS 围栏范围内,但允许外勤打卡

PC 端打卡还实现了定位降级策略------浏览器高精度定位失败后自动降级为普通精度重试,避免因定位权限或硬件问题导致打卡受阻。

3.6 打卡决策流程

打卡的核心逻辑是一棵多层决策树 ------根据配置、位置、时间、日期等条件层层判断,最终决定按钮颜色、文字和是否可点击:

▲ 打卡决策流程:依次检查配置→打卡模式→GPS围栏→工作日→签到/签退→迟到/早退


四、移动端打卡:波纹动画 + 跨平台定位

4.1 移动端页面功能

移动端打卡页是 RuoYi Office 考勤模块的体验亮点。基于 UniApp + wot-design-uni 构建,支持 H5、小程序、APP 多端运行。

▲ 移动端打卡页:自定义导航栏 + 用户信息 + 上下班时间卡片 + 波纹动画大圆按钮,与主流企业打卡 App 体验一致

移动端页面自上而下包含以下区域:

  1. 自定义导航栏:深蓝色渐变背景,显示"考勤打卡"标题,底部有考勤记录入口按钮
  2. 用户信息卡片:显示当前用户头像、姓名和所属部门
  3. 上下班时间卡片:左右并排展示上班时间和下班时间,已打卡则显示具体时间和状态标签(如"已签到(迟到)")
  4. 波纹动画大圆按钮:页面中央核心区域,蓝色渐变大圆按钮显示"上班打卡"/"下班打卡"文字和实时时钟
  5. 状态提示信息:按钮下方展示当前模式和位置提示(如"内网打卡成功,无需定位即可打卡")

4.2 波纹动画效果

波纹效果是移动端的视觉亮点------当处于可打卡状态时,大圆按钮周围会有三层圆形波纹以不同延迟向外扩散,形成"呼吸"般的动画效果。三个波纹分别延迟 0s、1s、2s 开始动画,周期 3s,从 60% 大小渐变放大到 100% 并逐渐透明。波纹颜色同样会根据打卡状态动态切换------范围内蓝色、外勤紫色、超范围红色,与按钮形成统一的视觉语言。

4.3 跨平台定位策略

移动端使用 UniApp 的条件编译能力,在不同平台使用不同的定位 API:

  • H5 环境 :使用浏览器原生 navigator.geolocation.getCurrentPosition,设置高精度模式、15秒超时
  • 小程序 / APP :使用 uni.getLocation,坐标系指定为 GCJ-02(国测局坐标),开启高精度定位

定位获取后,同样使用 Haversine 公式计算与配置中心点的距离,判断是否在打卡范围内。整个定位→计算→打卡的流程在移动端和 PC 端逻辑完全一致,只是定位 API 和 UI 展示不同。

4.4 移动端特色设计

  • 实时时钟:打卡按钮上的时间每秒更新,增强"即时打卡"的感知
  • 打卡状态实时反馈:签到/签退成功后按钮文字和颜色立即切换,无需刷新
  • 自适应安全区:顶部导航栏和底部操作区均适配 iPhone 安全区域
  • 支持加班打卡:非工作日也可打卡,自动标记为加班记录

五、打卡记录管理:全量 CRUD + 导入导出

5.1 页面布局

打卡记录页面面向 HR 管理员,提供全量查看、编辑、导入、导出 能力。同样采用左侧部门树 + 右侧记录表格的布局:

▲ 打卡记录管理页:左侧部门树过滤,顶部搜索栏支持按用户姓名、日期范围、签到状态筛选,表格展示所有员工的打卡明细

5.2 核心功能

搜索筛选

表格上方提供多维度搜索条件:

  • 部门筛选:左侧部门树点击自动筛选该部门及下属所有部门的记录
  • 用户姓名:模糊搜索员工姓名
  • 打卡日期:日期范围选择器,查看指定时段的打卡数据
  • 签到状态:下拉选择(全部/正常/迟到/外勤),快速筛选异常记录

新增打卡记录

HR 管理员可手动新增打卡记录,用于补录忘打卡员工的考勤。弹窗表单支持选择员工(员工选择器组件)、设置日期、签到/签退时间和状态。

Excel 导入

支持 Excel 批量导入打卡记录,适用于从其他系统迁移数据或批量补录。导入功能的亮点在于字典双映射------签到/签退状态既支持输入数字(如"0")也支持输入标签(如"正常"),系统自动转换。

Excel 导出

支持按当前筛选条件导出打卡记录为 Excel 文件,方便 HR 做月度考勤汇总和薪资计算。

修改操作

每行记录右侧提供"修改"按钮,HR 可直接编辑打卡时间和状态,用于处理申诉和纠正异常数据。


六、节假日方案:休假/补班的灵活矩阵

6.1 方案设计

节假日方案独立于工作日配置,通过考勤配置页面内的弹窗进行管理。采用主从表结构:

  • 主表:方案名称、年份、启用状态
  • 明细表:日期 + 类型(1=休假 / 2=补班)+ 名称

例如,2026 年国庆节假日方案:

日期 类型 名称
2026-10-01 ~ 10-07 休假(1) 国庆节
2026-09-27(周六) 补班(2) 国庆调休
2026-10-10(周六) 补班(2) 国庆调休

6.2 工作日判定的三级优先级

判断"今天是否工作日"时,系统遵循明确的三级优先级:

  1. 最高优先级------节假日方案:如果配置了节假日方案且该日期在方案中,按方案类型判断(休假→非工作日,补班→工作日)
  2. 次优先级------工作日配置:如果节假日方案中没有该日期,按考勤配置中的工作日(如周一至周五)判断
  3. 兜底------默认周一至周五:如果没有任何工作日配置,默认周一至周五为工作日

这种三级优先级的设计非常灵活------比如某个部门配置了"周一至周六上班",同时应用了 2026 年国庆方案,那么国庆期间即使是周一到周六也不用上班,但 9.27 周六需要补班。


七、定时预生成:每天的"底线数据"

7.1 为什么需要预生成?

如果只在员工打卡时才创建记录,那忘记打卡的员工就没有记录------"缺卡"就变成了"不存在",HR 无从追查。

RuoYi Office 通过 XXL-Job 定时任务,每天凌晨为所有在职员工预生成空白打卡记录。这样即使员工一整天没有打卡,打卡记录表中依然有这条空白记录(签到/签退时间为空),HR 查看考勤报表时可以明确看到"缺卡"状态。

7.2 预生成的关键设计

设计点 实现方式 说明
幂等性 按 userId + realDate 唯一判断 同一天同一人只有一条记录,重复执行不会重复创建
周末跳过 判断 dayOfWeek 周六日不生成空白记录(补班场景由节假日方案控制)
在职过滤 排除离职和退休状态 只为在职员工生成记录
多租户支持 @TenantJob 注解 定时任务自动遍历所有租户执行,SaaS 场景开箱即用
打卡时兜底 mobilePunch 方法内判断 即使定时任务未执行,员工打卡时也会自动创建当天记录

7.3 日期衍生字段

每条打卡记录除了存储日期(real_date)外,还自动填充两个衍生字段:

  • 星期week_day):1=周一 ... 7=周日,方便按星期统计
  • 年度周year_week):如"2026年第13周",方便按周维度查看考勤报表

八、表结构设计

8.1 四张表总览

表名 记录数增长 核心职责
hrm_attendance_config 按部门数 一个部门最多一条配置记录
hrm_punch_record 按人×天 每人每天一条打卡记录(预生成 + 打卡回填)
hrm_holiday_plan 按年/方案 节假日方案主表
hrm_holiday_plan_detail 按方案×天 节假日方案的每一天明细

8.2 考勤配置表 hrm_attendance_config

字段 类型 说明
dept_id bigint 部门 ID(唯一约束)
punch_mode tinyint 打卡模式:1=位置打卡 2=内网打卡
longitude / latitude double GPS 中心坐标(仅位置模式)
punch_radius int 打卡半径(米),默认 200
allow_field_punch tinyint 是否允许外勤打卡
need_check tinyint 是否纳入考核
work_days varchar(50) 工作日(如 "1,2,3,4,5"
holiday_plan_id bigint 关联的节假日方案
work_start_time / work_end_time varchar(20) 上下班时间(如 "09:00:00"
allow_late_days / allow_early_leave_days int 每月允许迟到/早退天数
late_deduct_amount / early_leave_deduct_amount decimal 迟到/早退扣款金额

8.3 打卡记录表 hrm_punch_record

字段 类型 说明
user_id / user_name bigint / varchar 打卡人
dept_id / dept_name bigint / varchar 所在部门
real_date date 打卡日期
week_day int 星期(1=周一 ... 7=周日)
year_week varchar(50) 年度周(如"2026年第13周")
check_in_time time 签到时间(空=未签到/缺卡)
check_in_status tinyint 签到状态:0=正常 1=迟到 2=外勤
check_out_time time 签退时间(空=未签退/缺卡)
check_out_status tinyint 签退状态:0=正常 1=早退 2=外勤
is_overtime tinyint 是否加班打卡(非工作日打卡自动标记)

九、核心代码精选

9.1 考勤配置递归继承

后端通过递归查找实现配置继承------先查本部门,没有则查父部门,逐级向上直到找到配置或到达组织树顶端:

java 复制代码
@Override
public AttendanceConfigRespVO getAttendanceConfigByDeptId(Long deptId) {
    AttendanceConfigDO config = attendanceConfigMapper.selectByDeptId(deptId);
    if (config != null) {
        AttendanceConfigRespVO respVO = BeanUtils.toBean(config, AttendanceConfigRespVO.class);
        respVO.setInherited(false); // 本级自有配置
        return respVO;
    }
    DeptRespDTO dept = deptApi.getDept(deptId).getCheckedData();
    if (dept == null || dept.getParentId() == null || dept.getParentId() == 0) {
        return null; // 已到顶级
    }
    AttendanceConfigRespVO parentConfig = getAttendanceConfigByDeptId(dept.getParentId());
    if (parentConfig != null) {
        parentConfig.setInherited(true); // 标记为继承配置
    }
    return parentConfig;
}

9.2 工作日三级优先级判定

打卡时判断"今天是否工作日"的核心逻辑,节假日方案优先级最高:

java 复制代码
private boolean isWorkDay(AttendanceConfigRespVO config) {
    LocalDate today = LocalDate.now();
    int dayOfWeek = today.getDayOfWeek().getValue();
    // 1. 优先检查节假日方案
    if (config.getHolidayPlanId() != null) {
        Integer holidayType = holidayPlanService.getHolidayType(
            config.getHolidayPlanId(), today);
        if (holidayType != null) {
            if (holidayType == 1) return false; // 休假 → 非工作日
            if (holidayType == 2) return true;  // 补班 → 工作日
        }
    }
    // 2. 根据工作日设置判断
    String workDays = config.getWorkDays();
    if (workDays == null || workDays.isEmpty()) {
        workDays = "1,2,3,4,5"; // 默认周一到周五
    }
    Set<Integer> workDaySet = Arrays.stream(workDays.split(","))
            .map(String::trim).filter(s -> !s.isEmpty())
            .map(Integer::parseInt).collect(Collectors.toSet());
    return workDaySet.contains(dayOfWeek);
}

9.3 外勤状态后端强制覆盖

前端提交打卡请求时携带 statusFlag(正常/迟到),但如果是外勤打卡,后端会强制将状态覆盖为外勤(2),确保数据准确性:

java 复制代码
int statusFlag = reqVO.getStatusFlag();
if (isFieldPunch) {
    statusFlag = 2; // 外勤打卡,强制标记
}

十、RuoYi Office 的创新性设计总结

10.1 "配置下发 + 前端决策"的轻量架构

与很多考勤系统将所有校验逻辑放在后端不同,RuoYi Office 采用了**"后端下发配置 + 前端实时决策"**的轻量模式:

  • 后端 /info 接口一次性下发配置(上下班时间、GPS中心、半径、打卡模式、是否工作日)和今日已有记录
  • 前端拿到配置后独立完成:GPS 定位 → 距离计算 → 迟到/早退判定 → 按钮状态渲染
  • 前端 /do 接口提交打卡(punchType、statusFlag、isOvertime、isFieldPunch)
  • 后端只负责记录写入,外勤时强制覆盖 statusFlag

好处:用户无需等待网络往返即可看到"迟到""早退""外勤"等提示,交互响应更快;后端逻辑简洁,易于维护。

10.2 技术亮点汇总

能力 实现方式 价值
部门级配置继承 递归向上查找 + inherited 标记 总部一次配置,分支自动继承
GPS/内网双模 punchMode 切换 + 条件定位 覆盖外出企业和内网部署两种场景
Haversine 围栏 前端实时距离计算 精确判定是否在打卡范围内
外勤打卡 超范围 + 允许外勤 → status=2 灵活覆盖出差、外出等场景
六态按钮变色 computed + 动态 CSS class 打卡场景一目了然
波纹动画 CSS @keyframes 三层错时 移动端体验对标主流打卡 App
节假日方案 主从表 + 三级优先级判定 灵活配置法定节假日调休
定时预生成 XXL-Job + @TenantJob 幂等 缺卡有据可查,多租户支持
跨端定位 条件编译 H5/小程序/APP 一套代码覆盖多端
Excel 导入 字典标签/值双映射 兼容"正常"和"0"两种输入
多租户隔离 全表带 tenant_id SaaS 场景开箱即用

技术栈速览

层次 技术 版本
后端框架 Spring Boot / Spring Cloud 3.5
定时任务 XXL-Job 最新版
PC 前端 Vue 3 + Vben Admin + Ant Design Vue 5.x / 4.x
移动端 UniApp + Vue 3 + wot-design-uni 最新版
地图 天地图 SDK 最新版

结语

考勤管理的复杂度不在于"打个卡",而在于围绕这个动作的一整套规则体系。 哪些部门什么时间上下班?GPS 围栏还是内网免定位?法定节假日怎么调休?员工忘打卡怎么追查?PC 端和手机端怎么保持一致?

RuoYi Office 的考勤模块,用部门级配置继承 解决了多级组织的规则差异,用 GPS/内网双模 覆盖了不同部署场景,用节假日方案 灵活应对调休补班,用定时预生成 确保数据的完整性,用六态变色按钮 + 波纹动画打造了直观的打卡体验------在"轻量"和"完整"之间找到了恰当的平衡。

如果你正在寻找一套开箱即用的企业考勤解决方案,或者需要了解考勤系统的技术设计思路,RuoYi Office 值得一试。


💡 觉得有价值?

Star 仓库https://gitee.com/yqzy1688/ruoyi-office

💬 技术交流 :添加💬 17156169080,备注「RuoYi Office」

📚 演示地址http://ruoyioffice.com

复制代码
相关推荐
StackNoOverflow2 小时前
Spring Boot 核心知识点总结
java·spring boot·后端
世界哪有真情2 小时前
使用 Arthas 精准排查 SpringBoot 多模块项目中未使用的类(安全清理无用代码)
java·后端
softbangong2 小时前
816-批量将图片分别转为pdf,文件夹下所有图片转为一个pdf
java·服务器·pdf·图片处理·图片转pdf·pdf工具·批量转换
玛卡巴卡ldf2 小时前
【LeetCode 手撕算法】(矩阵)73-矩阵置零、54-螺旋矩阵(贪吃蛇)、48-旋转图像
java·数据结构·算法·leetcode·力扣
不吃香菜学java2 小时前
苍穹外卖-新增套餐
java·spring boot·spring·tomcat·maven·mybatis
wangchunting2 小时前
Spring Boot 概述
java·spring boot·后端
为美好的生活献上中指2 小时前
*Java 沉淀重走长征路*之——《Linux 从入门到企业实战:一套六步法,带你打通运维与开发的任督二脉》
java·linux·运维·开发语言·阿里云·华为云·linux命令
Mr.wangh2 小时前
redis面试题总结
java·redis·面试
wuqingshun3141592 小时前
依赖注入的方式有几种,各是什么?
java·开发语言