中介内部房屋租赁数据管理系统,基于 Vue 3 + Node.js + MySQL 构建,Docker 容器化部署。
- 楼栋布局:A栋(电梯楼)、B栋(步梯楼),每栋 8 层,每层 5 间
- 房源属性:门牌号(唯一)、类型(电梯楼/步梯楼)、区域、状态
- 房源状态:未租、已租、待出租、已预定、整租
- 基础操作:新增、编辑、删除房源;手动切换状态和设置入住/退租日期
- 查询筛选:按楼栋、按状态筛选
- 可视化布局:以楼层网格形式展示所有房间,颜色区分状态(白=未租、黄=已预定、绿=已租)
- 数据规则:按月记录租金流水,每条流水关联对应房源
- 字段:租金金额、收款状态(已收/未收)、费用月份
- 操作:新增、编辑、删除租金记录,列表分页展示
- 当月已收租金总额
- 当月未收租金总额
- 5 日内待收租金明细列表
- 记录房源(增/改/删)、租金记录(增/改/删)所有操作痕迹
- 按时间倒序展示,支持按模块筛选
- 展示未来 5 天内的入住/退租事项
- 即将入住列表、即将退租列表
| 层级 | 技术 |
|---|---|
| 前端 | Vue 3 + Element Plus + Vite |
| 后端 | Node.js + Express |
| 数据库 | MySQL 8.0 |
| 容器化 | Docker + Docker Compose |
| 前端服务 | Nginx(静态文件 + 反向代理) |
- 安装 Docker Desktop
- 安装 Node.js v18+(仅开发时需要)
# 克隆项目后进入目录,直接启动所有服务
docker compose up -d
# 查看运行状态
docker compose ps
# 查看日志
docker compose logs -f frontend # 前端日志
docker compose logs -f backend # 后端日志
docker compose logs -f mysql # 数据库日志服务启动后访问:
- 前端页面:http://localhost
- 后端 API:http://localhost:3000
# 1. 启动 MySQL(Docker)
docker compose up -d mysql
# 2. 启动后端
cd backend
npm install
npm run dev
# 3. 启动前端
cd frontend
npm install
npm run dev本地开发时前端访问 http://localhost:5173(Vite 开发服务器,自动代理 API 到后端)。
├── docker-compose.yml # Docker 编排配置
├── init.sql # 数据库初始化脚本
├── README.md
├── 需求文档.txt
│
├── backend/ # 后端服务
│ ├── Dockerfile
│ ├── package.json
│ └── src/
│ ├── app.js # Express 应用入口
│ ├── routes/
│ │ ├── houses.js # 房源 CRUD API
│ │ ├── rentRecords.js# 租金记录 CRUD API
│ │ ├── statistics.js # 统计 API
│ │ └── logs.js # 操作日志 API
│ └── middleware/
│ ├── logger.js # 日志中间件
│ └── errorHandler.js# 错误处理中间件
│
├── frontend/ # 前端应用
│ ├── Dockerfile
│ ├── nginx.conf # Nginx 配置(生产环境)
│ ├── vite.config.js # Vite 配置
│ ├── package.json
│ └── src/
│ ├── main.js # Vue 应用入口
│ ├── App.vue # 根组件
│ ├── api/
│ │ └── index.js # API 请求封装
│ ├── router/
│ │ └── index.js # 路由配置
│ └── views/
│ ├── HousesView.vue # 房源管理
│ ├── RentRecordsView.vue # 租金管理
│ ├── StatisticsView.vue # 数据统计
│ ├── LogsView.vue # 操作日志
│ └── ScheduleView.vue # 日程看板
│
└── scripts/
└── batch-add-houses.js # 批量新增房源脚本
| 服务 | 容器内端口 | 宿主机端口 |
|---|---|---|
| 前端 | 80 | 80 |
| 后端 API | 3000 | 3000 |
| MySQL | 3306 | 3307 |
项目提供了批量新增房源的脚本,用于快速初始化 A、B 两栋的房源数据:
# 安装依赖后执行
cd scripts
npm install mysql2
node batch-add-houses.js脚本逻辑:
- A栋(电梯楼):A-1-01 ~ A-8-05,共 40 间
- B栋(步梯楼):B-1-01 ~ B-8-05,共 40 间
- 初始状态全部为"待出租"
也可以直接在 MySQL 中执行看板来生成数据。
houses(房源表)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT AUTO_INCREMENT PRIMARY KEY | 主键 |
| door_number | VARCHAR(50) UNIQUE | 门牌号 |
| type | ENUM('电梯楼','步梯楼') | 类型 |
| area | VARCHAR(100) | 区域 |
| status | ENUM('整租','已租','待出租','已预定','未租') | 房源状态 |
| checkin_date | DATE NULL | 入住日期 |
| checkout_date | DATE NULL | 退租日期 |
rent_records(租金记录表)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT AUTO_INCREMENT PRIMARY KEY | 主键 |
| house_id | INT | 关联房源 ID |
| amount | DECIMAL(10,2) | 租金金额 |
| rent_month | VARCHAR(7) | 费用月份(YYYY-MM) |
| status | ENUM('已收','未收') | 收款状态 |
operation_logs(操作日志表)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT AUTO_INCREMENT | 主键 |
| module | VARCHAR(50) | 操作模块 |
| action | VARCHAR(50) | 操作类型 |
| target_id | INT | 操作对象 ID |
| detail | TEXT | 操作详情 |
# 检查容器是否正常运行
docker compose ps
# 查看前端日志
docker compose logs frontend
# 重启前端(代码修改后需要重新构建)
docker compose build frontend
docker compose up -d frontend# 确认 MySQL 容器健康
docker compose ps mysql
# 查看 MySQL 日志
docker compose logs mysql
# 手动连接测试
docker exec -it house-rental-mysql mysql -uroot -proot123 house_rental前端代码打包在 Docker 镜像中,修改后需要重新构建:
docker compose build frontend
docker compose up -d frontend后端代码同样需要重建:
docker compose build backend
docker compose up -d backend