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.8Hutool 4.0.12Commons Lang3 3.0Commons IO 2.5Protobuf Java 3.10.0Excel处理Apache POI 3.9百度AI百度人脸识别 SDK 4.4.1用于人脸比对2.2 前端核心框架Vue.js基于 Vue CLI 构建UI组件库Element UIHTTP请求Axios图表ECharts地图Vue AMap高德地图其他vue-json-excelExcel导出vue-qr二维码print-js打印js-md5MD5加密2.3 开发环境JDK 1.8Maven 构建服务端口8080上下文路径/keyangongzuoliang3. 详细介绍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用户登录tokenconfig系统配置如轮播图3.4 关键业务逻辑工作量自动计算在GongzuoliangController的save和update方法中根据xiangmuId查出项目类型再通过字典表获取beizhu作为权重乘以tijiaozongshu得到zonggongzuoliang。逻辑删除科研论文、科研项目使用delete字段1正常2已删除列表查询时默认过滤delete1的数据。权限控制通过自定义AuthorizationInterceptor拦截请求验证Token。使用IgnoreAuth注解放行登录、注册等接口。字典值转换在返回视图对象XxxView时通过DictionaryService.dictionaryConvert()方法将类型ID转换为对应的中文名称从ServletContext中的字典Map获取。多角色数据隔离在RequestMapping(/page)接口中根据当前用户的role自动为查询参数添加userId或相关条件如教师只能看到自己的数据。4. 部分代码4.1 工作量自动计算GongzuoliangController.saveRequestMapping(/save)publicRsave(RequestBodyGongzuoliangEntitygongzuoliang,HttpServletRequestrequest){// ... 省略角色校验XiangmuEntityxiangmuEntityxiangmuService.selectById(gongzuoliang.getXiangmuId());if(xiangmuEntitynull)returnR.error(查不到该项目);DictionaryEntitydictionaryEntitydictionaryService.selectOne(newEntityWrapperDictionaryEntity().eq(dic_code,xiangmu_types).eq(code_index,xiangmuEntity.getXiangmuTypes()));if(dictionaryEntitynull)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){ApplicationContextappContextWebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());DictionaryServicedictionaryService(DictionaryService)appContext.getBean(dictionaryService);ListDictionaryEntitydictionaryEntitiesdictionaryService.selectList(newEntityWrapperDictionaryEntity());MapString,MapInteger,StringmapnewHashMap();for(DictionaryEntityd:dictionaryEntities){MapInteger,Stringmmap.get(d.getDicCode());if(mnull||m.isEmpty())mnewHashMap();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.xmlselectidselectListViewresultTypecom.entity.view.XiangmuViewSELECTincluderefidBase_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/select5. 部分截图6. 项目总结科研工作量管理系统完整实现了科研活动的申报、审核、工作量计算与统计功能。系统采用前后端分离架构后端基于 Spring Boot MyBatis-Plus 提供 RESTful API前端基于 Vue Element UI 构建管理界面。项目具有以下特点角色权限分明管理员、秘书、教师各司其职前端菜单和按钮权限通过menu.js配置文件动态控制后端通过拦截器验证 Token。可维护的字典体系所有选项型数据均存入dictionary表项目启动时加载到全局上下文便于动态扩展和前端展示。工作量自动化计算根据项目类型关联的系数与教师填报数量自动生成总工作量减少人工计算错误。审核流程完善对科研论文、项目、获奖均设有“待审核→同意/拒绝”流程并记录审核意见和时间。数据安全使用逻辑删除保护历史数据密码默认加密存储虽代码中未展示加密细节但存在 MD5 工具类。报表与可视化系统预留了 ECharts 图表统计接口如barSum、barCount以及 Excel 导出功能便于数据分析。该系统的不足之处在于代码中部分硬编码如角色字符串比较、日志打印不够规范、批量导入功能被注释未完全实现、工作量标准仅通过字典备注字段存储缺乏独立配置界面。总体而言系统结构清晰功能完整可作为科研管理类系统的参考实现。7. 参考https://blog.xiaobias.com/article/30
基于springboot2+vue2的科研工作量管理系统
发布时间:2026/6/2 16:24:39
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.8Hutool 4.0.12Commons Lang3 3.0Commons IO 2.5Protobuf Java 3.10.0Excel处理Apache POI 3.9百度AI百度人脸识别 SDK 4.4.1用于人脸比对2.2 前端核心框架Vue.js基于 Vue CLI 构建UI组件库Element UIHTTP请求Axios图表ECharts地图Vue AMap高德地图其他vue-json-excelExcel导出vue-qr二维码print-js打印js-md5MD5加密2.3 开发环境JDK 1.8Maven 构建服务端口8080上下文路径/keyangongzuoliang3. 详细介绍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用户登录tokenconfig系统配置如轮播图3.4 关键业务逻辑工作量自动计算在GongzuoliangController的save和update方法中根据xiangmuId查出项目类型再通过字典表获取beizhu作为权重乘以tijiaozongshu得到zonggongzuoliang。逻辑删除科研论文、科研项目使用delete字段1正常2已删除列表查询时默认过滤delete1的数据。权限控制通过自定义AuthorizationInterceptor拦截请求验证Token。使用IgnoreAuth注解放行登录、注册等接口。字典值转换在返回视图对象XxxView时通过DictionaryService.dictionaryConvert()方法将类型ID转换为对应的中文名称从ServletContext中的字典Map获取。多角色数据隔离在RequestMapping(/page)接口中根据当前用户的role自动为查询参数添加userId或相关条件如教师只能看到自己的数据。4. 部分代码4.1 工作量自动计算GongzuoliangController.saveRequestMapping(/save)publicRsave(RequestBodyGongzuoliangEntitygongzuoliang,HttpServletRequestrequest){// ... 省略角色校验XiangmuEntityxiangmuEntityxiangmuService.selectById(gongzuoliang.getXiangmuId());if(xiangmuEntitynull)returnR.error(查不到该项目);DictionaryEntitydictionaryEntitydictionaryService.selectOne(newEntityWrapperDictionaryEntity().eq(dic_code,xiangmu_types).eq(code_index,xiangmuEntity.getXiangmuTypes()));if(dictionaryEntitynull)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){ApplicationContextappContextWebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());DictionaryServicedictionaryService(DictionaryService)appContext.getBean(dictionaryService);ListDictionaryEntitydictionaryEntitiesdictionaryService.selectList(newEntityWrapperDictionaryEntity());MapString,MapInteger,StringmapnewHashMap();for(DictionaryEntityd:dictionaryEntities){MapInteger,Stringmmap.get(d.getDicCode());if(mnull||m.isEmpty())mnewHashMap();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.xmlselectidselectListViewresultTypecom.entity.view.XiangmuViewSELECTincluderefidBase_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/select5. 部分截图6. 项目总结科研工作量管理系统完整实现了科研活动的申报、审核、工作量计算与统计功能。系统采用前后端分离架构后端基于 Spring Boot MyBatis-Plus 提供 RESTful API前端基于 Vue Element UI 构建管理界面。项目具有以下特点角色权限分明管理员、秘书、教师各司其职前端菜单和按钮权限通过menu.js配置文件动态控制后端通过拦截器验证 Token。可维护的字典体系所有选项型数据均存入dictionary表项目启动时加载到全局上下文便于动态扩展和前端展示。工作量自动化计算根据项目类型关联的系数与教师填报数量自动生成总工作量减少人工计算错误。审核流程完善对科研论文、项目、获奖均设有“待审核→同意/拒绝”流程并记录审核意见和时间。数据安全使用逻辑删除保护历史数据密码默认加密存储虽代码中未展示加密细节但存在 MD5 工具类。报表与可视化系统预留了 ECharts 图表统计接口如barSum、barCount以及 Excel 导出功能便于数据分析。该系统的不足之处在于代码中部分硬编码如角色字符串比较、日志打印不够规范、批量导入功能被注释未完全实现、工作量标准仅通过字典备注字段存储缺乏独立配置界面。总体而言系统结构清晰功能完整可作为科研管理类系统的参考实现。7. 参考https://blog.xiaobias.com/article/30