基于springboot2+vue2的科研工作量管理系统
2026/6/2 16:24:36 网站建设 项目流程

1. 项目简介

科研工作量管理系统是一个面向高校或科研机构的管理平台,用于对教师的科研获奖、科研论文、科研项目及相应工作量进行规范化管理。系统支持三种角色:管理员、秘书、教师,不同角色具有不同的操作权限。教师可提交科研获奖、论文、项目并查看审核结果;秘书可审核各类科研活动;管理员可管理基础数据(类型字典)、教师信息、秘书信息以及全部科研记录。系统自动根据项目类型和提交数量计算教师的总工作量,并通过审核流程确保数据真实有效。

2. 技术栈

2.1 后端

  • 基础框架:Spring Boot 2.2.2.RELEASE
  • 持久层:MyBatis-Plus 2.3 + MyBatis Spring Boot Starter 2.1.1
  • 数据库:MySQL(驱动 mysql-connector-java)
  • 安全控制:Apache Shiro 1.3.2
  • 工具库
    • Fastjson 1.2.8
    • Hutool 4.0.12
    • Commons Lang3 3.0
    • Commons IO 2.5
    • Protobuf Java 3.10.0
  • Excel处理:Apache POI 3.9
  • 百度AI:百度人脸识别 SDK 4.4.1(用于人脸比对)

2.2 前端

  • 核心框架:Vue.js(基于 Vue CLI 构建)
  • UI组件库:Element UI
  • HTTP请求:Axios
  • 图表:ECharts
  • 地图:Vue AMap(高德地图)
  • 其他
    • vue-json-excel(Excel导出)
    • vue-qr(二维码)
    • print-js(打印)
    • js-md5(MD5加密)

2.3 开发环境

  • JDK 1.8
  • Maven 构建
  • 服务端口:8080
  • 上下文路径:/keyangongzuoliang

3. 详细介绍

3.1 系统角色与权限

根据前端路由配置(router-static.js)及菜单权限文件(menu.js),系统包含以下三个角色:

3.1.1 管理员
  • 基础数据管理:管理科研获奖类型、科研论文类型、科研项目类型。
  • 教师管理:教师信息的增删改查。
  • 秘书管理:秘书信息的增删改查。
  • 科研获奖管理:查看、新增、修改、删除、审核、报表导出。
  • 科研论文管理:查看、新增、修改、删除、审核、报表导出。
  • 科研项目管理:查看、新增、修改、删除、审核、报表导出。
  • 工作量管理:查看、新增、审核、修改、报表、删除。
3.1.2 秘书
  • 教师管理:仅查看教师信息。
  • 科研获奖管理:查看、审核、报表导出。
  • 科研论文管理:查看、审核、报表导出。
  • 科研项目管理:查看、审核、报表导出。
  • 工作量管理:查看、审核、报表导出。
3.1.3 教师
  • 科研获奖管理:查看、新增、删除(自己的记录)。
  • 科研论文管理:查看、新增、删除(自己的记录)。
  • 科研项目管理:查看、新增、删除(自己的记录)。
  • 工作量管理:查看、新增、删除(与自己项目相关的工作量)。

3.2 核心业务模块

3.2.1 科研项目管理
  • 教师申请科研项目,填写项目名称、类型、介绍并上传相关文件。
  • 提交后状态为“待审核”,秘书或管理员可审核通过或拒绝,并填写审核意见。
  • 项目类型在字典表中维护,每个类型关联一个“标准值”(存储在字典表的beizhu字段),用于后续工作量计算。
4.2.2 科研论文管理
  • 教师提交论文信息(名称、类型、文件、详情)。
  • 支持逻辑删除(keyanlunwen_delete字段,1为未删除,2为已删除)。
  • 审核流程同项目管理。
3.2.3 科研获奖管理
  • 教师提交获奖信息(名称、类型、文件、详情)。
  • 审核流程同上。
4.2.4 工作量管理
  • 工作量记录关联到某个科研项目。
  • 教师填写提交总数tijiaozongshu)。
  • 系统根据关联项目的类型(从字典表获取beizhu标准值)自动计算总工作量= 标准值 × 提交总数。
  • 教师可查看自己的工作总量。
3.2.5 字典管理
  • 系统中所有下拉选项(如项目类型、论文类型、获奖类型、审核状态、性别等)均通过dictionary表动态维护。
  • 支持一级和二级字典(通过super_id实现级联)。
  • 项目启动时,DictionaryServletContextListener将字典数据加载到ServletContext中,供前端页面展示及后端数据转换使用。

3.3 数据库设计摘要

主要数据表(依据db.sql):

表名说明
users管理员账户
jiaoshi教师信息(含工号、姓名、手机、身份证、头像、性别、邮箱)
mishu秘书信息
xiangmu科研项目(关联教师、项目类型、文件、内容、逻辑删除、审核状态及意见)
keyanlunwen科研论文(关联教师、论文类型、文件、内容、逻辑删除、审核)
keyanhuojiang科研获奖(关联教师、获奖类型、文件、内容、审核)
gongzuoliang工作量记录(关联项目、工作量详情、提交总数、总工作量)
dictionary字典表(字段代码、名称、编码、编码名、父ID、备注)
token用户登录token
config系统配置(如轮播图)

