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>
167 lines
5.2 KiB
JavaScript
167 lines
5.2 KiB
JavaScript
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();
|
||
|
||
// 登录
|
||
console.log('\n1. 执行登录...');
|
||
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' });
|
||
}
|
||
|
||
console.log('\n2. 检查Store状态...');
|
||
|
||
// 检查并修复菜单
|
||
const storeInfo = await page.evaluate(() => {
|
||
if (!window.__PINIA__) {
|
||
return { error: 'Pinia not found' };
|
||
}
|
||
|
||
const stores = window.__PINIA__._s;
|
||
const storeData = {};
|
||
|
||
// 查找access store
|
||
let accessStore = null;
|
||
stores.forEach((store, key) => {
|
||
storeData[key] = {
|
||
hasAccessMenus: 'accessMenus' in store,
|
||
hasSetAccessMenus: typeof store.setAccessMenus === 'function',
|
||
accessMenusLength: store.accessMenus ? store.accessMenus.length : 0,
|
||
isAccessChecked: store.isAccessChecked
|
||
};
|
||
|
||
if (store.setAccessMenus) {
|
||
accessStore = store;
|
||
}
|
||
});
|
||
|
||
// 如果找到access store,尝试手动设置菜单
|
||
if (accessStore) {
|
||
console.log('找到Access Store,尝试设置菜单...');
|
||
|
||
// 创建菜单数据
|
||
const menus = [
|
||
{
|
||
name: 'Dashboard',
|
||
path: '/dashboard',
|
||
meta: { title: '仪表板', icon: 'lucide:home' },
|
||
children: [
|
||
{ name: 'DashboardHome', path: '/dashboard/home', meta: { title: '首页' } }
|
||
]
|
||
},
|
||
{
|
||
name: 'AccountManage',
|
||
path: '/account-manage',
|
||
meta: { title: '账号管理', icon: 'lucide:smartphone' },
|
||
children: [
|
||
{ name: 'AccountList', path: '/account-manage/list', meta: { title: 'TG账号列表' } },
|
||
{ name: 'AccountUsage', path: '/account-manage/usage', meta: { title: 'TG账号用途' } }
|
||
]
|
||
},
|
||
{
|
||
name: 'GroupConfig',
|
||
path: '/group-config',
|
||
meta: { title: '群组管理', icon: 'lucide:users' },
|
||
children: [
|
||
{ name: 'GroupList', path: '/group-config/list', meta: { title: '群组列表' } }
|
||
]
|
||
}
|
||
];
|
||
|
||
// 设置菜单
|
||
accessStore.setAccessMenus(menus);
|
||
|
||
return {
|
||
success: true,
|
||
storeData,
|
||
menuSet: true,
|
||
newMenuLength: accessStore.accessMenus.length
|
||
};
|
||
}
|
||
|
||
return { storeData, accessStoreNotFound: true };
|
||
});
|
||
|
||
console.log('Store信息:', JSON.stringify(storeInfo, null, 2));
|
||
|
||
await page.waitForTimeout(2000);
|
||
|
||
// 检查菜单是否出现
|
||
console.log('\n3. 检查菜单是否显示...');
|
||
const menuCount = await page.locator('.ant-menu-item, .ant-menu-submenu').count();
|
||
console.log(`菜单项数量: ${menuCount}`);
|
||
|
||
if (menuCount === 0) {
|
||
console.log('\n4. 尝试刷新页面...');
|
||
await page.reload({ waitUntil: 'networkidle' });
|
||
await page.waitForTimeout(2000);
|
||
|
||
const newMenuCount = await page.locator('.ant-menu-item, .ant-menu-submenu').count();
|
||
console.log(`刷新后菜单项数量: ${newMenuCount}`);
|
||
}
|
||
|
||
// 尝试另一种方法:检查路由守卫
|
||
console.log('\n5. 检查路由守卫和菜单生成...');
|
||
|
||
const routerInfo = await page.evaluate(() => {
|
||
if (window.$router) {
|
||
const routes = window.$router.getRoutes();
|
||
|
||
// 查找有菜单配置的路由
|
||
const menuRoutes = routes.filter(r => r.meta && r.meta.title && !r.meta.hideInMenu);
|
||
|
||
return {
|
||
totalRoutes: routes.length,
|
||
menuRoutes: menuRoutes.length,
|
||
sampleRoutes: menuRoutes.slice(0, 5).map(r => ({
|
||
path: r.path,
|
||
name: r.name,
|
||
title: r.meta.title,
|
||
icon: r.meta.icon
|
||
}))
|
||
};
|
||
}
|
||
return { error: 'Router not found' };
|
||
});
|
||
|
||
console.log('路由信息:', JSON.stringify(routerInfo, null, 2));
|
||
|
||
// 截图最终状态
|
||
await page.screenshot({ path: 'test-screenshots/menu-fix-attempt.png', fullPage: true });
|
||
|
||
console.log('\n\n问题诊断结果:');
|
||
console.log('1. Store存在但菜单数据为空');
|
||
console.log('2. 路由配置正常');
|
||
console.log('3. 需要检查菜单生成逻辑(generateAccess函数)');
|
||
|
||
console.log('\n保持浏览器打开...');
|
||
await new Promise(() => {});
|
||
|
||
} catch (error) {
|
||
console.error('出错了:', error);
|
||
if (browser) {
|
||
await browser.close();
|
||
}
|
||
}
|
||
})(); |