From 32d15a5fe2946d48a29148f828361b8fbfe65970 Mon Sep 17 00:00:00 2001 From: wangyong <2058152148@qq.com> Date: Sat, 14 Dec 2024 16:08:33 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B3=A8=E9=87=8Aentity=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E4=B8=8B=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/lsgwr/exam/entity/Action.java | 20 ++++++++--- .../main/java/lsgwr/exam/entity/Question.java | 35 ++++++++++++++++++- .../lsgwr/exam/entity/QuestionCategory.java | 16 ++++++--- .../java/lsgwr/exam/entity/QuestionLevel.java | 14 ++++++-- .../lsgwr/exam/entity/QuestionOption.java | 13 ++++++- .../java/lsgwr/exam/entity/QuestionType.java | 15 ++++++-- .../src/main/java/lsgwr/exam/entity/Role.java | 17 +++++++++ .../src/main/java/lsgwr/exam/entity/User.java | 31 +++++++++++++++- 8 files changed, 146 insertions(+), 15 deletions(-) diff --git a/backend/src/main/java/lsgwr/exam/entity/Action.java b/backend/src/main/java/lsgwr/exam/entity/Action.java index 2c9d1df..8fb8180 100644 --- a/backend/src/main/java/lsgwr/exam/entity/Action.java +++ b/backend/src/main/java/lsgwr/exam/entity/Action.java @@ -11,17 +11,29 @@ import lombok.Data; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; - +/** + * 动作实体类 + * 它记录了操作的相关信息,包括操作ID、操作名称、操作描述以及是否默认选中 + */ @Data @Entity public class Action { + /** + * 动作ID + */ @Id @GeneratedValue private Integer actionId; - + /** + * 动作名称 + */ private String actionName; - + /** + * 动作描述 + */ private String actionDescription; - + /** + * 是否默认选中 + */ private Boolean defaultCheck; } diff --git a/backend/src/main/java/lsgwr/exam/entity/Question.java b/backend/src/main/java/lsgwr/exam/entity/Question.java index 67adf0b..d2c050a 100644 --- a/backend/src/main/java/lsgwr/exam/entity/Question.java +++ b/backend/src/main/java/lsgwr/exam/entity/Question.java @@ -14,21 +14,54 @@ import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Entity; import javax.persistence.Id; import java.util.Date; - +/** + * 题目实体类,用于存储题目信息 + * 利用注解生成getter/setter方法 + */ @Data @Entity @DynamicUpdate public class Question { + /** + * 题目id + */ @Id private String questionId; + /** + * 题目名称 + */ private String questionName; + /** + * 题目分数 + */ private Integer questionScore; + /** + * 题目创建人id + */ private String questionCreatorId; + /** + * 题目难度id + */ private Integer questionLevelId; + /** + * 题目类型id + */ private Integer questionTypeId; + /** + * 题目分类id + */ private Integer questionCategoryId; + /** + * 题目描述 + */ private String questionDescription; + /** + * 题目选项id,用逗号隔开,例如:A,B,C,D + */ private String questionOptionIds; + /** + * 题目正确答案选项id,用逗号隔开,例如:A + */ private String questionAnswerOptionIds; /** * 创建时间, 设计表时设置了自动插入当前时间,无需在Java代码中设置了 diff --git a/backend/src/main/java/lsgwr/exam/entity/QuestionCategory.java b/backend/src/main/java/lsgwr/exam/entity/QuestionCategory.java index ca08f22..a68dfdd 100644 --- a/backend/src/main/java/lsgwr/exam/entity/QuestionCategory.java +++ b/backend/src/main/java/lsgwr/exam/entity/QuestionCategory.java @@ -13,19 +13,27 @@ import lombok.Data; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; - +/** + * 题目的类别表,从内容角度划分,比如数学、语文、英语等 + */ @Data @Entity public class QuestionCategory { - + /** + * 题目类别的id + */ @Id @GeneratedValue @JsonProperty("id") private Integer questionCategoryId; - + /** + * 题目类别的名称 + */ @JsonProperty("name") private String questionCategoryName; - + /** + * 题目类别的描述 + */ @JsonProperty("description") private String questionCategoryDescription; } diff --git a/backend/src/main/java/lsgwr/exam/entity/QuestionLevel.java b/backend/src/main/java/lsgwr/exam/entity/QuestionLevel.java index a056cbc..d0c0fcd 100644 --- a/backend/src/main/java/lsgwr/exam/entity/QuestionLevel.java +++ b/backend/src/main/java/lsgwr/exam/entity/QuestionLevel.java @@ -14,17 +14,27 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; +/** + * 题目难度等级实体类,用于表示题目的难度级别信息,如难、中、易等。 + */ @Entity @Data public class QuestionLevel { + /** + * 题目难度等级ID,自增 + */ @Id @GeneratedValue @JsonProperty("id") private Integer questionLevelId; - + /** + * 题目难度等级名称,如难、中、易等 + */ @JsonProperty("name") private String questionLevelName; - + /** + * 题目难度等级描述 + */ @JsonProperty("description") private String questionLevelDescription; } diff --git a/backend/src/main/java/lsgwr/exam/entity/QuestionOption.java b/backend/src/main/java/lsgwr/exam/entity/QuestionOption.java index 3c06ef7..fc29400 100644 --- a/backend/src/main/java/lsgwr/exam/entity/QuestionOption.java +++ b/backend/src/main/java/lsgwr/exam/entity/QuestionOption.java @@ -11,12 +11,23 @@ import lombok.Data; import javax.persistence.Entity; import javax.persistence.Id; - +/** + * 问题选项实体类 + */ @Data @Entity public class QuestionOption { + /** + * 选项的编号,如A、B、C、D + */ @Id private String questionOptionId; + /** + * 选项的内容 + */ private String questionOptionContent; + /** + * 选项的描述,提供关于选项的额外解释或说明 + */ private String questionOptionDescription; } diff --git a/backend/src/main/java/lsgwr/exam/entity/QuestionType.java b/backend/src/main/java/lsgwr/exam/entity/QuestionType.java index 46a4f55..602a7b1 100644 --- a/backend/src/main/java/lsgwr/exam/entity/QuestionType.java +++ b/backend/src/main/java/lsgwr/exam/entity/QuestionType.java @@ -14,17 +14,28 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; +/** + * QuestionType类代表了一个实体,用于在数据库中存储问题类型的信息。 + * 它包括问题类型的ID、名称和描述。 + */ @Data @Entity public class QuestionType { + /** + * 问题类型ID + */ @Id @GeneratedValue @JsonProperty("id") private Integer questionTypeId; - + /** + * 问题类型名称 + */ @JsonProperty("name") private String questionTypeName; - + /** + * 问题类型的描述 + */ @JsonProperty("description") private String questionTypeDescription; } diff --git a/backend/src/main/java/lsgwr/exam/entity/Role.java b/backend/src/main/java/lsgwr/exam/entity/Role.java index 31d529a..dbb7b8d 100644 --- a/backend/src/main/java/lsgwr/exam/entity/Role.java +++ b/backend/src/main/java/lsgwr/exam/entity/Role.java @@ -13,14 +13,31 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; +/** + * 角色实体类 + * 用于表示系统中的角色信息,包括角色的ID、名称、描述和详细信息等 + */ @Data @Entity public class Role { + /** + * 角色ID + * @Id标识为主键 + */ @Id @GeneratedValue private Integer roleId; + /** + * 角色名称 + */ private String roleName; + /** + * 角色描述 + */ private String roleDescription; + /** + * 角色详细信息 + */ private String roleDetail; /** * 角色所能访问的页面的主键集合(用-连接起来字符串) diff --git a/backend/src/main/java/lsgwr/exam/entity/User.java b/backend/src/main/java/lsgwr/exam/entity/User.java index 23875bc..417ce93 100644 --- a/backend/src/main/java/lsgwr/exam/entity/User.java +++ b/backend/src/main/java/lsgwr/exam/entity/User.java @@ -14,20 +14,49 @@ import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Entity; import javax.persistence.Id; import java.util.Date; - +/** + * 用户表,记录用户信息 + */ @Data @Entity @DynamicUpdate public class User { + /** + * 用户id,主键 + */ @Id private String userId; + /** + * 用户名,唯一 + */ private String userUsername; + /** + * 昵称 + */ private String userNickname; + /** + * 密码 + */ private String userPassword; + /** + * 角色id + */ private Integer userRoleId; + /** + * 头像 + */ private String userAvatar; + /** + * 描述 + */ private String userDescription; + /** + * 邮箱 + */ private String userEmail; + /** + * 电话 + */ private String userPhone; /** * 创建时间, 设计表时设置了自动插入当前时间,无需在Java代码中设置了 -- 2.34.1 From a7286df9fc28d6f5623e11f90e8c063ed2f874c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=8B=87?= <2058152148@qq.com> Date: Sat, 14 Dec 2024 20:30:09 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/lsgwr/exam/qo/DownloadQo.java | 3 ++ .../lsgwr/exam/repository/PageRepository.java | 4 ++- .../QuestionCategoryRepository.java | 4 ++- .../repository/QuestionLevelRepository.java | 4 ++- .../repository/QuestionOptionRepository.java | 4 ++- .../exam/repository/QuestionRepository.java | 4 ++- .../repository/QuestionTypeRepository.java | 4 ++- .../lsgwr/exam/repository/RoleRepository.java | 3 ++ .../lsgwr/exam/repository/UserRepository.java | 4 ++- .../exam/service/impl/UserServiceImpl.java | 21 +++++++++-- .../java/lsgwr/exam/utils/ResultVOUtil.java | 20 ++++++++--- .../src/main/java/lsgwr/exam/vo/ActionVo.java | 15 ++++++-- .../src/main/java/lsgwr/exam/vo/JsonData.java | 4 ++- .../src/main/java/lsgwr/exam/vo/PageVo.java | 15 ++++++-- .../exam/vo/QuestionCreateSimplifyVo.java | 4 ++- .../java/lsgwr/exam/vo/QuestionCreateVo.java | 4 ++- .../java/lsgwr/exam/vo/QuestionDetailVo.java | 4 ++- .../lsgwr/exam/vo/QuestionOptionCreateVo.java | 4 ++- .../java/lsgwr/exam/vo/QuestionOptionVo.java | 19 +++++++--- .../java/lsgwr/exam/vo/QuestionPageVo.java | 4 ++- .../lsgwr/exam/vo/QuestionSelectionVo.java | 15 ++++++-- .../main/java/lsgwr/exam/vo/QuestionVo.java | 15 ++++++-- .../java/lsgwr/exam/vo/RecordDetailVo.java | 4 ++- .../src/main/java/lsgwr/exam/vo/ResultVO.java | 7 +++- .../src/main/java/lsgwr/exam/vo/RoleVo.java | 19 +++++++--- .../main/java/lsgwr/exam/vo/UserInfoVo.java | 20 ++++++++--- .../src/main/java/lsgwr/exam/vo/UserVo.java | 35 ++++++++++++++----- 27 files changed, 207 insertions(+), 56 deletions(-) diff --git a/backend/src/main/java/lsgwr/exam/qo/DownloadQo.java b/backend/src/main/java/lsgwr/exam/qo/DownloadQo.java index cc7ac8c..9c58ff9 100644 --- a/backend/src/main/java/lsgwr/exam/qo/DownloadQo.java +++ b/backend/src/main/java/lsgwr/exam/qo/DownloadQo.java @@ -13,5 +13,8 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class DownloadQo { + /** + * 文件路径 + */ String path; } diff --git a/backend/src/main/java/lsgwr/exam/repository/PageRepository.java b/backend/src/main/java/lsgwr/exam/repository/PageRepository.java index 6fe86e3..4f62838 100644 --- a/backend/src/main/java/lsgwr/exam/repository/PageRepository.java +++ b/backend/src/main/java/lsgwr/exam/repository/PageRepository.java @@ -8,6 +8,8 @@ package lsgwr.exam.repository; import lsgwr.exam.entity.Page; import org.springframework.data.jpa.repository.JpaRepository; - +/** + * 页面数据库操作类 + */ public interface PageRepository extends JpaRepository { } diff --git a/backend/src/main/java/lsgwr/exam/repository/QuestionCategoryRepository.java b/backend/src/main/java/lsgwr/exam/repository/QuestionCategoryRepository.java index 8182ade..843df45 100644 --- a/backend/src/main/java/lsgwr/exam/repository/QuestionCategoryRepository.java +++ b/backend/src/main/java/lsgwr/exam/repository/QuestionCategoryRepository.java @@ -8,6 +8,8 @@ package lsgwr.exam.repository; import lsgwr.exam.entity.QuestionCategory; import org.springframework.data.jpa.repository.JpaRepository; - +/** + * 题目分类持久层接口 + */ public interface QuestionCategoryRepository extends JpaRepository { } diff --git a/backend/src/main/java/lsgwr/exam/repository/QuestionLevelRepository.java b/backend/src/main/java/lsgwr/exam/repository/QuestionLevelRepository.java index 69af582..b4f0083 100644 --- a/backend/src/main/java/lsgwr/exam/repository/QuestionLevelRepository.java +++ b/backend/src/main/java/lsgwr/exam/repository/QuestionLevelRepository.java @@ -8,6 +8,8 @@ package lsgwr.exam.repository; import lsgwr.exam.entity.QuestionLevel; import org.springframework.data.jpa.repository.JpaRepository; - +/** + * 题目难度的持久层接口 + */ public interface QuestionLevelRepository extends JpaRepository { } diff --git a/backend/src/main/java/lsgwr/exam/repository/QuestionOptionRepository.java b/backend/src/main/java/lsgwr/exam/repository/QuestionOptionRepository.java index 7afb1d9..af2f2b3 100644 --- a/backend/src/main/java/lsgwr/exam/repository/QuestionOptionRepository.java +++ b/backend/src/main/java/lsgwr/exam/repository/QuestionOptionRepository.java @@ -8,6 +8,8 @@ package lsgwr.exam.repository; import lsgwr.exam.entity.QuestionOption; import org.springframework.data.jpa.repository.JpaRepository; - +/** + * 题目选项的持久层接口 + */ public interface QuestionOptionRepository extends JpaRepository { } diff --git a/backend/src/main/java/lsgwr/exam/repository/QuestionRepository.java b/backend/src/main/java/lsgwr/exam/repository/QuestionRepository.java index 97b9260..8234d7d 100644 --- a/backend/src/main/java/lsgwr/exam/repository/QuestionRepository.java +++ b/backend/src/main/java/lsgwr/exam/repository/QuestionRepository.java @@ -11,7 +11,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import java.util.List; - +/** + * 题目接口 + */ public interface QuestionRepository extends JpaRepository { List findByQuestionTypeId(Integer id); @Query("select q from Question q order by q.updateTime desc") diff --git a/backend/src/main/java/lsgwr/exam/repository/QuestionTypeRepository.java b/backend/src/main/java/lsgwr/exam/repository/QuestionTypeRepository.java index acdee52..218106b 100644 --- a/backend/src/main/java/lsgwr/exam/repository/QuestionTypeRepository.java +++ b/backend/src/main/java/lsgwr/exam/repository/QuestionTypeRepository.java @@ -8,6 +8,8 @@ package lsgwr.exam.repository; import lsgwr.exam.entity.QuestionType; import org.springframework.data.jpa.repository.JpaRepository; - +/** + * 题目类型接口 + */ public interface QuestionTypeRepository extends JpaRepository { } diff --git a/backend/src/main/java/lsgwr/exam/repository/RoleRepository.java b/backend/src/main/java/lsgwr/exam/repository/RoleRepository.java index 90e59de..6a07451 100644 --- a/backend/src/main/java/lsgwr/exam/repository/RoleRepository.java +++ b/backend/src/main/java/lsgwr/exam/repository/RoleRepository.java @@ -9,5 +9,8 @@ package lsgwr.exam.repository; import lsgwr.exam.entity.Role; import org.springframework.data.jpa.repository.JpaRepository; +/** + * 角色的数据库操作类 + */ public interface RoleRepository extends JpaRepository { } diff --git a/backend/src/main/java/lsgwr/exam/repository/UserRepository.java b/backend/src/main/java/lsgwr/exam/repository/UserRepository.java index 27ab9ff..8ac4852 100644 --- a/backend/src/main/java/lsgwr/exam/repository/UserRepository.java +++ b/backend/src/main/java/lsgwr/exam/repository/UserRepository.java @@ -8,7 +8,9 @@ package lsgwr.exam.repository; import lsgwr.exam.entity.User; import org.springframework.data.jpa.repository.JpaRepository; - +/** + * 用户表的操作类 + */ public interface UserRepository extends JpaRepository { /** * 根据用户名查找到合适的用户 diff --git a/backend/src/main/java/lsgwr/exam/service/impl/UserServiceImpl.java b/backend/src/main/java/lsgwr/exam/service/impl/UserServiceImpl.java index 3799580..2dc8e38 100644 --- a/backend/src/main/java/lsgwr/exam/service/impl/UserServiceImpl.java +++ b/backend/src/main/java/lsgwr/exam/service/impl/UserServiceImpl.java @@ -47,7 +47,12 @@ public class UserServiceImpl implements UserService { @Autowired ActionRepository actionRepository; - + /** + * 注册用户 + * + * @param registerDTO 前端传来的注册信息 + * @return 注册成功返回用户信息,失败返回null + */ @Override public User register(RegisterDTO registerDTO) { try { @@ -106,7 +111,12 @@ public class UserServiceImpl implements UserService { } return null; } - + /** + * 获取用户信息 + * + * @param userId 用户id + * @return 用户信息 + */ @Override public UserVo getUserInfo(String userId) { User user = userRepository.findById(userId).orElse(null); @@ -115,7 +125,12 @@ public class UserServiceImpl implements UserService { BeanUtils.copyProperties(user, userVo); return userVo; } - + /** + * 获取用户详细信息 + * + * @param userId 用户id + * @return 用户详细信息 + */ @Override public UserInfoVo getInfo(String userId) { User user = userRepository.findById(userId).orElse(null); diff --git a/backend/src/main/java/lsgwr/exam/utils/ResultVOUtil.java b/backend/src/main/java/lsgwr/exam/utils/ResultVOUtil.java index fbd6df1..0694dde 100644 --- a/backend/src/main/java/lsgwr/exam/utils/ResultVOUtil.java +++ b/backend/src/main/java/lsgwr/exam/utils/ResultVOUtil.java @@ -7,22 +7,32 @@ package lsgwr.exam.utils; import lsgwr.exam.vo.ResultVO; - +/** + * 封装返回结果 + */ public class ResultVOUtil { - + /** + * 成功返回结果 + */ public static ResultVO success(Integer code, String msg, Object object) { return new ResultVO(code, msg, object); } - + /** + * 成功返回结果 + */ public static ResultVO success(Object object) { return new ResultVO(0, "成功", object); } - + /** + * 成功返回结果 + */ public static ResultVO success() { return new ResultVO(0, "成功", null); } - + /** + * 失败返回结果 + */ public static ResultVO error(Integer code, String msg) { return new ResultVO(code, msg, null); } diff --git a/backend/src/main/java/lsgwr/exam/vo/ActionVo.java b/backend/src/main/java/lsgwr/exam/vo/ActionVo.java index 98b2a63..283ad72 100644 --- a/backend/src/main/java/lsgwr/exam/vo/ActionVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/ActionVo.java @@ -8,15 +8,24 @@ package lsgwr.exam.vo; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; - +/** + * Action前端展示类 + */ @Data public class ActionVo { + /** + * 动作名称 + */ @JsonProperty("action") private String actionName; - + /** + * 动作描述 + */ @JsonProperty("describe") private String actionDescription; - + /** + * 是否默认选中 + */ @JsonProperty("defaultCheck") private Boolean defaultCheck; } diff --git a/backend/src/main/java/lsgwr/exam/vo/JsonData.java b/backend/src/main/java/lsgwr/exam/vo/JsonData.java index 9fd3ecd..b9823d4 100644 --- a/backend/src/main/java/lsgwr/exam/vo/JsonData.java +++ b/backend/src/main/java/lsgwr/exam/vo/JsonData.java @@ -16,7 +16,9 @@ import java.io.Serializable; @AllArgsConstructor @NoArgsConstructor public class JsonData implements Serializable { - + /** + * 序列化id + */ private static final long serialVersionUID = 1L; /** diff --git a/backend/src/main/java/lsgwr/exam/vo/PageVo.java b/backend/src/main/java/lsgwr/exam/vo/PageVo.java index 604abc3..45e88d4 100644 --- a/backend/src/main/java/lsgwr/exam/vo/PageVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/PageVo.java @@ -10,15 +10,24 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.List; - +/** + * 页面展示类 + */ @Data public class PageVo { + /** + * 页面动作集合 + */ @JsonProperty("actionEntitySet") private List actionVoList; - + /** + * 页面名称,即路由名称 + */ @JsonProperty("permissionId") private String pageName; - + /** + * 页面描述,即路由描述 + */ @JsonProperty("permissionName") private String pageDescription; } diff --git a/backend/src/main/java/lsgwr/exam/vo/QuestionCreateSimplifyVo.java b/backend/src/main/java/lsgwr/exam/vo/QuestionCreateSimplifyVo.java index 8eba970..9ddecf3 100644 --- a/backend/src/main/java/lsgwr/exam/vo/QuestionCreateSimplifyVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/QuestionCreateSimplifyVo.java @@ -10,7 +10,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.List; - +/** + * 问题创建的实体类,简化了下 + */ @Data public class QuestionCreateSimplifyVo { /** diff --git a/backend/src/main/java/lsgwr/exam/vo/QuestionCreateVo.java b/backend/src/main/java/lsgwr/exam/vo/QuestionCreateVo.java index b565a2e..04e2f52 100644 --- a/backend/src/main/java/lsgwr/exam/vo/QuestionCreateVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/QuestionCreateVo.java @@ -10,7 +10,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.List; - +/** + * 创建问题的实体类 + */ @Data public class QuestionCreateVo { /** diff --git a/backend/src/main/java/lsgwr/exam/vo/QuestionDetailVo.java b/backend/src/main/java/lsgwr/exam/vo/QuestionDetailVo.java index d6c6fae..85ae017 100644 --- a/backend/src/main/java/lsgwr/exam/vo/QuestionDetailVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/QuestionDetailVo.java @@ -11,7 +11,9 @@ import lombok.Data; import java.util.ArrayList; import java.util.List; - +/** + * 问题详情的实体类 + */ @Data public class QuestionDetailVo { /** diff --git a/backend/src/main/java/lsgwr/exam/vo/QuestionOptionCreateVo.java b/backend/src/main/java/lsgwr/exam/vo/QuestionOptionCreateVo.java index 470088e..75f608e 100644 --- a/backend/src/main/java/lsgwr/exam/vo/QuestionOptionCreateVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/QuestionOptionCreateVo.java @@ -8,7 +8,9 @@ package lsgwr.exam.vo; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; - +/** + * 问题选项的外层对象 + */ @Data public class QuestionOptionCreateVo { diff --git a/backend/src/main/java/lsgwr/exam/vo/QuestionOptionVo.java b/backend/src/main/java/lsgwr/exam/vo/QuestionOptionVo.java index 58cc32a..f7e94f6 100644 --- a/backend/src/main/java/lsgwr/exam/vo/QuestionOptionVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/QuestionOptionVo.java @@ -8,18 +8,29 @@ package lsgwr.exam.vo; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; - +/** + * 问题选项的自定义实体类 + */ @Data public class QuestionOptionVo { + /** + * 问题选项的id + */ @JsonProperty("id") private String questionOptionId; - + /** + * 问题选项的内容 + */ @JsonProperty("content") private String questionOptionContent; - + /** + * 问题选项是否是答案 + */ @JsonProperty("answer") private Boolean answer = false; - + /** + * 问题选项的描述 + */ @JsonProperty("description") private String questionOptionDescription; } diff --git a/backend/src/main/java/lsgwr/exam/vo/QuestionPageVo.java b/backend/src/main/java/lsgwr/exam/vo/QuestionPageVo.java index 17ed650..fcc8678 100644 --- a/backend/src/main/java/lsgwr/exam/vo/QuestionPageVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/QuestionPageVo.java @@ -10,7 +10,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.List; - +/** + * 问题列表反馈给前端的对象 + */ @Data public class QuestionPageVo { diff --git a/backend/src/main/java/lsgwr/exam/vo/QuestionSelectionVo.java b/backend/src/main/java/lsgwr/exam/vo/QuestionSelectionVo.java index dfdbf93..423da6f 100644 --- a/backend/src/main/java/lsgwr/exam/vo/QuestionSelectionVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/QuestionSelectionVo.java @@ -13,15 +13,24 @@ import lsgwr.exam.entity.QuestionType; import lombok.Data; import java.util.List; - +/** + * 前端创建问题时的下拉列表选择 + */ @Data public class QuestionSelectionVo { + /** + * 问题类型 + */ @JsonProperty("types") private List questionTypeList; - + /** + * 问题分类 + */ @JsonProperty("categories") private List questionCategoryList; - + /** + * 问题难度 + */ @JsonProperty("levels") private List questionLevelList; } diff --git a/backend/src/main/java/lsgwr/exam/vo/QuestionVo.java b/backend/src/main/java/lsgwr/exam/vo/QuestionVo.java index 5ce1744..e2e9016 100644 --- a/backend/src/main/java/lsgwr/exam/vo/QuestionVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/QuestionVo.java @@ -12,15 +12,24 @@ import lombok.Data; import java.util.Date; import java.util.List; - +/** + * 问题的VO类,用于返回给前端 + */ @Data public class QuestionVo { + /** + * 问题id,从数据库表question中获取 + */ @JsonProperty("id") private String questionId; - + /** + * 问题名称,从数据库表question中获取 + */ @JsonProperty("name") private String questionName; - + /** + * 问题分值,从数据库表question中获取 + */ @JsonProperty("score") private Integer questionScore; diff --git a/backend/src/main/java/lsgwr/exam/vo/RecordDetailVo.java b/backend/src/main/java/lsgwr/exam/vo/RecordDetailVo.java index 21501dc..0605de7 100644 --- a/backend/src/main/java/lsgwr/exam/vo/RecordDetailVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/RecordDetailVo.java @@ -11,7 +11,9 @@ import lombok.Data; import java.util.HashMap; import java.util.List; - +/** + * 考试记录详情的VO + */ @Data public class RecordDetailVo { /** diff --git a/backend/src/main/java/lsgwr/exam/vo/ResultVO.java b/backend/src/main/java/lsgwr/exam/vo/ResultVO.java index 12aa1bb..ec106d8 100644 --- a/backend/src/main/java/lsgwr/exam/vo/ResultVO.java +++ b/backend/src/main/java/lsgwr/exam/vo/ResultVO.java @@ -13,7 +13,12 @@ import lombok.Data; @JsonInclude(JsonInclude.Include.NON_NULL) // 避免返回NULL的字段 public class ResultVO { - + /** + * 构造函数 + * @param code 错误码 + * @param msg 提示信息 + * @param data 具体内容 + */ public ResultVO(Integer code, String msg, T data) { this.code = code; this.msg = msg; diff --git a/backend/src/main/java/lsgwr/exam/vo/RoleVo.java b/backend/src/main/java/lsgwr/exam/vo/RoleVo.java index 11ddba1..cec7e63 100644 --- a/backend/src/main/java/lsgwr/exam/vo/RoleVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/RoleVo.java @@ -10,18 +10,29 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.List; - +/** + * 角色的VO类 + */ @Data public class RoleVo { + /** + * 角色名 + */ @JsonProperty("id") private String roleName; - + /** + * 角色描述 + */ @JsonProperty("name") private String roleDescription; - + /** + * 角色的详细描述 + */ @JsonProperty("describe") private String roleDetail; - + /** + * 角色所拥有的权限 + */ @JsonProperty("permissions") private List pageVoList; } diff --git a/backend/src/main/java/lsgwr/exam/vo/UserInfoVo.java b/backend/src/main/java/lsgwr/exam/vo/UserInfoVo.java index 4bb6c6f..ea096ae 100644 --- a/backend/src/main/java/lsgwr/exam/vo/UserInfoVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/UserInfoVo.java @@ -8,19 +8,29 @@ package lsgwr.exam.vo; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; - +/** + * 用户信息展示类 + */ @Data public class UserInfoVo { - + /** + * 用户ID,唯一 + */ @JsonProperty("id") private String userId; - + /** + * 头像URL + */ @JsonProperty("avatar") private String userAvatar; - + /** + * 用户名,唯一 + */ @JsonProperty("name") private String userNickname; - + /** + * 账号,唯一 + */ @JsonProperty("username") private String userUsername; diff --git a/backend/src/main/java/lsgwr/exam/vo/UserVo.java b/backend/src/main/java/lsgwr/exam/vo/UserVo.java index 056b93c..068d78e 100644 --- a/backend/src/main/java/lsgwr/exam/vo/UserVo.java +++ b/backend/src/main/java/lsgwr/exam/vo/UserVo.java @@ -8,30 +8,49 @@ package lsgwr.exam.vo; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; - +/** + * 用户信息展示类 + */ @Data public class UserVo { + /** + * 用户ID + */ @JsonProperty("id") private String userId; - + /** + * 用户名 + */ @JsonProperty("username") private String userUsername; - + /** + * 昵称 + */ @JsonProperty("nickname") private String userNickname; - + /** + * 角色ID + */ @JsonProperty("role") private Integer userRoleId; - + /** + * 头像 + */ @JsonProperty("avatar") private String userAvatar; - + /** + * 个人简介 + */ @JsonProperty("description") private String userDescription; - + /** + * 邮箱 + */ @JsonProperty("email") private String userEmail; - + /** + * 电话 + */ @JsonProperty("phone") private String userPhone; } -- 2.34.1 From ab46dd349a95980a5467eee88021a5bfb7ecba5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=8B=87?= <2058152148@qq.com> Date: Sat, 14 Dec 2024 22:12:55 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9src=E4=B8=8B=E7=9A=84?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E4=B8=AA=E5=AD=90=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/public/index.html | 80 ++++++++++++++++++- frontend/public/loading/loading.css | 53 +++++++++++- frontend/public/loading/loading.html | 28 ++++++- .../loading/option2/html_code_segment.html | 28 ++++++- frontend/public/loading/option2/loading.css | 21 ++++- frontend/src/api/exam.js | 68 ++++++++++++++++ frontend/src/api/index.js | 4 + frontend/src/api/login.js | 15 +++- frontend/src/api/user.js | 4 +- .../components/Exception/ExceptionPage.vue | 14 +++- frontend/src/components/Exception/type.js | 10 ++- .../components/GlobalFooter/GlobalFooter.vue | 11 ++- .../components/GlobalHeader/GlobalHeader.vue | 21 ++++- frontend/src/components/Menu/SideMenu.vue | 5 +- frontend/src/components/MultiTab/MultiTab.vue | 39 ++++++++- .../src/components/PageHeader/PageHeader.vue | 21 ++++- frontend/src/components/Result/Result.vue | 14 +++- .../components/SettingDrawer/SettingItem.vue | 14 +++- .../StandardFormRow/StandardFormRow.vue | 21 +++-- frontend/src/components/tools/Breadcrumb.vue | 14 +++- frontend/src/components/tools/HeadInfo.vue | 7 +- frontend/src/components/tools/Logo.vue | 10 ++- frontend/src/components/tools/UserMenu.vue | 11 +++ 23 files changed, 479 insertions(+), 34 deletions(-) diff --git a/frontend/public/index.html b/frontend/public/index.html index fd87ff4..0a9f41a 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -6,13 +6,91 @@ 在线考试系统 - + + + +
+
diff --git a/frontend/public/loading/loading.css b/frontend/public/loading/loading.css index a899eac..e06ac36 100644 --- a/frontend/public/loading/loading.css +++ b/frontend/public/loading/loading.css @@ -1 +1,52 @@ -#preloadingAnimation{position:fixed;left:0;top:0;height:100%;width:100%;background:#ffffff;user-select:none;z-index: 9999;overflow: hidden}.lds-roller{display:inline-block;position:relative;left:50%;top:50%;transform:translate(-50%,-50%);width:64px;height:64px;}.lds-roller div{animation:lds-roller 1.2s cubic-bezier(0.5,0,0.5,1) infinite;transform-origin:32px 32px;}.lds-roller div:after{content:" ";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#13c2c2;margin:-3px 0 0 -3px;}.lds-roller div:nth-child(1){animation-delay:-0.036s;}.lds-roller div:nth-child(1):after{top:50px;left:50px;}.lds-roller div:nth-child(2){animation-delay:-0.072s;}.lds-roller div:nth-child(2):after{top:54px;left:45px;}.lds-roller div:nth-child(3){animation-delay:-0.108s;}.lds-roller div:nth-child(3):after{top:57px;left:39px;}.lds-roller div:nth-child(4){animation-delay:-0.144s;}.lds-roller div:nth-child(4):after{top:58px;left:32px;}.lds-roller div:nth-child(5){animation-delay:-0.18s;}.lds-roller div:nth-child(5):after{top:57px;left:25px;}.lds-roller div:nth-child(6){animation-delay:-0.216s;}.lds-roller div:nth-child(6):after{top:54px;left:19px;}.lds-roller div:nth-child(7){animation-delay:-0.252s;}.lds-roller div:nth-child(7):after{top:50px;left:14px;}.lds-roller div:nth-child(8){animation-delay:-0.288s;}.lds-roller div:nth-child(8):after{top:45px;left:10px;}#preloadingAnimation .load-tips{color: #13c2c2;font-size:2rem;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin-top:80px;text-align:center;width:400px;height:64px;} @keyframes lds-roller{0%{transform:rotate(0deg);} 100%{transform:rotate(360deg);}} \ No newline at end of file +#preloadingAnimation{ + position:fixed;left:0;top:0;height:100%;width:100%;background:#ffffff;user-select:none; + z-index: 9999;overflow: hidden} +.lds-roller{ + display:inline-block; + position:relative; + left:50%; + top:50%; + transform:translate(-50%,-50%); + width:64px; + height:64px; +} +.lds-roller div{ + animation:lds-roller 1.2s cubic-bezier(0.5,0,0.5,1) infinite; + transform-origin:32px 32px; +} +.lds-roller div:after{ + content:" "; + display:block; + position:absolute; + width:6px; + height:6px; + border-radius:50%; + background:#13c2c2; + margin:-3px 0 0 -3px; +} +.lds-roller div:nth-child(1){animation-delay:-0.036s;} +.lds-roller div:nth-child(1):after{top:50px;left:50px;} +.lds-roller div:nth-child(2){animation-delay:-0.072s;} +.lds-roller div:nth-child(2):after{top:54px;left:45px;} +.lds-roller div:nth-child(3){animation-delay:-0.108s;} +.lds-roller div:nth-child(3):after{top:57px;left:39px;} +.lds-roller div:nth-child(4){animation-delay:-0.144s;} +.lds-roller div:nth-child(4):after{top:58px;left:32px;} +.lds-roller div:nth-child(5){animation-delay:-0.18s;} +.lds-roller div:nth-child(5):after{top:57px;left:25px;} +.lds-roller div:nth-child(6){animation-delay:-0.216s;} +.lds-roller div:nth-child(6):after{top:54px;left:19px;} +.lds-roller div:nth-child(7){animation-delay:-0.252s;} +.lds-roller div:nth-child(7):after{top:50px;left:14px;} +.lds-roller div:nth-child(8){animation-delay:-0.288s;} +.lds-roller div:nth-child(8):after{top:45px;left:10px;} +#preloadingAnimation .load-tips{ + color: #13c2c2; + font-size:2rem; + position:absolute; + left:50%; + top:50%; + transform:translate(-50%,-50%);margin-top:80px; + text-align:center;width:400px;height:64px;} +@keyframes lds-roller{0%{transform:rotate(0deg);} + 100%{transform:rotate(360deg);}} \ No newline at end of file diff --git a/frontend/public/loading/loading.html b/frontend/public/loading/loading.html index 9b93196..1d51177 100644 --- a/frontend/public/loading/loading.html +++ b/frontend/public/loading/loading.html @@ -1 +1,27 @@ -
Loading
\ No newline at end of file +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
Loading
+
\ No newline at end of file diff --git a/frontend/public/loading/option2/html_code_segment.html b/frontend/public/loading/option2/html_code_segment.html index df81b26..fc874e3 100644 --- a/frontend/public/loading/option2/html_code_segment.html +++ b/frontend/public/loading/option2/html_code_segment.html @@ -1,5 +1,31 @@ +/** + * 预加载动画 + */
+
- + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/frontend/public/loading/option2/loading.css b/frontend/public/loading/option2/loading.css index c35cd73..4486a8a 100644 --- a/frontend/public/loading/option2/loading.css +++ b/frontend/public/loading/option2/loading.css @@ -1 +1,20 @@ -.preloading-animate{background:#ffffff;width:100%;height:100%;position:fixed;left:0;top:0;z-index:299;}.preloading-animate .preloading-wrapper{position:absolute;width:5rem;height:5rem;left:50%;top:50%;transform:translate(-50%,-50%);}.preloading-animate .preloading-wrapper .preloading-balls{font-size:5rem;} \ No newline at end of file +.preloading-animate{ + background:#ffffff; + width:100%; + height:100%; + position:fixed; + left:0; + top:0; + z-index:299; +} +.preloading-animate .preloading-wrapper{ + position:absolute; + width:5rem; + height:5rem; + left:50%; + top:50%; + transform:translate(-50%,-50%); +} +.preloading-animate .preloading-wrapper .preloading-balls{ + font-size:5rem; +} \ No newline at end of file diff --git a/frontend/src/api/exam.js b/frontend/src/api/exam.js index c6d98b5..d954c27 100644 --- a/frontend/src/api/exam.js +++ b/frontend/src/api/exam.js @@ -3,6 +3,11 @@ import api from './index' import { axios } from '../utils/request' +/** + * 获取问题列表 + * @param parameter + * @returns {AxiosPromise} + */ export function getQuestionList (parameter) { return axios({ url: api.ExamQuestionList, @@ -11,6 +16,10 @@ export function getQuestionList (parameter) { }) } +/** + * 获取所有问题 + * @returns {AxiosPromise} + */ export function getQuestionAll () { return axios({ url: api.ExamQuestionAll, @@ -18,6 +27,11 @@ export function getQuestionAll () { }) } +/** + * 更新问题 + * @param parameter + * @returns {AxiosPromise} + */ export function questionUpdate (parameter) { console.log(parameter) return axios({ @@ -27,6 +41,10 @@ export function questionUpdate (parameter) { }) } +/** + * 获取问题选项 + * @returns {AxiosPromise} + */ export function getQuestionSelection () { return axios({ url: api.ExamQuestionSelection, @@ -37,6 +55,11 @@ export function getQuestionSelection () { }) } +/** + * 创建问题 + * @param parameter + * @returns {AxiosPromise} + */ export function questionCreate (parameter) { console.log(parameter) return axios({ @@ -46,6 +69,11 @@ export function questionCreate (parameter) { }) } +/** + * 获取考试列表 + * @param parameter + * @returns {AxiosPromise} + */ export function getExamList (parameter) { return axios({ url: api.ExamList, @@ -54,6 +82,10 @@ export function getExamList (parameter) { }) } +/** + * 获取所有考试 + * @returns {AxiosPromise} + */ export function getExamAll () { return axios({ url: api.ExamAll, @@ -72,6 +104,11 @@ export function getExamQuestionTypeList () { }) } +/** + * 获取考试卡片列表 + * @returns {AxiosPromise} + */ + export function getExamCardList () { return axios({ url: api.ExamCardList, @@ -82,6 +119,11 @@ export function getExamCardList () { }) } +/** + * 创建考试 + * @param parameter + * @returns {AxiosPromise} + */ export function examCreate (parameter) { console.log(parameter) return axios({ @@ -100,6 +142,11 @@ export function examUpdate (parameter) { }) } +/** + * 获取考试详情 + * @param examId + * @returns {AxiosPromise} + */ export function getExamDetail (examId) { return axios({ url: api.ExamDetail + examId, @@ -110,6 +157,11 @@ export function getExamDetail (examId) { }) } +/** + * 获取考试记录详情 + * @param recordId + * @returns {AxiosPromise} + */ export function getExamRecordDetail (recordId) { return axios({ url: api.recordDetail + recordId, @@ -120,6 +172,11 @@ export function getExamRecordDetail (recordId) { }) } +/** + * 获取考试问题详情 + * @param questionId + * @returns {AxiosPromise} + */ export function getQuestionDetail (questionId) { return axios({ url: api.QuestionDetail + questionId, @@ -130,6 +187,13 @@ export function getQuestionDetail (questionId) { }) } +/** + * 完成考试 + * @param examId + * @param answersMap + * @returns {AxiosPromise} + */ + export function finishExam (examId, answersMap) { console.log(answersMap) return axios({ @@ -142,6 +206,10 @@ export function finishExam (examId, answersMap) { }) } +/** + * 获取考试记录列表 + * @returns {AxiosPromise} + */ export function getExamRecordList () { return axios({ url: api.ExamRecordList, diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js index 05423bf..32bdb54 100644 --- a/frontend/src/api/index.js +++ b/frontend/src/api/index.js @@ -1,3 +1,7 @@ +/** + * api接口列表 + * @type {{ExamQuestionList: string, SendSmsErr: string, ExamCardList: string, UserInfo: string, UserRegister: string, ExamRecordList: string, ExamQuestionCreate: string, Logout: string, ExamCreate: string, ExamQuestionAll: string, FinishExam: string, UserLogin: string, ForgePassword: string, ExamQuestionTypeList: string, SendSms: string, Login: string, twoStepCode: string, QuestionDetail: string, recordDetail: string, Register: string, ExamUpdate: string, ExamDetail: string, ExamQuestionSelection: string, ExamList: string, ExamQuestionUpdate: string, ExamAll: string}} + */ const api = { Login: '/auth/login', Logout: '/auth/logout', diff --git a/frontend/src/api/login.js b/frontend/src/api/login.js index 9f71d6b..62f15df 100644 --- a/frontend/src/api/login.js +++ b/frontend/src/api/login.js @@ -21,6 +21,11 @@ export function login (parameter) { }) } +/** + *获取短信验证码 + * @param parameter + * @returns {AxiosPromise} + */ export function getSmsCaptcha (parameter) { return axios({ url: api.SendSms, @@ -29,6 +34,10 @@ export function getSmsCaptcha (parameter) { }) } +/** + * 获取用户信息 + * @returns {AxiosPromise} + */ export function getInfo () { return axios({ url: api.UserInfo, @@ -39,6 +48,10 @@ export function getInfo () { }) } +/** + * 用户登出 + * @returns {AxiosPromise} + */ export function logout () { return axios({ url: api.Logout, @@ -50,7 +63,7 @@ export function logout () { } /** - * get user 2step code open? + * 获取用户两步验证设置状态 * @param parameter {*} */ export function get2step (parameter) { diff --git a/frontend/src/api/user.js b/frontend/src/api/user.js index 71e361b..efc8428 100644 --- a/frontend/src/api/user.js +++ b/frontend/src/api/user.js @@ -2,7 +2,7 @@ import api from './index' import { axios } from '../utils/request' - +// 用户登录 export function login (parameter) { return axios({ url: api.UserLogin, @@ -10,7 +10,7 @@ export function login (parameter) { data: parameter }) } - +// 用户注册 export function register (parameter) { return axios({ url: api.UserRegister, diff --git a/frontend/src/components/Exception/ExceptionPage.vue b/frontend/src/components/Exception/ExceptionPage.vue index 132e346..7e9d584 100644 --- a/frontend/src/components/Exception/ExceptionPage.vue +++ b/frontend/src/components/Exception/ExceptionPage.vue @@ -1,24 +1,33 @@ - - diff --git a/frontend/src/layouts/PageView.vue b/frontend/src/layouts/PageView.vue index 32ce5c2..05fbaea 100644 --- a/frontend/src/layouts/PageView.vue +++ b/frontend/src/layouts/PageView.vue @@ -1,10 +1,16 @@