feat: 添加管理员管理和场地图片功能

This commit is contained in:
Yvan
2026-04-17 18:09:02 +08:00
parent 2530ceb6b4
commit fd49a9de88
53 changed files with 4225 additions and 1424 deletions
@@ -0,0 +1,39 @@
module.exports = {
async up(manager) {
console.log(' - 添加奖品来源字段...');
// 添加source字段,默认值为purchase
await manager.executeSql(`
ALTER TABLE Prizes ADD COLUMN source TEXT DEFAULT 'purchase';
`);
// 添加sponsor字段
await manager.executeSql(`
ALTER TABLE Prizes ADD COLUMN sponsor TEXT;
`);
// 为现有数据设置默认值
await manager.executeSql(`
UPDATE Prizes SET source = 'purchase' WHERE source IS NULL;
`);
console.log(' - 奖品来源字段添加完成');
},
async down(manager) {
console.log(' - 移除奖品来源字段...');
// SQLite不支持DROP COLUMN,需要重建表
await manager.executeSql(`
CREATE TABLE Prizes_backup AS SELECT
id, activityId, name, level, description, image, quantity, sortOrder, createdAt, updatedAt
FROM Prizes;
`);
await manager.executeSql(`DROP TABLE Prizes;`);
await manager.executeSql(`ALTER TABLE Prizes_backup RENAME TO Prizes;`);
console.log(' - 奖品来源字段移除完成');
}
};
@@ -0,0 +1,74 @@
module.exports = {
async up(manager) {
console.log(' - 添加特等奖等级...');
// SQLite不支持直接修改CHECK约束,需要重建表
// 1. 创建新表结构(包含特等奖)
await manager.executeSql(`
CREATE TABLE Prizes_new (
id INTEGER PRIMARY KEY AUTOINCREMENT,
activityId INTEGER NOT NULL,
name TEXT NOT NULL,
level TEXT NOT NULL CHECK(level IN ('特等奖', '一等奖', '二等奖', '三等奖', '参与奖', '伴手礼')),
description TEXT,
image TEXT,
quantity INTEGER DEFAULT 1,
sortOrder INTEGER DEFAULT 0,
source TEXT DEFAULT 'purchase',
sponsor TEXT,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`);
// 2. 复制数据
await manager.executeSql(`
INSERT INTO Prizes_new
SELECT * FROM Prizes;
`);
// 3. 删除旧表
await manager.executeSql(`DROP TABLE Prizes;`);
// 4. 重命名新表
await manager.executeSql(`ALTER TABLE Prizes_new RENAME TO Prizes;`);
console.log(' - 特等奖等级添加完成');
},
async down(manager) {
console.log(' - 移除特等奖等级...');
// 1. 创建旧表结构(不包含特等奖)
await manager.executeSql(`
CREATE TABLE Prizes_old (
id INTEGER PRIMARY KEY AUTOINCREMENT,
activityId INTEGER NOT NULL,
name TEXT NOT NULL,
level TEXT NOT NULL CHECK(level IN ('一等奖', '二等奖', '三等奖', '参与奖', '伴手礼')),
description TEXT,
image TEXT,
quantity INTEGER DEFAULT 1,
sortOrder INTEGER DEFAULT 0,
source TEXT DEFAULT 'purchase',
sponsor TEXT,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`);
// 2. 复制数据(排除特等奖)
await manager.executeSql(`
INSERT INTO Prizes_old
SELECT * FROM Prizes WHERE level != '特等奖';
`);
// 3. 删除新表
await manager.executeSql(`DROP TABLE Prizes;`);
// 4. 重命名旧表
await manager.executeSql(`ALTER TABLE Prizes_old RENAME TO Prizes;`);
console.log(' - 特等奖等级移除完成');
}
};
+12
View File
@@ -0,0 +1,12 @@
// 添加管理员角色字段
module.exports = {
async up(manager) {
console.log(' - 添加 Admins.role 字段...');
await manager.executeSql('ALTER TABLE Admins ADD COLUMN role TEXT DEFAULT "admin";');
console.log(' - 角色字段添加完成');
},
async down(manager) {
await manager.executeSql('ALTER TABLE Admins DROP COLUMN role;');
}
};
@@ -0,0 +1,75 @@
// 添加四等奖等级
module.exports = {
async up(manager) {
console.log(' - 添加四等奖等级...');
// SQLite不支持直接修改CHECK约束,需要重建表
// 1. 创建新表结构(包含四等奖)
await manager.executeSql(`
CREATE TABLE Prizes_new (
id INTEGER PRIMARY KEY AUTOINCREMENT,
activityId INTEGER NOT NULL,
name TEXT NOT NULL,
level TEXT NOT NULL CHECK(level IN ('特等奖', '一等奖', '二等奖', '三等奖', '四等奖', '参与奖', '伴手礼')),
description TEXT,
image TEXT,
quantity INTEGER DEFAULT 1,
sortOrder INTEGER DEFAULT 0,
source TEXT DEFAULT 'purchase',
sponsor TEXT,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`);
// 2. 复制数据
await manager.executeSql(`
INSERT INTO Prizes_new
SELECT * FROM Prizes;
`);
// 3. 删除旧表
await manager.executeSql(`DROP TABLE Prizes;`);
// 4. 重命名新表
await manager.executeSql(`ALTER TABLE Prizes_new RENAME TO Prizes;`);
console.log(' - 四等奖等级添加完成');
},
async down(manager) {
console.log(' - 移除四等奖等级...');
// 1. 创建旧表结构(不包含四等奖)
await manager.executeSql(`
CREATE TABLE Prizes_old (
id INTEGER PRIMARY KEY AUTOINCREMENT,
activityId INTEGER NOT NULL,
name TEXT NOT NULL,
level TEXT NOT NULL CHECK(level IN ('特等奖', '一等奖', '二等奖', '三等奖', '参与奖', '伴手礼')),
description TEXT,
image TEXT,
quantity INTEGER DEFAULT 1,
sortOrder INTEGER DEFAULT 0,
source TEXT DEFAULT 'purchase',
sponsor TEXT,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`);
// 2. 复制数据(排除四等奖)
await manager.executeSql(`
INSERT INTO Prizes_old
SELECT * FROM Prizes WHERE level != '四等奖';
`);
// 3. 删除新表
await manager.executeSql(`DROP TABLE Prizes;`);
// 4. 重命名旧表
await manager.executeSql(`ALTER TABLE Prizes_old RENAME TO Prizes;`);
console.log(' - 四等奖等级移除完成');
}
};
@@ -0,0 +1,20 @@
/**
* 迁移 0009: 添加进群状态字段
* 为 Registrations 表添加 groupStatus 字段
*/
module.exports = {
async up(manager) {
console.log(' - 添加 Registrations.groupStatus 字段...');
await manager.executeSql(`
ALTER TABLE Registrations ADD COLUMN groupStatus INTEGER DEFAULT 0;
`);
},
async down(manager) {
console.log(' - 移除 Registrations.groupStatus 字段...');
await manager.executeSql(`
ALTER TABLE Registrations DROP COLUMN groupStatus;
`);
}
};