面向中小企业的内部协同办公场景:员工每日考勤打卡与月度考勤统计、请假/报销单据在线多级审批、组织架构与员工通讯录管理、企业公告下发与已读跟踪、基于角色的菜单与按钮级权限管控,解决纸质审批流转慢、考勤统计靠人工、通知触达无闭环的问题。
点击空白处退出提示
语言技术
Vue、TypeScript系统类型
Web行业分类
企业服务
面向中小企业的内部协同办公场景:员工每日考勤打卡与月度考勤统计、请假/报销单据在线多级审批、组织架构与员工通讯录管理、企业公告下发与已读跟踪、基于角色的菜单与按钮级权限管控,解决纸质审批流转慢、考勤统计靠人工、通知触达无闭环的问题。
系统为前后端分离的企业内部 OA 平台,内置 3 个角色(超级管理员 / 部门经理 / 普通员工)、6 个部门、12 个演示账号,涵盖以下功能模块:
① 数据驾驶舱 :在职员工、今日出勤、待我审批、未读公告、本月出勤 5 张统计卡(数字滚动动画);近 7 天出勤趋势柱状折线图、各部门人数分布环形图、审批类型与状态占比、近 6 个月审批趋势共 4 类 ECharts 图表。
② 组织架构 :左侧部门树支持增删改(删除时校验子部门与在职员工),右侧员工通讯录支持新增/编辑/删除、启停用、重置密码,可按关键字、部门(含子部门递归)、角色、状态组合筛选。
③ 考勤打卡 :实时时钟、一键签到/签退,09:05 后签到自动判定迟到、18:00 前签退判定早退;月度考勤概览(应出勤/正常/迟到/早退/缺卡)+ 明细表自动计算工作时长。
④ 审批中心 :支持请假(病假/事假/年假等)与费用报销两类单据;实现"部门经理 → 管理员"二级审批流,同意自动流转、驳回立即终结并强制填写意见,"我的申请/待我审批/全部申请"分页签,详情抽屉以时间线完整展示发起、每级审批意见与当前节点。
⑤ 公告通知 :管理员发布公告(普通/重要/紧急三级优先级色条),未读蓝色标记、按未读优先排序,进入详情自动标记已读,导航栏未读数 30 秒轮询角标。
⑥ 系统管理 :用户管理(分配角色/启停用)、角色管理,权限以树形复选框分配(正确合并全选与半选节点),管理员角色持有通配权限。
⑦ 通用能力 :RBAC 菜单级 + 按钮级权限控制、登录后动态路由注册、多标签页(固定/关闭其他/缓存)、暗色主题一键切换并持久化、390px 移动端响应式适配。
整体架构 :前后端分离单体架构。前端 Vue 3.5(`` + TypeScript + Vite 5),状态管理 Pinia,路由 Vue Router 4,UI 库 Element Plus 2.8,图表 ECharts 5,HTTP 请求 Axios;后端 NestJS 10(TypeScript),Prisma 5 ORM + SQLite 数据库,JWT(Passport)鉴权,bcryptjs 密码加密,class-validator 全局入参校验,前后端通过`/api` 前缀 + CORS 联调。
权限实现(核心亮点) :后端通过 APP_GUARD 注册"JWT 认证守卫 + 权限守卫"全局双守卫,默认所有接口需登录,`@Public()` 装饰器放行登录接口,`@RequirePermissions()` 声明接口所需权限;JWT 策略每次请求回库查询最新角色与权限,篡改 Token 无法提权。前端登录后按权限树递归过滤路由并动态 addRoute 生成菜单,配合 v-permission 自定义指令实现按钮级显隐,直接输入无权 URL 会被兜底路由拦截。
审批流实现 :审批单与审批记录表一对多,一级审批人取部门负责人(申请人本人时回落管理员),二级为管理员;每次同意/驳回写入审批记录并更新单据状态与当前审批人,驳回强制意见,前端时间线按记录渲染完整流转过程。
考勤实现 :用户与日期建立唯一索引防止重复打卡,签到/签退分别落库并按固定时间阈值判定状态,月度统计按工作日计算应出勤,明细在服务端计算工时。
数据可视化 :ECharts 封装为通用组件,随暗色主题自动切换坐标轴与提示框配色,监听窗口 resize;图表数据全部由后端聚合接口返回。
数据与工程 :Prisma schema 定义部门、角色、用户、考勤、审批单、







评论