diff --git a/src/main/java/com/baobaot/exam/Controller/AdminController.java b/src/main/java/com/baobaot/exam/Controller/AdminController.java index 89374c2..bd8180d 100644 --- a/src/main/java/com/baobaot/exam/Controller/AdminController.java +++ b/src/main/java/com/baobaot/exam/Controller/AdminController.java @@ -5,10 +5,12 @@ import com.baobaot.exam.Service.makeExamService; import com.baobaot.exam.dao.examPaper; import com.baobaot.exam.dao.question; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -28,13 +30,34 @@ public class AdminController { @GetMapping("/admin/exam") public String adminPage(Model model) { - List questions = adminService.list(); - model.addAttribute("questions", questions); return "admin"; } + // API: 获取题目列表(支持全部、按类型、按分值) + @GetMapping("/admin/api/questions") + @ResponseBody + public ResponseEntity> getQuestions( + @RequestParam(required = false) Integer type, + @RequestParam(required = false) Integer score) { + Map result = new HashMap<>(); + List questions; + + if (type != null) { + questions = adminService.getQuestionsByType(type); + } else if (score != null) { + questions = adminService.getQuestionsByScore(score); + } else { + questions = adminService.list(); + } + + result.put("success", true); + result.put("data", questions); + return ResponseEntity.ok(result); + } + @PostMapping("/admin/add/choice") - public String addChoiceQuestion(@RequestParam String title, + @ResponseBody + public ResponseEntity> addChoiceQuestion(@RequestParam String title, @RequestParam Integer type, @RequestParam(required = false) String answer_a, @RequestParam(required = false) String answer_b, @@ -42,40 +65,50 @@ public class AdminController { @RequestParam(required = false) String answer_d, @RequestParam String r_answer, @RequestParam Integer score) { - adminService.addChoiceQuestion(title, type, answer_a, answer_b, answer_c, answer_d, r_answer, score); - return "redirect:/admin/exam"; + Map result = new HashMap<>(); + try { + adminService.addChoiceQuestion(title, type, answer_a, answer_b, answer_c, answer_d, r_answer, score); + result.put("success", true); + result.put("message", "添加成功"); + } catch (Exception e) { + result.put("success", false); + result.put("message", e.getMessage()); + } + return ResponseEntity.ok(result); } @PostMapping("/admin/add/essay") - public String addEssayQuestion(@RequestParam String title, + @ResponseBody + public ResponseEntity> addEssayQuestion(@RequestParam String title, @RequestParam Integer type, @RequestParam(required = false) String answer, @RequestParam(required = false) String r_answer, @RequestParam Integer score) { - adminService.addEssayQuestion(title, type, answer, r_answer, score); - return "redirect:/admin/exam"; - } - - @GetMapping("/admin/query/type") - public String queryByType(@RequestParam Integer type, Model model) { - List questions = adminService.getQuestionsByType(type); - model.addAttribute("questions", questions); - model.addAttribute("queryType", "类型: " + type); - return "admin"; - } - - @GetMapping("/admin/query/score") - public String queryByScore(@RequestParam Integer score, Model model) { - List questions = adminService.getQuestionsByScore(score); - model.addAttribute("questions", questions); - model.addAttribute("queryScore", "分数: " + score); - return "admin"; + Map result = new HashMap<>(); + try { + adminService.addEssayQuestion(title, type, answer, r_answer, score); + result.put("success", true); + result.put("message", "添加成功"); + } catch (Exception e) { + result.put("success", false); + result.put("message", e.getMessage()); + } + return ResponseEntity.ok(result); } @PostMapping("/admin/delete") - public String deleteByTitle(@RequestParam String title) { - adminService.deleteQuestionByTitle(title); - return "redirect:/admin/exam"; + @ResponseBody + public ResponseEntity> deleteByTitle(@RequestParam String title) { + Map result = new HashMap<>(); + try { + adminService.deleteQuestionByTitle(title); + result.put("success", true); + result.put("message", "删除成功"); + } catch (Exception e) { + result.put("success", false); + result.put("message", e.getMessage()); + } + return ResponseEntity.ok(result); } @GetMapping("/admin/mkexam") @@ -96,10 +129,85 @@ public class AdminController { } @GetMapping("/admin/listexam") - public String listExamPage(@RequestParam(required = false) String title, Model model) { - List examPapers = makeExamService.getExamList(title); - model.addAttribute("examPapers", examPapers); - model.addAttribute("searchTitle", title); + public String listExamPage() { return "listexam"; } + + // API: 获取试卷列表 + @GetMapping("/admin/api/exams") + @ResponseBody + public ResponseEntity> getExams(@RequestParam(required = false) String title) { + Map result = new HashMap<>(); + List examPapers = makeExamService.getExamList(title); + result.put("success", true); + result.put("data", examPapers); + return ResponseEntity.ok(result); + } + + // API: 根据ID获取题目详情 + @GetMapping("/admin/api/question/{id}") + @ResponseBody + public ResponseEntity> getQuestionById(@PathVariable Integer id) { + Map result = new HashMap<>(); + question q = adminService.getQuestionById(id); + if (q != null) { + result.put("success", true); + result.put("data", q); + } else { + result.put("success", false); + result.put("message", "题目不存在"); + } + return ResponseEntity.ok(result); + } + + // API: 更新题目 + @PostMapping("/admin/api/question/update") + @ResponseBody + public ResponseEntity> updateQuestion( + @RequestParam Integer id, + @RequestParam Integer type, + @RequestParam String title, + @RequestParam(required = false) String answerA, + @RequestParam(required = false) String answerB, + @RequestParam(required = false) String answerC, + @RequestParam(required = false) String answerD, + @RequestParam(required = false) String answer, + @RequestParam(required = false) String rAnswer, + @RequestParam Integer score) { + Map result = new HashMap<>(); + try { + question existing = adminService.getQuestionById(id); + if (existing == null) { + result.put("success", false); + result.put("message", "题目不存在"); + return ResponseEntity.ok(result); + } + + question.questionBuilder builder = question.builder() + .id(id) + .type(type) + .title(title) + .score(score) + .rAnswer(rAnswer); + + if (type == 1) { + // 选择题 + builder.answerA(answerA) + .answerB(answerB) + .answerC(answerC) + .answerD(answerD); + } else { + // 简答题 + builder.answer(answer); + } + + adminService.updateQuestion(builder.build()); + result.put("success", true); + result.put("message", "修改成功"); + } catch (Exception e) { + result.put("success", false); + result.put("message", e.getMessage()); + } + return ResponseEntity.ok(result); + } } diff --git a/src/main/java/com/baobaot/exam/Service/adminService.java b/src/main/java/com/baobaot/exam/Service/adminService.java index 1818899..03fa806 100644 --- a/src/main/java/com/baobaot/exam/Service/adminService.java +++ b/src/main/java/com/baobaot/exam/Service/adminService.java @@ -32,4 +32,14 @@ public interface adminService extends IService { * 根据标题删除题目 */ boolean deleteQuestionByTitle(String title); + + /** + * 根据ID查询题目 + */ + question getQuestionById(Integer id); + + /** + * 更新题目 + */ + boolean updateQuestion(question q); } diff --git a/src/main/java/com/baobaot/exam/Service/impl/CorrectServiceImpl.java b/src/main/java/com/baobaot/exam/Service/impl/CorrectServiceImpl.java index ada3b2b..8ede4a8 100644 --- a/src/main/java/com/baobaot/exam/Service/impl/CorrectServiceImpl.java +++ b/src/main/java/com/baobaot/exam/Service/impl/CorrectServiceImpl.java @@ -126,6 +126,10 @@ public class CorrectServiceImpl implements CorrectService { .autoCorrect(true) .autoScore(score) .isCorrect(isCorrect) + .answerA(q.getAnswerA()) + .answerB(q.getAnswerB()) + .answerC(q.getAnswerC()) + .answerD(q.getAnswerD()) .build(); detailItems.add(item); } diff --git a/src/main/java/com/baobaot/exam/Service/impl/adminServiceImpl.java b/src/main/java/com/baobaot/exam/Service/impl/adminServiceImpl.java index 0cfffa9..1e91159 100644 --- a/src/main/java/com/baobaot/exam/Service/impl/adminServiceImpl.java +++ b/src/main/java/com/baobaot/exam/Service/impl/adminServiceImpl.java @@ -60,4 +60,14 @@ public class adminServiceImpl extends ServiceImpl impl wrapper.eq(question::getTitle, title); return remove(wrapper); } + + @Override + public question getQuestionById(Integer id) { + return getById(id); + } + + @Override + public boolean updateQuestion(question q) { + return updateById(q); + } } diff --git a/src/main/java/com/baobaot/exam/dto/CorrectDetailItem.java b/src/main/java/com/baobaot/exam/dto/CorrectDetailItem.java index 9826d4d..369f0a5 100644 --- a/src/main/java/com/baobaot/exam/dto/CorrectDetailItem.java +++ b/src/main/java/com/baobaot/exam/dto/CorrectDetailItem.java @@ -63,4 +63,24 @@ public class CorrectDetailItem { * 是否正确(选择题) */ private Boolean isCorrect; + + /** + * 选项A(选择题) + */ + private String answerA; + + /** + * 选项B(选择题) + */ + private String answerB; + + /** + * 选项C(选择题) + */ + private String answerC; + + /** + * 选项D(选择题) + */ + private String answerD; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f58ac92..486ed1a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,8 +2,8 @@ spring: application: name: exam datasource: - url: jdbc:mysql://localhost:3306/exam -# url: jdbc:mysql://192.168.1.56:3306/exam?useSSL=true&requireSSL=true&serverTimezone=UTC +# url: jdbc:mysql://localhost:3306/exam + url: jdbc:mysql://192.168.1.56:3306/exam?useSSL=true&requireSSL=true&serverTimezone=UTC username: root password: 521707 driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/src/main/resources/templates/admin.html b/src/main/resources/templates/admin.html index 368791f..5307ffb 100644 --- a/src/main/resources/templates/admin.html +++ b/src/main/resources/templates/admin.html @@ -207,39 +207,39 @@

添加题目

- - + +
-
+
- +
- +
- +
- +
- +
- @@ -249,7 +249,7 @@
- +
@@ -257,23 +257,19 @@
-
+
- -
-
- - +
- +
- +
@@ -285,29 +281,29 @@

查询题目

-
+
-
- - + +
-
+
- +
- - + +
- 显示全部 + 创建试卷 查看试卷 批改试卷 @@ -318,64 +314,29 @@

题目列表 - - + + +

-
- - - -

暂无题目数据

+
+
+ + + +

加载中...

+
- - - - - - - - - - - - - - - - - - - - - - - - -
ID题目类型选项/学生答案正确答案分值操作
- 选择题 - 简答题 - -
-
-
-
- -
-
-
- - - - -
- - -
-
+ + + + + diff --git a/src/main/resources/templates/listexam.html b/src/main/resources/templates/listexam.html index 12bbe22..ea09052 100644 --- a/src/main/resources/templates/listexam.html +++ b/src/main/resources/templates/listexam.html @@ -239,42 +239,20 @@

试卷列表

-
+
- +
- - 重置 - - -
- 暂无试卷记录,点击上方"创建试卷"生成一份吧 + +
- - - - - - - - - - - - - - - - - -
IDUID试卷标题操作
-
- - 前往答题 -
-
+
+
+ 加载中... +
+
@@ -307,8 +285,124 @@
diff --git a/src/main/resources/templates/print.html b/src/main/resources/templates/print.html index 2974226..4554f2b 100644 --- a/src/main/resources/templates/print.html +++ b/src/main/resources/templates/print.html @@ -260,6 +260,25 @@
+ +
+
+ A. + +
+
+ B. + +
+
+ C. + +
+
+ D. + +
+
答案: