原创

基于SpringBoot2+vue2的文档管理系统

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

1. 资源

放到文章后面


2. 项目简介

“文档管理系统” 旨在为用户提供一个在线文档或资料管理的平台。主要功能包括:用户(如学生)可以注册登录、浏览、按分类检索并上传学习资料;管理员可以对用户、资料、公告、论坛等进行后台管理。系统还集成了一个简单的论坛模块,供用户之间交流讨论。


3. 技术栈

  • 后端技术:

    • 核心框架: Spring Boot (版本 2.2.2.RELEASE)
    • 持久层框架: MyBatis-Plus (版本 2.3) + MyBatis (版本 2.1.1)
    • 安全控制: Apache Shiro (版本 1.3.2), 用于权限管理
    • 数据库: MySQL (驱动版本 5.7.32-log)
    • 工具库: Apache Commons Lang3, Commons IO, Hutool, Fastjson, 百度AI SDK 等
  • 前端技术:

    • 后台管理界面: Vue2 + Element UI
    • 用户前台界面: Layui + jQuery

4. 详细介绍

4.1. 核心功能模块

  1. 用户管理: 用户可以注册、登录。管理员可以对用户进行增删改查,并管理用户的专业、性别等信息。
  2. 资料管理: 这是系统的核心功能。
    • 用户: 可以查看已审核通过的资料列表,按资料类型和二级分类进行筛选,下载资料文件,并可以自己上传新的资料。
    • 管理员: 可以对所有资料进行管理,包括审核用户上传的资料(审核结果:未审核、通过、拒绝),以及对资料进行增删改查。
  3. 公告信息管理: 管理员可以发布、修改、删除系统公告。所有用户可以在前台查看公告。
  4. 论坛管理: 用户可以在论坛发布帖子、回复帖子。管理员也可以参与回复并对帖子进行管理。
  5. 基础数据管理: 管理员可以管理系统中的各种字典数据,如“资料类型”、“专业”、“性别”、“审核结果”等,这些数据用于动态生成前端下拉选项。

4.2. 数据库设计

  • yonghu (用户表): 存储用户账号、密码、姓名、性别、身份证、手机号、专业等。
  • wendang (资料信息表): 存储资料的标题、类型、二级分类、封面图片、文件路径、所属用户、审核状态等。
  • news (公告信息表): 存储公告的标题、类型、图片、内容等。
  • forum (论坛表): 存储帖子的标题、内容、发布人(用户或管理员)、父ID(用于区分主题帖和回帖)、状态等。
  • dictionary (字典表): 存储各类枚举值,如资料类型、专业、性别等,实现数据动态配置。
  • users (管理员表): 存储管理员的账号和密码。

5. 部分代码

5.1. 后端 - 资料信息控制层 (WendangController.java)

以下代码展示了资料信息模块的后端接口实现,包括分页查询、保存(含审核状态初始化和用户关联)、更新和逻辑删除功能。

// ==== 文件引用: ./wendangguanli/src/main/java/com/controller/WendangController.java ====
package com.controller;

// ... 省略导入 ...

/**
 * 资料信息
 * 后端接口
 */
@RestController
@Controller
@RequestMapping("/wendang")
public class WendangController {
    // ... 省略依赖注入 ...

    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        // ... 处理角色权限,用户只能看自己的资料 ...
        params.put("wendangDeleteStart",1); // 只查未删除的
        PageUtils page = wendangService.queryPage(params);
        // ... 字典表转换 ...
        return R.ok().put("data", page);
    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody WendangEntity wendang, HttpServletRequest request){
        // ... 角色判断 ...
        // 检查是否重复
        Wrapper<WendangEntity> queryWrapper = new EntityWrapper<WendangEntity>()
            .eq("wendang_name", wendang.getWendangName());
            // ... 其他条件 ...
        WendangEntity wendangEntity = wendangService.selectOne(queryWrapper);
        if(wendangEntity==null){
            // 设置默认值:待审核状态(1),未删除(1)
            wendang.setWendangYesnoTypes(1);
            wendang.setWendangDelete(1);
            wendang.setCreateTime(new Date());
            wendangService.insert(wendang);
            return R.ok();
        }
        return R.error(511,"表中有相同数据");
    }

    /**
    * 删除(逻辑删除)
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        ArrayList<WendangEntity> list = new ArrayList<>();
        for(Integer id:ids){
            WendangEntity wendangEntity = new WendangEntity();
            wendangEntity.setId(id);
            wendangEntity.setWendangDelete(2); // 2代表已删除
            list.add(wendangEntity);
        }
        wendangService.updateBatchById(list);
        return R.ok();
    }
    // ... 省略其他方法 ...
}

5.2. 前端 - 资料信息列表页面 (list.html)

以下代码展示了用户前台资料列表页面的核心Vue.js逻辑,包括数据请求、分页处理和分类筛选功能。

<!-- ==== 文件引用: ./wendangguanli/src/main/resources/front/front/pages/wendang/list.html ==== -->
<script type="text/javascript">
    var vue = new Vue({
        el: '#app',
        data: {
            // 查询条件模型
            searchForm: {
                page: 1,
                limit: 8,
                wendangDelete: 1,
                wendangYesnoTypes: 2, // 只显示审核通过的
                wendangName: "",
                wendangTypes: ""
            },
            dataList: [], // 列表数据
        },
        methods: {
            jump(url) { jump(url); },
            // ... 其他方法
        }
    });

    layui.use(['laypage', 'http', 'jquery'], function() {
        var laypage = layui.laypage;
        var http = layui.http;
        var jquery = layui.jquery;

        // 分页列表查询函数
        function pageList() {
            http.request('wendang/list', 'get', vue.searchForm, function (res) {
                vue.dataList = res.data.list;
                // 渲染分页组件
                laypage.render({
                    elem: 'pager',
                    count: res.data.total,
                    limit: vue.searchForm.limit,
                    jump: function (obj, first) {
                        vue.searchForm.page = obj.curr;
                        if (!first) { pageList(); } // 非首次加载则重新请求
                    }
                });
            });
        }

        // 页面初始化时调用
        pageList();
    });
</script>

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
img26
img27

7. 项目总结

该项目是一个功能较为完整的文档管理Web应用,覆盖了从用户注册登录、资料上传下载、信息公告发布到论坛交流的完整业务流程。

优点与特点:

  1. 权限分离:明确区分了管理员和普通用户的操作权限,后台功能菜单和接口均做了权限控制。
  2. 数据动态配置:大量使用字典表(dictionary)来管理如资料类型、专业等枚举值,增强了系统的灵活性和可维护性。
  3. 审核流程:用户上传的资料需经过管理员审核才能在前台展示,保证了资料内容的准确性和合规性。
  4. 技术栈成熟:后端采用Spring Boot + MyBatis-Plus,前端采用Vue/Element UI(管理端)和Layui/jQuery(用户端),都是业界成熟的技术方案,便于开发和维护。

代码:https://fifteen.xiaobias.com/source/156

正文到此结束