原创

基于SpringBoot2+vue2的公寓报修管理系统

温馨提示:
本文最后更新于 2026年05月28日,已超过 13 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

1. 资源

浏览全文可获取

2. 项目简介

本项目为“公寓报修管理系统”,基于Spring Boot框架与Vue前端技术栈开发,旨在为公寓住户、维修人员及管理员提供一个线上报修、维修分配、维修记录跟踪及评价反馈的综合管理平台。系统支持住户在线提交维修申请、查看维修进度、支付维修费用并给予评价;维修人员可接收分配任务、申请请假或改派;管理员则负责基础数据配置(房间信息、物品信息、维修分类等)、维修申请的审核与分配、改派申请的审批以及请假信息管理等功能。系统通过角色权限控制(管理员、住户、维修人员)实现不同用户的操作隔离与数据安全。

3. 技术栈

层面 技术
后端框架 Spring Boot 2.2.2.RELEASE
持久层 MyBatis Plus 2.3 + MyBatis Spring Boot Starter 2.1.1
数据库 MySQL 5.7.31
安全与认证 Apache Shiro 1.3.2 + 自定义Token拦截器
前端框架 Vue 2.x + Element UI
路由 Vue Router (hash模式)
HTTP客户端 Axios
工具库 Hutool、Fastjson、Apache Commons Lang3、POI (Excel)
邮件服务 Spring Boot Starter Mail (QQ邮箱SMTP)

4. 详细介绍

4.1 功能模块

系统根据用户角色分为三个主要端:

4.1.1 管理员端

  • 住户管理:对住户账号进行增删改查,维护住户基本信息(账号、姓名、手机、身份证、邮箱等)。
  • 房间信息管理:维护公寓房间的编号、名称、类型、位置,并关联住户账号及住户信息。
  • 维修人员管理:管理维修人员账号、姓名、联系电话、身份证号及擅长的维修分类。
  • 维修分类管理:定义维修的类别(如电工、水工等)。
  • 物品信息管理:登记维修相关物品(如配件、工具)的编号、名称、数量及详情。
  • 维修申请管理:查看住户提交的维修申请,进行审核(通过/驳回),审核通过后可执行“维修分配”操作。
  • 维修分配管理:将已审核的维修申请指派给具体的维修人员,记录分配时间。
  • 改派申请管理:审批维修人员提交的改派申请,确认后变更维修任务的执行人。
  • 请假信息管理:审核维修人员的请假申请,支持导入/导出功能。
  • 维修记录管理:查看所有已完成维修任务的记录(含费用、结果),支持导出。
  • 维修评价管理:查看住户对维修服务的评价内容。

4.1.2 住户端

  • 房间信息查看:查看本人所居住房间的详细信息。
  • 维修申请:在线提交维修申请,填写物品名称、维修分类、维修内容、是否优先、要求备注,并上传图片。
  • 维修记录查看与支付:查看自己的维修历史记录,对于待支付的维修记录可进行在线支付。
  • 维修评价:对已完成维修的服务进行评价(评分/文字评价)。

4.1.3 维修人员端

  • 维修分配查看:查看管理员分配给自己的维修任务,可发起“改派申请”或查看维修费用缴纳情况。
  • 改派申请:若无法执行任务,可提交改派申请并说明原因。
  • 请假信息:提交请假申请(请假日期、天数、原因),并查看审核结果。
  • 维修记录查看:查看自己完成的历史维修任务。
  • 维修评价查看:查看住户对自己服务的评价。

4.2 核心业务逻辑

  1. 报修流程:住户填写维修申请 → 管理员审核通过 → 管理员分配维修人员 → 维修人员上门维修 → 维修人员填写维修结果及费用 → 生成维修记录 → 住户支付费用 → 住户评价。
  2. 改派流程:维修人员提交改派申请 → 管理员审核 → 若同意,系统重新分配原维修申请给其他维修人员,原分配记录保留但任务转移。
  3. 请假流程:维修人员提交请假申请 → 管理员审核 → 请假期间系统可能不分配新任务。
  4. 用户注册:住户通过邮箱验证码完成注册(系统使用QQ邮箱发送验证码)。
  5. 权限控制:所有接口除登录、注册、部分公开查询外,均需携带Token访问,Token由后端生成并存入token表,有效期1小时。

4.3 数据库表结构(主要表)

  • zhuhu:住户表(账号、密码、姓名、手机、身份证、邮箱等)
  • weixiurenyuan:维修人员表(账号、密码、姓名、联系电话、维修分类等)
  • fangjianxinxi:房间信息表(房间号、名称、类型、位置、关联住户)
  • weixiushenqing:维修申请表(维修编号、物品名称、分类、内容、图片、是否优先、要求备注、房间信息、住户信息、审核状态等)
  • weixiufenpei:维修分配表(关联维修申请,记录分配的维修人员及分配时间)
  • weixiujilu:维修记录表(包含维修结果、费用、是否支付等)
  • weixiupingjia:维修评价表(关联维修记录,存储评价内容及时间)
  • gaipaishenqing:改派申请表(申请原因、审核状态)
  • qingjiaxinxi:请假信息表(请假日期、天数、原因、审核状态)
  • emailregistercode:邮箱验证码表(存储注册用验证码)
  • users:管理员表(用户名、密码、角色)
  • token:用户Token表

