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(); } } })();