Initial commit: Telegram Management System
Some checks failed
Deploy / deploy (push) Has been cancelled

Full-stack web application for Telegram management
- Frontend: Vue 3 + Vben Admin
- Backend: NestJS
- Features: User management, group broadcast, statistics

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
你的用户名
2025-11-04 15:37:50 +08:00
commit 237c7802e5
3674 changed files with 525172 additions and 0 deletions

152
init-test-data.js Normal file
View File

@@ -0,0 +1,152 @@
const sqlite3 = require('sqlite3').verbose();
const path = require('path');
// 连接到数据库
const dbPath = path.join(__dirname, 'backend', 'database.db');
const db = new sqlite3.Database(dbPath);
console.log('🗄️ 初始化测试数据...');
// 创建表和初始化数据
db.serialize(() => {
// 创建管理员表
db.run(`CREATE TABLE IF NOT EXISTS m_admins (
id INTEGER PRIMARY KEY AUTOINCREMENT,
account TEXT NOT NULL,
password TEXT NOT NULL,
salt TEXT NOT NULL,
status INTEGER DEFAULT 1,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP
)`);
// 创建TG账号表
db.run(`CREATE TABLE IF NOT EXISTS accountss (
id INTEGER PRIMARY KEY AUTOINCREMENT,
phone TEXT NOT NULL,
username TEXT,
status INTEGER DEFAULT 0,
usage_purpose TEXT,
session_data TEXT,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP
)`);
// 创建账号用途表
db.run(`CREATE TABLE IF NOT EXISTS m_account_usages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
usage_name TEXT NOT NULL,
description TEXT,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
)`);
// 创建名字表
db.run(`CREATE TABLE IF NOT EXISTS m_firstnames (
id INTEGER PRIMARY KEY AUTOINCREMENT,
firstname TEXT NOT NULL,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
)`);
// 创建姓氏表
db.run(`CREATE TABLE IF NOT EXISTS m_lastnames (
id INTEGER PRIMARY KEY AUTOINCREMENT,
lastname TEXT NOT NULL,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
)`);
// 插入管理员数据admin/111111
const salt = 'test_salt_123';
const crypto = require('crypto');
const passwordHash = crypto.createHash('md5').update(salt + '111111').digest('hex');
db.run(`INSERT OR IGNORE INTO m_admins (id, account, password, salt) VALUES (1, 'admin', ?, ?)`,
[passwordHash, salt], function(err) {
if (err) {
console.error('插入管理员数据失败:', err);
} else {
console.log('✅ 管理员账号创建成功 (admin/111111)');
}
});
// 插入测试TG账号数据
const testAccounts = [
{ phone: '+8613800138000', username: 'test_user_1', status: 1, usage_purpose: '营销推广' },
{ phone: '+8613800138001', username: 'test_user_2', status: 0, usage_purpose: '客服咨询' },
{ phone: '+8613800138002', username: 'test_user_3', status: 1, usage_purpose: '群组管理' },
{ phone: '+8613800138003', username: 'test_user_4', status: 2, usage_purpose: '自动回复' },
{ phone: '+8613800138004', username: 'test_user_5', status: 1, usage_purpose: '数据采集' }
];
testAccounts.forEach((account, index) => {
db.run(`INSERT OR IGNORE INTO accountss (phone, username, status, usage_purpose) VALUES (?, ?, ?, ?)`,
[account.phone, account.username, account.status, account.usage_purpose], function(err) {
if (err) {
console.error(`插入TG账号 ${account.phone} 失败:`, err);
} else if (this.changes > 0) {
console.log(`✅ TG账号 ${account.phone} 创建成功`);
}
});
});
// 插入账号用途数据
const usages = [
{ usage_name: '营销推广', description: '用于产品和服务的营销推广' },
{ usage_name: '客服咨询', description: '提供客户服务和咨询支持' },
{ usage_name: '群组管理', description: '管理Telegram群组和频道' },
{ usage_name: '自动回复', description: '自动回复用户消息' },
{ usage_name: '数据采集', description: '收集和分析用户数据' }
];
usages.forEach(usage => {
db.run(`INSERT OR IGNORE INTO m_account_usages (usage_name, description) VALUES (?, ?)`,
[usage.usage_name, usage.description], function(err) {
if (err) {
console.error(`插入用途 ${usage.usage_name} 失败:`, err);
} else if (this.changes > 0) {
console.log(`✅ 账号用途 ${usage.usage_name} 创建成功`);
}
});
});
// 插入测试名字数据(这些数据已经存在,保持原有的)
const firstnames = ['张', '王', '李', '刘', '陈', '杨', '赵', '黄', '周', '吴', '徐', '孙', '马', '朱', '胡'];
firstnames.forEach(name => {
db.run(`INSERT OR IGNORE INTO m_firstnames (firstname) VALUES (?)`, [name], function(err) {
if (err) {
console.error(`插入名字 ${name} 失败:`, err);
} else if (this.changes > 0) {
console.log(`✅ 名字 ${name} 创建成功`);
}
});
});
// 插入测试姓氏数据
const lastnames = ['伟', '芳', '娜', '敏', '静', '丽', '强', '磊', '军', '洋', '勇', '艳', '杰', '涛', '明'];
lastnames.forEach(name => {
db.run(`INSERT OR IGNORE INTO m_lastnames (lastname) VALUES (?)`, [name], function(err) {
if (err) {
console.error(`插入姓氏 ${name} 失败:`, err);
} else if (this.changes > 0) {
console.log(`✅ 姓氏 ${name} 创建成功`);
}
});
});
});
// 等待所有操作完成后关闭数据库
setTimeout(() => {
db.close((err) => {
if (err) {
console.error('关闭数据库失败:', err);
} else {
console.log('🎉 测试数据初始化完成!');
console.log('\n📊 创建的测试数据:');
console.log('• 管理员账号: admin/111111');
console.log('• TG账号: 5个测试账号');
console.log('• 账号用途: 5种用途类型');
console.log('• 名字列表: 15个常用名字');
console.log('• 姓氏列表: 15个常用姓氏');
console.log('\n🚀 现在可以重新测试前端页面数据加载了!');
}
});
}, 2000);