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

129
debug-menu-loading.js Normal file
View File

@@ -0,0 +1,129 @@
const { chromium } = require('playwright');
(async () => {
let browser;
try {
console.log('启动浏览器调试菜单加载...');
browser = await chromium.launch({
headless: false,
slowMo: 300,
devtools: true // 打开开发者工具
});
const context = await browser.newContext({
viewport: { width: 1920, height: 1080 }
});
const page = await context.newPage();
// 监听控制台输出
page.on('console', msg => {
console.log('浏览器控制台:', msg.type(), msg.text());
});
// 登录
console.log('\n执行登录...');
await page.goto('http://localhost:5174/', { waitUntil: 'networkidle' });
await page.fill('[name="username"]', 'admin');
await page.fill('[name="password"]', '111111');
await page.click('button:has-text("登录")');
await page.waitForTimeout(2000);
// 访问首页
if (page.url().includes('login')) {
await page.goto('http://localhost:5174/dashboard/home', { waitUntil: 'networkidle' });
}
await page.waitForTimeout(2000);
// 在浏览器中执行JavaScript检查
console.log('\n检查菜单数据...');
const menuInfo = await page.evaluate(() => {
// 尝试获取Vue/React实例
const app = window.__app__ || window.app || window.$app;
// 检查localStorage中的数据
const accessMenus = localStorage.getItem('access-menus');
const accessToken = localStorage.getItem('access_token');
const userInfo = localStorage.getItem('user_info');
// 检查DOM中的菜单元素
const menuElements = {
antMenu: document.querySelectorAll('.ant-menu').length,
menuItems: document.querySelectorAll('.ant-menu-item').length,
subMenus: document.querySelectorAll('.ant-menu-submenu').length,
roleMenu: document.querySelectorAll('[role="menu"]').length,
sider: document.querySelectorAll('.ant-layout-sider').length
};
// 检查Pinia store
let storeInfo = null;
try {
if (window.__PINIA__) {
const stores = window.__PINIA__._s;
storeInfo = {
storeCount: stores.size,
storeKeys: Array.from(stores.keys())
};
}
} catch (e) {
storeInfo = { error: e.message };
}
return {
localStorage: {
hasAccessMenus: !!accessMenus,
accessMenusLength: accessMenus ? JSON.parse(accessMenus).length : 0,
hasAccessToken: !!accessToken,
hasUserInfo: !!userInfo
},
dom: menuElements,
app: !!app,
pinia: storeInfo,
url: window.location.href,
title: document.title
};
});
console.log('\n菜单调试信息:');
console.log(JSON.stringify(menuInfo, null, 2));
// 尝试手动触发菜单加载
console.log('\n尝试手动触发菜单加载...');
await page.evaluate(() => {
// 尝试调用菜单API
if (window.getAllMenusApi) {
console.log('找到 getAllMenusApi调用中...');
window.getAllMenusApi().then(menus => {
console.log('菜单数据:', menus);
});
}
// 检查路由
if (window.$router) {
console.log('路由列表:', window.$router.getRoutes().map(r => r.path));
}
});
await page.waitForTimeout(3000);
// 再次检查菜单元素
const finalMenuCount = await page.locator('.ant-menu-item, .ant-menu-submenu').count();
console.log(`\n最终菜单元素数量: ${finalMenuCount}`);
// 截图
await page.screenshot({ path: 'test-screenshots/menu-debug.png', fullPage: true });
console.log('\n调试完成保持浏览器打开...');
await new Promise(() => {});
} catch (error) {
console.error('出错了:', error);
if (browser) {
await browser.close();
}
}
})();