• 山东大学软件学院项目实训-创新实训-网络安全靶场实验平台(十一)


    目录

    一、writeup分页、搜索

    二、靶场完成度

    三、解散班级


    前言:本篇博客主要记录前期代码的细节补充与改进完善。

    一、writeup分页、搜索

    在之前的博客中,介绍了writeup的分页和搜索是通过mybatis的函数实现的,即:

    1. @GetMapping("/page")
    2. public Result findpage(@RequestParam(defaultValue = "1") Integer pageNum,
    3. @RequestParam(defaultValue = "5") Integer pageSize,
    4. @RequestParam(defaultValue = "") String search){
    5. Page<Forum> forumPage=forumMapper.selectPage(new Page<>(pageNum,pageSize), Wrappers.<Forum>lambdaQuery().like(Forum::getForumid,search));
    6. return Result.success(forumPage);
    7. }

    但是这存在两个问题:一是不能按照时间倒序排序;二是无法加入某些查询条件,不利于后续审核之类的功能的实现。

    因此,我自己手动写了分页代码,不再使用mybatis的selectPage函数。

    前端的代码不变,主要是对后端springboot中的controller、mapper进行修改。改动如下:

    1. @GetMapping("/page")
    2. public Result findpage(@RequestParam(defaultValue = "1") Integer pageNum,
    3. @RequestParam(defaultValue = "5") Integer pageSize,
    4. @RequestParam(defaultValue = "") String search){
    5. Integer beginPage=(pageNum-1)*pageSize;
    6. List<Forum> forumPage=forumMapper.getpage(beginPage,pageSize,search,1);
    7. Integer totalpage=forumMapper.gettotalpage(search,1);
    8. com.sducsrp.csrp.entity.Page page=new Page(forumPage,totalpage);
    9. return Result.success(page);
    10. }
    1. @Select("select * from forum where state=#{state} and content like \"%${search}%\" ORDER BY time DESC limit #{beginPage},#{pageSize}")
    2. List<Forum> getpage(Integer beginPage, Integer pageSize, String search, int state);
    3. @Select("select count(*) from forum where state=#{state} and content like \"%${search}%\" ORDER BY time DESC")
    4. Integer gettotalpage(String search, int state);

     writeup外观如下图所示:

    可以看到,writeup是根据发布时间递减顺序排列的。

    e4d770e8eb9c4499b9ed8be7474daae4.png

    二、靶场完成度

    在课程管理界面中,除了学生的基本信息,还要显示每名学生的靶场完成度。

    因此,要在学生提交正确的flag后,使其完成题目数加一。所以在user表里新加入一个属性finished,表示该用户完成的题目数。

    具体操作为:

    StuProblemController.java中:
    1. @GetMapping("/recordinfo")
    2. public Result save(@RequestParam() Integer userid, @RequestParam() String problemid){
    3. stuProblemMapper.insertinfo(userid,problemid);
    4. userMapper.updateFinished(userid);
    5. return Result.success("success");
    6. }
    UserMapper.java中:
    1. @Update("update user set finished = finished+1 where userid = #{userid}")
    2. int updateFinished(Integer userid);

     效果如图所示:

    外观改进:

    1. <el-table-column label="靶场完成度">
    2. <template #default="scope">
    3. <el-progress v-if="scope.row.finished<1" style="margin-left: 10px" :percentage="scope.row.finished/12*100" status="warning"/>
    4. <el-progress v-if="scope.row.finished>=1" style="margin-left: 10px" :percentage="scope.row.finished/12*100" status="success"/>
    5. </template>
    6. </el-table-column>

     

     

    三、解散班级

    教师可以通过解散班级按钮,删除某个班级的信息。

    具体实现如下:

    1. loadcourse(){
    2. request.get("/course/getcourselist",{
    3. params:{
    4. teacherid:this.teacher.userid
    5. }
    6. }).then(res =>{
    7. console.log(res)
    8. this.courselist=res.data
    9. this.currentcourse=res.data[0].courseid
    10. this.currentcoursename=res.data[0].coursename
    11. this.getstuinfo(this.currentcourse)
    12. })
    13. },
    14. Dissolve(){
    15. request.get("/course/delete",{
    16. params:{
    17. courseid:this.currentcourse
    18. }
    19. }).then(res =>{
    20. console.log(res);
    21. if (res.code === '200'){
    22. alert(this.currentcoursename+"已解散");
    23. this.loadcourse()
    24. }else{
    25. alert(this.currentcoursename+"解散失败");
    26. }
    27. })
    28. },
    1. @GetMapping("/delete")
    2. public Result register(@RequestParam() String courseid) {
    3. int a=courseMapper.deleteByid(courseid);
    4. int b=stuCourseMapper.deleteByid(courseid);
    5. if(a==1&&b==1)
    6. return Result.success();
    7. else
    8. return Result.error();
    9. }
    1. @Delete("delete from stucourse where courseid = #{courseid}")
    2. int deleteByid(String courseid);
    3. @Delete("delete from course where courseid = #{courseid}")
    4. int deleteByid(String courseid);

  • 相关阅读:
    django理解02 前后端分离中的问题
    虚拟机初始化脚本, 虚拟机相互免秘钥
    C++面试题精选-2024/06/26
    labview运行速度太慢
    Node.js 前后端分离开发新思路
    spring bean生命周期源码分析
    HTML5 基础
    PaddleOCR系列-训练模型并部署android手机
    Java SE 中的变量、数据类型和字符串类型以及类型转换和类型提升
    PCL库常用算法
  • 原文地址:https://blog.csdn.net/m0_52100140/article/details/124948332