feat: 添加学生个人中心页面和数据库备份功能

refactor(auth): 重构认证模块适配Bootstrap 5样式
feat(controller): 在登录响应中返回用户对象
feat(server): 添加学生个人中心路由
refactor(models): 重构学生和成绩模型结构
style: 更新登录和注册页面UI设计
chore: 添加数据库备份脚本和空备份文件
This commit is contained in:
祀梦
2025-12-21 22:34:29 +08:00
parent b9a975004b
commit e5a2a9d042
16 changed files with 1834 additions and 1651 deletions

View File

@@ -3,9 +3,11 @@ const db = require('../config/database');
class Score {
static async findByStudentId(studentId) {
const sql = `
SELECT s.*, c.course_code, c.course_name, c.credit,
SELECT s.id, s.student_id, s.course_id, s.teacher_id,
s.total_score as score, s.grade_point, s.grade_level, s.created_at,
c.course_code, c.course_name, c.credit,
u.name as teacher_name
FROM scores s
FROM grades s
JOIN courses c ON s.course_id = c.id
JOIN users u ON s.teacher_id = u.id
WHERE s.student_id = ?
@@ -16,10 +18,13 @@ class Score {
static async findDetailsById(scoreId, studentId) {
const sql = `
SELECT s.*, c.course_code, c.course_name, c.credit, c.semester,
SELECT s.id, s.student_id, s.course_id, s.teacher_id,
s.usual_score, s.midterm_score, s.final_score, s.total_score as score,
s.grade_point, s.grade_level, s.created_at, s.remark,
c.course_code, c.course_name, c.credit, c.semester,
u.name as teacher_name, u.email as teacher_email,
st.id as student_number, st.class as class_name
FROM scores s
FROM grades s
JOIN courses c ON s.course_id = c.id
JOIN users u ON s.teacher_id = u.id
JOIN students st ON s.student_id = st.id
@@ -30,22 +35,23 @@ class Score {
}
static async create(scoreData) {
const { studentId, courseId, teacherId, score, gradePoint, gradeLevel, examDate, remark } = scoreData;
const { studentId, courseId, teacherId, score, gradePoint, gradeLevel, remark } = scoreData;
// 既然TeacherService只传了score我们默认把它作为 final_score 和 total_score
// 如果需要支持平时分/期中分需要修改前端和Controller
const sql = `
INSERT INTO scores (student_id, course_id, teacher_id, score,
INSERT INTO grades (student_id, course_id, teacher_id, final_score, total_score,
grade_point, grade_level, created_at, remark)
VALUES (?, ?, ?, ?, ?, ?, NOW(), ?)
VALUES (?, ?, ?, ?, ?, ?, ?, NOW(), ?)
`;
// 注意:这里用 created_at 替代了 examDate如果数据库有 examDate 列可以改回去
const result = await db.pool.execute(sql, [
studentId, courseId, teacherId, score, gradePoint, gradeLevel, remark
studentId, courseId, teacherId, score, score, gradePoint, gradeLevel, remark
]);
return result[0].insertId;
}
static async findByStudentAndCourse(studentId, courseId) {
const rows = await db.query(
'SELECT * FROM scores WHERE student_id = ? AND course_id = ?',
'SELECT * FROM grades WHERE student_id = ? AND course_id = ?',
[studentId, courseId]
);
return rows[0];