目录
前言:本篇博客主要记录前期代码的细节补充与改进完善。
在之前的博客中,介绍了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);