请假系统模块
管理员拥有,角色,用户,申请单类型,申请单的管理权限
普通开发,或者组长,都可创建申请单,查看自己申请单,审批下级申请单
功能模块
请假审批系统具有以下主要功能:
- 用户管理:系统支持多种用户角色,如员工、部门经理、总经理等,并提供相应的权限管理功能。管理员可以添加、删除和编辑用户信息。
- 请假申请:用户可以提交请假申请,包括请假类型、请假时间段和请假事由等信息。用户还可以附加相关文件或备注。
- 审批流程:请假申请将根据用户角色逐级提交给上级进行审批。每个级别的上级可以审核、批准或拒绝申请,并提供相应的审批意见。
- 请假记录:系统将保留所有请假申请的历史记录,包括申请状态、审批意见和申请时间等
other:
(超级管理员:拥有最高权限,可以进行用户,职位,请假类型,请假单管理)
(非管理员:请假申请单模块)
目前权限设计,硬编码实现,并未进行权限,角色,设计
数据库设计
字段中NOT NULL ,代码进行数据校验
职位模块
职位表
CREATE TABLE `dict_role` (
`ID` varchar(32) NOT NULL COMMENT '主键',
`NAME` varchar(64) NOT NULL COMMENT '职位名称',
`LEVEL` decimal(2,0) NOT NULL COMMENT '职位级别',
`REMARK` varchar(128) DEFAULT NULL COMMENT '备注',
`CREATE_USER_ID` varchar(32) NOT NULL COMMENT '创建人',
`CREATE_TIME` datetime NOT NULL COMMENT '创建时间',
`MODIFY_USER_ID` varchar(32) NOT NULL COMMENT '修改人',
`MODIFY_TIME` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='职位表';
测试角色数据
用户模块
用户表
CREATE TABLE `dict_user` (
`ID` varchar(32) NOT NULL COMMENT '主键',
`NAME` varchar(64) NOT NULL COMMENT '用户姓名',
`PASSWORD` varchar(64) NOT NULL COMMENT 'ID+password的md5加密形式',
`ROLE_ID` varchar(32) NOT NULL COMMENT '职位',
`SUPERIOR_ID` varchar(32) NOT NULL COMMENT '直接上级',
`LAST_LOGIN_TIME` datetime DEFAULT NULL COMMENT '最近登录时间',
`REMARK` varchar(128) DEFAULT NULL COMMENT '备注',
`CREATE_USER_ID` varchar(32) NOT NULL COMMENT '创建人',
`CREATE_TIME` datetime NOT NULL COMMENT '创建时间',
`MODIFY_USER_ID` varchar(32) NOT NULL COMMENT '修改人',
`MODIFY_TIME` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户基本信息';
用户数据(用来验证系统)
注:所有用户角色即登录名,密码为123456
请假类型模块
请假类型表
CREATE TABLE `dict_leave_style` (
`ID` varchar(32) NOT NULL COMMENT '主键',
`NAME` varchar(64) NOT NULL COMMENT '名称',
`REMARK` varchar(128) DEFAULT NULL COMMENT '备注',
`CREATE_USER_ID` varchar(32) NOT NULL COMMENT '创建人',
`CREATE_TIME` datetime NOT NULL COMMENT '创建时间',
`MODIFY_USER_ID` varchar(32) NOT NULL COMMENT '修改人',
`MODIFY_TIME` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='请假类型表';
模拟测试数据
申请单模块
请假申请单表结构
CREATE TABLE `leave_bill` (
`ID` varchar(32) NOT NULL COMMENT '主键',
`LEAVE_TIME` datetime NOT NULL COMMENT '请假时间',
`START_TIME` datetime NOT NULL COMMENT '开始时间',
`END_TIME` datetime NOT NULL COMMENT '结束时间',
`DAYS` decimal(5,2) NOT NULL COMMENT '请假时长',
`STYLE_ID` varchar(32) NOT NULL COMMENT '假期类型',
`CAUSE` varchar(256) NOT NULL COMMENT '事由',
`USER_ID` varchar(32) NOT NULL COMMENT '请假人',
`BILL_STATUS` tinyint(2) NOT NULL COMMENT '0:保存;1:同意;2:等待审批;-1:驳回',
`LEVEL_NOW` decimal(2,0) NOT NULL COMMENT '当前层级',
`LEVEL_TOTAL` decimal(2,0) NOT NULL COMMENT '需要审批层级',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='请假单表';
表关系
解决方案
1 根据pd构建数据库,以及相应表 并观察表结构 (非空验证,公用字段 --> logic column)
2 构建后端项目,实现简单crud,postman自测对应接口
3 token实现认证登录,线程变量数据处理
4 构建前端项目,进行接口对接 ,自测系统优化业务流程,并记录缺陷
5 确定部署方案
6 整理流程图,相应文档
后端实现
springboot +jwt +mybatis-plus+mysql+pagehelper
项目结构划分
模块划分数据走向轮廓
模块功能
登录模块
1 根据 name ,secret,explaintime 生成对应token
2 拦截器对请求进行拦截,如果登录请求直接通过,登录成功后保存相关用户线程数据,
非登录请求,进行token验证,token无效则抛出异常
请假审批流程
申请单中设置有 LEVEL_NOW 当前层级 LEVEL_TOTAL需要审批层级 字段
审批是通过传参status(1同意 -1驳回) 根据逻辑来实现更新申请单相应层级变化已经状态改变
前端实现
vue+element+vuex+axios+vue-router
前端项目采用npm管理报,webpack进行打包处理
项目结构划分
技术实现
后端使用了Spring Boot框架构建RESTful API,提供了与前端交互的数据接口。系统使用JWT(JSON Web Token)进行身份验证和用户授权,保证了数据的安全性。
数据库方面,系统采用了关系型数据库(如MySQL)来存储用户信息、请假申请和审批记录等数据
请假审批系统采用前后端分离的架构,其中前端使用Vue.js框架开发,后端使用Java语言和Spring Boot框架。下面是项目的仓库链接:
- 前端代码:https://gitee.com/wudeape/leave-system-ui
- 后端代码:https://gitee.com/wudeape/leave-system.git
快速开始
如果你对该系统感兴趣并希望进行部署和测试,可以按照以下步骤进行:
-
首先,克隆前端代码仓库到本地机器:
git clone https://gitee.com/wudeape/leave-system-ui.git
-
进入前端代码目录,并安装相关依赖:
cd leave-system-ui npm install
-
修改前端配置文件,将API地址指向你部署的后端服务器。
-
启动前端开发服务器:
npm run start
-
克隆后端代码仓库到本地机器:
git clone https://gitee.com/wudeape/leave-system.git
-
使用IDE(如IntelliJ IDEA)打开后端代码目录,并配置数据库连接等相关配置。
-
启动后端服务器。
项目部署
部署方案 Docker+Nginx 部署前后端项目
dockerfile 编写mysql,nginx, leavesystem 进行构建容器
编写docker-compose构建脚本
version: "1"
services:
enjoyornginx:
container_name: enjoyornginx
image: nginx:latest
ports:
- 80:80
volumes:
- /root/nginx/html:/usr/share/nginx/html
privileged: true
enjoyormysql:
container_name: enjoyormysql
image: mysql:5.7
ports:
- 3306:3306
environment:
- MYSQL_DATABASE=learn_base
- MYSQL_ROOT_PASSWORD=learn_base123456
enjoyorleavesystem:
container_name: enjoyorleavesystem
image: enjoyorleavesystem:latest
build: .
ports:
- 8088:8088
depends_on:
- enjoyormysql
links:
- enjoyormysql
编写dockerfile
FROM openjdk:8
EXPOSE 8081
ADD LeaveSystem-0.0.1-SNAPSHOT.jar enjoyorleavesystem.jar
RUN bash -c 'touch /enjoyorleavesystem.jar'
ENTRYPOINT ["java", "-jar", "/enjoyorleavesystem.jar"]
vue 打包项目挂载到nginx制定路径,修改nigx.conf
后端项目直接打包称容器 进行链接mysql