目录
前言:本篇博客主要记录前期代码的细节补充与改进完善。
一、writeup分页、搜索
在之前的博客中,介绍了writeup的分页和搜索是通过mybatis的函数实现的,即:
@GetMapping("/page")
public Result findpage(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize,
@RequestParam(defaultValue = "") String search){
Page<Forum> forumPage=forumMapper.selectPage(new Page<>(pageNum,pageSize), Wrappers.<Forum>lambdaQuery().like(Forum::getForumid,search));
return Result.success(forumPage);
}
但是这存在两个问题:一是不能按照时间倒序排序;二是无法加入某些查询条件,不利于后续审核之类的功能的实现。
因此,我自己手动写了分页代码,不再使用mybatis的selectPage函数。
前端的代码不变,主要是对后端springboot中的controller、mapper进行修改。改动如下:
@GetMapping("/page")
public Result findpage(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize,
@RequestParam(defaultValue = "") String search){
Integer beginPage=(pageNum-1)*pageSize;
List<Forum> forumPage=forumMapper.getpage(beginPage,pageSize,search,1);
Integer totalpage=forumMapper.gettotalpage(search,1);
com.sducsrp.csrp.entity.Page page=new Page(forumPage,totalpage);
return Result.success(page);
}
@Select("select * from forum where state=#{state} and content like \"%${search}%\" ORDER BY time DESC limit #{beginPage},#{pageSize}")
List<Forum> getpage(Integer beginPage, Integer pageSize, String search, int state);
@Select("select count(*) from forum where state=#{state} and content like \"%${search}%\" ORDER BY time DESC")
Integer gettotalpage(String search, int state);
writeup外观如下图所示:
可以看到,writeup是根据发布时间递减顺序排列的。
二、靶场完成度
在课程管理界面中,除了学生的基本信息,还要显示每名学生的靶场完成度。
因此,要在学生提交正确的flag后,使其完成题目数加一。所以在user表里新加入一个属性finished,表示该用户完成的题目数。
具体操作为:
StuProblemController.java中:
@GetMapping("/recordinfo")
public Result save(@RequestParam() Integer userid, @RequestParam() String problemid){
stuProblemMapper.insertinfo(userid,problemid);
userMapper.updateFinished(userid);
return Result.success("success");
}
UserMapper.java中:
@Update("update user set finished = finished+1 where userid = #{userid}")
int updateFinished(Integer userid);
效果如图所示:
外观改进:
<el-table-column label="靶场完成度">
<template #default="scope">
<el-progress v-if="scope.row.finished<1" style="margin-left: 10px" :percentage="scope.row.finished/12*100" status="warning"/>
<el-progress v-if="scope.row.finished>=1" style="margin-left: 10px" :percentage="scope.row.finished/12*100" status="success"/>
</template>
</el-table-column>
三、解散班级
教师可以通过解散班级按钮,删除某个班级的信息。
具体实现如下:
loadcourse(){
request.get("/course/getcourselist",{
params:{
teacherid:this.teacher.userid
}
}).then(res =>{
console.log(res)
this.courselist=res.data
this.currentcourse=res.data[0].courseid
this.currentcoursename=res.data[0].coursename
this.getstuinfo(this.currentcourse)
})
},
Dissolve(){
request.get("/course/delete",{
params:{
courseid:this.currentcourse
}
}).then(res =>{
console.log(res);
if (res.code === '200'){
alert(this.currentcoursename+"已解散");
this.loadcourse()
}else{
alert(this.currentcoursename+"解散失败");
}
})
},
@GetMapping("/delete")
public Result register(@RequestParam() String courseid) {
int a=courseMapper.deleteByid(courseid);
int b=stuCourseMapper.deleteByid(courseid);
if(a==1&&b==1)
return Result.success();
else
return Result.error();
}
@Delete("delete from stucourse where courseid = #{courseid}")
int deleteByid(String courseid);
@Delete("delete from course where courseid = #{courseid}")
int deleteByid(String courseid);