ThinkPHP 5.1搭建企业OA系统:员工考勤与审批流程开发【实操】

雨丽姑娘_2679

雨丽姑娘_2679

2026-06-24

324人浏览

原创

thinkphp 5.1虽停止维护,仍适用于中小团队oa开发,关键在于业务闭环、状态可控与权限隔离;考勤用时间/ip校验自动判迟到/早退/缺卡,审批采用四步状态机,权限通过auth condition动态控制,前端用layui保障体验。

thinkphp 5.1搭建企业oa系统:员工考勤与审批流程开发【实操】

ThinkPHP 5.1 虽已停止官方维护,但因其轻量、文档清晰、扩展成熟,仍被不少中小团队用于快速搭建内部 OA 系统。开发员工考勤与审批流程,关键不在框架多新,而在业务逻辑是否闭环、数据状态是否可控、权限是否隔离。以下为真实项目中提炼出的实操要点,聚焦可落地的代码结构与设计决策。

考勤模块:打卡记录 + 状态自动判定

不依赖第三方定位 SDK,用基础 Web 表单 + 时间戳 + IP 校验实现最小可行打卡。核心是“一次打卡生成一条记录,并自动标记是否迟到/早退/缺卡”:

  • 数据库表 attendance_log 包含字段:user_id、check_date(Y-m-d)、check_time(H:i:s)、ip、status(0=正常,1=迟到,2=早退,3=缺卡)
  • 打卡接口(AttendanceController@submit)中,先查当日是否已打卡:AttendanceLog::where(['user_id' => $uid, 'check_date' => date('Y-m-d')])->count(),避免重复提交
  • 状态判定逻辑写在模型的 setCheckTimeAttr 或服务层:
      • 规定上班时间 08:30,晚于 08:45 记为迟到;
      • 下班时间 17:30,早于 17:15 记为早退;
      • 若当天无打卡记录且当前时间 > 17:30,则夜间定时任务补标「缺卡」

审批流程:四步驱动的状态机设计

避免用“审批中/已通过/已拒绝”简单枚举,而是按流转阶段建模,让每一步操作有明确前置条件和后置动作:

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载
  • 审批主表 approval_apply 存申请摘要(申请人、类型、标题、附件路径、当前节点)
  • 审批节点表 approval_node 存每一步处理人、处理时间、意见、操作(同意/驳回/转交),支持会签或或签
  • 关键约束:
      • 用户只能操作「自己是当前处理人」且「状态为待处理」的单据;
      • 同意后,自动查出下一节点处理人(可配置为角色、部门负责人或指定用户);
      • 驳回直接结束流程,状态设为「已驳回」,不可再提交
  • 在 ApprovalService 中封装 handle($applyId, $userId, $action, $remark) 方法,统一校验+更新+通知,控制器只做参数接收

权限与数据隔离:基于 RBAC 的最小集控制

OA 不需要复杂权限系统,但必须守住两条线:谁能看到自己的考勤?谁有权审批哪类单据?

  • 不重造 Auth 类,复用 ThinkPHP 自带的 Auth 门面,但规则表 auth_rule 中的 condition 字段要活用:
      • “查看本人考勤” → condition = user_id = {uid};
      • “审批本部门请假单” → condition = dept_id = (SELECT dept_id FROM user WHERE id = {uid}) AND type = 'leave'
  • 在控制器基类 BaseController 的 initialize() 中调用 Auth::check('attendance/read', $this->uid),失败则抛出 403
  • 列表接口一律加数据过滤,如考勤统计页:AttendanceLog::where('user_id', $this->uid)->where('check_date', '>=', $start)->select(),绝不裸查全表

前端交互:用 Layui + Ajax 保体验不降级

ThinkPHP 5.1 默认视图层足够支撑 OA 前端,无需强耦合 Vue/React。重点是把异步操作做稳:

  • 打卡按钮点击后立即禁用 + 加载态,防止重复提交;成功后用 layer.msg('打卡成功') 提示,3 秒后跳转到今日记录页
  • 审批详情页用 laytpl 渲染节点流,每个节点显示头像、姓名、时间、意见;操作按钮根据当前用户身份和单据状态动态显示(如“我已处理过”则灰掉,“非当前处理人”则隐藏按钮)
  • 所有 Ajax 请求统一拦截响应码:
      • code=200 → 正常处理;
      • code=403 → 弹窗提示“无权限”,并 reload 页面;
      • code=500 → 打印 message 到 console,便于排查 SQL 错误或空指针

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

80

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

180

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

140

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

80

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程