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

235
backend/quick_test.js Normal file
View File

@@ -0,0 +1,235 @@
#!/usr/bin/env node
/**
* 快速测试修复后的功能
*/
const { chromium } = require('playwright');
async function quickTest() {
console.log('🔧 快速测试修复后的功能...\n');
let browser;
let page;
try {
browser = await chromium.launch({
headless: false,
slowMo: 1000
});
const context = await browser.newContext({
viewport: { width: 1400, height: 900 }
});
page = await context.newPage();
// 监听API调用
page.on('request', request => {
const url = request.url();
if (url.includes('/nameTemplate/')) {
console.log(`🔗 ${request.method()} ${url}`);
}
});
page.on('response', response => {
const url = response.url();
if (url.includes('/nameTemplate/')) {
console.log(`📡 ${response.status()} ${url}`);
}
});
page.on('console', msg => {
if (msg.type() === 'error') {
console.log(`❌ 前端错误: ${msg.text()}`);
}
});
// 登录
console.log('🚀 登录系统...');
await page.goto('http://localhost:8891');
await page.waitForLoadState('networkidle');
await page.fill('input[type="text"]', 'admin');
await page.fill('input[type="password"]', '111111');
await page.click('button:has-text("登录")');
await page.waitForLoadState('networkidle');
console.log('✅ 登录成功\n');
// 访问统一管理页面
console.log('🎯 访问统一姓名管理页面...');
await page.goto('http://localhost:8891/#/nameManage/unified');
await page.waitForLoadState('networkidle');
await page.waitForTimeout(5000);
console.log('✅ 页面加载完成\n');
// 测试1检查页面元素
console.log('📊 测试1检查页面基本元素...');
const pageElements = await page.evaluate(() => {
return {
hasStatusPanel: !!document.querySelector('.status-panel'),
hasGeneratePanel: !!document.querySelector('.generate-panel'),
hasGenerateButton: !!document.querySelector('button'),
buttonTexts: Array.from(document.querySelectorAll('button')).map(b => b.textContent?.trim()),
hasTable: !!document.querySelector('table'),
headerCount: document.querySelectorAll('thead th').length
};
});
console.log('✅ 页面元素检查:');
console.log(` - 状态面板: ${pageElements.hasStatusPanel}`);
console.log(` - 生成面板: ${pageElements.hasGeneratePanel}`);
console.log(` - 按钮: ${pageElements.buttonTexts.join(', ')}`);
console.log(` - 数据表格: ${pageElements.hasTable} (${pageElements.headerCount}列)`);
await page.screenshot({ path: 'quick_test_01_page_loaded.png', fullPage: true });
// 测试2测试智能生成
console.log('\n🎲 测试2测试智能生成功能...');
// 先设置参数
try {
// 选择平台
const platformSelect = page.locator('.generate-panel .ivu-select').first();
await platformSelect.click();
await page.waitForTimeout(500);
const telegramOption = page.locator('.ivu-select-dropdown li').filter({ hasText: 'Telegram' }).first();
if (await telegramOption.isVisible()) {
await telegramOption.click();
console.log('🔧 选择平台: Telegram');
}
await page.waitForTimeout(1000);
// 点击生成按钮
const generateButton = page.locator('button').filter({ hasText: '生成姓名' });
if (await generateButton.isVisible()) {
await generateButton.click();
console.log('🎯 点击生成姓名按钮');
await page.waitForTimeout(3000);
// 检查是否有生成结果
const hasResults = await page.evaluate(() => {
return document.querySelectorAll('.name-result-item').length > 0;
});
console.log(`${hasResults ? '✅' : '⚠️'} 生成结果: ${hasResults ? '有结果' : '无结果'}`);
}
} catch (error) {
console.log(`⚠️ 生成测试遇到错误: ${error.message}`);
}
await page.screenshot({ path: 'quick_test_02_generate_test.png', fullPage: true });
// 测试3测试添加功能
console.log('\n 测试3测试添加姓名模板...');
try {
const addButton = page.locator('button').filter({ hasText: '添加姓名模板' });
if (await addButton.isVisible()) {
await addButton.click();
console.log('🖱️ 点击添加按钮');
await page.waitForTimeout(2000);
const hasModal = await page.evaluate(() => {
return !!document.querySelector('.ivu-modal');
});
console.log(`${hasModal ? '✅' : '❌'} 添加弹窗: ${hasModal ? '已打开' : '未打开'}`);
if (hasModal) {
// 填写一些测试数据
const lastNameInput = page.locator('.ivu-modal input').first();
await lastNameInput.fill('测试');
console.log('✏️ 填写测试数据');
await page.waitForTimeout(1000);
// 取消而不提交
const cancelButton = page.locator('.ivu-modal button').filter({ hasText: '取消' });
if (await cancelButton.isVisible()) {
await cancelButton.click();
console.log('❌ 取消添加');
}
}
}
} catch (error) {
console.log(`⚠️ 添加测试遇到错误: ${error.message}`);
}
await page.screenshot({ path: 'quick_test_03_add_test.png', fullPage: true });
// 测试4API直接测试
console.log('\n🌐 测试4API端点直接测试...');
const apiTests = [
{ name: 'supportedOptions', url: 'http://localhost:3000/nameTemplate/supportedOptions' },
{ name: 'generatorStatus', url: 'http://localhost:3000/nameTemplate/generatorStatus' }
];
for (const test of apiTests) {
try {
const response = await fetch(test.url);
console.log(`${response.ok ? '✅' : '❌'} ${test.name}: ${response.status}`);
if (response.ok) {
const data = await response.json();
if (test.name === 'supportedOptions') {
console.log(` - 平台数量: ${data.data?.platforms?.length || 0}`);
console.log(` - 文化数量: ${data.data?.cultures?.length || 0}`);
}
}
} catch (error) {
console.log(`${test.name}: ${error.message}`);
}
}
// 测试生成API
try {
const generateResponse = await fetch('http://localhost:3000/nameTemplate/generate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
platform: 'telegram',
culture: 'cn',
gender: 'neutral',
batch: true,
count: 3
})
});
console.log(`${generateResponse.ok ? '✅' : '❌'} generate API: ${generateResponse.status}`);
if (generateResponse.ok) {
const data = await generateResponse.json();
console.log(` - 生成成功: ${data.success}`);
console.log(` - 结果数量: ${Array.isArray(data.data) ? data.data.length : 1}`);
}
} catch (error) {
console.log(`❌ generate API: ${error.message}`);
}
console.log('\n🎉 快速测试完成!');
console.log('\n📂 测试截图:');
console.log(' - quick_test_01_page_loaded.png');
console.log(' - quick_test_02_generate_test.png');
console.log(' - quick_test_03_add_test.png');
console.log('\n⏰ 浏览器将保持打开10秒...');
await page.waitForTimeout(10000);
} catch (error) {
console.error('❌ 测试失败:', error.message);
if (page) {
await page.screenshot({ path: 'quick_test_error.png', fullPage: true });
}
} finally {
if (browser) {
await browser.close();
}
console.log('🏁 测试结束');
}
}
if (require.main === module) {
quickTest().catch(console.error);
}
module.exports = quickTest;