feat: 实现教师资料更新、操作日志和系统设置功能

新增教师资料更新功能,包括个人信息修改和密码更新
添加操作日志记录系统,记录用户关键操作
实现系统设置模块,支持动态配置系统参数
重构数据库模型,新增教师表和系统设置表
优化成绩录入逻辑,支持平时分、期中和期末成绩计算
添加数据导出功能,支持学生、教师和成绩数据导出
完善管理员后台,增加统计图表和操作日志查看
This commit is contained in:
祀梦
2025-12-22 23:30:01 +08:00
parent 16802c85e5
commit b1da021185
43 changed files with 7860 additions and 2835 deletions

View File

@@ -0,0 +1,31 @@
const db = require('../config/database');
async function fixTeachers() {
const departments = ['计算机学院', '软件学院', '信息工程学院', '理学院', '外国语学院'];
const titles = ['教授', '副教授', '讲师', '助教'];
try {
const teachers = await db.query('SELECT id FROM teachers');
for (let i = 0; i < teachers.length; i++) {
const dept = departments[i % departments.length];
const title = titles[i % titles.length];
const contact = `139${Math.floor(Math.random() * 90000000 + 10000000)}`;
await db.query(
'UPDATE teachers SET department = ?, title = ?, contact_info = ? WHERE id = ?',
[dept, title, contact, teachers[i].id]
);
// Also sync back to users table's class field if needed (though we'll use teachers table now)
await db.query(
'UPDATE users SET class = ? WHERE id = ?',
[dept, teachers[i].id]
);
}
console.log('教师信息修复完成!');
} catch (err) {
console.error('修复失败:', err);
}
}
fixTeachers();

View File

@@ -0,0 +1,48 @@
const db = require('../config/database');
async function migrate() {
try {
console.log('Starting migration v2...');
// 1. System Settings Table
await db.query(`
CREATE TABLE IF NOT EXISTS system_settings (
key TEXT PRIMARY KEY,
value TEXT
)
`);
// Default settings
const defaultSettings = [
['system_name', '学校成绩管理系统'],
['current_semester', '2023-2024-2'],
['allow_course_selection', '1'],
['allow_grade_check', '1']
];
for (const [key, value] of defaultSettings) {
await db.query('INSERT OR IGNORE INTO system_settings (key, value) VALUES (?, ?)', [key, value]);
}
// 2. Operation Logs Table
await db.query(`
CREATE TABLE IF NOT EXISTS operation_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id TEXT,
operation_type TEXT,
operation_target TEXT,
description TEXT,
ip_address TEXT,
created_at TEXT DEFAULT (datetime('now', 'localtime'))
)
`);
console.log('Migration v2 completed successfully.');
process.exit(0);
} catch (error) {
console.error('Migration v2 failed:', error);
process.exit(1);
}
}
migrate();

View File

@@ -0,0 +1,33 @@
const db = require('../config/database');
async function migrate() {
console.log('开始执行 v3 迁移: 创建 teachers 表...');
try {
await db.query(`
CREATE TABLE IF NOT EXISTS teachers (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
department TEXT,
title TEXT,
contact_info TEXT,
FOREIGN KEY (id) REFERENCES users(id) ON DELETE CASCADE
)
`);
// 从 users 表中迁移现有的教师数据
const teachers = await db.query('SELECT id, name, class FROM users WHERE role = "teacher"');
for (const t of teachers) {
await db.query(
'INSERT OR IGNORE INTO teachers (id, name, department) VALUES (?, ?, ?)',
[t.id, t.name, t.class]
);
}
console.log('v3 迁移成功!');
} catch (err) {
console.error('v3 迁移失败:', err);
}
}
migrate();