logo
0
1
WeChat Login

小区物业可视化平台

一个基于 Spring Boot + Vue 3 的现代化小区物业管理平台,提供 PC 管理端和移动端双端支持,实现问题报修、消息发布、论坛互动等核心功能。

Spring Boot Vue Vant TypeScript License

📖 项目简介

本平台是一个面向小区业主和物业管理公司的综合管理系统,旨在提升物业管理效率,增强业主与物业之间的沟通互动。平台采用前后端分离架构,提供 PC 管理端移动端 双端支持,支持问题报修全流程管理、消息分类发布、论坛互动交流等核心功能。

✨ 核心特性

  • 🖥️ 双端支持:PC 管理端 + 移动端,满足不同场景使用需求
  • 🔧 问题管理闭环:业主发布问题 → 物业接收处理 → 整改反馈 → 业主评价 → 问题闭环
  • 📢 消息分类发布:支持日常通知、限时公告、制度公示三大板块分类管理
  • 💬 论坛互动交流:业主与业主、业主与物业之间的互动论坛平台
  • 📊 数据可视化:首页数据看板,实时展示问题处理、消息发布等统计数据
  • 🔐 角色权限管理:支持系统管理员、物业工作人员、业主三端独立管理
  • 📱 移动优先:基于 Vant 的移动端设计,适配各种手机屏幕尺寸
  • 🌐 响应式设计:PC 端适配桌面、平板等多种设备

🎯 功能模块

📱 移动端功能(业主 & 物业工作人员)

模块业主功能物业工作人员功能
首页问题统计、消息提醒、热门帖子、快捷操作工作数据看板、待办提醒、消息统计
问题管理发布问题、查看进度、上传图片、评价反馈接收任务、处理问题、上传整改照片、状态更新
消息中心分类查看消息、确认阅读、限时公告提醒发布消息、分类管理、查看统计、定时推送
论坛互动发帖评论、匿名发布、点赞收藏、热门推荐发帖评论、官方回复、意见征集、内容管理
个人中心个人信息、房屋信息、修改密码个人信息、工作统计、修改密码

💻 PC 管理端功能(系统管理员)

模块功能描述
用户管理业主管理、物业工作人员管理、账号启用禁用、角色分配
角色权限角色定义、权限分配、权限矩阵管理
问题管理问题统计、处理监督、数据导出、问题审核
消息管理消息发布、消息统计、浏览统计、消息删除
论坛管理帖子审核、违规处理、意见征集管理、内容管理
系统配置参数设置、日志查看、性能监控、数据备份

🛠️ 技术栈

后端技术

Spring Boot: 3.1.5
Spring Data JPA: 数据持久化(自动更新表结构)
Spring Security: 认证授权
JWT: Token 认证
MySQL: 8.0+ (主数据库)
Redis: 7.0+ (缓存)
MinIO: 8.5+ (对象存储)
Neo4j: 5.16+ (图数据库)
WebSocket: 实时通信

PC 端技术

Vue: 3.4+
TypeScript: 5.4+
Vite: 5.1+ (构建工具)
Vue Router: 4.3+ (路由)
Pinia: 2.1+ (状态管理)
Element Plus: 2.6+ (UI 组件库)
ECharts: 5.5+ (数据可视化)
Axios: 1.6+ (HTTP 客户端)

移动端技术

Vue: 3.4+
TypeScript: 5.4+
Vite: 5.1+ (构建工具)
Vue Router: 4.3+ (路由)
Pinia: 2.1+ (状态管理)
Vant: 4.8+ (移动端 UI 组件库)
Axios: 1.6+ (HTTP 客户端)
Dayjs: 日期处理

DevOps 技术

Docker: 容器化
Kubernetes: 容器编排
Nginx: 反向代理
CNB: CI/CD 平台
Prometheus: 监控
Grafana: 可视化

🚀 快速开始

前置要求

  • JDK 17+
  • Node.js 18+
  • Maven 3.6+
  • MySQL 8.0+
  • Redis 7.0+
  • Docker (可选)

1. 克隆项目

git clone https://cnb.cool/code-channel/residential-property-visualization-platform.git
cd residential-property-visualization-platform

2. 后端启动

# 进入后端目录
cd residential-property-backend

