125 lines
4.2 KiB
JavaScript
125 lines
4.2 KiB
JavaScript
console.log('=== 导航菜单修复工具 ===');
|
||
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
// 修复Layout.js中的菜单导航问题
|
||
function fixLayoutNavigation() {
|
||
console.log('\n1. 修复Layout.js菜单导航...');
|
||
const layoutPath = path.join(__dirname, 'src', 'renderer', 'components', 'Layout.js');
|
||
|
||
try {
|
||
// 读取Layout.js内容
|
||
let content = fs.readFileSync(layoutPath, 'utf8');
|
||
|
||
// 确保handleMenuClick函数正确实现
|
||
const oldHandleMenuClick = /function handleMenuClick\(\{ key \}\) \{[\s\S]*?navigate\(key\);[\s\S]*?\}/;
|
||
|
||
if (oldHandleMenuClick.test(content)) {
|
||
const newHandleMenuClick = `function handleMenuClick({ key }) {
|
||
console.log('菜单点击:', key);
|
||
try {
|
||
navigate(key);
|
||
console.log('导航成功到:', key);
|
||
} catch (error) {
|
||
console.error('导航失败:', error);
|
||
// 直接使用window.location作为备选方案
|
||
window.location.href = key;
|
||
}
|
||
}`;
|
||
|
||
content = content.replace(oldHandleMenuClick, newHandleMenuClick);
|
||
console.log('✅ 已增强菜单点击处理函数');
|
||
}
|
||
|
||
// 确保Menu组件配置正确
|
||
const oldMenuConfig = /<Menu[\s\S]*?selectedKeys={\[location\.pathname\]}/;
|
||
if (oldMenuConfig.test(content)) {
|
||
const newMenuConfig = '<Menu\n mode="inline"\n selectedKeys={[location.pathname]}\n items={menuItems}\n onClick={handleMenuClick}\n style={{ height: \'100%\', borderRight: 0 }}\n forceRender={true}\n autoOpenKeys={[]}';
|
||
|
||
content = content.replace(/<Menu[\s\S]*?style={{ height: '100%', borderRight: 0 }}>/, newMenuConfig);
|
||
console.log('✅ 已增强Menu组件配置');
|
||
}
|
||
|
||
// 备份并写入修复后的内容
|
||
fs.writeFileSync(layoutPath + '.backup', fs.readFileSync(layoutPath, 'utf8'));
|
||
fs.writeFileSync(layoutPath, content);
|
||
console.log('✅ Layout.js修复完成');
|
||
|
||
} catch (error) {
|
||
console.error('❌ 修复Layout.js失败:', error.message);
|
||
}
|
||
}
|
||
|
||
// 修复App.js中的路由配置
|
||
function fixAppRoutes() {
|
||
console.log('\n2. 修复App.js路由配置...');
|
||
const appPath = path.join(__dirname, 'src', 'renderer', 'App.js');
|
||
|
||
try {
|
||
// 确保路由配置正确
|
||
let content = fs.readFileSync(appPath, 'utf8');
|
||
|
||
// 增强错误处理和调试
|
||
const oldRenderTryBlock = /try \{[\s\S]*?return \([\s\S]*?<Routes>/;
|
||
|
||
if (oldRenderTryBlock.test(content)) {
|
||
const debugInfo = `// 添加路由调试
|
||
console.log('渲染路由配置');
|
||
window.__routesDebug = {
|
||
user: mockUser,
|
||
location: window.location.pathname,
|
||
timestamp: new Date().toISOString()
|
||
};`;
|
||
|
||
// 在return前添加调试信息
|
||
content = content.replace('return (\n <ConfigProvider locale={zhCN}>', `${debugInfo}\n return (\n <ConfigProvider locale={zhCN}>`);
|
||
console.log('✅ 已添加路由调试信息');
|
||
}
|
||
|
||
fs.writeFileSync(appPath + '.fix-backup', fs.readFileSync(appPath, 'utf8'));
|
||
fs.writeFileSync(appPath, content);
|
||
console.log('✅ App.js修复完成');
|
||
|
||
} catch (error) {
|
||
console.error('❌ 修复App.js失败:', error.message);
|
||
}
|
||
}
|
||
|
||
// 创建一个简单的启动脚本来测试修复
|
||
function createTestScript() {
|
||
try {
|
||
const testScriptContent = `
|
||
@echo off
|
||
chcp 65001
|
||
cd %~dp0
|
||
echo 测试导航菜单修复...
|
||
echo 请按F12打开开发者工具,查看控制台输出
|
||
npm start
|
||
pause
|
||
`;
|
||
|
||
fs.writeFileSync(path.join(__dirname, 'test-navigation.bat'), testScriptContent);
|
||
console.log('✅ 已创建测试脚本: test-navigation.bat');
|
||
|
||
} catch (error) {
|
||
console.error('❌ 创建测试脚本失败:', error.message);
|
||
}
|
||
}
|
||
|
||
// 主函数
|
||
function runFix() {
|
||
console.log('开始修复导航菜单问题...');
|
||
fixLayoutNavigation();
|
||
fixAppRoutes();
|
||
createTestScript();
|
||
|
||
console.log('\n=== 修复完成 ===');
|
||
console.log('1. 已增强菜单点击处理函数,添加错误处理和备选导航方案');
|
||
console.log('2. 已优化Menu组件配置');
|
||
console.log('3. 已添加详细的调试日志');
|
||
console.log('\n请运行 test-navigation.bat 测试修复效果');
|
||
console.log('修复思路: 增强导航错误处理,添加备选方案,便于调试');
|
||
}
|
||
|
||
runFix(); |