新增教师资料更新功能,包括个人信息修改和密码更新 添加操作日志记录系统,记录用户关键操作 实现系统设置模块,支持动态配置系统参数 重构数据库模型,新增教师表和系统设置表 优化成绩录入逻辑,支持平时分、期中和期末成绩计算 添加数据导出功能,支持学生、教师和成绩数据导出 完善管理员后台,增加统计图表和操作日志查看
110 lines
3.6 KiB
JavaScript
110 lines
3.6 KiB
JavaScript
const AuthService = require('../services/authService');
|
||
const { success, error } = require('../utils/response');
|
||
|
||
class AuthController {
|
||
static async login(req, res) {
|
||
try {
|
||
const { id, password, role } = req.body;
|
||
if (!id || !password || !role) {
|
||
return error(res, '请输入完整的登录信息', 400);
|
||
}
|
||
|
||
const user = await AuthService.login(id, password, role);
|
||
|
||
// 设置 Session
|
||
req.session.user = user;
|
||
|
||
success(res, { user }, '登录成功');
|
||
} catch (err) {
|
||
if (err.message === '用户名或密码错误') {
|
||
return error(res, err.message, 401);
|
||
}
|
||
console.error('Login Error:', err);
|
||
error(res, '服务器错误');
|
||
}
|
||
}
|
||
|
||
static async register(req, res) {
|
||
try {
|
||
const { id, name, password, role, class: userClass } = req.body;
|
||
|
||
if (!id || !name || !password || !role) {
|
||
return error(res, '请填写所有必填字段', 400);
|
||
}
|
||
|
||
if ((role === 'student' || role === 'teacher') && !userClass) {
|
||
return error(res, '学生和教师需要填写班级', 400);
|
||
}
|
||
|
||
await AuthService.register(req.body);
|
||
success(res, null, '注册成功');
|
||
} catch (err) {
|
||
if (err.message === '用户ID已存在') {
|
||
return error(res, err.message, 400);
|
||
}
|
||
console.error('Register Error:', err);
|
||
error(res, '服务器错误');
|
||
}
|
||
}
|
||
|
||
static async logout(req, res) {
|
||
req.session.destroy((err) => {
|
||
if (err) {
|
||
return error(res, '注销失败');
|
||
}
|
||
res.clearCookie('session_cookie');
|
||
success(res, null, '注销成功');
|
||
});
|
||
}
|
||
|
||
static async getCurrentUser(req, res) {
|
||
if (req.session.user) {
|
||
success(res, { user: req.session.user });
|
||
} else {
|
||
// 不返回 401,只返回 success: false,方便前端判断
|
||
res.json({ success: false, message: '未登录' });
|
||
}
|
||
}
|
||
|
||
static async updatePassword(req, res) {
|
||
try {
|
||
const userId = req.session.user.id;
|
||
const { oldPassword, newPassword } = req.body;
|
||
|
||
if (!oldPassword || !newPassword) {
|
||
return error(res, '请提供原密码和新密码', 400);
|
||
}
|
||
|
||
await AuthService.updatePassword(userId, oldPassword, newPassword);
|
||
success(res, null, '密码修改成功');
|
||
} catch (err) {
|
||
if (err.message === '原密码错误' || err.message === '用户不存在') {
|
||
return error(res, err.message, 400);
|
||
}
|
||
console.error('Update Password Error:', err);
|
||
error(res, '服务器错误');
|
||
}
|
||
}
|
||
|
||
static async updateProfile(req, res) {
|
||
try {
|
||
const userId = req.session.user.id;
|
||
const updateData = req.body;
|
||
|
||
const updatedUser = await AuthService.updateProfile(userId, updateData);
|
||
|
||
// 更新 Session 中的用户信息
|
||
req.session.user = {
|
||
...req.session.user,
|
||
...updatedUser
|
||
};
|
||
|
||
success(res, { user: req.session.user }, '资料更新成功');
|
||
} catch (err) {
|
||
console.error('Update Profile Error:', err);
|
||
error(res, '服务器错误');
|
||
}
|
||
}
|
||
}
|
||
|
||
module.exports = AuthController; |