十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SpringBoot+Vue全栈办公管理系统设计与实现

SpringBoot+Vue全栈办公管理系统设计与实现 1. 项目概述SpringBootVue全栈办公管理系统去年帮某中型企业实施内部管理系统时我深刻体会到传统办公方式存在的三大痛点纸质审批流程平均耗时3.2天、跨部门协作信息不同步率高达47%、考勤统计每月耗费HR约15个工时。这套基于SpringBootVue的办公管理系统正是为解决这些问题而生经过半年迭代现已稳定支撑日均300并发请求。系统采用前后端分离架构后端基于SpringBoot 2.7提供RESTful API前端使用Vue 3组合式API开发数据库选用MySQL 8.0并做了读写分离优化。2. 核心模块设计解析2.1 权限管理系统设计采用RBAC基于角色的访问控制模型通过spring-security与JWT实现认证授权。特别设计了动态权限加载机制权限变更实时生效无需重启。数据库表关系如下CREATE TABLE sys_user ( user_id bigint NOT NULL AUTO_INCREMENT COMMENT 用户ID, dept_id bigint DEFAULT NULL COMMENT 部门ID, username varchar(30) NOT NULL COMMENT 账号, password varchar(100) NOT NULL COMMENT 加密密码, salt varchar(20) DEFAULT NULL COMMENT 盐值, status char(1) DEFAULT 0 COMMENT 状态0正常 1停用 ); CREATE TABLE sys_role ( role_id bigint NOT NULL AUTO_INCREMENT, role_name varchar(30) NOT NULL, role_key varchar(100) NOT NULL ); -- 用户-角色关联表 CREATE TABLE sys_user_role ( user_id bigint NOT NULL, role_id bigint NOT NULL );关键点密码存储采用BCrypt盐值双重加密前端传输额外增加RSA非对称加密2.2 工作流引擎实现集成Activiti 7.0实现可视化流程设计核心接口包括/process/start带表单数据发起流程/process/task获取待办任务列表/process/complete审批通过/process/reject审批驳回审批链路由BPMN文件定义支持会签、或签等模式。实测中采购审批流程从平均5天缩短至8小时。3. 前后端技术栈深度整合3.1 SpringBoot后端优化采用多模块Maven项目结构oa-system ├── oa-common // 通用模块 ├── oa-system // 业务模块 ├── oa-quartz // 定时任务 └── oa-activiti // 工作流关键配置示例spring: datasource: url: jdbc:mysql://127.0.0.1:3306/oa?useSSLfalse hikari: maximum-pool-size: 20 connection-timeout: 30000 redis: host: 127.0.0.1 port: 6379 lettuce: pool: max-active: 83.2 Vue前端工程实践使用Vite构建工具主要依赖pinia状态管理element-plusUI组件库axiosHTTP客户端vue-router路由管理典型API调用封装// src/api/attendance.js import request from /utils/request export function clockIn(data) { return request({ url: /attendance/clock-in, method: post, data }) }4. 数据库设计与性能优化4.1 核心表结构设计考勤模块采用分表策略按月拆分考勤记录表CREATE TABLE attendance_202301 ( id bigint NOT NULL AUTO_INCREMENT, user_id bigint NOT NULL, clock_in_time datetime DEFAULT NULL, clock_out_time datetime DEFAULT NULL, status tinyint DEFAULT 0 COMMENT 0正常 1迟到 2早退, PRIMARY KEY (id), INDEX idx_user (user_id) ) ENGINEInnoDB;4.2 查询优化方案针对报表查询慢的问题采取三项措施添加复合索引ALTER TABLE attendance ADD INDEX idx_user_date (user_id, date)使用Redis缓存热点数据spring.cache.typeredis复杂统计采用定时任务预计算5. 典型业务场景实现5.1 考勤打卡功能核心逻辑包含地理围栏校验// 检查打卡位置是否在允许范围内 public boolean checkLocation(Point current, Point office) { double distance GeoUtils.calculateDistance( current.getLat(), current.getLng(), office.getLat(), office.getLng()); return distance ALLOWED_RADIUS; }5.2 公文流转处理采用责任链模式实现多级审批public interface ApproveHandler { void handle(Document document); } Component Order(1) public class DepartmentHeadHandler implements ApproveHandler { Override public void handle(Document doc) { if(doc.getAmount() 5000) { doc.approve(); } } }6. 部署与运维方案6.1 生产环境部署使用Docker Compose编排服务version: 3 services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} volumes: - ./mysql/data:/var/lib/mysql backend: build: ./backend ports: - 8080:8080 depends_on: - mysql6.2 监控配置SpringBoot Actuator对接Prometheusmanagement.endpoints.web.exposure.includehealth,metrics,prometheus management.metrics.export.prometheus.enabledtrue7. 开发避坑指南跨域问题确保SpringBoot配置了正确的CORS规则Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOrigins(*) .allowedMethods(*); } }; }日期序列化统一前后端日期格式处理// axios拦截器处理日期字符串 axios.interceptors.response.use(response { const dateRegex /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/; const convertDates (data) { // 递归处理日期转换 }; response.data convertDates(response.data); return response; });性能陷阱避免N1查询问题// 错误示例 ListUser users userRepository.findAll(); users.forEach(user - { Department dept departmentRepository.findById(user.getDeptId()); // ... }); // 正确做法 Query(SELECT u FROM User u LEFT JOIN FETCH u.department) ListUser findAllWithDepartment();这套系统在实施过程中我们特别注重用户体验细节。比如审批消息推送采用WebSocket实时通知文件上传组件支持断点续传移动端适配使用REM布局。数据库备份方案采用xtrabackup每日全备binlog增量确保数据安全。
返回列表