# 配置数据库
# 修改 src/main/resources/application.yml 中的数据库连接信息

# 启动后端服务
mvn spring-boot:run

# 或使用 Docker
docker-compose up -d mysql redis
mvn spring-boot:run

后端服务启动在:http://localhost:8088/api

API 文档:http://localhost:8088/api/swagger-ui.html

3. PC 端启动

# 进入前端目录
cd residential-property-frontend

# 安装依赖
npm install

# 启动开发服务器
npm run dev

# 或使用 yarn
yarn install
yarn dev

PC 端服务启动在:http://localhost:5173

4. 移动端启动

# 进入移动端目录
cd residential-property-mobile

# 安装依赖
npm install

# 启动开发服务器(监听所有网络接口)
npm run dev

# 或使用 yarn
yarn install
yarn dev

移动端服务启动在:

5. 访问应用

PC 管理端

移动端

后端 API

5. 默认账号

系统管理员

用户名: admin
密码: admin123

物业管理员

用户名: property001
密码: property123

业主账号

用户名: 13800138000
密码: user123

📁 项目结构

residential-property-visualization-platform/
├── docs/                              # 项目文档
│   ├── SPEC.md                         # 需求分析
│   ├── PROTOTYPE.md                    # 页面原型
│   ├── API.md                          # 接口设计
│   ├── DESIGN.md                       # 详细设计
│   └── MOBILE_DESIGN.md                # 移动端设计
│
├── residential-property-backend/       # 后端项目
│   ├── src/
│   │   └── main/
│   │       ├── java/com/property/
│   │       │   ├── controller/        # 控制器层
│   │       │   ├── service/           # 服务层
│   │       │   ├── repository/        # 数据访问层
│   │       │   ├── entity/            # 实体类
│   │       │   ├── dto/               # 数据传输对象
│   │       │   ├── config/            # 配置类
│   │       │   ├── security/          # 安全配置
│   │       │   ├── websocket/         # WebSocket
│   │       │   └── util/              # 工具类
│   │       └── resources/
│   │           ├── application.yml    # 主配置
│   │           ├── application-dev.yml
│   │           └── application-prod.yml
│   ├── pom.xml                        # Maven 配置
│   └── Dockerfile                     # 后端镜像
│
├── residential-property-frontend/     # PC 管理端项目
│   ├── src/
│   │   ├── api/                        # API 封装
│   │   ├── assets/                     # 静态资源
│   │   ├── components/                 # 公共组件
│   │   ├── composables/                # 组合式函数
│   │   ├── layouts/                    # 布局组件
│   │   ├── router/                     # 路由配置
│   │   ├── stores/                     # Pinia 状态管理
│   │   ├── types/                      # TypeScript 类型
│   │   ├── utils/                      # 工具函数
│   │   ├── views/                      # 页面视图
│   │   ├── App.vue
│   │   └── main.ts
│   ├── package.json
│   ├── vite.config.ts
│   └── Dockerfile                     # 前端镜像
│
├── residential-property-mobile/        # 移动端项目
│   ├── src/
│   │   ├── api/                        # API 封装
│   │   ├── components/                 # 公共组件
│   │   ├── router/                     # 路由配置
│   │   ├── stores/                     # Pinia 状态管理
│   │   ├── utils/                      # 工具函数
│   │   ├── views/                      # 页面视图
│   │   │   ├── auth/                   # 认证相关
│   │   │   ├── home/                   # 首页
│   │   │   ├── problem/                # 问题管理
│   │   │   ├── message/                # 消息通知
│   │   │   ├── forum/                  # 论坛互动
│   │   │   └── profile/                # 个人中心
│   │   ├── App.vue
│   │   └── main.ts
│   ├── package.json
│   ├── vite.config.ts
│   └── Dockerfile                     # 移动端镜像
│
├── docker-compose.yml                  # 本地开发环境
├── .cnb.yml                           # CNB 构建配置
├── .gitignore
└── README.md                          # 项目说明

📚 开发指南

后端开发

添加新的 API 接口

  1. 创建 Entity
@Entity
@Table(name = "your_table")
@Data
public class YourEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;
}
  1. 创建 Repository
@Repository
public interface YourRepository extends JpaRepository<YourEntity, Long> {
    List<YourEntity> findByStatus(String status);
}
  1. 创建 Service
