原创

基于springboot2+vue2的学生干部管理系统

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

1. 资源

https://blog.xiaobias.com/article/43

2. 项目简介

学生干部管理系统,旨在实现对高校学生干部的信息化管理。系统支持管理员学生干部两种角色,主要功能包括:

  • 学生干部信息管理(基本信息、部门、职位、考核、纪检、信访、履历、审计等指标)
  • 公告信息发布与管理
  • 留言与回复功能
  • 信访举报管理
  • 组织评价管理(正面/负面评价)
  • 基础数据管理(部门、职位、公告类型、信访举报类型等字典数据)

系统基于 B/S 架构,提供后台管理界面,支持数据的增删改查、文件上传下载、报表统计等功能。

3. 技术栈

技术类别 技术选型
后端框架 Spring Boot 2.2.2.RELEASE
持久层框架 Mybatis-Plus 2.3 + Mybatis
安全框架 Apache Shiro 1.3.2
数据库 MySQL 5.7.32-log
前端框架 Vue.js + Element UI
构建工具 Maven
工具库 Hutool、Fastjson、Commons-lang3、POI

4. 详细介绍

4.1 数据库设计

表名 说明 主要字段
xueshengganbu 学生干部信息表 账户、密码、姓名、手机号、身份证号、头像、邮箱、性别、部门、职位、考核、纪检、信访、履历、审计、添加时间
gonggao 公告信息表 公告名称、图片、类型、发布时间、详情
liuyan 留言表 学生干部ID、留言标题、留言内容、回复内容、留言时间、回复时间
xinfangjubao 信访举报表 学生干部ID、标题、类型、附件、内容、添加时间
zuzhipingjia 组织评价表 学生干部ID、评价标题、评价类型(正面/负面)、附件、内容、评价时间
dictionary 字典表(基础数据) 字段编码、字段名、编码索引、编码名称、父ID、备注
users 管理员表 用户名、密码、角色
token 登录令牌表 用户ID、用户名、表名、角色、token、过期时间

4.2 角色与权限

  • 管理员:拥有全部后台管理权限,包括:
    • 基础数据管理(部门、公告类型、信访举报类型、职位)
    • 公告信息管理
    • 留言管理(查看、回复、删除)
    • 学生干部管理
    • 信访举报管理
    • 组织评价管理
  • 学生干部:拥有部分权限,包括:
    • 查看公告信息
    • 发起留言(新增、查看回复)
    • 查看自己的信访举报记录
    • 查看自己的组织评价记录

4.3 核心功能模块

4.3.1 学生干部管理

管理员可对学生干部进行增删改查,包含以下量化指标:

  • 考核(kaohe)
  • 纪检(jijian)
  • 信访(xinfang)
  • 履历(lvli)
  • 审计(shenji)

学生干部可登录系统查看自己的信息。

4.3.2 公告信息管理

管理员发布公告(公告类型、图片、内容),学生干部可查看公告列表和详情。

4.3.3 留言管理

学生干部可发起留言,管理员可回复留言。留言支持标题和内容。

4.3.4 信访举报管理

学生干部可提交信访举报(选择类型、上传附件、填写内容),管理员可查看并管理。

4.3.5 组织评价管理

管理员可对学生干部进行评价(正面/负面评价,可上传附件),学生干部可查看自己的评价。

4.3.6 基础数据管理

管理员维护各类字典数据:部门、职位、公告类型、信访举报类型等。

4.3.7 文件上传与下载

支持图片、附件(如RAR、DOC等)的上传和下载,文件保存在 static/upload/ 目录下。

4.3.8 统计图表(预留)

系统在 CommonControllerCommonDao 中提供了饼状图、柱状图的统计接口(基于字典分组、日期分组等),前端可调用展示。

5. 部分代码

5.1 学生干部实体类(XueshengganbuEntity.java)

