diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/gl/AnswerSheetController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/gl/AnswerSheetController.java index 663d0f2..1c4f726 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/gl/AnswerSheetController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/gl/AnswerSheetController.java @@ -75,9 +75,12 @@ public class AnswerSheetController { //主观题自动更改 @ApiOperation("主观题批改") @GetMapping("answerDisplay") - public R answerDisplay(String sender, Long id) { + public R answerDisplay( Long id) { + SysUser sysUser = SecurityUtils.getLoginUser().getUser(); + Long userid = sysUser.getUserId(); + String sender = iUserService.user(iUserService.selectByzhid(id)).getTname(); List list = iExamCreateService.selectListByPid(id); - Answer answer = iAnswerService.selectByTestId(sender, id); + Answer answer = iAnswerService.selectByTestId(userid,sender, id); QuestionAnswerDO questionAnswerDO = iQuestionanswerService.createTest(list, answer); if (iQuestionanswerService.addTest(questionAnswerDO) != 0) { return R.ok("该学生客观题已改完!"); @@ -88,8 +91,8 @@ public class AnswerSheetController { @ApiOperation("查看学生的考试情况(最新)") @GetMapping("selectQuestionanswer") - public R selectQuestionanswer(String sender, Long testid) { - return R.ok(iQuestionanswerService.selectQuestionanswer(sender,testid)); + public R selectQuestionanswer(Long senderId,String sender, Long testid) { + return R.ok(iQuestionanswerService.selectQuestionanswer(senderId,sender,testid)); } @ApiOperation("批改客观题") @@ -104,8 +107,8 @@ public class AnswerSheetController { @ApiOperation("试卷批改完毕提交") @PostMapping("addmarkedtest") - public R addmarkedtest(String sender,Long testid){ - if(iMarkedtestService.addmarkedtest(sender,testid)!=0){ + public R addmarkedtest(Long senderId,String sender,Long testid){ + if(iMarkedtestService.addmarkedtest(senderId,sender,testid)!=0){ return R.ok("提交完成!"); } return R.fail("提交失败!"); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentExamPaperController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentExamPaperController.java index 1a261b9..e762956 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentExamPaperController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentExamPaperController.java @@ -38,6 +38,9 @@ public class StudentExamPaperController { @Autowired private IExamCreateService iExamCreateService; + @Autowired + private IAnswerService iAnswerService; + @ApiOperation("班级查询") @GetMapping("selectByUserId") public R selectByUserId(){ @@ -47,6 +50,21 @@ public class StudentExamPaperController { return R.ok(iStudentClassService.selectById(userid)); } + @ApiOperation("获取试卷") + @GetMapping("examPaperById") + public R examPaperById(Long id){ + return R.ok(iExamPaperService.selectById(id)); + } + + @ApiOperation("判断是否考过") + @GetMapping("whetherTest") + public Boolean whetherTest(Long testId){ + SysUser sysUser = SecurityUtils.getLoginUser().getUser(); + Long userid = iUserService.selectByzhid(sysUser.getUserId()); + return iAnswerService.selectBySenderIdAndTestId(userid,testId); + } + + @ApiOperation("试卷查询") @GetMapping("examPaperByTypeAndSubject") public R> examPaperByTypeAndSubject(int pagenum,int pagesize,String type,String subject){ @@ -70,6 +88,7 @@ public class StudentExamPaperController { continue; } ExamPaperDO1 examPaperDO1 = new ExamPaperDO1(); + examPaperDO1.setId(examPaper.getId()); examPaperDO1.setName(examPaper.getName()); examPaperDO1.setTime(examPaper.getTime()); examPaperDO1.setSubject(examPaper.getSubject()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentHomePageController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentHomePageController.java index 75077f6..518b8b8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentHomePageController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentHomePageController.java @@ -60,6 +60,7 @@ public class StudentHomePageController { String answerVo = gson.toJson(answerVos); Answer answer = new Answer(); + answer.setSenderId(id); answer.setSender(sender); answer.setTestid(answerDO.getTestid()); answer.setIdanswer(answerVo); @@ -72,12 +73,20 @@ public class StudentHomePageController { } @ApiOperation("任务中心分数") - @PostMapping("task_score") - public R taskScore(Long testid){ + @GetMapping("task_score") + public R> taskScore(){ SysUser sysUser = SecurityUtils.getLoginUser().getUser(); Long id = sysUser.getUserId(); String sender = iUserService.user(iUserService.selectByzhid(id)).getTname(); - return R.ok(iMarkedtestService.selectmarkedtestBySenderAndTestid(sender,testid).getScore()); + return R.ok(iMarkedtestService.selectmarkedtestListBySenderAndSenderId(sender,id)); + } + + @ApiOperation("获取某一张的分数") + @GetMapping("getScoreByTestId") + public R getScoreByTestId(Long testId) { + SysUser sysUser = SecurityUtils.getLoginUser().getUser(); + Long id = sysUser.getUserId(); + return R.ok(iMarkedtestService.selectmarkedtestByTestid(id,testId)); } @ApiOperation("查看学生的考试情况(最新)") @@ -86,7 +95,7 @@ public class StudentHomePageController { SysUser sysUser = SecurityUtils.getLoginUser().getUser(); Long id = sysUser.getUserId(); String sender = iUserService.user(iUserService.selectByzhid(id)).getTname(); - return R.ok(iQuestionanswerService.selectQuestionanswer(sender,testid)); + return R.ok(iQuestionanswerService.selectQuestionanswer(id,sender,testid)); } //主观题自动更改 @@ -97,7 +106,7 @@ public class StudentHomePageController { Long id1 = sysUser.getUserId(); String sender = iUserService.user(iUserService.selectByzhid(id1)).getTname(); List list = iExamCreateService.selectListByPid(id); - Answer answer = iAnswerService.selectByTestId(sender, id); + Answer answer = iAnswerService.selectByTestId(id1,sender, id); QuestionAnswerDO questionAnswerDO = iQuestionanswerService.createTest(list, answer); if (iQuestionanswerService.addTest(questionAnswerDO) != 0) { return R.ok("该学生客观题已改完!"); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/teacher/TeacherAnalysisController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/teacher/TeacherAnalysisController.java index 91efe77..c00f1a1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/teacher/TeacherAnalysisController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/teacher/TeacherAnalysisController.java @@ -106,8 +106,8 @@ public class TeacherAnalysisController { String tname = iUserService.user(studentid).getTname(); System.out.println(tname); Double score = 0.0; - if(iMarkedtestService.selectmarkedtestBySenderAndTestid(tname,testid)!=null){ - score =iMarkedtestService.selectmarkedtestBySenderAndTestid(tname,testid).getScore(); + if(iMarkedtestService.selectmarkedtestBySenderAndTestid(studentClass.getStudentid(),testid)!=null){ + score =iMarkedtestService.selectmarkedtestBySenderAndTestid(studentClass.getStudentid(),testid).getScore(); } sum+=score; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/teacher/TeacherAnswerSheetController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/teacher/TeacherAnswerSheetController.java index 35ab70a..deeee7b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/teacher/TeacherAnswerSheetController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/teacher/TeacherAnswerSheetController.java @@ -47,8 +47,8 @@ public class TeacherAnswerSheetController { @ApiOperation("查看学生的考试情况(最新)") @GetMapping("selectQuestionanswer") - public R selectQuestionanswer(String sender, Long testid) { - return R.ok(iQuestionanswerService.selectQuestionanswer(sender,testid)); + public R selectQuestionanswer(Long senderId,String sender, Long testid) { + return R.ok(iQuestionanswerService.selectQuestionanswer(senderId,sender,testid)); } @ApiOperation("批改客观题") @@ -63,8 +63,8 @@ public class TeacherAnswerSheetController { @ApiOperation("试卷批改完毕提交") @PostMapping("addmarkedtest") - public R addmarkedtest(String sender,Long testid){ - if(iMarkedtestService.addmarkedtest(sender,testid)!=0){ + public R addmarkedtest(Long senderId,String sender,Long testid){ + if(iMarkedtestService.addmarkedtest(senderId,sender,testid)!=0){ return R.ok("提交完成!"); } return R.fail("提交失败!"); diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Answer.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Answer.java index 2bf5545..d2052f6 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Answer.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Answer.java @@ -8,8 +8,9 @@ import lombok.Data; public class Answer { + private Long senderId; private String sender; - private long testid; + private Long testid; private String idanswer; private String finishtime; private Integer time; diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/ExamPaperDO1.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/ExamPaperDO1.java index 7ab9959..33d8cf0 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/ExamPaperDO1.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/ExamPaperDO1.java @@ -4,7 +4,7 @@ import lombok.Data; @Data public class ExamPaperDO1 { - + private Long id; private String name; private String subject; private Integer totalquestion; diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/QuestionbankDO.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/QuestionbankDO.java index dbd9163..00c88f9 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/QuestionbankDO.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/QuestionbankDO.java @@ -12,5 +12,6 @@ public class QuestionbankDO { private String content; private List> chance; private double score; + private String type; } diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/SingleChoiceDO.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/SingleChoiceDO.java index a334fa9..14cef7d 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/SingleChoiceDO.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/SingleChoiceDO.java @@ -7,13 +7,13 @@ import java.util.List; @Data public class SingleChoiceDO { - private int type; + private Long type; private String subject; private String grade; private String content; private List list; private String answer; - private double score; - private long difficulty; + private Double score; + private Long difficulty; private String analysis; } diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Errorbook.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Errorbook.java index a5d58c9..e5edb9d 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Errorbook.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Errorbook.java @@ -11,10 +11,10 @@ public class Errorbook { private String content; private String chance; private String answer; - private long difficulty; + private Long difficulty; private String analysis; private String subject; - private Integer type; + private Long type; private Double score; diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Markedtest.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Markedtest.java index d2db651..2ec6eda 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Markedtest.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Markedtest.java @@ -7,6 +7,7 @@ import lombok.Data; @TableName("markedtest") public class Markedtest { + private Long senderId; private String sender; private long testid; private double score; diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Questionanswer.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Questionanswer.java index a6c0b4d..7391d83 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Questionanswer.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Questionanswer.java @@ -7,6 +7,7 @@ import lombok.Data; @TableName("questionanswer") public class Questionanswer { + private Long senderId; private String sender; private long testid; private String qa; diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Questionbank.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Questionbank.java index 53f8526..f3e584a 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Questionbank.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Questionbank.java @@ -6,14 +6,14 @@ import lombok.Data; @Data @TableName("questionbank") public class Questionbank { - private long id; - private int questiontype; + private Long id; + private Long questiontype; private String subject; private String content; private String chance; private String answer; - private double score; + private Double score; private String analysis; - private long difficulty; + private Long difficulty; private String createtime; } diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/StudentClass.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/StudentClass.java index fd5f6d6..ad950e3 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/StudentClass.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/StudentClass.java @@ -8,7 +8,7 @@ import lombok.Data; @TableName("student_class") public class StudentClass { - private long studentid; + private Long studentid; private String grade; private String Class1; diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IAnswerService.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IAnswerService.java index fa8e63f..aa7f72a 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IAnswerService.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IAnswerService.java @@ -9,8 +9,10 @@ public interface IAnswerService { int answer(Answer answer); - Answer selectByTestId(String sender,Long testid); + Answer selectByTestId(Long senderId,String sender,Long testid); List selectBySender(String sender); + Boolean selectBySenderIdAndTestId(Long senderId,Long testid); + } diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IMarkedtestService.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IMarkedtestService.java index 1c82be1..89ccec5 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IMarkedtestService.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IMarkedtestService.java @@ -8,7 +8,7 @@ import java.util.List; public interface IMarkedtestService { - int addmarkedtest(String sender,Long testid); + int addmarkedtest(Long senderId,String sender,Long testid); IPage selectmarkedtest(int pagenum); @@ -18,6 +18,11 @@ public interface IMarkedtestService { IPage selectmarkedtestBySubject(int pagenum,List list,String subject); - Markedtest selectmarkedtestBySenderAndTestid(String sender,Long testid); + List selectmarkedtestListBySenderAndSenderId(String sender,Long senderId); + Markedtest selectmarkedtestBySenderAndTestid(String sender,Long senderId); + + Markedtest selectmarkedtestBySenderAndTestid(Long senderId,Long testId); + + Markedtest selectmarkedtestByTestid(Long id,Long testId); } diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IQuestionTypeService.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IQuestionTypeService.java index 1d6eb94..b29b6a2 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IQuestionTypeService.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IQuestionTypeService.java @@ -2,7 +2,7 @@ package com.ruoyi.test.seriver; public interface IQuestionTypeService { - String getQuestiontype(int id); + String getQuestiontype(Long id); Long getId(String type); diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IQuestionanswerService.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IQuestionanswerService.java index b58c8e9..247db14 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IQuestionanswerService.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IQuestionanswerService.java @@ -17,7 +17,7 @@ public interface IQuestionanswerService { int addTest(QuestionAnswerDO questionAnswerDO); - QuestionAnswerDO selectQuestionanswer(String sender,Long id); + QuestionAnswerDO selectQuestionanswer(Long senderId,String sender,Long id); int markObjectiveQuestions(QuestionAnswerDO questionAnswerDO); diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/AnswerServiceImpl.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/AnswerServiceImpl.java index 5ea04db..03a36ec 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/AnswerServiceImpl.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/AnswerServiceImpl.java @@ -24,10 +24,11 @@ public class AnswerServiceImpl extends ServiceImpl impleme } @Override - public Answer selectByTestId(String sender,Long testid) { + public Answer selectByTestId(Long senderId,String sender,Long testid) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Answer::getTestid,testid); queryWrapper.eq(Answer::getSender,sender); + queryWrapper.eq(Answer::getSenderId,senderId); queryWrapper.orderByDesc(Answer::getFinishtime).last("LIMIT 1"); return answerMapper.selectOne(queryWrapper); } @@ -36,4 +37,16 @@ public class AnswerServiceImpl extends ServiceImpl impleme public List selectBySender(String sender) { return answerMapper.selectBySender(sender); } + + @Override + public Boolean selectBySenderIdAndTestId(Long senderId, Long testid) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Answer::getSenderId,senderId) + .eq(Answer::getTestid,testid); + if(answerMapper.selectCount(queryWrapper)>0){ + return true; + }else{ + return false; + } + } } diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/AnswerSheetDOServiceImpl.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/AnswerSheetDOServiceImpl.java index a994562..c1fbe18 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/AnswerSheetDOServiceImpl.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/AnswerSheetDOServiceImpl.java @@ -11,10 +11,7 @@ import com.ruoyi.test.domain.Questionbank; import com.ruoyi.test.domain.Vo.ExamCreateVo; import com.ruoyi.test.domain.Vo.QuestionbankVo; import com.ruoyi.test.mapper.*; -import com.ruoyi.test.seriver.IAnswerSheetDOService; -import com.ruoyi.test.seriver.IExamCreateService; -import com.ruoyi.test.seriver.IExamDOService; -import com.ruoyi.test.seriver.IExamPaperService; +import com.ruoyi.test.seriver.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -43,6 +40,9 @@ public class AnswerSheetDOServiceImpl extends ServiceImpl> listMap = gson.fromJson(chance,List.class); diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/ErrorbookServiceImpl.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/ErrorbookServiceImpl.java index d2e5b8c..90236ba 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/ErrorbookServiceImpl.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/ErrorbookServiceImpl.java @@ -50,7 +50,7 @@ public class ErrorbookServiceImpl extends ServiceImpl selectmarkedtestListBySenderAndSenderId(String sender, Long senderId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Markedtest::getSender,sender) - .eq(Markedtest::getTestid,testid); + .eq(Markedtest::getSenderId,senderId); + return markedtestMapper.selectList(queryWrapper); + } + + @Override + public Markedtest selectmarkedtestBySenderAndTestid(String sender,Long senderId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Markedtest::getSender,sender) + .eq(Markedtest::getSenderId,senderId); + return markedtestMapper.selectOne(queryWrapper); + } + + @Override + public Markedtest selectmarkedtestBySenderAndTestid(Long senderId, Long testId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Markedtest::getTestid,testId) + .eq(Markedtest::getSenderId,senderId); + return markedtestMapper.selectOne(queryWrapper); + } + + @Override + public Markedtest selectmarkedtestByTestid(Long id, Long testId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Markedtest::getSenderId,id) + .eq(Markedtest::getTestid,testId); return markedtestMapper.selectOne(queryWrapper); } diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionTypeServiceImpl.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionTypeServiceImpl.java index 4edf93f..49a1f33 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionTypeServiceImpl.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionTypeServiceImpl.java @@ -15,7 +15,10 @@ public class QuestionTypeServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(QuestionType::getId,id); return questionTypeMapper.selectOne(queryWrapper).getType(); diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionanswerServiceImpl.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionanswerServiceImpl.java index 35e5bb2..dd13d89 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionanswerServiceImpl.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionanswerServiceImpl.java @@ -91,12 +91,15 @@ public class QuestionanswerServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Questionanswer::getSenderId,senderId); queryWrapper.eq(Questionanswer::getSender,sender); queryWrapper.eq(Questionanswer::getTestid,id); queryWrapper.orderByDesc(Questionanswer::getCreatetime).last("LIMIT 1"); Questionanswer questionanswer = questionanswerMapper.selectOne(queryWrapper); + System.out.println("========"+questionanswer); String qa = questionanswer.getQa(); // System.out.println(qa); Gson gson = new Gson(); diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionbankServiceImpl.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionbankServiceImpl.java index c3c69e9..27af786 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionbankServiceImpl.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/QuestionbankServiceImpl.java @@ -32,7 +32,7 @@ public class QuestionbankServiceImpl extends ServiceImpl INSERT INTO answer ( + sender_id, sender, testid, idanswer, finishtime, time )VALUES( + #{answer.senderId}, #{answer.sender}, #{answer.testid}, #{answer.idanswer}, diff --git a/ruoyi-test/src/main/resources/mapper/MarkedtestMapper.xml b/ruoyi-test/src/main/resources/mapper/MarkedtestMapper.xml index 8c6defb..9376eef 100644 --- a/ruoyi-test/src/main/resources/mapper/MarkedtestMapper.xml +++ b/ruoyi-test/src/main/resources/mapper/MarkedtestMapper.xml @@ -7,6 +7,7 @@ insert into markedtest( + sender_id, sender, testid, score, @@ -16,7 +17,8 @@ time, finishtime )values ( - #{markedtest.sender}, + #{markedtest.senderId}, + #{markedtest.sender}, #{markedtest.testid}, #{markedtest.score}, #{markedtest.totalscore}, diff --git a/vue2/vue/package-lock.json b/vue2/vue/package-lock.json index 9ad4165..ffb3c9a 100644 --- a/vue2/vue/package-lock.json +++ b/vue2/vue/package-lock.json @@ -19,6 +19,8 @@ "@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-router": "~5.0.0", "@vue/cli-service": "~5.0.0", + "sass": "^1.81.0", + "sass-loader": "^16.0.3", "vue-template-compiler": "^2.6.14" } }, @@ -1713,6 +1715,302 @@ "node": ">= 8" } }, + "node_modules/@parcel/watcher": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.0.tgz", + "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.0", + "@parcel/watcher-darwin-arm64": "2.5.0", + "@parcel/watcher-darwin-x64": "2.5.0", + "@parcel/watcher-freebsd-x64": "2.5.0", + "@parcel/watcher-linux-arm-glibc": "2.5.0", + "@parcel/watcher-linux-arm-musl": "2.5.0", + "@parcel/watcher-linux-arm64-glibc": "2.5.0", + "@parcel/watcher-linux-arm64-musl": "2.5.0", + "@parcel/watcher-linux-x64-glibc": "2.5.0", + "@parcel/watcher-linux-x64-musl": "2.5.0", + "@parcel/watcher-win32-arm64": "2.5.0", + "@parcel/watcher-win32-ia32": "2.5.0", + "@parcel/watcher-win32-x64": "2.5.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz", + "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz", + "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz", + "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz", + "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz", + "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz", + "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz", + "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz", + "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz", + "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz", + "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz", + "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz", + "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz", + "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.28", "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.28.tgz", @@ -4494,6 +4792,19 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", @@ -5762,6 +6073,12 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", @@ -6780,6 +7097,13 @@ "tslib": "^2.0.3" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "optional": true + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", @@ -8380,6 +8704,94 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "node_modules/sass": { + "version": "1.81.0", + "resolved": "https://registry.npmmirror.com/sass/-/sass-1.81.0.tgz", + "integrity": "sha512-Q4fOxRfhmv3sqCLoGfvrC9pRV8btc0UtqL9mN6Yrv6Qi9ScL55CVH1vlPP863ISLEEMNLLuu9P+enCeGHlnzhA==", + "dev": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "16.0.3", + "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-16.0.3.tgz", + "integrity": "sha512-gosNorT1RCkuCMyihv6FBRR7BMV06oKRAs+l4UMp1mlcVg9rWN6KMmUj3igjQwmYys4mDP3etEYJgiHRbgHCHA==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", diff --git a/vue2/vue/package.json b/vue2/vue/package.json index 5bc9fde..ffa8fea 100644 --- a/vue2/vue/package.json +++ b/vue2/vue/package.json @@ -18,6 +18,8 @@ "@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-router": "~5.0.0", "@vue/cli-service": "~5.0.0", + "sass": "^1.81.0", + "sass-loader": "^16.0.3", "vue-template-compiler": "^2.6.14" }, "browserslist": [ diff --git a/vue2/vue/src/components/Aside.vue b/vue2/vue/src/components/Aside.vue index 2d22c62..5bc4291 100644 --- a/vue2/vue/src/components/Aside.vue +++ b/vue2/vue/src/components/Aside.vue @@ -22,9 +22,9 @@ 试卷中心 - + diff --git a/vue2/vue/src/router/index.js b/vue2/vue/src/router/index.js index 80174e0..d37c45c 100644 --- a/vue2/vue/src/router/index.js +++ b/vue2/vue/src/router/index.js @@ -8,6 +8,18 @@ import store from '../store'; // 引入 Vuex store Vue.use(VueRouter); const routes = [ + { + path:'/student/testPaperDetail', + name:'TestPaperDetail', + component: () => import(/* webpackChunkName: "about" */ '../views/Student/TestPaperDetail.vue'), + meta: { requiresAuth: true } + }, + { + path:'/student/scoreList', + name:'ScoreList', + component: () => import(/* webpackChunkName: "about" */ '../views/Student/ScoreList.vue'), + meta: { requiresAuth: true } + }, { path: '/student/examPaper', name: 'ExamPaper', diff --git a/vue2/vue/src/views/Student/Exam.vue b/vue2/vue/src/views/Student/Exam.vue index d3225f6..dcc2c2d 100644 --- a/vue2/vue/src/views/Student/Exam.vue +++ b/vue2/vue/src/views/Student/Exam.vue @@ -49,7 +49,20 @@

考试时长:{{ paper.time + " 分钟"}}

开始时间:{{ paper.startTime || "未设置" }}

结束时间:{{ paper.endTime || "未设置" }}

- + + @@ -80,7 +93,8 @@ export default { collapseBtnClass: 'el-icon-s-fold', isCollapse: false, sideWidth: 200, - logoTextShow: true + logoTextShow: true, + hasTaken:false }; }, computed: { @@ -114,18 +128,45 @@ export default { handleSubjectChange(subject) { this.selectedSubject = subject; // 修改选中的学科 }, + async checkExamStatus(testId) { + const token = this.$store.state.token; + + console.log('token',token); + if (!token) { + alert("用户未登录,请重新登录!"); + this.$router.push('/login'); + return false; + } + try { + const response = await axios.get(`http://localhost:8080/student/examPaper/whetherTest`, { + params: { testId }, + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + }); + if (response.status === 200) { + return response.data; // 假设返回的数据中包含 hasTaken 字段 + } else { + console.warn("检查考试状态失败:" + response.data.msg); + return false; // 默认未考 + } + } catch (error) { + console.error("检查考试状态接口失败:", error); + return false; + } + }, async fetchPapers(page = 1, size = 10) { + const token = this.$store.state.token; // 获取 token + console.log("token:",token); + if (!token) { + alert("用户未登录,请重新登录!"); + this.$router.push('/login'); // 引导用户重新登录 + return; + } try { this.loading = true; - const token = this.$store.state.token; // 获取 token - - if (!token) { - alert("用户未登录,请重新登录!"); - this.$router.push('/login'); // 引导用户重新登录 - return; - } - // 确保 page 和 size 参数是有效的 const pageNumber = page || 1; // 使用默认值 1 const pageSize = size || 10; // 使用默认值 10 @@ -144,19 +185,29 @@ export default { }); if (response.data.code === 200) { - const {records} = response.data.data; - this.papers = records.map((record) => ({ - name: record.name, - subject: record.subject, - questionCount: record.totalquestion, - totalScore: record.totalscore, - time: record.time, - startTime: record.start_time || "未设置", - endTime: record.end_time || "未设置", - })); - console.log("试卷数据:", this.papers); + const { records } = response.data.data; + + const updatedRecords = await Promise.all( + records.map(async (record) => { + const hasTaken = await this.checkExamStatus(record.id); + return { + id: record.id, + name: record.name, + subject: record.subject, + questionCount: record.totalquestion, + totalScore: record.totalscore, + time: record.time, + startTime: record.start_time || "未设置", + endTime: record.end_time || "未设置", + hasTaken: hasTaken, + }; + }) + ); + this.papers = updatedRecords; + console.log("更新后的试卷数据:", updatedRecords); } else { alert("数据加载失败:" + response.data.msg); + this.$router.push('/login'); // 引导用户重新登录 } } catch (error) { console.error("获取试卷数据失败:", error); @@ -165,11 +216,22 @@ export default { this.loading = false; } } - } + }, + }; diff --git a/vue2/vue/src/views/Student/TestPaperDetail.vue b/vue2/vue/src/views/Student/TestPaperDetail.vue new file mode 100644 index 0000000..9d2e527 --- /dev/null +++ b/vue2/vue/src/views/Student/TestPaperDetail.vue @@ -0,0 +1,281 @@ + + + + +