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>
5.9 KiB
5.9 KiB
菜单显示差异修复指南
🚨 问题总结
通过Playwright自动化测试发现,Telegram管理系统存在严重的前后端菜单不一致问题:
后端启动状态: 49个菜单项正常显示
Mock模式状态: 0个菜单项(完全无菜单)
差异程度: 100%不一致
🔍 根本原因分析
1. Mock服务架构问题
- Mock后端服务(
@vben/backend-mock)未启动 - 环境变量
VITE_ENABLE_MOCK=false未正确配置 - API请求全部失败导致菜单无法加载
2. 数据源不统一
- 真实后端模式: 使用
src/api/core/menu.ts中的静态菜单数据 - Mock模式: 预期使用
backend-mock/utils/mock-data.ts中的MOCK_MENUS - 两个数据源结构和内容完全不同
3. 认证流程问题
- Mock模式下登录流程失败
- 路由守卫阻止了菜单的正常渲染
- 用户权限验证失效
⚡ 立即修复步骤
步骤1: 启动Mock后端服务
# 进入项目根目录
cd /Users/hahaha/telegram-management-system/frontend-vben
# 启动Mock后端(端口5320)
pnpm -F @vben/backend-mock run dev
# 验证服务启动
curl http://localhost:5320/api/auth/login
步骤2: 修改环境变量
编辑 apps/web-antd/.env.development 文件:
# Mock模式配置
VITE_ENABLE_MOCK=true
VITE_API_URL=http://localhost:5320
VITE_GLOB_API_URL=http://localhost:5320
步骤3: 更新Mock菜单数据
修改 apps/backend-mock/utils/mock-data.ts,将完整的49个菜单项添加到MOCK_MENUS中:
export const MOCK_MENUS = [
{
menus: [
// 仪表板
{
name: 'Dashboard',
path: '/dashboard',
meta: { title: '仪表板', icon: 'lucide:home', order: 1 },
children: [
{
name: 'DashboardHome',
path: '/dashboard/home',
component: '/dashboard/home/index',
meta: { title: '首页' },
},
{
name: 'Analytics',
path: '/dashboard/analytics',
component: '/dashboard/analytics/index',
meta: { title: '数据分析' },
},
{
name: 'Workspace',
path: '/dashboard/workspace',
component: '/dashboard/workspace/index',
meta: { title: '工作台' },
},
],
},
// 账号管理
{
name: 'AccountManage',
path: '/account-manage',
meta: { title: '账号管理', icon: 'lucide:smartphone', order: 2 },
children: [
{
name: 'AccountUsageList',
path: '/account-manage/usage',
component: '/account-manage/usage/index',
meta: { title: 'TG账号用途' },
},
{
name: 'AccountList',
path: '/account-manage/list',
component: '/account-manage/list/index',
meta: { title: 'TG账号列表' },
},
{
name: 'TelegramUserList',
path: '/account-manage/telegram-users',
component: '/account-manage/telegram-users/index',
meta: { title: 'Telegram用户列表' },
},
{
name: 'UnifiedRegister',
path: '/account-manage/unified-register',
component: '/account-manage/unified-register/index',
meta: { title: '统一注册系统' },
},
],
},
// 继续添加其他37个菜单项...
],
username: 'admin',
},
];
步骤4: 修复认证流程
确保Mock模式下的登录用户名密码正确:
- 用户名:
admin - 密码:
123456(不是111111)
步骤5: 重启前端服务
# 停止当前前端服务
pkill -f "vite.*development"
# 重新启动前端
pnpm dev:antd
🧪 验证修复效果
自动化验证
重新运行菜单对比测试:
npx playwright test tests/menu-comparison.test.ts --headed
预期结果
- ✅ Mock模式菜单项数量: 49个
- ✅ 与后端模式差异: 0个
- ✅ 所有主要分类正常显示
- ✅ 登录流程正常工作
手动验证步骤
- 访问 http://localhost:5174
- 使用 admin/123456 登录
- 检查左侧菜单是否显示所有49个菜单项
- 验证各菜单分类是否完整
🔄 长期解决方案
1. 统一菜单配置管理
创建 shared/menu-config.ts:
export const UNIFIED_MENU_CONFIG = [
// 所有菜单的统一配置
// 同时供前端静态菜单和Mock后端使用
];
2. 自动化一致性检测
添加CI/CD流程中的菜单一致性检测:
# .github/workflows/menu-consistency.yml
- name: Menu Consistency Test
run: |
pnpm test:menu-comparison
pnpm test:mock-backend
3. 智能环境切换
实现自动检测后端可用性并切换模式:
const isBackendAvailable = await healthCheck();
if (!isBackendAvailable) {
enableMockMode();
}
📊 修复前后对比
| 状态 | 修复前 | 修复后 |
|---|---|---|
| 后端模式菜单 | 49个 | 49个 |
| Mock模式菜单 | 0个 | 49个 |
| 差异数量 | 49个 | 0个 |
| 一致性 | 0% | 100% |
| 可用性 | 部分可用 | 完全可用 |
⚠️ 注意事项
- 端口冲突: 确保5320端口未被占用
- 环境变量: 修改后需要重启前端服务
- 数据同步: 后续菜单变更需要同时更新两个数据源
- 测试覆盖: 每次菜单修改后都要运行对比测试
🎯 成功标准
修复完成后应该满足:
- Mock后端服务正常启动
- 环境变量正确配置
- Mock菜单数据完整(49个菜单项)
- 登录流程正常工作
- 前后端菜单100%一致
- 自动化测试全部通过
最后更新: 2025-07-31
修复优先级: 🔴 高优先级
预计修复时间: 2-4小时
负责人: 前端开发团队