申报表内容的返回修改、用户角色分配、层级用户管理、校、院二层审核、评审专家的分配、打分功能基本实现
一、需求
-
用户管理:系统管理员可以 增、删、改、查 各个用户的账号信息,设置不同角色的账户
-
层级用户角色分配:校级管理员可以 分配 不同院的 院级管理员 账户,分配评审专家账户;院级管理员可以分配 基层教学组织负责人 账户
-
校、院管理员的二层审核:基层教学组织负责人完成申报表信息填报后,院级管理员审核,将状态改为 院级审核通过 或者 返回修改,校级管理员能看到 院级审核通过 之后的申报表,继而 审核,将状态改为 校级审核通过 或 返回修改
-
申报表的返回修改:对于 返回修改 状态下的 申报表 ,基层教学组织负责人可以 修改申报表内容,再次提交审核
-
评审专家的分配:校级管理员可以将 校级审核通过 的申报表 批量分配给 指定 评审专家
-
评审专家的打分:评审专家 可以 给 分配给自己的 申报表 打分
二、实现
后端源码:https://github.com/GitHubSi/base_education_system
前端源码:https://github.com/GitHubSi/base_education_vue
2.1用户管理、层级用户角色分配
关于系统管理员最基本的增删改查就不说了,比较复杂的地方就是
- 对于 系统管理员分配各个账户、校级管理员分配院级管理员 和 评审专家 : 学院下拉列表的获取、角色列表的获取,需要设置另外两张表,便于获取
- 学院下拉列表:可以直接获取 各个学院 绑定到下拉列表中
- 角色下拉列表:需要根据当前角色,动态获取,对应的是 同一个collection的多个document,每一个document和role绑定
- 对于 动态条件 查询 用户信息:查询条件是可变的,这里我用的是 最原始的 方法 处理,根据查询条件组合查询,见下代码
// 3. 判断当前角色
if("系统管理员".equals(role)){
// 3.1 没有条件的查询
if(queryUsername == null && queryCollege == null && queryRole == null){
List<User> userList = mongoTemplate.findAll(User.class, "user");
return userList;
}
// 3.2 三个条件都有的查询
if(queryUsername!= null && queryCollege != null && queryRole != null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("username").is(queryUsername),Criteria.where("college").is(queryCollege),Criteria.where("role").is(queryRole));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
// 3.3 一个条件
if(queryUsername!= null && queryCollege == null && queryRole == null){
Query query = new Query(Criteria.where("username").is(queryUsername));
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername == null && queryCollege != null &&queryRole == null){
Query query = new Query(Criteria.where("college").is(queryCollege));
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername == null && queryCollege == null && queryRole!= null){
Query query = new Query(Criteria.where("role").is(queryRole));
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
// 3.4 两个条件
if(queryUsername!= null && queryCollege != null && queryRole == null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("username").is(queryUsername),Criteria.where("college").is(queryCollege));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername != null && queryCollege == null &&queryRole != null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("username").is(queryUsername),Criteria.where("role").is(queryRole));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername == null && queryCollege != null && queryRole!= null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("college").is(queryCollege),Criteria.where("role").is(queryRole));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
}
if("校级管理员".equals(role)){
//1. 无条件查询
if(queryUsername == null && queryCollege == null && queryRole == null){
Criteria criteria = Criteria.where("role").in("院级管理员","评审专家");
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
// 3.2 三个条件都有的查询
if(queryUsername!= null && queryCollege != null && queryRole != null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("username").is(queryUsername),Criteria.where("college").is(queryCollege),Criteria.where("role").is(queryRole));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
// 3.3 一个条件
if(queryUsername!= null && queryCollege == null && queryRole == null){
Query query = new Query(Criteria.where("username").is(queryUsername));
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername == null && queryCollege != null &&queryRole == null){
Query query = new Query(Criteria.where("college").is(queryCollege));
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername == null && queryCollege == null && queryRole!= null){
Query query = new Query(Criteria.where("role").is(queryRole));
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
// 3.4 两个条件
if(queryUsername!= null && queryCollege != null && queryRole == null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("username").is(queryUsername),Criteria.where("college").is(queryCollege));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername != null && queryCollege == null && queryRole != null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("username").is(queryUsername),Criteria.where("role").is(queryRole));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername == null && queryCollege != null && queryRole!= null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("college").is(queryCollege),Criteria.where("role").is(queryRole));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
}
if("院级管理员".equals(role)) {
// 1. 无条件查询
if (queryUsername == null && queryCollege == null && queryRole == null) {
Criteria criteria = Criteria.where("role").is("基层教学组织负责人").and("college").is(college);
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
// 3.2 三个条件都有的查询
if(queryUsername!= null && queryCollege != null && queryRole != null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("username").is(queryUsername),Criteria.where("college").is(queryCollege),Criteria.where("role").is(queryRole));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
// 3.3 一个条件
if(queryUsername!= null && queryCollege == null && queryRole == null){
Query query = new Query(Criteria.where("username").is(queryUsername));
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername == null && queryCollege != null &&queryRole == null){
Query query = new Query(Criteria.where("college").is(queryCollege));
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername == null && queryCollege == null && queryRole!= null){
Query query = new Query(Criteria.where("role").is(queryRole));
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
// 3.4 两个条件
if(queryUsername!= null && queryCollege != null && queryRole == null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("username").is(queryUsername),Criteria.where("college").is(queryCollege));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername != null && queryCollege == null &&queryRole != null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("username").is(queryUsername),Criteria.where("role").is(queryRole));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
if(queryUsername == null && queryCollege != null && queryRole!= null){
Criteria criteria = new Criteria();
criteria.andOperator(Criteria.where("college").is(queryCollege),Criteria.where("role").is(queryRole));
Query query = new Query();
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class, "user");
return userList;
}
2.2校、院管理员的二层审核
获取当前用户的角色,显示不同的status
然后就是申报表列表的处理,校级管理员只能看到 院级审核通过 状态下的 申报表
本来我想着是拿着status和role再次向后端发请求获取,但是前端说可以根据role直接在前端进行筛选剔除不符合条件的
这样也好,不用再发请求了
2.3申报表的返回修改
这个没什么说的,关键就是 是选择在 详情页修改,还是在申报页数据回显修改
我本来想着是在拿出来一个详情页,修改一下,对于每部分加上 修改的按钮请求
但是前端说,有些不少excel导入的数据功能需求 还得一个个加上,麻烦,干脆直接在填报也 回显数据修改
确实,数据量表单数量多,大约13张分表,体力活
实现过程不太容易,出了点问题,主要是 前端 富文本Thymce的问题,见
Vue解决报错5_Tinymce 富文本不能传递双向绑定的数据到后端、使用过程遇到问题及解决
Vue解决报错6_日期类型的数据具有格式要求,需要和后端数据库对应,以便于存储和展示
2.4评审专家的分配
分配实现的原理就是 将申报表decument的字段userNumberOfMarker 和 评审专家的 userNumber学工号关联起来
然后评审专家只能看到 分配给自己的 申报表,这个也是前端 来 剔除 就行
2.5评审专家的打分
这个好实现没什么问题
打分 按钮权限控制也是前端,只有评审专家 且 校级审核之后 才显示此按钮
点击按钮弹出 弹框,输入各项分数 发请求,将titalScore存储到数据库,状态改为 评阅结束,不可在次评分
至此上述功能基本完成,但是好像又增加了需求,后续会接着完成!