- JDK: 17 或更高版本
- Maven: 3.6+
- MySQL: 5.7+ 或 8.0+
- Spring Boot: 4.0.0
- Node.js: ^20.19.0 或 >=22.12.0
- npm: 随 Node.js 安装
首先在 MySQL 中创建数据库:
CREATE DATABASE IF NOT EXISTS meetflow
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;执行以下 SQL 语句创建数据表:
-- 用户表
CREATE TABLE IF NOT EXISTS `user` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` VARCHAR(50) NOT NULL COMMENT '用户名',
`password` VARCHAR(255) NOT NULL COMMENT '密码(加密后)',
`name` VARCHAR(50) NOT NULL COMMENT '真实姓名',
`role` INT NOT NULL DEFAULT 0 COMMENT '角色:0-普通用户,1-管理员,2-超级管理员',
`phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
`email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
KEY `idx_role` (`role`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
-- 会议室表
CREATE TABLE IF NOT EXISTS `meeting_room` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '会议室ID',
`name` VARCHAR(100) NOT NULL COMMENT '会议室名称',
`room_number` VARCHAR(50) NOT NULL COMMENT '房号',
`capacity` INT NOT NULL COMMENT '容纳人数',
`area` DECIMAL(10,2) DEFAULT NULL COMMENT '面积(平方米)',
`purpose` VARCHAR(500) DEFAULT NULL COMMENT '用途描述',
`photo_url` VARCHAR(500) DEFAULT NULL COMMENT '照片URL(阿里云OSS)',
`status` INT NOT NULL DEFAULT 1 COMMENT '状态:0-不可预约,1-可预约',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_room_number` (`room_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议室表';
-- 预约记录表
CREATE TABLE IF NOT EXISTS `reservation` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '预约ID',
`user_id` BIGINT NOT NULL COMMENT '预约用户ID',
`meeting_room_id` BIGINT NOT NULL COMMENT '会议室ID',
`meeting_title` VARCHAR(200) NOT NULL COMMENT '会议主题',
`reservation_date` DATE NOT NULL COMMENT '预约日期',
`start_time` INT NOT NULL COMMENT '开始时间(小时,0-23)',
`end_time` INT NOT NULL COMMENT '结束时间(小时,0-23)',
`attendee_count` INT NOT NULL COMMENT '参会人数',
`status` INT NOT NULL DEFAULT 0 COMMENT '状态:0-待审批,1-已通过,2-已驳回,3-已取消,4-已完成',
`reject_reason` VARCHAR(500) DEFAULT NULL COMMENT '驳回理由',
`approve_time` DATETIME DEFAULT NULL COMMENT '审批时间',
`approver_id` BIGINT DEFAULT NULL COMMENT '审批人ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_meeting_room_id` (`meeting_room_id`),
KEY `idx_reservation_date` (`reservation_date`),
KEY `idx_status` (`status`),
CONSTRAINT `fk_reservation_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_reservation_meeting_room` FOREIGN KEY (`meeting_room_id`) REFERENCES `meeting_room` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约记录表';编辑 backend/meetflow/src/main/resources/application.yml 文件,根据实际情况修改数据库连接信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/meetflow?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root # 修改为你的MySQL用户名
password: 123456 # 修改为你的MySQL密码如果需要创建超级管理员账号,可以先注册一个用户,然后执行以下 SQL:
-- 将指定用户设置为超级管理员(role=2)
UPDATE user SET role = 2 WHERE username = 'your_username';或者使用项目中的 backend/meetflow/update_root_user.sql 文件:
-- 将root用户的role设置为2(超级管理员)
UPDATE user SET role = 2 WHERE username = 'root';cd backend/meetflow使用 Maven 下载项目依赖:
mvn clean install或者使用 IDE(如 IntelliJ IDEA、Eclipse)自动导入 Maven 项目。
如果使用阿里云 OSS 存储会议室照片,需要配置以下环境变量:
OSS_ENDPOINT: OSS 端点地址(默认:https://oss-cn-beijing.aliyuncs.com)OSS_ACCESS_KEY_ID: OSS AccessKey IDOSS_ACCESS_KEY_SECRET: OSS AccessKey SecretOSS_BUCKET_NAME: OSS 存储桶名称(默认:meetflow-room-photos)OSS_URL_PREFIX: OSS 访问地址前缀
注意:如果不配置 OSS,文件上传功能可能无法正常使用。
mvn spring-boot:run- 打开
backend/meetflow/src/main/java/com/lls/MeetflowApplication.java - 运行
main方法
# 打包
mvn clean package
# 运行 jar 包
java -jar target/meetflow-0.0.1-SNAPSHOT.jar启动成功后,访问以下地址验证:
- API 基础地址:
http://localhost:8080/api - 健康检查:访问
http://localhost:8080/api查看接口响应
cd frontend/meetflownpm install如果安装速度较慢,可以使用国内镜像:
# 使用淘宝镜像
npm install --registry=https://registry.npmmirror.com检查 frontend/meetflow/src/utils/request.js 文件,确认 API 基础地址是否正确:
// 默认应该是 http://localhost:8080/api
baseURL: 'http://localhost:8080/api'npm run dev启动成功后,控制台会显示访问地址,通常是:http://localhost:5173
如果需要构建生产版本:
npm run build构建完成后,静态文件会生成在 frontend/meetflow/dist 目录下。
npm run preview问题:启动后端时提示数据库连接失败
解决方案:
- 检查 MySQL 服务是否启动
- 确认
application.yml中的数据库连接信息是否正确 - 确认数据库
meetflow是否已创建 - 检查 MySQL 用户权限
问题:8080 端口已被占用
解决方案:
- 修改
application.yml中的server.port配置 - 或者关闭占用 8080 端口的其他程序
问题:mvn install 时依赖下载失败
解决方案:
- 检查网络连接
- 配置 Maven 国内镜像(如阿里云镜像)
- 清理 Maven 本地仓库后重新下载
问题:前端启动时提示 Node.js 版本不符合要求
解决方案:
- 安装符合要求的 Node.js 版本(^20.19.0 或 >=22.12.0)
- 使用 nvm(Node Version Manager)管理多个 Node.js 版本
问题:前端页面可以打开,但无法调用后端 API
解决方案:
- 确认后端服务已启动(访问
http://localhost:8080/api测试) - 检查前端
request.js中的 API 地址配置 - 检查浏览器控制台的错误信息
- 确认后端 CORS 配置正确
问题:上传会议室照片时失败
解决方案:
- 检查 OSS 环境变量是否配置
- 确认 OSS AccessKey 和 Secret 是否正确
- 确认 OSS Bucket 是否存在且有写入权限
- 如果不使用 OSS,可以暂时跳过照片上传功能
meetflow/
├── backend/ # 后端项目
│ └── meetflow/ # Spring Boot 项目
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/ # Java 源代码
│ │ │ └── resources/ # 配置文件
│ │ └── test/ # 测试代码
│ ├── pom.xml # Maven 配置文件
│ └── application.yml # Spring Boot 配置文件
├── frontend/ # 前端项目
│ └── meetflow/ # Vue 3 项目
│ ├── src/ # 源代码
│ ├── package.json # npm 配置文件
│ └── vite.config.js # Vite 配置文件
└── 运行说明.md # 本文件
如有问题,请查看项目文档或联系开发团队。