基本功能完成,下一步开始美化UI

This commit is contained in:
2025-12-19 16:02:38 +08:00
parent 465d4d7b4a
commit 6ac216d184
46 changed files with 2576 additions and 618 deletions

View File

@@ -1,6 +1,7 @@
import sqlite3 from 'sqlite3';
import path from 'path';
import fs from 'fs';
import { v4 as uuidv4 } from 'uuid';
const DEFAULT_DB_DIR = path.join(process.cwd(), 'data');
const DEFAULT_DB_PATH = path.join(DEFAULT_DB_DIR, 'survey.db');
@@ -127,6 +128,65 @@ const migrateDatabase = async () => {
await ensureIndex(`CREATE INDEX IF NOT EXISTS idx_exam_task_users_user_id ON exam_task_users(user_id);`);
await ensureIndex(`CREATE INDEX IF NOT EXISTS idx_quiz_records_subject_id ON quiz_records(subject_id);`);
await ensureIndex(`CREATE INDEX IF NOT EXISTS idx_quiz_records_task_id ON quiz_records(task_id);`);
// 1. 创建用户组表
await ensureTable(`
CREATE TABLE IF NOT EXISTS user_groups (
id TEXT PRIMARY KEY,
name TEXT UNIQUE NOT NULL,
description TEXT,
is_system BOOLEAN DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
`);
// 2. 创建用户-用户组关联表
await ensureTable(`
CREATE TABLE IF NOT EXISTS user_group_members (
group_id TEXT NOT NULL,
user_id TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (group_id, user_id),
FOREIGN KEY (group_id) REFERENCES user_groups(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
`);
// 3. 为考试任务表添加选择配置字段
await ensureColumn('exam_tasks', 'selection_config TEXT', 'selection_config');
// 4. 初始化"全体用户"组
const allUsersGroup = await get(`SELECT id FROM user_groups WHERE is_system = 1`);
let allUsersGroupId = allUsersGroup?.id;
if (!allUsersGroupId) {
allUsersGroupId = uuidv4();
await run(
`INSERT INTO user_groups (id, name, description, is_system) VALUES (?, ?, ?, ?)`,
[allUsersGroupId, '全体用户', '包含系统所有用户的默认组', 1]
);
console.log('已创建"全体用户"系统组');
}
// 5. 将现有用户添加到"全体用户"组
if (allUsersGroupId) {
// 找出尚未在全体用户组中的用户
const usersNotInGroup = await query(`
SELECT id FROM users
WHERE id NOT IN (
SELECT user_id FROM user_group_members WHERE group_id = ?
)
`, [allUsersGroupId]);
if (usersNotInGroup.length > 0) {
const stmt = db.prepare(`INSERT INTO user_group_members (group_id, user_id) VALUES (?, ?)`);
usersNotInGroup.forEach(user => {
stmt.run(allUsersGroupId, user.id);
});
stmt.finalize();
console.log(`已将 ${usersNotInGroup.length} 名现有用户添加到"全体用户"组`);
}
}
};
// 数据库初始化函数