在企事业单位数字化转型的背景下传统纸质请销假流程普遍存在审批不透明、额度核算易出错、统计困难等痛点。本文基于 Python Flask 框架从零到一实现一套支持多级审批、假期额度动态管理、法定节假日自动扣减的企业级请销假管理系统完整覆盖请假申请、审批流转、销假返还、统计报表全业务流程。一、项目概览与技术栈本系统采用 B/S 架构面向中小型企事业单位设计支持普通员工、部门负责人、管理员等多角色权限管控核心解决假期额度精细化管控、多级审批流转、自动销假与年度结转三大业务痛点。技术分类技术选型作用说明Web 框架Flask 2.0轻量级 Web 核心路由与请求处理ORM 工具Flask-SQLAlchemy 2.5数据库对象关系映射简化 CRUD数据库SQLite 3嵌入式单文件数据库无需独立部署用户认证Flask-Login会话管理与登录鉴权定时任务APScheduler 3.9自动销假、年度额度结转定时执行数据导出OpenPyXL人员与休假数据 Excel 导出前端框架Bootstrap 5 Jinja2响应式界面与模板渲染可视化Chart.js统计报表图表渲染二、系统整体架构与核心流程系统采用经典三层架构模块间低耦合高内聚便于后续功能扩展表现层基于 Jinja2 模板引擎渲染 HTML 页面结合 Bootstrap 实现响应式交互负责数据展示与用户操作入口。业务逻辑层由 Flask 视图函数与工具函数组成处理审批流转、额度计算、节假日扣减等核心业务逻辑通过 ORM 与数据库交互。数据访问层SQLite 数据库存储用户、单位、假期额度、请假申请等 11 张业务表保证数据持久化与事务一致性。后台任务模块独立的 APScheduler 调度线程每日凌晨执行自动销假每年 1 月执行额度结转不阻塞主线程请求。核心业务流程为用户提交请假申请 → 系统自动计算法定节假日扣减 → 多级审批逐级流转 → 审批通过后延迟占用假期额度 → 假期结束自动销假并返还多扣额度。三、核心功能模块实现附核心代码1. 用户认证与权限管理基于 Flask-Login 实现用户会话管理支持四种角色权限控制密码采用哈希存储保证安全。from flask_login import UserMixin, LoginManager, login_user from werkzeug.security import generate_password_hash, check_password_hash from flask_sqlalchemy import SQLAlchemy db SQLAlchemy() # 用户模型定义 class User(UserMixin, db.Model): id db.Column(db.Integer, primary_keyTrue) name db.Column(db.String(100), nullableFalse) username db.Column(db.String(50), uniqueTrue, nullableFalse) password_hash db.Column(db.String(200), nullableFalse) role db.Column(db.String(20), nullableFalse) # user/leader/normal_admin/admin unit_id db.Column(db.Integer, db.ForeignKey(unit.id)) # 密码设置与校验 def set_password(self, password): self.password_hash generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password) # 登录管理器初始化 login_manager LoginManager() login_manager.init_app(app) login_manager.login_view login # 用户加载回调 login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id))系统通过角色字段在模板中动态渲染导航栏配合login_required装饰器保护路由实现细粒度权限控制。2. 假期额度占用与返还算法系统设计了独立的假期占用记录表支持跨类型透支占用与提前销假优先返还策略解决了单一字段无法精细化管理额度的问题。占用策略优先占用申请对应假期类型额度不足时按剩余天数升序占用其他可用假期类型减少额度碎片。返还策略提前销假时优先返还被占用的其他假期类型最大限度保留用户后续请假的选择空间。def occupy_leave_days(user, req, actual_days, start_year): 假期额度占用核心函数 quota user.get_leave_quota(start_year) leave_type get_leave_type_for_occupation(req) # 计算各类型占用明细 occupation_list calculate_leave_occupation( user, leave_type, actual_days, start_year ) # 批量写入占用记录 for occ in occupation_list: occupation LeaveOccupation( leave_request_idreq.id, leave_typeocc[leave_type], original_daysocc[days], daysocc[days], is_returnedFalse ) db.session.add(occupation) db.session.commit()3. 法定节假日自动扣减提交申请时自动匹配系统预设的法定节假日范围计算重叠天数并从总请假天数中扣除无需人工核算。def count_holidays(start_date, end_date): 计算日期范围内的法定节假日天数与名称 holidays Holiday.query.filter( Holiday.end_date start_date, Holiday.start_date end_date ).all() total_days 0 holiday_names [] for holiday in holidays: # 计算重叠区间 overlap_start max(start_date, holiday.start_date) overlap_end min(end_date, holiday.end_date) days (overlap_end - overlap_start).days 1 total_days days holiday_names.append(holiday.name) return total_days, list(set(holiday_names))四、系统功能展示系统完整覆盖请销假全生命周期管理请假申请支持年假、事假、婚假等多假期类型可选择是否扣减法定节假日提交后实时显示额度占用预测。多级审批最多支持四级审批每级可配置平行审批人审批状态与审批标志分离实现精准流程管控。销假与延假支持提前销假自动返还额度延假申请重新走审批流程并累加假期天数。代理操作部门负责人可代下属提交请假申请自动通过本级审批提升管理效率。统计报表多维度筛选休假数据提供年假使用饼图、月度休假柱状图等可视化展示支持 Excel 导出。完整的系统功能演示与操作教程可在 B 站搜索兵慌码乱查看对应实操视频。五、本地部署与运行步骤环境准备安装 Python 3.8 及以上版本配置好 pip 环境。依赖安装在项目根目录执行pip install -r requirements.txt安装 Flask、Flask-SQLAlchemy 等所有依赖包。数据库初始化运行初始化脚本执行db.create_all()自动创建数据表生成默认管理员账号。启动项目执行python app.py启动服务访问http://127.0.0.1:5000即可进入系统登录页。初始账号默认管理员账号密码可在配置文件中查看登录后可自行创建用户与分配假期额度。六、项目总结与扩展方向本系统基于 Flask 轻量灵活的特性完整实现了企业请销假管理的核心业务代码结构清晰业务逻辑严谨非常适合作为计算机专业的毕设或课设项目。后续可扩展方向包括数据库升级为 MySQL提升高并发场景下的写入性能前后端分离重构使用 Vue.js 优化前端交互体验对接企业微信 / 钉钉消息推送实现审批实时提醒增加工龄自动核算假期额度功能实现更智能的额度分配更多 Flask 项目实战教程与完整源码资料可关注我的主页获取也可以去 B 站搜索兵慌码乱查看更多项目演示视频。