@Service
public class YourService {
    @Autowired
    private YourRepository repository;

    public List<YourEntity> findAll() {
        return repository.findAll();
    }
}
  1. 创建 Controller
@RestController
@RequestMapping("/api/your-resource")
public class YourController {
    @Autowired
    private YourService service;

    @GetMapping
    public Result<List<YourEntity>> list() {
        return Result.success(service.findAll());
    }
}

前端开发

添加新的页面

  1. 创建页面组件
// src/views/your-module/YourPage.vue
<template>
  <div class="your-page">
    <h1>Your Page Title</h1>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue'

onMounted(() => {
  // 初始化逻辑
})
</script>
  1. 配置路由
// src/router/routes/index.ts
{
  path: '/your-module',
  name: 'YourModule',
  component: () => import('@/views/your-module/Index.vue'),
  meta: { title: '您的模块', requiresAuth: true }
}
  1. 添加 API 接口
// src/api/your-module.ts
import request from '@/utils/request'

export function getYourData() {
  return request({
    url: '/api/your-data',
    method: 'get'
  })
}

数据库变更

由于使用 Spring Data JPA 的 ddl-auto: update 配置,数据库表结构会在应用启动时自动更新:

  1. 添加字段:直接在 Entity 中添加属性
  2. 修改字段:修改 Entity 中的属性类型或注解
  3. 删除字段:从 Entity 中删除属性
// 例如:添加新字段
@Column(name = "new_field", length = 100)
private String newField;

重启应用后,数据库表结构会自动更新。

🐳 Docker 部署

使用 Docker Compose

# 启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f backend
docker-compose logs -f frontend

# 停止服务
docker-compose down

Kubernetes 部署

参考 .cnb.yml 配置文件,使用 CNB 平台进行 CI/CD 部署。

🔧 环境配置

开发环境配置

创建 .env.development 文件:

# 服务器
SERVER_PORT=8088
SPRING_PROFILES_ACTIVE=dev

# 数据库
DB_HOST=localhost
DB_PORT=3306
DB_NAME=property_dev
DB_USER=root
DB_PASSWORD=rootpassword

# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=

# JWT
JWT_SECRET=dev-secret-key
JWT_EXPIRATION=86400000

生产环境配置

创建 .env.production 文件:

# 服务器
SERVER_PORT=8088
SPRING_PROFILES_ACTIVE=prod

# 数据库
DB_HOST=your-production-host
DB_PORT=3306
DB_NAME=property_prod
DB_USER=prod_user
DB_PASSWORD=prod_password

# Redis
REDIS_HOST=your-redis-host
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password

# JWT
JWT_SECRET=your-production-secret-key
JWT_EXPIRATION=86400000

📖 API 文档

详细的 API 文档请查看:API.md