@TableName("xueshengganbu")
public class XueshengganbuEntity<T> implements Serializable {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String username;
    private String password;
    private String xueshengganbuName;
    private String xueshengganbuPhone;
    private String xueshengganbuIdNumber;
    private String xueshengganbuPhoto;
    private String xueshengganbuEmail;
    private Integer sexTypes;
    private Integer bumenTypes;
    private Integer zhiweiTypes;
    private Integer kaohe;
    private Integer jijian;
    private Integer xinfang;
    private Integer lvli;
    private Integer shenji;
    private Date insertTime;
    private Date createTime;
    // getter/setter 省略
}

5.2 学生干部控制器(XueshengganbuController.java)- 登录接口

@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
    XueshengganbuEntity xueshengganbu = xueshengganbuService.selectOne(
        new EntityWrapper<XueshengganbuEntity>().eq("username", username));
    if(xueshengganbu==null || !xueshengganbu.getPassword().equals(password))
        return R.error("账号或密码不正确");
    String token = tokenService.generateToken(xueshengganbu.getId(), username, "xueshengganbu", "学生干部");
    R r = R.ok();
    r.put("token", token);
    r.put("role","学生干部");
    r.put("username", xueshengganbu.getXueshengganbuName());
    r.put("tableName","xueshengganbu");
    r.put("userId", xueshengganbu.getId());
    return r;
}

5.3 通用字典转换方法(DictionaryServiceImpl.java)

public void dictionaryConvert(Object obj, HttpServletRequest request) {
    // 获取所有以 "Types" 结尾的Integer字段
    // 从ServletContext中获取字典映射 Map<String, Map<Integer, String>>
    // 根据Types的值查找对应的index_name,并设置到对应的 "Value" 字段中
}

5.4 留言控制器(LiuyanController.java)- 分页查询

@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
    String role = String.valueOf(request.getSession().getAttribute("role"));
    if("学生干部".equals(role))
        params.put("xueshengganbuId", request.getSession().getAttribute("userId"));
    PageUtils page = liuyanService.queryPage(params);
    List<LiuyanView> list = (List<LiuyanView>) page.getList();
    for(LiuyanView c: list){
        dictionaryService.dictionaryConvert(c, request);
    }
    return R.ok().put("data", page);
}

5.5 MyBatis 映射文件 - 级联查询示例(LiuyanDao.xml)

<select id="selectListView" resultType="com.entity.view.LiuyanView">
    SELECT
        a.id, a.xueshengganbu_id, a.liuyan_name, a.liuyan_text, ...
        xueshengganbu.xueshengganbu_name as xueshengganbuName,
        xueshengganbu.xueshengganbu_phone as xueshengganbuPhone
    FROM liuyan a
    LEFT JOIN xueshengganbu xueshengganbu ON a.xueshengganbu_id = xueshengganbu.id
    <where>
        ... 动态条件
    </where>
    order by a.${params.orderBy} desc
</select>

6. 部分截图

img1
img2
img3
img4
img5
img6
img7
img8
img9
img10
img11
img12
img13
img14
img15
img16
img17
img18

7. 项目总结

学生干部管理系统实现了对学生干部信息的集中管理,以及与之相关的公告、留言、信访举报、组织评价等业务流程。技术选型上采用 Spring Boot + Mybatis-Plus 简化后端开发,前端使用 Vue + Element UI 构建现代化管理界面。系统特点包括:

  • 角色权限分离:管理员与学生干部拥有不同功能权限,通过 Token 和拦截器实现接口鉴权。
  • 字典数据动态维护:通过 dictionary 表和监听器机制,在启动时将字典数据加载到 ServletContext,前端可通过统一的 dictionaryConvert 方法将数字编码转换为可读文本。
  • 文件处理:支持多种格式文件的上传下载,便于附件管理。
  • 统计扩展性:后端已预留分组求和、柱状图、饼状图等统计接口,便于后续数据可视化。
  • 安全措施:密码存储为明文(示例项目,生产环境需加密),SQL 注入过滤(SQLFilter 类),Token 过期验证。

该系统的业务逻辑完整,代码结构清晰,可作为学校或组织内部学生干部管理的信息化基础平台,后续可扩展更多统计分析、评价指标计算等功能。

正文到此结束
本文目录