运输企业档案培训报名系统实操指南:从零搭建到上线全流程
一、系统核心需求与架构设计
本系统旨在解决运输企业内部档案培训的报名管理问题,核心功能包括:员工信息录入、培训课程发布、在线报名、报名审核、数据统计与导出。系统需支持多角色(管理员、部门负责人、普通员工)访问,并确保操作流程简单、数据安全。
我们采用前后端分离的B/S架构。前端使用Vue.js 3 + Element Plus构建用户界面,后端使用Spring Boot + MyBatis Plus提供RESTful API,数据库选用MySQL 8.0。这种组合成熟稳定,社区资源丰富,便于快速开发和部署。
二、开发环境准备与项目初始化
1. 基础软件安装
在你的开发机器上安装以下软件,请确保版本一致以避免兼容性问题。
- JDK 17:从Oracle官网下载安装包,或使用OpenJDK。安装后设置环境变量JAVA_HOME指向安装目录。
- Node.js 18.17.0 LTS:从Node.js官网下载安装包。安装完成后,在命令行执行
node -v和npm -v验证安装。 - MySQL 8.0:从MySQL官网下载社区版安装包。安装过程中,请记住你设置的root用户密码。
- Maven 3.8.6:从Apache Maven官网下载二进制包,解压后设置环境变量MAVEN_HOME,并将%MAVEN_HOME%\bin添加到系统PATH中。
- IntelliJ IDEA(社区版) 和 Visual Studio Code:分别用于后端和前端开发。
2. 数据库初始化
打开MySQL命令行或客户端,执行以下SQL语句创建数据库和核心表结构。
```sql CREATE DATABASE IF NOT EXISTS `transport_training` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE `transport_training`; -- 员工信息表 CREATE TABLE `employee` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID', `employee_id` varchar(20) NOT NULL COMMENT '员工工号', `name` varchar(50) NOT NULL COMMENT '姓名', `department` varchar(100) NOT NULL COMMENT '所属部门', `phone` varchar(20) DEFAULT NULL COMMENT '联系电话', `email` varchar(100) DEFAULT NULL COMMENT '邮箱', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_employee_id` (`employee_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 培训课程表 CREATE TABLE `training_course` ( `id` int NOT NULL AUTO_INCREMENT, `course_code` varchar(50) NOT NULL COMMENT '课程编号', `course_name` varchar(200) NOT NULL COMMENT '课程名称', `description` text COMMENT '课程描述', `lecturer` varchar(100) NOT NULL COMMENT '讲师', `start_time` datetime NOT NULL COMMENT '开始时间', `end_time` datetime NOT NULL COMMENT '结束时间', `location` varchar(200) NOT NULL COMMENT '培训地点', `max_participants` int NOT NULL COMMENT '最大报名人数', `current_participants` int DEFAULT '0' COMMENT '当前报名人数', `status` tinyint DEFAULT '1' COMMENT '状态:1-开放报名,2-已截止,3-已取消', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_course_code` (`course_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 报名记录表 CREATE TABLE `registration` ( `id` int NOT NULL AUTO_INCREMENT, `employee_id` varchar(20) NOT NULL COMMENT '报名员工工号', `course_code` varchar(50) NOT NULL COMMENT '报名课程编号', `registration_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '报名时间', `status` tinyint DEFAULT '1' COMMENT '状态:1-待审核,2-已通过,3-已拒绝', `audit_comment` varchar(500) DEFAULT NULL COMMENT '审核意见', `audit_time` datetime DEFAULT NULL COMMENT '审核时间', `auditor` varchar(50) DEFAULT NULL COMMENT '审核人', PRIMARY KEY (`id`), UNIQUE KEY `uk_employee_course` (`employee_id`,`course_code`), KEY `idx_course_code` (`course_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ```三、后端服务搭建与核心接口实现
1. 创建Spring Boot项目
使用IntelliJ IDEA的Spring Initializr创建项目,选择以下依赖:Spring Web, Spring Data JPA, MySQL Driver, Lombok, MyBatis Plus。生成项目后,在src/main/resources/application.yml中配置数据库连接。
2. 实现核心业务接口
以“课程报名”接口为例,展示完整的Controller、Service、Mapper实现。
实体类 Registration.java:使用Lombok简化代码。
```java package com.transport.training.entity; import com.baomidou.mybatisplus.annotation.; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("registration") public class Registration { @TableId(type = IdType.AUTO) private Integer id; private String employeeId; private String courseCode; private LocalDateTime registrationTime; private Integer status; // 1-待审核,2-已通过,3-已拒绝 private String auditComment; private LocalDateTime auditTime; private String auditor; } ```Mapper接口 RegistrationMapper.java:继承MyBatis Plus的BaseMapper。
```java package com.transport.training.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.transport.training.entity.Registration; public interface RegistrationMapper extends BaseMapper服务层 RegistrationService.java:包含业务逻辑。
```java package com.transport.training.service; import com.baomidou.mybatisplus.extension.service.IService; import com.transport.training.entity.Registration; public interface RegistrationService extends IService
服务实现类 RegistrationServiceImpl.java:实现报名逻辑。
```java package com.transport.training.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.transport.training.entity.Registration; import com.transport.training.entity.TrainingCourse; import com.transport.training.mapper.RegistrationMapper; import com.transport.training.mapper.TrainingCourseMapper; import com.transport.training.service.RegistrationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class RegistrationServiceImpl extends ServiceImpl控制器 RegistrationController.java:暴露REST API。
```java package com.transport.training.controller; import com.transport.training.service.RegistrationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.; import java.util.HashMap; import java.util.Map; @RestController @RequestMapping("/api/registration") public class RegistrationController { @Autowired private RegistrationService registrationService; @PostMapping("/register") public Map四、前端管理界面开发
1. 初始化Vue项目并安装依赖
打开命令行,进入你的工作目录,执行以下命令创建Vue项目并安装UI库和HTTP客户端。
```bash npm create vue@latest transport-training-frontend 根据提示选择:TypeScript, Vue Router, Pinia。其余选项按需选择或直接回车。 cd transport-training-frontend npm install element-plus axios npm install ```在src/main.ts中引入Element Plus。
2. 实现课程列表与报名页面
创建页面组件src/views/CourseList.vue,实现课程查询与报名功能。
培训课程列表
五、系统部署与上线
1. 后端打包与部署
在后端项目根目录(包含pom.xml的目录)下,执行Maven打包命令。
```bash mvn clean package -DskipTests ```命令执行成功后,在target目录下会生成一个transport-training-0.0.1-SNAPSHOT.jar文件。将此JAR文件上传到你的Linux服务器(如使用CentOS 7)。在服务器上,使用以下命令启动服务。
2. 前端构建与部署
在前端项目根目录下,执行构建命令,生成用于生产环境的静态文件。
```bash npm run build ```命令执行成功后,项目根目录下会生成一个dist文件夹。将此文件夹内的所有文件上传到你的Web服务器(如Nginx)的网站根目录下,例如/usr/share/nginx/html/。配置Nginx,将请求代理到后端API。
编辑Nginx配置文件(例如/etc/nginx/conf.d/default.conf),添加以下配置。