3.4 关键业务逻辑

  • 工作量自动计算:在GongzuoliangControllersaveupdate方法中,根据xiangmuId查出项目类型,再通过字典表获取beizhu作为权重,乘以tijiaozongshu得到zonggongzuoliang
  • 逻辑删除:科研论文、科研项目使用delete字段(1正常,2已删除),列表查询时默认过滤delete=1的数据。
  • 权限控制:通过自定义AuthorizationInterceptor拦截请求,验证Token。使用@IgnoreAuth注解放行登录、注册等接口。
  • 字典值转换:在返回视图对象(XxxView)时,通过DictionaryService.dictionaryConvert()方法将类型ID转换为对应的中文名称(从ServletContext中的字典Map获取)。
  • 多角色数据隔离:在@RequestMapping("/page")接口中,根据当前用户的role自动为查询参数添加userId或相关条件(如教师只能看到自己的数据)。

4. 部分代码

4.1 工作量自动计算(GongzuoliangController.save)

@RequestMapping("/save")publicRsave(@RequestBodyGongzuoliangEntitygongzuoliang,HttpServletRequestrequest){// ... 省略角色校验XiangmuEntityxiangmuEntity=xiangmuService.selectById(gongzuoliang.getXiangmuId());if(xiangmuEntity==null)returnR.error("查不到该项目");DictionaryEntitydictionaryEntity=dictionaryService.selectOne(newEntityWrapper<DictionaryEntity>().eq("dic_code","xiangmu_types").eq("code_index",xiangmuEntity.getXiangmuTypes()));if(dictionaryEntity==null)returnR.error("查不到该项目的工作量标准");// 计算总工作量 = 标准值(beizhu) × 提交总数gongzuoliang.setZonggongzuoliang(Integer.valueOf(dictionaryEntity.getBeizhu())*gongzuoliang.getTijiaozongshu());gongzuoliang.setInsertTime(newDate());gongzuoliang.setCreateTime(newDate());gongzuoliangService.insert(gongzuoliang);returnR.ok();}

4.2 字典表数据初始化监听器

@WebListenerpublicclassDictionaryServletContextListenerimplementsServletContextListener{@OverridepublicvoidcontextInitialized(ServletContextEventsce){ApplicationContextappContext=WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());DictionaryServicedictionaryService=(DictionaryService)appContext.getBean("dictionaryService");List<DictionaryEntity>dictionaryEntities=dictionaryService.selectList(newEntityWrapper<DictionaryEntity>());Map<String,Map<Integer,String>>map=newHashMap<>();for(DictionaryEntityd:dictionaryEntities){Map<Integer,String>m=map.get(d.getDicCode());if(m==null||m.isEmpty())m=newHashMap<>();m.put(d.getCodeIndex(),d.getIndexName());map.put(d.getDicCode(),m);}sce.getServletContext().setAttribute("dictionaryMap",map);}}

4.3 前端路由配置示例(router-static.js)

// 工作量管理路由{path:'/gongzuoliang',name:'工作量',component:gongzuoliang},// 科研项目管理路由{path:'/xiangmu',name:'科研项目',component:xiangmu}

4.4 MyBatis 多表联查映射(XiangmuDao.xml)

<selectid="selectListView"resultType="com.entity.view.XiangmuView">SELECT<includerefid="Base_Column_List"/>,jiaoshi.jiaoshi_name as jiaoshiName ,dictionary.beizhu as xiangmuTypesBeizhu FROM xiangmu a LEFT JOIN jiaoshi ON a.jiaoshi_id = jiaoshi.id LEFT JOIN dictionary ON a.xiangmu_types = dictionary.code_index WHERE dictionary.dic_code = "xiangmu_types" ORDER BY a.${params.orderBy} desc</select>

5. 部分截图



















6. 项目总结

科研工作量管理系统完整实现了科研活动的申报、审核、工作量计算与统计功能。系统采用前后端分离架构,后端基于 Spring Boot + MyBatis-Plus 提供 RESTful API,前端基于 Vue + Element UI 构建管理界面。项目具有以下特点:

  • 角色权限分明:管理员、秘书、教师各司其职,前端菜单和按钮权限通过menu.js配置文件动态控制,后端通过拦截器验证 Token。
  • 可维护的字典体系:所有选项型数据均存入dictionary表,项目启动时加载到全局上下文,便于动态扩展和前端展示。
  • 工作量自动化计算:根据项目类型关联的系数与教师填报数量自动生成总工作量,减少人工计算错误。
  • 审核流程完善:对科研论文、项目、获奖均设有“待审核→同意/拒绝”流程,并记录审核意见和时间。
  • 数据安全:使用逻辑删除保护历史数据,密码默认加密存储(虽代码中未展示加密细节,但存在 MD5 工具类)。
  • 报表与可视化:系统预留了 ECharts 图表统计接口(如barSumbarCount)以及 Excel 导出功能,便于数据分析。

该系统的不足之处在于:代码中部分硬编码(如角色字符串比较)、日志打印不够规范、批量导入功能被注释未完全实现、工作量标准仅通过字典备注字段存储(缺乏独立配置界面)。总体而言,系统结构清晰,功能完整,可作为科研管理类系统的参考实现。

7. 参考

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询