基于springboot2+vue2的租房管理系统

1. Base64 编码

必备技能:Base64 编码解码

2. 项目简介

租房管理系统旨在为租客、屋主以及管理员提供一个在线房屋租赁信息管理平台。租客可以浏览和搜索房源信息、预约看房、下单租赁并对租赁体验进行评价;屋主可以发布和管理自己的房源、处理租客的预约和订单、回复租客评价;管理员则负责对整个系统进行统一管理,包括用户管理、房源审核、订单监管、公告发布等。系统实现了租房流程的数字化管理,提升了信息流通效率和用户体验。

3. 技术栈

技术分类 技术选型
后端框架 Spring Boot 2.2.2.RELEASE, MyBatis-Plus 2.3, Apache Shiro 1.3.2
前端框架 Vue.js (后台管理), Layui / 原生 HTML/JS (前端界面)
数据库 MySQL 5.7.32-log
工具库 Fastjson, Commons-lang3, Hutool, ECharts, 百度AI SDK
其他 Maven, Element UI (后台UI)

4. 详细介绍

4.1 核心功能模块
  • 管理员端:
    • 用户管理:对租客和屋主账户进行增、删、改、查操作。
    • 房源信息管理:管理所有房源,并进行审核、查看评论等操作。
    • 订单信息管理:查看所有租赁订单,并进行审核等操作。
    • 评价与申诉管理:查看租客评价和屋主申诉。
    • 系统管理:管理通知公告、留言板、轮播图和房屋资讯。
  • 租客端(前端页面):
    • 房源浏览:查看已审核通过的房源列表,按条件搜索房源。
    • 预约看房:对感兴趣的房源发起看房预约,等待屋主审核。
    • 租赁下单:确认租赁房屋,生成订单,并支付。
    • 评价管理:对已完成的租赁订单进行评价。
    • 个人信息管理:维护个人资料和查看收藏记录。
  • 屋主端(前端页面):
    • 房源管理:发布和管理自己的房源信息,包括增、删、改、查。
    • 预约看房管理:查看租客的看房预约,并进行审核。
    • 订单信息管理:查看和处理与自己房源相关的租赁订单。
    • 租客评价管理:查看租客对自己的评价,并进行回复或申诉。
    • 个人信息管理:维护个人资料。
4.2 数据库设计
  • 用户相关users(管理员), zuke(租客), wuzhu(屋主)。
  • 业务核心fangyuanxinxi(房源信息), dingdanxinxi(订单信息), yuyuekanfang(预约看房)。
  • 交互与反馈zukepingjia(租客评价), wuzhuhuifu(屋主回复), wuzhushensu(屋主申诉), messages(留言板), discussfangyuanxinxi(房源信息评论表)。
  • 系统支持config(配置文件/轮播图), news(房屋资讯), tongzhigonggao(通知公告), token(token表), storeup(收藏表)。
4.3 业务流程
  1. 房源发布与审核:屋主登录系统,填写并发布房源信息。管理员在后台对新发布的房源进行审核,审核通过后房源才会在前端展示。
  2. 租客租房流程:租客浏览并搜索房源 -> 预约看房(屋主审核预约) -> 确认租赁后下单 -> 系统生成订单并等待屋主确认 -> 租客支付 -> 入住。
  3. 评价与反馈:租客在完成订单后可对房屋和屋主进行评价。屋主可以对评价进行回复。若对评价有异议,屋主可以发起申诉,由管理员处理。
  4. 信息发布:管理员可以在后台发布通知公告和房屋资讯,这些信息会实时展示在前端页面的相应板块。

5. 部分代码

5.1 后端 - 用户登录拦截器 (AuthorizationInterceptor.java)

此代码展示了后端的权限验证逻辑,通过拦截请求,验证请求头中的 Token 来判断用户是否已登录。

java 复制代码
package com.interceptor;

// ... imports ...

@Component
public class AuthorizationInterceptor implements HandlerInterceptor {

    public static final String LOGIN_TOKEN_KEY = "Token";

    @Autowired
    private TokenService tokenService;
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // ... 跨域请求处理 ...