5. 部分代码

5.1 登录Token生成(TokenServiceImpl.java)

@Override
public String generateToken(Long userid, String username, String tableName, String role) {
    TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>()
            .eq("userid", userid).eq("role", role));
    String token = CommonUtil.getRandomString(32);
    Calendar cal = Calendar.getInstance();   
    cal.setTime(new Date());   
    cal.add(Calendar.HOUR_OF_DAY, 1);  // 有效期1小时
    if(tokenEntity != null) {
        tokenEntity.setToken(token);
        tokenEntity.setExpiratedtime(cal.getTime());
        this.updateById(tokenEntity);
    } else {
        this.insert(new TokenEntity(userid, username, tableName, role, token, cal.getTime()));
    }
    return token;
}

5.2 维修申请控制器(WeixiushenqingController.java)分页查询

@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, WeixiushenqingEntity weixiushenqing,
              HttpServletRequest request){
    String tableName = request.getSession().getAttribute("tableName").toString();
    if(tableName.equals("zhuhu")) {
        weixiushenqing.setZhuhuzhanghao((String)request.getSession().getAttribute("username"));
    }
    EntityWrapper<WeixiushenqingEntity> ew = new EntityWrapper<WeixiushenqingEntity>();
    PageUtils page = weixiushenqingService.queryPage(params, 
            MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, weixiushenqing), params), params));
    return R.ok().put("data", page);
}

5.3 前端路由配置(router-static.js)片段

import weixiurenyuan from '@/views/modules/weixiurenyuan/list'
import weixiushenqing from '@/views/modules/weixiushenqing/list'
// ... 省略其他导入
const routes = [{
    path: '/index',
    name: '首页',
    component: Index,
    children: [
        { path: '/', name: '首页', component: Home },
        { path: '/updatePassword', name: '修改密码', component: UpdatePassword },
        { path: '/weixiurenyuan', name: '维修人员', component: weixiurenyuan },
        { path: '/weixiushenqing', name: '维修申请', component: weixiushenqing },
        // ... 更多子路由
    ]
}]

5.4 邮箱验证码发送(ZhuhuController.java)

@IgnoreAuth
@RequestMapping("/sendemail")
public R sendemail(@RequestParam String email){
    String code = CommonUtil.getRandomNumber(4);
    EmailregistercodeEntity emailregistercode = new EmailregistercodeEntity();
    emailregistercode.setCode(code);
    emailregistercode.setRole("用户");
    emailregistercode.setEmail(email);
    emailregistercodeService.insert(emailregistercode);
    CommonUtil.sendEmail(email, "用户注册", 
        "您的注册验证码是【"+code+"】,请不要把验证码泄漏给其他人,如非本人请勿操作。");
    return R.ok();
}

5.5 前端菜单权限配置(menu.js)片段

const menu = {
    list() {
        return [
            { roleName: "管理员", backMenu: [ ... ] },
            { roleName: "住户", backMenu: [
                { child: [{ menu: "房间信息", tableName: "fangjianxinxi" }] },
                { child: [{ menu: "维修申请", tableName: "weixiushenqing" }] },
                { child: [{ menu: "维修记录", tableName: "weixiujilu", buttons: ["查看","支付","评价"] }] },
                { child: [{ menu: "维修评价", tableName: "weixiupingjia" }] }
            ] },
            { roleName: "维修人员", backMenu: [ ... ] }
        ]
    }
}

6. 部分截图

img1
img2
img3
img4
img5
img6
img7
img8
img9
img10
img11
img12
img13
img14
img15
img16
img17
img18
img19
img20
img21
img22
img23
img24
img25

7. 项目总结

  • 功能完整性:系统覆盖了公寓报修管理的全生命周期,从住户申请、管理员审核派单、维修人员执行、费用支付到最终评价,流程清晰,各角色分工明确。
  • 技术实践性:采用主流Spring Boot + MyBatis Plus + Vue技术栈,实现了前后端分离;使用Token进行无状态认证;集成邮箱服务用于注册验证;提供百度AI人脸比对接口(预留);具备Excel导入导出、ECharts图表、地图API等扩展能力。
  • 权限控制:通过Shiro + 自定义拦截器实现了基于角色和URL的访问控制,且菜单权限使用前端配置文件menu.js动态渲染,支持按钮级权限判断。
  • 数据库设计:表结构规范,主键使用自增或时间戳+随机数;关键字段(如维修编号)唯一索引;使用addtime作为自动创建时间;支持审核状态字段(sfsh)及回复字段。
  • 可维护性:代码分层清晰(Controller、Service、Dao、Entity),MyBatis Plus简化了CRUD;通用工具类(CommonUtilMPUtilPageUtils等)提高开发效率;前端组件化(文件上传、富文本编辑器、Excel上传等)便于复用。

总体而言,该项目是一个较为完整的企业级报修管理系统,适用于学习或二次开发,具备实际部署的可行性。

自助获取:https://fifteen.xiaobias.com/source/213

正文到此结束
本文目录