diff --git a/doc/sql/exam.sql b/doc/sql/exam.sql index b2aa11e..cd80c5c 100644 --- a/doc/sql/exam.sql +++ b/doc/sql/exam.sql @@ -1208,7 +1208,7 @@ CREATE TABLE `user` ( PRIMARY KEY (`user_id`) USING BTREE,-- 主键约束 -- 唯一性约束: -- 分别为`user_username`、`user_email`和`user_phone`字段设置唯一性约束,并使用B树(BTREE)索引。 - -- 这确保了用户名、邮箱和手机号在表中是唯一的,不会出现重复值。 + -- 这确保了用户名、邮箱和手机号在表中是唯一的,不会出现重复值。0 UNIQUE KEY `user_username` (`user_username`) USING BTREE, UNIQUE KEY `user_email` (`user_email`) USING BTREE, UNIQUE KEY `user_phone` (`user_phone`) USING BTREE diff --git a/frontend/public/index.html b/frontend/public/index.html index fd87ff4..8c2abb7 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -1,24 +1,127 @@ + + - - - - - - 在线考试系统 - - - - -
-
-
- -
-
+ + + + + + + + + + + + + + + + + 在线考试系统 + + + + + + + + +
+ +
+ +
+ + + + +
- - - +
+
+ + + + + \ No newline at end of file diff --git a/frontend/src/api/exam.js b/frontend/src/api/exam.js index c6d98b5..3451fb7 100644 --- a/frontend/src/api/exam.js +++ b/frontend/src/api/exam.js @@ -1,44 +1,49 @@ -// 考试相关的接口,包括考试、问题、选项和评分等接口 +// 导入api对象,它包含了所有API端点的路径 +import api from './index'; +// 导入axios库,用于发送HTTP请求 +import { axios } from '../utils/request'; -import api from './index' -import { axios } from '../utils/request' - -export function getQuestionList (parameter) { +// 获取问题列表的函数 +export function getQuestionList(parameter) { return axios({ - url: api.ExamQuestionList, + url: api.ExamQuestionList, // API端点 method: 'get', - params: parameter + params: parameter // 查询参数 }) } -export function getQuestionAll () { +// 获取所有问题的函数 +export function getQuestionAll() { return axios({ url: api.ExamQuestionAll, method: 'get' }) } -export function questionUpdate (parameter) { - console.log(parameter) +// 更新问题的函数 +export function questionUpdate(parameter) { + console.log(parameter); // 打印参数,用于调试 return axios({ url: api.ExamQuestionUpdate, method: 'post', - data: parameter + data: parameter // 请求体中的数据 }) } -export function getQuestionSelection () { +// 获取分类选项的函数 +export function getQuestionSelection() { return axios({ url: api.ExamQuestionSelection, method: 'get', headers: { - 'Content-Type': 'application/json;charset=UTF-8' + 'Content-Type': 'application/json;charset=UTF-8' // 设置请求头,指定内容类型 } }) } -export function questionCreate (parameter) { - console.log(parameter) +// 创建新问题的函数 +export function questionCreate(parameter) { + console.log(parameter); return axios({ url: api.ExamQuestionCreate, method: 'post', @@ -46,7 +51,8 @@ export function questionCreate (parameter) { }) } -export function getExamList (parameter) { +// 获取考试列表的函数 +export function getExamList(parameter) { return axios({ url: api.ExamList, method: 'get', @@ -54,15 +60,16 @@ export function getExamList (parameter) { }) } -export function getExamAll () { +// 获取所有考试信息的函数 +export function getExamAll() { return axios({ url: api.ExamAll, method: 'get' }) } -// 获取所有问题,按照单选、多选和判断进行分类 -export function getExamQuestionTypeList () { +// 获取考试类型列表的函数,按照单选、多选和判断分类 +export function getExamQuestionTypeList() { return axios({ url: api.ExamQuestionTypeList, method: 'get', @@ -72,7 +79,8 @@ export function getExamQuestionTypeList () { }) } -export function getExamCardList () { +// 获取考试卡片列表的函数 +export function getExamCardList() { return axios({ url: api.ExamCardList, method: 'get', @@ -82,8 +90,9 @@ export function getExamCardList () { }) } -export function examCreate (parameter) { - console.log(parameter) +// 创建考试的函数 +export function examCreate(parameter) { + console.log(parameter); return axios({ url: api.ExamCreate, method: 'post', @@ -91,8 +100,9 @@ export function examCreate (parameter) { }) } -export function examUpdate (parameter) { - console.log(parameter) +// 更新考试信息的函数 +export function examUpdate(parameter) { + console.log(parameter); return axios({ url: api.ExamUpdate, method: 'post', @@ -100,9 +110,10 @@ export function examUpdate (parameter) { }) } -export function getExamDetail (examId) { +// 根据考试ID获取考试详情的函数 +export function getExamDetail(examId) { return axios({ - url: api.ExamDetail + examId, + url: api.ExamDetail + examId, // 动态拼接URL method: 'get', headers: { 'Content-Type': 'application/json;charset=UTF-8' @@ -110,9 +121,10 @@ export function getExamDetail (examId) { }) } -export function getExamRecordDetail (recordId) { +// 根据记录ID获取考试记录详情的函数 +export function getExamRecordDetail(recordId) { return axios({ - url: api.recordDetail + recordId, + url: api.recordDetail + recordId, // 动态拼接URL method: 'get', headers: { 'Content-Type': 'application/json;charset=UTF-8' @@ -120,9 +132,10 @@ export function getExamRecordDetail (recordId) { }) } -export function getQuestionDetail (questionId) { +// 根据问题ID获取问题详情的函数 +export function getQuestionDetail(questionId) { return axios({ - url: api.QuestionDetail + questionId, + url: api.QuestionDetail + questionId, // 动态拼接URL method: 'get', headers: { 'Content-Type': 'application/json;charset=UTF-8' @@ -130,19 +143,21 @@ export function getQuestionDetail (questionId) { }) } -export function finishExam (examId, answersMap) { - console.log(answersMap) +// 提交考试并获取成绩的函数 +export function finishExam(examId, answersMap) { + console.log(answersMap); // 打印答案,用于调试 return axios({ - url: api.FinishExam + examId, + url: api.FinishExam + examId, // 动态拼接URL method: 'post', headers: { 'Content-Type': 'application/json;charset=UTF-8' }, - data: answersMap + data: answersMap // 请求体中的答案数据 }) } -export function getExamRecordList () { +// 获取当前用户所有考试记录的函数 +export function getExamRecordList() { return axios({ url: api.ExamRecordList, method: 'get', @@ -150,4 +165,4 @@ export function getExamRecordList () { 'Content-Type': 'application/json;charset=UTF-8' } }) -} +} \ No newline at end of file diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js index 05423bf..a96ba8a 100644 --- a/frontend/src/api/index.js +++ b/frontend/src/api/index.js @@ -1,38 +1,34 @@ const api = { - Login: '/auth/login', - Logout: '/auth/logout', - ForgePassword: '/auth/forge-password', - Register: '/auth/register', - twoStepCode: '/auth/2step-code', - SendSms: '/account/sms', - SendSmsErr: '/account/sms_err', - // get my info - UserInfo: '/user/info', + // 用户认证相关接口 + Login: '/auth/login', // 用户登录接口 + Logout: '/auth/logout', // 用户登出接口 + ForgePassword: '/auth/forge-password', // 重置密码接口 + Register: '/auth/register', // 用户注册接口 + twoStepCode: '/auth/2step-code', // 双因素认证接口 + SendSms: '/account/sms', // 发送短信接口 + SendSmsErr: '/account/sms_err', // 发送短信错误处理接口 - // 下面是自己的用户认证的接口 - UserRegister: '/user/register', - UserLogin: '/user/login', + // 用户相关接口 + UserRegister: '/user/register', // 用户注册接口 + UserLogin: '/user/login', // 用户登录接口 - // 考试的接口 - ExamQuestionList: '/exam/question/list', - ExamQuestionAll: '/exam/question/all', - ExamQuestionUpdate: '/exam/question/update', - ExamQuestionSelection: '/exam/question/selection', - ExamQuestionCreate: '/exam/question/create', - ExamList: '/exam/list', - ExamAll: '/exam/all', - // 获取问题列表,按照单选、多选和判断进行分类 - ExamQuestionTypeList: '/exam/question/type/list', - ExamCreate: '/exam/create', - ExamUpdate: '/exam/update', - ExamCardList: '/exam/card/list', - // 获取考试详情 - ExamDetail: '/exam/detail/', - // 获取考试详情 - QuestionDetail: '/exam/question/detail/', - // 交卷 - FinishExam: '/exam/finish/', - ExamRecordList: '/exam/record/list', - recordDetail: '/exam/record/detail/' + // 考试相关接口 + ExamQuestionList: '/exam/question/list', // 获取问题列表接口 + ExamQuestionAll: '/exam/question/all', // 获取所有问题接口 + ExamQuestionUpdate: '/exam/question/update', // 更新问题接口 + ExamQuestionSelection: '/exam/question/selection', // 获取问题分类选项接口 + ExamQuestionCreate: '/exam/question/create', // 创建问题接口 + ExamList: '/exam/list', // 获取考试列表接口 + ExamAll: '/exam/all', // 获取所有考试接口 + ExamQuestionTypeList: '/exam/question/type/list', // 获取问题类型列表接口 + ExamCreate: '/exam/create', // 创建考试接口 + ExamUpdate: '/exam/update', // 更新考试信息接口 + ExamCardList: '/exam/card/list', // 获取考试卡片列表接口 + ExamDetail: '/exam/detail/', // 获取考试详情接口 + QuestionDetail: '/exam/question/detail/', // 获取问题详情接口 + FinishExam: '/exam/finish/', // 提交考试接口 + ExamRecordList: '/exam/record/list', // 获取考试记录列表接口 + recordDetail: '/exam/record/detail' // 获取考试记录详情接口 } -export default api + +export default api; \ No newline at end of file diff --git a/frontend/src/api/login.js b/frontend/src/api/login.js index 9f71d6b..97a6c7e 100644 --- a/frontend/src/api/login.js +++ b/frontend/src/api/login.js @@ -1,62 +1,62 @@ -import api from './index' -import { axios } from '../utils/request' +// 导入api对象,它包含了所有API端点的路径 +import api from './index'; +// 导入axios库,用于发送HTTP请求 +import { axios } from '../utils/request'; /** - * login func - * parameter: { - * username: '', - * password: '', - * remember_me: true, - * captcha: '12345' - * } - * @param parameter - * @returns {*} + * 用户登录函数 + * @param {Object} parameter - 登录所需的参数对象,包含用户名、密码、记住我、验证码等属性 + * @returns {Promise} - 返回axios请求的Promise对象 */ -export function login (parameter) { +export function login(parameter) { return axios({ - // 用户登录接口改成自己的 - url: api.UserLogin, + // 用户登录接口改成自己的登录接口 + url: api.UserLogin, // 使用从api对象中导入的UserLogin路径 method: 'post', - data: parameter + data: parameter // 将登录参数对象传递给服务器 }) } -export function getSmsCaptcha (parameter) { +// 获取验证码的函数 +export function getSmsCaptcha(parameter) { return axios({ - url: api.SendSms, + url: api.SendSms, // 发送短信的API端点 method: 'post', - data: parameter + data: parameter // 传递给服务器的参数,用于获取验证码 }) } -export function getInfo () { +// 获取用户信息的函数 +export function getInfo() { return axios({ - url: api.UserInfo, + url: api.UserInfo, // 获取用户信息的API端点 method: 'get', headers: { - 'Content-Type': 'application/json;charset=UTF-8' + 'Content-Type': 'application/json;charset=UTF8' // 设置请求头,指定内容类型 } }) } -export function logout () { +// 用户登出的函数 +export function logout() { return axios({ - url: api.Logout, + url: api.Logout, // 登出的API端点 method: 'post', headers: { - 'Content-Type': 'application/json;charset=UTF-8' + 'Content-Type': 'application/json;charset=UTF8' // 设置请求头,指定内容类型 } }) } /** - * get user 2step code open? - * @param parameter {*} + * 获取用户双因素认证的第二步代码 + * @param {Object} parameter - 用于双因素认证的参数对象 + * @returns {Promise} - 返回axios请求的Promise对象 */ -export function get2step (parameter) { +export function get2step(parameter) { return axios({ - url: api.twoStepCode, + url: api.twoStepCode, // 双因素认证的第二步接口 method: 'post', - data: parameter + data: parameter // 传递给服务器的参数,用于双因素认证 }) -} +} \ No newline at end of file diff --git a/frontend/src/api/user.js b/frontend/src/api/user.js index 71e361b..e020af9 100644 --- a/frontend/src/api/user.js +++ b/frontend/src/api/user.js @@ -1,20 +1,27 @@ -// 自己的借口呀:用户的注册和登录等服务,注意所有的接口应该都现在index.js里面注册,方便统一管理 +// 导入api对象,它包含了所有API端点的路径 +// 这些端点应该在index.js文件中定义,以便于统一管理 +import api from './index'; +// 导入axios库,用于发送HTTP请求 +import { axios } from '../utils/request'; -import api from './index' -import { axios } from '../utils/request' - -export function login (parameter) { +// 定义登录函数 +// 该函数接收一个参数对象,包含登录所需的信息 +export function login(parameter) { + // 使用axios发送POST请求到用户登录的API端点 return axios({ - url: api.UserLogin, - method: 'post', - data: parameter - }) + url: api.UserLogin, // 用户登录的API端点 + method: 'post', // 请求方法为POST + data: parameter // 发送到服务器的数据,即登录参数 + }); } -export function register (parameter) { +// 定义注册函数 +// 该函数接收一个参数对象,包含注册所需的信息 +export function register(parameter) { + // 使用axios发送POST请求到用户注册的API端点 return axios({ - url: api.UserRegister, - method: 'post', - data: parameter - }) -} + url: api.UserRegister, // 用户注册的API端点 + method: 'post', // 请求方法为POST + data: parameter // 发送到服务器的数据,即注册参数 + }); +} \ No newline at end of file