        // 检查方法是否包含 @IgnoreAuth 注解,如果有则跳过验证
        if (handler instanceof HandlerMethod) {
            IgnoreAuth annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
            if (annotation != null) {
                return true;
            }
        }

        // 从请求头中获取 Token
        String token = request.getHeader(LOGIN_TOKEN_KEY);
        TokenEntity tokenEntity = null;
        if (StringUtils.isNotBlank(token)) {
            tokenEntity = tokenService.getTokenEntity(token);
        }
        
        // 验证 Token 有效性,有效则设置会话信息
        if (tokenEntity != null) {
            request.getSession().setAttribute("userId", tokenEntity.getUserid());
            request.getSession().setAttribute("role", tokenEntity.getRole());
            request.getSession().setAttribute("tableName", tokenEntity.getTablename());
            request.getSession().setAttribute("username", tokenEntity.getUsername());
            return true;
        }
        
        // Token 无效,返回 401 未授权响应
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json; charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
        return false;
    }
}
5.2 后端 - 房源信息控制器 (FangyuanxinxiController.java)

此代码展示了核心业务"房源信息"的后端API接口,包括分页查询、前端列表、详情查看(含点击量统计)、以及智能排序等功能。

java 复制代码
package com.controller;

// ... imports ...

@RestController
@RequestMapping("/fangyuanxinxi")
public class FangyuanxinxiController {
    @Autowired
    private FangyuanxinxiService fangyuanxinxiService;
    
    // 后端分页列表(供管理后台使用)
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, FangyuanxinxiEntity fangyuanxinxi, HttpServletRequest request){
        // ... 根据登录角色(如屋主)进行数据过滤 ...
        PageUtils page = fangyuanxinxiService.queryPage(params, ...);
        return R.ok().put("data", page);
    }
    
    // 前端公开列表
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, FangyuanxinxiEntity fangyuanxinxi, HttpServletRequest request){
        PageUtils page = fangyuanxinxiService.queryPage(params, ...);
        return R.ok().put("data", page);
    }
    
    // 获取详情,访问时自动增加点击次数
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        FangyuanxinxiEntity fangyuanxinxi = fangyuanxinxiService.selectById(id);
        fangyuanxinxi.setClicknum(fangyuanxinxi.getClicknum() + 1); // 点击量+1
        fangyuanxinxi.setClicktime(new Date());
        fangyuanxinxiService.updateById(fangyuanxinxi);
        return R.ok().put("data", fangyuanxinxi);
    }
    
    // 前端智能排序(按点击量降序)
    @IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params, ...){
        params.put("sort", "clicknum");
        params.put("order", "desc");
        PageUtils page = fangyuanxinxiService.queryPage(params, ...);
        return R.ok().put("data", page);
    }
    // ... 其他保存、修改、删除等方法 ...
}
5.3 核心实体类 - 房源信息 (FangyuanxinxiEntity.java)

此代码定义了房源信息的数据结构,与数据库表 fangyuanxinxi 一一对应,是系统业务逻辑的核心。

java 复制代码
package com.entity;

// ... imports ...

@TableName("fangyuanxinxi")
public class FangyuanxinxiEntity<T> implements Serializable {
    @TableId
    private Long id;
    private String fangwubianhao;      // 房屋编号
    private String fangwumingcheng;    // 房屋名称
    private String fangwudizhi;        // 房屋地址
    private String fangwuzhuangtai;    // 房屋状态
    private String fangwutedian;       // 房屋特点
    private String fangwujieshao;      // 房屋介绍
    private String chengjiaoliang;     // 成交量
    private Integer zulinjiage;        // 租赁价格
    private String xiangqing;          // 详情(富文本)
    private String fangwuzhaopian;     // 房屋照片(可多张,逗号分隔)
    private String wuzhuzhanghao;      // 屋主账号
    private String wuzhuxingming;      // 屋主姓名
    private String lianxidianhua;      // 联系电话
    private String sfsh;               // 是否审核
    private String shhf;               // 审核回复
    private Integer thumbsupnum;       // 点赞数
    private Integer crazilynum;        // 点踩数
    private Date clicktime;            // 最近点击时间
    private Integer clicknum;          // 点击次数
    