接口说明

  • 认证接口POST /api/auth/login
  • 问题接口/api/problems/*
  • 消息接口/api/messages/*
  • 论坛接口/api/posts/*
  • 管理接口/api/admin/*

在线文档

启动后端服务后访问:http://localhost:8088/api/swagger-ui.html

🧪 测试

后端测试

cd residential-property-backend

# 运行单元测试
mvn test

# 运行集成测试
mvn verify

前端测试

cd residential-property-frontend

# 运行单元测试
npm run test:unit

# 运行端到端测试
npm run test:e2e

📊 系统监控

应用监控

后端集成了 Spring Boot Actuator,提供应用监控端点:

  • 健康检查/api/actuator/health
  • 指标信息/api/actuator/metrics
  • 环境信息/api/actuator/env
  • 线程信息/api/actuator/threaddump

日志查看

# 查看后端日志
tail -f residential-property-backend/logs/application.log

# 查看 Docker 日志
docker-compose logs -f backend

🤝 贡献指南

欢迎贡献代码!请遵循以下步骤:

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

代码规范

  • 后端:遵循 Alibaba Java 开发手册
  • 前端:遵循 Vue 3 风格指南
  • 提交信息:遵循 Conventional Commits 规范

📄 开发文档

详细的项目文档请查看 docs/ 目录:

🔐 安全说明

权限说明

  • 系统管理员:最高权限,可以管理所有用户和系统配置
  • 物业团队:根据角色拥有不同的管理权限
  • 业主:基础权限,可以报修问题、查看消息、论坛互动

数据安全

  • 所有密码使用 BCrypt 加密存储
  • 敏感数据传输使用 HTTPS 加密
  • JWT Token 定期刷新,过期自动失效
  • 接口访问频率限制,防止恶意攻击

📞 联系方式

📝 更新日志

v1.1.0 (2025-04-10)

新增

  • 移动端应用:基于 Vant 4.8 的完整移动端实现
  • 双端支持:PC 管理端 + 移动端,满足不同场景需求
  • 角色权限体系:业主、物业工作人员、系统管理员三端独立管理
  • 移动端专属功能
    • 业主:问题报修、消息查看、论坛互动、个人中心
    • 物业工作人员:任务处理、消息发布、数据统计、工作管理
  • CORS 配置优化:支持移动端端口 5174 网络访问
  • API 响应格式统一:数组与分页对象自动转换

优化

  • ⚡ 移动端响应式设计,适配各种手机屏幕
  • ⚡ Vant 组件库移动端交互优化
  • ⚡ JWT + X-User-Id 双重认证机制
  • ⚡ 移动端路由权限控制

修复

  • 🐛 修复移动端 API 接口路径问题
  • 🐛 修复消息类型枚举值不一致问题
  • 🐛 修复评论功能与 API 文档不符问题

v1.0.0 (2024-12-10)

新增

  • ✨ 完成问题管理全流程功能
  • ✨ 实现消息分类发布功能
  • ✨ 搭建论坛互动平台
  • ✨ 部署数据可视化看板

优化

  • ⚡ 使用 Spring Data JPA 自动更新表结构
  • ⚡ WebSocket 实时通信支持
  • ⚡ 响应式设计适配多端

修复

  • 🐛 修复跨域配置问题
  • 🐛 修复文件上传大小限制
  • 🐛 优化 Token 刷新机制

📱 移动端特色

🎨 移动端设计亮点

业主端特色功能

  • 🏠 首页概览:一键查看问题统计、消息提醒、热门帖子
  • 📝 快速报修:拍照上传、位置选择、问题描述、进度跟踪
  • 🔔 消息提醒:限时公告置顶显示、重要消息确认阅读
  • 💬 论坛互动:匿名发帖、点赞收藏、热门推荐、实时评论
  • 👤 个人中心:房屋信息绑定、问题历史、修改密码

物业工作人员端特色功能

  • 📊 工作看板:今日新增、待处理、进行中、已完成统计
  • ⚠️ 待办提醒:待接收、待跟进、待整改、待反馈实时提醒
  • 📢 消息发布:日常通知、限时公告、制度公示一键发布
  • 📋 任务管理:问题接收、状态更新、整改上传、闭环管理
  • 📈 工作统计:处理量统计、工作效率分析

🚀 移动端技术亮点

  • Vant 4.8 移动端组件库:提供原生 App 般的交互体验
  • Touch 优化:所有交互元素最小点击区域 44x44px
  • 手势支持:下拉刷新、上拉加载、左滑删除、图片预览
  • 离线缓存:登录状态持久化、用户信息本地存储
  • 响应式图片:图片懒加载、缩略图预览、原图查看
  • 性能优化:虚拟滚动、列表分页、请求防抖

📲 移动端访问方式

本地开发

# 启动移动端(监听所有网络接口)
cd residential-property-mobile
npm run dev

# 手机浏览器访问
# 查看本机 IP 地址
ifconfig  # macOS
ipconfig  # Windows
ip addr   # Linux

# 手机浏览器访问
http://192.168.x.x:5174

生产部署

# 构建移动端
cd residential-property-mobile
npm run build

# 使用 Docker 部署
docker build -t mobile-app .
docker run -p 80:80 mobile-app

📜 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情

🙏 致谢

感谢以下开源项目:

后端技术

PC 端技术

移动端技术

  • Vant - 轻量、可靠的移动端组件库
  • Vue Router - Vue.js 官方路由
  • Pinia - Vue 3 状态管理库
  • Axios - HTTP 客户端
  • Dayjs - 轻量级日期处理库

DevOps 技术


🎉 感谢使用小区物业可视化平台!

如有问题或建议,欢迎提交 Issue 或 Pull Request。