    // ... Getters and Setters ...
}
5.4 前端 - 导航栏菜单配置 (menu.js)

此代码展示了前端菜单的动态配置方式,根据不同角色(管理员、租客、屋主)返回不同的菜单结构,实现了权限控制的前端展示。

javascript 复制代码
const menu = {
    list() {
        return [
            {
                "roleName": "管理员",
                "tableName": "users",
                "backMenu": [
                    { "menu": "租客管理", "child": [{ "menu": "租客", "tableName": "zuke", "buttons": ["新增","查看","修改","删除"] }] },
                    { "menu": "屋主管理", "child": [{ "menu": "屋主", "tableName": "wuzhu", "buttons": ["新增","查看","修改","删除"] }] },
                    { "menu": "房源信息管理", "child": [{ "menu": "房源信息", "tableName": "fangyuanxinxi", "buttons": ["查看","删除","审核","查看评论"] }] },
                    // ... 更多管理员菜单 ...
                ],
                "frontMenu": [
                    { "menu": "房源信息模块", "child": [{ "menu": "房源信息列表", "tableName": "fangyuanxinxi", "buttons": ["查看","预约","查看评论"] }] },
                    { "menu": "通知公告模块", "child": [{ "menu": "通知公告列表", "tableName": "tongzhigonggao", "buttons": ["查看"] }] }
                ],
                // ...
            },
            {
                "roleName": "租客",
                "tableName": "zuke",
                "backMenu": [
                    { "menu": "预约看房管理", "child": [{ "menu": "预约看房", "tableName": "yuyuekanfang", "buttons": ["查看"] }] },
                    { "menu": "订单信息管理", "child": [{ "menu": "订单信息", "tableName": "dingdanxinxi", "buttons": ["查看","发布评价","支付"] }] },
                    // ... 更多租客菜单 ...
                ],
                // ...
            }
            // ... 屋主菜单 ...
        ]
    }
}
export default menu;

6. 部分截图

Copy the following content and use base64 decoding to obtain the source code and files.

5aSN5Yi25omT5byA6I635Y+W5rqQ5Luj56CB77yaIGh0dHBzOi8vYmxvZy54aWFvYmlhcy5jb20vYXJ0aWNsZS81NA==

7. 项目总结

租房管理系统是一个功能完善的租房管理系统,它成功地将租客、屋主和管理员三个核心角色紧密联系起来,涵盖了从房源发布、浏览、预约到租赁、评价的完整业务闭环。

  • 优点
    1. 技术栈成熟:采用业界主流的 Spring Boot + MyBatis-Plus 作为后端基础,Vue + Element UI 构建管理后台,使得系统稳定、易于开发和维护。
    2. 权限控制清晰:项目通过 Shiro/自定义拦截器 + Token 机制实现了接口级别的访问控制,同时前端菜单也根据角色动态生成,权限体系较为完善。
    3. 业务功能完整:系统不仅包含了基础的增删改查,还实现了审核流程、预约-订单流程、评价-回复-申诉流程等复杂业务逻辑,贴近真实应用场景。
    4. 用户体验兼顾:前端界面使用了 Layui 和原生技术,并集成了轮播图、地图、富文本编辑器、图表(ECharts)等功能,提升了用户交互体验。
相关推荐
摇滚侠1 小时前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea
源分享1 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Flittly1 小时前
【AgentScope Java新手村系列】(10)实战-多Agent天气助手
java·spring boot·spring
李少兄1 小时前
从原理到实战:Spring IoC/DI 核心知识体系与高频面试题全解
java·后端·spring
飞天狗1111 小时前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言
许彰午2 小时前
39_Java单元测试JUnit入门
java·junit·单元测试
shushangyun_2 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
JAVA9652 小时前
JAVA面试-JVM篇 03-JVM运行时数据区哪些是线程私有的哪些是共享的
java·jvm·面试
于先生吖2 小时前
教育类Java实战项目:在线错题整理平台分层架构设计与接口源码解析
java·开发语言